Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Fixed
- **Broken pnpm lockfile** — Regenerated `pnpm-lock.yaml` from scratch to fix `ERR_PNPM_BROKEN_LOCKFILE` ("expected a single document in the stream, but found more") that was causing all CI jobs to fail. The previous merge of PR #1117 only included workflow cache key changes but did not carry over the regenerated lockfile.

### Added
- **MCP Runtime Server Plugin (`plugin-mcp-server`)** — New kernel plugin that exposes ObjectStack
as a Model Context Protocol (MCP) server for external AI clients (Claude Desktop, Cursor, VS Code
Expand Down
115 changes: 115 additions & 0 deletions content/docs/references/api/events.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
---
title: Events
description: Events protocol schemas
---

{/* ⚠️ AUTO-GENERATED — DO NOT EDIT. Run build-docs.ts to regenerate. Hand-written docs go in content/docs/guides/. */}

Metadata Event Types

Triggered when metadata items are created, updated, or deleted.

Follows the pattern: `metadata.\{type\}.\{action\}`

Examples:

- `metadata.object.created` - A new object was created

- `metadata.view.updated` - A view was updated

- `metadata.agent.deleted` - An agent was deleted

<Callout type="info">
**Source:** `packages/spec/src/api/events.zod.ts`
</Callout>

## TypeScript Usage

```typescript
import { DataEvent, DataEventType, MetadataEventType } from '@objectstack/spec/api';
import type { DataEvent, DataEventType, MetadataEventType } from '@objectstack/spec/api';

// Validate data
const result = DataEvent.parse(data);
Comment on lines +29 to +33
```

---

## DataEvent

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **id** | `string` | ✅ | Unique event identifier |
| **type** | `Enum<'data.record.created' \| 'data.record.updated' \| 'data.record.deleted' \| 'data.field.changed'>` | ✅ | Event type |
| **object** | `string` | ✅ | Object name |
| **recordId** | `string` | ✅ | Record ID |
| **changes** | `Record<string, any>` | optional | Changed fields |
| **before** | `Record<string, any>` | optional | Before state |
| **after** | `Record<string, any>` | optional | After state |
| **userId** | `string` | optional | User who triggered the event |
| **timestamp** | `string` | ✅ | Event timestamp |


---

## DataEventType

### Allowed Values

* `data.record.created`
* `data.record.updated`
* `data.record.deleted`
* `data.field.changed`


---

## MetadataEventType

### Allowed Values

* `metadata.object.created`
* `metadata.object.updated`
* `metadata.object.deleted`
* `metadata.field.created`
* `metadata.field.updated`
* `metadata.field.deleted`
* `metadata.view.created`
* `metadata.view.updated`
* `metadata.view.deleted`
* `metadata.app.created`
* `metadata.app.updated`
* `metadata.app.deleted`
* `metadata.agent.created`
* `metadata.agent.updated`
* `metadata.agent.deleted`
* `metadata.tool.created`
* `metadata.tool.updated`
* `metadata.tool.deleted`
* `metadata.flow.created`
* `metadata.flow.updated`
* `metadata.flow.deleted`
* `metadata.action.created`
* `metadata.action.updated`
* `metadata.action.deleted`
* `metadata.workflow.created`
* `metadata.workflow.updated`
* `metadata.workflow.deleted`
* `metadata.dashboard.created`
* `metadata.dashboard.updated`
* `metadata.dashboard.deleted`
* `metadata.report.created`
* `metadata.report.updated`
* `metadata.report.deleted`
* `metadata.role.created`
* `metadata.role.updated`
* `metadata.role.deleted`
* `metadata.permission.created`
* `metadata.permission.updated`
* `metadata.permission.deleted`


---

1 change: 1 addition & 0 deletions content/docs/references/api/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ This section contains all protocol schemas for the api layer of ObjectStack.
<Card href="/docs/references/api/documentation" title="Documentation" description="Source: packages/spec/src/api/documentation.zod.ts" />
<Card href="/docs/references/api/endpoint" title="Endpoint" description="Source: packages/spec/src/api/endpoint.zod.ts" />
<Card href="/docs/references/api/errors" title="Errors" description="Source: packages/spec/src/api/errors.zod.ts" />
<Card href="/docs/references/api/events" title="Events" description="Source: packages/spec/src/api/events.zod.ts" />
<Card href="/docs/references/api/export" title="Export" description="Source: packages/spec/src/api/export.zod.ts" />
<Card href="/docs/references/api/feed-api" title="Feed Api" description="Source: packages/spec/src/api/feed-api.zod.ts" />
Comment on lines 17 to 22
<Card href="/docs/references/api/graphql" title="Graphql" description="Source: packages/spec/src/api/graphql.zod.ts" />
Expand Down
1 change: 1 addition & 0 deletions content/docs/references/api/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"documentation",
"endpoint",
"errors",
"events",
"export",
"feed-api",
"graphql",
Expand Down
22 changes: 20 additions & 2 deletions content/docs/references/api/metadata-plugin.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ description: Metadata Plugin protocol schemas
## TypeScript Usage

```typescript
import { MetadataBulkRegisterRequest } from '@objectstack/spec/api';
import type { MetadataBulkRegisterRequest } from '@objectstack/spec/api';
import { MetadataBulkRegisterRequest, MetadataEvent } from '@objectstack/spec/api';
import type { MetadataBulkRegisterRequest, MetadataEvent } from '@objectstack/spec/api';

// Validate data
const result = MetadataBulkRegisterRequest.parse(data);
Comment on lines +15 to 19
Expand All @@ -34,3 +34,21 @@ const result = MetadataBulkRegisterRequest.parse(data);

---

## MetadataEvent

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **id** | `string` | ✅ | Unique event identifier |
| **type** | `Enum<'metadata.object.created' \| 'metadata.object.updated' \| 'metadata.object.deleted' \| 'metadata.field.created' \| 'metadata.field.updated' \| 'metadata.field.deleted' \| 'metadata.view.created' \| 'metadata.view.updated' \| 'metadata.view.deleted' \| 'metadata.app.created' \| 'metadata.app.updated' \| 'metadata.app.deleted' \| 'metadata.agent.created' \| 'metadata.agent.updated' \| 'metadata.agent.deleted' \| 'metadata.tool.created' \| 'metadata.tool.updated' \| 'metadata.tool.deleted' \| 'metadata.flow.created' \| 'metadata.flow.updated' \| 'metadata.flow.deleted' \| 'metadata.action.created' \| 'metadata.action.updated' \| 'metadata.action.deleted' \| 'metadata.workflow.created' \| 'metadata.workflow.updated' \| 'metadata.workflow.deleted' \| 'metadata.dashboard.created' \| 'metadata.dashboard.updated' \| 'metadata.dashboard.deleted' \| 'metadata.report.created' \| 'metadata.report.updated' \| 'metadata.report.deleted' \| 'metadata.role.created' \| 'metadata.role.updated' \| 'metadata.role.deleted' \| 'metadata.permission.created' \| 'metadata.permission.updated' \| 'metadata.permission.deleted'>` | ✅ | Event type |
| **metadataType** | `string` | ✅ | Metadata type (object, view, agent, etc.) |
| **name** | `string` | ✅ | Metadata item name |
| **packageId** | `string` | optional | Package ID |
| **definition** | `any` | optional | Full definition (create/update only) |
| **userId** | `string` | optional | User who triggered the event |
| **timestamp** | `string` | ✅ | Event timestamp |


---

Loading
Loading