@spool-lab/core 0.4.0 → 0.4.12

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 (171) hide show
  1. package/dist/db/db.d.ts +19 -0
  2. package/dist/db/db.d.ts.map +1 -1
  3. package/dist/db/db.js +210 -15
  4. package/dist/db/db.js.map +1 -1
  5. package/dist/db/queries.d.ts +36 -10
  6. package/dist/db/queries.d.ts.map +1 -1
  7. package/dist/db/queries.js +96 -75
  8. package/dist/db/queries.js.map +1 -1
  9. package/dist/db/share-drafts.d.ts +51 -0
  10. package/dist/db/share-drafts.d.ts.map +1 -0
  11. package/dist/db/share-drafts.js +47 -0
  12. package/dist/db/share-drafts.js.map +1 -0
  13. package/dist/doctor/checks/config.d.ts +3 -0
  14. package/dist/doctor/checks/config.d.ts.map +1 -0
  15. package/dist/doctor/checks/config.js +123 -0
  16. package/dist/doctor/checks/config.js.map +1 -0
  17. package/dist/doctor/checks/db.d.ts +3 -0
  18. package/dist/doctor/checks/db.d.ts.map +1 -0
  19. package/dist/doctor/checks/db.js +225 -0
  20. package/dist/doctor/checks/db.js.map +1 -0
  21. package/dist/doctor/checks/env.d.ts +3 -0
  22. package/dist/doctor/checks/env.d.ts.map +1 -0
  23. package/dist/doctor/checks/env.js +70 -0
  24. package/dist/doctor/checks/env.js.map +1 -0
  25. package/dist/doctor/checks/index.d.ts +3 -0
  26. package/dist/doctor/checks/index.d.ts.map +1 -0
  27. package/dist/doctor/checks/index.js +13 -0
  28. package/dist/doctor/checks/index.js.map +1 -0
  29. package/dist/doctor/checks/native.d.ts +3 -0
  30. package/dist/doctor/checks/native.d.ts.map +1 -0
  31. package/dist/doctor/checks/native.js +42 -0
  32. package/dist/doctor/checks/native.js.map +1 -0
  33. package/dist/doctor/checks/versions.d.ts +3 -0
  34. package/dist/doctor/checks/versions.d.ts.map +1 -0
  35. package/dist/doctor/checks/versions.js +79 -0
  36. package/dist/doctor/checks/versions.js.map +1 -0
  37. package/dist/doctor/index.d.ts +3 -0
  38. package/dist/doctor/index.d.ts.map +1 -0
  39. package/dist/doctor/index.js +3 -0
  40. package/dist/doctor/index.js.map +1 -0
  41. package/dist/doctor/preflight.d.ts +18 -0
  42. package/dist/doctor/preflight.d.ts.map +1 -0
  43. package/dist/doctor/preflight.js +27 -0
  44. package/dist/doctor/preflight.js.map +1 -0
  45. package/dist/doctor/runner.d.ts +12 -0
  46. package/dist/doctor/runner.d.ts.map +1 -0
  47. package/dist/doctor/runner.js +37 -0
  48. package/dist/doctor/runner.js.map +1 -0
  49. package/dist/doctor/types.d.ts +27 -0
  50. package/dist/doctor/types.d.ts.map +1 -0
  51. package/dist/doctor/types.js +2 -0
  52. package/dist/doctor/types.js.map +1 -0
  53. package/dist/index.d.ts +5 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +5 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/migrations/agent-search-cleanup.d.ts +36 -0
  58. package/dist/migrations/agent-search-cleanup.d.ts.map +1 -0
  59. package/dist/migrations/agent-search-cleanup.js +182 -0
  60. package/dist/migrations/agent-search-cleanup.js.map +1 -0
  61. package/dist/migrations/worktree-identity-upgrade.d.ts +31 -0
  62. package/dist/migrations/worktree-identity-upgrade.d.ts.map +1 -0
  63. package/dist/migrations/worktree-identity-upgrade.js +22 -0
  64. package/dist/migrations/worktree-identity-upgrade.js.map +1 -0
  65. package/dist/parsers/claude.d.ts.map +1 -1
  66. package/dist/parsers/claude.js +25 -12
  67. package/dist/parsers/claude.js.map +1 -1
  68. package/dist/parsers/codex.d.ts.map +1 -1
  69. package/dist/parsers/codex.js +32 -5
  70. package/dist/parsers/codex.js.map +1 -1
  71. package/dist/parsers/gemini.d.ts.map +1 -1
  72. package/dist/parsers/gemini.js +5 -5
  73. package/dist/parsers/gemini.js.map +1 -1
  74. package/dist/parsers/spool-prelude.d.ts +16 -0
  75. package/dist/parsers/spool-prelude.d.ts.map +1 -0
  76. package/dist/parsers/spool-prelude.js +21 -0
  77. package/dist/parsers/spool-prelude.js.map +1 -0
  78. package/dist/projects/display-name.d.ts +2 -0
  79. package/dist/projects/display-name.d.ts.map +1 -0
  80. package/dist/projects/display-name.js +8 -0
  81. package/dist/projects/display-name.js.map +1 -0
  82. package/dist/projects/fs.d.ts +3 -0
  83. package/dist/projects/fs.d.ts.map +1 -0
  84. package/dist/projects/fs.js +20 -0
  85. package/dist/projects/fs.js.map +1 -0
  86. package/dist/projects/groups.d.ts +4 -0
  87. package/dist/projects/groups.d.ts.map +1 -0
  88. package/dist/projects/groups.js +20 -0
  89. package/dist/projects/groups.js.map +1 -0
  90. package/dist/projects/identity-synthesizers.d.ts +22 -0
  91. package/dist/projects/identity-synthesizers.d.ts.map +1 -0
  92. package/dist/projects/identity-synthesizers.js +29 -0
  93. package/dist/projects/identity-synthesizers.js.map +1 -0
  94. package/dist/projects/identity.d.ts +16 -0
  95. package/dist/projects/identity.d.ts.map +1 -0
  96. package/dist/projects/identity.js +172 -0
  97. package/dist/projects/identity.js.map +1 -0
  98. package/dist/projects/sessions.d.ts +12 -0
  99. package/dist/projects/sessions.d.ts.map +1 -0
  100. package/dist/projects/sessions.js +47 -0
  101. package/dist/projects/sessions.js.map +1 -0
  102. package/dist/projects/worktree-resolvers.d.ts +19 -0
  103. package/dist/projects/worktree-resolvers.d.ts.map +1 -0
  104. package/dist/projects/worktree-resolvers.js +65 -0
  105. package/dist/projects/worktree-resolvers.js.map +1 -0
  106. package/dist/sync/syncer.d.ts.map +1 -1
  107. package/dist/sync/syncer.js +11 -3
  108. package/dist/sync/syncer.js.map +1 -1
  109. package/dist/types.d.ts +15 -6
  110. package/dist/types.d.ts.map +1 -1
  111. package/package.json +2 -2
  112. package/dist/connectors/capabilities/cookies-chrome.d.ts +0 -19
  113. package/dist/connectors/capabilities/cookies-chrome.d.ts.map +0 -1
  114. package/dist/connectors/capabilities/cookies-chrome.js +0 -199
  115. package/dist/connectors/capabilities/cookies-chrome.js.map +0 -1
  116. package/dist/connectors/capabilities/exec-impl.d.ts +0 -3
  117. package/dist/connectors/capabilities/exec-impl.d.ts.map +0 -1
  118. package/dist/connectors/capabilities/exec-impl.js +0 -108
  119. package/dist/connectors/capabilities/exec-impl.js.map +0 -1
  120. package/dist/connectors/capabilities/fetch-impl.d.ts +0 -3
  121. package/dist/connectors/capabilities/fetch-impl.d.ts.map +0 -1
  122. package/dist/connectors/capabilities/fetch-impl.js +0 -4
  123. package/dist/connectors/capabilities/fetch-impl.js.map +0 -1
  124. package/dist/connectors/capabilities/index.d.ts +0 -6
  125. package/dist/connectors/capabilities/index.d.ts.map +0 -1
  126. package/dist/connectors/capabilities/index.js +0 -6
  127. package/dist/connectors/capabilities/index.js.map +0 -1
  128. package/dist/connectors/capabilities/log-impl.d.ts +0 -3
  129. package/dist/connectors/capabilities/log-impl.d.ts.map +0 -1
  130. package/dist/connectors/capabilities/log-impl.js +0 -26
  131. package/dist/connectors/capabilities/log-impl.js.map +0 -1
  132. package/dist/connectors/capabilities/sqlite-impl.d.ts +0 -3
  133. package/dist/connectors/capabilities/sqlite-impl.d.ts.map +0 -1
  134. package/dist/connectors/capabilities/sqlite-impl.js +0 -19
  135. package/dist/connectors/capabilities/sqlite-impl.js.map +0 -1
  136. package/dist/connectors/loader.d.ts +0 -47
  137. package/dist/connectors/loader.d.ts.map +0 -1
  138. package/dist/connectors/loader.js +0 -328
  139. package/dist/connectors/loader.js.map +0 -1
  140. package/dist/connectors/npm-install.d.ts +0 -26
  141. package/dist/connectors/npm-install.d.ts.map +0 -1
  142. package/dist/connectors/npm-install.js +0 -74
  143. package/dist/connectors/npm-install.js.map +0 -1
  144. package/dist/connectors/prerequisites.d.ts +0 -14
  145. package/dist/connectors/prerequisites.d.ts.map +0 -1
  146. package/dist/connectors/prerequisites.js +0 -109
  147. package/dist/connectors/prerequisites.js.map +0 -1
  148. package/dist/connectors/registry-fetch.d.ts +0 -22
  149. package/dist/connectors/registry-fetch.d.ts.map +0 -1
  150. package/dist/connectors/registry-fetch.js +0 -54
  151. package/dist/connectors/registry-fetch.js.map +0 -1
  152. package/dist/connectors/registry.d.ts +0 -23
  153. package/dist/connectors/registry.d.ts.map +0 -1
  154. package/dist/connectors/registry.js +0 -59
  155. package/dist/connectors/registry.js.map +0 -1
  156. package/dist/connectors/sync-engine.d.ts +0 -31
  157. package/dist/connectors/sync-engine.d.ts.map +0 -1
  158. package/dist/connectors/sync-engine.js +0 -604
  159. package/dist/connectors/sync-engine.js.map +0 -1
  160. package/dist/connectors/sync-scheduler.d.ts +0 -56
  161. package/dist/connectors/sync-scheduler.d.ts.map +0 -1
  162. package/dist/connectors/sync-scheduler.js +0 -238
  163. package/dist/connectors/sync-scheduler.js.map +0 -1
  164. package/dist/connectors/trust-store.d.ts +0 -13
  165. package/dist/connectors/trust-store.d.ts.map +0 -1
  166. package/dist/connectors/trust-store.js +0 -48
  167. package/dist/connectors/trust-store.js.map +0 -1
  168. package/dist/connectors/types.d.ts +0 -111
  169. package/dist/connectors/types.d.ts.map +0 -1
  170. package/dist/connectors/types.js +0 -50
  171. package/dist/connectors/types.js.map +0 -1
