@agent-native/dispatch 0.38.15 → 0.38.16-nightly-20260927213438

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/actions/create-workspace-resource.d.ts +13 -13
  2. package/dist/actions/provider-api-register.d.ts +12 -12
  3. package/dist/components/automation-create-dialog.js +4 -4
  4. package/dist/components/automation-create-dialog.js.map +1 -1
  5. package/dist/components/layout/Header.js +1 -1
  6. package/dist/components/layout/Header.js.map +1 -1
  7. package/dist/components/layout/Layout.d.ts +7 -0
  8. package/dist/components/layout/Layout.d.ts.map +1 -1
  9. package/dist/components/layout/Layout.js +19 -4
  10. package/dist/components/layout/Layout.js.map +1 -1
  11. package/dist/components/messaging-setup-panel.d.ts.map +1 -1
  12. package/dist/components/messaging-setup-panel.js +7 -28
  13. package/dist/components/messaging-setup-panel.js.map +1 -1
  14. package/dist/components/transactional-email-send-log.js +1 -1
  15. package/dist/components/transactional-email-send-log.js.map +1 -1
  16. package/dist/components/ui/alert-dialog.d.ts +1 -20
  17. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  18. package/dist/components/ui/alert-dialog.js +1 -26
  19. package/dist/components/ui/alert-dialog.js.map +1 -1
  20. package/dist/components/ui/button.d.ts +1 -11
  21. package/dist/components/ui/button.d.ts.map +1 -1
  22. package/dist/components/ui/button.js +1 -33
  23. package/dist/components/ui/button.js.map +1 -1
  24. package/dist/components/ui/carousel.d.ts +2 -2
  25. package/dist/components/ui/carousel.d.ts.map +1 -1
  26. package/dist/components/ui/input.d.ts +1 -3
  27. package/dist/components/ui/input.d.ts.map +1 -1
  28. package/dist/components/ui/input.js +1 -8
  29. package/dist/components/ui/input.js.map +1 -1
  30. package/dist/components/ui/sidebar.d.ts +4 -2
  31. package/dist/components/ui/sidebar.d.ts.map +1 -1
  32. package/dist/components/ui/switch.d.ts +1 -4
  33. package/dist/components/ui/switch.d.ts.map +1 -1
  34. package/dist/components/ui/switch.js +1 -7
  35. package/dist/components/ui/switch.js.map +1 -1
  36. package/dist/components/ui/tabs.d.ts +1 -7
  37. package/dist/components/ui/tabs.d.ts.map +1 -1
  38. package/dist/components/ui/tabs.js +1 -12
  39. package/dist/components/ui/tabs.js.map +1 -1
  40. package/dist/components/ui/toggle.d.ts +1 -12
  41. package/dist/components/ui/toggle.d.ts.map +1 -1
  42. package/dist/components/ui/toggle.js +1 -25
  43. package/dist/components/ui/toggle.js.map +1 -1
  44. package/dist/components/usage-alerts-panel.d.ts.map +1 -1
  45. package/dist/components/usage-alerts-panel.js +1 -1
  46. package/dist/components/usage-alerts-panel.js.map +1 -1
  47. package/dist/components/workspace-app-search.d.ts.map +1 -1
  48. package/dist/components/workspace-app-search.js +1 -1
  49. package/dist/components/workspace-app-search.js.map +1 -1
  50. package/dist/routes/pages/automations.d.ts.map +1 -1
  51. package/dist/routes/pages/automations.js +2 -2
  52. package/dist/routes/pages/automations.js.map +1 -1
  53. package/dist/routes/pages/metrics.d.ts.map +1 -1
  54. package/dist/routes/pages/metrics.js +1 -1
  55. package/dist/routes/pages/metrics.js.map +1 -1
  56. package/dist/routes/pages/settings.d.ts +9 -0
  57. package/dist/routes/pages/settings.d.ts.map +1 -1
  58. package/dist/routes/pages/settings.js +65 -12
  59. package/dist/routes/pages/settings.js.map +1 -1
  60. package/dist/routes/pages/thread-debug.js +1 -1
  61. package/dist/routes/pages/thread-debug.js.map +1 -1
  62. package/dist/routes/pages/vault.d.ts.map +1 -1
  63. package/dist/routes/pages/vault.js +2 -2
  64. package/dist/routes/pages/vault.js.map +1 -1
  65. package/dist/server/lib/usage-metrics-store.js +2 -3
  66. package/dist/server/lib/usage-metrics-store.js.map +1 -1
  67. package/dist/server/plugins/db.d.ts.map +1 -1
  68. package/dist/server/plugins/db.js +44 -0
  69. package/dist/server/plugins/db.js.map +1 -1
  70. package/package.json +4 -4
  71. package/src/components/automation-create-dialog.tsx +6 -6
  72. package/src/components/layout/Header.tsx +2 -2
  73. package/src/components/layout/Layout.spec.tsx +28 -0
  74. package/src/components/layout/Layout.tsx +73 -43
  75. package/src/components/messaging-setup-panel.spec.tsx +5 -1
  76. package/src/components/messaging-setup-panel.tsx +9 -45
  77. package/src/components/transactional-email-send-log.tsx +1 -1
  78. package/src/components/ui/alert-dialog.tsx +1 -139
  79. package/src/components/ui/button.tsx +1 -56
  80. package/src/components/ui/input.tsx +1 -22
  81. package/src/components/ui/switch.tsx +1 -27
  82. package/src/components/ui/tabs.tsx +1 -53
  83. package/src/components/ui/toggle.tsx +1 -43
  84. package/src/components/usage-alerts-panel.tsx +6 -12
  85. package/src/components/workspace-app-search.tsx +2 -1
  86. package/src/routes/pages/automations.tsx +4 -2
  87. package/src/routes/pages/metrics.tsx +2 -1
  88. package/src/routes/pages/settings.spec.tsx +179 -0
  89. package/src/routes/pages/settings.tsx +179 -119
  90. package/src/routes/pages/thread-debug.tsx +1 -1
  91. package/src/routes/pages/vault.tsx +3 -2
  92. package/src/server/lib/usage-metrics-store.spec.ts +1 -0
  93. package/src/server/lib/usage-metrics-store.ts +2 -2
  94. package/src/server/plugins/db.ts +49 -0
