@agent-native/core 0.135.0 → 0.135.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 (50) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +12 -0
  3. package/corpus/core/docs/content/getting-started-actions.mdx +235 -0
  4. package/corpus/core/docs/content/getting-started-database.mdx +253 -0
  5. package/corpus/core/docs/content/getting-started-pages.mdx +190 -0
  6. package/corpus/core/docs/content/getting-started.mdx +57 -613
  7. package/corpus/core/package.json +1 -1
  8. package/corpus/core/src/sharing/access.ts +44 -2
  9. package/corpus/templates/clips/actions/add-comment.ts +6 -2
  10. package/corpus/templates/clips/app/components/player/comments-panel.tsx +9 -2
  11. package/corpus/templates/clips/app/components/player/playback-comment-overlay.tsx +44 -27
  12. package/corpus/templates/clips/app/components/player/scrubber.tsx +10 -2
  13. package/corpus/templates/clips/app/components/player/video-player.tsx +4 -0
  14. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +22 -15
  15. package/corpus/templates/clips/app/routes/share.$shareId.tsx +1 -0
  16. package/corpus/templates/content/actions/_database-utils.ts +113 -4
  17. package/corpus/templates/content/actions/get-document.ts +84 -3
  18. package/corpus/templates/content/app/components/editor/BuilderBodySyncingNotice.tsx +9 -2
  19. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +29 -13
  20. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +5 -12
  21. package/corpus/templates/content/app/components/editor/body-hydration.ts +12 -6
  22. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +2 -3
  23. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +5 -12
  24. package/corpus/templates/content/app/hooks/use-content-database.ts +16 -27
  25. package/corpus/templates/content/app/hooks/use-create-page.ts +3 -6
  26. package/corpus/templates/content/app/hooks/use-document-properties.ts +9 -16
  27. package/corpus/templates/content/app/hooks/use-document-versions.ts +3 -3
  28. package/corpus/templates/content/app/hooks/use-documents.ts +85 -29
  29. package/corpus/templates/content/app/hooks/use-notion.ts +15 -13
  30. package/corpus/templates/content/app/i18n-data.ts +32 -1
  31. package/corpus/templates/content/app/lib/document-query.ts +36 -0
  32. package/corpus/templates/content/changelog/2026-08-02-pages-opened-from-a-database-now-keep-that-database-s-fields.md +6 -0
  33. package/corpus/templates/content/server/lib/document-context.ts +11 -6
  34. package/corpus/templates/content/shared/api.ts +8 -0
  35. package/dist/collab/struct-routes.d.ts +1 -1
  36. package/dist/notifications/routes.d.ts +3 -3
  37. package/dist/observability/routes.d.ts +1 -1
  38. package/dist/progress/routes.d.ts +1 -1
  39. package/dist/provider-api/actions/custom-provider-registration.d.ts +6 -6
  40. package/dist/provider-api/actions/provider-api.d.ts +4 -4
  41. package/dist/secrets/routes.d.ts +9 -9
  42. package/dist/sharing/access.d.ts.map +1 -1
  43. package/dist/sharing/access.js +32 -2
  44. package/dist/sharing/access.js.map +1 -1
  45. package/docs/content/getting-started-actions.mdx +235 -0
  46. package/docs/content/getting-started-database.mdx +253 -0
  47. package/docs/content/getting-started-pages.mdx +190 -0
  48. package/docs/content/getting-started.mdx +57 -613
  49. package/package.json +1 -1
  50. package/src/sharing/access.ts +44 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.135.0",
3
+ "version": "0.135.2",
4
4
  "description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -15,6 +15,7 @@
15
15
 
16
16
  import { and, eq, or, sql, type SQL } from "drizzle-orm";
17
17
 
18
+ import { orgMembers } from "../org/schema.js";
18
19
  import {
19
20
  getRequestAuthCapability,
20
21
  getRequestUserEmail,
@@ -87,6 +88,35 @@ function emailColumnMatches(column: any, email: string): SQL {
87
88
  return sql`lower(${column}) = ${email}`;
88
89
  }
89
90
 
91
+ /**
92
+ * Real `org_members` membership, independent of the caller's currently
93
+ * active org (`ctx.orgId`). `org`-visibility access must key off actual
94
+ * membership — a user's active-org selection is a UI convenience, not a
95
+ * statement of which orgs they belong to.
96
+ *
97
+ * Queries through the resource's own `reg.getDb()` — the same connection
98
+ * every other lookup in this file uses — not the ambient `getDbExec()`,
99
+ * since `org_members` lives in that same app database.
100
+ */
101
+ async function isOrgMember(
102
+ reg: ShareableResourceRegistration,
103
+ memberOrgId: string,
104
+ email: string,
105
+ ): Promise<boolean> {
106
+ const db = reg.getDb() as any;
107
+ const rows = await db
108
+ .select({ id: orgMembers.id })
109
+ .from(orgMembers)
110
+ .where(
111
+ and(
112
+ eq(orgMembers.orgId, memberOrgId),
113
+ emailColumnMatches(orgMembers.email, email),
114
+ ),
115
+ )
116
+ .limit(1);
117
+ return rows.length > 0;
118
+ }
119
+
90
120
  /**
91
121
  * Build a Drizzle `WHERE` clause that admits rows the current user can see.
92
122
  * Pass the ownable resource table and its shares table; optional min role
@@ -470,7 +500,7 @@ async function resolveAccessImpl(
470
500
  const resource = await loadResourceForAccess(reg, resourceId, options);
471
501
  if (!resource) return null;
472
502
 
473
- const { userEmail, orgId } = ctx;
503
+ const { userEmail } = ctx;
474
504
  const normalizedUserEmail = normalizeEmailForAccess(userEmail);
475
505
 
476
506
  if (
@@ -491,7 +521,19 @@ async function resolveAccessImpl(
491
521
  // `visibility === "public"` on an `allowPublic: false` resource is treated
492
522
  // as private: only owner + explicit shares grant access. Falls through to
493
523
  // the explicit-share lookup below.
494
- if (resource.visibility === "org" && orgId && resource.orgId === orgId) {
524
+ //
525
+ // Membership in the resource's own org, not equality with the caller's
526
+ // currently active org: a caller can be a genuine member of the
527
+ // resource's org while a *different* org is their active selection, and
528
+ // `org` visibility should still admit them. Still requires some active
529
+ // org to be set at all (`orgId`), matching the pre-existing behavior for
530
+ // a caller with no active org.
531
+ if (
532
+ resource.visibility === "org" &&
533
+ resource.orgId &&
534
+ normalizedUserEmail &&
535
+ (await isOrgMember(reg, resource.orgId, normalizedUserEmail))
536
+ ) {
495
537
  const role = await highestShareRole(reg, resourceId, ctx, resource);
496
538
  return { role: role ?? "viewer", resource };
497
539
  }