@superblocksteam/vite-plugin-file-sync 2.0.137 → 2.0.138-next.1

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 (229) hide show
  1. package/dist/ai-service/agent/middleware.d.ts.map +1 -1
  2. package/dist/ai-service/agent/middleware.js +2 -22
  3. package/dist/ai-service/agent/middleware.js.map +1 -1
  4. package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts +1 -0
  5. package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts.map +1 -1
  6. package/dist/ai-service/agent/tools/build-capture-screenshot.js +150 -7
  7. package/dist/ai-service/agent/tools/build-capture-screenshot.js.map +1 -1
  8. package/dist/ai-service/agent/tools/build-read-file.d.ts +10 -0
  9. package/dist/ai-service/agent/tools/build-read-file.d.ts.map +1 -1
  10. package/dist/ai-service/agent/tools/build-read-file.js +14 -1
  11. package/dist/ai-service/agent/tools/build-read-file.js.map +1 -1
  12. package/dist/ai-service/agent/tools/index.d.ts +1 -1
  13. package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
  14. package/dist/ai-service/agent/tools/index.js +1 -1
  15. package/dist/ai-service/agent/tools/index.js.map +1 -1
  16. package/dist/ai-service/agent/tools.d.ts +1 -1
  17. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  18. package/dist/ai-service/agent/tools.js +15 -1
  19. package/dist/ai-service/agent/tools.js.map +1 -1
  20. package/dist/ai-service/agent/tools2/tools/grep.d.ts.map +1 -1
  21. package/dist/ai-service/agent/tools2/tools/grep.js +2 -1
  22. package/dist/ai-service/agent/tools2/tools/grep.js.map +1 -1
  23. package/dist/ai-service/agent/tools2/tools/remember-knowledge.d.ts.map +1 -1
  24. package/dist/ai-service/agent/tools2/tools/remember-knowledge.js +8 -0
  25. package/dist/ai-service/agent/tools2/tools/remember-knowledge.js.map +1 -1
  26. package/dist/ai-service/agent/tools2/tools/start-test-run.d.ts.map +1 -1
  27. package/dist/ai-service/agent/tools2/tools/start-test-run.js +14 -6
  28. package/dist/ai-service/agent/tools2/tools/start-test-run.js.map +1 -1
  29. package/dist/ai-service/agent/tools2/tools/web-fetch.d.ts +2 -0
  30. package/dist/ai-service/agent/tools2/tools/web-fetch.d.ts.map +1 -1
  31. package/dist/ai-service/agent/tools2/tools/web-fetch.js +10 -5
  32. package/dist/ai-service/agent/tools2/tools/web-fetch.js.map +1 -1
  33. package/dist/ai-service/agent/utils.d.ts.map +1 -1
  34. package/dist/ai-service/agent/utils.js +25 -7
  35. package/dist/ai-service/agent/utils.js.map +1 -1
  36. package/dist/ai-service/app-interface/linter.d.ts.map +1 -1
  37. package/dist/ai-service/app-interface/linter.js +14 -3
  38. package/dist/ai-service/app-interface/linter.js.map +1 -1
  39. package/dist/ai-service/app-interface/npm-package-lookup.d.ts +19 -14
  40. package/dist/ai-service/app-interface/npm-package-lookup.d.ts.map +1 -1
  41. package/dist/ai-service/app-interface/npm-package-lookup.js +56 -23
  42. package/dist/ai-service/app-interface/npm-package-lookup.js.map +1 -1
  43. package/dist/ai-service/app-interface/npm-registry.d.ts +96 -48
  44. package/dist/ai-service/app-interface/npm-registry.d.ts.map +1 -1
  45. package/dist/ai-service/app-interface/npm-registry.js +247 -220
  46. package/dist/ai-service/app-interface/npm-registry.js.map +1 -1
  47. package/dist/ai-service/app-interface/shell.d.ts +36 -0
  48. package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
  49. package/dist/ai-service/app-interface/shell.js +183 -8
  50. package/dist/ai-service/app-interface/shell.js.map +1 -1
  51. package/dist/ai-service/app-skills/helpers.d.ts.map +1 -1
  52. package/dist/ai-service/app-skills/helpers.js +48 -8
  53. package/dist/ai-service/app-skills/helpers.js.map +1 -1
  54. package/dist/ai-service/app-skills/manager.d.ts +5 -0
  55. package/dist/ai-service/app-skills/manager.d.ts.map +1 -1
  56. package/dist/ai-service/app-skills/manager.js +13 -4
  57. package/dist/ai-service/app-skills/manager.js.map +1 -1
  58. package/dist/ai-service/attachments/uploaded-content-part.d.ts.map +1 -1
  59. package/dist/ai-service/attachments/uploaded-content-part.js +12 -5
  60. package/dist/ai-service/attachments/uploaded-content-part.js.map +1 -1
  61. package/dist/ai-service/index.d.ts +1 -2
  62. package/dist/ai-service/index.d.ts.map +1 -1
  63. package/dist/ai-service/index.js +16 -175
  64. package/dist/ai-service/index.js.map +1 -1
  65. package/dist/ai-service/judge/judge-eval-service-runner.js +0 -4
  66. package/dist/ai-service/judge/judge-eval-service-runner.js.map +1 -1
  67. package/dist/ai-service/judge/judge-service.js +1 -1
  68. package/dist/ai-service/judge/judge-service.js.map +1 -1
  69. package/dist/ai-service/knowledge/knowledge-metrics-emitters.d.ts +20 -0
  70. package/dist/ai-service/knowledge/knowledge-metrics-emitters.d.ts.map +1 -0
  71. package/dist/ai-service/knowledge/knowledge-metrics-emitters.js +77 -0
  72. package/dist/ai-service/knowledge/knowledge-metrics-emitters.js.map +1 -0
  73. package/dist/ai-service/knowledge/knowledge-metrics.d.ts +43 -0
  74. package/dist/ai-service/knowledge/knowledge-metrics.d.ts.map +1 -0
  75. package/dist/ai-service/knowledge/knowledge-metrics.js +217 -0
  76. package/dist/ai-service/knowledge/knowledge-metrics.js.map +1 -0
  77. package/dist/ai-service/llm/client.d.ts +144 -18
  78. package/dist/ai-service/llm/client.d.ts.map +1 -1
  79. package/dist/ai-service/llm/client.js +303 -48
  80. package/dist/ai-service/llm/client.js.map +1 -1
  81. package/dist/ai-service/llm/context-v2/context-metrics.d.ts +1 -0
  82. package/dist/ai-service/llm/context-v2/context-metrics.d.ts.map +1 -1
  83. package/dist/ai-service/llm/context-v2/context-metrics.js +14 -1
  84. package/dist/ai-service/llm/context-v2/context-metrics.js.map +1 -1
  85. package/dist/ai-service/llm/context-v2/context.d.ts +3 -0
  86. package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -1
  87. package/dist/ai-service/llm/context-v2/context.js +34 -1
  88. package/dist/ai-service/llm/context-v2/context.js.map +1 -1
  89. package/dist/ai-service/llm/context-v2/manager.d.ts.map +1 -1
  90. package/dist/ai-service/llm/context-v2/manager.js +4 -1
  91. package/dist/ai-service/llm/context-v2/manager.js.map +1 -1
  92. package/dist/ai-service/llm/interaction/adapters/vercel.d.ts +1 -1
  93. package/dist/ai-service/llm/interaction/adapters/vercel.d.ts.map +1 -1
  94. package/dist/ai-service/llm/interaction/adapters/vercel.js +19 -4
  95. package/dist/ai-service/llm/interaction/adapters/vercel.js.map +1 -1
  96. package/dist/ai-service/llm/interaction/provider.d.ts +17 -3
  97. package/dist/ai-service/llm/interaction/provider.d.ts.map +1 -1
  98. package/dist/ai-service/llm/provider.d.ts.map +1 -1
  99. package/dist/ai-service/llm/provider.js +19 -15
  100. package/dist/ai-service/llm/provider.js.map +1 -1
  101. package/dist/ai-service/llm/stream/managed-stream.d.ts.map +1 -1
  102. package/dist/ai-service/llm/stream/managed-stream.js +25 -2
  103. package/dist/ai-service/llm/stream/managed-stream.js.map +1 -1
  104. package/dist/ai-service/llm/stream/observers/llmobs.d.ts +9 -0
  105. package/dist/ai-service/llm/stream/observers/llmobs.d.ts.map +1 -1
  106. package/dist/ai-service/llm/stream/observers/llmobs.js +22 -5
  107. package/dist/ai-service/llm/stream/observers/llmobs.js.map +1 -1
  108. package/dist/ai-service/llm/stream/observers/logging.d.ts.map +1 -1
  109. package/dist/ai-service/llm/stream/observers/logging.js +17 -12
  110. package/dist/ai-service/llm/stream/observers/logging.js.map +1 -1
  111. package/dist/ai-service/llm/stream/orchestrator.d.ts +1 -0
  112. package/dist/ai-service/llm/stream/orchestrator.d.ts.map +1 -1
  113. package/dist/ai-service/llm/stream/orchestrator.js +131 -0
  114. package/dist/ai-service/llm/stream/orchestrator.js.map +1 -1
  115. package/dist/ai-service/llm/types.d.ts +17 -6
  116. package/dist/ai-service/llm/types.d.ts.map +1 -1
  117. package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.d.ts +3 -1
  118. package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.d.ts.map +1 -1
  119. package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js +13 -5
  120. package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js.map +1 -1
  121. package/dist/ai-service/security/safety-classifier.d.ts +14 -1
  122. package/dist/ai-service/security/safety-classifier.d.ts.map +1 -1
  123. package/dist/ai-service/security/safety-classifier.js +26 -12
  124. package/dist/ai-service/security/safety-classifier.js.map +1 -1
  125. package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.d.ts +1 -1
  126. package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.d.ts.map +1 -1
  127. package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.js +35 -18
  128. package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.js.map +1 -1
  129. package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts +1 -1
  130. package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts.map +1 -1
  131. package/dist/ai-service/skills/system/third-party-migration/skill.generated.js +7 -5
  132. package/dist/ai-service/skills/system/third-party-migration/skill.generated.js.map +1 -1
  133. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  134. package/dist/ai-service/state-machine/clark-fsm.js +3 -2
  135. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  136. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  137. package/dist/ai-service/state-machine/handlers/agent-planning.js +14 -7
  138. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  139. package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts +1 -1
  140. package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -1
  141. package/dist/ai-service/state-machine/handlers/awaiting-user.js +40 -27
  142. package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -1
  143. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts +14 -0
  144. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  145. package/dist/ai-service/state-machine/handlers/llm-generating.js +72 -16
  146. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  147. package/dist/ai-service/state-machine/handlers/next-steps.d.ts +8 -1
  148. package/dist/ai-service/state-machine/handlers/next-steps.d.ts.map +1 -1
  149. package/dist/ai-service/state-machine/handlers/next-steps.js +13 -11
  150. package/dist/ai-service/state-machine/handlers/next-steps.js.map +1 -1
  151. package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
  152. package/dist/ai-service/state-machine/helpers/peer.js +3 -2
  153. package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
  154. package/dist/ai-service/state-machine/helpers/stable-peer.d.ts +5 -0
  155. package/dist/ai-service/state-machine/helpers/stable-peer.d.ts.map +1 -1
  156. package/dist/ai-service/state-machine/helpers/stable-peer.js +37 -0
  157. package/dist/ai-service/state-machine/helpers/stable-peer.js.map +1 -1
  158. package/dist/ai-service/template-renderer.d.ts.map +1 -1
  159. package/dist/ai-service/template-renderer.js +2 -2
  160. package/dist/ai-service/template-renderer.js.map +1 -1
  161. package/dist/ai-service/types.d.ts +2 -2
  162. package/dist/ai-service/types.d.ts.map +1 -1
  163. package/dist/dev-server-ws-smoke-client.d.ts +41 -0
  164. package/dist/dev-server-ws-smoke-client.d.ts.map +1 -0
  165. package/dist/dev-server-ws-smoke-client.js +314 -0
  166. package/dist/dev-server-ws-smoke-client.js.map +1 -0
  167. package/dist/early-error-relay.d.ts +31 -0
  168. package/dist/early-error-relay.d.ts.map +1 -0
  169. package/dist/early-error-relay.js +88 -0
  170. package/dist/early-error-relay.js.map +1 -0
  171. package/dist/file-sync-vite-plugin.d.ts +26 -1
  172. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  173. package/dist/file-sync-vite-plugin.js +82 -43
  174. package/dist/file-sync-vite-plugin.js.map +1 -1
  175. package/dist/file-system-helpers.d.ts +13 -0
  176. package/dist/file-system-helpers.d.ts.map +1 -1
  177. package/dist/file-system-helpers.js +18 -1
  178. package/dist/file-system-helpers.js.map +1 -1
  179. package/dist/file-system-manager.d.ts +0 -1
  180. package/dist/file-system-manager.d.ts.map +1 -1
  181. package/dist/file-system-manager.js +0 -53
  182. package/dist/file-system-manager.js.map +1 -1
  183. package/dist/injected-index.d.ts +6 -0
  184. package/dist/injected-index.d.ts.map +1 -1
  185. package/dist/injected-index.js +59 -14
  186. package/dist/injected-index.js.map +1 -1
  187. package/dist/migration/migration-routes.d.ts +3 -0
  188. package/dist/migration/migration-routes.d.ts.map +1 -1
  189. package/dist/migration/migration-routes.js +93 -108
  190. package/dist/migration/migration-routes.js.map +1 -1
  191. package/dist/migration/restructure.d.ts +15 -0
  192. package/dist/migration/restructure.d.ts.map +1 -1
  193. package/dist/migration/restructure.js +50 -1
  194. package/dist/migration/restructure.js.map +1 -1
  195. package/dist/migration-templates/app-fullstack/eslint.config.js +6 -1
  196. package/dist/migration-templates/app-fullstack/package.json +2 -1
  197. package/dist/plugin-options.d.ts +7 -0
  198. package/dist/plugin-options.d.ts.map +1 -1
  199. package/dist/plugin-options.js.map +1 -1
  200. package/dist/socket-manager.d.ts.map +1 -1
  201. package/dist/socket-manager.js +0 -5
  202. package/dist/socket-manager.js.map +1 -1
  203. package/dist/sync-service/list-dir.d.ts +1 -1
  204. package/dist/sync-service/list-dir.js +3 -3
  205. package/dist/sync-service/list-dir.js.map +1 -1
  206. package/dist/util/log-sanitizer.d.ts.map +1 -1
  207. package/dist/util/log-sanitizer.js +13 -6
  208. package/dist/util/log-sanitizer.js.map +1 -1
  209. package/dist/util/summarize-for-logging.d.ts +14 -0
  210. package/dist/util/summarize-for-logging.d.ts.map +1 -0
  211. package/dist/util/summarize-for-logging.js +94 -0
  212. package/dist/util/summarize-for-logging.js.map +1 -0
  213. package/package.json +8 -8
  214. package/dist/ai-service/agent/tools2/tools/explain-code-finalize.d.ts +0 -4
  215. package/dist/ai-service/agent/tools2/tools/explain-code-finalize.d.ts.map +0 -1
  216. package/dist/ai-service/agent/tools2/tools/explain-code-finalize.js +0 -19
  217. package/dist/ai-service/agent/tools2/tools/explain-code-finalize.js.map +0 -1
  218. package/dist/ai-service/llm/impl/anthropic.d.ts +0 -3
  219. package/dist/ai-service/llm/impl/anthropic.d.ts.map +0 -1
  220. package/dist/ai-service/llm/impl/anthropic.js +0 -15
  221. package/dist/ai-service/llm/impl/anthropic.js.map +0 -1
  222. package/dist/ai-service/prompts/explain-code.d.ts +0 -7
  223. package/dist/ai-service/prompts/explain-code.d.ts.map +0 -1
  224. package/dist/ai-service/prompts/explain-code.js +0 -23
  225. package/dist/ai-service/prompts/explain-code.js.map +0 -1
  226. package/dist/ai-service/util/json-stream-parser.d.ts +0 -20
  227. package/dist/ai-service/util/json-stream-parser.d.ts.map +0 -1
  228. package/dist/ai-service/util/json-stream-parser.js +0 -139
  229. package/dist/ai-service/util/json-stream-parser.js.map +0 -1
