@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.
Files changed (80) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +8 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/deploy/build.ts +8 -0
  5. package/corpus/core/src/server/builder-browser.ts +76 -0
  6. package/corpus/core/src/server/core-routes-plugin.ts +15 -5
  7. package/corpus/templates/assets/app/global.css +0 -4
  8. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +195 -167
  9. package/corpus/templates/assets/changelog/2026-07-23-drafts-preview-panel-now-fills-the-full-width-with-a-large-p.md +6 -0
  10. package/corpus/templates/content/actions/_builder-cms-source-adapter.ts +1 -0
  11. package/corpus/templates/content/actions/_builder-cms-write-client.ts +55 -9
  12. package/corpus/templates/content/actions/_database-source-utils.ts +756 -182
  13. package/corpus/templates/content/actions/change-content-database-source-role.ts +21 -20
  14. package/corpus/templates/content/actions/execute-builder-source-execution.ts +49 -8
  15. package/corpus/templates/content/actions/materialize-builder-required-fields.ts +42 -9
  16. package/corpus/templates/content/actions/prepare-builder-source-review.ts +88 -90
  17. package/corpus/templates/content/actions/preview-builder-source-review.ts +4 -3
  18. package/corpus/templates/content/actions/refresh-content-database-source.ts +36 -9
  19. package/corpus/templates/content/actions/set-content-database-source-write-mode.ts +28 -24
  20. package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +62 -12
  21. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +91 -16
  22. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +15 -1
  23. package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +234 -44
  24. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +194 -16
  25. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +95 -42
  26. package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +4 -2
  27. package/corpus/templates/content/app/components/editor/extensions/CodeBlockNode.tsx +10 -166
  28. package/corpus/templates/content/app/components/editor/extensions/VideoBlock.tsx +32 -8
  29. package/corpus/templates/content/app/components/editor/extensions/VideoNode.ts +14 -0
  30. package/corpus/templates/content/app/components/editor/registrySlashItems.ts +5 -1
  31. package/corpus/templates/content/app/hooks/use-content-database.ts +59 -2
  32. package/corpus/templates/content/app/hooks/use-documents.ts +18 -26
  33. package/corpus/templates/content/app/root.tsx +1 -6
  34. package/corpus/templates/content/changelog/2026-07-24-builder-can-now-publish-approved-updates-to-entries-that-are.md +6 -0
  35. package/corpus/templates/content/changelog/2026-07-24-builder-collection-loading-no-longer-restarts-from-the-begin.md +6 -0
  36. package/corpus/templates/content/changelog/2026-07-24-builder-connections-now-complete-securely-from-netlify-deplo.md +6 -0
  37. package/corpus/templates/content/changelog/2026-07-24-builder-draft-creation-now-scopes-execution-to-the-selected-.md +6 -0
  38. package/corpus/templates/content/changelog/2026-07-24-builder-review-now-distinguishes-preparing-a-safe-dry-run-from.md +6 -0
  39. package/corpus/templates/content/changelog/2026-07-24-builder-source-imports-now-recover-from-a-transient-paginati.md +6 -0
  40. package/corpus/templates/content/changelog/2026-07-24-builder-source-refresh-now-preserves-the-provider-bound-fiel.md +6 -0
  41. package/corpus/templates/content/changelog/2026-07-24-builder-update-reviews-now-open-reliably-on-large-collection.md +6 -0
  42. package/corpus/templates/content/changelog/2026-07-24-builder-write-policy-controls-now-reflect-successful-changes.md +6 -0
  43. package/corpus/templates/content/changelog/2026-07-24-date-properties-now-save-reliably-when-selected-with-the-nat.md +6 -0
  44. package/corpus/templates/content/changelog/2026-07-24-editor-slash-search-now-keeps-multi-word-block-names-open.md +6 -0
  45. package/corpus/templates/content/changelog/2026-07-24-exact-editor-slash-commands-now-execute-on-enter-even-if-the.md +6 -0
  46. package/corpus/templates/content/changelog/2026-07-24-new-collaborative-pages-now-save-their-first-edits.md +6 -0
  47. package/corpus/templates/content/changelog/2026-07-24-new-local-builder-rows-no-longer-remain-locked-behind-a-none.md +6 -0
  48. package/corpus/templates/content/changelog/2026-07-24-opening-or-closing-a-collaborative-document-no-longer-lets-u.md +6 -0
  49. package/corpus/templates/content/changelog/2026-07-24-selected-text-now-opens-the-link-editor-with-command-k-or-co.md +6 -0
  50. package/corpus/templates/content/changelog/2026-07-24-slash-menu-block-choices-no-longer-stall-pointer-interaction.md +6 -0
  51. package/corpus/templates/content/changelog/2026-07-24-uploaded-and-embedded-media-now-stay-intact-while-collaborative-document-drafts-save.md +6 -0
  52. package/corpus/templates/content/changelog/2026-07-24-video-link-insertion-now-keeps-its-source-panel-open-while-t.md +6 -0
  53. package/corpus/templates/content/changelog/2026-07-26-builder-publishing-now-shows-safe-validation-details-instead.md +6 -0
  54. package/corpus/templates/content/changelog/2026-07-26-builder-reviews-stay-responsive-on-large-collections-and-pre.md +6 -0
  55. package/corpus/templates/content/changelog/2026-07-26-collaborative-documents-no-longer-flash-duplicated-recent-bl.md +6 -0
  56. package/corpus/templates/content/changelog/2026-07-26-corrected-builder-updates-are-now-reviewed-separately-from-f.md +6 -0
  57. package/corpus/templates/content/changelog/2026-07-26-documents-now-remain-read-only-until-their-live-collaborativ.md +6 -0
  58. package/corpus/templates/content/changelog/2026-07-26-slash-command-menus-now-stay-reachable-when-editing-near-the.md +6 -0
  59. package/corpus/templates/content/changelog/2026-07-26-the-slash-menu-now-shows-one-clear-callout-choice-instead-of.md +6 -0
  60. package/corpus/templates/content/shared/api.ts +1 -0
  61. package/corpus/templates/content/shared/builder-mdx.ts +73 -16
  62. package/corpus/toolkit/CHANGELOG.md +6 -0
  63. package/corpus/toolkit/package.json +1 -1
  64. package/corpus/toolkit/src/editor/useCollabReconcile.ts +14 -1
  65. package/dist/collab/routes.d.ts +1 -1
  66. package/dist/deploy/build.js +6 -0
  67. package/dist/deploy/build.js.map +1 -1
  68. package/dist/resources/handlers.d.ts +1 -1
  69. package/dist/server/builder-browser.d.ts +13 -0
  70. package/dist/server/builder-browser.d.ts.map +1 -1
  71. package/dist/server/builder-browser.js +59 -0
  72. package/dist/server/builder-browser.js.map +1 -1
  73. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  74. package/dist/server/core-routes-plugin.js +10 -5
  75. package/dist/server/core-routes-plugin.js.map +1 -1
  76. package/dist/server/realtime-token.d.ts +1 -1
  77. package/package.json +2 -2
  78. package/src/deploy/build.ts +8 -0
  79. package/src/server/builder-browser.ts +76 -0
  80. 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
- : `Builder write request failed with HTTP ${args.status}.`,
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(1, args.timeoutMs ?? 15_000);
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 (error) {
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
- : error instanceof Error
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);