@agent-native/core 0.4.1 → 0.4.2

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 (221) hide show
  1. package/README.md +31 -0
  2. package/dist/adapters/convex/adapter.d.ts +24 -0
  3. package/dist/adapters/convex/adapter.d.ts.map +1 -0
  4. package/dist/adapters/convex/adapter.js +125 -0
  5. package/dist/adapters/convex/adapter.js.map +1 -0
  6. package/dist/adapters/convex/index.d.ts +4 -0
  7. package/dist/adapters/convex/index.d.ts.map +1 -0
  8. package/dist/adapters/convex/index.js +3 -0
  9. package/dist/adapters/convex/index.js.map +1 -0
  10. package/dist/adapters/drizzle/adapter.d.ts +36 -0
  11. package/dist/adapters/drizzle/adapter.d.ts.map +1 -0
  12. package/dist/adapters/drizzle/adapter.js +210 -0
  13. package/dist/adapters/drizzle/adapter.js.map +1 -0
  14. package/dist/adapters/drizzle/index.d.ts +3 -0
  15. package/dist/adapters/drizzle/index.d.ts.map +1 -0
  16. package/dist/adapters/drizzle/index.js +3 -0
  17. package/dist/adapters/drizzle/index.js.map +1 -0
  18. package/dist/adapters/drizzle/schema.d.ts +146 -0
  19. package/dist/adapters/drizzle/schema.d.ts.map +1 -0
  20. package/dist/adapters/drizzle/schema.js +20 -0
  21. package/dist/adapters/drizzle/schema.js.map +1 -0
  22. package/dist/adapters/firestore/adapter.d.ts +3 -2
  23. package/dist/adapters/firestore/adapter.d.ts.map +1 -1
  24. package/dist/adapters/firestore/adapter.js +23 -6
  25. package/dist/adapters/firestore/adapter.js.map +1 -1
  26. package/dist/adapters/supabase/adapter.d.ts +2 -1
  27. package/dist/adapters/supabase/adapter.d.ts.map +1 -1
  28. package/dist/adapters/supabase/adapter.js +4 -1
  29. package/dist/adapters/supabase/adapter.js.map +1 -1
  30. package/dist/adapters/sync/config.d.ts +22 -2
  31. package/dist/adapters/sync/config.d.ts.map +1 -1
  32. package/dist/adapters/sync/config.js +175 -16
  33. package/dist/adapters/sync/config.js.map +1 -1
  34. package/dist/adapters/sync/create-file-sync.d.ts +32 -0
  35. package/dist/adapters/sync/create-file-sync.d.ts.map +1 -0
  36. package/dist/adapters/sync/create-file-sync.js +218 -0
  37. package/dist/adapters/sync/create-file-sync.js.map +1 -0
  38. package/dist/adapters/sync/file-sync.d.ts +40 -6
  39. package/dist/adapters/sync/file-sync.d.ts.map +1 -1
  40. package/dist/adapters/sync/file-sync.js +442 -97
  41. package/dist/adapters/sync/file-sync.js.map +1 -1
  42. package/dist/adapters/sync/index.d.ts +3 -2
  43. package/dist/adapters/sync/index.d.ts.map +1 -1
  44. package/dist/adapters/sync/index.js +3 -1
  45. package/dist/adapters/sync/index.js.map +1 -1
  46. package/dist/adapters/sync/merge.js +3 -2
  47. package/dist/adapters/sync/merge.js.map +1 -1
  48. package/dist/adapters/sync/types.d.ts +36 -2
  49. package/dist/adapters/sync/types.d.ts.map +1 -1
  50. package/dist/adapters/sync/types.js +22 -1
  51. package/dist/adapters/sync/types.js.map +1 -1
  52. package/dist/agent/index.d.ts +3 -0
  53. package/dist/agent/index.d.ts.map +1 -0
  54. package/dist/agent/index.js +2 -0
  55. package/dist/agent/index.js.map +1 -0
  56. package/dist/agent/production-agent.d.ts +16 -0
  57. package/dist/agent/production-agent.d.ts.map +1 -0
  58. package/dist/agent/production-agent.js +152 -0
  59. package/dist/agent/production-agent.js.map +1 -0
  60. package/dist/agent/types.d.ts +38 -0
  61. package/dist/agent/types.d.ts.map +1 -0
  62. package/dist/agent/types.js +2 -0
  63. package/dist/agent/types.js.map +1 -0
  64. package/dist/cli/create.d.ts.map +1 -1
  65. package/dist/cli/create.js +2 -0
  66. package/dist/cli/create.js.map +1 -1
  67. package/dist/cli/index.js +37 -11
  68. package/dist/cli/index.js.map +1 -1
  69. package/dist/client/PoweredByBadge.d.ts +14 -0
  70. package/dist/client/PoweredByBadge.d.ts.map +1 -0
  71. package/dist/client/PoweredByBadge.js +60 -0
  72. package/dist/client/PoweredByBadge.js.map +1 -0
  73. package/dist/client/ProductionAgentPanel.d.ts +10 -0
  74. package/dist/client/ProductionAgentPanel.d.ts.map +1 -0
  75. package/dist/client/ProductionAgentPanel.js +121 -0
  76. package/dist/client/ProductionAgentPanel.js.map +1 -0
  77. package/dist/client/Turnstile.d.ts +35 -0
  78. package/dist/client/Turnstile.d.ts.map +1 -0
  79. package/dist/client/Turnstile.js +77 -0
  80. package/dist/client/Turnstile.js.map +1 -0
  81. package/dist/client/index.d.ts +6 -0
  82. package/dist/client/index.d.ts.map +1 -1
  83. package/dist/client/index.js +6 -0
  84. package/dist/client/index.js.map +1 -1
  85. package/dist/client/use-file-sync-status.d.ts +21 -0
  86. package/dist/client/use-file-sync-status.d.ts.map +1 -0
  87. package/dist/client/use-file-sync-status.js +65 -0
  88. package/dist/client/use-file-sync-status.js.map +1 -0
  89. package/dist/client/use-session.d.ts +16 -0
  90. package/dist/client/use-session.d.ts.map +1 -0
  91. package/dist/client/use-session.js +49 -0
  92. package/dist/client/use-session.js.map +1 -0
  93. package/dist/client/useProductionAgent.d.ts +18 -0
  94. package/dist/client/useProductionAgent.d.ts.map +1 -0
  95. package/dist/client/useProductionAgent.js +135 -0
  96. package/dist/client/useProductionAgent.js.map +1 -0
  97. package/dist/db/index.d.ts +21 -0
  98. package/dist/db/index.d.ts.map +1 -0
  99. package/dist/db/index.js +17 -0
  100. package/dist/db/index.js.map +1 -0
  101. package/dist/index.browser.d.ts +1 -1
  102. package/dist/index.browser.d.ts.map +1 -1
  103. package/dist/index.browser.js +1 -1
  104. package/dist/index.browser.js.map +1 -1
  105. package/dist/index.d.ts +3 -2
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +4 -2
  108. package/dist/index.js.map +1 -1
  109. package/dist/router/index.d.ts +3 -0
  110. package/dist/router/index.d.ts.map +1 -0
  111. package/dist/router/index.js +5 -0
  112. package/dist/router/index.js.map +1 -0
  113. package/dist/scripts/core-scripts.d.ts +10 -0
  114. package/dist/scripts/core-scripts.d.ts.map +1 -0
  115. package/dist/scripts/core-scripts.js +15 -0
  116. package/dist/scripts/core-scripts.js.map +1 -0
  117. package/dist/scripts/db/exec.d.ts +11 -0
  118. package/dist/scripts/db/exec.d.ts.map +1 -0
  119. package/dist/scripts/db/exec.js +86 -0
  120. package/dist/scripts/db/exec.js.map +1 -0
  121. package/dist/scripts/db/index.d.ts +2 -0
  122. package/dist/scripts/db/index.d.ts.map +1 -0
  123. package/dist/scripts/db/index.js +6 -0
  124. package/dist/scripts/db/index.js.map +1 -0
  125. package/dist/scripts/db/query.d.ts +10 -0
  126. package/dist/scripts/db/query.d.ts.map +1 -0
  127. package/dist/scripts/db/query.js +96 -0
  128. package/dist/scripts/db/query.js.map +1 -0
  129. package/dist/scripts/db/schema.d.ts +12 -0
  130. package/dist/scripts/db/schema.d.ts.map +1 -0
  131. package/dist/scripts/db/schema.js +112 -0
  132. package/dist/scripts/db/schema.js.map +1 -0
  133. package/dist/scripts/index.d.ts +4 -0
  134. package/dist/scripts/index.d.ts.map +1 -1
  135. package/dist/scripts/index.js +4 -0
  136. package/dist/scripts/index.js.map +1 -1
  137. package/dist/scripts/runner.d.ts +3 -0
  138. package/dist/scripts/runner.d.ts.map +1 -1
  139. package/dist/scripts/runner.js +53 -14
  140. package/dist/scripts/runner.js.map +1 -1
  141. package/dist/server/auth.d.ts +59 -0
  142. package/dist/server/auth.d.ts.map +1 -0
  143. package/dist/server/auth.js +442 -0
  144. package/dist/server/auth.js.map +1 -0
  145. package/dist/server/captcha.d.ts +12 -0
  146. package/dist/server/captcha.d.ts.map +1 -0
  147. package/dist/server/captcha.js +43 -0
  148. package/dist/server/captcha.js.map +1 -0
  149. package/dist/server/create-server.d.ts +13 -10
  150. package/dist/server/create-server.d.ts.map +1 -1
  151. package/dist/server/create-server.js +41 -27
  152. package/dist/server/create-server.js.map +1 -1
  153. package/dist/server/index.d.ts +5 -1
  154. package/dist/server/index.d.ts.map +1 -1
  155. package/dist/server/index.js +6 -1
  156. package/dist/server/index.js.map +1 -1
  157. package/dist/server/missing-key.d.ts +9 -5
  158. package/dist/server/missing-key.d.ts.map +1 -1
  159. package/dist/server/missing-key.js +12 -7
  160. package/dist/server/missing-key.js.map +1 -1
  161. package/dist/server/sse.d.ts +12 -7
  162. package/dist/server/sse.d.ts.map +1 -1
  163. package/dist/server/sse.js +79 -15
  164. package/dist/server/sse.js.map +1 -1
  165. package/dist/vite/client.d.ts +28 -5
  166. package/dist/vite/client.d.ts.map +1 -1
  167. package/dist/vite/client.js +36 -15
  168. package/dist/vite/client.js.map +1 -1
  169. package/dist/vite/dev-api-server.d.ts +10 -0
  170. package/dist/vite/dev-api-server.d.ts.map +1 -0
  171. package/dist/vite/dev-api-server.js +148 -0
  172. package/dist/vite/dev-api-server.js.map +1 -0
  173. package/dist/vite/index.d.ts +2 -3
  174. package/dist/vite/index.d.ts.map +1 -1
  175. package/dist/vite/index.js +2 -3
  176. package/dist/vite/index.js.map +1 -1
  177. package/package.json +26 -17
  178. package/src/templates/default/AGENTS.md +148 -22
  179. package/src/templates/default/_gitignore +9 -5
  180. package/src/templates/default/client/entry.client.tsx +4 -0
  181. package/src/templates/default/client/entry.server.tsx +55 -0
  182. package/src/templates/default/client/root.tsx +82 -0
  183. package/src/templates/default/client/routes/_index.tsx +19 -0
  184. package/src/templates/default/client/routes.ts +4 -0
  185. package/src/templates/default/client/vite-env.d.ts +5 -0
  186. package/src/templates/default/package.json +5 -7
  187. package/src/templates/default/react-router.config.ts +6 -0
  188. package/src/templates/default/server/lib/watcher.ts +21 -0
  189. package/src/templates/default/server/plugins/auth.ts +5 -0
  190. package/src/templates/default/server/plugins/file-sync.ts +39 -0
  191. package/src/templates/default/server/routes/[...page].get.ts +12 -0
  192. package/src/templates/default/server/routes/api/events.get.ts +7 -0
  193. package/src/templates/default/server/routes/api/file-sync/status.get.ts +13 -0
  194. package/src/templates/default/server/routes/api/hello.get.ts +5 -0
  195. package/src/templates/default/tsconfig.json +9 -1
  196. package/src/templates/default/vite.config.ts +4 -1
  197. package/tsconfig.base.json +3 -1
  198. package/dist/adapters/neon/adapter.d.ts +0 -28
  199. package/dist/adapters/neon/adapter.d.ts.map +0 -1
  200. package/dist/adapters/neon/adapter.js +0 -135
  201. package/dist/adapters/neon/adapter.js.map +0 -1
  202. package/dist/adapters/neon/index.d.ts +0 -3
  203. package/dist/adapters/neon/index.d.ts.map +0 -1
  204. package/dist/adapters/neon/index.js +0 -3
  205. package/dist/adapters/neon/index.js.map +0 -1
  206. package/dist/server/production.d.ts +0 -18
  207. package/dist/server/production.d.ts.map +0 -1
  208. package/dist/server/production.js +0 -37
  209. package/dist/server/production.js.map +0 -1
  210. package/dist/vite/express-plugin.d.ts +0 -14
  211. package/dist/vite/express-plugin.d.ts.map +0 -1
  212. package/dist/vite/express-plugin.js +0 -53
  213. package/dist/vite/express-plugin.js.map +0 -1
  214. package/dist/vite/server.d.ts +0 -21
  215. package/dist/vite/server.d.ts.map +0 -1
  216. package/dist/vite/server.js +0 -68
  217. package/dist/vite/server.js.map +0 -1
  218. package/src/templates/default/index.html +0 -14
  219. package/src/templates/default/server/index.ts +0 -22
  220. package/src/templates/default/server/node-build.ts +0 -4
  221. package/src/templates/default/vite.config.server.ts +0 -3
