@coffer-org/server 7.3.0 → 7.5.0
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.
- package/dist/auth-api.js +18 -19
- package/dist/compute-unit.js +0 -3
- package/dist/conversation-store.d.ts +61 -0
- package/dist/conversation-store.js +223 -0
- package/dist/entity-schema.d.ts +5 -4
- package/dist/entity-schema.js +32 -41
- package/dist/identity-providers.d.ts +17 -0
- package/dist/identity-providers.js +14 -0
- package/dist/index.js +2 -1
- package/dist/mcp-contract/schema.d.ts +0 -1
- package/dist/mcp-contract/schema.js +0 -2
- package/dist/mutate.js +0 -15
- package/dist/orchestrator/draft-message.d.ts +18 -0
- package/dist/orchestrator/draft-message.js +85 -0
- package/dist/orchestrator/index.d.ts +4 -5
- package/dist/orchestrator/index.js +2 -9
- package/dist/orchestrator/live-message.js +6 -3
- package/dist/orchestrator/pipeline.d.ts +7 -10
- package/dist/orchestrator/pipeline.js +177 -96
- package/dist/orchestrator/registry.d.ts +0 -2
- package/dist/orchestrator/registry.js +0 -9
- package/dist/orchestrator/types.d.ts +17 -25
- package/dist/plugin-hooks.d.ts +12 -1
- package/dist/plugin-hooks.js +4 -0
- package/dist/plugin-runtime.d.ts +4 -0
- package/dist/plugin-runtime.js +11 -7
- package/dist/plugins-api.d.ts +8 -2
- package/dist/plugins-api.js +4 -2
- package/dist/settings-write.d.ts +1 -2
- package/dist/settings-write.js +1 -2
- package/dist/temporal.js +8 -3
- package/package.json +2 -2
|
@@ -2,9 +2,11 @@ import type { ImageTarget } from '../media/index.ts';
|
|
|
2
2
|
import type { AuthRole } from '../plugin-hooks.ts';
|
|
3
3
|
import type { ContextFact } from './context-facts.ts';
|
|
4
4
|
import type { SystemAreas } from './system-areas.ts';
|
|
5
|
+
import type { StoredAttachment } from '../conversation-store.ts';
|
|
5
6
|
export type { ImageTarget };
|
|
6
7
|
export type { ContextFact };
|
|
7
8
|
export type { SystemAreas };
|
|
9
|
+
export type { StoredAttachment };
|
|
8
10
|
export interface AttachmentRef {
|
|
9
11
|
name: string;
|
|
10
12
|
mime?: string;
|
|
@@ -63,8 +65,6 @@ export interface AgentPreset {
|
|
|
63
65
|
id: string;
|
|
64
66
|
title: string;
|
|
65
67
|
hint?: string;
|
|
66
|
-
quality?: number;
|
|
67
|
-
time?: number;
|
|
68
68
|
default?: boolean;
|
|
69
69
|
capabilities?: AgentCapabilities;
|
|
70
70
|
}
|
|
@@ -85,7 +85,7 @@ export interface AgentTurn {
|
|
|
85
85
|
body: {
|
|
86
86
|
system: string[];
|
|
87
87
|
messages: ConvMessage[];
|
|
88
|
-
|
|
88
|
+
userMessageCount: number;
|
|
89
89
|
};
|
|
90
90
|
toolProvider?: AgentToolProvider;
|
|
91
91
|
presetId?: string;
|
|
@@ -112,7 +112,6 @@ export interface AgentRuntime {
|
|
|
112
112
|
}
|
|
113
113
|
export interface ConnectorRegistration {
|
|
114
114
|
id: string;
|
|
115
|
-
linkUrl?(code: string): string | undefined;
|
|
116
115
|
}
|
|
117
116
|
export interface AttachmentMaterializer {
|
|
118
117
|
store(bytes: Uint8Array, opts?: {
|
|
@@ -120,10 +119,9 @@ export interface AttachmentMaterializer {
|
|
|
120
119
|
mime?: string;
|
|
121
120
|
}): Promise<AttachmentRef>;
|
|
122
121
|
}
|
|
123
|
-
export type SenderIdKind = 'coffer-user' | 'transport';
|
|
124
122
|
export interface TurnEnvelope {
|
|
125
123
|
connectorId: string;
|
|
126
|
-
|
|
124
|
+
conversationId: string;
|
|
127
125
|
turnId: string;
|
|
128
126
|
}
|
|
129
127
|
export interface ConnectorCapabilities {
|
|
@@ -132,23 +130,26 @@ export interface ConnectorCapabilities {
|
|
|
132
130
|
}
|
|
133
131
|
export interface TurnBody {
|
|
134
132
|
systemPrompt: SystemAreas;
|
|
135
|
-
messages: ConvMessage[];
|
|
136
133
|
capabilities: ConnectorCapabilities;
|
|
137
|
-
userTurns: number;
|
|
138
134
|
}
|
|
139
135
|
export interface TurnRequest {
|
|
140
136
|
envelope: TurnEnvelope;
|
|
141
|
-
body: TurnBody;
|
|
142
|
-
agentId?: string;
|
|
143
|
-
presetId?: string;
|
|
144
137
|
sender: {
|
|
145
|
-
|
|
138
|
+
userId: number;
|
|
146
139
|
displayName?: string;
|
|
147
|
-
idKind?: SenderIdKind;
|
|
148
140
|
};
|
|
141
|
+
message?: {
|
|
142
|
+
text: string;
|
|
143
|
+
attachments?: StoredAttachment[];
|
|
144
|
+
replyToMsgId?: string | null;
|
|
145
|
+
};
|
|
146
|
+
capabilities?: ConnectorCapabilities;
|
|
147
|
+
systemPrompt?: SystemAreas;
|
|
149
148
|
turnContext?: ContextFact[];
|
|
150
|
-
|
|
149
|
+
agentId?: string;
|
|
150
|
+
presetId?: string;
|
|
151
151
|
signal?: AbortSignal;
|
|
152
|
+
prepareAttachments?(m: AttachmentMaterializer): Promise<StoredAttachment[] | ConvMessage[]>;
|
|
152
153
|
}
|
|
153
154
|
export type TurnEvent = {
|
|
154
155
|
kind: 'delta';
|
|
@@ -177,9 +178,6 @@ export type TurnEvent = {
|
|
|
177
178
|
} | {
|
|
178
179
|
kind: 'title';
|
|
179
180
|
text: string;
|
|
180
|
-
} | {
|
|
181
|
-
kind: 'notice';
|
|
182
|
-
text: string;
|
|
183
181
|
};
|
|
184
182
|
export interface TurnSink {
|
|
185
183
|
emit(event: TurnEvent): void;
|
|
@@ -187,14 +185,8 @@ export interface TurnSink {
|
|
|
187
185
|
}
|
|
188
186
|
export interface Connector {
|
|
189
187
|
id: string;
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
recordContext(m: {
|
|
193
|
-
chatId: string;
|
|
194
|
-
userMsgId: string;
|
|
195
|
-
facts: ContextFact[];
|
|
196
|
-
ts: number;
|
|
197
|
-
}): Promise<void>;
|
|
188
|
+
open(envelope: TurnEnvelope, msgId: string): TurnSink;
|
|
189
|
+
bindMessage?(envelope: TurnEnvelope, msgId: string, externalId: string): Promise<void>;
|
|
198
190
|
}
|
|
199
191
|
export interface GatePolicy {
|
|
200
192
|
agentId?: string;
|
package/dist/plugin-hooks.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { EntityManager } from '@mikro-orm/core';
|
|
2
2
|
import type { z } from 'zod';
|
|
3
|
-
import type { ColumnType, ColumnConversion } from '@coffer-org/sdk/fields';
|
|
3
|
+
import type { ColumnType, ColumnConversion, LayoutEl } from '@coffer-org/sdk/fields';
|
|
4
|
+
import type { LayoutInput } from '@coffer-org/sdk/materialize/decl';
|
|
4
5
|
import { type Logger } from '@coffer-org/sdk/logger';
|
|
5
6
|
export type { BackgroundTask } from './background-scheduler.ts';
|
|
6
7
|
export interface TableOps {
|
|
@@ -60,6 +61,15 @@ export type PluginStreamAction = (body: Record<string, unknown>, ctx: {
|
|
|
60
61
|
emit: (event: string, data: unknown) => void;
|
|
61
62
|
signal: AbortSignal;
|
|
62
63
|
}) => Promise<void>;
|
|
64
|
+
export interface PrivateTableDef {
|
|
65
|
+
name: string;
|
|
66
|
+
fields: LayoutEl[];
|
|
67
|
+
unique?: string[][];
|
|
68
|
+
}
|
|
69
|
+
export type PrivateTableDefInput = Omit<PrivateTableDef, 'fields'> & {
|
|
70
|
+
fields: LayoutInput;
|
|
71
|
+
};
|
|
72
|
+
export declare function definePrivateTable(t: PrivateTableDefInput): PrivateTableDef;
|
|
63
73
|
export interface PluginHooks {
|
|
64
74
|
migrations?: Migration[];
|
|
65
75
|
seed?: Seed[];
|
|
@@ -71,6 +81,7 @@ export interface PluginHooks {
|
|
|
71
81
|
userActions?: Record<string, PluginUserAction>;
|
|
72
82
|
streamActions?: Record<string, PluginStreamAction>;
|
|
73
83
|
http?: PluginHttpMount[];
|
|
84
|
+
tables?: PrivateTableDef[];
|
|
74
85
|
}
|
|
75
86
|
export declare const pluginHooks: Record<string, PluginHooks>;
|
|
76
87
|
export interface PluginHttpRequest {
|
package/dist/plugin-hooks.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { materializeDef } from '@coffer-org/sdk/materialize/pipeline';
|
|
1
2
|
import { getLogger } from '@coffer-org/sdk/logger';
|
|
2
3
|
export function pluginCtx(id, em, signal) {
|
|
3
4
|
return { em, log: getLogger(id), ...(signal ? { signal } : {}) };
|
|
@@ -10,4 +11,7 @@ export class HttpError extends Error {
|
|
|
10
11
|
this.name = 'HttpError';
|
|
11
12
|
}
|
|
12
13
|
}
|
|
14
|
+
export function definePrivateTable(t) {
|
|
15
|
+
return materializeDef(t);
|
|
16
|
+
}
|
|
13
17
|
export const pluginHooks = {};
|
package/dist/plugin-runtime.d.ts
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
|
+
import type { EntitySchema } from '@mikro-orm/core';
|
|
1
2
|
import { type Registry } from '@coffer-org/sdk/compose';
|
|
2
3
|
import type { PluginManifest } from '@coffer-org/sdk/plugin';
|
|
4
|
+
import { type PluginHooks } from './plugin-hooks.ts';
|
|
3
5
|
export declare function getPlugins(): Promise<PluginManifest[]>;
|
|
4
6
|
export declare function readDisabled(): Promise<Set<string>>;
|
|
5
7
|
export declare function getDisabled(): Promise<Set<string>>;
|
|
6
8
|
export declare function getPluginSettings(groupId: string): Promise<Record<string, unknown>>;
|
|
7
9
|
export declare function requireSettings<K extends string>(pluginId: string, keys: readonly K[]): Promise<Record<K, string>>;
|
|
10
|
+
export declare function privateTableEntities(plugins: PluginManifest[], hooks: Record<string, PluginHooks>): EntitySchema[];
|
|
8
11
|
export declare function initStorage(): Promise<Set<string>>;
|
|
9
12
|
export declare function initPlugins(): Promise<Registry>;
|
|
10
13
|
export declare function teardownPlugins(): Promise<void>;
|
|
11
14
|
export declare function teardownPlugin(id: string): Promise<void>;
|
|
15
|
+
export declare function pluginTables(p: PluginManifest, hooks?: Record<string, PluginHooks>): string[];
|
|
12
16
|
export declare function purgePluginData(p: PluginManifest, actor: string): Promise<void>;
|
|
13
17
|
export declare function filterEnabled<T extends {
|
|
14
18
|
id: string;
|
package/dist/plugin-runtime.js
CHANGED
|
@@ -2,7 +2,7 @@ import { composeRegistry } from '@coffer-org/sdk/compose';
|
|
|
2
2
|
import { getLogger } from '@coffer-org/sdk/logger';
|
|
3
3
|
import { initDb, getOrm, getEm } from "./db.js";
|
|
4
4
|
import { syncSchema } from "./schema-sync.js";
|
|
5
|
-
import { systemEntities, buildPluginEntities, shelfTableName } from "./entity-schema.js";
|
|
5
|
+
import { systemEntities, buildPluginEntities, buildPrivateTableEntity, shelfTableName, privateTableName, } from "./entity-schema.js";
|
|
6
6
|
import { pluginHooks, pluginCtx, HttpError } from "./plugin-hooks.js";
|
|
7
7
|
import { discoverPlugins, loadServerHooks } from "./plugin-discovery.js";
|
|
8
8
|
import { selectRows } from "./read-rows.js";
|
|
@@ -13,7 +13,7 @@ import { migrateEmbeddingVectorsToBlob } from "./embeddings.js";
|
|
|
13
13
|
import { ensureSearchTable } from "./search-index.js";
|
|
14
14
|
import { startScheduler, stopScheduler } from "./background-scheduler.js";
|
|
15
15
|
import { startSearchIndexer, indexSearchOnce } from "./search-indexer.js";
|
|
16
|
-
import { startOrchestrator, stopOrchestrator, orchestratorStartersTask
|
|
16
|
+
import { startOrchestrator, stopOrchestrator, orchestratorStartersTask } from "./orchestrator/index.js";
|
|
17
17
|
import { SYSTEM_SETTINGS_ID, SYSTEM_SETTINGS } from "./system-settings.js";
|
|
18
18
|
const log = getLogger('plugins');
|
|
19
19
|
let stopSearchIndexer;
|
|
@@ -78,6 +78,9 @@ async function seedPluginRows() {
|
|
|
78
78
|
}
|
|
79
79
|
await fork.flush();
|
|
80
80
|
}
|
|
81
|
+
export function privateTableEntities(plugins, hooks) {
|
|
82
|
+
return plugins.flatMap((p) => (hooks[p.id]?.tables ?? []).map((t) => buildPrivateTableEntity(p.id, t)));
|
|
83
|
+
}
|
|
81
84
|
export async function initStorage() {
|
|
82
85
|
await initDb(systemEntities);
|
|
83
86
|
await runSystemMigrations(getEm().fork());
|
|
@@ -92,10 +95,10 @@ export async function initStorage() {
|
|
|
92
95
|
const hooks = await loadServerHooks();
|
|
93
96
|
await runMigrations({
|
|
94
97
|
em: getEm().fork(),
|
|
95
|
-
plugins: active.map((p) => ({ id: p.id, tables: pluginTables(p) })),
|
|
98
|
+
plugins: active.map((p) => ({ id: p.id, tables: pluginTables(p, hooks) })),
|
|
96
99
|
hooks,
|
|
97
100
|
});
|
|
98
|
-
const pluginEntities = buildPluginEntities(active);
|
|
101
|
+
const pluginEntities = [...buildPluginEntities(active), ...privateTableEntities(active, hooks)];
|
|
99
102
|
await assertSafeRequired(getEm().fork(), pluginEntities);
|
|
100
103
|
if (pluginEntities.length)
|
|
101
104
|
getOrm().discoverEntity(pluginEntities);
|
|
@@ -110,7 +113,7 @@ export async function initPlugins() {
|
|
|
110
113
|
Object.assign(pluginHooks, await loadServerHooks());
|
|
111
114
|
await runSeeds({ em: getEm().fork(), plugins: reg.order, hooks: pluginHooks });
|
|
112
115
|
startOrchestrator();
|
|
113
|
-
const bgTasks = [orchestratorStartersTask
|
|
116
|
+
const bgTasks = [orchestratorStartersTask];
|
|
114
117
|
for (const p of reg.order) {
|
|
115
118
|
const h = pluginHooks[p.id];
|
|
116
119
|
try {
|
|
@@ -175,16 +178,17 @@ function pluginShelves(p) {
|
|
|
175
178
|
...(p.libraryShelves ?? []).map((m) => ({ library: m.library, shelf: m.shelf })),
|
|
176
179
|
];
|
|
177
180
|
}
|
|
178
|
-
function pluginTables(p) {
|
|
181
|
+
export function pluginTables(p, hooks) {
|
|
179
182
|
return [
|
|
180
183
|
...pluginShelves(p).map(({ library, shelf }) => shelfTableName(library, shelf)),
|
|
181
184
|
...(p.extends_ ?? []).map((e) => `extend__${e.id}`),
|
|
182
185
|
...(p.settings && p.settings.fields.length > 0 ? [`_settings__${p.id}`] : []),
|
|
186
|
+
...(hooks?.[p.id]?.tables ?? []).map((t) => privateTableName(p.id, t.name)),
|
|
183
187
|
];
|
|
184
188
|
}
|
|
185
189
|
export async function purgePluginData(p, actor) {
|
|
186
190
|
await teardownPlugin(p.id);
|
|
187
|
-
const tables = pluginTables(p);
|
|
191
|
+
const tables = pluginTables(p, pluginHooks);
|
|
188
192
|
const conn = getEm().fork().getConnection();
|
|
189
193
|
for (const t of tables) {
|
|
190
194
|
await conn.execute(`DROP TABLE IF EXISTS "${t}"`);
|
package/dist/plugins-api.d.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import type { FastifyInstance } from 'fastify';
|
|
2
2
|
import type { PluginManifest } from '@coffer-org/sdk/plugin';
|
|
3
3
|
import type { PluginAssetRecord } from './plugin-discovery.ts';
|
|
4
|
+
export interface PluginLabelEntry {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
}
|
|
4
8
|
export interface PluginListEntry {
|
|
5
9
|
id: string;
|
|
10
|
+
label: string;
|
|
11
|
+
description: string;
|
|
6
12
|
installedVersion: string;
|
|
7
13
|
latestVersion: string | null;
|
|
8
14
|
packageName: string | null;
|
|
9
15
|
dependsOn: string[];
|
|
10
16
|
enabled: boolean;
|
|
11
|
-
libraries:
|
|
12
|
-
extends:
|
|
17
|
+
libraries: PluginLabelEntry[];
|
|
18
|
+
extends: PluginLabelEntry[];
|
|
13
19
|
hasSettings: boolean;
|
|
14
20
|
schema?: string;
|
|
15
21
|
web?: string;
|
package/dist/plugins-api.js
CHANGED
|
@@ -11,13 +11,15 @@ export async function buildPluginListResponse(plugins, assets, disabled, withUpd
|
|
|
11
11
|
const a = assetById.get(p.id);
|
|
12
12
|
return {
|
|
13
13
|
id: p.id,
|
|
14
|
+
label: p.label,
|
|
15
|
+
description: p.description,
|
|
14
16
|
installedVersion: a?.version ?? p.version,
|
|
15
17
|
latestVersion: withUpdates && a && !a.local ? await checkLatestVersion(a.packageName, { force: forceUpdates }) : null,
|
|
16
18
|
packageName: a?.packageName ?? null,
|
|
17
19
|
dependsOn: p.dependsOn,
|
|
18
20
|
enabled: !disabled.has(p.id),
|
|
19
|
-
libraries: (p.libraries ?? []).map((v) => v.meta.id),
|
|
20
|
-
extends: (p.extends_ ?? []).map((e) => e.id),
|
|
21
|
+
libraries: (p.libraries ?? []).map((v) => ({ id: v.meta.id, label: v.meta.label })),
|
|
22
|
+
extends: (p.extends_ ?? []).map((e) => ({ id: e.id, label: e.label })),
|
|
21
23
|
hasSettings: Boolean(p.settings && p.settings.fields.length > 0),
|
|
22
24
|
schema: a?.schema,
|
|
23
25
|
web: a?.web,
|
package/dist/settings-write.d.ts
CHANGED
|
@@ -5,11 +5,10 @@ export interface SettingsFieldInfo {
|
|
|
5
5
|
key: string;
|
|
6
6
|
kind: string;
|
|
7
7
|
label?: string;
|
|
8
|
-
required: boolean;
|
|
9
8
|
options?: string[];
|
|
10
9
|
}
|
|
11
10
|
export declare function describeSettingsFields(fields: LayoutEl[]): SettingsFieldInfo[];
|
|
12
|
-
export declare function buildSettingsBody(groupId: string, fields: LayoutEl[], incoming: Record<string, unknown>, existing: Record<string, unknown>, label
|
|
11
|
+
export declare function buildSettingsBody(groupId: string, fields: LayoutEl[], incoming: Record<string, unknown>, existing: Record<string, unknown>, label: string): Record<string, unknown>;
|
|
13
12
|
export declare function writePluginSettings(em: EntityManager, groupId: string, incoming: Record<string, unknown>, actor: string, pluginsOverride?: PluginManifest[]): Promise<Record<string, unknown>>;
|
|
14
13
|
export declare function listSettings(pluginsOverride?: PluginManifest[]): Promise<{
|
|
15
14
|
group: string;
|
package/dist/settings-write.js
CHANGED
|
@@ -9,11 +9,10 @@ export function describeSettingsFields(fields) {
|
|
|
9
9
|
key,
|
|
10
10
|
kind: f.kind,
|
|
11
11
|
label: f.label,
|
|
12
|
-
required: f.required === true,
|
|
13
12
|
...(f.options ? { options: f.options.map((o) => o.value) } : {}),
|
|
14
13
|
}));
|
|
15
14
|
}
|
|
16
|
-
function settingsShelf(groupId, fields, label
|
|
15
|
+
function settingsShelf(groupId, fields, label) {
|
|
17
16
|
return { library: '_settings', shelf: groupId, label, fields };
|
|
18
17
|
}
|
|
19
18
|
export function buildSettingsBody(groupId, fields, incoming, existing, label) {
|
package/dist/temporal.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { fieldEntries, storageColumns } from '@coffer-org/sdk/shelf';
|
|
2
2
|
export function dtStringToDate(s) {
|
|
3
3
|
return new Date(`${s}:00Z`);
|
|
4
4
|
}
|
|
@@ -8,8 +8,13 @@ export function dateToDtString(d) {
|
|
|
8
8
|
`T${p(d.getUTCHours())}:${p(d.getUTCMinutes())}`);
|
|
9
9
|
}
|
|
10
10
|
function datetimeKeysAt(fields) {
|
|
11
|
-
const
|
|
12
|
-
|
|
11
|
+
const out = [];
|
|
12
|
+
for (const [key, fm] of fieldEntries(fields)) {
|
|
13
|
+
for (const [col, type] of storageColumns(key, fm))
|
|
14
|
+
if (type === 'datetime')
|
|
15
|
+
out.push(col);
|
|
16
|
+
}
|
|
17
|
+
return out;
|
|
13
18
|
}
|
|
14
19
|
export function encodeTemporalAt(fields, row) {
|
|
15
20
|
const out = { ...row };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coffer-org/server",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=24"
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"postpack": "node ../../scripts/swap-exports.mjs src"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@coffer-org/sdk": "^7.
|
|
43
|
+
"@coffer-org/sdk": "^7.4.1",
|
|
44
44
|
"@extractus/oembed-extractor": "^4.1.0",
|
|
45
45
|
"@fastify/cors": "^11.2.0",
|
|
46
46
|
"@fastify/multipart": "^10.0.0",
|