@superblocksteam/vite-plugin-file-sync 2.0.117 → 2.0.118-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 (316) hide show
  1. package/dist/ai-service/agent/middleware.d.ts.map +1 -1
  2. package/dist/ai-service/agent/middleware.js +2 -5
  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 +17 -11
  6. package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
  7. package/dist/ai-service/agent/prompts/build-security-scan-prompt.d.ts +17 -0
  8. package/dist/ai-service/agent/prompts/build-security-scan-prompt.d.ts.map +1 -0
  9. package/dist/ai-service/agent/prompts/build-security-scan-prompt.js +219 -0
  10. package/dist/ai-service/agent/prompts/build-security-scan-prompt.js.map +1 -0
  11. package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -1
  12. package/dist/ai-service/agent/tool-message-utils.js +27 -3
  13. package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
  14. package/dist/ai-service/agent/tools/apis/api-comparator.d.ts +36 -0
  15. package/dist/ai-service/agent/tools/apis/api-comparator.d.ts.map +1 -0
  16. package/dist/ai-service/agent/tools/apis/api-comparator.js +369 -0
  17. package/dist/ai-service/agent/tools/apis/api-comparator.js.map +1 -0
  18. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts +4 -0
  19. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts.map +1 -1
  20. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js +16 -5
  21. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js.map +1 -1
  22. package/dist/ai-service/agent/tools/apis/get-api-docs.d.ts +1 -1
  23. package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.d.ts.map +1 -1
  24. package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.js +18 -13
  25. package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.js.map +1 -1
  26. package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
  27. package/dist/ai-service/agent/tools/apis/test-api.js +138 -2
  28. package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
  29. package/dist/ai-service/agent/tools/build-copy-directory.d.ts +12 -0
  30. package/dist/ai-service/agent/tools/build-copy-directory.d.ts.map +1 -0
  31. package/dist/ai-service/agent/tools/build-copy-directory.js +51 -0
  32. package/dist/ai-service/agent/tools/build-copy-directory.js.map +1 -0
  33. package/dist/ai-service/agent/tools/build-copy-file.d.ts +12 -0
  34. package/dist/ai-service/agent/tools/build-copy-file.d.ts.map +1 -0
  35. package/dist/ai-service/agent/tools/build-copy-file.js +52 -0
  36. package/dist/ai-service/agent/tools/build-copy-file.js.map +1 -0
  37. package/dist/ai-service/agent/tools/build-copy-utils.d.ts +57 -0
  38. package/dist/ai-service/agent/tools/build-copy-utils.d.ts.map +1 -0
  39. package/dist/ai-service/agent/tools/build-copy-utils.js +37 -0
  40. package/dist/ai-service/agent/tools/build-copy-utils.js.map +1 -0
  41. package/dist/ai-service/agent/tools/build-debug.d.ts.map +1 -1
  42. package/dist/ai-service/agent/tools/build-debug.js +17 -5
  43. package/dist/ai-service/agent/tools/build-debug.js.map +1 -1
  44. package/dist/ai-service/agent/tools/build-finalize.d.ts.map +1 -1
  45. package/dist/ai-service/agent/tools/build-finalize.js +42 -50
  46. package/dist/ai-service/agent/tools/build-finalize.js.map +1 -1
  47. package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +7 -5
  48. package/dist/ai-service/agent/tools/build-manage-checklist.d.ts.map +1 -1
  49. package/dist/ai-service/agent/tools/build-manage-checklist.js +54 -108
  50. package/dist/ai-service/agent/tools/build-manage-checklist.js.map +1 -1
  51. package/dist/ai-service/agent/tools/databases/dev-database.d.ts +103 -0
  52. package/dist/ai-service/agent/tools/databases/dev-database.d.ts.map +1 -0
  53. package/dist/ai-service/agent/tools/databases/dev-database.js +117 -0
  54. package/dist/ai-service/agent/tools/databases/dev-database.js.map +1 -0
  55. package/dist/ai-service/agent/tools/get-logs.d.ts +1 -1
  56. package/dist/ai-service/agent/tools/index.d.ts +4 -0
  57. package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
  58. package/dist/ai-service/agent/tools/index.js +4 -0
  59. package/dist/ai-service/agent/tools/index.js.map +1 -1
  60. package/dist/ai-service/agent/tools/integrations/delete-integration.d.ts +18 -0
  61. package/dist/ai-service/agent/tools/integrations/delete-integration.d.ts.map +1 -0
  62. package/dist/ai-service/agent/tools/integrations/delete-integration.js +99 -0
  63. package/dist/ai-service/agent/tools/integrations/delete-integration.js.map +1 -0
  64. package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +1 -1
  65. package/dist/ai-service/agent/tools/integrations/index.d.ts +1 -0
  66. package/dist/ai-service/agent/tools/integrations/index.d.ts.map +1 -1
  67. package/dist/ai-service/agent/tools/integrations/index.js +1 -0
  68. package/dist/ai-service/agent/tools/integrations/index.js.map +1 -1
  69. package/dist/ai-service/agent/tools/integrations/metadata.d.ts.map +1 -1
  70. package/dist/ai-service/agent/tools/integrations/metadata.js +30 -4
  71. package/dist/ai-service/agent/tools/integrations/metadata.js.map +1 -1
  72. package/dist/ai-service/agent/tools/report-security-findings.d.ts +163 -0
  73. package/dist/ai-service/agent/tools/report-security-findings.d.ts.map +1 -0
  74. package/dist/ai-service/agent/tools/report-security-findings.js +52 -0
  75. package/dist/ai-service/agent/tools/report-security-findings.js.map +1 -0
  76. package/dist/ai-service/agent/tools.d.ts +2 -0
  77. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  78. package/dist/ai-service/agent/tools.js +74 -6
  79. package/dist/ai-service/agent/tools.js.map +1 -1
  80. package/dist/ai-service/agent/tools2/example.js +1 -1
  81. package/dist/ai-service/agent/tools2/example.js.map +1 -1
  82. package/dist/ai-service/agent/tools2/tools/ask-multi-choice.d.ts +7 -0
  83. package/dist/ai-service/agent/tools2/tools/ask-multi-choice.d.ts.map +1 -1
  84. package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js +11 -1
  85. package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js.map +1 -1
  86. package/dist/ai-service/agent/tools2/tools/ask-searchable-dropdown.d.ts +7 -0
  87. package/dist/ai-service/agent/tools2/tools/ask-searchable-dropdown.d.ts.map +1 -1
  88. package/dist/ai-service/agent/tools2/tools/ask-searchable-dropdown.js +3 -1
  89. package/dist/ai-service/agent/tools2/tools/ask-searchable-dropdown.js.map +1 -1
  90. package/dist/ai-service/agent/tools2/tools/download-attachments.d.ts.map +1 -1
  91. package/dist/ai-service/agent/tools2/tools/download-attachments.js +4 -3
  92. package/dist/ai-service/agent/tools2/tools/download-attachments.js.map +1 -1
  93. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +9 -0
  94. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
  95. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +15 -1
  96. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
  97. package/dist/ai-service/agent/tools2/tools/list-attachments.d.ts.map +1 -1
  98. package/dist/ai-service/agent/tools2/tools/list-attachments.js +8 -4
  99. package/dist/ai-service/agent/tools2/tools/list-attachments.js.map +1 -1
  100. package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.d.ts +21 -4
  101. package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.d.ts.map +1 -1
  102. package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.js +87 -11
  103. package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.js.map +1 -1
  104. package/dist/ai-service/agent/tools2/types.d.ts +10 -2
  105. package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
  106. package/dist/ai-service/agent/tools2/types.js.map +1 -1
  107. package/dist/ai-service/agent/utils.d.ts.map +1 -1
  108. package/dist/ai-service/agent/utils.js +2 -0
  109. package/dist/ai-service/agent/utils.js.map +1 -1
  110. package/dist/ai-service/app-interface/filesystem/draft-manager.d.ts +1 -1
  111. package/dist/ai-service/app-interface/filesystem/draft-manager.d.ts.map +1 -1
  112. package/dist/ai-service/app-interface/filesystem/draft-manager.js.map +1 -1
  113. package/dist/ai-service/app-interface/npm-registry.d.ts +123 -0
  114. package/dist/ai-service/app-interface/npm-registry.d.ts.map +1 -0
  115. package/dist/ai-service/app-interface/npm-registry.js +395 -0
  116. package/dist/ai-service/app-interface/npm-registry.js.map +1 -0
  117. package/dist/ai-service/app-interface/shell.d.ts +38 -0
  118. package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
  119. package/dist/ai-service/app-interface/shell.js +222 -1
  120. package/dist/ai-service/app-interface/shell.js.map +1 -1
  121. package/dist/ai-service/attachments/uploaded-content-part.d.ts +5 -0
  122. package/dist/ai-service/attachments/uploaded-content-part.d.ts.map +1 -1
  123. package/dist/ai-service/attachments/uploaded-content-part.js +31 -21
  124. package/dist/ai-service/attachments/uploaded-content-part.js.map +1 -1
  125. package/dist/ai-service/checklist/persisted-checklist-store.d.ts +105 -0
  126. package/dist/ai-service/checklist/persisted-checklist-store.d.ts.map +1 -0
  127. package/dist/ai-service/checklist/persisted-checklist-store.js +498 -0
  128. package/dist/ai-service/checklist/persisted-checklist-store.js.map +1 -0
  129. package/dist/ai-service/context-download.d.ts +14 -1
  130. package/dist/ai-service/context-download.d.ts.map +1 -1
  131. package/dist/ai-service/context-download.js +80 -0
  132. package/dist/ai-service/context-download.js.map +1 -1
  133. package/dist/ai-service/dev-database-client.d.ts +90 -0
  134. package/dist/ai-service/dev-database-client.d.ts.map +1 -0
  135. package/dist/ai-service/dev-database-client.js +166 -0
  136. package/dist/ai-service/dev-database-client.js.map +1 -0
  137. package/dist/ai-service/features.d.ts +16 -0
  138. package/dist/ai-service/features.d.ts.map +1 -1
  139. package/dist/ai-service/features.js +10 -0
  140. package/dist/ai-service/features.js.map +1 -1
  141. package/dist/ai-service/index.d.ts +10 -1
  142. package/dist/ai-service/index.d.ts.map +1 -1
  143. package/dist/ai-service/index.js +80 -13
  144. package/dist/ai-service/index.js.map +1 -1
  145. package/dist/ai-service/integrations/store.d.ts +5 -0
  146. package/dist/ai-service/integrations/store.d.ts.map +1 -1
  147. package/dist/ai-service/integrations/store.js +19 -2
  148. package/dist/ai-service/integrations/store.js.map +1 -1
  149. package/dist/ai-service/judge/tools/submit-feedback.d.ts +1 -1
  150. package/dist/ai-service/llm/context-v2/manager.d.ts +8 -1
  151. package/dist/ai-service/llm/context-v2/manager.d.ts.map +1 -1
  152. package/dist/ai-service/llm/context-v2/manager.js +17 -1
  153. package/dist/ai-service/llm/context-v2/manager.js.map +1 -1
  154. package/dist/ai-service/llm/context-v2/prompts/compaction.d.ts +1 -1
  155. package/dist/ai-service/llm/context-v2/prompts/compaction.d.ts.map +1 -1
  156. package/dist/ai-service/llm/context-v2/prompts/compaction.js +3 -3
  157. package/dist/ai-service/llm/impl/clark.d.ts.map +1 -1
  158. package/dist/ai-service/llm/impl/clark.js +3 -3
  159. package/dist/ai-service/llm/impl/clark.js.map +1 -1
  160. package/dist/ai-service/llm/provider.d.ts.map +1 -1
  161. package/dist/ai-service/llm/provider.js +22 -7
  162. package/dist/ai-service/llm/provider.js.map +1 -1
  163. package/dist/ai-service/llm/types.d.ts +14 -1
  164. package/dist/ai-service/llm/types.d.ts.map +1 -1
  165. package/dist/ai-service/llmobs/context-registry.d.ts +62 -0
  166. package/dist/ai-service/llmobs/context-registry.d.ts.map +1 -0
  167. package/dist/ai-service/llmobs/context-registry.js +115 -0
  168. package/dist/ai-service/llmobs/context-registry.js.map +1 -0
  169. package/dist/ai-service/llmobs/otel-exporter.d.ts +23 -0
  170. package/dist/ai-service/llmobs/otel-exporter.d.ts.map +1 -1
  171. package/dist/ai-service/llmobs/otel-exporter.js +112 -10
  172. package/dist/ai-service/llmobs/otel-exporter.js.map +1 -1
  173. package/dist/ai-service/llmobs/tracer.d.ts +7 -0
  174. package/dist/ai-service/llmobs/tracer.d.ts.map +1 -1
  175. package/dist/ai-service/llmobs/tracer.js +38 -0
  176. package/dist/ai-service/llmobs/tracer.js.map +1 -1
  177. package/dist/ai-service/skills/system/_registry.generated.d.ts.map +1 -1
  178. package/dist/ai-service/skills/system/_registry.generated.js +2 -0
  179. package/dist/ai-service/skills/system/_registry.generated.js.map +1 -1
  180. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts +1 -1
  181. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts.map +1 -1
  182. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js +2 -0
  183. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js.map +1 -1
  184. package/dist/ai-service/skills/system/superblocks-migration/references/focused-debug.generated.d.ts +1 -1
  185. package/dist/ai-service/skills/system/superblocks-migration/references/focused-debug.generated.d.ts.map +1 -1
  186. package/dist/ai-service/skills/system/superblocks-migration/references/focused-debug.generated.js +3 -1
  187. package/dist/ai-service/skills/system/superblocks-migration/references/focused-debug.generated.js.map +1 -1
  188. package/dist/ai-service/skills/system/superblocks-migration/references/yaml-block-mapping.generated.d.ts +1 -1
  189. package/dist/ai-service/skills/system/superblocks-migration/references/yaml-block-mapping.generated.d.ts.map +1 -1
  190. package/dist/ai-service/skills/system/superblocks-migration/references/yaml-block-mapping.generated.js +29 -0
  191. package/dist/ai-service/skills/system/superblocks-migration/references/yaml-block-mapping.generated.js.map +1 -1
  192. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts +1 -1
  193. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts.map +1 -1
  194. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js +112 -6
  195. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js.map +1 -1
  196. package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.d.ts +2 -0
  197. package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.d.ts.map +1 -0
  198. package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.js +107 -0
  199. package/dist/ai-service/skills/system/third-party-migration/claude-design.generated.js.map +1 -0
  200. package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts +1 -1
  201. package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts.map +1 -1
  202. package/dist/ai-service/skills/system/third-party-migration/skill.generated.js +33 -3
  203. package/dist/ai-service/skills/system/third-party-migration/skill.generated.js.map +1 -1
  204. package/dist/ai-service/state-machine/clark-fsm.d.ts +21 -0
  205. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  206. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  207. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  208. package/dist/ai-service/state-machine/handlers/agent-planning.js +79 -6
  209. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  210. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts +10 -0
  211. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  212. package/dist/ai-service/state-machine/handlers/llm-generating.js +69 -41
  213. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  214. package/dist/ai-service/state-machine/helpers/peer.d.ts +35 -7
  215. package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
  216. package/dist/ai-service/state-machine/helpers/peer.js +81 -15
  217. package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
  218. package/dist/ai-service/template-renderer.d.ts +14 -1
  219. package/dist/ai-service/template-renderer.d.ts.map +1 -1
  220. package/dist/ai-service/template-renderer.js +144 -41
  221. package/dist/ai-service/template-renderer.js.map +1 -1
  222. package/dist/ai-service/transform/api-builder/to-sdk-transformer.js +2 -2
  223. package/dist/ai-service/transform/api-builder/to-sdk-transformer.js.map +1 -1
  224. package/dist/ai-service/transform/api-builder/to-yaml-transformer.js +2 -2
  225. package/dist/ai-service/transform/api-builder/to-yaml-transformer.js.map +1 -1
  226. package/dist/draft-interface.d.ts +1 -1
  227. package/dist/draft-interface.d.ts.map +1 -1
  228. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  229. package/dist/file-sync-vite-plugin.js +34 -27
  230. package/dist/file-sync-vite-plugin.js.map +1 -1
  231. package/dist/file-system-helpers.d.ts +4 -0
  232. package/dist/file-system-helpers.d.ts.map +1 -1
  233. package/dist/file-system-helpers.js +13 -0
  234. package/dist/file-system-helpers.js.map +1 -1
  235. package/dist/inject-index-vite-plugin.d.ts.map +1 -1
  236. package/dist/inject-index-vite-plugin.js +15 -1
  237. package/dist/inject-index-vite-plugin.js.map +1 -1
  238. package/dist/injected-index.d.ts.map +1 -1
  239. package/dist/injected-index.js +15 -1
  240. package/dist/injected-index.js.map +1 -1
  241. package/dist/lock-service/index.d.ts.map +1 -1
  242. package/dist/lock-service/index.js +8 -10
  243. package/dist/lock-service/index.js.map +1 -1
  244. package/dist/migration/migration-checklist.d.ts +51 -2
  245. package/dist/migration/migration-checklist.d.ts.map +1 -1
  246. package/dist/migration/migration-checklist.js +79 -151
  247. package/dist/migration/migration-checklist.js.map +1 -1
  248. package/dist/migration/migration-routes.d.ts.map +1 -1
  249. package/dist/migration/migration-routes.js +290 -30
  250. package/dist/migration/migration-routes.js.map +1 -1
  251. package/dist/migration/migration-verification.d.ts +206 -0
  252. package/dist/migration/migration-verification.d.ts.map +1 -0
  253. package/dist/migration/migration-verification.js +1006 -0
  254. package/dist/migration/migration-verification.js.map +1 -0
  255. package/dist/migration/restructure.d.ts +9 -2
  256. package/dist/migration/restructure.d.ts.map +1 -1
  257. package/dist/migration/restructure.js +116 -5
  258. package/dist/migration/restructure.js.map +1 -1
  259. package/dist/migration/unsupported-integrations.d.ts.map +1 -1
  260. package/dist/migration/unsupported-integrations.js +9 -0
  261. package/dist/migration/unsupported-integrations.js.map +1 -1
  262. package/dist/migration/yaml-walk.d.ts +18 -0
  263. package/dist/migration/yaml-walk.d.ts.map +1 -0
  264. package/dist/migration/yaml-walk.js +45 -0
  265. package/dist/migration/yaml-walk.js.map +1 -0
  266. package/dist/migration-templates/app-fullstack/client/components/hooks/use-mobile.ts +1 -1
  267. package/dist/migration-templates/app-fullstack/client/components/ui/accordion.tsx +1 -1
  268. package/dist/migration-templates/app-fullstack/client/components/ui/avatar.tsx +1 -1
  269. package/dist/migration-templates/app-fullstack/client/components/ui/breadcrumb.tsx +1 -1
  270. package/dist/migration-templates/app-fullstack/client/components/ui/button.tsx +1 -1
  271. package/dist/migration-templates/app-fullstack/client/components/ui/calendar.tsx +1 -1
  272. package/dist/migration-templates/app-fullstack/client/components/ui/chart.tsx +1 -1
  273. package/dist/migration-templates/app-fullstack/client/components/ui/file-dropzone.tsx +1 -1
  274. package/dist/migration-templates/app-fullstack/client/components/ui/file-input.tsx +1 -1
  275. package/dist/migration-templates/app-fullstack/client/components/ui/hover-card.tsx +1 -1
  276. package/dist/migration-templates/app-fullstack/client/components/ui/image.tsx +1 -1
  277. package/dist/migration-templates/app-fullstack/client/components/ui/input.tsx +1 -1
  278. package/dist/migration-templates/app-fullstack/client/components/ui/label.tsx +1 -1
  279. package/dist/migration-templates/app-fullstack/client/components/ui/navigation-menu.tsx +1 -1
  280. package/dist/migration-templates/app-fullstack/client/components/ui/pagination.tsx +1 -1
  281. package/dist/migration-templates/app-fullstack/client/components/ui/popover.tsx +1 -1
  282. package/dist/migration-templates/app-fullstack/client/components/ui/progress.tsx +1 -1
  283. package/dist/migration-templates/app-fullstack/client/components/ui/select.tsx +1 -1
  284. package/dist/migration-templates/app-fullstack/client/components/ui/sheet.tsx +1 -1
  285. package/dist/migration-templates/app-fullstack/client/components/ui/sidebar.tsx +1 -1
  286. package/dist/migration-templates/app-fullstack/client/components/ui/slider.tsx +1 -1
  287. package/dist/migration-templates/app-fullstack/client/components/ui/switch.tsx +1 -1
  288. package/dist/migration-templates/app-fullstack/client/components/ui/table.tsx +1 -1
  289. package/dist/migration-templates/app-fullstack/client/components/ui/tabs.tsx +1 -1
  290. package/dist/migration-templates/app-fullstack/client/components/ui/toggle-group.tsx +1 -1
  291. package/dist/migration-templates/app-fullstack/client/components/ui/toggle.tsx +1 -1
  292. package/dist/migration-templates/app-fullstack/client/components/ui/tooltip.tsx +1 -1
  293. package/dist/socket-manager.d.ts.map +1 -1
  294. package/dist/socket-manager.js +8 -0
  295. package/dist/socket-manager.js.map +1 -1
  296. package/dist/sync-service/hash-dir-tree.d.ts +1 -1
  297. package/dist/sync-service/hash-dir-tree.d.ts.map +1 -1
  298. package/dist/sync-service/hash-dir-tree.js +3 -3
  299. package/dist/sync-service/hash-dir-tree.js.map +1 -1
  300. package/dist/sync-service/index.d.ts +0 -14
  301. package/dist/sync-service/index.d.ts.map +1 -1
  302. package/dist/sync-service/index.js +1 -44
  303. package/dist/sync-service/index.js.map +1 -1
  304. package/dist/sync-service/list-dir.d.ts +1 -1
  305. package/dist/sync-service/list-dir.d.ts.map +1 -1
  306. package/dist/sync-service/list-dir.js +36 -3
  307. package/dist/sync-service/list-dir.js.map +1 -1
  308. package/dist/sync-service/snapshot/take-snapshot.d.ts +1 -1
  309. package/dist/sync-service/snapshot/take-snapshot.d.ts.map +1 -1
  310. package/dist/sync-service/snapshot/take-snapshot.js +4 -8
  311. package/dist/sync-service/snapshot/take-snapshot.js.map +1 -1
  312. package/dist/util/log-sanitizer.d.ts +6 -5
  313. package/dist/util/log-sanitizer.d.ts.map +1 -1
  314. package/dist/util/log-sanitizer.js +21 -6
  315. package/dist/util/log-sanitizer.js.map +1 -1
  316. package/package.json +9 -8