@@ -6,6 +6,19 @@ declare const _default: import("@agent-native/core/action").ActionDefinition<{
6
6
  content: string;
7
7
  scope: "all" | "selected";
8
8
  }, {
9
+ id: string;
10
+ ownerEmail: string;
11
+ orgId: string | null;
12
+ kind: string;
13
+ name: string;
14
+ description: string | null;
15
+ path: string;
16
+ content: string;
17
+ scope: string;
18
+ createdBy: string;
19
+ createdAt: number;
20
+ updatedAt: number;
21
+ } | {
9
22
  id: string;
10
23
  ownerEmail: string;
11
24
  orgId: string | null;
@@ -22,19 +35,6 @@ declare const _default: import("@agent-native/core/action").ActionDefinition<{
22
35
  reviewedAt: number | null;
23
36
  createdAt: number;
24
37
  updatedAt: number;
25
- } | {
26
- id: string;
27
- ownerEmail: string;
28
- orgId: string | null;
29
- kind: string;
30
- name: string;
31
- description: string | null;
32
- path: string;
33
- content: string;
34
- scope: string;
35
- createdBy: string;
36
- createdAt: number;
37
- updatedAt: number;
38
38
  }>;
39
39
  export default _default;
40
40
  //# sourceMappingURL=create-workspace-resource.d.ts.map
@@ -47,10 +47,10 @@ 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
- id?: undefined;
51
- provider?: undefined;
52
50
  message?: undefined;
51
+ id?: undefined;
53
52
  deleted?: undefined;
53
+ found?: undefined;
54
54
  providers: {
55
55
  id: string;
56
56
  label: string;
@@ -61,45 +61,45 @@ declare const _default: import("node_modules/@agent-native/core/dist").ActionDef
61
61
  updatedAt: number;
62
62
  }[];
63
63
  count: number;
64
- found?: undefined;
64
+ provider?: undefined;
65
65
  registered?: undefined;
66
66
  label?: undefined;
67
67
  } | {
68
- id?: undefined;
69
68
  message?: undefined;
70
- count?: undefined;
69
+ id?: undefined;
71
70
  deleted?: undefined;
71
+ count?: undefined;
72
72
  providers?: undefined;
73
73
  found: boolean;
74
74
  provider: import("node_modules/@agent-native/core/dist/provider-api").CustomProviderConfig;
75
75
  registered?: undefined;
76
76
  label?: undefined;
77
77
  } | {
78
- provider?: undefined;
79
78
  message?: undefined;
80
- count?: undefined;
81
79
  deleted?: undefined;
80
+ count?: undefined;
82
81
  providers?: undefined;
82
+ provider?: undefined;
83
83
  found: boolean;
84
84
  id: string;
85
85
  registered?: undefined;
86
86
  label?: undefined;
87
87
  } | {
88
- provider?: undefined;
89
88
  message?: undefined;
89
+ found?: undefined;
90
90
  count?: undefined;
91
91
  providers?: undefined;
92
- found?: undefined;
92
+ provider?: undefined;
93
93
  deleted: boolean;
94
94
  id: string;
95
95
  registered?: undefined;
96
96
  label?: undefined;
97
97
  } | {
98
- provider?: undefined;
99
- count?: undefined;
100
98
  deleted?: undefined;
101
- providers?: undefined;
102
99
  found?: undefined;
100
+ count?: undefined;
101
+ providers?: undefined;
102
+ provider?: undefined;
103
103
  registered: boolean;
104
104
  id: string;
105
105
  label: string;
@@ -67,15 +67,15 @@ function ScheduleFields({ draft, saving, onChange, }) {
67
67
  const customMinute = Number(draft.time.split(":")[1] ?? 0);
68
68
  return (_jsxs("div", { className: "space-y-3 rounded-lg border border-border/70 bg-muted/20 p-3", children: [_jsxs("div", { className: "grid gap-3 sm:grid-cols-[1fr_1fr]", children: [_jsxs("label", { className: "space-y-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: t("jobs.repeatEvery", { defaultValue: "Repeat every" }) }), _jsx(Input, { type: "number", min: 1, max: 31, value: draft.interval, disabled: saving, onChange: (event) => onChange({
69
69
  interval: Math.min(draft.unit === "day" ? 1 : 31, Math.max(1, Number(event.target.value) || 1)),
70
- }), className: "h-9 bg-background text-sm" })] }), _jsxs("label", { className: "space-y-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: t("jobs.scheduleUnit", { defaultValue: "Unit" }) }), _jsxs(Select, { value: draft.unit, disabled: saving, onValueChange: (value) => onChange({
70
+ }), className: "bg-background text-sm" })] }), _jsxs("label", { className: "space-y-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: t("jobs.scheduleUnit", { defaultValue: "Unit" }) }), _jsxs(Select, { value: draft.unit, disabled: saving, onValueChange: (value) => onChange({
71
71
  unit: value,
72
72
  ...(value === "day" ? { interval: 1 } : {}),
73
- }), children: [_jsx(SelectTrigger, { className: "h-9 bg-background text-sm", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "hour", children: t("jobs.hours", { defaultValue: "hour(s)" }) }), _jsx(SelectItem, { value: "day", children: t("jobs.day", { defaultValue: "day" }) }), _jsx(SelectItem, { value: "week", children: t("jobs.weeks", { defaultValue: "week(s)" }) }), _jsx(SelectItem, { value: "month", children: t("jobs.months", { defaultValue: "month(s)" }) })] })] })] })] }), draft.unit === "hour" ? (_jsxs("label", { className: "block space-y-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: t("jobs.atMinute", { defaultValue: "At minute" }) }), _jsx(Input, { type: "number", min: 0, max: 59, value: customMinute, disabled: saving, onChange: (event) => onChange({
73
+ }), children: [_jsx(SelectTrigger, { className: "bg-background text-sm", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "hour", children: t("jobs.hours", { defaultValue: "hour(s)" }) }), _jsx(SelectItem, { value: "day", children: t("jobs.day", { defaultValue: "day" }) }), _jsx(SelectItem, { value: "week", children: t("jobs.weeks", { defaultValue: "week(s)" }) }), _jsx(SelectItem, { value: "month", children: t("jobs.months", { defaultValue: "month(s)" }) })] })] })] })] }), draft.unit === "hour" ? (_jsxs("label", { className: "block space-y-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: t("jobs.atMinute", { defaultValue: "At minute" }) }), _jsx(Input, { type: "number", min: 0, max: 59, value: customMinute, disabled: saving, onChange: (event) => onChange({
74
74
  time: "00:" +
75
75
  String(Math.min(59, Math.max(0, Number(event.target.value) || 0))).padStart(2, "0"),
76
- }), className: "h-9 bg-background text-sm" })] })) : null, draft.unit === "week" ? (_jsxs("label", { className: "block space-y-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: t("jobs.onDay", { defaultValue: "On" }) }), _jsxs(Select, { value: String(draft.weekday), disabled: saving, onValueChange: (value) => onChange({ weekday: Number(value) }), children: [_jsx(SelectTrigger, { className: "h-9 bg-background text-sm", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AUTOMATION_WEEKDAYS.map((day) => (_jsx(SelectItem, { value: String(day.value), children: day.short }, day.value))) })] })] })) : null, draft.unit === "month" ? (_jsxs("label", { className: "block space-y-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: t("jobs.dayOfMonth", { defaultValue: "Day of month" }) }), _jsx(Input, { type: "number", min: 1, max: 31, value: draft.monthDay, disabled: saving, onChange: (event) => onChange({
76
+ }), className: "bg-background text-sm" })] })) : null, draft.unit === "week" ? (_jsxs("label", { className: "block space-y-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: t("jobs.onDay", { defaultValue: "On" }) }), _jsxs(Select, { value: String(draft.weekday), disabled: saving, onValueChange: (value) => onChange({ weekday: Number(value) }), children: [_jsx(SelectTrigger, { className: "bg-background text-sm", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AUTOMATION_WEEKDAYS.map((day) => (_jsx(SelectItem, { value: String(day.value), children: day.short }, day.value))) })] })] })) : null, draft.unit === "month" ? (_jsxs("label", { className: "block space-y-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: t("jobs.dayOfMonth", { defaultValue: "Day of month" }) }), _jsx(Input, { type: "number", min: 1, max: 31, value: draft.monthDay, disabled: saving, onChange: (event) => onChange({
77
77
  monthDay: Math.min(31, Math.max(1, Number(event.target.value) || 1)),
78
- }), className: "h-9 bg-background text-sm" })] })) : null, draft.unit !== "hour" ? (_jsxs("label", { className: "block space-y-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: t("jobs.atTime", { defaultValue: "At" }) }), _jsx(Input, { type: "time", value: draft.time, disabled: saving, onChange: (event) => onChange({ time: event.target.value }), className: "h-9 bg-background text-sm" })] })) : null] }));
78
+ }), className: "bg-background text-sm" })] })) : null, draft.unit !== "hour" ? (_jsxs("label", { className: "block space-y-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: t("jobs.atTime", { defaultValue: "At" }) }), _jsx(Input, { type: "time", value: draft.time, disabled: saving, onChange: (event) => onChange({ time: event.target.value }), className: "bg-background text-sm" })] })) : null] }));
79
79
  }
80
80
  function ScheduleBuilder({ saving, timezone, onTimezoneChange, onChange, }) {
81
81
  const t = useT();
@@ -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=\"h-9 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=\"h-9 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=\"h-9 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=\"h-9 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=\"h-9 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=\"h-9 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 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"]}
@@ -56,6 +56,6 @@ export function Header({ onOpenMobile, showAgentToggle = true, }) {
56
56
  }));
