@agent-native/toolkit 0.204.0 → 0.204.1-nightly-20261008034100

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 (144) hide show
  1. package/dist/app/agent-page/AgentJobsTab.d.ts.map +1 -1
  2. package/dist/app/agent-page/AgentJobsTab.js +4 -2
  3. package/dist/app/agent-page/AgentJobsTab.js.map +1 -1
  4. package/dist/app/agent-page/AutomationDetailsDialog.d.ts +2 -1
  5. package/dist/app/agent-page/AutomationDetailsDialog.d.ts.map +1 -1
  6. package/dist/app/agent-page/AutomationDetailsDialog.js +8 -4
  7. package/dist/app/agent-page/AutomationDetailsDialog.js.map +1 -1
  8. package/dist/app/agent-page/ScheduledTriggerNotice.d.ts.map +1 -1
  9. package/dist/app/agent-page/ScheduledTriggerNotice.js +41 -19
  10. package/dist/app/agent-page/ScheduledTriggerNotice.js.map +1 -1
  11. package/dist/app/agent-page/use-jobs.d.ts +1 -1
  12. package/dist/app/agent-page/use-jobs.d.ts.map +1 -1
  13. package/dist/app/agentkit/react/components.d.ts.map +1 -1
  14. package/dist/app/agentkit/react/components.js +124 -45
  15. package/dist/app/agentkit/react/components.js.map +1 -1
  16. package/dist/app/agentkit/react/context.d.ts +22 -1
  17. package/dist/app/agentkit/react/context.d.ts.map +1 -1
  18. package/dist/app/agentkit/react/context.js +14 -1
  19. package/dist/app/agentkit/react/context.js.map +1 -1
  20. package/dist/app/agentkit/react/root.d.ts +3 -2
  21. package/dist/app/agentkit/react/root.d.ts.map +1 -1
  22. package/dist/app/agentkit/react/root.js +2 -2
  23. package/dist/app/agentkit/react/root.js.map +1 -1
  24. package/dist/app/agentkit/react/styles.css +32 -2
  25. package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
  26. package/dist/app/chat/AgentKitAssistantChat.js +28 -3
  27. package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
  28. package/dist/app/chat/AgentPanel.js +1 -1
  29. package/dist/app/chat/AgentPanel.js.map +1 -1
  30. package/dist/app/chat/RunStuckBanner.d.ts +8 -1
  31. package/dist/app/chat/RunStuckBanner.d.ts.map +1 -1
  32. package/dist/app/chat/RunStuckBanner.js +68 -6
  33. package/dist/app/chat/RunStuckBanner.js.map +1 -1
  34. package/dist/app/chat/chat/run-recovery.d.ts +4 -2
  35. package/dist/app/chat/chat/run-recovery.d.ts.map +1 -1
  36. package/dist/app/chat/chat/run-recovery.js +3 -3
  37. package/dist/app/chat/chat/run-recovery.js.map +1 -1
  38. package/dist/app/chat/composer/use-mention-search.d.ts +1 -0
  39. package/dist/app/chat/composer/use-mention-search.d.ts.map +1 -1
  40. package/dist/app/chat/feedback-report.d.ts +12 -0
  41. package/dist/app/chat/feedback-report.d.ts.map +1 -0
  42. package/dist/app/chat/feedback-report.js +21 -0
  43. package/dist/app/chat/feedback-report.js.map +1 -0
  44. package/dist/app/chat/reconcile-settled-run.d.ts +15 -0
  45. package/dist/app/chat/reconcile-settled-run.d.ts.map +1 -0
  46. package/dist/app/chat/reconcile-settled-run.js +41 -0
  47. package/dist/app/chat/reconcile-settled-run.js.map +1 -0
  48. package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
  49. package/dist/app/i18n/catalogs/ar-SA.js +9 -0
  50. package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
  51. package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
  52. package/dist/app/i18n/catalogs/de-DE.js +9 -0
  53. package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
  54. package/dist/app/i18n/catalogs/en-US.d.ts +9 -0
  55. package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
  56. package/dist/app/i18n/catalogs/en-US.js +9 -0
  57. package/dist/app/i18n/catalogs/en-US.js.map +1 -1
  58. package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
  59. package/dist/app/i18n/catalogs/es-ES.js +9 -0
  60. package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
  61. package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
  62. package/dist/app/i18n/catalogs/fr-FR.js +9 -0
  63. package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
  64. package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
  65. package/dist/app/i18n/catalogs/hi-IN.js +9 -0
  66. package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
  67. package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
  68. package/dist/app/i18n/catalogs/ja-JP.js +9 -0
  69. package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
  70. package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
  71. package/dist/app/i18n/catalogs/ko-KR.js +9 -0
  72. package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
  73. package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
  74. package/dist/app/i18n/catalogs/pt-BR.js +9 -0
  75. package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
  76. package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
  77. package/dist/app/i18n/catalogs/zh-CN.js +9 -0
  78. package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
  79. package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
  80. package/dist/app/i18n/catalogs/zh-TW.js +9 -0
  81. package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
  82. package/dist/app/settings/shell/pages/audit.d.ts.map +1 -1
  83. package/dist/app/settings/shell/pages/audit.js +11 -2
  84. package/dist/app/settings/shell/pages/audit.js.map +1 -1
  85. package/dist/composer/ComposerContextMenu.d.ts +14 -1
  86. package/dist/composer/ComposerContextMenu.d.ts.map +1 -1
  87. package/dist/composer/ComposerContextMenu.js +65 -19
  88. package/dist/composer/ComposerContextMenu.js.map +1 -1
  89. package/dist/composer/MentionPopover.d.ts.map +1 -1
  90. package/dist/composer/MentionPopover.js +3 -3
  91. package/dist/composer/MentionPopover.js.map +1 -1
  92. package/dist/composer/PromptComposer.d.ts +1 -1
  93. package/dist/composer/PromptComposer.d.ts.map +1 -1
  94. package/dist/composer/TiptapComposer.d.ts +2 -2
  95. package/dist/composer/TiptapComposer.d.ts.map +1 -1
  96. package/dist/composer/TiptapComposer.js +92 -36
  97. package/dist/composer/TiptapComposer.js.map +1 -1
  98. package/dist/composer/use-mention-search.d.ts +1 -0
  99. package/dist/composer/use-mention-search.d.ts.map +1 -1
  100. package/dist/composer/use-mention-search.js +8 -1
  101. package/dist/composer/use-mention-search.js.map +1 -1
  102. package/package.json +4 -4
  103. package/src/app/agent-page/AgentJobsTab.blocked.spec.tsx +43 -0
  104. package/src/app/agent-page/AgentJobsTab.tsx +14 -5
  105. package/src/app/agent-page/AutomationDetailsDialog.tsx +22 -8
  106. package/src/app/agent-page/ScheduledTriggerNotice.spec.tsx +45 -3
  107. package/src/app/agent-page/ScheduledTriggerNotice.tsx +52 -31
  108. package/src/app/agent-page/use-jobs.ts +1 -1
  109. package/src/app/agentkit/react/components.interaction.spec.tsx +311 -1
  110. package/src/app/agentkit/react/components.spec.tsx +106 -2
  111. package/src/app/agentkit/react/components.tsx +217 -80
  112. package/src/app/agentkit/react/context.tsx +36 -0
  113. package/src/app/agentkit/react/root.tsx +4 -0
  114. package/src/app/agentkit/react/styles.css +32 -2
  115. package/src/app/chat/AgentKitAssistantChat.tsx +35 -2
  116. package/src/app/chat/AgentPanel.header.spec.ts +43 -7
  117. package/src/app/chat/AgentPanel.tsx +1 -1
  118. package/src/app/chat/RunStuckBanner.spec.tsx +258 -17
  119. package/src/app/chat/RunStuckBanner.tsx +107 -5
  120. package/src/app/chat/chat/run-recovery.tsx +10 -2
  121. package/src/app/chat/feedback-report.spec.ts +45 -0
  122. package/src/app/chat/feedback-report.ts +27 -0
  123. package/src/app/chat/reconcile-settled-run.spec.ts +112 -0
  124. package/src/app/chat/reconcile-settled-run.ts +57 -0
  125. package/src/app/i18n/catalogs/ar-SA.ts +12 -0
  126. package/src/app/i18n/catalogs/de-DE.ts +12 -0
  127. package/src/app/i18n/catalogs/en-US.ts +12 -0
  128. package/src/app/i18n/catalogs/es-ES.ts +12 -0
  129. package/src/app/i18n/catalogs/fr-FR.ts +12 -0
  130. package/src/app/i18n/catalogs/hi-IN.ts +12 -0
  131. package/src/app/i18n/catalogs/ja-JP.ts +12 -0
  132. package/src/app/i18n/catalogs/ko-KR.ts +12 -0
  133. package/src/app/i18n/catalogs/pt-BR.ts +12 -0
  134. package/src/app/i18n/catalogs/zh-CN.ts +10 -0
  135. package/src/app/i18n/catalogs/zh-TW.ts +10 -0
  136. package/src/app/settings/shell/pages/audit.spec.tsx +30 -0
  137. package/src/app/settings/shell/pages/audit.tsx +12 -1
  138. package/src/composer/ComposerContextMenu.tsx +94 -22
  139. package/src/composer/ComposerPlusMenu.parity.spec.tsx +218 -233
  140. package/src/composer/MentionPopover.tsx +12 -3
  141. package/src/composer/PromptComposer.context.spec.tsx +526 -195
  142. package/src/composer/PromptComposer.tsx +1 -1
  143. package/src/composer/TiptapComposer.tsx +105 -37
  144. package/src/composer/use-mention-search.ts +8 -1
