@agent-native/core-corpus 0.209.2-nightly-20261016124700 → 0.209.2
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/README.md +1 -1
- package/corpus/templates/analytics/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/analytics/CHANGELOG.md +18 -0
- package/corpus/templates/assets/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/brain/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/brain/CHANGELOG.md +6 -0
- package/corpus/templates/calendar/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/chat/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/chat/scripts/migrate-production.ts +5 -1
- package/corpus/templates/clips/CHANGELOG.md +18 -0
- package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +17 -20
- package/corpus/templates/clips/app/components/library/folder-move-items.tsx +110 -0
- package/corpus/templates/clips/app/components/library/recording-card.tsx +29 -42
- package/corpus/templates/clips/app/components/player/player-controls.tsx +0 -2
- package/corpus/templates/clips/app/components/player/video-player.tsx +0 -2
- package/corpus/templates/clips/app/i18n/en-US.ts +1 -0
- package/corpus/templates/content/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/content/CHANGELOG.md +6 -0
- package/corpus/templates/crm/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/design/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/design/CHANGELOG.md +14 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +7 -32
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +6 -12
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +11 -6
- package/corpus/templates/design/app/components/design/TokensPanel.tsx +4 -18
- package/corpus/templates/design/app/components/design/code-workbench/editor/BufferSync.tsx +26 -1
- package/corpus/templates/design/app/components/design/context-menu-item.tsx +3 -8
- package/corpus/templates/design/app/i18n/en-US.ts +2 -0
- package/corpus/templates/design/app/pages/design-editor/design-editor-view.tsx +3 -7
- package/corpus/templates/design/app/pages/design-editor/domains/use-editor-edit-commands.ts +17 -10
- package/corpus/templates/design/app/pages/design-editor/selection-state.ts +26 -0
- package/corpus/templates/design/app/pages/design-editor/view/publish-waitlist-control.tsx +73 -76
- package/corpus/templates/design/app/pages/design-editor/view/share-copy-link-button.tsx +82 -0
- package/corpus/templates/design/changelog/2026-10-16-shift-drag-keeps-selected-screens-screen-nudges-stay-with-th.md +6 -0
- package/corpus/templates/dispatch/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/factory/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/forms/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/mail/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/mail/CHANGELOG.md +1 -0
- package/corpus/templates/plan/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/slides/.agents/skills/slide-editing/references/animations.md +5 -0
- package/corpus/templates/slides/.agents/skills/storing-data/SKILL.md +5 -3
- package/corpus/templates/slides/CHANGELOG.md +33 -0
- package/corpus/templates/slides/actions/get-deck.ts +2 -0
- package/corpus/templates/slides/actions/patch-deck.ts +7 -0
- package/corpus/templates/slides/app/components/editor/AnimationsPanel.tsx +118 -42
- package/corpus/templates/slides/app/components/editor/AppMenu.tsx +356 -0
- package/corpus/templates/slides/app/components/editor/AssetLibraryPanel.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +193 -220
- package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +117 -72
- package/corpus/templates/slides/app/components/editor/HistoryPanel.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/ImageGenPanel.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +97 -32
- package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +7 -2
- package/corpus/templates/slides/app/components/presentation/PresenterView.tsx +6 -2
- package/corpus/templates/slides/app/components/presentation/SlideTransitionStage.tsx +6 -2
- package/corpus/templates/slides/app/components/presentation/slide-build-steps.ts +36 -11
- package/corpus/templates/slides/app/context/DeckContext.tsx +5 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +29 -0
- package/corpus/templates/slides/app/lib/generation-state.ts +10 -2
- package/corpus/templates/slides/app/lib/slide-animation-elements.ts +59 -1
- package/corpus/templates/slides/app/lib/slide-clipboard.ts +10 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +563 -171
- package/corpus/templates/slides/changelog/2026-10-14-the-logo-now-opens-an-app-menu-with-file-edit-view-preferenc.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-15-deck-prompts-stay-visible-when-generation-status-checks-fail.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-15-your-original-prompt-stays-available-when-you-reopen-a-deck-.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-16-animations-can-now-play-with-the-previous-one-so-several-obj.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-16-slides-keeps-the-original-prompt-available-if-saving-a-faile.md +6 -0
- package/corpus/templates/slides/shared/api.ts +10 -0
- package/corpus/templates/slides/shared/pdf-sidecar.ts +2 -0
- package/corpus/templates/tasks/.agents/skills/storing-data/SKILL.md +5 -3
- package/package.json +1 -1
- package/corpus/templates/analytics/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/assets/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/brain/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/calendar/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/chat/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/clips/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/content/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/crm/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/design/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/design/app/components/design/context-menu-styles.ts +0 -10
- package/corpus/templates/design/app/pages/design-editor/view/share-export-menu.tsx +0 -99
- package/corpus/templates/dispatch/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/forms/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/mail/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/plan/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/slides/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
package/corpus/README.md
CHANGED
|
@@ -44,9 +44,11 @@ second migration owner beside it. The Chat and default starters do not ship that
|
|
|
44
44
|
Drizzle Kit setup; follow their local instructions and the Database docs for
|
|
45
45
|
the migration path. In Chat, add `server/db/schema.ts`, `server/db/index.ts`
|
|
46
46
|
with `createGetDb(schema)`, and `server/plugins/db.ts` with
|
|
47
|
-
`runMigrations([...], { table })`. `scripts/migrate-production.ts`
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
`runMigrations([...], { table })`. `scripts/migrate-production.ts` applies the
|
|
48
|
+
framework tables and then that plugin (`runAppReleaseMigrations`), because a
|
|
49
|
+
release-owned deploy skips it at boot; a project with a Drizzle config is left to
|
|
50
|
+
`db:migrate`, and do not create a parallel `runMigrations([...])` list beside a
|
|
51
|
+
generated Drizzle migration owner. Give each handwritten migration a unique, stable `name`
|
|
50
52
|
alongside its `version`; append changes instead of renumbering, reusing, or
|
|
51
53
|
editing an applied entry.
|
|
52
54
|
|
|
@@ -5,19 +5,37 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
5
5
|
|
|
6
6
|
## 2026-10-15
|
|
7
7
|
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- Add key dates and data notes from the dashboard's new Annotations menu or a chart's menu, show or hide key-date sets per dashboard, and mark a note fixed or hide it on one chart from its hover card.
|
|
11
|
+
- Data notes shade the days a chart's numbers were affected by an incident or a tracking problem, on the dashboard and in scheduled email reports.
|
|
12
|
+
- Each dashboard save you make pops up with Undo, says whether everyone sees it, and shows how many others have the dashboard open.
|
|
13
|
+
- In Edit mode, check two or more values in a multi-select filter and save them as a named group that everyone can pick in one click.
|
|
14
|
+
|
|
8
15
|
### Improved
|
|
9
16
|
|
|
17
|
+
- Dashboard history now says what each save changed, and the save toast names the change
|
|
18
|
+
- The agent now sees which key dates and data notes a dashboard's charts draw, and confirms which charts a new key date or data note shows on.
|
|
10
19
|
- Collapsed navigation has clearer spacing between its icons
|
|
11
20
|
|
|
12
21
|
## 2026-10-14
|
|
13
22
|
|
|
14
23
|
### Added
|
|
15
24
|
|
|
25
|
+
- Dashboard charts can mark key dates, like a launch, with a hoverable badge on the x-axis.
|
|
26
|
+
- Funnel charts can split each stage into completed, skipped, moved on and left the app, so a skipped optional step no longer reads as drop-off.
|
|
27
|
+
- Key-date sets: add launches and product changes once and they show on every time chart of every dashboard and in emailed reports; a dashboard can hide a set.
|
|
16
28
|
- Multi-select dashboard filters can offer presets, named groups of values you pick in one click without changing the other filters.
|
|
17
29
|
- Preview Sigma workbooks in Analytics; SQL import stays blocked until the BigQuery project mapping can be verified.
|
|
18
30
|
|
|
19
31
|
### Improved
|
|
20
32
|
|
|
33
|
+
- Changed dashboard filters now say only you see them, and coming back to a dashboard without a default view reopens the saved view you had open.
|
|
34
|
+
- Dashboard charts stay visible while they refresh or while new filters load, marked as updating, instead of blanking to a skeleton
|
|
35
|
+
- Dashboards open in View mode, so looking around never changes them for everyone; switch to Edit to rearrange, rename, or resize for everyone, and column widths you drag while viewing stay just for you.
|
|
36
|
+
- Dashboards show a Reset filters button whenever a filter differs from the saved view you have open, or from the defaults when no view is open, and it puts every filter back in one click.
|
|
37
|
+
- Key-date markers on charts now show every event of the day in one hover card, accept a time of day and time zone, and appear on combo charts in emailed reports.
|
|
38
|
+
- Dashboard charts below the fold no longer re-run their queries when filters change until you scroll to them, and scrolling a loaded chart away and back never re-runs it
|
|
21
39
|
- Dashboards show a Reset filters button whenever a filter differs from the defaults, and it returns every filter to them in one click.
|
|
22
40
|
- Gong questions use Gong's own search and answer in seconds instead of paging through every call.
|
|
23
41
|
- Start Sigma workbook imports from the dashboard menu, use an Analytics-only connection with direct credentials, or choose a Sigma connection already granted through Dispatch.
|
|
@@ -44,9 +44,11 @@ second migration owner beside it. The Chat and default starters do not ship that
|
|
|
44
44
|
Drizzle Kit setup; follow their local instructions and the Database docs for
|
|
45
45
|
the migration path. In Chat, add `server/db/schema.ts`, `server/db/index.ts`
|
|
46
46
|
with `createGetDb(schema)`, and `server/plugins/db.ts` with
|
|
47
|
-
`runMigrations([...], { table })`. `scripts/migrate-production.ts`
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
`runMigrations([...], { table })`. `scripts/migrate-production.ts` applies the
|
|
48
|
+
framework tables and then that plugin (`runAppReleaseMigrations`), because a
|
|
49
|
+
release-owned deploy skips it at boot; a project with a Drizzle config is left to
|
|
50
|
+
`db:migrate`, and do not create a parallel `runMigrations([...])` list beside a
|
|
51
|
+
generated Drizzle migration owner. Give each handwritten migration a unique, stable `name`
|
|
50
52
|
alongside its `version`; append changes instead of renumbering, reusing, or
|
|
51
53
|
editing an applied entry.
|
|
52
54
|
|
|
@@ -44,9 +44,11 @@ second migration owner beside it. The Chat and default starters do not ship that
|
|
|
44
44
|
Drizzle Kit setup; follow their local instructions and the Database docs for
|
|
45
45
|
the migration path. In Chat, add `server/db/schema.ts`, `server/db/index.ts`
|
|
46
46
|
with `createGetDb(schema)`, and `server/plugins/db.ts` with
|
|
47
|
-
`runMigrations([...], { table })`. `scripts/migrate-production.ts`
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
`runMigrations([...], { table })`. `scripts/migrate-production.ts` applies the
|
|
48
|
+
framework tables and then that plugin (`runAppReleaseMigrations`), because a
|
|
49
|
+
release-owned deploy skips it at boot; a project with a Drizzle config is left to
|
|
50
|
+
`db:migrate`, and do not create a parallel `runMigrations([...])` list beside a
|
|
51
|
+
generated Drizzle migration owner. Give each handwritten migration a unique, stable `name`
|
|
50
52
|
alongside its `version`; append changes instead of renumbering, reusing, or
|
|
51
53
|
editing an applied entry.
|
|
52
54
|
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
All notable user-facing changes to Agent-Native Brain are documented here. Open it any
|
|
4
4
|
time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
5
5
|
|
|
6
|
+
## 2026-10-15
|
|
7
|
+
|
|
8
|
+
### Improved
|
|
9
|
+
|
|
10
|
+
- Saving a source's settings refreshes the Sources list faster, and the source shows "Updating…" until its new settings appear.
|
|
11
|
+
|
|
6
12
|
## 2026-10-13
|
|
7
13
|
|
|
8
14
|
### Changed
|
|
@@ -44,9 +44,11 @@ second migration owner beside it. The Chat and default starters do not ship that
|
|
|
44
44
|
Drizzle Kit setup; follow their local instructions and the Database docs for
|
|
45
45
|
the migration path. In Chat, add `server/db/schema.ts`, `server/db/index.ts`
|
|
46
46
|
with `createGetDb(schema)`, and `server/plugins/db.ts` with
|
|
47
|
-
`runMigrations([...], { table })`. `scripts/migrate-production.ts`
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
`runMigrations([...], { table })`. `scripts/migrate-production.ts` applies the
|
|
48
|
+
framework tables and then that plugin (`runAppReleaseMigrations`), because a
|
|
49
|
+
release-owned deploy skips it at boot; a project with a Drizzle config is left to
|
|
50
|
+
`db:migrate`, and do not create a parallel `runMigrations([...])` list beside a
|
|
51
|
+
generated Drizzle migration owner. Give each handwritten migration a unique, stable `name`
|
|
50
52
|
alongside its `version`; append changes instead of renumbering, reusing, or
|
|
51
53
|
editing an applied entry.
|
|
52
54
|
|
|
@@ -44,9 +44,11 @@ second migration owner beside it. The Chat and default starters do not ship that
|
|
|
44
44
|
Drizzle Kit setup; follow their local instructions and the Database docs for
|
|
45
45
|
the migration path. In Chat, add `server/db/schema.ts`, `server/db/index.ts`
|
|
46
46
|
with `createGetDb(schema)`, and `server/plugins/db.ts` with
|
|
47
|
-
`runMigrations([...], { table })`. `scripts/migrate-production.ts`
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
`runMigrations([...], { table })`. `scripts/migrate-production.ts` applies the
|
|
48
|
+
framework tables and then that plugin (`runAppReleaseMigrations`), because a
|
|
49
|
+
release-owned deploy skips it at boot; a project with a Drizzle config is left to
|
|
50
|
+
`db:migrate`, and do not create a parallel `runMigrations([...])` list beside a
|
|
51
|
+
generated Drizzle migration owner. Give each handwritten migration a unique, stable `name`
|
|
50
52
|
alongside its `version`; append changes instead of renumbering, reusing, or
|
|
51
53
|
editing an applied entry.
|
|
52
54
|
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { closeDbExec, withMigrationRuntime } from "@agent-native/core/db";
|
|
2
2
|
import { loadEnv } from "@agent-native/core/scripts";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
runAppReleaseMigrations,
|
|
5
|
+
runFrameworkReleaseMigrations,
|
|
6
|
+
} from "@agent-native/core/server";
|
|
4
7
|
|
|
5
8
|
loadEnv();
|
|
6
9
|
|
|
7
10
|
async function main(): Promise<void> {
|
|
8
11
|
await withMigrationRuntime(async () => {
|
|
9
12
|
await runFrameworkReleaseMigrations(null);
|
|
13
|
+
await runAppReleaseMigrations();
|
|
10
14
|
});
|
|
11
15
|
}
|
|
12
16
|
|
|
@@ -5,6 +5,10 @@ from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
5
5
|
|
|
6
6
|
## 2026-10-15
|
|
7
7
|
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- Step through a paused clip frame by frame with the comma and period keys, and comments keep the exact frame they were left on.
|
|
11
|
+
|
|
8
12
|
### Improved
|
|
9
13
|
|
|
10
14
|
- Clips stays labeled in the menu bar while idle
|
|
@@ -12,6 +16,9 @@ from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
12
16
|
|
|
13
17
|
### Fixed
|
|
14
18
|
|
|
19
|
+
- Camera permission denials now show the right recovery guidance
|
|
20
|
+
- The Dictionary scrolls through long lists and stays closed during dictation, Archive and Trash show counts, and selection checkboxes stay visible over dark previews.
|
|
21
|
+
- The Share and copy-link buttons now match in color.
|
|
15
22
|
- Rewind can be enabled from Include last without leaving the recorder.
|
|
16
23
|
- Screen Memory checks privacy exclusions during capture recovery
|
|
17
24
|
- Screen Memory retries capture promptly after audio mode changes fail
|
|
@@ -20,6 +27,14 @@ from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
20
27
|
|
|
21
28
|
## 2026-10-14
|
|
22
29
|
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- Add a transcript file to a clip from the transcript panel: WebVTT, SRT, or a timestamped transcript copied from YouTube. Clips keeps its timings, labels it as imported, and automatic transcription never replaces it.
|
|
33
|
+
- Agents connected over MCP can upload a local video file to Clips, choose who can open it, and get its share link back.
|
|
34
|
+
- Extension recordings of Agent-Native apps include what the app did, from 30 seconds before recording started, in the Debug panel and for agents.
|
|
35
|
+
- Record and store your first three clips before connecting your own storage
|
|
36
|
+
- Record three clips before connecting your own storage
|
|
37
|
+
|
|
23
38
|
### Improved
|
|
24
39
|
|
|
25
40
|
- Earlier screen time now follows its clip's normal share rules: adding it no longer makes the clip private, and sharing the clip shares its earlier screen time with it.
|
|
@@ -28,6 +43,9 @@ from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
28
43
|
|
|
29
44
|
### Fixed
|
|
30
45
|
|
|
46
|
+
- Captions and the transcript highlight change on cue instead of up to a quarter second late.
|
|
47
|
+
- Clips recognizes existing sign-ins when checking access to free hosted recordings
|
|
48
|
+
- Hosted clips now save reliably to S3-compatible storage, including streamed recordings.
|
|
31
49
|
- Clips keeps the camera preview open while Control Center is active.
|
|
32
50
|
- Clips recording errors without a recovery action now dismiss automatically
|
|
33
51
|
- Dictation cleanup can be undone and the original transcript remains available.
|
|
@@ -14,9 +14,14 @@ import {
|
|
|
14
14
|
DropdownMenuItem,
|
|
15
15
|
DropdownMenuLabel,
|
|
16
16
|
DropdownMenuSeparator,
|
|
17
|
+
DropdownMenuSub,
|
|
18
|
+
DropdownMenuSubContent,
|
|
19
|
+
DropdownMenuSubTrigger,
|
|
17
20
|
DropdownMenuTrigger,
|
|
18
21
|
} from "@/components/ui/dropdown-menu";
|
|
19
22
|
|
|
23
|
+
import { FolderMoveItems } from "./folder-move-items";
|
|
24
|
+
|
|
20
25
|
export interface BulkMoveTarget {
|
|
21
26
|
id: string | null;
|
|
22
27
|
name: string;
|
|
@@ -107,7 +112,6 @@ export function BulkActionToolbar({
|
|
|
107
112
|
<DropdownMenuLabel>
|
|
108
113
|
{t("clipsFinalRaw.moveSelected", { count })}
|
|
109
114
|
</DropdownMenuLabel>
|
|
110
|
-
<DropdownMenuSeparator />
|
|
111
115
|
<DropdownMenuItem
|
|
112
116
|
disabled={isPending}
|
|
113
117
|
onSelect={() => {
|
|
@@ -118,25 +122,18 @@ export function BulkActionToolbar({
|
|
|
118
122
|
{t("navigation.newFolder")}
|
|
119
123
|
</DropdownMenuItem>
|
|
120
124
|
<DropdownMenuSeparator />
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
{target.disabled && (
|
|
134
|
-
<span className="ms-auto text-xs text-muted-foreground">
|
|
135
|
-
{t("clipsFinalRaw.current")}
|
|
136
|
-
</span>
|
|
137
|
-
)}
|
|
138
|
-
</DropdownMenuItem>
|
|
139
|
-
))}
|
|
125
|
+
<FolderMoveItems
|
|
126
|
+
parts={{
|
|
127
|
+
Item: DropdownMenuItem,
|
|
128
|
+
Separator: DropdownMenuSeparator,
|
|
129
|
+
Sub: DropdownMenuSub,
|
|
130
|
+
SubTrigger: DropdownMenuSubTrigger,
|
|
131
|
+
SubContent: DropdownMenuSubContent,
|
|
132
|
+
}}
|
|
133
|
+
targets={moveTargets}
|
|
134
|
+
disabled={isPending}
|
|
135
|
+
onMove={(folderId) => onMove?.(folderId)}
|
|
136
|
+
/>
|
|
140
137
|
</DropdownMenuContent>
|
|
141
138
|
</DropdownMenu>
|
|
142
139
|
)}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { useT } from "@agent-native/core/client/i18n";
|
|
2
|
+
import type { ComponentType, ReactNode } from "react";
|
|
3
|
+
|
|
4
|
+
import type { BulkMoveTarget } from "./bulk-action-toolbar";
|
|
5
|
+
|
|
6
|
+
interface MenuItemProps {
|
|
7
|
+
children?: ReactNode;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
onSelect?: (event: Event) => void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface MenuContainerProps {
|
|
13
|
+
children?: ReactNode;
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** The dropdown or context menu primitives to render folder rows with. */
|
|
18
|
+
export interface FolderMenuParts {
|
|
19
|
+
Item: ComponentType<MenuItemProps>;
|
|
20
|
+
Separator: ComponentType;
|
|
21
|
+
Sub: ComponentType<{ children?: ReactNode }>;
|
|
22
|
+
SubTrigger: ComponentType<MenuContainerProps>;
|
|
23
|
+
SubContent: ComponentType<MenuContainerProps>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface FolderNode {
|
|
27
|
+
target: BulkMoveTarget;
|
|
28
|
+
children: FolderNode[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Targets arrive flattened depth-first with a `depth`; the library root has
|
|
32
|
+
// no depth and never has children.
|
|
33
|
+
function buildFolderTree(targets: BulkMoveTarget[]): FolderNode[] {
|
|
34
|
+
const roots: FolderNode[] = [];
|
|
35
|
+
const stack: { depth: number; node: FolderNode }[] = [];
|
|
36
|
+
for (const target of targets) {
|
|
37
|
+
const node: FolderNode = { target, children: [] };
|
|
38
|
+
if (target.id === null) {
|
|
39
|
+
roots.push(node);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const depth = target.depth ?? 0;
|
|
43
|
+
while (stack.length > 0 && stack[stack.length - 1].depth >= depth) {
|
|
44
|
+
stack.pop();
|
|
45
|
+
}
|
|
46
|
+
const parent = stack[stack.length - 1];
|
|
47
|
+
(parent ? parent.node.children : roots).push(node);
|
|
48
|
+
stack.push({ depth, node });
|
|
49
|
+
}
|
|
50
|
+
return roots;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function FolderMoveItems({
|
|
54
|
+
parts,
|
|
55
|
+
targets,
|
|
56
|
+
disabled,
|
|
57
|
+
onMove,
|
|
58
|
+
}: {
|
|
59
|
+
parts: FolderMenuParts;
|
|
60
|
+
targets: BulkMoveTarget[];
|
|
61
|
+
disabled?: boolean;
|
|
62
|
+
onMove: (folderId: string | null) => void;
|
|
63
|
+
}) {
|
|
64
|
+
const t = useT();
|
|
65
|
+
const { Item, Separator, Sub, SubTrigger, SubContent } = parts;
|
|
66
|
+
|
|
67
|
+
const renderMoveRow = (
|
|
68
|
+
key: string,
|
|
69
|
+
target: BulkMoveTarget,
|
|
70
|
+
label: ReactNode,
|
|
71
|
+
) => (
|
|
72
|
+
<Item
|
|
73
|
+
key={key}
|
|
74
|
+
disabled={target.disabled || disabled}
|
|
75
|
+
onSelect={() => onMove(target.id)}
|
|
76
|
+
>
|
|
77
|
+
<span className="truncate">{label}</span>
|
|
78
|
+
{target.disabled ? (
|
|
79
|
+
<span className="ms-auto text-xs text-muted-foreground">
|
|
80
|
+
{t("clipsFinalRaw.current")}
|
|
81
|
+
</span>
|
|
82
|
+
) : null}
|
|
83
|
+
</Item>
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const renderNode = (node: FolderNode, index: number): ReactNode => {
|
|
87
|
+
const key = node.target.id ?? `root-${index}`;
|
|
88
|
+
if (node.children.length === 0) {
|
|
89
|
+
return renderMoveRow(key, node.target, node.target.name);
|
|
90
|
+
}
|
|
91
|
+
return (
|
|
92
|
+
<Sub key={key}>
|
|
93
|
+
<SubTrigger>
|
|
94
|
+
<span className="truncate">{node.target.name}</span>
|
|
95
|
+
</SubTrigger>
|
|
96
|
+
<SubContent className="w-64">
|
|
97
|
+
{renderMoveRow(
|
|
98
|
+
`${key}-here`,
|
|
99
|
+
node.target,
|
|
100
|
+
t("clipsFinalRaw.moveHere"),
|
|
101
|
+
)}
|
|
102
|
+
<Separator />
|
|
103
|
+
{node.children.map(renderNode)}
|
|
104
|
+
</SubContent>
|
|
105
|
+
</Sub>
|
|
106
|
+
);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
return <>{buildFolderTree(targets).map(renderNode)}</>;
|
|
110
|
+
}
|
|
@@ -66,6 +66,23 @@ import { isStorageSetupFailureReason } from "@/lib/storage-failures";
|
|
|
66
66
|
import { cn } from "@/lib/utils";
|
|
67
67
|
|
|
68
68
|
import type { BulkMoveTarget } from "./bulk-action-toolbar";
|
|
69
|
+
import { FolderMoveItems, type FolderMenuParts } from "./folder-move-items";
|
|
70
|
+
|
|
71
|
+
const DROPDOWN_FOLDER_PARTS: FolderMenuParts = {
|
|
72
|
+
Item: DropdownMenuItem,
|
|
73
|
+
Separator: DropdownMenuSeparator,
|
|
74
|
+
Sub: DropdownMenuSub,
|
|
75
|
+
SubTrigger: DropdownMenuSubTrigger,
|
|
76
|
+
SubContent: DropdownMenuSubContent,
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const CONTEXT_FOLDER_PARTS: FolderMenuParts = {
|
|
80
|
+
Item: ContextMenuItem,
|
|
81
|
+
Separator: ContextMenuSeparator,
|
|
82
|
+
Sub: ContextMenuSub,
|
|
83
|
+
SubTrigger: ContextMenuSubTrigger,
|
|
84
|
+
SubContent: ContextMenuSubContent,
|
|
85
|
+
};
|
|
69
86
|
|
|
70
87
|
function formatDuration(ms: number): string {
|
|
71
88
|
const totalSeconds = Math.max(0, Math.floor(ms / 1000));
|
|
@@ -590,27 +607,12 @@ export function RecordingCard({
|
|
|
590
607
|
{t("navigation.newFolder")}
|
|
591
608
|
</DropdownMenuItem>
|
|
592
609
|
<DropdownMenuSeparator />
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
<span
|
|
600
|
-
className="truncate"
|
|
601
|
-
style={{
|
|
602
|
-
paddingInlineStart: (target.depth ?? 0) * 12,
|
|
603
|
-
}}
|
|
604
|
-
>
|
|
605
|
-
{target.name}
|
|
606
|
-
</span>
|
|
607
|
-
{target.disabled && (
|
|
608
|
-
<span className="ms-auto text-xs text-muted-foreground">
|
|
609
|
-
{t("clipsFinalRaw.current")}
|
|
610
|
-
</span>
|
|
611
|
-
)}
|
|
612
|
-
</DropdownMenuItem>
|
|
613
|
-
))}
|
|
610
|
+
<FolderMoveItems
|
|
611
|
+
parts={DROPDOWN_FOLDER_PARTS}
|
|
612
|
+
targets={moveTargets}
|
|
613
|
+
disabled={isMovePending}
|
|
614
|
+
onMove={(folderId) => onMove?.(recording, folderId)}
|
|
615
|
+
/>
|
|
614
616
|
</DropdownMenuSubContent>
|
|
615
617
|
</DropdownMenuSub>
|
|
616
618
|
) : null}
|
|
@@ -751,27 +753,12 @@ export function RecordingCard({
|
|
|
751
753
|
{t("navigation.newFolder")}
|
|
752
754
|
</ContextMenuItem>
|
|
753
755
|
<ContextMenuSeparator />
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
<span
|
|
761
|
-
className="truncate"
|
|
762
|
-
style={{
|
|
763
|
-
paddingInlineStart: (target.depth ?? 0) * 12,
|
|
764
|
-
}}
|
|
765
|
-
>
|
|
766
|
-
{target.name}
|
|
767
|
-
</span>
|
|
768
|
-
{target.disabled && (
|
|
769
|
-
<span className="ms-auto text-xs text-muted-foreground">
|
|
770
|
-
{t("clipsFinalRaw.current")}
|
|
771
|
-
</span>
|
|
772
|
-
)}
|
|
773
|
-
</ContextMenuItem>
|
|
774
|
-
))}
|
|
756
|
+
<FolderMoveItems
|
|
757
|
+
parts={CONTEXT_FOLDER_PARTS}
|
|
758
|
+
targets={moveTargets}
|
|
759
|
+
disabled={isMovePending}
|
|
760
|
+
onMove={(folderId) => onMove?.(recording, folderId)}
|
|
761
|
+
/>
|
|
775
762
|
</ContextMenuSubContent>
|
|
776
763
|
</ContextMenuSub>
|
|
777
764
|
) : null}
|
|
@@ -20,7 +20,6 @@ import {
|
|
|
20
20
|
DropdownMenuItem,
|
|
21
21
|
DropdownMenuTrigger,
|
|
22
22
|
DropdownMenuLabel,
|
|
23
|
-
DropdownMenuSeparator,
|
|
24
23
|
} from "@/components/ui/dropdown-menu";
|
|
25
24
|
import {
|
|
26
25
|
Popover,
|
|
@@ -255,7 +254,6 @@ export function PlayerControls(props: PlayerControlsProps) {
|
|
|
255
254
|
container={menuPortalContainer}
|
|
256
255
|
>
|
|
257
256
|
<DropdownMenuLabel>Speed</DropdownMenuLabel>
|
|
258
|
-
<DropdownMenuSeparator />
|
|
259
257
|
{SPEED_OPTIONS.map((rate) => (
|
|
260
258
|
<DropdownMenuItem
|
|
261
259
|
key={rate}
|
|
@@ -25,7 +25,6 @@ import {
|
|
|
25
25
|
DropdownMenuContent,
|
|
26
26
|
DropdownMenuItem,
|
|
27
27
|
DropdownMenuLabel,
|
|
28
|
-
DropdownMenuSeparator,
|
|
29
28
|
DropdownMenuTrigger,
|
|
30
29
|
} from "@/components/ui/dropdown-menu";
|
|
31
30
|
import { Spinner } from "@/components/ui/spinner";
|
|
@@ -2265,7 +2264,6 @@ function CenterPlaybackOverlay({
|
|
|
2265
2264
|
container={menuPortalContainer}
|
|
2266
2265
|
>
|
|
2267
2266
|
<DropdownMenuLabel>Speed</DropdownMenuLabel>
|
|
2268
|
-
<DropdownMenuSeparator />
|
|
2269
2267
|
{SPEED_OPTIONS.map((rate) => (
|
|
2270
2268
|
<DropdownMenuItem
|
|
2271
2269
|
key={rate}
|
|
@@ -2154,6 +2154,7 @@ const messages = {
|
|
|
2154
2154
|
viewsCount: "{{count}} views",
|
|
2155
2155
|
recordingMenu: "Recording menu",
|
|
2156
2156
|
moveToFolder: "Move to folder",
|
|
2157
|
+
moveHere: "Move here",
|
|
2157
2158
|
unarchive: "Unarchive",
|
|
2158
2159
|
shareNamedMeeting: 'Share "{{title}}"',
|
|
2159
2160
|
shareMeeting: "Share meeting",
|
|
@@ -44,9 +44,11 @@ second migration owner beside it. The Chat and default starters do not ship that
|
|
|
44
44
|
Drizzle Kit setup; follow their local instructions and the Database docs for
|
|
45
45
|
the migration path. In Chat, add `server/db/schema.ts`, `server/db/index.ts`
|
|
46
46
|
with `createGetDb(schema)`, and `server/plugins/db.ts` with
|
|
47
|
-
`runMigrations([...], { table })`. `scripts/migrate-production.ts`
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
`runMigrations([...], { table })`. `scripts/migrate-production.ts` applies the
|
|
48
|
+
framework tables and then that plugin (`runAppReleaseMigrations`), because a
|
|
49
|
+
release-owned deploy skips it at boot; a project with a Drizzle config is left to
|
|
50
|
+
`db:migrate`, and do not create a parallel `runMigrations([...])` list beside a
|
|
51
|
+
generated Drizzle migration owner. Give each handwritten migration a unique, stable `name`
|
|
50
52
|
alongside its `version`; append changes instead of renumbering, reusing, or
|
|
51
53
|
editing an applied entry.
|
|
52
54
|
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
All notable user-facing changes to Agent-Native Content are documented here. Open it any
|
|
4
4
|
time from the command menu (Cmd+K → "What's new").
|
|
5
5
|
|
|
6
|
+
## 2026-10-12
|
|
7
|
+
|
|
8
|
+
### Improved
|
|
9
|
+
|
|
10
|
+
- Pages open faster in a fresh browser
|
|
11
|
+
|
|
6
12
|
## 2026-10-11
|
|
7
13
|
|
|
8
14
|
### Improved
|
|
@@ -44,9 +44,11 @@ second migration owner beside it. The Chat and default starters do not ship that
|
|
|
44
44
|
Drizzle Kit setup; follow their local instructions and the Database docs for
|
|
45
45
|
the migration path. In Chat, add `server/db/schema.ts`, `server/db/index.ts`
|
|
46
46
|
with `createGetDb(schema)`, and `server/plugins/db.ts` with
|
|
47
|
-
`runMigrations([...], { table })`. `scripts/migrate-production.ts`
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
`runMigrations([...], { table })`. `scripts/migrate-production.ts` applies the
|
|
48
|
+
framework tables and then that plugin (`runAppReleaseMigrations`), because a
|
|
49
|
+
release-owned deploy skips it at boot; a project with a Drizzle config is left to
|
|
50
|
+
`db:migrate`, and do not create a parallel `runMigrations([...])` list beside a
|
|
51
|
+
generated Drizzle migration owner. Give each handwritten migration a unique, stable `name`
|
|
50
52
|
alongside its `version`; append changes instead of renumbering, reusing, or
|
|
51
53
|
editing an applied entry.
|
|
52
54
|
|
|
@@ -44,9 +44,11 @@ second migration owner beside it. The Chat and default starters do not ship that
|
|
|
44
44
|
Drizzle Kit setup; follow their local instructions and the Database docs for
|
|
45
45
|
the migration path. In Chat, add `server/db/schema.ts`, `server/db/index.ts`
|
|
46
46
|
with `createGetDb(schema)`, and `server/plugins/db.ts` with
|
|
47
|
-
`runMigrations([...], { table })`. `scripts/migrate-production.ts`
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
`runMigrations([...], { table })`. `scripts/migrate-production.ts` applies the
|
|
48
|
+
framework tables and then that plugin (`runAppReleaseMigrations`), because a
|
|
49
|
+
release-owned deploy skips it at boot; a project with a Drizzle config is left to
|
|
50
|
+
`db:migrate`, and do not create a parallel `runMigrations([...])` list beside a
|
|
51
|
+
generated Drizzle migration owner. Give each handwritten migration a unique, stable `name`
|
|
50
52
|
alongside its `version`; append changes instead of renumbering, reusing, or
|
|
51
53
|
editing an applied entry.
|
|
52
54
|
|
|
@@ -3,12 +3,23 @@
|
|
|
3
3
|
All notable user-facing changes to Design are documented here. Open it any time
|
|
4
4
|
from the command menu (Cmd+K → "What's new") or from Settings.
|
|
5
5
|
|
|
6
|
+
## 2026-10-16
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- Shift-drag keeps selected screens, screen nudges stay with the canvas selection, and Code refreshes when reopened.
|
|
11
|
+
|
|
6
12
|
## 2026-10-15
|
|
7
13
|
|
|
8
14
|
### Added
|
|
9
15
|
|
|
10
16
|
- External Design agents can delete screens when you ask them.
|
|
11
17
|
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Empty inspector section titles stay compact
|
|
21
|
+
- Fixed local screen, account, and storage setup when route or connection data is unavailable.
|
|
22
|
+
|
|
12
23
|
## 2026-10-14
|
|
13
24
|
|
|
14
25
|
### Improved
|
|
@@ -46,6 +57,9 @@ from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
46
57
|
|
|
47
58
|
### Fixed
|
|
48
59
|
|
|
60
|
+
- Dropping a layer in the empty end of an auto-layout row of buttons keeps it in the row as the last item
|
|
61
|
+
- Layers dropped onto another screen, or beside an auto-layout frame they don't fit, land where they are released instead of the screen's top-left corner
|
|
62
|
+
- Moving a layer in the Layers panel, including from the board into a screen, keeps it where it sits on the canvas
|
|
49
63
|
- Home prompt suggestions stay hidden until AI is connected
|
|
50
64
|
- Undo reliably restores screen positions after repeated keyboard nudges
|
|
51
65
|
- Comment pins no longer show in Interact mode or paint over the editor panels.
|