@@ -1,109 +0,0 @@
1
- import { valid, gte } from 'semver';
2
- function baseStep(p, status, extras = {}) {
3
- const step = {
4
- id: p.id,
5
- label: p.name,
6
- kind: p.kind,
7
- status,
8
- install: p.install,
9
- ...extras,
10
- };
11
- if (p.docsUrl !== undefined)
12
- step.docsUrl = p.docsUrl;
13
- if (p.minVersion !== undefined && step.minVersion === undefined)
14
- step.minVersion = p.minVersion;
15
- return step;
16
- }
17
- export class PrerequisiteChecker {
18
- exec;
19
- cache = new Map();
20
- inFlight = new Map();
21
- constructor(exec) {
22
- this.exec = exec;
23
- }
24
- getCached(packageId) {
25
- return this.cache.get(packageId);
26
- }
27
- invalidate(packageId) {
28
- this.cache.delete(packageId);
29
- }
30
- async check(pkg) {
31
- const existing = this.inFlight.get(pkg.id);
32
- if (existing)
33
- return existing;
34
- const promise = this.runCheck(pkg).finally(() => this.inFlight.delete(pkg.id));
35
- this.inFlight.set(pkg.id, promise);
36
- return promise;
37
- }
38
- async runCheck(pkg) {
39
- const prereqs = pkg.prerequisites ?? [];
40
- const steps = [];
41
- const okIds = new Set();
42
- for (const p of prereqs) {
43
- const unmet = (p.requires ?? []).filter(id => !okIds.has(id));
44
- if (unmet.length > 0) {
45
- steps.push(baseStep(p, 'pending'));
46
- continue;
47
- }
48
- const step = await this.detectOne(p);
49
- steps.push(step);
50
- if (step.status === 'ok')
51
- okIds.add(p.id);
52
- }
53
- this.cache.set(pkg.id, steps);
54
- return steps;
55
- }
56
- async detectOne(p) {
57
- if (p.detect.type !== 'exec') {
58
- return baseStep(p, 'error', { hint: `Unknown detect type: ${p.detect.type}` });
59
- }
60
- const timeout = p.detect.timeoutMs ?? 5000;
61
- let result;
62
- try {
63
- result = await this.exec.run(p.detect.command, p.detect.args, { timeout });
64
- }
65
- catch (e) {
66
- const msg = e.message ?? '';
67
- // TODO: fragile substring sniff — the ExecCapability contract does not
68
- // define a recognizable timeout signal (no err.code, err.name, or
69
- // { timedOut } flag). See packages/connector-sdk/src/capabilities.ts
70
- // near ExecCapability for a proposed fix.
71
- if (/timeout/i.test(msg))
72
- return baseStep(p, 'error', { hint: 'Detection timed out' });
73
- return baseStep(p, 'missing');
74
- }
75
- if (p.detect.matchStdout) {
76
- const re = new RegExp(p.detect.matchStdout);
77
- return re.test(result.stdout + result.stderr)
78
- ? baseStep(p, 'ok')
79
- : baseStep(p, 'missing');
80
- }
81
- if (p.detect.versionRegex && p.minVersion) {
82
- const vm = new RegExp(p.detect.versionRegex).exec(result.stdout);
83
- if (!vm || !vm[1]) {
84
- return baseStep(p, 'error', { hint: 'Could not parse version' });
85
- }
86
- const detectedVersion = vm[1];
87
- // Normalize for semver: strip leading zeros from numeric segments so
88
- // zero-padded CalVer (yt-dlp, Ubuntu, Postgres) like `2026.03.17`
89
- // validates as `2026.3.17`. Ordering is preserved.
90
- const normalizedDetected = stripLeadingZeros(detectedVersion);
91
- const normalizedMin = stripLeadingZeros(p.minVersion);
92
- if (!valid(normalizedDetected)) {
93
- return baseStep(p, 'error', { hint: 'Could not parse detected version' });
94
- }
95
- if (gte(normalizedDetected, normalizedMin)) {
96
- return baseStep(p, 'ok', { detectedVersion });
97
- }
98
- return baseStep(p, 'outdated', {
99
- detectedVersion,
100
- hint: `Detected ${detectedVersion}, requires ≥ ${p.minVersion}`,
101
- });
102
- }
103
- return result.exitCode === 0 ? baseStep(p, 'ok') : baseStep(p, 'missing');
104
- }
105
- }
106
- function stripLeadingZeros(version) {
107
- return version.replace(/(^|\.)0+(\d)/g, '$1$2');
108
- }
109
- //# sourceMappingURL=prerequisites.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prerequisites.js","sourceRoot":"","sources":["../../src/connectors/prerequisites.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- export interface RegistryConnector {
2
- name: string;
3
- id: string;
4
- platform: string;
5
- label: string;
6
- description: string;
7
- color: string;
8
- author: string;
9
- category: string;
10
- firstParty: boolean;
11
- bundled: boolean;
12
- npm: string;
13
- }
14
- interface FetchRegistryOpts {
15
- fetchFn?: typeof fetch;
16
- cacheDir: string;
17
- /** Override source. HTTP(S) URL, file:// URL, or absolute filesystem path. */
18
- url?: string;
19
- }
20
- export declare function fetchRegistry(opts: FetchRegistryOpts): Promise<RegistryConnector[]>;
21
- export {};
22
- //# sourceMappingURL=registry-fetch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry-fetch.d.ts","sourceRoot":"","sources":["../../src/connectors/registry-fetch.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAaD,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyBzF"}
@@ -1,54 +0,0 @@
1
- import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { fileURLToPath } from 'node:url';
4
- const DEFAULT_REGISTRY_URL = 'https://raw.githubusercontent.com/spool-lab/spool/main/packages/landing/public/registry.json';
5
- const CACHE_FILE = 'registry-cache.json';
6
- const TIMEOUT_MS = 3_000;
7
- function isFileSource(url) {
8
- return url.startsWith('file://') || url.startsWith('/');
9
- }
10
- function readLocalRegistry(url) {
11
- const path = url.startsWith('file://') ? fileURLToPath(url) : url;
12
- const raw = readFileSync(path, 'utf-8');
13
- const data = JSON.parse(raw);
14
- return data.connectors ?? [];
15
- }
16
- export async function fetchRegistry(opts) {
17
- const { fetchFn = globalThis.fetch, cacheDir, url = DEFAULT_REGISTRY_URL } = opts;
18
- const cachePath = join(cacheDir, CACHE_FILE);
19
- if (isFileSource(url)) {
20
- try {
21
- return readLocalRegistry(url);
22
- }
23
- catch {
24
- return readCachedRegistry(cachePath);
25
- }
26
- }
27
- try {
28
- const res = await fetchFn(url, { signal: AbortSignal.timeout(TIMEOUT_MS) });
29
- if (!res.ok)
30
- throw new Error(`HTTP ${res.status}`);
31
- const data = (await res.json());
32
- const connectors = data.connectors ?? [];
33
- try {
34
- mkdirSync(cacheDir, { recursive: true });
35
- writeFileSync(cachePath, JSON.stringify({ connectors, fetchedAt: Date.now() }));
36
- }
37
- catch { }
38
- return connectors;
39
- }
40
- catch {
41
- return readCachedRegistry(cachePath);
42
- }
43
- }
44
- function readCachedRegistry(cachePath) {
45
- try {
46
- const raw = readFileSync(cachePath, 'utf-8');
47
- const cached = JSON.parse(raw);
48
- return cached.connectors ?? [];
49
- }
50
- catch {
51
- return [];
52
- }
53
- }
54
- //# sourceMappingURL=registry-fetch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry-fetch.js","sourceRoot":"","sources":["../../src/connectors/registry-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,oBAAoB,GACxB,8FAA8F,CAAA;AAChG,MAAM,UAAU,GAAG,qBAAqB,CAAA;AACxC,MAAM,UAAU,GAAG,KAAK,CAAA;AAuBxB,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;AACzD,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACjE,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyC,CAAA;IACpE,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuB;IACzD,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG,oBAAoB,EAAE,GAAG,IAAI,CAAA;IACjF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAE5C,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QAC3E,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;QAClD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAyC,CAAA;QACvE,MAAM,UAAU,GAAwB,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;QAC7D,IAAI,CAAC;YACH,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACxC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;QACjF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,OAAO,UAAU,CAAA;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,MAAM,CAAC,UAAU,IAAI,EAAE,CAAA;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
@@ -1,23 +0,0 @@
1
- import type { Connector, ConnectorPackage } from './types.js';
2
- /**
3
- * In-memory registry of available connectors.
4
- *
5
- * Connectors are registered at app startup. The registry is the single source
6
- * of truth for "what connectors exist" — the scheduler and UI both read from it.
7
- */
8
- export declare class ConnectorRegistry {
9
- private connectors;
10
- private packages;
11
- register(connector: Connector): void;
12
- registerPackage(pkg: ConnectorPackage): void;
13
- getPackage(id: string): ConnectorPackage | undefined;
14
- listPackages(): ConnectorPackage[];
15
- get(id: string): Connector;
16
- has(id: string): boolean;
17
- remove(id: string): boolean;
18
- clear(): void;
19
- list(): Connector[];
20
- /** List connectors for a specific platform. */
21
- listByPlatform(platform: string): Connector[];
22
- }
23
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE7D;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,QAAQ,CAAsC;IAEtD,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIpC,eAAe,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAgB5C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIpD,YAAY,IAAI,gBAAgB,EAAE;IAIlC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;IAM1B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI3B,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,SAAS,EAAE;IAInB,+CAA+C;IAC/C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE;CAG9C"}
@@ -1,59 +0,0 @@
1
- /**
2
- * In-memory registry of available connectors.
3
- *
4
- * Connectors are registered at app startup. The registry is the single source
5
- * of truth for "what connectors exist" — the scheduler and UI both read from it.
6
- */
7
- export class ConnectorRegistry {
8
- connectors = new Map();
9
- packages = new Map();
10
- register(connector) {
11
- this.connectors.set(connector.id, connector);
12
- }
13
- registerPackage(pkg) {
14
- const existing = this.packages.get(pkg.id);
15
- if (existing) {
16
- // Multi-connector packages register once per sub-connector — merge the connectors list
17
- const mergedConnectors = [...existing.connectors];
18
- for (const c of pkg.connectors) {
19
- if (!mergedConnectors.some(e => e.id === c.id)) {
20
- mergedConnectors.push(c);
21
- }
22
- }
23
- this.packages.set(pkg.id, { ...pkg, connectors: mergedConnectors });
24
- }
25
- else {
26
- this.packages.set(pkg.id, pkg);
27
- }
28
- }
29
- getPackage(id) {
30
- return this.packages.get(id);
31
- }
32
- listPackages() {
33
- return Array.from(this.packages.values());
34
- }
35
- get(id) {
36
- const connector = this.connectors.get(id);
37
- if (!connector)
38
- throw new Error(`Connector "${id}" not found`);
39
- return connector;
40
- }
41
- has(id) {
42
- return this.connectors.has(id);
43
- }
44
- remove(id) {
45
- return this.connectors.delete(id);
46
- }
47
- clear() {
48
- this.connectors.clear();
49
- this.packages.clear();
50
- }
51
- list() {
52
- return Array.from(this.connectors.values());
53
- }
54
- /** List connectors for a specific platform. */
55
- listByPlatform(platform) {
56
- return this.list().filter(c => c.platform === platform);
57
- }
58
- }
59
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IACpB,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAA;IACzC,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAA;IAEtD,QAAQ,CAAC,SAAoB;QAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;IAC9C,CAAC;IAED,eAAe,CAAC,GAAqB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,uFAAuF;YACvF,MAAM,gBAAgB,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAA;YACjD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC/C,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAC1B,CAAC;YACH,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAA;QACrE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACzC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;QAC9D,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACnC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;QACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;IAC7C,CAAC;IAED,+CAA+C;IAC/C,cAAc,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;IACzD,CAAC;CACF"}
@@ -1,31 +0,0 @@
1
- import type Database from 'better-sqlite3';
2
- import { Effect } from 'effect';
3
- import type { Connector, SyncState, SyncOptions, ConnectorSyncResult } from './types.js';
4
- export declare function loadSyncState(db: Database.Database, connectorId: string): SyncState;
5
- export declare function saveSyncState(db: Database.Database, state: SyncState): void;
6
- export declare function deleteConnectorItems(db: Database.Database, connectorId: string): void;
7
- export declare class SyncEngine {
8
- private db;
9
- constructor(db: Database.Database);
10
- loadState(connectorId: string): SyncState;
11
- /**
12
- * Effect-native entry point. Returns an Effect that, when run, executes a
13
- * full sync cycle (ephemeral or dual-frontier persistent) and records the
14
- * outcome in connector_sync_state. The Effect is `Effect<ConnectorSyncResult, never>`
15
- * because all SyncErrors are caught internally and encoded in `result.error`.
16
- *
17
- * Preferred by callers that already live in the Effect world (the Scheduler
18
- * Effect migration, tests that want to inject Logger / Tracer layers via
19
- * `Effect.provide`). Promise-based callers should use `sync()` instead.
20
- */
21
- syncEffect(connector: Connector, opts?: SyncOptions): Effect.Effect<ConnectorSyncResult>;
22
- sync(connector: Connector, opts?: SyncOptions): Promise<ConnectorSyncResult>;
23
- /**
24
- * Fetch pages in an Effect-based loop until a stop condition is met.
25
- * Errors are caught internally and returned in the result (never fails).
26
- */
27
- private fetchLoopEffect;
28
- private syncPersistentEffect;
29
- private syncEphemeralEffect;
30
- }
31
- //# sourceMappingURL=sync-engine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-engine.d.ts","sourceRoot":"","sources":["../../src/connectors/sync-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAA6B,MAAM,EAAS,MAAM,QAAQ,CAAA;AACjE,OAAO,KAAK,EACV,SAAS,EAET,SAAS,EACT,WAAW,EACX,mBAAmB,EAEpB,MAAM,YAAY,CAAA;AAqEnB,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,CA0CnF;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAgC3E;AAyED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA4BrF;AA6BD,qBAAa,UAAU;IACT,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAEzC,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IAIzC;;;;;;;;;OASG;IACH,UAAU,CACR,SAAS,EAAE,SAAS,EACpB,IAAI,GAAE,WAAgB,GACrB,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;IA0C/B,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6BtF;;;OAGG;IACH,OAAO,CAAC,eAAe;IAoMvB,OAAO,CAAC,oBAAoB;IA6G5B,OAAO,CAAC,mBAAmB;CA+G5B"}