@undefineds.co/models 0.2.19 → 0.2.22

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.
Files changed (70) hide show
  1. package/README.md +178 -522
  2. package/dist/agent.repository.js +2 -2
  3. package/dist/agent.schema.d.ts +20 -3
  4. package/dist/agent.schema.js +3 -1
  5. package/dist/ai-config/index.d.ts +24 -0
  6. package/dist/ai-config/index.js +133 -23
  7. package/dist/ai-model.schema.d.ts +13 -3
  8. package/dist/ai-model.schema.js +6 -4
  9. package/dist/ai-provider.schema.d.ts +13 -3
  10. package/dist/ai-provider.schema.js +7 -3
  11. package/dist/ai-runtime.schema.d.ts +84 -0
  12. package/dist/ai-runtime.schema.js +64 -0
  13. package/dist/approval.schema.d.ts +1 -0
  14. package/dist/approval.schema.js +11 -0
  15. package/dist/audit.schema.d.ts +1 -0
  16. package/dist/audit.schema.js +11 -0
  17. package/dist/chat.repository.js +2 -2
  18. package/dist/chat.schema.d.ts +1 -1
  19. package/dist/chat.schema.js +1 -1
  20. package/dist/contact.repository.js +2 -2
  21. package/dist/contact.schema.d.ts +26 -4
  22. package/dist/contact.schema.js +4 -2
  23. package/dist/credential.schema.d.ts +111 -3
  24. package/dist/credential.schema.js +15 -2
  25. package/dist/favorite/favorite.schema.d.ts +18 -4
  26. package/dist/favorite/favorite.schema.js +4 -2
  27. package/dist/favorite/index.d.ts +1 -1
  28. package/dist/favorite/index.js +1 -1
  29. package/dist/favorite/starred-sync.d.ts +2 -2
  30. package/dist/favorite/starred-sync.js +4 -4
  31. package/dist/file/file.schema.d.ts +26 -5
  32. package/dist/file/file.schema.js +5 -3
  33. package/dist/file/index.d.ts +1 -1
  34. package/dist/file/index.js +1 -1
  35. package/dist/grant.schema.d.ts +1 -0
  36. package/dist/grant.schema.js +3 -0
  37. package/dist/inbox-notification.schema.d.ts +10 -3
  38. package/dist/inbox-notification.schema.js +3 -1
  39. package/dist/index.d.ts +17 -17
  40. package/dist/index.js +17 -21
  41. package/dist/message.repository.js +2 -2
  42. package/dist/message.schema.js +8 -8
  43. package/dist/namespaces.d.ts +0 -3
  44. package/dist/namespaces.js +33 -7
  45. package/dist/profile.d.ts +2 -1
  46. package/dist/profile.js +6 -3
  47. package/dist/profile.repository.js +3 -3
  48. package/dist/profile.schema.d.ts +16 -3
  49. package/dist/profile.schema.js +3 -1
  50. package/dist/repository.d.ts +6 -1
  51. package/dist/repository.js +6 -1
  52. package/dist/schema.d.ts +102 -10
  53. package/dist/schema.js +31 -21
  54. package/dist/session/index.d.ts +1 -1
  55. package/dist/session/index.js +1 -1
  56. package/dist/session/session.schema.d.ts +7 -2
  57. package/dist/session/session.schema.js +32 -4
  58. package/dist/session.repository.d.ts +4 -0
  59. package/dist/session.repository.js +2 -2
  60. package/dist/settings/index.d.ts +1 -1
  61. package/dist/settings/index.js +1 -1
  62. package/dist/settings/settings.schema.d.ts +17 -5
  63. package/dist/settings/settings.schema.js +4 -2
  64. package/dist/thread.repository.js +2 -2
  65. package/dist/thread.schema.js +2 -2
  66. package/dist/vocab/message.vocab.js +8 -8
  67. package/dist/vocab/thread.vocab.js +2 -2
  68. package/package.json +15 -8
  69. package/dist/watch/index.d.ts +0 -281
  70. package/dist/watch/index.js +0 -1493
@@ -1,7 +1,7 @@
1
1
  import { definePodRepository } from './repository.js';
2
- import { agentTable } from './agent.schema.js';
2
+ import { agentResource } from './agent.schema.js';
3
3
  export const agentRepository = definePodRepository({
4
4
  namespace: 'agent',
5
- table: agentTable,
5
+ table: agentResource,
6
6
  searchableFields: ['name', 'description', 'instructions'],
7
7
  });
@@ -1,3 +1,20 @@
1
+ export declare const agentResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
+ name: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
4
+ description: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
5
+ avatarUrl: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
6
+ instructions: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
7
+ provider: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
8
+ model: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
9
+ temperature: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"integer", null, false, true>;
10
+ tools: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "string", false, false>;
11
+ contextRound: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"integer", null, false, true>;
12
+ ttsModel: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
13
+ videoModel: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
14
+ createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
15
+ updatedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
16
+ deletedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
17
+ }>>;
1
18
  export declare const agentTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