@@ -0,0 +1,218 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { FileSync } from "./file-sync.js";
4
+ import { validateIdentifier } from "./config.js";
5
+ // ---------------------------------------------------------------------------
6
+ // Helpers
7
+ // ---------------------------------------------------------------------------
8
+ function isValidBackend(value) {
9
+ return (value === "drizzle" ||
10
+ value === "firestore" ||
11
+ value === "supabase" ||
12
+ value === "convex");
13
+ }
14
+ function requireEnv(key) {
15
+ const value = process.env[key];
16
+ if (!value) {
17
+ throw new Error(`Missing required environment variable: ${key}`);
18
+ }
19
+ return value;
20
+ }
21
+ function readPackageName() {
22
+ try {
23
+ const pkgPath = path.resolve(process.cwd(), "package.json");
24
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
25
+ return typeof pkg.name === "string" ? pkg.name : null;
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ // ---------------------------------------------------------------------------
32
+ // Adapter factory
33
+ // ---------------------------------------------------------------------------
34
+ async function createAdapter(backend, options) {
35
+ switch (backend) {
36
+ case "drizzle": {
37
+ try {
38
+ const { DrizzleFileSyncAdapter } = await import("../drizzle/adapter.js");
39
+ const dbPath = path.resolve(options.contentRoot, "sync.db");
40
+ return new DrizzleFileSyncAdapter(dbPath);
41
+ }
42
+ catch (err) {
43
+ const safeMsg = err instanceof Error ? err.message.slice(0, 200) : "Unknown error";
44
+ console.error(`[file-sync] Failed to initialize Drizzle/SQLite adapter: ${safeMsg}`);
45
+ return null;
46
+ }
47
+ }
48
+ case "firestore": {
49
+ try {
50
+ requireEnv("GOOGLE_APPLICATION_CREDENTIALS");
51
+ const { FirestoreFileSyncAdapter } = await import("../firestore/adapter.js");
52
+ // Dynamic import of firebase-admin — only loads if installed
53
+ const adminModule = await import("firebase-admin");
54
+ // ESM dynamic import wraps CJS modules — unwrap .default if present
55
+ const admin = adminModule.default ?? adminModule;
56
+ const app = (admin.apps?.length ?? 0) > 0
57
+ ? admin.apps[0]
58
+ : admin.initializeApp({
59
+ credential: admin.credential.applicationDefault(),
60
+ });
61
+ const db = app.firestore();
62
+ return new FirestoreFileSyncAdapter(() => db.collection("files"));
63
+ }
64
+ catch (err) {
65
+ if (err instanceof Error &&
66
+ "code" in err &&
67
+ err.code === "ERR_MODULE_NOT_FOUND") {
68
+ console.error("[file-sync] firebase-admin not installed. Run: pnpm add firebase-admin");
69
+ }
70
+ else if (err instanceof Error &&
71
+ err.message.startsWith("Missing required")) {
72
+ console.error(`[file-sync] ${err.message}`);
73
+ }
74
+ else {
75
+ const safeMsg = err instanceof Error ? err.message.slice(0, 200) : "Unknown error";
76
+ console.error(`[file-sync] Failed to initialize Firestore: ${safeMsg}`);
77
+ }
78
+ return null;
79
+ }
80
+ }
81
+ case "supabase": {
82
+ try {
83
+ const url = requireEnv("SUPABASE_URL");
84
+ // Support new key name (SUPABASE_PUBLISHABLE_KEY) and legacy (SUPABASE_ANON_KEY)
85
+ const key = process.env.SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_ANON_KEY;
86
+ if (!key) {
87
+ throw new Error("Missing required environment variable: SUPABASE_PUBLISHABLE_KEY (or legacy SUPABASE_ANON_KEY)");
88
+ }
89
+ const { SupabaseFileSyncAdapter } = await import("../supabase/adapter.js");
90
+ const supabase = await import("@supabase/supabase-js");
91
+ // The adapter uses a duck-typed SupabaseClient interface to avoid hard deps.
92
+ // The real createClient returns a compatible but differently-typed object.
93
+ const client = supabase.createClient(url, key);
94
+ return new SupabaseFileSyncAdapter(client);
95
+ }
96
+ catch (err) {
97
+ if (err instanceof Error &&
98
+ "code" in err &&
99
+ err.code === "ERR_MODULE_NOT_FOUND") {
100
+ console.error("[file-sync] @supabase/supabase-js not installed. Run: pnpm add @supabase/supabase-js");
101
+ }
102
+ else if (err instanceof Error &&
103
+ err.message.startsWith("Missing required")) {
104
+ console.error(`[file-sync] ${err.message}`);
105
+ }
106
+ else {
107
+ const safeMsg = err instanceof Error ? err.message.slice(0, 200) : "Unknown error";
108
+ console.error(`[file-sync] Failed to initialize Supabase: ${safeMsg}`);
109
+ }
110
+ return null;
111
+ }
112
+ }
113
+ case "convex": {
114
+ try {
115
+ const url = requireEnv("CONVEX_URL");
116
+ if (!url.startsWith("https://")) {
117
+ console.error("[file-sync] CONVEX_URL must use HTTPS");
118
+ return null;
119
+ }
120
+ const { ConvexFileSyncAdapter } = await import("../convex/adapter.js");
121
+ const { ConvexClient } = await import("convex/browser");
122
+ const client = new ConvexClient(url);
123
+ return new ConvexFileSyncAdapter(client);
124
+ }
125
+ catch (err) {
126
+ if (err instanceof Error &&
127
+ "code" in err &&
128
+ err.code === "ERR_MODULE_NOT_FOUND") {
129
+ console.error("[file-sync] convex not installed. Run: pnpm add convex");
130
+ }
131
+ else if (err instanceof Error &&
132
+ err.message.startsWith("Missing required")) {
133
+ console.error(`[file-sync] ${err.message}`);
134
+ }
135
+ else {
136
+ const safeMsg = err instanceof Error ? err.message.slice(0, 200) : "Unknown error";
137
+ console.error(`[file-sync] Failed to initialize Convex: ${safeMsg}`);
138
+ }
139
+ return null;
140
+ }
141
+ }
142
+ default: {
143
+ const _exhaustive = backend;
144
+ console.error(`[file-sync] Unknown backend: ${String(_exhaustive)}`);
145
+ return null;
146
+ }
147
+ }
148
+ }
149
+ // ---------------------------------------------------------------------------
150
+ // Public factory
151
+ // ---------------------------------------------------------------------------
152
+ /**
153
+ * Create a file sync instance from environment variables.
154
+ *
155
+ * Returns a bundled result with the sync instance, SSE emitter, and shutdown
156
+ * function. Returns `{ status: "disabled" }` when `FILE_SYNC_ENABLED` is not
157
+ * `"true"`, and `{ status: "error", reason }` on misconfiguration.
158
+ *
159
+ * This is the first async `create*` function in the codebase — all others
160
+ * (createServer, createFileWatcher, createSSEHandler) are synchronous.
161
+ * Async is unavoidable here due to dynamic imports and adapter initialization.
162
+ */
163
+ export async function createFileSync(options) {
164
+ if (process.env.FILE_SYNC_ENABLED !== "true") {
165
+ return { status: "disabled" };
166
+ }
167
+ // Default to "drizzle" (SQLite, zero-config) when FILE_SYNC_BACKEND is not set.
168
+ const backendEnv = process.env.FILE_SYNC_BACKEND || "drizzle";
169
+ if (!isValidBackend(backendEnv)) {
170
+ const reason = `FILE_SYNC_ENABLED=true but FILE_SYNC_BACKEND is invalid ("${backendEnv}")`;
171
+ console.warn(`[file-sync] ${reason}`);
172
+ return { status: "error", reason };
173
+ }
174
+ const backend = backendEnv;
175
+ const adapter = await createAdapter(backend, options);
176
+ if (!adapter) {
177
+ return {
178
+ status: "error",
179
+ reason: `Failed to initialize ${backend} adapter`,
180
+ };
181
+ }
182
+ let appId = readPackageName() || "app";
183
+ // Strip @scope/ prefix from scoped npm packages
184
+ appId = appId.replace(/^@[^/]+\//, "");
185
+ const ownerId = "shared";
186
+ try {
187
+ validateIdentifier("appId", appId);
188
+ validateIdentifier("ownerId", ownerId);
189
+ }
190
+ catch (err) {
191
+ const safeMsg = err instanceof Error ? err.message.slice(0, 200) : "Unknown error";
192
+ console.error(`[file-sync] Invalid identifier: ${safeMsg}`);
193
+ return { status: "error", reason: `Invalid identifier: ${safeMsg}` };
194
+ }
195
+ const syncOptions = {
196
+ appId,
197
+ ownerId,
198
+ contentRoot: options.contentRoot,
199
+ syncConfigPath: path.resolve(options.contentRoot, "sync-config.json"),
200
+ adapter,
201
+ };
202
+ const sync = new FileSync(syncOptions);
203
+ try {
204
+ await sync.initFileSync();
205
+ }
206
+ catch (err) {
207
+ const safeMsg = err instanceof Error ? err.message.slice(0, 200) : "Unknown error";
208
+ console.error(`[file-sync] Init failed: ${safeMsg}`);
209
+ return { status: "error", reason: `Init failed: ${safeMsg}` };
210
+ }
211
+ return {
212
+ status: "ready",
213
+ fileSync: sync,
214
+ sseEmitter: { emitter: sync.syncEvents, event: "sync" },
215
+ shutdown: () => sync.stop(),
216
+ };
217
+ }
218
+ //# sourceMappingURL=create-file-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-file-sync.js","sourceRoot":"","sources":["../../../src/adapters/sync/create-file-sync.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import { EventEmitter } from "events";
2
- import type { FileSyncAdapter } from "./types.js";
1
+ import { TypedEventEmitter, type FileSyncAdapter, type FileSyncEvents } from "./types.js";
3
2
  export interface FileSyncOptions {
4
3
  /** Unique app identifier (e.g. "content-workspace") */
5
4
  appId: string;
@@ -7,10 +6,12 @@ export interface FileSyncOptions {
7
6
  ownerId: string;
8
7
  /** Root directory for synced content */
9
8
  contentRoot: string;
10
- /** Database adapter for file sync operations */
9
+ /** Adapter for file sync operations */
11
10
  adapter: FileSyncAdapter;
12
11
  /** Path to sync-config.json. Default: <contentRoot>/sync-config.json */
13
12
  syncConfigPath?: string;
13
+ /** Concurrency limit for startup sync operations. Default: 10 */
14
+ startupConcurrency?: number;
14
15
  }
15
16
  export type SyncEvent = {
16
17
  type: "conflict-resolved";
@@ -28,13 +29,26 @@ export type SyncEvent = {
28
29
  };
29
30
  export declare class FileSync {
30
31
  private options;
31
- private recentlyPulled;
32
+ private lastSyncedHash;
33
+ private mergeBaseCache;
32
34
  private recentlyPushed;
33
- private lastSyncedContent;
35
+ private expectedWrites;
36
+ private pushInFlight;
34
37
  private sharedSyncInitialized;
35
38
  private privateSyncInitialized;
39
+ private retryQueue;
40
+ private retryTimer;
41
+ private flushing;
42
+ private abortController;
43
+ private stopped;
44
+ private watchers;
45
+ private unsubscribeRemote;
36
46
  private purgeTimer;
37
- readonly syncEvents: EventEmitter<[never]>;
47
+ private hasError;
48
+ private lastSyncTimestamp;
49
+ private conflictPaths;
50
+ readonly syncEvents: TypedEventEmitter<FileSyncEvents>;
51
+ get conflictCount(): number;
38
52
  constructor(options: FileSyncOptions);
39
53
  /**
40
54
  * Initialize the shared sync channel.
@@ -45,6 +59,20 @@ export declare class FileSync {
45
59
  * Initialize the private sync channel using a per-user UID.
46
60
  */
47
61
  initPrivateSync(userUid: string): Promise<void>;
62
+ /**
63
+ * Graceful shutdown. Cancels in-flight operations, drains retry queue,
64
+ * closes watchers, unsubscribes listeners, and disposes the adapter.
65
+ */
66
+ stop(): Promise<void>;
67
+ /**
68
+ * Check if a file was recently written by the sync engine (echo suppression).
69
+ * Consumes the entry — can only return true once per write.
70
+ */
71
+ wasSyncPulled(relPath: string): boolean;
72
+ /**
73
+ * Get paths of currently unresolved conflicts.
74
+ */
75
+ getConflictPaths(): string[];
48
76
  private emitSyncEvent;
49
77
  private markRecent;
50
78
  private wasRecent;
@@ -52,6 +80,12 @@ export declare class FileSync {
52
80
  private readLocalFile;
53
81
  private writeSyncedFile;
54
82
  private docId;
83
+ private updateMergeBase;
84
+ private enqueueRetry;
85
+ private flushRetryQueue;
86
+ private appendDeadLetter;
87
+ private writeDeadLetterLog;
88
+ private writeSyncStatus;
55
89
  private resolveConflict;
56
90
  private initStartupSync;
57
91
  private startRemoteListener;
@@ -1 +1 @@
1
- {"version":3,"file":"file-sync.d.ts","sourceRoot":"","sources":["../../../src/adapters/sync/file-sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMlD,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,OAAO,EAAE,eAAe,CAAC;IACzB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,SAAS,GACjB;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;CACvD,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAQnE,qBAAa,QAAQ;IAUP,OAAO,CAAC,OAAO;IAT3B,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,UAAU,CAA+C;IAEjE,QAAQ,CAAC,UAAU,wBAAsB;gBAErB,OAAO,EAAE,eAAe;IAI5C;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBnC;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBrD,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,eAAe;YAiET,eAAe;IAmF7B,OAAO,CAAC,mBAAmB;IAgE3B,OAAO,CAAC,gBAAgB;CAyEzB"}
1
+ {"version":3,"file":"file-sync.d.ts","sourceRoot":"","sources":["../../../src/adapters/sync/file-sync.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,iBAAiB,EACjB,KAAK,eAAe,EAGpB,KAAK,cAAc,EAGpB,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,OAAO,EAAE,eAAe,CAAC;IACzB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,SAAS,GACjB;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;CACvD,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAWnE,qBAAa,QAAQ;IAqCP,OAAO,CAAC,OAAO;IAnC3B,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,sBAAsB,CAAS;IAGvC,OAAO,CAAC,UAAU,CAGd;IACJ,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,UAAU,CAA+C;IAGjE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,aAAa,CAAqB;IAG1C,QAAQ,CAAC,UAAU,oCAA2C;IAE9D,IAAI,aAAa,IAAI,MAAM,CAE1B;gBAEmB,OAAO,EAAE,eAAe;IAQ5C;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAmDnC;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BrD;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwD3B;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQvC;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAM5B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,YAAY;YAuBN,eAAe;IA6B7B,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,eAAe;YAuFT,eAAe;IA4I7B,OAAO,CAAC,mBAAmB;IAkG3B,OAAO,CAAC,gBAAgB;CA6FzB"}