@@ -4,5 +4,6 @@ export declare function useMentionSearch(query: string, enabled: boolean, resolv
4
4
  isLoading: boolean;
5
5
  error: Error | null;
6
6
  retry: () => void;
7
+ settledQuery: string | null;
7
8
  };
8
9
  //# sourceMappingURL=use-mention-search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-mention-search.d.ts","sourceRoot":"","sources":["../../src/composer/use-mention-search.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM;;;;;EAkH/C"}
1
+ {"version":3,"file":"use-mention-search.d.ts","sourceRoot":"","sources":["../../src/composer/use-mention-search.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM;;;;;;EAyH/C"}
@@ -5,6 +5,7 @@ export function useMentionSearch(query, enabled, resolvePathOverride) {
5
5
  const resolveRequestPath = resolvePathOverride ?? resolvePath;
6
6
  const [items, setItems] = useState([]);
7
7
  const [isLoading, setIsLoading] = useState(false);
8
+ const [settledQuery, setSettledQuery] = useState(null);
8
9
  const [error, setError] = useState(null);
9
10
  const [revision, setRevision] = useState(0);
10
11
  const retry = useCallback(() => setRevision((value) => value + 1), []);
@@ -16,6 +17,7 @@ export function useMentionSearch(query, enabled, resolvePathOverride) {
16
17
  if (!enabled) {
17
18
  setItems([]);
18
19
  setIsLoading(false);
20
+ setSettledQuery(null);
19
21
  return;
20
22
  }
21
23
  abortRef.current?.abort();
@@ -23,6 +25,7 @@ export function useMentionSearch(query, enabled, resolvePathOverride) {
23
25
  abortRef.current = abort;
24
26
  setItems([]);
25
27
  setIsLoading(true);
28
+ setSettledQuery(null);
26
29
  const debounceMs = query.length === 0 ? 0 : 150;
27
30
  const timer = setTimeout(async () => {
28
31
  try {
@@ -79,6 +82,10 @@ export function useMentionSearch(query, enabled, resolvePathOverride) {
79
82
  receive(line);
80
83
  }
81
84
  }
85
+ // Only a completed search settles its query: a failed one is unknown,
86
+ // not empty, and must not read as "nothing matches".
87
+ if (id === requestIdRef.current && !abort.signal.aborted)
88
+ setSettledQuery(query);
82
89
  }
83
90
  catch (err) {
84
91
  if (abort.signal.aborted)
@@ -96,6 +103,6 @@ export function useMentionSearch(query, enabled, resolvePathOverride) {
96
103
  abort.abort();
97
104
  };
98
105
  }, [query, enabled, resolveRequestPath, revision]);
99
- return { items, isLoading, error, retry };
106
+ return { items, isLoading, error, retry, settledQuery };
100
107
  }
101
108
  //# sourceMappingURL=use-mention-search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-mention-search.js","sourceRoot":"","sources":["../../src/composer/use-mention-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-mention-search.js","sourceRoot":"","sources":["../../src/composer/use-mention-search.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/toolkit",
3
- "version": "0.204.0",
3
+ "version": "0.204.1-nightly-20261008034100",
4
4
  "description": "Reusable app-building UI and helpers for Agent-Native apps.",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -673,7 +673,7 @@
673
673
  "y-protocols": "^1.0.7",
674
674
  "yjs": "^13.6.33",
675
675
  "zod": "^4.3.6",
676
- "@agent-native/agentkit": "^0.204.0"
676
+ "@agent-native/agentkit": "^0.204.1-nightly-20261008034100"
677
677
  },
678
678
  "devDependencies": {
679
679
  "@excalidraw/excalidraw": "0.18.1",
@@ -697,10 +697,10 @@
697
697
  "typescript-7": "npm:typescript@^7.0.2",
698
698
  "vite": "8.1.0",
699
699
  "vitest": "^4.1.5",
700
- "@agent-native/core": "^0.204.0"
700
+ "@agent-native/core": "^0.204.1-nightly-20261008034100"
701
701
  },
702
702
  "peerDependencies": {
703
- "@agent-native/core": ">=0.196.0",
703
+ "@agent-native/core": "0.204.1-nightly-20261008034100",
704
704
  "@excalidraw/excalidraw": ">=0.18",
705
705
  "@excalidraw/mermaid-to-excalidraw": ">=2",
706
706
  "@tanstack/react-query": "^5.99.2",
@@ -129,6 +129,49 @@ describe("AgentJobsTab blocked automation", () => {
129
129
  expect(container.textContent).toContain(BLOCKED_REASON);
130
130
  });
131
131
 
132
+ it("shows a declared no-op as skipped without a failure warning", () => {
133
+ const reason = "No urgent mail found.";
134
+ jobMocks.useRecurringJobs.mockImplementation((scope: "user" | "org") =>
135
+ queryResult(
136
+ scope === "user"
137
+ ? [
138
+ {
139
+ ...blockedJob("skipped", reason),
140
+ lastRun: "2026-07-31T17:04:14.688Z",
141
+ },
142
+ ]
143
+ : [],
144
+ ),
145
+ );
146
+ jobMocks.useAutomationRuns.mockReturnValue(
147
+ queryResult([
148
+ {
149
+ id: "skip-1",
150
+ runId: "skip-1",
151
+ threadId: "skip-thread",
152
+ status: "skipped",
153
+ startedAt: Date.now(),
154
+ finishedAt: Date.now() + 1000,
155
+ error: reason,
156
+ errorCode: null,
157
+ },
158
+ ]),
159
+ );
160
+ act(() => root.render(<AgentJobsTab />));
161
+ expect(container.textContent).toContain("skipped");
162
+ expect(container.textContent).toContain(reason);
163
+ expect(container.querySelector(".text-destructive")).toBeNull();
164
+ const detailsButton = Array.from(container.querySelectorAll("button")).find(
165
+ (button) => button.textContent?.trim() === "View details",
166
+ );
167
+ act(() => detailsButton?.click());
168
+ expect(document.body.textContent).toContain(reason);
169
+ expect(document.body.textContent).not.toContain(
170
+ "This automation is not running",
171
+ );
172
+ expect(document.body.querySelector(".text-destructive")).toBeNull();
173
+ });
174
+
132
175
  it("reports last run as Never rather than the time of a skipped tick", () => {
133
176
  act(() => {
134
177
  root.render(<AgentJobsTab />);
@@ -449,11 +449,19 @@ export function AgentJobsTab({
449
449
  </div>
450
450
  ) : null}
451
451
  {resource.lastError || failed ? (
452
- <div className="mt-2 flex flex-wrap items-center gap-x-1 text-xs text-destructive">
453
- <IconAlertTriangle
454
- className="size-3 shrink-0"
455
- aria-hidden="true"
456
- />
452
+ <div
453
+ className={
454
+ resource.lastStatus === "skipped"
455
+ ? "mt-2 flex flex-wrap items-center gap-x-1 text-xs text-muted-foreground"
456
+ : "mt-2 flex flex-wrap items-center gap-x-1 text-xs text-destructive"
457
+ }
458
+ >
459
+ {resource.lastStatus !== "skipped" ? (
460
+ <IconAlertTriangle
461
+ className="size-3 shrink-0"
462
+ aria-hidden="true"
463
+ />
464
+ ) : null}
457
465
  {resource.lastError ? (
458
466
  <span className="min-w-0 break-words">
459
467
  {resource.lastError}
@@ -938,6 +946,7 @@ export function AgentJobsTab({
938
946
  }
939
947
  mcpTools={detailsTarget.resource.mcpTools ?? []}
940
948
  lastError={detailsTarget.resource.lastError}
949
+ lastStatus={detailsTarget.resource.lastStatus}
941
950
  formatTimestamp={(value) =>
942
951
  formatDateTime(new Date(value).toISOString()) ?? String(value)
943
952
  }
@@ -31,6 +31,7 @@ export interface AutomationDetailsDialogProps {
31
31
  instructions: string;
32
32
  mcpTools: string[];
33
33
  lastError: string | null;
34
+ lastStatus?: string | null;
34
35
  scope: JobsScope;
35
36
  formatTimestamp: (value: number) => string;
36
37
  onClose: () => void;
@@ -44,7 +45,9 @@ function RunStatusDot({ status }: { status: string }) {
44
45
  ? "bg-destructive"
45
46
  : status === "interrupted"
46
47
  ? "bg-destructive"
47
- : "bg-amber-500";
48
+ : status === "skipped"
49
+ ? "bg-muted-foreground/40"
50
+ : "bg-amber-500";
48
51
  return <span className={`size-1.5 shrink-0 rounded-full ${tone}`} />;
49
52
  }
50
53
 
@@ -57,6 +60,7 @@ export function AutomationDetailsDialog({
57
60
  instructions,
58
61
  mcpTools,
59
62
  lastError,
63
+ lastStatus,
60
64
  scope,
61
65
  formatTimestamp,
62
66
  onClose,
@@ -80,14 +84,24 @@ export function AutomationDetailsDialog({
80
84
 
81
85
  <div className="space-y-4">
82
86
  {lastError ? (
83
- <div className="flex items-start gap-2 rounded-md border border-destructive/30 bg-destructive/5 p-2.5">
84
- <IconAlertTriangle className="mt-0.5 size-4 shrink-0 text-destructive" />
87
+ <div
88
+ className={
89
+ lastStatus === "skipped"
90
+ ? "flex items-start gap-2 rounded-md border p-2.5"
91
+ : "flex items-start gap-2 rounded-md border border-destructive/30 bg-destructive/5 p-2.5"
92
+ }
93
+ >
94
+ {lastStatus !== "skipped" ? (
95
+ <IconAlertTriangle className="mt-0.5 size-4 shrink-0 text-destructive" />
96
+ ) : null}
85
97
  <div className="min-w-0">
86
- <p className="text-xs font-medium text-destructive">
87
- {t("jobs.blockedTitle", {
88
- defaultValue: "This automation is not running",
89
- })}
90
- </p>
98
+ {lastStatus !== "skipped" ? (
99
+ <p className="text-xs font-medium text-destructive">
100
+ {t("jobs.blockedTitle", {
101
+ defaultValue: "This automation is not running",
102
+ })}
103
+ </p>
104
+ ) : null}
91
105
  <p className="mt-0.5 max-w-prose min-w-0 whitespace-normal break-words text-xs text-muted-foreground">
92
106
  {lastError}
93
107
  </p>
@@ -8,7 +8,10 @@ vi.mock("@agent-native/core/client/i18n", () => ({
8
8
  useT:
9
9
  () =>
10
10
  (key: string, options?: Record<string, string | undefined>): string =>
11
- String(options?.defaultValue ?? key),
11
+ String(options?.defaultValue ?? key).replace(
12
+ /\{\{(\w+)\}\}/g,
13
+ (_match, name: string) => options?.[name] ?? "",
14
+ ),
12
15
  }));
13
16
 
14
17
  import type {
@@ -109,7 +112,41 @@ describe("ScheduledTriggerNotice", () => {
109
112
  });
110
113
 
111
114
  expect(notice?.textContent).toContain("Schedules won't run in this deploy");
112
- expect(notice?.textContent).toContain("no durable scheduler");
115
+ expect(notice?.textContent).toContain("no scheduler");
116
+ });
117
+
118
+ // On a serverless host the scheduler's sweep is the only thing that drains
119
+ // the event-automation queue, so claiming event automations still work there
120
+ // is the bug this copy once shipped with.
121
+ it("says event automations stay queued when the deploy has no scheduler", () => {
122
+ const notice = render({
123
+ available: false,
124
+ reason: "no-platform-scheduler",
125
+ });
126
+
127
+ expect(notice?.textContent).toContain(
128
+ "event-triggered automations stay queued",
129
+ );
130
+ expect(notice?.textContent).not.toContain("Event- and webhook-triggered");
131
+ });
132
+
133
+ it("names the missing secret when the platform trigger cannot authenticate", () => {
134
+ const notice = render({
135
+ available: false,
136
+ reason: "missing-trigger-secret",
137
+ driver: "vercel-cron",
138
+ secret: "CRON_SECRET",
139
+ });
140
+
141
+ expect(notice?.getAttribute("data-reason")).toBe("missing-trigger-secret");
142
+ expect(notice?.textContent).toContain("Schedules won't run in this deploy");
143
+ expect(notice?.textContent).toContain("CRON_SECRET isn't set");
144
+ expect(notice?.textContent).toContain(
145
+ "event-triggered automations stay queued",
146
+ );
147
+ expect(notice?.querySelector("details")?.textContent).toContain(
148
+ "Set CRON_SECRET in this deployment's environment variables",
149
+ );
113
150
  });
114
151
 
115
152
  it("distinguishes local development and names the local opt-in", () => {
@@ -127,7 +164,12 @@ describe("ScheduledTriggerNotice", () => {
127
164
  it("tells the reader what still works, so the warning is actionable", () => {
128
165
  const notice = render({ available: false, reason: "disabled-by-env" });
129
166
 
130
- expect(notice?.textContent).toContain("Event-triggered automations");
167
+ expect(notice?.textContent).toContain(
168
+ "Webhook-triggered automations and Run now still work",
169
+ );
170
+ // A Netlify build with recurring jobs off emits no scheduled function, so
171
+ // nothing drains the event queue there.
172
+ expect(notice?.textContent).not.toContain("Event-");
131
173
  });
132
174
 
133
175
  it("keeps the fix in a disclosure that starts closed", () => {
@@ -63,37 +63,58 @@ export function ScheduledTriggerNotice({
63
63
  defaultValue: "Schedules won't run in this deploy",
64
64
  });
65
65
 
66
- const detail =
67
- status.reason === "disabled-by-env"
68
- ? t("jobs.scheduleUnavailableDisabled", {
69
- defaultValue:
70
- "This app was built with recurring jobs turned off, so no scheduled " +
71
- "automation will fire. Event-triggered automations and Run now still work.",
72
- })
73
- : status.reason === "no-platform-scheduler"
74
- ? t("jobs.scheduleUnavailableNoScheduler", {
75
- defaultValue:
76
- "This hosting target has no durable scheduler, so no scheduled automation will fire. Event-triggered automations and Run now still work.",
77
- })
78
- : t("jobs.scheduleUnavailableLocal", {
79
- defaultValue:
80
- "Schedules stay off on a dev machine unless you opt in. " +
81
- "Event-triggered automations and Run now still work.",
82
- });
83
-
84
- const fix =
85
- status.reason === "disabled-by-env"
86
- ? t("jobs.scheduleUnavailableDisabledFix", {
87
- defaultValue:
88
- "To enable recurring jobs, set AGENT_NATIVE_DISABLE_RECURRING_JOBS=false in the build environment.",
89
- })
90
- : status.reason === "local-development"
91
- ? t("jobs.scheduleUnavailableLocalFix", {
92
- defaultValue:
93
- "Set AGENT_NATIVE_ENABLE_LOCAL_RECURRING_JOBS=true to run " +
94
- "schedules on this machine.",
95
- })
96
- : null;
66
+ let detail: string;
67
+ let fix: string | null;
68
+ switch (status.reason) {
69
+ case "disabled-by-env":
70
+ detail = t("jobs.scheduleUnavailableDisabled", {
71
+ defaultValue:
72
+ "This app was built with recurring jobs turned off, so no scheduled " +
73
+ "automation will fire. Webhook-triggered automations and Run now " +
74
+ "still work.",
75
+ });
76
+ fix = t("jobs.scheduleUnavailableDisabledFix", {
77
+ defaultValue:
78
+ "To enable recurring jobs, set AGENT_NATIVE_DISABLE_RECURRING_JOBS=false in the build environment.",
79
+ });
80
+ break;
81
+ case "missing-trigger-secret":
82
+ detail = t("jobs.scheduleUnavailableMissingSecret", {
83
+ secret: status.secret,
84
+ defaultValue:
85
+ "This deploy has a scheduler, but {{secret}} isn't set, so every " +
86
+ "scheduler request is rejected. Scheduled automations won't fire, " +
87
+ "event-triggered automations stay queued, and crashed runs aren't " +
88
+ "recovered. Webhook-triggered automations and Run now still work.",
89
+ });
90
+ fix = t("jobs.scheduleUnavailableMissingSecretFix", {
91
+ secret: status.secret,
92
+ defaultValue:
93
+ "Set {{secret}} in this deployment's environment variables, then redeploy.",
94
+ });
95
+ break;
96
+ case "no-platform-scheduler":
97
+ detail = t("jobs.scheduleUnavailableNoScheduler", {
98
+ defaultValue:
99
+ "This deploy has no scheduler, so scheduled automations won't fire, " +
100
+ "event-triggered automations stay queued, and crashed runs aren't " +
101
+ "recovered. Webhook-triggered automations and Run now still work.",
102
+ });
103
+ fix = null;
104
+ break;
105
+ case "local-development":
106
+ detail = t("jobs.scheduleUnavailableLocal", {
107
+ defaultValue:
108
+ "Schedules stay off on a dev machine unless you opt in. " +
109
+ "Event- and webhook-triggered automations and Run now still work.",
110
+ });
111
+ fix = t("jobs.scheduleUnavailableLocalFix", {
112
+ defaultValue:
113
+ "Set AGENT_NATIVE_ENABLE_LOCAL_RECURRING_JOBS=true to run " +
114
+ "schedules on this machine.",
115
+ });
116
+ break;
117
+ }
97
118
 
98
119
  return (
99
120
  <div
@@ -95,7 +95,7 @@ export interface AutomationRun {
95
95
  scope: string | null;
96
96
  runId: string | null;
97
97
  threadId: string | null;
98
- status: "running" | "success" | "error" | "interrupted";
98
+ status: "running" | "success" | "error" | "interrupted" | "skipped";
99
99
  startedAt: number;
100
100
  finishedAt: number | null;
101
101
  error: string | null;