@realtimex/sdk 1.7.4 → 1.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -125,6 +125,20 @@ var V1AuthModule = class {
125
125
  async getAuth() {
126
126
  return this.client.request("GET", `/v1/auth`);
127
127
  }
128
+ /**
129
+ * Relay external browser auth callbacks back to the local Electron renderer. Localhost only; keyed by OAuth state.
130
+ * @see POST /v1/auth/external-callback
131
+ */
132
+ async externalCallback() {
133
+ return this.client.request("POST", `/v1/auth/external-callback`);
134
+ }
135
+ /**
136
+ * Poll for a relayed external browser auth callback by OAuth state. Localhost only.
137
+ * @see GET /v1/auth/external-callback/{state}
138
+ */
139
+ async getExternalCallback(state) {
140
+ return this.client.request("GET", `/v1/auth/external-callback/${state}`);
141
+ }
128
142
  };
129
143
 
130
144
  // src/v1/modules/v1Admin.ts
@@ -38,6 +38,16 @@ declare class V1AuthModule {
38
38
  * @see GET /v1/auth
39
39
  */
40
40
  getAuth(): Promise<unknown>;
41
+ /**
42
+ * Relay external browser auth callbacks back to the local Electron renderer. Localhost only; keyed by OAuth state.
43
+ * @see POST /v1/auth/external-callback
44
+ */
45
+ externalCallback(): Promise<unknown>;
46
+ /**
47
+ * Poll for a relayed external browser auth callback by OAuth state. Localhost only.
48
+ * @see GET /v1/auth/external-callback/{state}
49
+ */
50
+ getExternalCallback(state: string): Promise<unknown>;
41
51
  }
42
52
 
43
53
  declare class V1AdminModule {
@@ -38,6 +38,16 @@ declare class V1AuthModule {
38
38
  * @see GET /v1/auth
39
39
  */
40
40
  getAuth(): Promise<unknown>;
41
+ /**
42
+ * Relay external browser auth callbacks back to the local Electron renderer. Localhost only; keyed by OAuth state.
43
+ * @see POST /v1/auth/external-callback
44
+ */
45
+ externalCallback(): Promise<unknown>;
46
+ /**
47
+ * Poll for a relayed external browser auth callback by OAuth state. Localhost only.
48
+ * @see GET /v1/auth/external-callback/{state}
49
+ */
50
+ getExternalCallback(state: string): Promise<unknown>;
41
51
  }
42
52
 
43
53
  declare class V1AdminModule {
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { V as V1ApiNamespace } from './errors-DoCX7LOD.mjs';
2
- export { A as AuthenticationError, D as DeveloperApiClient, a as DeveloperApiError, N as NotFoundError, S as ServerError, b as ValidationError } from './errors-DoCX7LOD.mjs';
1
+ import { V as V1ApiNamespace } from './errors-wfNrYt9K.mjs';
2
+ export { A as AuthenticationError, D as DeveloperApiClient, a as DeveloperApiError, N as NotFoundError, S as ServerError, b as ValidationError } from './errors-wfNrYt9K.mjs';
3
3
 
4
4
  /**
5
5
  * RealtimeX Local App SDK - Types
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { V as V1ApiNamespace } from './errors-DoCX7LOD.js';
2
- export { A as AuthenticationError, D as DeveloperApiClient, a as DeveloperApiError, N as NotFoundError, S as ServerError, b as ValidationError } from './errors-DoCX7LOD.js';
1
+ import { V as V1ApiNamespace } from './errors-wfNrYt9K.js';
2
+ export { A as AuthenticationError, D as DeveloperApiClient, a as DeveloperApiError, N as NotFoundError, S as ServerError, b as ValidationError } from './errors-wfNrYt9K.js';
3
3
 
4
4
  /**
5
5
  * RealtimeX Local App SDK - Types
package/dist/index.js CHANGED
@@ -3170,6 +3170,20 @@ var V1AuthModule = class {
3170
3170
  async getAuth() {
3171
3171
  return this.client.request("GET", `/v1/auth`);
3172
3172
  }
3173
+ /**
3174
+ * Relay external browser auth callbacks back to the local Electron renderer. Localhost only; keyed by OAuth state.
3175
+ * @see POST /v1/auth/external-callback
3176
+ */
3177
+ async externalCallback() {
3178
+ return this.client.request("POST", `/v1/auth/external-callback`);
3179
+ }
3180
+ /**
3181
+ * Poll for a relayed external browser auth callback by OAuth state. Localhost only.
3182
+ * @see GET /v1/auth/external-callback/{state}
3183
+ */
3184
+ async getExternalCallback(state) {
3185
+ return this.client.request("GET", `/v1/auth/external-callback/${state}`);
3186
+ }
3173
3187
  };
3174
3188
 
3175
3189
  // src/v1/modules/v1Admin.ts
package/dist/index.mjs CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  ServerError,
7
7
  V1ApiNamespace,
8
8
  ValidationError
9
- } from "./chunk-PDAMNSF2.mjs";
9
+ } from "./chunk-2FPRJPXR.mjs";
10
10
 
11
11
  // src/modules/api.ts
12
12
  var PermissionDeniedError = class extends Error {
@@ -1,5 +1,5 @@
1
- import { D as DeveloperApiClient } from '../errors-DoCX7LOD.mjs';
2
- export { A as AuthenticationError, a as DeveloperApiError, N as NotFoundError, S as ServerError, d as V1AdminModule, V as V1ApiNamespace, c as V1AuthModule, e as V1DocumentModule, k as V1EmbedModule, j as V1OpenAIModule, g as V1SystemModule, h as V1ThreadModule, i as V1UsersModule, f as V1WorkspaceModule, b as ValidationError } from '../errors-DoCX7LOD.mjs';
1
+ import { D as DeveloperApiClient } from '../errors-wfNrYt9K.mjs';
2
+ export { A as AuthenticationError, a as DeveloperApiError, N as NotFoundError, S as ServerError, d as V1AdminModule, V as V1ApiNamespace, c as V1AuthModule, e as V1DocumentModule, k as V1EmbedModule, j as V1OpenAIModule, g as V1SystemModule, h as V1ThreadModule, i as V1UsersModule, f as V1WorkspaceModule, b as ValidationError } from '../errors-wfNrYt9K.mjs';
3
3
 
4
4
  interface WorkspaceStreamChunk {
5
5
  /** The text fragment emitted by this SSE event */
@@ -1,5 +1,5 @@
1
- import { D as DeveloperApiClient } from '../errors-DoCX7LOD.js';
2
- export { A as AuthenticationError, a as DeveloperApiError, N as NotFoundError, S as ServerError, d as V1AdminModule, V as V1ApiNamespace, c as V1AuthModule, e as V1DocumentModule, k as V1EmbedModule, j as V1OpenAIModule, g as V1SystemModule, h as V1ThreadModule, i as V1UsersModule, f as V1WorkspaceModule, b as ValidationError } from '../errors-DoCX7LOD.js';
1
+ import { D as DeveloperApiClient } from '../errors-wfNrYt9K.js';
2
+ export { A as AuthenticationError, a as DeveloperApiError, N as NotFoundError, S as ServerError, d as V1AdminModule, V as V1ApiNamespace, c as V1AuthModule, e as V1DocumentModule, k as V1EmbedModule, j as V1OpenAIModule, g as V1SystemModule, h as V1ThreadModule, i as V1UsersModule, f as V1WorkspaceModule, b as ValidationError } from '../errors-wfNrYt9K.js';
3
3
 
4
4
  interface WorkspaceStreamChunk {
5
5
  /** The text fragment emitted by this SSE event */
package/dist/v1/index.js CHANGED
@@ -170,6 +170,20 @@ var V1AuthModule = class {
170
170
  async getAuth() {
171
171
  return this.client.request("GET", `/v1/auth`);
172
172
  }
173
+ /**
174
+ * Relay external browser auth callbacks back to the local Electron renderer. Localhost only; keyed by OAuth state.
175
+ * @see POST /v1/auth/external-callback
176
+ */
177
+ async externalCallback() {
178
+ return this.client.request("POST", `/v1/auth/external-callback`);
179
+ }
180
+ /**
181
+ * Poll for a relayed external browser auth callback by OAuth state. Localhost only.
182
+ * @see GET /v1/auth/external-callback/{state}
183
+ */
184
+ async getExternalCallback(state) {
185
+ return this.client.request("GET", `/v1/auth/external-callback/${state}`);
186
+ }
173
187
  };
174
188
 
175
189
  // src/v1/modules/v1Admin.ts
package/dist/v1/index.mjs CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  V1UsersModule,
16
16
  V1WorkspaceModule,
17
17
  ValidationError
18
- } from "../chunk-PDAMNSF2.mjs";
18
+ } from "../chunk-2FPRJPXR.mjs";
19
19
 
20
20
  // src/v1/overrides/v1WorkspaceStreaming.ts
21
21
  async function* streamWorkspaceChat(client, slug, body) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@realtimex/sdk",
3
- "version": "1.7.4",
3
+ "version": "1.7.5",
4
4
  "description": "SDK for building Local Apps that integrate with RealtimeX",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -18,7 +18,7 @@
18
18
  }