@@ -0,0 +1,41 @@
1
+ import { WebSocket } from "ws";
2
+ import { AiGenerationState } from "@superblocksteam/library-shared/types";
3
+ import type { AiGenerateRequest, AiMode, CoreModelName, LLMProviderConfig } from "@superblocksteam/library-shared/types";
4
+ type Provider = LLMProviderConfig["provider"];
5
+ export interface ClientOptions {
6
+ applicationId: string;
7
+ baseUrl: string;
8
+ coreModel: CoreModelName;
9
+ jwt: string;
10
+ mode: AiMode;
11
+ peerId: string;
12
+ prompt: string;
13
+ provider: Provider;
14
+ timeoutMs: number;
15
+ userId?: string;
16
+ }
17
+ export type GenerateOptions = Pick<ClientOptions, "coreModel" | "jwt" | "mode" | "prompt" | "provider">;
18
+ export interface DevServerWsConnectionOptions extends Pick<ClientOptions, "applicationId" | "baseUrl" | "peerId" | "timeoutMs" | "userId"> {
19
+ closeOnTerminalGenerationState?: boolean;
20
+ onClose?: (event: WebSocket.CloseEvent) => void;
21
+ onEvent: (event: unknown) => void;
22
+ }
23
+ export interface DevServerWsClient {
24
+ close: (reason?: string) => void;
25
+ generate: (options: GenerateOptions) => Promise<{
26
+ status: "started" | "interrupted";
27
+ }>;
28
+ waitForClose: () => Promise<void>;
29
+ }
30
+ export declare function parseArgs(args: string[], env?: NodeJS.ProcessEnv): ClientOptions;
31
+ export declare function buildWsUrl(options: Pick<ClientOptions, "applicationId" | "baseUrl" | "peerId" | "userId">): URL;
32
+ export declare function buildGenerateRequest(options: GenerateOptions): AiGenerateRequest & {
33
+ queueMode: "interrupt";
34
+ };
35
+ export declare function buildAuthorization(jwt: string): string;
36
+ export declare function isTerminalGenerationState(state: AiGenerationState): boolean;
37
+ export declare function isMainModule(moduleUrl: string, argvPath: string | undefined, cwd?: string): boolean;
38
+ export declare function connectDevServerWsClient(options: DevServerWsConnectionOptions): Promise<DevServerWsClient>;
39
+ export declare function runClient(options: ClientOptions): Promise<void>;
40
+ export {};
41
+ //# sourceMappingURL=dev-server-ws-smoke-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-server-ws-smoke-client.d.ts","sourceRoot":"","sources":["../src/dev-server-ws-smoke-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAEV,iBAAiB,EACjB,MAAM,EACN,aAAa,EAEb,iBAAiB,EAGlB,MAAM,uCAAuC,CAAC;AAQ/C,KAAK,QAAQ,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,aAAa,EACb,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CACrD,CAAC;AAEF,MAAM,WAAW,4BAA6B,SAAQ,IAAI,CACxD,aAAa,EACb,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAChE;IACC,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,UAAU,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,CACR,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,GAAG,aAAa,CAAA;KAAE,CAAC,CAAC;IACpD,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAuCD,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,aAAa,CA0Bf;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,IAAI,CACX,aAAa,EACb,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAClD,GACA,GAAG,CASL;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,GACvB,iBAAiB,GAAG;IAAE,SAAS,EAAE,WAAW,CAAA;CAAE,CAkBhD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAM3E;AAED,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,GAAG,SAAgB,GAClB,OAAO,CAGT;AA0KD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,iBAAiB,CAAC,CA+C5B;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBrE"}
@@ -0,0 +1,314 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { WebSocket } from "ws";
5
+ import { AiGenerationState } from "@superblocksteam/library-shared/types";
6
+ import { createISocketClient, ISocket, } from "@superblocksteam/shared";
7
+ const DEFAULTS = {
8
+ baseUrl: "http://localhost:3304",
9
+ coreModel: "claude-sonnet-4-5",
10
+ mode: "BUILD",
11
+ provider: "bedrock",
12
+ timeoutMs: 180_000,
13
+ };
14
+ function readFlag(args, name) {
15
+ const flag = `--${name}`;
16
+ const index = args.indexOf(flag);
17
+ if (index === -1)
18
+ return undefined;
19
+ const value = args[index + 1];
20
+ if (!value || value.startsWith("--")) {
21
+ throw new Error(`${flag} requires a value`);
22
+ }
23
+ return value;
24
+ }
25
+ function requireValue(value, message) {
26
+ if (!value)
27
+ throw new Error(message);
28
+ return value;
29
+ }
30
+ function readPositiveNumberFlag(args, name, fallback) {
31
+ const raw = readFlag(args, name);
32
+ const value = raw === undefined ? fallback : Number(raw);
33
+ if (!Number.isFinite(value) || value <= 0) {
34
+ throw new Error(`--${name} must be a positive number`);
35
+ }
36
+ return value;
37
+ }
38
+ export function parseArgs(args, env = process.env) {
39
+ return {
40
+ applicationId: requireValue(readFlag(args, "application-id") ?? env.SUPERBLOCKS_APPLICATION_ID, "--application-id is required"),
41
+ baseUrl: readFlag(args, "base-url") ??
42
+ env.SUPERBLOCKS_DEV_SERVER_URL ??
43
+ DEFAULTS.baseUrl,
44
+ coreModel: (readFlag(args, "core-model") ??
45
+ env.SUPERBLOCKS_AI_CORE_MODEL ??
46
+ DEFAULTS.coreModel),
47
+ jwt: requireValue(readFlag(args, "jwt") ?? env.SUPERBLOCKS_DEV_SERVER_JWT, "--jwt is required"),
48
+ mode: (readFlag(args, "mode") ?? DEFAULTS.mode),
49
+ peerId: readFlag(args, "peer-id") ?? `smoke-${randomUUID()}`,
50
+ prompt: requireValue(readFlag(args, "prompt"), "--prompt is required"),
51
+ provider: (readFlag(args, "provider") ??
52
+ env.SUPERBLOCKS_AI_PROVIDER ??
53
+ DEFAULTS.provider),
54
+ timeoutMs: readPositiveNumberFlag(args, "timeout-ms", DEFAULTS.timeoutMs),
55
+ userId: readFlag(args, "user-id") ?? env.SUPERBLOCKS_USER_ID,
56
+ };
57
+ }
58
+ export function buildWsUrl(options) {
59
+ const url = new URL("/sb-updates", options.baseUrl);
60
+ url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
61
+ url.searchParams.set("peerId", options.peerId);
62
+ if (options.userId) {
63
+ url.searchParams.set("userId", options.userId);
64
+ }
65
+ url.searchParams.set("applicationId", options.applicationId);
66
+ return url;
67
+ }
68
+ export function buildGenerateRequest(options) {
69
+ return {
70
+ jwt: options.jwt,
71
+ llmConfig: {
72
+ coreModel: options.coreModel,
73
+ interleavedThinking: false,
74
+ provider: options.provider,
75
+ thinkingBudgetTokens: "0",
76
+ thinkingEnabled: false,
77
+ unifiedProviderEnabled: true,
78
+ },
79
+ mode: options.mode,
80
+ prompt: options.prompt,
81
+ promptContext: { entities: [], integrations: [] },
82
+ queueMode: "interrupt",
83
+ requestId: randomUUID(),
84
+ userPreferences: { suggestNextSteps: false },
85
+ };
86
+ }
87
+ export function buildAuthorization(jwt) {
88
+ return `Bearer ${jwt}`;
89
+ }
90
+ export function isTerminalGenerationState(state) {
91
+ return (state === AiGenerationState.COMPLETED ||
92
+ state === AiGenerationState.CANCELLED ||
93
+ state === AiGenerationState.IDLE);
94
+ }
95
+ export function isMainModule(moduleUrl, argvPath, cwd = process.cwd()) {
96
+ if (!argvPath)
97
+ return false;
98
+ return fileURLToPath(moduleUrl) === resolve(cwd, argvPath);
99
+ }
100
+ function createEditorHandlers(onEvent, onTerminalGenerationState) {
101
+ const ok = [async () => undefined];
102
+ return {
103
+ aiPushMessage: [
104
+ async (message) => {
105
+ onEvent({ type: "message", message });
106
+ },
107
+ ],
108
+ aiSetGenerationState: [
109
+ async (payload) => {
110
+ onEvent({ type: "generation_state", ...payload });
111
+ if (isTerminalGenerationState(payload.state)) {
112
+ onTerminalGenerationState();
113
+ }
114
+ },
115
+ ],
116
+ aiPushTokenUsage: [
117
+ async (payload) => {
118
+ onEvent({ type: "token_usage", ...payload });
119
+ },
120
+ ],
121
+ error: [
122
+ async (payload) => {
123
+ onEvent({ type: "error", error: payload });
124
+ },
125
+ ],
126
+ aiRequestToolPermission: [
127
+ async (payload) => {
128
+ onEvent({ type: "tool_permission", request: payload });
129
+ },
130
+ ],
131
+ aiClearToolPermission: ok,
132
+ aiPushChangeInfo: ok,
133
+ aiPushPromptInterpretation: ok,
134
+ aiSetDraftState: ok,
135
+ aiPushContextUsed: ok,
136
+ aiPushCodeExplanation: ok,
137
+ aiPushApiUsageSummary: ok,
138
+ aiPushErrorSummary: ok,
139
+ aiPushPolicyAgentStep: ok,
140
+ aiPushTaskStatus: ok,
141
+ updateScope: ok,
142
+ resetScope: ok,
143
+ manualDeleteApi: ok,
144
+ manualUpdateApi: ok,
145
+ updateApiInputs: ok,
146
+ releasingLock: ok,
147
+ closedByServer: ok,
148
+ syncStatus: ok,
149
+ setDegradedMode: ok,
150
+ setApiDependencies: ok,
151
+ appFactsChanged: ok,
152
+ requestGitRefresh: ok,
153
+ reloadIframe: ok,
154
+ clarkLog: ok,
155
+ notifyDeploySuccess: ok,
156
+ aiNavigatePreviewRoute: [
157
+ async () => ({
158
+ success: false,
159
+ error: "smoke client has no browser route",
160
+ }),
161
+ ],
162
+ aiCaptureScreenshot: [
163
+ async () => ({
164
+ success: false,
165
+ error: "smoke client has no browser viewport",
166
+ }),
167
+ ],
168
+ aiExecuteRequestToIntegration: [
169
+ async () => ({
170
+ error: "smoke client cannot execute browser integration requests",
171
+ }),
172
+ ],
173
+ aiGetOpenApiSpec: [async () => undefined],
174
+ aiGetIntegration: [
175
+ async () => {
176
+ throw new Error("smoke client cannot provide integration metadata");
177
+ },
178
+ ],
179
+ aiGetIntegrations: [async () => []],
180
+ aiExecuteV2Api: [
181
+ async () => {
182
+ throw new Error("smoke client cannot execute SDK APIs");
183
+ },
184
+ ],
185
+ aiExecuteSdkApi: [
186
+ async () => {
187
+ throw new Error("smoke client cannot execute SDK APIs");
188
+ },
189
+ ],
190
+ aiOpenIntegrationSetup: [
191
+ async () => ({
192
+ success: false,
193
+ error: "smoke client cannot open integration setup",
194
+ }),
195
+ ],
196
+ aiOpenExistingIntegration: [
197
+ async () => ({
198
+ success: false,
199
+ error: "smoke client cannot open integration setup",
200
+ }),
201
+ ],
202
+ aiUpdateIntegrationFields: [
203
+ async () => ({
204
+ success: false,
205
+ error: "smoke client cannot update integrations",
206
+ }),
207
+ ],
208
+ aiTestIntegrationConnection: [
209
+ async () => ({
210
+ success: false,
211
+ error: {
212
+ message: "smoke client cannot test integrations",
213
+ details: "",
214
+ },
215
+ }),
216
+ ],
217
+ aiSaveIntegration: [
218
+ async () => ({
219
+ success: false,
220
+ error: "smoke client cannot save integrations",
221
+ }),
222
+ ],
223
+ aiCloseIntegrationSetup: [async () => ({ success: true })],
224
+ aiGetIntegrationFormSchema: [
225
+ async () => ({
226
+ success: false,
227
+ error: "smoke client cannot provide integration forms",
228
+ }),
229
+ ],
230
+ aiDeleteIntegration: [
231
+ async () => ({
232
+ success: false,
233
+ error: "smoke client cannot delete integrations",
234
+ }),
235
+ ],
236
+ aiGetIntegrationDependents: [
237
+ async () => ({
238
+ success: false,
239
+ error: "smoke client cannot inspect integration dependents",
240
+ }),
241
+ ],
242
+ };
243
+ }
244
+ async function openWs(url) {
245
+ const ws = new WebSocket(url);
246
+ return await new Promise((resolve, reject) => {
247
+ const onOpen = () => {
248
+ ws.off("error", onError);
249
+ resolve(ws);
250
+ };
251
+ const onError = (err) => {
252
+ ws.off("open", onOpen);
253
+ reject(err);
254
+ };
255
+ ws.once("open", onOpen);
256
+ ws.once("error", onError);
257
+ });
258
+ }
259
+ export async function connectDevServerWsClient(options) {
260
+ const ws = await openWs(buildWsUrl(options));
261
+ const closed = new Promise((resolve) => {
262
+ ws.on("close", () => resolve());
263
+ });
264
+ const socket = new ISocket(ws, createEditorHandlers(options.onEvent, () => {
265
+ if (options.closeOnTerminalGenerationState) {
266
+ ws.close(1000, "terminal generation state");
267
+ }
268
+ }), [], {
269
+ onClose: (event) => {
270
+ options.onClose?.(event);
271
+ },
272
+ timeouts: {
273
+ connectionTimeoutInSeconds: undefined,
274
+ noResponseTimeoutInSeconds: options.timeoutMs / 1000,
275
+ },
276
+ });
277
+ const client = createISocketClient(socket);
278
+ return {
279
+ close: (reason) => socket.close(reason),
280
+ generate: (generateOptions) => client.requestWithTracing("editor.aiGenerateWithQueue", buildGenerateRequest(generateOptions), {}, buildAuthorization(generateOptions.jwt)),
281
+ waitForClose: () => closed,
282
+ };
283
+ }
284
+ export async function runClient(options) {
285
+ const client = await connectDevServerWsClient({
286
+ ...options,
287
+ closeOnTerminalGenerationState: true,
288
+ onClose: (event) => {
289
+ console.error(`closed code=${event.code} reason=${event.reason}`);
290
+ },
291
+ onEvent: (event) => console.log(JSON.stringify(event)),
292
+ });
293
+ const timeout = setTimeout(() => {
294
+ client.close();
295
+ }, options.timeoutMs);
296
+ try {
297
+ console.error(`connected ${buildWsUrl(options).toString()}`);
298
+ const result = await client.generate(options);
299
+ console.error(`aiGenerateWithQueue ${JSON.stringify(result)}`);
300
+ await client.waitForClose();
301
+ }
302
+ finally {
303
+ clearTimeout(timeout);
304
+ }
305
+ }
306
+ if (isMainModule(import.meta.url, process.argv[1])) {
307
+ Promise.resolve()
308
+ .then(() => runClient(parseArgs(process.argv.slice(2))))
309
+ .catch((error) => {
310
+ console.error(error instanceof Error ? error.message : String(error));
311
+ process.exitCode = 1;
312
+ });
313
+ }
314
+ //# sourceMappingURL=dev-server-ws-smoke-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-server-ws-smoke-client.js","sourceRoot":"","sources":["../src/dev-server-ws-smoke-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Early, dependency-free relay for errors that break the customer app's module
3
+ * graph BEFORE React (and the in-app error capture) can run.
4
+ *
5
+ * Example: a bad named import — `import { AppProvider } from "..."` when the
6
+ * package only exports `App`. Vite compiles this fine, so the `vite:error` HMR
7
+ * event never fires. The browser fails to *instantiate* the whole entry module
8
+ * graph, so no module body runs — including the library code that installs the
9
+ * in-app `error-capture` handlers. The only code still alive is this script,
10
+ * which the dev server injects in the document `<head>` before `root.tsx`.
11
+ *
12
+ * When such an uncaught error fires, this relays it to the parent editor with
13
+ * the same `sb-load-error` message the in-app bridge uses, so the editor clears
14
+ * the "Loading your app" spinner and shows the "Fix with Clark" panel (and
15
+ * forwards the error to Clark's build_debug).
16
+ *
17
+ * It defers to the in-app capture whenever that capture installed (the graph
18
+ * evaluated), keyed off `window.__SB_EDIT_ERROR_CAPTURE_INSTALLED`, to avoid
19
+ * duplicate load-error reports for post-evaluation crashes.
20
+ *
21
+ * The function must stay self-contained (no imports, no closure references) so
22
+ * {@link getEarlyErrorRelayScript} can inline it verbatim via `toString()`.
23
+ */
24
+ export declare function relayPreloadErrorsToParent(win: Window): void;
25
+ /**
26
+ * Returns the relay as a self-invoking script string to inject into the preview
27
+ * iframe's HTML head. Inlines {@link relayPreloadErrorsToParent} verbatim so the
28
+ * injected code and the unit-tested code are identical.
29
+ */
30
+ export declare function getEarlyErrorRelayScript(): string;
31
+ //# sourceMappingURL=early-error-relay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"early-error-relay.d.ts","sourceRoot":"","sources":["../src/early-error-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAgE5D;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Early, dependency-free relay for errors that break the customer app's module
3
+ * graph BEFORE React (and the in-app error capture) can run.
4
+ *
5
+ * Example: a bad named import — `import { AppProvider } from "..."` when the
6
+ * package only exports `App`. Vite compiles this fine, so the `vite:error` HMR
7
+ * event never fires. The browser fails to *instantiate* the whole entry module
8
+ * graph, so no module body runs — including the library code that installs the
9
+ * in-app `error-capture` handlers. The only code still alive is this script,
10
+ * which the dev server injects in the document `<head>` before `root.tsx`.
11
+ *
12
+ * When such an uncaught error fires, this relays it to the parent editor with
13
+ * the same `sb-load-error` message the in-app bridge uses, so the editor clears
14
+ * the "Loading your app" spinner and shows the "Fix with Clark" panel (and
15
+ * forwards the error to Clark's build_debug).
16
+ *
17
+ * It defers to the in-app capture whenever that capture installed (the graph
18
+ * evaluated), keyed off `window.__SB_EDIT_ERROR_CAPTURE_INSTALLED`, to avoid
19
+ * duplicate load-error reports for post-evaluation crashes.
20
+ *
21
+ * The function must stay self-contained (no imports, no closure references) so
22
+ * {@link getEarlyErrorRelayScript} can inline it verbatim via `toString()`.
23
+ */
24
+ export function relayPreloadErrorsToParent(win) {
25
+ if (!win || win.parent === win)
26
+ return;
27
+ // Edit-mode only, mirroring the library's isEditMode(). The editor overlay and
28
+ // Clark only exist in edit mode; in a deployed/preview iframe this would just
29
+ // post editor-only messages to a non-editor parent. `_SB_VIEW_MODE` is set
30
+ // inline in the iframe HTML before this script runs.
31
+ if (win._SB_VIEW_MODE !== "dev") {
32
+ return;
33
+ }
34
+ let notified = false;
35
+ const relay = (message) => {
36
+ const w = win;
37
+ // The in-app capture owns errors once the module graph evaluated.
38
+ //
39
+ // Timing contract: the flag is set synchronously at the start of
40
+ // installEditModeErrorCapture(). Module-evaluation crashes surface as
41
+ // asynchronous `error` events, so by event time the flag reliably reflects
42
+ // whether the in-app capture's module executed: set (graph evaluated → in-app
43
+ // capture owns it) or unset (graph never evaluated → only this relay is
44
+ // alive). We therefore read it at event time, not at install time.
45
+ if (w.__SB_EDIT_ERROR_CAPTURE_INSTALLED === true)
46
+ return;
47
+ if (notified)
48
+ return;
49
+ notified = true;
50
+ try {
51
+ // The editor's sb-load-error handler clears the loader (setLoaded) and
52
+ // shows the failure UI, so we do NOT send sb-ready — that would log a
53
+ // bogus iframe-ready / load-complete "success" for a failed load.
54
+ win.parent.postMessage({
55
+ type: "sb-load-error",
56
+ // `source: "early_relay"` lets the editor tag its app-render-error
57
+ // metric by capture path (this relay vs the in-app handler). Keep the
58
+ // literal in sync with LoadErrorSource in the library types.
59
+ payload: { error: message, source: "early_relay" },
60
+ startTime: Date.now(),
61
+ }, "*");
62
+ }
63
+ catch (_e) {
64
+ // Best-effort: a failed postMessage must not throw out of the handler.
65
+ }
66
+ };
67
+ win.addEventListener("error", (event) => {
68
+ const err = event.error;
69
+ const message = (err && (err.stack || err.message)) || event.message || "Unknown error";
70
+ relay(String(message));
71
+ });
72
+ win.addEventListener("unhandledrejection", (event) => {
73
+ const reason = event.reason;
74
+ const message = (reason && (reason.stack || reason.message)) ||
75
+ String(reason) ||
76
+ "Unhandled promise rejection";
77
+ relay(String(message));
78
+ });
79
+ }
80
+ /**
81
+ * Returns the relay as a self-invoking script string to inject into the preview
82
+ * iframe's HTML head. Inlines {@link relayPreloadErrorsToParent} verbatim so the
83
+ * injected code and the unit-tested code are identical.
84
+ */
85
+ export function getEarlyErrorRelayScript() {
86
+ return `(${relayPreloadErrorsToParent.toString()})(window);`;
87
+ }
88
+ //# sourceMappingURL=early-error-relay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"early-error-relay.js","sourceRoot":"","sources":["../src/early-error-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,0BAA0B,CAAC,GAAW;IACpD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO;IACvC,+EAA+E;IAC/E,8EAA8E;IAC9E,2EAA2E;IAC3E,qDAAqD;IACrD,IAAK,GAA6C,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QAC3E,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,KAAK,GAAG,CAAC,OAAe,EAAQ,EAAE;QACtC,MAAM,CAAC,GAAG,GAET,CAAC;QACF,kEAAkE;QAClE,EAAE;QACF,iEAAiE;QACjE,sEAAsE;QACtE,2EAA2E;QAC3E,8EAA8E;QAC9E,wEAAwE;QACxE,mEAAmE;QACnE,IAAI,CAAC,CAAC,iCAAiC,KAAK,IAAI;YAAE,OAAO;QACzD,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC;YACH,uEAAuE;YACvE,sEAAsE;YACtE,kEAAkE;YAClE,GAAG,CAAC,MAAM,CAAC,WAAW,CACpB;gBACE,IAAI,EAAE,eAAe;gBACrB,mEAAmE;gBACnE,sEAAsE;gBACtE,6DAA6D;gBAC7D,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE;gBAClD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,EACD,GAAG,CACJ,CAAC;QACJ,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,uEAAuE;QACzE,CAAC;IACH,CAAC,CAAC;IAEF,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAiB,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAyD,CAAC;QAC5E,MAAM,OAAO,GACX,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC;QAC1E,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,KAA4B,EAAE,EAAE;QAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,MAER,CAAC;QACd,MAAM,OAAO,GACX,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC;YACd,6BAA6B,CAAC;QAChC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,0BAA0B,CAAC,QAAQ,EAAE,YAAY,CAAC;AAC/D,CAAC"}
@@ -1,8 +1,33 @@
1
- import type { Plugin } from "vite";
1
+ import type { Plugin, ViteDevServer } from "vite";
2
+ import { ContextFlushScheduler } from "./ai-service/context-flush-scheduler.js";
3
+ import type { AiService } from "./ai-service/index.js";
2
4
  import type { FileSyncPluginOptions, FileSyncPluginParams } from "./plugin-options.js";
5
+ import type { SyncService } from "./sync-service/index.js";
6
+ import type { Logger } from "./util/logger.js";
3
7
  export declare const PLUGIN_NAME = "sb-file-sync";
8
+ export declare function createGenerationFreshnessTracker(): {
9
+ markStarted: (generationId: string) => void;
10
+ isLatest: (generationId: string) => boolean;
11
+ };
12
+ interface GenerationCompletedFileSyncParams {
13
+ aiService: Pick<AiService, "handleClearBuildSystemErrors" | "hasConnectedPeer">;
14
+ contextFlushScheduler: Pick<ContextFlushScheduler, "flushNow"> | undefined;
15
+ hasHadAnyDrafts: boolean;
16
+ isFirstContentfulGeneration: boolean;
17
+ isLatestGeneration?: () => boolean;
18
+ logger: Logger;
19
+ producedDraft: boolean;
20
+ server: {
21
+ ws: Pick<ViteDevServer["ws"], "send">;
22
+ };
23
+ syncService: Pick<SyncService, "applicationId" | "branchName" | "uploadDirectory" | "uploadDirectoryNowIfNeeded">;
24
+ }
25
+ export declare function handleGenerationCompletedFileSync({ aiService, contextFlushScheduler, hasHadAnyDrafts, isFirstContentfulGeneration, isLatestGeneration, logger, producedDraft, server, syncService, }: GenerationCompletedFileSyncParams): Promise<{
26
+ isFirstContentfulGeneration: boolean;
27
+ }>;
4
28
  export declare function fileSyncVitePlugin(pluginParams?: FileSyncPluginParams, options?: FileSyncPluginOptions): {
5
29
  plugin: Plugin[];
6
30
  dispose: () => void;
7
31
  };
32
+ export {};
8
33
  //# sourceMappingURL=file-sync-vite-plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-sync-vite-plugin.d.ts","sourceRoot":"","sources":["../src/file-sync-vite-plugin.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAA0B,MAAM,MAAM,CAAC;AAsC3D,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAoD7B,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAE1C,wBAAgB,kBAAkB,CAChC,YAAY,CAAC,EAAE,oBAAoB,EACnC,OAAO,CAAC,EAAE,qBAAqB,GAC9B;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAklD3C"}
1
+ {"version":3,"file":"file-sync-vite-plugin.d.ts","sourceRoot":"","sources":["../src/file-sync-vite-plugin.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAA0B,aAAa,EAAE,MAAM,MAAM,CAAC;AAY1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAEhF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAyBvD,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAK3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA0C/C,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAE1C,wBAAgB,gCAAgC,IAAI;IAClD,WAAW,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;CAC7C,CAQA;AAED,UAAU,iCAAiC;IACzC,SAAS,EAAE,IAAI,CACb,SAAS,EACT,8BAA8B,GAAG,kBAAkB,CACpD,CAAC;IACF,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC;IAC3E,eAAe,EAAE,OAAO,CAAC;IACzB,2BAA2B,EAAE,OAAO,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAClD,WAAW,EAAE,IAAI,CACf,WAAW,EACT,eAAe,GACf,YAAY,GACZ,iBAAiB,GACjB,4BAA4B,CAC/B,CAAC;CACH;AAED,wBAAsB,iCAAiC,CAAC,EACtD,SAAS,EACT,qBAAqB,EACrB,eAAe,EACf,2BAA2B,EAC3B,kBAA+B,EAC/B,MAAM,EACN,aAAa,EACb,MAAM,EACN,WAAW,GACZ,EAAE,iCAAiC,GAAG,OAAO,CAAC;IAC7C,2BAA2B,EAAE,OAAO,CAAC;CACtC,CAAC,CAsED;AAED,wBAAgB,kBAAkB,CAChC,YAAY,CAAC,EAAE,oBAAoB,EACnC,OAAO,CAAC,EAAE,qBAAqB,GAC9B;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CA+iD3C"}