@commandable/mcp-core 0.2.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.
Files changed (157) hide show
  1. package/LICENSE +10 -0
  2. package/README.md +8 -0
  3. package/dist/config/configApply.d.ts +16 -0
  4. package/dist/config/configApply.d.ts.map +1 -0
  5. package/dist/config/configApply.js +77 -0
  6. package/dist/config/configApply.js.map +1 -0
  7. package/dist/config/configLoader.d.ts +9 -0
  8. package/dist/config/configLoader.d.ts.map +1 -0
  9. package/dist/config/configLoader.js +75 -0
  10. package/dist/config/configLoader.js.map +1 -0
  11. package/dist/config/configSchema.d.ts +45 -0
  12. package/dist/config/configSchema.d.ts.map +1 -0
  13. package/dist/config/configSchema.js +23 -0
  14. package/dist/config/configSchema.js.map +1 -0
  15. package/dist/crypto/encryption.d.ts +3 -0
  16. package/dist/crypto/encryption.d.ts.map +1 -0
  17. package/dist/crypto/encryption.js +29 -0
  18. package/dist/crypto/encryption.js.map +1 -0
  19. package/dist/db/client.d.ts +24 -0
  20. package/dist/db/client.d.ts.map +1 -0
  21. package/dist/db/client.js +50 -0
  22. package/dist/db/client.js.map +1 -0
  23. package/dist/db/credentialStore.d.ts +15 -0
  24. package/dist/db/credentialStore.d.ts.map +1 -0
  25. package/dist/db/credentialStore.js +56 -0
  26. package/dist/db/credentialStore.js.map +1 -0
  27. package/dist/db/integrationStore.d.ts +14 -0
  28. package/dist/db/integrationStore.d.ts.map +1 -0
  29. package/dist/db/integrationStore.js +128 -0
  30. package/dist/db/integrationStore.js.map +1 -0
  31. package/dist/db/integrationTypeConfigStore.d.ts +7 -0
  32. package/dist/db/integrationTypeConfigStore.d.ts.map +1 -0
  33. package/dist/db/integrationTypeConfigStore.js +101 -0
  34. package/dist/db/integrationTypeConfigStore.js.map +1 -0
  35. package/dist/db/migrate.d.ts +3 -0
  36. package/dist/db/migrate.d.ts.map +1 -0
  37. package/dist/db/migrate.js +11 -0
  38. package/dist/db/migrate.js.map +1 -0
  39. package/dist/db/migrations/pg/0000_initial.sql +74 -0
  40. package/dist/db/migrations/pg/meta/_journal.json +13 -0
  41. package/dist/db/migrations/sqlite/0000_initial.sql +74 -0
  42. package/dist/db/migrations/sqlite/meta/_journal.json +13 -0
  43. package/dist/db/schema.d.ts +1863 -0
  44. package/dist/db/schema.d.ts.map +1 -0
  45. package/dist/db/schema.js +133 -0
  46. package/dist/db/schema.js.map +1 -0
  47. package/dist/db/toolDefinitionStore.d.ts +9 -0
  48. package/dist/db/toolDefinitionStore.d.ts.map +1 -0
  49. package/dist/db/toolDefinitionStore.js +117 -0
  50. package/dist/db/toolDefinitionStore.js.map +1 -0
  51. package/dist/errors/httpError.d.ts +6 -0
  52. package/dist/errors/httpError.d.ts.map +1 -0
  53. package/dist/errors/httpError.js +11 -0
  54. package/dist/errors/httpError.js.map +1 -0
  55. package/dist/index.d.ts +34 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +34 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/integrations/actionsFactory.d.ts +16 -0
  60. package/dist/integrations/actionsFactory.d.ts.map +1 -0
  61. package/dist/integrations/actionsFactory.js +98 -0
  62. package/dist/integrations/actionsFactory.js.map +1 -0
  63. package/dist/integrations/catalog.d.ts +8 -0
  64. package/dist/integrations/catalog.d.ts.map +1 -0
  65. package/dist/integrations/catalog.js +45 -0
  66. package/dist/integrations/catalog.js.map +1 -0
  67. package/dist/integrations/customToolFactory.d.ts +13 -0
  68. package/dist/integrations/customToolFactory.d.ts.map +1 -0
  69. package/dist/integrations/customToolFactory.js +31 -0
  70. package/dist/integrations/customToolFactory.js.map +1 -0
  71. package/dist/integrations/dataLoader.d.ts +3 -0
  72. package/dist/integrations/dataLoader.d.ts.map +1 -0
  73. package/dist/integrations/dataLoader.js +2 -0
  74. package/dist/integrations/dataLoader.js.map +1 -0
  75. package/dist/integrations/fileIntegrationTypeConfigStore.d.ts +7 -0
  76. package/dist/integrations/fileIntegrationTypeConfigStore.d.ts.map +1 -0
  77. package/dist/integrations/fileIntegrationTypeConfigStore.js +34 -0
  78. package/dist/integrations/fileIntegrationTypeConfigStore.js.map +1 -0
  79. package/dist/integrations/getIntegration.d.ts +14 -0
  80. package/dist/integrations/getIntegration.d.ts.map +1 -0
  81. package/dist/integrations/getIntegration.js +30 -0
  82. package/dist/integrations/getIntegration.js.map +1 -0
  83. package/dist/integrations/googleServiceAccount.d.ts +6 -0
  84. package/dist/integrations/googleServiceAccount.d.ts.map +1 -0
  85. package/dist/integrations/googleServiceAccount.js +54 -0
  86. package/dist/integrations/googleServiceAccount.js.map +1 -0
  87. package/dist/integrations/health.d.ts +20 -0
  88. package/dist/integrations/health.d.ts.map +1 -0
  89. package/dist/integrations/health.js +43 -0
  90. package/dist/integrations/health.js.map +1 -0
  91. package/dist/integrations/integrationTypeConfigLookup.d.ts +12 -0
  92. package/dist/integrations/integrationTypeConfigLookup.d.ts.map +1 -0
  93. package/dist/integrations/integrationTypeConfigLookup.js +11 -0
  94. package/dist/integrations/integrationTypeConfigLookup.js.map +1 -0
  95. package/dist/integrations/providerRegistry.d.ts +2 -0
  96. package/dist/integrations/providerRegistry.d.ts.map +1 -0
  97. package/dist/integrations/providerRegistry.js +72 -0
  98. package/dist/integrations/providerRegistry.js.map +1 -0
  99. package/dist/integrations/proxy.d.ts +19 -0
  100. package/dist/integrations/proxy.d.ts.map +1 -0
  101. package/dist/integrations/proxy.js +377 -0
  102. package/dist/integrations/proxy.js.map +1 -0
  103. package/dist/integrations/sandbox.d.ts +8 -0
  104. package/dist/integrations/sandbox.d.ts.map +1 -0
  105. package/dist/integrations/sandbox.js +221 -0
  106. package/dist/integrations/sandbox.js.map +1 -0
  107. package/dist/integrations/sandboxUtils.d.ts +15 -0
  108. package/dist/integrations/sandboxUtils.d.ts.map +1 -0
  109. package/dist/integrations/sandboxUtils.js +489 -0
  110. package/dist/integrations/sandboxUtils.js.map +1 -0
  111. package/dist/integrations/tools.d.ts +3 -0
  112. package/dist/integrations/tools.d.ts.map +1 -0
  113. package/dist/integrations/tools.js +70 -0
  114. package/dist/integrations/tools.js.map +1 -0
  115. package/dist/mcp/abilityCatalog.d.ts +51 -0
  116. package/dist/mcp/abilityCatalog.d.ts.map +1 -0
  117. package/dist/mcp/abilityCatalog.js +300 -0
  118. package/dist/mcp/abilityCatalog.js.map +1 -0
  119. package/dist/mcp/auth.d.ts +18 -0
  120. package/dist/mcp/auth.d.ts.map +1 -0
  121. package/dist/mcp/auth.js +45 -0
  122. package/dist/mcp/auth.js.map +1 -0
  123. package/dist/mcp/builder_guide.md +441 -0
  124. package/dist/mcp/commandable_readme.md +29 -0
  125. package/dist/mcp/handlers.d.ts +21 -0
  126. package/dist/mcp/handlers.d.ts.map +1 -0
  127. package/dist/mcp/handlers.js +86 -0
  128. package/dist/mcp/handlers.js.map +1 -0
  129. package/dist/mcp/metaTools.d.ts +79 -0
  130. package/dist/mcp/metaTools.d.ts.map +1 -0
  131. package/dist/mcp/metaTools.js +901 -0
  132. package/dist/mcp/metaTools.js.map +1 -0
  133. package/dist/mcp/server.d.ts +25 -0
  134. package/dist/mcp/server.d.ts.map +1 -0
  135. package/dist/mcp/server.js +14 -0
  136. package/dist/mcp/server.js.map +1 -0
  137. package/dist/mcp/sessionState.d.ts +19 -0
  138. package/dist/mcp/sessionState.d.ts.map +1 -0
  139. package/dist/mcp/sessionState.js +79 -0
  140. package/dist/mcp/sessionState.js.map +1 -0
  141. package/dist/mcp/toolAdapter.d.ts +34 -0
  142. package/dist/mcp/toolAdapter.d.ts.map +1 -0
  143. package/dist/mcp/toolAdapter.js +24 -0
  144. package/dist/mcp/toolAdapter.js.map +1 -0
  145. package/dist/runtime/credentialManager.d.ts +19 -0
  146. package/dist/runtime/credentialManager.d.ts.map +1 -0
  147. package/dist/runtime/credentialManager.js +82 -0
  148. package/dist/runtime/credentialManager.js.map +1 -0
  149. package/dist/runtime/stdioSession.d.ts +8 -0
  150. package/dist/runtime/stdioSession.d.ts.map +1 -0
  151. package/dist/runtime/stdioSession.js +79 -0
  152. package/dist/runtime/stdioSession.js.map +1 -0
  153. package/dist/types.d.ts +92 -0
  154. package/dist/types.d.ts.map +1 -0
  155. package/dist/types.js +2 -0
  156. package/dist/types.js.map +1 -0
  157. package/package.json +64 -0