57
57
  });
58
58
  }
59
- return (_jsxs("header", { className: "flex h-12 shrink-0 items-center gap-3 border-b border-border bg-background px-4 lg:px-6", children: [onOpenMobile ? (_jsx(Button, { variant: "ghost", size: "icon", className: "h-8 w-8 lg:hidden cursor-pointer", onClick: onOpenMobile, "aria-label": "Open navigation", children: _jsx(IconLayoutSidebar, {}) })) : null, _jsx("div", { className: "flex items-center gap-3 flex-1 min-w-0", children: title ?? (_jsx("h1", { className: "text-lg font-semibold tracking-tight truncate", children: resolveTitle(location.pathname) })) }), _jsxs("div", { className: "flex items-center gap-2 shrink-0", children: [actions, _jsx(RunsTray, { limit: 8, onOpenThread: openRunThread }), showAgentToggle ? (_jsx(AgentToggleButton, { className: "h-8 w-8 rounded-md hover:bg-accent" })) : null] })] }));
59
+ return (_jsxs("header", { className: "flex h-12 shrink-0 items-center gap-3 border-b border-border bg-background px-4 lg:px-6", children: [onOpenMobile ? (_jsx(Button, { variant: "ghost", size: "icon-sm", className: "lg:hidden cursor-pointer", onClick: onOpenMobile, "aria-label": "Open navigation", children: _jsx(IconLayoutSidebar, {}) })) : null, _jsx("div", { className: "flex items-center gap-3 flex-1 min-w-0", children: title ?? (_jsx("h1", { className: "text-lg font-semibold tracking-tight truncate", children: resolveTitle(location.pathname) })) }), _jsxs("div", { className: "flex items-center gap-2 shrink-0", children: [actions, _jsx(RunsTray, { limit: 8, onOpenThread: openRunThread }), showAgentToggle ? (_jsx(AgentToggleButton, { className: "h-8 w-8 rounded-md hover:bg-accent" })) : null] })] }));
60
60
  }
