@agent-native/core 0.123.1 → 0.123.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/core/CHANGELOG.md +8 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/deploy/build.ts +8 -0
- package/corpus/core/src/server/builder-browser.ts +76 -0
- package/corpus/core/src/server/core-routes-plugin.ts +15 -5
- package/corpus/templates/assets/app/global.css +0 -4
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +195 -167
- package/corpus/templates/assets/changelog/2026-07-23-drafts-preview-panel-now-fills-the-full-width-with-a-large-p.md +6 -0
- package/corpus/templates/content/actions/_builder-cms-source-adapter.ts +1 -0
- package/corpus/templates/content/actions/_builder-cms-write-client.ts +55 -9
- package/corpus/templates/content/actions/_database-source-utils.ts +756 -182
- package/corpus/templates/content/actions/change-content-database-source-role.ts +21 -20
- package/corpus/templates/content/actions/execute-builder-source-execution.ts +49 -8
- package/corpus/templates/content/actions/materialize-builder-required-fields.ts +42 -9
- package/corpus/templates/content/actions/prepare-builder-source-review.ts +88 -90
- package/corpus/templates/content/actions/preview-builder-source-review.ts +4 -3
- package/corpus/templates/content/actions/refresh-content-database-source.ts +36 -9
- package/corpus/templates/content/actions/set-content-database-source-write-mode.ts +28 -24
- package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +62 -12
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +91 -16
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +15 -1
- package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +234 -44
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +194 -16
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +95 -42
- package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +4 -2
- package/corpus/templates/content/app/components/editor/extensions/CodeBlockNode.tsx +10 -166
- package/corpus/templates/content/app/components/editor/extensions/VideoBlock.tsx +32 -8
- package/corpus/templates/content/app/components/editor/extensions/VideoNode.ts +14 -0
- package/corpus/templates/content/app/components/editor/registrySlashItems.ts +5 -1
- package/corpus/templates/content/app/hooks/use-content-database.ts +59 -2
- package/corpus/templates/content/app/hooks/use-documents.ts +18 -26
- package/corpus/templates/content/app/root.tsx +1 -6
- package/corpus/templates/content/changelog/2026-07-24-builder-can-now-publish-approved-updates-to-entries-that-are.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-collection-loading-no-longer-restarts-from-the-begin.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-connections-now-complete-securely-from-netlify-deplo.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-draft-creation-now-scopes-execution-to-the-selected-.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-review-now-distinguishes-preparing-a-safe-dry-run-from.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-source-imports-now-recover-from-a-transient-paginati.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-source-refresh-now-preserves-the-provider-bound-fiel.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-update-reviews-now-open-reliably-on-large-collection.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-write-policy-controls-now-reflect-successful-changes.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-date-properties-now-save-reliably-when-selected-with-the-nat.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-editor-slash-search-now-keeps-multi-word-block-names-open.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-exact-editor-slash-commands-now-execute-on-enter-even-if-the.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-new-collaborative-pages-now-save-their-first-edits.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-new-local-builder-rows-no-longer-remain-locked-behind-a-none.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-opening-or-closing-a-collaborative-document-no-longer-lets-u.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-selected-text-now-opens-the-link-editor-with-command-k-or-co.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-slash-menu-block-choices-no-longer-stall-pointer-interaction.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-uploaded-and-embedded-media-now-stay-intact-while-collaborative-document-drafts-save.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-video-link-insertion-now-keeps-its-source-panel-open-while-t.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-builder-publishing-now-shows-safe-validation-details-instead.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-builder-reviews-stay-responsive-on-large-collections-and-pre.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-collaborative-documents-no-longer-flash-duplicated-recent-bl.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-corrected-builder-updates-are-now-reviewed-separately-from-f.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-documents-now-remain-read-only-until-their-live-collaborativ.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-slash-command-menus-now-stay-reachable-when-editing-near-the.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-the-slash-menu-now-shows-one-clear-callout-choice-instead-of.md +6 -0
- package/corpus/templates/content/shared/api.ts +1 -0
- package/corpus/templates/content/shared/builder-mdx.ts +73 -16
- package/corpus/toolkit/CHANGELOG.md +6 -0
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/editor/useCollabReconcile.ts +14 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/deploy/build.js +6 -0
- package/dist/deploy/build.js.map +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/server/builder-browser.d.ts +13 -0
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +59 -0
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +10 -5
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/package.json +2 -2
- package/src/deploy/build.ts +8 -0
- package/src/server/builder-browser.ts +76 -0
- package/src/server/core-routes-plugin.ts +15 -5
|
@@ -13,9 +13,11 @@ export interface BuilderCmsWriteResult {
|
|
|
13
13
|
entryId?: string;
|
|
14
14
|
responseBody: unknown;
|
|
15
15
|
error?: string;
|
|
16
|
-
ambiguity?: "timeout" | "transport";
|
|
16
|
+
ambiguity?: "timeout" | "transport" | "provider";
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
export const DEFAULT_BUILDER_CMS_WRITE_TIMEOUT_MS = 30_000;
|
|
20
|
+
|
|
19
21
|
type FetchLike = typeof fetch;
|
|
20
22
|
|
|
21
23
|
function builderWriteApiHost() {
|
|
@@ -42,6 +44,39 @@ function parseResponseBody(text: string): unknown {
|
|
|
42
44
|
}
|
|
43
45
|
}
|
|
44
46
|
|
|
47
|
+
function builderValidationMessage(value: unknown): string | undefined {
|
|
48
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
const record = value as Record<string, unknown>;
|
|
52
|
+
const candidates = [record.message, record.error, record.detail];
|
|
53
|
+
if (Array.isArray(record.errors)) {
|
|
54
|
+
for (const error of record.errors) {
|
|
55
|
+
if (typeof error === "string") candidates.push(error);
|
|
56
|
+
else if (error && typeof error === "object" && !Array.isArray(error)) {
|
|
57
|
+
candidates.push((error as Record<string, unknown>).message);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
for (const candidate of candidates) {
|
|
62
|
+
if (typeof candidate !== "string") continue;
|
|
63
|
+
const message = candidate.replace(/\s+/g, " ").trim();
|
|
64
|
+
if (
|
|
65
|
+
message.length > 0 &&
|
|
66
|
+
message.length <= 240 &&
|
|
67
|
+
/\b(required|must|invalid|validation|at least|at most|minimum|maximum|too short|too long)\b/i.test(
|
|
68
|
+
message,
|
|
69
|
+
) &&
|
|
70
|
+
!/(?:https?:\/\/|bearer\s+|api[_ -]?key|token|secret|password)/i.test(
|
|
71
|
+
message,
|
|
72
|
+
)
|
|
73
|
+
) {
|
|
74
|
+
return message;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
|
|
45
80
|
function stringRecordValue(
|
|
46
81
|
record: Record<string, unknown>,
|
|
47
82
|
keys: string[],
|
|
@@ -78,14 +113,24 @@ function buildWriteResult(args: {
|
|
|
78
113
|
}): BuilderCmsWriteResult {
|
|
79
114
|
const responseBody = parseResponseBody(args.responseText);
|
|
80
115
|
const entryId = extractBuilderCmsWriteEntryId(responseBody);
|
|
116
|
+
const validationMessage =
|
|
117
|
+
!args.ok && (args.status === 400 || args.status === 422)
|
|
118
|
+
? builderValidationMessage(responseBody)
|
|
119
|
+
: undefined;
|
|
120
|
+
const providerOutcomeUnknown = !args.ok && args.status >= 500;
|
|
81
121
|
return {
|
|
82
122
|
ok: args.ok,
|
|
83
123
|
status: args.status,
|
|
84
|
-
entryId,
|
|
85
|
-
responseBody,
|
|
124
|
+
entryId: providerOutcomeUnknown ? undefined : entryId,
|
|
125
|
+
responseBody: providerOutcomeUnknown ? null : responseBody,
|
|
126
|
+
ambiguity: providerOutcomeUnknown ? "provider" : undefined,
|
|
86
127
|
error: args.ok
|
|
87
128
|
? undefined
|
|
88
|
-
:
|
|
129
|
+
: validationMessage
|
|
130
|
+
? `Builder validation failed: ${validationMessage}`
|
|
131
|
+
: providerOutcomeUnknown
|
|
132
|
+
? `Builder returned HTTP ${args.status} after the write was dispatched; remote outcome is unknown.`
|
|
133
|
+
: `Builder write request failed with HTTP ${args.status}.`,
|
|
89
134
|
};
|
|
90
135
|
}
|
|
91
136
|
|
|
@@ -119,7 +164,10 @@ export async function executeBuilderCmsWrite(args: {
|
|
|
119
164
|
};
|
|
120
165
|
|
|
121
166
|
const controller = new AbortController();
|
|
122
|
-
const timeoutMs = Math.max(
|
|
167
|
+
const timeoutMs = Math.max(
|
|
168
|
+
1,
|
|
169
|
+
args.timeoutMs ?? DEFAULT_BUILDER_CMS_WRITE_TIMEOUT_MS,
|
|
170
|
+
);
|
|
123
171
|
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
124
172
|
try {
|
|
125
173
|
const response = await (args.fetchImpl ?? fetch)(url, {
|
|
@@ -133,7 +181,7 @@ export async function executeBuilderCmsWrite(args: {
|
|
|
133
181
|
status: response.status,
|
|
134
182
|
responseText: await response.text(),
|
|
135
183
|
});
|
|
136
|
-
} catch
|
|
184
|
+
} catch {
|
|
137
185
|
const timedOut = controller.signal.aborted;
|
|
138
186
|
return {
|
|
139
187
|
ok: false,
|
|
@@ -142,9 +190,7 @@ export async function executeBuilderCmsWrite(args: {
|
|
|
142
190
|
ambiguity: timedOut ? "timeout" : "transport",
|
|
143
191
|
error: timedOut
|
|
144
192
|
? `Builder write timed out after ${timeoutMs}ms; remote outcome is unknown.`
|
|
145
|
-
:
|
|
146
|
-
? `Builder write transport failed after dispatch; remote outcome is unknown: ${error.message}`
|
|
147
|
-
: "Builder write transport failed after dispatch; remote outcome is unknown.",
|
|
193
|
+
: "Builder write transport failed after dispatch; remote outcome is unknown.",
|
|
148
194
|
};
|
|
149
195
|
} finally {
|
|
150
196
|
clearTimeout(timeout);
|