@agent-native/dispatch 0.40.0 → 0.40.3
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/CHANGELOG.md +48 -19
- package/dist/actions/provider-api-register.d.ts +7 -7
- package/dist/components/app-open-actions.d.ts +1 -1
- package/dist/components/app-open-actions.d.ts.map +1 -1
- package/dist/components/app-open-actions.js +1 -1
- package/dist/components/app-open-actions.js.map +1 -1
- package/dist/components/app-row-settings.js +1 -1
- package/dist/components/app-row-settings.js.map +1 -1
- package/dist/components/automation-create-dialog.js +2 -2
- package/dist/components/automation-create-dialog.js.map +1 -1
- package/dist/components/automation-details-panel.js +1 -1
- package/dist/components/automation-details-panel.js.map +1 -1
- package/dist/components/chat-home-apps.js +1 -1
- package/dist/components/chat-home-apps.js.map +1 -1
- package/dist/components/create-app-popover.js +3 -3
- package/dist/components/create-app-popover.js.map +1 -1
- package/dist/components/dispatch-control-plane.d.ts.map +1 -1
- package/dist/components/dispatch-control-plane.js +9 -30
- package/dist/components/dispatch-control-plane.js.map +1 -1
- package/dist/components/layout/Header.js +2 -2
- package/dist/components/layout/Header.js.map +1 -1
- package/dist/components/layout/Layout.d.ts +6 -5
- package/dist/components/layout/Layout.d.ts.map +1 -1
- package/dist/components/layout/Layout.js +73 -113
- package/dist/components/layout/Layout.js.map +1 -1
- package/dist/components/layout/workspace-apps-rail.d.ts.map +1 -1
- package/dist/components/layout/workspace-apps-rail.js +7 -19
- package/dist/components/layout/workspace-apps-rail.js.map +1 -1
- package/dist/components/messaging-setup-panel.js +2 -1
- package/dist/components/messaging-setup-panel.js.map +1 -1
- package/dist/components/workspace-app-card.js +2 -2
- package/dist/components/workspace-app-card.js.map +1 -1
- package/dist/components/workspace-app-host.d.ts +1 -1
- package/dist/components/workspace-app-host.d.ts.map +1 -1
- package/dist/components/workspace-app-host.js +7 -74
- package/dist/components/workspace-app-host.js.map +1 -1
- package/dist/hooks/use-navigation-state.js +1 -1
- package/dist/hooks/use-navigation-state.js.map +1 -1
- package/dist/lib/workspace-apps.js +1 -1
- package/dist/lib/workspace-apps.js.map +1 -1
- package/dist/routes/pages/$appId.js +1 -1
- package/dist/routes/pages/$appId.js.map +1 -1
- package/dist/routes/pages/_index.js +1 -1
- package/dist/routes/pages/_index.js.map +1 -1
- package/dist/routes/pages/admin._index.js +1 -1
- package/dist/routes/pages/admin._index.js.map +1 -1
- package/dist/routes/pages/agent-integrations.js +1 -1
- package/dist/routes/pages/agent-integrations.js.map +1 -1
- package/dist/routes/pages/apps.d.ts.map +1 -1
- package/dist/routes/pages/apps.js +3 -43
- package/dist/routes/pages/apps.js.map +1 -1
- package/dist/routes/pages/browser-chat.js +1 -1
- package/dist/routes/pages/browser-chat.js.map +1 -1
- package/dist/routes/pages/chat.d.ts.map +1 -1
- package/dist/routes/pages/chat.js +24 -43
- package/dist/routes/pages/chat.js.map +1 -1
- package/dist/routes/pages/extensions.$id.js +1 -1
- package/dist/routes/pages/extensions.$id.js.map +1 -1
- package/dist/routes/pages/extensions._index.js +1 -1
- package/dist/routes/pages/extensions._index.js.map +1 -1
- package/dist/routes/pages/integrations.js +1 -1
- package/dist/routes/pages/integrations.js.map +1 -1
- package/dist/routes/pages/new-app.js +1 -1
- package/dist/routes/pages/new-app.js.map +1 -1
- package/dist/routes/pages/operations.js +2 -2
- package/dist/routes/pages/operations.js.map +1 -1
- package/dist/routes/pages/overview.d.ts +2 -2
- package/dist/routes/pages/settings-page.d.ts +10 -0
- package/dist/routes/pages/settings-page.d.ts.map +1 -0
- package/dist/routes/pages/settings-page.js +104 -0
- package/dist/routes/pages/settings-page.js.map +1 -0
- package/dist/routes/pages/settings.d.ts +4 -12
- package/dist/routes/pages/settings.d.ts.map +1 -1
- package/dist/routes/pages/settings.js +4 -88
- package/dist/routes/pages/settings.js.map +1 -1
- package/dist/routes/pages/tools.$id.js +1 -1
- package/dist/routes/pages/tools.$id.js.map +1 -1
- package/dist/routes/pages/tools._index.js +1 -1
- package/dist/routes/pages/tools._index.js.map +1 -1
- package/dist/routes/pages/vault.d.ts +1 -1
- package/dist/routes/pages/vault.js +1 -1
- package/dist/routes/pages/vault.js.map +1 -1
- package/dist/shared/app-roles.js.map +1 -1
- package/package.json +3 -3
- package/src/components/app-open-actions.tsx +1 -1
- package/src/components/app-row-settings.tsx +1 -1
- package/src/components/automation-create-dialog.tsx +7 -7
- package/src/components/automation-details-panel.tsx +1 -1
- package/src/components/chat-home-apps.tsx +1 -1
- package/src/components/create-app-popover.spec.tsx +5 -7
- package/src/components/create-app-popover.tsx +3 -3
- package/src/components/dispatch-control-plane.spec.tsx +12 -19
- package/src/components/dispatch-control-plane.tsx +10 -84
- package/src/components/layout/Header.tsx +2 -2
- package/src/components/layout/Layout.app-chat.spec.ts +1 -0
- package/src/components/layout/Layout.spec.tsx +49 -30
- package/src/components/layout/Layout.tsx +153 -205
- package/src/components/layout/workspace-apps-rail.spec.tsx +79 -0
- package/src/components/layout/workspace-apps-rail.tsx +6 -30
- package/src/components/messaging-setup-panel.tsx +1 -1
- package/src/components/workspace-app-card.tsx +2 -2
- package/src/components/workspace-app-chat-rail.spec.tsx +2 -2
- package/src/components/workspace-app-host.spec.tsx +19 -19
- package/src/components/workspace-app-host.tsx +12 -129
- package/src/hooks/use-navigation-state.ts +1 -1
- package/src/lib/workspace-apps.ts +1 -1
- package/src/routes/pages/$appId.tsx +1 -1
- package/src/routes/pages/_index.tsx +1 -1
- package/src/routes/pages/admin._index.tsx +1 -1
- package/src/routes/pages/agent-integrations.tsx +1 -1
- package/src/routes/pages/apps.tsx +2 -86
- package/src/routes/pages/automations.spec.tsx +1 -1
- package/src/routes/pages/browser-chat.spec.tsx +1 -1
- package/src/routes/pages/browser-chat.tsx +1 -1
- package/src/routes/pages/chat.spec.tsx +23 -46
- package/src/routes/pages/chat.tsx +20 -57
- package/src/routes/pages/extensions.$id.tsx +1 -1
- package/src/routes/pages/extensions._index.tsx +1 -1
- package/src/routes/pages/integrations.tsx +1 -1
- package/src/routes/pages/new-app.tsx +1 -1
- package/src/routes/pages/operations.tsx +2 -2
- package/src/routes/pages/settings-page.tsx +250 -0
- package/src/routes/pages/settings.spec.tsx +30 -8
- package/src/routes/pages/settings.tsx +4 -184
- package/src/routes/pages/tools.$id.tsx +1 -1
- package/src/routes/pages/tools._index.tsx +1 -1
- package/src/routes/pages/vault.tsx +1 -1
- package/src/shared/app-roles.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# @agent-native/dispatch
|
|
2
2
|
|
|
3
|
+
## 0.40.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 181ca1d: Keep the package changelog in Dispatch's route wrapper so generated workspaces can render the shared Settings page during SSR.
|
|
8
|
+
- Release all public npm packages with a patch version bump.
|
|
9
|
+
- Updated dependencies
|
|
10
|
+
- Updated dependencies [63c4c02]
|
|
11
|
+
- @agent-native/toolkit@0.198.2
|
|
12
|
+
|
|
13
|
+
## 0.40.2
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- d09fdb0: Keep full-page chat headers and history controls aligned with the conversation surface.
|
|
18
|
+
- Release all public npm packages with a patch version bump.
|
|
19
|
+
- Updated dependencies [0b127e9]
|
|
20
|
+
- Updated dependencies [4873d09]
|
|
21
|
+
- Updated dependencies [d09fdb0]
|
|
22
|
+
- Updated dependencies
|
|
23
|
+
- Updated dependencies [d25ddc1]
|
|
24
|
+
- Updated dependencies [affa25c]
|
|
25
|
+
- Updated dependencies [b1bbe7e]
|
|
26
|
+
- Updated dependencies [905b078]
|
|
27
|
+
- Updated dependencies [6a627af]
|
|
28
|
+
- @agent-native/toolkit@0.198.1
|
|
29
|
+
|
|
30
|
+
## 0.40.1
|
|
31
|
+
|
|
32
|
+
### Patch Changes
|
|
33
|
+
|
|
34
|
+
- Release all public npm packages with a patch version bump.
|
|
35
|
+
- fb3eacd: Show only apps mounted in the active workspace in Dispatch app views.
|
|
36
|
+
- Updated dependencies [20cd76f]
|
|
37
|
+
- Updated dependencies [bbe8cbf]
|
|
38
|
+
- Updated dependencies [8853f61]
|
|
39
|
+
- Updated dependencies [8853f61]
|
|
40
|
+
- Updated dependencies
|
|
41
|
+
- Updated dependencies [8853f61]
|
|
42
|
+
- Updated dependencies [afbee14]
|
|
43
|
+
- Updated dependencies [8853f61]
|
|
44
|
+
- Updated dependencies [8853f61]
|
|
45
|
+
- Updated dependencies [8853f61]
|
|
46
|
+
- Updated dependencies [8853f61]
|
|
47
|
+
- Updated dependencies [b6ffae6]
|
|
48
|
+
- Updated dependencies [8853f61]
|
|
49
|
+
- @agent-native/toolkit@0.198.0
|
|
50
|
+
|
|
3
51
|
## 0.40.0
|
|
4
52
|
|
|
5
53
|
### Minor Changes
|
|
@@ -1040,23 +1088,4 @@
|
|
|
1040
1088
|
- Updated dependencies [89f194f]
|
|
1041
1089
|
- @agent-native/toolkit@0.14.3
|
|
1042
1090
|
|
|
1043
|
-
## 0.24.6
|
|
1044
|
-
|
|
1045
|
-
### Patch Changes
|
|
1046
|
-
|
|
1047
|
-
- Updated dependencies [2db503b]
|
|
1048
|
-
- @agent-native/toolkit@0.14.2
|
|
1049
|
-
|
|
1050
|
-
## 0.24.5
|
|
1051
|
-
|
|
1052
|
-
### Patch Changes
|
|
1053
|
-
|
|
1054
|
-
- 8008dfe: Centralize product docs links behind `docsUrl()` and retarget Settings, Team, onboarding, and template help links at live agent-native.com docs pages.
|
|
1055
|
-
|
|
1056
|
-
## 0.24.4
|
|
1057
|
-
|
|
1058
|
-
### Patch Changes
|
|
1059
|
-
|
|
1060
|
-
- 47ba57a: Gate connected-agent mutations to workspace owners and admins instead of issuing failed shared-resource writes for organization members.
|
|
1061
|
-
|
|
1062
1091
|
For the full list of releases, see the [changelog archive](./changelog/archive/CHANGELOG.md).
|
|
@@ -47,6 +47,7 @@ declare const _default: import("node_modules/@agent-native/core/dist").ActionDef
|
|
|
47
47
|
notes?: string | undefined;
|
|
48
48
|
scope?: "org" | "user" | undefined;
|
|
49
49
|
}, {
|
|
50
|
+
message?: undefined;
|
|
50
51
|
id?: undefined;
|
|
51
52
|
deleted?: undefined;
|
|
52
53
|
providers: {
|
|
@@ -63,28 +64,28 @@ declare const _default: import("node_modules/@agent-native/core/dist").ActionDef
|
|
|
63
64
|
found?: undefined;
|
|
64
65
|
registered?: undefined;
|
|
65
66
|
label?: undefined;
|
|
66
|
-
message?: undefined;
|
|
67
67
|
} | {
|
|
68
|
+
message?: undefined;
|
|
68
69
|
id?: undefined;
|
|
69
|
-
count?: undefined;
|
|
70
70
|
deleted?: undefined;
|
|
71
|
+
count?: undefined;
|
|
71
72
|
providers?: undefined;
|
|
72
73
|
found: boolean;
|
|
73
74
|
provider: import("node_modules/@agent-native/core/dist/provider-api").CustomProviderConfig;
|
|
74
75
|
registered?: undefined;
|
|
75
76
|
label?: undefined;
|
|
76
|
-
message?: undefined;
|
|
77
77
|
} | {
|
|
78
|
-
|
|
78
|
+
message?: undefined;
|
|
79
79
|
deleted?: undefined;
|
|
80
|
+
count?: undefined;
|
|
80
81
|
providers?: undefined;
|
|
81
82
|
provider?: undefined;
|
|
82
83
|
found: boolean;
|
|
83
84
|
id: string;
|
|
84
85
|
registered?: undefined;
|
|
85
86
|
label?: undefined;
|
|
86
|
-
message?: undefined;
|
|
87
87
|
} | {
|
|
88
|
+
message?: undefined;
|
|
88
89
|
count?: undefined;
|
|
89
90
|
providers?: undefined;
|
|
90
91
|
provider?: undefined;
|
|
@@ -93,10 +94,9 @@ declare const _default: import("node_modules/@agent-native/core/dist").ActionDef
|
|
|
93
94
|
id: string;
|
|
94
95
|
registered?: undefined;
|
|
95
96
|
label?: undefined;
|
|
96
|
-
message?: undefined;
|
|
97
97
|
} | {
|
|
98
|
-
count?: undefined;
|
|
99
98
|
deleted?: undefined;
|
|
99
|
+
count?: undefined;
|
|
100
100
|
providers?: undefined;
|
|
101
101
|
provider?: undefined;
|
|
102
102
|
found?: undefined;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { AppOpenActions, type AppOpenActionLabels, type AppOpenActionMenuItem, } from "@agent-native/
|
|
1
|
+
export { AppOpenActions, type AppOpenActionLabels, type AppOpenActionMenuItem, } from "@agent-native/toolkit/app/chat/chat-first";
|
|
2
2
|
//# sourceMappingURL=app-open-actions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-open-actions.d.ts","sourceRoot":"","sources":["../../src/components/app-open-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,
|
|
1
|
+
{"version":3,"file":"app-open-actions.d.ts","sourceRoot":"","sources":["../../src/components/app-open-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,2CAA2C,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { AppOpenActions, } from "@agent-native/
|
|
1
|
+
export { AppOpenActions, } from "@agent-native/toolkit/app/chat/chat-first";
|
|
2
2
|
//# sourceMappingURL=app-open-actions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-open-actions.js","sourceRoot":"","sources":["../../src/components/app-open-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,
|
|
1
|
+
{"version":3,"file":"app-open-actions.js","sourceRoot":"","sources":["../../src/components/app-open-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,2CAA2C,CAAC","sourcesContent":["export {\n AppOpenActions,\n type AppOpenActionLabels,\n type AppOpenActionMenuItem,\n} from \"@agent-native/toolkit/app/chat/chat-first\";\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { APP_ACTION_MENU_CONTENT_CLASS } from "@agent-native/
|
|
2
|
+
import { APP_ACTION_MENU_CONTENT_CLASS } from "@agent-native/toolkit/app/chat/chat-first";
|
|
3
3
|
import { IconPlus, IconSettings } from "@tabler/icons-react";
|
|
4
4
|
import { Button } from "./ui/button.js";
|
|
5
5
|
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "./ui/dropdown-menu.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-row-settings.js","sourceRoot":"","sources":["../../src/components/app-row-settings.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"app-row-settings.js","sourceRoot":"","sources":["../../src/components/app-row-settings.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,oBAAoB,GACxB,6PAA6P,CAAC;AAEhQ,MAAM,UAAU,cAAc,CAAC,EAC7B,IAAI,EACJ,WAAW,GAAG,SAAS,EACvB,QAAQ,GAKT;IACC,OAAO,CACL,MAAC,YAAY,eACX,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,gBACG,gBAAgB,IAAI,EAAE,EAClC,SAAS,EAAE,oBAAoB,YAE/B,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,GAAI,GACnB,GACW,GACP,EACjB,KAAC,cAAc,+BAA8B,IACrC,EACV,KAAC,mBAAmB,IAClB,KAAK,EAAC,KAAK,EACX,SAAS,EAAE,6BAA6B,YAExC,MAAC,gBAAgB,IAAC,QAAQ,EAAE,QAAQ,aAClC,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,EACxC,WAAW,IACK,GACC,IACT,CAChB,CAAC;AACJ,CAAC","sourcesContent":["import { APP_ACTION_MENU_CONTENT_CLASS } from \"@agent-native/toolkit/app/chat/chat-first\";\nimport { IconPlus, IconSettings } from \"@tabler/icons-react\";\n\nimport { Button } from \"./ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"./ui/dropdown-menu\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"./ui/tooltip\";\n\nconst APP_ROW_ACTION_CLASS =\n \"size-7 rounded-md p-0 text-muted-foreground transition-[background-color,color] hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring data-[state=open]:bg-accent data-[state=open]:text-foreground\";\n\nexport function AppRowSettings({\n name,\n addAppLabel = \"Add app\",\n onAddApp,\n}: {\n name: string;\n addAppLabel?: string;\n onAddApp: () => void;\n}) {\n return (\n <DropdownMenu>\n <Tooltip>\n <TooltipTrigger asChild>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={`Settings for ${name}`}\n className={APP_ROW_ACTION_CLASS}\n >\n <IconSettings size={15} />\n </Button>\n </DropdownMenuTrigger>\n </TooltipTrigger>\n <TooltipContent>App settings</TooltipContent>\n </Tooltip>\n <DropdownMenuContent\n align=\"end\"\n className={APP_ACTION_MENU_CONTENT_CLASS}\n >\n <DropdownMenuItem onSelect={onAddApp}>\n <IconPlus size={14} aria-hidden=\"true\" />\n {addAppLabel}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { DEFAULT_AUTOMATION_SCHEDULE_DRAFT, AUTOMATION_WEEKDAYS, automationScheduleToCron, formatAutomationTime, } from "@agent-native/core/client/agent-page/automation-schedule";
|
|
3
|
-
import { TimezoneSelect, browserTimezone, } from "@agent-native/core/client/agent-page/timezone-select";
|
|
4
2
|
import { useActionMutation, useActionQuery, } from "@agent-native/core/client/hooks";
|
|
5
3
|
import { useT } from "@agent-native/core/client/i18n";
|
|
4
|
+
import { DEFAULT_AUTOMATION_SCHEDULE_DRAFT, AUTOMATION_WEEKDAYS, automationScheduleToCron, formatAutomationTime, } from "@agent-native/toolkit/app/agent-page/automation-schedule";
|
|
5
|
+
import { TimezoneSelect, browserTimezone, } from "@agent-native/toolkit/app/agent-page/TimezoneSelect";
|
|
6
6
|
import { IconBolt, IconCalendarEvent, IconClock, IconCode, IconLoader2, } from "@tabler/icons-react";
|
|
7
7
|
import { useEffect, useState } from "react";
|
|
8
8
|
import { Button } from "./ui/button.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automation-create-dialog.js","sourceRoot":"","sources":["../../src/components/automation-create-dialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n DEFAULT_AUTOMATION_SCHEDULE_DRAFT,\n AUTOMATION_WEEKDAYS,\n automationScheduleToCron,\n formatAutomationTime,\n type AutomationScheduleDraft,\n type AutomationSchedulePreset,\n type AutomationScheduleUnit,\n} from \"@agent-native/core/client/agent-page/automation-schedule\";\nimport {\n TimezoneSelect,\n browserTimezone,\n} from \"@agent-native/core/client/agent-page/timezone-select\";\nimport {\n useActionMutation,\n useActionQuery,\n} from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport {\n IconBolt,\n IconCalendarEvent,\n IconClock,\n IconCode,\n IconLoader2,\n} from \"@tabler/icons-react\";\nimport { useEffect, useState } from \"react\";\n\nimport { Button } from \"./ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"./ui/dialog\";\nimport { Input } from \"./ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"./ui/tabs\";\nimport { Textarea } from \"./ui/textarea\";\n\ntype TriggerType = \"schedule\" | \"event\" | \"webhook\";\n\ninterface AutomationEvent {\n name: string;\n description?: string;\n}\n\ninterface CreateAutomationInput {\n operation: \"create\";\n name: string;\n scope: \"personal\" | \"organization\";\n triggerType: TriggerType;\n body: string;\n schedule?: string;\n timezone?: string;\n event?: string;\n}\n\ninterface CreateAutomationResult {\n created: true;\n name: string;\n triggerType: TriggerType;\n webhookPath: string | null;\n}\n\nconst PRESETS: {\n value: AutomationSchedulePreset;\n labelKey: string;\n detailKey: string;\n label: string;\n detail: string;\n draft: Partial<AutomationScheduleDraft>;\n}[] = [\n {\n value: \"hourly\",\n labelKey: \"jobs.schedulePreset.hourly\",\n detailKey: \"jobs.schedulePreset.hourlyDetail\",\n label: \"Every hour\",\n detail: \"At the top of the hour\",\n draft: { preset: \"hourly\" },\n },\n {\n value: \"daily-midnight\",\n labelKey: \"jobs.schedulePreset.dailyMidnight\",\n detailKey: \"jobs.schedulePreset.dailyMidnightDetail\",\n label: \"Every day at midnight\",\n detail: \"12:00 AM\",\n draft: { preset: \"daily-midnight\" },\n },\n {\n value: \"daily-noon\",\n labelKey: \"jobs.schedulePreset.dailyNoon\",\n detailKey: \"jobs.schedulePreset.dailyNoonDetail\",\n label: \"Every day at noon\",\n detail: \"12:00 PM\",\n draft: { preset: \"daily-noon\" },\n },\n {\n value: \"weekdays\",\n labelKey: \"jobs.schedulePreset.weekdays\",\n detailKey: \"jobs.schedulePreset.weekdaysDetail\",\n label: \"Every weekday\",\n detail: \"Monday to Friday at 9:00 AM\",\n draft: { preset: \"weekdays\", time: \"09:00\" },\n },\n {\n value: \"weekly\",\n labelKey: \"jobs.schedulePreset.weekly\",\n detailKey: \"jobs.schedulePreset.weeklyDetail\",\n label: \"Every week\",\n detail: \"Sunday at 9:00 AM\",\n draft: { preset: \"weekly\", weekday: 0, time: \"09:00\" },\n },\n];\n\nfunction presetClass(selected: boolean): string {\n return (\n \"rounded-lg border px-3 py-2 text-left transition-colors \" +\n (selected\n ? \"border-primary bg-primary/5 text-foreground\"\n : \"border-border/70 bg-background hover:bg-muted/50\")\n );\n}\n\nfunction scheduleIsValid(value: string): boolean {\n return value.trim().split(/\\s+/).length === 5;\n}\n\nfunction ScheduleFields({\n draft,\n saving,\n onChange,\n}: {\n draft: AutomationScheduleDraft;\n saving: boolean;\n onChange: (patch: Partial<AutomationScheduleDraft>) => void;\n}) {\n const t = useT();\n const customMinute = Number(draft.time.split(\":\")[1] ?? 0);\n return (\n <div className=\"space-y-3 rounded-lg border border-border/70 bg-muted/20 p-3\">\n <div className=\"grid gap-3 sm:grid-cols-[1fr_1fr]\">\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.repeatEvery\", { defaultValue: \"Repeat every\" })}</span>\n <Input\n type=\"number\"\n min={1}\n max={31}\n value={draft.interval}\n disabled={saving}\n onChange={(event) =>\n onChange({\n interval: Math.min(\n draft.unit === \"day\" ? 1 : 31,\n Math.max(1, Number(event.target.value) || 1),\n ),\n })\n }\n className=\"bg-background text-sm\"\n />\n </label>\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.scheduleUnit\", { defaultValue: \"Unit\" })}</span>\n <Select\n value={draft.unit}\n disabled={saving}\n onValueChange={(value) =>\n onChange({\n unit: value as AutomationScheduleUnit,\n ...(value === \"day\" ? { interval: 1 } : {}),\n })\n }\n >\n <SelectTrigger className=\"bg-background text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"hour\">\n {t(\"jobs.hours\", { defaultValue: \"hour(s)\" })}\n </SelectItem>\n <SelectItem value=\"day\">\n {t(\"jobs.day\", { defaultValue: \"day\" })}\n </SelectItem>\n <SelectItem value=\"week\">\n {t(\"jobs.weeks\", { defaultValue: \"week(s)\" })}\n </SelectItem>\n <SelectItem value=\"month\">\n {t(\"jobs.months\", { defaultValue: \"month(s)\" })}\n </SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n\n {draft.unit === \"hour\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.atMinute\", { defaultValue: \"At minute\" })}</span>\n <Input\n type=\"number\"\n min={0}\n max={59}\n value={customMinute}\n disabled={saving}\n onChange={(event) =>\n onChange({\n time:\n \"00:\" +\n String(\n Math.min(59, Math.max(0, Number(event.target.value) || 0)),\n ).padStart(2, \"0\"),\n })\n }\n className=\"bg-background text-sm\"\n />\n </label>\n ) : null}\n\n {draft.unit === \"week\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.onDay\", { defaultValue: \"On\" })}</span>\n <Select\n value={String(draft.weekday)}\n disabled={saving}\n onValueChange={(value) => onChange({ weekday: Number(value) })}\n >\n <SelectTrigger className=\"bg-background text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {AUTOMATION_WEEKDAYS.map((day) => (\n <SelectItem key={day.value} value={String(day.value)}>\n {day.short}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n ) : null}\n\n {draft.unit === \"month\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.dayOfMonth\", { defaultValue: \"Day of month\" })}</span>\n <Input\n type=\"number\"\n min={1}\n max={31}\n value={draft.monthDay}\n disabled={saving}\n onChange={(event) =>\n onChange({\n monthDay: Math.min(\n 31,\n Math.max(1, Number(event.target.value) || 1),\n ),\n })\n }\n className=\"bg-background text-sm\"\n />\n </label>\n ) : null}\n\n {draft.unit !== \"hour\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.atTime\", { defaultValue: \"At\" })}</span>\n <Input\n type=\"time\"\n value={draft.time}\n disabled={saving}\n onChange={(event) => onChange({ time: event.target.value })}\n className=\"bg-background text-sm\"\n />\n </label>\n ) : null}\n </div>\n );\n}\n\nfunction ScheduleBuilder({\n saving,\n timezone,\n onTimezoneChange,\n onChange,\n}: {\n saving: boolean;\n timezone: string;\n onTimezoneChange: (value: string) => void;\n onChange: (value: string) => void;\n}) {\n const t = useT();\n const [draft, setDraft] = useState<AutomationScheduleDraft>(\n DEFAULT_AUTOMATION_SCHEDULE_DRAFT,\n );\n const [advanced, setAdvanced] = useState(false);\n const [advancedValue, setAdvancedValue] = useState(\"0 * * * *\");\n const friendly = automationScheduleToCron(draft);\n const activeSchedule = advanced\n ? advancedValue.trim()\n : (friendly.schedule ?? \"\");\n const valid =\n scheduleIsValid(activeSchedule) && (!friendly.error || advanced);\n\n useEffect(() => {\n onChange(valid ? activeSchedule : \"\");\n }, [activeSchedule, onChange, valid]);\n\n function choosePreset(\n value: AutomationSchedulePreset,\n presetDraft: Partial<AutomationScheduleDraft>,\n ) {\n setDraft((current) => ({ ...current, ...presetDraft, preset: value }));\n setAdvanced(false);\n }\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-2\">\n <div className=\"text-xs font-medium text-foreground\">\n {t(\"jobs.repeat\", { defaultValue: \"Repeat\" })}\n </div>\n <div className=\"grid gap-2 sm:grid-cols-2\">\n {PRESETS.map((preset) => (\n <button\n key={preset.value}\n type=\"button\"\n aria-pressed={!advanced && draft.preset === preset.value}\n disabled={saving}\n className={presetClass(\n !advanced && draft.preset === preset.value,\n )}\n onClick={() => choosePreset(preset.value, preset.draft)}\n >\n <span className=\"block text-sm font-medium\">\n {t(preset.labelKey, { defaultValue: preset.label })}\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {t(preset.detailKey, { defaultValue: preset.detail })}\n </span>\n </button>\n ))}\n <button\n type=\"button\"\n aria-pressed={!advanced && draft.preset === \"custom\"}\n disabled={saving}\n className={presetClass(!advanced && draft.preset === \"custom\")}\n onClick={() =>\n choosePreset(\"custom\", {\n preset: \"custom\",\n unit: draft.unit || \"day\",\n })\n }\n >\n <span className=\"block text-sm font-medium\">\n {t(\"jobs.schedulePreset.custom\", { defaultValue: \"Custom\" })}\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {t(\"jobs.schedulePreset.customDetail\", {\n defaultValue: \"Set your own repeat pattern\",\n })}\n </span>\n </button>\n </div>\n </div>\n\n {!advanced && draft.preset === \"custom\" ? (\n <ScheduleFields\n draft={draft}\n saving={saving}\n onChange={(patch) =>\n setDraft((current) => ({ ...current, ...patch }))\n }\n />\n ) : null}\n\n {!advanced && friendly.schedule ? (\n <p className=\"text-xs text-muted-foreground\">\n {t(\"jobs.schedulePreview\", {\n defaultValue: \"Runs {{time}}.\",\n time:\n draft.preset === \"hourly\"\n ? t(\"jobs.schedulePreview.hourly\", {\n defaultValue: \"at the start of every hour\",\n })\n : draft.preset === \"daily-midnight\"\n ? t(\"jobs.schedulePreview.dailyMidnight\", {\n defaultValue: \"every day at midnight\",\n })\n : draft.preset === \"daily-noon\"\n ? t(\"jobs.schedulePreview.dailyNoon\", {\n defaultValue: \"every day at noon\",\n })\n : t(\"jobs.schedulePreview.atTime\", {\n defaultValue: \"at {{time}}\",\n time: formatAutomationTime(draft.time),\n }),\n })}\n </p>\n ) : null}\n {!advanced && friendly.error ? (\n <p className=\"text-xs text-destructive\">\n {friendly.error === \"daily-interval\"\n ? t(\"jobs.dailyIntervalAdvanced\", {\n defaultValue:\n \"Every few days needs the Advanced cron editor below.\",\n })\n : t(\"jobs.weeklyIntervalAdvanced\", {\n defaultValue:\n \"Custom weekly intervals beyond one week are available under Advanced.\",\n })}\n </p>\n ) : null}\n\n <div>\n <label className=\"text-xs font-medium text-foreground\">\n {t(\"jobs.timezone\", { defaultValue: \"Timezone\" })}\n </label>\n <div className=\"mt-1\">\n <TimezoneSelect\n value={timezone}\n disabled={saving}\n onChange={onTimezoneChange}\n suggested={[browserTimezone()]}\n />\n </div>\n </div>\n\n <details\n className=\"group rounded-lg border border-border/70 bg-muted/20\"\n open={advanced}\n onToggle={(event) => {\n const next = event.currentTarget.open;\n if (next && !advanced && friendly.schedule) {\n setAdvancedValue(friendly.schedule);\n }\n setAdvanced(next);\n }}\n >\n <summary className=\"flex cursor-pointer list-none items-center gap-2 px-3 py-2.5 text-xs font-medium text-foreground [&::-webkit-details-marker]:hidden\">\n <IconCode className=\"size-4 text-muted-foreground\" />\n {t(\"jobs.advancedSchedule\", {\n defaultValue: \"Advanced - cron expression\",\n })}\n <span className=\"ms-auto text-muted-foreground group-open:hidden\">\n {t(\"jobs.show\", { defaultValue: \"Show\" })}\n </span>\n <span className=\"ms-auto hidden text-muted-foreground group-open:inline\">\n {t(\"jobs.hide\", { defaultValue: \"Hide\" })}\n </span>\n </summary>\n <div className=\"border-t border-border/60 px-3 pb-3 pt-2.5\">\n <Input\n className=\"font-mono text-sm\"\n value={advancedValue}\n spellCheck={false}\n autoComplete=\"off\"\n disabled={saving}\n onFocus={() => setAdvanced(true)}\n onChange={(event) => {\n setAdvanced(true);\n setAdvancedValue(event.target.value);\n }}\n />\n <p className=\"mt-1 text-[11px] text-muted-foreground\">\n {t(\"jobs.cronFormatHint\", {\n defaultValue: \"minute hour day-of-month month day-of-week\",\n })}\n </p>\n </div>\n </details>\n\n {activeSchedule && !valid ? (\n <p className=\"text-xs text-destructive\">\n {t(\"jobs.cronFieldCount\", {\n defaultValue: \"A cron expression needs exactly 5 fields.\",\n })}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction EventFields({\n open,\n event,\n onChange,\n}: {\n open: boolean;\n event: string;\n onChange: (value: string) => void;\n}) {\n const t = useT();\n const eventsQuery = useActionQuery<AutomationEvent[]>(\n \"list-automation-events\",\n {},\n { enabled: open, staleTime: 60_000 },\n );\n\n return (\n <>\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.startWhen\", { defaultValue: \"Start when\" })}</span>\n <Select value={event} onValueChange={onChange}>\n <SelectTrigger>\n <SelectValue\n placeholder={\n eventsQuery.isLoading\n ? t(\"jobs.loadingEventTypes\", {\n defaultValue: \"Loading event types...\",\n })\n : t(\"jobs.chooseAppEvent\", {\n defaultValue: \"Choose an app event\",\n })\n }\n />\n </SelectTrigger>\n <SelectContent>\n {(eventsQuery.data ?? []).map((item) => (\n <SelectItem key={item.name} value={item.name}>\n {item.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n {eventsQuery.data?.find((item) => item.name === event)?.description ? (\n <p className=\"mt-2 text-xs text-muted-foreground\">\n {eventsQuery.data.find((item) => item.name === event)?.description}\n </p>\n ) : null}\n {eventsQuery.error ? (\n <p className=\"mt-2 text-xs text-destructive\">\n {t(\"jobs.loadEventTypesError\", {\n defaultValue: \"Could not load event types.\",\n })}\n </p>\n ) : null}\n </>\n );\n}\n\nexport interface AutomationCreateDialogProps {\n open: boolean;\n initialScope?: \"personal\" | \"organization\";\n onOpenChange: (open: boolean) => void;\n onCreated: (result: CreateAutomationResult) => void;\n}\n\nexport function AutomationCreateDialog({\n open,\n initialScope = \"personal\",\n onOpenChange,\n onCreated,\n}: AutomationCreateDialogProps) {\n const t = useT();\n const [name, setName] = useState(\"\");\n const [scope, setScope] = useState<\"personal\" | \"organization\">(initialScope);\n const [triggerType, setTriggerType] = useState<TriggerType>(\"schedule\");\n const [schedule, setSchedule] = useState(\"0 * * * *\");\n const [timezone, setTimezone] = useState(browserTimezone());\n const [event, setEvent] = useState(\"\");\n const [body, setBody] = useState(\"\");\n const create = useActionMutation<\n CreateAutomationResult,\n CreateAutomationInput\n >(\"manage-automation\", {\n onSuccess: onCreated,\n });\n\n const resetCreate = create.reset;\n\n useEffect(() => {\n if (!open) return;\n setName(\"\");\n setScope(initialScope);\n setTriggerType(\"schedule\");\n setSchedule(\"0 * * * *\");\n setTimezone(browserTimezone());\n setEvent(\"\");\n setBody(\"\");\n resetCreate();\n }, [initialScope, open, resetCreate]);\n\n const canSubmit =\n name.trim().length > 0 &&\n body.trim().length > 0 &&\n (triggerType !== \"event\" || event.length > 0) &&\n (triggerType !== \"schedule\" || scheduleIsValid(schedule));\n\n function submit() {\n if (!canSubmit) return;\n create.mutate({\n operation: \"create\",\n name: name.trim(),\n scope,\n triggerType,\n body: body.trim(),\n ...(triggerType === \"schedule\"\n ? { schedule, timezone }\n : triggerType === \"event\"\n ? { event }\n : {}),\n });\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-h-[90vh] overflow-y-auto sm:max-w-2xl\">\n <DialogHeader>\n <DialogTitle>\n {t(\"jobs.newAutomation\", { defaultValue: \"New automation\" })}\n </DialogTitle>\n <DialogDescription>\n {t(\"jobs.createAutomationDescription\", {\n defaultValue:\n \"Choose what starts it, then describe the work in plain language.\",\n })}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 sm:grid-cols-[1fr_12rem]\">\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.name\", { defaultValue: \"Name\" })}</span>\n <Input\n value={name}\n disabled={create.isPending}\n placeholder={t(\"jobs.automationNamePlaceholder\", {\n defaultValue: \"morning-digest\",\n })}\n onChange={(event) => setName(event.target.value)}\n />\n </label>\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.scope\", { defaultValue: \"Scope\" })}</span>\n <Select\n value={scope}\n disabled={create.isPending}\n onValueChange={(value) =>\n setScope(value as \"personal\" | \"organization\")\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"personal\">\n {t(\"jobs.personal\", { defaultValue: \"Personal\" })}\n </SelectItem>\n <SelectItem value=\"organization\">\n {t(\"jobs.organization\", { defaultValue: \"Organization\" })}\n </SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n\n <Tabs\n value={triggerType}\n onValueChange={(value) => setTriggerType(value as TriggerType)}\n >\n <TabsList className=\"grid h-auto w-full grid-cols-3\">\n <TabsTrigger value=\"schedule\" className=\"gap-2 py-2 text-xs\">\n <IconClock className=\"size-3.5\" />\n {t(\"jobs.schedule\", { defaultValue: \"Schedule\" })}\n </TabsTrigger>\n <TabsTrigger value=\"webhook\" className=\"gap-2 py-2 text-xs\">\n <IconBolt className=\"size-3.5\" />\n {t(\"jobs.webhook\", { defaultValue: \"Webhook\" })}\n </TabsTrigger>\n <TabsTrigger value=\"event\" className=\"gap-2 py-2 text-xs\">\n <IconCalendarEvent className=\"size-3.5\" />\n {t(\"jobs.appEvent\", { defaultValue: \"App event\" })}\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"schedule\" className=\"mt-3\">\n <ScheduleBuilder\n key={open ? \"schedule-open\" : \"schedule-closed\"}\n saving={create.isPending}\n timezone={timezone}\n onTimezoneChange={setTimezone}\n onChange={setSchedule}\n />\n </TabsContent>\n <TabsContent value=\"webhook\" className=\"mt-3\">\n <div className=\"rounded-lg border border-primary/20 bg-primary/5 p-3\">\n <div className=\"flex items-start gap-2\">\n <IconBolt className=\"mt-0.5 size-4 shrink-0 text-primary\" />\n <div>\n <p className=\"text-sm font-medium text-foreground\">\n {t(\"jobs.webhookTriggerDescription\", {\n defaultValue: \"Run when a service sends an HTTP POST\",\n })}\n </p>\n <p className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n {t(\"jobs.webhookSetupDescription\", {\n defaultValue:\n \"After you save, Dispatch gives you a private URL to paste into GitHub, Stripe, or another webhook provider.\",\n })}\n </p>\n </div>\n </div>\n </div>\n </TabsContent>\n <TabsContent value=\"event\" className=\"mt-3\">\n <EventFields open={open} event={event} onChange={setEvent} />\n </TabsContent>\n </Tabs>\n\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>\n {t(\"jobs.whatShouldItDo\", { defaultValue: \"What should it do?\" })}\n </span>\n <Textarea\n value={body}\n disabled={create.isPending}\n placeholder={t(\"jobs.automationBodyPlaceholder\", {\n defaultValue:\n \"Review new support requests and summarize anything urgent in a shared note.\",\n })}\n rows={5}\n onChange={(event) => setBody(event.target.value)}\n />\n </label>\n\n {create.error ? (\n <p className=\"text-xs text-destructive\">{create.error.message}</p>\n ) : null}\n </div>\n\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={create.isPending}\n onClick={() => onOpenChange(false)}\n >\n {t(\"jobs.cancel\", { defaultValue: \"Cancel\" })}\n </Button>\n <Button\n type=\"button\"\n disabled={!canSubmit || create.isPending}\n onClick={submit}\n >\n {create.isPending ? (\n <IconLoader2 className=\"size-4 animate-spin\" />\n ) : null}\n {t(\"jobs.createAutomation\", { defaultValue: \"Create automation\" })}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"automation-create-dialog.js","sourceRoot":"","sources":["../../src/components/automation-create-dialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n useActionMutation,\n useActionQuery,\n} from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport {\n DEFAULT_AUTOMATION_SCHEDULE_DRAFT,\n AUTOMATION_WEEKDAYS,\n automationScheduleToCron,\n formatAutomationTime,\n type AutomationScheduleDraft,\n type AutomationSchedulePreset,\n type AutomationScheduleUnit,\n} from \"@agent-native/toolkit/app/agent-page/automation-schedule\";\nimport {\n TimezoneSelect,\n browserTimezone,\n} from \"@agent-native/toolkit/app/agent-page/TimezoneSelect\";\nimport {\n IconBolt,\n IconCalendarEvent,\n IconClock,\n IconCode,\n IconLoader2,\n} from \"@tabler/icons-react\";\nimport { useEffect, useState } from \"react\";\n\nimport { Button } from \"./ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"./ui/dialog\";\nimport { Input } from \"./ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"./ui/tabs\";\nimport { Textarea } from \"./ui/textarea\";\n\ntype TriggerType = \"schedule\" | \"event\" | \"webhook\";\n\ninterface AutomationEvent {\n name: string;\n description?: string;\n}\n\ninterface CreateAutomationInput {\n operation: \"create\";\n name: string;\n scope: \"personal\" | \"organization\";\n triggerType: TriggerType;\n body: string;\n schedule?: string;\n timezone?: string;\n event?: string;\n}\n\ninterface CreateAutomationResult {\n created: true;\n name: string;\n triggerType: TriggerType;\n webhookPath: string | null;\n}\n\nconst PRESETS: {\n value: AutomationSchedulePreset;\n labelKey: string;\n detailKey: string;\n label: string;\n detail: string;\n draft: Partial<AutomationScheduleDraft>;\n}[] = [\n {\n value: \"hourly\",\n labelKey: \"jobs.schedulePreset.hourly\",\n detailKey: \"jobs.schedulePreset.hourlyDetail\",\n label: \"Every hour\",\n detail: \"At the top of the hour\",\n draft: { preset: \"hourly\" },\n },\n {\n value: \"daily-midnight\",\n labelKey: \"jobs.schedulePreset.dailyMidnight\",\n detailKey: \"jobs.schedulePreset.dailyMidnightDetail\",\n label: \"Every day at midnight\",\n detail: \"12:00 AM\",\n draft: { preset: \"daily-midnight\" },\n },\n {\n value: \"daily-noon\",\n labelKey: \"jobs.schedulePreset.dailyNoon\",\n detailKey: \"jobs.schedulePreset.dailyNoonDetail\",\n label: \"Every day at noon\",\n detail: \"12:00 PM\",\n draft: { preset: \"daily-noon\" },\n },\n {\n value: \"weekdays\",\n labelKey: \"jobs.schedulePreset.weekdays\",\n detailKey: \"jobs.schedulePreset.weekdaysDetail\",\n label: \"Every weekday\",\n detail: \"Monday to Friday at 9:00 AM\",\n draft: { preset: \"weekdays\", time: \"09:00\" },\n },\n {\n value: \"weekly\",\n labelKey: \"jobs.schedulePreset.weekly\",\n detailKey: \"jobs.schedulePreset.weeklyDetail\",\n label: \"Every week\",\n detail: \"Sunday at 9:00 AM\",\n draft: { preset: \"weekly\", weekday: 0, time: \"09:00\" },\n },\n];\n\nfunction presetClass(selected: boolean): string {\n return (\n \"rounded-lg border px-3 py-2 text-left transition-colors \" +\n (selected\n ? \"border-primary bg-primary/5 text-foreground\"\n : \"border-border/70 bg-background hover:bg-muted/50\")\n );\n}\n\nfunction scheduleIsValid(value: string): boolean {\n return value.trim().split(/\\s+/).length === 5;\n}\n\nfunction ScheduleFields({\n draft,\n saving,\n onChange,\n}: {\n draft: AutomationScheduleDraft;\n saving: boolean;\n onChange: (patch: Partial<AutomationScheduleDraft>) => void;\n}) {\n const t = useT();\n const customMinute = Number(draft.time.split(\":\")[1] ?? 0);\n return (\n <div className=\"space-y-3 rounded-lg border border-border/70 bg-muted/20 p-3\">\n <div className=\"grid gap-3 sm:grid-cols-[1fr_1fr]\">\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.repeatEvery\", { defaultValue: \"Repeat every\" })}</span>\n <Input\n type=\"number\"\n min={1}\n max={31}\n value={draft.interval}\n disabled={saving}\n onChange={(event) =>\n onChange({\n interval: Math.min(\n draft.unit === \"day\" ? 1 : 31,\n Math.max(1, Number(event.target.value) || 1),\n ),\n })\n }\n className=\"bg-background text-sm\"\n />\n </label>\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.scheduleUnit\", { defaultValue: \"Unit\" })}</span>\n <Select\n value={draft.unit}\n disabled={saving}\n onValueChange={(value) =>\n onChange({\n unit: value as AutomationScheduleUnit,\n ...(value === \"day\" ? { interval: 1 } : {}),\n })\n }\n >\n <SelectTrigger className=\"bg-background text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"hour\">\n {t(\"jobs.hours\", { defaultValue: \"hour(s)\" })}\n </SelectItem>\n <SelectItem value=\"day\">\n {t(\"jobs.day\", { defaultValue: \"day\" })}\n </SelectItem>\n <SelectItem value=\"week\">\n {t(\"jobs.weeks\", { defaultValue: \"week(s)\" })}\n </SelectItem>\n <SelectItem value=\"month\">\n {t(\"jobs.months\", { defaultValue: \"month(s)\" })}\n </SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n\n {draft.unit === \"hour\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.atMinute\", { defaultValue: \"At minute\" })}</span>\n <Input\n type=\"number\"\n min={0}\n max={59}\n value={customMinute}\n disabled={saving}\n onChange={(event) =>\n onChange({\n time:\n \"00:\" +\n String(\n Math.min(59, Math.max(0, Number(event.target.value) || 0)),\n ).padStart(2, \"0\"),\n })\n }\n className=\"bg-background text-sm\"\n />\n </label>\n ) : null}\n\n {draft.unit === \"week\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.onDay\", { defaultValue: \"On\" })}</span>\n <Select\n value={String(draft.weekday)}\n disabled={saving}\n onValueChange={(value) => onChange({ weekday: Number(value) })}\n >\n <SelectTrigger className=\"bg-background text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {AUTOMATION_WEEKDAYS.map((day) => (\n <SelectItem key={day.value} value={String(day.value)}>\n {day.short}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n ) : null}\n\n {draft.unit === \"month\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.dayOfMonth\", { defaultValue: \"Day of month\" })}</span>\n <Input\n type=\"number\"\n min={1}\n max={31}\n value={draft.monthDay}\n disabled={saving}\n onChange={(event) =>\n onChange({\n monthDay: Math.min(\n 31,\n Math.max(1, Number(event.target.value) || 1),\n ),\n })\n }\n className=\"bg-background text-sm\"\n />\n </label>\n ) : null}\n\n {draft.unit !== \"hour\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.atTime\", { defaultValue: \"At\" })}</span>\n <Input\n type=\"time\"\n value={draft.time}\n disabled={saving}\n onChange={(event) => onChange({ time: event.target.value })}\n className=\"bg-background text-sm\"\n />\n </label>\n ) : null}\n </div>\n );\n}\n\nfunction ScheduleBuilder({\n saving,\n timezone,\n onTimezoneChange,\n onChange,\n}: {\n saving: boolean;\n timezone: string;\n onTimezoneChange: (value: string) => void;\n onChange: (value: string) => void;\n}) {\n const t = useT();\n const [draft, setDraft] = useState<AutomationScheduleDraft>(\n DEFAULT_AUTOMATION_SCHEDULE_DRAFT,\n );\n const [advanced, setAdvanced] = useState(false);\n const [advancedValue, setAdvancedValue] = useState(\"0 * * * *\");\n const friendly = automationScheduleToCron(draft);\n const activeSchedule = advanced\n ? advancedValue.trim()\n : (friendly.schedule ?? \"\");\n const valid =\n scheduleIsValid(activeSchedule) && (!friendly.error || advanced);\n\n useEffect(() => {\n onChange(valid ? activeSchedule : \"\");\n }, [activeSchedule, onChange, valid]);\n\n function choosePreset(\n value: AutomationSchedulePreset,\n presetDraft: Partial<AutomationScheduleDraft>,\n ) {\n setDraft((current) => ({ ...current, ...presetDraft, preset: value }));\n setAdvanced(false);\n }\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-2\">\n <div className=\"text-xs font-medium text-foreground\">\n {t(\"jobs.repeat\", { defaultValue: \"Repeat\" })}\n </div>\n <div className=\"grid gap-2 sm:grid-cols-2\">\n {PRESETS.map((preset) => (\n <button\n key={preset.value}\n type=\"button\"\n aria-pressed={!advanced && draft.preset === preset.value}\n disabled={saving}\n className={presetClass(\n !advanced && draft.preset === preset.value,\n )}\n onClick={() => choosePreset(preset.value, preset.draft)}\n >\n <span className=\"block text-sm font-medium\">\n {t(preset.labelKey, { defaultValue: preset.label })}\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {t(preset.detailKey, { defaultValue: preset.detail })}\n </span>\n </button>\n ))}\n <button\n type=\"button\"\n aria-pressed={!advanced && draft.preset === \"custom\"}\n disabled={saving}\n className={presetClass(!advanced && draft.preset === \"custom\")}\n onClick={() =>\n choosePreset(\"custom\", {\n preset: \"custom\",\n unit: draft.unit || \"day\",\n })\n }\n >\n <span className=\"block text-sm font-medium\">\n {t(\"jobs.schedulePreset.custom\", { defaultValue: \"Custom\" })}\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {t(\"jobs.schedulePreset.customDetail\", {\n defaultValue: \"Set your own repeat pattern\",\n })}\n </span>\n </button>\n </div>\n </div>\n\n {!advanced && draft.preset === \"custom\" ? (\n <ScheduleFields\n draft={draft}\n saving={saving}\n onChange={(patch) =>\n setDraft((current) => ({ ...current, ...patch }))\n }\n />\n ) : null}\n\n {!advanced && friendly.schedule ? (\n <p className=\"text-xs text-muted-foreground\">\n {t(\"jobs.schedulePreview\", {\n defaultValue: \"Runs {{time}}.\",\n time:\n draft.preset === \"hourly\"\n ? t(\"jobs.schedulePreview.hourly\", {\n defaultValue: \"at the start of every hour\",\n })\n : draft.preset === \"daily-midnight\"\n ? t(\"jobs.schedulePreview.dailyMidnight\", {\n defaultValue: \"every day at midnight\",\n })\n : draft.preset === \"daily-noon\"\n ? t(\"jobs.schedulePreview.dailyNoon\", {\n defaultValue: \"every day at noon\",\n })\n : t(\"jobs.schedulePreview.atTime\", {\n defaultValue: \"at {{time}}\",\n time: formatAutomationTime(draft.time),\n }),\n })}\n </p>\n ) : null}\n {!advanced && friendly.error ? (\n <p className=\"text-xs text-destructive\">\n {friendly.error === \"daily-interval\"\n ? t(\"jobs.dailyIntervalAdvanced\", {\n defaultValue:\n \"Every few days needs the Advanced cron editor below.\",\n })\n : t(\"jobs.weeklyIntervalAdvanced\", {\n defaultValue:\n \"Custom weekly intervals beyond one week are available under Advanced.\",\n })}\n </p>\n ) : null}\n\n <div>\n <label className=\"text-xs font-medium text-foreground\">\n {t(\"jobs.timezone\", { defaultValue: \"Timezone\" })}\n </label>\n <div className=\"mt-1\">\n <TimezoneSelect\n value={timezone}\n disabled={saving}\n onChange={onTimezoneChange}\n suggested={[browserTimezone()]}\n />\n </div>\n </div>\n\n <details\n className=\"group rounded-lg border border-border/70 bg-muted/20\"\n open={advanced}\n onToggle={(event) => {\n const next = event.currentTarget.open;\n if (next && !advanced && friendly.schedule) {\n setAdvancedValue(friendly.schedule);\n }\n setAdvanced(next);\n }}\n >\n <summary className=\"flex cursor-pointer list-none items-center gap-2 px-3 py-2.5 text-xs font-medium text-foreground [&::-webkit-details-marker]:hidden\">\n <IconCode className=\"size-4 text-muted-foreground\" />\n {t(\"jobs.advancedSchedule\", {\n defaultValue: \"Advanced - cron expression\",\n })}\n <span className=\"ms-auto text-muted-foreground group-open:hidden\">\n {t(\"jobs.show\", { defaultValue: \"Show\" })}\n </span>\n <span className=\"ms-auto hidden text-muted-foreground group-open:inline\">\n {t(\"jobs.hide\", { defaultValue: \"Hide\" })}\n </span>\n </summary>\n <div className=\"border-t border-border/60 px-3 pb-3 pt-2.5\">\n <Input\n className=\"font-mono text-sm\"\n value={advancedValue}\n spellCheck={false}\n autoComplete=\"off\"\n disabled={saving}\n onFocus={() => setAdvanced(true)}\n onChange={(event) => {\n setAdvanced(true);\n setAdvancedValue(event.target.value);\n }}\n />\n <p className=\"mt-1 text-[11px] text-muted-foreground\">\n {t(\"jobs.cronFormatHint\", {\n defaultValue: \"minute hour day-of-month month day-of-week\",\n })}\n </p>\n </div>\n </details>\n\n {activeSchedule && !valid ? (\n <p className=\"text-xs text-destructive\">\n {t(\"jobs.cronFieldCount\", {\n defaultValue: \"A cron expression needs exactly 5 fields.\",\n })}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction EventFields({\n open,\n event,\n onChange,\n}: {\n open: boolean;\n event: string;\n onChange: (value: string) => void;\n}) {\n const t = useT();\n const eventsQuery = useActionQuery<AutomationEvent[]>(\n \"list-automation-events\",\n {},\n { enabled: open, staleTime: 60_000 },\n );\n\n return (\n <>\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.startWhen\", { defaultValue: \"Start when\" })}</span>\n <Select value={event} onValueChange={onChange}>\n <SelectTrigger>\n <SelectValue\n placeholder={\n eventsQuery.isLoading\n ? t(\"jobs.loadingEventTypes\", {\n defaultValue: \"Loading event types...\",\n })\n : t(\"jobs.chooseAppEvent\", {\n defaultValue: \"Choose an app event\",\n })\n }\n />\n </SelectTrigger>\n <SelectContent>\n {(eventsQuery.data ?? []).map((item) => (\n <SelectItem key={item.name} value={item.name}>\n {item.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n {eventsQuery.data?.find((item) => item.name === event)?.description ? (\n <p className=\"mt-2 text-xs text-muted-foreground\">\n {eventsQuery.data.find((item) => item.name === event)?.description}\n </p>\n ) : null}\n {eventsQuery.error ? (\n <p className=\"mt-2 text-xs text-destructive\">\n {t(\"jobs.loadEventTypesError\", {\n defaultValue: \"Could not load event types.\",\n })}\n </p>\n ) : null}\n </>\n );\n}\n\nexport interface AutomationCreateDialogProps {\n open: boolean;\n initialScope?: \"personal\" | \"organization\";\n onOpenChange: (open: boolean) => void;\n onCreated: (result: CreateAutomationResult) => void;\n}\n\nexport function AutomationCreateDialog({\n open,\n initialScope = \"personal\",\n onOpenChange,\n onCreated,\n}: AutomationCreateDialogProps) {\n const t = useT();\n const [name, setName] = useState(\"\");\n const [scope, setScope] = useState<\"personal\" | \"organization\">(initialScope);\n const [triggerType, setTriggerType] = useState<TriggerType>(\"schedule\");\n const [schedule, setSchedule] = useState(\"0 * * * *\");\n const [timezone, setTimezone] = useState(browserTimezone());\n const [event, setEvent] = useState(\"\");\n const [body, setBody] = useState(\"\");\n const create = useActionMutation<\n CreateAutomationResult,\n CreateAutomationInput\n >(\"manage-automation\", {\n onSuccess: onCreated,\n });\n\n const resetCreate = create.reset;\n\n useEffect(() => {\n if (!open) return;\n setName(\"\");\n setScope(initialScope);\n setTriggerType(\"schedule\");\n setSchedule(\"0 * * * *\");\n setTimezone(browserTimezone());\n setEvent(\"\");\n setBody(\"\");\n resetCreate();\n }, [initialScope, open, resetCreate]);\n\n const canSubmit =\n name.trim().length > 0 &&\n body.trim().length > 0 &&\n (triggerType !== \"event\" || event.length > 0) &&\n (triggerType !== \"schedule\" || scheduleIsValid(schedule));\n\n function submit() {\n if (!canSubmit) return;\n create.mutate({\n operation: \"create\",\n name: name.trim(),\n scope,\n triggerType,\n body: body.trim(),\n ...(triggerType === \"schedule\"\n ? { schedule, timezone }\n : triggerType === \"event\"\n ? { event }\n : {}),\n });\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-h-[90vh] overflow-y-auto sm:max-w-2xl\">\n <DialogHeader>\n <DialogTitle>\n {t(\"jobs.newAutomation\", { defaultValue: \"New automation\" })}\n </DialogTitle>\n <DialogDescription>\n {t(\"jobs.createAutomationDescription\", {\n defaultValue:\n \"Choose what starts it, then describe the work in plain language.\",\n })}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 sm:grid-cols-[1fr_12rem]\">\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.name\", { defaultValue: \"Name\" })}</span>\n <Input\n value={name}\n disabled={create.isPending}\n placeholder={t(\"jobs.automationNamePlaceholder\", {\n defaultValue: \"morning-digest\",\n })}\n onChange={(event) => setName(event.target.value)}\n />\n </label>\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.scope\", { defaultValue: \"Scope\" })}</span>\n <Select\n value={scope}\n disabled={create.isPending}\n onValueChange={(value) =>\n setScope(value as \"personal\" | \"organization\")\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"personal\">\n {t(\"jobs.personal\", { defaultValue: \"Personal\" })}\n </SelectItem>\n <SelectItem value=\"organization\">\n {t(\"jobs.organization\", { defaultValue: \"Organization\" })}\n </SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n\n <Tabs\n value={triggerType}\n onValueChange={(value) => setTriggerType(value as TriggerType)}\n >\n <TabsList className=\"grid h-auto w-full grid-cols-3\">\n <TabsTrigger value=\"schedule\" className=\"gap-2 py-2 text-xs\">\n <IconClock className=\"size-3.5\" />\n {t(\"jobs.schedule\", { defaultValue: \"Schedule\" })}\n </TabsTrigger>\n <TabsTrigger value=\"webhook\" className=\"gap-2 py-2 text-xs\">\n <IconBolt className=\"size-3.5\" />\n {t(\"jobs.webhook\", { defaultValue: \"Webhook\" })}\n </TabsTrigger>\n <TabsTrigger value=\"event\" className=\"gap-2 py-2 text-xs\">\n <IconCalendarEvent className=\"size-3.5\" />\n {t(\"jobs.appEvent\", { defaultValue: \"App event\" })}\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"schedule\" className=\"mt-3\">\n <ScheduleBuilder\n key={open ? \"schedule-open\" : \"schedule-closed\"}\n saving={create.isPending}\n timezone={timezone}\n onTimezoneChange={setTimezone}\n onChange={setSchedule}\n />\n </TabsContent>\n <TabsContent value=\"webhook\" className=\"mt-3\">\n <div className=\"rounded-lg border border-primary/20 bg-primary/5 p-3\">\n <div className=\"flex items-start gap-2\">\n <IconBolt className=\"mt-0.5 size-4 shrink-0 text-primary\" />\n <div>\n <p className=\"text-sm font-medium text-foreground\">\n {t(\"jobs.webhookTriggerDescription\", {\n defaultValue: \"Run when a service sends an HTTP POST\",\n })}\n </p>\n <p className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n {t(\"jobs.webhookSetupDescription\", {\n defaultValue:\n \"After you save, Dispatch gives you a private URL to paste into GitHub, Stripe, or another webhook provider.\",\n })}\n </p>\n </div>\n </div>\n </div>\n </TabsContent>\n <TabsContent value=\"event\" className=\"mt-3\">\n <EventFields open={open} event={event} onChange={setEvent} />\n </TabsContent>\n </Tabs>\n\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>\n {t(\"jobs.whatShouldItDo\", { defaultValue: \"What should it do?\" })}\n </span>\n <Textarea\n value={body}\n disabled={create.isPending}\n placeholder={t(\"jobs.automationBodyPlaceholder\", {\n defaultValue:\n \"Review new support requests and summarize anything urgent in a shared note.\",\n })}\n rows={5}\n onChange={(event) => setBody(event.target.value)}\n />\n </label>\n\n {create.error ? (\n <p className=\"text-xs text-destructive\">{create.error.message}</p>\n ) : null}\n </div>\n\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={create.isPending}\n onClick={() => onOpenChange(false)}\n >\n {t(\"jobs.cancel\", { defaultValue: \"Cancel\" })}\n </Button>\n <Button\n type=\"button\"\n disabled={!canSubmit || create.isPending}\n onClick={submit}\n >\n {create.isPending ? (\n <IconLoader2 className=\"size-4 animate-spin\" />\n ) : null}\n {t(\"jobs.createAutomation\", { defaultValue: \"Create automation\" })}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { appPath } from "@agent-native/core/client/api-path";
|
|
3
|
-
import { writeClipboardText } from "@agent-native/core/client/clipboard";
|
|
4
3
|
import { useActionQuery } from "@agent-native/core/client/hooks";
|
|
5
4
|
import { useT } from "@agent-native/core/client/i18n";
|
|
5
|
+
import { writeClipboardText } from "@agent-native/toolkit/clipboard";
|
|
6
6
|
import { IconAlertTriangle, IconCheck, IconCopy, IconClock, IconExternalLink, IconPlayerPause, IconPlayerPlay, } from "@tabler/icons-react";
|
|
7
7
|
import { useState } from "react";
|
|
8
8
|
import { Link } from "react-router";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automation-details-panel.js","sourceRoot":"","sources":["../../src/components/automation-details-panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,GAEnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAkBzC,SAAS,eAAe,CAAC,KAAyC;IAChE,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,cAAc,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,cAAc,CAAC,GAAkB;IACxC,IAAI,CAAC,GAAG,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CACpD,CAAC;IACF,OAAO,GAAG,OAAO,GAAG,CAAC;AACvB,CAAC;AAED,SAAS,YAAY,CAAC,GAAkB;IACtC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,GAAG,CAAC,KAAK;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;SACzC,IAAI,GAAG,CAAC,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;;QACvD,OAAO,IAAI,CAAC;IACjB,OAAO,uBAAuB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,gBAAgB,CACvB,MAA+B;IAE/B,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,aAAa,CAAC;IAC7C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,KAAK,EACL,KAAK,EACL,IAAI,GAAG,KAAK,GAKb;IACC,OAAO,CACL,eAAK,SAAS,EAAC,SAAS,aACtB,aAAI,SAAS,EAAC,2DAA2D,YACtE,KAAK,GACH,EACL,aACE,SAAS,EACP,IAAI;oBACF,CAAC,CAAC,oDAAoD;oBACtD,CAAC,CAAC,0CAA0C,YAG/C,KAAK,GACH,IACD,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAsC;IACxD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,kBAAkB,CAAC;IACnD,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,iBAAiB,CAAC;IACjD,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EACrC,UAAU,EACV,UAAU,GAAG,KAAK,EAClB,QAAQ,GACoB;IAC5B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,SAAS,GAAG,cAAc,CAC9B,sBAAsB,EACtB;QACE,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,KAAK,EAAE,kBAAkB,CAAC,UAAU,CAAC;QACrC,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,UAAU;KACtC,EACD,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB,CAAC;IACF,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,KAAK,UAAU,CAAC;IAC1D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,UAAU,GACd,UAAU,CAAC,WAAW,IAAI,OAAO,MAAM,KAAK,WAAW;QACrD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC;QAC1D,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,YAAY,GAChB,UAAU,CAAC,WAAW,KAAK,SAAS;QAClC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QAChD,CAAC,CAAC,WAAW;YACX,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,OAAO,CAAC;IAChB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IACvC,MAAM,kBAAkB,GAAG,OAAO,CAChC,UAAU,CAAC,eAAe;QAC1B,UAAU,CAAC,eAAe;QAC1B,UAAU,CAAC,YAAY,CACxB,CAAC;IACF,MAAM,WAAW,GAAG,OAAO,CACzB,UAAU,CAAC,gBAAgB;QAC3B,UAAU,CAAC,mBAAmB;QAC9B,UAAU,CAAC,iBAAiB,CAC7B,CAAC;IAEF,OAAO,CACL,iBAAO,SAAS,EAAC,+EAA+E,aAC9F,iBAAQ,SAAS,EAAC,qDAAqD,YACrE,eAAK,SAAS,EAAC,SAAS,aACtB,eAAK,SAAS,EAAC,yBAAyB,aACtC,eACE,SAAS,EACP,MAAM,CAAC,IAAI,KAAK,QAAQ;wCACtB,CAAC,CAAC,6CAA6C;wCAC/C,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;4CACzB,CAAC,CAAC,yCAAyC;4CAC3C,CAAC,CAAC,qDAAqD,GAE7D,EACF,KAAC,KAAK,IACJ,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAC7D,SAAS,EAAC,KAAK,YAEd,MAAM,CAAC,KAAK,GACP,IACJ,EACN,aAAI,SAAS,EAAC,0DAA0D,YACrE,UAAU,CAAC,IAAI,GACb,EACL,aAAG,SAAS,EAAC,oCAAoC,aAC9C,YAAY,cAAK,oBAAoB,CAAC,UAAU,CAAC,IAChD,IACA,GACC,EAET,eAAK,SAAS,EAAC,8CAA8C,aAC3D,8BACE,aAAI,SAAS,EAAC,uCAAuC,uBAAY,EAChE,MAAM,CAAC,CAAC,CAAC,CACR,cAAK,SAAS,EAAC,oIAAoI,YAChJ,MAAM,GACH,CACP,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,wEAAwE,oCAEjF,CACL,IACO,EAEV,mBAAS,SAAS,EAAC,eAAe,aAChC,aAAI,SAAS,EAAC,uCAAuC,8BAEhD,EACL,cAAI,SAAS,EAAC,uCAAuC,aACnD,KAAC,WAAW,IACV,KAAK,EAAC,SAAS,EACf,KAAK,EACH,UAAU,CAAC,WAAW,KAAK,SAAS;4CAClC,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE;gDACvB,YAAY,EAAE,mBAAmB;6CAClC,CAAC;4CACJ,CAAC,CAAC,WAAW;gDACX,CAAC,CAAC,WAAW;gDACb,CAAC,CAAC,iBAAiB,GAEzB,EACF,KAAC,WAAW,IACV,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EACzC,KAAK,EAAE,gBAAgB,CAAC,UAAU,CAAC,GACnC,EACD,WAAW,CAAC,CAAC,CAAC,CACb,8BACG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CACrB,KAAC,WAAW,IACV,KAAK,EAAC,iBAAiB,EACvB,KAAK,EAAE,UAAU,CAAC,QAAQ,EAC1B,IAAI,SACJ,CACH,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,WAAW,IACV,KAAK,EAAC,UAAU,EAChB,KAAK,EAAE,UAAU,CAAC,QAAQ,IAAI,iBAAiB,GAC/C,IACD,CACJ,CAAC,CAAC,CAAC,IAAI,EACP,UAAU,CAAC,CAAC,CAAC,CACZ,eAAK,SAAS,EAAC,iEAAiE,aAC9E,eAAK,SAAS,EAAC,yCAAyC,aACtD,eAAM,SAAS,EAAC,qCAAqC,YAClD,CAAC,CAAC,iBAAiB,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,GACjD,EACP,MAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,8BAA8B,EACxC,OAAO,EAAE,GAAG,EAAE;4DACZ,KAAK,kBAAkB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gEACnD,SAAS,CAAC,OAAO,CAAC,CAAC;gEACnB,IAAI,OAAO,EAAE,CAAC;oEACZ,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;gEAClD,CAAC;4DACH,CAAC,CAAC,CAAC;wDACL,CAAC,aAEA,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,SAAS,IAAC,SAAS,EAAC,UAAU,GAAG,CACnC,CAAC,CAAC,CAAC,CACF,KAAC,QAAQ,IAAC,SAAS,EAAC,UAAU,GAAG,CAClC,EACA,MAAM;gEACL,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;gEAChD,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,IAC3C,IACL,EACN,eAAM,SAAS,EAAC,kEAAkE,YAC/E,UAAU,GACN,EACP,YAAG,SAAS,EAAC,oCAAoC,YAC9C,CAAC,CAAC,qBAAqB,EAAE;oDACxB,YAAY,EACV,8DAA8D;iDACjE,CAAC,GACA,IACA,CACP,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,WAAW,IACV,KAAK,EAAC,WAAW,EACjB,KAAK,EAAE,UAAU,CAAC,SAAS,IAAI,QAAQ,GACvC,EACF,KAAC,WAAW,IACV,KAAK,EAAC,QAAQ,EACd,KAAK,EAAE,UAAU,CAAC,MAAM,IAAI,SAAS,GACrC,EACF,KAAC,WAAW,IACV,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,eAAe,GAC1C,EACF,KAAC,WAAW,IAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAE,UAAU,CAAC,IAAI,IAAI,SAAS,GAAI,EACjE,KAAC,WAAW,IAAC,KAAK,EAAC,SAAS,EAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,GAAI,EACnE,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,WAAW,IACV,KAAK,EAAC,UAAU,EAChB,KAAK,EACH,UAAU,CAAC,OAAO;4CAChB,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;4CACrC,CAAC,CAAC,QAAQ,GAEd,CACH,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,WAAW,IACV,KAAK,EAAC,UAAU,EAChB,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,GAC1C,EACF,KAAC,WAAW,IACV,KAAK,EAAC,cAAc,EACpB,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,GAC5C,EACF,KAAC,WAAW,IACV,KAAK,EAAC,YAAY,EAClB,KAAK,EAAE,UAAU,CAAC,SAAS,IAAI,SAAS,GACxC,IACC,IACG,EAEV,mBAAS,SAAS,EAAC,eAAe,aAChC,aAAI,SAAS,EAAC,uCAAuC,6BAEhD,EACJ,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACvD,cAAK,SAAS,EAAC,6BAA6B,YACzC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CACrC,eAEE,SAAS,EAAC,qFAAqF,YAE9F,QAAQ,IAHJ,QAAQ,CAIR,CACR,CAAC,GACE,CACP,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,oCAAoC,4CAE7C,CACL,IACO,EAET,kBAAkB,CAAC,CAAC,CAAC,CACpB,mBAAS,SAAS,EAAC,eAAe,aAChC,aAAI,SAAS,EAAC,uCAAuC,iCAEhD,EACL,cAAI,SAAS,EAAC,uCAAuC,aACnD,KAAC,WAAW,IACV,KAAK,EAAC,MAAM,EACZ,KAAK,EAAE,UAAU,CAAC,eAAe,IAAI,gBAAgB,EACrD,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,GACzC,EACF,KAAC,WAAW,IACV,KAAK,EAAC,QAAQ,EACd,KAAK,EAAE,UAAU,CAAC,eAAe,IAAI,SAAS,GAC9C,EACD,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CACzB,KAAC,WAAW,IACV,KAAK,EAAC,mBAAmB,EACzB,KAAK,EAAE,UAAU,CAAC,YAAY,EAC9B,IAAI,SACJ,CACH,CAAC,CAAC,CAAC,IAAI,IACL,IACG,CACX,CAAC,CAAC,CAAC,IAAI,EAEP,WAAW,CAAC,CAAC,CAAC,CACb,mBAAS,SAAS,EAAC,eAAe,aAChC,aAAI,SAAS,EAAC,uCAAuC,yBAAc,EACnE,cAAI,SAAS,EAAC,uCAAuC,aAClD,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAC7B,KAAC,WAAW,IACV,KAAK,EAAC,UAAU,EAChB,KAAK,EAAE,UAAU,CAAC,gBAAgB,GAClC,CACH,CAAC,CAAC,CAAC,IAAI,EACP,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAChC,KAAC,WAAW,IACV,KAAK,EAAC,aAAa,EACnB,KAAK,EAAE,UAAU,CAAC,mBAAmB,GACrC,CACH,CAAC,CAAC,CAAC,IAAI,EACP,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAC9B,KAAC,WAAW,IACV,KAAK,EAAC,kBAAkB,EACxB,KAAK,EAAE,UAAU,CAAC,iBAAiB,EACnC,IAAI,SACJ,CACH,CAAC,CAAC,CAAC,IAAI,IACL,IACG,CACX,CAAC,CAAC,CAAC,IAAI,EAEP,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CACtB,mBAAS,SAAS,EAAC,4DAA4D,aAC7E,KAAC,iBAAiB,IAAC,SAAS,EAAC,yCAAyC,GAAG,EACzE,eAAK,SAAS,EAAC,SAAS,aACtB,aAAI,SAAS,EAAC,wCAAwC,wCAEjD,EACL,YAAG,SAAS,EAAC,gDAAgD,YAC1D,UAAU,CAAC,SAAS,GACnB,IACA,IACE,CACX,CAAC,CAAC,CAAC,IAAI,EAER,mBAAS,SAAS,EAAC,eAAe,aAChC,eAAK,SAAS,EAAC,yCAAyC,aACtD,aAAI,SAAS,EAAC,uCAAuC,0BAAe,EACnE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACjB,MAAC,KAAK,IAAC,OAAO,EAAC,SAAS,aAAE,IAAI,CAAC,MAAM,cAAe,CACrD,CAAC,CAAC,CAAC,IAAI,IACJ,EACN,cAAK,SAAS,EAAC,MAAM,YAClB,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CACrB,cAAK,SAAS,EAAC,iCAAiC,YAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAC3C,eAAiB,SAAS,EAAC,WAAW,aACpC,KAAC,QAAQ,IAAC,SAAS,EAAC,WAAW,GAAG,EAClC,KAAC,QAAQ,IAAC,SAAS,EAAC,WAAW,GAAG,KAF1B,KAAK,CAGT,CACP,CAAC,GACE,CACP,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CACtB,KAAC,gBAAgB,IACf,KAAK,EAAE,SAAS,CAAC,KAAK,EACtB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC,OAAO,EAAE,GACvC,CACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,YAAG,SAAS,EAAC,mEAAmE,2CAE5E,CACL,CAAC,CAAC,CAAC,CACF,aAAI,SAAS,EAAC,4BAA4B,YACvC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;wCAChB,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;wCACpC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;wCACrC,OAAO,CACL,cAAiB,SAAS,EAAC,eAAe,aACxC,eAAK,SAAS,EAAC,2CAA2C,aACxD,KAAC,KAAK,IAAC,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,YACzC,GAAG,CAAC,MAAM,GACL,EACR,eAAM,SAAS,EAAC,uBAAuB,YACpC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,GAC1B,EACN,QAAQ,CAAC,CAAC,CAAC,CACV,gBAAM,SAAS,EAAC,8DAA8D,aAC5E,KAAC,SAAS,IAAC,SAAS,EAAC,UAAU,GAAG,EACjC,QAAQ,IACJ,CACR,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,CAAC,CAAC,CACX,MAAC,IAAI,IACH,EAAE,EAAE,SAAS,EACb,SAAS,EAAC,+GAA+G,aAEzH,KAAC,gBAAgB,IAAC,SAAS,EAAC,UAAU,GAAG,kBAEpC,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,EACL,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CACX,YAAG,SAAS,EAAC,sCAAsC,YAChD,GAAG,CAAC,KAAK,GACR,CACL,CAAC,CAAC,CAAC,IAAI,KA5BD,GAAG,CAAC,EAAE,CA6BV,CACN,CAAC;oCACJ,CAAC,CAAC,GACC,CACN,GACG,IACE,IACN,EAEN,kBAAQ,SAAS,EAAC,gDAAgD,aAChE,MAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,UAAU,CAAC,SAAS,KAAK,KAAK,IAAI,UAAU,aAErD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAC,eAAe,KAAG,CAAC,CAAC,CAAC,KAAC,cAAc,KAAG,EAC7D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IACjC,EACR,UAAU,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAChC,eAAM,SAAS,EAAC,+BAA+B,0BAAiB,CACjE,CAAC,CAAC,CAAC,IAAI,IACD,IACH,CACT,CAAC;AACJ,CAAC","sourcesContent":["import { appPath } from \"@agent-native/core/client/api-path\";\nimport { writeClipboardText } from \"@agent-native/core/client/clipboard\";\nimport { useActionQuery } from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport {\n IconAlertTriangle,\n IconCheck,\n IconCopy,\n IconClock,\n IconExternalLink,\n IconPlayerPause,\n IconPlayerPlay,\n} from \"@tabler/icons-react\";\nimport { useState } from \"react\";\nimport { Link } from \"react-router\";\n\nimport {\n automationScopeLabel,\n automationStatus,\n automationTarget,\n} from \"../lib/automation-display\";\nimport {\n automationRunScope,\n type DispatchAutomationItem,\n} from \"../lib/automations\";\nimport { ActionQueryError } from \"./action-query-error\";\nimport { Badge } from \"./ui/badge\";\nimport { Button } from \"./ui/button\";\nimport { Skeleton } from \"./ui/skeleton\";\n\ninterface AutomationRun {\n id: string;\n runId: string | null;\n threadId: string | null;\n status: \"running\" | \"success\" | \"error\" | \"interrupted\";\n startedAt: number;\n finishedAt: number | null;\n error: string | null;\n}\n\nexport interface AutomationDetailsPanelProps {\n automation: DispatchAutomationItem;\n isToggling?: boolean;\n onToggle: () => void;\n}\n\nfunction formatTimestamp(value: number | string | null | undefined): string {\n if (value == null) return \"Not recorded\";\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? \"Unknown time\" : date.toLocaleString();\n}\n\nfunction formatDuration(run: AutomationRun): string | null {\n if (!run.finishedAt) return null;\n const seconds = Math.max(\n 0,\n Math.round((run.finishedAt - run.startedAt) / 1000),\n );\n return `${seconds}s`;\n}\n\nfunction runDebugPath(run: AutomationRun): string | null {\n const params = new URLSearchParams();\n if (run.runId) params.set(\"runId\", run.runId);\n else if (run.threadId) params.set(\"threadId\", run.threadId);\n else return null;\n return `/admin/thread-debug?${params.toString()}`;\n}\n\nfunction runStatusVariant(\n status: AutomationRun[\"status\"],\n): \"default\" | \"destructive\" | \"outline\" {\n if (status === \"error\") return \"destructive\";\n if (status === \"success\") return \"default\";\n return \"outline\";\n}\n\nfunction DetailField({\n label,\n value,\n mono = false,\n}: {\n label: string;\n value: string;\n mono?: boolean;\n}) {\n return (\n <div className=\"min-w-0\">\n <dt className=\"text-[11px] uppercase tracking-wide text-muted-foreground\">\n {label}\n </dt>\n <dd\n className={\n mono\n ? \"mt-1 break-words font-mono text-xs text-foreground\"\n : \"mt-1 break-words text-sm text-foreground\"\n }\n >\n {value}\n </dd>\n </div>\n );\n}\n\nfunction runAsLabel(value: DispatchAutomationItem[\"runAs\"]): string {\n if (value === \"creator\") return \"Creator identity\";\n if (value === \"shared\") return \"Shared identity\";\n return \"Default identity\";\n}\n\nexport function AutomationDetailsPanel({\n automation,\n isToggling = false,\n onToggle,\n}: AutomationDetailsPanelProps) {\n const t = useT();\n const runsQuery = useActionQuery<AutomationRun[]>(\n \"list-automation-runs\",\n {\n name: automation.name,\n scope: automationRunScope(automation),\n appId: automation.appId ?? \"dispatch\",\n },\n { staleTime: 5_000 },\n );\n const runs = runsQuery.data ?? [];\n const status = automationStatus(automation);\n const isScheduled = automation.triggerType === \"schedule\";\n const [copied, setCopied] = useState(false);\n const webhookUrl =\n automation.webhookPath && typeof window !== \"undefined\"\n ? window.location.origin + appPath(automation.webhookPath)\n : null;\n const triggerLabel =\n automation.triggerType === \"webhook\"\n ? t(\"jobs.webhook\", { defaultValue: \"Webhook\" })\n : isScheduled\n ? \"Schedule\"\n : \"Event\";\n const prompt = automation.body?.trim();\n const hasExecutionTarget = Boolean(\n automation.executionHostId ||\n automation.executionEngine ||\n automation.executionCwd,\n );\n const hasDelivery = Boolean(\n automation.deliveryPlatform ||\n automation.deliveryDestination ||\n automation.deliveryThreadRef,\n );\n\n return (\n <aside className=\"flex min-h-[34rem] min-w-0 flex-col overflow-hidden rounded-lg border bg-card\">\n <header className=\"flex items-start justify-between gap-3 border-b p-5\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span\n className={\n status.tone === \"danger\"\n ? \"size-2 shrink-0 rounded-full bg-destructive\"\n : status.tone === \"default\"\n ? \"size-2 shrink-0 rounded-full bg-primary\"\n : \"size-2 shrink-0 rounded-full bg-muted-foreground/40\"\n }\n />\n <Badge\n variant={status.tone === \"danger\" ? \"destructive\" : \"outline\"}\n className=\"h-5\"\n >\n {status.label}\n </Badge>\n </div>\n <h2 className=\"mt-2 break-words text-base font-semibold text-foreground\">\n {automation.name}\n </h2>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {triggerLabel} · {automationScopeLabel(automation)}\n </p>\n </div>\n </header>\n\n <div className=\"min-h-0 flex-1 space-y-5 overflow-y-auto p-5\">\n <section>\n <h3 className=\"text-sm font-semibold text-foreground\">Prompt</h3>\n {prompt ? (\n <pre className=\"mt-2 max-h-64 overflow-auto whitespace-pre-wrap break-words rounded-md bg-muted/40 p-3 font-sans text-sm leading-6 text-foreground\">\n {prompt}\n </pre>\n ) : (\n <p className=\"mt-2 rounded-md border border-dashed p-3 text-sm text-muted-foreground\">\n No prompt recorded.\n </p>\n )}\n </section>\n\n <section className=\"border-t pt-5\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n Configuration\n </h3>\n <dl className=\"mt-3 grid grid-cols-2 gap-x-4 gap-y-4\">\n <DetailField\n label=\"Trigger\"\n value={\n automation.triggerType === \"webhook\"\n ? t(\"jobs.webhookTrigger\", {\n defaultValue: \"Webhook-triggered\",\n })\n : isScheduled\n ? \"Scheduled\"\n : \"Event-triggered\"\n }\n />\n <DetailField\n label={isScheduled ? \"Schedule\" : \"Event\"}\n value={automationTarget(automation)}\n />\n {isScheduled ? (\n <>\n {automation.schedule ? (\n <DetailField\n label=\"Cron expression\"\n value={automation.schedule}\n mono\n />\n ) : null}\n <DetailField\n label=\"Timezone\"\n value={automation.timezone || \"Account default\"}\n />\n </>\n ) : null}\n {webhookUrl ? (\n <div className=\"col-span-2 rounded-md border border-primary/20 bg-primary/5 p-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-xs font-medium text-foreground\">\n {t(\"jobs.webhookUrl\", { defaultValue: \"Webhook URL\" })}\n </span>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 shrink-0 gap-1.5 text-xs\"\n onClick={() => {\n void writeClipboardText(webhookUrl).then((didCopy) => {\n setCopied(didCopy);\n if (didCopy) {\n window.setTimeout(() => setCopied(false), 1800);\n }\n });\n }}\n >\n {copied ? (\n <IconCheck className=\"size-3.5\" />\n ) : (\n <IconCopy className=\"size-3.5\" />\n )}\n {copied\n ? t(\"common.copied\", { defaultValue: \"Copied\" })\n : t(\"common.copy\", { defaultValue: \"Copy URL\" })}\n </Button>\n </div>\n <code className=\"mt-2 block break-all text-[11px] leading-5 text-muted-foreground\">\n {webhookUrl}\n </code>\n <p className=\"mt-2 text-xs text-muted-foreground\">\n {t(\"jobs.webhookUrlHint\", {\n defaultValue:\n \"Paste this URL into a service that sends HTTP POST webhooks.\",\n })}\n </p>\n </div>\n ) : null}\n <DetailField\n label=\"Condition\"\n value={automation.condition || \"Always\"}\n />\n <DetailField\n label=\"Domain\"\n value={automation.domain || \"Default\"}\n />\n <DetailField\n label=\"Model\"\n value={automation.model || \"Default model\"}\n />\n <DetailField label=\"Mode\" value={automation.mode || \"Agentic\"} />\n <DetailField label=\"Runs as\" value={runAsLabel(automation.runAs)} />\n {isScheduled ? (\n <DetailField\n label=\"Next run\"\n value={\n automation.enabled\n ? formatTimestamp(automation.nextRun)\n : \"Paused\"\n }\n />\n ) : null}\n <DetailField\n label=\"Last run\"\n value={formatTimestamp(automation.lastRun)}\n />\n <DetailField\n label=\"Last checked\"\n value={formatTimestamp(automation.lastCheck)}\n />\n <DetailField\n label=\"Created by\"\n value={automation.createdBy || \"Unknown\"}\n />\n </dl>\n </section>\n\n <section className=\"border-t pt-5\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n Capabilities\n </h3>\n {automation.mcpTools && automation.mcpTools.length > 0 ? (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {automation.mcpTools.map((toolName) => (\n <code\n key={toolName}\n className=\"max-w-full break-all rounded bg-muted px-1.5 py-1 text-[11px] text-muted-foreground\"\n >\n {toolName}\n </code>\n ))}\n </div>\n ) : (\n <p className=\"mt-2 text-sm text-muted-foreground\">\n No explicit tool allowlist.\n </p>\n )}\n </section>\n\n {hasExecutionTarget ? (\n <section className=\"border-t pt-5\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n Execution target\n </h3>\n <dl className=\"mt-3 grid grid-cols-2 gap-x-4 gap-y-4\">\n <DetailField\n label=\"Host\"\n value={automation.executionHostId || \"Server default\"}\n mono={Boolean(automation.executionHostId)}\n />\n <DetailField\n label=\"Engine\"\n value={automation.executionEngine || \"Default\"}\n />\n {automation.executionCwd ? (\n <DetailField\n label=\"Working directory\"\n value={automation.executionCwd}\n mono\n />\n ) : null}\n </dl>\n </section>\n ) : null}\n\n {hasDelivery ? (\n <section className=\"border-t pt-5\">\n <h3 className=\"text-sm font-semibold text-foreground\">Delivery</h3>\n <dl className=\"mt-3 grid grid-cols-2 gap-x-4 gap-y-4\">\n {automation.deliveryPlatform ? (\n <DetailField\n label=\"Platform\"\n value={automation.deliveryPlatform}\n />\n ) : null}\n {automation.deliveryDestination ? (\n <DetailField\n label=\"Destination\"\n value={automation.deliveryDestination}\n />\n ) : null}\n {automation.deliveryThreadRef ? (\n <DetailField\n label=\"Thread reference\"\n value={automation.deliveryThreadRef}\n mono\n />\n ) : null}\n </dl>\n </section>\n ) : null}\n\n {automation.lastError ? (\n <section className=\"flex items-start gap-2 border-t border-destructive/30 pt-5\">\n <IconAlertTriangle className=\"mt-0.5 size-4 shrink-0 text-destructive\" />\n <div className=\"min-w-0\">\n <h3 className=\"text-sm font-semibold text-destructive\">\n Latest scheduler result\n </h3>\n <p className=\"mt-1 break-words text-sm text-muted-foreground\">\n {automation.lastError}\n </p>\n </div>\n </section>\n ) : null}\n\n <section className=\"border-t pt-5\">\n <div className=\"flex items-center justify-between gap-3\">\n <h3 className=\"text-sm font-semibold text-foreground\">Past runs</h3>\n {runs.length > 0 ? (\n <Badge variant=\"outline\">{runs.length} shown</Badge>\n ) : null}\n </div>\n <div className=\"mt-3\">\n {runsQuery.isLoading ? (\n <div className=\"space-y-3 rounded-md border p-3\">\n {Array.from({ length: 3 }).map((_, index) => (\n <div key={index} className=\"space-y-2\">\n <Skeleton className=\"h-4 w-2/3\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n ))}\n </div>\n ) : runsQuery.isError ? (\n <ActionQueryError\n error={runsQuery.error}\n onRetry={() => void runsQuery.refetch()}\n />\n ) : runs.length === 0 ? (\n <p className=\"rounded-md border border-dashed p-3 text-sm text-muted-foreground\">\n No execution recorded yet.\n </p>\n ) : (\n <ul className=\"divide-y rounded-md border\">\n {runs.map((run) => {\n const debugPath = runDebugPath(run);\n const duration = formatDuration(run);\n return (\n <li key={run.id} className=\"space-y-2 p-3\">\n <div className=\"flex flex-wrap items-center gap-2 text-sm\">\n <Badge variant={runStatusVariant(run.status)}>\n {run.status}\n </Badge>\n <span className=\"text-muted-foreground\">\n {formatTimestamp(run.startedAt)}\n </span>\n {duration ? (\n <span className=\"inline-flex items-center gap-1 text-xs text-muted-foreground\">\n <IconClock className=\"size-3.5\" />\n {duration}\n </span>\n ) : null}\n {debugPath ? (\n <Link\n to={debugPath}\n className=\"ml-auto inline-flex items-center gap-1 text-xs font-medium text-foreground underline-offset-4 hover:underline\"\n >\n <IconExternalLink className=\"size-3.5\" />\n Open debug\n </Link>\n ) : null}\n </div>\n {run.error ? (\n <p className=\"break-words text-sm text-destructive\">\n {run.error}\n </p>\n ) : null}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n </section>\n </div>\n\n <footer className=\"flex flex-wrap items-center gap-2 border-t p-4\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onToggle}\n disabled={automation.canUpdate === false || isToggling}\n >\n {automation.enabled ? <IconPlayerPause /> : <IconPlayerPlay />}\n {automation.enabled ? \"Pause\" : \"Resume\"}\n </Button>\n {automation.canUpdate === false ? (\n <span className=\"text-xs text-muted-foreground\">Read-only</span>\n ) : null}\n </footer>\n </aside>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"automation-details-panel.js","sourceRoot":"","sources":["../../src/components/automation-details-panel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { appPath } from \"@agent-native/core/client/api-path\";\nimport { useActionQuery } from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport { writeClipboardText } from \"@agent-native/toolkit/clipboard\";\nimport {\n IconAlertTriangle,\n IconCheck,\n IconCopy,\n IconClock,\n IconExternalLink,\n IconPlayerPause,\n IconPlayerPlay,\n} from \"@tabler/icons-react\";\nimport { useState } from \"react\";\nimport { Link } from \"react-router\";\n\nimport {\n automationScopeLabel,\n automationStatus,\n automationTarget,\n} from \"../lib/automation-display\";\nimport {\n automationRunScope,\n type DispatchAutomationItem,\n} from \"../lib/automations\";\nimport { ActionQueryError } from \"./action-query-error\";\nimport { Badge } from \"./ui/badge\";\nimport { Button } from \"./ui/button\";\nimport { Skeleton } from \"./ui/skeleton\";\n\ninterface AutomationRun {\n id: string;\n runId: string | null;\n threadId: string | null;\n status: \"running\" | \"success\" | \"error\" | \"interrupted\";\n startedAt: number;\n finishedAt: number | null;\n error: string | null;\n}\n\nexport interface AutomationDetailsPanelProps {\n automation: DispatchAutomationItem;\n isToggling?: boolean;\n onToggle: () => void;\n}\n\nfunction formatTimestamp(value: number | string | null | undefined): string {\n if (value == null) return \"Not recorded\";\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? \"Unknown time\" : date.toLocaleString();\n}\n\nfunction formatDuration(run: AutomationRun): string | null {\n if (!run.finishedAt) return null;\n const seconds = Math.max(\n 0,\n Math.round((run.finishedAt - run.startedAt) / 1000),\n );\n return `${seconds}s`;\n}\n\nfunction runDebugPath(run: AutomationRun): string | null {\n const params = new URLSearchParams();\n if (run.runId) params.set(\"runId\", run.runId);\n else if (run.threadId) params.set(\"threadId\", run.threadId);\n else return null;\n return `/admin/thread-debug?${params.toString()}`;\n}\n\nfunction runStatusVariant(\n status: AutomationRun[\"status\"],\n): \"default\" | \"destructive\" | \"outline\" {\n if (status === \"error\") return \"destructive\";\n if (status === \"success\") return \"default\";\n return \"outline\";\n}\n\nfunction DetailField({\n label,\n value,\n mono = false,\n}: {\n label: string;\n value: string;\n mono?: boolean;\n}) {\n return (\n <div className=\"min-w-0\">\n <dt className=\"text-[11px] uppercase tracking-wide text-muted-foreground\">\n {label}\n </dt>\n <dd\n className={\n mono\n ? \"mt-1 break-words font-mono text-xs text-foreground\"\n : \"mt-1 break-words text-sm text-foreground\"\n }\n >\n {value}\n </dd>\n </div>\n );\n}\n\nfunction runAsLabel(value: DispatchAutomationItem[\"runAs\"]): string {\n if (value === \"creator\") return \"Creator identity\";\n if (value === \"shared\") return \"Shared identity\";\n return \"Default identity\";\n}\n\nexport function AutomationDetailsPanel({\n automation,\n isToggling = false,\n onToggle,\n}: AutomationDetailsPanelProps) {\n const t = useT();\n const runsQuery = useActionQuery<AutomationRun[]>(\n \"list-automation-runs\",\n {\n name: automation.name,\n scope: automationRunScope(automation),\n appId: automation.appId ?? \"dispatch\",\n },\n { staleTime: 5_000 },\n );\n const runs = runsQuery.data ?? [];\n const status = automationStatus(automation);\n const isScheduled = automation.triggerType === \"schedule\";\n const [copied, setCopied] = useState(false);\n const webhookUrl =\n automation.webhookPath && typeof window !== \"undefined\"\n ? window.location.origin + appPath(automation.webhookPath)\n : null;\n const triggerLabel =\n automation.triggerType === \"webhook\"\n ? t(\"jobs.webhook\", { defaultValue: \"Webhook\" })\n : isScheduled\n ? \"Schedule\"\n : \"Event\";\n const prompt = automation.body?.trim();\n const hasExecutionTarget = Boolean(\n automation.executionHostId ||\n automation.executionEngine ||\n automation.executionCwd,\n );\n const hasDelivery = Boolean(\n automation.deliveryPlatform ||\n automation.deliveryDestination ||\n automation.deliveryThreadRef,\n );\n\n return (\n <aside className=\"flex min-h-[34rem] min-w-0 flex-col overflow-hidden rounded-lg border bg-card\">\n <header className=\"flex items-start justify-between gap-3 border-b p-5\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span\n className={\n status.tone === \"danger\"\n ? \"size-2 shrink-0 rounded-full bg-destructive\"\n : status.tone === \"default\"\n ? \"size-2 shrink-0 rounded-full bg-primary\"\n : \"size-2 shrink-0 rounded-full bg-muted-foreground/40\"\n }\n />\n <Badge\n variant={status.tone === \"danger\" ? \"destructive\" : \"outline\"}\n className=\"h-5\"\n >\n {status.label}\n </Badge>\n </div>\n <h2 className=\"mt-2 break-words text-base font-semibold text-foreground\">\n {automation.name}\n </h2>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {triggerLabel} · {automationScopeLabel(automation)}\n </p>\n </div>\n </header>\n\n <div className=\"min-h-0 flex-1 space-y-5 overflow-y-auto p-5\">\n <section>\n <h3 className=\"text-sm font-semibold text-foreground\">Prompt</h3>\n {prompt ? (\n <pre className=\"mt-2 max-h-64 overflow-auto whitespace-pre-wrap break-words rounded-md bg-muted/40 p-3 font-sans text-sm leading-6 text-foreground\">\n {prompt}\n </pre>\n ) : (\n <p className=\"mt-2 rounded-md border border-dashed p-3 text-sm text-muted-foreground\">\n No prompt recorded.\n </p>\n )}\n </section>\n\n <section className=\"border-t pt-5\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n Configuration\n </h3>\n <dl className=\"mt-3 grid grid-cols-2 gap-x-4 gap-y-4\">\n <DetailField\n label=\"Trigger\"\n value={\n automation.triggerType === \"webhook\"\n ? t(\"jobs.webhookTrigger\", {\n defaultValue: \"Webhook-triggered\",\n })\n : isScheduled\n ? \"Scheduled\"\n : \"Event-triggered\"\n }\n />\n <DetailField\n label={isScheduled ? \"Schedule\" : \"Event\"}\n value={automationTarget(automation)}\n />\n {isScheduled ? (\n <>\n {automation.schedule ? (\n <DetailField\n label=\"Cron expression\"\n value={automation.schedule}\n mono\n />\n ) : null}\n <DetailField\n label=\"Timezone\"\n value={automation.timezone || \"Account default\"}\n />\n </>\n ) : null}\n {webhookUrl ? (\n <div className=\"col-span-2 rounded-md border border-primary/20 bg-primary/5 p-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-xs font-medium text-foreground\">\n {t(\"jobs.webhookUrl\", { defaultValue: \"Webhook URL\" })}\n </span>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 shrink-0 gap-1.5 text-xs\"\n onClick={() => {\n void writeClipboardText(webhookUrl).then((didCopy) => {\n setCopied(didCopy);\n if (didCopy) {\n window.setTimeout(() => setCopied(false), 1800);\n }\n });\n }}\n >\n {copied ? (\n <IconCheck className=\"size-3.5\" />\n ) : (\n <IconCopy className=\"size-3.5\" />\n )}\n {copied\n ? t(\"common.copied\", { defaultValue: \"Copied\" })\n : t(\"common.copy\", { defaultValue: \"Copy URL\" })}\n </Button>\n </div>\n <code className=\"mt-2 block break-all text-[11px] leading-5 text-muted-foreground\">\n {webhookUrl}\n </code>\n <p className=\"mt-2 text-xs text-muted-foreground\">\n {t(\"jobs.webhookUrlHint\", {\n defaultValue:\n \"Paste this URL into a service that sends HTTP POST webhooks.\",\n })}\n </p>\n </div>\n ) : null}\n <DetailField\n label=\"Condition\"\n value={automation.condition || \"Always\"}\n />\n <DetailField\n label=\"Domain\"\n value={automation.domain || \"Default\"}\n />\n <DetailField\n label=\"Model\"\n value={automation.model || \"Default model\"}\n />\n <DetailField label=\"Mode\" value={automation.mode || \"Agentic\"} />\n <DetailField label=\"Runs as\" value={runAsLabel(automation.runAs)} />\n {isScheduled ? (\n <DetailField\n label=\"Next run\"\n value={\n automation.enabled\n ? formatTimestamp(automation.nextRun)\n : \"Paused\"\n }\n />\n ) : null}\n <DetailField\n label=\"Last run\"\n value={formatTimestamp(automation.lastRun)}\n />\n <DetailField\n label=\"Last checked\"\n value={formatTimestamp(automation.lastCheck)}\n />\n <DetailField\n label=\"Created by\"\n value={automation.createdBy || \"Unknown\"}\n />\n </dl>\n </section>\n\n <section className=\"border-t pt-5\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n Capabilities\n </h3>\n {automation.mcpTools && automation.mcpTools.length > 0 ? (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {automation.mcpTools.map((toolName) => (\n <code\n key={toolName}\n className=\"max-w-full break-all rounded bg-muted px-1.5 py-1 text-[11px] text-muted-foreground\"\n >\n {toolName}\n </code>\n ))}\n </div>\n ) : (\n <p className=\"mt-2 text-sm text-muted-foreground\">\n No explicit tool allowlist.\n </p>\n )}\n </section>\n\n {hasExecutionTarget ? (\n <section className=\"border-t pt-5\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n Execution target\n </h3>\n <dl className=\"mt-3 grid grid-cols-2 gap-x-4 gap-y-4\">\n <DetailField\n label=\"Host\"\n value={automation.executionHostId || \"Server default\"}\n mono={Boolean(automation.executionHostId)}\n />\n <DetailField\n label=\"Engine\"\n value={automation.executionEngine || \"Default\"}\n />\n {automation.executionCwd ? (\n <DetailField\n label=\"Working directory\"\n value={automation.executionCwd}\n mono\n />\n ) : null}\n </dl>\n </section>\n ) : null}\n\n {hasDelivery ? (\n <section className=\"border-t pt-5\">\n <h3 className=\"text-sm font-semibold text-foreground\">Delivery</h3>\n <dl className=\"mt-3 grid grid-cols-2 gap-x-4 gap-y-4\">\n {automation.deliveryPlatform ? (\n <DetailField\n label=\"Platform\"\n value={automation.deliveryPlatform}\n />\n ) : null}\n {automation.deliveryDestination ? (\n <DetailField\n label=\"Destination\"\n value={automation.deliveryDestination}\n />\n ) : null}\n {automation.deliveryThreadRef ? (\n <DetailField\n label=\"Thread reference\"\n value={automation.deliveryThreadRef}\n mono\n />\n ) : null}\n </dl>\n </section>\n ) : null}\n\n {automation.lastError ? (\n <section className=\"flex items-start gap-2 border-t border-destructive/30 pt-5\">\n <IconAlertTriangle className=\"mt-0.5 size-4 shrink-0 text-destructive\" />\n <div className=\"min-w-0\">\n <h3 className=\"text-sm font-semibold text-destructive\">\n Latest scheduler result\n </h3>\n <p className=\"mt-1 break-words text-sm text-muted-foreground\">\n {automation.lastError}\n </p>\n </div>\n </section>\n ) : null}\n\n <section className=\"border-t pt-5\">\n <div className=\"flex items-center justify-between gap-3\">\n <h3 className=\"text-sm font-semibold text-foreground\">Past runs</h3>\n {runs.length > 0 ? (\n <Badge variant=\"outline\">{runs.length} shown</Badge>\n ) : null}\n </div>\n <div className=\"mt-3\">\n {runsQuery.isLoading ? (\n <div className=\"space-y-3 rounded-md border p-3\">\n {Array.from({ length: 3 }).map((_, index) => (\n <div key={index} className=\"space-y-2\">\n <Skeleton className=\"h-4 w-2/3\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n ))}\n </div>\n ) : runsQuery.isError ? (\n <ActionQueryError\n error={runsQuery.error}\n onRetry={() => void runsQuery.refetch()}\n />\n ) : runs.length === 0 ? (\n <p className=\"rounded-md border border-dashed p-3 text-sm text-muted-foreground\">\n No execution recorded yet.\n </p>\n ) : (\n <ul className=\"divide-y rounded-md border\">\n {runs.map((run) => {\n const debugPath = runDebugPath(run);\n const duration = formatDuration(run);\n return (\n <li key={run.id} className=\"space-y-2 p-3\">\n <div className=\"flex flex-wrap items-center gap-2 text-sm\">\n <Badge variant={runStatusVariant(run.status)}>\n {run.status}\n </Badge>\n <span className=\"text-muted-foreground\">\n {formatTimestamp(run.startedAt)}\n </span>\n {duration ? (\n <span className=\"inline-flex items-center gap-1 text-xs text-muted-foreground\">\n <IconClock className=\"size-3.5\" />\n {duration}\n </span>\n ) : null}\n {debugPath ? (\n <Link\n to={debugPath}\n className=\"ml-auto inline-flex items-center gap-1 text-xs font-medium text-foreground underline-offset-4 hover:underline\"\n >\n <IconExternalLink className=\"size-3.5\" />\n Open debug\n </Link>\n ) : null}\n </div>\n {run.error ? (\n <p className=\"break-words text-sm text-destructive\">\n {run.error}\n </p>\n ) : null}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n </section>\n </div>\n\n <footer className=\"flex flex-wrap items-center gap-2 border-t p-4\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onToggle}\n disabled={automation.canUpdate === false || isToggling}\n >\n {automation.enabled ? <IconPlayerPause /> : <IconPlayerPlay />}\n {automation.enabled ? \"Pause\" : \"Resume\"}\n </Button>\n {automation.canUpdate === false ? (\n <span className=\"text-xs text-muted-foreground\">Read-only</span>\n ) : null}\n </footer>\n </aside>\n );\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { AppOpenActions } from "@agent-native/core/client/chat-first";
|
|
3
2
|
import { useT } from "@agent-native/core/client/i18n";
|
|
3
|
+
import { AppOpenActions } from "@agent-native/toolkit/app/chat/chat-first";
|
|
4
4
|
import { IconArrowUpRight, IconPlus } from "@tabler/icons-react";
|
|
5
5
|
import { useMemo, useState } from "react";
|
|
6
6
|
import { Link } from "react-router";
|