@agent-native/core 0.7.11 → 0.7.13

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 (327) hide show
  1. package/README.md +1 -1
  2. package/dist/action.js +30 -11
  3. package/dist/action.js.map +1 -1
  4. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  5. package/dist/agent/engine/ai-sdk-engine.js +26 -8
  6. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  7. package/dist/agent/engine/builder-engine.d.ts +19 -0
  8. package/dist/agent/engine/builder-engine.d.ts.map +1 -0
  9. package/dist/agent/engine/builder-engine.js +430 -0
  10. package/dist/agent/engine/builder-engine.js.map +1 -0
  11. package/dist/agent/engine/builtin.d.ts.map +1 -1
  12. package/dist/agent/engine/builtin.js +26 -10
  13. package/dist/agent/engine/builtin.js.map +1 -1
  14. package/dist/agent/engine/index.d.ts +1 -1
  15. package/dist/agent/engine/index.d.ts.map +1 -1
  16. package/dist/agent/engine/index.js +1 -1
  17. package/dist/agent/engine/index.js.map +1 -1
  18. package/dist/agent/engine/provider-env-vars.d.ts +21 -0
  19. package/dist/agent/engine/provider-env-vars.d.ts.map +1 -0
  20. package/dist/agent/engine/provider-env-vars.js +50 -0
  21. package/dist/agent/engine/provider-env-vars.js.map +1 -0
  22. package/dist/agent/engine/registry.d.ts +37 -0
  23. package/dist/agent/engine/registry.d.ts.map +1 -1
  24. package/dist/agent/engine/registry.js +102 -4
  25. package/dist/agent/engine/registry.js.map +1 -1
  26. package/dist/agent/engine/types.d.ts +30 -0
  27. package/dist/agent/engine/types.d.ts.map +1 -1
  28. package/dist/agent/engine/types.js +19 -1
  29. package/dist/agent/engine/types.js.map +1 -1
  30. package/dist/agent/production-agent.d.ts +7 -1
  31. package/dist/agent/production-agent.d.ts.map +1 -1
  32. package/dist/agent/production-agent.js +67 -15
  33. package/dist/agent/production-agent.js.map +1 -1
  34. package/dist/agent/run-manager.d.ts.map +1 -1
  35. package/dist/agent/run-manager.js +11 -1
  36. package/dist/agent/run-manager.js.map +1 -1
  37. package/dist/agent/thread-data-builder.d.ts +4 -0
  38. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  39. package/dist/agent/thread-data-builder.js +1 -0
  40. package/dist/agent/thread-data-builder.js.map +1 -1
  41. package/dist/agent/types.d.ts +8 -0
  42. package/dist/agent/types.d.ts.map +1 -1
  43. package/dist/checkpoints/service.d.ts +1 -0
  44. package/dist/checkpoints/service.d.ts.map +1 -1
  45. package/dist/checkpoints/service.js +26 -2
  46. package/dist/checkpoints/service.js.map +1 -1
  47. package/dist/cli/create.d.ts +30 -0
  48. package/dist/cli/create.d.ts.map +1 -1
  49. package/dist/cli/create.js +127 -10
  50. package/dist/cli/create.js.map +1 -1
  51. package/dist/cli/index.js +19 -2
  52. package/dist/cli/index.js.map +1 -1
  53. package/dist/cli/templates-meta.d.ts +2 -0
  54. package/dist/cli/templates-meta.d.ts.map +1 -1
  55. package/dist/cli/templates-meta.js +2 -0
  56. package/dist/cli/templates-meta.js.map +1 -1
  57. package/dist/cli/workspacify.d.ts.map +1 -1
  58. package/dist/cli/workspacify.js +7 -3
  59. package/dist/cli/workspacify.js.map +1 -1
  60. package/dist/client/AgentPanel.js +1 -1
  61. package/dist/client/AgentPanel.js.map +1 -1
  62. package/dist/client/AssistantChat.d.ts.map +1 -1
  63. package/dist/client/AssistantChat.js +93 -37
  64. package/dist/client/AssistantChat.js.map +1 -1
  65. package/dist/client/ConnectBuilderCard.d.ts +1 -7
  66. package/dist/client/ConnectBuilderCard.d.ts.map +1 -1
  67. package/dist/client/ConnectBuilderCard.js +30 -132
  68. package/dist/client/ConnectBuilderCard.js.map +1 -1
  69. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  70. package/dist/client/MultiTabAssistantChat.js +58 -26
  71. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  72. package/dist/client/analytics.d.ts +5 -8
  73. package/dist/client/analytics.d.ts.map +1 -1
  74. package/dist/client/analytics.js +53 -11
  75. package/dist/client/analytics.js.map +1 -1
  76. package/dist/client/builder-mark.d.ts +9 -0
  77. package/dist/client/builder-mark.d.ts.map +1 -0
  78. package/dist/client/builder-mark.js +10 -0
  79. package/dist/client/builder-mark.js.map +1 -0
  80. package/dist/client/components/ui/popover.d.ts +8 -0
  81. package/dist/client/components/ui/popover.d.ts.map +1 -0
  82. package/dist/client/components/ui/popover.js +11 -0
  83. package/dist/client/components/ui/popover.js.map +1 -0
  84. package/dist/client/composer/ComposerPlusMenu.d.ts +2 -0
  85. package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -0
  86. package/dist/client/composer/ComposerPlusMenu.js +244 -0
  87. package/dist/client/composer/ComposerPlusMenu.js.map +1 -0
  88. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  89. package/dist/client/composer/TiptapComposer.js +25 -7
  90. package/dist/client/composer/TiptapComposer.js.map +1 -1
  91. package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
  92. package/dist/client/composer/useVoiceDictation.js +4 -2
  93. package/dist/client/composer/useVoiceDictation.js.map +1 -1
  94. package/dist/client/error-format.d.ts +2 -0
  95. package/dist/client/error-format.d.ts.map +1 -0
  96. package/dist/client/error-format.js +31 -0
  97. package/dist/client/error-format.js.map +1 -0
  98. package/dist/client/index.d.ts +3 -1
  99. package/dist/client/index.d.ts.map +1 -1
  100. package/dist/client/index.js +3 -1
  101. package/dist/client/index.js.map +1 -1
  102. package/dist/client/observability/ObservabilityDashboard.d.ts +5 -0
  103. package/dist/client/observability/ObservabilityDashboard.d.ts.map +1 -0
  104. package/dist/client/observability/ObservabilityDashboard.js +169 -0
  105. package/dist/client/observability/ObservabilityDashboard.js.map +1 -0
  106. package/dist/client/observability/ThumbsFeedback.d.ts +8 -0
  107. package/dist/client/observability/ThumbsFeedback.d.ts.map +1 -0
  108. package/dist/client/observability/ThumbsFeedback.js +64 -0
  109. package/dist/client/observability/ThumbsFeedback.js.map +1 -0
  110. package/dist/client/observability/index.d.ts +4 -0
  111. package/dist/client/observability/index.d.ts.map +1 -0
  112. package/dist/client/observability/index.js +4 -0
  113. package/dist/client/observability/index.js.map +1 -0
  114. package/dist/client/observability/useObservability.d.ts +128 -0
  115. package/dist/client/observability/useObservability.d.ts.map +1 -0
  116. package/dist/client/observability/useObservability.js +109 -0
  117. package/dist/client/observability/useObservability.js.map +1 -0
  118. package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
  119. package/dist/client/onboarding/OnboardingPanel.js +34 -92
  120. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  121. package/dist/client/org/RequireActiveOrg.d.ts +33 -0
  122. package/dist/client/org/RequireActiveOrg.d.ts.map +1 -0
  123. package/dist/client/org/RequireActiveOrg.js +63 -0
  124. package/dist/client/org/RequireActiveOrg.js.map +1 -0
  125. package/dist/client/org/hooks.d.ts.map +1 -1
  126. package/dist/client/org/hooks.js +50 -15
  127. package/dist/client/org/hooks.js.map +1 -1
  128. package/dist/client/org/index.d.ts +1 -0
  129. package/dist/client/org/index.d.ts.map +1 -1
  130. package/dist/client/org/index.js +1 -0
  131. package/dist/client/org/index.js.map +1 -1
  132. package/dist/client/resources/ResourcesPanel.js +3 -3
  133. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  134. package/dist/client/settings/AutomationsSection.js +1 -1
  135. package/dist/client/settings/AutomationsSection.js.map +1 -1
  136. package/dist/client/settings/BrowserSection.js +1 -1
  137. package/dist/client/settings/BrowserSection.js.map +1 -1
  138. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  139. package/dist/client/settings/SettingsPanel.js +251 -42
  140. package/dist/client/settings/SettingsPanel.js.map +1 -1
  141. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  142. package/dist/client/settings/VoiceTranscriptionSection.js +10 -4
  143. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  144. package/dist/client/settings/useBuilderStatus.d.ts +26 -0
  145. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  146. package/dist/client/settings/useBuilderStatus.js +128 -4
  147. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  148. package/dist/client/sse-event-processor.d.ts +2 -0
  149. package/dist/client/sse-event-processor.d.ts.map +1 -1
  150. package/dist/client/sse-event-processor.js +6 -2
  151. package/dist/client/sse-event-processor.js.map +1 -1
  152. package/dist/client/transcription/BuilderTranscriptionCta.d.ts +9 -0
  153. package/dist/client/transcription/BuilderTranscriptionCta.d.ts.map +1 -0
  154. package/dist/client/transcription/BuilderTranscriptionCta.js +18 -0
  155. package/dist/client/transcription/BuilderTranscriptionCta.js.map +1 -0
  156. package/dist/client/transcription/use-live-transcription.d.ts +29 -0
  157. package/dist/client/transcription/use-live-transcription.d.ts.map +1 -0
  158. package/dist/client/transcription/use-live-transcription.js +156 -0
  159. package/dist/client/transcription/use-live-transcription.js.map +1 -0
  160. package/dist/client/use-builder-enabled.d.ts +17 -0
  161. package/dist/client/use-builder-enabled.d.ts.map +1 -0
  162. package/dist/client/use-builder-enabled.js +36 -0
  163. package/dist/client/use-builder-enabled.js.map +1 -0
  164. package/dist/client/use-db-sync.d.ts.map +1 -1
  165. package/dist/client/use-db-sync.js +4 -2
  166. package/dist/client/use-db-sync.js.map +1 -1
  167. package/dist/client/useProductionAgent.d.ts.map +1 -1
  168. package/dist/client/useProductionAgent.js +3 -1
  169. package/dist/client/useProductionAgent.js.map +1 -1
  170. package/dist/db/migrations.d.ts +9 -0
  171. package/dist/db/migrations.d.ts.map +1 -1
  172. package/dist/db/migrations.js +75 -10
  173. package/dist/db/migrations.js.map +1 -1
  174. package/dist/file-upload/builder.d.ts.map +1 -1
  175. package/dist/file-upload/builder.js +11 -4
  176. package/dist/file-upload/builder.js.map +1 -1
  177. package/dist/jobs/tools.d.ts.map +1 -1
  178. package/dist/jobs/tools.js +137 -161
  179. package/dist/jobs/tools.js.map +1 -1
  180. package/dist/notifications/actions.d.ts +2 -2
  181. package/dist/notifications/actions.d.ts.map +1 -1
  182. package/dist/notifications/actions.js +77 -69
  183. package/dist/notifications/actions.js.map +1 -1
  184. package/dist/observability/evals.d.ts +22 -0
  185. package/dist/observability/evals.d.ts.map +1 -0
  186. package/dist/observability/evals.js +371 -0
  187. package/dist/observability/evals.js.map +1 -0
  188. package/dist/observability/experiments.d.ts +24 -0
  189. package/dist/observability/experiments.d.ts.map +1 -0
  190. package/dist/observability/experiments.js +274 -0
  191. package/dist/observability/experiments.js.map +1 -0
  192. package/dist/observability/feedback.d.ts +14 -0
  193. package/dist/observability/feedback.d.ts.map +1 -0
  194. package/dist/observability/feedback.js +256 -0
  195. package/dist/observability/feedback.js.map +1 -0
  196. package/dist/observability/index.d.ts +6 -0
  197. package/dist/observability/index.d.ts.map +1 -0
  198. package/dist/observability/index.js +5 -0
  199. package/dist/observability/index.js.map +1 -0
  200. package/dist/observability/plugin.d.ts +2 -0
  201. package/dist/observability/plugin.d.ts.map +1 -0
  202. package/dist/observability/plugin.js +12 -0
  203. package/dist/observability/plugin.js.map +1 -0
  204. package/dist/observability/routes.d.ts +68 -0
  205. package/dist/observability/routes.d.ts.map +1 -0
  206. package/dist/observability/routes.js +301 -0
  207. package/dist/observability/routes.js.map +1 -0
  208. package/dist/observability/store.d.ts +77 -0
  209. package/dist/observability/store.d.ts.map +1 -0
  210. package/dist/observability/store.js +976 -0
  211. package/dist/observability/store.js.map +1 -0
  212. package/dist/observability/traces.d.ts +37 -0
  213. package/dist/observability/traces.d.ts.map +1 -0
  214. package/dist/observability/traces.js +182 -0
  215. package/dist/observability/traces.js.map +1 -0
  216. package/dist/observability/types.d.ts +159 -0
  217. package/dist/observability/types.d.ts.map +1 -0
  218. package/dist/observability/types.js +16 -0
  219. package/dist/observability/types.js.map +1 -0
  220. package/dist/onboarding/default-steps.d.ts.map +1 -1
  221. package/dist/onboarding/default-steps.js +68 -24
  222. package/dist/onboarding/default-steps.js.map +1 -1
  223. package/dist/onboarding/types.d.ts +10 -1
  224. package/dist/onboarding/types.d.ts.map +1 -1
  225. package/dist/org/context.d.ts +8 -1
  226. package/dist/org/context.d.ts.map +1 -1
  227. package/dist/org/context.js +163 -6
  228. package/dist/org/context.js.map +1 -1
  229. package/dist/org/handlers.d.ts.map +1 -1
  230. package/dist/org/handlers.js +49 -30
  231. package/dist/org/handlers.js.map +1 -1
  232. package/dist/progress/actions.d.ts +3 -0
  233. package/dist/progress/actions.d.ts.map +1 -1
  234. package/dist/progress/actions.js +86 -110
  235. package/dist/progress/actions.js.map +1 -1
  236. package/dist/progress/routes.d.ts +1 -1
  237. package/dist/progress/routes.js +1 -1
  238. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  239. package/dist/scripts/agent-engines/list-agent-engines.js +20 -6
  240. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  241. package/dist/scripts/agent-engines/manage-agent-engine.d.ts +10 -0
  242. package/dist/scripts/agent-engines/manage-agent-engine.d.ts.map +1 -0
  243. package/dist/scripts/agent-engines/manage-agent-engine.js +47 -0
  244. package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -0
  245. package/dist/scripts/agent-engines/set-agent-engine.d.ts.map +1 -1
  246. package/dist/scripts/agent-engines/set-agent-engine.js +10 -9
  247. package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
  248. package/dist/server/agent-chat-plugin.d.ts +39 -0
  249. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  250. package/dist/server/agent-chat-plugin.js +743 -452
  251. package/dist/server/agent-chat-plugin.js.map +1 -1
  252. package/dist/server/agent-teams.d.ts.map +1 -1
  253. package/dist/server/agent-teams.js +18 -7
  254. package/dist/server/agent-teams.js.map +1 -1
  255. package/dist/server/analytics.d.ts +9 -7
  256. package/dist/server/analytics.d.ts.map +1 -1
  257. package/dist/server/analytics.js +12 -11
  258. package/dist/server/analytics.js.map +1 -1
  259. package/dist/server/app-name.d.ts +5 -2
  260. package/dist/server/app-name.d.ts.map +1 -1
  261. package/dist/server/app-name.js +14 -3
  262. package/dist/server/app-name.js.map +1 -1
  263. package/dist/server/app-url.d.ts.map +1 -1
  264. package/dist/server/app-url.js +17 -5
  265. package/dist/server/app-url.js.map +1 -1
  266. package/dist/server/auth.d.ts +2 -0
  267. package/dist/server/auth.d.ts.map +1 -1
  268. package/dist/server/auth.js +153 -2
  269. package/dist/server/auth.js.map +1 -1
  270. package/dist/server/better-auth-instance.d.ts +2 -0
  271. package/dist/server/better-auth-instance.d.ts.map +1 -1
  272. package/dist/server/better-auth-instance.js +4 -0
  273. package/dist/server/better-auth-instance.js.map +1 -1
  274. package/dist/server/builder-browser.d.ts +59 -1
  275. package/dist/server/builder-browser.d.ts.map +1 -1
  276. package/dist/server/builder-browser.js +127 -11
  277. package/dist/server/builder-browser.js.map +1 -1
  278. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  279. package/dist/server/core-routes-plugin.js +278 -13
  280. package/dist/server/core-routes-plugin.js.map +1 -1
  281. package/dist/server/credential-provider.d.ts +7 -0
  282. package/dist/server/credential-provider.d.ts.map +1 -1
  283. package/dist/server/credential-provider.js +10 -0
  284. package/dist/server/credential-provider.js.map +1 -1
  285. package/dist/server/onboarding-html.d.ts.map +1 -1
  286. package/dist/server/onboarding-html.js +29 -4
  287. package/dist/server/onboarding-html.js.map +1 -1
  288. package/dist/server/poll.d.ts.map +1 -1
  289. package/dist/server/poll.js +46 -5
  290. package/dist/server/poll.js.map +1 -1
  291. package/dist/server/ssr-handler.d.ts.map +1 -1
  292. package/dist/server/ssr-handler.js +2 -1
  293. package/dist/server/ssr-handler.js.map +1 -1
  294. package/dist/server/transcribe-voice.d.ts.map +1 -1
  295. package/dist/server/transcribe-voice.js +44 -5
  296. package/dist/server/transcribe-voice.js.map +1 -1
  297. package/dist/styles/agent-native.css +11 -2
  298. package/dist/templates/default/.agents/skills/progress/SKILL.md +14 -12
  299. package/dist/templates/default/app/root.tsx +7 -0
  300. package/dist/templates/workspace-root/pnpm-workspace.yaml +6 -0
  301. package/dist/transcription/builder-transcription.d.ts +27 -0
  302. package/dist/transcription/builder-transcription.d.ts.map +1 -0
  303. package/dist/transcription/builder-transcription.js +41 -0
  304. package/dist/transcription/builder-transcription.js.map +1 -0
  305. package/dist/triggers/actions.d.ts +3 -0
  306. package/dist/triggers/actions.d.ts.map +1 -1
  307. package/dist/triggers/actions.js +189 -213
  308. package/dist/triggers/actions.js.map +1 -1
  309. package/docs/content/agent-mentions.md +1 -1
  310. package/docs/content/automations.md +22 -19
  311. package/docs/content/cloneable-saas.md +2 -2
  312. package/docs/content/deployment.md +21 -61
  313. package/docs/content/getting-started.md +1 -1
  314. package/docs/content/key-concepts.md +1 -1
  315. package/docs/content/{enterprise-workspace.md → multi-app-workspace.md} +3 -3
  316. package/docs/content/multi-tenancy.md +1 -1
  317. package/docs/content/progress.md +11 -11
  318. package/docs/content/template-dispatch.md +3 -3
  319. package/docs/content/workspace-management.md +1 -1
  320. package/package.json +13 -1
  321. package/src/templates/default/.agents/skills/progress/SKILL.md +14 -12
  322. package/src/templates/default/app/root.tsx +7 -0
  323. package/src/templates/workspace-root/pnpm-workspace.yaml +6 -0
  324. package/dist/client/settings/LLMSection.d.ts +0 -2
  325. package/dist/client/settings/LLMSection.d.ts.map +0 -1
  326. package/dist/client/settings/LLMSection.js +0 -191
  327. package/dist/client/settings/LLMSection.js.map +0 -1