@@ -53,6 +53,29 @@ export declare class LLMObsOtelExporter {
53
53
  * Safe to call multiple times - subsequent calls are no-ops.
54
54
  */
55
55
  init(): Promise<void>;
56
+ /**
57
+ * Topologically sort span events so parents always appear before children.
58
+ * Uses Kahn's algorithm — O(N) time and space.
59
+ *
60
+ * Spans whose parent is not in the batch are treated as roots.
61
+ * Cycles (should not occur in normal LLMObs usage) are detected via
62
+ * sorted.length !== events.length after Kahn's completes. Cycle members
63
+ * are appended with their parent_id cleared so processBatch treats them as
64
+ * root spans (consumeCaptured path) rather than silently producing orphaned
65
+ * children that fall back to context.active().
66
+ */
67
+ private topoSort;
68
+ /**
69
+ * Process a flush batch: sort by parent-child order, resolve OTEL parent
70
+ * contexts from the registry, and emit each span with the correct parent.
71
+ *
72
+ * Parent context resolution priority:
73
+ * 1. perFlushCtx[parent_id] — parent is in this same flush batch
74
+ * 2. otelContextRegistry.getCreated(parent_id) — parent flushed in a prior batch
75
+ * 3. otelContextRegistry.consumeCaptured(span_id) — root span: use captured HTTP ctx
76
+ * 4. context.active() — fallback (produces a root span, same as pre-fix behaviour)
77
+ */
78
+ private processBatch;
56
79
  /**
57
80
  * Emit a FULL-FIDELITY OTEL span from an LLMObs event.
58
81
  *
@@ -1 +1 @@
1
- {"version":3,"file":"otel-exporter.d.ts","sourceRoot":"","sources":["../../../src/ai-service/llmobs/otel-exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AA2JH;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAA+C;IAEpE;;;OAGG;IACH,OAAO,KAAK,UAAU,GAErB;IAED;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyClC;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,OAAO,CAAC,oBAAoB;IAmF5B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAgCrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+D3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA8C/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;;OAGG;IACI,OAAO,IAAI,IAAI;CAOvB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
1
+ {"version":3,"file":"otel-exporter.d.ts","sourceRoot":"","sources":["../../../src/ai-service/llmobs/otel-exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAkKH;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAA+C;IAEpE;;;OAGG;IACH,OAAO,KAAK,UAAU,GAErB;IAED;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyClC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,QAAQ;IAoDhB;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;IA6CpB;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,OAAO,CAAC,oBAAoB;IA4F5B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAgCrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+D3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA8C/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;;OAGG;IACI,OAAO,IAAI,IAAI;CAQvB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -29,8 +29,9 @@
29
29
  * Contract: tier2-traces.v0.3.0.json
30
30
  * See also: sdk-tier-policy-hints.md
31
31
  */
32
- import { SpanKind, trace } from "@opentelemetry/api";
32
+ import { context, SpanKind, trace, } from "@opentelemetry/api";
33
33
  import { getLogger } from "../../util/logger.js";
34
+ import { otelContextRegistry } from "./context-registry.js";
34
35
  /**
35
36
  * Tier policy hint attribute key.
36
37
  * Must match TIER_HINT_ATTRIBUTE from @superblocksteam/telemetry.
@@ -145,21 +146,120 @@ export class LLMObsOtelExporter {
145
146
  SpanWriter.prototype.flush = function () {
146
147
  if (this._buffer.length > 0) {
147
148
  getLogger().debug(`LLMObsOtelExporter: Converting ${this._buffer.length} spans to OTEL (gen_ai.*)`);
148
- for (const spanEvent of this._buffer) {
149
- try {
150
- self.emitFullFidelitySpan(spanEvent);
151
- }
152
- catch (err) {
153
- getLogger().error(`LLMObsOtelExporter: Failed to convert span: ${err instanceof Error ? err.message : String(err)}`);
154
- }
149
+ try {
150
+ self.processBatch(this._buffer.slice());
151
+ }
152
+ catch (err) {
153
+ getLogger().error(`LLMObsOtelExporter: processBatch failed, dropping ${this._buffer.length} spans: ${err instanceof Error ? err.message : String(err)}`);
155
154
  }
156
155
  }
157
156
  // Clear buffer - don't send to Datadog
158
157
  this._buffer = [];
159
158
  this._bufferSize = 0;
160
159
  };
160
+ otelContextRegistry.startReaper();
161
161
  getLogger().info("LLMObsOtelExporter: Initialized for CLOUD_PREM mode (Collector handles tier separation)");
162
162
  }
163
+ /**
164
+ * Topologically sort span events so parents always appear before children.
165
+ * Uses Kahn's algorithm — O(N) time and space.
166
+ *
167
+ * Spans whose parent is not in the batch are treated as roots.
168
+ * Cycles (should not occur in normal LLMObs usage) are detected via
169
+ * sorted.length !== events.length after Kahn's completes. Cycle members
170
+ * are appended with their parent_id cleared so processBatch treats them as
171
+ * root spans (consumeCaptured path) rather than silently producing orphaned
172
+ * children that fall back to context.active().
173
+ */
174
+ topoSort(events) {
175
+ const byId = new Map();
176
+ for (const e of events)
177
+ byId.set(e.span_id, e);
178
+ // Build children adjacency map and in-degree in a single O(N) pass.
179
+ const children = new Map();
180
+ const inDegree = new Map();
181
+ for (const e of events) {
182
+ inDegree.set(e.span_id, 0);
183
+ children.set(e.span_id, []);
184
+ }
185
+ for (const e of events) {
186
+ if (e.parent_id && byId.has(e.parent_id)) {
187
+ inDegree.set(e.span_id, (inDegree.get(e.span_id) ?? 0) + 1);
188
+ children.get(e.parent_id).push(e);
189
+ }
190
+ }
191
+ // Kahn's algorithm: iterate children directly — O(N) total.
192
+ const queue = events.filter((e) => (inDegree.get(e.span_id) ?? 0) === 0);
193
+ const sorted = [];
194
+ while (queue.length > 0) {
195
+ const node = queue.shift();
196
+ sorted.push(node);
197
+ for (const child of children.get(node.span_id) ?? []) {
198
+ const deg = (inDegree.get(child.span_id) ?? 1) - 1;
199
+ inDegree.set(child.span_id, deg);
200
+ if (deg === 0)
201
+ queue.push(child);
202
+ }
203
+ }
204
+ // Detect cycle members via O(1) Set membership — O(N) overall.
205
+ if (sorted.length < events.length) {
206
+ const sortedSet = new Set(sorted);
207
+ const cycleMembers = events.filter((e) => !sortedSet.has(e));
208
+ getLogger().warn(`LLMObsOtelExporter: cycle detected in LLMObs span batch — ${cycleMembers.length} spans will be emitted as root spans`, { cycleSpanIds: cycleMembers.map((e) => e.span_id) });
209
+ // Clear parent_id so processBatch takes the root-span path (consumeCaptured)
210
+ // instead of falling back to context.active() with an unresolvable parent.
211
+ for (const e of cycleMembers) {
212
+ sorted.push({ ...e, parent_id: undefined });
213
+ }
214
+ }
215
+ return sorted;
216
+ }
217
+ /**
218
+ * Process a flush batch: sort by parent-child order, resolve OTEL parent
219
+ * contexts from the registry, and emit each span with the correct parent.
220
+ *
221
+ * Parent context resolution priority:
222
+ * 1. perFlushCtx[parent_id] — parent is in this same flush batch
223
+ * 2. otelContextRegistry.getCreated(parent_id) — parent flushed in a prior batch
224
+ * 3. otelContextRegistry.consumeCaptured(span_id) — root span: use captured HTTP ctx
225
+ * 4. context.active() — fallback (produces a root span, same as pre-fix behaviour)
226
+ */
227
+ processBatch(events) {
228
+ otelContextRegistry.cleanup();
229
+ const sorted = this.topoSort(events);
230
+ const perFlushCtx = new Map();
231
+ for (const event of sorted) {
232
+ try {
233
+ let parentCtx;
234
+ if (event.parent_id) {
235
+ // Child span: look for parent in this batch or a prior batch
236
+ parentCtx =
237
+ perFlushCtx.get(event.parent_id) ??
238
+ otelContextRegistry.getCreated(event.parent_id);
239
+ if (!parentCtx) {
240
+ // Orphaned child — parent not in this batch or any prior batch.
241
+ // Emit at WARN so this is visible in filtered production logs;
242
+ // this is the exact symptom the PR was written to fix.
243
+ getLogger().warn(`LLMObsOtelExporter: parent span ${event.parent_id} not found for child ${event.span_id} — emitting as root span`);
244
+ }
245
+ }
246
+ else {
247
+ // Root span: use the HTTP context captured at creation time
248
+ parentCtx = otelContextRegistry.consumeCaptured(event.span_id);
249
+ }
250
+ if (!parentCtx) {
251
+ parentCtx = context.active();
252
+ }
253
+ const otelSpan = this.emitFullFidelitySpan(event, parentCtx);
254
+ const spanCtx = trace.setSpan(parentCtx, otelSpan);
255
+ perFlushCtx.set(event.span_id, spanCtx);
256
+ otelContextRegistry.setCreated(event.span_id, spanCtx);
257
+ }
258
+ catch (err) {
259
+ getLogger().error(`LLMObsOtelExporter: Failed to process span in batch: ${err instanceof Error ? err.message : String(err)}`);
260
+ }
261
+ }
262
+ }
163
263
  /**
164
264
  * Emit a FULL-FIDELITY OTEL span from an LLMObs event.
165
265
  *
@@ -187,7 +287,7 @@ export class LLMObsOtelExporter {
187
287
  * - llmobs.input
188
288
  * - llmobs.output
189
289
  */
190
- emitFullFidelitySpan(event) {
290
+ emitFullFidelitySpan(event, parentCtx) {
191
291
  const spanKind = event.meta["span.kind"] || "unknown";
192
292
  const otelKind = spanKind === "llm" ? SpanKind.CLIENT : SpanKind.INTERNAL;
193
293
  // Convert nanoseconds to milliseconds for OTEL
@@ -240,7 +340,7 @@ export class LLMObsOtelExporter {
240
340
  kind: otelKind,
241
341
  startTime: startTimeMs,
242
342
  attributes: this.filterUndefined(attributes),
243
- });
343
+ }, parentCtx);
244
344
  // Set OTEL status for errors
