@superblocksteam/vite-plugin-file-sync 2.0.129 → 2.0.130-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/dist/ai-service/agent/middleware.d.ts.map +1 -1
  2. package/dist/ai-service/agent/middleware.js +51 -1
  3. package/dist/ai-service/agent/middleware.js.map +1 -1
  4. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
  5. package/dist/ai-service/agent/prompts/build-base-system-prompt.js +44 -4
  6. package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
  7. package/dist/ai-service/agent/subagents/coding/run-coding-subagent.d.ts.map +1 -1
  8. package/dist/ai-service/agent/subagents/coding/run-coding-subagent.js +25 -0
  9. package/dist/ai-service/agent/subagents/coding/run-coding-subagent.js.map +1 -1
  10. package/dist/ai-service/agent/tools/apis/build-api-artifact.d.ts.map +1 -1
  11. package/dist/ai-service/agent/tools/apis/build-api-artifact.js +4 -3
  12. package/dist/ai-service/agent/tools/apis/build-api-artifact.js.map +1 -1
  13. package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
  14. package/dist/ai-service/agent/tools/apis/test-api.js +22 -0
  15. package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
  16. package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts +25 -0
  17. package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts.map +1 -1
  18. package/dist/ai-service/agent/tools/build-capture-screenshot.js +117 -11
  19. package/dist/ai-service/agent/tools/build-capture-screenshot.js.map +1 -1
  20. package/dist/ai-service/agent/tools/build-manage-checklist.d.ts.map +1 -1
  21. package/dist/ai-service/agent/tools/build-manage-checklist.js +22 -0
  22. package/dist/ai-service/agent/tools/build-manage-checklist.js.map +1 -1
  23. package/dist/ai-service/agent/tools/databases/dev-database-tasks.d.ts +291 -0
  24. package/dist/ai-service/agent/tools/databases/dev-database-tasks.d.ts.map +1 -0
  25. package/dist/ai-service/agent/tools/databases/dev-database-tasks.js +386 -0
  26. package/dist/ai-service/agent/tools/databases/dev-database-tasks.js.map +1 -0
  27. package/dist/ai-service/agent/tools/databases/dev-database-tools.d.ts +17 -0
  28. package/dist/ai-service/agent/tools/databases/dev-database-tools.d.ts.map +1 -0
  29. package/dist/ai-service/agent/tools/databases/dev-database-tools.js +19 -0
  30. package/dist/ai-service/agent/tools/databases/dev-database-tools.js.map +1 -0
  31. package/dist/ai-service/agent/tools/index.d.ts +0 -1
  32. package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
  33. package/dist/ai-service/agent/tools/index.js +0 -1
  34. package/dist/ai-service/agent/tools/index.js.map +1 -1
  35. package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +1 -1
  36. package/dist/ai-service/agent/tools/integrations/execute-request.d.ts.map +1 -1
  37. package/dist/ai-service/agent/tools/integrations/execute-request.js +20 -9
  38. package/dist/ai-service/agent/tools/integrations/execute-request.js.map +1 -1
  39. package/dist/ai-service/agent/tools/integrations/internal.d.ts +5 -1
  40. package/dist/ai-service/agent/tools/integrations/internal.d.ts.map +1 -1
  41. package/dist/ai-service/agent/tools/integrations/internal.js +2 -1
  42. package/dist/ai-service/agent/tools/integrations/internal.js.map +1 -1
  43. package/dist/ai-service/agent/tools/screenshot-selector.d.ts +22 -0
  44. package/dist/ai-service/agent/tools/screenshot-selector.d.ts.map +1 -0
  45. package/dist/ai-service/agent/tools/screenshot-selector.js +158 -0
  46. package/dist/ai-service/agent/tools/screenshot-selector.js.map +1 -0
  47. package/dist/ai-service/agent/tools.d.ts +17 -0
  48. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  49. package/dist/ai-service/agent/tools.js +65 -6
  50. package/dist/ai-service/agent/tools.js.map +1 -1
  51. package/dist/ai-service/agent/tools2/access-control.d.ts.map +1 -1
  52. package/dist/ai-service/agent/tools2/access-control.js +6 -1
  53. package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
  54. package/dist/ai-service/agent/tools2/tools/cancel-task.d.ts +20 -0
  55. package/dist/ai-service/agent/tools2/tools/cancel-task.d.ts.map +1 -0
  56. package/dist/ai-service/agent/tools2/tools/cancel-task.js +39 -0
  57. package/dist/ai-service/agent/tools2/tools/cancel-task.js.map +1 -0
  58. package/dist/ai-service/agent/tools2/tools/check-task.d.ts +37 -0
  59. package/dist/ai-service/agent/tools2/tools/check-task.d.ts.map +1 -0
  60. package/dist/ai-service/agent/tools2/tools/check-task.js +53 -0
  61. package/dist/ai-service/agent/tools2/tools/check-task.js.map +1 -0
  62. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
  63. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +10 -0
  64. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
  65. package/dist/ai-service/agent/tools2/tools/git.d.ts +1 -1
  66. package/dist/ai-service/agent/tools2/tools/git.js +1 -1
  67. package/dist/ai-service/agent/tools2/tools/git.js.map +1 -1
  68. package/dist/ai-service/agent/tools2/tools/grep.d.ts +6 -1
  69. package/dist/ai-service/agent/tools2/tools/grep.d.ts.map +1 -1
  70. package/dist/ai-service/agent/tools2/tools/grep.js +37 -13
  71. package/dist/ai-service/agent/tools2/tools/grep.js.map +1 -1
  72. package/dist/ai-service/agent/tools2/tools/index.d.ts +4 -0
  73. package/dist/ai-service/agent/tools2/tools/index.d.ts.map +1 -1
  74. package/dist/ai-service/agent/tools2/tools/index.js +8 -0
  75. package/dist/ai-service/agent/tools2/tools/index.js.map +1 -1
  76. package/dist/ai-service/agent/tools2/tools/list-tasks.d.ts +21 -0
  77. package/dist/ai-service/agent/tools2/tools/list-tasks.d.ts.map +1 -0
  78. package/dist/ai-service/agent/tools2/tools/list-tasks.js +35 -0
  79. package/dist/ai-service/agent/tools2/tools/list-tasks.js.map +1 -0
  80. package/dist/ai-service/agent/tools2/tools/wait-for-task.d.ts +46 -0
  81. package/dist/ai-service/agent/tools2/tools/wait-for-task.d.ts.map +1 -0
  82. package/dist/ai-service/agent/tools2/tools/wait-for-task.js +83 -0
  83. package/dist/ai-service/agent/tools2/tools/wait-for-task.js.map +1 -0
  84. package/dist/ai-service/agent/tools2/types.d.ts +3 -0
  85. package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
  86. package/dist/ai-service/agent/tools2/types.js.map +1 -1
  87. package/dist/ai-service/agent/utils.d.ts.map +1 -1
  88. package/dist/ai-service/agent/utils.js +37 -2
  89. package/dist/ai-service/agent/utils.js.map +1 -1
  90. package/dist/ai-service/app-interface/npm-package-lookup.d.ts +22 -0
  91. package/dist/ai-service/app-interface/npm-package-lookup.d.ts.map +1 -1
  92. package/dist/ai-service/app-interface/npm-package-lookup.js +88 -1
  93. package/dist/ai-service/app-interface/npm-package-lookup.js.map +1 -1
  94. package/dist/ai-service/app-interface/npm-registry.d.ts +7 -0
  95. package/dist/ai-service/app-interface/npm-registry.d.ts.map +1 -1
  96. package/dist/ai-service/app-interface/npm-registry.js +74 -4
  97. package/dist/ai-service/app-interface/npm-registry.js.map +1 -1
  98. package/dist/ai-service/app-interface/shell.d.ts +32 -1
  99. package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
  100. package/dist/ai-service/app-interface/shell.js +86 -3
  101. package/dist/ai-service/app-interface/shell.js.map +1 -1
  102. package/dist/ai-service/app-skills/manager.d.ts +4 -1
  103. package/dist/ai-service/app-skills/manager.d.ts.map +1 -1
  104. package/dist/ai-service/app-skills/manager.js +16 -1
  105. package/dist/ai-service/app-skills/manager.js.map +1 -1
  106. package/dist/ai-service/chat/chat-session-store.d.ts +10 -0
  107. package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
  108. package/dist/ai-service/chat/chat-session-store.js +55 -28
  109. package/dist/ai-service/chat/chat-session-store.js.map +1 -1
  110. package/dist/ai-service/context-download.d.ts.map +1 -1
  111. package/dist/ai-service/context-download.js +50 -40
  112. package/dist/ai-service/context-download.js.map +1 -1
  113. package/dist/ai-service/dev-database-client.d.ts +27 -4
  114. package/dist/ai-service/dev-database-client.d.ts.map +1 -1
  115. package/dist/ai-service/dev-database-client.js +35 -1
  116. package/dist/ai-service/dev-database-client.js.map +1 -1
  117. package/dist/ai-service/dev-database-file-sync.d.ts +41 -0
  118. package/dist/ai-service/dev-database-file-sync.d.ts.map +1 -0
  119. package/dist/ai-service/dev-database-file-sync.js +29 -0
  120. package/dist/ai-service/dev-database-file-sync.js.map +1 -0
  121. package/dist/ai-service/features.d.ts +14 -0
  122. package/dist/ai-service/features.d.ts.map +1 -1
  123. package/dist/ai-service/features.js +14 -0
  124. package/dist/ai-service/features.js.map +1 -1
  125. package/dist/ai-service/index.d.ts +136 -5
  126. package/dist/ai-service/index.d.ts.map +1 -1
  127. package/dist/ai-service/index.js +748 -99
  128. package/dist/ai-service/index.js.map +1 -1
  129. package/dist/ai-service/integrations/store.d.ts +2 -0
  130. package/dist/ai-service/integrations/store.d.ts.map +1 -1
  131. package/dist/ai-service/integrations/store.js +4 -0
  132. package/dist/ai-service/integrations/store.js.map +1 -1
  133. package/dist/ai-service/knowledge/knowledge-manager.d.ts +8 -10
  134. package/dist/ai-service/knowledge/knowledge-manager.d.ts.map +1 -1
  135. package/dist/ai-service/knowledge/knowledge-manager.js +135 -119
  136. package/dist/ai-service/knowledge/knowledge-manager.js.map +1 -1
  137. package/dist/ai-service/llm/chaos-fetch.d.ts.map +1 -1
  138. package/dist/ai-service/llm/chaos-fetch.js +7 -3
  139. package/dist/ai-service/llm/chaos-fetch.js.map +1 -1
  140. package/dist/ai-service/llm/client.d.ts.map +1 -1
  141. package/dist/ai-service/llm/client.js +23 -7
  142. package/dist/ai-service/llm/client.js.map +1 -1
  143. package/dist/ai-service/llm/context-v2/adapter.d.ts +3 -0
  144. package/dist/ai-service/llm/context-v2/adapter.d.ts.map +1 -1
  145. package/dist/ai-service/llm/context-v2/adapter.js +9 -0
  146. package/dist/ai-service/llm/context-v2/adapter.js.map +1 -1
  147. package/dist/ai-service/llm/context-v2/compaction/server-side.d.ts +2 -0
  148. package/dist/ai-service/llm/context-v2/compaction/server-side.d.ts.map +1 -1
  149. package/dist/ai-service/llm/context-v2/compaction/server-side.js +6 -2
  150. package/dist/ai-service/llm/context-v2/compaction/server-side.js.map +1 -1
  151. package/dist/ai-service/llm/context-v2/context-management.d.ts +3 -9
  152. package/dist/ai-service/llm/context-v2/context-management.d.ts.map +1 -1
  153. package/dist/ai-service/llm/context-v2/context-management.js +3 -9
  154. package/dist/ai-service/llm/context-v2/context-management.js.map +1 -1
  155. package/dist/ai-service/llm/context-v2/context-metrics.d.ts +23 -0
  156. package/dist/ai-service/llm/context-v2/context-metrics.d.ts.map +1 -0
  157. package/dist/ai-service/llm/context-v2/context-metrics.js +144 -0
  158. package/dist/ai-service/llm/context-v2/context-metrics.js.map +1 -0
  159. package/dist/ai-service/llm/context-v2/context.d.ts +16 -1
  160. package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -1
  161. package/dist/ai-service/llm/context-v2/context.js +138 -26
  162. package/dist/ai-service/llm/context-v2/context.js.map +1 -1
  163. package/dist/ai-service/llm/context-v2/conversation-context.d.ts +26 -1
  164. package/dist/ai-service/llm/context-v2/conversation-context.d.ts.map +1 -1
  165. package/dist/ai-service/llm/context-v2/manager.d.ts +15 -1
  166. package/dist/ai-service/llm/context-v2/manager.d.ts.map +1 -1
  167. package/dist/ai-service/llm/context-v2/manager.js +97 -40
  168. package/dist/ai-service/llm/context-v2/manager.js.map +1 -1
  169. package/dist/ai-service/llm/context-v2/storage/local.d.ts.map +1 -1
  170. package/dist/ai-service/llm/context-v2/storage/local.js +3 -0
  171. package/dist/ai-service/llm/context-v2/storage/local.js.map +1 -1
  172. package/dist/ai-service/llm/context-v2/types.d.ts +27 -0
  173. package/dist/ai-service/llm/context-v2/types.d.ts.map +1 -1
  174. package/dist/ai-service/llm/context-v2/types.js +108 -23
  175. package/dist/ai-service/llm/context-v2/types.js.map +1 -1
  176. package/dist/ai-service/llm/error.d.ts +21 -0
  177. package/dist/ai-service/llm/error.d.ts.map +1 -1
  178. package/dist/ai-service/llm/error.js +72 -12
  179. package/dist/ai-service/llm/error.js.map +1 -1
  180. package/dist/ai-service/llm/stream/compaction-text-block.d.ts +14 -0
  181. package/dist/ai-service/llm/stream/compaction-text-block.d.ts.map +1 -0
  182. package/dist/ai-service/llm/stream/compaction-text-block.js +29 -0
  183. package/dist/ai-service/llm/stream/compaction-text-block.js.map +1 -0
  184. package/dist/ai-service/llm/stream/idle-monitor.d.ts.map +1 -1
  185. package/dist/ai-service/llm/stream/idle-monitor.js +12 -28
  186. package/dist/ai-service/llm/stream/idle-monitor.js.map +1 -1
  187. package/dist/ai-service/llm/stream/managed-stream.d.ts.map +1 -1
  188. package/dist/ai-service/llm/stream/managed-stream.js +22 -0
  189. package/dist/ai-service/llm/stream/managed-stream.js.map +1 -1
  190. package/dist/ai-service/llm/stream/observers/context.d.ts +4 -0
  191. package/dist/ai-service/llm/stream/observers/context.d.ts.map +1 -1
  192. package/dist/ai-service/llm/stream/observers/context.js +57 -5
  193. package/dist/ai-service/llm/stream/observers/context.js.map +1 -1
  194. package/dist/ai-service/policy-gate-step.d.ts +17 -0
  195. package/dist/ai-service/policy-gate-step.d.ts.map +1 -0
  196. package/dist/ai-service/policy-gate-step.js +52 -0
  197. package/dist/ai-service/policy-gate-step.js.map +1 -0
  198. package/dist/ai-service/quota-client.d.ts +28 -0
  199. package/dist/ai-service/quota-client.d.ts.map +1 -0
  200. package/dist/ai-service/quota-client.js +68 -0
  201. package/dist/ai-service/quota-client.js.map +1 -0
  202. package/dist/ai-service/security/index.d.ts +1 -1
  203. package/dist/ai-service/security/index.d.ts.map +1 -1
  204. package/dist/ai-service/security/index.js +1 -1
  205. package/dist/ai-service/security/index.js.map +1 -1
  206. package/dist/ai-service/security/safety-classifier.d.ts +9 -26
  207. package/dist/ai-service/security/safety-classifier.d.ts.map +1 -1
  208. package/dist/ai-service/security/safety-classifier.js +29 -44
  209. package/dist/ai-service/security/safety-classifier.js.map +1 -1
  210. package/dist/ai-service/skills/system/_registry.generated.d.ts.map +1 -1
  211. package/dist/ai-service/skills/system/_registry.generated.js +2 -0
  212. package/dist/ai-service/skills/system/_registry.generated.js.map +1 -1
  213. package/dist/ai-service/skills/system/common-import-issues/skill.generated.d.ts +2 -0
  214. package/dist/ai-service/skills/system/common-import-issues/skill.generated.d.ts.map +1 -0
  215. package/dist/ai-service/skills/system/common-import-issues/skill.generated.js +93 -0
  216. package/dist/ai-service/skills/system/common-import-issues/skill.generated.js.map +1 -0
  217. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts +1 -1
  218. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts.map +1 -1
  219. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js +15 -0
  220. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js.map +1 -1
  221. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts +1 -1
  222. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts.map +1 -1
  223. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js +7 -2
  224. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js.map +1 -1
  225. package/dist/ai-service/state-machine/clark-fsm.d.ts +74 -1
  226. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  227. package/dist/ai-service/state-machine/clark-fsm.js +26 -7
  228. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  229. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  230. package/dist/ai-service/state-machine/handlers/agent-planning.js +223 -9
  231. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  232. package/dist/ai-service/state-machine/handlers/idle.d.ts.map +1 -1
  233. package/dist/ai-service/state-machine/handlers/idle.js +42 -6
  234. package/dist/ai-service/state-machine/handlers/idle.js.map +1 -1
  235. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  236. package/dist/ai-service/state-machine/handlers/llm-generating.js +16 -6
  237. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  238. package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
  239. package/dist/ai-service/state-machine/helpers/peer.js +9 -1
  240. package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
  241. package/dist/ai-service/tasks/access.d.ts +23 -0
  242. package/dist/ai-service/tasks/access.d.ts.map +1 -0
  243. package/dist/ai-service/tasks/access.js +26 -0
  244. package/dist/ai-service/tasks/access.js.map +1 -0
  245. package/dist/ai-service/tasks/factory.d.ts +92 -0
  246. package/dist/ai-service/tasks/factory.d.ts.map +1 -0
  247. package/dist/ai-service/tasks/factory.js +54 -0
  248. package/dist/ai-service/tasks/factory.js.map +1 -0
  249. package/dist/ai-service/tasks/index.d.ts +8 -0
  250. package/dist/ai-service/tasks/index.d.ts.map +1 -0
  251. package/dist/ai-service/tasks/index.js +7 -0
  252. package/dist/ai-service/tasks/index.js.map +1 -0
  253. package/dist/ai-service/tasks/peer-push.d.ts +78 -0
  254. package/dist/ai-service/tasks/peer-push.d.ts.map +1 -0
  255. package/dist/ai-service/tasks/peer-push.js +74 -0
  256. package/dist/ai-service/tasks/peer-push.js.map +1 -0
  257. package/dist/ai-service/tasks/poll-loop.d.ts +55 -0
  258. package/dist/ai-service/tasks/poll-loop.d.ts.map +1 -0
  259. package/dist/ai-service/tasks/poll-loop.js +73 -0
  260. package/dist/ai-service/tasks/poll-loop.js.map +1 -0
  261. package/dist/ai-service/tasks/task-store.d.ts +106 -0
  262. package/dist/ai-service/tasks/task-store.d.ts.map +1 -0
  263. package/dist/ai-service/tasks/task-store.js +292 -0
  264. package/dist/ai-service/tasks/task-store.js.map +1 -0
  265. package/dist/ai-service/tasks/test-utils.d.ts +23 -0
  266. package/dist/ai-service/tasks/test-utils.d.ts.map +1 -0
  267. package/dist/ai-service/tasks/test-utils.js +53 -0
  268. package/dist/ai-service/tasks/test-utils.js.map +1 -0
  269. package/dist/ai-service/tasks/types.d.ts +205 -0
  270. package/dist/ai-service/tasks/types.d.ts.map +1 -0
  271. package/dist/ai-service/tasks/types.js +24 -0
  272. package/dist/ai-service/tasks/types.js.map +1 -0
  273. package/dist/ai-service/template-renderer.d.ts.map +1 -1
  274. package/dist/ai-service/template-renderer.js +1 -0
  275. package/dist/ai-service/template-renderer.js.map +1 -1
  276. package/dist/ai-service/test-utils/metrics-harness.d.ts +32 -0
  277. package/dist/ai-service/test-utils/metrics-harness.d.ts.map +1 -0
  278. package/dist/ai-service/test-utils/metrics-harness.js +67 -0
  279. package/dist/ai-service/test-utils/metrics-harness.js.map +1 -0
  280. package/dist/ai-service/test-utils/tracer-harness.d.ts +8 -0
  281. package/dist/ai-service/test-utils/tracer-harness.d.ts.map +1 -0
  282. package/dist/ai-service/test-utils/tracer-harness.js +26 -0
  283. package/dist/ai-service/test-utils/tracer-harness.js.map +1 -0
  284. package/dist/ai-service/transform/lucide-dynamic-type-imports/transformer.d.ts +40 -0
  285. package/dist/ai-service/transform/lucide-dynamic-type-imports/transformer.d.ts.map +1 -0
  286. package/dist/ai-service/transform/lucide-dynamic-type-imports/transformer.js +118 -0
  287. package/dist/ai-service/transform/lucide-dynamic-type-imports/transformer.js.map +1 -0
  288. package/dist/ai-service/util/llm-config-utils.d.ts +2 -6
  289. package/dist/ai-service/util/llm-config-utils.d.ts.map +1 -1
  290. package/dist/ai-service/util/llm-config-utils.js +2 -7
  291. package/dist/ai-service/util/llm-config-utils.js.map +1 -1
  292. package/dist/ai-service/util/rpc-timeout.d.ts +17 -7
  293. package/dist/ai-service/util/rpc-timeout.d.ts.map +1 -1
  294. package/dist/ai-service/util/rpc-timeout.js +17 -7
  295. package/dist/ai-service/util/rpc-timeout.js.map +1 -1
  296. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  297. package/dist/file-sync-vite-plugin.js +76 -6
  298. package/dist/file-sync-vite-plugin.js.map +1 -1
  299. package/dist/inject-index-vite-plugin.d.ts.map +1 -1
  300. package/dist/inject-index-vite-plugin.js +4 -0
  301. package/dist/inject-index-vite-plugin.js.map +1 -1
  302. package/dist/migration/migration-routes.d.ts +14 -0
  303. package/dist/migration/migration-routes.d.ts.map +1 -1
  304. package/dist/migration/migration-routes.js +284 -5
  305. package/dist/migration/migration-routes.js.map +1 -1
  306. package/dist/migration/migration-session-reconcile.d.ts +23 -0
  307. package/dist/migration/migration-session-reconcile.d.ts.map +1 -0
  308. package/dist/migration/migration-session-reconcile.js +129 -0
  309. package/dist/migration/migration-session-reconcile.js.map +1 -0
  310. package/dist/migration/restructure.d.ts.map +1 -1
  311. package/dist/migration/restructure.js +2 -0
  312. package/dist/migration/restructure.js.map +1 -1
  313. package/dist/migration-templates/app-fullstack/css.d.ts +3 -0
  314. package/dist/migration-templates/app-fullstack/package.json +2 -2
  315. package/dist/npm/normalize-workspace-protocol-for-npm.d.ts +15 -0
  316. package/dist/npm/normalize-workspace-protocol-for-npm.d.ts.map +1 -0
  317. package/dist/npm/normalize-workspace-protocol-for-npm.js +36 -0
  318. package/dist/npm/normalize-workspace-protocol-for-npm.js.map +1 -0
  319. package/dist/npm/prepare-package-json-for-cloud-npm.d.ts +21 -0
  320. package/dist/npm/prepare-package-json-for-cloud-npm.d.ts.map +1 -0
  321. package/dist/npm/prepare-package-json-for-cloud-npm.js +44 -0
  322. package/dist/npm/prepare-package-json-for-cloud-npm.js.map +1 -0
  323. package/dist/npm/rewrite-platform-workspace-deps.d.ts +17 -0
  324. package/dist/npm/rewrite-platform-workspace-deps.d.ts.map +1 -0
  325. package/dist/npm/rewrite-platform-workspace-deps.js +37 -0
  326. package/dist/npm/rewrite-platform-workspace-deps.js.map +1 -0
  327. package/dist/plugin-options.d.ts +8 -0
  328. package/dist/plugin-options.d.ts.map +1 -1
  329. package/dist/plugin-options.js.map +1 -1
  330. package/dist/policy-gate-run-registry.d.ts +28 -0
  331. package/dist/policy-gate-run-registry.d.ts.map +1 -0
  332. package/dist/policy-gate-run-registry.js +40 -0
  333. package/dist/policy-gate-run-registry.js.map +1 -0
  334. package/dist/policy-gate-runner.d.ts +2 -0
  335. package/dist/policy-gate-runner.d.ts.map +1 -1
  336. package/dist/policy-gate-runner.js +14 -1
  337. package/dist/policy-gate-runner.js.map +1 -1
  338. package/dist/socket-manager.d.ts.map +1 -1
  339. package/dist/socket-manager.js +55 -0
  340. package/dist/socket-manager.js.map +1 -1
  341. package/dist/sync-service/download.d.ts.map +1 -1
  342. package/dist/sync-service/download.js +6 -4
  343. package/dist/sync-service/download.js.map +1 -1
  344. package/dist/sync-service/draft-reconcile.d.ts +22 -0
  345. package/dist/sync-service/draft-reconcile.d.ts.map +1 -0
  346. package/dist/sync-service/draft-reconcile.js +24 -0
  347. package/dist/sync-service/draft-reconcile.js.map +1 -0
  348. package/dist/sync-service/index.d.ts +30 -5
  349. package/dist/sync-service/index.d.ts.map +1 -1
  350. package/dist/sync-service/index.js +59 -8
  351. package/dist/sync-service/index.js.map +1 -1
  352. package/package.json +10 -10
  353. package/dist/ai-service/agent/tools/databases/dev-database.d.ts +0 -103
  354. package/dist/ai-service/agent/tools/databases/dev-database.d.ts.map +0 -1
  355. package/dist/ai-service/agent/tools/databases/dev-database.js +0 -117
  356. package/dist/ai-service/agent/tools/databases/dev-database.js.map +0 -1
