@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.
- package/README.md +1 -1
- package/dist/action.js +30 -11
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +26 -8
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts +19 -0
- package/dist/agent/engine/builder-engine.d.ts.map +1 -0
- package/dist/agent/engine/builder-engine.js +430 -0
- package/dist/agent/engine/builder-engine.js.map +1 -0
- package/dist/agent/engine/builtin.d.ts.map +1 -1
- package/dist/agent/engine/builtin.js +26 -10
- package/dist/agent/engine/builtin.js.map +1 -1
- package/dist/agent/engine/index.d.ts +1 -1
- package/dist/agent/engine/index.d.ts.map +1 -1
- package/dist/agent/engine/index.js +1 -1
- package/dist/agent/engine/index.js.map +1 -1
- package/dist/agent/engine/provider-env-vars.d.ts +21 -0
- package/dist/agent/engine/provider-env-vars.d.ts.map +1 -0
- package/dist/agent/engine/provider-env-vars.js +50 -0
- package/dist/agent/engine/provider-env-vars.js.map +1 -0
- package/dist/agent/engine/registry.d.ts +37 -0
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +102 -4
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/engine/types.d.ts +30 -0
- package/dist/agent/engine/types.d.ts.map +1 -1
- package/dist/agent/engine/types.js +19 -1
- package/dist/agent/engine/types.js.map +1 -1
- package/dist/agent/production-agent.d.ts +7 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +67 -15
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +11 -1
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts +4 -0
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +1 -0
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/agent/types.d.ts +8 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/checkpoints/service.d.ts +1 -0
- package/dist/checkpoints/service.d.ts.map +1 -1
- package/dist/checkpoints/service.js +26 -2
- package/dist/checkpoints/service.js.map +1 -1
- package/dist/cli/create.d.ts +30 -0
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +127 -10
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +19 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/templates-meta.d.ts +2 -0
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +2 -0
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/cli/workspacify.d.ts.map +1 -1
- package/dist/cli/workspacify.js +7 -3
- package/dist/cli/workspacify.js.map +1 -1
- package/dist/client/AgentPanel.js +1 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +93 -37
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/ConnectBuilderCard.d.ts +1 -7
- package/dist/client/ConnectBuilderCard.d.ts.map +1 -1
- package/dist/client/ConnectBuilderCard.js +30 -132
- package/dist/client/ConnectBuilderCard.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +58 -26
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/analytics.d.ts +5 -8
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +53 -11
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/builder-mark.d.ts +9 -0
- package/dist/client/builder-mark.d.ts.map +1 -0
- package/dist/client/builder-mark.js +10 -0
- package/dist/client/builder-mark.js.map +1 -0
- package/dist/client/components/ui/popover.d.ts +8 -0
- package/dist/client/components/ui/popover.d.ts.map +1 -0
- package/dist/client/components/ui/popover.js +11 -0
- package/dist/client/components/ui/popover.js.map +1 -0
- package/dist/client/composer/ComposerPlusMenu.d.ts +2 -0
- package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -0
- package/dist/client/composer/ComposerPlusMenu.js +244 -0
- package/dist/client/composer/ComposerPlusMenu.js.map +1 -0
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +25 -7
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
- package/dist/client/composer/useVoiceDictation.js +4 -2
- package/dist/client/composer/useVoiceDictation.js.map +1 -1
- package/dist/client/error-format.d.ts +2 -0
- package/dist/client/error-format.d.ts.map +1 -0
- package/dist/client/error-format.js +31 -0
- package/dist/client/error-format.js.map +1 -0
- package/dist/client/index.d.ts +3 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/observability/ObservabilityDashboard.d.ts +5 -0
- package/dist/client/observability/ObservabilityDashboard.d.ts.map +1 -0
- package/dist/client/observability/ObservabilityDashboard.js +169 -0
- package/dist/client/observability/ObservabilityDashboard.js.map +1 -0
- package/dist/client/observability/ThumbsFeedback.d.ts +8 -0
- package/dist/client/observability/ThumbsFeedback.d.ts.map +1 -0
- package/dist/client/observability/ThumbsFeedback.js +64 -0
- package/dist/client/observability/ThumbsFeedback.js.map +1 -0
- package/dist/client/observability/index.d.ts +4 -0
- package/dist/client/observability/index.d.ts.map +1 -0
- package/dist/client/observability/index.js +4 -0
- package/dist/client/observability/index.js.map +1 -0
- package/dist/client/observability/useObservability.d.ts +128 -0
- package/dist/client/observability/useObservability.d.ts.map +1 -0
- package/dist/client/observability/useObservability.js +109 -0
- package/dist/client/observability/useObservability.js.map +1 -0
- package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
- package/dist/client/onboarding/OnboardingPanel.js +34 -92
- package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
- package/dist/client/org/RequireActiveOrg.d.ts +33 -0
- package/dist/client/org/RequireActiveOrg.d.ts.map +1 -0
- package/dist/client/org/RequireActiveOrg.js +63 -0
- package/dist/client/org/RequireActiveOrg.js.map +1 -0
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/org/hooks.js +50 -15
- package/dist/client/org/hooks.js.map +1 -1
- package/dist/client/org/index.d.ts +1 -0
- package/dist/client/org/index.d.ts.map +1 -1
- package/dist/client/org/index.js +1 -0
- package/dist/client/org/index.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +3 -3
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/settings/AutomationsSection.js +1 -1
- package/dist/client/settings/AutomationsSection.js.map +1 -1
- package/dist/client/settings/BrowserSection.js +1 -1
- package/dist/client/settings/BrowserSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +251 -42
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +10 -4
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +26 -0
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +128 -4
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +2 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +6 -2
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/transcription/BuilderTranscriptionCta.d.ts +9 -0
- package/dist/client/transcription/BuilderTranscriptionCta.d.ts.map +1 -0
- package/dist/client/transcription/BuilderTranscriptionCta.js +18 -0
- package/dist/client/transcription/BuilderTranscriptionCta.js.map +1 -0
- package/dist/client/transcription/use-live-transcription.d.ts +29 -0
- package/dist/client/transcription/use-live-transcription.d.ts.map +1 -0
- package/dist/client/transcription/use-live-transcription.js +156 -0
- package/dist/client/transcription/use-live-transcription.js.map +1 -0
- package/dist/client/use-builder-enabled.d.ts +17 -0
- package/dist/client/use-builder-enabled.d.ts.map +1 -0
- package/dist/client/use-builder-enabled.js +36 -0
- package/dist/client/use-builder-enabled.js.map +1 -0
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +4 -2
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/client/useProductionAgent.d.ts.map +1 -1
- package/dist/client/useProductionAgent.js +3 -1
- package/dist/client/useProductionAgent.js.map +1 -1
- package/dist/db/migrations.d.ts +9 -0
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +75 -10
- package/dist/db/migrations.js.map +1 -1
- package/dist/file-upload/builder.d.ts.map +1 -1
- package/dist/file-upload/builder.js +11 -4
- package/dist/file-upload/builder.js.map +1 -1
- package/dist/jobs/tools.d.ts.map +1 -1
- package/dist/jobs/tools.js +137 -161
- package/dist/jobs/tools.js.map +1 -1
- package/dist/notifications/actions.d.ts +2 -2
- package/dist/notifications/actions.d.ts.map +1 -1
- package/dist/notifications/actions.js +77 -69
- package/dist/notifications/actions.js.map +1 -1
- package/dist/observability/evals.d.ts +22 -0
- package/dist/observability/evals.d.ts.map +1 -0
- package/dist/observability/evals.js +371 -0
- package/dist/observability/evals.js.map +1 -0
- package/dist/observability/experiments.d.ts +24 -0
- package/dist/observability/experiments.d.ts.map +1 -0
- package/dist/observability/experiments.js +274 -0
- package/dist/observability/experiments.js.map +1 -0
- package/dist/observability/feedback.d.ts +14 -0
- package/dist/observability/feedback.d.ts.map +1 -0
- package/dist/observability/feedback.js +256 -0
- package/dist/observability/feedback.js.map +1 -0
- package/dist/observability/index.d.ts +6 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +5 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/plugin.d.ts +2 -0
- package/dist/observability/plugin.d.ts.map +1 -0
- package/dist/observability/plugin.js +12 -0
- package/dist/observability/plugin.js.map +1 -0
- package/dist/observability/routes.d.ts +68 -0
- package/dist/observability/routes.d.ts.map +1 -0
- package/dist/observability/routes.js +301 -0
- package/dist/observability/routes.js.map +1 -0
- package/dist/observability/store.d.ts +77 -0
- package/dist/observability/store.d.ts.map +1 -0
- package/dist/observability/store.js +976 -0
- package/dist/observability/store.js.map +1 -0
- package/dist/observability/traces.d.ts +37 -0
- package/dist/observability/traces.d.ts.map +1 -0
- package/dist/observability/traces.js +182 -0
- package/dist/observability/traces.js.map +1 -0
- package/dist/observability/types.d.ts +159 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +16 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/onboarding/default-steps.d.ts.map +1 -1
- package/dist/onboarding/default-steps.js +68 -24
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/onboarding/types.d.ts +10 -1
- package/dist/onboarding/types.d.ts.map +1 -1
- package/dist/org/context.d.ts +8 -1
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +163 -6
- package/dist/org/context.js.map +1 -1
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +49 -30
- package/dist/org/handlers.js.map +1 -1
- package/dist/progress/actions.d.ts +3 -0
- package/dist/progress/actions.d.ts.map +1 -1
- package/dist/progress/actions.js +86 -110
- package/dist/progress/actions.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/progress/routes.js +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +20 -6
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.d.ts +10 -0
- package/dist/scripts/agent-engines/manage-agent-engine.d.ts.map +1 -0
- package/dist/scripts/agent-engines/manage-agent-engine.js +47 -0
- package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -0
- package/dist/scripts/agent-engines/set-agent-engine.d.ts.map +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.js +10 -9
- package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +39 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +743 -452
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +18 -7
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/analytics.d.ts +9 -7
- package/dist/server/analytics.d.ts.map +1 -1
- package/dist/server/analytics.js +12 -11
- package/dist/server/analytics.js.map +1 -1
- package/dist/server/app-name.d.ts +5 -2
- package/dist/server/app-name.d.ts.map +1 -1
- package/dist/server/app-name.js +14 -3
- package/dist/server/app-name.js.map +1 -1
- package/dist/server/app-url.d.ts.map +1 -1
- package/dist/server/app-url.js +17 -5
- package/dist/server/app-url.js.map +1 -1
- package/dist/server/auth.d.ts +2 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +153 -2
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +2 -0
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +4 -0
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/builder-browser.d.ts +59 -1
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +127 -11
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +278 -13
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts +7 -0
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +10 -0
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +29 -4
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +46 -5
- package/dist/server/poll.js.map +1 -1
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +2 -1
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +44 -5
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/styles/agent-native.css +11 -2
- package/dist/templates/default/.agents/skills/progress/SKILL.md +14 -12
- package/dist/templates/default/app/root.tsx +7 -0
- package/dist/templates/workspace-root/pnpm-workspace.yaml +6 -0
- package/dist/transcription/builder-transcription.d.ts +27 -0
- package/dist/transcription/builder-transcription.d.ts.map +1 -0
- package/dist/transcription/builder-transcription.js +41 -0
- package/dist/transcription/builder-transcription.js.map +1 -0
- package/dist/triggers/actions.d.ts +3 -0
- package/dist/triggers/actions.d.ts.map +1 -1
- package/dist/triggers/actions.js +189 -213
- package/dist/triggers/actions.js.map +1 -1
- package/docs/content/agent-mentions.md +1 -1
- package/docs/content/automations.md +22 -19
- package/docs/content/cloneable-saas.md +2 -2
- package/docs/content/deployment.md +21 -61
- package/docs/content/getting-started.md +1 -1
- package/docs/content/key-concepts.md +1 -1
- package/docs/content/{enterprise-workspace.md → multi-app-workspace.md} +3 -3
- package/docs/content/multi-tenancy.md +1 -1
- package/docs/content/progress.md +11 -11
- package/docs/content/template-dispatch.md +3 -3
- package/docs/content/workspace-management.md +1 -1
- package/package.json +13 -1
- package/src/templates/default/.agents/skills/progress/SKILL.md +14 -12
- package/src/templates/default/app/root.tsx +7 -0
- package/src/templates/workspace-root/pnpm-workspace.yaml +6 -0
- package/dist/client/settings/LLMSection.d.ts +0 -2
- package/dist/client/settings/LLMSection.d.ts.map +0 -1
- package/dist/client/settings/LLMSection.js +0 -191
- 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":";AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,sBAAsB,GAAG;IAC7B,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,UAAU;CACF,CAAC;AAaX,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,KAAK,EACL,UAAU,EACV,SAAS,GACW;IACpB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAY,IAAI,CAAC,CAAC;IAC5D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CACxD,IAAI,CACL,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAC9B,KAAK,EACH,YAAsD,EACtD,KAAc,EACd,EAAE;QACF,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,uCAAuC,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,QAAQ;oBACR,KAAK;oBACL,UAAU;oBACV,YAAY;oBACZ,KAAK,EAAE,KAAK,IAAI,EAAE;iBACnB,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;QACxE,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAC9B,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO;QAC/B,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAE9B,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QACD,YAAY,CAAC,MAAM,CAAC,CAAC;QACrB,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,YAAY,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAE9B,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,QAA4B,EAAE,EAAE;QAC/B,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC/B,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE,SAAS,CAAC,aAC/D,iBACE,IAAI,EAAC,QAAQ,gBACF,WAAW,EACtB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,EAAE,CACX,kDAAkD,EAClD,SAAS,KAAK,IAAI;oBAChB,CAAC,CAAC,iBAAiB;oBACnB,CAAC,CAAC,yEAAyE,CAC9E,YAED,KAAC,WAAW,IACV,IAAI,EAAE,EAAE,EACR,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EACtC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,GAClD,GACK,EAET,MAAC,gBAAgB,CAAC,IAAI,IAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,aACtE,KAAC,gBAAgB,CAAC,OAAO,IAAC,OAAO,kBAC/B,iBACE,IAAI,EAAC,QAAQ,gBACF,aAAa,EACxB,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,EAAE,CACX,kDAAkD,EAClD,SAAS,KAAK,MAAM;gCAClB,CAAC,CAAC,iBAAiB;gCACnB,CAAC,CAAC,yEAAyE,CAC9E,YAED,KAAC,aAAa,IACZ,IAAI,EAAE,EAAE,EACR,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EACxC,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,GACpD,GACK,GACgB,EAE3B,KAAC,gBAAgB,CAAC,MAAM,cACtB,KAAC,gBAAgB,CAAC,OAAO,IACvB,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,OAAO,EACb,UAAU,EAAE,CAAC,EACb,gBAAgB,EAAE,CAAC,EACnB,SAAS,EAAC,+FAA+F,YAEzG,cAAK,SAAS,EAAC,uBAAuB,YACnC,sBAAsB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CACxC,iBAEE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,EACvC,SAAS,EAAE,EAAE,CACX,0CAA0C,EAC1C,iBAAiB,KAAK,QAAQ;wCAC5B,CAAC,CAAC,uCAAuC;wCACzC,CAAC,CAAC,gEAAgE,CACrE,YAEA,QAAQ,IAVJ,QAAQ,CAWN,CACV,CAAC,GACE,GACmB,GACH,IACJ,IACpB,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE9E,MAAM,IAAI,GAAG,8BAA8B,CAAC;AAE5C,SAAS,SAAS,CAAI,GAAW;IAC/B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3B,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC,IAAI,EAAgB,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAcD,MAAM,UAAU,wBAAwB,CAAC,SAAS,GAAG,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,UAAU,CAAC;IACpD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,SAAS,CAAC;QAClD,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAwB,GAAG,IAAI,UAAU,OAAO,EAAE,CAAC;QAC3E,eAAe,EAAE,MAAM;KACxB,CAAC,CAAC;AACL,CAAC;AAoBD,MAAM,UAAU,SAAS,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,UAAU,CAAC;IACpD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;QACvD,OAAO,EAAE,GAAG,EAAE,CACZ,SAAS,CACP,GAAG,IAAI,iBAAiB,OAAO,UAAU,KAAK,EAAE,CACjD;QACH,eAAe,EAAE,MAAM;KACxB,CAAC,CAAC;AACL,CAAC;AA0BD,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC;QAC3C,OAAO,EAAE,GAAG,EAAE,CACZ,SAAS,CAAc,GAAG,IAAI,WAAW,kBAAkB,CAAC,KAAM,CAAC,EAAE,CAAC;QACxE,OAAO,EAAE,CAAC,CAAC,KAAK;KACjB,CAAC,CAAC;AACL,CAAC;AAeD,MAAM,UAAU,eAAe,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,UAAU,CAAC;IACpD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC;QACzD,OAAO,EAAE,GAAG,EAAE,CACZ,SAAS,CACP,GAAG,IAAI,mBAAmB,OAAO,UAAU,KAAK,EAAE,CACnD;QACH,eAAe,EAAE,MAAM;KACxB,CAAC,CAAC;AACL,CAAC;AASD,MAAM,UAAU,gBAAgB,CAAC,SAAS,GAAG,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,UAAU,CAAC;IACpD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,eAAe,EAAE,gBAAgB,EAAE,SAAS,CAAC;QACxD,OAAO,EAAE,GAAG,EAAE,CACZ,SAAS,CAAgB,GAAG,IAAI,yBAAyB,OAAO,EAAE,CAAC;QACrE,eAAe,EAAE,MAAM;KACxB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,KAAK,EAAE,OAOlB,EAAE,EAAE;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,WAAW,EAAE;gBAC1C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAC9B,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACnD,OAAO,GAAG,CAAC,IAAI,EAA6B,CAAC;QAC/C,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,WAAW,CAAC,iBAAiB,CAAC;gBAC5B,QAAQ,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC;aACxC,CAAC,CAAC;YACH,WAAW,CAAC,iBAAiB,CAAC;gBAC5B,QAAQ,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC;aAC9C,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAeD,MAAM,UAAU,eAAe,CAAC,SAAS,GAAG,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,UAAU,CAAC;IACpD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,SAAS,CAAC;QACtD,OAAO,EAAE,GAAG,EAAE,CACZ,SAAS,CAAsB,GAAG,IAAI,uBAAuB,OAAO,EAAE,CAAC;QACzE,eAAe,EAAE,MAAM;KACxB,CAAC,CAAC;AACL,CAAC;AAUD,MAAM,UAAU,YAAY,CAAC,SAAS,GAAG,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,UAAU,CAAC;IACpD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,SAAS,CAAC;QACpD,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAY,GAAG,IAAI,sBAAsB,OAAO,EAAE,CAAC;QAC3E,eAAe,EAAE,MAAM;KACxB,CAAC,CAAC;AACL,CAAC;AAoBD,MAAM,UAAU,cAAc;IAC5B,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC;QAC1C,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAe,GAAG,IAAI,cAAc,CAAC;QAC7D,eAAe,EAAE,MAAM;KACxB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAiB;IACnD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,EAAE,CAAC;QAC7C,OAAO,EAAE,GAAG,EAAE,CACZ,SAAS,CAAa,GAAG,IAAI,gBAAgB,kBAAkB,CAAC,EAAG,CAAC,EAAE,CAAC;QACzE,OAAO,EAAE,CAAC,CAAC,EAAE;KACd,CAAC,CAAC;AACL,CAAC;AAcD,MAAM,UAAU,oBAAoB,CAAC,EAAiB;IACpD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,eAAe,EAAE,oBAAoB,EAAE,EAAE,CAAC;QACrD,OAAO,EAAE,GAAG,EAAE,CACZ,SAAS,CACP,GAAG,IAAI,gBAAgB,kBAAkB,CAAC,EAAG,CAAC,UAAU,CACzD;QACH,OAAO,EAAE,CAAC,CAAC,EAAE;KACd,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnboardingPanel.d.ts","sourceRoot":"","sources":["../../../src/client/onboarding/OnboardingPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
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
|
|
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 {
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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, {
|
|
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({
|
|
102
|
-
return (_jsxs("a", { href:
|
|
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
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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)",
|