61
61
  //# sourceMappingURL=Header.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/components/layout/Header.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AgentToggleButton } from \"@agent-native/core/client/agent-chat\";\nimport { RunsTray } from \"@agent-native/core/client/progress\";\nimport { IconLayoutSidebar } from \"@tabler/icons-react\";\nimport { useLocation, useNavigate } from \"react-router\";\n\nimport { Button } from \"../ui/button\";\nimport { useHeaderTitle, useHeaderActions } from \"./HeaderActions\";\n\nconst pageTitles: Record<string, string> = {\n \"/\": \"Overview\",\n \"/overview\": \"Overview\",\n \"/vault\": \"Vault\",\n \"/integrations\": \"Integrations\",\n \"/workspace\": \"Resources\",\n \"/messaging\": \"Messaging\",\n \"/agents\": \"Agents\",\n \"/destinations\": \"Destinations\",\n \"/identities\": \"Identities\",\n \"/approvals\": \"Approvals\",\n \"/automations\": \"Automations\",\n \"/audit\": \"Audit\",\n \"/dreams\": \"Dreams\",\n \"/thread-debug\": \"Thread Debug\",\n \"/transactional-email\": \"Transactional email\",\n \"/settings\": \"Settings\",\n};\n\nfunction resolveTitle(pathname: string): string {\n if (pathname === \"/admin\" || pathname === \"/admin/\") return \"Admin\";\n if (pathname.startsWith(\"/admin/\")) {\n const adminPath = pathname.slice(\"/admin\".length);\n return pageTitles[adminPath] ?? \"Admin\";\n }\n if (pageTitles[pathname]) return pageTitles[pathname];\n\n if (pathname.startsWith(\"/extensions\")) return \"Extensions\";\n\n return \"Dispatch\";\n}\n\nexport function Header({\n onOpenMobile,\n showAgentToggle = true,\n}: {\n onOpenMobile?: () => void;\n showAgentToggle?: boolean;\n}) {\n const location = useLocation();\n const navigate = useNavigate();\n const title = useHeaderTitle();\n const actions = useHeaderActions();\n\n function openRunThread(threadId: string) {\n void navigate(\"/chat\", {\n state: {\n dispatchThread: {\n id: `${Date.now()}-${threadId}`,\n threadId,\n },\n },\n });\n window.requestAnimationFrame(() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:open-thread\", {\n detail: { threadId },\n }),\n );\n });\n }\n\n return (\n <header className=\"flex h-12 shrink-0 items-center gap-3 border-b border-border bg-background px-4 lg:px-6\">\n {onOpenMobile ? (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 lg:hidden cursor-pointer\"\n onClick={onOpenMobile}\n aria-label=\"Open navigation\"\n >\n <IconLayoutSidebar />\n </Button>\n ) : null}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n {title ?? (\n <h1 className=\"text-lg font-semibold tracking-tight truncate\">\n {resolveTitle(location.pathname)}\n </h1>\n )}\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {actions}\n <RunsTray limit={8} onOpenThread={openRunThread} />\n {showAgentToggle ? (\n <AgentToggleButton className=\"h-8 w-8 rounded-md hover:bg-accent\" />\n ) : null}\n </div>\n </header>\n );\n}\n"]}
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/components/layout/Header.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AgentToggleButton } from \"@agent-native/core/client/agent-chat\";\nimport { RunsTray } from \"@agent-native/core/client/progress\";\nimport { IconLayoutSidebar } from \"@tabler/icons-react\";\nimport { useLocation, useNavigate } from \"react-router\";\n\nimport { Button } from \"../ui/button\";\nimport { useHeaderTitle, useHeaderActions } from \"./HeaderActions\";\n\nconst pageTitles: Record<string, string> = {\n \"/\": \"Overview\",\n \"/overview\": \"Overview\",\n \"/vault\": \"Vault\",\n \"/integrations\": \"Integrations\",\n \"/workspace\": \"Resources\",\n \"/messaging\": \"Messaging\",\n \"/agents\": \"Agents\",\n \"/destinations\": \"Destinations\",\n \"/identities\": \"Identities\",\n \"/approvals\": \"Approvals\",\n \"/automations\": \"Automations\",\n \"/audit\": \"Audit\",\n \"/dreams\": \"Dreams\",\n \"/thread-debug\": \"Thread Debug\",\n \"/transactional-email\": \"Transactional email\",\n \"/settings\": \"Settings\",\n};\n\nfunction resolveTitle(pathname: string): string {\n if (pathname === \"/admin\" || pathname === \"/admin/\") return \"Admin\";\n if (pathname.startsWith(\"/admin/\")) {\n const adminPath = pathname.slice(\"/admin\".length);\n return pageTitles[adminPath] ?? \"Admin\";\n }\n if (pageTitles[pathname]) return pageTitles[pathname];\n\n if (pathname.startsWith(\"/extensions\")) return \"Extensions\";\n\n return \"Dispatch\";\n}\n\nexport function Header({\n onOpenMobile,\n showAgentToggle = true,\n}: {\n onOpenMobile?: () => void;\n showAgentToggle?: boolean;\n}) {\n const location = useLocation();\n const navigate = useNavigate();\n const title = useHeaderTitle();\n const actions = useHeaderActions();\n\n function openRunThread(threadId: string) {\n void navigate(\"/chat\", {\n state: {\n dispatchThread: {\n id: `${Date.now()}-${threadId}`,\n threadId,\n },\n },\n });\n window.requestAnimationFrame(() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:open-thread\", {\n detail: { threadId },\n }),\n );\n });\n }\n\n return (\n <header className=\"flex h-12 shrink-0 items-center gap-3 border-b border-border bg-background px-4 lg:px-6\">\n {onOpenMobile ? (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"lg:hidden cursor-pointer\"\n onClick={onOpenMobile}\n aria-label=\"Open navigation\"\n >\n <IconLayoutSidebar />\n </Button>\n ) : null}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n {title ?? (\n <h1 className=\"text-lg font-semibold tracking-tight truncate\">\n {resolveTitle(location.pathname)}\n </h1>\n )}\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {actions}\n <RunsTray limit={8} onOpenThread={openRunThread} />\n {showAgentToggle ? (\n <AgentToggleButton className=\"h-8 w-8 rounded-md hover:bg-accent\" />\n ) : null}\n </div>\n </header>\n );\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { type ChatFirstAppRegistration, type ChatFirstAppLayoutPreference } from "@agent-native/core/client/agent-chat";
2
2
  import { type ChatFirstAppItem, type ChatFirstCopy, type ChatFirstPrimaryTab } from "@agent-native/core/client/chat-first";
