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
@@ -0,0 +1,256 @@
1
+ import { cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readlinkSync, renameSync, rmSync, symlinkSync, writeFileSync, } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { dirname, join, resolve } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { SynomemError } from './errors.js';
6
+ import { actorSchema } from './schemas.js';
7
+ import { packageVersion } from './version.js';
8
+ export const skillRuntimeNames = [
9
+ 'codex',
10
+ 'claude',
11
+ 'hermes',
12
+ 'openclaw',
13
+ 'cursor',
14
+ 'grok',
15
+ ];
16
+ const stampName = '.synomem-install.json';
17
+ function runtimeHomes(userHome, env) {
18
+ return {
19
+ codex: resolve(env.CODEX_HOME || join(userHome, '.codex')),
20
+ claude: resolve(env.CLAUDE_CONFIG_DIR || join(userHome, '.claude')),
21
+ hermes: resolve(env.HERMES_HOME || join(userHome, '.hermes')),
22
+ openclaw: resolve(env.OPENCLAW_STATE_DIR || join(userHome, '.openclaw')),
23
+ cursor: resolve(join(userHome, '.cursor')),
24
+ grok: resolve(env.GROK_HOME || join(userHome, '.grok')),
25
+ };
26
+ }
27
+ function selectedRuntimes(options) {
28
+ const defaults = [...skillRuntimeNames];
29
+ return [...new Set(options.runtimes?.length ? options.runtimes : defaults)];
30
+ }
31
+ function sourcePath(options) {
32
+ return resolve(options.source ?? fileURLToPath(new URL('../skills/synomem', import.meta.url)));
33
+ }
34
+ function assertSource(source) {
35
+ if (!existsSync(join(source, 'SKILL.md'))) {
36
+ throw new SynomemError('INTERNAL_ERROR', 'The packaged Synomem skill is missing.');
37
+ }
38
+ }
39
+ function readStamp(target) {
40
+ try {
41
+ const parsed = JSON.parse(readFileSync(join(target, stampName), 'utf8'));
42
+ if (parsed.package === 'synomem' &&
43
+ typeof parsed.version === 'string' &&
44
+ skillRuntimeNames.some((runtime) => runtime === parsed.runtime) &&
45
+ parsed.mode === 'copy') {
46
+ return parsed;
47
+ }
48
+ }
49
+ catch {
50
+ // Missing or invalid stamps are treated as unowned conflicts.
51
+ }
52
+ return undefined;
53
+ }
54
+ function entryExists(path) {
55
+ try {
56
+ lstatSync(path);
57
+ return true;
58
+ }
59
+ catch (error) {
60
+ if (error.code === 'ENOENT')
61
+ return false;
62
+ throw error;
63
+ }
64
+ }
65
+ function linkIsOurs(target, source) {
66
+ if (!entryExists(target) || !lstatSync(target).isSymbolicLink())
67
+ return false;
68
+ return resolve(dirname(target), readlinkSync(target)) === source;
69
+ }
70
+ function inspect(runtime, runtimeHome, source) {
71
+ const target = join(runtimeHome, 'skills', 'synomem');
72
+ if (!existsSync(runtimeHome))
73
+ return { runtime, runtimeHome, target, state: 'unavailable' };
74
+ const skillsHome = dirname(target);
75
+ if (lstatSync(runtimeHome).isSymbolicLink() ||
76
+ !lstatSync(runtimeHome).isDirectory() ||
77
+ (entryExists(skillsHome) &&
78
+ (lstatSync(skillsHome).isSymbolicLink() || !lstatSync(skillsHome).isDirectory()))) {
79
+ return { runtime, runtimeHome, target, state: 'conflict' };
80
+ }
81
+ if (!entryExists(target))
82
+ return { runtime, runtimeHome, target, state: 'missing' };
83
+ if (linkIsOurs(target, source)) {
84
+ return { runtime, runtimeHome, target, state: 'current', mode: 'link' };
85
+ }
86
+ if (lstatSync(target).isSymbolicLink() || !lstatSync(target).isDirectory()) {
87
+ return { runtime, runtimeHome, target, state: 'conflict' };
88
+ }
89
+ const stamp = readStamp(target);
90
+ if (!stamp || stamp.runtime !== runtime)
91
+ return { runtime, runtimeHome, target, state: 'conflict' };
92
+ return {
93
+ runtime,
94
+ runtimeHome,
95
+ target,
96
+ state: stamp.version === packageVersion() ? 'current' : 'stale',
97
+ installedVersion: stamp.version,
98
+ mode: 'copy',
99
+ };
100
+ }
101
+ function shellQuote(value) {
102
+ return `'${value.replaceAll("'", `'\\''`)}'`;
103
+ }
104
+ function mcpCommand(runtime, actorId, actorName) {
105
+ if (!actorId)
106
+ return undefined;
107
+ const identity = actorSchema.parse({
108
+ kind: 'agent',
109
+ id: actorId,
110
+ displayName: actorName ?? actorId,
111
+ });
112
+ const name = identity.displayName ?? identity.id;
113
+ const args = ['--actor-id', identity.id, '--actor-kind', 'agent', '--actor-name', name];
114
+ if (runtime === 'codex') {
115
+ return `codex mcp add synomem -- synomem-mcp ${args.map(shellQuote).join(' ')}`;
116
+ }
117
+ if (runtime === 'claude') {
118
+ return `claude mcp add --scope user synomem -- synomem-mcp ${args.map(shellQuote).join(' ')}`;
119
+ }
120
+ if (runtime === 'hermes') {
121
+ return `hermes mcp add synomem --command synomem-mcp --args ${args.map(shellQuote).join(' ')}`;
122
+ }
123
+ if (runtime === 'openclaw') {
124
+ return `openclaw mcp add synomem --command synomem-mcp ${args.map((item) => `--arg=${shellQuote(item)}`).join(' ')}`;
125
+ }
126
+ if (runtime === 'grok') {
127
+ return `grok mcp add synomem -- synomem-mcp ${args.map(shellQuote).join(' ')}`;
128
+ }
129
+ return undefined;
130
+ }
131
+ function assertSafeTarget(runtimeHome, target) {
132
+ if (target !== join(runtimeHome, 'skills', 'synomem')) {
133
+ throw new SynomemError('UNSAFE_PATH', 'Refusing an unexpected skill destination.');
134
+ }
135
+ const skillsHome = dirname(target);
136
+ if (!existsSync(runtimeHome) ||
137
+ lstatSync(runtimeHome).isSymbolicLink() ||
138
+ !lstatSync(runtimeHome).isDirectory() ||
139
+ (entryExists(skillsHome) &&
140
+ (lstatSync(skillsHome).isSymbolicLink() || !lstatSync(skillsHome).isDirectory()))) {
141
+ throw new SynomemError('UNSAFE_PATH', `Refusing an unsafe runtime skill path: ${runtimeHome}`);
142
+ }
143
+ }
144
+ function replaceTarget(location, source, runtime, link) {
145
+ const parent = dirname(location.target);
146
+ mkdirSync(parent, { recursive: true, mode: 0o700 });
147
+ const temporary = join(parent, `.synomem-${process.pid}-${Date.now()}.tmp`);
148
+ const backup = join(parent, `.synomem-${process.pid}-${Date.now()}.bak`);
149
+ try {
150
+ if (link) {
151
+ symlinkSync(source, temporary, process.platform === 'win32' ? 'junction' : 'dir');
152
+ }
153
+ else {
154
+ cpSync(source, temporary, { recursive: true, errorOnExist: true });
155
+ const stamp = {
156
+ package: 'synomem',
157
+ version: packageVersion(),
158
+ runtime,
159
+ mode: 'copy',
160
+ };
161
+ writeFileSync(join(temporary, stampName), `${JSON.stringify(stamp, null, 2)}\n`, {
162
+ encoding: 'utf8',
163
+ mode: 0o600,
164
+ });
165
+ }
166
+ if (entryExists(location.target))
167
+ renameSync(location.target, backup);
168
+ renameSync(temporary, location.target);
169
+ if (existsSync(backup))
170
+ rmSync(backup, { recursive: true, force: true });
171
+ }
172
+ catch (error) {
173
+ if (!entryExists(location.target) && entryExists(backup))
174
+ renameSync(backup, location.target);
175
+ throw error;
176
+ }
177
+ finally {
178
+ if (entryExists(temporary))
179
+ rmSync(temporary, { recursive: true, force: true });
180
+ }
181
+ }
182
+ export function skillStatus(options = {}) {
183
+ const userHome = resolve(options.userHome ?? homedir());
184
+ const source = sourcePath(options);
185
+ assertSource(source);
186
+ const homes = runtimeHomes(userHome, options.env ?? process.env);
187
+ const locations = selectedRuntimes(options).map((runtime) => inspect(runtime, homes[runtime], source));
188
+ return {
189
+ changed: false,
190
+ dryRun: true,
191
+ packageVersion: packageVersion(),
192
+ locations,
193
+ mcpCommands: locations
194
+ .map((location) => mcpCommand(location.runtime, options.actorId, options.actorName))
195
+ .filter((value) => Boolean(value)),
196
+ };
197
+ }
198
+ export function installSkill(options = {}) {
199
+ const result = skillStatus(options);
200
+ const source = sourcePath(options);
201
+ const desiredMode = options.link ? 'link' : 'copy';
202
+ for (const location of result.locations) {
203
+ if (location.state === 'unavailable' ||
204
+ (location.state === 'current' && location.mode === desiredMode)) {
205
+ continue;
206
+ }
207
+ if (location.state === 'conflict' && options.apply && !options.force) {
208
+ throw new SynomemError('INVALID_INPUT', `${location.target} already exists and is not owned by Synomem; use --force to replace it.`);
209
+ }
210
+ if (options.apply) {
211
+ assertSafeTarget(location.runtimeHome, location.target);
212
+ replaceTarget(location, source, location.runtime, Boolean(options.link));
213
+ result.changed = true;
214
+ }
215
+ }
216
+ result.dryRun = !options.apply;
217
+ if (!options.apply)
218
+ return result;
219
+ const updated = skillStatus({ ...options, apply: false });
220
+ return { ...updated, changed: result.changed, dryRun: false };
221
+ }
222
+ export function uninstallSkill(options = {}) {
223
+ const result = skillStatus(options);
224
+ for (const location of result.locations) {
225
+ if (location.state === 'missing' || location.state === 'unavailable')
226
+ continue;
227
+ if (location.state === 'conflict' && options.apply && !options.force) {
228
+ throw new SynomemError('INVALID_INPUT', `${location.target} is not owned by Synomem; refusing to remove it without --force.`);
229
+ }
230
+ if (options.apply) {
231
+ assertSafeTarget(location.runtimeHome, location.target);
232
+ rmSync(location.target, { recursive: true, force: false });
233
+ result.changed = true;
234
+ }
235
+ }
236
+ result.dryRun = !options.apply;
237
+ if (!options.apply)
238
+ return result;
239
+ const updated = skillStatus({ ...options, apply: false });
240
+ return { ...updated, changed: result.changed, dryRun: false };
241
+ }
242
+ export function formatSkillResult(result, operation) {
243
+ const lines = result.locations.map((location) => {
244
+ const version = location.installedVersion ? ` (version ${location.installedVersion})` : '';
245
+ return `${location.runtime.padEnd(6)} ${location.state.padEnd(11)} ${location.target}${version}`;
246
+ });
247
+ if (operation !== 'status' && result.dryRun)
248
+ lines.push('', 'Dry run only. Re-run with --yes to apply.');
249
+ if (result.mcpCommands.length)
250
+ lines.push('', 'MCP registration:', ...result.mcpCommands);
251
+ else if (operation === 'install') {
252
+ lines.push('', 'Tip: add --actor-id <agent-id> to print MCP registration commands.');
253
+ }
254
+ return lines.join('\n');
255
+ }
256
+ //# sourceMappingURL=skill-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-install.js","sourceRoot":"","sources":["../src/skill-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { DatabaseSync } from 'node:sqlite';
2
+ import type { SynomemRepository } from './ports/repository.js';
3
+ import { SynomemError } from './errors.js';
4
+ import type { ActorIdentity, SynomemConfig, SynomemConfigOverrides, AgentProfile, ChangePage, SynomemEvent, ItemListInput, ItemSummary, RecordKind, KudosListInput, KudosSummary, Page } from './types.js';
5
+ interface EventRow {
6
+ id: string;
7
+ payload: string;
8
+ sequence?: number;
9
+ }
10
+ export interface EventScan {
11
+ events: SynomemEvent[];
12
+ invalid: Array<{
13
+ id: string;
14
+ error: SynomemError;
15
+ }>;
16
+ }
17
+ export interface StorageOptions {
18
+ home: string;
19
+ readOnly: boolean;
20
+ config?: SynomemConfigOverrides;
21
+ }
22
+ export declare class SynomemStorage implements SynomemRepository {
23
+ readonly home: string;
24
+ readonly storageDirectory: string;
25
+ readonly databasePath: string;
26
+ readonly configPath: string;
27
+ readonly readOnly: boolean;
28
+ config: SynomemConfig;
29
+ private database?;
30
+ private readonly configOverrides?;
31
+ private validatedEventSequence;
32
+ private transactionTail;
33
+ constructor(options: StorageOptions);
34
+ init(): void;
35
+ private migrate;
36
+ private assertSchemaSupported;
37
+ db(): DatabaseSync;
38
+ assertWritable(): void;
39
+ transaction<T>(operation: () => T | Promise<T>): Promise<T>;
40
+ transactionSync<T>(operation: () => T): T;
41
+ insertEvent(event: SynomemEvent): void;
42
+ private applyEventToCurrent;
43
+ private applyEventToItems;
44
+ rebuildItemsCurrentIndex(): void;
45
+ rebuildKudosCurrentIndex(): void;
46
+ nextAggregateVersion(aggregateId: string): number;
47
+ listKudosSummaries(input: Required<Pick<KudosListInput, 'limit' | 'offset'>> & KudosListInput, viewer: ActorIdentity): Page<KudosSummary>;
48
+ listKudosChanges(after: string | undefined, limit: number, viewer: ActorIdentity): ChangePage;
49
+ listItemSummaries(input: Required<Pick<ItemListInput, 'limit' | 'offset'>> & ItemListInput, viewer: ActorIdentity): Page<ItemSummary>;
50
+ listItemChanges(after: string | undefined, limit: number, viewer: ActorIdentity, kinds?: RecordKind[]): ChangePage;
51
+ getItemSummary(id: string): ItemSummary | undefined;
52
+ getReadableItemEvents(id: string): SynomemEvent[];
53
+ currentIndexHealth(): {
54
+ given: number;
55
+ indexed: number;
56
+ stateMismatches: number;
57
+ };
58
+ itemIndexHealth(): {
59
+ created: number;
60
+ indexed: number;
61
+ };
62
+ migrationState(): {
63
+ schemaVersion: number;
64
+ appliedVersions: number[];
65
+ };
66
+ aliasIdentityConflicts(): Array<{
67
+ alias: string;
68
+ agentId: string;
69
+ }>;
70
+ private maxEventSequence;
71
+ getEvent(id: string): SynomemEvent | undefined;
72
+ getEventByIdempotency(actorKind: string, actorId: string, key: string): SynomemEvent | undefined;
73
+ getEvents(): SynomemEvent[];
74
+ getReadableEvents(): SynomemEvent[];
75
+ getReadableSynomemEvents(kudosId: string): SynomemEvent[];
76
+ scanEvents(): EventScan;
77
+ assertEventCompatibility(): void;
78
+ rawEventRows(): EventRow[];
79
+ private parseEvent;
80
+ insertAgent(profile: AgentProfile): void;
81
+ updateAgent(profile: AgentProfile, updatedAt: string): void;
82
+ getAgent(idOrAlias: string): AgentProfile | undefined;
83
+ listAgents(): AgentProfile[];
84
+ replaceProjectionManifest(paths: string[], generatedAt: string): void;
85
+ replaceAgentProjectionManifest(agentId: string, paths: string[], generatedAt: string): void;
86
+ projectionManifest(): string[];
87
+ integrityCheck(): string[];
88
+ journalMode(): string;
89
+ backup(destination: string): Promise<string>;
90
+ private restrictDatabaseFiles;
91
+ close(): void;
92
+ }
93
+ export {};
94
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}