synomem 0.1.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 (130) hide show
  1. package/AGENTS.md +42 -0
  2. package/ARCHITECTURE.md +126 -0
  3. package/CHANGELOG.md +35 -0
  4. package/CODE_OF_CONDUCT.md +29 -0
  5. package/CONTRIBUTING.md +48 -0
  6. package/LICENSE +21 -0
  7. package/README.md +247 -0
  8. package/SECURITY.md +117 -0
  9. package/dist/backend.d.ts +9 -0
  10. package/dist/backend.d.ts.map +1 -0
  11. package/dist/backend.js +60 -0
  12. package/dist/backend.js.map +1 -0
  13. package/dist/cli.d.ts +34 -0
  14. package/dist/cli.d.ts.map +1 -0
  15. package/dist/cli.js +1040 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/client.d.ts +168 -0
  18. package/dist/client.d.ts.map +1 -0
  19. package/dist/client.js +1031 -0
  20. package/dist/client.js.map +1 -0
  21. package/dist/config.d.ts +33 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/config.js +153 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/credentials.d.ts +36 -0
  26. package/dist/credentials.d.ts.map +1 -0
  27. package/dist/credentials.js +127 -0
  28. package/dist/credentials.js.map +1 -0
  29. package/dist/errors.d.ts +9 -0
  30. package/dist/errors.d.ts.map +1 -0
  31. package/dist/errors.js +60 -0
  32. package/dist/errors.js.map +1 -0
  33. package/dist/fs-utils.d.ts +7 -0
  34. package/dist/fs-utils.d.ts.map +1 -0
  35. package/dist/fs-utils.js +68 -0
  36. package/dist/fs-utils.js.map +1 -0
  37. package/dist/import.d.ts +655 -0
  38. package/dist/import.d.ts.map +1 -0
  39. package/dist/import.js +226 -0
  40. package/dist/import.js.map +1 -0
  41. package/dist/index.d.ts +20 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +11 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/mcp/index.d.ts +14 -0
  46. package/dist/mcp/index.d.ts.map +1 -0
  47. package/dist/mcp/index.js +698 -0
  48. package/dist/mcp/index.js.map +1 -0
  49. package/dist/mcp-server.d.ts +3 -0
  50. package/dist/mcp-server.d.ts.map +1 -0
  51. package/dist/mcp-server.js +45 -0
  52. package/dist/mcp-server.js.map +1 -0
  53. package/dist/oauth.d.ts +27 -0
  54. package/dist/oauth.d.ts.map +1 -0
  55. package/dist/oauth.js +201 -0
  56. package/dist/oauth.js.map +1 -0
  57. package/dist/ports/projections.d.ts +6 -0
  58. package/dist/ports/projections.d.ts.map +1 -0
  59. package/dist/ports/projections.js +2 -0
  60. package/dist/ports/projections.js.map +1 -0
  61. package/dist/ports/repository.d.ts +31 -0
  62. package/dist/ports/repository.d.ts.map +1 -0
  63. package/dist/ports/repository.js +2 -0
  64. package/dist/ports/repository.js.map +1 -0
  65. package/dist/projections.d.ts +24 -0
  66. package/dist/projections.d.ts.map +1 -0
  67. package/dist/projections.js +531 -0
  68. package/dist/projections.js.map +1 -0
  69. package/dist/remote.d.ts +120 -0
  70. package/dist/remote.d.ts.map +1 -0
  71. package/dist/remote.js +286 -0
  72. package/dist/remote.js.map +1 -0
  73. package/dist/schemas.d.ts +901 -0
  74. package/dist/schemas.d.ts.map +1 -0
  75. package/dist/schemas.js +424 -0
  76. package/dist/schemas.js.map +1 -0
  77. package/dist/service.d.ts +126 -0
  78. package/dist/service.d.ts.map +1 -0
  79. package/dist/service.js +2 -0
  80. package/dist/service.js.map +1 -0
  81. package/dist/skill-install.d.ts +34 -0
  82. package/dist/skill-install.d.ts.map +1 -0
  83. package/dist/skill-install.js +256 -0
  84. package/dist/skill-install.js.map +1 -0
  85. package/dist/storage.d.ts +94 -0
  86. package/dist/storage.d.ts.map +1 -0
  87. package/dist/storage.js +1229 -0
  88. package/dist/storage.js.map +1 -0
  89. package/dist/types.d.ts +442 -0
  90. package/dist/types.d.ts.map +1 -0
  91. package/dist/types.js +2 -0
  92. package/dist/types.js.map +1 -0
  93. package/dist/version.d.ts +3 -0
  94. package/dist/version.d.ts.map +1 -0
  95. package/dist/version.js +14 -0
  96. package/dist/version.js.map +1 -0
  97. package/docs/cli.md +180 -0
  98. package/docs/examples.md +70 -0
  99. package/docs/mcp.md +96 -0
  100. package/docs/recovery.md +45 -0
  101. package/docs/releasing.md +61 -0
  102. package/docs/skill.md +93 -0
  103. package/docs/storage-format.md +83 -0
  104. package/openapi/synomem-v1.yaml +674 -0
  105. package/package.json +100 -0
  106. package/skills/synomem/SKILL.md +71 -0
  107. package/skills/synomem/agents/openai.yaml +8 -0
  108. package/skills/synomem/references/examples.md +28 -0
  109. package/src/backend.ts +91 -0
  110. package/src/cli.ts +1623 -0
  111. package/src/client.ts +1261 -0
  112. package/src/config.ts +170 -0
  113. package/src/credentials.ts +194 -0
  114. package/src/errors.ts +64 -0
  115. package/src/fs-utils.ts +85 -0
  116. package/src/import.ts +284 -0
  117. package/src/index.ts +61 -0
  118. package/src/mcp/index.ts +973 -0
  119. package/src/mcp-server.ts +46 -0
  120. package/src/oauth.ts +252 -0
  121. package/src/ports/projections.ts +6 -0
  122. package/src/ports/repository.ts +67 -0
  123. package/src/projections.ts +624 -0
  124. package/src/remote.ts +516 -0
  125. package/src/schemas.ts +457 -0
  126. package/src/service.ts +140 -0
  127. package/src/skill-install.ts +332 -0
  128. package/src/storage.ts +1603 -0
  129. package/src/types.ts +458 -0
  130. package/src/version.ts +16 -0