19
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
20
  name: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
@@ -15,6 +32,6 @@ export declare const agentTable: import("@undefineds.co/drizzle-solid/dist/core/
15
32
  updatedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
16
33
  deletedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
17
34
  }>>;
18
- export type AgentRow = typeof agentTable.$inferSelect;
19
- export type AgentInsert = typeof agentTable.$inferInsert;
20
- export type AgentUpdate = typeof agentTable.$inferUpdate;
35
+ export type AgentRow = typeof agentResource.$inferSelect;
36
+ export type AgentInsert = typeof agentResource.$inferInsert;
37
+ export type AgentUpdate = typeof agentResource.$inferUpdate;
@@ -1,6 +1,6 @@
1
1
  import { podTable, string, integer, timestamp, text, real, uri, id } from "@undefineds.co/drizzle-solid";
2
2
  import { UDFS, DCTerms, FOAF, VCARD } from "./namespaces.js";
3
- export const agentTable = podTable("agent", {
3
+ export const agentResource = podTable("agent", {
4
4
  id: id("id"),
5
5
  name: string("name").predicate(FOAF.name).notNull(),
6
6
  description: text("description").predicate(DCTerms.description),
@@ -23,3 +23,5 @@ export const agentTable = podTable("agent", {
23
23
  namespace: UDFS,
24
24
  subjectTemplate: '{id}.ttl',
25
25
  });
26
+ // Compatibility alias. New model code should prefer `agentResource`.
27
+ export const agentTable = agentResource;
@@ -20,6 +20,9 @@ export interface AIConfigProviderState {
20
20
  enabled: boolean;
21
21
  apiKey?: string;
22
22
  baseUrl?: string;
23
+ credentialId?: string;
24
+ credentialLabel?: string;
25
+ credentialIsDefault?: boolean;
23
26
  models: AIConfigModel[];
24
27
  selectedModelId?: string;
25
28
  }
@@ -36,6 +39,16 @@ export interface BuildAIConfigProviderStateMapOptions {
36
39
  modelRows: Array<Partial<AIModelRow> & Record<string, unknown>>;
37
40
  fallbackToCatalogModels?: boolean;
38
41
  }
42
+ export interface AIConfigCredentialSelection {
43
+ providerId: string;
44
+ credential: Partial<CredentialRow> & Record<string, unknown>;
45
+ credentialId?: string;
46
+ credentialLabel?: string;
47
+ apiKey: string;
48
+ baseUrl?: string;
49
+ proxyUrl?: string;
50
+ isDefault: boolean;
51
+ }
39
52
  export interface AIConfigMutationPlan {
40
53
  providerId: string;
41
54
  providerPayload?: AIProviderInsert;
@@ -43,6 +56,10 @@ export interface AIConfigMutationPlan {
43
56
  modelUpserts: AIModelInsert[];
44
57
  modelDeleteIds: string[];
45
58
  }
59
+ export interface AIConfigDisconnectPlan {
60
+ providerId: string;
61
+ credentialDeleteIds: string[];
62
+ }
46
63
  export declare const UNDEFINEDS_AI_PROVIDER_ID = "undefineds";
47
64
  export declare const UNDEFINEDS_AI_PROVIDER_DISPLAY_NAME = "undefineds";
48
65
  export declare const UNDEFINEDS_AI_BASE_URL = "https://api.undefineds.co/v1";
@@ -61,6 +78,9 @@ export declare function getAIConfigDefaultBaseUrl(providerId: string): string |
61
78
  export declare function getDefaultAIConfigCredentialId(providerId: string): string;
62
79
  export declare function aiConfigProviderRef(providerId: string): string;
63
80
  export declare function aiConfigModelRef(providerId: string, modelId?: string): string;
81
+ export declare function selectAIConfigCredential(providerId: string, credentialRows: Array<Partial<CredentialRow> & Record<string, unknown>>, providerRows?: Array<Partial<AIProviderRow> & Record<string, unknown>>): AIConfigCredentialSelection | undefined;
82
+ export declare function aiConfigProviderUri(providerId: string): string;
83
+ export declare function aiConfigModelUri(modelId: string, providerId?: string): string;
64
84
  export declare function buildAIConfigProviderStateMap(options: BuildAIConfigProviderStateMapOptions): Record<string, AIConfigProviderState>;
65
85
  export declare function buildAIConfigMutationPlan(input: {
66
86
  providerId: string;
@@ -69,3 +89,7 @@ export declare function buildAIConfigMutationPlan(input: {
69
89
  currentModelRows: Array<Partial<AIModelRow> & Record<string, unknown>>;
70
90
  updates: AIConfigUpdate;
71
91
  }): AIConfigMutationPlan;
92
+ export declare function buildAIConfigDisconnectPlan(input: {
93
+ providerId: string;
94
+ currentCredentialRows: Array<Partial<CredentialRow> & Record<string, unknown>>;
95
+ }): AIConfigDisconnectPlan;
@@ -106,6 +106,26 @@ function preferredSelectedModelId(models) {
106
106
  function existingDate(value) {
107
107
  return value instanceof Date ? value : undefined;
108
108
  }
109
+ function normalizeOptionalText(value) {
110
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
111
+ }
112
+ function normalizeOptionalBoolean(value) {
113
+ return value === true || value === 'true' || value === 1 || value === '1';
114
+ }
115
+ function normalizeOptionalTimestamp(value) {
116
+ if (value instanceof Date)
117
+ return value.getTime();
118
+ if (typeof value === 'string' && value.trim()) {
119
+ const parsed = Date.parse(value);
120
+ return Number.isFinite(parsed) ? parsed : 0;
121
+ }
122
+ if (typeof value === 'number' && Number.isFinite(value))
123
+ return value;
124
+ return 0;
125
+ }
126
+ function normalizeOptionalInteger(value) {
127
+ return typeof value === 'number' && Number.isFinite(value) ? value : 0;
128
+ }
109
129
  export function getAIConfigProviderCatalog() {
110
130
  return AI_CONFIG_PROVIDER_CATALOG;
111
131
  }
@@ -128,12 +148,15 @@ export function normalizeAIConfigResourceId(raw) {
128
148
  return value;
129
149
  }
130
150
  const clean = value.replace(/\/$/, '');
131
- if (!ABSOLUTE_IRI.test(value)) {
132
- return clean.endsWith('.ttl') ? clean.slice(0, -4) : clean;
133
- }
134
151
  const tail = clean.split('/').pop() || clean;
135
152
  return tail.endsWith('.ttl') ? tail.slice(0, -4) : tail;
136
153
  }
154
+ function aiConfigResourceRefToProviderId(raw) {
155
+ return normalizeAIConfigProviderId(raw);
156
+ }
157
+ function aiConfigResourceRefToModelId(raw, providerId) {
158
+ return normalizeAIConfigModelId(raw, providerId);
159
+ }
137
160
  export function normalizeAIConfigModelId(raw, providerId) {
138
161
  const modelId = normalizeAIConfigResourceId(raw);
139
162
  if (!modelId.includes('/'))
@@ -158,8 +181,17 @@ export function normalizeAIConfigProviderId(raw) {
158
181
  }
159
182
  return normalized;
160
183
  }
184
+ function aiConfigProviderRowId(row) {
185
+ return aiConfigResourceRefToProviderId(String(row.id ?? row['@id'] ?? ''));
186
+ }
187
+ function aiConfigCredentialProviderId(row) {
188
+ return aiConfigResourceRefToProviderId(String(row.provider ?? row.id ?? ''));
189
+ }
190
+ function aiConfigModelProviderId(row) {
191
+ return aiConfigResourceRefToProviderId(String(row.isProvidedBy ?? ''));
192
+ }
161
193
  function normalizeAIConfigModelStorageId(raw, providerId) {
162
- return normalizeAIConfigModelId(raw, providerId);
194
+ return aiConfigResourceRefToModelId(raw, providerId);
163
195
  }
164
196
  export function sameAIConfigProviderFamily(left, right) {
165
197
  const normalizedLeft = normalizeAIConfigProviderId(left);
@@ -177,7 +209,8 @@ export function getDefaultAIConfigCredentialId(providerId) {
177
209
  return `${normalizeAIConfigProviderId(providerId)}-default`;
178
210
  }
179
211
  export function aiConfigProviderRef(providerId) {
180
- return normalizeAIConfigProviderId(providerId);
212
+ const provider = normalizeAIConfigProviderId(providerId);
213
+ return provider ? `/settings/providers/${provider}.ttl` : provider;
181
214
  }
182
215
  export function aiConfigModelRef(providerId, modelId) {
183
216
  if (modelId === undefined) {
@@ -185,7 +218,61 @@ export function aiConfigModelRef(providerId, modelId) {
185
218
  }
186
219
  const provider = normalizeAIConfigProviderId(providerId);
187
220
  const model = normalizeAIConfigModelStorageId(modelId, provider);
188
- return provider && model ? `/settings/ai/models/${provider}.ttl#${model}` : model;
221
+ return provider && model ? `/settings/providers/${provider}.ttl#${model}` : model;
222
+ }
223
+ export function selectAIConfigCredential(providerId, credentialRows, providerRows = []) {
224
+ const provider = normalizeAIConfigProviderId(providerId);
225
+ if (!provider)
226
+ return undefined;
227
+ const candidates = credentialRows.filter((row) => {
228
+ const rowProvider = normalizeOptionalText(row.provider) ?? normalizeOptionalText(row.id);
229
+ return sameAIConfigProviderFamily(rowProvider, provider)
230
+ && (normalizeOptionalText(row.service)?.toLowerCase() ?? 'ai') === 'ai'
231
+ && (normalizeOptionalText(row.status)?.toLowerCase() ?? 'active') === 'active'
232
+ && Boolean(normalizeOptionalText(row.apiKey));
233
+ });
234
+ if (candidates.length === 0)
235
+ return undefined;
236
+ const sortByRotation = (left, right) => {
237
+ const leftLastUsed = normalizeOptionalTimestamp(left.lastUsedAt);
238
+ const rightLastUsed = normalizeOptionalTimestamp(right.lastUsedAt);
239
+ if (leftLastUsed !== rightLastUsed)
240
+ return leftLastUsed - rightLastUsed;
241
+ const leftFailCount = normalizeOptionalInteger(left.failCount);
242
+ const rightFailCount = normalizeOptionalInteger(right.failCount);
243
+ if (leftFailCount !== rightFailCount)
244
+ return leftFailCount - rightFailCount;
245
+ return normalizeAIConfigResourceId(String(left.id ?? left['@id'] ?? ''))
246
+ .localeCompare(normalizeAIConfigResourceId(String(right.id ?? right['@id'] ?? '')));
247
+ };
248
+ const defaults = candidates.filter((row) => normalizeOptionalBoolean(row.isDefault));
249
+ const credential = [...(defaults.length > 0 ? defaults : candidates)].sort(sortByRotation)[0];
250
+ const providerRow = providerRows.find((row) => sameAIConfigProviderFamily(aiConfigProviderRowId(row), provider));
251
+ const apiKey = normalizeOptionalText(credential.apiKey);
252
+ if (!apiKey)
253
+ return undefined;
254
+ return {
255
+ providerId: provider,
256
+ credential,
257
+ credentialId: normalizeAIConfigResourceId(normalizeOptionalText(credential.id) ?? normalizeOptionalText(credential['@id'])),
258
+ credentialLabel: normalizeOptionalText(credential.label),
259
+ apiKey,
260
+ baseUrl: normalizeOptionalText(credential.baseUrl)
261
+ ?? normalizeOptionalText(providerRow?.baseUrl)
262
+ ?? getAIConfigDefaultBaseUrl(provider),
263
+ proxyUrl: normalizeOptionalText(credential.proxyUrl) ?? normalizeOptionalText(providerRow?.proxyUrl),
264
+ isDefault: normalizeOptionalBoolean(credential.isDefault),
265
+ };
266
+ }
267
+ // Compatibility aliases for older app/CLI call sites. New code should prefer
268
+ // `aiConfigProviderRef` / `aiConfigModelRef`, which match current resource schemas.
269
+ export function aiConfigProviderUri(providerId) {
270
+ return aiConfigProviderRef(providerId);
271
+ }
272
+ export function aiConfigModelUri(modelId, providerId) {
273
+ return providerId
274
+ ? aiConfigModelRef(providerId, modelId)
275
+ : normalizeAIConfigResourceId(modelId);
189
276
  }
190
277
  export function buildAIConfigProviderStateMap(options) {
191
278
  const catalog = options.catalog ?? AI_CONFIG_PROVIDER_CATALOG;
@@ -194,23 +281,22 @@ export function buildAIConfigProviderStateMap(options) {
194
281
  const knownIds = collectKnownProviderIds(catalog);
195
282
  const providerMap = new Map();
196
283
  for (const row of options.providerRows) {
197
- const providerId = normalizeAIConfigProviderId(String(row.id ?? row['@id'] ?? ''));
284
+ const providerId = aiConfigProviderRowId(row);
198
285
  if (!providerId)
199
286
  continue;
200
287
  const previous = providerMap.get(providerId) ?? {};
201
288
  providerMap.set(providerId, { ...previous, ...row });
202
289
  }
203
- const credentialMap = new Map();
290
+ const credentialProviderIds = new Set();
204
291
  for (const row of options.credentialRows) {
205
- const providerId = normalizeAIConfigProviderId(String(row.provider ?? row.id ?? ''));
292
+ const providerId = aiConfigCredentialProviderId(row);
206
293
  if (!providerId)
207
294
  continue;
208
- const previous = credentialMap.get(providerId) ?? {};
209
- credentialMap.set(providerId, { ...previous, ...row });
295
+ credentialProviderIds.add(providerId);
210
296
  }
211
297
  const modelMap = new Map();
212
298
  for (const row of options.modelRows) {
213
- const providerId = normalizeAIConfigProviderId(String(row.isProvidedBy ?? ''));
299
+ const providerId = aiConfigModelProviderId(row);
214
300
  if (!providerId)
215
301
  continue;
216
302
  const modelId = normalizeAIConfigModelStorageId(String(row.id ?? row['@id'] ?? ''), providerId);
@@ -231,17 +317,17 @@ export function buildAIConfigProviderStateMap(options) {
231
317
  providerIds.add(entry.id);
232
318
  for (const providerId of providerMap.keys())
233
319
  providerIds.add(providerId);
234
- for (const providerId of credentialMap.keys())
320
+ for (const providerId of credentialProviderIds)
235
321
  providerIds.add(providerId);
236
322
  for (const providerId of modelMap.keys())
237
323
  providerIds.add(providerId);
238
324
  for (const providerId of providerIds) {
239
- if (!knownIds.has(providerId) && !providerMap.has(providerId) && !credentialMap.has(providerId) && !modelMap.has(providerId)) {
325
+ if (!knownIds.has(providerId) && !providerMap.has(providerId) && !credentialProviderIds.has(providerId) && !modelMap.has(providerId)) {
240
326
  continue;
241
327
  }
242
328
  const metadata = resolveCatalogEntry(providerId, catalog) ?? getAIConfigProviderMetadata(providerId);
243
329
  const providerRow = providerMap.get(providerId);
244
- const credentialRow = credentialMap.get(providerId);
330
+ const credentialSelection = selectAIConfigCredential(providerId, options.credentialRows, options.providerRows);
245
331
  const persistedModels = modelMap.get(providerId) ?? [];
246
332
  const models = persistedModels.length > 0 || !fallbackToCatalogModels
247
333
  ? persistedModels
@@ -254,11 +340,12 @@ export function buildAIConfigProviderStateMap(options) {
254
340
  const selectedModelId = normalizeAIConfigModelStorageId(typeof providerRow?.hasModel === 'string' ? providerRow.hasModel : '', providerId) || preferredSelectedModelId(models);
255
341
  states[providerId] = {
256
342
  id: providerId,
257
- enabled: (typeof credentialRow?.status === 'string' ? credentialRow.status : 'inactive') === 'active',
258
- apiKey: typeof credentialRow?.apiKey === 'string' ? credentialRow.apiKey : undefined,
259
- baseUrl: (typeof credentialRow?.baseUrl === 'string' && credentialRow.baseUrl) ||
260
- (typeof providerRow?.baseUrl === 'string' && providerRow.baseUrl) ||
261
- metadata.defaultBaseUrl,
343
+ enabled: Boolean(credentialSelection),
344
+ apiKey: credentialSelection?.apiKey,
345
+ baseUrl: credentialSelection?.baseUrl || (typeof providerRow?.baseUrl === 'string' && providerRow.baseUrl) || metadata.defaultBaseUrl,
346
+ credentialId: credentialSelection?.credentialId,
347
+ credentialLabel: credentialSelection?.credentialLabel,
348
+ credentialIsDefault: credentialSelection?.isDefault,
262
349
  models,
263
350
  selectedModelId: selectedModelId || undefined,
264
351
  };
@@ -268,9 +355,10 @@ export function buildAIConfigProviderStateMap(options) {
268
355
  export function buildAIConfigMutationPlan(input) {
269
356
  const providerId = normalizeAIConfigProviderId(input.providerId);
270
357
  const metadata = getAIConfigProviderMetadata(providerId);
271
- const existingProvider = input.currentProviderRows.find((row) => sameAIConfigProviderFamily(String(row.id ?? row['@id'] ?? ''), providerId));
272
- const existingCredential = input.currentCredentialRows.find((row) => sameAIConfigProviderFamily(String(row.provider ?? row.id ?? ''), providerId));
273
- const existingModels = input.currentModelRows.filter((row) => sameAIConfigProviderFamily(String(row.isProvidedBy ?? ''), providerId));
358
+ const existingProvider = input.currentProviderRows.find((row) => sameAIConfigProviderFamily(aiConfigProviderRowId(row), providerId));
359
+ const existingCredential = selectAIConfigCredential(providerId, input.currentCredentialRows, input.currentProviderRows)?.credential
360
+ ?? input.currentCredentialRows.find((row) => sameAIConfigProviderFamily(aiConfigCredentialProviderId(row), providerId));
361
+ const existingModels = input.currentModelRows.filter((row) => sameAIConfigProviderFamily(aiConfigModelProviderId(row), providerId));
274
362
  const hasConfigUpdate = input.updates.enabled !== undefined || input.updates.apiKey !== undefined || input.updates.baseUrl !== undefined;
275
363
  let providerPayload;
276
364
  let credentialPayload;
@@ -309,6 +397,7 @@ export function buildAIConfigMutationPlan(input) {
309
397
  label: typeof existingCredential?.label === 'string' && existingCredential.label
310
398
  ? existingCredential.label
311
399
  : `${metadata.displayName} Key`,
400
+ isDefault: existingCredential?.isDefault === undefined ? true : Boolean(existingCredential.isDefault),
312
401
  };
313
402
  }
314
403
  if (input.updates.models !== undefined) {
@@ -348,3 +437,24 @@ export function buildAIConfigMutationPlan(input) {
348
437
  modelDeleteIds,
349
438
  };
350
439
  }
440
+ export function buildAIConfigDisconnectPlan(input) {
441
+ const providerId = normalizeAIConfigProviderId(input.providerId);
442
+ const credentialDeleteIds = [];
443
+ const seen = new Set();
444
+ for (const row of input.currentCredentialRows) {
445
+ const rowProvider = normalizeOptionalText(row.provider) ?? normalizeOptionalText(row.id);
446
+ if (!sameAIConfigProviderFamily(rowProvider, providerId)) {
447
+ continue;
448
+ }
449
+ const id = normalizeAIConfigResourceId(normalizeOptionalText(row.id) ?? normalizeOptionalText(row['@id']));
450
+ if (!id || seen.has(id)) {
451
+ continue;
452
+ }
453
+ seen.add(id);
454
+ credentialDeleteIds.push(id);
455
+ }
456
+ return {
457
+ providerId,
458
+ credentialDeleteIds,
459
+ };
460
+ }
@@ -1,3 +1,13 @@
1
+ export declare const aiModelResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
+ displayName: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
4
+ modelType: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, true>;
5
+ isProvidedBy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
6
+ dimension: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"integer", null, false, false>;
7
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, true>;
8
+ createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
9
+ updatedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
10
+ }>>;
1
11
  export declare const aiModelTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
12
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
13
  displayName: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
@@ -8,6 +18,6 @@ export declare const aiModelTable: import("@undefineds.co/drizzle-solid/dist/cor
8
18
  createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
9
19
  updatedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
10
20
  }>>;
11
- export type AIModelRow = typeof aiModelTable.$inferSelect;
12
- export type AIModelInsert = typeof aiModelTable.$inferInsert;
13
- export type AIModelUpdate = typeof aiModelTable.$inferUpdate;
21
+ export type AIModelRow = typeof aiModelResource.$inferSelect;
22
+ export type AIModelInsert = typeof aiModelResource.$inferInsert;
23
+ export type AIModelUpdate = typeof aiModelResource.$inferUpdate;
@@ -1,18 +1,20 @@
1
1
  import { id, integer, podTable, string, timestamp, uri } from "@undefineds.co/drizzle-solid";
2
- import { aiProviderTable } from "./ai-provider.schema.js";
2
+ import { aiProviderResource } from "./ai-provider.schema.js";
3
3
  import { XPOD_AI } from "./namespaces.js";
4
- export const aiModelTable = podTable("aiModel", {
4
+ export const aiModelResource = podTable("aiModel", {
5
5
  id: id("id"),
6
6
  displayName: string("displayName").predicate(XPOD_AI.displayName),
7
7
  modelType: string("modelType").predicate(XPOD_AI.modelType).default("chat"),
8
- isProvidedBy: uri("isProvidedBy").predicate(XPOD_AI.isProvidedBy).link(aiProviderTable),
8
+ isProvidedBy: uri("isProvidedBy").predicate(XPOD_AI.isProvidedBy).link(aiProviderResource),
9
9
  dimension: integer("dimension").predicate(XPOD_AI.dimension),
10
10
  status: string("status").predicate(XPOD_AI.status).default("active"),
11
11
  createdAt: timestamp("createdAt").predicate(XPOD_AI.createdAt).notNull().defaultNow(),
12
12
  updatedAt: timestamp("updatedAt").predicate(XPOD_AI.updatedAt).notNull().defaultNow(),
13
13
  }, {
14
- base: "/settings/ai/models/",
14
+ base: "/settings/providers/",
15
15
  type: XPOD_AI.Model,
16
16
  namespace: XPOD_AI,
17
17
  subjectTemplate: "{isProvidedBy|id}.ttl#{id}",
18
18
  });
19
+ // Compatibility alias. New model code should prefer `aiModelResource`.
20
+ export const aiModelTable = aiModelResource;
@@ -1,9 +1,19 @@
1
+ export declare const aiProviderResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
+ displayName: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
4
+ baseUrl: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
5
+ proxyUrl: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
6
+ hasModel: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
7
+ defaultModel: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
8
+ }>>;
1
9
  export declare const aiProviderTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
10
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
11
+ displayName: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
3
12
  baseUrl: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
4
13
  proxyUrl: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
5
14
  hasModel: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
15
+ defaultModel: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
6
16
  }>>;
7
- export type AIProviderRow = typeof aiProviderTable.$inferSelect;
8
- export type AIProviderInsert = typeof aiProviderTable.$inferInsert;
9
- export type AIProviderUpdate = typeof aiProviderTable.$inferUpdate;
17
+ export type AIProviderRow = typeof aiProviderResource.$inferSelect;
18
+ export type AIProviderInsert = typeof aiProviderResource.$inferInsert;
19
+ export type AIProviderUpdate = typeof aiProviderResource.$inferUpdate;
@@ -1,13 +1,17 @@
1
1
  import { id, podTable, string, uri } from "@undefineds.co/drizzle-solid";
2
2
  import { XPOD_AI } from "./namespaces.js";
3
- export const aiProviderTable = podTable("aiProvider", {
3
+ export const aiProviderResource = podTable("aiProvider", {
4
4
  id: id("id"),
5
+ displayName: string("displayName").predicate(XPOD_AI.displayName),
5
6
  baseUrl: string("baseUrl").predicate(XPOD_AI.baseUrl),
6
7
  proxyUrl: string("proxyUrl").predicate(XPOD_AI.proxyUrl),
7
8
  hasModel: uri("hasModel").predicate(XPOD_AI.hasModel).link("aiModel"),
9
+ defaultModel: uri("defaultModel").predicate(XPOD_AI.defaultModel).link("aiModel"),
8
10
  }, {
9
- base: "/settings/ai/providers.ttl",
11
+ base: "/settings/providers/",
10
12
  type: XPOD_AI.Provider,
11
13
  namespace: XPOD_AI,
12
- subjectTemplate: "#{id}",
14
+ subjectTemplate: "{id}.ttl",
13
15
  });
16
+ // Compatibility alias. New model code should prefer `aiProviderResource`.
17
+ export const aiProviderTable = aiProviderResource;
@@ -0,0 +1,84 @@
1
+ export declare const aiConfigResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
+ embeddingModel: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
4
+ previousModel: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
5
+ migrationStatus: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
6
+ migrationProgress: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"integer", null, false, false>;
7
+ updatedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
8
+ }>>;
9
+ export declare const vectorStoreResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
10
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
11
+ name: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
12
+ container: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
13
+ chunkingStrategy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
14
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
15
+ createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
16
+ lastActiveAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
17
+ }>>;
18
+ export declare const indexedFileResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
19
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
20
+ fileUrl: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
21
+ vectorId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"integer", null, false, false>;
22
+ chunkingStrategy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
23
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
24
+ usageBytes: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"integer", null, false, false>;
25
+ lastError: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
26
+ indexedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
27
+ }>>;
28
+ export declare const agentStatusResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
29
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
30
+ agentId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
31
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
32
+ startedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
33
+ lastActivityAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
34
+ currentTaskId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
35
+ errorMessage: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
36
+ }>>;
37
+ export declare const aiConfigTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
38
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
39
+ embeddingModel: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
40
+ previousModel: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
41
+ migrationStatus: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
42
+ migrationProgress: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"integer", null, false, false>;
43
+ updatedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
44
+ }>>;
45
+ export declare const vectorStoreTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
46
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
47
+ name: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
48
+ container: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
49
+ chunkingStrategy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
50
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
51
+ createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
52
+ lastActiveAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
53
+ }>>;
54
+ export declare const indexedFileTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
55
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
56
+ fileUrl: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
57
+ vectorId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"integer", null, false, false>;
58
+ chunkingStrategy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
59
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
60
+ usageBytes: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"integer", null, false, false>;
61
+ lastError: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
62
+ indexedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
63
+ }>>;
64
+ export declare const agentStatusTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
65
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
66
+ agentId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
67
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
68
+ startedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
69
+ lastActivityAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
70
+ currentTaskId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
71
+ errorMessage: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
72
+ }>>;
73
+ export type AIConfigRow = typeof aiConfigResource.$inferSelect;
74
+ export type AIConfigInsert = typeof aiConfigResource.$inferInsert;
75
+ export type AIConfigUpdate = typeof aiConfigResource.$inferUpdate;
76
+ export type VectorStoreRow = typeof vectorStoreResource.$inferSelect;
77
+ export type VectorStoreInsert = typeof vectorStoreResource.$inferInsert;
78
+ export type VectorStoreUpdate = typeof vectorStoreResource.$inferUpdate;
79
+ export type IndexedFileRow = typeof indexedFileResource.$inferSelect;
80
+ export type IndexedFileInsert = typeof indexedFileResource.$inferInsert;
81
+ export type IndexedFileUpdate = typeof indexedFileResource.$inferUpdate;
82
+ export type AgentStatusRow = typeof agentStatusResource.$inferSelect;
83
+ export type AgentStatusInsert = typeof agentStatusResource.$inferInsert;
84
+ export type AgentStatusUpdate = typeof agentStatusResource.$inferUpdate;
@@ -0,0 +1,64 @@
1
+ import { id, integer, podTable, string, timestamp, uri } from '@undefineds.co/drizzle-solid';
2
+ import { aiModelResource } from './ai-model.schema.js';
3
+ import { XPOD_AI } from './namespaces.js';
4
+ export const aiConfigResource = podTable('aiConfig', {
5
+ id: id('id'),
6
+ embeddingModel: uri('embeddingModel').predicate(XPOD_AI.embeddingModel).link(aiModelResource),
7
+ previousModel: uri('previousModel').predicate(XPOD_AI.previousModel).link(aiModelResource),
8
+ migrationStatus: string('migrationStatus').predicate(XPOD_AI.migrationStatus),
9
+ migrationProgress: integer('migrationProgress').predicate(XPOD_AI.migrationProgress),
10
+ updatedAt: timestamp('updatedAt').predicate(XPOD_AI.updatedAt),
11
+ }, {
12
+ base: '/settings/ai/config.ttl',
13
+ type: XPOD_AI.AIConfig,
14
+ namespace: XPOD_AI,
15
+ subjectTemplate: '#{id}',
16
+ });
17
+ export const vectorStoreResource = podTable('vectorStore', {
18
+ id: id('id'),
19
+ name: string('name').predicate(XPOD_AI.name),
20
+ container: uri('container').predicate(XPOD_AI.container),
21
+ chunkingStrategy: string('chunkingStrategy').predicate(XPOD_AI.chunkingStrategy),
22
+ status: string('status').predicate(XPOD_AI.status),
23
+ createdAt: timestamp('createdAt').predicate(XPOD_AI.createdAt),
24
+ lastActiveAt: timestamp('lastActiveAt').predicate(XPOD_AI.lastActiveAt),
25
+ }, {
26
+ base: '/settings/ai/vector-stores.ttl',
27
+ type: XPOD_AI.VectorStore,
28
+ namespace: XPOD_AI,
29
+ subjectTemplate: '#{id}',
30
+ });
31
+ export const indexedFileResource = podTable('indexedFile', {
32
+ id: id('id'),
33
+ fileUrl: uri('fileUrl').predicate(XPOD_AI.fileUrl),
34
+ vectorId: integer('vectorId').predicate(XPOD_AI.vectorId),
35
+ chunkingStrategy: string('chunkingStrategy').predicate(XPOD_AI.chunkingStrategy),
36
+ status: string('status').predicate(XPOD_AI.status),
37
+ usageBytes: integer('usageBytes').predicate(XPOD_AI.usageBytes),
38
+ lastError: string('lastError').predicate(XPOD_AI.lastError),
39
+ indexedAt: timestamp('indexedAt').predicate(XPOD_AI.indexedAt),
40
+ }, {
41
+ base: '/settings/ai/indexed-files.ttl',
42
+ type: XPOD_AI.IndexedFile,
43
+ namespace: XPOD_AI,
44
+ subjectTemplate: '#{id}',
45
+ });
46
+ export const agentStatusResource = podTable('agentStatus', {
47
+ id: id('id'),
48
+ agentId: string('agentId').predicate(XPOD_AI.agentId),
49
+ status: string('status').predicate(XPOD_AI.status),
50
+ startedAt: timestamp('startedAt').predicate(XPOD_AI.startedAt),
51
+ lastActivityAt: timestamp('lastActivityAt').predicate(XPOD_AI.lastActivityAt),
52
+ currentTaskId: string('currentTaskId').predicate(XPOD_AI.currentTaskId),
53
+ errorMessage: string('errorMessage').predicate(XPOD_AI.errorMessage),
54
+ }, {
55
+ base: '/settings/ai/agent-status.ttl',
56
+ type: XPOD_AI.AgentStatus,
57
+ namespace: XPOD_AI,
58
+ subjectTemplate: '#{id}',
59
+ });
60
+ // Compatibility aliases. New model code should prefer `*Resource`.
61
+ export const aiConfigTable = aiConfigResource;
62
+ export const vectorStoreTable = vectorStoreResource;
63
+ export const indexedFileTable = indexedFileResource;
64
+ export const agentStatusTable = agentStatusResource;
@@ -1,3 +1,4 @@
1
+ export declare function buildApprovalSubjectPath(approvalId: string, createdAt?: Date | string | number): string;
1
2
  export declare function extractApprovalIdFromApprovalRef(approvalRef: string | null | undefined): string | null;
2
3
  export declare const approvalResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
3
4
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;