diff --git a/.changeset/objectstack-17-5-0.md b/.changeset/objectstack-17-5-0.md new file mode 100644 index 000000000..010deeaa3 --- /dev/null +++ b/.changeset/objectstack-17-5-0.md @@ -0,0 +1,119 @@ +--- +'hotcrm': minor +--- + +Upgrade the ObjectStack platform to 17.5.0 + +All 21 `@objectstack/*` dependencies move 17.4.0 → 17.5.0 together — 20 in +`dependencies`, `@objectstack/formula` in `devDependencies` — pinned exact, no +caret. `specVersion` and `engines.protocol` follow to `^17.5.0`, in +`objectstack.manifest.json` and in the stack manifest in `objectstack.config.ts`. +`pnpm-lock.yaml` was regenerated by `pnpm install` against the public registry: +726 `packages:` entries before, 725 after. 54 `@objectstack/*` and +`create-objectstack` keys moved 1:1, and `@objectstack/plugin-reports` left the +tree because the platform removed the saved-report stack. 15 third-party keys +moved: the eleven `better-auth` / `@better-auth/*` packages 1.7.2 → exact 1.7.3, +`nodemailer` 9.0.5 → 10.0.12 (a major, taken by `@objectstack/plugin-email` for +GHSA-6vj9-mwq6-2f5v), `zod` 4.4.3 → 4.6.5, `@xmldom/xmldom` 0.9.11 → 0.9.12, and +`yaml@2.9.0` dropped. `hono@4.13.11` was added next to `hono@4.13.3`, which the +MCP SDK still resolves through the kept lock entry. + +The platform changes that reached this app: + +- **Dashboard widgets no longer carry chart structure in `chartConfig`.** On a + dataset-bound widget, `@objectstack/spec@17.5.0` refuses `chartConfig.type`, + `xAxis`, `yAxis` and `series`. The widget's own `type`, `dimensions` and + `values` were always what the renderer read, so the stack would not load with + them. 34 keys are removed across the Sales Activity, CRM Overview, Sales + Performance and Service Overview dashboards. Every removed `type` and `field` + agreed with the widget's own binding, so no chart changes family or plots a + different column. **What readers will see:** the eight bar and area charts that + had axis titles (*Rep*, *Week*, *Month*, *Revenue*, *Channel*, …) now render + without them. The platform offers no replacement for an axis title on a + dataset-bound widget. Value formatting still comes from each measure's own + `format`. +- **The *Close Case* screen offers a real knowledge-article picker.** 17.5.0 adds + `reference` to screen fields and requires it on a `lookup` screen field. On + 17.4.0, *Resolved by Article (optional)* rendered as a plain text box asking + for an article id. The field now declares `reference: 'crm_knowledge_article'`, + the same target as the case's own `resolved_by_article` lookup. The + "Knowledge article id" placeholder is gone with the text box. +- **The Sales Home KPI cards state their filters as rule arrays.** The four + `object-metric` cards (*Revenue (Won)*, *Deals Won*, *Pipeline Value*, *Open + Leads*) wrote `filter` as a record. From 17.5.0, page and `object-*` filters + take only the `ViewFilterRule` array, and the platform converted the record + form on load. The source now says it in the accepted shape, as + `os migrate meta --from 17` lists. The numbers are unchanged. +- **Decision nodes are now exclusive by default. HotCRM needs no edit.** An + edge-branched `decision` with no `mode` now takes the first out-edge whose + condition holds, not every one of them. `os migrate meta --from 17` offers + `mode: 'inclusive'` on 13 of this app's decisions. Each of the 13 was checked + by hand, and in every one the out-edge conditions are exact complements, so + first-match runs exactly what every-true-edge ran. The key is deliberately not + written, as the platform's own migration note prescribes for partitioned + branches. +- **Scheduled flows are off until the deployment turns them on.** 17.5.0 runs + package-authored scheduled work only when `OS_AUTOMATION_SCHEDULED_WORK_ENABLED` + is set. HotCRM ships nine scheduled flows: contract and quote expiry, campaign + completion, forecast snapshot, stalled-deal alert, contract renewal, case SLA + monitor, task due reminder and demo bootstrap. **An operator who upgrades and + sets nothing runs none of them.** The admin *Automation* page now says so in + all three locales. Under the `isolated` posture a scheduled flow must also name + its organization, and these do not. +- **Six pages drop `assignedProfiles`. Who can open them does not change.** + `@objectstack/spec@17.5.0` removes `page.assignedProfiles` and refuses it. No + renderer, route or metadata read on 17.4.0 ever read the key, so the six pages + that set it were already open to every caller who could reach them. The pages + are *App Launcher*, *Sales Home*, *Utility Bar*, *Lead Detail*, *Opportunity + Detail* and *Case Detail*. Deleting the key keeps that behaviour. The platform + gates what a page shows through the object permission sets, which HotCRM + already declares. Two tests checked the retired key and are deleted with it. + One was "assignedProfiles name real profiles" in + `test/metadata-references.test.ts`. The other was "every related list is + readable by every profile its page is assigned to" in + `test/authorization-coverage.test.ts`. With no page able to declare the key, + both ran over zero pages and could no longer fail. +- **The contact form section *Account & Role* is now *Account & Title*.** + 17.5.0 adds the author-time rule `security-role-word`: "role" is a reserved + word in labels, because the platform no longer has a Role concept. The section + holds the contact's owner, account, job title and department, so the English + label now says *Title*. The Chinese, Japanese and Spanish labels already said + "job title" and are unchanged. +- **Detail pages and Sales Home carry translated copy for nested components.** + From 17.5.0, `os lint` checks the translation of every component in a page's + tree, not only the top-level ones. There are 14 new keys in each of zh-CN, + ja-JP and es-ES: + - the Account Detail title and subtitle, and its discussion panel; + - the details sections of Case, Lead and Opportunity; + - the Lead Detail related, activity and field-history panels; + - the three "My …" lists on Sales Home. + + These labels name the components. In a zh-CN browser check of Lead Detail on + 17.5.0 none of them is drawn as visible text: the visible headings come from + the tab items and the object's field groups, which were already translated. + So readers should see no change. The keys exist to satisfy the new lint rule. + `os i18n extract` scaffolds page keys only with `--no-objects-only`, since its + default covers objects alone. The i18n gate's failure hint now gives that + command instead of the bare one. +- **One driver test reads the withheld filter diagnostic.** 17.5.0's SQL + drivers no longer put caller-supplied operator and field names in the thrown + message of a refused filter. The full text rides on the error, and + `withheldFilterDiagnosticOf` reads it. The retired-`$regex` premise test now + checks two things. The public message says RETIRED and does not name the + operator. The withheld diagnostic still names `$regex`. +- **Claims that named 17.4.0 as the current pin are re-scoped**, not renumbered, + across source comments, tests and maintainer docs. Each now dates itself to the + pin it was measured on. None was re-measured on 17.5.0 in this change. Four + stale "current pin 17.3.0" claims that the 17.4.0 sweep missed are re-scoped + the same way. + +**Known issue on 17.5.0, fixed upstream but not yet released.** The *Products*, +*Knowledge Articles* and *Forecasts* default lists show +`Unknown field '[object Object]'` (`INVALID_FIELD`) in every group instead of +rows. On 17.5.0 the +console fetches grouped rows from the server, and the query it builds for a +view whose `columns` are objects sends the objects instead of field names. The +same views work on 17.4.0. HotCRM's views are valid and are left unchanged. The +fix is objectui#11105 (PR objectui#11119, merged). It reaches HotCRM with the +first platform release whose `@objectstack/console` carries it, and HotCRM then +needs only a pin bump. diff --git a/content/docs/administration/automation.mdx b/content/docs/administration/automation.mdx index eeb2e5104..7053983a7 100644 --- a/content/docs/administration/automation.mdx +++ b/content/docs/administration/automation.mdx @@ -98,6 +98,8 @@ See [Customization › Extending Objects](/docs/customization/extending-objects) Time-based automation is implemented as **scheduled flows** — flows whose start node carries a cron schedule. The nine `Schedule` rows above are the complete set; there is no separate scheduled-job metadata to look for. They run via the job service, so the `triggers` capability is paired with `job` (both ship in the default slate). +> **From ObjectStack 17.5.0, scheduled flows are off until the deployment turns them on.** The platform runs package-authored scheduled work only when the deployment sets `OS_AUTOMATION_SCHEDULED_WORK_ENABLED=true` (`1`, `on` and `yes` also count). Without it, none of the nine flows above runs — no contract or quote expiry, no SLA monitor, no reminders, no forecast snapshots — and `os doctor` prints the effective value. Under the `isolated` tenancy posture a scheduled flow must also name the organization it acts as; these nine do not, so they are not armed there. + Date-driven field logic that needs no orchestration — defaulting a quote's expiration date, freezing an expired/accepted quote, deriving a forecast period — lives in lightweight **object hooks** (`beforeInsert` / `beforeUpdate`) rather than a scheduled sweep. The division of labour on forecasts is worth calling out, because it is the pattern to copy: the **Forecast Snapshot** flow decides *who* gets a snapshot and *what the totals are*, while the forecast object's hook decides *which calendar period the snapshot belongs to*. A cron expression can say "every night"; it cannot say "the first day of this quarter", so that boundary is derived once, by the object, for every writer. diff --git a/content/docs/administration/automation.zh-Hans.mdx b/content/docs/administration/automation.zh-Hans.mdx index 882ef0d3f..8c6905078 100644 --- a/content/docs/administration/automation.zh-Hans.mdx +++ b/content/docs/administration/automation.zh-Hans.mdx @@ -98,6 +98,8 @@ description: 验证规则、流程、计划作业与审批 —— 无需你动 基于时间的自动化以 **计划类流程** 实现 —— 即起始节点带 cron 计划的流程。上表中九个 `计划` 行就是全部;不存在另一套需要另找的「计划作业」元数据。它们通过 job 服务运行,因此 `triggers` 能力需与 `job` 搭配(两者都在默认能力集中)。 +> **自 ObjectStack 17.5.0 起,计划类流程默认关闭,需由部署方开启。** 平台只在部署设置了 `OS_AUTOMATION_SCHEDULED_WORK_ENABLED=true`(`1`、`on`、`yes` 同样有效)时,才运行包内编写的计划类工作。不设置时,上表九个计划类流程一个都不会运行 —— 没有合同与报价的自动过期、没有 SLA 监控、没有提醒、没有预测快照;`os doctor` 会打印当前生效的取值。在 `isolated` 租户隔离模式下,计划类流程还必须声明它代表哪个组织运行;这九个流程都没有声明,因此在该模式下不会被挂载。 + 无需编排的日期驱动字段逻辑 —— 例如为报价设置默认过期日、冻结已过期/已接受的报价、推导预测周期 —— 放在轻量的 **对象钩子**(`beforeInsert` / `beforeUpdate`)中,而非计划清扫。 预测这一块的分工值得单独点出来,因为它正是要照抄的模式:**预测快照** 流程决定*谁*会拿到快照、*各项合计是多少*,而预测对象的钩子决定*这条快照属于哪个日历周期*。一条 cron 计划说得出「每晚」,却说不出「本季度的第一天」—— 所以这个周期边界由对象统一推导一次,供每个写入方共用。 diff --git a/content/docs/administration/automation.zh-Hant.mdx b/content/docs/administration/automation.zh-Hant.mdx index d01d8cec2..03615bc56 100644 --- a/content/docs/administration/automation.zh-Hant.mdx +++ b/content/docs/administration/automation.zh-Hant.mdx @@ -100,6 +100,8 @@ description: 驗證規則、流程、排程作業與審批 —— 無需你動 基於時間的自動化以 **排程類流程** 實作 —— 即起始節點帶 cron 排程的流程。上表中九個 `排程` 行就是全部;不存在另一套需要另找的「排程作業」中繼資料。它們透過 job 服務執行,因此 `triggers` 能力需與 `job` 搭配(兩者都在預設能力集中)。 +> **自 ObjectStack 17.5.0 起,排程類流程預設關閉,需由部署方開啟。** 平台只在部署設定了 `OS_AUTOMATION_SCHEDULED_WORK_ENABLED=true`(`1`、`on`、`yes` 同樣有效)時,才執行套件內撰寫的排程類工作。未設定時,上表九個排程類流程一個都不會執行 —— 沒有合約與報價的自動到期、沒有 SLA 監控、沒有提醒、沒有預測快照;`os doctor` 會列印目前生效的取值。在 `isolated` 租戶隔離模式下,排程類流程還必須宣告它代表哪個組織執行;這九個流程都沒有宣告,因此在該模式下不會被掛載。 + 無需編排的日期驅動欄位邏輯 —— 例如為報價設定預設過期日、凍結已過期/已接受的報價、推導預測週期 —— 放在輕量的 **物件鉤子**(`beforeInsert` / `beforeUpdate`)中,而非排程清掃。 預測這一塊的分工值得單獨點出來,因為它正是要照抄的模式:**預測快照** 流程決定*誰*會拿到快照、*各項合計是多少*,而預測物件的鉤子決定*這筆快照屬於哪個日曆週期*。一條 cron 排程說得出「每晚」,卻說不出「本季的第一天」—— 所以這個週期邊界由物件統一推導一次,供每個寫入方共用。 diff --git a/content/docs/sales/contacts.mdx b/content/docs/sales/contacts.mdx index ae2dcb9ec..350824487 100644 --- a/content/docs/sales/contacts.mdx +++ b/content/docs/sales/contacts.mdx @@ -14,7 +14,7 @@ The contact detail screen has 7 collapsible sections: | Section | Fields | | --- | --- | | **Identity** | Salutation, first name, last name, full name, profile picture | -| **Account & Role** | Contact owner, account, job title, department | +| **Account & Title** | Contact owner, account, job title, department | | **Buying Centre** | Buying function, attitude to us, relationship strength — see [The Buying Centre](./buying-centre) | | **Contact Information** | Email, phone, mobile | | **Mailing Address** | Mailing street, city, state/province, postal code and country — five separate fields | diff --git a/content/docs/whats-new.mdx b/content/docs/whats-new.mdx index 80e6b5caa..3497e1b55 100644 --- a/content/docs/whats-new.mdx +++ b/content/docs/whats-new.mdx @@ -71,6 +71,10 @@ http://localhost:4001 and create the first admin account. refuses the load up front with a structured diagnostic instead of failing deep in a schema parse. +Since 3.1.0 was cut, the app has moved to **ObjectStack 17.5.0** (manifest range +`^17.5.0`). That move ships with the next HotCRM release; until then, 3.1.0 is the +release that runs on 17.4.0. + > **This page does not keep a second release table.** The release-by-release > history is `CHANGELOG.md` in the repository, compiled from the `.changeset/` > entry every pull request adds. The versions between v1.0 and 3.1.0 are diff --git a/content/docs/whats-new.zh-Hans.mdx b/content/docs/whats-new.zh-Hans.mdx index feba13239..ce5c544b0 100644 --- a/content/docs/whats-new.zh-Hans.mdx +++ b/content/docs/whats-new.zh-Hans.mdx @@ -51,6 +51,9 @@ HOTCRM_TOKEN=... ./scripts/wow1-live-schema.sh 应用清单声明了与之匹配的 `^17.4.0` 协议区间,因此协议大版本不同的运行时会在 装载之初就带着结构化诊断拒绝加载,而不是在某次 schema 解析的深处才失败。 +3.1.0 发布之后,应用已迁移到 **ObjectStack 17.5.0**(清单区间 `^17.5.0`)。这次迁移随下一个 +HotCRM 版本发布;在那之前,运行在 17.4.0 上的发布版本仍是 3.1.0。 + > **这一页不维护第二张发布表。** 逐版本的发布历史在仓库的 `CHANGELOG.md` 里,由每个 > 拉取请求补充的 `.changeset/` 条目编译而成。v1.0 与 3.1.0 之间的各个版本都记录在那里, > 这里刻意不再重列一遍 —— 手工誊抄那份历史,正是这一节最终会宣称一个从来不曾存在过的 diff --git a/content/docs/whats-new.zh-Hant.mdx b/content/docs/whats-new.zh-Hant.mdx index 225917775..868b10c5d 100644 --- a/content/docs/whats-new.zh-Hant.mdx +++ b/content/docs/whats-new.zh-Hant.mdx @@ -53,6 +53,9 @@ HOTCRM_TOKEN=... ./scripts/wow1-live-schema.sh 應用清單宣告了與之相符的 `^17.4.0` 協定區間,因此協定大版本不同的執行時會在 載入之初就帶著結構化診斷拒絕載入,而不是在某次 schema 解析的深處才失敗。 +3.1.0 發行之後,應用已遷移到 **ObjectStack 17.5.0**(清單區間 `^17.5.0`)。這次遷移隨下一個 +HotCRM 版本發行;在那之前,執行在 17.4.0 上的發行版本仍是 3.1.0。 + > **這一頁不維護第二張發行表。** 逐版本的發行歷史在儲存庫的 `CHANGELOG.md` 裡,由每個 > 拉取請求補上的 `.changeset/` 條目編譯而成。v1.0 與 3.1.0 之間的各個版本都記錄在那裡, > 這裡刻意不再重列一遍 —— 手工謄抄那份歷史,正是這一節最終會宣稱一個從來不曾存在過的 diff --git a/docs/STATUS.md b/docs/STATUS.md index c95cd1e3d..12a82e571 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -73,7 +73,7 @@ pnpm verify | --- | --- | | Node.js | `^22.11 \|\| ^24 \|\| >=26` | | pnpm | `>=10.0.0` | -| ObjectStack packages | `17.4.0` | +| ObjectStack packages | `17.5.0` | | Local dev port | `4001` | Each row above is asserted against `package.json` (`engines`, the `@objectstack/*` diff --git a/docs/architecture/module-split-plan.md b/docs/architecture/module-split-plan.md index 0af56a29c..7482e9c3d 100644 --- a/docs/architecture/module-split-plan.md +++ b/docs/architecture/module-split-plan.md @@ -173,8 +173,8 @@ navigationContributions: [ ``` The shape was first read off `ManifestSchema` in `@objectstack/spec` 17.2.0 — the -version this repo pinned when this plan was measured — and RE-READ on the current pin, -17.4.0 since PR #1814 (#1807), during #1883: +version this repo pinned when this plan was measured — and RE-READ on 17.4.0 (PR #1814, +#1807), the pin during #1883: `{ app, group?, priority, items }`, unchanged, with `priority` optional (it defaults to `200`). ⚠️ One thing the 17.2.0 reading did not record: `app` is validated as a bare snake_case identifier (`/^[a-z][a-z0-9_]*$/`), so the dotted manifest id used in the @@ -358,9 +358,10 @@ would otherwise slug the heading to `#上游缺口--upstream-gaps` — the exact [objectstack#14439](https://github.com/objectstack-ai/objectstack/issues/14439), in flight. - Studio's writable verdict — [objectstack#14430](https://github.com/objectstack-ai/objectstack/issues/14430). -- An objectstack release carrying both, and the version bump in this repository. HotCRM is - pinned to `@objectstack/*` 17.4.0 today (PR #1814, #1807; this plan's own measurements - were taken at the 17.2.0 pin and are labelled as such). Merged upstream is not the same as available +- An objectstack release carrying both, and the version bump in this repository. HotCRM was + pinned to `@objectstack/*` 17.4.0 when this was written (PR #1814, #1807) and moved to 17.5.0 + after it (this plan's own measurements were taken at the 17.2.0 pin and are labelled as such). + Merged upstream is not the same as available in the pin (AGENTS.md, *Platform Upgrades*). **New, found by this analysis — for the PM to file upstream.** None of these is worked around @@ -565,7 +566,7 @@ decisions left to the compile path and this ruling settles. - **PSA** follows as `src/psa/` (`psa-module-plan.md`). The three upstream blockers under *上游缺口* are no longer the reason to wait: the compile -path and per-package registration are carried by the 17.4.0 pin, and the Studio writable +path and per-package registration are carried from the 17.4.0 pin on, and the Studio writable verdict does not gate a module booted from an artifact — the version table in `psa-module-plan.md`, *Where PSA sits*, cites the changelog entries. PR 1 is still the measurement that proves it here. diff --git a/objectstack.config.ts b/objectstack.config.ts index dc0e56712..d4cd3933d 100644 --- a/objectstack.config.ts +++ b/objectstack.config.ts @@ -93,7 +93,7 @@ export default defineStack({ // enforces that pairing against `objectstack.manifest.json` instead of // trusting this comment, because two platform upgrades in a row (rc.2, then // rc.3) moved the manifest and left this line behind (#728). - engines: { protocol: '^17.4.0' }, + engines: { protocol: '^17.5.0' }, }, // ─── Platform capabilities this app needs ───────────────────────── diff --git a/objectstack.manifest.json b/objectstack.manifest.json index 2269405f3..f8ee1a01a 100644 --- a/objectstack.manifest.json +++ b/objectstack.manifest.json @@ -1,9 +1,9 @@ { "$schema": "https://schemas.objectstack.dev/template-manifest.json", "name": "hotcrm", - "specVersion": "^17.4.0", + "specVersion": "^17.5.0", "engines": { - "protocol": "^17.4.0" + "protocol": "^17.5.0" }, "manifestId": "app.objectstack.hotcrm", "displayName": "HotCRM", diff --git a/package.json b/package.json index a366885f3..80856b5c3 100644 --- a/package.json +++ b/package.json @@ -36,33 +36,33 @@ }, "packageManager": "pnpm@10.33.0", "dependencies": { - "@objectstack/account": "17.4.0", - "@objectstack/cli": "17.4.0", - "@objectstack/core": "17.4.0", - "@objectstack/driver-memory": "17.4.0", - "@objectstack/driver-sql": "17.4.0", - "@objectstack/driver-sqlite-wasm": "17.4.0", - "@objectstack/metadata": "17.4.0", - "@objectstack/objectql": "17.4.0", - "@objectstack/platform-objects": "17.4.0", - "@objectstack/plugin-approvals": "17.4.0", - "@objectstack/plugin-auth": "17.4.0", - "@objectstack/plugin-security": "17.4.0", - "@objectstack/plugin-sharing": "17.4.0", - "@objectstack/runtime": "17.4.0", - "@objectstack/service-analytics": "17.4.0", - "@objectstack/service-automation": "17.4.0", - "@objectstack/service-messaging": "17.4.0", - "@objectstack/service-storage": "17.4.0", - "@objectstack/spec": "17.4.0", - "@objectstack/trigger-record-change": "17.4.0" + "@objectstack/account": "17.5.0", + "@objectstack/cli": "17.5.0", + "@objectstack/core": "17.5.0", + "@objectstack/driver-memory": "17.5.0", + "@objectstack/driver-sql": "17.5.0", + "@objectstack/driver-sqlite-wasm": "17.5.0", + "@objectstack/metadata": "17.5.0", + "@objectstack/objectql": "17.5.0", + "@objectstack/platform-objects": "17.5.0", + "@objectstack/plugin-approvals": "17.5.0", + "@objectstack/plugin-auth": "17.5.0", + "@objectstack/plugin-security": "17.5.0", + "@objectstack/plugin-sharing": "17.5.0", + "@objectstack/runtime": "17.5.0", + "@objectstack/service-analytics": "17.5.0", + "@objectstack/service-automation": "17.5.0", + "@objectstack/service-messaging": "17.5.0", + "@objectstack/service-storage": "17.5.0", + "@objectstack/spec": "17.5.0", + "@objectstack/trigger-record-change": "17.5.0" }, "optionalDependencies": { "better-sqlite3": "^12.11.1" }, "devDependencies": { "@changesets/cli": "^3.0.3", - "@objectstack/formula": "17.4.0", + "@objectstack/formula": "17.5.0", "@playwright/test": "^1.63.0", "@vitest/coverage-v8": "^4.1.10", "fumadocs-core": "16.9.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7026de0de..54c71fef7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,72 +9,72 @@ importers: .: dependencies: '@objectstack/account': - specifier: 17.4.0 - version: 17.4.0(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(vitest@4.1.10) '@objectstack/cli': - specifier: 17.4.0 - version: 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) '@objectstack/core': - specifier: 17.4.0 - version: 17.4.0 + specifier: 17.5.0 + version: 17.5.0 '@objectstack/driver-memory': - specifier: 17.4.0 - version: 17.4.0 + specifier: 17.5.0 + version: 17.5.0 '@objectstack/driver-sql': - specifier: 17.4.0 - version: 17.4.0 + specifier: 17.5.0 + version: 17.5.0 '@objectstack/driver-sqlite-wasm': - specifier: 17.4.0 - version: 17.4.0(better-sqlite3@12.11.1) + specifier: 17.5.0 + version: 17.5.0(better-sqlite3@12.11.1) '@objectstack/metadata': - specifier: 17.4.0 - version: 17.4.0(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(vitest@4.1.10) '@objectstack/objectql': - specifier: 17.4.0 - version: 17.4.0(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(vitest@4.1.10) '@objectstack/platform-objects': - specifier: 17.4.0 - version: 17.4.0(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(vitest@4.1.10) '@objectstack/plugin-approvals': - specifier: 17.4.0 - version: 17.4.0(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(vitest@4.1.10) '@objectstack/plugin-auth': - specifier: 17.4.0 - version: 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@12.11.1)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@12.11.1)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) '@objectstack/plugin-security': - specifier: 17.4.0 - version: 17.4.0(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(vitest@4.1.10) '@objectstack/plugin-sharing': - specifier: 17.4.0 - version: 17.4.0(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(vitest@4.1.10) '@objectstack/runtime': - specifier: 17.4.0 - version: 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@12.11.1)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@12.11.1)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) '@objectstack/service-analytics': - specifier: 17.4.0 - version: 17.4.0 + specifier: 17.5.0 + version: 17.5.0 '@objectstack/service-automation': - specifier: 17.4.0 - version: 17.4.0(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(vitest@4.1.10) '@objectstack/service-messaging': - specifier: 17.4.0 - version: 17.4.0(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(vitest@4.1.10) '@objectstack/service-storage': - specifier: 17.4.0 - version: 17.4.0(vitest@4.1.10) + specifier: 17.5.0 + version: 17.5.0(vitest@4.1.10) '@objectstack/spec': - specifier: 17.4.0 - version: 17.4.0 + specifier: 17.5.0 + version: 17.5.0 '@objectstack/trigger-record-change': - specifier: 17.4.0 - version: 17.4.0 + specifier: 17.5.0 + version: 17.5.0 devDependencies: '@changesets/cli': specifier: ^3.0.3 version: 3.0.3 '@objectstack/formula': - specifier: 17.4.0 - version: 17.4.0 + specifier: 17.5.0 + version: 17.5.0 '@playwright/test': specifier: ^1.63.0 version: 1.63.0 @@ -83,7 +83,7 @@ importers: version: 4.1.10(vitest@4.1.10) fumadocs-core: specifier: 16.9.3 - version: 16.9.3(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(zod@4.4.3) + version: 16.9.3(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(zod@4.6.5) remark: specifier: ^15.0.1 version: 15.0.1 @@ -134,8 +134,8 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@better-auth/core@1.7.2': - resolution: {integrity: sha512-j0nM4ygsWbF/fcYRoKtDn8gn8uLXkmC+075HqSqsJEAV828cJR9bvYBCUQ1zmxNyRBk6Iz/qXsA0Zm2oksiOTg==} + '@better-auth/core@1.7.3': + resolution: {integrity: sha512-JdP7lOkyE83jgjn7RilJj1XvZ7n2JjRsErKJuaXchjyuNo6cf1iVd3GtbhAtiUyJJkWdk8yL+LaUBKT80H0zLA==} peerDependencies: '@better-auth/utils': 0.4.2 '@better-fetch/fetch': 1.3.1 @@ -151,55 +151,55 @@ packages: '@opentelemetry/api': optional: true - '@better-auth/drizzle-adapter@1.7.2': - resolution: {integrity: sha512-A5wE10PIv3aS5LGePecEHntQylKy6OOF17B4dqlE0DwJeqU/IOBSd7/LZhMop9cNJ3WFjKMpazVSf91yYM/NFg==} + '@better-auth/drizzle-adapter@1.7.3': + resolution: {integrity: sha512-S+nQRlxbUhkR43LrSv8c98ZvOvmv3nrtOnHkiZXkdDkr60PWp7maC2cqgzZ2C9exCC1a+4TugJlx2jRL+r+/9A==} peerDependencies: - '@better-auth/core': ^1.7.2 + '@better-auth/core': ^1.7.3 '@better-auth/utils': 0.4.2 drizzle-orm: ^0.45.2 || >=1.0.0-rc.1 <2.0.0 peerDependenciesMeta: drizzle-orm: optional: true - '@better-auth/kysely-adapter@1.7.2': - resolution: {integrity: sha512-LYdSRLOvZiF+6S0UThu+wE/Qxsq9P2jQs7ZKkY6BIBJqUjYyxVDmi8HFcantBvWWW1/BeQCSsD7YVDG4gICMIQ==} + '@better-auth/kysely-adapter@1.7.3': + resolution: {integrity: sha512-UIsyJMIrjUnT+yTaS6dkCxYYmtPwxFHxwSJ8+CLty2II5w9BewlDxDA0/QzhoL/InYCPxQ5Y6xIgLHZG1dhwRA==} peerDependencies: - '@better-auth/core': ^1.7.2 + '@better-auth/core': ^1.7.3 '@better-auth/utils': 0.4.2 kysely: ^0.28.17 || ^0.29.0 peerDependenciesMeta: kysely: optional: true - '@better-auth/memory-adapter@1.7.2': - resolution: {integrity: sha512-0q1SXMzm5esH9L0xVuM6IxCk59E4G+3HySX4My9gvEwqtmUobykn+iuc/si3Y4xwUO7JODqQ5o+/pPcLDDMIrA==} + '@better-auth/memory-adapter@1.7.3': + resolution: {integrity: sha512-WdLANFY/QWC3G351RCzxU+Y9YlW+BQ1oG9NwBTSOUWQw5rZ87ws+weU8tvAMO7sQ4C9gKIlkOKBKUKXrSt91Tw==} peerDependencies: - '@better-auth/core': ^1.7.2 + '@better-auth/core': ^1.7.3 '@better-auth/utils': 0.4.2 - '@better-auth/mongo-adapter@1.7.2': - resolution: {integrity: sha512-4879SmUWHUs0OYlvHoCFbycZ7i1bqytkcgAUdt9RLQMvZ5H3LRMTgax2YVlGZEXgwNjY/X7xAoXOecWLhlQWeA==} + '@better-auth/mongo-adapter@1.7.3': + resolution: {integrity: sha512-YL9m01tNogmFmRvOWJ46M9WwE6HirCXHDell29mtsQB/Qs1TPNLrgj7ybGMMGhQuyj6S218+8Wbls8m9s+i8RQ==} peerDependencies: - '@better-auth/core': ^1.7.2 + '@better-auth/core': ^1.7.3 '@better-auth/utils': 0.4.2 mongodb: ^6.0.0 || ^7.0.0 peerDependenciesMeta: mongodb: optional: true - '@better-auth/oauth-provider@1.7.2': - resolution: {integrity: sha512-td7FnUz3lLKXFXN+0RbZe3ygaHqxpRqDG+gxbfSZbztbVfG7vuZtR4ba3uccsodAw7anchhIg2xwVP1/zlcxcw==} + '@better-auth/oauth-provider@1.7.3': + resolution: {integrity: sha512-Eoajj68F1ETmp4NBM98tgj1Uiip4cZiFqFsijAWIvOEQTejr/67PWK1/92N8PiNdLf03ezUWU538W93rd9fyIw==} peerDependencies: - '@better-auth/core': ^1.7.2 + '@better-auth/core': ^1.7.3 '@better-auth/utils': 0.4.2 '@better-fetch/fetch': 1.3.1 - better-auth: ^1.7.2 + better-auth: ^1.7.3 better-call: 1.4.0 - '@better-auth/prisma-adapter@1.7.2': - resolution: {integrity: sha512-mXTr/83WrNWLrvzIjtgDgdu9iXhOcSG1+qBQOAKlbGSFiOB+z4IMRneQ2wmMOiB8mKY9qGkClVUjKRFXqtHnFQ==} + '@better-auth/prisma-adapter@1.7.3': + resolution: {integrity: sha512-TJ/DhlU7oLzrC626/1wfYA1Pl+lVsXa/zXBZ8d7Rlc2YO5fGd5fsAYJdRrYMyA51iZEo+rWLXMhZ0cez1BamsQ==} peerDependencies: - '@better-auth/core': ^1.7.2 + '@better-auth/core': ^1.7.3 '@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 @@ -209,27 +209,27 @@ packages: prisma: optional: true - '@better-auth/scim@1.7.2': - resolution: {integrity: sha512-RBwVN189w37xwK0n+mRgARTmJFCriOsMVCbe7Bzeyak6esSg9kTGeCUmGtfgwOKJ3jJWQkeAQdWw7VRJ/HOG6w==} + '@better-auth/scim@1.7.3': + resolution: {integrity: sha512-1/L7zIEUAb1jxlzWKkqbDAD4Jz7u83yZg15TSaIaKcFe1dpCdNxkzQRrjbPLUfnVtBh/vnk10uLxVFCtbMdrdg==} peerDependencies: - '@better-auth/core': ^1.7.2 + '@better-auth/core': ^1.7.3 '@better-auth/utils': 0.4.2 - better-auth: ^1.7.2 + better-auth: ^1.7.3 better-call: 1.4.0 - '@better-auth/sso@1.7.2': - resolution: {integrity: sha512-8tmkAGdcVu8Tr/+LPfSRgs/5a8YE1uU8OeaN5mAzsSdMWR4iwZdwQlJJmU8f9qZyIpNL/B6mIfDc5vaVUy1ECQ==} + '@better-auth/sso@1.7.3': + resolution: {integrity: sha512-inxETRuOfyy8m0uEJSfi9uhScp4RkQ7ZYI+GRj+Jtz6ml/p5wTzNOjYZsG43TroUTDfrElF6CYQON5/Xk1XdmA==} peerDependencies: - '@better-auth/core': ^1.7.2 + '@better-auth/core': ^1.7.3 '@better-auth/utils': 0.4.2 '@better-fetch/fetch': 1.3.1 - better-auth: ^1.7.2 + better-auth: ^1.7.3 better-call: 1.4.0 - '@better-auth/telemetry@1.7.2': - resolution: {integrity: sha512-LcWu+O0zrxYDQj8E36vfkJwGPW4k9ZDA/rCo0zST6ihzL+juR7pBowoZIM9E6tK0Vit52mf6412bGT4XM4eTjQ==} + '@better-auth/telemetry@1.7.3': + resolution: {integrity: sha512-aixgHbJhGvS8PRczX/LR3murYyBnIvOGmJw37ZZBMg6ZtLR/UBJAkufbDi1HYn5THSuTJ3D5DtY85Ahh/ABQtw==} peerDependencies: - '@better-auth/core': ^1.7.2 + '@better-auth/core': ^1.7.3 '@better-auth/utils': 0.4.2 '@better-fetch/fetch': 1.3.1 @@ -563,45 +563,45 @@ packages: '@nodable/entities@3.0.0': resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==} - '@objectstack/account@17.4.0': - resolution: {integrity: sha512-VrdHnwBzLrcE+nGVFKpQRdaCnE9gcPJrZWEfYFobvAA9i0Rna4qW+b8CNnZGHAwCHguZPjULA9PPQ6gddUakWQ==} + '@objectstack/account@17.5.0': + resolution: {integrity: sha512-o1lhpPoqX/NudUfdUAraXQuhzIOp+YC/vng+TGWk+sEq4MnhtV70g+wsuF+K5QxT2mqf8/A68CHtJT/YKRkLVQ==} engines: {node: '>=22.0.0'} - '@objectstack/cli@17.4.0': - resolution: {integrity: sha512-w1enDeHRS7ai2XzH47x5poYdf6qwDhfDCnNErSiib5vpaG87JDf+JOlT/QoVEyW1i3ruovlftTwpYUBEIqWEnA==} + '@objectstack/cli@17.5.0': + resolution: {integrity: sha512-KW8Thc++S7icdsbAwlBxa1jJa26aBXUmOBa9CLftyHqKnt8sJ2PmDmu+XbJAEkto9+s6OufDL/BdH+f4I8Be8A==} engines: {node: '>=22.0.0'} hasBin: true peerDependencies: - '@objectstack/driver-turso': ^17.4.0 + '@objectstack/driver-turso': ^17.5.0 peerDependenciesMeta: '@objectstack/driver-turso': optional: true - '@objectstack/client@17.4.0': - resolution: {integrity: sha512-4Zsov0iRcZhaYAGiabX2XJPhDsE6XmRhlfYikxLECZ1cxbHhXjVpsNL3rl56wkTHuNV1jMzZZwzj2rJJUbVYcQ==} + '@objectstack/client@17.5.0': + resolution: {integrity: sha512-RT8CoPw7v+ejADcK1NJRD/1rHOQJMKC+rL7SjTvEqI+Cfxulz3K4NSgILpyPZMaic72O6DWiWSNueNiFp/7W1g==} engines: {node: '>=22.0.0'} - '@objectstack/cloud-connection@17.4.0': - resolution: {integrity: sha512-WVIv57eXWoFlpkRWpUZdWQo7XG1Dxwij1HFcTvigACvAIbxwPnVXlt0bqOHCjagfdGHNfUdzutnA1LijfvGfHg==} + '@objectstack/cloud-connection@17.5.0': + resolution: {integrity: sha512-/zT7/33xSsgNUOZAfN71PtRP87+5XbkJ3fwQAzKR2b93h8XGmayCSktIq4apq/FG2c9WgSkqC8Xo3at/bK3iPQ==} engines: {node: '>=22.0.0'} - '@objectstack/console@17.4.0': - resolution: {integrity: sha512-TL8Kgw7PsJHyMK0+RGRQu7KWwuEQjhL87rUOg5rwC+G4dDIsyi/oZYQSjvf5+Nw0W51/A1rw7iIciyoLfQycTw==} + '@objectstack/console@17.5.0': + resolution: {integrity: sha512-rTZWCi5sL4cZPARgeVbyc4b5wGfkNdcqr54NQpLEszR2dP6jRiyQV/7mPknngt+EqfhuhEYmy7s3Ji6lXsnVLA==} - '@objectstack/core@17.4.0': - resolution: {integrity: sha512-e/br10MaIZAJGgD7pb9AnW8zn9I18aJyiUYswMQGdjGheZYpp98ZV3WlAVpZFhnKkfd42VDMltB+X494oB8/1Q==} + '@objectstack/core@17.5.0': + resolution: {integrity: sha512-KYVVHoqDQZzqvCD7B1REAnQc80ZeimrkSryaGvPfQc2bdurvTOjtubGXw2IkQsh3g2Gh0RD9QzohteEU7C1DFg==} engines: {node: '>=22.0.0'} - '@objectstack/driver-memory@17.4.0': - resolution: {integrity: sha512-BRldy/el8QfusgJYvN1PjnAfAD1fmKqJgvOPKRHRnp68azfBYmUqGLrSV+/p8Ut4IMGVFpsRTg8L1DkYGY5MoA==} + '@objectstack/driver-memory@17.5.0': + resolution: {integrity: sha512-MBaMzbXGo5SP5ycpahPzg7FDNoAJrv3HXHkFmqcZz0Yi2Pn4Xncc9+nTlExXfiTRAW+dOVJmXM0viFQqqOkYGA==} engines: {node: '>=22.0.0'} - '@objectstack/driver-mongodb@17.4.0': - resolution: {integrity: sha512-92n6r0eqrLbegtH5AO8IDrOCsF8C688fYG2ovqDTeD2UNGkHhsZ7DmBO3lpDEMKYbwKtG3R1ro0V1cQ4KsqP8A==} + '@objectstack/driver-mongodb@17.5.0': + resolution: {integrity: sha512-CP8qR1OhRFGNgAA1Qul1jWTZS9lK/uiUfN6DBBrA9QOcIuXX30u7DOSMGVWwgNSlyj4W4RqEfEd1nN5YluC3Cw==} engines: {node: '>=22.0.0'} - '@objectstack/driver-sql@17.4.0': - resolution: {integrity: sha512-63up0U1AUQQKhnDqADTih9HJVfATkl5BAeAx1MXHYQJuAmP2EQnMxQDDiumwSh819mj7c8IxLpyGiy8/TcbogA==} + '@objectstack/driver-sql@17.5.0': + resolution: {integrity: sha512-F8XaUaO327kh1C9ju40Pr2sW/t2ne2kNHgx94U7nMYXnZ6k9wRM/aNPNEA0id2tm+d2oLXcmoN6Jj9KGUPFKLg==} engines: {node: '>=22.0.0'} peerDependencies: mysql2: ^3.0.0 @@ -615,23 +615,23 @@ packages: tedious: optional: true - '@objectstack/driver-sqlite-wasm@17.4.0': - resolution: {integrity: sha512-jI7e3gIy65dfcw3X6PAsCL5yx9bXliso3VDaaEsglQrXW+ixLV+x0vRguk/Xa9BVv53/ntwbMryDGdDF0an02w==} + '@objectstack/driver-sqlite-wasm@17.5.0': + resolution: {integrity: sha512-ML2lIgvY1J4eqY5s3vMun1EIuYOFzAxPNbnmO5qGqHyzUT9AnflQF6lNmnOdPbuSc8Y+8TMRyXx2VmS+tlK0VQ==} engines: {node: '>=22.0.0'} - '@objectstack/formula@17.4.0': - resolution: {integrity: sha512-pWVkvXKXJxjnsx1i7mYIteltc6kjn/qS6swJ6bw5XG5B7bf8GjjBsuvcJR86nuTg+z8B9+snruaD9i9v8uw0LQ==} + '@objectstack/formula@17.5.0': + resolution: {integrity: sha512-2vot7CS7++4vuxOJ3fyWVUPOut+/oejJT1YbLwyyyVDxj4WjZ3tJqEk+WGRqNunwYbd3CTk7jrtMo7SRzF7+Xg==} - '@objectstack/lint@17.4.0': - resolution: {integrity: sha512-9Lst+TDusPVh3Fb1gxDPSsXpAFrkEIlusqLzBsCKQ0ebLaHxG2GrfMXQofDTox9vr7jOVSAKCW5jkHUmg5XpoA==} + '@objectstack/lint@17.5.0': + resolution: {integrity: sha512-sXNgX4PFAMwo5q7xRqUfTEBUE5OKStYQwmFqdwDDN5Zir8JRJi9z2cN1D42h9PciR4Y9+Qum0z9gOKgS6o0jsw==} engines: {node: '>=22.0.0'} - '@objectstack/mcp@17.4.0': - resolution: {integrity: sha512-EKvEKF9t2HjjoZPCwe7mqvMVzIKqxiYctWq95wdHqUWp4ERL2kEm4bfQKXj07AgnAZxT7WrRcqGdOdxZStEfPg==} + '@objectstack/mcp@17.5.0': + resolution: {integrity: sha512-e7T9to+D9frpAQV781Q7HVOL2uXpiboen8bxmNLNxHO1JTO7cdr7po9QVMBkqcu+Z6EAUv6MeVHojfR9ST1I8g==} engines: {node: '>=22.0.0'} - '@objectstack/metadata-core@17.4.0': - resolution: {integrity: sha512-zhQpw/FUK2UOjKWHY2x5k43h4NXRiVJZ2tnkl3iu1j/akbn6Bik73p8OVzEHO7IvpEmY821lfRp/235yTqZWAw==} + '@objectstack/metadata-core@17.5.0': + resolution: {integrity: sha512-bZeuYq4ChkmTLvjTVrErIFMiv3qC4DwNrSEBDyoCSkC4VqH9w0dp0hCzzFKtzY+hX3gImdtsl9U/Tb15HQwT3w==} engines: {node: '>=22.0.0'} peerDependencies: vitest: ^4.0.0 @@ -639,101 +639,98 @@ packages: vitest: optional: true - '@objectstack/metadata-fs@17.4.0': - resolution: {integrity: sha512-lVpVc/XBnrAWukmq5jmihDNDjf44Udopu7olYH7PacInghjdwZA+wMU4tHGNBiGJuRVjrIebcsfIxJ5o4+p4pA==} + '@objectstack/metadata-fs@17.5.0': + resolution: {integrity: sha512-+TOPgEXqaALTkd/P0cYUtmMGPdUQkHo37FbTGbAlLhAdT7fuUNXAuWG4i8F4R2INxoyEjsOPaxy1WVuoH9e6Xw==} engines: {node: '>=22.0.0'} - '@objectstack/metadata-protocol@17.4.0': - resolution: {integrity: sha512-iYHlxxKhi7t/C/i602fX9x+D/c9f2ElwdtfEUgyzf8DkZIrYel7e7Ayoincahm9xlWSlD4Ijjl3cBElnhrvJrQ==} + '@objectstack/metadata-protocol@17.5.0': + resolution: {integrity: sha512-yC0vJptIc0PfJZK5RWiNnFK9/c+BX7iEs5QU79ZkuRvwXrfYD+WOF2yADQOKY21opGESHCXUoeds7gysbtiRRg==} engines: {node: '>=22.0.0'} - '@objectstack/metadata@17.4.0': - resolution: {integrity: sha512-GQvja5+iClxhBxnX01DQvMc+JMKIFpA7/kYzgAqIdbNZ13l8OuIkP3ADwCmlBrwDid7bkkDNOCD8eYvXr5/E6A==} + '@objectstack/metadata@17.5.0': + resolution: {integrity: sha512-CpPsFzpOA1jArwsUVPZK960aM7T2XEeuX/O9OGDhtxYLcOG4/lHB+CizW2ncNNUlEed2oFMCX3KRdhBf5yljlw==} engines: {node: '>=22.0.0'} - '@objectstack/objectql@17.4.0': - resolution: {integrity: sha512-b7LNj/7BUILbmz1sHgxEVEDk2DJXAPYEuIEp5t/VzQz9vz9iAiENJow3QBvCwCcnWYD7n62dVhHDDFicMtbLsw==} + '@objectstack/objectql@17.5.0': + resolution: {integrity: sha512-1M6bX2X20ewJIBqLVqQmvHccY3JZ+hXOsZDQ8tAeeurHr71WleeDfccWnQgwYxiTfy6e61Cg0+ry2TbIZ9V1NQ==} engines: {node: '>=22.0.0'} - '@objectstack/observability@17.4.0': - resolution: {integrity: sha512-LkcfJCvrn4Zab2hz3pG9yimUfN8Ly3RhRhK011PtGBh1L4juXc67zg1flh6rfbNmayLzw7dPeg+WQMLuDkLRxw==} + '@objectstack/observability@17.5.0': + resolution: {integrity: sha512-MjGACa0SDaDMXqUhg2CFVD7pSolhVegih72kooxvCBdp6WG6dv1utqNx0yjgY/rYdkBjNz0GK3iZPQCLxuEU0A==} engines: {node: '>=22.0.0'} - '@objectstack/platform-objects@17.4.0': - resolution: {integrity: sha512-p4MdRDlPNPxvj1VUfuW8ym0eLr99vMDWVdw3mNIkR73v7rao/Xyq9Bgu4Rm9SEK63TvvQS3fVQ7CGQGwkS0MSg==} + '@objectstack/platform-objects@17.5.0': + resolution: {integrity: sha512-1yW+Y/+bLhOHED1ndv3gFag3ZxvPtvO/G7i1xFtsuOohTdo8HCztIft1M00fESWUdw/MBpBfAkppaiaKCurXmw==} engines: {node: '>=22.0.0'} - '@objectstack/plugin-approvals@17.4.0': - resolution: {integrity: sha512-BLcrU9trWoO3gfXpazxdHJxKSAUJfNTJkFGuYDZHw/ICjt3ZdaiEQV95eUhN2Nib0we/r85DZTz3OsDab771Mg==} + '@objectstack/plugin-approvals@17.5.0': + resolution: {integrity: sha512-PCEZhHv6sH4mpfHIAzwVin0O4A3yWfAoXUX5pD6oMZtuFUa3+LVXcGgiUc6xRRAwF279aF5cLwKG2/xXfv+3hA==} - '@objectstack/plugin-audit@17.4.0': - resolution: {integrity: sha512-RLVxRMZiEjiUkEg2rwJteHkFd868bcxsoFJ/x10hYrQmCHnMoppZzFEdYzRrijNK3qkFVsCfI5FlNE6m/HyfNA==} + '@objectstack/plugin-audit@17.5.0': + resolution: {integrity: sha512-PHLxoACTamADmVnGK8+EB39Lz++Rmp1dqKX/4LBbykiwvAcdx2lzKL2SPB57LtXcacDOE7ZstBFcz7hQa5OTDA==} engines: {node: '>=22.0.0'} - '@objectstack/plugin-auth@17.4.0': - resolution: {integrity: sha512-GISbJk9f9gbvIEc/+gHiEk/ltRaJ2ic1Dg3hmWJKCtwiyn93t7FRfxS93Qb07mjMXGXW2B2Q540EkI+vvhxgeg==} + '@objectstack/plugin-auth@17.5.0': + resolution: {integrity: sha512-A6SjjQvP0iMLU8qQ2O6uxQin8LJGw5uhkk7glaUiNIRm+xMQs73Iz2O9dTRQbpTj8mYDMJy1jim4RL1k5Rziog==} engines: {node: '>=22.0.0'} - '@objectstack/plugin-email@17.4.0': - resolution: {integrity: sha512-jDaExEd3eSZjy7xiltFTJhgFLjnflPddwmCN2eVbMkVN8OOzI2n6pz7d5Za2kT1Mt92pfmi1z4cQE5YMn9r9NA==} + '@objectstack/plugin-email@17.5.0': + resolution: {integrity: sha512-BR2kxtpWWAbzDhrVb68RvqNsNW2AZSaD5h1GZmlPibaQoDND8akwhIQcJRt3hZfbcEdodbPVmVn5FJZGuFNGEQ==} - '@objectstack/plugin-hono-server@17.4.0': - resolution: {integrity: sha512-LTZ4RI9/ZDaKqXOtnm4uviqfeygbZNEMcEGlGu9PVTxu0uND7mLvjh0nz1wqYwWAl/f5eRN57BN3bgzqV2Bt1A==} + '@objectstack/plugin-hono-server@17.5.0': + resolution: {integrity: sha512-MBkfwzkI1m9dCZNermV2+Qw4elSbHQAjqncBaC5vtbUYZyXqK2U0XFbjQnSv/WyBmqCIer2cHM5gwoRTZEH3hQ==} engines: {node: '>=22.0.0'} - '@objectstack/plugin-pinyin-search@17.4.0': - resolution: {integrity: sha512-p1uvYETyvfz8622y7xv3caBVeKGq/0KV6mPxkitMxO6Qpm85hT/KWCoJ6uxwRL43use9ji8CpL41mHAma7Vzhw==} + '@objectstack/plugin-pinyin-search@17.5.0': + resolution: {integrity: sha512-bk9rGpDlJUSed6h4NojE277AGjm08fvvLe2S6VShtaeJgn9uRcStqTMzVWi5/Z4QfcvXCotH/kkfMHBAK+RY7g==} - '@objectstack/plugin-reports@17.4.0': - resolution: {integrity: sha512-9ITXRV2w5WQoOuXZRsLmfPI2MG/MBee60kx1beA5K35pqRckVED06FThTMTMlClmBa0xDMZx1ITSMs0PnAmMLA==} - - '@objectstack/plugin-security@17.4.0': - resolution: {integrity: sha512-r/wgp7vKhpwrRHKua1wbGyCadyuWllT5BWOQltW/HYy2I8fCfYF+otTdkENNDq018XowB1HIfwdUXMO8p2gpXA==} + '@objectstack/plugin-security@17.5.0': + resolution: {integrity: sha512-jV90PLcxLJKXH7X8jWrPS8LVlsnYESs66u70oGSdTHsYBrxrQx1LKVc/SnrfcIHxCqK55l6MvgjnWBnCyPkwlg==} engines: {node: '>=22.0.0'} - '@objectstack/plugin-sharing@17.4.0': - resolution: {integrity: sha512-5elA8yGI7nCP2tAT4yWl63H/76Qn6JcusaI+xeES28ScNVWuiasCVu9ocf7kxBxFk8OUmnR9ba4DANwPvQyBkQ==} + '@objectstack/plugin-sharing@17.5.0': + resolution: {integrity: sha512-JsYAXL415GMycckmFJXXV3CvnsI4HHUzZRSgk3sts5Aclt9DweUQAGszY/se5Fp0L390qS10B5tvP5q+Nc3ipA==} - '@objectstack/plugin-webhooks@17.4.0': - resolution: {integrity: sha512-6gcd+v1bME30LSQ2weeXa0q+naa5ITjqfhYDbuh+L3sSGAXOrflDRs/SGJKFvsw7dWsv98Jdw0rkknRq5kwfdA==} + '@objectstack/plugin-webhooks@17.5.0': + resolution: {integrity: sha512-GNJkd3Za8i2Mrp2YEA0lEPb1OuVNOiJakq/14s+YaIHYO/gKZBN80SD7gfYly+uGqRkMNL8xngnL21+psfAPkA==} - '@objectstack/rest@17.4.0': - resolution: {integrity: sha512-q132ZGba7Zez9Ei4a6xvkVpbephDBQ7oi5GsxGQeT8ljL9duoLpOX7GJa7HwqAbOGi7MRmgoN6+BEmrzmBz9fQ==} + '@objectstack/rest@17.5.0': + resolution: {integrity: sha512-9zvUMnzrxb8hIVsIU0Q9yCH7BWKdPytzA6eIE1ydb0vPrpF62UnRLVDA5hUi5mrK1l9JIOgTdJ2RWOO/FwXQVg==} engines: {node: '>=22.0.0'} - '@objectstack/runtime@17.4.0': - resolution: {integrity: sha512-q2bMGlD0/z+DUbsMlg055UwTSkJszgtQyqJWJWcJP8Z+5xkHo2nE3tDGQEhdwfcpJwm5aoafniZ0WLf5Pbo+Dw==} + '@objectstack/runtime@17.5.0': + resolution: {integrity: sha512-xOkGoFTTCh2fdqsJEoH4Qvt8GC3F5QUY7RS7BQlSGfL5MIR2sQzURnLZ+l3npnwezJYw1niT0I3oihX8+NayMg==} engines: {node: '>=22.0.0'} peerDependencies: - '@objectstack/driver-turso': ^17.4.0 + '@objectstack/driver-turso': ^17.5.0 peerDependenciesMeta: '@objectstack/driver-turso': optional: true - '@objectstack/sdui-parser@17.4.0': - resolution: {integrity: sha512-pKKTqP6siwsLtcO7tDxMufHoCWuUeWjoRBv8NRGlptB+a/uhO0WKXHzZ3+zWVqz9a/Ac9N2Xwp+hBPoGtG4Z1w==} + '@objectstack/sdui-parser@17.5.0': + resolution: {integrity: sha512-GBn5BONhKuWfI/wmI+X4P0mh4a/cKx6Zo0rgZojWVBVC00fPpxuMb5obO74Do509Nm6o0h7m7OAq65Rb0td7TQ==} - '@objectstack/service-analytics@17.4.0': - resolution: {integrity: sha512-meRlePSJ9pUAYXMM+sUk8wZgca5jSV6R53vYhfEoqdYXP1C1xqnpAD9gXZLFDmyK4kz3ihHv3TZ0ozvtXXL4/A==} + '@objectstack/service-analytics@17.5.0': + resolution: {integrity: sha512-f9izAUWbBE6XMsIdi6yLtwJBgsUitpILYrk6Y4auTP6NI9RWwY1QWSvUndSLccM2+6pZ8hWuBgLBQgjf5i4/Qg==} engines: {node: '>=22.0.0'} - '@objectstack/service-automation@17.4.0': - resolution: {integrity: sha512-lT+Lkx6i1Xox017nMBAFUgrtP4Bb7XPV39R4AG5u/caNxINJpnezomd/imEcGY8yBsUlwtXuRc/VFEUjyFucyg==} + '@objectstack/service-automation@17.5.0': + resolution: {integrity: sha512-aX5jaZT/KHIJquAZ9J0yofnvOYGcETnDU9dQ571mR0RM66z7vAInNE8mfIouOWDfpsdkUij3j20igdy2fIGs8w==} engines: {node: '>=22.0.0'} - '@objectstack/service-cache@17.4.0': - resolution: {integrity: sha512-hCjjx+jSU5yCasPryGC3eTzmOw2Rc4GfzMthUWlie0uw1HzlTgRFxxq6GDd2JfPg3ysCrdEdt9a96KTYCJf7Yg==} + '@objectstack/service-cache@17.5.0': + resolution: {integrity: sha512-N5CmLCvDww2ouzJAFa14QyBqw7PgHG/1G1Oj99ljE/mxuynw2dWChudxzYKFeBTxn9YuKcU0Mt+JG4TIgbrfBQ==} engines: {node: '>=22.0.0'} - '@objectstack/service-cluster@17.4.0': - resolution: {integrity: sha512-IaeUfak7j86Js31RFHgeRw78yxUFyclPIOpdBv3PQjUV5TagtODAWdUyp8URQr+jUJTrwYCIbFoz81G18t7QUA==} + '@objectstack/service-cluster@17.5.0': + resolution: {integrity: sha512-y1raG/B4TJqf6vv23T2O97jOfDab2AezRA808fHzuveNAak/lbVtSm4ItjCD8fjJrnrKkOpwZCLY/ZEHjXggfg==} - '@objectstack/service-datasource@17.4.0': - resolution: {integrity: sha512-CSOpXKBOiOHFlbbQhR9qThRZO11FZwVYmKBBviDfGr/yJQi9S7b0ZkJ9yIkZ7xsRszEFQD4jxDQ9D1J9zuQVqg==} + '@objectstack/service-datasource@17.5.0': + resolution: {integrity: sha512-YX8EdaozDhZBJJLC5UWyv5JpTboySCQNQDzgnDIkfOfbLN4trdOe0zwPgeyoQV4is/JulLcCsfhWvzk//SQC2g==} peerDependencies: - '@objectstack/driver-mongodb': ^17.4.0 - '@objectstack/driver-sqlite-wasm': ^17.4.0 - '@objectstack/driver-turso': ^17.4.0 + '@objectstack/driver-mongodb': ^17.5.0 + '@objectstack/driver-sqlite-wasm': ^17.5.0 + '@objectstack/driver-turso': ^17.5.0 peerDependenciesMeta: '@objectstack/driver-mongodb': optional: true @@ -742,39 +739,39 @@ packages: '@objectstack/driver-turso': optional: true - '@objectstack/service-i18n@17.4.0': - resolution: {integrity: sha512-hPois8KeNT98QfTde1i98cyMj0G2V9NMb1T7mHG2HNIGyqdKWYFZauhEd67glDWA7SlDBLCP1tgyMzCCYQC/jg==} + '@objectstack/service-i18n@17.5.0': + resolution: {integrity: sha512-LPYnTATUxL54cj7Je+sb301iEAky0E6/tpjtr0QNY6KOV/5B+CJhfN0TpW+Wg0/8OdbNah7o6F/9zKvKmUkJCQ==} engines: {node: '>=22.0.0'} - '@objectstack/service-job@17.4.0': - resolution: {integrity: sha512-GcCh018YCl5Liv1o1ern2+a90XofyUnKbgr/Vlz1ocBUkC2iyT4CImeq0cit3Ps5wBbmzz60f8mhf7bneOGzEQ==} + '@objectstack/service-job@17.5.0': + resolution: {integrity: sha512-/yqhOXP40FD4PorsEwqqa23AOaTvJYxXBMCSC61ECYDmPfKwUGCUfUxmpaGB/JU6BAl+S4XdKtxaMqBJViaOlA==} engines: {node: '>=22.0.0'} - '@objectstack/service-messaging@17.4.0': - resolution: {integrity: sha512-w3AcEucIJQpNLmON9oRBEysVGWWhoXXe10Xm3Ka62/dqyJUJex9MqWKIT5mt5r1Qh+go/o42n5glv+jGqmw86g==} + '@objectstack/service-messaging@17.5.0': + resolution: {integrity: sha512-UoETY5SpJ/cCYEAakvA+8JTjQwZCHaxgk/TQGJZdu6M5pcT50Re+YUGB3SYuYNPg6SyvM1Hq9QuU60wvDzes4A==} engines: {node: '>=22.0.0'} - '@objectstack/service-package@17.4.0': - resolution: {integrity: sha512-mnAdCl2Sq1ucxOj/CIhjt9mabbyez4bxxnnR8iApduX7B1GDole+MbMiWgPttju07rGyQc9Y1dvc1cl++lYEyg==} + '@objectstack/service-package@17.5.0': + resolution: {integrity: sha512-zX0NukmSNKw1DisVV77RURUfAk9PRizzXRYK5svGJRp8qEXAneqWGlYc+y87Jk1ERNgy5+v2P7QXfDX6arKMtw==} engines: {node: '>=22.0.0'} - '@objectstack/service-queue@17.4.0': - resolution: {integrity: sha512-xHH29M+B08ldA2S2JOvBDAgTnjXCPyYErzyvLLGx1uuBHgOrRrpzUp6qaLzatk6+/j/J/TU/9fvFIGWKgyLRFg==} + '@objectstack/service-queue@17.5.0': + resolution: {integrity: sha512-lp/UNFQQ6bO7ahjKogufnaY4wHmdZRttGswBqm+US1JfY89h6BGSQonhwhyGvbdXzgeZmVPl9ohfVCb1L9xiFw==} engines: {node: '>=22.0.0'} - '@objectstack/service-realtime@17.4.0': - resolution: {integrity: sha512-HGEv0un6zrf8zYMNBCP06Ssq2Iv87zh7X8dJYq92ptLIXDdr9snvW/Mk+5uY4JjUhN+I2g/8V2E84OUrhldoSQ==} + '@objectstack/service-realtime@17.5.0': + resolution: {integrity: sha512-exQim8NNHb5s0GEvQm9d/yoIsu7hubIVOjeEnLqkCf766UGeqmEFYQH7O5w0Bt/KXjfxteq0X7BcHJESxOgC3g==} engines: {node: '>=22.0.0'} - '@objectstack/service-settings@17.4.0': - resolution: {integrity: sha512-wFwwrSTDi7ykDCO8J2wkpwiYwl70edxv8lJwMExqmgYUXcjsBL9RxNNNjisIdU1Doudv5xS1u43lXvcqhjrGWA==} + '@objectstack/service-settings@17.5.0': + resolution: {integrity: sha512-dsbzdvzEfj9PJSjx7GKocWsVDt/biJLZh+6hU6Xz9biznYqo12xfUcBbCBYwo6L10xfA4qql2r3X4wu7vDaU8g==} engines: {node: '>=22.0.0'} - '@objectstack/service-sms@17.4.0': - resolution: {integrity: sha512-us2vkXJIlUo5+5nX8jqvI72V0aAIyQ8KX136Aw4mK8+3c0Bf6IG3JZBpx3IVlc9Q2un44i+m8zmkMKQLxFWFPA==} + '@objectstack/service-sms@17.5.0': + resolution: {integrity: sha512-Nj5Y6JKiccXJAMo55w/v3yx4QNHXQPxVGD2Y3FB50luKjVwEIW2utWBct0oiZeGl9iHjA2yOcuKswgAqptQgUA==} - '@objectstack/service-storage@17.4.0': - resolution: {integrity: sha512-SpOeGAeTP3xf2ObmIsoQWa54UMP7BTB1jL7bSZXUeX2/e/CJR81N6Y/s2gzuJqudy/R7p0unOeQRyAlOSe9bzg==} + '@objectstack/service-storage@17.5.0': + resolution: {integrity: sha512-Fa9XzpOZnnwbYDEPcm7K/Hj62qysipS8OKBEVX1qYy0l9dXxZm/Rsk4YhppnqCLqJJKrTd8bvhleFsPzVdfdUA==} engines: {node: '>=22.0.0'} peerDependencies: '@aws-sdk/client-s3': ^3.0.0 @@ -785,12 +782,12 @@ packages: '@aws-sdk/s3-request-presigner': optional: true - '@objectstack/setup@17.4.0': - resolution: {integrity: sha512-Z0BuKodUTEDOh5yHGwLJMMLBQauYlSb3QueiG+ZJdntBy7nRBXgBZxja5CsUNGe3wo703TAZbtxqeRKqXKycXQ==} + '@objectstack/setup@17.5.0': + resolution: {integrity: sha512-TDPxvq1rub6cf45nR3oPvX7tfu9j/yPFN+nw6ZxUTWlNIAFl/eecvIe/wglLqASgNDV6DMW0hohkD2Bc0TFLag==} engines: {node: '>=22.0.0'} - '@objectstack/spec@17.4.0': - resolution: {integrity: sha512-bOtSFih0Ed67JZMGuLmlHuIv2zPN62W8NL2qENQCYjZB174NMlIIvHC6Jlz2SIy5EwsTnTGBF5EPF6C2/TmqoA==} + '@objectstack/spec@17.5.0': + resolution: {integrity: sha512-G9IPkAnxbgk90wKTqyrIHsPm+kWyYDn2cUfmNnt5xwewdpvRtd5HqaHSjjn5wBCzO0OACerZULNR/f3gPtQu1w==} engines: {node: '>=22.0.0'} peerDependencies: ai: ^7.0.0 @@ -798,23 +795,23 @@ packages: ai: optional: true - '@objectstack/trigger-api@17.4.0': - resolution: {integrity: sha512-dngvTGtV9NiplYHgeaPetPmletyOY8x0laKr7mqKxxvpPSSD3L59DQELYUZQRzcPnBxxUuoUJshAtq35PCvBVg==} + '@objectstack/trigger-api@17.5.0': + resolution: {integrity: sha512-7wKzSVpKRrRmRA+hutIWUngDZIQ9nja01Z2oHJhNAJn92NU/12Sj+BHkBH3DN4p9BxdUln9SUjbtyl5yEbz1lg==} - '@objectstack/trigger-record-change@17.4.0': - resolution: {integrity: sha512-w+MDiNpzPcnT0OJxPVLK4MFPxQP1A1IOK1bEkxoTt/74VqG8EwbzlQ9zxnLUJ8alOAxmMnMhIDgSDTCZQ94KlA==} + '@objectstack/trigger-record-change@17.5.0': + resolution: {integrity: sha512-J+HcE2UB29vAjZWLBXKXpGNdUfJ2E9epTT9GiiQz15m3c5uymj2uTq+AsbgsX2aBgaRtArlKqFgtdD+tniK3nA==} engines: {node: '>=22.0.0'} - '@objectstack/trigger-schedule@17.4.0': - resolution: {integrity: sha512-XdU0cjtCBUryUhgzyK7qY5IV2KPXORdeRgPmaq8g8nfAIXMlGpKCxwuGYMAYdiCsllCEwlhnh3Wuu4V1lHsz7A==} + '@objectstack/trigger-schedule@17.5.0': + resolution: {integrity: sha512-atJ2g7qK3bRTwWFkpT2A97Oqsq3zftFI6kA/VszA6A+zp/IotiZTw0uyydBlzxuhYzJYYeM292TWZd7tKpgLfA==} engines: {node: '>=22.0.0'} - '@objectstack/types@17.4.0': - resolution: {integrity: sha512-z7eCTBlGqAX8ChKifkItGg+woONgAMBbWtu8OmTqI6Fzn8z7JDCm07+K0gg0hivD1uoUUL253s8mshdiqpZnnQ==} + '@objectstack/types@17.5.0': + resolution: {integrity: sha512-QSwGeHxGmDd5SQbZFkHdoct9J6kOh7tijsU6BDE1k+zgTHqOnqUGNQkp6T8KggJTdPz2MHvRDBpmstHT8Rsgng==} engines: {node: '>=22.0.0'} - '@objectstack/verify@17.4.0': - resolution: {integrity: sha512-C+0K/2p4z3QLhFa6VBbH+kK8rU2Mdlm95XL9TdrLu0KTYEmGPj92aF4jQTB2T9+7zQgwJhJ/4JaT9EZl2lUytw==} + '@objectstack/verify@17.5.0': + resolution: {integrity: sha512-mS0WlJE8TRM/dmS2yVryBfE3YLBT1saFPk8Lxtd57N4Ka9P5swYnhlNusmxgQdPlOyHZ9z+JBlIiK9ubf/uusg==} engines: {node: '>=22.0.0'} '@oclif/core@4.14.0': @@ -1188,10 +1185,9 @@ packages: engines: {node: '>=10.0.0'} deprecated: this version has critical issues, please update to the latest version - '@xmldom/xmldom@0.9.11': - resolution: {integrity: sha512-tW8bcK3hsG0/uqSnNz6TK4BkcuZSezoU7DlnYssILmZDktPnSHHuDJJFM0AJv+13gz2r0iGdrj6qqKeUnxXEDg==} + '@xmldom/xmldom@0.9.12': + resolution: {integrity: sha512-5AXjrcMClTryPe9LgZrygpB1lj7s0S9E0+W+AHaVKAVyHanafK86iPSvG5xHVSp/jC+VH1UXu0TAEmY279xH7A==} engines: {node: '>=14.6'} - deprecated: this version has critical issues, please update to the latest version accepts@2.0.0: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} @@ -1276,8 +1272,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - better-auth@1.7.2: - resolution: {integrity: sha512-gKapKBEvYIGcMxi74RjQ7EbFLiqyQt58vdoJmL1qAlWSkY1Bc2Vqshl524/3u1NxauiOU03M/Ebh762Brmac9A==} + better-auth@1.7.3: + resolution: {integrity: sha512-8xGp68JQ+l36kniDEgP8bP99TLi1GdEv0NTEUBkyqnYnus/cgFUZseUfqUHKzr2BAsg2O6aD88I9f0U68shanQ==} peerDependencies: '@lynx-js/react': '*' '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -1542,8 +1538,8 @@ packages: resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} engines: {node: '>= 10'} - create-objectstack@17.4.0: - resolution: {integrity: sha512-y88N8mzKTj/zKRTXbSUVUb5VQ3oKJnjI/c6gV8b1vraAOaPNtX1cmLw3/HP0k53HkDHHrb2va4yklSIWsN0ifA==} + create-objectstack@17.5.0: + resolution: {integrity: sha512-Z4RqEHdnuApWbFThfUWkzZYv+hI9B/11cIAReMqyA4peZfNGHCqPrKStS/L9x9/Vd/c56+08WwaBljmFGNqmZQ==} engines: {node: '>=22.0.0'} hasBin: true @@ -1924,6 +1920,10 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hono@4.13.11: + resolution: {integrity: sha512-/SMX/RQNJn7oNmFwH6DtwDqcrzZU2otm1FD6OJe2cWF6cfy/F8hq0XVBv7xW3FTJshRQwuBnXHDq2kNsdZnshg==} + engines: {node: '>=16.9.0'} + hono@4.13.3: resolution: {integrity: sha512-r8AO2mYHoLxSHkgafNeC/BXyb2vWRxD3jem4Ts+ptav8oTG5FIRifAjuJEmZI4bSvvc2ns0GxmIYiZnHqN3mMw==} engines: {node: '>=16.9.0'} @@ -2560,9 +2560,9 @@ packages: node-rsa@1.1.1: resolution: {integrity: sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==} - nodemailer@9.0.5: - resolution: {integrity: sha512-wvjiKvjczmsN7U/8006JOdXubgBk2XFAbioDMbT+sM7cPs0QrhJTa6KBRX7P5REGGkDcLUz/EarWidb8G8C1jQ==} - engines: {node: '>=6.0.0'} + nodemailer@10.0.12: + resolution: {integrity: sha512-PQ46oNbNMuH/Sno7B5IWIU9etytwrO0xdTFvWXpIQFRXhBAXtzD48243AS+BCbQQTPD8y3fqUrgLn0tSo77gvg==} + engines: {node: '>=20.0.0'} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -3257,11 +3257,6 @@ packages: resolution: {integrity: sha512-FxF6+rkr1rNSQrhUNYrAFJpRXNzlDoMxeXN5qI84939ylEv3qqPFKa85Oxr6tDaJKqwW6KKyo2v26TSv3k6LeA==} engines: {node: '>=0.6.0'} - yaml@2.9.0: - resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} - engines: {node: '>= 14.6'} - hasBin: true - yaml@2.9.1: resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} engines: {node: '>= 14.6'} @@ -3276,8 +3271,8 @@ packages: peerDependencies: zod: ^3.25.28 || ^4 - zod@4.4.3: - resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + zod@4.6.5: + resolution: {integrity: sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -3305,116 +3300,116 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2)': + '@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2)': dependencies: '@better-auth/utils': 0.4.2 '@better-fetch/fetch': 1.3.1 '@opentelemetry/semantic-conventions': 1.43.0 '@standard-schema/spec': 1.1.0 - better-call: 1.4.0(zod@4.4.3) + better-call: 1.4.0(zod@4.6.5) jose: 6.2.9 kysely: 0.29.4 nanostores: 1.4.2 - zod: 4.4.3 + zod: 4.6.5 - '@better-auth/drizzle-adapter@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)': + '@better-auth/drizzle-adapter@1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/utils': 0.4.2 - '@better-auth/kysely-adapter@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(kysely@0.29.4)': + '@better-auth/kysely-adapter@1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(kysely@0.29.4)': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/utils': 0.4.2 optionalDependencies: kysely: 0.29.4 - '@better-auth/memory-adapter@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)': + '@better-auth/memory-adapter@1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/utils': 0.4.2 - '@better-auth/mongo-adapter@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(mongodb@7.5.0)': + '@better-auth/mongo-adapter@1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(mongodb@7.5.0)': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/utils': 0.4.2 optionalDependencies: mongodb: 7.5.0 - '@better-auth/oauth-provider@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.4.3))': + '@better-auth/oauth-provider@1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.3(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5))': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/utils': 0.4.2 '@better-fetch/fetch': 1.3.1 - better-auth: 1.7.2(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10) - better-call: 1.4.0(zod@4.4.3) + better-auth: 1.7.3(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10) + better-call: 1.4.0(zod@4.6.5) jose: 6.2.9 - zod: 4.4.3 + zod: 4.6.5 - '@better-auth/oauth-provider@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.4.3))': + '@better-auth/oauth-provider@1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.3(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5))': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/utils': 0.4.2 '@better-fetch/fetch': 1.3.1 - better-auth: 1.7.2(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10) - better-call: 1.4.0(zod@4.4.3) + better-auth: 1.7.3(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10) + better-call: 1.4.0(zod@4.6.5) jose: 6.2.9 - zod: 4.4.3 + zod: 4.6.5 - '@better-auth/prisma-adapter@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)': + '@better-auth/prisma-adapter@1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/utils': 0.4.2 - '@better-auth/scim@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(better-auth@1.7.2(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.4.3))': + '@better-auth/scim@1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(better-auth@1.7.3(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5))': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/utils': 0.4.2 '@noble/hashes': 2.3.0 - better-auth: 1.7.2(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10) - better-call: 1.4.0(zod@4.4.3) - zod: 4.4.3 + better-auth: 1.7.3(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10) + better-call: 1.4.0(zod@4.6.5) + zod: 4.6.5 - '@better-auth/scim@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.4.3))': + '@better-auth/scim@1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(better-auth@1.7.3(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5))': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/utils': 0.4.2 '@noble/hashes': 2.3.0 - better-auth: 1.7.2(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10) - better-call: 1.4.0(zod@4.4.3) - zod: 4.4.3 + better-auth: 1.7.3(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10) + better-call: 1.4.0(zod@4.6.5) + zod: 4.6.5 - '@better-auth/sso@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.4.3))': + '@better-auth/sso@1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.3(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5))': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/utils': 0.4.2 '@better-fetch/fetch': 1.3.1 - '@xmldom/xmldom': 0.9.11 - better-auth: 1.7.2(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10) - better-call: 1.4.0(zod@4.4.3) + '@xmldom/xmldom': 0.9.12 + better-auth: 1.7.3(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10) + better-call: 1.4.0(zod@4.6.5) fast-xml-parser: 5.10.1 jose: 6.2.9 samlify: 2.13.1 tldts: 7.4.10 - zod: 4.4.3 + zod: 4.6.5 - '@better-auth/sso@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.4.3))': + '@better-auth/sso@1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.3(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5))': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/utils': 0.4.2 '@better-fetch/fetch': 1.3.1 - '@xmldom/xmldom': 0.9.11 - better-auth: 1.7.2(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10) - better-call: 1.4.0(zod@4.4.3) + '@xmldom/xmldom': 0.9.12 + better-auth: 1.7.3(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10) + better-call: 1.4.0(zod@4.6.5) fast-xml-parser: 5.10.1 jose: 6.2.9 samlify: 2.13.1 tldts: 7.4.10 - zod: 4.4.3 + zod: 4.6.5 - '@better-auth/telemetry@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)': + '@better-auth/telemetry@1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/utils': 0.4.2 '@better-fetch/fetch': 1.3.1 @@ -3657,6 +3652,10 @@ snapshots: lodash.isundefined: 3.0.1 lodash.uniq: 4.5.0 + '@hono/node-server@2.1.1(hono@4.13.11)': + dependencies: + hono: 4.13.11 + '@hono/node-server@2.1.1(hono@4.13.3)': dependencies: hono: 4.13.3 @@ -3710,7 +3709,7 @@ snapshots: '@marcbachmann/cel-js@8.0.0': {} - '@modelcontextprotocol/sdk@1.30.0(zod@4.4.3)': + '@modelcontextprotocol/sdk@1.30.0(zod@4.6.5)': dependencies: '@hono/node-server': 2.1.1(hono@4.13.3) ajv: 8.20.0 @@ -3727,8 +3726,8 @@ snapshots: json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 - zod: 4.4.3 - zod-to-json-schema: 3.25.2(zod@4.4.3) + zod: 4.6.5 + zod-to-json-schema: 3.25.2(zod@4.6.5) transitivePeerDependencies: - supports-color @@ -3749,76 +3748,75 @@ snapshots: '@nodable/entities@3.0.0': {} - '@objectstack/account@17.4.0(vitest@4.1.10)': + '@objectstack/account@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/cli@17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': - dependencies: - '@objectstack/account': 17.4.0(vitest@4.1.10) - '@objectstack/client': 17.4.0 - '@objectstack/cloud-connection': 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/console': 17.4.0 - '@objectstack/core': 17.4.0 - '@objectstack/driver-memory': 17.4.0 - '@objectstack/driver-mongodb': 17.4.0 - '@objectstack/driver-sql': 17.4.0 - '@objectstack/driver-sqlite-wasm': 17.4.0(better-sqlite3@13.0.3) - '@objectstack/formula': 17.4.0 - '@objectstack/lint': 17.4.0 - '@objectstack/mcp': 17.4.0 - '@objectstack/metadata': 17.4.0(vitest@4.1.10) - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/metadata-protocol': 17.4.0(vitest@4.1.10) - '@objectstack/objectql': 17.4.0(vitest@4.1.10) - '@objectstack/observability': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/plugin-approvals': 17.4.0(vitest@4.1.10) - '@objectstack/plugin-audit': 17.4.0(vitest@4.1.10) - '@objectstack/plugin-auth': 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/plugin-email': 17.4.0(vitest@4.1.10) - '@objectstack/plugin-hono-server': 17.4.0 - '@objectstack/plugin-pinyin-search': 17.4.0(vitest@4.1.10) - '@objectstack/plugin-reports': 17.4.0(vitest@4.1.10) - '@objectstack/plugin-security': 17.4.0(vitest@4.1.10) - '@objectstack/plugin-sharing': 17.4.0(vitest@4.1.10) - '@objectstack/plugin-webhooks': 17.4.0(vitest@4.1.10) - '@objectstack/rest': 17.4.0(vitest@4.1.10) - '@objectstack/runtime': 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/service-analytics': 17.4.0 - '@objectstack/service-automation': 17.4.0(vitest@4.1.10) - '@objectstack/service-cache': 17.4.0 - '@objectstack/service-datasource': 17.4.0(@objectstack/driver-mongodb@17.4.0)(@objectstack/driver-sqlite-wasm@17.4.0(better-sqlite3@12.11.1)) - '@objectstack/service-job': 17.4.0(vitest@4.1.10) - '@objectstack/service-messaging': 17.4.0(vitest@4.1.10) - '@objectstack/service-package': 17.4.0(vitest@4.1.10) - '@objectstack/service-queue': 17.4.0(vitest@4.1.10) - '@objectstack/service-realtime': 17.4.0(vitest@4.1.10) - '@objectstack/service-settings': 17.4.0(vitest@4.1.10) - '@objectstack/service-sms': 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/service-storage': 17.4.0(vitest@4.1.10) - '@objectstack/setup': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/trigger-api': 17.4.0 - '@objectstack/trigger-record-change': 17.4.0 - '@objectstack/trigger-schedule': 17.4.0 - '@objectstack/types': 17.4.0 - '@objectstack/verify': 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@objectstack/driver-mongodb@17.4.0)(@objectstack/driver-sqlite-wasm@17.4.0(better-sqlite3@12.11.1))(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/cli@17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': + dependencies: + '@objectstack/account': 17.5.0(vitest@4.1.10) + '@objectstack/client': 17.5.0 + '@objectstack/cloud-connection': 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/console': 17.5.0 + '@objectstack/core': 17.5.0 + '@objectstack/driver-memory': 17.5.0 + '@objectstack/driver-mongodb': 17.5.0 + '@objectstack/driver-sql': 17.5.0 + '@objectstack/driver-sqlite-wasm': 17.5.0(better-sqlite3@13.0.3) + '@objectstack/formula': 17.5.0 + '@objectstack/lint': 17.5.0 + '@objectstack/mcp': 17.5.0 + '@objectstack/metadata': 17.5.0(vitest@4.1.10) + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/metadata-protocol': 17.5.0(vitest@4.1.10) + '@objectstack/objectql': 17.5.0(vitest@4.1.10) + '@objectstack/observability': 17.5.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/plugin-approvals': 17.5.0(vitest@4.1.10) + '@objectstack/plugin-audit': 17.5.0(vitest@4.1.10) + '@objectstack/plugin-auth': 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/plugin-email': 17.5.0(vitest@4.1.10) + '@objectstack/plugin-hono-server': 17.5.0 + '@objectstack/plugin-pinyin-search': 17.5.0(vitest@4.1.10) + '@objectstack/plugin-security': 17.5.0(vitest@4.1.10) + '@objectstack/plugin-sharing': 17.5.0(vitest@4.1.10) + '@objectstack/plugin-webhooks': 17.5.0(vitest@4.1.10) + '@objectstack/rest': 17.5.0(vitest@4.1.10) + '@objectstack/runtime': 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/service-analytics': 17.5.0 + '@objectstack/service-automation': 17.5.0(vitest@4.1.10) + '@objectstack/service-cache': 17.5.0 + '@objectstack/service-datasource': 17.5.0(@objectstack/driver-mongodb@17.5.0)(@objectstack/driver-sqlite-wasm@17.5.0(better-sqlite3@12.11.1)) + '@objectstack/service-job': 17.5.0(vitest@4.1.10) + '@objectstack/service-messaging': 17.5.0(vitest@4.1.10) + '@objectstack/service-package': 17.5.0(vitest@4.1.10) + '@objectstack/service-queue': 17.5.0(vitest@4.1.10) + '@objectstack/service-realtime': 17.5.0(vitest@4.1.10) + '@objectstack/service-settings': 17.5.0(vitest@4.1.10) + '@objectstack/service-sms': 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/service-storage': 17.5.0(vitest@4.1.10) + '@objectstack/setup': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/trigger-api': 17.5.0 + '@objectstack/trigger-record-change': 17.5.0 + '@objectstack/trigger-schedule': 17.5.0(vitest@4.1.10) + '@objectstack/types': 17.5.0 + '@objectstack/verify': 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@objectstack/driver-mongodb@17.5.0)(@objectstack/driver-sqlite-wasm@17.5.0(better-sqlite3@12.11.1))(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) '@oclif/core': 4.14.0 bundle-require: 5.1.0(esbuild@0.28.2) chalk: 6.0.0 chokidar: 5.0.0 - create-objectstack: 17.4.0 + create-objectstack: 17.5.0 dotenv-flow: 4.1.0 esbuild: 0.28.2 ts-morph: 28.0.0 tsx: 4.23.12 - yaml: 2.9.0 - zod: 4.4.3 + yaml: 2.9.1 + zod: 4.6.5 optionalDependencies: better-sqlite3: 13.0.3 transitivePeerDependencies: @@ -3866,19 +3864,19 @@ snapshots: - vitest - vue - '@objectstack/client@17.4.0': + '@objectstack/client@17.5.0': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - '@objectstack/cloud-connection@17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': + '@objectstack/cloud-connection@17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/runtime': 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/runtime': 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@better-auth/utils' @@ -3923,30 +3921,30 @@ snapshots: - vitest - vue - '@objectstack/console@17.4.0': {} + '@objectstack/console@17.5.0': {} - '@objectstack/core@17.4.0': + '@objectstack/core@17.5.0': dependencies: - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 - zod: 4.4.3 + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 + zod: 4.6.5 transitivePeerDependencies: - ai - '@objectstack/driver-memory@17.4.0': + '@objectstack/driver-memory@17.5.0': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 mingo: 7.2.4 transitivePeerDependencies: - ai - '@objectstack/driver-mongodb@17.4.0': + '@objectstack/driver-mongodb@17.5.0': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 mongodb: 7.5.0 nanoid: 6.0.1 transitivePeerDependencies: @@ -3959,12 +3957,12 @@ snapshots: - snappy - socks - '@objectstack/driver-sql@17.4.0': + '@objectstack/driver-sql@17.5.0': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/observability': 17.4.0 - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/observability': 17.5.0 + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 knex: 3.3.0(better-sqlite3@13.0.3) nanoid: 6.0.1 optionalDependencies: @@ -3978,11 +3976,11 @@ snapshots: - sqlite3 - supports-color - '@objectstack/driver-sqlite-wasm@17.4.0(better-sqlite3@12.11.1)': + '@objectstack/driver-sqlite-wasm@17.5.0(better-sqlite3@12.11.1)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/driver-sql': 17.4.0 - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/driver-sql': 17.5.0 + '@objectstack/spec': 17.5.0 knex: 3.3.0(better-sqlite3@12.11.1) nanoid: 6.0.1 sql.js: 1.14.1 @@ -3999,11 +3997,11 @@ snapshots: - supports-color - tedious - '@objectstack/driver-sqlite-wasm@17.4.0(better-sqlite3@13.0.3)': + '@objectstack/driver-sqlite-wasm@17.5.0(better-sqlite3@13.0.3)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/driver-sql': 17.4.0 - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/driver-sql': 17.5.0 + '@objectstack/spec': 17.5.0 knex: 3.3.0(better-sqlite3@13.0.3) nanoid: 6.0.1 sql.js: 1.14.1 @@ -4020,18 +4018,18 @@ snapshots: - supports-color - tedious - '@objectstack/formula@17.4.0': + '@objectstack/formula@17.5.0': dependencies: '@marcbachmann/cel-js': 8.0.0 - '@objectstack/spec': 17.4.0 + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - '@objectstack/lint@17.4.0': + '@objectstack/lint@17.5.0': dependencies: - '@objectstack/formula': 17.4.0 - '@objectstack/sdui-parser': 17.4.0 - '@objectstack/spec': 17.4.0 + '@objectstack/formula': 17.5.0 + '@objectstack/sdui-parser': 17.5.0 + '@objectstack/spec': 17.5.0 ajv: 8.20.0 ajv-formats: 3.0.1 sucrase: 3.35.1 @@ -4039,133 +4037,133 @@ snapshots: transitivePeerDependencies: - ai - '@objectstack/mcp@17.4.0': + '@objectstack/mcp@17.5.0': dependencies: - '@modelcontextprotocol/sdk': 1.30.0(zod@4.4.3) - '@objectstack/core': 17.4.0 - '@objectstack/formula': 17.4.0 - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 - zod: 4.4.3 + '@modelcontextprotocol/sdk': 1.30.0(zod@4.6.5) + '@objectstack/core': 17.5.0 + '@objectstack/formula': 17.5.0 + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 + zod: 4.6.5 transitivePeerDependencies: - '@cfworker/json-schema' - ai - supports-color - '@objectstack/metadata-core@17.4.0(vitest@4.1.10)': + '@objectstack/metadata-core@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/spec': 17.4.0 - zod: 4.4.3 + '@objectstack/spec': 17.5.0 + zod: 4.6.5 optionalDependencies: vitest: 4.1.10(@vitest/coverage-v8@4.1.10)(esbuild@0.28.2)(tsx@4.23.12)(yaml@2.9.1) transitivePeerDependencies: - ai - '@objectstack/metadata-fs@17.4.0(vitest@4.1.10)': + '@objectstack/metadata-fs@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) chokidar: 5.0.0 transitivePeerDependencies: - ai - vitest - '@objectstack/metadata-protocol@17.4.0(vitest@4.1.10)': + '@objectstack/metadata-protocol@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/formula': 17.4.0 - '@objectstack/lint': 17.4.0 - '@objectstack/metadata': 17.4.0(vitest@4.1.10) - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 - zod: 4.4.3 + '@objectstack/core': 17.5.0 + '@objectstack/formula': 17.5.0 + '@objectstack/lint': 17.5.0 + '@objectstack/metadata': 17.5.0(vitest@4.1.10) + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 + zod: 4.6.5 transitivePeerDependencies: - ai - vitest - '@objectstack/metadata@17.4.0(vitest@4.1.10)': + '@objectstack/metadata@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/metadata-fs': 17.4.0(vitest@4.1.10) - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/metadata-fs': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 chokidar: 5.0.0 glob: 13.0.6 js-yaml: 5.3.0 - zod: 4.4.3 + zod: 4.6.5 transitivePeerDependencies: - ai - vitest - '@objectstack/objectql@17.4.0(vitest@4.1.10)': + '@objectstack/objectql@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/formula': 17.4.0 - '@objectstack/metadata': 17.4.0(vitest@4.1.10) - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/metadata-protocol': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/formula': 17.5.0 + '@objectstack/metadata': 17.5.0(vitest@4.1.10) + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/metadata-protocol': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 ajv: 8.20.0 ajv-formats: 3.0.1 - zod: 4.4.3 + zod: 4.6.5 transitivePeerDependencies: - ai - vitest - '@objectstack/observability@17.4.0': + '@objectstack/observability@17.5.0': dependencies: - '@objectstack/spec': 17.4.0 + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - '@objectstack/platform-objects@17.4.0(vitest@4.1.10)': + '@objectstack/platform-objects@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-approvals@17.4.0(vitest@4.1.10)': + '@objectstack/plugin-approvals@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/formula': 17.4.0 - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/formula': 17.5.0 + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-audit@17.4.0(vitest@4.1.10)': + '@objectstack/plugin-audit@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/objectql': 17.4.0(vitest@4.1.10) - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/objectql': 17.5.0(vitest@4.1.10) + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-auth@17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@12.11.1)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': + '@objectstack/plugin-auth@17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@12.11.1)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) - '@better-auth/oauth-provider': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.4.3)) - '@better-auth/scim': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(better-auth@1.7.2(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.4.3)) - '@better-auth/sso': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.4.3)) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/oauth-provider': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.3(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5)) + '@better-auth/scim': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(better-auth@1.7.3(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5)) + '@better-auth/sso': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.3(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5)) '@noble/hashes': 2.3.0 - '@objectstack/core': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/rest': 17.4.0(vitest@4.1.10) - '@objectstack/service-messaging': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 - better-auth: 1.7.2(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10) + '@objectstack/core': 17.5.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/rest': 17.5.0(vitest@4.1.10) + '@objectstack/service-messaging': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 + better-auth: 1.7.3(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10) jose: 6.2.9 transitivePeerDependencies: - '@better-auth/utils' @@ -4196,20 +4194,20 @@ snapshots: - vitest - vue - '@objectstack/plugin-auth@17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': + '@objectstack/plugin-auth@17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) - '@better-auth/oauth-provider': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.4.3)) - '@better-auth/scim': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.4.3)) - '@better-auth/sso': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.4.3)) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/oauth-provider': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.3(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5)) + '@better-auth/scim': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(better-auth@1.7.3(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5)) + '@better-auth/sso': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.3(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5)) '@noble/hashes': 2.3.0 - '@objectstack/core': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/rest': 17.4.0(vitest@4.1.10) - '@objectstack/service-messaging': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 - better-auth: 1.7.2(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10) + '@objectstack/core': 17.5.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/rest': 17.5.0(vitest@4.1.10) + '@objectstack/service-messaging': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 + better-auth: 1.7.3(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10) jose: 6.2.9 transitivePeerDependencies: - '@better-auth/utils' @@ -4240,122 +4238,112 @@ snapshots: - vitest - vue - '@objectstack/plugin-email@17.4.0(vitest@4.1.10)': + '@objectstack/plugin-email@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/formula': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - nodemailer: 9.0.5 + '@objectstack/core': 17.5.0 + '@objectstack/formula': 17.5.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + nodemailer: 10.0.12 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-hono-server@17.4.0': + '@objectstack/plugin-hono-server@17.5.0': dependencies: - '@hono/node-server': 2.1.1(hono@4.13.3) - '@objectstack/core': 17.4.0 - '@objectstack/observability': 17.4.0 - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 - hono: 4.13.3 + '@hono/node-server': 2.1.1(hono@4.13.11) + '@objectstack/core': 17.5.0 + '@objectstack/observability': 17.5.0 + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 + hono: 4.13.11 transitivePeerDependencies: - ai - '@objectstack/plugin-pinyin-search@17.4.0(vitest@4.1.10)': + '@objectstack/plugin-pinyin-search@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/objectql': 17.4.0(vitest@4.1.10) - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/objectql': 17.5.0(vitest@4.1.10) + '@objectstack/types': 17.5.0 pinyin-pro: 3.29.3 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-reports@17.4.0(vitest@4.1.10)': + '@objectstack/plugin-security@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - croner: 10.0.1 + '@objectstack/core': 17.5.0 + '@objectstack/formula': 17.5.0 + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-security@17.4.0(vitest@4.1.10)': + '@objectstack/plugin-sharing@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/formula': 17.4.0 - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/formula': 17.5.0 + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/objectql': 17.5.0(vitest@4.1.10) + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-sharing@17.4.0(vitest@4.1.10)': + '@objectstack/plugin-webhooks@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/formula': 17.4.0 - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/objectql': 17.4.0(vitest@4.1.10) - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/service-messaging': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-webhooks@17.4.0(vitest@4.1.10)': + '@objectstack/rest@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/service-messaging': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - transitivePeerDependencies: - - ai - - vitest - - '@objectstack/rest@17.4.0(vitest@4.1.10)': - dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/observability': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/service-package': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/observability': 17.5.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/service-package': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 exceljs: 4.4.0 - zod: 4.4.3 + zod: 4.6.5 transitivePeerDependencies: - ai - vitest - '@objectstack/runtime@17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@12.11.1)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': - dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/driver-memory': 17.4.0 - '@objectstack/driver-sql': 17.4.0 - '@objectstack/driver-sqlite-wasm': 17.4.0(better-sqlite3@12.11.1) - '@objectstack/formula': 17.4.0 - '@objectstack/metadata': 17.4.0(vitest@4.1.10) - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/metadata-protocol': 17.4.0(vitest@4.1.10) - '@objectstack/objectql': 17.4.0(vitest@4.1.10) - '@objectstack/observability': 17.4.0 - '@objectstack/plugin-auth': 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@12.11.1)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/plugin-security': 17.4.0(vitest@4.1.10) - '@objectstack/rest': 17.4.0(vitest@4.1.10) - '@objectstack/service-cluster': 17.4.0 - '@objectstack/service-datasource': 17.4.0(@objectstack/driver-mongodb@17.4.0)(@objectstack/driver-sqlite-wasm@17.4.0(better-sqlite3@12.11.1)) - '@objectstack/service-i18n': 17.4.0 - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/runtime@17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@12.11.1)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': + dependencies: + '@objectstack/core': 17.5.0 + '@objectstack/driver-memory': 17.5.0 + '@objectstack/driver-sql': 17.5.0 + '@objectstack/driver-sqlite-wasm': 17.5.0(better-sqlite3@12.11.1) + '@objectstack/formula': 17.5.0 + '@objectstack/metadata': 17.5.0(vitest@4.1.10) + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/metadata-protocol': 17.5.0(vitest@4.1.10) + '@objectstack/objectql': 17.5.0(vitest@4.1.10) + '@objectstack/observability': 17.5.0 + '@objectstack/plugin-auth': 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@12.11.1)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/plugin-security': 17.5.0(vitest@4.1.10) + '@objectstack/rest': 17.5.0(vitest@4.1.10) + '@objectstack/service-cluster': 17.5.0 + '@objectstack/service-datasource': 17.5.0(@objectstack/driver-mongodb@17.5.0)(@objectstack/driver-sqlite-wasm@17.5.0(better-sqlite3@12.11.1)) + '@objectstack/service-i18n': 17.5.0 + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 quickjs-emscripten: 0.32.0 - zod: 4.4.3 + zod: 4.6.5 optionalDependencies: - '@objectstack/driver-mongodb': 17.4.0 + '@objectstack/driver-mongodb': 17.5.0 transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@better-auth/utils' @@ -4399,30 +4387,30 @@ snapshots: - vitest - vue - '@objectstack/runtime@17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': - dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/driver-memory': 17.4.0 - '@objectstack/driver-sql': 17.4.0 - '@objectstack/driver-sqlite-wasm': 17.4.0(better-sqlite3@13.0.3) - '@objectstack/formula': 17.4.0 - '@objectstack/metadata': 17.4.0(vitest@4.1.10) - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/metadata-protocol': 17.4.0(vitest@4.1.10) - '@objectstack/objectql': 17.4.0(vitest@4.1.10) - '@objectstack/observability': 17.4.0 - '@objectstack/plugin-auth': 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/plugin-security': 17.4.0(vitest@4.1.10) - '@objectstack/rest': 17.4.0(vitest@4.1.10) - '@objectstack/service-cluster': 17.4.0 - '@objectstack/service-datasource': 17.4.0(@objectstack/driver-mongodb@17.4.0)(@objectstack/driver-sqlite-wasm@17.4.0(better-sqlite3@12.11.1)) - '@objectstack/service-i18n': 17.4.0 - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/runtime@17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': + dependencies: + '@objectstack/core': 17.5.0 + '@objectstack/driver-memory': 17.5.0 + '@objectstack/driver-sql': 17.5.0 + '@objectstack/driver-sqlite-wasm': 17.5.0(better-sqlite3@13.0.3) + '@objectstack/formula': 17.5.0 + '@objectstack/metadata': 17.5.0(vitest@4.1.10) + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/metadata-protocol': 17.5.0(vitest@4.1.10) + '@objectstack/objectql': 17.5.0(vitest@4.1.10) + '@objectstack/observability': 17.5.0 + '@objectstack/plugin-auth': 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/plugin-security': 17.5.0(vitest@4.1.10) + '@objectstack/rest': 17.5.0(vitest@4.1.10) + '@objectstack/service-cluster': 17.5.0 + '@objectstack/service-datasource': 17.5.0(@objectstack/driver-mongodb@17.5.0)(@objectstack/driver-sqlite-wasm@17.5.0(better-sqlite3@12.11.1)) + '@objectstack/service-i18n': 17.5.0 + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 quickjs-emscripten: 0.32.0 - zod: 4.4.3 + zod: 4.6.5 optionalDependencies: - '@objectstack/driver-mongodb': 17.4.0 + '@objectstack/driver-mongodb': 17.5.0 transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@better-auth/utils' @@ -4466,53 +4454,54 @@ snapshots: - vitest - vue - '@objectstack/sdui-parser@17.4.0': {} + '@objectstack/sdui-parser@17.5.0': {} - '@objectstack/service-analytics@17.4.0': + '@objectstack/service-analytics@17.5.0': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 transitivePeerDependencies: - ai - '@objectstack/service-automation@17.4.0(vitest@4.1.10)': + '@objectstack/service-automation@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/formula': 17.4.0 - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/formula': 17.5.0 + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/service-cache@17.4.0': + '@objectstack/service-cache@17.5.0': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/observability': 17.4.0 - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/observability': 17.5.0 + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - '@objectstack/service-cluster@17.4.0': + '@objectstack/service-cluster@17.5.0': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - '@objectstack/service-datasource@17.4.0(@objectstack/driver-mongodb@17.4.0)(@objectstack/driver-sqlite-wasm@17.4.0(better-sqlite3@12.11.1))': + '@objectstack/service-datasource@17.5.0(@objectstack/driver-mongodb@17.5.0)(@objectstack/driver-sqlite-wasm@17.5.0(better-sqlite3@12.11.1))': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/driver-memory': 17.4.0 - '@objectstack/driver-sql': 17.4.0 - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/driver-memory': 17.5.0 + '@objectstack/driver-sql': 17.5.0 + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 pg-connection-string: 2.14.0 optionalDependencies: - '@objectstack/driver-mongodb': 17.4.0 - '@objectstack/driver-sqlite-wasm': 17.4.0(better-sqlite3@12.11.1) + '@objectstack/driver-mongodb': 17.5.0 + '@objectstack/driver-sqlite-wasm': 17.5.0(better-sqlite3@12.11.1) transitivePeerDependencies: - ai - mariadb @@ -4525,77 +4514,77 @@ snapshots: - supports-color - tedious - '@objectstack/service-i18n@17.4.0': + '@objectstack/service-i18n@17.5.0': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 transitivePeerDependencies: - ai - '@objectstack/service-job@17.4.0(vitest@4.1.10)': + '@objectstack/service-job@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 croner: 10.0.1 transitivePeerDependencies: - ai - vitest - '@objectstack/service-messaging@17.4.0(vitest@4.1.10)': + '@objectstack/service-messaging@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/service-package@17.4.0(vitest@4.1.10)': + '@objectstack/service-package@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/metadata-core': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/service-queue@17.4.0(vitest@4.1.10)': + '@objectstack/service-queue@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/service-realtime@17.4.0(vitest@4.1.10)': + '@objectstack/service-realtime@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/service-settings@17.4.0(vitest@4.1.10)': + '@objectstack/service-settings@17.5.0(vitest@4.1.10)': dependencies: '@noble/ciphers': 2.3.0 - '@objectstack/core': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/service-sms@17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': + '@objectstack/service-sms@17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/plugin-auth': 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/plugin-auth': 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - '@better-auth/utils' - '@better-fetch/fetch' @@ -4625,75 +4614,78 @@ snapshots: - vitest - vue - '@objectstack/service-storage@17.4.0(vitest@4.1.10)': + '@objectstack/service-storage@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/observability': 17.4.0 - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/observability': 17.5.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/setup@17.4.0(vitest@4.1.10)': + '@objectstack/setup@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - vitest - '@objectstack/spec@17.4.0': + '@objectstack/spec@17.5.0': dependencies: pg-connection-string: 2.14.0 - zod: 4.4.3 + zod: 4.6.5 - '@objectstack/trigger-api@17.4.0': + '@objectstack/trigger-api@17.5.0': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - '@objectstack/trigger-record-change@17.4.0': + '@objectstack/trigger-record-change@17.5.0': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - '@objectstack/trigger-schedule@17.4.0': + '@objectstack/trigger-schedule@17.5.0(vitest@4.1.10)': dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/spec': 17.4.0 + '@objectstack/core': 17.5.0 + '@objectstack/metadata-core': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 croner: 10.0.1 transitivePeerDependencies: - ai + - vitest - '@objectstack/types@17.4.0': + '@objectstack/types@17.5.0': dependencies: - '@objectstack/spec': 17.4.0 + '@objectstack/spec': 17.5.0 transitivePeerDependencies: - ai - '@objectstack/verify@17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@objectstack/driver-mongodb@17.4.0)(@objectstack/driver-sqlite-wasm@17.4.0(better-sqlite3@12.11.1))(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': - dependencies: - '@objectstack/core': 17.4.0 - '@objectstack/objectql': 17.4.0(vitest@4.1.10) - '@objectstack/platform-objects': 17.4.0(vitest@4.1.10) - '@objectstack/plugin-auth': 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/plugin-hono-server': 17.4.0 - '@objectstack/plugin-security': 17.4.0(vitest@4.1.10) - '@objectstack/plugin-sharing': 17.4.0(vitest@4.1.10) - '@objectstack/rest': 17.4.0(vitest@4.1.10) - '@objectstack/runtime': 17.4.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/service-analytics': 17.4.0 - '@objectstack/service-automation': 17.4.0(vitest@4.1.10) - '@objectstack/service-datasource': 17.4.0(@objectstack/driver-mongodb@17.4.0)(@objectstack/driver-sqlite-wasm@17.4.0(better-sqlite3@12.11.1)) - '@objectstack/service-settings': 17.4.0(vitest@4.1.10) - '@objectstack/spec': 17.4.0 - '@objectstack/types': 17.4.0 + '@objectstack/verify@17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@objectstack/driver-mongodb@17.5.0)(@objectstack/driver-sqlite-wasm@17.5.0(better-sqlite3@12.11.1))(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10)': + dependencies: + '@objectstack/core': 17.5.0 + '@objectstack/objectql': 17.5.0(vitest@4.1.10) + '@objectstack/platform-objects': 17.5.0(vitest@4.1.10) + '@objectstack/plugin-auth': 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/plugin-hono-server': 17.5.0 + '@objectstack/plugin-security': 17.5.0(vitest@4.1.10) + '@objectstack/plugin-sharing': 17.5.0(vitest@4.1.10) + '@objectstack/rest': 17.5.0(vitest@4.1.10) + '@objectstack/runtime': 17.5.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.5.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/service-analytics': 17.5.0 + '@objectstack/service-automation': 17.5.0(vitest@4.1.10) + '@objectstack/service-datasource': 17.5.0(@objectstack/driver-mongodb@17.5.0)(@objectstack/driver-sqlite-wasm@17.5.0(better-sqlite3@12.11.1)) + '@objectstack/service-settings': 17.5.0(vitest@4.1.10) + '@objectstack/spec': 17.5.0 + '@objectstack/types': 17.5.0 transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@better-auth/utils' @@ -5037,7 +5029,7 @@ snapshots: '@xmldom/xmldom@0.8.13': {} - '@xmldom/xmldom@0.9.11': {} + '@xmldom/xmldom@0.9.12': {} accepts@2.0.0: dependencies: @@ -5137,25 +5129,25 @@ snapshots: base64-js@1.5.1: {} - better-auth@1.7.2(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10): + better-auth@1.7.3(better-sqlite3@12.11.1)(mongodb@7.5.0)(vitest@4.1.10): dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) - '@better-auth/drizzle-adapter': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2) - '@better-auth/kysely-adapter': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(kysely@0.29.4) - '@better-auth/memory-adapter': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2) - '@better-auth/mongo-adapter': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(mongodb@7.5.0) - '@better-auth/prisma-adapter': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2) - '@better-auth/telemetry': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/drizzle-adapter': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2) + '@better-auth/kysely-adapter': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(kysely@0.29.4) + '@better-auth/memory-adapter': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2) + '@better-auth/mongo-adapter': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(mongodb@7.5.0) + '@better-auth/prisma-adapter': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2) + '@better-auth/telemetry': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@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.3.0 '@noble/hashes': 2.3.0 - better-call: 1.4.0(zod@4.4.3) + better-call: 1.4.0(zod@4.6.5) defu: 6.1.7 jose: 6.2.9 kysely: 0.29.4 nanostores: 1.4.2 - zod: 4.4.3 + zod: 4.6.5 optionalDependencies: better-sqlite3: 12.11.1 mongodb: 7.5.0 @@ -5164,25 +5156,25 @@ snapshots: - '@cloudflare/workers-types' - '@opentelemetry/api' - better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10): + better-auth@1.7.3(better-sqlite3@13.0.3)(mongodb@7.5.0)(vitest@4.1.10): dependencies: - '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) - '@better-auth/drizzle-adapter': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2) - '@better-auth/kysely-adapter': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(kysely@0.29.4) - '@better-auth/memory-adapter': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2) - '@better-auth/mongo-adapter': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(mongodb@7.5.0) - '@better-auth/prisma-adapter': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2) - '@better-auth/telemetry': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.4.3))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1) + '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2) + '@better-auth/drizzle-adapter': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2) + '@better-auth/kysely-adapter': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(kysely@0.29.4) + '@better-auth/memory-adapter': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2) + '@better-auth/mongo-adapter': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(mongodb@7.5.0) + '@better-auth/prisma-adapter': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2) + '@better-auth/telemetry': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.9)(kysely@0.29.4)(nanostores@1.4.2))(@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.3.0 '@noble/hashes': 2.3.0 - better-call: 1.4.0(zod@4.4.3) + better-call: 1.4.0(zod@4.6.5) defu: 6.1.7 jose: 6.2.9 kysely: 0.29.4 nanostores: 1.4.2 - zod: 4.4.3 + zod: 4.6.5 optionalDependencies: better-sqlite3: 13.0.3 mongodb: 7.5.0 @@ -5191,14 +5183,14 @@ snapshots: - '@cloudflare/workers-types' - '@opentelemetry/api' - better-call@1.4.0(zod@4.4.3): + better-call@1.4.0(zod@4.6.5): dependencies: '@better-auth/utils': 0.5.0 '@better-fetch/fetch': 1.3.1 rou3: 0.9.2 set-cookie-parser: 3.1.2 optionalDependencies: - zod: 4.4.3 + zod: 4.6.5 better-sqlite3@12.11.1: dependencies: @@ -5376,7 +5368,7 @@ snapshots: crc-32: 1.2.2 readable-stream: 3.6.2 - create-objectstack@17.4.0: + create-objectstack@17.5.0: dependencies: chalk: 6.0.0 commander: 15.0.0 @@ -5664,7 +5656,7 @@ snapshots: mkdirp: 0.5.6 rimraf: 2.7.1 - fumadocs-core@16.9.3(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(zod@4.4.3): + fumadocs-core@16.9.3(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(zod@4.6.5): dependencies: '@orama/orama': 3.1.18 estree-util-value-to-estree: 3.5.0 @@ -5687,7 +5679,7 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdast': 4.0.4 - zod: 4.4.3 + zod: 4.6.5 transitivePeerDependencies: - supports-color @@ -5806,6 +5798,8 @@ snapshots: dependencies: '@types/hast': 3.0.5 + hono@4.13.11: {} + hono@4.13.3: {} html-escaper@2.0.2: {} @@ -6622,7 +6616,7 @@ snapshots: dependencies: asn1: 0.2.6 - nodemailer@9.0.5: {} + nodemailer@10.0.12: {} normalize-path@3.0.0: {} @@ -7404,8 +7398,6 @@ snapshots: xpath@0.0.34: {} - yaml@2.9.0: {} - yaml@2.9.1: {} zip-stream@4.1.1: @@ -7414,10 +7406,10 @@ snapshots: compress-commons: 4.1.2 readable-stream: 3.6.2 - zod-to-json-schema@3.25.2(zod@4.4.3): + zod-to-json-schema@3.25.2(zod@4.6.5): dependencies: - zod: 4.4.3 + zod: 4.6.5 - zod@4.4.3: {} + zod@4.6.5: {} zwitch@2.0.4: {} diff --git a/scripts/check-lint-i18n-gate.mjs b/scripts/check-lint-i18n-gate.mjs index 498f909a5..db7ea736d 100644 --- a/scripts/check-lint-i18n-gate.mjs +++ b/scripts/check-lint-i18n-gate.mjs @@ -141,7 +141,12 @@ export function main(argv = process.argv.slice(2), { log = console.log, error = '(non-default-locale misses are warnings, not errors) — see #1018. Run:' ); error(' pnpm exec objectstack lint --json'); - error('to see the full report, or `pnpm exec objectstack i18n extract` to scaffold the missing keys.'); + error('to see the full report, or scaffold the missing keys with'); + error(' pnpm exec objectstack i18n extract --no-objects-only --no-metadata-forms --locales='); + error( + '(the default `--objects-only` covers objects only — page, app and dashboard keys ' + + 'need `--no-objects-only`).' + ); return 1; } diff --git a/src/marketing/flows/campaign-enrollment.flow.ts b/src/marketing/flows/campaign-enrollment.flow.ts index 45e9f9d6c..07fae3778 100644 --- a/src/marketing/flows/campaign-enrollment.flow.ts +++ b/src/marketing/flows/campaign-enrollment.flow.ts @@ -54,9 +54,8 @@ export const CampaignEnrollmentFlow: Flow = { * `context.params.memberSource` still WINS over it. * * ⚠️ Measured on the 17.1.0 spec, with the schema key re-checked on 17.2.0. - * Neither that key nor the seeding behaviour has been re-checked against the - * current pin, 17.4.0 since PR #1814 (#1807) — nor was either re-checked on - * the 17.3.0 pin that preceded it. + * Neither that key nor the seeding behaviour was re-checked on 17.3.0 or + * 17.4.0 (PR #1814, #1807), nor on 17.5.0, the pin since the 17.5.0 bump. * * ⛔ Never seed this with an assignment node instead. An assignment is * unconditional, so it CLOBBERS a supplied param — measured: launching with diff --git a/src/revenue/objects/quote.hook.ts b/src/revenue/objects/quote.hook.ts index 46fc11282..f9f829302 100644 --- a/src/revenue/objects/quote.hook.ts +++ b/src/revenue/objects/quote.hook.ts @@ -115,10 +115,9 @@ const quoteValidation: Hook = { // master-detail cascade) that person's account undeletable forever. // // Measured on 17.1.0 — the version this repo pinned AT THE TIME of - // the measurement, not the current pin (this repo has pinned 17.4.0 - // since PR #1814, #1807, and the cascade shape below has NOT been - // re-measured on it; it was not re-measured on the 17.3.0 pin either, - // #1676) — with a probe hook at priority 199 immediately + // the measurement, not the current pin (the cascade shape below has + // NOT been re-measured on any later pin — not 17.3.0, #1676, not + // 17.4.0, PR #1814, and not 17.5.0) — with a probe hook at priority 199 immediately // ahead of each guard, not assumed. // The engine builds its cleanup write on the CALLER's own context // plus two engine keys, so on the path a REST `DELETE` takes, the diff --git a/src/sales/actions/lead.actions.ts b/src/sales/actions/lead.actions.ts index 77069bebf..ba8d67ad8 100644 --- a/src/sales/actions/lead.actions.ts +++ b/src/sales/actions/lead.actions.ts @@ -71,8 +71,8 @@ export const ConvertLeadAction: Action = { // are the shape that still earns one. // // Mechanism, measured on the console this app pinned at that taking - // (@objectstack/console 17.3.0, `dist/assets/`; the app pins 17.4.0 since PR - // #1814, #1807, and this bundle read was ⛔ NOT re-taken there) rather than + // (@objectstack/console 17.3.0, `dist/assets/`; this bundle read was ⛔ NOT + // re-taken on any later pin — 17.4.0, PR #1814, or 17.5.0) rather than // assumed: the runner gates the dialog on // the key's presence alone — // if (action.confirmText && !await confirmHandler(evaluate(action.confirmText))) diff --git a/src/sales/actions/opportunity.actions.ts b/src/sales/actions/opportunity.actions.ts index d0c8e85ec..9ee151e5d 100644 --- a/src/sales/actions/opportunity.actions.ts +++ b/src/sales/actions/opportunity.actions.ts @@ -139,7 +139,7 @@ export const MassUpdateStageAction: Action = { // from the UI. Collect the miss, keep going, reject once at the end. // // The catch is deliberately cause-AGNOSTIC — but NOT because the cause - // is invisible. On the pinned runtime (17.4.0, \`hostErrorToVm\`) a host + // is invisible. Read on 17.4.0 (\`hostErrorToVm\`; not re-read on 17.5.0), a host // rejection reaches a body as \`name\` and \`message\` plus, when the host // error carries them, \`code\`, \`status\`, \`fields\` and \`userMessage\` — // nothing else, so a stale id arrives branchable as diff --git a/src/sales/dashboards/activity.dashboard.ts b/src/sales/dashboards/activity.dashboard.ts index f228f5472..3ebcda9c4 100644 --- a/src/sales/dashboards/activity.dashboard.ts +++ b/src/sales/dashboards/activity.dashboard.ts @@ -23,7 +23,7 @@ import type { Dashboard } from '@objectstack/spec/ui'; * are fixed and released: objectstack#3912 (the coercion) and objectstack#3777 * (a bare-date `$lte` dropping same-day rows) — both under the **17.0.0** * heading of the installed `driver-sql` and `service-analytics` CHANGELOGs, - * and this app pins 17.4.0 (PR #1814, #1807). `service.dashboard.ts` records + * and every pin since 17.0.0 carries both. `service.dashboard.ts` records * the same two * closures, which is why #1157 restored the Service picker; the two files * agree, and neither states an upstream fix as an unmet precondition. @@ -139,15 +139,9 @@ export const ActivityDashboard: Dashboard = { dataset: 'event_metrics', dimensions: ['owner'], values: ['event_count'], layout: { x: 0, y: 2, w: 6, h: 4 }, chartConfig: { - type: 'bar', showLegend: false, showDataLabels: true, colors: ['#10B981'], - // Axis titles stay plain English: `ChartAxisSchema.title` accepts an inline - // locale map but the Console flattens it to the map's FIRST value regardless - // of locale — measured, see `src/dashboards/index.ts` (#1822). - xAxis: { field: 'owner', title: 'Rep', showGridLines: false, logarithmic: false }, - yAxis: [{ field: 'event_count', title: 'Interactions', showGridLines: true, logarithmic: false }], }, }, { @@ -164,12 +158,9 @@ export const ActivityDashboard: Dashboard = { dataset: 'event_metrics', dimensions: ['start_datetime'], values: ['event_count'], layout: { x: 6, y: 2, w: 6, h: 4 }, chartConfig: { - type: 'area', showLegend: false, showDataLabels: false, colors: ['#0EA5E9'], - xAxis: { field: 'start_datetime', title: 'Week', showGridLines: false, logarithmic: false }, - yAxis: [{ field: 'event_count', title: 'Interactions', showGridLines: true, logarithmic: false }], interaction: { tooltips: true, brush: true }, }, }, @@ -185,7 +176,6 @@ export const ActivityDashboard: Dashboard = { dataset: 'event_metrics', dimensions: ['type'], values: ['event_count'], layout: { x: 0, y: 6, w: 4, h: 4 }, chartConfig: { - type: 'donut', showLegend: true, showDataLabels: true, colors: ['#4169E1', '#10B981', '#8B5CF6', '#F59E0B', '#0EA5E9', '#94A3B8'], @@ -201,12 +191,9 @@ export const ActivityDashboard: Dashboard = { dataset: 'event_metrics', dimensions: ['related_to_type'], values: ['event_count'], layout: { x: 4, y: 6, w: 4, h: 4 }, chartConfig: { - type: 'bar', showLegend: false, showDataLabels: true, colors: ['#4169E1'], - xAxis: { field: 'related_to_type', title: 'Related To', showGridLines: false, logarithmic: false }, - yAxis: [{ field: 'event_count', title: 'Interactions', showGridLines: true, logarithmic: false }], }, }, { diff --git a/src/sales/dashboards/crm.dashboard.ts b/src/sales/dashboards/crm.dashboard.ts index c981c27bb..685cb01b3 100644 --- a/src/sales/dashboards/crm.dashboard.ts +++ b/src/sales/dashboards/crm.dashboard.ts @@ -113,15 +113,9 @@ export const CrmOverviewDashboard: Dashboard = { dataset: 'opportunity_metrics', dimensions: ['close_date'], values: ['total_amount'], layout: { x: 0, y: 2, w: 9, h: 4 }, chartConfig: { - type: 'area', showLegend: false, showDataLabels: false, colors: ['#10B981'], - // Axis titles stay plain English: `ChartAxisSchema.title` accepts an inline - // locale map but the Console flattens it to the map's FIRST value regardless - // of locale — measured, see `src/dashboards/index.ts` (#1822). - xAxis: { field: 'close_date', title: 'Month', showGridLines: false, logarithmic: false }, - yAxis: [{ field: 'total_amount', title: 'Revenue', format: '0,0', showGridLines: true, logarithmic: false }], interaction: { tooltips: true, brush: true }, }, options: { dateGranularity: 'month' }, @@ -135,7 +129,6 @@ export const CrmOverviewDashboard: Dashboard = { dataset: 'opportunity_metrics', dimensions: ['lead_source'], values: ['total_amount'], layout: { x: 9, y: 2, w: 3, h: 4 }, chartConfig: { - type: 'donut', showLegend: true, showDataLabels: true, colors: ['#4F46E5', '#06B6D4', '#10B981', '#F59E0B', '#EF4444', '#8B5CF6'], @@ -161,12 +154,9 @@ export const CrmOverviewDashboard: Dashboard = { dataset: 'product_metrics', dimensions: ['category'], values: ['list_price_sum'], layout: { x: 6, y: 6, w: 6, h: 4 }, chartConfig: { - type: 'bar', showLegend: false, showDataLabels: true, colors: ['#4F46E5'], - xAxis: { field: 'category', title: 'Category', showGridLines: false, logarithmic: false }, - yAxis: [{ field: 'list_price_sum', title: 'Revenue', format: '0,0', showGridLines: true, logarithmic: false }], }, }, diff --git a/src/sales/dashboards/index.ts b/src/sales/dashboards/index.ts index 313d3c05f..ff8461a60 100644 --- a/src/sales/dashboards/index.ts +++ b/src/sales/dashboards/index.ts @@ -8,7 +8,7 @@ * `@objectstack/spec` types BOTH `GlobalFilterSchema.label` and * `ChartAxisSchema.title` as `I18nLabelSchema` — `z.union([z.string(), * InlineLocaleMapSchema])` — so both accept `{ en, 'zh-CN', … }`. Only the - * filter half is resolved against the viewer's locale. Measured on the pinned + * filter half is resolved against the viewer's locale. Measured on * `@objectstack/console@17.4.0`, driving the real Console in Chromium, not * read off a docblock: * @@ -16,15 +16,13 @@ * calls the inline-map resolver with the active language, so `zh-CN` * renders the `zh-CN` value and `ja-JP` the `ja-JP` one. This is the * spelling every `globalFilters[]` entry in this folder uses. - * - AXIS `title` → NOT locale-aware. The axis normaliser flattens the map - * with `Object.values(map).find(v => typeof v === 'string')` — the FIRST - * value, whatever the viewer's locale. Measured both ways: with `en` - * first a `zh-CN` browser rendered the English; with `'zh-CN'` first an - * `en` browser rendered the Chinese. So an inline map on an axis does not - * translate anything, it just makes the one hardcoded string harder to - * read. ⛔ Do not write one — the axis titles in this folder stay plain - * English strings until the platform resolves them, and dropping the - * `title` renders no axis title at all rather than a translated fallback. + * - AXIS `title` → NOT locale-aware on 17.4.0 (the axis normaliser took the + * map's FIRST value, whatever the viewer's locale). Since + * `@objectstack/spec@17.5.0` the question no longer arises for this + * folder: a dataset-bound widget's `chartConfig` refuses `type`, `xAxis`, + * `yAxis` and `series` (ADR-0021 · ADR-0049 D2) — the widget's `type`, + * `dimensions` and `values` are the only binding — so no widget here + * carries an axis title any more. * * ⚠️ `GlobalFilterSchema.object` — documented upstream as resolving a * filter's field and option labels through `fields..` — is diff --git a/src/sales/dashboards/sales.dashboard.ts b/src/sales/dashboards/sales.dashboard.ts index 56c237c10..cfb4d9692 100644 --- a/src/sales/dashboards/sales.dashboard.ts +++ b/src/sales/dashboards/sales.dashboard.ts @@ -188,20 +188,14 @@ export const SalesDashboard: Dashboard = { dataset: 'opportunity_metrics', dimensions: ['close_date'], values: ['total_amount'], layout: { x: 6, y: 4, w: 6, h: 4 }, chartConfig: { - type: 'area', showLegend: false, showDataLabels: false, colors: ['#10B981'], - // Axis titles stay plain English: `ChartAxisSchema.title` accepts an inline - // locale map but the Console flattens it to the map's FIRST value regardless - // of locale — measured, see `src/dashboards/index.ts` (#1822). - xAxis: { field: 'close_date', title: 'Month', showGridLines: false, logarithmic: false }, // No quota annotation line: ChartAnnotationSchema only takes a STATIC // value, and the real quotas live per-owner/per-period in // crm_forecast.quota (seeded 500k–1.5M — the old hardcoded 100000 was // fiction). Quota vs. actual is the quota_attainment_by_rep table // below, bound to the forecast_metrics dataset. - yAxis: [{ field: 'total_amount', title: 'Revenue', format: '0,0', showGridLines: true, logarithmic: false }], interaction: { tooltips: true, brush: true }, }, options: { dateGranularity: 'month' }, @@ -218,12 +212,9 @@ export const SalesDashboard: Dashboard = { dataset: 'opportunity_metrics', dimensions: ['forecast_category'], values: ['total_amount'], layout: { x: 0, y: 8, w: 6, h: 4 }, chartConfig: { - type: 'horizontal-bar', showLegend: false, showDataLabels: true, colors: ['#4F46E5'], - xAxis: { field: 'forecast_category', title: 'Forecast', showGridLines: false, logarithmic: false }, - yAxis: [{ field: 'total_amount', title: 'Pipeline value', format: '0,0', showGridLines: true, logarithmic: false }], }, }, { @@ -236,7 +227,6 @@ export const SalesDashboard: Dashboard = { dataset: 'opportunity_metrics', dimensions: ['lead_source'], values: ['total_amount'], layout: { x: 6, y: 8, w: 6, h: 4 }, chartConfig: { - type: 'donut', showLegend: true, showDataLabels: true, colors: ['#4F46E5', '#06B6D4', '#10B981', '#F59E0B', '#EF4444', '#8B5CF6'], @@ -323,10 +313,9 @@ export const SalesDashboard: Dashboard = { // through a real engine and pins a three-way outcome (current quarter // only: not zero rows, not every quarter). First taken on 17.0.0-rc.2; // RE-RUN 2026-09-03 on 17.2.0 (#1467), RE-RUN on 17.3.0 (#1676, the PR - // #1577 pin) and RE-RUN again on 17.4.0 — the version `package.json` - // pins and `node_modules` installs since PR #1814 (#1807) — green all - // four times, so the outcome holds on the - // CURRENT pin and not only on the one it was first taken on. + // #1577 pin) and RE-RUN again on 17.4.0 (PR #1814, #1807) — green all + // four times, so the outcome held on every pin it was taken on, not + // only the first. Not yet re-run on 17.5.0. // // What stood here before described the two paths as asymmetric and told // the next author not to generalise between them. That was true on @@ -449,7 +438,6 @@ export const SalesDashboard: Dashboard = { dataset: 'opportunity_metrics', dimensions: ['loss_reason'], values: ['opp_count'], layout: { x: 0, y: 24, w: 12, h: 4 }, chartConfig: { - type: 'donut', showLegend: true, showDataLabels: true, colors: ['#EF4444', '#F59E0B', '#8B5CF6', '#06B6D4', '#4F46E5', '#10B981', '#64748B'], diff --git a/src/sales/flows/_guarded-iteration.ts b/src/sales/flows/_guarded-iteration.ts index 4381f994f..2cd799701 100644 --- a/src/sales/flows/_guarded-iteration.ts +++ b/src/sales/flows/_guarded-iteration.ts @@ -31,8 +31,8 @@ * * ## Verified against the pinned `@objectstack/*` this repo installs * - * First taken on 17.3.0; RE-TAKEN on the current pin 17.4.0 (#1883, after the - * PR #1814 bump), same verdict: a 5-item sweep whose body fails on every item + * First taken on 17.3.0; RE-TAKEN on 17.4.0 (#1883, after the PR #1814 bump; + * not re-taken on 17.5.0), same verdict: a 5-item sweep whose body fails on every item * ran to completion — all 5 items touched, run `success: true` — where the * same sweep with the body UNWRAPPED stopped at the first failure with 1 item * touched and the run `failed`. That contrast IS the measurement; a guarded diff --git a/src/sales/flows/account-approval.flow.ts b/src/sales/flows/account-approval.flow.ts index 5334bd926..69b629a3f 100644 --- a/src/sales/flows/account-approval.flow.ts +++ b/src/sales/flows/account-approval.flow.ts @@ -29,7 +29,7 @@ type Flow = Automation.Flow; * that wants no account sign-off sets it to `approved`, the start condition * below is then false for every record that will ever exist, and the gate is * off AND still switchable. ⛔ Do NOT reach for `status: 'draft'` or - * `'obsolete'` instead — both were measured on the pinned + * `'obsolete'` instead — both were measured on * `@objectstack/service-automation` 17.4.0 and neither is an off switch: draft * flows still fire their triggers, and `isFlowEnabled` composes authoring * status with the installation's activation ledger so that `obsolete` is a gate diff --git a/src/sales/flows/lead-conversion-approval.flow.ts b/src/sales/flows/lead-conversion-approval.flow.ts index 214dfd366..f3e1e0429 100644 --- a/src/sales/flows/lead-conversion-approval.flow.ts +++ b/src/sales/flows/lead-conversion-approval.flow.ts @@ -26,7 +26,7 @@ type Flow = Automation.Flow; * `lead.hook.ts` refuses its conversion until this flow writes a verdict. * * ⛔ Do NOT reach for `status: 'draft'` as the off switch instead. Measured on - * the pinned `@objectstack/service-automation` 17.4.0, whose own registration + * `@objectstack/service-automation` 17.4.0, whose own registration * diagnostic says it in as many words — "draft flows still fire their triggers; * set status: 'active' to make intent explicit, or 'obsolete' to disable". And * ⛔ not `'obsolete'` either: `isFlowEnabled` composes the authoring status with diff --git a/src/sales/objects/_hook-api.ts b/src/sales/objects/_hook-api.ts index a82dc97aa..451fc9344 100644 --- a/src/sales/objects/_hook-api.ts +++ b/src/sales/objects/_hook-api.ts @@ -49,12 +49,12 @@ type Doc = Record; * * MEASURED per method against the object the kernel actually injects as * `ctx.api`. First taken on 17.2.0; RE-TAKEN on 17.3.0 during #1528; RE-TAKEN - * AGAIN on the current pin 17.4.0 during #1883, by handing each key to a real + * AGAIN on 17.4.0 during #1883, by handing each key to a real * engine — the legal key sets and the `filter` fold came back UNCHANGED at - * every taking, so the readings below are current, not merely inherited. Every line is + * every taking. Not re-taken on 17.5.0. Every line is * pinned by an assertion in `test/hook-query-predicate.test.ts`, against a - * real engine rather than the test harness, and that file runs green on the - * current pin: + * real engine rather than the test harness, so that file is what re-measures + * it on each new pin: * * - `find` — `filter` is ALIASED to `where`; the predicate is applied. * - `findOne` — `filter` is ALIASED to `where`; the predicate is applied. @@ -98,7 +98,7 @@ export interface HookQuery { * compile error again. * * MEASURED against `@objectstack` 17.3.0, and RE-MEASURED word for word on - * the current pin 17.4.0 (#1883), on the object the kernel injects as + * 17.4.0 (#1883; not on 17.5.0), on the object the kernel injects as * `ctx.api`, by handing each key to the engine and * reading its unknown-option guard — which prints the legal set verbatim, and * is the cheapest authoritative reading of it: diff --git a/src/sales/objects/contact.object.ts b/src/sales/objects/contact.object.ts index a04a9c886..5e3eb3166 100644 --- a/src/sales/objects/contact.object.ts +++ b/src/sales/objects/contact.object.ts @@ -16,7 +16,7 @@ export const Contact = ObjectSchema.create({ fieldGroups: [ { key: 'identity', label: 'Identity', icon: 'user' }, - { key: 'account_info', label: 'Account & Role', icon: 'briefcase' }, + { key: 'account_info', label: 'Account & Title', icon: 'briefcase' }, { key: 'buying_centre', label: 'Buying Centre', icon: 'users' }, { key: 'contact_info', label: 'Contact Information', icon: 'phone' }, { key: 'mailing_address', label: 'Mailing Address', icon: 'map-pin', collapse: 'collapsed' }, diff --git a/src/sales/objects/forecast.hook.ts b/src/sales/objects/forecast.hook.ts index aadb9fc0b..cb8195541 100644 --- a/src/sales/objects/forecast.hook.ts +++ b/src/sales/objects/forecast.hook.ts @@ -35,7 +35,7 @@ const forecastDerive: Hook = { // all N matched rows, and the engine hands every row's `beforeUpdate` THAT // payload rather than a per-row copy. A payload write whose value — or // whose if-guard — reads `ctx.previous` therefore does not scope itself to - // the row it was decided on. Both outcomes are measured on the pinned + // the row it was decided on. Both outcomes are measured on // 17.4.0, in this app, on a fresh `pnpm dev`: // // - keys written for SOME rows only ⇒ the engine refuses the whole batch diff --git a/src/sales/objects/lead.hook.ts b/src/sales/objects/lead.hook.ts index 7f7382238..77d763803 100644 --- a/src/sales/objects/lead.hook.ts +++ b/src/sales/objects/lead.hook.ts @@ -190,9 +190,8 @@ const leadHook: Hook = { // a guest insert storing `is_converted: true` and an `owner_id` it // supplied itself. Assignment is what this block uses. // - // Upstream objectstack#12277 shipped in **17.3.0**; this repo pins - // 17.4.0 (PR #1814, #1807), so it carries the fix and `delete` is - // effective on both execution paths. + // Upstream objectstack#12277 shipped in **17.3.0**, so every later + // pin carries the fix and `delete` is effective on both execution paths. // ⛔ That is still not a licence to spell this block with `delete`: the // assignments are load-bearing as WRITES — `lead_duplicate_check` stands // down only on a NON-BLANK verdict, so these columns must arrive `null` @@ -326,10 +325,9 @@ const leadHook: Hook = { // forever (a GDPR erasure that cannot be carried out). // // Measured on 17.1.0 — the version this repo pinned AT THE TIME of - // the measurement, not the current pin (this repo has pinned 17.4.0 - // since PR #1814, #1807, and the cascade shape below has NOT been - // re-measured on it; it was not re-measured on the 17.3.0 pin either, - // #1676) — with a probe hook at priority 199 immediately + // the measurement, not the current pin (the cascade shape below has + // NOT been re-measured on any later pin — not 17.3.0, #1676, not + // 17.4.0, PR #1814, and not 17.5.0) — with a probe hook at priority 199 immediately // ahead of each guard, not assumed. // The engine builds its cleanup write on the CALLER's own context // plus two engine keys, so on the path a REST `DELETE` takes, the diff --git a/src/sales/objects/opportunity.hook.ts b/src/sales/objects/opportunity.hook.ts index a20c2556f..2bb86355c 100644 --- a/src/sales/objects/opportunity.hook.ts +++ b/src/sales/objects/opportunity.hook.ts @@ -135,10 +135,9 @@ const opportunityValidationHook: Hook = { // erasure that cannot be carried out). // // Measured on 17.1.0 — the version this repo pinned AT THE TIME of - // the measurement, not the current pin (this repo has pinned 17.4.0 - // since PR #1814, #1807, and the cascade shape below has NOT been - // re-measured on it; it was not re-measured on the 17.3.0 pin either, - // #1676) — with a probe hook at priority 199 immediately + // the measurement, not the current pin (the cascade shape below has + // NOT been re-measured on any later pin — not 17.3.0, #1676, not + // 17.4.0, PR #1814, and not 17.5.0) — with a probe hook at priority 199 immediately // ahead of each guard, not assumed. // The engine builds its cleanup write on the CALLER's own context // plus two engine keys, so on the path a REST `DELETE` takes, the diff --git a/src/sales/objects/task.object.ts b/src/sales/objects/task.object.ts index 0a1fa0b0b..dad292c31 100644 --- a/src/sales/objects/task.object.ts +++ b/src/sales/objects/task.object.ts @@ -227,8 +227,8 @@ export const Task = ObjectSchema.create({ // NOT readonly — but the old reason here ("16.x drops flow writes to // readonly fields") does not survive measurement. Taken on 17.1.0, // RE-TAKEN on 17.2.0 (#1460) and RE-CONFIRMED on 17.3.0 (#1676) — the pin - // at each of those takings, none of them the current one (17.4.0 since PR - // #1814, #1807) — same verdict all three times: `task_due_reminder` + // at each of those takings; not re-taken on 17.4.0 (PR #1814, #1807) or + // 17.5.0 — same verdict all three times: `task_due_reminder` // declares `runAs: 'system'`, so its write WOULD survive a // `readonly: true`. // diff --git a/src/sales/pages/app_launcher.page.ts b/src/sales/pages/app_launcher.page.ts index da2f3b1d8..7dee0a4b9 100644 --- a/src/sales/pages/app_launcher.page.ts +++ b/src/sales/pages/app_launcher.page.ts @@ -63,7 +63,6 @@ export const AppLauncherPage: Page = { ], isDefault: false, - assignedProfiles: ['sales_rep', 'sales_manager', 'service_agent', 'system_admin'], aria: { ariaLabel: 'App Launcher Page', diff --git a/src/sales/pages/home.page.ts b/src/sales/pages/home.page.ts index d2375def4..91057e8e7 100644 --- a/src/sales/pages/home.page.ts +++ b/src/sales/pages/home.page.ts @@ -185,7 +185,7 @@ export const SalesHomePage: Page = { label: 'Revenue (Won)', icon: 'dollar-sign', aggregate: { field: 'amount', function: 'sum' }, - filter: { stage: 'closed_won' }, + filter: [{ field: 'stage', operator: 'equals', value: 'closed_won' }], }, }, { @@ -196,7 +196,7 @@ export const SalesHomePage: Page = { label: 'Deals Won', icon: 'trophy', aggregate: { field: 'id', function: 'count' }, - filter: { stage: 'closed_won' }, + filter: [{ field: 'stage', operator: 'equals', value: 'closed_won' }], }, }, { @@ -207,7 +207,7 @@ export const SalesHomePage: Page = { label: 'Pipeline Value', icon: 'briefcase', aggregate: { field: 'amount', function: 'sum' }, - filter: { stage: { $nin: ['closed_won', 'closed_lost'] } }, + filter: [{ field: 'stage', operator: 'not_in', value: ['closed_won', 'closed_lost'] }], }, }, { @@ -218,7 +218,7 @@ export const SalesHomePage: Page = { label: 'Open Leads', icon: 'user-plus', aggregate: { field: 'id', function: 'count' }, - filter: { is_converted: false }, + filter: [{ field: 'is_converted', operator: 'equals', value: false }], }, }, ], @@ -339,7 +339,6 @@ export const SalesHomePage: Page = { ], isDefault: true, - assignedProfiles: ['sales_rep', 'sales_manager'], aria: { ariaLabel: 'Sales Home Page', diff --git a/src/sales/pages/lead_detail.page.ts b/src/sales/pages/lead_detail.page.ts index 194d61e74..edb8a947f 100644 --- a/src/sales/pages/lead_detail.page.ts +++ b/src/sales/pages/lead_detail.page.ts @@ -400,13 +400,14 @@ export const LeadDetailPage: Page = { // branch. An authored page opts out of the synthesizer, // so it opts out of the derivation with it. // - // ⚠️ Version caveat: those browser numbers are 17.2.0 and - // this repo now pins 17.4.0 (PR #1814, #1807). #1521 did + // ⚠️ Version caveat: those browser numbers are 17.2.0, + // two and more pins ago (17.4.0 came with PR #1814, then + // 17.5.0). #1521 did // NOT re-run the // browser measurement. What it did do is read the // 17.3.0 console bundle (static, not run) — a pin that is // itself now behind, and nobody has re-read the 17.4.0 - // bundle — and + // or 17.5.0 bundle — and // the mechanism is unchanged there: both guards are still // `sections.length > 0` and `fields.length > 0` with no // else, the renderer still reads neither of the two @@ -639,11 +640,6 @@ export const LeadDetailPage: Page = { // Make this the default page for leads isDefault: true, - // Assign to specific profiles. These must match the profile `name`s declared - // in src/profiles — `sales_user` / `system_administrator` never existed, so - // the assignment silently matched nobody. - assignedProfiles: ['sales_rep', 'sales_manager', 'system_admin'], - // ARIA accessibility aria: { ariaLabel: 'Lead Detail Page', diff --git a/src/sales/pages/opportunity_detail.page.ts b/src/sales/pages/opportunity_detail.page.ts index 3978e5a24..e4dcc2ba3 100644 --- a/src/sales/pages/opportunity_detail.page.ts +++ b/src/sales/pages/opportunity_detail.page.ts @@ -205,8 +205,8 @@ export const OpportunityDetailPage: Page = { // — so an item that simply omits the key is // `undefined`, not `false`, and stays shut. Measured // on the @objectstack/console 17.3.0 bundle — the pin - // at that taking, ⛔ NOT re-taken on the current - // 17.4.0 pin (#1814, #1807) — + // at that taking, ⛔ NOT re-taken on 17.4.0 + // (#1814, #1807) or 17.5.0 — // and the component's own designer text says the same // ("collapsed: false opens a panel by default"). // @@ -486,7 +486,6 @@ export const OpportunityDetailPage: Page = { ], isDefault: true, - assignedProfiles: ['sales_rep', 'sales_manager', 'system_admin'], aria: { ariaLabel: 'Opportunity Detail Page', diff --git a/src/sales/pages/utility_bar.page.ts b/src/sales/pages/utility_bar.page.ts index 735e7d83b..fd8815f84 100644 --- a/src/sales/pages/utility_bar.page.ts +++ b/src/sales/pages/utility_bar.page.ts @@ -54,7 +54,6 @@ export const UtilityBarPage: Page = { ], isDefault: false, - assignedProfiles: ['sales_rep', 'sales_manager', 'service_agent', 'system_admin'], aria: { ariaLabel: 'Utility Bar', diff --git a/src/sales/profiles/tenant-admin.profile.ts b/src/sales/profiles/tenant-admin.profile.ts index 63fed62e5..d11fc1e5e 100644 --- a/src/sales/profiles/tenant-admin.profile.ts +++ b/src/sales/profiles/tenant-admin.profile.ts @@ -57,8 +57,8 @@ import { SystemAdminProfile } from './system-admin.profile'; * They are KEPT, and they are bounded by the organization, not by them. * * Two measurements, both against the 17.1.0 line — the version - * installed AT THE TIME they were taken, not the current pin (#1676: this - * repo has installed 17.3.0 since PR #1577). + * installed AT THE TIME they were taken, not the current pin (neither was + * re-taken on 17.3.0, 17.4.0 or 17.5.0). * * ⚠️ The zero-occurrence result in 1 — the load-bearing half — reproduced on * 17.2.0 and has not been re-run since (#1676). The three CONTROL counts in diff --git a/src/sales/translations/en/objects.customer.ts b/src/sales/translations/en/objects.customer.ts index c6ce6f37a..b638694e8 100644 --- a/src/sales/translations/en/objects.customer.ts +++ b/src/sales/translations/en/objects.customer.ts @@ -202,7 +202,7 @@ export const customer: Record = { }, _sections: { identity: { label: 'Identity' }, - account_info: { label: 'Account & Role' }, + account_info: { label: 'Account & Title' }, buying_centre: { label: 'Buying Centre' }, contact_info: { label: 'Contact Information' }, mailing_address: { label: 'Mailing Address' }, diff --git a/src/sales/translations/es-ES/app.ts b/src/sales/translations/es-ES/app.ts index c475471d2..1ee9feccf 100644 --- a/src/sales/translations/es-ES/app.ts +++ b/src/sales/translations/es-ES/app.ts @@ -485,6 +485,11 @@ export const appSurface: Omit = { account_detail_page: { label: 'Detalle de Cuenta', description: 'Página de registro de cuenta por slots: cabecera personalizada + feed de discusión permanente.', + title: '{name}', + subtitle: '{industry} · {type}', + components: { + account_chatter: { label: 'Discusión' }, + }, }, account_workbench: { label: 'Mesa de Trabajo de Cuentas', @@ -507,6 +512,7 @@ export const appSurface: Omit = { components: { case_highlights: { label: 'Información Clave' }, case_status_path: { label: 'Progreso del Estado del Caso' }, + case_details: { label: 'Detalles del Caso' }, }, }, lead_detail_page: { @@ -520,6 +526,11 @@ export const appSurface: Omit = { lead_highlights: { label: 'Información Clave' }, lead_path: { label: 'Progreso del Estado del Prospecto' }, main_tabs: { label: 'Pestañas de Información del Prospecto' }, + lead_details: { label: 'Detalles del Prospecto' }, + related_accordion: { label: 'Registros Relacionados' }, + related_tasks: { title: 'Tareas Abiertas', label: 'Tareas' }, + lead_activity: { label: 'Cronología de Actividad' }, + lead_history: { label: 'Historial de Campos' }, }, }, opportunity_detail_page: { @@ -530,6 +541,7 @@ export const appSurface: Omit = { components: { opp_highlights: { label: 'Información Clave' }, opp_stage_path: { label: 'Progreso de Etapa de la Oportunidad' }, + opp_details: { label: 'Detalles de la Oportunidad' }, }, }, sales_home_page: { @@ -556,6 +568,9 @@ export const appSurface: Omit = { quick_create: { title: 'Creación Rápida', label: 'Creación Rápida' }, key_metrics: { title: 'Indicadores Clave de Rendimiento', label: 'Métricas Clave' }, home_tabs: { label: 'Pestañas de Inicio' }, + home_my_leads: { label: 'Mis Prospectos' }, + home_my_deals: { label: 'Mis Negocios Abiertos' }, + home_my_tasks: { label: 'Mis Tareas Abiertas' }, ai_briefing: { title: 'Pregúntale al Asistente de IA', description: diff --git a/src/sales/translations/ja-JP/app.ts b/src/sales/translations/ja-JP/app.ts index 26f0a136b..7581188c8 100644 --- a/src/sales/translations/ja-JP/app.ts +++ b/src/sales/translations/ja-JP/app.ts @@ -487,6 +487,11 @@ export const appSurface: Omit = { account_detail_page: { label: '取引先詳細', description: 'スロット構成の取引先レコードページ — カスタムヘッダーと常設のディスカッションフィード。', + title: '{name}', + subtitle: '{industry} · {type}', + components: { + account_chatter: { label: 'ディスカッション' }, + }, }, account_workbench: { label: '取引先ワークベンチ', @@ -509,6 +514,7 @@ export const appSurface: Omit = { components: { case_highlights: { label: '重要情報' }, case_status_path: { label: 'ケースステータスの進捗' }, + case_details: { label: 'ケース詳細情報' }, }, }, lead_detail_page: { @@ -522,6 +528,11 @@ export const appSurface: Omit = { lead_highlights: { label: '重要情報' }, lead_path: { label: 'リードステータスの進捗' }, main_tabs: { label: 'リード情報タブ' }, + lead_details: { label: 'リード詳細情報' }, + related_accordion: { label: '関連レコード' }, + related_tasks: { title: '未完了のタスク', label: 'タスク' }, + lead_activity: { label: '活動タイムライン' }, + lead_history: { label: '項目履歴' }, }, }, opportunity_detail_page: { @@ -532,6 +543,7 @@ export const appSurface: Omit = { components: { opp_highlights: { label: '重要情報' }, opp_stage_path: { label: '商談ステージの進捗' }, + opp_details: { label: '商談詳細情報' }, }, }, sales_home_page: { @@ -558,6 +570,9 @@ export const appSurface: Omit = { quick_create: { title: 'クイック作成', label: 'クイック作成' }, key_metrics: { title: '主要業績評価指標', label: '主要指標' }, home_tabs: { label: 'ホームタブ' }, + home_my_leads: { label: '私のリード' }, + home_my_deals: { label: '私のオープン商談' }, + home_my_tasks: { label: '私のオープンタスク' }, ai_briefing: { title: 'AI アシスタントに質問', description: diff --git a/src/sales/translations/zh-CN/app.ts b/src/sales/translations/zh-CN/app.ts index 45b832f03..5094e6938 100644 --- a/src/sales/translations/zh-CN/app.ts +++ b/src/sales/translations/zh-CN/app.ts @@ -486,6 +486,11 @@ export const appSurface: Omit = { account_detail_page: { label: '客户详情', description: '插槽式客户记录页——自定义页头 + 常驻讨论区。', + title: '{name}', + subtitle: '{industry} · {type}', + components: { + account_chatter: { label: '讨论' }, + }, }, account_workbench: { label: '客户工作台', @@ -508,6 +513,7 @@ export const appSurface: Omit = { components: { case_highlights: { label: '关键信息' }, case_status_path: { label: '工单状态进度' }, + case_details: { label: '工单明细' }, }, }, lead_detail_page: { @@ -521,6 +527,11 @@ export const appSurface: Omit = { lead_highlights: { label: '关键信息' }, lead_path: { label: '线索状态进度' }, main_tabs: { label: '线索信息标签页' }, + lead_details: { label: '线索明细' }, + related_accordion: { label: '相关记录' }, + related_tasks: { title: '待办任务', label: '任务' }, + lead_activity: { label: '活动时间线' }, + lead_history: { label: '字段历史' }, }, }, opportunity_detail_page: { @@ -531,6 +542,7 @@ export const appSurface: Omit = { components: { opp_highlights: { label: '关键信息' }, opp_stage_path: { label: '商机阶段进度' }, + opp_details: { label: '商机明细' }, }, }, sales_home_page: { @@ -557,6 +569,9 @@ export const appSurface: Omit = { quick_create: { title: '快速创建', label: '快速创建' }, key_metrics: { title: '关键绩效指标', label: '关键指标' }, home_tabs: { label: '主页标签页' }, + home_my_leads: { label: '我的线索' }, + home_my_deals: { label: '我的进行中商机' }, + home_my_tasks: { label: '我的待办任务' }, ai_briefing: { title: '询问 AI 助手', description: diff --git a/src/sales/views/forecast.view.ts b/src/sales/views/forecast.view.ts index e609bfcf4..e1f2fa444 100644 --- a/src/sales/views/forecast.view.ts +++ b/src/sales/views/forecast.view.ts @@ -57,9 +57,9 @@ export const ForecastViews = defineView({ // real engine and pins the three-way outcome (one quarter selected, not // zero and not all of them). First taken on 17.0.0-rc.2, RE-RUN // 2026-09-03 on 17.2.0 (#1467), RE-RUN on 17.3.0 (#1676, after the PR - // #1577 bump) and RE-RUN again on the current pin 17.4.0 (#1883, after - // the PR #1814 bump), green all four times — so - // this is a reading on the CURRENT pin. + // #1577 bump) and RE-RUN again on 17.4.0 (#1883, after the PR #1814 + // bump), green all four times. Not yet re-run on 17.5.0; the test is + // what re-takes the reading on each new pin. // // Both halves of the key are load-bearing, same as the quota-attainment // widget in `src/dashboards/sales.dashboard.ts`: `period: 'quarter'` diff --git a/src/sales/views/opportunity.view.ts b/src/sales/views/opportunity.view.ts index 6556a0f00..734f39970 100644 --- a/src/sales/views/opportunity.view.ts +++ b/src/sales/views/opportunity.view.ts @@ -250,9 +250,8 @@ export const OpportunityViews = defineView({ // years)_(ago|from_now)}` — and it reaches the driver already substituted // for an ISO date. Measured on 17.0.0-rc.2, RE-MEASURED 2026-09-03 on // 17.2.0 (#1467), RE-RUN on 17.3.0 (#1676, after the PR #1577 bump) and - // RE-RUN again on the current pin 17.4.0 (#1883, after the PR #1814 - // bump), so it is a reading on the CURRENT pin, and unchanged - // at every taking: over four rows parked + // RE-RUN again on 17.4.0 (#1883, after the PR #1814 bump; not yet on + // 17.5.0), unchanged at every taking: over four rows parked // 30d / 15d / 13d / 1d, `stage_entry_date < {14_days_ago}` returned the // 30d and 15d rows — the same two the equivalent day-start literal // returns, and not all four, which is what an unsubstituted token would @@ -307,10 +306,10 @@ export const OpportunityViews = defineView({ // so a saved-view filter value reaches the driver already substituted. // Measured on 17.0.0-rc.2, RE-MEASURED 2026-09-03 on 17.2.0 (#1467), // RE-RUN on 17.3.0 (#1676, after the PR #1577 bump) and RE-RUN again on - // the current pin 17.4.0 (#1883, after the PR #1814 bump), unchanged at + // 17.4.0 (#1883, after the PR #1814 bump), unchanged at // every taking — see the runtime block in // `test/forecast-current-quarter-view.test.ts`, which is that - // re-measurement and runs green on the current pin. + // re-measurement (not yet re-run on 17.5.0). // // The upper bound is INCLUSIVE against `{current_quarter_end}` rather // than half-open against `{next_quarter_start}`, and that choice is diff --git a/src/sales/views/task.view.ts b/src/sales/views/task.view.ts index 2010f40a1..62a8cc017 100644 --- a/src/sales/views/task.view.ts +++ b/src/sales/views/task.view.ts @@ -174,8 +174,8 @@ export const TaskViews = defineView({ // Operator-only filter — priority and status, no tokens — and the reason // recorded here for that has expired (#782). Two claims stood here; both // were wrong already on 17.0.0-rc.2 — the version this repo pinned AT - // THE TIME they were measured, not the current pin, which is 17.4.0 - // since PR #1814 (#1807) — in different ways. "Wrong" is about those two + // THE TIME they were measured, not the current pin — in different + // ways. "Wrong" is about those two // retired claims, not about the engine: nothing in this block reports // broken platform behaviour. // @@ -196,22 +196,21 @@ export const TaskViews = defineView({ // RE-MEASURED 2026-09-03 on 17.2.0 (#1467), unchanged: both probes // reported exactly those results there. NOT re-run on 17.3.0 (#1676) — // the two-probe result is a 17.2.0 reading, and the seam it rests on - // (`resolveFilterTokens()` on the read path) is re-confirmed on the - // current pin by `test/flow-filter-today-token.test.ts`, which runs - // green there. + // (`resolveFilterTokens()` on the read path) was re-confirmed on 17.4.0 + // by `test/flow-filter-today-token.test.ts` (not yet re-run on 17.5.0). // // `{TODAY()}` is not a spelling of anything and never was. The vocabulary // is `{today}` / `{yesterday}` / `{tomorrow}` / `{now}`, the period // tokens, and the parameterised `{N_days_ago}` family. // - // ⚠️ WHAT CHANGED between rc.2 and the current pin — the one reading in + // ⚠️ WHAT CHANGED between rc.2 and 17.4.0 — the one reading in // this block that did NOT survive re-measurement, and the reason the // version qualifiers here are load-bearing rather than bookkeeping. On // rc.2 `{TODAY()}` was not REJECTED either: the placeholder grammar was // `/^\$?\{([a-zA-Z0-9_]+)\}$/`, parentheses fell outside it, // `classifyFilterToken('{TODAY()}')` returned null, and the string // reached the driver verbatim and compared as text. From 17.2.0 on — - // re-confirmed on 17.3.0 (#1676) and again on the current pin 17.4.0 + // re-confirmed on 17.3.0 (#1676) and again on 17.4.0 // (#1883) by the PREMISE case in // `test/flow-filter-today-token.test.ts`, which drives a real engine — // that is FALSE: `FILTER_TOKEN_WRAPPED_RE` in `@objectstack/spec/data` @@ -285,14 +284,14 @@ export const TaskViews = defineView({ // EXPIRED — the other reason said the view layer cannot resolve // `due_date < {TODAY()}`, and that only `{current_user_id}` interpolates. // Both halves were wrong already on 17.0.0-rc.2 — the version this repo - // pinned AT THE TIME they were measured, not the current pin, which is - // 17.4.0 since PR #1814 (#1807) — and the file said the opposite of + // pinned AT THE TIME they were measured, not the current pin — and the + // file said the opposite of // itself: the note on `todays_tasks` above asserted that // `{current_user_id}` does NOT interpolate. It does. // That comment carries the measurements with their versions, INCLUDING // the one that moved: `{TODAY()}` is REJECTED from 17.2.0 on - // (`FILTER_TOKEN_UNKNOWN`, re-confirmed on 17.3.0 and again on the - // current pin 17.4.0 by + // (`FILTER_TOKEN_UNKNOWN`, re-confirmed on 17.3.0 and again on + // 17.4.0 by // `test/flow-filter-today-token.test.ts`) where on rc.2 it shipped to // the driver as text, so "cannot resolve `{TODAY()}`" is wrong on the // current pin for a different reason than it was wrong on rc.2. The diff --git a/src/service/dashboards/service.dashboard.ts b/src/service/dashboards/service.dashboard.ts index fa610323d..fcef7256a 100644 --- a/src/service/dashboards/service.dashboard.ts +++ b/src/service/dashboards/service.dashboard.ts @@ -144,7 +144,6 @@ export const ServiceDashboard: Dashboard = { dataset: 'case_metrics', dimensions: ['status'], values: ['case_count'], layout: { x: 0, y: 2, w: 4, h: 4 }, chartConfig: { - type: 'donut', showLegend: true, showDataLabels: true, colors: ['#0EA5E9', '#06B6D4', '#14B8A6', '#10B981', '#F59E0B'], @@ -160,7 +159,6 @@ export const ServiceDashboard: Dashboard = { dataset: 'case_metrics', dimensions: ['priority'], values: ['case_count'], layout: { x: 4, y: 2, w: 4, h: 4 }, chartConfig: { - type: 'pie', showLegend: true, showDataLabels: true, // critical → high → medium → low @@ -176,15 +174,9 @@ export const ServiceDashboard: Dashboard = { dataset: 'case_metrics', dimensions: ['origin'], values: ['case_count'], layout: { x: 8, y: 2, w: 4, h: 4 }, chartConfig: { - type: 'bar', showLegend: false, showDataLabels: true, colors: ['#8B5CF6'], - // Axis titles stay plain English: `ChartAxisSchema.title` accepts an inline - // locale map but the Console flattens it to the map's FIRST value regardless - // of locale — measured, see `src/dashboards/index.ts` (#1822). - xAxis: { field: 'origin', title: 'Channel', showGridLines: false, logarithmic: false }, - yAxis: [{ field: 'case_count', title: 'Cases', showGridLines: true, logarithmic: false }], }, }, @@ -214,12 +206,9 @@ export const ServiceDashboard: Dashboard = { dataset: 'case_metrics', dimensions: ['created_date'], values: ['case_count'], layout: { x: 0, y: 6, w: 8, h: 4 }, chartConfig: { - type: 'area', showLegend: false, showDataLabels: false, colors: ['#0EA5E9'], - xAxis: { field: 'created_date', title: 'Day', showGridLines: false, logarithmic: false }, - yAxis: [{ field: 'case_count', title: 'Cases opened', showGridLines: true, logarithmic: false }], interaction: { tooltips: true, brush: true }, }, options: { dateGranularity: 'day' }, @@ -243,7 +232,6 @@ export const ServiceDashboard: Dashboard = { dataset: 'case_metrics', values: ['sla_compliance_rate'], layout: { x: 8, y: 6, w: 4, h: 4 }, chartConfig: { - type: 'gauge', showLegend: false, showDataLabels: true, colors: ['#10B981', '#F59E0B', '#EF4444'], diff --git a/src/service/flows/case-actions.flow.ts b/src/service/flows/case-actions.flow.ts index 0a2137362..9f126c025 100644 --- a/src/service/flows/case-actions.flow.ts +++ b/src/service/flows/case-actions.flow.ts @@ -157,20 +157,18 @@ export const CloseCaseFlow: Flow = { // left honest — which is worse than an absent link for a measure whose // whole job is to say how OFTEN the KB resolves a case. // - // ⚠️ MEASURED LIMITATION, stated so nobody re-discovers it: a flow screen - // field cannot name a target object. `ScreenFieldConfigSchema` - // (`@objectstack/spec/automation`) has `name` / `label` / `type` / - // `options` / `defaultValue` / `placeholder` / `visibleWhen` and NO - // object or reference key, so `type: 'lookup'` has nothing to resolve a - // record picker from — the same degradation `add_contact_to_campaign` - // documents for a bare `{ type: 'lookup' }` action param, which it avoids - // by being FIELD-BACKED, an escape a screen field does not have. + // `reference` names the object the picker offers. Up to + // `@objectstack/spec@17.4.0` a screen field had no such key, so this + // `type: 'lookup'` field had nothing to resolve a record picker from; + // 17.5.0 added `reference` to `ScreenFieldConfigSchema` and made it + // REQUIRED on a lookup screen field (#17913) — the stack does not load + // without it. It is the same target the case's own `resolved_by_article` + // lookup declares (`crm_knowledge_article`). // - // So the real picker for this link is the `Resolved by Article` lookup in - // the case's Resolution group, on the record form, and this screen field - // is the CLOSE-PATH capture beside it. Both write the same column; the - // action is `refreshAfter: true`, so the record form is what the agent - // lands on immediately after closing. + // The `Resolved by Article` lookup in the case's Resolution group, on the + // record form, writes the same column; the action is + // `refreshAfter: true`, so the record form is what the agent lands on + // immediately after closing. id: 'screen_1', type: 'screen', label: 'Close Case', config: { fields: [ @@ -179,8 +177,8 @@ export const CloseCaseFlow: Flow = { name: 'resolved_by_article', label: 'Resolved by Article (optional)', type: 'lookup', + reference: 'crm_knowledge_article', required: false, - placeholder: 'Knowledge article id, if the KB resolved this case', }, ], }, diff --git a/src/service/objects/case.hook.ts b/src/service/objects/case.hook.ts index 5e86a0070..39236f35c 100644 --- a/src/service/objects/case.hook.ts +++ b/src/service/objects/case.hook.ts @@ -69,9 +69,8 @@ const caseValidation: Hook = { // while their tests passed (#1133). This block was rewritten to ASSIGN. // // The block above predicted its own trigger — "a platform release that - // POSTDATES 2026-08-26" — and that release is **17.3.0** (`package.json` - // has pinned 17.4.0 since PR #1814, #1807, so the fix is in the installed - // tree either way). objectstack#12277 shipped: the in-process Proxy + // POSTDATES 2026-08-26" — and that release is **17.3.0**, so every later + // pin carries the fix. objectstack#12277 shipped: the in-process Proxy // traps `deleteProperty`, and the sandbox path diffs deletions against the // entry snapshot rather than writing mutations home with `Object.assign`, // which cannot represent a removal. Re-measured through the engine's own diff --git a/src/service/objects/knowledge_article.hook.ts b/src/service/objects/knowledge_article.hook.ts index 694338eb8..a8e1f8b6e 100644 --- a/src/service/objects/knowledge_article.hook.ts +++ b/src/service/objects/knowledge_article.hook.ts @@ -68,7 +68,7 @@ import type { Hook, HookContext } from '@objectstack/spec/data'; * `nowIso`, a clock read. The row only ever decides WHETHER a key is written. * * - `last_reviewed_at` sits behind the `nextStatus !== 'published'` early - * return, and that return reads the ROW. Measured on the pinned 17.4.0 on a + * return, and that return reads the ROW. Measured on 17.4.0 on a * fresh `pnpm dev`: the platform's own seed-ownership claim (one payload of * `{ owner_id }`, `where: { owner_id: null }`) matched all 4 seeded * articles; the 3 published ones stamped `last_reviewed_at`, the 1 draft @@ -92,7 +92,7 @@ import type { Hook, HookContext } from '@objectstack/spec/data'; * ⚠️ HISTORY — do not reason from it. Until 17.3.0 the sandbox context carried * no per-row signal, so a `ctx.dispatch` guard lowered cleanly, passed every * in-process test and was INERT in production; PR #1274 recorded that as the - * reason this could not be fixed here. That is FALSE on the pinned 17.4.0: + * reason this could not be fixed here. That is FALSE from 17.3.0 on: * `buildSandboxContext` marshals `dispatch` and an `inputOptions` projection * (objectstack#11552), and `test/hooks-runtime-service.test.ts` pins that they * cross. `ctx.input.id` is still absent — read `ctx.previous.id`. diff --git a/src/service/objects/knowledge_article.object.ts b/src/service/objects/knowledge_article.object.ts index 7ddc4e7ec..a142ea94f 100644 --- a/src/service/objects/knowledge_article.object.ts +++ b/src/service/objects/knowledge_article.object.ts @@ -32,9 +32,9 @@ export const KnowledgeArticle = ObjectSchema.create({ // declared while every key below is enforced. // // MEASURED on `@objectstack/plugin-sharing@17.1.0` — the version - // installed AT THE TIME of the measurement, not the current pin (this repo - // has installed 17.4.0 since PR #1814, #1807, and this table has NOT been - // re-taken on it; it was not re-taken on the 17.3.0 pin either, #1676) — + // installed AT THE TIME of the measurement, not the current pin (this table + // has NOT been re-taken on any later pin — not 17.3.0, #1676, not 17.4.0, + // PR #1814, and not 17.5.0) — // against the real `ShareLinkService` and a real engine, // not read off a grep count: // diff --git a/src/service/pages/case_detail.page.ts b/src/service/pages/case_detail.page.ts index 3ca6f9816..bf9be7fa3 100644 --- a/src/service/pages/case_detail.page.ts +++ b/src/service/pages/case_detail.page.ts @@ -305,7 +305,6 @@ export const CaseDetailPage: Page = { ], isDefault: true, - assignedProfiles: ['service_agent', 'system_admin'], aria: { ariaLabel: 'Case Detail Page', diff --git a/src/service/views/case.view.ts b/src/service/views/case.view.ts index f146ce47d..2b8da4a92 100644 --- a/src/service/views/case.view.ts +++ b/src/service/views/case.view.ts @@ -292,8 +292,8 @@ export const CaseViews = defineView({ * ## ⚠️ This object's `form` IS the create dialog (#1214 item 3) * * Measured against the console this app shipped at that taking - * (`@objectstack/console` 17.1.0, `dist/assets/`; the app ships 17.4.0 since - * PR #1814, #1807, and this bundle read was ⛔ NOT re-taken there), BOTH + * (`@objectstack/console` 17.1.0, `dist/assets/`; this bundle read was ⛔ NOT + * re-taken on any later pin), BOTH * entry points that open a case form resolve * it the same way and neither takes a create/edit argument: * diff --git a/test/account-name-normalized-match.test.ts b/test/account-name-normalized-match.test.ts index 956c4a650..3d82fa90c 100644 --- a/test/account-name-normalized-match.test.ts +++ b/test/account-name-normalized-match.test.ts @@ -2,7 +2,7 @@ import { describe, it, expect, beforeAll, afterAll } from 'vitest'; import { AutomationEngine, installBuiltinNodes } from '@objectstack/service-automation'; -import { fieldHasColumn, expectedIndexes } from '@objectstack/driver-sql'; +import { fieldHasColumn, expectedIndexes, withheldFilterDiagnosticOf } from '@objectstack/driver-sql'; import { SqliteWasmDriver } from '@objectstack/driver-sqlite-wasm'; import { applySystemFields } from '@objectstack/objectql'; import stack from '../objectstack.config'; @@ -260,9 +260,17 @@ describe('premise: no filter operator expresses normalize-then-exact on SQL', () }; it('`$regex` is retired — the driver refuses it instead of guessing', async () => { - await expect(names({ name: { $regex: 'Acme Corp' } })).rejects.toThrow( - /\$regex.*RETIRED|RETIRED.*\$regex/is, + // Since 17.5 the thrown message withholds the operator and field (they are + // caller-controlled text); the full diagnostic rides on the error and is + // read back with `withheldFilterDiagnosticOf`. Pin both halves. + const err = await names({ name: { $regex: 'Acme Corp' } }).then( + () => null, + (e: unknown) => e, ); + expect(err).toBeInstanceOf(Error); + expect((err as Error).message).toMatch(/RETIRED/); + expect((err as Error).message).not.toMatch(/\$regex/); + expect(withheldFilterDiagnosticOf(err)).toMatch(/\$regex.*RETIRED|RETIRED.*\$regex/is); }); it('`$icontains`, the declared replacement, matches a SUPERSTRING — not an exact match', async () => { diff --git a/test/authorization-coverage.test.ts b/test/authorization-coverage.test.ts index 5aee4f3f5..377636505 100644 --- a/test/authorization-coverage.test.ts +++ b/test/authorization-coverage.test.ts @@ -26,14 +26,13 @@ import stack from '../objectstack.config'; * `crm_campaign_member` rows that action inserts. * * These tests resolve the whole authorization surface (grants ↔ objects ↔ - * navigation ↔ pages ↔ sharing rules ↔ positions) so the next uncovered object + * navigation ↔ sharing rules ↔ positions) so the next uncovered object * fails in CI instead of at a customer's first click. */ type AnyRec = Record; const objects: AnyRec[] = (stack as any).objects ?? []; -const pages: AnyRec[] = (stack as any).pages ?? []; const apps: AnyRec[] = (stack as any).apps ?? []; const permissionSets: AnyRec[] = (stack as any).permissions ?? []; const sharingRules: AnyRec[] = (stack as any).sharingRules ?? []; @@ -151,27 +150,6 @@ describe('reachable UI is reachable for someone', () => { expect(bad, `dead navigation (permission-denied for every user):\n ${bad.join('\n ')}`) .toEqual([]); }); - - it('every related list is readable by every profile its page is assigned to', () => { - const bad: string[] = []; - for (const page of pages) { - const assigned: string[] = page.assignedProfiles ?? []; - if (assigned.length === 0) continue; - for (const c of [...walk(page.regions), ...walk(page.slots)]) { - if (c.type !== 'record:related_list') continue; - const objectName = c.properties?.objectName as string; - if (!objectName || objectName.startsWith('sys_')) continue; - const readers = new Set(setsGranting(objectName, 'read')); - for (const profile of assigned) { - if (!readers.has(profile)) { - bad.push(`${page.name} / ${c.id}: "${objectName}" is not readable by "${profile}"`); - } - } - } - } - expect(bad, `related lists denied to their own page audience:\n ${bad.join('\n ')}`) - .toEqual([]); - }); }); describe('record-level scope is authored, not implied', () => { diff --git a/test/case-create-form-narrowing.test.ts b/test/case-create-form-narrowing.test.ts index 7ae885d74..cf8fc2192 100644 --- a/test/case-create-form-narrowing.test.ts +++ b/test/case-create-form-narrowing.test.ts @@ -251,7 +251,7 @@ describe('crm_case create form — retention direction', () => { * The reason is NOT the blanket this comment used to carry ("the platform * DROPS writes to readonly fields"). Measured in * `test/readonly-write-semantics.test.ts` on 17.1.0, re-measured there on - * 17.2.0 (#1460) and re-measured again on the current pin 17.3.0 (#1676), + * 17.2.0 (#1460) and re-measured again on 17.3.0 (#1676, the pin at the time), * same result every time: the strip is one branch of the * UPDATE path, `if (!opCtx.context?.isSystem)`, over CALLER-supplied keys — * so a `beforeUpdate` hook's own stamp survives it, an insert is exempt from diff --git a/test/metadata-references.test.ts b/test/metadata-references.test.ts index 44d002a0e..d98da5f2c 100644 --- a/test/metadata-references.test.ts +++ b/test/metadata-references.test.ts @@ -10,7 +10,6 @@ import { pages, views, objectNames, - profileNames, PLATFORM_OBJECTS, fieldsOf, walk, @@ -21,13 +20,13 @@ import { * * `os validate` / `build` check metadata SHAPE — that a page declares a * `relationshipField`, that a view section lists `fields` — but never that the - * named field, object, or profile actually exists. Every reference below was a - * real defect found by clicking through the app, and each failed silently: the - * related list rendered "0", the form section rendered blank, the profile - * assignment matched nobody. Nothing errored, so nothing was noticed. + * named field or object actually exists. Every reference below was a real + * defect found by clicking through the app, and each failed silently: the + * related list rendered "0", the form section rendered blank. Nothing errored, + * so nothing was noticed. * - * These tests resolve every UI reference against the objects/profiles the app - * really defines, so the next bad name fails in CI instead of in a demo. + * These tests resolve every UI reference against the objects the app really + * defines, so the next bad name fails in CI instead of in a demo. * * --- * @@ -584,16 +583,6 @@ describe('page component references resolve', () => { expect(bad, `dangling path stages:\n ${bad.join('\n ')}`).toEqual([]); }); - it('assignedProfiles name real profiles', () => { - const bad: string[] = []; - for (const page of pages) { - for (const p of page.assignedProfiles ?? []) { - if (!profileNames.has(p)) bad.push(`${page.name}: profile "${p}" is not defined`); - } - } - expect(bad, `dangling profile assignments:\n ${bad.join('\n ')}`).toEqual([]); - }); - /** * Container types that render only what they are given. * diff --git a/test/undeclared-key-probe.test.ts b/test/undeclared-key-probe.test.ts index cd0559170..0e83fb9b0 100644 --- a/test/undeclared-key-probe.test.ts +++ b/test/undeclared-key-probe.test.ts @@ -23,7 +23,7 @@ import { QuoteLineItem } from '../src/revenue/objects/quote_line_item.object'; * and field-level security by construction. * * This file is the re-measurement taken on 17.1.0 — the version this repo - * pinned AT THE TIME, not the current pin (#1676: 17.3.0 since PR #1577) — + * pinned AT THE TIME, not the current pin — * and it says two different things about two different write paths. * * ⚠️ The two halves are at DIFFERENT takings, so read the label on each. Half diff --git a/test/view-references.test.ts b/test/view-references.test.ts index cd8b88c97..2f06f3a22 100644 --- a/test/view-references.test.ts +++ b/test/view-references.test.ts @@ -131,7 +131,7 @@ describe('filter template tokens are resolvable', () => { * through a real engine and pins one quarter selected out of three, plus * the throw on the retired `{this_quarter_start}` spelling. First taken on * 17.0.0-rc.2, RE-RUN 2026-09-03 on 17.2.0 (#1467) and RE-RUN on the - * current pin 17.3.0 (#1676: the pin since PR #1577), green all three + * 17.3.0 (#1676, the pin at the time), green all three * times. * * What DID move between those two pins is WHICH spellings throw. The