@agent-native/core-corpus 0.203.0-nightly-20261007064822 → 0.203.0
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/CHANGELOG.md +11 -0
- package/corpus/templates/assets/CHANGELOG.md +6 -0
- package/corpus/templates/brain/CHANGELOG.md +1 -0
- package/corpus/templates/calendar/CHANGELOG.md +7 -0
- package/corpus/templates/clips/CHANGELOG.md +10 -0
- package/corpus/templates/clips/app/components/player/video-player.tsx +80 -30
- package/corpus/templates/clips/changelog/2026-10-06-fixed-clips-freezing-when-you-hit-play-while-the-recording-w.md +6 -0
- package/corpus/templates/content/CHANGELOG.md +27 -0
- package/corpus/templates/content/actions/create-document.ts +1 -1
- package/corpus/templates/content/actions/get-preview-document-draft.ts +1 -0
- package/corpus/templates/content/agent-native.app-skill.json +5 -5
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +301 -116
- package/corpus/templates/content/app/components/editor/PageDraftRecovery.tsx +73 -39
- package/corpus/templates/content/app/components/editor/authored-content-base.ts +8 -0
- package/corpus/templates/content/app/components/editor/document-save-rebase.ts +4 -0
- package/corpus/templates/content/app/components/editor/document-save-retry.ts +4 -2
- package/corpus/templates/content/app/components/editor/page-draft-journal.ts +56 -0
- package/corpus/templates/content/app/components/editor/pageSession.ts +25 -2
- package/corpus/templates/content/app/components/layout/Layout.tsx +37 -33
- package/corpus/templates/content/app/hooks/use-content-spaces.ts +4 -1
- package/corpus/templates/content/app/hooks/use-documents.ts +15 -0
- package/corpus/templates/content/app/root.tsx +16 -1
- package/corpus/templates/content/changelog/2026-10-06-chatgpt-can-open-content-document-and-database-editors-in-th.md +6 -0
- package/corpus/templates/content/changelog/2026-10-06-chatgpt-content-editors-open-without-sign-in.md +6 -0
- package/corpus/templates/content/changelog/2026-10-06-content-preserves-collaborator-renames-when-a-save-is-delaye.md +6 -0
- package/corpus/templates/content/changelog/2026-10-06-keep-adopted-collaborator-titles-when-recovering-an-unsaved-.md +6 -0
- package/corpus/templates/content/changelog/2026-10-06-keep-collaborator-title-recovery-aligned-across-rapid-rename.md +6 -0
- package/corpus/templates/content/changelog/2026-10-06-page-recovery-keeps-local-title-edits-when-a-collaborator-re.md +6 -0
- package/corpus/templates/content/changelog/2026-10-06-preserve-the-editor-s-authored-base-until-external-edits-rea.md +6 -0
- package/corpus/templates/content/changelog/2026-10-07-documents-opened-in-chatgpt-show-their-saved-content-right-a.md +6 -0
- package/corpus/templates/content/changelog/2026-10-07-fixed-content-pages-that-opened-to-an-error-in-chatgpt-widge.md +6 -0
- package/corpus/templates/content/e2e/helpers.ts +8 -1
- package/corpus/templates/content/server/lib/chatgpt-directory-tools.ts +36 -3
- package/corpus/templates/crm/CHANGELOG.md +6 -0
- package/corpus/templates/design/CHANGELOG.md +14 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +284 -461
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/fresh-project.md +65 -90
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/local-run-and-deploy.md +161 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/review-loop.md +384 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/source-brief.md +116 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/spreadsheet-source.md +206 -190
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/ui-archetypes.md +381 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/ui-direction.md +323 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/ui-palettes.md +564 -0
- package/corpus/templates/dispatch/CHANGELOG.md +7 -0
- package/corpus/templates/factory/.agents/skills/review-latest-feedback/SKILL.md +26 -24
- package/corpus/templates/factory/.agents/skills/review-latest-feedback/references/deployment-recovery.md +53 -0
- package/corpus/templates/factory/.agents/skills/review-latest-feedback/references/documentation-proof.md +7 -0
- package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +284 -461
- package/corpus/templates/factory/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/fresh-project.md +65 -90
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/local-run-and-deploy.md +161 -0
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/review-loop.md +384 -0
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/source-brief.md +116 -0
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/spreadsheet-source.md +206 -190
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/ui-archetypes.md +381 -0
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/ui-direction.md +323 -0
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/ui-palettes.md +564 -0
- package/corpus/templates/mail/CHANGELOG.md +10 -0
- package/corpus/templates/slides/CHANGELOG.md +11 -0
- package/package.json +1 -1
package/corpus/README.md
CHANGED
|
@@ -5,8 +5,19 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
5
5
|
|
|
6
6
|
## 2026-10-06
|
|
7
7
|
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- Save a screenshot of any visible moment in a session replay.
|
|
11
|
+
- Save exact session replay screens as PNG screenshots.
|
|
12
|
+
- Session replays can be saved as screenshots without the replay controls.
|
|
13
|
+
|
|
8
14
|
### Fixed
|
|
9
15
|
|
|
16
|
+
- Collaborators see a consistent dashboard after simultaneous edits
|
|
17
|
+
- Dashboard edits stay in sync when simultaneous updates occur.
|
|
18
|
+
- Dashboard filter "Mine" now lists every dashboard you own (including ones you've shared) and no longer includes installed demos or items shared with you
|
|
19
|
+
- Return each dashboard mutation's own written value even when another update lands immediately afterward
|
|
20
|
+
- Sign-in pages show the ocean wave without a fallback flash and keep it clear of the marketing copy.
|
|
10
21
|
- Dashboard edits now report no change when the selected panels already match the requested values or order.
|
|
11
22
|
- Dashboard mutation results now report only changes that were actually saved.
|
|
12
23
|
- Refreshing a BigQuery dashboard panel now fetches current data.
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
All notable user-facing changes to Assets 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-06
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- Sign-in pages show the ocean wave without a fallback flash and keep it clear of the marketing copy.
|
|
11
|
+
|
|
6
12
|
## 2026-10-05
|
|
7
13
|
|
|
8
14
|
### Fixed
|
|
@@ -18,6 +18,7 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
18
18
|
|
|
19
19
|
### Fixed
|
|
20
20
|
|
|
21
|
+
- Zoom transcripts now import. Zoom's account-wide recording list leaves out download links, so Brain now looks up each matching meeting to get its transcript. Each Zoom sync also lists which meetings matched or were skipped, and which files Zoom returned, to make problems easier to spot.
|
|
21
22
|
- Zoom transcript imports work with the standard admin recording scope again instead of failing with a master-account scope error. Brain chat can now change a source's settings, such as a Zoom meeting filter; before, its updates were silently saved as empty.
|
|
22
23
|
|
|
23
24
|
## 2026-10-05
|
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
All notable user-facing changes to Agent-Native Calendar 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-06
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- Builder.io setup details render immediately, and model settings hide disconnected defaults and upgrade outdated GPT selections.
|
|
11
|
+
- Sign-in pages show the ocean wave without a fallback flash and keep it clear of the marketing copy.
|
|
12
|
+
|
|
6
13
|
## 2026-10-05
|
|
7
14
|
|
|
8
15
|
### Fixed
|
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
All notable user-facing changes to Clips 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-06
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- Fixed arrow-key selection in comment mentions
|
|
11
|
+
- Fixed attached images missing from visual analysis.
|
|
12
|
+
- Fixed clips freezing when you hit play while the recording was still being optimized
|
|
13
|
+
- Fixed returning to shared clips after email verification
|
|
14
|
+
- Sign-in pages show the ocean wave without a fallback flash and keep it clear of the marketing copy.
|
|
15
|
+
|
|
6
16
|
## 2026-10-05
|
|
7
17
|
|
|
8
18
|
### Improved
|
|
@@ -82,6 +82,7 @@ function resolveLocalUrl(url: string | null | undefined): string | undefined {
|
|
|
82
82
|
const VOLATILE_VIDEO_QUERY_PARAMS = new Set([
|
|
83
83
|
"t",
|
|
84
84
|
"cb",
|
|
85
|
+
"media",
|
|
85
86
|
LOOM_START_MS_QUERY_PARAM,
|
|
86
87
|
"password",
|
|
87
88
|
"X-Amz-Algorithm",
|
|
@@ -97,24 +98,53 @@ const VOLATILE_VIDEO_QUERY_PARAMS = new Set([
|
|
|
97
98
|
]);
|
|
98
99
|
|
|
99
100
|
const PLAY_ATTEMPT_TIMEOUT_MS = 15_000;
|
|
101
|
+
// The file behind a clip's URL can be replaced while a viewer has it open
|
|
102
|
+
// (post-finalize compression). One retry is spent on the first failure, so a
|
|
103
|
+
// second is what lets a later swap recover instead of surfacing an error.
|
|
104
|
+
const MAX_AUTO_ERROR_RETRIES = 2;
|
|
100
105
|
|
|
101
|
-
function
|
|
102
|
-
if (!url) return "";
|
|
106
|
+
function parseVideoUrl(url: string): URL | null {
|
|
103
107
|
try {
|
|
104
108
|
const base =
|
|
105
109
|
typeof window === "undefined"
|
|
106
110
|
? "http://clips.local"
|
|
107
111
|
: window.location.href;
|
|
108
|
-
|
|
109
|
-
parsed.hash = "";
|
|
110
|
-
for (const key of VOLATILE_VIDEO_QUERY_PARAMS) {
|
|
111
|
-
parsed.searchParams.delete(key);
|
|
112
|
-
}
|
|
113
|
-
parsed.searchParams.sort();
|
|
114
|
-
return `${parsed.origin}${parsed.pathname}${parsed.search}`;
|
|
112
|
+
return new URL(url, base);
|
|
115
113
|
} catch {
|
|
116
|
-
|
|
114
|
+
// coercion-ok: Callers distinguish unparseable URLs and retain the raw source.
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function videoSourceIdentity(url: string | undefined): string {
|
|
120
|
+
if (!url) return "";
|
|
121
|
+
const parsed = parseVideoUrl(url);
|
|
122
|
+
if (!parsed) return url;
|
|
123
|
+
parsed.hash = "";
|
|
124
|
+
for (const key of VOLATILE_VIDEO_QUERY_PARAMS) {
|
|
125
|
+
parsed.searchParams.delete(key);
|
|
126
|
+
}
|
|
127
|
+
parsed.searchParams.sort();
|
|
128
|
+
return `${parsed.origin}${parsed.pathname}${parsed.search}`;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function videoMediaVersion(url: string | undefined): string | null {
|
|
132
|
+
return url ? (parseVideoUrl(url)?.searchParams.get("media") ?? null) : null;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// The file behind a recording's URL is rewritten after finalize (webm
|
|
136
|
+
// seekable repair, compression, edits) and `media` carries that version. It is
|
|
137
|
+
// volatile for identity, so a bump must be applied as an explicit hot swap or
|
|
138
|
+
// a playing element would keep streaming the stale file.
|
|
139
|
+
export function isMediaVersionRefresh(
|
|
140
|
+
activeSrc: string | undefined,
|
|
141
|
+
incomingSrc: string | undefined,
|
|
142
|
+
): boolean {
|
|
143
|
+
if (!activeSrc || !incomingSrc) return false;
|
|
144
|
+
if (videoSourceIdentity(activeSrc) !== videoSourceIdentity(incomingSrc)) {
|
|
145
|
+
return false;
|
|
117
146
|
}
|
|
147
|
+
return videoMediaVersion(activeSrc) !== videoMediaVersion(incomingSrc);
|
|
118
148
|
}
|
|
119
149
|
|
|
120
150
|
function clampLoomSeek(ms: number, durationMs: number): number {
|
|
@@ -292,7 +322,7 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
|
|
|
292
322
|
null,
|
|
293
323
|
);
|
|
294
324
|
const resumeAfterReloadMsRef = useRef<number | null>(null);
|
|
295
|
-
const
|
|
325
|
+
const autoErrorRetriesRef = useRef(0);
|
|
296
326
|
const recoveringFromErrorRef = useRef(false);
|
|
297
327
|
const prevMseModeRef = useRef("");
|
|
298
328
|
const currentMsRef = useRef(startMs ?? 0);
|
|
@@ -368,6 +398,15 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
|
|
|
368
398
|
},
|
|
369
399
|
[autoPlay, clearPlayAttemptWatchdog, recordingId],
|
|
370
400
|
);
|
|
401
|
+
|
|
402
|
+
const beginPlayAttempt = useCallback(() => {
|
|
403
|
+
const nextId = playAttemptIdRef.current + 1;
|
|
404
|
+
playAttemptIdRef.current = nextId;
|
|
405
|
+
playAttemptPendingRef.current = true;
|
|
406
|
+
setIsPlayPending(true);
|
|
407
|
+
setIsBuffering(true);
|
|
408
|
+
armPlayAttemptWatchdog(nextId);
|
|
409
|
+
}, [armPlayAttemptWatchdog]);
|
|
371
410
|
const [resolvedDurationMs, setResolvedDurationMs] = useState<number>(
|
|
372
411
|
Number.isFinite(durationMs) && durationMs > 0 ? durationMs : 0,
|
|
373
412
|
);
|
|
@@ -614,12 +653,7 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
|
|
|
614
653
|
}
|
|
615
654
|
|
|
616
655
|
if (wasPlaying) {
|
|
617
|
-
|
|
618
|
-
playAttemptIdRef.current = nextId;
|
|
619
|
-
playAttemptPendingRef.current = true;
|
|
620
|
-
setIsPlayPending(true);
|
|
621
|
-
setIsBuffering(true);
|
|
622
|
-
armPlayAttemptWatchdog(nextId);
|
|
656
|
+
beginPlayAttempt();
|
|
623
657
|
} else {
|
|
624
658
|
clearPlayAttemptWatchdog();
|
|
625
659
|
setIsPlaying(false);
|
|
@@ -627,12 +661,7 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
|
|
|
627
661
|
}
|
|
628
662
|
setIsPreparing(true);
|
|
629
663
|
setCanPlay(false);
|
|
630
|
-
}, [
|
|
631
|
-
activeVideoSrc,
|
|
632
|
-
armPlayAttemptWatchdog,
|
|
633
|
-
clearPlayAttemptWatchdog,
|
|
634
|
-
mse.mode,
|
|
635
|
-
]);
|
|
664
|
+
}, [activeVideoSrc, beginPlayAttempt, clearPlayAttemptWatchdog, mse.mode]);
|
|
636
665
|
|
|
637
666
|
useEffect(() => {
|
|
638
667
|
if (!resolvedVideoSrc) {
|
|
@@ -647,20 +676,35 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
|
|
|
647
676
|
const v = videoRef.current;
|
|
648
677
|
const sameResource =
|
|
649
678
|
activeVideoSourceIdentity === incomingVideoSourceIdentity;
|
|
650
|
-
if (recoveringFromErrorRef.current && sameResource) return;
|
|
651
|
-
|
|
652
679
|
const playbackActive =
|
|
653
680
|
playAttemptPendingRef.current ||
|
|
654
681
|
isPlayPending ||
|
|
655
682
|
isPlaying ||
|
|
656
683
|
Boolean(v && !v.paused && !v.ended);
|
|
657
684
|
|
|
685
|
+
if (isMediaVersionRefresh(activeVideoSrc, resolvedVideoSrc)) {
|
|
686
|
+
autoErrorRetriesRef.current = 0;
|
|
687
|
+
const posMs = currentMsRef.current > 0 ? currentMsRef.current : null;
|
|
688
|
+
if (posMs != null) resumeAfterReloadMsRef.current = posMs;
|
|
689
|
+
recoveringFromErrorRef.current = true;
|
|
690
|
+
autoPlayAttemptedSourceRef.current = resolvedVideoSrc ?? "";
|
|
691
|
+
|
|
692
|
+
if (playbackActive) beginPlayAttempt();
|
|
693
|
+
setIsPreparing(true);
|
|
694
|
+
setCanPlay(false);
|
|
695
|
+
setActiveVideoSrc(resolvedVideoSrc);
|
|
696
|
+
return;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
if (recoveringFromErrorRef.current && sameResource) return;
|
|
700
|
+
|
|
658
701
|
if (!sameResource || !playbackActive) {
|
|
659
702
|
setActiveVideoSrc(resolvedVideoSrc);
|
|
660
703
|
}
|
|
661
704
|
}, [
|
|
662
705
|
activeVideoSourceIdentity,
|
|
663
706
|
activeVideoSrc,
|
|
707
|
+
beginPlayAttempt,
|
|
664
708
|
incomingVideoSourceIdentity,
|
|
665
709
|
isPlayPending,
|
|
666
710
|
isPlaying,
|
|
@@ -1177,7 +1221,7 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
|
|
|
1177
1221
|
thumbnailCapturedRef.current = false;
|
|
1178
1222
|
initialVisibleFrameSeekedRef.current = false;
|
|
1179
1223
|
loomInitialStartAppliedRef.current = "";
|
|
1180
|
-
|
|
1224
|
+
autoErrorRetriesRef.current = 0;
|
|
1181
1225
|
recoveringFromErrorRef.current = false;
|
|
1182
1226
|
setLoomStartMs(null);
|
|
1183
1227
|
playAttemptIdRef.current += 1;
|
|
@@ -1766,6 +1810,8 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
|
|
|
1766
1810
|
onEnded?.();
|
|
1767
1811
|
}}
|
|
1768
1812
|
onError={(e) => {
|
|
1813
|
+
const wasPlaying =
|
|
1814
|
+
playAttemptPendingRef.current || isPlayingRef.current;
|
|
1769
1815
|
clearPlayAttemptWatchdog();
|
|
1770
1816
|
playAttemptPendingRef.current = false;
|
|
1771
1817
|
setIsPlayPending(false);
|
|
@@ -1778,8 +1824,11 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
|
|
|
1778
1824
|
return;
|
|
1779
1825
|
}
|
|
1780
1826
|
|
|
1781
|
-
if (
|
|
1782
|
-
|
|
1827
|
+
if (
|
|
1828
|
+
autoErrorRetriesRef.current < MAX_AUTO_ERROR_RETRIES &&
|
|
1829
|
+
activeVideoSrc
|
|
1830
|
+
) {
|
|
1831
|
+
autoErrorRetriesRef.current += 1;
|
|
1783
1832
|
recoveringFromErrorRef.current = true;
|
|
1784
1833
|
const v = e.currentTarget;
|
|
1785
1834
|
const cacheBustedSrc = setUrlSearchParam(
|
|
@@ -1789,7 +1838,8 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
|
|
|
1789
1838
|
);
|
|
1790
1839
|
resumeAfterReloadMsRef.current =
|
|
1791
1840
|
currentMs > 0 ? currentMs : null;
|
|
1792
|
-
|
|
1841
|
+
if (wasPlaying) beginPlayAttempt();
|
|
1842
|
+
else setIsBuffering(false);
|
|
1793
1843
|
setIsPreparing(true);
|
|
1794
1844
|
setCanPlay(false);
|
|
1795
1845
|
v.src = cacheBustedSrc;
|
|
@@ -1809,7 +1859,7 @@ export const VideoPlayer = forwardRef<VideoPlayerHandle, VideoPlayerProps>(
|
|
|
1809
1859
|
{
|
|
1810
1860
|
recordingId,
|
|
1811
1861
|
videoSrc: activeVideoSrc,
|
|
1812
|
-
|
|
1862
|
+
autoRetries: autoErrorRetriesRef.current,
|
|
1813
1863
|
},
|
|
1814
1864
|
);
|
|
1815
1865
|
setPlayError(
|
|
@@ -3,6 +3,33 @@
|
|
|
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-07
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- Documents opened in ChatGPT show their saved content right away.
|
|
11
|
+
- Fixed Content pages that opened to an error in ChatGPT widgets
|
|
12
|
+
|
|
13
|
+
## 2026-10-06
|
|
14
|
+
|
|
15
|
+
### Improved
|
|
16
|
+
|
|
17
|
+
- ChatGPT can open Content document and database editors in the existing workspace, and document links use the right label.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- Documents and databases opened from ChatGPT load in the Content editor without a separate sign-in.
|
|
22
|
+
- ChatGPT Content widgets load database views correctly.
|
|
23
|
+
- Reopening a ChatGPT Content widget restores the editor for its saved document or collection.
|
|
24
|
+
- Content preserves collaborator renames when a save is delayed
|
|
25
|
+
- Filtered collection views work after you reopen the ChatGPT app.
|
|
26
|
+
- Generated documents from ChatGPT open in the full Content editor.
|
|
27
|
+
- Keep adopted collaborator titles when recovering an unsaved page
|
|
28
|
+
- Keep collaborator title recovery aligned across rapid renames and local journal failures
|
|
29
|
+
- Page recovery keeps local title edits when a collaborator renames the page.
|
|
30
|
+
- Preserve the editor's authored base until external edits reach the editor, and hold database saves when collaboration delivery is pending
|
|
31
|
+
- Sign-in pages show the ocean wave without a fallback flash and keep it clear of the marketing copy.
|
|
32
|
+
|
|
6
33
|
## 2026-10-05
|
|
7
34
|
|
|
8
35
|
### Improved
|
|
@@ -156,7 +156,7 @@ export default defineAction({
|
|
|
156
156
|
mcpApp: {
|
|
157
157
|
compactCatalog: true,
|
|
158
158
|
resource: embedApp({
|
|
159
|
-
title: "
|
|
159
|
+
title: "Open document",
|
|
160
160
|
description:
|
|
161
161
|
"Open the generated draft in the real Content editor so the user can revise, format, organize, and publish it.",
|
|
162
162
|
iframeTitle: "Agent-Native Content",
|
|
@@ -13,6 +13,7 @@ export default defineAction({
|
|
|
13
13
|
"Read the current user's private preview draft for a document. A reader who cannot edit the document gets `editable: false` and no draft.",
|
|
14
14
|
schema: z.object({ documentId: z.string().min(1) }),
|
|
15
15
|
http: { method: "GET" },
|
|
16
|
+
readOnly: true,
|
|
16
17
|
agentTool: false,
|
|
17
18
|
toolCallable: false,
|
|
18
19
|
run: async ({ documentId }) => {
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"generic-mcp"
|
|
62
62
|
],
|
|
63
63
|
"chatgpt": {
|
|
64
|
-
"version": "1.0.
|
|
64
|
+
"version": "1.0.2",
|
|
65
65
|
"interface": {
|
|
66
66
|
"displayName": "Agent-Native Content",
|
|
67
67
|
"shortDescription": "Draft and organize content",
|
|
@@ -102,9 +102,9 @@
|
|
|
102
102
|
},
|
|
103
103
|
{
|
|
104
104
|
"description": "Search workspace documents",
|
|
105
|
-
"prompt": "
|
|
105
|
+
"prompt": "In Personal, find the Launch Brief Demo document and tell me whether its current content contains the exact phrase 'early access'. Quote a surrounding sentence without changing the document.",
|
|
106
106
|
"tools_triggered": "search-documents, get-document",
|
|
107
|
-
"expected_behavior": "
|
|
107
|
+
"expected_behavior": "Find Launch Brief Demo in Personal, retrieve its current content, and report whether the exact phrase appears, quoting only text present in that document."
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
110
|
"description": "Revise an identified document",
|
|
@@ -114,9 +114,9 @@
|
|
|
114
114
|
},
|
|
115
115
|
{
|
|
116
116
|
"description": "Inspect a content database",
|
|
117
|
-
"prompt": "
|
|
117
|
+
"prompt": "In ChatGPT Plugin Reviewer's workspace, inspect the Feature Requests Demo database and show its fields and current entries.",
|
|
118
118
|
"tools_triggered": "list-content-databases, get-content-database",
|
|
119
|
-
"expected_behavior": "Report the actual schema and entries
|
|
119
|
+
"expected_behavior": "Report the actual schema and entries in Feature Requests Demo in ChatGPT Plugin Reviewer's workspace, explicitly say if none exist, and do not invent fields or records."
|
|
120
120
|
},
|
|
121
121
|
{
|
|
122
122
|
"description": "Create a default-schema draft collection and add a titled row",
|