package/dist/import.js ADDED
@@ -0,0 +1,226 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { existsSync, mkdtempSync, rmSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
4
+ import { join, resolve } from 'node:path';
5
+ import { DatabaseSync } from 'node:sqlite';
6
+ import { z } from 'zod';
7
+ import { SynomemClient } from './client.js';
8
+ import { readSynomemConfig } from './backend.js';
9
+ import { asSynomemError, SynomemError } from './errors.js';
10
+ import { eventSchema, profileSchema } from './schemas.js';
11
+ export const importBundleSchema = z
12
+ .object({
13
+ version: z.literal(1),
14
+ sourceWorkspaceId: z.string().trim().min(1).max(100),
15
+ checksum: z.string().regex(/^[a-f0-9]{64}$/),
16
+ events: z.array(eventSchema).max(100_000),
17
+ profiles: z.array(profileSchema).max(10_000),
18
+ })
19
+ .strict();
20
+ function content(bundle) {
21
+ return JSON.stringify(bundle);
22
+ }
23
+ export function importBundleChecksum(bundle) {
24
+ return createHash('sha256').update(content(bundle)).digest('hex');
25
+ }
26
+ export function validateImportBundle(value, maximumBytes = 5 * 1024 * 1024) {
27
+ const parsed = importBundleSchema.parse(value);
28
+ const unsigned = {
29
+ version: parsed.version,
30
+ sourceWorkspaceId: parsed.sourceWorkspaceId,
31
+ events: parsed.events,
32
+ profiles: parsed.profiles,
33
+ };
34
+ const bytes = Buffer.byteLength(content(unsigned));
35
+ if (bytes > maximumBytes) {
36
+ throw new SynomemError('INVALID_INPUT', 'The import bundle exceeds the 5 MiB limit.');
37
+ }
38
+ if (importBundleChecksum(unsigned) !== parsed.checksum) {
39
+ throw new SynomemError('INVALID_INPUT', 'The import bundle checksum is invalid.');
40
+ }
41
+ const eventIds = new Set();
42
+ const versions = new Map();
43
+ for (const event of parsed.events) {
44
+ if (event.workspaceId !== parsed.sourceWorkspaceId) {
45
+ throw new SynomemError('INVALID_INPUT', 'An event has the wrong source workspace identity.');
46
+ }
47
+ if (eventIds.has(event.id))
48
+ throw new SynomemError('INVALID_INPUT', 'Event IDs must be unique.');
49
+ eventIds.add(event.id);
50
+ const expected = (versions.get(event.aggregateId) ?? 0) + 1;
51
+ if (event.aggregateVersion !== expected) {
52
+ throw new SynomemError('INVALID_INPUT', `Aggregate ${event.aggregateId} has a non-contiguous version history.`);
53
+ }
54
+ versions.set(event.aggregateId, expected);
55
+ }
56
+ const profileIds = new Set(parsed.profiles.map((profile) => profile.id));
57
+ if (profileIds.size !== parsed.profiles.length) {
58
+ throw new SynomemError('INVALID_INPUT', 'Imported agent profiles must have unique IDs.');
59
+ }
60
+ for (const profile of parsed.profiles) {
61
+ if (!parsed.events.some((event) => event.type === 'agent.created' && event.agent.id === profile.id)) {
62
+ throw new SynomemError('INVALID_INPUT', `Agent profile ${profile.id} has no canonical creation event.`);
63
+ }
64
+ }
65
+ return parsed;
66
+ }
67
+ /** Create a consistent, read-only SQLite snapshot and derive an import bundle from that snapshot. */
68
+ export async function createLocalImportBundle(fromHome) {
69
+ const sourceHome = resolve(fromHome);
70
+ const config = readSynomemConfig(sourceHome, {});
71
+ if (!config)
72
+ throw new SynomemError('CONFIG_INVALID', 'The source Synomem home is not initialized.');
73
+ const client = new SynomemClient({
74
+ home: sourceHome,
75
+ readOnly: true,
76
+ config: { backend: { kind: 'local' } },
77
+ });
78
+ await client.init();
79
+ const temporaryDirectory = mkdtempSync(join(tmpdir(), 'synomem-import-'));
80
+ const snapshotPath = join(temporaryDirectory, 'snapshot.sqlite3');
81
+ try {
82
+ client.storage.db().prepare('VACUUM INTO ?').run(snapshotPath);
83
+ const snapshot = new DatabaseSync(snapshotPath, {
84
+ readOnly: true,
85
+ enableForeignKeyConstraints: true,
86
+ });
87
+ try {
88
+ const integrity = snapshot.prepare('PRAGMA integrity_check').get();
89
+ if (Object.values(integrity)[0] !== 'ok') {
90
+ throw new SynomemError('DATABASE_CORRUPT', 'The local import snapshot failed integrity check.');
91
+ }
92
+ const rows = snapshot
93
+ .prepare('SELECT id,payload FROM events ORDER BY sequence')
94
+ .all();
95
+ const events = [];
96
+ for (const row of rows) {
97
+ try {
98
+ events.push(eventSchema.parse(JSON.parse(row.payload)));
99
+ }
100
+ catch (error) {
101
+ throw new SynomemError('UNSUPPORTED_EVENT', `Local event ${row.id} cannot be imported; use raw JSONL export for recovery.`, { eventIds: [row.id], cause: asSynomemError(error).code });
102
+ }
103
+ }
104
+ const profiles = snapshot
105
+ .prepare('SELECT profile_json FROM agents ORDER BY id')
106
+ .all()
107
+ .map((row) => profileSchema.parse(JSON.parse(row.profile_json)));
108
+ const unsigned = {
109
+ version: 1,
110
+ sourceWorkspaceId: config.workspaceId,
111
+ events,
112
+ profiles,
113
+ };
114
+ return validateImportBundle({ ...unsigned, checksum: importBundleChecksum(unsigned) });
115
+ }
116
+ finally {
117
+ snapshot.close();
118
+ }
119
+ }
120
+ finally {
121
+ await client.close();
122
+ if (existsSync(temporaryDirectory))
123
+ rmSync(temporaryDirectory, { recursive: true });
124
+ }
125
+ }
126
+ export class RemoteImportClient {
127
+ baseUrl;
128
+ workspaceId;
129
+ credentialProvider;
130
+ fetchImplementation;
131
+ constructor(options) {
132
+ this.baseUrl = new URL(options.baseUrl);
133
+ const loopback = ['localhost', '127.0.0.1', '[::1]'].includes(this.baseUrl.hostname);
134
+ if (this.baseUrl.protocol !== 'https:' && !(this.baseUrl.protocol === 'http:' && loopback)) {
135
+ throw new SynomemError('CONFIG_INVALID', 'Remote imports require HTTPS.');
136
+ }
137
+ if (this.baseUrl.pathname !== '/' ||
138
+ this.baseUrl.username ||
139
+ this.baseUrl.password ||
140
+ this.baseUrl.search ||
141
+ this.baseUrl.hash) {
142
+ throw new SynomemError('CONFIG_INVALID', 'Remote import baseUrl must be an origin.');
143
+ }
144
+ this.workspaceId = options.workspaceId;
145
+ this.credentialProvider = options.credentialProvider;
146
+ this.fetchImplementation = options.fetch ?? fetch;
147
+ }
148
+ preview(bundle) {
149
+ return this.request('preview', { bundle });
150
+ }
151
+ confirm(bundle, planId) {
152
+ return this.request('confirm', { bundle, planId });
153
+ }
154
+ async request(action, payload) {
155
+ const token = await this.credentialProvider.getAccessToken();
156
+ if (!token)
157
+ throw new SynomemError('AUTH_REQUIRED', 'Remote authentication is required.');
158
+ const url = new URL(`v1/workspaces/${encodeURIComponent(this.workspaceId)}/imports/${action}`, this.baseUrl);
159
+ let response;
160
+ try {
161
+ response = await this.fetchImplementation(url, {
162
+ method: 'POST',
163
+ redirect: 'manual',
164
+ signal: AbortSignal.timeout(60_000),
165
+ headers: {
166
+ accept: 'application/json',
167
+ authorization: `Bearer ${token}`,
168
+ 'content-type': 'application/json',
169
+ },
170
+ body: JSON.stringify(payload),
171
+ });
172
+ }
173
+ catch (error) {
174
+ throw new SynomemError('REMOTE_UNAVAILABLE', 'The remote import request failed.', {
175
+ cause: error instanceof Error ? error.name : 'network_error',
176
+ });
177
+ }
178
+ if (response.status >= 300 && response.status < 400) {
179
+ throw new SynomemError('REMOTE_PROTOCOL', 'Remote redirects are not followed.');
180
+ }
181
+ if (!response.body)
182
+ throw new SynomemError('REMOTE_PROTOCOL', 'Remote import returned no body.');
183
+ const reader = response.body.getReader();
184
+ const chunks = [];
185
+ let length = 0;
186
+ while (true) {
187
+ const item = await reader.read();
188
+ if (item.done)
189
+ break;
190
+ if (!item.value)
191
+ throw new SynomemError('REMOTE_PROTOCOL', 'Remote import returned a malformed stream.');
192
+ length += item.value.byteLength;
193
+ if (length > 1024 * 1024) {
194
+ await reader.cancel();
195
+ throw new SynomemError('REMOTE_PROTOCOL', 'Remote import response exceeded 1 MiB.');
196
+ }
197
+ chunks.push(item.value);
198
+ }
199
+ const combined = new Uint8Array(length);
200
+ let offset = 0;
201
+ for (const chunk of chunks) {
202
+ combined.set(chunk, offset);
203
+ offset += chunk.byteLength;
204
+ }
205
+ const text = new TextDecoder().decode(combined);
206
+ let envelope;
207
+ try {
208
+ envelope = JSON.parse(text);
209
+ }
210
+ catch {
211
+ throw new SynomemError('REMOTE_PROTOCOL', 'Remote import returned invalid JSON.');
212
+ }
213
+ if (!response.ok || !envelope.ok || envelope.data === undefined) {
214
+ const code = response.status === 401
215
+ ? 'AUTH_REQUIRED'
216
+ : response.status === 403
217
+ ? 'AUTH_FORBIDDEN'
218
+ : response.status === 409
219
+ ? 'REVISION_CONFLICT'
220
+ : 'REMOTE_PROTOCOL';
221
+ throw new SynomemError(code, envelope.error?.message ?? 'Remote import failed.');
222
+ }
223
+ return envelope.data;
224
+ }
225
+ }
226
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../src/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export { SynomemClient, SynomemCore } from './client.js';
2
+ export type { SynomemCoreOptions } from './client.js';
3
+ export type { ProjectionWriter } from './ports/projections.js';
4
+ export type { SynomemRepository } from './ports/repository.js';
5
+ export { configuredServiceFactory, createConfiguredService, readSynomemConfig, writeSynomemBackend, } from './backend.js';
6
+ export { RemoteSynomemService, environmentCredentialProvider } from './remote.js';
7
+ export type { SynomemCredentialProvider, RemoteSynomemOptions } from './remote.js';
8
+ export { credentialReference, OsCredentialStore } from './credentials.js';
9
+ export type { CredentialStore, StoredOAuthCredential } from './credentials.js';
10
+ export { loginWithOAuth, StoredCredentialProvider } from './oauth.js';
11
+ export type { OAuthLoginOptions } from './oauth.js';
12
+ export { createLocalImportBundle, importBundleChecksum, RemoteImportClient, validateImportBundle, } from './import.js';
13
+ export type { ImportBundle, ImportPreview, ImportResult, RemoteImportClientOptions, } from './import.js';
14
+ export type { SynomemService, SynomemDomainService, SynomemServiceCapabilities, SynomemServiceFactory, SynomemServiceInfo, ProjectionRebuildResult, } from './service.js';
15
+ export { defaultConfig, resolveHome } from './config.js';
16
+ export { asSynomemError, errorCodes, SynomemError } from './errors.js';
17
+ export { escapeMarkdown, recordsFromEvents, renderMarkdownExport } from './projections.js';
18
+ export { actorSchema, agentIdSchema, changesInputSchema, createAgentSchema, createNoteSchema, createTodoSchema, eventSchema, evidenceSchema, giveKudosSchema, giveKudosMcpSchema, itemListInputSchema, kudosTagSchema, kudosTitleSchema, listInputSchema, profileSchema, reviseNoteSchema, sendMemoSchema, updateTodoSchema, updateAgentSchema, } from './schemas.js';
19
+ export type * from './types.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAClF,YAAY,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EACL,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,mBAAmB,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export { SynomemClient, SynomemCore } from './client.js';
2
+ export { configuredServiceFactory, createConfiguredService, readSynomemConfig, writeSynomemBackend, } from './backend.js';
3
+ export { RemoteSynomemService, environmentCredentialProvider } from './remote.js';
4
+ export { credentialReference, OsCredentialStore } from './credentials.js';
5
+ export { loginWithOAuth, StoredCredentialProvider } from './oauth.js';
6
+ export { createLocalImportBundle, importBundleChecksum, RemoteImportClient, validateImportBundle, } from './import.js';
7
+ export { defaultConfig, resolveHome } from './config.js';
8
+ export { asSynomemError, errorCodes, SynomemError } from './errors.js';
9
+ export { escapeMarkdown, recordsFromEvents, renderMarkdownExport } from './projections.js';
10
+ export { actorSchema, agentIdSchema, changesInputSchema, createAgentSchema, createNoteSchema, createTodoSchema, eventSchema, evidenceSchema, giveKudosSchema, giveKudosMcpSchema, itemListInputSchema, kudosTagSchema, kudosTitleSchema, listInputSchema, profileSchema, reviseNoteSchema, sendMemoSchema, updateTodoSchema, updateAgentSchema, } from './schemas.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAIzD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAerB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EACL,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { SynomemService, SynomemServiceFactory } from '../service.js';
3
+ import type { ActorIdentity, SynomemClientOptions } from '../types.js';
4
+ export interface SynomemMcpOptions extends Omit<SynomemClientOptions, 'actor'> {
5
+ actor: ActorIdentity;
6
+ }
7
+ export interface SynomemMcpRuntime {
8
+ server: McpServer;
9
+ client: SynomemService;
10
+ close(): Promise<void>;
11
+ }
12
+ export declare function createSynomemMcpServer(options: SynomemMcpOptions, serviceFactory?: SynomemServiceFactory): Promise<SynomemMcpRuntime>;
13
+ export declare function startMcpServer(options: SynomemMcpOptions, serviceFactory?: SynomemServiceFactory): Promise<SynomemMcpRuntime>;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAoBtF,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAe,MAAM,aAAa,CAAC;AAEpF,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAC5E,KAAK,EAAE,aAAa,CAAC;CACtB;AAqDD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,iBAAiB,EAC1B,cAAc,GAAE,qBAAgD,GAC/D,OAAO,CAAC,iBAAiB,CAAC,CA22B5B;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,iBAAiB,EAC1B,cAAc,GAAE,qBAAgD,GAC/D,OAAO,CAAC,iBAAiB,CAAC,CAK5B"}