3
+ import { type FeatureFlagState } from "@agent-native/core/client/feature-flags";
3
4
  import { type ComponentType, type ReactNode } from "react";
4
5
  export { buildChatFirstEmbedSessionInput } from "../workspace-app-host.js";
5
6
  export type DispatchNavSection = "primary" | "operations";
@@ -53,6 +54,12 @@ export declare const CHAT_FIRST_SURFACE_PANEL_TOGGLE_CLASS_NAME = "absolute righ
53
54
  export declare function useDispatchExtensions(): DispatchExtensionConfig | undefined;
54
55
  export declare function isElectronEmbeddedSearch(search: string): boolean;
55
56
  export declare function shouldAutoCollapseDispatchSidebar(pathname: string): boolean;
57
+ /**
58
+ * The redesigned Settings brings its own navigation, header, and agent
59
+ * toggle, so it renders full width. While the flag loads it shows the
60
+ * shell's skeleton, which needs the same frame.
61
+ */
62
+ export declare function isRedesignedSettingsPath(pathname: string, settingsRedesign: FeatureFlagState): boolean;
56
63
  export declare function formatThreadAge(updatedAt: number, now?: number): string;
57
64
  export declare function NavContent({ onNavigate, extensions, brandName, brandIcon, chatFirstMode, chatFirstEmbedded, collapsed, collapsible, onCollapsedChange, chatFirstAppLayout, onChatFirstAppLayoutChange, chatFirstApps, chatFirstAppsLoading, chatFirstAppsError, chatFirstActiveAppId, chatFirstActivePrimaryTab, onChatFirstNewChat, onChatFirstAppOpen, onChatFirstAppsRetry, }: DispatchNavContentProps): import("node_modules/@types/react").JSX.Element;