@@ -0,0 +1,55 @@
1
+ import { type TaskStatus, type TaskType } from "./types.js";
2
+ /**
3
+ * Clock abstraction used by the poll loop. The real clock wraps
4
+ * `Date.now` and `setTimeout`; `test-utils.ts` provides a deterministic
5
+ * `FakeClock` for tests.
6
+ */
7
+ export interface PollClock {
8
+ now: () => number;
9
+ sleep: (ms: number, signal?: AbortSignal) => Promise<void>;
10
+ }
11
+ export interface RunPollLoopOptions<H, R> {
12
+ type: Pick<TaskType<unknown, H, R>, "poll" | "pollSchedule">;
13
+ handle: H;
14
+ signal: AbortSignal;
15
+ clock: PollClock;
16
+ /**
17
+ * Returns the jitter delta (in ms) to add to the current scheduled
18
+ * wait. Receives the current backoff window so the perturbation
19
+ * scales proportionally (the production default is ±10% of the
20
+ * incoming wait). Tests pass `() => 0` for determinism; the
21
+ * argument is intentionally optional from the caller's perspective
22
+ * so existing zero-arg test fixtures keep type-checking.
23
+ */
24
+ jitter: (currentWaitMs: number) => number;
25
+ /**
26
+ * Called exactly once per poll attempt — both with intermediate
27
+ * `running` updates and with the final terminal status.
28
+ */
29
+ onStatus: (status: TaskStatus<R>) => void;
30
+ }
31
+ /**
32
+ * Single-task polling loop with exponential backoff and jitter.
33
+ *
34
+ * Sleeps `schedule.initialMs` (+ jitter) before the first poll, then
35
+ * doubles the wait by `schedule.factor` after each `running` reply, up
36
+ * to `schedule.maxMs`. Exits as soon as `signal` aborts or `poll` reports
37
+ * a non-running status. Poll exceptions are wrapped as a `failed`
38
+ * terminal status and reported through `onStatus`.
39
+ */
40
+ export declare function runPollLoop<H, R>(opts: RunPollLoopOptions<H, R>): Promise<void>;
41
+ /**
42
+ * Real-clock implementation for production. Honors abort by listening on
43
+ * the signal and rejecting the in-flight sleep early.
44
+ */
45
+ export declare const realClock: PollClock;
46
+ /**
47
+ * Default jitter implementation — perturbs the next wait by ±10% so a
48
+ * fleet of identically-scheduled tasks doesn't all hammer the external
49
+ * system in lockstep. Designed to be assigned directly as the
50
+ * `TaskStoreOptions.jitter` callback (no curried wrapper); the previous
51
+ * `defaultJitter(0)` initialization captured a zero baseline that
52
+ * silently disabled jitter forever.
53
+ */
54
+ export declare function defaultJitter(currentWaitMs: number): number;
55
+ //# sourceMappingURL=poll-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll-loop.d.ts","sourceRoot":"","sources":["../../../src/ai-service/tasks/poll-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,QAAQ,EACd,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC;IACtC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,CAAC;IACV,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;;;OAOG;IACH,MAAM,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C;;;OAGG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CAC3C;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,CAAC,EACpC,IAAI,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,SAkBvB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE3D"}
@@ -0,0 +1,73 @@
1
+ import { DEFAULT_POLL_SCHEDULE, } from "./types.js";
2
+ /**
3
+ * Single-task polling loop with exponential backoff and jitter.
4
+ *
5
+ * Sleeps `schedule.initialMs` (+ jitter) before the first poll, then
6
+ * doubles the wait by `schedule.factor` after each `running` reply, up
7
+ * to `schedule.maxMs`. Exits as soon as `signal` aborts or `poll` reports
8
+ * a non-running status. Poll exceptions are wrapped as a `failed`
9
+ * terminal status and reported through `onStatus`.
10
+ */
11
+ export async function runPollLoop(opts) {
12
+ const schedule = opts.type.pollSchedule ?? DEFAULT_POLL_SCHEDULE;
13
+ let wait = schedule.initialMs;
14
+ while (true) {
15
+ if (opts.signal.aborted)
16
+ return;
17
+ try {
18
+ await opts.clock.sleep(wait + opts.jitter(wait), opts.signal);
19
+ }
20
+ catch {
21
+ return;
22
+ }
23
+ if (opts.signal.aborted)
24
+ return;
25
+ let status;
26
+ try {
27
+ status = await opts.type.poll(opts.handle, opts.signal);
28
+ }
29
+ catch (err) {
30
+ const message = err instanceof Error ? err.message : String(err ?? "unknown error");
31
+ opts.onStatus({ state: "failed", error: message });
32
+ return;
33
+ }
34
+ opts.onStatus(status);
35
+ if (status.state !== "running")
36
+ return;
37
+ wait = Math.min(schedule.maxMs, wait * schedule.factor);
38
+ }
39
+ }
40
+ /**
41
+ * Real-clock implementation for production. Honors abort by listening on
42
+ * the signal and rejecting the in-flight sleep early.
43
+ */
44
+ export const realClock = {
45
+ now: () => Date.now(),
46
+ sleep: (ms, signal) => new Promise((resolve, reject) => {
47
+ if (signal?.aborted) {
48
+ reject(new DOMException("Aborted", "AbortError"));
49
+ return;
50
+ }
51
+ const t = setTimeout(() => {
52
+ signal?.removeEventListener("abort", onAbort);
53
+ resolve();
54
+ }, ms);
55
+ const onAbort = () => {
56
+ clearTimeout(t);
57
+ reject(new DOMException("Aborted", "AbortError"));
58
+ };
59
+ signal?.addEventListener("abort", onAbort, { once: true });
60
+ }),
61
+ };
62
+ /**
63
+ * Default jitter implementation — perturbs the next wait by ±10% so a
64
+ * fleet of identically-scheduled tasks doesn't all hammer the external
65
+ * system in lockstep. Designed to be assigned directly as the
66
+ * `TaskStoreOptions.jitter` callback (no curried wrapper); the previous
67
+ * `defaultJitter(0)` initialization captured a zero baseline that
68
+ * silently disabled jitter forever.
69
+ */
70
+ export function defaultJitter(currentWaitMs) {
71
+ return (Math.random() * 0.2 - 0.1) * currentWaitMs;
72
+ }
73
+ //# sourceMappingURL=poll-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll-loop.js","sourceRoot":"","sources":["../../../src/ai-service/tasks/poll-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAItB,MAAM,YAAY,CAAC;AAiCpB;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAA8B;IAE9B,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,qBAAqB,CAAC;IAClD,IAAI,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC;IAE9B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAEhC,IAAI,MAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,CAAC;YACtE,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtB,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO;QAEvC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IACrB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CACpB,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACpC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE;YACxB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC;CACL,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,aAAqB;IACjD,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,aAAa,CAAC;AACrD,CAAC"}
@@ -0,0 +1,106 @@
1
+ import type { ToolExecutionOptions } from "ai";
2
+ import { type PollClock } from "./poll-loop.js";
3
+ import type { BackgroundTaskSummary, RunningTask, TaskStatus, TaskType } from "./types.js";
4
+ /**
5
+ * Listener called whenever a task's state, message, result, or error
6
+ * changes. The same callback fires for the initial in-store snapshot
7
+ * after `start()` and for every poll update afterwards.
8
+ *
9
+ * Listeners must not throw — exceptions are caught and dropped.
10
+ */
11
+ export type TaskStatusListener = (taskId: string, status: TaskStatus<unknown>, task: RunningTask) => void;
12
+ export interface TaskStoreOptions {
13
+ /** Clock used by all poll loops. Defaults to wall-clock + `setTimeout`. */
14
+ clock?: PollClock;
15
+ /**
16
+ * Jitter generator (see poll-loop). Defaults to `defaultJitter` —
17
+ * a ±10% perturbation of the current backoff window. Tests typically
18
+ * pass `() => 0` for determinism.
19
+ */
20
+ jitter?: (currentWaitMs: number) => number;
21
+ /** ID generator (defaults to ULID). Injected for deterministic tests. */
22
+ generateId?: () => string;
23
+ }
24
+ /**
25
+ * Per-session registry + lifecycle owner for background tasks.
26
+ *
27
+ * Owns:
28
+ * - The registered `TaskType` table (`register` / `getType`).
29
+ * - The in-memory `Map<taskId, RunningTask>` of live + recently-finished tasks.
30
+ * - One `AbortController` per task that drives the loop.
31
+ * - Status change subscribers (peer push, in-memory `waitFor`).
32
+ *
33
+ * Does NOT yet handle:
34
+ * - On-disk persistence — that lives in `persistence.ts` and wraps the store.
35
+ * - Peer push or `<background_tasks>` block — those subscribe to `onStatus`.
36
+ *
37
+ * Cancellation:
38
+ * - `cancel(taskId)` aborts the loop, calls `type.cancel?.()`, emits
39
+ * `{ state: "cancelled" }`. Errors from `type.cancel` are logged and
40
+ * swallowed so cancellation always succeeds locally.
41
+ * - `cancelAll()` cancels every currently-running task.
42
+ * - `dispose()` aborts all loops without changing task state — used on
43
+ * FSM teardown so a restart can rehydrate the same on-disk records.
44
+ */
45
+ export declare class TaskStore {
46
+ private readonly clock;
47
+ private readonly jitter;
48
+ private readonly generateId;
49
+ private readonly types;
50
+ private readonly tasks;
51
+ private readonly controllers;
52
+ private readonly listeners;
53
+ private disposed;
54
+ constructor(options?: TaskStoreOptions);
55
+ register<I, H, R>(type: TaskType<I, H, R>): void;
56
+ getType(name: string): TaskType<unknown, unknown, unknown> | undefined;
57
+ /**
58
+ * Start a new task of the given type. Returns the generated `taskId`
59
+ * and the type's `initialStatus` (or `{ state: "running" }` if absent).
60
+ *
61
+ * `ownerUserId` is optional metadata that gets stored on the task so
62
+ * the LLM-facing read tools can filter cross-user access (see
63
+ * `isTaskAccessibleTo`). Pass the JWT-derived userId when authentic.
64
+ */
65
+ start<I>(typeName: string, input: I, opts: ToolExecutionOptions, options?: {
66
+ ownerUserId?: string;
67
+ }): Promise<{
68
+ taskId: string;
69
+ initialStatus: TaskStatus<unknown>;
70
+ label?: string;
71
+ }>;
72
+ get(taskId: string): RunningTask | undefined;
73
+ list(): RunningTask[];
74
+ hasActiveTasks(): boolean;
75
+ /**
76
+ * Abort the task's poll loop, call `type.cancel` if defined, mark the
77
+ * task as cancelled, and fire one cancelled status event. Safe to call
78
+ * on already-terminal tasks (no-op).
79
+ */
80
+ cancel(taskId: string): Promise<void>;
81
+ cancelAll(): Promise<void>;
82
+ /**
83
+ * Resolves with the terminal status as soon as the task leaves
84
+ * `running` state. Rejects with a TimeoutError after `timeoutMs` if
85
+ * the task is still running.
86
+ */
87
+ waitFor(taskId: string, timeoutMs: number): Promise<TaskStatus<unknown>>;
88
+ /**
89
+ * Register a listener for task status changes. Returns an unsubscribe
90
+ * function.
91
+ */
92
+ onStatus(listener: TaskStatusListener): () => void;
93
+ /** Aborts every in-flight loop without changing task state. */
94
+ dispose(): void;
95
+ /**
96
+ * Summary used by the peer push and the `<background_tasks>` block.
97
+ * Never includes `result`.
98
+ */
99
+ summarize(task: RunningTask): BackgroundTaskSummary;
100
+ private spawnPollLoop;
101
+ private applyStatus;
102
+ private emit;
103
+ private snapshotStatus;
104
+ }
105
+ export declare function generateUlid(now?: number, random?: () => number): string;
106
+ //# sourceMappingURL=task-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-store.d.ts","sourceRoot":"","sources":["../../../src/ai-service/tasks/task-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAE/C,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,qBAAqB,EACrB,WAAW,EAEX,UAAU,EACV,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,EAC3B,IAAI,EAAE,WAAW,KACd,IAAI,CAAC;AAEV,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGlB;IACJ,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkC;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAC3D,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,GAAE,gBAAqB;IAM1C,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;IAIhD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS;IAItE;;;;;;;OAOG;IACG,KAAK,CAAC,CAAC,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,oBAAoB,EAC1B,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GACrC,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QACnC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAoDF,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI5C,IAAI,IAAI,WAAW,EAAE;IAIrB,cAAc,IAAI,OAAO;IAOzB;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBrC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhC;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAiCxE;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAKlD,+DAA+D;IAC/D,OAAO,IAAI,IAAI;IAOf;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,qBAAqB;YAiBrC,aAAa;IAqB3B,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,IAAI;IAcZ,OAAO,CAAC,cAAc;CAYvB;AAUD,wBAAgB,YAAY,CAAC,GAAG,SAAa,EAAE,MAAM,eAAc,GAAG,MAAM,CAY3E"}
@@ -0,0 +1,292 @@
1
+ import { defaultJitter, realClock, runPollLoop, } from "./poll-loop.js";
2
+ /**
3
+ * Per-session registry + lifecycle owner for background tasks.
4
+ *
5
+ * Owns:
6
+ * - The registered `TaskType` table (`register` / `getType`).
7
+ * - The in-memory `Map<taskId, RunningTask>` of live + recently-finished tasks.
8
+ * - One `AbortController` per task that drives the loop.
9
+ * - Status change subscribers (peer push, in-memory `waitFor`).
10
+ *
11
+ * Does NOT yet handle:
12
+ * - On-disk persistence — that lives in `persistence.ts` and wraps the store.
13
+ * - Peer push or `<background_tasks>` block — those subscribe to `onStatus`.
14
+ *
15
+ * Cancellation:
16
+ * - `cancel(taskId)` aborts the loop, calls `type.cancel?.()`, emits
17
+ * `{ state: "cancelled" }`. Errors from `type.cancel` are logged and
18
+ * swallowed so cancellation always succeeds locally.
19
+ * - `cancelAll()` cancels every currently-running task.
20
+ * - `dispose()` aborts all loops without changing task state — used on
21
+ * FSM teardown so a restart can rehydrate the same on-disk records.
22
+ */
23
+ export class TaskStore {
24
+ clock;
25
+ jitter;
26
+ generateId;
27
+ types = new Map();
28
+ tasks = new Map();
29
+ controllers = new Map();
30
+ listeners = new Set();
31
+ disposed = false;
32
+ constructor(options = {}) {
33
+ this.clock = options.clock ?? realClock;
34
+ this.jitter = options.jitter ?? defaultJitter;
35
+ this.generateId = options.generateId ?? generateUlid;
36
+ }
37
+ register(type) {
38
+ this.types.set(type.name, type);
39
+ }
40
+ getType(name) {
41
+ return this.types.get(name);
42
+ }
43
+ /**
44
+ * Start a new task of the given type. Returns the generated `taskId`
45
+ * and the type's `initialStatus` (or `{ state: "running" }` if absent).
46
+ *
47
+ * `ownerUserId` is optional metadata that gets stored on the task so
48
+ * the LLM-facing read tools can filter cross-user access (see
49
+ * `isTaskAccessibleTo`). Pass the JWT-derived userId when authentic.
50
+ */
51
+ async start(typeName, input, opts, options = {}) {
52
+ if (this.disposed) {
53
+ throw new Error("TaskStore disposed");
54
+ }
55
+ const type = this.types.get(typeName);
56
+ if (!type) {
57
+ throw new Error(`unknown task type: ${typeName}`);
58
+ }
59
+ const startResult = (await type.start(input, opts));
60
+ const initialStatus = startResult.initialStatus ?? {
61
+ state: "running",
62
+ };
63
+ const taskId = this.generateId();
64
+ const task = {
65
+ taskId,
66
+ taskType: typeName,
67
+ externalHandle: startResult.externalHandle,
68
+ label: startResult.label,
69
+ startedAt: new Date(this.clock.now()).toISOString(),
70
+ state: initialStatus.state,
71
+ message: "message" in initialStatus ? initialStatus.message : undefined,
72
+ result: initialStatus.state === "completed"
73
+ ? initialStatus.result
74
+ : undefined,
75
+ error: initialStatus.state === "failed"
76
+ ? initialStatus.error
77
+ : undefined,
78
+ ownerUserId: options.ownerUserId,
79
+ };
80
+ this.tasks.set(taskId, task);
81
+ this.emit(taskId, initialStatus, task);
82
+ // Already-terminal initialStatus → no poll loop needed.
83
+ if (initialStatus.state === "running") {
84
+ const controller = new AbortController();
85
+ this.controllers.set(taskId, controller);
86
+ void this.spawnPollLoop(taskId, type, controller);
87
+ }
88
+ return {
89
+ taskId,
90
+ initialStatus,
91
+ label: startResult.label,
92
+ };
93
+ }
94
+ get(taskId) {
95
+ return this.tasks.get(taskId);
96
+ }
97
+ list() {
98
+ return [...this.tasks.values()];
99
+ }
100
+ hasActiveTasks() {
101
+ for (const task of this.tasks.values()) {
102
+ if (task.state === "running")
103
+ return true;
104
+ }
105
+ return false;
106
+ }
107
+ /**
108
+ * Abort the task's poll loop, call `type.cancel` if defined, mark the
109
+ * task as cancelled, and fire one cancelled status event. Safe to call
110
+ * on already-terminal tasks (no-op).
111
+ */
112
+ async cancel(taskId) {
113
+ const task = this.tasks.get(taskId);
114
+ if (!task || task.state !== "running")
115
+ return;
116
+ const controller = this.controllers.get(taskId);
117
+ controller?.abort();
118
+ this.controllers.delete(taskId);
119
+ const type = this.types.get(task.taskType);
120
+ if (type?.cancel) {
121
+ try {
122
+ await type.cancel(task.externalHandle);
123
+ }
124
+ catch {
125
+ // Best-effort; loop is already aborted locally regardless.
126
+ }
127
+ }
128
+ const status = { state: "cancelled" };
129
+ this.applyStatus(taskId, status);
130
+ }
131
+ async cancelAll() {
132
+ const ids = [...this.tasks.entries()]
133
+ .filter(([, t]) => t.state === "running")
134
+ .map(([id]) => id);
135
+ await Promise.all(ids.map((id) => this.cancel(id)));
136
+ }
137
+ /**
138
+ * Resolves with the terminal status as soon as the task leaves
139
+ * `running` state. Rejects with a TimeoutError after `timeoutMs` if
140
+ * the task is still running.
141
+ */
142
+ waitFor(taskId, timeoutMs) {
143
+ const task = this.tasks.get(taskId);
144
+ if (!task) {
145
+ return Promise.reject(new Error(`unknown task: ${taskId}`));
146
+ }
147
+ if (task.state !== "running") {
148
+ return Promise.resolve(this.snapshotStatus(task));
149
+ }
150
+ return new Promise((resolve, reject) => {
151
+ const onStatus = (id, status) => {
152
+ if (id !== taskId)
153
+ return;
154
+ if (status.state === "running")
155
+ return;
156
+ cleanup();
157
+ resolve(status);
158
+ };
159
+ const timeoutAbort = new AbortController();
160
+ const cleanup = () => {
161
+ this.listeners.delete(onStatus);
162
+ timeoutAbort.abort();
163
+ };
164
+ this.listeners.add(onStatus);
165
+ this.clock
166
+ .sleep(timeoutMs, timeoutAbort.signal)
167
+ .then(() => {
168
+ cleanup();
169
+ reject(new Error(`timeout waiting for task ${taskId}`));
170
+ })
171
+ .catch(() => {
172
+ // Aborted by cleanup() — terminal status already delivered.
173
+ });
174
+ });
175
+ }
176
+ /**
177
+ * Register a listener for task status changes. Returns an unsubscribe
178
+ * function.
179
+ */
180
+ onStatus(listener) {
181
+ this.listeners.add(listener);
182
+ return () => this.listeners.delete(listener);
183
+ }
184
+ /** Aborts every in-flight loop without changing task state. */
185
+ dispose() {
186
+ this.disposed = true;
187
+ for (const controller of this.controllers.values())
188
+ controller.abort();
189
+ this.controllers.clear();
190
+ this.listeners.clear();
191
+ }
192
+ /**
193
+ * Summary used by the peer push and the `<background_tasks>` block.
194
+ * Never includes `result`.
195
+ */
196
+ summarize(task) {
197
+ const startedAtMs = Date.parse(task.startedAt);
198
+ return {
199
+ taskId: task.taskId,
200
+ taskType: task.taskType,
201
+ label: task.label,
202
+ state: task.state,
203
+ message: task.message,
204
+ ageMs: Math.max(0, this.clock.now() - startedAtMs),
205
+ completedAt: task.state === "running"
206
+ ? undefined
207
+ : new Date(this.clock.now()).toISOString(),
208
+ error: task.error,
209
+ };
210
+ }
211
+ async spawnPollLoop(taskId, type, controller) {
212
+ const task = this.tasks.get(taskId);
213
+ if (!task)
214
+ return;
215
+ try {
216
+ await runPollLoop({
217
+ type,
218
+ handle: task.externalHandle,
219
+ signal: controller.signal,
220
+ clock: this.clock,
221
+ jitter: this.jitter,
222
+ onStatus: (status) => this.applyStatus(taskId, status),
223
+ });
224
+ }
225
+ finally {
226
+ this.controllers.delete(taskId);
227
+ }
228
+ }
229
+ applyStatus(taskId, status) {
230
+ if (this.disposed)
231
+ return;
232
+ const task = this.tasks.get(taskId);
233
+ if (!task)
234
+ return;
235
+ if (task.state !== "running")
236
+ return; // already terminal, ignore late updates
237
+ task.state = status.state;
238
+ task.message = "message" in status ? status.message : task.message;
239
+ task.result =
240
+ status.state === "completed"
241
+ ? status.result
242
+ : undefined;
243
+ task.error =
244
+ status.state === "failed"
245
+ ? status.error
246
+ : undefined;
247
+ this.emit(taskId, status, task);
248
+ }
249
+ emit(taskId, status, task) {
250
+ for (const listener of this.listeners) {
251
+ try {
252
+ listener(taskId, status, task);
253
+ }
254
+ catch {
255
+ // Listener must not break the loop.
256
+ }
257
+ }
258
+ }
259
+ snapshotStatus(task) {
260
+ switch (task.state) {
261
+ case "running":
262
+ return { state: "running", message: task.message };
263
+ case "completed":
264
+ return { state: "completed", result: task.result };
265
+ case "failed":
266
+ return { state: "failed", error: task.error ?? "unknown error" };
267
+ case "cancelled":
268
+ return { state: "cancelled" };
269
+ }
270
+ }
271
+ }
272
+ /**
273
+ * ULID generator (Crockford base32, 26 chars). Lexically sortable; no
274
+ * dependency added. Not collision-free under heavy concurrent use within
275
+ * the same millisecond, but more than sufficient for human-scale task
276
+ * spawns.
277
+ */
278
+ const CROCKFORD = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
279
+ export function generateUlid(now = Date.now(), random = Math.random) {
280
+ let ts = now;
281
+ const tsChars = [];
282
+ for (let i = 0; i < 10; i++) {
283
+ tsChars.unshift(CROCKFORD[ts % 32]);
284
+ ts = Math.floor(ts / 32);
285
+ }
286
+ let randomPart = "";
287
+ for (let i = 0; i < 16; i++) {
288
+ randomPart += CROCKFORD[Math.floor(random() * 32)];
289
+ }
290
+ return tsChars.join("") + randomPart;
291
+ }
292
+ //# sourceMappingURL=task-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-store.js","sourceRoot":"","sources":["../../../src/ai-service/tasks/task-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Test-only helpers for the tasks subsystem. Not exported from index;
3
+ * production code must not import from here.
4
+ */
5
+ /**
6
+ * Deterministic clock used by `task-store.test.ts` and `poll-loop.test.ts`.
7
+ *
8
+ * Tests advance time by calling `tick(ms)`. Any `sleep` waiters whose
9
+ * deadline has passed resolve synchronously after the tick, in deadline
10
+ * order, in microtasks (`Promise.resolve().then(...)`), so test code can
11
+ * `await` between ticks without flushing setImmediate / process.nextTick.
12
+ *
13
+ * Aborting the supplied signal rejects the waiter with the standard
14
+ * `DOMException` of name "AbortError", matching the runtime behavior we
15
+ * need from the real clock.
16
+ */
17
+ export interface FakeClock {
18
+ now: () => number;
19
+ sleep: (ms: number, signal?: AbortSignal) => Promise<void>;
20
+ tick: (ms: number) => Promise<void>;
21
+ }
22
+ export declare function createFakeClock(initialNow?: number): FakeClock;
23
+ //# sourceMappingURL=test-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../../src/ai-service/tasks/test-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED,wBAAgB,eAAe,CAAC,UAAU,SAAI,GAAG,SAAS,CAoDzD"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Test-only helpers for the tasks subsystem. Not exported from index;
3
+ * production code must not import from here.
4
+ */
5
+ export function createFakeClock(initialNow = 0) {
6
+ let current = initialNow;
7
+ const waiters = [];
8
+ const settle = async () => {
9
+ while (true) {
10
+ waiters.sort((a, b) => a.deadline - b.deadline);
11
+ const next = waiters[0];
12
+ if (!next || next.deadline > current)
13
+ return;
14
+ waiters.shift();
15
+ next.cleanup();
16
+ next.resolve();
17
+ await Promise.resolve();
18
+ }
19
+ };
20
+ return {
21
+ now: () => current,
22
+ sleep: (ms, signal) => new Promise((resolve, reject) => {
23
+ if (signal?.aborted) {
24
+ reject(new DOMException("Aborted", "AbortError"));
25
+ return;
26
+ }
27
+ const deadline = current + ms;
28
+ const entry = {
29
+ deadline,
30
+ resolve,
31
+ reject,
32
+ cleanup: () => {
33
+ if (onAbort)
34
+ signal?.removeEventListener("abort", onAbort);
35
+ },
36
+ };
37
+ const onAbort = () => {
38
+ const idx = waiters.indexOf(entry);
39
+ if (idx >= 0)
40
+ waiters.splice(idx, 1);
41
+ entry.cleanup();
42
+ reject(new DOMException("Aborted", "AbortError"));
43
+ };
44
+ signal?.addEventListener("abort", onAbort, { once: true });
45
+ waiters.push(entry);
46
+ }),
47
+ tick: async (ms) => {
48
+ current += ms;
49
+ await settle();
50
+ },
51
+ };
52
+ }
53
+ //# sourceMappingURL=test-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../../src/ai-service/tasks/test-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH,MAAM,UAAU,eAAe,CAAC,UAAU,GAAG,CAAC;IAC5C,IAAI,OAAO,GAAG,UAAU,CAAC;IACzB,MAAM,OAAO,GAKR,EAAE,CAAC;IAER,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,OAAO,IAAI,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO;gBAAE,OAAO;YAC7C,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO;QAClB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CACpB,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG;gBACZ,QAAQ;gBACR,OAAO;gBACP,MAAM;gBACN,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,OAAO;wBAAE,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7D,CAAC;aACF,CAAC;YACF,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,GAAG,IAAI,CAAC;oBAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;YACpD,CAAC,CAAC;YACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC;QACJ,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YACjB,OAAO,IAAI,EAAE,CAAC;YACd,MAAM,MAAM,EAAE,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}