@agent-native/core 0.0.0-beta-20260820214042 → 0.0.0-beta-20260820222620
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/corpus/templates/analytics/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/assets/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/brain/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/calendar/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/chat/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/clips/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/clips/app/routes/download.tsx +78 -131
- package/corpus/templates/content/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/design/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/dispatch/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/factory/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/forms/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/macros/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/mail/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/plan/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/slides/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/dist/client/agent-page/AgentJobsTab.js +39 -6
- package/dist/client/agent-page/AutomationScheduleDialog.d.ts +10 -1
- package/dist/client/agent-page/AutomationScheduleDialog.js +3 -2
- package/dist/client/agent-page/ScheduledTriggerNotice.d.ts +22 -0
- package/dist/client/agent-page/ScheduledTriggerNotice.js +84 -0
- package/dist/client/agent-page/scheduled-trigger-state.d.ts +28 -0
- package/dist/client/agent-page/scheduled-trigger-state.js +10 -0
- package/dist/client/agent-page/use-jobs.d.ts +7 -0
- package/dist/client/agent-page/use-jobs.js +14 -0
- package/dist/client/blocks/library/diagram.config.d.ts +4 -1
- package/dist/client/blocks/library/diagram.js +1 -1
- package/dist/client/chat/run-recovery.js +15 -7
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/deploy/build.d.ts +5 -0
- package/dist/deploy/build.js +12 -1
- package/dist/framework-tools.js +1 -0
- package/dist/jobs/actions/get-scheduled-trigger-status.d.ts +13 -0
- package/dist/jobs/actions/get-scheduled-trigger-status.js +21 -0
- package/dist/localization/default-messages.d.ts +14 -0
- package/dist/localization/default-messages.js +14 -0
- package/dist/mcp/screen-memory-stdio.d.ts +7 -7
- package/dist/observability/routes.d.ts +3 -3
- package/dist/provider-api/actions/custom-provider-registration.d.ts +4 -4
- package/dist/provider-api/actions/provider-api.d.ts +13 -13
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/server/action-discovery.js +4 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.d.ts +42 -1
- package/dist/server/agent-chat/recurring-jobs-runtime.js +102 -9
- package/dist/server/agent-chat-plugin.d.ts +3 -1
- package/dist/server/agent-chat-plugin.js +3 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/attribution.d.ts +29 -0
- package/dist/server/attribution.js +68 -0
- package/dist/server/auth.js +58 -15
- package/dist/server/better-auth-instance.js +16 -4
- package/dist/server/identity-sso.js +14 -2
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/request-context.d.ts +8 -0
- package/dist/server/request-context.js +4 -0
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/dist/vite/client.js +10 -0
- package/docs/content/deployment.mdx +3 -1
- package/docs/content/recurring-jobs.mdx +6 -0
- package/package.json +3 -3
- package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +11 -0
- package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +11 -0
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -4,20 +4,12 @@ import {
|
|
|
4
4
|
IconBrandChrome,
|
|
5
5
|
IconBrandApple,
|
|
6
6
|
IconBrandWindows,
|
|
7
|
-
IconChevronDown,
|
|
8
|
-
IconDeviceDesktop,
|
|
9
7
|
IconExternalLink,
|
|
8
|
+
IconTerminal2,
|
|
10
9
|
} from "@tabler/icons-react";
|
|
11
10
|
import { useEffect, useState } from "react";
|
|
12
11
|
|
|
13
12
|
import { Button } from "@/components/ui/button";
|
|
14
|
-
import {
|
|
15
|
-
DropdownMenu,
|
|
16
|
-
DropdownMenuContent,
|
|
17
|
-
DropdownMenuRadioGroup,
|
|
18
|
-
DropdownMenuRadioItem,
|
|
19
|
-
DropdownMenuTrigger,
|
|
20
|
-
} from "@/components/ui/dropdown-menu";
|
|
21
13
|
import { Skeleton } from "@/components/ui/skeleton";
|
|
22
14
|
import enMessages from "@/i18n/en-US";
|
|
23
15
|
import {
|
|
@@ -45,7 +37,6 @@ type PlatformId = "mac" | "windows" | "linux";
|
|
|
45
37
|
interface PlatformVariant {
|
|
46
38
|
id: PlatformId;
|
|
47
39
|
label: string;
|
|
48
|
-
sublabel: string;
|
|
49
40
|
assetKinds: readonly (
|
|
50
41
|
| "mac-universal"
|
|
51
42
|
| "mac-arm64"
|
|
@@ -64,23 +55,20 @@ const VARIANTS: PlatformVariant[] = [
|
|
|
64
55
|
{
|
|
65
56
|
id: "mac",
|
|
66
57
|
label: "macOS",
|
|
67
|
-
sublabel: "Universal (Apple Silicon + Intel)",
|
|
68
58
|
assetKinds: ["mac-universal", "mac-arm64", "mac-x64"],
|
|
69
59
|
icon: IconBrandApple,
|
|
70
60
|
},
|
|
71
61
|
{
|
|
72
62
|
id: "windows",
|
|
73
63
|
label: "Windows",
|
|
74
|
-
sublabel: "64-bit MSI installer",
|
|
75
64
|
assetKinds: ["windows-msi"],
|
|
76
65
|
icon: IconBrandWindows,
|
|
77
66
|
},
|
|
78
67
|
{
|
|
79
68
|
id: "linux",
|
|
80
69
|
label: "Linux",
|
|
81
|
-
sublabel: "AppImage, Debian, and RPM packages",
|
|
82
70
|
assetKinds: ["linux-appimage", "linux-deb", "linux-rpm"],
|
|
83
|
-
icon:
|
|
71
|
+
icon: IconTerminal2,
|
|
84
72
|
},
|
|
85
73
|
];
|
|
86
74
|
|
|
@@ -171,47 +159,6 @@ function primaryDownloadButton(
|
|
|
171
159
|
);
|
|
172
160
|
}
|
|
173
161
|
|
|
174
|
-
function secondaryDownloadButton(
|
|
175
|
-
variant: PlatformVariant,
|
|
176
|
-
manifest: Manifest | null,
|
|
177
|
-
manifestError: boolean,
|
|
178
|
-
downloadLabel: string,
|
|
179
|
-
retryLabel: string,
|
|
180
|
-
onRetry: () => void,
|
|
181
|
-
) {
|
|
182
|
-
const asset = pickAsset(manifest, variant);
|
|
183
|
-
const Icon = variant.icon;
|
|
184
|
-
const className =
|
|
185
|
-
"h-auto gap-1.5 px-2 py-1 text-sm font-normal text-muted-foreground hover:bg-transparent hover:text-foreground";
|
|
186
|
-
if (asset) {
|
|
187
|
-
return (
|
|
188
|
-
<Button asChild variant="ghost" className={className}>
|
|
189
|
-
<a href={asset.url} download onClick={markDesktopAppDownloaded}>
|
|
190
|
-
<Icon className="h-4 w-4" />
|
|
191
|
-
{downloadLabel}
|
|
192
|
-
</a>
|
|
193
|
-
</Button>
|
|
194
|
-
);
|
|
195
|
-
}
|
|
196
|
-
if (manifest === null && !manifestError) {
|
|
197
|
-
return <Skeleton className="h-7 w-[208px] rounded-md" />;
|
|
198
|
-
}
|
|
199
|
-
if (manifestError) {
|
|
200
|
-
return (
|
|
201
|
-
<Button variant="ghost" className={className} onClick={onRetry}>
|
|
202
|
-
<Icon className="h-4 w-4" />
|
|
203
|
-
{retryLabel}
|
|
204
|
-
</Button>
|
|
205
|
-
);
|
|
206
|
-
}
|
|
207
|
-
return (
|
|
208
|
-
<Button variant="ghost" className={className} disabled>
|
|
209
|
-
<Icon className="h-4 w-4" />
|
|
210
|
-
{downloadLabel}
|
|
211
|
-
</Button>
|
|
212
|
-
);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
162
|
export default function DownloadPage() {
|
|
216
163
|
const chromeExtensionEnabled = useClipsChromeExtensionEnabled();
|
|
217
164
|
const t = useT();
|
|
@@ -267,7 +214,11 @@ export default function DownloadPage() {
|
|
|
267
214
|
};
|
|
268
215
|
|
|
269
216
|
const primary = VARIANTS.find((v) => v.id === detected) ?? VARIANTS[0];
|
|
270
|
-
|
|
217
|
+
|
|
218
|
+
const handlePlatformChange = (nextPlatform: PlatformId) => {
|
|
219
|
+
if (nextPlatform === detected) return;
|
|
220
|
+
setDetected(nextPlatform);
|
|
221
|
+
};
|
|
271
222
|
|
|
272
223
|
return (
|
|
273
224
|
<div className="min-h-screen bg-background text-foreground">
|
|
@@ -317,87 +268,83 @@ export default function DownloadPage() {
|
|
|
317
268
|
{t("downloadRoute.heroDescription")}
|
|
318
269
|
</p>
|
|
319
270
|
|
|
320
|
-
<div className="mt-10 flex flex-col items-center
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
{manifest ? (
|
|
343
|
-
<>
|
|
344
|
-
{manifest.pub_date
|
|
345
|
-
? t("downloadRoute.versionReleased", {
|
|
346
|
-
version: manifest.version,
|
|
347
|
-
date: new Date(manifest.pub_date).toLocaleDateString(),
|
|
348
|
-
})
|
|
349
|
-
: t("downloadRoute.version", {
|
|
350
|
-
version: manifest.version,
|
|
351
|
-
})}
|
|
352
|
-
</>
|
|
353
|
-
) : manifestError ? (
|
|
354
|
-
<>{t("downloadRoute.manifestError")}</>
|
|
355
|
-
) : (
|
|
356
|
-
<>{t("downloadRoute.loadingRelease")}</>
|
|
357
|
-
)}
|
|
271
|
+
<div className="mt-10 flex flex-col items-center">
|
|
272
|
+
<div className="mb-2 flex justify-center gap-2">
|
|
273
|
+
{VARIANTS.map((variant) => {
|
|
274
|
+
const Icon = variant.icon;
|
|
275
|
+
const active = primary.id === variant.id;
|
|
276
|
+
return (
|
|
277
|
+
<button
|
|
278
|
+
key={variant.id}
|
|
279
|
+
type="button"
|
|
280
|
+
aria-label={variant.label}
|
|
281
|
+
aria-pressed={active}
|
|
282
|
+
onClick={() => handlePlatformChange(variant.id)}
|
|
283
|
+
className={`group flex items-center justify-center rounded-lg p-4 transition-opacity focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ${
|
|
284
|
+
active
|
|
285
|
+
? "text-foreground"
|
|
286
|
+
: "text-muted-foreground opacity-40 hover:opacity-65"
|
|
287
|
+
}`}
|
|
288
|
+
>
|
|
289
|
+
<Icon className="size-6" aria-hidden="true" />
|
|
290
|
+
</button>
|
|
291
|
+
);
|
|
292
|
+
})}
|
|
358
293
|
</div>
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
294
|
+
|
|
295
|
+
<div className="mx-auto mt-8 max-w-2xl text-center">
|
|
296
|
+
{primaryDownloadButton(
|
|
297
|
+
primary,
|
|
298
|
+
manifest,
|
|
299
|
+
manifestError,
|
|
300
|
+
t("downloadRoute.downloadFor", { platform: primary.label }),
|
|
301
|
+
t("downloadRoute.retry"),
|
|
302
|
+
retryManifest,
|
|
303
|
+
)}
|
|
304
|
+
|
|
305
|
+
<div className="mt-5 flex justify-center">
|
|
306
|
+
<div className="flex items-center gap-2 text-xs text-muted-foreground">
|
|
307
|
+
<span>{t("downloadRoute.stable")}</span>
|
|
308
|
+
<button
|
|
363
309
|
type="button"
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
310
|
+
role="switch"
|
|
311
|
+
aria-checked={channel === "nightly"}
|
|
312
|
+
aria-label={t(
|
|
313
|
+
channel === "nightly"
|
|
314
|
+
? "downloadRoute.switchToStable"
|
|
315
|
+
: "downloadRoute.switchToNightly",
|
|
316
|
+
)}
|
|
317
|
+
onClick={() =>
|
|
318
|
+
handleChannelChange(
|
|
319
|
+
channel === "nightly" ? "production" : "nightly",
|
|
320
|
+
)
|
|
321
|
+
}
|
|
322
|
+
className={`relative inline-flex h-5 w-9 shrink-0 items-center rounded-full border border-border transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ${
|
|
323
|
+
channel === "nightly"
|
|
324
|
+
? "bg-foreground"
|
|
325
|
+
: "bg-muted-foreground/20"
|
|
326
|
+
}`}
|
|
368
327
|
>
|
|
369
328
|
<span
|
|
370
|
-
|
|
329
|
+
aria-hidden="true"
|
|
330
|
+
className={`block size-3.5 rounded-full bg-primary-foreground shadow-sm transition-transform ${
|
|
371
331
|
channel === "nightly"
|
|
372
|
-
? "
|
|
373
|
-
:
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
<DropdownMenuContent align="center" className="w-44">
|
|
384
|
-
<DropdownMenuRadioGroup
|
|
385
|
-
value={channel}
|
|
386
|
-
onValueChange={(value) => {
|
|
387
|
-
if (value === "production" || value === "nightly") {
|
|
388
|
-
handleChannelChange(value);
|
|
389
|
-
}
|
|
390
|
-
}}
|
|
332
|
+
? "translate-x-[18px]"
|
|
333
|
+
: "translate-x-[2px]"
|
|
334
|
+
}`}
|
|
335
|
+
/>
|
|
336
|
+
</button>
|
|
337
|
+
<span
|
|
338
|
+
className={
|
|
339
|
+
channel === "nightly"
|
|
340
|
+
? "font-medium text-foreground"
|
|
341
|
+
: "text-muted-foreground"
|
|
342
|
+
}
|
|
391
343
|
>
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
{t("downloadRoute.nightly")}
|
|
397
|
-
</DropdownMenuRadioItem>
|
|
398
|
-
</DropdownMenuRadioGroup>
|
|
399
|
-
</DropdownMenuContent>
|
|
400
|
-
</DropdownMenu>
|
|
344
|
+
{t("downloadRoute.nightly")}
|
|
345
|
+
</span>
|
|
346
|
+
</div>
|
|
347
|
+
</div>
|
|
401
348
|
</div>
|
|
402
349
|
</div>
|
|
403
350
|
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -134,3 +134,14 @@ hand-duplicating framework logic.
|
|
|
134
134
|
`agent-surfaces`.
|
|
135
135
|
- Do not copy framework runtime internals when a public API or narrow UI copy
|
|
136
136
|
will do; read `customizing-agent-native` for the supported override ladder.
|
|
137
|
+
|
|
138
|
+
## Authoring visual docs blocks
|
|
139
|
+
|
|
140
|
+
Treat the shared `Diagram` block as a renderer, not as a reason to style every
|
|
141
|
+
docs UI as a sketch. Use the hand-drawn font and Rough.js only for actual
|
|
142
|
+
diagrams or wireframes that communicate structure, flow, or a design draft.
|
|
143
|
+
For polished UI-like content - cards, logo walls, tables, controls, or product
|
|
144
|
+
shells — set `renderMode="design"` (and usually `frame="hide"` when the block
|
|
145
|
+
is the content itself). Design mode preserves normal docs typography and
|
|
146
|
+
disables the Rough.js overlay. Keep `data-rough` only on elements intentionally
|
|
147
|
+
sketched inside a real diagram.
|
|
@@ -11,7 +11,9 @@ import { AgentEmptyState } from "./AgentEmptyState.js";
|
|
|
11
11
|
import { AgentTabFrame } from "./AgentTabFrame.js";
|
|
12
12
|
import { AutomationDetailsDialog, } from "./AutomationDetailsDialog.js";
|
|
13
13
|
import { AutomationScheduleDialog } from "./AutomationScheduleDialog.js";
|
|
14
|
-
import {
|
|
14
|
+
import { scheduleFiringFor, } from "./scheduled-trigger-state.js";
|
|
15
|
+
import { ScheduledTriggerNotice } from "./ScheduledTriggerNotice.js";
|
|
16
|
+
import { useAutomations, useManageAutomation, useManageRecurringJob, useRunAutomationNow, useRecurringJobs, useScheduledTriggerState, } from "./use-jobs.js";
|
|
15
17
|
function listRecurringJobs(jobs) {
|
|
16
18
|
return jobs.map((resource) => ({
|
|
17
19
|
kind: "recurring",
|
|
@@ -37,7 +39,33 @@ function describeTrigger(entry, t) {
|
|
|
37
39
|
entry.resource.schedule ||
|
|
38
40
|
t("jobs.scheduledTrigger", { defaultValue: "Scheduled" }));
|
|
39
41
|
}
|
|
40
|
-
|
|
42
|
+
/**
|
|
43
|
+
* `nextRun` is computed from the cron expression, not from anything that
|
|
44
|
+
* promises to run it, so it must never be presented with more confidence than
|
|
45
|
+
* the scheduler check earned. Three answers, three phrasings: a known-dead
|
|
46
|
+
* scheduler replaces the date, an unverified one qualifies it, and a confirmed
|
|
47
|
+
* one shows it plainly.
|
|
48
|
+
*/
|
|
49
|
+
function nextRunValue(entry, t, formatDateTime, scheduleFiring, unset) {
|
|
50
|
+
const formatted = formatDateTime(entry.resource.nextRun);
|
|
51
|
+
if (entry.triggerType !== "schedule" || scheduleFiring === "fires") {
|
|
52
|
+
return formatted ?? unset;
|
|
53
|
+
}
|
|
54
|
+
if (scheduleFiring === "never") {
|
|
55
|
+
return t("jobs.nextRunNeverScheduler", {
|
|
56
|
+
defaultValue: "Never — no scheduler in this deploy",
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return formatted
|
|
60
|
+
? t("jobs.nextRunSchedulerUnknown", {
|
|
61
|
+
defaultValue: "{{date}} — unconfirmed, the scheduler check failed",
|
|
62
|
+
date: formatted,
|
|
63
|
+
})
|
|
64
|
+
: t("jobs.nextRunSchedulerUnknownNoDate", {
|
|
65
|
+
defaultValue: "Unknown — the scheduler check failed",
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function detailsFields(entry, t, formatDateTime, scheduleFiring) {
|
|
41
69
|
const resource = entry.resource;
|
|
42
70
|
const unset = t("jobs.notSet", { defaultValue: "—" });
|
|
43
71
|
const fields = [
|
|
@@ -66,7 +94,7 @@ function detailsFields(entry, t, formatDateTime) {
|
|
|
66
94
|
}
|
|
67
95
|
fields.push({
|
|
68
96
|
label: t("jobs.nextRun", { defaultValue: "Next run" }),
|
|
69
|
-
value:
|
|
97
|
+
value: nextRunValue(entry, t, formatDateTime, scheduleFiring, unset),
|
|
70
98
|
}, {
|
|
71
99
|
label: t("jobs.lastRun", { defaultValue: "Last run" }),
|
|
72
100
|
value: formatDateTime(resource.lastRun) ??
|
|
@@ -104,6 +132,11 @@ export function AgentJobsTab({ canManageOrg = false, hideHeader = false, }) {
|
|
|
104
132
|
const personalAutomationsQuery = useAutomations("user");
|
|
105
133
|
const organizationJobsQuery = useRecurringJobs("org");
|
|
106
134
|
const organizationAutomationsQuery = useAutomations("org");
|
|
135
|
+
const scheduledTriggerState = useScheduledTriggerState();
|
|
136
|
+
// Three states, not `!== false`: that expression also swallowed a FAILED
|
|
137
|
+
// status query, which then licensed a confident "Next run" forever. See
|
|
138
|
+
// `scheduleFiringFor` for which way each state leans and why.
|
|
139
|
+
const scheduleFiring = scheduleFiringFor(scheduledTriggerState);
|
|
107
140
|
const personalJobsMutation = useManageRecurringJob("user");
|
|
108
141
|
const personalAutomationsMutation = useManageAutomation("user");
|
|
109
142
|
const organizationJobsMutation = useManageRecurringJob("org");
|
|
@@ -240,7 +273,7 @@ export function AgentJobsTab({ canManageOrg = false, hideHeader = false, }) {
|
|
|
240
273
|
defaultValue: "Create an automation",
|
|
241
274
|
}), label: t("jobs.newAutomation", {
|
|
242
275
|
defaultValue: "New automation",
|
|
243
|
-
}) }), children: [_jsxs("div", { className: "space-y-7", children: [hideHeader ? (_jsx("div", { className: "flex justify-end", children: _jsx(AgentAskPopover, { context: automationCreationContext(), prompt: t("jobs.automationPrompt", {
|
|
276
|
+
}) }), children: [_jsxs("div", { className: "space-y-7", children: [_jsx(ScheduledTriggerNotice, { state: scheduledTriggerState }), hideHeader ? (_jsx("div", { className: "flex justify-end", children: _jsx(AgentAskPopover, { context: automationCreationContext(), prompt: t("jobs.automationPrompt", {
|
|
244
277
|
defaultValue: "Create an automation that does this: ",
|
|
245
278
|
}), title: t("jobs.automationsCreateTitle", {
|
|
246
279
|
defaultValue: "Create an automation",
|
|
@@ -296,9 +329,9 @@ export function AgentJobsTab({ canManageOrg = false, hideHeader = false, }) {
|
|
|
296
329
|
name: runTarget.resource.name,
|
|
297
330
|
scope: runTarget.resource.scope,
|
|
298
331
|
}, { onSuccess: () => setRunTarget(null) });
|
|
299
|
-
}, children: [runAutomationMutation.isPending ? (_jsx(IconLoader2, { className: "size-4 animate-spin" })) : (_jsx(IconPlayerPlay, { className: "size-4" })), t("jobs.runNow", { defaultValue: "Run now" })] })] })] }) }), detailsTarget ? (_jsx(AutomationDetailsDialog, { open: true, name: detailsTarget.resource.name, scope: detailsTarget.resource.scope === "organization" ? "org" : "user", triggerSummary: describeTrigger(detailsTarget, t), fields: detailsFields(detailsTarget, t, formatDateTime), condition: detailsTarget.kind === "automation"
|
|
332
|
+
}, children: [runAutomationMutation.isPending ? (_jsx(IconLoader2, { className: "size-4 animate-spin" })) : (_jsx(IconPlayerPlay, { className: "size-4" })), t("jobs.runNow", { defaultValue: "Run now" })] })] })] }) }), detailsTarget ? (_jsx(AutomationDetailsDialog, { open: true, name: detailsTarget.resource.name, scope: detailsTarget.resource.scope === "organization" ? "org" : "user", triggerSummary: describeTrigger(detailsTarget, t), fields: detailsFields(detailsTarget, t, formatDateTime, scheduleFiring), condition: detailsTarget.kind === "automation"
|
|
300
333
|
? detailsTarget.resource.condition
|
|
301
334
|
: null, instructions: detailsTarget.kind === "automation"
|
|
302
335
|
? detailsTarget.resource.body
|
|
303
|
-
: detailsTarget.resource.instructions, mcpTools: detailsTarget.resource.mcpTools ?? [], lastError: detailsTarget.resource.lastError, formatTimestamp: (value) => formatDateTime(new Date(value).toISOString()) ?? String(value), onClose: () => setDetailsTarget(null) })) : null, scheduleTarget ? (_jsx(AutomationScheduleDialog, { open: true, name: scheduleTarget.resource.name, schedule: scheduleTarget.resource.schedule ?? "", timezone: scheduleTarget.resource.timezone ?? null, saving: mutationPending, error: mutationError ? mutationError.message : null, onCancel: () => setScheduleTarget(null), onSave: (next) => mutateEntry(scheduleTarget, "update", next, () => setScheduleTarget(null)) })) : null] }));
|
|
336
|
+
: detailsTarget.resource.instructions, mcpTools: detailsTarget.resource.mcpTools ?? [], lastError: detailsTarget.resource.lastError, formatTimestamp: (value) => formatDateTime(new Date(value).toISOString()) ?? String(value), onClose: () => setDetailsTarget(null) })) : null, scheduleTarget ? (_jsx(AutomationScheduleDialog, { open: true, name: scheduleTarget.resource.name, schedule: scheduleTarget.resource.schedule ?? "", timezone: scheduleTarget.resource.timezone ?? null, saving: mutationPending, error: mutationError ? mutationError.message : null, scheduledTriggerState: scheduledTriggerState, onCancel: () => setScheduleTarget(null), onSave: (next) => mutateEntry(scheduleTarget, "update", next, () => setScheduleTarget(null)) })) : null] }));
|
|
304
337
|
}
|