58
65
  export declare function renderChatFirstAppSurfaceTab({ registration, embedPath, loading, isMobileSurface, copy, }: {
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"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"}
@@ -4,12 +4,15 @@ import { appBasePath, appPath } from "@agent-native/core/client/api-path";
4
4
  import { readClientAppState, writeClientAppState, } from "@agent-native/core/client/application-state";
5
5
  import { ChatFirstAgentsPane, ChatFirstAppPane, ChatFirstAppsRail, ChatFirstBrowserPane, ChatFirstChatHistory, ChatFirstPrimaryNavigation, ChatFirstSessionWatchPane, ChatFirstSurfacePanel, ChatFirstSurfaceContent, ChatFirstSurfaceTabs, defaultChatFirstCopy, } from "@agent-native/core/client/chat-first";
6
6
  import { writeClipboardText } from "@agent-native/core/client/clipboard";
7
+ import { useFeatureFlagState, } from "@agent-native/core/client/feature-flags";
7
8
  import { useActionQuery } from "@agent-native/core/client/hooks";
8
9
  import { useT } from "@agent-native/core/client/i18n";
9
10
  import { openCommandMenu } from "@agent-native/core/client/navigation";
10
11
  import { InvitationBanner, OrgSwitcher } from "@agent-native/core/client/org";
11
12
  import { RunsTray } from "@agent-native/core/client/progress";
13
+ import { isSettingsPathname } from "@agent-native/core/client/settings";
12
14
  import { AppSidebarFooter, AppSidebarHeader, FeedbackButton, } from "@agent-native/core/client/ui";
15
+ import { SETTINGS_REDESIGN_FLAG } from "@agent-native/core/feature-flags/registry";
13
16
  import { ChatHistoryRail, } from "@agent-native/toolkit/chat-history";
14
17
  import { IconApps, IconBrandSlack, IconBrandTelegram, IconCopy, IconEye, IconHierarchy2, IconMessageQuestion, IconBroadcast, IconLayoutSidebar, IconLayoutSidebarLeftCollapse, IconLayoutSidebarLeftExpand, IconSettings, IconShield, IconWorld, IconDeviceDesktop, IconPlus, } from "@tabler/icons-react";
15
18
  import { createContext, useEffect, useMemo, useRef, useState, useContext, useCallback, } from "react";
@@ -127,6 +130,15 @@ export function isElectronEmbeddedSearch(search) {
127
130
  export function shouldAutoCollapseDispatchSidebar(pathname) {
128
131
  return localDispatchPath(pathname).startsWith("/apps/");
129
132
  }
133
+ /**
134
+ * The redesigned Settings brings its own navigation, header, and agent
135
+ * toggle, so it renders full width. While the flag loads it shows the
136
+ * shell's skeleton, which needs the same frame.
137
+ */
138
+ export function isRedesignedSettingsPath(pathname, settingsRedesign) {
139
+ return (isSettingsPathname(localDispatchPath(pathname)) &&
140
+ (settingsRedesign.enabled || settingsRedesign.status === "loading"));
141
+ }
130
142
  function chatFirstPrimaryTabForPath(pathname) {
131
143
  if (pathname === "/chat" || pathname.startsWith("/chat/")) {
132
144
  return "new-chat";
@@ -641,6 +653,7 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
641
653
  ? isElectronEmbeddedSearch(window.location.search)
642
654
  : false);
643
655
  const isChatRoute = localPathname === "/chat" || localPathname.startsWith("/chat/");
656
+ const isRedesignedSettingsRoute = isRedesignedSettingsPath(location.pathname, useFeatureFlagState(SETTINGS_REDESIGN_FLAG.key));
644
657
  const chatFirstSurfaceScope = threadIdFromPath(localPathname) ?? "new";
645
658
  const isWorkspaceAppRoute = shouldAutoCollapseDispatchSidebar(location.pathname);
646
659
  const workspaceAppId = isWorkspaceAppRoute
@@ -1257,7 +1270,9 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
1257
1270
  if (isWorkspaceAppHostRoute) {
1258
1271
  return (_jsx(DispatchExtensionsContext.Provider, { value: extensions, children: _jsx(HeaderActionsProvider, { children: _jsx("div", { "data-dispatch-workspace-app-chrome-less": true, className: "h-screen w-full overflow-hidden bg-background", children: children }) }) }));
1259
1272
  }
1260
- const showAgentControls = !isChatRoute && !pageOwnsToolbar(localPathname);
1273
+ const showAgentControls = !isChatRoute &&
1274
+ !isRedesignedSettingsRoute &&
1275
+ !pageOwnsToolbar(localPathname);
1261
1276
  function openAskAgentFullscreen() {
1262
1277
  focusAgentChat();
1263
1278
  navigateWithAgentChatViewTransition(navigate, dispatchNavLinkTarget("/chat"));
@@ -1284,7 +1299,7 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
1284
1299
  ];
1285
1300
  const appContent = (_jsxs("div", { className: "relative flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: [_jsx(InvitationBanner, {}), isChatRoute && chatFirstMode && chatFirstHasActiveChat ? (_jsx(ChatFirstSurfacePanelToggle, { open: chatFirstSurfacePanel.open, onToggle: chatFirstSurfacePanel.toggle, className: CHAT_FIRST_SURFACE_PANEL_TOGGLE_CLASS_NAME })) : null, isChatRoute && chatFirstMode && chatFirstNotice ? (_jsxs("div", { className: "dispatch-chat-first-notice", role: "status", "aria-live": "polite", children: [_jsx("span", { children: chatFirstNotice }), _jsx("button", { type: "button", onClick: () => setChatFirstNotice(null), "aria-label": "Dismiss app notice", children: "Dismiss" })] })) : null, _jsx("main", { className: cn("min-h-0 flex-1", isChatRoute || isWorkspaceAppRoute
1286
1301
  ? "overflow-hidden"
1287
- : "overflow-y-auto"), children: showAgentControls ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "pointer-events-none sticky top-0 z-10 flex justify-end px-4 pt-2 lg:px-6", children: [_jsx(Button, { variant: "ghost", size: "icon", className: "pointer-events-auto absolute start-4 top-2 h-8 w-8 lg:hidden", onClick: () => setMobileOpen(true), "aria-label": "Open navigation", children: _jsx(IconLayoutSidebar, { className: "h-4 w-4" }) }), _jsxs("div", { className: "pointer-events-auto flex items-center gap-1", children: [_jsx(RunsTray, { limit: 8, onOpenThread: openRunThread }), _jsx(AgentToggleButton, { className: "h-8 w-8 rounded-md bg-background/80 hover:bg-accent" })] })] }), _jsxs("div", { className: "mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6", children: [localPathname !== "/overview" && (pageTitle || headerActions) ? (_jsxs("div", { className: "flex min-w-0 items-center justify-between gap-3", children: [_jsx("div", { className: "min-w-0 flex-1", children: pageTitle }), headerActions ? (_jsx("div", { className: "flex shrink-0 items-center gap-2", children: headerActions })) : null] })) : null, children] })] })) : (children) })] }));
1302
+ : "overflow-y-auto"), children: showAgentControls ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "pointer-events-none sticky top-0 z-10 flex justify-end px-4 pt-2 lg:px-6", children: [_jsx(Button, { variant: "ghost", size: "icon-sm", className: "pointer-events-auto absolute start-4 top-2 lg:hidden", onClick: () => setMobileOpen(true), "aria-label": "Open navigation", children: _jsx(IconLayoutSidebar, { className: "h-4 w-4" }) }), _jsxs("div", { className: "pointer-events-auto flex items-center gap-1", children: [_jsx(RunsTray, { limit: 8, onOpenThread: openRunThread }), _jsx(AgentToggleButton, { className: "h-8 w-8 rounded-md bg-background/80 hover:bg-accent" })] })] }), _jsxs("div", { className: "mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6", children: [localPathname !== "/overview" && (pageTitle || headerActions) ? (_jsxs("div", { className: "flex min-w-0 items-center justify-between gap-3", children: [_jsx("div", { className: "min-w-0 flex-1", children: pageTitle }), headerActions ? (_jsx("div", { className: "flex shrink-0 items-center gap-2", children: headerActions })) : null] })) : null, children] })] })) : (children) })] }));
1288
1303
  const chatFirstSurfaceTabsBar = activeChatFirstSurfaceTab?.kind === "app" ? null : (_jsx(ChatFirstSurfaceTabs, { tabs: chatFirstSurfaceTabs.tabs, activeTabId: chatFirstSurfaceTabs.activeTabId, onActivate: activateChatFirstSurfaceTab, onClose: closeChatFirstSurfaceTab, onCloseOthers: (tab) => {
1289
1304
  activateChatFirstSurfaceTab(tab);
1290
1305
  chatFirstSurfaceTabsStore.closeOthers(tab.id);
@@ -1305,7 +1320,7 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
1305
1320
  const content = isChatRoute ? (_jsx("div", { className: cn("agent-layout-main-surface flex h-full min-w-0 flex-1 overflow-hidden", chatFirstMode && "dispatch-chat-first-surface"), children: chatFirstAppTakesMain ? (_jsx("div", { className: "flex min-w-0 flex-1 flex-col overflow-hidden", "data-dispatch-chat-first-main-app": true, children: chatFirstSurfaceContent })) : (_jsxs(_Fragment, { children: [appContent, chatFirstMode &&
1306
1321
  chatFirstHasActiveChat &&
1307
1322
  chatFirstSurfacePanel.open ? (_jsxs(ChatFirstSurfacePanel, { width: chatFirstSurfaceResize.width, onResizePointerDown: chatFirstSurfaceResize.onPointerDown, copy: chatFirstCopy, children: [chatFirstSurfaceTabsBar, chatFirstSurfaceContent] })) : null] })) })) : workspaceAppRouteActive ? null : isWorkspaceAppRoute ? (appContent) : (_jsx(AgentSidebar, { position: "right", defaultOpen: false, agentPageHref: agentPageHref, chatViewTransition: true, storageKey: "dispatch", openOnChatRunning: chatHomeHandoffActive, onFullscreenRequest: openAskAgentFullscreen, emptyStateText: t("dispatch.sidebar.emptyAgentText"), suggestions: sidebarSuggestions, children: appContent }));
1308
- return (_jsx(DispatchExtensionsContext.Provider, { value: extensions, children: _jsx(HeaderActionsProvider, { children: _jsxs("div", { className: "agent-layout-shell flex h-screen w-full overflow-hidden bg-background", children: [_jsx("aside", { "data-collapsed": sidebarCollapsed ? "true" : "false", className: cn("agent-layout-left-drawer hidden shrink-0 flex-col border-e !border-e-sidebar-border bg-sidebar text-sidebar-foreground transition-[width] duration-200 ease-out lg:flex", sidebarCollapsed ? "w-14" : "w-[260px]"), children: _jsx(NavContent, { extensions: extensions, brandName: brandName, brandIcon: brandIcon, chatFirstMode: chatFirstMode, chatFirstEmbedded: chatFirstEmbedded, collapsed: sidebarCollapsed, chatFirstAppLayout: chatFirstAppLayout, onChatFirstAppLayoutChange: persistChatFirstAppLayout, chatFirstApps: chatFirstAppItems, chatFirstAppsLoading: chatFirstAppsQuery.isLoading, chatFirstAppsError: chatFirstAppsQuery.isError
1323
+ return (_jsx(DispatchExtensionsContext.Provider, { value: extensions, children: _jsx(HeaderActionsProvider, { children: _jsxs("div", { className: "agent-layout-shell flex h-screen w-full overflow-hidden bg-background", children: [isRedesignedSettingsRoute ? null : (_jsx("aside", { "data-collapsed": sidebarCollapsed ? "true" : "false", className: cn("agent-layout-left-drawer hidden shrink-0 flex-col border-e !border-e-sidebar-border bg-sidebar text-sidebar-foreground transition-[width] duration-200 ease-out lg:flex", sidebarCollapsed ? "w-14" : "w-[260px]"), children: _jsx(NavContent, { extensions: extensions, brandName: brandName, brandIcon: brandIcon, chatFirstMode: chatFirstMode, chatFirstEmbedded: chatFirstEmbedded, collapsed: sidebarCollapsed, chatFirstAppLayout: chatFirstAppLayout, onChatFirstAppLayoutChange: persistChatFirstAppLayout, chatFirstApps: chatFirstAppItems, chatFirstAppsLoading: chatFirstAppsQuery.isLoading, chatFirstAppsError: chatFirstAppsQuery.isError
1309
1324
  ? chatFirstCopy("appsLoadError")
1310
1325
  : null, chatFirstActiveAppId: chatFirstActiveAppId, chatFirstActivePrimaryTab: chatFirstActivePrimaryTab, onChatFirstNewChat: () => {
1311
1326
  closeChatFirstSessionWatch();
@@ -1316,7 +1331,7 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
1316
1331
  return;
1317
1332
  setSidebarCollapsed(true);
1318
1333
  openChatFirstApp(app);
1319
- }, onChatFirstAppsRetry: () => void chatFirstAppsQuery.refetch(), collapsible: true, onCollapsedChange: setSidebarCollapsed }) }), _jsx(Sheet, { open: mobileOpen, onOpenChange: setMobileOpen, children: _jsxs(SheetContent, { side: "left", className: "w-72 bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden", children: [_jsx(SheetTitle, { className: "sr-only", children: t("dispatch.nav.navigation") }), _jsx(SheetDescription, { className: "sr-only", children: t("dispatch.nav.navigationDescription") }), _jsx("div", { className: "flex h-full w-full flex-col", children: _jsx(NavContent, { extensions: extensions, brandName: brandName, brandIcon: brandIcon, chatFirstMode: chatFirstMode, chatFirstEmbedded: chatFirstEmbedded, collapsed: false, chatFirstAppLayout: chatFirstAppLayout, onChatFirstAppLayoutChange: persistChatFirstAppLayout, chatFirstApps: chatFirstAppItems, chatFirstAppsLoading: chatFirstAppsQuery.isLoading, chatFirstAppsError: chatFirstAppsQuery.isError
1334
+ }, onChatFirstAppsRetry: () => void chatFirstAppsQuery.refetch(), collapsible: true, onCollapsedChange: setSidebarCollapsed }) })), _jsx(Sheet, { open: mobileOpen, onOpenChange: setMobileOpen, children: _jsxs(SheetContent, { side: "left", className: "w-72 bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden", children: [_jsx(SheetTitle, { className: "sr-only", children: t("dispatch.nav.navigation") }), _jsx(SheetDescription, { className: "sr-only", children: t("dispatch.nav.navigationDescription") }), _jsx("div", { className: "flex h-full w-full flex-col", children: _jsx(NavContent, { extensions: extensions, brandName: brandName, brandIcon: brandIcon, chatFirstMode: chatFirstMode, chatFirstEmbedded: chatFirstEmbedded, collapsed: false, chatFirstAppLayout: chatFirstAppLayout, onChatFirstAppLayoutChange: persistChatFirstAppLayout, chatFirstApps: chatFirstAppItems, chatFirstAppsLoading: chatFirstAppsQuery.isLoading, chatFirstAppsError: chatFirstAppsQuery.isError
1320
1335
  ? chatFirstCopy("appsLoadError")
1321
1336
  : null, chatFirstActiveAppId: chatFirstActiveAppId, chatFirstActivePrimaryTab: chatFirstActivePrimaryTab, onChatFirstNewChat: () => {
1322
1337
  closeChatFirstSessionWatch();