@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.
- package/dist/app/agent-page/AgentJobsTab.d.ts.map +1 -1
- package/dist/app/agent-page/AgentJobsTab.js +4 -2
- package/dist/app/agent-page/AgentJobsTab.js.map +1 -1
- package/dist/app/agent-page/AutomationDetailsDialog.d.ts +2 -1
- package/dist/app/agent-page/AutomationDetailsDialog.d.ts.map +1 -1
- package/dist/app/agent-page/AutomationDetailsDialog.js +8 -4
- package/dist/app/agent-page/AutomationDetailsDialog.js.map +1 -1
- package/dist/app/agent-page/ScheduledTriggerNotice.d.ts.map +1 -1
- package/dist/app/agent-page/ScheduledTriggerNotice.js +41 -19
- package/dist/app/agent-page/ScheduledTriggerNotice.js.map +1 -1
- package/dist/app/agent-page/use-jobs.d.ts +1 -1
- package/dist/app/agent-page/use-jobs.d.ts.map +1 -1
- package/dist/app/agentkit/react/components.d.ts.map +1 -1
- package/dist/app/agentkit/react/components.js +124 -45
- package/dist/app/agentkit/react/components.js.map +1 -1
- package/dist/app/agentkit/react/context.d.ts +22 -1
- package/dist/app/agentkit/react/context.d.ts.map +1 -1
- package/dist/app/agentkit/react/context.js +14 -1
- package/dist/app/agentkit/react/context.js.map +1 -1
- package/dist/app/agentkit/react/root.d.ts +3 -2
- package/dist/app/agentkit/react/root.d.ts.map +1 -1
- package/dist/app/agentkit/react/root.js +2 -2
- package/dist/app/agentkit/react/root.js.map +1 -1
- package/dist/app/agentkit/react/styles.css +32 -2
- package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.js +28 -3
- package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
- package/dist/app/chat/AgentPanel.js +1 -1
- package/dist/app/chat/AgentPanel.js.map +1 -1
- package/dist/app/chat/RunStuckBanner.d.ts +8 -1
- package/dist/app/chat/RunStuckBanner.d.ts.map +1 -1
- package/dist/app/chat/RunStuckBanner.js +68 -6
- package/dist/app/chat/RunStuckBanner.js.map +1 -1
- package/dist/app/chat/chat/run-recovery.d.ts +4 -2
- package/dist/app/chat/chat/run-recovery.d.ts.map +1 -1
- package/dist/app/chat/chat/run-recovery.js +3 -3
- package/dist/app/chat/chat/run-recovery.js.map +1 -1
- package/dist/app/chat/composer/use-mention-search.d.ts +1 -0
- package/dist/app/chat/composer/use-mention-search.d.ts.map +1 -1
- package/dist/app/chat/feedback-report.d.ts +12 -0
- package/dist/app/chat/feedback-report.d.ts.map +1 -0
- package/dist/app/chat/feedback-report.js +21 -0
- package/dist/app/chat/feedback-report.js.map +1 -0
- package/dist/app/chat/reconcile-settled-run.d.ts +15 -0
- package/dist/app/chat/reconcile-settled-run.d.ts.map +1 -0
- package/dist/app/chat/reconcile-settled-run.js +41 -0
- package/dist/app/chat/reconcile-settled-run.js.map +1 -0
- package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.js +9 -0
- package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.js +9 -0
- package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
- package/dist/app/i18n/catalogs/en-US.d.ts +9 -0
- package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/en-US.js +9 -0
- package/dist/app/i18n/catalogs/en-US.js.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.js +9 -0
- package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.js +9 -0
- package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.js +9 -0
- package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.js +9 -0
- package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.js +9 -0
- package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.js +9 -0
- package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.js +9 -0
- package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.js +9 -0
- package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
- package/dist/app/settings/shell/pages/audit.d.ts.map +1 -1
- package/dist/app/settings/shell/pages/audit.js +11 -2
- package/dist/app/settings/shell/pages/audit.js.map +1 -1
- package/dist/composer/ComposerContextMenu.d.ts +14 -1
- package/dist/composer/ComposerContextMenu.d.ts.map +1 -1
- package/dist/composer/ComposerContextMenu.js +65 -19
- package/dist/composer/ComposerContextMenu.js.map +1 -1
- package/dist/composer/MentionPopover.d.ts.map +1 -1
- package/dist/composer/MentionPopover.js +3 -3
- package/dist/composer/MentionPopover.js.map +1 -1
- package/dist/composer/PromptComposer.d.ts +1 -1
- package/dist/composer/PromptComposer.d.ts.map +1 -1
- package/dist/composer/TiptapComposer.d.ts +2 -2
- package/dist/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/composer/TiptapComposer.js +92 -36
- package/dist/composer/TiptapComposer.js.map +1 -1
- package/dist/composer/use-mention-search.d.ts +1 -0
- package/dist/composer/use-mention-search.d.ts.map +1 -1
- package/dist/composer/use-mention-search.js +8 -1
- package/dist/composer/use-mention-search.js.map +1 -1
- package/package.json +4 -4
- package/src/app/agent-page/AgentJobsTab.blocked.spec.tsx +43 -0
- package/src/app/agent-page/AgentJobsTab.tsx +14 -5
- package/src/app/agent-page/AutomationDetailsDialog.tsx +22 -8
- package/src/app/agent-page/ScheduledTriggerNotice.spec.tsx +45 -3
- package/src/app/agent-page/ScheduledTriggerNotice.tsx +52 -31
- package/src/app/agent-page/use-jobs.ts +1 -1
- package/src/app/agentkit/react/components.interaction.spec.tsx +311 -1
- package/src/app/agentkit/react/components.spec.tsx +106 -2
- package/src/app/agentkit/react/components.tsx +217 -80
- package/src/app/agentkit/react/context.tsx +36 -0
- package/src/app/agentkit/react/root.tsx +4 -0
- package/src/app/agentkit/react/styles.css +32 -2
- package/src/app/chat/AgentKitAssistantChat.tsx +35 -2
- package/src/app/chat/AgentPanel.header.spec.ts +43 -7
- package/src/app/chat/AgentPanel.tsx +1 -1
- package/src/app/chat/RunStuckBanner.spec.tsx +258 -17
- package/src/app/chat/RunStuckBanner.tsx +107 -5
- package/src/app/chat/chat/run-recovery.tsx +10 -2
- package/src/app/chat/feedback-report.spec.ts +45 -0
- package/src/app/chat/feedback-report.ts +27 -0
- package/src/app/chat/reconcile-settled-run.spec.ts +112 -0
- package/src/app/chat/reconcile-settled-run.ts +57 -0
- package/src/app/i18n/catalogs/ar-SA.ts +12 -0
- package/src/app/i18n/catalogs/de-DE.ts +12 -0
- package/src/app/i18n/catalogs/en-US.ts +12 -0
- package/src/app/i18n/catalogs/es-ES.ts +12 -0
- package/src/app/i18n/catalogs/fr-FR.ts +12 -0
- package/src/app/i18n/catalogs/hi-IN.ts +12 -0
- package/src/app/i18n/catalogs/ja-JP.ts +12 -0
- package/src/app/i18n/catalogs/ko-KR.ts +12 -0
- package/src/app/i18n/catalogs/pt-BR.ts +12 -0
- package/src/app/i18n/catalogs/zh-CN.ts +10 -0
- package/src/app/i18n/catalogs/zh-TW.ts +10 -0
- package/src/app/settings/shell/pages/audit.spec.tsx +30 -0
- package/src/app/settings/shell/pages/audit.tsx +12 -1
- package/src/composer/ComposerContextMenu.tsx +94 -22
- package/src/composer/ComposerPlusMenu.parity.spec.tsx +218 -233
- package/src/composer/MentionPopover.tsx +12 -3
- package/src/composer/PromptComposer.context.spec.tsx +526 -195
- package/src/composer/PromptComposer.tsx +1 -1
- package/src/composer/TiptapComposer.tsx +105 -37
- package/src/composer/use-mention-search.ts +8 -1
|
@@ -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
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAGnE,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,OAAgB,EAChB,mBAA8C;IAE9C,MAAM,EAAE,WAAW,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,0BAA0B,EAAE,CAAC;IACtE,MAAM,kBAAkB,GAAG,mBAAmB,IAAI,WAAW,CAAC;IAC9D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE/B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,QAAQ,CAAC,EAAE,CAAC,CAAC;YACb,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;QAEzB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,YAAY,CAAC,IAAI,CAAC,CAAC;
|
|
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.
|
|
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.
|
|
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.
|
|
700
|
+
"@agent-native/core": "^0.204.1-nightly-20261008034100"
|
|
701
701
|
},
|
|
702
702
|
"peerDependencies": {
|
|
703
|
-
"@agent-native/core": "
|
|
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
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
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
|
-
: "
|
|
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
|
|
84
|
-
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
|
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(
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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;
|