@@ -0,0 +1,128 @@
1
+ import { and, eq } from 'drizzle-orm';
2
+ import { pgIntegrations, sqliteIntegrations } from './schema.js';
3
+ function t(client) {
4
+ return client.dialect === 'sqlite' ? sqliteIntegrations : pgIntegrations;
5
+ }
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ function db(client) {
8
+ return client.db;
9
+ }
10
+ function parseJson(raw) {
11
+ if (!raw)
12
+ return undefined;
13
+ if (typeof raw === 'string') {
14
+ try {
15
+ return JSON.parse(raw);
16
+ }
17
+ catch {
18
+ return undefined;
19
+ }
20
+ }
21
+ return raw;
22
+ }
23
+ function rowToIntegrationData(r) {
24
+ const healthCheckedAt = r.healthCheckedAt
25
+ ? (r.healthCheckedAt instanceof Date ? r.healthCheckedAt : new Date(r.healthCheckedAt))
26
+ : null;
27
+ return {
28
+ id: r.id,
29
+ spaceId: r.spaceId ?? undefined,
30
+ type: r.type,
31
+ referenceId: r.referenceId,
32
+ label: r.label,
33
+ enabled: r.enabled === 0 ? false : true,
34
+ connectionMethod: r.connectionMethod ?? undefined,
35
+ connectionId: r.connectionId ?? undefined,
36
+ credentialId: r.credentialId ?? undefined,
37
+ credentialVariant: r.credentialVariant ?? undefined,
38
+ enabledToolsets: parseJson(r.enabledToolsets),
39
+ maxScope: r.maxScope ?? undefined,
40
+ disabledTools: parseJson(r.disabledTools),
41
+ healthStatus: r.healthStatus ?? null,
42
+ healthCheckedAt,
43
+ };
44
+ }
45
+ export async function listIntegrations(client, spaceId) {
46
+ const table = t(client);
47
+ let query = db(client).select().from(table);
48
+ if (spaceId)
49
+ query = query.where(eq(table.spaceId, spaceId));
50
+ const rows = await query;
51
+ return rows.map(rowToIntegrationData);
52
+ }
53
+ export async function getIntegrationById(client, id) {
54
+ const table = t(client);
55
+ const rows = await db(client)
56
+ .select()
57
+ .from(table)
58
+ .where(eq(table.id, id))
59
+ .limit(1);
60
+ return rows[0] ? rowToIntegrationData(rows[0]) : null;
61
+ }
62
+ export async function upsertIntegration(client, integration) {
63
+ const table = t(client);
64
+ const now = new Date();
65
+ const enabled = integration.enabled === false ? 0 : 1;
66
+ await db(client)
67
+ .insert(table)
68
+ .values({
69
+ id: integration.id,
70
+ spaceId: integration.spaceId ?? null,
71
+ type: integration.type,
72
+ referenceId: integration.referenceId,
73
+ label: integration.label,
74
+ enabled,
75
+ connectionMethod: integration.connectionMethod ?? null,
76
+ connectionId: integration.connectionId ?? null,
77
+ credentialId: integration.credentialId ?? null,
78
+ credentialVariant: integration.credentialVariant ?? null,
79
+ enabledToolsets: integration.enabledToolsets ? JSON.stringify(integration.enabledToolsets) : null,
80
+ maxScope: integration.maxScope ?? null,
81
+ disabledTools: integration.disabledTools?.length ? JSON.stringify(integration.disabledTools) : null,
82
+ createdAt: now,
83
+ })
84
+ .onConflictDoUpdate({
85
+ target: table.id,
86
+ set: {
87
+ spaceId: integration.spaceId ?? null,
88
+ type: integration.type,
89
+ referenceId: integration.referenceId,
90
+ label: integration.label,
91
+ enabled,
92
+ connectionMethod: integration.connectionMethod ?? null,
93
+ connectionId: integration.connectionId ?? null,
94
+ credentialId: integration.credentialId ?? null,
95
+ credentialVariant: integration.credentialVariant ?? null,
96
+ enabledToolsets: integration.enabledToolsets ? JSON.stringify(integration.enabledToolsets) : null,
97
+ maxScope: integration.maxScope ?? null,
98
+ disabledTools: integration.disabledTools?.length ? JSON.stringify(integration.disabledTools) : null,
99
+ },
100
+ });
101
+ }
102
+ export async function deleteIntegrationById(client, id) {
103
+ const table = t(client);
104
+ const result = await db(client)
105
+ .delete(table)
106
+ .where(eq(table.id, id));
107
+ return Number(result?.rowsAffected ?? result?.rowCount ?? 0);
108
+ }
109
+ /** Update only credential linkage fields — does not clobber toolsets/permissions. */
110
+ export async function updateIntegrationCredentials(client, integrationId, fields) {
111
+ const table = t(client);
112
+ await db(client)
113
+ .update(table)
114
+ .set({
115
+ connectionMethod: fields.connectionMethod ?? null,
116
+ credentialId: fields.credentialId ?? null,
117
+ credentialVariant: fields.credentialVariant ?? null,
118
+ })
119
+ .where(eq(table.id, integrationId));
120
+ }
121
+ export async function updateIntegrationHealth(client, integrationId, healthStatus, checkedAt) {
122
+ const table = t(client);
123
+ await db(client)
124
+ .update(table)
125
+ .set({ healthStatus, healthCheckedAt: checkedAt ?? new Date() })
126
+ .where(and(eq(table.id, integrationId)));
127
+ }
128
+ //# sourceMappingURL=integrationStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrationStore.js","sourceRoot":"","sources":["../../src/db/integrationStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { DbClient } from './client.js';
2
+ import type { IntegrationTypeConfig } from '../types.js';
3
+ export declare function listIntegrationTypeConfigs(client: DbClient, spaceId: string): Promise<IntegrationTypeConfig[]>;
4
+ export declare function getIntegrationTypeConfig(client: DbClient, spaceId: string, typeSlug: string): Promise<IntegrationTypeConfig | null>;
5
+ export declare function upsertIntegrationTypeConfig(client: DbClient, cfg: Required<Pick<IntegrationTypeConfig, 'id' | 'spaceId'>> & Omit<IntegrationTypeConfig, 'createdAt' | 'updatedAt'>): Promise<void>;
6
+ export declare function deleteIntegrationTypeConfig(client: DbClient, spaceId: string, typeSlug: string): Promise<number>;
7
+ //# sourceMappingURL=integrationTypeConfigStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrationTypeConfigStore.d.ts","sourceRoot":"","sources":["../../src/db/integrationTypeConfigStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,EAAgC,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAwDtF,wBAAsB,0BAA0B,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAGpH;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAQvC;AAED,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,QAAQ,EAChB,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,WAAW,GAAG,WAAW,CAAC,GACpH,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAMjB"}
@@ -0,0 +1,101 @@
1
+ import { and, eq } from 'drizzle-orm';
2
+ import { pgIntegrationTypeConfigs, sqliteIntegrationTypeConfigs } from './schema.js';
3
+ function t(client) {
4
+ return client.dialect === 'sqlite' ? sqliteIntegrationTypeConfigs : pgIntegrationTypeConfigs;
5
+ }
6
+ function db(client) {
7
+ return client.db;
8
+ }
9
+ function parseJson(raw) {
10
+ if (raw == null)
11
+ return null;
12
+ if (typeof raw === 'string') {
13
+ try {
14
+ return JSON.parse(raw);
15
+ }
16
+ catch {
17
+ return null;
18
+ }
19
+ }
20
+ return raw;
21
+ }
22
+ function normalizeHintMarkdown(value) {
23
+ return value
24
+ .replace(/\r\n/g, '\n')
25
+ .replace(/\\r\\n/g, '\n')
26
+ .replace(/\\n/g, '\n');
27
+ }
28
+ function normalizeVariants(variants) {
29
+ return Object.fromEntries(Object.entries(variants).map(([key, variant]) => [
30
+ key,
31
+ {
32
+ ...variant,
33
+ hintMarkdown: typeof variant.hintMarkdown === 'string'
34
+ ? normalizeHintMarkdown(variant.hintMarkdown)
35
+ : variant.hintMarkdown,
36
+ },
37
+ ]));
38
+ }
39
+ function rowToIntegrationTypeConfig(r) {
40
+ const variants = parseJson(r.variantsJson) || {};
41
+ return {
42
+ id: r.id,
43
+ spaceId: r.spaceId,
44
+ typeSlug: r.typeSlug,
45
+ label: r.label,
46
+ defaultVariant: r.defaultVariant,
47
+ variants: normalizeVariants(variants),
48
+ createdAt: r.createdAt instanceof Date ? r.createdAt : (r.createdAt ? new Date(r.createdAt) : undefined),
49
+ updatedAt: r.updatedAt instanceof Date ? r.updatedAt : (r.updatedAt ? new Date(r.updatedAt) : undefined),
50
+ };
51
+ }
52
+ export async function listIntegrationTypeConfigs(client, spaceId) {
53
+ const rows = await db(client).select().from(t(client)).where(eq(t(client).spaceId, spaceId));
54
+ return rows.map(rowToIntegrationTypeConfig);
55
+ }
56
+ export async function getIntegrationTypeConfig(client, spaceId, typeSlug) {
57
+ const table = t(client);
58
+ const rows = await db(client)
59
+ .select()
60
+ .from(table)
61
+ .where(and(eq(table.spaceId, spaceId), eq(table.typeSlug, typeSlug)))
62
+ .limit(1);
63
+ return rows[0] ? rowToIntegrationTypeConfig(rows[0]) : null;
64
+ }
65
+ export async function upsertIntegrationTypeConfig(client, cfg) {
66
+ const table = t(client);
67
+ const now = new Date();
68
+ const variantsValue = client.dialect === 'sqlite'
69
+ ? JSON.stringify(cfg.variants ?? {})
70
+ : (cfg.variants ?? {});
71
+ await db(client)
72
+ .insert(table)
73
+ .values({
74
+ id: cfg.id,
75
+ spaceId: cfg.spaceId,
76
+ typeSlug: cfg.typeSlug,
77
+ label: cfg.label,
78
+ defaultVariant: cfg.defaultVariant,
79
+ variantsJson: variantsValue,
80
+ createdAt: now,
81
+ updatedAt: now,
82
+ })
83
+ .onConflictDoUpdate({
84
+ target: [table.spaceId, table.typeSlug],
85
+ set: {
86
+ typeSlug: cfg.typeSlug,
87
+ label: cfg.label,
88
+ defaultVariant: cfg.defaultVariant,
89
+ variantsJson: variantsValue,
90
+ updatedAt: now,
91
+ },
92
+ });
93
+ }
94
+ export async function deleteIntegrationTypeConfig(client, spaceId, typeSlug) {
95
+ const table = t(client);
96
+ const result = await db(client)
97
+ .delete(table)
98
+ .where(and(eq(table.spaceId, spaceId), eq(table.typeSlug, typeSlug)));
99
+ return Number(result?.rowsAffected ?? result?.rowCount ?? 0);
100
+ }
101
+ //# sourceMappingURL=integrationTypeConfigStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrationTypeConfigStore.js","sourceRoot":"","sources":["../../src/db/integrationTypeConfigStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DbClient } from './client.js';
2
+ export declare function ensureSchema(client: DbClient): Promise<void>;
3
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,wBAAsB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAOlE"}
@@ -0,0 +1,11 @@
1
+ import { migrate as migrateSqlite } from 'drizzle-orm/better-sqlite3/migrator';
2
+ import { migrate as migratePg } from 'drizzle-orm/node-postgres/migrator';
3
+ export async function ensureSchema(client) {
4
+ const dialect = client.dialect === 'sqlite' ? 'sqlite' : 'pg';
5
+ const migrationsFolder = new URL(`./${dialect}`, new URL('./migrations/', import.meta.url)).pathname;
6
+ if (client.dialect === 'sqlite')
7
+ migrateSqlite(client.db, { migrationsFolder });
8
+ else
9
+ await migratePg(client.db, { migrationsFolder });
10
+ }
11
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oCAAoC,CAAA;AAGzE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAgB;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,KAAK,OAAO,EAAE,EAAE,IAAI,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAA;IACpG,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ;QAC7B,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAA;;QAE9C,MAAM,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAA;AACpD,CAAC"}
@@ -0,0 +1,74 @@
1
+ CREATE TABLE IF NOT EXISTS "integrations" (
2
+ "id" TEXT PRIMARY KEY NOT NULL,
3
+ "space_id" TEXT,
4
+ "type" TEXT NOT NULL,
5
+ "reference_id" TEXT NOT NULL,
6
+ "label" TEXT NOT NULL,
7
+ "enabled" INTEGER NOT NULL DEFAULT 1,
8
+ "connection_method" TEXT,
9
+ "connection_id" TEXT,
10
+ "credential_id" TEXT,
11
+ "credential_variant" TEXT,
12
+ "enabled_toolsets" TEXT,
13
+ "max_scope" TEXT,
14
+ "disabled_tools" TEXT,
15
+ "health_status" TEXT,
16
+ "health_checked_at" TIMESTAMPTZ,
17
+ "created_at" TIMESTAMPTZ NOT NULL DEFAULT NOW()
18
+ );
19
+
20
+ CREATE TABLE IF NOT EXISTS "credentials" (
21
+ "space_id" TEXT NOT NULL,
22
+ "id" TEXT NOT NULL,
23
+ "ciphertext" TEXT NOT NULL,
24
+ "created_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
25
+ "updated_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
26
+ PRIMARY KEY("space_id", "id")
27
+ );
28
+
29
+ CREATE TABLE IF NOT EXISTS "api_keys" (
30
+ "id" TEXT PRIMARY KEY NOT NULL,
31
+ "name" TEXT NOT NULL,
32
+ "key_hash" TEXT NOT NULL,
33
+ "scopes_json" JSONB,
34
+ "created_at" TIMESTAMPTZ NOT NULL DEFAULT NOW()
35
+ );
36
+
37
+ CREATE TABLE IF NOT EXISTS "users" (
38
+ "id" TEXT PRIMARY KEY NOT NULL,
39
+ "email" TEXT NOT NULL,
40
+ "password_hash" TEXT,
41
+ "created_at" TIMESTAMPTZ NOT NULL DEFAULT NOW()
42
+ );
43
+
44
+ CREATE TABLE IF NOT EXISTS "integration_type_configs" (
45
+ "id" TEXT PRIMARY KEY NOT NULL,
46
+ "space_id" TEXT NOT NULL,
47
+ "type_slug" TEXT NOT NULL,
48
+ "label" TEXT NOT NULL,
49
+ "default_variant" TEXT NOT NULL,
50
+ "variants_json" JSONB NOT NULL,
51
+ "created_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
52
+ "updated_at" TIMESTAMPTZ NOT NULL DEFAULT NOW()
53
+ );
54
+
55
+ CREATE UNIQUE INDEX IF NOT EXISTS "integration_type_configs__space_type_slug"
56
+ ON "integration_type_configs"("space_id", "type_slug");
57
+
58
+ CREATE TABLE IF NOT EXISTS "tool_definitions" (
59
+ "id" TEXT PRIMARY KEY NOT NULL,
60
+ "space_id" TEXT NOT NULL,
61
+ "integration_id" TEXT NOT NULL,
62
+ "name" TEXT NOT NULL,
63
+ "display_name" TEXT,
64
+ "description" TEXT NOT NULL,
65
+ "scope" TEXT NOT NULL,
66
+ "input_schema_json" JSONB NOT NULL,
67
+ "handler_code" TEXT NOT NULL,
68
+ "utils_json" JSONB,
69
+ "created_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
70
+ "updated_at" TIMESTAMPTZ NOT NULL DEFAULT NOW()
71
+ );
72
+
73
+ CREATE UNIQUE INDEX IF NOT EXISTS "tool_definitions__space_integration_name"
74
+ ON "tool_definitions"("space_id", "integration_id", "name");
@@ -0,0 +1,13 @@
1
+ {
2
+ "version": "7",
3
+ "dialect": "postgresql",
4
+ "entries": [
5
+ {
6
+ "idx": 0,
7
+ "version": "7",
8
+ "when": 1741000000000,
9
+ "tag": "0000_initial",
10
+ "breakpoints": true
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,74 @@
1
+ CREATE TABLE IF NOT EXISTS `integrations` (
2
+ `id` TEXT PRIMARY KEY NOT NULL,
3
+ `space_id` TEXT,
4
+ `type` TEXT NOT NULL,
5
+ `reference_id` TEXT NOT NULL,
6
+ `label` TEXT NOT NULL,
7
+ `enabled` INTEGER NOT NULL DEFAULT 1,
8
+ `connection_method` TEXT,
9
+ `connection_id` TEXT,
10
+ `credential_id` TEXT,
11
+ `credential_variant` TEXT,
12
+ `enabled_toolsets` TEXT,
13
+ `max_scope` TEXT,
14
+ `disabled_tools` TEXT,
15
+ `health_status` TEXT,
16
+ `health_checked_at` INTEGER,
17
+ `created_at` INTEGER NOT NULL
18
+ );
19
+ --> statement-breakpoint
20
+ CREATE TABLE IF NOT EXISTS `credentials` (
21
+ `space_id` TEXT NOT NULL,
22
+ `id` TEXT NOT NULL,
23
+ `ciphertext` TEXT NOT NULL,
24
+ `created_at` INTEGER NOT NULL,
25
+ `updated_at` INTEGER NOT NULL,
26
+ PRIMARY KEY(`space_id`, `id`)
27
+ );
28
+ --> statement-breakpoint
29
+ CREATE TABLE IF NOT EXISTS `api_keys` (
30
+ `id` TEXT PRIMARY KEY NOT NULL,
31
+ `name` TEXT NOT NULL,
32
+ `key_hash` TEXT NOT NULL,
33
+ `scopes_json` TEXT,
34
+ `created_at` INTEGER NOT NULL
35
+ );
36
+ --> statement-breakpoint
37
+ CREATE TABLE IF NOT EXISTS `users` (
38
+ `id` TEXT PRIMARY KEY NOT NULL,
39
+ `email` TEXT NOT NULL,
40
+ `password_hash` TEXT,
41
+ `created_at` INTEGER NOT NULL
42
+ );
43
+ --> statement-breakpoint
44
+ CREATE TABLE IF NOT EXISTS `integration_type_configs` (
45
+ `id` TEXT PRIMARY KEY NOT NULL,
46
+ `space_id` TEXT NOT NULL,
47
+ `type_slug` TEXT NOT NULL,
48
+ `label` TEXT NOT NULL,
49
+ `default_variant` TEXT NOT NULL,
50
+ `variants_json` TEXT NOT NULL,
51
+ `created_at` INTEGER NOT NULL,
52
+ `updated_at` INTEGER NOT NULL
53
+ );
54
+ --> statement-breakpoint
55
+ CREATE UNIQUE INDEX IF NOT EXISTS `integration_type_configs__space_type_slug`
56
+ ON `integration_type_configs`(`space_id`, `type_slug`);
57
+ --> statement-breakpoint
58
+ CREATE TABLE IF NOT EXISTS `tool_definitions` (
59
+ `id` TEXT PRIMARY KEY NOT NULL,
60
+ `space_id` TEXT NOT NULL,
61
+ `integration_id` TEXT NOT NULL,
62
+ `name` TEXT NOT NULL,
63
+ `display_name` TEXT,
64
+ `description` TEXT NOT NULL,
65
+ `scope` TEXT NOT NULL,
66
+ `input_schema_json` TEXT NOT NULL,
67
+ `handler_code` TEXT NOT NULL,
68
+ `utils_json` TEXT,
69
+ `created_at` INTEGER NOT NULL,
70
+ `updated_at` INTEGER NOT NULL
71
+ );
72
+ --> statement-breakpoint
73
+ CREATE UNIQUE INDEX IF NOT EXISTS `tool_definitions__space_integration_name`
74
+ ON `tool_definitions`(`space_id`, `integration_id`, `name`);
@@ -0,0 +1,13 @@
1
+ {
2
+ "version": "7",
3
+ "dialect": "sqlite",
4
+ "entries": [
5
+ {
6
+ "idx": 0,
7
+ "version": "7",
8
+ "when": 1741000000000,
9
+ "tag": "0000_initial",
10
+ "breakpoints": true
11
+ }
12
+ ]
13
+ }