From 9422d093fd508f20b1528d62734f6d51d2e4151c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 25 May 2026 03:22:42 +0000 Subject: [PATCH] chore: version packages --- .changeset/plugin-auth-webcontainer-scrypt.md | 24 --- .changeset/v5-ai-api-flow-executors.md | 13 -- .changeset/v5-ai-hitl-approval.md | 46 ------ .changeset/v5-ai-hitl-e2e-demos.md | 20 --- .changeset/v5-ai-hitl-studio-ui.md | 35 ---- .changeset/v5-ai-llm-smoke-test.md | 45 ----- .changeset/v5-runtime-ai-sse-stream-fix.md | 27 --- apps/account/CHANGELOG.md | 9 + apps/account/package.json | 2 +- examples/app-crm/CHANGELOG.md | 9 + examples/app-crm/package.json | 2 +- examples/app-todo/CHANGELOG.md | 59 +++++++ examples/app-todo/package.json | 2 +- packages/adapters/express/CHANGELOG.md | 2 + packages/adapters/express/package.json | 2 +- packages/adapters/fastify/CHANGELOG.md | 2 + packages/adapters/fastify/package.json | 2 +- packages/adapters/hono/CHANGELOG.md | 6 + packages/adapters/hono/package.json | 2 +- packages/adapters/nestjs/CHANGELOG.md | 2 + packages/adapters/nestjs/package.json | 2 +- packages/adapters/nextjs/CHANGELOG.md | 2 + packages/adapters/nextjs/package.json | 2 +- packages/adapters/nuxt/CHANGELOG.md | 2 + packages/adapters/nuxt/package.json | 2 +- packages/adapters/sveltekit/CHANGELOG.md | 2 + packages/adapters/sveltekit/package.json | 2 +- packages/cli/CHANGELOG.md | 45 +++++ packages/cli/package.json | 2 +- packages/client-react/CHANGELOG.md | 9 + packages/client-react/package.json | 2 +- packages/client/CHANGELOG.md | 8 + packages/client/package.json | 2 +- packages/core/CHANGELOG.md | 7 + packages/core/package.json | 2 +- packages/create-objectstack/CHANGELOG.md | 2 + packages/create-objectstack/package.json | 2 +- packages/formula/CHANGELOG.md | 7 + packages/formula/package.json | 2 +- packages/metadata-core/CHANGELOG.md | 2 + packages/metadata-core/package.json | 2 +- packages/metadata-fs/CHANGELOG.md | 6 + packages/metadata-fs/package.json | 2 +- packages/metadata/CHANGELOG.md | 12 ++ packages/metadata/package.json | 2 +- packages/objectql/CHANGELOG.md | 11 ++ packages/objectql/package.json | 2 +- packages/observability/CHANGELOG.md | 7 + packages/observability/package.json | 2 +- packages/platform-objects/CHANGELOG.md | 7 + packages/platform-objects/package.json | 2 +- packages/plugins/driver-memory/CHANGELOG.md | 8 + packages/plugins/driver-memory/package.json | 2 +- packages/plugins/driver-mongodb/CHANGELOG.md | 8 + packages/plugins/driver-mongodb/package.json | 2 +- packages/plugins/driver-sql/CHANGELOG.md | 8 + packages/plugins/driver-sql/package.json | 2 +- .../plugins/driver-sqlite-wasm/CHANGELOG.md | 9 + .../plugins/driver-sqlite-wasm/package.json | 2 +- packages/plugins/driver-turso/CHANGELOG.md | 9 + packages/plugins/driver-turso/package.json | 2 +- .../plugins/plugin-approvals/CHANGELOG.md | 11 ++ .../plugins/plugin-approvals/package.json | 2 +- packages/plugins/plugin-audit/CHANGELOG.md | 9 + packages/plugins/plugin-audit/package.json | 2 +- packages/plugins/plugin-auth/CHANGELOG.md | 32 ++++ packages/plugins/plugin-auth/package.json | 2 +- packages/plugins/plugin-dev/CHANGELOG.md | 8 + packages/plugins/plugin-dev/package.json | 2 +- packages/plugins/plugin-email/CHANGELOG.md | 9 + packages/plugins/plugin-email/package.json | 2 +- .../plugins/plugin-hono-server/CHANGELOG.md | 8 + .../plugins/plugin-hono-server/package.json | 2 +- .../plugins/plugin-mcp-server/CHANGELOG.md | 8 + .../plugins/plugin-mcp-server/package.json | 2 +- packages/plugins/plugin-msw/CHANGELOG.md | 10 ++ packages/plugins/plugin-msw/package.json | 2 +- packages/plugins/plugin-reports/CHANGELOG.md | 9 + packages/plugins/plugin-reports/package.json | 2 +- packages/plugins/plugin-security/CHANGELOG.md | 9 + packages/plugins/plugin-security/package.json | 2 +- packages/plugins/plugin-sharing/CHANGELOG.md | 10 ++ packages/plugins/plugin-sharing/package.json | 2 +- packages/plugins/plugin-webhooks/CHANGELOG.md | 10 ++ packages/plugins/plugin-webhooks/package.json | 2 +- packages/rest/CHANGELOG.md | 9 + packages/rest/package.json | 2 +- packages/runtime/CHANGELOG.md | 41 +++++ packages/runtime/package.json | 2 +- packages/services/service-ai/CHANGELOG.md | 154 ++++++++++++++++++ packages/services/service-ai/package.json | 2 +- .../services/service-analytics/CHANGELOG.md | 8 + .../services/service-analytics/package.json | 2 +- .../services/service-automation/CHANGELOG.md | 9 + .../services/service-automation/package.json | 2 +- packages/services/service-cache/CHANGELOG.md | 9 + packages/services/service-cache/package.json | 2 +- .../service-cluster-redis/CHANGELOG.md | 8 + .../service-cluster-redis/package.json | 2 +- .../services/service-cluster/CHANGELOG.md | 8 + .../services/service-cluster/package.json | 2 +- packages/services/service-feed/CHANGELOG.md | 8 + packages/services/service-feed/package.json | 2 +- packages/services/service-i18n/CHANGELOG.md | 8 + packages/services/service-i18n/package.json | 2 +- packages/services/service-job/CHANGELOG.md | 9 + packages/services/service-job/package.json | 2 +- .../services/service-package/CHANGELOG.md | 8 + .../services/service-package/package.json | 2 +- packages/services/service-queue/CHANGELOG.md | 9 + packages/services/service-queue/package.json | 2 +- .../services/service-realtime/CHANGELOG.md | 9 + .../services/service-realtime/package.json | 2 +- .../services/service-settings/CHANGELOG.md | 9 + .../services/service-settings/package.json | 2 +- .../services/service-storage/CHANGELOG.md | 9 + .../services/service-storage/package.json | 2 +- packages/spec/CHANGELOG.md | 48 ++++++ packages/spec/package.json | 2 +- packages/types/CHANGELOG.md | 7 + packages/types/package.json | 2 +- packages/vscode-objectstack/CHANGELOG.md | 2 + packages/vscode-objectstack/package.json | 2 +- 123 files changed, 823 insertions(+), 268 deletions(-) delete mode 100644 .changeset/plugin-auth-webcontainer-scrypt.md delete mode 100644 .changeset/v5-ai-api-flow-executors.md delete mode 100644 .changeset/v5-ai-hitl-approval.md delete mode 100644 .changeset/v5-ai-hitl-e2e-demos.md delete mode 100644 .changeset/v5-ai-hitl-studio-ui.md delete mode 100644 .changeset/v5-ai-llm-smoke-test.md delete mode 100644 .changeset/v5-runtime-ai-sse-stream-fix.md diff --git a/.changeset/plugin-auth-webcontainer-scrypt.md b/.changeset/plugin-auth-webcontainer-scrypt.md deleted file mode 100644 index 00cf4b58d3..0000000000 --- a/.changeset/plugin-auth-webcontainer-scrypt.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -"@objectstack/plugin-auth": minor ---- - -WebContainer (StackBlitz) signup compatibility: `AuthManager` now auto-detects -WebContainer runtimes at construction time and swaps better-auth's default -`node:crypto.scrypt`-based password hasher for the pure-JS hasher from -`@better-auth/utils/password` (which uses `@noble/hashes/scrypt` under the -hood). - -**Why:** WebContainer's `node:crypto` polyfill ships an incomplete `scrypt` -implementation that throws `TypeError: y.run is not a function` on every -signup, blocking template demos on StackBlitz. The pure-JS implementation is -byte-compatible with the Node hasher (same scrypt params, same `salt:keyHex` -storage format), so accounts created under either hasher remain mutually -verifiable — no migration, no template changes. - -**Scope:** detection short-circuits to `undefined` on real Node, so production -deployments are completely unaffected — the JS fallback module is only -dynamically imported when one of `process.versions.webcontainer`, -`SHELL` containing `jsh`, or `STACKBLITZ` env is present. - -Templates (`@template/todo`, `@template/contracts`, …) require no changes; -the fix lives entirely inside `@objectstack/plugin-auth`. diff --git a/.changeset/v5-ai-api-flow-executors.md b/.changeset/v5-ai-api-flow-executors.md deleted file mode 100644 index 3eb0c271d9..0000000000 --- a/.changeset/v5-ai-api-flow-executors.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@objectstack/service-ai': patch ---- - -**Actions-as-tools Phase 2:** the AI tool runtime can now dispatch `type:'api'` and `type:'flow'` actions in addition to `type:'script'`. - -- New exported `ApiActionClient` interface and `createFetchApiClient({ baseUrl, headers, fetch })` factory — default fetch-based dispatch resolves relative `target` paths against `baseUrl`, throws on non-2xx with `${method} ${url} → ${status}: ${body}`, and JSON-parses the response. -- New exported `buildApiRequestBody(action, args, record, recordId)` helper — honours `bodyShape.wrap`, `recordIdParam` + `recordIdField` (defaults to `'id'`), and merges `bodyExtra` last so constants win. -- `ActionToolsContext` extended (additive): `automation`, `apiClient`, `apiBaseUrl`, `apiHeaders`. -- `actionSkipReason()` gains an optional second `ctx` parameter that returns precise wiring-availability reasons (`'no automation service available'`, `'no apiClient or apiBaseUrl configured'`). Studio-only types (`url` / `modal` / `form`) and all dangerous variants (`confirmText`, `mode:'delete'`, `variant:'danger'`) remain skipped. -- `AIServicePlugin` options accept `apiActionBaseUrl` (falls back to `OS_AI_ACTION_API_BASE_URL`) and `apiActionHeaders`; the plugin now resolves the `automation` service silently and threads everything into `registerActionsAsTools`. - -Net result: every non-destructive declarative action with a target — `script`, `api`, `flow` — is now LLM-callable end-to-end as soon as the corresponding wiring is in place. diff --git a/.changeset/v5-ai-hitl-approval.md b/.changeset/v5-ai-hitl-approval.md deleted file mode 100644 index d7f21609fc..0000000000 --- a/.changeset/v5-ai-hitl-approval.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -'@objectstack/service-ai': minor -'@objectstack/spec': patch ---- - -**Actions-as-tools Phase 3 — Human-In-The-Loop approval queue.** - -Dangerous declarative actions (`confirmText`, `mode:'delete'`, `variant:'danger'`) can now be exposed to the LLM safely. Instead of being skipped outright, they are registered as tools whose handler enqueues a pending request and returns `{ status: 'pending_approval', pendingActionId }` to the model. A human approves (or rejects) from Studio's pending-actions inbox; the service then re-runs the exact same dispatcher. - -### New surface - -- New system object `ai_pending_actions` (id, conversation_id?, message_id?, object_name, action_name, tool_name, tool_input, status [`pending`|`approved`|`executed`|`failed`|`rejected`], result?, error?, rejection_reason?, proposed_by, decided_by?, proposed_at, decided_at?). -- New built-in Studio view `AiPendingActionView` with `pending` / `executed` / `rejected` / `failed` sub-views and per-row **Approve** / **Reject** API actions. -- New methods on `IAIService` (all optional, gated on a wired `IDataEngine`): - - `proposePendingAction(input) → { id }` - - `approvePendingAction(id, actorId) → { status, result?, error? }` - - `rejectPendingAction(id, actorId, reason?)` - - `listPendingActions(filter?) → PendingActionRow[]` -- New exported types: `PendingActionStatus`, `ProposePendingActionInput`, `PendingActionRow`. -- New REST routes (auth required): - - `GET /api/v1/ai/pending-actions` (`ai:read`) - - `GET /api/v1/ai/pending-actions/:id` (`ai:read`) - - `POST /api/v1/ai/pending-actions/:id/approve` (`ai:approve`) - - `POST /api/v1/ai/pending-actions/:id/reject` (`ai:approve`) -- New exported predicate `actionRequiresApproval(action)` for Studio's exposure surface. - -### Wiring - -`AIServicePluginOptions` gains `enableActionApproval?: boolean` (default `false`). When `true` and an `IDataEngine` is available, dangerous actions are registered and routed through the queue. - -```ts -kernel.use(new AIServicePlugin({ - enableActionApproval: true, // opt in - apiActionBaseUrl: 'http://localhost:3000', -})); -``` - -### Internals - -- `actionSkipReason()` accepts `enableActionApproval` + `aiService` in its ctx and stops returning `"requires confirmation"` / `"mode='delete'"` / `"variant='danger'"` when HITL is wired. -- `registerActionsAsTools()` pre-registers a *bypass-approval* dispatcher per dangerous tool via `aiService.registerPendingActionDispatcher(toolName, fn)`; approval calls back into the same code path with `enableActionApproval` flipped off, so a single handler implementation serves both proposal and execution. -- `createActionToolHandler()` short-circuits to `proposePendingAction()` when `enableActionApproval && actionRequiresApproval(action) && ctx.aiService?.proposePendingAction`. - -### Out of scope (deferred) - -Slack/email notifications, approver routing (any signed-in user can approve in v1), auto-expiry of pending requests, resuming the same LLM turn after approval (operators get a fresh assistant message instead). diff --git a/.changeset/v5-ai-hitl-e2e-demos.md b/.changeset/v5-ai-hitl-e2e-demos.md deleted file mode 100644 index 8f459186b7..0000000000 --- a/.changeset/v5-ai-hitl-e2e-demos.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -'@objectstack/service-ai': patch ---- - -**HITL Phase 3 — end-to-end demos + bug fix in handler-engine adapter.** - -Two runnable integration demos for the action-approval queue ship under `examples/app-todo/test/`: - -- `ai-hitl.test.ts` — drives the tool registry directly (no LLM). Asserts `variant:'danger'` actions register as tools, invocation returns `pending_approval`, row persists, `approvePendingAction(id, actor)` re-runs the handler, row flips to `executed`. Reject path covered too. Run with `pnpm --filter @example/app-todo test:hitl`. -- `ai-hitl-llm.test.ts` — same scenario behind a real model on Vercel AI Gateway. The LLM autonomously picks `action_delete_completed`, the framework gates the call with `pending_approval`, the model summarises the wait without retrying, and the operator-side approve completes the deletion. Gated on `AI_GATEWAY_API_KEY`. Run with `AI_GATEWAY_API_KEY=... pnpm --filter @example/app-todo test:hitl:llm`. - -While wiring the demos, two bugs surfaced in the bypass-approval dispatcher and the handler-engine adapter: - -1. **Bulk delete from declarative handlers was silently failing.** The adapter built by `buildHandlerEngineAdapter()` wrapped multi-id deletes as `engine.delete(obj, { where: { id: { $in: ids } } })`, but `ObjectQLEngine.delete()` prefers the scalar `id` branch whenever `where.id` is set — so the `{ $in: [...] }` object was forwarded to `driver.delete(scalar)` and rejected as `"Wrong API use: tried to bind a value of an unknown type ([object Object])"`. The adapter now loops scalar deletes, which is correct and driver-agnostic. - -2. **Approval pathway swallowed handler errors.** `createActionToolHandler` returns a `{ ok: false, error }` envelope on failure rather than throwing. The pre-registered bypass dispatcher just JSON-parsed and returned that envelope, so `approvePendingAction` thought the run succeeded and flipped the row to `executed`. The dispatcher now treats `ok === false` as a thrown error, so failed approvals are correctly persisted as `status: 'failed'` with the original message. - -Also: added `delete`/`remove`/`purge`/`destroy`/`erase` to `MemoryLLMAdapter.ACTION_VERBS` so the in-memory adapter can route delete-style intents during tests that don't have a real LLM. - -Docs: `content/docs/guides/ai-capabilities.mdx` now points at the two integration demos with copy-pasteable run commands. diff --git a/.changeset/v5-ai-hitl-studio-ui.md b/.changeset/v5-ai-hitl-studio-ui.md deleted file mode 100644 index 13a4ed321f..0000000000 --- a/.changeset/v5-ai-hitl-studio-ui.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -'@objectstack/service-ai': minor ---- - -Polish Studio HITL pending-action inbox UI - -The `AiPendingActionView` shipped by `service-ai` is now an actual operator -console rather than a flat grid: - -- **Drawer detail panel** — clicking any row opens a side drawer - (`navigation: { mode: 'drawer', view: 'detail' }`) with four sections: - Proposal · Tool input · Conversation context · Decision. -- **JSON widget** on `tool_input`, `result`, and `error` so structured tool - arguments and responses are readable without copy-pasting into a formatter. -- **Relative timestamps** (`type: 'datetime-relative'`) on `proposed_at` / - `decided_at` columns and form fields. -- **Conversation/message linkbacks** — the existing `Field.lookup` references - to `ai_conversations` / `ai_messages` are surfaced in a collapsed - "Conversation context" section, giving operators one-click access from a - pending action back to the chat that proposed it. -- **Status-conditional fields** via `visibleOn` predicates — `rejection_reason` - only appears for rejected rows, `error` only for failed rows, etc. -- **Per-row approve/reject buttons** on the Pending tab via `rowActions` - pointing at the existing `approve_pending_action` / `reject_pending_action` - object actions; the same actions also render in the drawer header. -- **Status-coloured rows** to make pending vs failed vs executed scannable. - -Snapshot-style tests in `__tests__/ai-pending-action.view.test.ts` lock the -shape so future Studio contract changes (widget renames, navigation modes) -fail loudly in one place. - -This is a metadata-only change — Studio (`@object-ui/studio`) interprets the -new view automatically. No backend, REST, or HITL semantics changed; the -end-to-end demos in `examples/app-todo/test/ai-hitl*.test.ts` continue to -pass unmodified. diff --git a/.changeset/v5-ai-llm-smoke-test.md b/.changeset/v5-ai-llm-smoke-test.md deleted file mode 100644 index 54fd646633..0000000000 --- a/.changeset/v5-ai-llm-smoke-test.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -"@objectstack/service-ai": patch -"@example/app-todo": patch ---- - -Real-LLM smoke test for the `data_chat` agent loop, plus two `query_data` -robustness fixes shaken out by running it against `openai/gpt-4.1-mini` via -the Vercel AI Gateway. - -**`query_data` tool fixes** - -- Removed the LLM-controllable `model` parameter from the public tool - schema. Frontier models were hallucinating `text-davinci-003` and other - long-dead model ids, breaking every plan generation. -- Switched the structured-output filter shape from `z.record(...)` (which - emits `propertyNames` in JSON Schema, rejected by OpenAI Structured - Outputs) to a `whereJson` string field. The model emits a JSON-encoded - ObjectQL filter; the tool parses & validates it before execution. This - also fixes a parallel issue with OpenAI's strict mode requiring every - property to appear in `required`. -- Switched all optional fields to `.nullable()` so the planner Zod schema - satisfies OpenAI Structured Outputs' "every property must be required" - rule. -- Beefed up the planner system prompt with explicit operator hints — most - importantly: use `$contains` for partial string matches (`"task named - Foo"` → `{"subject":{"$contains":"Foo"}}`), not equality. Without this - hint the model defaulted to exact-match equality and never found - anything. - -**New smoke test** - -`examples/app-todo/test/ai-llm.test.ts` (gated on `AI_GATEWAY_API_KEY`): -boots the full ObjectStack, registers `query_data` + the six auto-generated -`action_*` tools, sends *"Please mark the 'Build' task as complete."* to a -real LLM, and asserts that - -1. the model picked the right tools in the right order - (`query_data` → `action_complete_task`), -2. a task row actually flipped to `completed`, and -3. an `ai_traces` `chat_with_tools` row landed. - -Run with: `pnpm --filter @example/app-todo test:llm`. - -Verified end-to-end against `openai/gpt-4.1-mini` (~6.6 s, 2 tool calls, -1 task completed, trace persisted). diff --git a/.changeset/v5-runtime-ai-sse-stream-fix.md b/.changeset/v5-runtime-ai-sse-stream-fix.md deleted file mode 100644 index 1f81aced3a..0000000000 --- a/.changeset/v5-runtime-ai-sse-stream-fix.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -'@objectstack/runtime': patch ---- - -Fix: AI streaming endpoints (e.g. `POST /api/v1/ai/assistant/chat`) now -actually stream Server-Sent Events instead of returning the stream -descriptor JSON-serialized. - -The shared `sendResultBase()` in `dispatcher-plugin.ts` previously had a -`// pass through as JSON for now` TODO, so any dispatcher route whose -`result.result` was a stream descriptor (`{ type: 'stream', events, -headers, ... }`) would respond with a literal `{"type":"stream", -"events":{},"vercelDataStream":true,...}` body — breaking -`@object-ui/plugin-chatbot` and any other Vercel-AI-SDK consumer. - -The dispatcher now: - -- Detects `{ type: 'stream' | stream: true, events, headers? }` shapes. -- Applies the route-provided headers (defaults to - `text/event-stream`/`no-cache`/`keep-alive` when none are supplied). -- Performs an empty `res.write('')` synchronously so the Hono adapter's - `isStreaming` flag flips before the route handler resolves (the adapter - would otherwise close the body before the first async chunk lands). -- Drains the `AsyncIterable` of pre-encoded SSE chunks in the - background, calling `res.end()` when the iterator finishes or errors. - -Non-stream `result.result` payloads keep the existing JSON behaviour. diff --git a/apps/account/CHANGELOG.md b/apps/account/CHANGELOG.md index ffec4a5cec..f02b2060df 100644 --- a/apps/account/CHANGELOG.md +++ b/apps/account/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/account +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/client@6.2.0 + - @objectstack/client-react@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/apps/account/package.json b/apps/account/package.json index 667ddac967..5b3176c6d7 100644 --- a/apps/account/package.json +++ b/apps/account/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/account", - "version": "6.1.1", + "version": "6.2.0", "description": "ObjectStack Account - End-user account & organization self-service portal", "license": "Apache-2.0", "type": "module", diff --git a/examples/app-crm/CHANGELOG.md b/examples/app-crm/CHANGELOG.md index f97822604e..675255a4cc 100644 --- a/examples/app-crm/CHANGELOG.md +++ b/examples/app-crm/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/example-crm +## 4.0.15 + +### Patch Changes + +- Updated dependencies [b4c74a9] +- Updated dependencies [dbb54e1] + - @objectstack/spec@6.2.0 + - @objectstack/runtime@6.2.0 + ## 4.0.14 ### Patch Changes diff --git a/examples/app-crm/package.json b/examples/app-crm/package.json index b4f78d8e23..9a5aaf47cd 100644 --- a/examples/app-crm/package.json +++ b/examples/app-crm/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-crm", - "version": "4.0.14", + "version": "4.0.15", "description": "Minimal CRM example — a smoke-test workspace that exercises the metadata loading pipeline (objects → views → app → dashboard → hook → flow → seed). For a full-featured enterprise CRM see https://github.com/objectstack-ai/hotcrm.", "license": "Apache-2.0", "private": true, diff --git a/examples/app-todo/CHANGELOG.md b/examples/app-todo/CHANGELOG.md index 565ad0b778..3103adc9c7 100644 --- a/examples/app-todo/CHANGELOG.md +++ b/examples/app-todo/CHANGELOG.md @@ -1,5 +1,64 @@ # @objectstack/example-todo +## 4.0.15 + +### Patch Changes + +- 449e35d: Real-LLM smoke test for the `data_chat` agent loop, plus two `query_data` + robustness fixes shaken out by running it against `openai/gpt-4.1-mini` via + the Vercel AI Gateway. + + **`query_data` tool fixes** + + - Removed the LLM-controllable `model` parameter from the public tool + schema. Frontier models were hallucinating `text-davinci-003` and other + long-dead model ids, breaking every plan generation. + - Switched the structured-output filter shape from `z.record(...)` (which + emits `propertyNames` in JSON Schema, rejected by OpenAI Structured + Outputs) to a `whereJson` string field. The model emits a JSON-encoded + ObjectQL filter; the tool parses & validates it before execution. This + also fixes a parallel issue with OpenAI's strict mode requiring every + property to appear in `required`. + - Switched all optional fields to `.nullable()` so the planner Zod schema + satisfies OpenAI Structured Outputs' "every property must be required" + rule. + - Beefed up the planner system prompt with explicit operator hints — most + importantly: use `$contains` for partial string matches (`"task named +Foo"` → `{"subject":{"$contains":"Foo"}}`), not equality. Without this + hint the model defaulted to exact-match equality and never found + anything. + + **New smoke test** + + `examples/app-todo/test/ai-llm.test.ts` (gated on `AI_GATEWAY_API_KEY`): + boots the full ObjectStack, registers `query_data` + the six auto-generated + `action_*` tools, sends _"Please mark the 'Build' task as complete."_ to a + real LLM, and asserts that + + 1. the model picked the right tools in the right order + (`query_data` → `action_complete_task`), + 2. a task row actually flipped to `completed`, and + 3. an `ai_traces` `chat_with_tools` row landed. + + Run with: `pnpm --filter @example/app-todo test:llm`. + + Verified end-to-end against `openai/gpt-4.1-mini` (~6.6 s, 2 tool calls, + 1 task completed, trace persisted). + +- Updated dependencies [13a4f38] +- Updated dependencies [b4c74a9] +- Updated dependencies [bce47a0] +- Updated dependencies [bce47a0] +- Updated dependencies [449e35d] +- Updated dependencies [dbb54e1] + - @objectstack/service-ai@6.2.0 + - @objectstack/spec@6.2.0 + - @objectstack/runtime@6.2.0 + - @objectstack/client@6.2.0 + - @objectstack/metadata@6.2.0 + - @objectstack/objectql@6.2.0 + - @objectstack/driver-sqlite-wasm@6.2.0 + ## 4.0.14 ### Patch Changes diff --git a/examples/app-todo/package.json b/examples/app-todo/package.json index a8bb9d5651..6977706cd9 100644 --- a/examples/app-todo/package.json +++ b/examples/app-todo/package.json @@ -1,6 +1,6 @@ { "name": "@example/app-todo", - "version": "4.0.14", + "version": "4.0.15", "description": "Example Todo App using ObjectStack Protocol", "license": "Apache-2.0", "private": true, diff --git a/packages/adapters/express/CHANGELOG.md b/packages/adapters/express/CHANGELOG.md index e1f1a4cf97..15085e2902 100644 --- a/packages/adapters/express/CHANGELOG.md +++ b/packages/adapters/express/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/express +## 6.2.0 + ## 6.1.1 ## 6.1.0 diff --git a/packages/adapters/express/package.json b/packages/adapters/express/package.json index a42593da75..638b09e374 100644 --- a/packages/adapters/express/package.json +++ b/packages/adapters/express/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/express", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/fastify/CHANGELOG.md b/packages/adapters/fastify/CHANGELOG.md index a36b62bd38..aed079fda8 100644 --- a/packages/adapters/fastify/CHANGELOG.md +++ b/packages/adapters/fastify/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/fastify +## 6.2.0 + ## 6.1.1 ## 6.1.0 diff --git a/packages/adapters/fastify/package.json b/packages/adapters/fastify/package.json index 51b0addf34..b56c1cea3c 100644 --- a/packages/adapters/fastify/package.json +++ b/packages/adapters/fastify/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/fastify", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/hono/CHANGELOG.md b/packages/adapters/hono/CHANGELOG.md index 0aeb8bcce9..1bc17271af 100644 --- a/packages/adapters/hono/CHANGELOG.md +++ b/packages/adapters/hono/CHANGELOG.md @@ -1,5 +1,11 @@ # @objectstack/hono +## 6.2.0 + +### Patch Changes + +- @objectstack/plugin-hono-server@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/adapters/hono/package.json b/packages/adapters/hono/package.json index 9c88b0d140..1606aed601 100644 --- a/packages/adapters/hono/package.json +++ b/packages/adapters/hono/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/hono", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/nestjs/CHANGELOG.md b/packages/adapters/nestjs/CHANGELOG.md index 54e6df97e5..449e3d1b08 100644 --- a/packages/adapters/nestjs/CHANGELOG.md +++ b/packages/adapters/nestjs/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/nestjs +## 6.2.0 + ## 6.1.1 ## 6.1.0 diff --git a/packages/adapters/nestjs/package.json b/packages/adapters/nestjs/package.json index ad25fc52d7..72e9b80302 100644 --- a/packages/adapters/nestjs/package.json +++ b/packages/adapters/nestjs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/nestjs", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/nextjs/CHANGELOG.md b/packages/adapters/nextjs/CHANGELOG.md index 1dcba34894..b67cfc7466 100644 --- a/packages/adapters/nextjs/CHANGELOG.md +++ b/packages/adapters/nextjs/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/nextjs +## 6.2.0 + ## 6.1.1 ## 6.1.0 diff --git a/packages/adapters/nextjs/package.json b/packages/adapters/nextjs/package.json index 97e8fc8a0e..b3cd144769 100644 --- a/packages/adapters/nextjs/package.json +++ b/packages/adapters/nextjs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/nextjs", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/nuxt/CHANGELOG.md b/packages/adapters/nuxt/CHANGELOG.md index 035d50853e..4f0c5bd0ef 100644 --- a/packages/adapters/nuxt/CHANGELOG.md +++ b/packages/adapters/nuxt/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/nuxt +## 6.2.0 + ## 6.1.1 ## 6.1.0 diff --git a/packages/adapters/nuxt/package.json b/packages/adapters/nuxt/package.json index 8e422d945b..8ed79b6919 100644 --- a/packages/adapters/nuxt/package.json +++ b/packages/adapters/nuxt/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/nuxt", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/sveltekit/CHANGELOG.md b/packages/adapters/sveltekit/CHANGELOG.md index fa508f5410..188e8eab7d 100644 --- a/packages/adapters/sveltekit/CHANGELOG.md +++ b/packages/adapters/sveltekit/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/sveltekit +## 6.2.0 + ## 6.1.1 ## 6.1.0 diff --git a/packages/adapters/sveltekit/package.json b/packages/adapters/sveltekit/package.json index fcb99f34f6..ae117e8f42 100644 --- a/packages/adapters/sveltekit/package.json +++ b/packages/adapters/sveltekit/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/sveltekit", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 6ec07f0c4e..1cdee19a6e 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,50 @@ # @objectstack/cli +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] +- Updated dependencies [13a4f38] +- Updated dependencies [b4c74a9] +- Updated dependencies [bce47a0] +- Updated dependencies [bce47a0] +- Updated dependencies [449e35d] +- Updated dependencies [dbb54e1] + - @objectstack/plugin-auth@6.2.0 + - @objectstack/service-ai@6.2.0 + - @objectstack/spec@6.2.0 + - @objectstack/runtime@6.2.0 + - @objectstack/client@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/objectql@6.2.0 + - @objectstack/observability@6.2.0 + - @objectstack/driver-memory@6.2.0 + - @objectstack/driver-mongodb@6.2.0 + - @objectstack/driver-sql@6.2.0 + - @objectstack/driver-sqlite-wasm@6.2.0 + - @objectstack/driver-turso@6.2.0 + - @objectstack/plugin-approvals@6.2.0 + - @objectstack/plugin-audit@6.2.0 + - @objectstack/plugin-email@6.2.0 + - @objectstack/plugin-hono-server@6.2.0 + - @objectstack/plugin-mcp-server@6.2.0 + - @objectstack/plugin-reports@6.2.0 + - @objectstack/plugin-security@6.2.0 + - @objectstack/plugin-sharing@6.2.0 + - @objectstack/plugin-webhooks@6.2.0 + - @objectstack/rest@6.2.0 + - @objectstack/service-analytics@6.2.0 + - @objectstack/service-automation@6.2.0 + - @objectstack/service-cache@6.2.0 + - @objectstack/service-feed@6.2.0 + - @objectstack/service-job@6.2.0 + - @objectstack/service-package@6.2.0 + - @objectstack/service-queue@6.2.0 + - @objectstack/service-realtime@6.2.0 + - @objectstack/service-settings@6.2.0 + - @objectstack/service-storage@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 7a89695fbf..55463ed3ec 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/cli", - "version": "6.1.1", + "version": "6.2.0", "description": "Command Line Interface for ObjectStack Protocol", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/client-react/CHANGELOG.md b/packages/client-react/CHANGELOG.md index a08567a680..4a41925445 100644 --- a/packages/client-react/CHANGELOG.md +++ b/packages/client-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/client-react +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/client@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/client-react/package.json b/packages/client-react/package.json index 99f70f69f2..ad01aa1214 100644 --- a/packages/client-react/package.json +++ b/packages/client-react/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/client-react", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "React hooks for ObjectStack Client SDK", "main": "dist/index.js", diff --git a/packages/client/CHANGELOG.md b/packages/client/CHANGELOG.md index 81716eec2a..64e40d4012 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/client +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/client/package.json b/packages/client/package.json index 58b09b7281..9bdec15d12 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/client", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Official Client SDK for ObjectStack Protocol", "main": "dist/index.js", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index cb9c3e9268..7a93ea8934 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/core +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index d0d643a69b..66c3cb500d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/core", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Microkernel Core for ObjectStack", "type": "module", diff --git a/packages/create-objectstack/CHANGELOG.md b/packages/create-objectstack/CHANGELOG.md index a82a22be37..931ec3ea50 100644 --- a/packages/create-objectstack/CHANGELOG.md +++ b/packages/create-objectstack/CHANGELOG.md @@ -1,5 +1,7 @@ # create-objectstack +## 6.2.0 + ## 6.1.1 ## 6.1.0 diff --git a/packages/create-objectstack/package.json b/packages/create-objectstack/package.json index ddcfa7a8fc..21f6a6fc02 100644 --- a/packages/create-objectstack/package.json +++ b/packages/create-objectstack/package.json @@ -1,6 +1,6 @@ { "name": "create-objectstack", - "version": "6.1.1", + "version": "6.2.0", "description": "Create a new ObjectStack project — npx create-objectstack", "bin": { "create-objectstack": "./bin/create-objectstack.js" diff --git a/packages/formula/CHANGELOG.md b/packages/formula/CHANGELOG.md index 71bc711696..56f152fb91 100644 --- a/packages/formula/CHANGELOG.md +++ b/packages/formula/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/formula +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/formula/package.json b/packages/formula/package.json index c3c131c239..228083848d 100644 --- a/packages/formula/package.json +++ b/packages/formula/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/formula", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "ObjectStack canonical expression engine — CEL (cel-js) + ObjectStack stdlib + dialect registry", "main": "dist/index.js", diff --git a/packages/metadata-core/CHANGELOG.md b/packages/metadata-core/CHANGELOG.md index d559a927d7..3ee6bfade9 100644 --- a/packages/metadata-core/CHANGELOG.md +++ b/packages/metadata-core/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/metadata-core +## 6.2.0 + ## 6.1.1 ## 6.1.0 diff --git a/packages/metadata-core/package.json b/packages/metadata-core/package.json index a353a2a6ed..9d61cb9842 100644 --- a/packages/metadata-core/package.json +++ b/packages/metadata-core/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-core", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Metadata Repository contracts: types, canonicalization, errors, interface (ADR-0008).", "type": "module", diff --git a/packages/metadata-fs/CHANGELOG.md b/packages/metadata-fs/CHANGELOG.md index 045039b8f2..f338c35407 100644 --- a/packages/metadata-fs/CHANGELOG.md +++ b/packages/metadata-fs/CHANGELOG.md @@ -1,5 +1,11 @@ # @objectstack/metadata-fs +## 6.2.0 + +### Patch Changes + +- @objectstack/metadata-core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/metadata-fs/package.json b/packages/metadata-fs/package.json index b59ecd19d0..c0ec0fd717 100644 --- a/packages/metadata-fs/package.json +++ b/packages/metadata-fs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-fs", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "FileSystemRepository: Node-only Repository implementation backed by JSON files and a JSONL change log (ADR-0008).", "type": "module", diff --git a/packages/metadata/CHANGELOG.md b/packages/metadata/CHANGELOG.md index b090775e4c..4247e0d1bf 100644 --- a/packages/metadata/CHANGELOG.md +++ b/packages/metadata/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/metadata +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/platform-objects@6.2.0 + - @objectstack/types@6.2.0 + - @objectstack/metadata-core@6.2.0 + - @objectstack/metadata-fs@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/metadata/package.json b/packages/metadata/package.json index cbfcc4d22a..576ed5a753 100644 --- a/packages/metadata/package.json +++ b/packages/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Metadata loading, saving, and persistence for ObjectStack", "type": "module", diff --git a/packages/objectql/CHANGELOG.md b/packages/objectql/CHANGELOG.md index bf903d8d9f..3327e22ba7 100644 --- a/packages/objectql/CHANGELOG.md +++ b/packages/objectql/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/objectql +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/formula@6.2.0 + - @objectstack/types@6.2.0 + - @objectstack/metadata-core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/objectql/package.json b/packages/objectql/package.json index 193259c928..5a19a03ae5 100644 --- a/packages/objectql/package.json +++ b/packages/objectql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/objectql", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Isomorphic ObjectQL Engine for ObjectStack", "main": "dist/index.js", diff --git a/packages/observability/CHANGELOG.md b/packages/observability/CHANGELOG.md index 1bb8384782..b5fced1e68 100644 --- a/packages/observability/CHANGELOG.md +++ b/packages/observability/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/observability +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/observability/package.json b/packages/observability/package.json index 7dcedf6c1c..ef59df88b3 100644 --- a/packages/observability/package.json +++ b/packages/observability/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/observability", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Observability contracts and exporters for ObjectStack — MetricsRegistry, ErrorReporter, Logger plus noop/console/OTLP-HTTP exporters. Deployment-target neutral; runtime and services depend on this so the same instrumentation works on Cloudflare Workers, Node, and self-hosted Kubernetes.", "type": "module", diff --git a/packages/platform-objects/CHANGELOG.md b/packages/platform-objects/CHANGELOG.md index 6bba21b332..2464aeea31 100644 --- a/packages/platform-objects/CHANGELOG.md +++ b/packages/platform-objects/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/platform-objects +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/platform-objects/package.json b/packages/platform-objects/package.json index 2aa7ceec2f..15c2334728 100644 --- a/packages/platform-objects/package.json +++ b/packages/platform-objects/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/platform-objects", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Core platform object schemas for ObjectStack — identity, security, audit, tenant, and metadata objects", "main": "dist/index.js", diff --git a/packages/plugins/driver-memory/CHANGELOG.md b/packages/plugins/driver-memory/CHANGELOG.md index 545e877e62..c1eab5a80b 100644 --- a/packages/plugins/driver-memory/CHANGELOG.md +++ b/packages/plugins/driver-memory/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/driver-memory +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/driver-memory/package.json b/packages/plugins/driver-memory/package.json index 8667c3ffbe..0e9d9a8f47 100644 --- a/packages/plugins/driver-memory/package.json +++ b/packages/plugins/driver-memory/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-memory", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "In-Memory Driver for ObjectStack (Reference Implementation)", "main": "dist/index.js", diff --git a/packages/plugins/driver-mongodb/CHANGELOG.md b/packages/plugins/driver-mongodb/CHANGELOG.md index 90781cda54..53b72b60bb 100644 --- a/packages/plugins/driver-mongodb/CHANGELOG.md +++ b/packages/plugins/driver-mongodb/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/driver-mongodb +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/driver-mongodb/package.json b/packages/plugins/driver-mongodb/package.json index 48a17e55e5..4c12d21d48 100644 --- a/packages/plugins/driver-mongodb/package.json +++ b/packages/plugins/driver-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-mongodb", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "MongoDB Driver for ObjectStack - Native document database driver via official mongodb client", "main": "dist/index.js", diff --git a/packages/plugins/driver-sql/CHANGELOG.md b/packages/plugins/driver-sql/CHANGELOG.md index f8e54d129b..a0b4dac0c0 100644 --- a/packages/plugins/driver-sql/CHANGELOG.md +++ b/packages/plugins/driver-sql/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/driver-sql +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/driver-sql/package.json b/packages/plugins/driver-sql/package.json index bc236a9457..be96717d18 100644 --- a/packages/plugins/driver-sql/package.json +++ b/packages/plugins/driver-sql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-sql", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "SQL Driver for ObjectStack - Supports PostgreSQL, MySQL, SQLite via Knex", "main": "dist/index.js", diff --git a/packages/plugins/driver-sqlite-wasm/CHANGELOG.md b/packages/plugins/driver-sqlite-wasm/CHANGELOG.md index db8bca40d2..8b9e186c9b 100644 --- a/packages/plugins/driver-sqlite-wasm/CHANGELOG.md +++ b/packages/plugins/driver-sqlite-wasm/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/driver-sqlite-wasm +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/driver-sql@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/driver-sqlite-wasm/package.json b/packages/plugins/driver-sqlite-wasm/package.json index ce5cf5e0cb..8d42f23aae 100644 --- a/packages/plugins/driver-sqlite-wasm/package.json +++ b/packages/plugins/driver-sqlite-wasm/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-sqlite-wasm", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "WASM SQLite Driver for ObjectStack — runs in browser/WebContainer (StackBlitz) without native bindings", "keywords": [ diff --git a/packages/plugins/driver-turso/CHANGELOG.md b/packages/plugins/driver-turso/CHANGELOG.md index 1734552087..0b4a149157 100644 --- a/packages/plugins/driver-turso/CHANGELOG.md +++ b/packages/plugins/driver-turso/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/driver-turso +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/driver-sql@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/driver-turso/package.json b/packages/plugins/driver-turso/package.json index a6a11f1e9c..c3181f8f8b 100644 --- a/packages/plugins/driver-turso/package.json +++ b/packages/plugins/driver-turso/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-turso", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Turso/libSQL Driver for ObjectStack — Edge-first SQLite with embedded replicas and multi-tenancy", "keywords": [ diff --git a/packages/plugins/plugin-approvals/CHANGELOG.md b/packages/plugins/plugin-approvals/CHANGELOG.md index 1b94f9fcac..8089961cc8 100644 --- a/packages/plugins/plugin-approvals/CHANGELOG.md +++ b/packages/plugins/plugin-approvals/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/plugin-approvals +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/formula@6.2.0 + - @objectstack/platform-objects@6.2.0 + - @objectstack/metadata-core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/plugin-approvals/package.json b/packages/plugins/plugin-approvals/package.json index 1f140ec2c0..8d7c6925d8 100644 --- a/packages/plugins/plugin-approvals/package.json +++ b/packages/plugins/plugin-approvals/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-approvals", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Multi-step approval engine for ObjectStack — sys_approval_process + sys_approval_request + sys_approval_action + IApprovalService.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-audit/CHANGELOG.md b/packages/plugins/plugin-audit/CHANGELOG.md index 67f2f0be62..78066bddd2 100644 --- a/packages/plugins/plugin-audit/CHANGELOG.md +++ b/packages/plugins/plugin-audit/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/plugin-audit +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/platform-objects@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/plugin-audit/package.json b/packages/plugins/plugin-audit/package.json index 88fecd05ec..f33303298f 100644 --- a/packages/plugins/plugin-audit/package.json +++ b/packages/plugins/plugin-audit/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-audit", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Audit Plugin for ObjectStack — System audit log object and audit trail", "main": "dist/index.js", diff --git a/packages/plugins/plugin-auth/CHANGELOG.md b/packages/plugins/plugin-auth/CHANGELOG.md index fd85a758d9..521b4be986 100644 --- a/packages/plugins/plugin-auth/CHANGELOG.md +++ b/packages/plugins/plugin-auth/CHANGELOG.md @@ -1,5 +1,37 @@ # Changelog +## 6.2.0 + +### Minor Changes + +- b4c74a9: WebContainer (StackBlitz) signup compatibility: `AuthManager` now auto-detects + WebContainer runtimes at construction time and swaps better-auth's default + `node:crypto.scrypt`-based password hasher for the pure-JS hasher from + `@better-auth/utils/password` (which uses `@noble/hashes/scrypt` under the + hood). + + **Why:** WebContainer's `node:crypto` polyfill ships an incomplete `scrypt` + implementation that throws `TypeError: y.run is not a function` on every + signup, blocking template demos on StackBlitz. The pure-JS implementation is + byte-compatible with the Node hasher (same scrypt params, same `salt:keyHex` + storage format), so accounts created under either hasher remain mutually + verifiable — no migration, no template changes. + + **Scope:** detection short-circuits to `undefined` on real Node, so production + deployments are completely unaffected — the JS fallback module is only + dynamically imported when one of `process.versions.webcontainer`, + `SHELL` containing `jsh`, or `STACKBLITZ` env is present. + + Templates (`@template/todo`, `@template/contracts`, …) require no changes; + the fix lives entirely inside `@objectstack/plugin-auth`. + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/platform-objects@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/plugin-auth/package.json b/packages/plugins/plugin-auth/package.json index 763493c7e1..22c7c261fe 100644 --- a/packages/plugins/plugin-auth/package.json +++ b/packages/plugins/plugin-auth/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-auth", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Authentication & Identity Plugin for ObjectStack", "main": "dist/index.js", diff --git a/packages/plugins/plugin-dev/CHANGELOG.md b/packages/plugins/plugin-dev/CHANGELOG.md index 3f26187cf4..aba4bde586 100644 --- a/packages/plugins/plugin-dev/CHANGELOG.md +++ b/packages/plugins/plugin-dev/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/plugin-dev +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/plugin-dev/package.json b/packages/plugins/plugin-dev/package.json index b98024900a..7a7d49af56 100644 --- a/packages/plugins/plugin-dev/package.json +++ b/packages/plugins/plugin-dev/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-dev", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Development Mode Plugin for ObjectStack — auto-enables all services with in-memory implementations", "main": "dist/index.js", diff --git a/packages/plugins/plugin-email/CHANGELOG.md b/packages/plugins/plugin-email/CHANGELOG.md index 2ce804b9ba..51ddcdb033 100644 --- a/packages/plugins/plugin-email/CHANGELOG.md +++ b/packages/plugins/plugin-email/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/plugin-email +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/platform-objects@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/plugin-email/package.json b/packages/plugins/plugin-email/package.json index 543f8bef60..0d6abd9b01 100644 --- a/packages/plugins/plugin-email/package.json +++ b/packages/plugins/plugin-email/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-email", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Email service plugin for ObjectStack — IEmailService + transport-pluggable outbound delivery with sys_email persistence.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-hono-server/CHANGELOG.md b/packages/plugins/plugin-hono-server/CHANGELOG.md index 3492c59585..6ca76280a9 100644 --- a/packages/plugins/plugin-hono-server/CHANGELOG.md +++ b/packages/plugins/plugin-hono-server/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/plugin-hono-server +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/plugin-hono-server/package.json b/packages/plugins/plugin-hono-server/package.json index 227d4538b9..d60e13d7c2 100644 --- a/packages/plugins/plugin-hono-server/package.json +++ b/packages/plugins/plugin-hono-server/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-hono-server", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Standard Hono Server Adapter for ObjectStack Runtime", "main": "dist/index.js", diff --git a/packages/plugins/plugin-mcp-server/CHANGELOG.md b/packages/plugins/plugin-mcp-server/CHANGELOG.md index dea1a8f596..11938c01b9 100644 --- a/packages/plugins/plugin-mcp-server/CHANGELOG.md +++ b/packages/plugins/plugin-mcp-server/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/plugin-mcp-server +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/plugin-mcp-server/package.json b/packages/plugins/plugin-mcp-server/package.json index c579be270b..d3e93e491e 100644 --- a/packages/plugins/plugin-mcp-server/package.json +++ b/packages/plugins/plugin-mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-mcp-server", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "MCP Runtime Server Plugin for ObjectStack — exposes AI tools, data resources, and agent prompts via the Model Context Protocol", "type": "module", diff --git a/packages/plugins/plugin-msw/CHANGELOG.md b/packages/plugins/plugin-msw/CHANGELOG.md index cd19d80270..febad07125 100644 --- a/packages/plugins/plugin-msw/CHANGELOG.md +++ b/packages/plugins/plugin-msw/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/plugin-msw +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/objectql@6.2.0 + - @objectstack/types@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/plugin-msw/package.json b/packages/plugins/plugin-msw/package.json index 91bcf3bc94..0f44696929 100644 --- a/packages/plugins/plugin-msw/package.json +++ b/packages/plugins/plugin-msw/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-msw", - "version": "6.1.1", + "version": "6.2.0", "description": "MSW (Mock Service Worker) Plugin for ObjectStack Runtime", "license": "Apache-2.0", "main": "dist/index.js", diff --git a/packages/plugins/plugin-reports/CHANGELOG.md b/packages/plugins/plugin-reports/CHANGELOG.md index 7c1b9c04d4..6c451b7eb5 100644 --- a/packages/plugins/plugin-reports/CHANGELOG.md +++ b/packages/plugins/plugin-reports/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/plugin-reports +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/platform-objects@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/plugin-reports/package.json b/packages/plugins/plugin-reports/package.json index 21d3b79814..f54aeb5724 100644 --- a/packages/plugins/plugin-reports/package.json +++ b/packages/plugins/plugin-reports/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-reports", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Saved reports + scheduled email digests for ObjectStack — sys_saved_report + sys_report_schedule + IReportService.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-security/CHANGELOG.md b/packages/plugins/plugin-security/CHANGELOG.md index 1b5536c667..82968367a7 100644 --- a/packages/plugins/plugin-security/CHANGELOG.md +++ b/packages/plugins/plugin-security/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/plugin-security +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/platform-objects@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/plugin-security/package.json b/packages/plugins/plugin-security/package.json index cb8af6ea95..41ecf41864 100644 --- a/packages/plugins/plugin-security/package.json +++ b/packages/plugins/plugin-security/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-security", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Security Plugin for ObjectStack — RBAC, RLS, and Field-Level Security Runtime", "main": "dist/index.js", diff --git a/packages/plugins/plugin-sharing/CHANGELOG.md b/packages/plugins/plugin-sharing/CHANGELOG.md index c564b6f51f..462d4e9870 100644 --- a/packages/plugins/plugin-sharing/CHANGELOG.md +++ b/packages/plugins/plugin-sharing/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/plugin-sharing +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/objectql@6.2.0 + - @objectstack/platform-objects@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/plugin-sharing/package.json b/packages/plugins/plugin-sharing/package.json index 9e9021ca93..6c4056f5ab 100644 --- a/packages/plugins/plugin-sharing/package.json +++ b/packages/plugins/plugin-sharing/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-sharing", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Record-level sharing for ObjectStack — sys_record_share + middleware that enforces sharingModel + ISharingService.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-webhooks/CHANGELOG.md b/packages/plugins/plugin-webhooks/CHANGELOG.md index 6f284fef6e..83b9e67859 100644 --- a/packages/plugins/plugin-webhooks/CHANGELOG.md +++ b/packages/plugins/plugin-webhooks/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/plugin-webhooks +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/platform-objects@6.2.0 + - @objectstack/service-cluster@5.1.5 + ## 6.1.1 ### Patch Changes diff --git a/packages/plugins/plugin-webhooks/package.json b/packages/plugins/plugin-webhooks/package.json index 9dd986f2b0..91b17729f9 100644 --- a/packages/plugins/plugin-webhooks/package.json +++ b/packages/plugins/plugin-webhooks/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-webhooks", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Persistent, cluster-aware webhook dispatcher. Durable outbox + per-partition cluster.lock for exactly-once-ish delivery across nodes. See content/docs/concepts/webhook-delivery.mdx.", "type": "module", diff --git a/packages/rest/CHANGELOG.md b/packages/rest/CHANGELOG.md index 97c6ce54b9..cdd031c90d 100644 --- a/packages/rest/CHANGELOG.md +++ b/packages/rest/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/rest +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/service-package@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/rest/package.json b/packages/rest/package.json index 24f1231c4e..c2e32f52d2 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/rest", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "ObjectStack REST API Server - automatic REST endpoint generation from protocol", "type": "module", diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index 473280bf2b..eea9b60846 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -1,5 +1,46 @@ # @objectstack/runtime +## 6.2.0 + +### Patch Changes + +- dbb54e1: Fix: AI streaming endpoints (e.g. `POST /api/v1/ai/assistant/chat`) now + actually stream Server-Sent Events instead of returning the stream + descriptor JSON-serialized. + + The shared `sendResultBase()` in `dispatcher-plugin.ts` previously had a + `// pass through as JSON for now` TODO, so any dispatcher route whose + `result.result` was a stream descriptor (`{ type: 'stream', events, +headers, ... }`) would respond with a literal `{"type":"stream", +"events":{},"vercelDataStream":true,...}` body — breaking + `@object-ui/plugin-chatbot` and any other Vercel-AI-SDK consumer. + + The dispatcher now: + + - Detects `{ type: 'stream' | stream: true, events, headers? }` shapes. + - Applies the route-provided headers (defaults to + `text/event-stream`/`no-cache`/`keep-alive` when none are supplied). + - Performs an empty `res.write('')` synchronously so the Hono adapter's + `isStreaming` flag flips before the route handler resolves (the adapter + would otherwise close the body before the first async chunk lands). + - Drains the `AsyncIterable` of pre-encoded SSE chunks in the + background, calling `res.end()` when the iterator finishes or errors. + + Non-stream `result.result` payloads keep the existing JSON behaviour. + +- Updated dependencies [b4c74a9] +- Updated dependencies [b4c74a9] + - @objectstack/plugin-auth@6.2.0 + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/formula@6.2.0 + - @objectstack/observability@6.2.0 + - @objectstack/plugin-security@6.2.0 + - @objectstack/rest@6.2.0 + - @objectstack/service-cluster@5.1.5 + - @objectstack/service-i18n@6.2.0 + - @objectstack/types@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 1cf056d2e6..2e3bdbb1b6 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/runtime", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "ObjectStack Core Runtime & Query Engine", "type": "module", diff --git a/packages/services/service-ai/CHANGELOG.md b/packages/services/service-ai/CHANGELOG.md index 030481a471..4818005c6f 100644 --- a/packages/services/service-ai/CHANGELOG.md +++ b/packages/services/service-ai/CHANGELOG.md @@ -1,5 +1,159 @@ # @objectstack/service-ai +## 6.2.0 + +### Minor Changes + +- b4c74a9: **Actions-as-tools Phase 3 — Human-In-The-Loop approval queue.** + + Dangerous declarative actions (`confirmText`, `mode:'delete'`, `variant:'danger'`) can now be exposed to the LLM safely. Instead of being skipped outright, they are registered as tools whose handler enqueues a pending request and returns `{ status: 'pending_approval', pendingActionId }` to the model. A human approves (or rejects) from Studio's pending-actions inbox; the service then re-runs the exact same dispatcher. + + ### New surface + + - New system object `ai_pending_actions` (id, conversation_id?, message_id?, object_name, action_name, tool_name, tool_input, status [`pending`|`approved`|`executed`|`failed`|`rejected`], result?, error?, rejection_reason?, proposed_by, decided_by?, proposed_at, decided_at?). + - New built-in Studio view `AiPendingActionView` with `pending` / `executed` / `rejected` / `failed` sub-views and per-row **Approve** / **Reject** API actions. + - New methods on `IAIService` (all optional, gated on a wired `IDataEngine`): + - `proposePendingAction(input) → { id }` + - `approvePendingAction(id, actorId) → { status, result?, error? }` + - `rejectPendingAction(id, actorId, reason?)` + - `listPendingActions(filter?) → PendingActionRow[]` + - New exported types: `PendingActionStatus`, `ProposePendingActionInput`, `PendingActionRow`. + - New REST routes (auth required): + - `GET /api/v1/ai/pending-actions` (`ai:read`) + - `GET /api/v1/ai/pending-actions/:id` (`ai:read`) + - `POST /api/v1/ai/pending-actions/:id/approve` (`ai:approve`) + - `POST /api/v1/ai/pending-actions/:id/reject` (`ai:approve`) + - New exported predicate `actionRequiresApproval(action)` for Studio's exposure surface. + + ### Wiring + + `AIServicePluginOptions` gains `enableActionApproval?: boolean` (default `false`). When `true` and an `IDataEngine` is available, dangerous actions are registered and routed through the queue. + + ```ts + kernel.use( + new AIServicePlugin({ + enableActionApproval: true, // opt in + apiActionBaseUrl: "http://localhost:3000", + }) + ); + ``` + + ### Internals + + - `actionSkipReason()` accepts `enableActionApproval` + `aiService` in its ctx and stops returning `"requires confirmation"` / `"mode='delete'"` / `"variant='danger'"` when HITL is wired. + - `registerActionsAsTools()` pre-registers a _bypass-approval_ dispatcher per dangerous tool via `aiService.registerPendingActionDispatcher(toolName, fn)`; approval calls back into the same code path with `enableActionApproval` flipped off, so a single handler implementation serves both proposal and execution. + - `createActionToolHandler()` short-circuits to `proposePendingAction()` when `enableActionApproval && actionRequiresApproval(action) && ctx.aiService?.proposePendingAction`. + + ### Out of scope (deferred) + + Slack/email notifications, approver routing (any signed-in user can approve in v1), auto-expiry of pending requests, resuming the same LLM turn after approval (operators get a fresh assistant message instead). + +- bce47a0: Polish Studio HITL pending-action inbox UI + + The `AiPendingActionView` shipped by `service-ai` is now an actual operator + console rather than a flat grid: + + - **Drawer detail panel** — clicking any row opens a side drawer + (`navigation: { mode: 'drawer', view: 'detail' }`) with four sections: + Proposal · Tool input · Conversation context · Decision. + - **JSON widget** on `tool_input`, `result`, and `error` so structured tool + arguments and responses are readable without copy-pasting into a formatter. + - **Relative timestamps** (`type: 'datetime-relative'`) on `proposed_at` / + `decided_at` columns and form fields. + - **Conversation/message linkbacks** — the existing `Field.lookup` references + to `ai_conversations` / `ai_messages` are surfaced in a collapsed + "Conversation context" section, giving operators one-click access from a + pending action back to the chat that proposed it. + - **Status-conditional fields** via `visibleOn` predicates — `rejection_reason` + only appears for rejected rows, `error` only for failed rows, etc. + - **Per-row approve/reject buttons** on the Pending tab via `rowActions` + pointing at the existing `approve_pending_action` / `reject_pending_action` + object actions; the same actions also render in the drawer header. + - **Status-coloured rows** to make pending vs failed vs executed scannable. + + Snapshot-style tests in `__tests__/ai-pending-action.view.test.ts` lock the + shape so future Studio contract changes (widget renames, navigation modes) + fail loudly in one place. + + This is a metadata-only change — Studio (`@object-ui/studio`) interprets the + new view automatically. No backend, REST, or HITL semantics changed; the + end-to-end demos in `examples/app-todo/test/ai-hitl*.test.ts` continue to + pass unmodified. + +### Patch Changes + +- 13a4f38: **Actions-as-tools Phase 2:** the AI tool runtime can now dispatch `type:'api'` and `type:'flow'` actions in addition to `type:'script'`. + + - New exported `ApiActionClient` interface and `createFetchApiClient({ baseUrl, headers, fetch })` factory — default fetch-based dispatch resolves relative `target` paths against `baseUrl`, throws on non-2xx with `${method} ${url} → ${status}: ${body}`, and JSON-parses the response. + - New exported `buildApiRequestBody(action, args, record, recordId)` helper — honours `bodyShape.wrap`, `recordIdParam` + `recordIdField` (defaults to `'id'`), and merges `bodyExtra` last so constants win. + - `ActionToolsContext` extended (additive): `automation`, `apiClient`, `apiBaseUrl`, `apiHeaders`. + - `actionSkipReason()` gains an optional second `ctx` parameter that returns precise wiring-availability reasons (`'no automation service available'`, `'no apiClient or apiBaseUrl configured'`). Studio-only types (`url` / `modal` / `form`) and all dangerous variants (`confirmText`, `mode:'delete'`, `variant:'danger'`) remain skipped. + - `AIServicePlugin` options accept `apiActionBaseUrl` (falls back to `OS_AI_ACTION_API_BASE_URL`) and `apiActionHeaders`; the plugin now resolves the `automation` service silently and threads everything into `registerActionsAsTools`. + + Net result: every non-destructive declarative action with a target — `script`, `api`, `flow` — is now LLM-callable end-to-end as soon as the corresponding wiring is in place. + +- bce47a0: **HITL Phase 3 — end-to-end demos + bug fix in handler-engine adapter.** + + Two runnable integration demos for the action-approval queue ship under `examples/app-todo/test/`: + + - `ai-hitl.test.ts` — drives the tool registry directly (no LLM). Asserts `variant:'danger'` actions register as tools, invocation returns `pending_approval`, row persists, `approvePendingAction(id, actor)` re-runs the handler, row flips to `executed`. Reject path covered too. Run with `pnpm --filter @example/app-todo test:hitl`. + - `ai-hitl-llm.test.ts` — same scenario behind a real model on Vercel AI Gateway. The LLM autonomously picks `action_delete_completed`, the framework gates the call with `pending_approval`, the model summarises the wait without retrying, and the operator-side approve completes the deletion. Gated on `AI_GATEWAY_API_KEY`. Run with `AI_GATEWAY_API_KEY=... pnpm --filter @example/app-todo test:hitl:llm`. + + While wiring the demos, two bugs surfaced in the bypass-approval dispatcher and the handler-engine adapter: + + 1. **Bulk delete from declarative handlers was silently failing.** The adapter built by `buildHandlerEngineAdapter()` wrapped multi-id deletes as `engine.delete(obj, { where: { id: { $in: ids } } })`, but `ObjectQLEngine.delete()` prefers the scalar `id` branch whenever `where.id` is set — so the `{ $in: [...] }` object was forwarded to `driver.delete(scalar)` and rejected as `"Wrong API use: tried to bind a value of an unknown type ([object Object])"`. The adapter now loops scalar deletes, which is correct and driver-agnostic. + + 2. **Approval pathway swallowed handler errors.** `createActionToolHandler` returns a `{ ok: false, error }` envelope on failure rather than throwing. The pre-registered bypass dispatcher just JSON-parsed and returned that envelope, so `approvePendingAction` thought the run succeeded and flipped the row to `executed`. The dispatcher now treats `ok === false` as a thrown error, so failed approvals are correctly persisted as `status: 'failed'` with the original message. + + Also: added `delete`/`remove`/`purge`/`destroy`/`erase` to `MemoryLLMAdapter.ACTION_VERBS` so the in-memory adapter can route delete-style intents during tests that don't have a real LLM. + + Docs: `content/docs/guides/ai-capabilities.mdx` now points at the two integration demos with copy-pasteable run commands. + +- 449e35d: Real-LLM smoke test for the `data_chat` agent loop, plus two `query_data` + robustness fixes shaken out by running it against `openai/gpt-4.1-mini` via + the Vercel AI Gateway. + + **`query_data` tool fixes** + + - Removed the LLM-controllable `model` parameter from the public tool + schema. Frontier models were hallucinating `text-davinci-003` and other + long-dead model ids, breaking every plan generation. + - Switched the structured-output filter shape from `z.record(...)` (which + emits `propertyNames` in JSON Schema, rejected by OpenAI Structured + Outputs) to a `whereJson` string field. The model emits a JSON-encoded + ObjectQL filter; the tool parses & validates it before execution. This + also fixes a parallel issue with OpenAI's strict mode requiring every + property to appear in `required`. + - Switched all optional fields to `.nullable()` so the planner Zod schema + satisfies OpenAI Structured Outputs' "every property must be required" + rule. + - Beefed up the planner system prompt with explicit operator hints — most + importantly: use `$contains` for partial string matches (`"task named +Foo"` → `{"subject":{"$contains":"Foo"}}`), not equality. Without this + hint the model defaulted to exact-match equality and never found + anything. + + **New smoke test** + + `examples/app-todo/test/ai-llm.test.ts` (gated on `AI_GATEWAY_API_KEY`): + boots the full ObjectStack, registers `query_data` + the six auto-generated + `action_*` tools, sends _"Please mark the 'Build' task as complete."_ to a + real LLM, and asserts that + + 1. the model picked the right tools in the right order + (`query_data` → `action_complete_task`), + 2. a task row actually flipped to `completed`, and + 3. an `ai_traces` `chat_with_tools` row landed. + + Run with: `pnpm --filter @example/app-todo test:llm`. + + Verified end-to-end against `openai/gpt-4.1-mini` (~6.6 s, 2 tool calls, + 1 task completed, trace persisted). + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/services/service-ai/package.json b/packages/services/service-ai/package.json index 94e9ab4c65..08fd509037 100644 --- a/packages/services/service-ai/package.json +++ b/packages/services/service-ai/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-ai", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "AI Service for ObjectStack — implements IAIService with LLM adapter layer, conversation management, tool registry, and REST/SSE routes", "type": "module", diff --git a/packages/services/service-analytics/CHANGELOG.md b/packages/services/service-analytics/CHANGELOG.md index bdb189df59..fd23e1bbae 100644 --- a/packages/services/service-analytics/CHANGELOG.md +++ b/packages/services/service-analytics/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog — @objectstack/service-analytics +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/services/service-analytics/package.json b/packages/services/service-analytics/package.json index b442fd2f61..d3e709b237 100644 --- a/packages/services/service-analytics/package.json +++ b/packages/services/service-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-analytics", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Analytics Service for ObjectStack — implements IAnalyticsService with multi-driver strategy pattern (NativeSQL, ObjectQL, InMemory)", "type": "module", diff --git a/packages/services/service-automation/CHANGELOG.md b/packages/services/service-automation/CHANGELOG.md index 3feaf65bc1..aa87aa0e43 100644 --- a/packages/services/service-automation/CHANGELOG.md +++ b/packages/services/service-automation/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/service-automation +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/formula@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/services/service-automation/package.json b/packages/services/service-automation/package.json index 52e03d45c6..6c153c2f44 100644 --- a/packages/services/service-automation/package.json +++ b/packages/services/service-automation/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-automation", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Automation Service for ObjectStack — implements IAutomationService with plugin-based DAG flow execution engine", "type": "module", diff --git a/packages/services/service-cache/CHANGELOG.md b/packages/services/service-cache/CHANGELOG.md index 1982aeb760..da5766347e 100644 --- a/packages/services/service-cache/CHANGELOG.md +++ b/packages/services/service-cache/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/service-cache +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/observability@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/services/service-cache/package.json b/packages/services/service-cache/package.json index bb899fe164..69595982c6 100644 --- a/packages/services/service-cache/package.json +++ b/packages/services/service-cache/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cache", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Cache Service for ObjectStack — implements ICacheService with in-memory and Redis adapters", "type": "module", diff --git a/packages/services/service-cluster-redis/CHANGELOG.md b/packages/services/service-cluster-redis/CHANGELOG.md index e08c7e0458..a644400a94 100644 --- a/packages/services/service-cluster-redis/CHANGELOG.md +++ b/packages/services/service-cluster-redis/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/service-cluster-redis +## 5.1.5 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/service-cluster@5.1.5 + ## 5.1.4 ### Patch Changes diff --git a/packages/services/service-cluster-redis/package.json b/packages/services/service-cluster-redis/package.json index 529e915a18..f10037a0cd 100644 --- a/packages/services/service-cluster-redis/package.json +++ b/packages/services/service-cluster-redis/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cluster-redis", - "version": "5.1.4", + "version": "5.1.5", "license": "Apache-2.0", "description": "Redis cluster driver for ObjectStack — implements IPubSub/ILock/IKV/ICounter against Redis using ioredis.", "type": "module", diff --git a/packages/services/service-cluster/CHANGELOG.md b/packages/services/service-cluster/CHANGELOG.md index 157f913f41..57d79bd2c5 100644 --- a/packages/services/service-cluster/CHANGELOG.md +++ b/packages/services/service-cluster/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/service-cluster +## 5.1.5 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 5.1.4 ### Patch Changes diff --git a/packages/services/service-cluster/package.json b/packages/services/service-cluster/package.json index be5866fd39..fc5f907f5d 100644 --- a/packages/services/service-cluster/package.json +++ b/packages/services/service-cluster/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cluster", - "version": "5.1.4", + "version": "5.1.5", "license": "Apache-2.0", "description": "Cluster Service for ObjectStack — pluggable PubSub/Lock/KV/Counter primitives. Memory driver included; postgres/redis drivers ship separately.", "type": "module", diff --git a/packages/services/service-feed/CHANGELOG.md b/packages/services/service-feed/CHANGELOG.md index 5d058e080a..b7a0388eab 100644 --- a/packages/services/service-feed/CHANGELOG.md +++ b/packages/services/service-feed/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/service-feed +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/services/service-feed/package.json b/packages/services/service-feed/package.json index 76172b1ae4..5f54781338 100644 --- a/packages/services/service-feed/package.json +++ b/packages/services/service-feed/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-feed", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Feed/Chatter Service for ObjectStack — implements IFeedService with in-memory adapter for comments, reactions, field changes, and record subscriptions", "type": "module", diff --git a/packages/services/service-i18n/CHANGELOG.md b/packages/services/service-i18n/CHANGELOG.md index 999cd6a155..c6503af19c 100644 --- a/packages/services/service-i18n/CHANGELOG.md +++ b/packages/services/service-i18n/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/service-i18n +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/services/service-i18n/package.json b/packages/services/service-i18n/package.json index 0f91dc8dda..2a29cdf2a0 100644 --- a/packages/services/service-i18n/package.json +++ b/packages/services/service-i18n/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-i18n", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "I18n Service for ObjectStack — implements II18nService with file-based locale loading", "type": "module", diff --git a/packages/services/service-job/CHANGELOG.md b/packages/services/service-job/CHANGELOG.md index 290a7264d5..64b3b2d1da 100644 --- a/packages/services/service-job/CHANGELOG.md +++ b/packages/services/service-job/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/service-job +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/platform-objects@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/services/service-job/package.json b/packages/services/service-job/package.json index b9d4c178c0..faa3d254d1 100644 --- a/packages/services/service-job/package.json +++ b/packages/services/service-job/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-job", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Job Service for ObjectStack — implements IJobService with setInterval and cron scheduling", "type": "module", diff --git a/packages/services/service-package/CHANGELOG.md b/packages/services/service-package/CHANGELOG.md index 52de47df2c..c4befd7fd3 100644 --- a/packages/services/service-package/CHANGELOG.md +++ b/packages/services/service-package/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/service-package +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/services/service-package/package.json b/packages/services/service-package/package.json index 451ebdeadd..e32a9b7505 100644 --- a/packages/services/service-package/package.json +++ b/packages/services/service-package/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-package", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Package management service for ObjectStack — publish, install, and manage packages", "type": "module", diff --git a/packages/services/service-queue/CHANGELOG.md b/packages/services/service-queue/CHANGELOG.md index b86d95f2b2..888438de05 100644 --- a/packages/services/service-queue/CHANGELOG.md +++ b/packages/services/service-queue/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/service-queue +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/platform-objects@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/services/service-queue/package.json b/packages/services/service-queue/package.json index 2670295d07..3f4b44828f 100644 --- a/packages/services/service-queue/package.json +++ b/packages/services/service-queue/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-queue", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Queue Service for ObjectStack — implements IQueueService with in-memory and BullMQ adapters", "type": "module", diff --git a/packages/services/service-realtime/CHANGELOG.md b/packages/services/service-realtime/CHANGELOG.md index 0725036bb3..70cc7d845d 100644 --- a/packages/services/service-realtime/CHANGELOG.md +++ b/packages/services/service-realtime/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/service-realtime +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/platform-objects@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/services/service-realtime/package.json b/packages/services/service-realtime/package.json index 4ddb154eca..cfca10dae8 100644 --- a/packages/services/service-realtime/package.json +++ b/packages/services/service-realtime/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-realtime", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Realtime Service for ObjectStack — implements IRealtimeService with WebSocket and in-memory pub/sub", "type": "module", diff --git a/packages/services/service-settings/CHANGELOG.md b/packages/services/service-settings/CHANGELOG.md index 369900dca7..f3c1627b16 100644 --- a/packages/services/service-settings/CHANGELOG.md +++ b/packages/services/service-settings/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/service-settings +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/platform-objects@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/services/service-settings/package.json b/packages/services/service-settings/package.json index f12b5cb689..68e21f1160 100644 --- a/packages/services/service-settings/package.json +++ b/packages/services/service-settings/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-settings", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Settings service for ObjectStack — manifest registry + K/V resolver (Env > Tenant > User > Default) + REST routes. See ADR-0007.", "type": "module", diff --git a/packages/services/service-storage/CHANGELOG.md b/packages/services/service-storage/CHANGELOG.md index b66c30acbf..146e024e4b 100644 --- a/packages/services/service-storage/CHANGELOG.md +++ b/packages/services/service-storage/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/service-storage +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + - @objectstack/core@6.2.0 + - @objectstack/observability@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/services/service-storage/package.json b/packages/services/service-storage/package.json index fbff5465a7..aa4a1e4bf3 100644 --- a/packages/services/service-storage/package.json +++ b/packages/services/service-storage/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-storage", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Storage Service for ObjectStack — implements IStorageService with local filesystem and S3 adapter skeleton", "type": "module", diff --git a/packages/spec/CHANGELOG.md b/packages/spec/CHANGELOG.md index 512a571372..b7b131ca37 100644 --- a/packages/spec/CHANGELOG.md +++ b/packages/spec/CHANGELOG.md @@ -1,5 +1,53 @@ # @objectstack/spec +## 6.2.0 + +### Patch Changes + +- b4c74a9: **Actions-as-tools Phase 3 — Human-In-The-Loop approval queue.** + + Dangerous declarative actions (`confirmText`, `mode:'delete'`, `variant:'danger'`) can now be exposed to the LLM safely. Instead of being skipped outright, they are registered as tools whose handler enqueues a pending request and returns `{ status: 'pending_approval', pendingActionId }` to the model. A human approves (or rejects) from Studio's pending-actions inbox; the service then re-runs the exact same dispatcher. + + ### New surface + + - New system object `ai_pending_actions` (id, conversation_id?, message_id?, object_name, action_name, tool_name, tool_input, status [`pending`|`approved`|`executed`|`failed`|`rejected`], result?, error?, rejection_reason?, proposed_by, decided_by?, proposed_at, decided_at?). + - New built-in Studio view `AiPendingActionView` with `pending` / `executed` / `rejected` / `failed` sub-views and per-row **Approve** / **Reject** API actions. + - New methods on `IAIService` (all optional, gated on a wired `IDataEngine`): + - `proposePendingAction(input) → { id }` + - `approvePendingAction(id, actorId) → { status, result?, error? }` + - `rejectPendingAction(id, actorId, reason?)` + - `listPendingActions(filter?) → PendingActionRow[]` + - New exported types: `PendingActionStatus`, `ProposePendingActionInput`, `PendingActionRow`. + - New REST routes (auth required): + - `GET /api/v1/ai/pending-actions` (`ai:read`) + - `GET /api/v1/ai/pending-actions/:id` (`ai:read`) + - `POST /api/v1/ai/pending-actions/:id/approve` (`ai:approve`) + - `POST /api/v1/ai/pending-actions/:id/reject` (`ai:approve`) + - New exported predicate `actionRequiresApproval(action)` for Studio's exposure surface. + + ### Wiring + + `AIServicePluginOptions` gains `enableActionApproval?: boolean` (default `false`). When `true` and an `IDataEngine` is available, dangerous actions are registered and routed through the queue. + + ```ts + kernel.use( + new AIServicePlugin({ + enableActionApproval: true, // opt in + apiActionBaseUrl: "http://localhost:3000", + }) + ); + ``` + + ### Internals + + - `actionSkipReason()` accepts `enableActionApproval` + `aiService` in its ctx and stops returning `"requires confirmation"` / `"mode='delete'"` / `"variant='danger'"` when HITL is wired. + - `registerActionsAsTools()` pre-registers a _bypass-approval_ dispatcher per dangerous tool via `aiService.registerPendingActionDispatcher(toolName, fn)`; approval calls back into the same code path with `enableActionApproval` flipped off, so a single handler implementation serves both proposal and execution. + - `createActionToolHandler()` short-circuits to `proposePendingAction()` when `enableActionApproval && actionRequiresApproval(action) && ctx.aiService?.proposePendingAction`. + + ### Out of scope (deferred) + + Slack/email notifications, approver routing (any signed-in user can approve in v1), auto-expiry of pending requests, resuming the same LLM turn after approval (operators get a fresh assistant message instead). + ## 6.1.1 ## 6.1.0 diff --git a/packages/spec/package.json b/packages/spec/package.json index d43e349221..16817c7729 100644 --- a/packages/spec/package.json +++ b/packages/spec/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/spec", - "version": "6.1.1", + "version": "6.2.0", "description": "ObjectStack Protocol & Specification - TypeScript Interfaces, JSON Schemas, and Convention Configurations", "license": "Apache-2.0", "main": "dist/index.js", diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 56cb8eb93c..c2843891f4 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/types +## 6.2.0 + +### Patch Changes + +- Updated dependencies [b4c74a9] + - @objectstack/spec@6.2.0 + ## 6.1.1 ### Patch Changes diff --git a/packages/types/package.json b/packages/types/package.json index eb7691b0a8..fc2b873ac4 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/types", - "version": "6.1.1", + "version": "6.2.0", "license": "Apache-2.0", "description": "Shared interfaces describing the ObjectStack Runtime environment", "main": "dist/index.js", diff --git a/packages/vscode-objectstack/CHANGELOG.md b/packages/vscode-objectstack/CHANGELOG.md index 621337944f..1c04f6e9c7 100644 --- a/packages/vscode-objectstack/CHANGELOG.md +++ b/packages/vscode-objectstack/CHANGELOG.md @@ -1,5 +1,7 @@ # objectstack-vscode +## 6.2.0 + ## 6.1.1 ## 6.1.0 diff --git a/packages/vscode-objectstack/package.json b/packages/vscode-objectstack/package.json index 5a9061516f..5406d5c0ff 100644 --- a/packages/vscode-objectstack/package.json +++ b/packages/vscode-objectstack/package.json @@ -2,7 +2,7 @@ "name": "objectstack-vscode", "displayName": "ObjectStack", "description": "ObjectStack Protocol — Autocomplete, validation, and inline diagnostics for .object.ts, .view.ts, and objectstack.config.ts files", - "version": "6.1.1", + "version": "6.2.0", "publisher": "objectstack", "license": "Apache-2.0", "repository": {