@@ -0,0 +1,8 @@
1
+ export interface ThumbsFeedbackProps {
2
+ threadId: string;
3
+ runId: string;
4
+ messageSeq: number;
5
+ className?: string;
6
+ }
7
+ export declare function ThumbsFeedback({ threadId, runId, messageSeq, className, }: ThumbsFeedbackProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=ThumbsFeedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThumbsFeedback.d.ts","sourceRoot":"","sources":["../../../src/client/observability/ThumbsFeedback.tsx"],"names":[],"mappings":"AAcA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,KAAK,EACL,UAAU,EACV,SAAS,GACV,EAAE,mBAAmB,2CAiIrB"}
@@ -0,0 +1,64 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useCallback } from "react";
3
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
4
+ import { IconThumbUp, IconThumbDown } from "@tabler/icons-react";
5
+ import { cn } from "../utils.js";
6
+ const THUMBS_DOWN_CATEGORIES = [
7
+ "Inaccurate",
8
+ "Not helpful",
9
+ "Wrong tool",
10
+ "Too slow",
11
+ ];
12
+ export function ThumbsFeedback({ threadId, runId, messageSeq, className, }) {
13
+ const [selection, setSelection] = useState(null);
14
+ const [categoryOpen, setCategoryOpen] = useState(false);
15
+ const [submittedCategory, setSubmittedCategory] = useState(null);
16
+ const sendFeedback = useCallback(async (feedbackType, value) => {
17
+ try {
18
+ await fetch("/_agent-native/observability/feedback", {
19
+ method: "POST",
20
+ headers: { "Content-Type": "application/json" },
21
+ body: JSON.stringify({
22
+ threadId,
23
+ runId,
24
+ messageSeq,
25
+ feedbackType,
26
+ value: value ?? "",
27
+ }),
28
+ });
29
+ }
30
+ catch {
31
+ // Fire-and-forget; don't block the UI on feedback submission failures
32
+ }
33
+ }, [threadId, runId, messageSeq]);
34
+ const handleThumbsUp = useCallback(() => {
35
+ if (selection === "up")
36
+ return;
37
+ setSelection("up");
38
+ setCategoryOpen(false);
39
+ setSubmittedCategory(null);
40
+ sendFeedback("thumbs_up");
41
+ }, [selection, sendFeedback]);
42
+ const handleThumbsDown = useCallback(() => {
43
+ if (selection === "down") {
44
+ setCategoryOpen((prev) => !prev);
45
+ return;
46
+ }
47
+ setSelection("down");
48
+ setCategoryOpen(true);
49
+ sendFeedback("thumbs_down");
50
+ }, [selection, sendFeedback]);
51
+ const handleCategory = useCallback((category) => {
52
+ setSubmittedCategory(category);
53
+ setCategoryOpen(false);
54
+ sendFeedback("category", category);
55
+ }, [sendFeedback]);
56
+ return (_jsxs("div", { className: cn("inline-flex items-center gap-0.5", className), children: [_jsx("button", { type: "button", "aria-label": "Thumbs up", onClick: handleThumbsUp, className: cn("flex h-6 w-6 items-center justify-center rounded", selection === "up"
57
+ ? "text-foreground"
58
+ : "text-muted-foreground/70 hover:text-muted-foreground hover:bg-accent/50"), children: _jsx(IconThumbUp, { size: 16, stroke: selection === "up" ? 2.5 : 1.5, fill: selection === "up" ? "currentColor" : "none" }) }), _jsxs(PopoverPrimitive.Root, { open: categoryOpen, onOpenChange: setCategoryOpen, children: [_jsx(PopoverPrimitive.Trigger, { asChild: true, children: _jsx("button", { type: "button", "aria-label": "Thumbs down", onClick: handleThumbsDown, className: cn("flex h-6 w-6 items-center justify-center rounded", selection === "down"
59
+ ? "text-foreground"
60
+ : "text-muted-foreground/70 hover:text-muted-foreground hover:bg-accent/50"), children: _jsx(IconThumbDown, { size: 16, stroke: selection === "down" ? 2.5 : 1.5, fill: selection === "down" ? "currentColor" : "none" }) }) }), _jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { side: "bottom", align: "start", sideOffset: 4, collisionPadding: 8, className: "z-[300] overflow-hidden rounded-lg border border-border bg-popover p-1 shadow-lg outline-none", children: _jsx("div", { className: "flex flex-col gap-0.5", children: THUMBS_DOWN_CATEGORIES.map((category) => (_jsx("button", { type: "button", onClick: () => handleCategory(category), className: cn("rounded-md px-3 py-1.5 text-left text-xs", submittedCategory === category
61
+ ? "bg-accent text-foreground font-medium"
62
+ : "text-muted-foreground hover:bg-accent/50 hover:text-foreground"), children: category }, category))) }) }) })] })] }));
63
+ }
64
+ //# sourceMappingURL=ThumbsFeedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThumbsFeedback.js","sourceRoot":"","sources":["../../../src/client/observability/ThumbsFeedback.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { ObservabilityDashboard, type ObservabilityDashboardProps, } from "./ObservabilityDashboard.js";
2
+ export { ThumbsFeedback } from "./ThumbsFeedback.js";
3
+ export { useObservabilityOverview, useTraces, useTraceDetail, useFeedbackList, useFeedbackStats, useSubmitFeedback, useSatisfaction, useEvalStats, useExperiments, useExperimentDetail, useExperimentResults, } from "./useObservability.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,GACjC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,wBAAwB,EACxB,SAAS,EACT,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { ObservabilityDashboard, } from "./ObservabilityDashboard.js";
2
+ export { ThumbsFeedback } from "./ThumbsFeedback.js";
3
+ export { useObservabilityOverview, useTraces, useTraceDetail, useFeedbackList, useFeedbackStats, useSubmitFeedback, useSatisfaction, useEvalStats, useExperiments, useExperimentDetail, useExperimentResults, } from "./useObservability.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,GAEvB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,wBAAwB,EACxB,SAAS,EACT,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,128 @@
1
+ export interface ObservabilityOverview {
2
+ totalRuns: number;
3
+ totalCostCents: number;
4
+ avgDurationMs: number;
5
+ toolSuccessRate: number;
6
+ avgFrustrationScore: number;
7
+ thumbsUpRate: number;
8
+ avgEvalScore: number;
9
+ }
10
+ export declare function useObservabilityOverview(sinceDays?: number): import("@tanstack/react-query").UseQueryResult<ObservabilityOverview, Error>;
11
+ export interface TraceSummary {
12
+ runId: string;
13
+ threadId: string | null;
14
+ totalSpans: number;
15
+ llmCalls: number;
16
+ toolCalls: number;
17
+ successfulTools: number;
18
+ failedTools: number;
19
+ totalDurationMs: number;
20
+ totalCostCentsX100: number;
21
+ totalInputTokens: number;
22
+ totalOutputTokens: number;
23
+ model: string;
24
+ createdAt: number;
25
+ }
26
+ export declare function useTraces(sinceDays?: number, limit?: number): import("@tanstack/react-query").UseQueryResult<TraceSummary[], Error>;
27
+ export interface TraceSpan {
28
+ id: string;
29
+ runId: string;
30
+ threadId: string | null;
31
+ parentSpanId: string | null;
32
+ spanType: "llm_call" | "tool_call" | "agent_run";
33
+ name: string;
34
+ inputTokens: number;
35
+ outputTokens: number;
36
+ cacheReadTokens: number;
37
+ cacheWriteTokens: number;
38
+ costCentsX100: number;
39
+ durationMs: number;
40
+ status: "success" | "error";
41
+ errorMessage: string | null;
42
+ metadata: Record<string, unknown> | null;
43
+ createdAt: number;
44
+ }
45
+ export interface TraceDetail {
46
+ summary: TraceSummary;
47
+ spans: TraceSpan[];
48
+ }
49
+ export declare function useTraceDetail(runId: string | null): import("@tanstack/react-query").UseQueryResult<TraceDetail, Error>;
50
+ export interface FeedbackEntry {
51
+ id: string;
52
+ runId: string | null;
53
+ threadId: string | null;
54
+ messageSeq: number | null;
55
+ feedbackType: "thumbs_up" | "thumbs_down" | "category" | "text";
56
+ value: string;
57
+ userId: string | null;
58
+ createdAt: number;
59
+ }
60
+ export declare function useFeedbackList(sinceDays?: number, limit?: number): import("@tanstack/react-query").UseQueryResult<FeedbackEntry[], Error>;
61
+ export interface FeedbackStats {
62
+ total: number;
63
+ thumbsUp: number;
64
+ thumbsDown: number;
65
+ categories: Record<string, number>;
66
+ }
67
+ export declare function useFeedbackStats(sinceDays?: number): import("@tanstack/react-query").UseQueryResult<FeedbackStats, Error>;
68
+ export declare function useSubmitFeedback(): import("@tanstack/react-query").UseMutationResult<{
69
+ id: string;
70
+ }, Error, {
71
+ threadId?: string;
72
+ runId?: string;
73
+ messageSeq?: number;
74
+ feedbackType: string;
75
+ value?: string;
76
+ userId?: string;
77
+ }, unknown>;
78
+ export interface SatisfactionScore {
79
+ id: string;
80
+ threadId: string;
81
+ frustrationScore: number;
82
+ rephrasingScore: number;
83
+ abandonmentScore: number;
84
+ sentimentScore: number;
85
+ lengthTrendScore: number;
86
+ computedAt: number;
87
+ }
88
+ export declare function useSatisfaction(sinceDays?: number): import("@tanstack/react-query").UseQueryResult<SatisfactionScore[], Error>;
89
+ export interface EvalStats {
90
+ totalEvals: number;
91
+ avgScore: number;
92
+ byCriteria: Array<{
93
+ criteria: string;
94
+ avgScore: number;
95
+ count: number;
96
+ }>;
97
+ }
98
+ export declare function useEvalStats(sinceDays?: number): import("@tanstack/react-query").UseQueryResult<EvalStats, Error>;
99
+ export interface Experiment {
100
+ id: string;
101
+ name: string;
102
+ status: "draft" | "running" | "paused" | "completed";
103
+ variants: Array<{
104
+ id: string;
105
+ weight: number;
106
+ config: Record<string, unknown>;
107
+ }>;
108
+ metrics: string[];
109
+ assignmentLevel: "user" | "session";
110
+ startedAt: number | null;
111
+ endedAt: number | null;
112
+ createdAt: number;
113
+ }
114
+ export declare function useExperiments(): import("@tanstack/react-query").UseQueryResult<Experiment[], Error>;
115
+ export declare function useExperimentDetail(id: string | null): import("@tanstack/react-query").UseQueryResult<Experiment, Error>;
116
+ export interface ExperimentMetricResult {
117
+ id: string;
118
+ experimentId: string;
119
+ variantId: string;
120
+ metric: string;
121
+ value: number;
122
+ sampleSize: number;
123
+ confidenceLow: number;
124
+ confidenceHigh: number;
125
+ computedAt: number;
126
+ }
127
+ export declare function useExperimentResults(id: string | null): import("@tanstack/react-query").UseQueryResult<ExperimentMetricResult[], Error>;
128
+ //# sourceMappingURL=useObservability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useObservability.d.ts","sourceRoot":"","sources":["../../../src/client/observability/useObservability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
2
+ const BASE = "/_agent-native/observability";
3
+ function fetchJson(url) {
4
+ return fetch(url).then((r) => {
5
+ if (!r.ok)
6
+ throw new Error(`HTTP ${r.status}`);
7
+ return r.json();
8
+ });
9
+ }
10
+ export function useObservabilityOverview(sinceDays = 7) {
11
+ const sinceMs = Date.now() - sinceDays * 86_400_000;
12
+ return useQuery({
13
+ queryKey: ["observability", "overview", sinceDays],
14
+ queryFn: () => fetchJson(`${BASE}?since=${sinceMs}`),
15
+ refetchInterval: 30_000,
16
+ });
17
+ }
18
+ export function useTraces(sinceDays = 7, limit = 100) {
19
+ const sinceMs = Date.now() - sinceDays * 86_400_000;
20
+ return useQuery({
21
+ queryKey: ["observability", "traces", sinceDays, limit],
22
+ queryFn: () => fetchJson(`${BASE}/traces?since=${sinceMs}&limit=${limit}`),
23
+ refetchInterval: 30_000,
24
+ });
25
+ }
26
+ export function useTraceDetail(runId) {
27
+ return useQuery({
28
+ queryKey: ["observability", "trace", runId],
29
+ queryFn: () => fetchJson(`${BASE}/traces/${encodeURIComponent(runId)}`),
30
+ enabled: !!runId,
31
+ });
32
+ }
33
+ export function useFeedbackList(sinceDays = 7, limit = 100) {
34
+ const sinceMs = Date.now() - sinceDays * 86_400_000;
35
+ return useQuery({
36
+ queryKey: ["observability", "feedback", sinceDays, limit],
37
+ queryFn: () => fetchJson(`${BASE}/feedback?since=${sinceMs}&limit=${limit}`),
38
+ refetchInterval: 30_000,
39
+ });
40
+ }
41
+ export function useFeedbackStats(sinceDays = 7) {
42
+ const sinceMs = Date.now() - sinceDays * 86_400_000;
43
+ return useQuery({
44
+ queryKey: ["observability", "feedback-stats", sinceDays],
45
+ queryFn: () => fetchJson(`${BASE}/feedback/stats?since=${sinceMs}`),
46
+ refetchInterval: 30_000,
47
+ });
48
+ }
49
+ export function useSubmitFeedback() {
50
+ const queryClient = useQueryClient();
51
+ return useMutation({
52
+ mutationFn: async (payload) => {
53
+ const res = await fetch(`${BASE}/feedback`, {
54
+ method: "POST",
55
+ headers: { "Content-Type": "application/json" },
56
+ body: JSON.stringify(payload),
57
+ });
58
+ if (!res.ok)
59
+ throw new Error(`HTTP ${res.status}`);
60
+ return res.json();
61
+ },
62
+ onSuccess: () => {
63
+ queryClient.invalidateQueries({
64
+ queryKey: ["observability", "feedback"],
65
+ });
66
+ queryClient.invalidateQueries({
67
+ queryKey: ["observability", "feedback-stats"],
68
+ });
69
+ },
70
+ });
71
+ }
72
+ export function useSatisfaction(sinceDays = 7) {
73
+ const sinceMs = Date.now() - sinceDays * 86_400_000;
74
+ return useQuery({
75
+ queryKey: ["observability", "satisfaction", sinceDays],
76
+ queryFn: () => fetchJson(`${BASE}/satisfaction?since=${sinceMs}`),
77
+ refetchInterval: 30_000,
78
+ });
79
+ }
80
+ export function useEvalStats(sinceDays = 7) {
81
+ const sinceMs = Date.now() - sinceDays * 86_400_000;
82
+ return useQuery({
83
+ queryKey: ["observability", "eval-stats", sinceDays],
84
+ queryFn: () => fetchJson(`${BASE}/evals/stats?since=${sinceMs}`),
85
+ refetchInterval: 30_000,
86
+ });
87
+ }
88
+ export function useExperiments() {
89
+ return useQuery({
90
+ queryKey: ["observability", "experiments"],
91
+ queryFn: () => fetchJson(`${BASE}/experiments`),
92
+ refetchInterval: 30_000,
93
+ });
94
+ }
95
+ export function useExperimentDetail(id) {
96
+ return useQuery({
97
+ queryKey: ["observability", "experiment", id],
98
+ queryFn: () => fetchJson(`${BASE}/experiments/${encodeURIComponent(id)}`),
99
+ enabled: !!id,
100
+ });
101
+ }
102
+ export function useExperimentResults(id) {
103
+ return useQuery({
104
+ queryKey: ["observability", "experiment-results", id],
105
+ queryFn: () => fetchJson(`${BASE}/experiments/${encodeURIComponent(id)}/results`),
106
+ enabled: !!id,
107
+ });
108
+ }
109
+ //# sourceMappingURL=useObservability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useObservability.js","sourceRoot":"","sources":["../../../src/client/observability/useObservability.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OnboardingPanel.d.ts","sourceRoot":"","sources":["../../../src/client/onboarding/OnboardingPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH,UAAU,oBAAoB;IAC5B,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,KAAe,GAChB,EAAE,oBAAoB,2CA6GtB"}
1
+ {"version":3,"file":"OnboardingPanel.d.ts","sourceRoot":"","sources":["../../../src/client/onboarding/OnboardingPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsBH,UAAU,oBAAoB;IAC5B,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,KAAe,GAChB,EAAE,oBAAoB,2CA6GtB"}
@@ -6,15 +6,17 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
6
6
  * remaining steps sit dimmed below. Each method renders differently based on
7
7
  * its `kind` (link / form / builder-cli-auth / agent-task).
8
8
  */
9
- import { useState, useEffect, useCallback, useRef } from "react";
9
+ import { useState, useEffect } from "react";
10
10
  import { IconCheck, IconChecklist, IconChevronDown, IconChevronRight, IconChevronUp, IconExternalLink, IconLoader2, } from "@tabler/icons-react";
11
11
  import { useOnboarding } from "./use-onboarding.js";
12
12
  import { sendToAgentChat } from "../agent-chat.js";
13
13
  import { useDevMode } from "../use-dev-mode.js";
14
- import { getCallbackOrigin } from "../frame.js";
14
+ import { useBuilderConnectFlow } from "../settings/useBuilderStatus.js";
15
+ import { useBuilderEnabled } from "../use-builder-enabled.js";
15
16
  export function OnboardingPanel({ className, title = "Setup", }) {
16
17
  const onboarding = useOnboarding();
17
18
  const { isDevMode } = useDevMode();
19
+ const builderEnabled = useBuilderEnabled();
18
20
  const { steps: rawSteps, currentStepId: rawCurrentStepId, dismissed, loading, refresh, complete, dismiss, } = onboarding;
19
21
  // `database` and `auth` steps only apply to local dev (SQLite default,
20
22
  // local-mode auth bypass). In production those are configured via env
@@ -33,7 +35,6 @@ export function OnboardingPanel({ className, title = "Setup", }) {
33
35
  null);
34
36
  // Default expanded when setup is incomplete; collapsed once everything's done.
35
37
  const [expanded, setExpanded] = useState(!allComplete);
36
- const builderEnabled = useBuilderEnabled();
37
38
  if (loading || totalCount === 0)
38
39
  return null;
39
40
  if (dismissed)
@@ -47,20 +48,6 @@ export function OnboardingPanel({ className, title = "Setup", }) {
47
48
  }
48
49
  return (_jsxs("div", { className: className, style: styles.root, children: [_jsxs("div", { style: styles.header, children: [_jsxs("div", { style: styles.headerLeft, children: [allComplete ? (_jsx("span", { style: styles.checkDone, children: _jsx(IconCheck, { size: 12, strokeWidth: 3 }) })) : (_jsx(IconChecklist, { size: 14, style: styles.headerIcon, "aria-hidden": true })), _jsx("span", { style: styles.headerTitle, children: title }), _jsxs("span", { style: styles.headerCounter, children: [completeCount, " of ", totalCount] })] }), _jsx("button", { type: "button", onClick: () => setExpanded(false), title: "Collapse", "aria-label": "Collapse onboarding", style: styles.dismissBtn, children: _jsx(IconChevronUp, { size: 14 }) })] }), _jsx("div", { style: styles.list, children: steps.map((step) => (_jsx(StepCard, { step: step, expanded: step.id === currentStepId, builderEnabled: builderEnabled, onMarkComplete: () => complete(step.id), onRefresh: refresh }, step.id))) }), _jsx("div", { style: styles.footer, children: _jsx("button", { type: "button", onClick: dismiss, style: styles.hideLink, children: "Hide setup" }) })] }));
49
50
  }
50
- function useBuilderEnabled() {
51
- const [enabled, setEnabled] = useState(false);
52
- useEffect(() => {
53
- fetch("/_agent-native/env-status")
54
- .then((r) => (r.ok ? r.json() : []))
55
- .then((keys) => {
56
- if (keys.find((k) => k.key === "ENABLE_BUILDER")?.configured) {
57
- setEnabled(true);
58
- }
59
- })
60
- .catch(() => { });
61
- }, []);
62
- return enabled;
63
- }
64
51
  // ─── StepCard ──────────────────────────────────────────────────────────────
65
52
  function StepCard({ step, expanded: expandedProp, builderEnabled, onMarkComplete, onRefresh, }) {
66
53
  const [expanded, setExpanded] = useState(expandedProp);
@@ -80,26 +67,35 @@ function StepCard({ step, expanded: expandedProp, builderEnabled, onMarkComplete
80
67
  }
81
68
  // ─── MethodBlock ───────────────────────────────────────────────────────────
82
69
  function MethodBlock({ method, stepId, builderEnabled, onCompleted, onMarkManualComplete, }) {
83
- const isBuilder = method.kind === "builder-cli-auth";
84
- const waitlist = isBuilder && !builderEnabled;
85
- return (_jsxs("div", { style: method.primary ? styles.methodPrimary : styles.method, children: [_jsx("div", { style: styles.methodHeader, children: _jsxs("span", { style: styles.methodLabel, children: [method.label, !waitlist && method.badge && (_jsx("span", { style: badgeStyle(method.badge), children: method.badge }))] }) }), method.description && (_jsx("p", { style: styles.methodDesc, children: method.description })), _jsx(MethodBody, { method: method, stepId: stepId, waitlist: waitlist, onCompleted: onCompleted, onMarkManualComplete: onMarkManualComplete })] }));
70
+ // Waitlist branch only applies to builder-cli-auth methods that opted in
71
+ // by specifying a `waitlistUrl` in their payload — e.g. the framework's
72
+ // "Connect an AI engine" step when Builder is still closed beta. GA
73
+ // methods omit waitlistUrl and always render the real Connect flow.
74
+ const waitlistUrl = method.kind === "builder-cli-auth" ? method.payload.waitlistUrl : undefined;
75
+ const gated = method.kind === "builder-cli-auth" && !!waitlistUrl;
76
+ // While env-status is loading for a gated method, render nothing rather
77
+ // than flashing the waitlist CTA on Builder-enabled deployments.
78
+ if (gated && builderEnabled === null)
79
+ return null;
80
+ const waitlist = gated && !builderEnabled;
81
+ return (_jsxs("div", { style: method.primary ? styles.methodPrimary : styles.method, children: [_jsx("div", { style: styles.methodHeader, children: _jsxs("span", { style: styles.methodLabel, children: [method.label, method.badge && (_jsx("span", { style: badgeStyle(method.badge), children: method.badge }))] }) }), method.description && (_jsx("p", { style: styles.methodDesc, children: method.description })), _jsx(MethodBody, { method: method, stepId: stepId, waitlist: waitlist, waitlistUrl: waitlistUrl, onCompleted: onCompleted, onMarkManualComplete: onMarkManualComplete })] }));
86
82
  }
87
- function MethodBody({ method, stepId, waitlist, onCompleted, onMarkManualComplete, }) {
83
+ function MethodBody({ method, stepId, waitlist, waitlistUrl, onCompleted, onMarkManualComplete, }) {
88
84
  switch (method.kind) {
89
85
  case "link":
90
86
  return (_jsx(LinkMethod, { method: method, onMarkComplete: onMarkManualComplete }));
91
87
  case "form":
92
88
  return _jsx(FormMethod, { method: method, onCompleted: onCompleted });
93
89
  case "builder-cli-auth":
94
- if (waitlist)
95
- return _jsx(WaitlistMethod, { primary: method.primary });
96
- return _jsx(BuilderCliAuthMethod, { onCompleted: onCompleted });
90
+ if (waitlist && waitlistUrl)
91
+ return _jsx(WaitlistMethod, { url: waitlistUrl });
92
+ return (_jsx(BuilderCliAuthMethod, { onCompleted: onCompleted, primary: method.primary }));
97
93
  case "agent-task":
98
94
  return _jsx(AgentTaskMethod, { method: method, stepId: stepId });
99
95
  }
100
96
  }
101
- function WaitlistMethod({ primary: _primary }) {
102
- return (_jsxs("a", { href: "https://forms.agent-native.com/f/builder-waitlist/36GWqf", target: "_blank", rel: "noopener noreferrer", style: {
97
+ function WaitlistMethod({ url }) {
98
+ return (_jsxs("a", { href: url, target: "_blank", rel: "noopener noreferrer", style: {
103
99
  ...buttonPrimary(false),
104
100
  textDecoration: "none",
105
101
  }, children: ["Join waitlist", _jsx(IconExternalLink, { size: 12, style: { marginLeft: 4 } })] }));
@@ -154,72 +150,11 @@ function FormMethod({ method, onCompleted, }) {
154
150
  return (_jsxs("form", { onSubmit: handleSubmit, style: styles.form, children: [fields.map((f) => (_jsxs("label", { style: styles.formLabel, children: [_jsx("span", { style: styles.formLabelText, children: f.label }), _jsx("input", { type: f.secret ? "password" : "text", value: values[f.key] ?? "", placeholder: f.placeholder, onChange: (e) => setValues((v) => ({ ...v, [f.key]: e.target.value })), style: styles.input, autoComplete: "off", spellCheck: false })] }, f.key))), err && _jsx("p", { style: styles.errText, children: err }), _jsx("button", { type: "submit", disabled: saving, style: { ...buttonPrimary(method.primary), opacity: saving ? 0.6 : 1 }, children: saving ? "Saving..." : "Save" })] }));
155
151
  }
156
152
  // ─── builder-cli-auth ──────────────────────────────────────────────────────
157
- function BuilderCliAuthMethod({ onCompleted, }) {
158
- const [connecting, setConnecting] = useState(false);
159
- const [err, setErr] = useState(null);
160
- const pollRef = useRef(null);
161
- const mountedRef = useRef(true);
162
- useEffect(() => {
163
- mountedRef.current = true;
164
- return () => {
165
- mountedRef.current = false;
166
- if (pollRef.current) {
167
- clearInterval(pollRef.current);
168
- pollRef.current = null;
169
- }
170
- };
171
- }, []);
172
- const handleConnect = useCallback(() => {
173
- // Restart: clear any lingering poll from a prior click.
174
- if (pollRef.current) {
175
- clearInterval(pollRef.current);
176
- pollRef.current = null;
177
- }
178
- setConnecting(true);
179
- setErr(null);
180
- // Open SYNCHRONOUSLY inside the click handler — any await before
181
- // window.open lets the user gesture expire and popup blockers
182
- // downgrade to same-tab navigation. The /builder/connect endpoint
183
- // 302-redirects to the real CLI-auth URL so the new tab always
184
- // ends up where it should, with no client-side prefetch needed.
185
- const origin = getCallbackOrigin() || window.location.origin;
186
- window.open(`${origin}/_agent-native/builder/connect`, "_blank", "noopener,noreferrer");
187
- // Poll builder status until credentials appear (user finished the flow).
188
- const start = Date.now();
189
- const timeoutMs = 5 * 60 * 1000;
190
- const stop = () => {
191
- if (pollRef.current) {
192
- clearInterval(pollRef.current);
193
- pollRef.current = null;
194
- }
195
- };
196
- pollRef.current = setInterval(async () => {
197
- try {
198
- const r = await fetch(`${origin}/_agent-native/builder/status`);
199
- if (!r.ok)
200
- return;
201
- const s = (await r.json());
202
- if (!mountedRef.current) {
203
- stop();
204
- return;
205
- }
206
- if (s.configured) {
207
- stop();
208
- setConnecting(false);
209
- await onCompleted();
210
- }
211
- else if (Date.now() - start > timeoutMs) {
212
- stop();
213
- setConnecting(false);
214
- setErr("Didn't hear back from Builder in 5 minutes. Check the popup, allow popups if blocked, and try again.");
215
- }
216
- }
217
- catch {
218
- // ignore transient poll errors
219
- }
220
- }, 2000);
221
- }, [onCompleted]);
222
- return (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: handleConnect, disabled: connecting, style: { ...buttonPrimary(false), opacity: connecting ? 0.7 : 1 }, children: connecting ? (_jsxs(_Fragment, { children: [_jsx(IconLoader2, { size: 12, style: { marginRight: 4 }, className: "animate-spin" }), "Waiting for Builder..."] })) : ("Connect Builder") }), err && _jsx("p", { style: styles.errText, children: err })] }));
153
+ function BuilderCliAuthMethod({ onCompleted, primary, }) {
154
+ const { connecting, error, start } = useBuilderConnectFlow({
155
+ onConnected: onCompleted,
156
+ });
157
+ return (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: start, disabled: connecting, style: { ...buttonPrimary(primary), opacity: connecting ? 0.7 : 1 }, children: connecting ? (_jsxs(_Fragment, { children: [_jsx(IconLoader2, { size: 12, style: { marginRight: 4 }, className: "animate-spin" }), "Waiting for Builder..."] })) : ("Connect Builder") }), error && _jsx("p", { style: styles.errText, children: error })] }));
223
158
  }
224
159
  // ─── agent-task ────────────────────────────────────────────────────────────
225
160
  function AgentTaskMethod({ method, stepId: _stepId, }) {
@@ -269,6 +204,10 @@ const styles = {
269
204
  borderBottom: "1px solid rgba(255,255,255,0.06)",
270
205
  background: "rgba(255,255,255,0.02)",
271
206
  fontSize: 12,
207
+ display: "flex",
208
+ flexDirection: "column",
209
+ maxHeight: "60vh",
210
+ minHeight: 0,
272
211
  },
273
212
  compactBanner: {
274
213
  display: "flex",
@@ -322,6 +261,9 @@ const styles = {
322
261
  flexDirection: "column",
323
262
  gap: 4,
324
263
  padding: "4px 8px 10px",
264
+ overflowY: "auto",
265
+ minHeight: 0,
266
+ flex: "1 1 auto",
325
267
  },
326
268
  card: {
327
269
  border: "1px solid hsl(var(--border, 0 0% 100%) / 0.06)",