245
345
  if (event.status === "error") {
246
346
  otelSpan.setStatus({
@@ -250,6 +350,7 @@ export class LLMObsOtelExporter {
250
350
  // End span with correct end time
251
351
  otelSpan.end(endTimeMs);
252
352
  getLogger().debug(`LLMObsOtelExporter: Emitted span ${spanName} (${spanKind})`);
353
+ return otelSpan;
253
354
  }
254
355
  /**
255
356
  * Map LLMObs span name to contract-defined span pattern.
@@ -548,6 +649,7 @@ export class LLMObsOtelExporter {
548
649
  this.originalFlush = null;
549
650
  getLogger().debug("LLMObsOtelExporter: Restored original flush method");
550
651
  }
652
+ otelContextRegistry.stopReaper();
551
653
  }
552
654
  }
553
655
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"otel-exporter.js","sourceRoot":"","sources":["../../../src/ai-service/llmobs/otel-exporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"otel-exporter.js","sourceRoot":"","sources":["../../../src/ai-service/llmobs/otel-exporter.ts"],"names":[],"mappings":"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"}
@@ -75,6 +75,13 @@ export declare class LLMObsTracer {
75
75
  */
76
76
  private _trace;
77
77
  private static createNoopSpan;
78
+ /**
79
+ * Store the captured OTEL context in the registry if applicable.
80
+ * Shared between the auto-finish and manual-finish branches of _trace().
81
+ * Only called for root LLMObs spans (capturedOtelCtx is undefined for children).
82
+ * Noop spans are excluded — they have no real dd-trace span ID to key on.
83
+ */
84
+ private maybeCaptureRootOtelCtx;
78
85
  /** Activate a span as the current parent context for downstream traces. */
79
86
  private activate;
80
87
  private get localState();
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../../src/ai-service/llmobs/tracer.ts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EACV,kBAAkB,EAElB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,UAAU,EAEX,MAAM,YAAY,CAAC;AAmCpB;;;;;GAKG;AAEH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,YAAY,CAAqD;IACzE,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoC;IAErD,QAAQ,CAAC,EAAE,UAAU,CAAC;IAE7B,SAAS,aAAa,EACpB,iBAA2B,GAC5B,GAAE;QACD,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;KACjC;IAMN,WAAkB,QAAQ,IAAI,YAAY,CAEzC;IAED;;;;OAIG;IACI,oBAAoB,CAAC,MAAM,EAAE,gBAAgB;IAIpD;;;OAGG;IACI,KAAK,CAAC,CAAC,EACZ,OAAO,EAAE,sBAAsB,EAC/B,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,CAAC,GAC1B,CAAC;IAIJ;;;OAGG;IACI,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC3C,OAAO,EAAE,yBAAyB,EAClC,EAAE,EAAE,CAAC,GACJ,CAAC;IAQG,eAAe,CAAC,OAAO,EAAE,uBAAuB,GAAG,UAAU;IAQpE;;OAEG;IACI,KAAK,IAAI,IAAI;IAQpB;;;OAGG;IACI,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,kBAAkB;IAgBxD;;;OAGG;IACI,QAAQ,CAAC,WAAW,EAAE,uBAAuB,GAAG,IAAI;IACpD,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,uBAAuB,GAAG,IAAI;IAoC7E,kEAAkE;IAC3D,gBAAgB,CACrB,WAAW,EAAE,kBAAkB,EAC/B,MAAM,EAAE,uBAAuB,GAC9B,IAAI;IAIP;;;OAGG;IACI,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC/C,OAAO,EAAE,yBAAyB,GACjC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC;IAMnB,wEAAwE;IACjE,MAAM,IAAI,UAAU,GAAG,SAAS;IAIvC;;;OAGG;IACI,aAAa,CAAC,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAIjD;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAiChB;;;OAGG;IACH,OAAO,CAAC,MAAM;IA4Dd,OAAO,CAAC,MAAM,CAAC,cAAc;IAkB7B,2EAA2E;IAC3E,OAAO,CAAC,QAAQ;IAahB,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,CAAC,MAAM,CAAC,OAAO,CAAsC;IAC5D,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAS;IAChD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAwB;IAEzD,OAAO,KAAK,MAAM,GA+BjB;IAED;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IA2B1B,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,MAAM;IAQd;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAkCpC,gEAAgE;IAChE,OAAO,CAAC,MAAM,CAAC,YAAY;IAI3B,kFAAkF;IAClF,OAAO,CAAC,MAAM,CAAC,0BAA0B;CAsC1C;AAsCD,eAAO,MAAM,MAAM,cAAwB,CAAC;AAC5C,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../../src/ai-service/llmobs/tracer.ts"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EACV,kBAAkB,EAElB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,UAAU,EAEX,MAAM,YAAY,CAAC;AAmCpB;;;;;GAKG;AAEH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,YAAY,CAAqD;IACzE,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoC;IAErD,QAAQ,CAAC,EAAE,UAAU,CAAC;IAE7B,SAAS,aAAa,EACpB,iBAA2B,GAC5B,GAAE;QACD,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;KACjC;IAMN,WAAkB,QAAQ,IAAI,YAAY,CAEzC;IAED;;;;OAIG;IACI,oBAAoB,CAAC,MAAM,EAAE,gBAAgB;IAIpD;;;OAGG;IACI,KAAK,CAAC,CAAC,EACZ,OAAO,EAAE,sBAAsB,EAC/B,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,CAAC,GAC1B,CAAC;IAIJ;;;OAGG;IACI,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC3C,OAAO,EAAE,yBAAyB,EAClC,EAAE,EAAE,CAAC,GACJ,CAAC;IAQG,eAAe,CAAC,OAAO,EAAE,uBAAuB,GAAG,UAAU;IAQpE;;OAEG;IACI,KAAK,IAAI,IAAI;IAQpB;;;OAGG;IACI,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,kBAAkB;IAgBxD;;;OAGG;IACI,QAAQ,CAAC,WAAW,EAAE,uBAAuB,GAAG,IAAI;IACpD,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,uBAAuB,GAAG,IAAI;IAoC7E,kEAAkE;IAC3D,gBAAgB,CACrB,WAAW,EAAE,kBAAkB,EAC/B,MAAM,EAAE,uBAAuB,GAC9B,IAAI;IAIP;;;OAGG;IACI,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC/C,OAAO,EAAE,yBAAyB,GACjC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC;IAMnB,wEAAwE;IACjE,MAAM,IAAI,UAAU,GAAG,SAAS;IAIvC;;;OAGG;IACI,aAAa,CAAC,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAIjD;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAiChB;;;OAGG;IACH,OAAO,CAAC,MAAM;IAsFd,OAAO,CAAC,MAAM,CAAC,cAAc;IAkB7B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAY/B,2EAA2E;IAC3E,OAAO,CAAC,QAAQ;IAahB,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,CAAC,MAAM,CAAC,OAAO,CAAsC;IAC5D,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAS;IAChD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAwB;IAEzD,OAAO,KAAK,MAAM,GA+BjB;IAED;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IA2B1B,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,MAAM;IAQd;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAkCpC,gEAAgE;IAChE,OAAO,CAAC,MAAM,CAAC,YAAY;IAI3B,kFAAkF;IAClF,OAAO,CAAC,MAAM,CAAC,0BAA0B;CAsC1C;AAsCD,eAAO,MAAM,MAAM,cAAwB,CAAC;AAC5C,eAAe,MAAM,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import { AsyncLocalStorage } from "async_hooks";
2
+ import { context as otelContextApi, trace as otelTrace, } from "@opentelemetry/api";
2
3
  import ddTrace from "dd-trace";
3
4
  import { safeJsonStringify } from "../../util/log-sanitizer.js";
4
5
  import { getErrorMeta, getLogger } from "../../util/logger.js";
6
+ import { otelContextRegistry } from "./context-registry.js";
5
7
  /**
6
8
  * Lazily initialize dd-trace with LLMObs if not already configured.
7
9
  * This is needed when running via turbo (start:all:obs) which bypasses
@@ -251,9 +253,33 @@ export class LLMObsTracer {
251
253
  }
252
254
  };
253
255
  return this.activate(parentContext, () => {
256
+ // Capture OTEL context BEFORE llmobs.trace() activates the new dd-trace span.
257
+ // Inside the llmobs.trace callback, dd-trace has already activated the new span
258
+ // and propagates it into OTEL's AsyncLocalStorage — so otelContextApi.active()
259
+ // called there returns the newly-created span's context, not the pre-span context.
260
+ // Capturing here (before the callback) gives us the true ambient OTEL context
261
+ // at the moment the LLMObs span was requested.
262
+ //
263
+ // Only root LLMObs spans (no parentContext) need a captured entry:
264
+ // processBatch resolves child contexts via perFlushCtx / crossBatch, so child
265
+ // entries in `captured` would never be consumed and would just leak memory.
266
+ //
267
+ // We deliberately strip any active OTEL span from the captured context using
268
+ // otelTrace.deleteSpan(). Even though we capture before llmobs.trace(), the
269
+ // dd-trace WebSocket connection span is still bridged into OTEL's
270
+ // AsyncLocalStorage — so otelContextApi.active() returns a context carrying
271
+ // the WS span as the active span. If we kept it, that WS span would become
272
+ // clark.session's OTEL parent, making it appear as a child trace in Datadog
273
+ // rather than a true root. otelTrace.deleteSpan() returns a new context
274
+ // with no active span while preserving all other context values (e.g. baggage),
275
+ // so clark.session starts as a trace root in Datadog as intended.
276
+ const capturedOtelCtx = LLMObsTracer.isCloudPrem() && !parentContext
277
+ ? otelTrace.deleteSpan(otelContextApi.active())
278
+ : undefined;
254
279
  if (finish === "auto") {
255
280
  return this.llmobs.trace(rest, (span) => {
256
281
  return this.localStorage.run(new State(), () => {
282
+ this.maybeCaptureRootOtelCtx(span, capturedOtelCtx);
257
283
  setup(span, parentContext);
258
284
  return fn(span);
259
285
  });
@@ -261,6 +287,7 @@ export class LLMObsTracer {
261
287
  }
262
288
  else {
263
289
  return this.llmobs.trace(rest, (span, _done) => {
290
+ this.maybeCaptureRootOtelCtx(span, capturedOtelCtx);
264
291
  setup(span, parentContext);
265
292
  return fn(span);
266
293
  });
@@ -282,6 +309,17 @@ export class LLMObsTracer {
282
309
  span.__isNoopSpan = true;
283
310
  return span;
284
311
  }
312
+ /**
313
+ * Store the captured OTEL context in the registry if applicable.
314
+ * Shared between the auto-finish and manual-finish branches of _trace().
315
+ * Only called for root LLMObs spans (capturedOtelCtx is undefined for children).
316
+ * Noop spans are excluded — they have no real dd-trace span ID to key on.
317
+ */
318
+ maybeCaptureRootOtelCtx(span, capturedOtelCtx) {
319
+ if (capturedOtelCtx && !isNoopSpan(span)) {
320
+ otelContextRegistry.captureAtSpanStart(span.context().toSpanId(), capturedOtelCtx);
321
+ }
322
+ }
285
323
  /** Activate a span as the current parent context for downstream traces. */
286
324
  activate(span, fn) {
287
325
  if (!this.llmobs.enabled) {
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../../src/ai-service/llmobs/tracer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../../src/ai-service/llmobs/tracer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"_registry.generated.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/skills/system/_registry.generated.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAehD,CAAC"}
1
+ {"version":3,"file":"_registry.generated.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/skills/system/_registry.generated.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgBhD,CAAC"}
@@ -10,6 +10,7 @@ import { content as superblocks_frontend_skill } from "./superblocks-frontend/sk
10
10
  import { content as superblocks_migration_references_focused_debug } from "./superblocks-migration/references/focused-debug.generated.js";
11
11
  import { content as superblocks_migration_references_yaml_block_mapping } from "./superblocks-migration/references/yaml-block-mapping.generated.js";
12
12
  import { content as superblocks_migration_skill } from "./superblocks-migration/skill.generated.js";
13
+ import { content as third_party_migration_claude_design } from "./third-party-migration/claude-design.generated.js";
13
14
  import { content as third_party_migration_lovable } from "./third-party-migration/lovable.generated.js";
14
15
  import { content as third_party_migration_replit } from "./third-party-migration/replit.generated.js";
15
16
  import { content as third_party_migration_skill } from "./third-party-migration/skill.generated.js";
@@ -30,6 +31,7 @@ export const SYSTEM_SKILLS = {
30
31
  "superblocks-migration/references/focused-debug.md": superblocks_migration_references_focused_debug,
31
32
  "superblocks-migration/references/yaml-block-mapping.md": superblocks_migration_references_yaml_block_mapping,
32
33
  "third-party-migration/SKILL.md": third_party_migration_skill,
34
+ "third-party-migration/claude-design.md": third_party_migration_claude_design,
33
35
  "third-party-migration/lovable.md": third_party_migration_lovable,
34
36
  "third-party-migration/replit.md": third_party_migration_replit,
35
37
  "third-party-migration/v0.md": third_party_migration_v0,
@@ -1 +1 @@
1
- {"version":3,"file":"_registry.generated.js","sourceRoot":"","sources":["../../../../src/ai-service/skills/system/_registry.generated.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,qDAAqD;AAErD,OAAO,EAAE,OAAO,IAAI,sCAAsC,EAAE,MAAM,uDAAuD,CAAC;AAC1H,OAAO,EAAE,OAAO,IAAI,kCAAkC,EAAE,MAAM,mDAAmD,CAAC;AAClH,OAAO,EAAE,OAAO,IAAI,oCAAoC,EAAE,MAAM,qDAAqD,CAAC;AACtH,OAAO,EAAE,OAAO,IAAI,wCAAwC,EAAE,MAAM,yDAAyD,CAAC;AAC9H,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,yCAAyC,EAAE,MAAM,0DAA0D,CAAC;AAChI,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAClG,OAAO,EAAE,OAAO,IAAI,8CAA8C,EAAE,MAAM,+DAA+D,CAAC;AAC1I,OAAO,EAAE,OAAO,IAAI,mDAAmD,EAAE,MAAM,oEAAoE,CAAC;AACpJ,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACpG,OAAO,EAAE,OAAO,IAAI,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AACxG,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AACtG,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACpG,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAE9F;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,0BAA0B,EAAE,qBAAqB;IACjD,2CAA2C,EAAE,sCAAsC;IACnF,uCAAuC,EAAE,kCAAkC;IAC3E,yCAAyC,EAAE,oCAAoC;IAC/E,6CAA6C,EAAE,wCAAwC;IACvF,+BAA+B,EAAE,0BAA0B;IAC3D,8CAA8C,EAAE,yCAAyC;IACzF,gCAAgC,EAAE,2BAA2B;IAC7D,mDAAmD,EAAE,8CAA8C;IACnG,wDAAwD,EAAE,mDAAmD;IAC7G,gCAAgC,EAAE,2BAA2B;IAC7D,kCAAkC,EAAE,6BAA6B;IACjE,iCAAiC,EAAE,4BAA4B;IAC/D,6BAA6B,EAAE,wBAAwB;CACxD,CAAC"}
1
+ {"version":3,"file":"_registry.generated.js","sourceRoot":"","sources":["../../../../src/ai-service/skills/system/_registry.generated.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,qDAAqD;AAErD,OAAO,EAAE,OAAO,IAAI,sCAAsC,EAAE,MAAM,uDAAuD,CAAC;AAC1H,OAAO,EAAE,OAAO,IAAI,kCAAkC,EAAE,MAAM,mDAAmD,CAAC;AAClH,OAAO,EAAE,OAAO,IAAI,oCAAoC,EAAE,MAAM,qDAAqD,CAAC;AACtH,OAAO,EAAE,OAAO,IAAI,wCAAwC,EAAE,MAAM,yDAAyD,CAAC;AAC9H,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,yCAAyC,EAAE,MAAM,0DAA0D,CAAC;AAChI,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAClG,OAAO,EAAE,OAAO,IAAI,8CAA8C,EAAE,MAAM,+DAA+D,CAAC;AAC1I,OAAO,EAAE,OAAO,IAAI,mDAAmD,EAAE,MAAM,oEAAoE,CAAC;AACpJ,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACpG,OAAO,EAAE,OAAO,IAAI,mCAAmC,EAAE,MAAM,oDAAoD,CAAC;AACpH,OAAO,EAAE,OAAO,IAAI,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AACxG,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AACtG,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACpG,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAE9F;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,0BAA0B,EAAE,qBAAqB;IACjD,2CAA2C,EAAE,sCAAsC;IACnF,uCAAuC,EAAE,kCAAkC;IAC3E,yCAAyC,EAAE,oCAAoC;IAC/E,6CAA6C,EAAE,wCAAwC;IACvF,+BAA+B,EAAE,0BAA0B;IAC3D,8CAA8C,EAAE,yCAAyC;IACzF,gCAAgC,EAAE,2BAA2B;IAC7D,mDAAmD,EAAE,8CAA8C;IACnG,wDAAwD,EAAE,mDAAmD;IAC7G,gCAAgC,EAAE,2BAA2B;IAC7D,wCAAwC,EAAE,mCAAmC;IAC7E,kCAAkC,EAAE,6BAA6B;IACjE,iCAAiC,EAAE,4BAA4B;IAC/D,6BAA6B,EAAE,wBAAwB;CACxD,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const content = "---\nname: superblocks-frontend\ndescription: |\n Build frontend UI using React, Tailwind CSS, and Superblocks components. Essential for connecting Superblocks UIs with APIs.\n Use when creating pages, components, handling user interactions, or working with the design system.\nreadOnly: true\nmetadata:\n author: superblocks\n version: \"1.0\"\n---\n\n# Superblocks Frontend Development\n\nThis skill covers building frontend UI for Superblocks applications using React, Tailwind CSS v4, and the Superblocks component library.\n\n## Platform Overview\n\nThis is a React-based web application platform. Use standard React patterns:\n\n- `useState`, `useEffect`, `useCallback`, `useMemo`\n- Event handlers and controlled components\n- JSX with Tailwind CSS classes\n\n## Using APIs from Frontend\n\nThree primitives are available from `@superblocksteam/library`:\n\n- **`useApiData`** \u2014 declarative reads with SWR caching (preferred for data loading)\n- **`useApi`** \u2014 imperative mutations (for event-driven actions)\n- **`executeApi`** \u2014 plain Promise outside React (utility functions, event handlers without hooks)\n\n**Data loading** \u2014 auto-fetches on mount and when inputs change (preferred for reads):\n\n```typescript\nimport { useApiData } from \"@superblocksteam/library\";\n\n// Auto-fetches when email or name changes. No useEffect or HMR guards needed.\n// IMPORTANT: Always use `fetching` to show a loading indicator during refetches.\nconst { data, loading, fetching, isError, error } = useApiData(\"GetUsers\", {\n email,\n name,\n});\n```\n\n**Mutations** \u2014 call `run()` manually (for event-driven actions like form submissions):\n\n```typescript\nimport { useApi } from \"@superblocksteam/library\";\nimport { toast } from \"sonner\";\n\nconst { run: createOrder, loading } = useApi(\"CreateOrder\");\n\nconst handleSubmit = useCallback(async () => {\n try {\n await createOrder({ item, qty });\n } catch (error) {\n const message =\n error && typeof error === \"object\" && \"message\" in error\n ? String((error as { message: unknown }).message)\n : String(error);\n toast.error(\"Error creating order: \" + message);\n }\n}, [item, qty, createOrder]);\n```\n\n**Outside React** \u2014 call APIs as a plain Promise (utility functions, event handlers):\n\n```typescript\nimport { executeApi } from \"@superblocksteam/library\";\n\nconst result = await executeApi(\"GetUsers\", { email });\n```\n\n`useApiData` returns `{ data, loading, fetching, isError, isSuccess, isStale, error, status, fetchStatus, refetch, cancel }`. `data` persists across background refetches (stale-while-revalidate). `loading` is true on first fetch with no cached data. `fetching` is true during any fetch including background refetch. `status` is `\"pending\"` | `\"success\"` | `\"error\"`. `fetchStatus` is `\"idle\"` | `\"fetching\"`. `cancel()` is synchronous (returns `void`).\n\n`useApi` returns `{ run, cancel, reset, loading, data, error, status, variables }`. `data` persists across re-runs (shows previous result while loading). `error` holds the most recent failure, or `undefined` on success. `status` is `\"idle\"` | `\"pending\"` | `\"success\"` | `\"error\"`. `variables` holds the inputs from the most recent `run()`. `reset()` clears all state back to idle. HMR double-fetch prevention is built in \u2014 no `useRef` guard needed.\n\n### useApiData Options\n\n```typescript\nconst { data } = useApiData(\"GetUsers\", { email }, {\n enabled: true, // Skip fetching when false (conditional fetching)\n staleTime: 0, // Ms before cached data is considered stale (0 = always refetch)\n retry: 3, // Retry attempts on failure (false to disable)\n retryDelay: (n) => ..., // Custom delay strategy (default: exponential backoff, max 30s)\n refetchOnWindowFocus: false, // Refetch when tab regains focus\n refetchOnReconnect: true, // Refetch when network reconnects\n refetchInterval: false, // Polling interval in ms (false = disabled)\n structuralSharing: false, // Deep-compare to preserve object identity\n placeholderData: undefined, // Shown while the first fetch is in progress\n});\n```\n\n### Cache invalidation and optimistic updates\n\n**Same scope as the read**: After a mutation, prefer `refetch()` from the `useApiData` that loads the data (same component or wherever you can pass `refetch`).\n\n```typescript\nimport { useApi, useApiData } from \"@superblocksteam/library\";\nimport { toast } from \"sonner\";\n\nconst { data: orders, refetch } = useApiData(\"GetOrders\", { status });\nconst { run: createOrder } = useApi(\"CreateOrder\");\n\nconst handleSubmit = useCallback(async () => {\n try {\n await createOrder({ item, qty });\n await refetch();\n } catch (error) {\n const message =\n error && typeof error === \"object\" && \"message\" in error\n ? String((error as { message: unknown }).message)\n : String(error);\n toast.error(\"Error creating order: \" + message);\n }\n}, [item, qty, createOrder, refetch]);\n```\n\n**Cross-scope or broad invalidation**: Use `queryClient.invalidateQueries` when you cannot call that `refetch` (mutation in a different place than the `useApiData`, or you need every cached variant of an API to refetch). For **`queryClient.invalidateQueries`, `buildCacheKey`, `setQueryData`, and any other `queryClient` usage, always import `queryClient` from `@superblocksteam/library`**.\n\n```typescript\nimport { queryClient, useApi } from \"@superblocksteam/library\";\nimport { toast } from \"sonner\";\n\nconst { run: createOrder } = useApi(\"CreateOrder\");\n\nconst handleSubmit = useCallback(async () => {\n try {\n await createOrder({ item, qty });\n await queryClient.invalidateQueries(\"GetOrders\");\n } catch (error) {\n const message =\n error && typeof error === \"object\" && \"message\" in error\n ? String((error as { message: unknown }).message)\n : String(error);\n toast.error(\"Error creating order: \" + message);\n }\n}, [item, qty, createOrder]);\n```\n\n```typescript\n// Optimistic update: set cached data without refetching\nimport { queryClient } from \"@superblocksteam/library\";\n\nconst cacheKey = queryClient.buildCacheKey(\"GetOrders\", { status: \"active\" });\nqueryClient.setQueryData(cacheKey, (old) => ({\n ...old,\n orders: [...old.orders, newOrder],\n}));\n```\n\n### Critical API Rules\n\n1. **MUST call API by exact name**: Format is `<ApiName>` matching folder `apis/<ApiName>/api.yaml`\n2. **Use `useApiData` for data loading, `useApi` for mutations**: For data fetching, use `useApiData(\"GetUsers\", { email })`. Only use `useApi` for event-driven actions (button clicks, form submissions). Use `executeApi` for API calls outside React components.\n3. **Use the hook's state fields**: Do NOT create separate `useState` for loading or response data \u2014 the hooks manage this for you\n4. **ALWAYS check API interfaces**: NEVER guess the response structure\n5. **Include all parameters**: Even optional ones should be passed as `null`\n6. **ALWAYS use try/catch**: In imperative mode, APIs throw errors when they fail - wrap ALL `run()` calls in try/catch blocks. In declarative mode, check the `error` field for failure details.\n\n### File Handling\n\n**CRITICAL: Files must be wrapped in `{ files: [...] }` format:**\n\n```tsx\n// \u2705 CORRECT - Frontend: wrap files in { files: [...] }\nconst response = await runUploadApi({ userFile: { files: selectedFiles } });\n\n// \u274C WRONG - backend cannot process unwrapped files\nconst response = await runUploadApi({ userFile: selectedFiles });\n```\n\n## Platform Hooks and Functions\n\nAvailable hooks and functions from `@superblocksteam/library`:\n\n### User and Group Context\n\n```typescript\nimport {\n useSuperblocksUser,\n useSuperblocksGroups,\n} from \"@superblocksteam/library\";\n\n// Get current user info\nconst user = useSuperblocksUser();\n// user.name, user.email, user.id, user.groups, user.username, user.metadata\n\n// Get organization groups\nconst groups = useSuperblocksGroups();\n```\n\n### Environments and Data Tags\n\nConcepts & terminology:\n\n- `Data tags` are labels for different data segments, such as `Staging`, `Production`, or `us-east`.\n- `Profiles` is the legacy term for the same concept. If a user asks about profiles, treat that as data tags.\n- `Environments` are `Edit`, `Preview`, and `Production`, and each data tag is allowed in one or more of those environments.\n- Clark operates in `Edit` mode, so the data tags visible in app context represent the tags available in `Edit`; do not assume this is the same set that will be available in `Preview` or `Production`.\n- When implementing app code, prefer `useSuperblocksDataTags()`, `dataTags`, and `setDataTag()`.\n\nThe `DataTag` type has these fields (it is an alias for `Profile` from `@superblocksteam/shared`):\n\n```typescript\ntype DataTag = {\n id: string;\n key: string;\n displayName: string; // human-readable label \u2014 use this for display, NOT \"name\"\n description: string;\n type: \"RESERVED\" | \"CUSTOM\";\n};\n```\n\nRelevant hooks and functions:\n\n```typescript\nimport { useSuperblocksDataTags, getAppMode } from \"@superblocksteam/library\";\nimport type { DataTag, DataTags } from \"@superblocksteam/library\";\n\n// Manage data tags\nconst { dataTags, setDataTag } = useSuperblocksDataTags();\n// dataTags.available: DataTag[] \u2014 all tags in the current environment\n// dataTags.selected: DataTag | undefined \u2014 currently active tag (may be undefined)\n// dataTags.default: DataTag \u2014 the default tag\n// setDataTag(dataTag.key) \u2014 switch the active tag by key\n\n// Read the current app mode when reasoning about environment-specific behavior\nconst appMode = getAppMode();\n```\n\nExample \u2014 data tag switcher using a Select:\n\n```tsx\nconst { dataTags, setDataTag } = useSuperblocksDataTags();\n\n<Select value={dataTags?.selected?.key} onValueChange={setDataTag}>\n {dataTags?.available.map((tag) => (\n <SelectItem key={tag.key} value={tag.key}>\n {tag.displayName}\n </SelectItem>\n ))}\n</Select>;\n```\n\n### Embedded Applications\n\n**For embedded applications**, see the `references/embedding.md` file for `useEmbedProperties`, `useEmbedEvent`, and `useEmitEmbedEvent` hooks.\n\n## Logging Out of Integrations\n\nWhen building a \"Log out\" or \"Sign out\" button for apps that use OAuth-like integrations, use `logoutIntegrations` from the library to clear OAuth tokens:\n\n```typescript\nimport { logoutIntegrations } from \"@superblocksteam/library\";\n\nconst handleLogout = async () => {\n await logoutIntegrations();\n // Optionally redirect or show confirmation\n};\n```\n\n## Application Architecture\n\n### App.tsx Layout Structure\n\n**For single-page applications:**\n\n- Put all content in `pages/<pageName>/index.tsx`\n- Use components to compose and build the page\n- Keep `App.tsx` minimal with just `<AppProvider>` and `<Outlet />`\n\n**For multi-page applications:**\n\n- Put shared navigation/layout in `App.tsx` (sidebars, headers, footers)\n- Always include `<Outlet />` for page content\n- Always include `<AppProvider />` wrapper\n- Individual pages focus on content, not layout\n\n```tsx\n// \u2705 CORRECT - Multi-page App.tsx layout\n<AppProvider>\n <div className=\"flex flex-row size-screen\">\n {/* Sidebar - persistent across all pages */}\n <div className=\"flex bg-sidebar border-r w-[250px]\">\n <Navigation />\n </div>\n\n {/* Main content area */}\n <div className=\"flex flex-1 h-full flex-col\">\n {/* Header - persistent across all pages */}\n <div className=\"flex bg-header border-b h-[60px]\">\n <Header />\n </div>\n\n {/* Page content area */}\n <div className=\"flex p-4 flex-1 overflow-auto\">\n <Outlet />\n </div>\n </div>\n </div>\n</AppProvider>\n```\n\n**PROTECTED: NEVER remove `<AppProvider>` or `<Outlet />` from App.tsx!**\n\n### Page Structure\n\n```tsx\n// \u2705 CORRECT - Page focuses on content only\n<div className=\"flex flex-col gap-4 size-screen overflow-auto\">\n <h1 className=\"text-3xl font-bold\">Dashboard Content</h1>\n <Card>{/* Page-specific content */}</Card>\n</div>\n```\n\n**IMPORTANT**: The first div on the page must have `overflow-auto` so the user's page can scroll.\n\n## Routing\n\nUse `react-router@7` in data mode. Standard patterns apply:\n\n- `useNavigate()` for programmatic navigation\n- `useParams()` for route parameters\n- `useSearchParams()` for query strings\n\n**If you add new pages or rename files, you MUST update the router.**\n\n## Design System (Tailwind CSS v4)\n\n**All design tokens are defined in `index.css`**. Apps come with a professional black-and-white theme by default.\n\n### Semantic Tokens Rule\n\n**ALWAYS use semantic tokens** \u2014 NEVER raw Tailwind utilities:\n\n```tsx\n// \u2705 CORRECT\n<Card className=\"bg-background text-foreground border border-border\" />\n\n// \u274C WRONG\n<Card className=\"bg-white text-black border-gray-200\" />\n```\n\n### When to Modify index.css\n\nOnly modify when:\n\n- User explicitly requests branding/theme changes\n- Replicating a specific brand look (e.g., Yelp, Instacart)\n- Migrating an attached third-party app \u2014 see `skills/system/third-party-migration/SKILL.md` (its theme-port rules override the Modification Rules below \u2014 copy source tokens as-is, do not convert to OKLCH or trim the palette)\n- Feature requests (lists, filters, CRUD) do NOT require changes\n\n**Modification Rules:**\n\n- All colors must be in OKLCH format\n- Use semantic names (`--color-warning`, `--shadow-elevated`)\n- Do not remove or rename existing tokens\n- Limit color palette to 5 colors max\n- Avoid gradients unless explicitly requested\n- Minimal font sizes (3 max: body, section heading, main heading)\n\n### Component Variants\n\nUse or create variants instead of one-off styles:\n\n```tsx\n// \u274C WRONG - Hacky inline overrides\n<Button className=\"text-white border-white hover:bg-white\" />\n\n// \u2705 CORRECT - Use a variant\n<Button variant=\"secondary\" />\n```\n\n## Icons\n\nUse icons from Lucide React library:\n\n```tsx\nimport { Icon } from \"@/components/ui/icon\";\n<Icon icon=\"heart\" />;\n\nimport { Button } from \"@/components/ui/button\";\n<Button>\n <Icon icon=\"plus\" /> Add Item\n</Button>;\n```\n\n**Always use icons rather than emojis unless explicitly requested.**\n\n## Custom Components\n\n**CRITICAL: Component composition is MANDATORY. DO NOT create monolithic pages.**\n\n### The Composition Rule\n\nWhen building ANY feature:\n\n1. **First**, identify reusable parts (list items, cards, forms, filters, headers)\n2. **Then**, create separate component files\n3. **Finally**, compose them together in the page\n\n### When to Create Components\n\n- **Rendering any list** - Extract to a component\n- **Building cards/complex UI** - Each card type is a component\n- **Creating forms** - Form sections are components\n- **Adding filters/headers** - These are components\n- **Page has >50 lines JSX** - Break it down\n\n### Component Boundary Rules\n\n**Inside a custom component:**\n\n- \u2705 Use React hooks (useState, useReducer, useEffect, etc.)\n- \u2705 Use local React state\n- \u2705 Use internal helper components\n- \u2705 Use other registered components\n- \u274C CANNOT call APIs - must pass data into the component\n\n### Example: Proper Component Structure\n\n```tsx\n// components/ProductCard/index.tsx - Extract to component\nimport { Card } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\n\ntype ProductCardProps = {\n product: {\n id: string;\n name: string;\n image: string;\n };\n};\n\nexport default function ProductCard(props: ProductCardProps) {\n return (\n <Card>\n <img src={props.product.image} />\n <h3 className=\"text-lg font-semibold\">{props.product.name}</h3>\n <Button>Add</Button>\n </Card>\n );\n}\n\n// pages/Products/index.tsx - Clean composition\nimport ProductCard from \"@/components/ProductCard\";\n\nconst ProductsPage = () => {\n const [products, setProducts] = useState([]);\n\n return (\n <div className=\"grid grid-cols-3 gap-4\">\n {products.map((p) => (\n <ProductCard key={p.id} product={p} />\n ))}\n </div>\n );\n};\n```\n\n## Visual Excellence\n\n**Prioritize visual excellence from the start:**\n\n1. **Design System Enhancement**: Start by enhancing `index.css` with app-specific colors that match the target aesthetic\n2. **Professional Layout Architecture**: Use sophisticated layouts with proper spacing, responsive design\n3. **Rich Interactive Components**: Leverage advanced components with proper variants and states\n4. **Visual Polish**: Add shadows, smooth transitions, skeleton loaders, hover effects, typography hierarchy\n5. **Real-World UI Patterns**: Create layouts that feel like professional applications\n\n**Make applications that look and feel like real, polished products - not basic wireframes.**\n\n### Loading States\n\nLoading behavior must differ based on whether data has already been fetched:\n\n**Initial load (no data yet):** Show skeleton shimmers that mirror the shape of the final content. Never show a blank screen or a generic spinner.\n\n**Refetch / background refresh (data already exists):** Keep showing the existing data. Use `fetching` from `useApiData` to apply a subtle visual indicator: light opacity (e.g. `opacity-70`) to signal a refresh is in progress, plus a non-blocking label such as a small inline spinner, a thin progress bar, or an \"Updating\u2026\" label. **Do not** use `pointer-events-none` or otherwise disable the content \u2014 it must remain fully interactive during refetch.\n\nUse `loading` and `fetching` from `useApiData` to distinguish these states:\n\n```tsx\nconst { data, loading, fetching, isError, error } = useApiData(\"GetOrders\", {\n status: statusFilter,\n search,\n});\n\n// Initial load \u2014 no data yet \u2192 show skeleton placeholder\nif (loading) {\n return <OrderTableSkeleton />;\n}\n\nif (isError) return <ErrorBanner error={error} />;\n\n// Refetch \u2014 data exists \u2192 subtle opacity + indicator, table stays interactive\nreturn (\n <div>\n {fetching && <div className=\"text-xs text-muted-foreground\">Updating\u2026</div>}\n <div className={fetching ? \"opacity-70\" : \"\"}>\n <OrderTable orders={data.orders} />\n </div>\n </div>\n);\n```\n\n```tsx\n// \u274C WRONG \u2014 pointer-events-none disables the table, making it feel broken\nreturn (\n <div className={fetching ? \"pointer-events-none\" : \"\"}>\n <OrderTable orders={data.orders} />\n </div>\n);\n\n// \u274C WRONG \u2014 no loading feedback when filters change\nif (loading) return <Skeleton />;\nreturn <OrderTable orders={data.orders} />;\n```\n\n#### Table Loading Rules\n\n- **Do not** use `pointer-events-none` on a table during loading \u2014 this disables interaction and makes the UI feel broken. During refetch, apply a subtle opacity (e.g. `opacity-70`) plus a non-blocking indicator (e.g., an \"Updating\u2026\" label or a thin progress bar). The table must remain clickable, sortable, and scrollable.\n- **Do not** replace a populated table with a full skeleton on refetch \u2014 this causes disorienting content flashes.\n- **Skeleton tables are only for initial load** (`loading` is true) when there is no data to display yet. Build them to match the real table's column structure (header + a few placeholder rows).\n\n### Efficient Loading Patterns\n\n1. **Always show loading indicators on refetch**: When inputs change (e.g. filters, search), show a non-blocking visual indicator while new data loads. Use `fetching` from `useApiData`.\n2. **Loading State Hierarchy**:\n - No data yet (`loading`) \u2192 Full skeleton placeholder\n - Has data, refetching (`fetching` && !`loading`) \u2192 Keep showing current data with a subtle visual indicator: light opacity (e.g. `opacity-70`) plus a non-blocking label (e.g. \"Updating\u2026\" text, thin progress bar, inline spinner). Do not use `pointer-events-none` \u2014 the content must remain fully interactive.\n - Error state (`isError`) \u2192 Show error with retry option, optionally keep stale data visible\n3. **Debounce Rapid Requests**: Prevent multiple API calls in short succession\n4. **Use useApiData for automatic refetching**: `useApiData` auto-refetches when inputs change and supports `staleTime`, `refetchOnWindowFocus`, `refetchOnReconnect`, `refetchInterval`, and `retry` options.\n\n## Performance Rules\n\n### 1. ALWAYS Paginate Tables and Lists\n\n**NEVER render more than 50 rows without pagination.** Always add client-side pagination:\n\n```tsx\nfunction PaginatedTable({ data }: { data: any[] }) {\n const PAGE_SIZE = 20;\n const [page, setPage] = useState(0);\n const totalPages = Math.ceil(data.length / PAGE_SIZE);\n const pageData = useMemo(\n () => data.slice(page * PAGE_SIZE, (page + 1) * PAGE_SIZE),\n [data, page],\n );\n\n useEffect(() => {\n setPage(0);\n }, [data.length]);\n\n return (\n <>\n <Table>{/* render pageData rows */}</Table>\n <span>\n Page {page + 1} of {totalPages} ({data.length} total rows)\n </span>\n <Button\n onClick={() => setPage((p) => Math.max(0, p - 1))}\n disabled={page === 0}\n >\n Previous\n </Button>\n <Button\n onClick={() => setPage((p) => Math.min(totalPages - 1, p + 1))}\n disabled={page >= totalPages - 1}\n >\n Next\n </Button>\n </>\n );\n}\n```\n\nFor 200+ rows, prefer **server-side pagination**; use cursor/keyset pagination for high offsets instead of `LIMIT`/`OFFSET`.\n\nFor 500+ item lists where pagination doesn't fit the UX (chat messages, infinite scroll feeds, large dropdowns), use **virtualization** (`react-virtuoso` or `@tanstack/react-virtual`) to render only the items visible in the viewport.\n\n### 2. ALWAYS Debounce Input-Driven API Calls\n\n**NEVER call an API directly from onChange.** Debounce search/filter inputs with a 300ms timer:\n\n```tsx\nfunction DebouncedSearch({ onSearch }: { onSearch: (query: string) => void }) {\n const [localValue, setLocalValue] = useState(\"\");\n const timerRef = useRef<ReturnType<typeof setTimeout>>();\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setLocalValue(e.target.value);\n clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => onSearch(e.target.value), 300);\n },\n [onSearch],\n );\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n return (\n <Input value={localValue} onChange={handleChange} placeholder=\"Search...\" />\n );\n}\n```\n\n### 3. Memoize Expensive Renders\n\nUse memoization (`memo()`, `useMemo`, `useCallback`) when it prevents measurable re-renders or expensive recomputation:\n\n```tsx\nconst OrderRow = memo(function OrderRow({\n order,\n onSelect,\n}: {\n order: Order;\n onSelect: (id: string) => void;\n}) {\n return (\n <TableRow onClick={() => onSelect(order.id)}>\n <TableCell>{order.id}</TableCell>...\n </TableRow>\n );\n});\n\nconst handleSelect = useCallback((id: string) => {\n setSelectedId(id);\n}, []);\n\nconst filtered = useMemo(\n () =>\n orders.filter((o) => o.status === status).sort((a, b) => b.total - a.total),\n [orders, status],\n);\n```\n\n### 4. ALWAYS Clean Up Side Effects\n\nClean up timers, event listeners, and subscriptions in `useEffect` return functions:\n\n```tsx\nuseEffect(() => {\n const handler = (e: KeyboardEvent) => {\n /* ... */\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n}, []);\n```\n\n### 5. Cancel In-Flight API Requests on Unmount\n\nFor search/filter patterns, prefer `useApiData` \u2014 it handles cancellation and cleanup automatically:\n\n```tsx\n// useApiData: auto-fetches and cancels on unmount/input change\nconst { data, fetching } = useApiData(\"SearchProducts\", { query });\n```\n\nFor imperative usage with manual cleanup, use the `cancel()` function:\n\n```tsx\nconst { run, cancel } = useApi(\"SearchProducts\");\n\nuseEffect(() => {\n if (!query) return;\n run({ query }).catch(console.error);\n return () => {\n cancel().catch(() => {});\n };\n}, [query, run, cancel]);\n```\n";
1
+ export declare const content = "---\nname: superblocks-frontend\ndescription: |\n Build frontend UI using React, Tailwind CSS, and Superblocks components. Essential for connecting Superblocks UIs with APIs.\n Use when creating pages, components, handling user interactions, or working with the design system.\nreadOnly: true\nmetadata:\n author: superblocks\n version: \"1.0\"\n---\n\n# Superblocks Frontend Development\n\nThis skill covers building frontend UI for Superblocks applications using React, Tailwind CSS v4, and the Superblocks component library.\n\n## Platform Overview\n\nThis is a React-based web application platform. Use standard React patterns:\n\n- `useState`, `useEffect`, `useCallback`, `useMemo`\n- Event handlers and controlled components\n- JSX with Tailwind CSS classes\n\n## Using APIs from Frontend\n\nThree primitives are available from `@superblocksteam/library`:\n\n- **`useApiData`** \u2014 declarative reads with SWR caching (preferred for data loading)\n- **`useApi`** \u2014 imperative mutations (for event-driven actions)\n- **`executeApi`** \u2014 plain Promise outside React (utility functions, event handlers without hooks)\n\n**Data loading** \u2014 auto-fetches on mount and when inputs change (preferred for reads):\n\n```typescript\nimport { useApiData } from \"@superblocksteam/library\";\n\n// Auto-fetches when email or name changes. No useEffect or HMR guards needed.\n// IMPORTANT: Always use `fetching` to show a loading indicator during refetches.\nconst { data, loading, fetching, isError, error } = useApiData(\"GetUsers\", {\n email,\n name,\n});\n```\n\n**Mutations** \u2014 call `run()` manually (for event-driven actions like form submissions):\n\n```typescript\nimport { useApi } from \"@superblocksteam/library\";\nimport { toast } from \"sonner\";\n\nconst { run: createOrder, loading } = useApi(\"CreateOrder\");\n\nconst handleSubmit = useCallback(async () => {\n try {\n await createOrder({ item, qty });\n } catch (error) {\n const message =\n error && typeof error === \"object\" && \"message\" in error\n ? String((error as { message: unknown }).message)\n : String(error);\n toast.error(\"Error creating order: \" + message);\n }\n}, [item, qty, createOrder]);\n```\n\n**Outside React** \u2014 call APIs as a plain Promise (utility functions, event handlers):\n\n```typescript\nimport { executeApi } from \"@superblocksteam/library\";\n\nconst result = await executeApi(\"GetUsers\", { email });\n```\n\n`useApiData` returns `{ data, loading, fetching, isError, isSuccess, isStale, error, status, fetchStatus, refetch, cancel }`. `data` persists across background refetches (stale-while-revalidate). `loading` is true on first fetch with no cached data. `fetching` is true during any fetch including background refetch. `status` is `\"pending\"` | `\"success\"` | `\"error\"`. `fetchStatus` is `\"idle\"` | `\"fetching\"`. `cancel()` is synchronous (returns `void`).\n\n`useApi` returns `{ run, cancel, reset, loading, data, error, status, variables }`. `data` persists across re-runs (shows previous result while loading). `error` holds the most recent failure, or `undefined` on success. `status` is `\"idle\"` | `\"pending\"` | `\"success\"` | `\"error\"`. `variables` holds the inputs from the most recent `run()`. `reset()` clears all state back to idle. HMR double-fetch prevention is built in \u2014 no `useRef` guard needed.\n\n### useApiData Options\n\n```typescript\nconst { data } = useApiData(\"GetUsers\", { email }, {\n enabled: true, // Skip fetching when false (conditional fetching)\n staleTime: 0, // Ms before cached data is considered stale (0 = always refetch)\n retry: 3, // Retry attempts on failure (false to disable)\n retryDelay: (n) => ..., // Custom delay strategy (default: exponential backoff, max 30s)\n refetchOnWindowFocus: false, // Refetch when tab regains focus\n refetchOnReconnect: true, // Refetch when network reconnects\n refetchInterval: false, // Polling interval in ms (false = disabled)\n structuralSharing: false, // Deep-compare to preserve object identity\n placeholderData: undefined, // Shown while the first fetch is in progress\n});\n```\n\n### Cache invalidation and optimistic updates\n\n**Same scope as the read**: After a mutation, prefer `refetch()` from the `useApiData` that loads the data (same component or wherever you can pass `refetch`).\n\n```typescript\nimport { useApi, useApiData } from \"@superblocksteam/library\";\nimport { toast } from \"sonner\";\n\nconst { data: orders, refetch } = useApiData(\"GetOrders\", { status });\nconst { run: createOrder } = useApi(\"CreateOrder\");\n\nconst handleSubmit = useCallback(async () => {\n try {\n await createOrder({ item, qty });\n await refetch();\n } catch (error) {\n const message =\n error && typeof error === \"object\" && \"message\" in error\n ? String((error as { message: unknown }).message)\n : String(error);\n toast.error(\"Error creating order: \" + message);\n }\n}, [item, qty, createOrder, refetch]);\n```\n\n**Cross-scope or broad invalidation**: Use `queryClient.invalidateQueries` when you cannot call that `refetch` (mutation in a different place than the `useApiData`, or you need every cached variant of an API to refetch). For **`queryClient.invalidateQueries`, `buildCacheKey`, `setQueryData`, and any other `queryClient` usage, always import `queryClient` from `@superblocksteam/library`**.\n\n```typescript\nimport { queryClient, useApi } from \"@superblocksteam/library\";\nimport { toast } from \"sonner\";\n\nconst { run: createOrder } = useApi(\"CreateOrder\");\n\nconst handleSubmit = useCallback(async () => {\n try {\n await createOrder({ item, qty });\n await queryClient.invalidateQueries(\"GetOrders\");\n } catch (error) {\n const message =\n error && typeof error === \"object\" && \"message\" in error\n ? String((error as { message: unknown }).message)\n : String(error);\n toast.error(\"Error creating order: \" + message);\n }\n}, [item, qty, createOrder]);\n```\n\n```typescript\n// Optimistic update: set cached data without refetching\nimport { queryClient } from \"@superblocksteam/library\";\n\nconst cacheKey = queryClient.buildCacheKey(\"GetOrders\", { status: \"active\" });\nqueryClient.setQueryData(cacheKey, (old) => ({\n ...old,\n orders: [...old.orders, newOrder],\n}));\n```\n\n### Critical API Rules\n\n1. **MUST call API by exact name**: Format is `<ApiName>` matching folder `apis/<ApiName>/api.yaml`\n2. **Use `useApiData` for data loading, `useApi` for mutations**: For data fetching, use `useApiData(\"GetUsers\", { email })`. Only use `useApi` for event-driven actions (button clicks, form submissions). Use `executeApi` for API calls outside React components.\n3. **Use the hook's state fields**: Do NOT create separate `useState` for loading or response data \u2014 the hooks manage this for you\n4. **ALWAYS check API interfaces**: NEVER guess the response structure\n5. **Include all parameters**: Even optional ones should be passed as `null`\n6. **ALWAYS use try/catch**: In imperative mode, APIs throw errors when they fail - wrap ALL `run()` calls in try/catch blocks. In declarative mode, check the `error` field for failure details.\n\n### File Handling\n\n**CRITICAL: Files must be wrapped in `{ files: [...] }` format:**\n\n```tsx\n// \u2705 CORRECT - Frontend: wrap files in { files: [...] }\nconst response = await runUploadApi({ userFile: { files: selectedFiles } });\n\n// \u274C WRONG - backend cannot process unwrapped files\nconst response = await runUploadApi({ userFile: selectedFiles });\n```\n\n## Platform Hooks and Functions\n\nAvailable hooks and functions from `@superblocksteam/library`:\n\n### User and Group Context\n\n```typescript\nimport {\n useSuperblocksUser,\n useSuperblocksGroups,\n} from \"@superblocksteam/library\";\n\n// Get current user info\nconst user = useSuperblocksUser();\n// user.name, user.email, user.id, user.groups, user.username, user.metadata\n\n// Get organization groups\nconst groups = useSuperblocksGroups();\n```\n\n### Environments and Data Tags\n\nConcepts & terminology:\n\n- `Data tags` are labels for different data segments, such as `Staging`, `Production`, or `us-east`.\n- `Profiles` is the legacy term for the same concept. If a user asks about profiles, treat that as data tags.\n- `Environments` are `Edit`, `Preview`, and `Production`, and each data tag is allowed in one or more of those environments.\n- Clark operates in `Edit` mode, so the data tags visible in app context represent the tags available in `Edit`; do not assume this is the same set that will be available in `Preview` or `Production`.\n- When implementing app code, prefer `useSuperblocksDataTags()`, `dataTags`, and `setDataTag()`.\n\nThe `DataTag` type has these fields (it is an alias for `Profile` from `@superblocksteam/shared`):\n\n```typescript\ntype DataTag = {\n id: string;\n key: string;\n displayName: string; // human-readable label \u2014 use this for display, NOT \"name\"\n description: string;\n type: \"RESERVED\" | \"CUSTOM\";\n};\n```\n\nRelevant hooks and functions:\n\n```typescript\nimport { useSuperblocksDataTags, getAppMode } from \"@superblocksteam/library\";\nimport type { DataTag, DataTags } from \"@superblocksteam/library\";\n\n// Manage data tags\nconst { dataTags, setDataTag } = useSuperblocksDataTags();\n// dataTags.available: DataTag[] \u2014 all tags in the current environment\n// dataTags.selected: DataTag | undefined \u2014 currently active tag (may be undefined)\n// dataTags.default: DataTag \u2014 the default tag\n// setDataTag(dataTag.key) \u2014 switch the active tag by key\n\n// Read the current app mode when reasoning about environment-specific behavior\nconst appMode = getAppMode();\n```\n\nExample \u2014 data tag switcher using a Select:\n\n```tsx\nconst { dataTags, setDataTag } = useSuperblocksDataTags();\n\n<Select value={dataTags?.selected?.key} onValueChange={setDataTag}>\n {dataTags?.available.map((tag) => (\n <SelectItem key={tag.key} value={tag.key}>\n {tag.displayName}\n </SelectItem>\n ))}\n</Select>;\n```\n\n### Embedded Applications\n\n**For embedded applications**, see the `references/embedding.md` file for `useEmbedProperties`, `useEmbedEvent`, and `useEmitEmbedEvent` hooks.\n\n## Logging Out of Integrations\n\nWhen building a \"Log out\" or \"Sign out\" button for apps that use OAuth-like integrations, use `logoutIntegrations` from the library to clear OAuth tokens:\n\n```typescript\nimport { logoutIntegrations } from \"@superblocksteam/library\";\n\nconst handleLogout = async () => {\n await logoutIntegrations();\n // Optionally redirect or show confirmation\n};\n```\n\n## Application Architecture\n\n### App.tsx Layout Structure\n\n**For single-page applications:**\n\n- Put all content in `pages/<pageName>/index.tsx`\n- Use components to compose and build the page\n- Keep `App.tsx` minimal with just `<AppProvider>` and `<Outlet />`\n\n**For multi-page applications:**\n\n- Put shared navigation/layout in `App.tsx` (sidebars, headers, footers)\n- Always include `<Outlet />` for page content\n- Always include `<AppProvider />` wrapper\n- Individual pages focus on content, not layout\n\n```tsx\n// \u2705 CORRECT - Multi-page App.tsx layout\n<AppProvider>\n <div className=\"flex flex-row size-screen\">\n {/* Sidebar - persistent across all pages */}\n <div className=\"flex bg-sidebar border-r w-[250px]\">\n <Navigation />\n </div>\n\n {/* Main content area */}\n <div className=\"flex flex-1 h-full flex-col\">\n {/* Header - persistent across all pages */}\n <div className=\"flex bg-header border-b h-[60px]\">\n <Header />\n </div>\n\n {/* Page content area */}\n <div className=\"flex p-4 flex-1 overflow-auto\">\n <Outlet />\n </div>\n </div>\n </div>\n</AppProvider>\n```\n\n**PROTECTED: NEVER remove `<AppProvider>` or `<Outlet />` from App.tsx!**\n\n### Page Structure\n\n```tsx\n// \u2705 CORRECT - Page focuses on content only\n<div className=\"flex flex-col gap-4 size-screen overflow-auto\">\n <h1 className=\"text-3xl font-bold\">Dashboard Content</h1>\n <Card>{/* Page-specific content */}</Card>\n</div>\n```\n\n**IMPORTANT**: The first div on the page must have `overflow-auto` so the user's page can scroll.\n\n## Routing\n\nUse `react-router@7` in data mode. Standard patterns apply:\n\n- `useNavigate()` for programmatic navigation\n- `useParams()` for route parameters\n- `useSearchParams()` for query strings\n\n**If you add new pages or rename files, you MUST update the router.**\n\n## Design System (Tailwind CSS v4)\n\n**All design tokens are defined in `index.css`**. Apps come with a professional black-and-white theme by default.\n\n### Semantic Tokens Rule\n\n**ALWAYS use semantic tokens** \u2014 NEVER raw Tailwind utilities:\n\n```tsx\n// \u2705 CORRECT\n<Card className=\"bg-background text-foreground border border-border\" />\n\n// \u274C WRONG\n<Card className=\"bg-white text-black border-gray-200\" />\n```\n\n### When to Modify index.css\n\nOnly modify when:\n\n- User explicitly requests branding/theme changes\n- Replicating a specific brand look (e.g., Yelp, Instacart)\n- Migrating an attached third-party app \u2014 see `skills/system/third-party-migration/SKILL.md` (its theme-port rules override the Modification Rules below \u2014 copy source tokens as-is, do not convert to OKLCH or trim the palette)\n- Feature requests (lists, filters, CRUD) do NOT require changes\n\n**Modification Rules:**\n\n- All colors must be in OKLCH format\n- Use semantic names (`--color-warning`, `--shadow-elevated`)\n- Do not remove or rename existing tokens\n- Limit color palette to 5 colors max\n- Avoid gradients unless explicitly requested\n- Minimal font sizes (3 max: body, section heading, main heading)\n\n### Component Variants\n\nUse or create variants instead of one-off styles:\n\n```tsx\n// \u274C WRONG - Hacky inline overrides\n<Button className=\"text-white border-white hover:bg-white\" />\n\n// \u2705 CORRECT - Use a variant\n<Button variant=\"secondary\" />\n```\n\n## Icons\n\nUse icons from Lucide React library:\n\n```tsx\nimport { Icon } from \"@/components/ui/icon\";\n<Icon icon=\"heart\" />;\n\nimport { Button } from \"@/components/ui/button\";\n<Button>\n <Icon icon=\"plus\" /> Add Item\n</Button>;\n```\n\n**Always use icons rather than emojis unless explicitly requested.**\n\nUse current Lucide icon names, not stale aliases: use `house` instead of `home`, `life-buoy` instead of `help-circle` or `circle-help`, and `chart-column-big` instead of `bar-chart-3`.\n\n## Custom Components\n\n**CRITICAL: Component composition is MANDATORY. DO NOT create monolithic pages.**\n\n### The Composition Rule\n\nWhen building ANY feature:\n\n1. **First**, identify reusable parts (list items, cards, forms, filters, headers)\n2. **Then**, create separate component files\n3. **Finally**, compose them together in the page\n\n### When to Create Components\n\n- **Rendering any list** - Extract to a component\n- **Building cards/complex UI** - Each card type is a component\n- **Creating forms** - Form sections are components\n- **Adding filters/headers** - These are components\n- **Page has >50 lines JSX** - Break it down\n\n### Component Boundary Rules\n\n**Inside a custom component:**\n\n- \u2705 Use React hooks (useState, useReducer, useEffect, etc.)\n- \u2705 Use local React state\n- \u2705 Use internal helper components\n- \u2705 Use other registered components\n- \u274C CANNOT call APIs - must pass data into the component\n\n### Example: Proper Component Structure\n\n```tsx\n// components/ProductCard/index.tsx - Extract to component\nimport { Card } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\n\ntype ProductCardProps = {\n product: {\n id: string;\n name: string;\n image: string;\n };\n};\n\nexport default function ProductCard(props: ProductCardProps) {\n return (\n <Card>\n <img src={props.product.image} />\n <h3 className=\"text-lg font-semibold\">{props.product.name}</h3>\n <Button>Add</Button>\n </Card>\n );\n}\n\n// pages/Products/index.tsx - Clean composition\nimport ProductCard from \"@/components/ProductCard\";\n\nconst ProductsPage = () => {\n const [products, setProducts] = useState([]);\n\n return (\n <div className=\"grid grid-cols-3 gap-4\">\n {products.map((p) => (\n <ProductCard key={p.id} product={p} />\n ))}\n </div>\n );\n};\n```\n\n## Visual Excellence\n\n**Prioritize visual excellence from the start:**\n\n1. **Design System Enhancement**: Start by enhancing `index.css` with app-specific colors that match the target aesthetic\n2. **Professional Layout Architecture**: Use sophisticated layouts with proper spacing, responsive design\n3. **Rich Interactive Components**: Leverage advanced components with proper variants and states\n4. **Visual Polish**: Add shadows, smooth transitions, skeleton loaders, hover effects, typography hierarchy\n5. **Real-World UI Patterns**: Create layouts that feel like professional applications\n\n**Make applications that look and feel like real, polished products - not basic wireframes.**\n\n### Loading States\n\nLoading behavior must differ based on whether data has already been fetched:\n\n**Initial load (no data yet):** Show skeleton shimmers that mirror the shape of the final content. Never show a blank screen or a generic spinner.\n\n**Refetch / background refresh (data already exists):** Keep showing the existing data. Use `fetching` from `useApiData` to apply a subtle visual indicator: light opacity (e.g. `opacity-70`) to signal a refresh is in progress, plus a non-blocking label such as a small inline spinner, a thin progress bar, or an \"Updating\u2026\" label. **Do not** use `pointer-events-none` or otherwise disable the content \u2014 it must remain fully interactive during refetch.\n\nUse `loading` and `fetching` from `useApiData` to distinguish these states:\n\n```tsx\nconst { data, loading, fetching, isError, error } = useApiData(\"GetOrders\", {\n status: statusFilter,\n search,\n});\n\n// Initial load \u2014 no data yet \u2192 show skeleton placeholder\nif (loading) {\n return <OrderTableSkeleton />;\n}\n\nif (isError) return <ErrorBanner error={error} />;\n\n// Refetch \u2014 data exists \u2192 subtle opacity + indicator, table stays interactive\nreturn (\n <div>\n {fetching && <div className=\"text-xs text-muted-foreground\">Updating\u2026</div>}\n <div className={fetching ? \"opacity-70\" : \"\"}>\n <OrderTable orders={data.orders} />\n </div>\n </div>\n);\n```\n\n```tsx\n// \u274C WRONG \u2014 pointer-events-none disables the table, making it feel broken\nreturn (\n <div className={fetching ? \"pointer-events-none\" : \"\"}>\n <OrderTable orders={data.orders} />\n </div>\n);\n\n// \u274C WRONG \u2014 no loading feedback when filters change\nif (loading) return <Skeleton />;\nreturn <OrderTable orders={data.orders} />;\n```\n\n#### Table Loading Rules\n\n- **Do not** use `pointer-events-none` on a table during loading \u2014 this disables interaction and makes the UI feel broken. During refetch, apply a subtle opacity (e.g. `opacity-70`) plus a non-blocking indicator (e.g., an \"Updating\u2026\" label or a thin progress bar). The table must remain clickable, sortable, and scrollable.\n- **Do not** replace a populated table with a full skeleton on refetch \u2014 this causes disorienting content flashes.\n- **Skeleton tables are only for initial load** (`loading` is true) when there is no data to display yet. Build them to match the real table's column structure (header + a few placeholder rows).\n\n### Efficient Loading Patterns\n\n1. **Always show loading indicators on refetch**: When inputs change (e.g. filters, search), show a non-blocking visual indicator while new data loads. Use `fetching` from `useApiData`.\n2. **Loading State Hierarchy**:\n - No data yet (`loading`) \u2192 Full skeleton placeholder\n - Has data, refetching (`fetching` && !`loading`) \u2192 Keep showing current data with a subtle visual indicator: light opacity (e.g. `opacity-70`) plus a non-blocking label (e.g. \"Updating\u2026\" text, thin progress bar, inline spinner). Do not use `pointer-events-none` \u2014 the content must remain fully interactive.\n - Error state (`isError`) \u2192 Show error with retry option, optionally keep stale data visible\n3. **Debounce Rapid Requests**: Prevent multiple API calls in short succession\n4. **Use useApiData for automatic refetching**: `useApiData` auto-refetches when inputs change and supports `staleTime`, `refetchOnWindowFocus`, `refetchOnReconnect`, `refetchInterval`, and `retry` options.\n\n## Performance Rules\n\n### 1. ALWAYS Paginate Tables and Lists\n\n**NEVER render more than 50 rows without pagination.** Always add client-side pagination:\n\n```tsx\nfunction PaginatedTable({ data }: { data: any[] }) {\n const PAGE_SIZE = 20;\n const [page, setPage] = useState(0);\n const totalPages = Math.ceil(data.length / PAGE_SIZE);\n const pageData = useMemo(\n () => data.slice(page * PAGE_SIZE, (page + 1) * PAGE_SIZE),\n [data, page],\n );\n\n useEffect(() => {\n setPage(0);\n }, [data.length]);\n\n return (\n <>\n <Table>{/* render pageData rows */}</Table>\n <span>\n Page {page + 1} of {totalPages} ({data.length} total rows)\n </span>\n <Button\n onClick={() => setPage((p) => Math.max(0, p - 1))}\n disabled={page === 0}\n >\n Previous\n </Button>\n <Button\n onClick={() => setPage((p) => Math.min(totalPages - 1, p + 1))}\n disabled={page >= totalPages - 1}\n >\n Next\n </Button>\n </>\n );\n}\n```\n\nFor 200+ rows, prefer **server-side pagination**; use cursor/keyset pagination for high offsets instead of `LIMIT`/`OFFSET`.\n\nFor 500+ item lists where pagination doesn't fit the UX (chat messages, infinite scroll feeds, large dropdowns), use **virtualization** (`react-virtuoso` or `@tanstack/react-virtual`) to render only the items visible in the viewport.\n\n### 2. ALWAYS Debounce Input-Driven API Calls\n\n**NEVER call an API directly from onChange.** Debounce search/filter inputs with a 300ms timer:\n\n```tsx\nfunction DebouncedSearch({ onSearch }: { onSearch: (query: string) => void }) {\n const [localValue, setLocalValue] = useState(\"\");\n const timerRef = useRef<ReturnType<typeof setTimeout>>();\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setLocalValue(e.target.value);\n clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => onSearch(e.target.value), 300);\n },\n [onSearch],\n );\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n return (\n <Input value={localValue} onChange={handleChange} placeholder=\"Search...\" />\n );\n}\n```\n\n### 3. Memoize Expensive Renders\n\nUse memoization (`memo()`, `useMemo`, `useCallback`) when it prevents measurable re-renders or expensive recomputation:\n\n```tsx\nconst OrderRow = memo(function OrderRow({\n order,\n onSelect,\n}: {\n order: Order;\n onSelect: (id: string) => void;\n}) {\n return (\n <TableRow onClick={() => onSelect(order.id)}>\n <TableCell>{order.id}</TableCell>...\n </TableRow>\n );\n});\n\nconst handleSelect = useCallback((id: string) => {\n setSelectedId(id);\n}, []);\n\nconst filtered = useMemo(\n () =>\n orders.filter((o) => o.status === status).sort((a, b) => b.total - a.total),\n [orders, status],\n);\n```\n\n### 4. ALWAYS Clean Up Side Effects\n\nClean up timers, event listeners, and subscriptions in `useEffect` return functions:\n\n```tsx\nuseEffect(() => {\n const handler = (e: KeyboardEvent) => {\n /* ... */\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n}, []);\n```\n\n### 5. Cancel In-Flight API Requests on Unmount\n\nFor search/filter patterns, prefer `useApiData` \u2014 it handles cancellation and cleanup automatically:\n\n```tsx\n// useApiData: auto-fetches and cancels on unmount/input change\nconst { data, fetching } = useApiData(\"SearchProducts\", { query });\n```\n\nFor imperative usage with manual cleanup, use the `cancel()` function:\n\n```tsx\nconst { run, cancel } = useApi(\"SearchProducts\");\n\nuseEffect(() => {\n if (!query) return;\n run({ query }).catch(console.error);\n return () => {\n cancel().catch(() => {});\n };\n}, [query, run, cancel]);\n```\n";
2
2
  //# sourceMappingURL=skill.generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill.generated.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/skills/system/superblocks-frontend/skill.generated.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,g/vBAiqBnB,CAAC"}
1
+ {"version":3,"file":"skill.generated.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/skills/system/superblocks-frontend/skill.generated.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,4qwBAmqBnB,CAAC"}
@@ -390,6 +390,8 @@ import { Button } from "@/components/ui/button";
390
390
 
391
391
  **Always use icons rather than emojis unless explicitly requested.**
392
392
 
393
+ Use current Lucide icon names, not stale aliases: use \`house\` instead of \`home\`, \`life-buoy\` instead of \`help-circle\` or \`circle-help\`, and \`chart-column-big\` instead of \`bar-chart-3\`.
394
+
393
395
  ## Custom Components
394
396
 
395
397
  **CRITICAL: Component composition is MANDATORY. DO NOT create monolithic pages.**