19
19
  },
20
20
  "scripts": {
21
- "build": "node ../scripts/generate-v1-sdk.mjs --force && node ../scripts/generate-skill.mjs --force && tsup src/index.ts src/v1/index.ts --format cjs,esm --dts --clean",
21
+ "build": "node ../scripts/generate-v1-sdk.mjs --force && node ../scripts/generate-concepts.mjs && node ../scripts/generate-skill.mjs --force && tsup src/index.ts src/v1/index.ts --format cjs,esm --dts --clean",
22
22
  "dev": "tsup src/index.ts src/v1/index.ts --format cjs,esm --dts --watch",
23
23
  "test": "vitest run",
24
24
  "contract:verify": "node ../scripts/verify-contract-compat.mjs",
@@ -27,6 +27,7 @@
27
27
  "sdk:generate": "node ../scripts/generate-v1-sdk.mjs",
28
28
  "sdk:generate:force": "node ../scripts/generate-v1-sdk.mjs --force",
29
29
  "sdk:diff": "node ../scripts/generate-v1-sdk.mjs --dry-run",
30
+ "concepts:generate": "node ../scripts/generate-concepts.mjs",
30
31
  "prepublishOnly": "npm run build"
31
32
  },
32
33
  "keywords": [
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: realtimex-moderator-sdk
3
3
  description: Control and interact with the RealTimeX application through its Node.js SDK. This skill should be used when users want to manage workspaces, threads, agents, activities, LLM chat, vector store, MCP tools, ACP agent sessions, TTS/STT, or any other RealTimeX platform feature via the API. All method signatures are verified against the SDK source code.
4
- generated: 2026-04-16
5
- sdk_version: 1.7.4
4
+ generated: 2026-04-23
5
+ sdk_version: 1.7.5
6
6
  ---
7
7
 
8
8
  # RealTimeX Moderator (SDK Source-Verified)
9
9
 
10
- Interact with the RealTimeX platform (`http://localhost:3001`) using `@realtimex/sdk` **v1.7.4**. Authentication is automatic when running inside RealtimeX.
10
+ Interact with the RealTimeX platform (`http://localhost:3001`) using `@realtimex/sdk` **v1.7.5**. Authentication is automatic when running inside RealtimeX.
11
11
 
12
12
  `<SKILL_DIR>` below refers to the directory containing this SKILL.md.
13
13
 
@@ -215,7 +215,22 @@ Full fixes in `references/known-issues.md`.
215
215
  - **`resolvePermission()`** must be called while the `streamChat` SSE stream is still active
216
216
  - **SDK env vars:** `RTX_API_KEY` (dev), `RTX_APP_ID` (prod), `RTX_APP_NAME`
217
217
 
218
+ ## App Concepts
219
+
220
+ When the user asks **what something is** in RealtimeX (e.g. Personality, Heartbeat, Workspace types, Agent Skills, data models), read `references/app-concepts.md` first.
221
+
222
+ It covers:
223
+ - **Personality** — file structure (AGENTS.md, SOUL.md, USER.md, IDENTITY.md, TOOLS.md, MEMORY.md, HEARTBEAT.md) and storage paths
224
+ - **Heartbeat** — ambient background agent scheduler, config fields, calendar routines, queue
225
+ - **Workspace** — types (`default`, `meeting_minutes`, `agent_skills`, `agent_heartbeat`), chat modes, key settings
226
+ - **Agent Skills** — types (`repo`/`zip`), scopes, status values
227
+ - **Data Models** — all database models with fields and defaults
228
+
229
+ ---
230
+
218
231
  ## References
219
232
 
220
- - `references/api-reference.md` — all class methods (auto-generated from source)
233
+ - `references/app-concepts.md` — RealtimeX app concepts (auto-generated from source)
234
+ - `references/api-reference.md` — all SDK class methods (auto-generated from source)
221
235
  - `references/known-issues.md` — verified source mismatches (auto-generated)
236
+ - `references/credentials.md` — credential usage patterns
@@ -1,6 +1,6 @@
1
1
  # RealTimeX SDK — API Reference
2
2
 
3
- > Auto-generated from `@realtimex/sdk` source · v**1.7.4** · 2026-04-16
3
+ > Auto-generated from `@realtimex/sdk` source · v**1.7.5** · 2026-04-23
4
4
 
5
5
  **Package:** `@realtimex/sdk` (CJS) · **Server:** `http://localhost:3001`
6
6
  **Developer Mode auth:** `Authorization: Bearer <apiKey>`
@@ -752,6 +752,12 @@ async createPreference(body?: Record<string, unknown>): Promise<unknown>
752
752
  ```ts
753
753
  // Verify the attached Authentication header contains a valid API token.
754
754
  async getAuth(): Promise<unknown>
755
+
756
+ // Relay external browser auth callbacks back to the local Electron renderer. Localhost only; keyed by OAuth state.
757
+ async externalCallback(): Promise<unknown>
758
+
759
+ // Poll for a relayed external browser auth callback by OAuth state. Localhost only.
760
+ async getExternalCallback(state: string): Promise<unknown>
755
761
  ```
756
762
 
757
763
  ---
@@ -0,0 +1,958 @@
1
+ # RealtimeX App Concepts
2
+
3
+ ---
4
+
5
+ > Auto-generated from app source code. Do not edit manually.
6
+
7
+ ---
8
+
9
+ > Sources: Prisma schema, model files, personalityStorage.js
10
+
11
+ ---
12
+
13
+ ## Personality
14
+
15
+ The **Personality** system stores per-agent and per-workspace configuration as markdown files.
16
+ Files live in `storage/working-data/agent-heartbeat/` (global) or `storage/working-data/<workspace-slug>/` (workspace-level).
17
+
18
+ ### File Structure
19
+
20
+ | File | Purpose |
21
+ |---|---|
22
+ | `AGENTS.md` | Operating instructions for the agent |
23
+ | `SOUL.md` | Persona, tone, and boundaries |
24
+ | `USER.md` | Who the user is and how to address them |
25
+ | `IDENTITY.md` | The agent's name, vibe, and emoji |
26
+ | `TOOLS.md` | Notes on local tools |
27
+ | `MEMORY.md` | Curated long-term memory |
28
+ | `HEARTBEAT.md` | Ambient agent standing instructions |
29
+ | `memory/` | Daily memory logs (YYYY-MM-DD.md) |
30
+ | `skills/` | Workspace-specific skills |
31
+ | `canvas/` | Canvas UI files |
32
+
33
+ Personality files are editable via the Personality editor in the UI or directly through the `/api/personality-files` endpoints.
34
+
35
+ ---
36
+
37
+ ## Heartbeat
38
+
39
+ **Heartbeat** is the ambient background agent system. It runs an AI agent on a schedule to proactively
40
+ monitor context (calendar, documents, threads) and take autonomous actions.
41
+
42
+ ### How It Works
43
+
44
+ 1. A scheduler triggers runs based on `every` cadence (e.g. `"30m"`, `"1h"`).
45
+ 2. Each run provisions an agent (default: RealTimeX Ambient Agent based on Qwen CLI).
46
+ 3. The agent reads Personality files, the heartbeat queue, and calendar events.
47
+ 4. Results are stored in the week's thread inside the `agent_heartbeat` workspace.
48
+
49
+ ### Configuration (`heartbeat_config` in system_settings)
50
+
51
+ | Field | Default | Description |
52
+ |---|---|---|
53
+ | `enabled` | `false` | — |
54
+ | `every` | `"30m"` | The frontend hydrates new configs with the user's system timezone. |
55
+ | `timezone` | `null` | — |
56
+ | `llmProvider` | `DEFAULT_AMBIENT_LLM_PROVIDER` | — |
57
+ | `llmModel` | `DEFAULT_AMBIENT_LLM_MODEL` | autoPilotEnabled: when true, the CLI ACP agent will automatically select |
58
+ | `autoPilotEnabled` | `false` | — |
59
+
60
+ ### Calendar Routines
61
+
62
+ Heartbeat can integrate with calendar events via these routines:
63
+ - **`morningBrief`** — Runs at start of day to summarize upcoming meetings
64
+ - **`preMeetingPrep`** — Runs before a meeting to prepare context
65
+ - **`followUpSuggestions`** — Runs after a meeting to suggest follow-up actions
66
+
67
+ ### Heartbeat Queue
68
+
69
+ The `heartbeat_queue` table stores text items (documents, messages, events) that the agent consumes on the next run. Items are drained after consumption.
70
+
71
+ ---
72
+
73
+ ## Workspace
74
+
75
+ A **Workspace** is the core unit of organisation in RealtimeX. It combines a document store (vector DB),
76
+ LLM configuration, agent settings, and a chat interface.
77
+
78
+ ### Workspace Types
79
+
80
+ | Type | Description |
81
+ |---|---|
82
+ | `default` | Standard RAG chat workspace with documents and LLM |
83
+ | `meeting_minutes` | Workspace focused on meeting recording and transcription |
84
+ | `agent_skills` | Workspace used to host and develop agent skills |
85
+ | `agent_heartbeat` | Special system workspace for the ambient heartbeat agent |
86
+
87
+ ### Chat Modes
88
+
89
+ | Mode | Description |
90
+ |---|---|
91
+ | `chat` | Full conversational mode — uses document context + LLM history |
92
+ | `query` | Query-only mode — each message is independent, no history |
93
+
94
+ ### Web Search Providers
95
+
96
+ Available values for `webSearchProvider`: `duckduckgo`, `google`, `bing`, `tavily`, `brave`, `brave-api`, `startpage`, `searxng`
97
+
98
+ ### Key Settings
99
+
100
+ | Setting | Description |
101
+ |---|---|
102
+ | `openAiPrompt` | System prompt sent to the LLM |
103
+ | `chatProvider` / `chatModel` | LLM provider and model for chat |
104
+ | `similarityThreshold` | Minimum similarity score for document retrieval (0–1, default 0.25) |
105
+ | `topN` | Number of document chunks to retrieve per query (default 4) |
106
+ | `vectorSearchMode` | `default` or `rerank` |
107
+ | `webSearchEnabled` | Whether to augment responses with live web search |
108
+ | `ambientAgentProvider` / `ambientAgentModel` | Override LLM for ambient agent in this workspace |
109
+ | `ambientAgentSystemPrompt` | Custom system prompt for the ambient agent in this workspace |
110
+
111
+ ---
112
+
113
+ ## Agent Skills
114
+
115
+ An **Agent Skill** is a tool-set (a `SKILL.md` + scripts folder) that agents can invoke.
116
+ Skills are loaded from git repositories, zip files, or installed plugins.
117
+
118
+ ### Skill Types
119
+
120
+ | Type | Description |
121
+ |---|---|
122
+ | `repo` | Skill loaded from a git repository URL |
123
+ | `zip` | Skill loaded from an uploaded .zip file |
124
+
125
+ ### Skill Scopes
126
+
127
+ | Scope | Description |
128
+ |---|---|
129
+ | `global` | Available to all workspaces and users |
130
+ | `workspace` | Scoped to a specific workspace |
131
+ | `local-app` | Provided by a registered LocalApp (SDK) |
132
+ | `uploaded` | Manually uploaded by a user |
133
+ | `plugin` | Bundled with an installed plugin (read-only) |
134
+
135
+ ### Skill Status
136
+
137
+ Valid values: `draft`, `published`
138
+
139
+ ---
140
+
141
+ ## Data Models
142
+
143
+ The following models are stored in the RealtimeX database (Prisma / SQLite or PostgreSQL).
144
+
145
+ ### ApiKey (`api_keys`)
146
+ A Bearer API key for authenticating v1 API and SDK requests.
147
+
148
+ | Field | Type | Default | Notes |
149
+ |---|---|---|---|
150
+ | `secret` | String? | — | — |
151
+
152
+ ### WorkspaceDocument (`workspace_documents`)
153
+ A document embedded into a workspace's vector store for RAG.
154
+
155
+ | Field | Type | Default | Notes |
156
+ |---|---|---|---|
157
+ | `docId` | String | — | — |
158
+ | `filename` | String | — | — |
159
+ | `docpath` | String | — | — |
160
+ | `workspaceId` | Int | — | — |
161
+ | `metadata` | String? | — | — |
162
+ | `pinned` | Boolean? | false | — |
163
+ | `watched` | Boolean? | false | — |
164
+ | `workspace` | workspaces | — | — |
165
+ | `document_sync_queues` | document_sync_queues? | — | — |
166
+
167
+ ### invites (`invites`)
168
+ | Field | Type | Default | Notes |
169
+ |---|---|---|---|
170
+ | `code` | String | — | — |
171
+ | `email` | String? | — | — |
172
+ | `name` | String? | — | — |
173
+ | `message` | String? | — | — |
174
+ | `role` | String? | — | — |
175
+ | `status` | String | pending | — |
176
+ | `claimedBy` | Int? | — | — |
177
+ | `workspaceIds` | String? | — | — |
178
+ | `webhookStatus` | String? | — | — |
179
+ | `webhookError` | String? | — | — |
180
+
181
+ ### system_settings (`system_settings`)
182
+ | Field | Type | Default | Notes |
183
+ |---|---|---|---|
184
+ | `label` | String | — | — |
185
+ | `value` | String? | — | — |
186
+
187
+ ### User (`users`)
188
+ A platform user account.
189
+
190
+ | Field | Type | Default | Notes |
191
+ |---|---|---|---|
192
+ | `username` | String? | — | — |
193
+ | `name` | String? | — | — |
194
+ | `kc_user_id` | String? | — | — |
195
+ | `email` | String? | — | — |
196
+ | `password` | String? | — | — |
197
+ | `pfpFilename` | String? | — | — |
198
+ | `role` | String | default | — |
199
+ | `suspended` | Int | 0 | — |
200
+ | `seen_recovery_codes` | Boolean? | false | — |
201
+ | `dailyMessageLimit` | Int? | — | — |
202
+ | `bio` | String? | | — |
203
+ | `workspace_chats` | workspace_chats[] | — | — |
204
+ | `workspace_users` | workspace_users[] | — | — |
205
+ | `created_workspaces` | workspaces[] | — | — |
206
+ | `embed_configs` | embed_configs[] | — | — |
207
+ | `embed_chats` | embed_chats[] | — | — |
208
+ | `threads` | workspace_threads[] | — | — |
209
+ | `recovery_codes` | recovery_codes[] | — | — |
210
+ | `password_reset_tokens` | password_reset_tokens[] | — | — |
211
+ | `workspace_agent_invocations` | workspace_agent_invocations[] | — | — |
212
+ | `slash_command_presets` | slash_command_presets[] | — | — |
213
+ | `system_prompt_presets` | system_prompt_presets[] | — | — |
214
+ | `temporary_auth_tokens` | temporary_auth_tokens[] | — | — |
215
+ | `system_prompt_variables` | system_prompt_variables[] | — | — |
216
+ | `prompt_history` | prompt_history[] | — | — |
217
+ | `desktop_mobile_devices` | desktop_mobile_devices[] | — | — |
218
+ | `workspace_parsed_files` | workspace_parsed_files[] | — | — |
219
+ | `workspace_tasks` | workspace_tasks[] | — | — |
220
+ | `agent_working_directories` | agent_working_directories[] | — | — |
221
+
222
+ ### agent_working_directories (`agent_working_directories`)
223
+ | Field | Type | Default | Notes |
224
+ |---|---|---|---|
225
+ | `user_id` | Int | — | — |
226
+ | `path` | String | — | — |
227
+ | `description` | String? | — | — |
228
+ | `workspace_ids` | String? | — | JSON array of workspace ID strings; NULL = all workspaces |
229
+ | `agent_names` | String? | — | JSON array of agent name strings; NULL = all agents |
230
+ | `user` | users | — | — |
231
+
232
+ ### Workspace (`workspaces`)
233
+ A chat/knowledge space with its own documents, LLM config, and agent settings.
234
+
235
+ | Field | Type | Default | Notes |
236
+ |---|---|---|---|
237
+ | `name` | String | — | — |
238
+ | `slug` | String | — | — |
239
+ | `share_token` | String? | — | — |
240
+ | `vectorTag` | String? | — | — |
241
+ | `openAiTemp` | Float? | — | — |
242
+ | `openAiHistory` | Int | 20 | — |
243
+ | `openAiPrompt` | String? | — | — |
244
+ | `similarityThreshold` | Float? | 0.25 | — |
245
+ | `chatProvider` | String? | — | — |
246
+ | `chatModel` | String? | — | — |
247
+ | `topN` | Int? | 4 | — |
248
+ | `chatMode` | String? | chat | — |
249
+ | `pfpFilename` | String? | — | — |
250
+ | `queryRefusalResponse` | String? | — | — |
251
+ | `vectorSearchMode` | String? | default | — |
252
+ | `webSearchEnabled` | Boolean? | false | — |
253
+ | `webSearchProvider` | String? | duckduckgo | — |
254
+ | `webSearchMaxResults` | Int? | 5 | — |
255
+ | `webSearchIncludeContent` | Boolean? | true | — |
256
+ | `googleApiKey` | String? | — | — |
257
+ | `googleSearchEngineId` | String? | — | — |
258
+ | `bingApiKey` | String? | — | — |
259
+ | `braveApiKey` | String? | — | — |
260
+ | `tavilyApiKey` | String? | — | — |
261
+ | `searxngUrl` | String? | — | — |
262
+ | `suggestedQuestionsEnabled` | Boolean? | false | — |
263
+ | `dynamicActionBarEnabled` | Boolean? | false | — |
264
+ | `ambientAgentProvider` | String? | default | — |
265
+ | `ambientAgentModel` | String? | — | — |
266
+ | `ambientAgentSystemPrompt` | String? | — | — |
267
+ | `email_short_id` | String? | — | — |
268
+ | `isSyncEnabled` | Boolean? | false | — |
269
+ | `syncInterval` | Int? | 60 | — |
270
+ | `directusAgentName` | String? | agent | — |
271
+ | `directusThreadId` | String? | — | — |
272
+ | `llmInstruction` | String? | — | — |
273
+ | `creator` | users? | — | — |
274
+ | `workspace_users` | workspace_users[] | — | — |
275
+ | `documents` | workspace_documents[] | — | — |
276
+ | `workspace_suggested_messages` | workspace_suggested_messages[] | — | — |
277
+ | `embed_configs` | embed_configs[] | — | — |
278
+ | `threads` | workspace_threads[] | — | — |
279
+ | `meeting_outputs` | meeting_outputs[] | — | — |
280
+ | `workspace_agent_invocations` | workspace_agent_invocations[] | — | — |
281
+ | `prompt_history` | prompt_history[] | — | — |
282
+ | `workspace_configs` | workspace_configs? | — | — |
283
+ | `webhook_data` | webhook_data[] | — | — |
284
+ | `workspace_parsed_files` | workspace_parsed_files[] | — | — |
285
+ | `knowledgeConfig` | String? | — | — |
286
+ | `type` | String? | default | — |
287
+ | `workspace_tasks` | workspace_tasks[] | — | — |
288
+ | `channel_plugins` | channel_plugins[] | — | — |
289
+ | `agentic_cli_workspace_overrides` | agentic_cli_workspace_overrides[] | — | — |
290
+
291
+ ### AgenticCLI (`agentic_clis`)
292
+ A registered CLI tool (e.g. Claude, Gemini) that agents can invoke.
293
+
294
+ | Field | Type | Default | Notes |
295
+ |---|---|---|---|
296
+ | `cliId` | String? | — | — |
297
+ | `displayName` | String | — | — |
298
+ | `binary` | String | — | — |
299
+ | `authProbeCommand` | String? | — | — |
300
+ | `authInstructions` | String? | — | — |
301
+ | `versionCommand` | String? | — | — |
302
+ | `installDocsUrl` | String? | — | — |
303
+ | `skillHint` | String? | — | — |
304
+ | `enabled` | Boolean | true | — |
305
+ | `isCustom` | Boolean | false | — |
306
+ | `lastProbeStatus` | String | unknown | — |
307
+ | `lastProbeError` | String? | — | — |
308
+ | `lastProbeAt` | DateTime? | — | — |
309
+ | `workspace_overrides` | agentic_cli_workspace_overrides[] | — | — |
310
+
311
+ ### agentic_cli_workspace_overrides (`agentic_cli_workspace_overrides`)
312
+ | Field | Type | Default | Notes |
313
+ |---|---|---|---|
314
+ | `agentic_cli_id` | Int | — | — |
315
+ | `workspace_id` | Int | — | — |
316
+ | `enabled` | Boolean | true | — |
317
+ | `agentic_cli` | agentic_clis | — | — |
318
+ | `workspace` | workspaces | — | — |
319
+
320
+ ### WorkspaceConfig (`workspace_configs`)
321
+ Key-value config bag attached to a workspace (defaultAgent, etc.).
322
+
323
+ | Field | Type | Default | Notes |
324
+ |---|---|---|---|
325
+ | `workspace_id` | Int | — | — |
326
+ | `agentProvider` | String? | — | — |
327
+ | `agentModel` | String? | — | — |
328
+ | `agentSkills` | String? | — | JSON array of strings |
329
+ | `disabledAgentSkills` | String? | — | JSON array of strings |
330
+ | `customAgentSkills` | String? | — | JSON array of objects |
331
+ | `activeAgentFlows` | String? | — | JSON array of strings |
332
+ | `mcpServers` | String? | — | JSON array of strings |
333
+ | `defaultAgent` | String? | — | JSON object: {name, avatar, type, id} |
334
+ | `heartbeatConfig` | String? | — | JSON object: {enabled, every, activeHours: {start, end}} |
335
+ | `workspace` | workspaces | — | — |
336
+
337
+ ### HeartbeatQueue (`heartbeat_queue`)
338
+ Queue of text items consumed by the ambient heartbeat agent.
339
+
340
+ | Field | Type | Default | Notes |
341
+ |---|---|---|---|
342
+ | `text` | String | | — |
343
+ | `consumed` | Boolean | false | — |
344
+
345
+ ### Thread (`workspace_threads`)
346
+ A conversation thread within a workspace. Can represent a meeting or a standalone chat.
347
+
348
+ | Field | Type | Default | Notes |
349
+ |---|---|---|---|
350
+ | `name` | String | — | — |
351
+ | `slug` | String | — | — |
352
+ | `workspace_id` | Int | — | — |
353
+ | `user_id` | Int? | — | — |
354
+ | `chatProvider` | String? | — | — |
355
+ | `chatModel` | String? | — | — |
356
+ | `meeting_source` | String? | manual | — |
357
+ | `meeting_status` | String? | draft | — |
358
+ | `scheduled_start_at` | DateTime? | — | — |
359
+ | `scheduled_end_at` | DateTime? | — | — |
360
+ | `calendar_event_uuid` | String? | — | — |
361
+ | `meeting_metadata` | String? | — | — |
362
+ | `meeting_settings` | String? | — | — |
363
+ | `last_evidence_at` | DateTime? | — | — |
364
+ | `watcher_state` | String? | idle | — |
365
+ | `recording_started_at` | DateTime? | — | — |
366
+ | `recording_completed_at` | DateTime? | — | — |
367
+ | `recording_status` | String? | — | — |
368
+ | `workspace` | workspaces | — | — |
369
+ | `user` | users? | — | — |
370
+ | `meeting_outputs` | meeting_outputs[] | — | — |
371
+ | `workspace_parsed_files` | workspace_parsed_files[] | — | — |
372
+ | `workspace_tasks` | workspace_tasks[] | — | — |
373
+
374
+ ### workspace_chats (`workspace_chats`)
375
+ | Field | Type | Default | Notes |
376
+ |---|---|---|---|
377
+ | `workspaceId` | Int | — | — |
378
+ | `prompt` | String | — | — |
379
+ | `response` | String | — | — |
380
+ | `uuid` | String? | — | — |
381
+ | `include` | Boolean | true | — |
382
+ | `user_id` | Int? | — | — |
383
+ | `thread_id` | Int? | — | No relation to prevent whole table migration |
384
+ | `api_session_id` | String? | — | String identifier for only the dev API to partition chats in any mode. |
385
+ | `feedbackScore` | Boolean? | — | — |
386
+ | `users` | users? | — | — |
387
+
388
+ ### AgentInvocation (`workspace_agent_invocations`)
389
+ A single agent task invocation with lifecycle state tracking.
390
+
391
+ | Field | Type | Default | Notes |
392
+ |---|---|---|---|
393
+ | `uuid` | String | — | — |
394
+ | `prompt` | String | — | Contains agent invocation to parse + option additional text for seed. |
395
+ | `closed` | Boolean | false | — |
396
+ | `user_id` | Int? | — | — |
397
+ | `thread_id` | Int? | — | No relation to prevent whole table migration |
398
+ | `workspace_id` | Int | — | — |
399
+ | `workspace_slug` | String? | — | — |
400
+ | `thread_slug` | String? | — | — |
401
+ | `user` | users? | — | — |
402
+ | `workspace` | workspaces | — | — |
403
+ | `workspace_agent_invocation_lifecycle` | workspace_agent_invocation_lifecycles? | — | — |
404
+
405
+ ### workspace_agent_invocation_lifecycles (`workspace_agent_invocation_lifecycles`)
406
+ | Field | Type | Default | Notes |
407
+ |---|---|---|---|
408
+ | `invocation_id` | Int | — | — |
409
+ | `invocation_uuid` | String | — | — |
410
+ | `backend_id` | String? | — | — |
411
+ | `state` | String? | — | — |
412
+ | `resume_session_id` | String? | — | — |
413
+ | `initial_prompt_dispatched_at` | DateTime? | — | — |
414
+ | `turn_in_flight` | Boolean | false | — |
415
+ | `pending_permission_count` | Int | 0 | — |
416
+ | `last_error` | String? | — | — |
417
+ | `lifecycle_payload` | String? | — | — |
418
+ | `invocation` | workspace_agent_invocations | — | — |
419
+
420
+ ### workspace_users (`workspace_users`)
421
+ | Field | Type | Default | Notes |
422
+ |---|---|---|---|
423
+ | `user_id` | Int | — | — |
424
+ | `workspace_id` | Int | — | — |
425
+ | `workspaces` | workspaces | — | — |
426
+ | `users` | users | — | — |
427
+
428
+ ### cache_data (`cache_data`)
429
+ | Field | Type | Default | Notes |
430
+ |---|---|---|---|
431
+ | `name` | String | — | — |
432
+ | `data` | String | — | — |
433
+ | `belongsTo` | String? | — | — |
434
+ | `byId` | Int? | — | — |
435
+ | `expiresAt` | DateTime? | — | — |
436
+
437
+ ### EmbedConfig (`embed_configs`)
438
+ Configuration for an embeddable chat widget hosted on an external site.
439
+
440
+ | Field | Type | Default | Notes |
441
+ |---|---|---|---|
442
+ | `uuid` | String | — | — |
443
+ | `enabled` | Boolean | false | — |
444
+ | `chat_mode` | String | chat | — |
445
+ | `allowlist_domains` | String? | — | — |
446
+ | `widget_settings` | String? | — | — |
447
+ | `max_chats_per_day` | Int? | — | — |
448
+ | `max_chats_per_session` | Int? | — | — |
449
+ | `message_limit` | Int? | 20 | — |
450
+ | `workspace_id` | Int | — | — |
451
+ | `usersId` | Int? | — | — |
452
+ | `workspace` | workspaces | — | — |
453
+ | `embed_chats` | embed_chats[] | — | — |
454
+ | `users` | users? | — | — |
455
+
456
+ ### embed_chats (`embed_chats`)
457
+ | Field | Type | Default | Notes |
458
+ |---|---|---|---|
459
+ | `prompt` | String | — | — |
460
+ | `response` | String | — | — |
461
+ | `session_id` | String | — | — |
462
+ | `include` | Boolean | true | — |
463
+ | `connection_information` | String? | — | — |
464
+ | `embed_id` | Int | — | — |
465
+ | `usersId` | Int? | — | — |
466
+ | `embed_config` | embed_configs | — | — |
467
+ | `users` | users? | — | — |
468
+
469
+ ### event_logs (`event_logs`)
470
+ | Field | Type | Default | Notes |
471
+ |---|---|---|---|
472
+ | `event` | String | — | — |
473
+ | `metadata` | String? | — | — |
474
+ | `userId` | Int? | — | — |
475
+ | `occurredAt` | DateTime | now( | — |
476
+
477
+ ### system_logs (`system_logs`)
478
+ | Field | Type | Default | Notes |
479
+ |---|---|---|---|
480
+ | `level` | String | — | debug, info, warn, error, fatal |
481
+ | `source` | String | — | app, server, llm, vector-db, channel, embed, external |
482
+ | `message` | String | — | — |
483
+ | `context` | String? | — | JSON string for extra data |
484
+ | `timestamp` | DateTime | now( | — |
485
+
486
+ ### slash_command_presets (`slash_command_presets`)
487
+ | Field | Type | Default | Notes |
488
+ |---|---|---|---|
489
+ | `command` | String | — | — |
490
+ | `prompt` | String | — | — |
491
+ | `description` | String | — | — |
492
+ | `uid` | Int | 0 | 0 is null user |
493
+ | `userId` | Int? | — | — |
494
+ | `is_purchased` | Boolean | false | — |
495
+ | `store_item_id` | String? | — | — |
496
+ | `user` | users? | — | — |
497
+
498
+ ### system_prompt_presets (`system_prompt_presets`)
499
+ | Field | Type | Default | Notes |
500
+ |---|---|---|---|
501
+ | `name` | String | — | — |
502
+ | `prompt` | String | — | — |
503
+ | `description` | String? | — | — |
504
+ | `uid` | Int | 0 | 0 is null user |
505
+ | `userId` | Int? | — | — |
506
+ | `is_purchased` | Boolean | false | — |
507
+ | `store_item_id` | String? | — | — |
508
+ | `user` | users? | — | — |
509
+
510
+ ### document_sync_executions (`document_sync_executions`)
511
+ | Field | Type | Default | Notes |
512
+ |---|---|---|---|
513
+ | `queueId` | Int | — | — |
514
+ | `status` | String | unknown | — |
515
+ | `result` | String? | — | — |
516
+ | `queue` | document_sync_queues | — | — |
517
+
518
+ ### system_prompt_variables (`system_prompt_variables`)
519
+ | Field | Type | Default | Notes |
520
+ |---|---|---|---|
521
+ | `key` | String | — | — |
522
+ | `value` | String? | — | — |
523
+ | `description` | String? | — | — |
524
+ | `type` | String | system | system, user, dynamic |
525
+ | `userId` | Int? | — | — |
526
+ | `user` | users? | — | — |
527
+
528
+ ### local_mcp_servers (`local_mcp_servers`)
529
+ | Field | Type | Default | Notes |
530
+ |---|---|---|---|
531
+ | `display_name` | String | — | — |
532
+ | `name` | String | — | — |
533
+ | `description` | String? | — | — |
534
+ | `server_type` | String | — | 'stdio' | 'http' | 'sse' (sse deprecated but kept for compatibility) |
535
+ | `config` | String | — | JSON - Runtime config (computed from store_config + user_config) |
536
+ | `store_config` | String? | — | JSON - Template config from Store with placeholders {{KEY}} |
537
+ | `user_config` | String? | — | JSON - User's placeholder values {"KEY": "value"} |
538
+ | `setup_schema` | String? | — | JSON Array - Schema for rich config UI (see config-schema-guide.md) |
539
+ | `enabled` | Boolean | true | Server-level enable/disable flag |
540
+ | `status` | String | stopped | 'stopped' | 'starting' | 'running' | 'error' | 'stopping' | 'disabled' |
541
+ | `enabled_tools` | String? | — | JSON Array - List of enabled tool names for granular control (["*"] means all tools enabled) |
542
+ | `icon_path` | String? | — | — |
543
+ | `tags` | String? | — | JSON Array - User-defined tags for organization |
544
+ | `metadata` | String? | — | JSON - Server metadata (is_default, category, default_key, etc.) |
545
+ | `is_configured` | Boolean | false | Tracks whether the server has user-provided configuration |
546
+
547
+ ### agent_teams (`agent_teams`)
548
+ | Field | Type | Default | Notes |
549
+ |---|---|---|---|
550
+ | `name` | String | — | — |
551
+ | `description` | String? | — | — |
552
+ | `avatar` | String? | — | Path to avatar image file |
553
+ | `agents` | String | [] | JSON array of agent configurations |
554
+ | `connections` | String | [] | JSON array of connections between agents |
555
+ | `settings` | String | {} | JSON object of team settings |
556
+ | `a2aMetadata` | String | {} | A2A protocol metadata (Agent Card) |
557
+ | `tags` | String? | — | JSON array of tags |
558
+ | `lastModified` | DateTime | now( | — |
559
+
560
+ ### desktop_mobile_devices (`desktop_mobile_devices`)
561
+ | Field | Type | Default | Notes |
562
+ |---|---|---|---|
563
+ | `deviceOs` | String | — | — |
564
+ | `deviceName` | String | — | — |
565
+ | `token` | String | — | — |
566
+ | `approved` | Boolean | false | — |
567
+ | `userId` | Int? | — | — |
568
+ | `user` | users? | — | — |
569
+
570
+ ### agent_flow_schedule_runs (`agent_flow_schedule_runs`)
571
+ | Field | Type | Default | Notes |
572
+ |---|---|---|---|
573
+ | `flowUuid` | String | — | — |
574
+ | `mode` | String | interval | — |
575
+ | `userId` | Int? | — | — |
576
+ | `flowName` | String? | — | — |
577
+ | `intervalConfig` | String? | — | JSON string of interval configuration |
578
+ | `timezone` | String? | UTC | — |
579
+ | `active` | Boolean? | true | — |
580
+ | `lastRunAt` | DateTime? | — | — |
581
+ | `nextRunAt` | DateTime? | — | Calculated next run time |
582
+ | `source` | String? | — | null = manual, "api" = scheduler sync |
583
+ | `metadata` | String? | — | JSON string |
584
+
585
+ ### AgentFlow (`agent_flows`)
586
+ An automated multi-step agent workflow.
587
+
588
+ | Field | Type | Default | Notes |
589
+ |---|---|---|---|
590
+ | `uuid` | String | — | Flow UUID, matches JSON filename |
591
+ | `name` | String | — | Flow display name |
592
+ | `description` | String? | — | Flow description |
593
+ | `active` | Boolean | true | Whether flow is enabled |
594
+ | `tags` | String? | — | JSON array of tags |
595
+ | `file_path` | String | — | Path to JSON file (relative to flowsDir) |
596
+ | `has_local_modifications` | Boolean | false | Whether user has modified a purchased flow |
597
+ | `creator` | String? | — | — |
598
+
599
+ ### credentials (`credentials`)
600
+ | Field | Type | Default | Notes |
601
+ |---|---|---|---|
602
+ | `name` | String | — | — |
603
+ | `type` | String | — | Credential type identifier, e.g. http_header, query_auth, basic_auth, env_var |
604
+ | `data` | String | — | Encrypted credential data stored as a string |
605
+ | `metadata` | String? | — | Optional metadata payload as a JSON string |
606
+ | `deletedAt` | DateTime? | — | — |
607
+
608
+ ### acp_auth_profiles (`acp_auth_profiles`)
609
+ | Field | Type | Default | Notes |
610
+ |---|---|---|---|
611
+ | `profileId` | String | — | — |
612
+ | `userId` | Int? | — | — |
613
+ | `providerId` | String | — | — |
614
+ | `type` | String | api_key | api_key, oauth, token |
615
+ | `credential` | String | — | Encrypted JSON via EncryptionManager |
616
+ | `label` | String | default | — |
617
+
618
+ ### CalendarEvent (`calendar_events`)
619
+ A calendar event linked to a workspace thread (meeting integration).
620
+
621
+ | Field | Type | Default | Notes |
622
+ |---|---|---|---|
623
+ | `uuid` | String | uuid( | — |
624
+ | `title` | String | — | — |
625
+ | `description` | String? | — | — |
626
+ | `startDate` | DateTime | — | — |
627
+ | `endDate` | DateTime? | — | — |
628
+ | `allDay` | Boolean | false | — |
629
+ | `color` | String? | #3b82f6 | — |
630
+ | `repeat` | String? | — | JSON: {type, interval, endDate, count, weekdays} |
631
+ | `reminders` | String? | — | JSON array: [{type: 'notification', minutes: 15}] |
632
+ | `metadata` | String? | — | JSON for extensibility: location, participants, conferencing, etc. |
633
+ | `externalProvider` | String? | — | — |
634
+ | `externalAccountId` | String? | — | — |
635
+ | `externalCalendarId` | String? | — | — |
636
+ | `externalEventId` | String? | — | — |
637
+ | `externalEventUrl` | String? | — | — |
638
+ | `externalReadOnly` | Boolean | false | — |
639
+ | `userId` | Int? | — | — |
640
+
641
+ ### calendar_provider_credentials (`calendar_provider_credentials`)
642
+ | Field | Type | Default | Notes |
643
+ |---|---|---|---|
644
+ | `provider` | String | — | e.g. "google", "outlook" |
645
+ | `clientId` | String | — | Encrypted via EncryptionManager |
646
+ | `clientSecret` | String | — | Encrypted via EncryptionManager |
647
+
648
+ ### user_calendar_tokens (`user_calendar_tokens`)
649
+ | Field | Type | Default | Notes |
650
+ |---|---|---|---|
651
+ | `userId` | Int | — | — |
652
+ | `provider` | String | — | e.g. "google", "outlook" |
653
+ | `accountId` | String | — | Provider's stable account identifier (Google: sub). Allows multiple accounts per provider. |
654
+ | `accountEmail` | String? | — | Human-readable email label shown in UI |
655
+ | `accessToken` | String | — | Encrypted via EncryptionManager |
656
+ | `refreshToken` | String? | — | Encrypted via EncryptionManager (nullable: not all flows return a refresh token) |
657
+ | `expiresAt` | DateTime? | — | — |
658
+ | `scope` | String? | — | OAuth scopes granted |
659
+ | `calendarSelection` | String? | — | JSON: { selectedCalendarIds: string[] } |
660
+ | `lastSyncAt` | DateTime? | — | — |
661
+
662
+ ### calendar_operator_audits (`calendar_operator_audits`)
663
+ | Field | Type | Default | Notes |
664
+ |---|---|---|---|
665
+ | `uuid` | String | uuid( | — |
666
+ | `userId` | Int? | — | — |
667
+ | `workspaceId` | Int? | — | — |
668
+ | `threadId` | Int? | — | — |
669
+ | `invocationUuid` | String? | — | — |
670
+ | `permissionRequestId` | String? | — | — |
671
+ | `source` | String | acp_live | acp_live | acp_api |
672
+ | `action` | String | — | — |
673
+ | `status` | String | requested | requested | approved | rejected | timed_out | executed | failed |
674
+ | `target` | String? | — | — |
675
+ | `reason` | String? | — | — |
676
+ | `provider` | String? | — | — |
677
+ | `accountId` | String? | — | — |
678
+ | `calendarId` | String? | — | — |
679
+ | `eventUuid` | String? | — | — |
680
+ | `title` | String? | — | — |
681
+ | `startDate` | String? | — | — |
682
+ | `endDate` | String? | — | — |
683
+ | `allDay` | Boolean | false | — |
684
+ | `sendUpdates` | String? | — | — |
685
+ | `responseStatus` | String? | — | — |
686
+ | `createConference` | Boolean | false | — |
687
+ | `selectedOptionId` | String? | — | — |
688
+ | `approvedAt` | DateTime? | — | — |
689
+ | `executedAt` | DateTime? | — | — |
690
+ | `failedAt` | DateTime? | — | — |
691
+ | `metadata` | String? | — | JSON |
692
+
693
+ ### meeting_outputs (`meeting_outputs`)
694
+ | Field | Type | Default | Notes |
695
+ |---|---|---|---|
696
+ | `uuid` | String | uuid( | — |
697
+ | `workspace_id` | Int | — | — |
698
+ | `thread_id` | Int | — | — |
699
+ | `source_output_id` | Int? | — | — |
700
+ | `output_type` | String | — | — |
701
+ | `title` | String | — | — |
702
+ | `content` | String | — | — |
703
+ | `status` | String | draft | — |
704
+ | `generation_mode` | String | manual | — |
705
+ | `template_key` | String? | — | — |
706
+ | `evidence_snapshot` | String? | — | — |
707
+ | `settings_snapshot` | String? | — | — |
708
+ | `workspace` | workspaces | — | — |
709
+ | `thread` | workspace_threads | — | — |
710
+
711
+ ### LocalApp (`local_apps`)
712
+ A registered SDK application with scoped permissions (x-app-id auth).
713
+
714
+ | Field | Type | Default | Notes |
715
+ |---|---|---|---|
716
+ | `display_name` | String | — | — |
717
+ | `name` | String | — | — |
718
+ | `description` | String? | — | — |
719
+ | `app_type` | String | — | 'python' | 'node' | 'npx' | 'uvx' | 'custom' |
720
+ | `config` | String | — | JSON - Runtime config (computed from store_config + user_config) |
721
+ | `store_config` | String? | — | JSON - Template config from Store with placeholders {{KEY}} |
722
+ | `user_config` | String? | — | JSON - User's placeholder values {"KEY": "value"} |
723
+ | `setup_schema` | String? | — | JSON Array - Schema for rich config UI (see config-schema-guide.md) |
724
+ | `enabled` | Boolean | true | — |
725
+ | `status` | String | stopped | 'stopped' | 'starting' | 'running' | 'error' | 'stopping' | 'disabled' |
726
+ | `icon_path` | String? | — | — |
727
+ | `tags` | String? | — | JSON Array |
728
+ | `metadata` | String? | — | JSON - App metadata |
729
+ | `is_configured` | Boolean | true | Tracks whether the app has user-provided configuration |
730
+
731
+ ### external_tasks (`external_tasks`)
732
+ | Field | Type | Default | Notes |
733
+ |---|---|---|---|
734
+ | `uuid` | String | uuid( | — |
735
+ | `sourceApp` | String | — | "uuid:xxx" |
736
+ | `tableName` | String | — | "activities" |
737
+ | `actionType` | String | — | "INSERT" | "UPDATE" | "DELETE" |
738
+ | `title` | String | — | "[app] type: ACTION uuid:xxx" |
739
+ | `rawData` | String | — | JSON - Full Supabase payload |
740
+ | `oldData` | String? | — | JSON - For UPDATE events |
741
+ | `status` | String | pending | pending | claimed | processing | completed | failed | rejected |
742
+ | `webhookUrl` | String? | — | Local App webhook URL for forwarding |
743
+ | `lockUrl` | String? | — | Local App lock API URL for claiming |
744
+ | `claimedByEmail` | String? | — | Email of user who claimed this task |
745
+ | `error` | String? | — | Error message if failed |
746
+ | `attemptedBy` | String? | — | JSON Array - Machine IDs that attempted and failed |
747
+ | `retryCount` | Int | 0 | Number of retry attempts |
748
+ | `runs` | external_task_runs[] | — | — |
749
+
750
+ ### external_task_runs (`external_task_runs`)
751
+ | Field | Type | Default | Notes |
752
+ |---|---|---|---|
753
+ | `taskUuid` | String | — | — |
754
+ | `agentName` | String | — | — |
755
+ | `workspaceSlug` | String | — | — |
756
+ | `threadSlug` | String? | — | — |
757
+ | `prompt` | String? | — | The prompt used for this run |
758
+ | `status` | String | pending | pending | running | completed | failed |
759
+ | `error` | String? | — | Error message if failed |
760
+ | `startedAt` | DateTime? | — | — |
761
+ | `completedAt` | DateTime? | — | — |
762
+ | `task` | external_tasks | — | — |
763
+
764
+ ### marketplace_items (`marketplace_items`)
765
+ | Field | Type | Default | Notes |
766
+ |---|---|---|---|
767
+ | `entity_type` | String | — | 'local_app' | 'local_mcp_server' | 'mcp_server' | 'agent_flow' | 'slash_command' | 'agent' | 'system_prompt' |
768
+ | `entity_id` | String | — | Polymorphic FK to respective table |
769
+ | `store_item_id` | String? | — | ID on marketplace store side (after publish) |
770
+ | `status` | String | published | draft | published - for saving to store |
771
+ | `marketplace_status` | String | available | available | unavailable | maintenance - for visibility |
772
+ | `publish_metadata` | String? | — | JSON - price, full_description, is_featured, etc. |
773
+ | `store_updated_at` | DateTime? | — | Store's date_updated for sync detection |
774
+ | `cover_image_path` | String? | — | Path to cover image for marketplace listing |
775
+ | `is_purchased` | Boolean | false | Whether this item was purchased from the store |
776
+
777
+ ### AgentSkill (`agent_skills`)
778
+ A skill (tool-set) available to agents. Can come from a git repo, zip file, or plugin.
779
+
780
+ | Field | Type | Default | Notes |
781
+ |---|---|---|---|
782
+ | `name` | String | — | — |
783
+ | `display_name` | String | — | — |
784
+ | `description` | String? | — | — |
785
+ | `skill_id` | String? | — | Store's ID, used when synced from marketplace |
786
+ | `repository_url` | String? | — | — |
787
+ | `ref` | String? | — | Git ref (branch/tag) |
788
+ | `skill_path` | String? | — | Path within repository |
789
+ | `zip_file` | String? | — | Path to local zip file |
790
+ | `type` | String | repo | 'repo' | 'zip' |
791
+ | `scope` | String | uploaded | 'global' | 'workspace' | 'local-app' | 'uploaded' | 'plugin' |
792
+ | `status` | String | draft | 'draft' | 'published' |
793
+ | `pending_publish` | Boolean | true | Tracks if code/ZIP changed and needs new version publish |
794
+ | `plugin_id` | String? | — | FK to plugins.id — set when skill is contributed by a plugin's manifest |
795
+ | `plugin` | plugins? | — | — |
796
+
797
+ ### local_app_vector_configs (`local_app_vector_configs`)
798
+ | Field | Type | Default | Notes |
799
+ |---|---|---|---|
800
+ | `app_id` | String | — | — |
801
+ | `provider` | String | — | — |
802
+ | `config` | String | — | — |
803
+
804
+ ### WorkspaceTask (`workspace_tasks`)
805
+ A discrete task created within a workspace.
806
+
807
+ | Field | Type | Default | Notes |
808
+ |---|---|---|---|
809
+ | `uuid` | String | uuid( | — |
810
+ | `workspace_id` | Int | — | — |
811
+ | `thread_id` | Int? | — | — |
812
+ | `title` | String | — | — |
813
+ | `description` | String? | — | — |
814
+ | `status` | String | submitted | submitted, working, input-required, completed, failed, canceled |
815
+ | `agent_id` | String? | — | — |
816
+ | `source` | String? | web | web, api, schedule, etc |
817
+ | `priority` | String? | normal | — |
818
+ | `due_at` | DateTime? | — | — |
819
+ | `result` | String? | — | JSON string of task result |
820
+ | `metadata` | String? | — | JSON string of additional metadata |
821
+ | `created_by` | Int? | — | — |
822
+ | `created_at` | DateTime | now( | — |
823
+ | `updated_at` | DateTime | — | — |
824
+ | `workspace` | workspaces | — | — |
825
+ | `user` | users? | — | — |
826
+ | `thread` | workspace_threads? | — | — |
827
+
828
+ ### ChannelPlugin (`channel_plugins`)
829
+ A messaging channel integration (e.g. Slack, Teams) linked to a workspace.
830
+
831
+ | Field | Type | Default | Notes |
832
+ |---|---|---|---|
833
+ | `uuid` | String | uuid( | — |
834
+ | `workspace_id` | Int | — | — |
835
+ | `plugin_type` | String | — | "telegram" | "slack" | "discord" |
836
+ | `name` | String? | — | — |
837
+ | `enabled` | Boolean | false | — |
838
+ | `config` | String | — | JSON - encrypted credentials (bot token) |
839
+ | `settings` | String? | — | JSON - plugin-specific settings |
840
+ | `status` | String | stopped | stopped|starting|running|error |
841
+ | `error_message` | String? | — | — |
842
+ | `created_by` | Int? | — | — |
843
+ | `workspace` | workspaces | — | — |
844
+ | `channel_users` | channel_users[] | — | — |
845
+ | `channel_sessions` | channel_sessions[] | — | — |
846
+ | `channel_pairing_codes` | channel_pairing_codes[] | — | — |
847
+
848
+ ### channel_users (`channel_users`)
849
+ | Field | Type | Default | Notes |
850
+ |---|---|---|---|
851
+ | `plugin_id` | Int | — | — |
852
+ | `platform_user_id` | String | — | — |
853
+ | `platform_username` | String? | — | — |
854
+ | `authorized` | Boolean | true | — |
855
+ | `metadata` | String? | — | JSON |
856
+ | `plugin` | channel_plugins | — | — |
857
+ | `channel_sessions` | channel_sessions[] | — | — |
858
+
859
+ ### channel_sessions (`channel_sessions`)
860
+ | Field | Type | Default | Notes |
861
+ |---|---|---|---|
862
+ | `plugin_id` | Int | — | — |
863
+ | `channel_user_id` | Int | — | — |
864
+ | `platform_chat_id` | String | — | — |
865
+ | `thread_id` | Int? | — | — |
866
+ | `active` | Boolean | true | — |
867
+ | `metadata` | String? | — | JSON |
868
+ | `plugin` | channel_plugins | — | — |
869
+ | `channel_user` | channel_users | — | — |
870
+
871
+ ### channel_pairing_codes (`channel_pairing_codes`)
872
+ | Field | Type | Default | Notes |
873
+ |---|---|---|---|
874
+ | `plugin_id` | Int | — | — |
875
+ | `code` | String | — | — |
876
+ | `platform_user_id` | String? | — | — |
877
+ | `platform_username` | String? | — | — |
878
+ | `status` | String | pending | pending|approved|rejected|expired |
879
+ | `expiresAt` | DateTime | — | — |
880
+ | `plugin` | channel_plugins | — | — |
881
+
882
+ ### WorkspaceMemory (`workspace_memories`)
883
+ A long-term memory entry stored for a workspace.
884
+
885
+ | Field | Type | Default | Notes |
886
+ |---|---|---|---|
887
+ | `uuid` | String | uuid( | — |
888
+ | `workspace_id` | Int | — | — |
889
+ | `user_id` | Int? | — | — |
890
+ | `category` | String | fact | fact, preference, instruction, entity |
891
+ | `content` | String | — | — |
892
+ | `content_hash` | String? | — | — |
893
+ | `vector_id` | String? | — | — |
894
+ | `source_chat_id` | Int? | — | — |
895
+ | `source_thread_id` | Int? | — | — |
896
+ | `importance` | Int | 5 | 1-10 |
897
+ | `access_count` | Int | 0 | — |
898
+ | `active` | Boolean | true | — |
899
+ | `metadata` | String? | — | — |
900
+ | `lastAccessedAt` | DateTime | now( | — |
901
+ | `source_file` | String? | — | relative path: "MEMORY.md" or "2026-03-09.md" |
902
+ | `file_hash` | String? | — | SHA256 of source file at sync time |
903
+ | `chunk_index` | Int? | — | position within file (for multi-memory files) |
904
+
905
+ ### Plugin (`plugins`)
906
+ An installable plugin that extends RealtimeX with new providers, skills, or channels.
907
+
908
+ | Field | Type | Default | Notes |
909
+ |---|---|---|---|
910
+ | `name` | String | — | Machine-readable slug: "notion-integration" |
911
+ | `display_name` | String | — | "Notion Integration" |
912
+ | `description` | String? | — | — |
913
+ | `version` | String | — | Semver: "1.0.0" |
914
+ | `author` | String? | — | — |
915
+ | `license` | String? | — | — |
916
+ | `install_source` | String | local | 'local' | 'marketplace' | 'zip' | 'git' | 'builtin' |
917
+ | `install_ref` | String? | — | Source URL, npm name, marketplace ID, etc. |
918
+ | `manifest` | String | — | JSON - Full realtimex.plugin.json contents |
919
+ | `capabilities` | String | [] | JSON Array - ["tools","hooks"] (denormalized for queries) |
920
+ | `setup_schema` | String? | — | JSON Array - Schema for rich config UI |
921
+ | `store_config` | String? | — | JSON - Template config with {{PLACEHOLDER}} values |
922
+ | `user_config` | String? | — | JSON - User's placeholder values {"KEY": "value"} |
923
+ | `enabled` | Boolean | true | Global enable/disable |
924
+ | `status` | String | installed | 'installed' | 'active' | 'error' | 'disabled' |
925
+ | `error_message` | String? | — | — |
926
+ | `storage_path` | String? | — | Relative path within server/storage/plugins/ |
927
+ | `icon_path` | String? | — | — |
928
+ | `tags` | String? | — | JSON Array |
929
+ | `metadata` | String? | — | JSON - Extra data (homepage, repository, etc.) |
930
+ | `skills` | agent_skills[] | — | Skills contributed by this plugin's manifest (CASCADE on plugin delete) |
931
+
932
+ ### workspace_memory_configs (`workspace_memory_configs`)
933
+ | Field | Type | Default | Notes |
934
+ |---|---|---|---|
935
+ | `workspace_id` | Int | — | — |
936
+ | `memory_enabled` | Boolean | true | — |
937
+ | `auto_extract` | Boolean | true | — |
938
+ | `max_memories` | Int | 200 | — |
939
+ | `injection_token_limit` | Int | 800 | — |
940
+ | `similarity_dedup_threshold` | Float | 0.9 | — |
941
+ | `temporal_decay_halflife` | Int | 30 | — |
942
+ | `hybrid_search_enabled` | Boolean | true | — |
943
+ | `vector_weight` | Float | 0.7 | — |
944
+ | `keyword_weight` | Float | 0.3 | — |
945
+ | `mmr_enabled` | Boolean | false | — |
946
+ | `mmr_lambda` | Float | 0.7 | — |
947
+ | `temporal_decay_enabled` | Boolean | false | — |
948
+ | `chunking_enabled` | Boolean | true | — |
949
+ | `extraction_mode` | String | per_turn | — |
950
+ | `search_backend` | String | builtin | — |
951
+ | `qmd_search_mode` | String | search | — |
952
+ | `qmd_max_results` | Int | 6 | — |
953
+ | `qmd_timeout_ms` | Int | 4000 | — |
954
+ | `qmd_candidate_multiplier` | Int | 3 | — |
955
+ | `qmd_min_score` | Float | 0.0 | — |
956
+ | `qmd_intent` | String | | — |
957
+ | `qmd_candidate_limit` | Int | 40 | — |
958
+ | `qmd_skip_rerank` | Boolean | false | — |
@@ -1,6 +1,6 @@
1
1
  # Known Issues — Source-Detected
2
2
 
3
- > Auto-generated by `scripts/generate-skill.mjs` · SDK **1.7.4** · 2026-04-16
3
+ > Auto-generated by `scripts/generate-skill.mjs` · SDK **1.7.5** · 2026-04-23
4
4
 
5
5
  Run `node scripts/generate-skill.mjs --force` after SDK source changes to refresh.
6
6