@objectstack/platform-objects 13.0.0 → 14.5.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.
Files changed (41) hide show
  1. package/dist/apps/index.d.mts +1 -1
  2. package/dist/apps/index.d.ts +1 -1
  3. package/dist/apps/index.js +525 -1200
  4. package/dist/apps/index.js.map +1 -1
  5. package/dist/apps/index.mjs +525 -1200
  6. package/dist/apps/index.mjs.map +1 -1
  7. package/dist/audit/index.d.mts +262 -10
  8. package/dist/audit/index.d.ts +262 -10
  9. package/dist/audit/index.js +14 -0
  10. package/dist/audit/index.js.map +1 -1
  11. package/dist/audit/index.mjs +14 -0
  12. package/dist/audit/index.mjs.map +1 -1
  13. package/dist/identity/index.d.mts +1403 -236
  14. package/dist/identity/index.d.ts +1403 -236
  15. package/dist/identity/index.js +177 -17
  16. package/dist/identity/index.js.map +1 -1
  17. package/dist/identity/index.mjs +177 -17
  18. package/dist/identity/index.mjs.map +1 -1
  19. package/dist/index.d.mts +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.js +1878 -1736
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +1878 -1737
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/metadata-translations/index.js +1020 -488
  26. package/dist/metadata-translations/index.js.map +1 -1
  27. package/dist/metadata-translations/index.mjs +1020 -488
  28. package/dist/metadata-translations/index.mjs.map +1 -1
  29. package/dist/pages/index.d.mts +34 -3
  30. package/dist/pages/index.d.ts +34 -3
  31. package/dist/pages/index.js +111 -0
  32. package/dist/pages/index.js.map +1 -1
  33. package/dist/pages/index.mjs +111 -1
  34. package/dist/pages/index.mjs.map +1 -1
  35. package/dist/plugin.js +1564 -1707
  36. package/dist/plugin.js.map +1 -1
  37. package/dist/plugin.mjs +1564 -1707
  38. package/dist/plugin.mjs.map +1 -1
  39. package/dist/system/index.d.mts +75 -3
  40. package/dist/system/index.d.ts +75 -3
  41. package/package.json +3 -3
package/dist/index.mjs CHANGED
@@ -10,6 +10,15 @@ var SysUser = ObjectSchema.create({
10
10
  icon: "user",
11
11
  isSystem: true,
12
12
  managedBy: "better-auth",
13
+ // ADR-0092 D4 — the ONE generic affordance opened on an identity table:
14
+ // standard row editing. Safe because the plugin-auth identity write guard
15
+ // (ADR-0092 D2) enforces the profile whitelist server-side — a user-context
16
+ // update may only touch SYS_USER_PROFILE_EDIT_FIELDS ({name, image});
17
+ // everything else is stripped/rejected regardless of what a form submits.
18
+ // The permission layer still decides WHO may edit (platform admins only by
19
+ // default; member/org-admin sets keep allowEdit: false). create / import /
20
+ // delete stay bucket-default (off).
21
+ userActions: { edit: true },
13
22
  // ADR-0010 §3.7 — identity table is managed by better-auth; schema must not drift.
14
23
  protection: {
15
24
  lock: "full",
@@ -57,15 +66,17 @@ var SysUser = ObjectSchema.create({
57
66
  // These actions hit /api/v1/auth/admin/* endpoints that are only
58
67
  // wired when `auth.plugins.admin` is enabled. When the plugin is
59
68
  // disabled the actions still render (schema is static) but server
60
- // returns 404. UI surfaces them under the row menu so platform
61
- // admins can manage accounts without dropping to SQL or
69
+ // returns 404. UI surfaces them under the row menu AND the
70
+ // record-detail header (`record_header`, overflowing into the
71
+ // "More" menu) so platform admins can manage an account from either
72
+ // the Users list or an open user record — without dropping to SQL or
62
73
  // a custom Setup wizard.
63
74
  {
64
75
  name: "ban_user",
65
76
  label: "Ban User",
66
77
  icon: "ban",
67
78
  variant: "danger",
68
- locations: ["list_item"],
79
+ locations: ["list_item", "record_header"],
69
80
  type: "api",
70
81
  target: "/api/v1/auth/admin/ban-user",
71
82
  recordIdParam: "userId",
@@ -81,7 +92,7 @@ var SysUser = ObjectSchema.create({
81
92
  label: "Unban User",
82
93
  icon: "check-circle-2",
83
94
  variant: "secondary",
84
- locations: ["list_item"],
95
+ locations: ["list_item", "record_header"],
85
96
  type: "api",
86
97
  target: "/api/v1/auth/admin/unban-user",
87
98
  recordIdParam: "userId",
@@ -96,34 +107,117 @@ var SysUser = ObjectSchema.create({
96
107
  label: "Unlock Account",
97
108
  icon: "lock-open",
98
109
  variant: "secondary",
99
- locations: ["list_item"],
110
+ locations: ["list_item", "record_header"],
100
111
  type: "api",
101
112
  target: "/api/v1/auth/admin/unlock-user",
102
113
  recordIdParam: "userId",
103
114
  successMessage: "Account unlocked",
104
115
  refreshAfter: true
105
116
  },
117
+ {
118
+ // #2766 V1 — a platform admin can add a login-capable teammate without
119
+ // the email-dependent invite flow. Hits the plugin-auth wrapper route
120
+ // (NOT better-auth's stock /admin/create-user): the wrapper runs the
121
+ // ADR-0068 admin gate, drives the better-auth pipeline (scrypt hash +
122
+ // credential sys_account), stamps must_change_password, and — when
123
+ // "Generate temporary password" is picked — returns the password ONCE
124
+ // in the response for the result dialog. It is never persisted or logged.
125
+ name: "create_user",
126
+ label: "Create User",
127
+ icon: "user-plus",
128
+ variant: "secondary",
129
+ locations: ["list_toolbar"],
130
+ type: "api",
131
+ target: "/api/v1/auth/admin/create-user",
132
+ visible: "features.admin == true",
133
+ successMessage: "User created",
134
+ refreshAfter: true,
135
+ params: [
136
+ // The endpoint requires email OR phone (phone-only users get a
137
+ // placeholder address; requires auth.plugins.phoneNumber).
138
+ { field: "email", required: false },
139
+ {
140
+ name: "phoneNumber",
141
+ label: "Phone Number",
142
+ type: "text",
143
+ required: false,
144
+ helpText: "Sign-in phone number (E.164, e.g. +8613800000000). Required when no email is given."
145
+ },
146
+ { field: "name", required: false },
147
+ {
148
+ name: "generatePassword",
149
+ label: "Generate Temporary Password",
150
+ type: "boolean",
151
+ required: false,
152
+ defaultValue: true
153
+ },
154
+ { name: "password", label: "Password (leave empty to generate)", type: "text", required: false },
155
+ {
156
+ name: "mustChangePassword",
157
+ label: "Require Password Change On First Login",
158
+ type: "boolean",
159
+ required: false,
160
+ defaultValue: true
161
+ }
162
+ ],
163
+ resultDialog: {
164
+ title: "User Created",
165
+ description: "Copy the temporary password now \u2014 it is shown only once and never stored.",
166
+ acknowledge: "I have saved this password",
167
+ fields: [
168
+ { path: "user.email", label: "Email", format: "text" },
169
+ { path: "temporaryPassword", label: "Temporary Password", format: "secret" }
170
+ ]
171
+ }
172
+ },
106
173
  {
107
174
  name: "set_user_password",
108
175
  label: "Set Password",
109
176
  icon: "key-round",
110
177
  variant: "secondary",
111
- locations: ["list_item"],
178
+ locations: ["list_item", "record_header"],
112
179
  type: "api",
180
+ // #2766 V1 — same path as better-auth's stock route, but served by the
181
+ // plugin-auth wrapper registered ahead of the catch-all: it accepts the
182
+ // ADR-0068 platform-admin signals (the stock handler only honors the
183
+ // legacy role scalar), can mint a temporary password, and stamps
184
+ // must_change_password.
113
185
  target: "/api/v1/auth/admin/set-user-password",
114
186
  recordIdParam: "userId",
115
187
  successMessage: "Password updated",
116
188
  refreshAfter: false,
117
189
  params: [
118
- { name: "newPassword", label: "New Password", type: "text", required: true }
119
- ]
190
+ {
191
+ name: "generatePassword",
192
+ label: "Generate Temporary Password",
193
+ type: "boolean",
194
+ required: false,
195
+ defaultValue: false
196
+ },
197
+ { name: "newPassword", label: "New Password (leave empty to generate)", type: "text", required: false },
198
+ {
199
+ name: "mustChangePassword",
200
+ label: "Require Password Change On Next Login",
201
+ type: "boolean",
202
+ required: false,
203
+ defaultValue: true
204
+ }
205
+ ],
206
+ resultDialog: {
207
+ title: "Password Updated",
208
+ description: "If a temporary password was generated, copy it now \u2014 it is shown only once and never stored.",
209
+ acknowledge: "Done",
210
+ fields: [
211
+ { path: "temporaryPassword", label: "Temporary Password", format: "secret" }
212
+ ]
213
+ }
120
214
  },
121
215
  {
122
216
  name: "set_user_role",
123
217
  label: "Set Platform Role",
124
218
  icon: "shield-check",
125
219
  variant: "secondary",
126
- locations: ["list_item"],
220
+ locations: ["list_item", "record_header"],
127
221
  type: "api",
128
222
  target: "/api/v1/auth/admin/set-role",
129
223
  recordIdParam: "userId",
@@ -138,7 +232,7 @@ var SysUser = ObjectSchema.create({
138
232
  label: "Impersonate User",
139
233
  icon: "user-cog",
140
234
  variant: "secondary",
141
- locations: ["list_item"],
235
+ locations: ["list_item", "record_header"],
142
236
  type: "api",
143
237
  target: "/api/v1/auth/admin/impersonate-user",
144
238
  recordIdParam: "userId",
@@ -362,20 +456,28 @@ var SysUser = ObjectSchema.create({
362
456
  maxLength: 255,
363
457
  group: "Identity"
364
458
  }),
459
+ // ADR-0092 D4 — with the generic edit affordance open, every non-profile
460
+ // field is readonly so the standard edit form renders it non-editable.
461
+ // This is UX only; the server boundary is the plugin-auth identity write
462
+ // guard (ADR-0092 D2), which strips/rejects these regardless.
365
463
  email: Field.email({
366
464
  label: "Email",
367
465
  required: true,
466
+ readonly: true,
467
+ // login identity — change flows through better-auth change-email verification
368
468
  searchable: true,
369
469
  group: "Identity"
370
470
  }),
371
471
  email_verified: Field.boolean({
372
472
  label: "Email Verified",
373
473
  defaultValue: false,
474
+ readonly: true,
374
475
  group: "Identity"
375
476
  }),
376
477
  two_factor_enabled: Field.boolean({
377
478
  label: "Two-Factor Enabled",
378
479
  defaultValue: false,
480
+ readonly: true,
379
481
  group: "Identity",
380
482
  description: "Whether two-factor authentication is enabled for this user. Maintained by the better-auth `twoFactor` plugin."
381
483
  }),
@@ -383,6 +485,8 @@ var SysUser = ObjectSchema.create({
383
485
  role: Field.text({
384
486
  label: "Platform Role",
385
487
  required: false,
488
+ readonly: true,
489
+ // ADR-0092 — set via the Set Platform Role action, never the edit form
386
490
  maxLength: 64,
387
491
  group: "Admin",
388
492
  description: "Platform-level role (admin, user, \u2026). Set via the Set Platform Role action."
@@ -390,18 +494,24 @@ var SysUser = ObjectSchema.create({
390
494
  banned: Field.boolean({
391
495
  label: "Banned",
392
496
  defaultValue: false,
497
+ readonly: true,
498
+ // ADR-0092 — toggled via Ban/Unban actions (session side effects)
393
499
  group: "Admin",
394
500
  description: "When true, the user cannot sign in. Toggle via Ban User / Unban User actions."
395
501
  }),
396
502
  ban_reason: Field.text({
397
503
  label: "Ban Reason",
398
504
  required: false,
505
+ readonly: true,
506
+ // ADR-0092 — written by the Ban User action
399
507
  maxLength: 255,
400
508
  group: "Admin"
401
509
  }),
402
510
  ban_expires: Field.datetime({
403
511
  label: "Ban Expires",
404
512
  required: false,
513
+ readonly: true,
514
+ // ADR-0092 — written by the Ban User action
405
515
  group: "Admin",
406
516
  description: "When set, the ban auto-clears at this time."
407
517
  }),
@@ -435,6 +545,37 @@ var SysUser = ObjectSchema.create({
435
545
  group: "Admin",
436
546
  description: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
437
547
  }),
548
+ // #2766 V1.5 — phone-number sign-in identifier (better-auth phoneNumber
549
+ // plugin, mapped via buildPhoneNumberPluginSchema). Unique when present;
550
+ // null for email-only accounts. Written through better-auth, not CRUD.
551
+ phone_number: Field.text({
552
+ label: "Phone Number",
553
+ required: false,
554
+ readonly: true,
555
+ searchable: true,
556
+ maxLength: 32,
557
+ group: "Account",
558
+ description: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
559
+ }),
560
+ phone_number_verified: Field.boolean({
561
+ label: "Phone Verified",
562
+ defaultValue: false,
563
+ readonly: true,
564
+ group: "Account",
565
+ description: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
566
+ }),
567
+ // #2766 V1 — admin-issued "must change password on next sign-in" flag.
568
+ // Set by the /admin/create-user and /admin/set-user-password routes when
569
+ // a temporary password is issued; enforced through the ADR-0069 authGate
570
+ // (surfaces as PASSWORD_EXPIRED); cleared by stampPasswordChangedAt once
571
+ // the user completes a password change.
572
+ must_change_password: Field.boolean({
573
+ label: "Must Change Password",
574
+ defaultValue: false,
575
+ readonly: true,
576
+ group: "Admin",
577
+ description: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
578
+ }),
438
579
  // ADR-0069 D3 — when enforced MFA first applied to this user; starts the
439
580
  // grace clock. Stamped lazily at session validation; system-managed.
440
581
  mfa_required_at: Field.datetime({
@@ -466,6 +607,8 @@ var SysUser = ObjectSchema.create({
466
607
  ai_access: Field.boolean({
467
608
  label: "AI Access",
468
609
  defaultValue: false,
610
+ readonly: true,
611
+ // ADR-0092 — a licensed-seat grant; flows through the AiSeatPlugin enforcement path
469
612
  group: "Admin",
470
613
  description: "Whether this user holds an AI seat \u2014 grants access to the in-UI AI agents (build / ask). The framework synthesizes the `ai_seat` capability from this flag (plugin-hono-server resolveCtx). Assignment is capped by the licensed / purchased seat count (enforced by @objectstack/security-enterprise AiSeatPlugin). Owned by objectql (better-auth is oblivious to this column)."
471
614
  }),
@@ -479,12 +622,16 @@ var SysUser = ObjectSchema.create({
479
622
  manager_id: Field.lookup("sys_user", {
480
623
  label: "Manager",
481
624
  required: false,
625
+ readonly: true,
626
+ // ADR-0092 — drives own_and_reports RLS scope; org-structure maintenance is its own surface
482
627
  group: "Organization",
483
628
  description: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
484
629
  }),
485
630
  primary_business_unit_id: Field.lookup("sys_business_unit", {
486
631
  label: "Primary Business Unit",
487
632
  required: false,
633
+ readonly: true,
634
+ // ADR-0092 — denormalised projection maintained by plugin-sharing; never hand-edited
488
635
  group: "Organization",
489
636
  description: "The user's primary business unit \u2014 a denormalised projection of sys_business_unit_member.is_primary, maintained by plugin-sharing (ADR-0057 addendum D12). Lets a user-lookup filter candidates by business unit without traversing the membership junction. Do not edit directly; set it via business-unit membership."
490
637
  }),
@@ -532,7 +679,10 @@ var SysUser = ObjectSchema.create({
532
679
  },
533
680
  indexes: [
534
681
  { fields: ["email"], unique: true },
535
- { fields: ["created_at"], unique: false }
682
+ { fields: ["created_at"], unique: false },
683
+ // #2766 V1.5 — phone sign-in identifier; unique when present (null for
684
+ // email-only accounts), also the upsert match key for identity import.
685
+ { fields: ["phone_number"], unique: true }
536
686
  ],
537
687
  enable: {
538
688
  trackHistory: true,
@@ -2501,6 +2651,12 @@ var SysDeviceCode = ObjectSchema.create({
2501
2651
  icon: "key-round",
2502
2652
  isSystem: true,
2503
2653
  managedBy: "better-auth",
2654
+ // ADR-0057: device codes are dead the moment `expires_at` passes — keep a
2655
+ // 1d grace for post-mortem, then reap.
2656
+ lifecycle: {
2657
+ class: "transient",
2658
+ ttl: { field: "expires_at", expireAfter: "1d" }
2659
+ },
2504
2660
  // [ADR-0066 D2/④] Secure-by-default: rows are LIVE pending device-grant
2505
2661
  // codes — reading `user_code`/`device_code` lets an attacker hijack a
2506
2662
  // pending CLI login. Not covered by the wildcard `'*'` grant; admins retain
@@ -3519,9 +3675,13 @@ var SysSsoProvider = ObjectSchema.create({
3519
3675
  // for a one-time DNS-TXT challenge and reveals the ready-to-paste record
3520
3676
  // ONCE via `resultDialog`. Routed through the env bridge (plugin-auth /
3521
3677
  // cloud AuthProxyPlugin) which reshapes the `{domainVerificationToken}`
3522
- // response into the `{ data: { dnsRecordName, dnsRecordValue } }` envelope
3523
- // the dialog reads. When the feature is OFF the bridge returns a clear
3524
- // "not enabled for this environment" error instead of a bare 404.
3678
+ // response into a `{ success, data: { dnsRecordName, dnsRecordValue } }`
3679
+ // envelope. The console action runtime unwraps that envelope, so the
3680
+ // `resultDialog` field paths are relative to the inner `data` payload
3681
+ // (`dnsRecordName`, not `data.dnsRecordName`) — consistent with every
3682
+ // other object's resultDialog (create_user, two-factor, OAuth). When the
3683
+ // feature is OFF the bridge returns a clear "not enabled for this
3684
+ // environment" error instead of a bare 404.
3525
3685
  target: "/api/v1/auth/admin/sso/request-domain-verification",
3526
3686
  params: [
3527
3687
  { name: "providerId", field: "provider_id", defaultFromRow: true, required: true },
@@ -3532,9 +3692,9 @@ var SysSsoProvider = ObjectSchema.create({
3532
3692
  description: "Add the DNS TXT record below at your domain\u2019s DNS provider, then run \u201CVerify Domain\u201D. The token is shown once.",
3533
3693
  acknowledge: "Done",
3534
3694
  fields: [
3535
- { path: "data.dnsRecordType", label: "Record type", format: "text" },
3536
- { path: "data.dnsRecordName", label: "Name / Host", format: "secret" },
3537
- { path: "data.dnsRecordValue", label: "Value", format: "secret" }
3695
+ { path: "dnsRecordType", label: "Record type", format: "text" },
3696
+ { path: "dnsRecordName", label: "Name / Host", format: "secret" },
3697
+ { path: "dnsRecordValue", label: "Value", format: "secret" }
3538
3698
  ]
3539
3699
  }
3540
3700
  },
@@ -3766,6 +3926,13 @@ var SysNotification = ObjectSchema.create({
3766
3926
  icon: "bell",
3767
3927
  isSystem: true,
3768
3928
  managedBy: "system",
3929
+ // ADR-0057: one 90d window across the whole notification pipeline
3930
+ // (event → delivery → receipt/inbox), enforced by the LifecycleService
3931
+ // (the retired NotificationRetention sweeper kept the same default).
3932
+ lifecycle: {
3933
+ class: "telemetry",
3934
+ retention: { maxAge: "90d" }
3935
+ },
3769
3936
  description: "Notification events \u2014 one row per emit() (ADR-0030 Layer 2 ingress)",
3770
3937
  displayNameField: "topic",
3771
3938
  nameField: "topic",
@@ -4572,6 +4739,13 @@ var SysJobRun = ObjectSchema.create({
4572
4739
  icon: "play",
4573
4740
  isSystem: true,
4574
4741
  managedBy: "append-only",
4742
+ // ADR-0057: run history is append-only telemetry. The platform
4743
+ // LifecycleService is the ONE sweeper for this window (the plugin-local
4744
+ // JobRunRetention it replaced kept the same 30d default).
4745
+ lifecycle: {
4746
+ class: "telemetry",
4747
+ retention: { maxAge: "30d" }
4748
+ },
4575
4749
  description: "Background job execution audit trail",
4576
4750
  displayNameField: "job_name",
4577
4751
  nameField: "job_name",
@@ -5348,12 +5522,12 @@ var SETUP_NAV_CONTRIBUTIONS = [
5348
5522
  {
5349
5523
  app: "setup",
5350
5524
  group: "group_access_control",
5351
- // Priority 300 keeps API Keys after plugin-security's Roles / Permission
5525
+ // Priority 300 keeps API Keys after plugin-security's Positions / Permission
5352
5526
  // Sets (100) and plugin-sharing's Sharing Rules / Record Shares (200),
5353
5527
  // preserving the original menu order.
5354
5528
  priority: 300,
5355
5529
  items: [
5356
- // Roles / Permission Sets are contributed by @objectstack/plugin-security
5530
+ // Positions / Permission Sets are contributed by @objectstack/plugin-security
5357
5531
  // and Sharing Rules / Record Shares by @objectstack/plugin-sharing
5358
5532
  // (ADR-0029 K2). Only API Keys (sys_api_key, an identity object owned by
5359
5533
  // plugin-auth) remains a platform-objects base entry here.
@@ -6116,14 +6290,64 @@ var enObjects = {
6116
6290
  label: "Ban Expires",
6117
6291
  help: "When set, the ban auto-clears at this time."
6118
6292
  },
6293
+ failed_login_count: {
6294
+ label: "Failed Login Count",
6295
+ help: "Consecutive failed sign-in attempts; reset to 0 on success. Maintained by the auth manager."
6296
+ },
6297
+ locked_until: {
6298
+ label: "Locked Until",
6299
+ help: "When set and in the future, sign-in is rejected (brute-force lockout). Auto-clears past this time; an admin can clear it early via Unlock."
6300
+ },
6301
+ password_changed_at: {
6302
+ label: "Password Changed At",
6303
+ help: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
6304
+ },
6305
+ phone_number: {
6306
+ label: "Phone Number",
6307
+ help: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
6308
+ },
6309
+ phone_number_verified: {
6310
+ label: "Phone Verified",
6311
+ help: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
6312
+ },
6313
+ must_change_password: {
6314
+ label: "Must Change Password",
6315
+ help: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
6316
+ },
6317
+ mfa_required_at: {
6318
+ label: "MFA Required At",
6319
+ help: "When enforced MFA first applied to this user (grace-period clock). Backs mfa_required; system-managed."
6320
+ },
6321
+ last_login_at: {
6322
+ label: "Last Login At",
6323
+ help: "Timestamp of the last successful sign-in. Stamped by the auth manager; system-managed."
6324
+ },
6325
+ last_login_ip: {
6326
+ label: "Last Login IP",
6327
+ help: "Client IP of the last successful sign-in (from the trusted proxy forwarded header). System-managed."
6328
+ },
6329
+ ai_access: {
6330
+ label: "AI Access",
6331
+ help: "Whether this user holds an AI seat \u2014 grants access to the in-UI AI agents (build / ask). The framework synthesizes the `ai_seat` capability from this flag (plugin-hono-server resolveCtx). Assignment is capped by the licensed / purchased seat count (enforced by @objectstack/security-enterprise AiSeatPlugin). Owned by objectql (better-auth is oblivious to this column)."
6332
+ },
6119
6333
  image: {
6120
6334
  label: "Profile Image"
6121
6335
  },
6122
6336
  manager_id: {
6123
- label: "Manager"
6337
+ label: "Manager",
6338
+ help: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
6124
6339
  },
6125
6340
  primary_business_unit_id: {
6126
- label: "Primary Business Unit"
6341
+ label: "Primary Business Unit",
6342
+ help: "The user's primary business unit \u2014 a denormalised projection of sys_business_unit_member.is_primary, maintained by plugin-sharing (ADR-0057 addendum D12). Lets a user-lookup filter candidates by business unit without traversing the membership junction. Do not edit directly; set it via business-unit membership."
6343
+ },
6344
+ source: {
6345
+ label: "Identity Source",
6346
+ help: "How this identity was created \u2014 idp_provisioned (federated SSO JIT) or env_native (local signup / app end-user). System-managed; do not edit.",
6347
+ options: {
6348
+ idp_provisioned: "IdP-Provisioned",
6349
+ env_native: "Env-Native"
6350
+ }
6127
6351
  },
6128
6352
  id: {
6129
6353
  label: "User ID"
@@ -6166,6 +6390,14 @@ var enObjects = {
6166
6390
  label: "Unban User",
6167
6391
  successMessage: "User unbanned"
6168
6392
  },
6393
+ unlock_user: {
6394
+ label: "Unlock Account",
6395
+ successMessage: "Account unlocked"
6396
+ },
6397
+ create_user: {
6398
+ label: "Create User",
6399
+ successMessage: "User created"
6400
+ },
6169
6401
  set_user_password: {
6170
6402
  label: "Set Password",
6171
6403
  successMessage: "Password updated"
@@ -6227,6 +6459,18 @@ var enObjects = {
6227
6459
  expires_at: {
6228
6460
  label: "Expires At"
6229
6461
  },
6462
+ last_activity_at: {
6463
+ label: "Last Activity At",
6464
+ help: "Timestamp of the last request on this session; drives idle-timeout. System-managed."
6465
+ },
6466
+ revoked_at: {
6467
+ label: "Revoked At",
6468
+ help: "When set, this session was revoked (idle / absolute-max / concurrent-cap / admin). System-managed."
6469
+ },
6470
+ revoke_reason: {
6471
+ label: "Revoke Reason",
6472
+ help: "Why the session was revoked (idle_timeout, absolute_max, concurrent_cap, \u2026)."
6473
+ },
6230
6474
  active_organization_id: {
6231
6475
  label: "Active Organization"
6232
6476
  },
@@ -6325,6 +6569,10 @@ var enObjects = {
6325
6569
  password: {
6326
6570
  label: "Password Hash",
6327
6571
  help: "Hashed password for email/password provider"
6572
+ },
6573
+ previous_password_hashes: {
6574
+ label: "Previous Password Hashes",
6575
+ help: "JSON array of prior password hashes (bounded by password_history_count); reuse-prevention only. System-managed."
6328
6576
  }
6329
6577
  },
6330
6578
  _views: {
@@ -6395,6 +6643,10 @@ var enObjects = {
6395
6643
  label: "Metadata",
6396
6644
  help: "JSON-serialized organization metadata"
6397
6645
  },
6646
+ require_mfa: {
6647
+ label: "Require Multi-Factor Auth",
6648
+ help: "When true, every member of this organization must enroll an authenticator app to access data."
6649
+ },
6398
6650
  id: {
6399
6651
  label: "Organization ID"
6400
6652
  },
@@ -6719,6 +6971,9 @@ var enObjects = {
6719
6971
  }
6720
6972
  },
6721
6973
  _views: {
6974
+ org_chart: {
6975
+ label: "Org Chart"
6976
+ },
6722
6977
  active: {
6723
6978
  label: "Active"
6724
6979
  },
@@ -7300,263 +7555,57 @@ var enObjects = {
7300
7555
  }
7301
7556
  }
7302
7557
  },
7303
- sys_audit_log: {
7304
- label: "Audit Log",
7305
- pluralLabel: "Audit Logs",
7306
- description: "Immutable audit trail for platform events",
7307
- fields: {
7308
- created_at: {
7309
- label: "Timestamp"
7310
- },
7311
- action: {
7312
- label: "Action",
7313
- help: "Action type (snake_case)",
7314
- options: {
7315
- create: "create",
7316
- update: "update",
7317
- delete: "delete",
7318
- restore: "restore",
7319
- login: "login",
7320
- logout: "logout",
7321
- permission_change: "permission_change",
7322
- config_change: "config_change",
7323
- export: "export",
7324
- import: "import"
7325
- }
7326
- },
7327
- user_id: {
7328
- label: "Actor",
7329
- help: "User who performed the action (null for system actions)"
7330
- },
7331
- object_name: {
7332
- label: "Object",
7333
- help: "Target object (e.g. sys_user, project_task)"
7334
- },
7335
- record_id: {
7336
- label: "Record ID",
7337
- help: "ID of the affected record"
7338
- },
7339
- old_value: {
7340
- label: "Old Value",
7341
- help: "JSON-serialized previous state"
7342
- },
7343
- new_value: {
7344
- label: "New Value",
7345
- help: "JSON-serialized new state"
7346
- },
7347
- ip_address: {
7348
- label: "IP Address"
7349
- },
7350
- user_agent: {
7351
- label: "User Agent"
7352
- },
7353
- tenant_id: {
7354
- label: "Tenant",
7355
- help: "Tenant context for multi-tenant isolation"
7356
- },
7357
- metadata: {
7358
- label: "Metadata",
7359
- help: "JSON-serialized additional context"
7360
- },
7361
- id: {
7362
- label: "Audit Log ID"
7363
- }
7364
- },
7365
- _views: {
7366
- recent: {
7367
- label: "Recent"
7368
- },
7369
- writes_only: {
7370
- label: "Writes"
7371
- },
7372
- auth_events: {
7373
- label: "Auth"
7374
- },
7375
- config_changes: {
7376
- label: "Config"
7377
- },
7378
- all_events: {
7379
- label: "All"
7380
- }
7381
- }
7382
- },
7383
- sys_presence: {
7384
- label: "Presence",
7385
- pluralLabel: "Presences",
7386
- description: "Real-time user presence and activity tracking",
7558
+ sys_notification: {
7559
+ label: "Notification",
7560
+ pluralLabel: "Notifications",
7561
+ description: "Per-user notification inbox entries",
7387
7562
  fields: {
7388
7563
  id: {
7389
- label: "Presence ID"
7390
- },
7391
- created_at: {
7392
- label: "Created At"
7393
- },
7394
- updated_at: {
7395
- label: "Updated At"
7396
- },
7397
- user_id: {
7398
- label: "User"
7399
- },
7400
- session_id: {
7401
- label: "Session"
7402
- },
7403
- status: {
7404
- label: "Status",
7405
- options: {
7406
- online: "Online",
7407
- away: "Away",
7408
- busy: "Busy",
7409
- offline: "Offline"
7410
- }
7564
+ label: "Notification ID"
7411
7565
  },
7412
- last_seen: {
7413
- label: "Last Seen"
7566
+ topic: {
7567
+ label: "Topic",
7568
+ help: "Notification topic, e.g. task.assigned, collab.mention"
7414
7569
  },
7415
- current_location: {
7416
- label: "Current Location"
7570
+ payload: {
7571
+ label: "Payload",
7572
+ help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
7417
7573
  },
7418
- device: {
7419
- label: "Device",
7574
+ severity: {
7575
+ label: "Severity",
7576
+ help: "Severity hint for rendering / filtering",
7420
7577
  options: {
7421
- desktop: "Desktop",
7422
- mobile: "Mobile",
7423
- tablet: "Tablet",
7424
- other: "Other"
7578
+ info: "info",
7579
+ warning: "warning",
7580
+ critical: "critical"
7425
7581
  }
7426
7582
  },
7427
- custom_status: {
7428
- label: "Custom Status"
7429
- },
7430
- metadata: {
7431
- label: "Metadata",
7432
- help: "Arbitrary JSON metadata associated with the presence state (matches PresenceStateSchema.metadata)."
7433
- }
7434
- }
7435
- },
7436
- sys_activity: {
7437
- label: "Activity",
7438
- pluralLabel: "Activities",
7439
- description: "Recent activity stream entries (lightweight, denormalized)",
7440
- fields: {
7441
- id: {
7442
- label: "Activity ID"
7443
- },
7444
- timestamp: {
7445
- label: "Timestamp"
7583
+ dedup_key: {
7584
+ label: "Dedup Key",
7585
+ help: "Idempotency key within a topic window; a repeat emit is a no-op"
7446
7586
  },
7447
- type: {
7448
- label: "Type",
7449
- options: {
7450
- created: "created",
7451
- updated: "updated",
7452
- deleted: "deleted",
7453
- commented: "commented",
7454
- mentioned: "mentioned",
7455
- shared: "shared",
7456
- assigned: "assigned",
7457
- completed: "completed",
7458
- login: "login",
7459
- logout: "logout",
7460
- system: "system"
7461
- }
7587
+ source_object: {
7588
+ label: "Source Object",
7589
+ help: "Object name of the related record (e.g. lead, opportunity)"
7462
7590
  },
7463
- summary: {
7464
- label: "Summary",
7465
- help: "Human-readable one-line summary"
7591
+ source_id: {
7592
+ label: "Source Record",
7593
+ help: "Record id within source_object"
7466
7594
  },
7467
7595
  actor_id: {
7468
- label: "Actor"
7469
- },
7470
- actor_name: {
7471
- label: "Actor Name"
7472
- },
7473
- actor_avatar_url: {
7474
- label: "Actor Avatar"
7475
- },
7476
- object_name: {
7477
- label: "Object",
7478
- help: "Target object short name (e.g. account, sys_user)"
7479
- },
7480
- record_id: {
7481
- label: "Record ID"
7482
- },
7483
- record_label: {
7484
- label: "Record Label",
7485
- help: "Display label of the target record at write time"
7486
- },
7487
- url: {
7488
- label: "URL",
7489
- help: "Optional deep-link to the activity target"
7490
- },
7491
- environment_id: {
7492
- label: "Project",
7493
- help: "Environment context (multi-environment deployments)"
7494
- },
7495
- metadata: {
7496
- label: "Metadata",
7497
- help: "JSON-serialized additional context"
7498
- }
7499
- }
7500
- },
7501
- sys_comment: {
7502
- label: "Comment",
7503
- pluralLabel: "Comments",
7504
- description: "Threaded comments attached to records via thread_id",
7505
- fields: {
7506
- id: {
7507
- label: "Comment ID"
7508
- },
7509
- thread_id: {
7510
- label: "Thread",
7511
- help: "Thread identifier \u2014 conventionally `{object}:{record_id}` (e.g. `sys_user:abc123`)"
7512
- },
7513
- parent_id: {
7514
- label: "Parent Comment",
7515
- help: "Optional parent comment for nested replies"
7516
- },
7517
- reply_count: {
7518
- label: "Reply Count"
7519
- },
7520
- author_id: {
7521
- label: "Author"
7522
- },
7523
- author_name: {
7524
- label: "Author Name"
7525
- },
7526
- author_avatar_url: {
7527
- label: "Author Avatar"
7528
- },
7529
- body: {
7530
- label: "Body",
7531
- help: "Comment text (Markdown supported)"
7532
- },
7533
- mentions: {
7534
- label: "Mentions",
7535
- help: "JSON array of @mention objects"
7536
- },
7537
- reactions: {
7538
- label: "Reactions",
7539
- help: "JSON array of emoji reaction objects"
7540
- },
7541
- is_edited: {
7542
- label: "Edited"
7543
- },
7544
- edited_at: {
7545
- label: "Edited At"
7546
- },
7547
- visibility: {
7548
- label: "Visibility",
7549
- options: {
7550
- public: "public",
7551
- internal: "internal",
7552
- private: "private"
7553
- }
7596
+ label: "Actor",
7597
+ help: "User who caused the notification (mentioner, assigner)"
7554
7598
  },
7555
7599
  created_at: {
7556
7600
  label: "Created At"
7601
+ }
7602
+ },
7603
+ _views: {
7604
+ recent: {
7605
+ label: "Recent"
7557
7606
  },
7558
- updated_at: {
7559
- label: "Updated At"
7607
+ by_topic: {
7608
+ label: "By Topic"
7560
7609
  }
7561
7610
  }
7562
7611
  },
@@ -7621,67 +7670,13 @@ var enObjects = {
7621
7670
  }
7622
7671
  }
7623
7672
  },
7624
- sys_notification: {
7625
- label: "Notification",
7626
- pluralLabel: "Notifications",
7627
- description: "Per-user notification inbox entries",
7673
+ sys_email: {
7674
+ label: "Email",
7675
+ pluralLabel: "Emails",
7676
+ description: "Outbound email delivery log",
7628
7677
  fields: {
7629
7678
  id: {
7630
- label: "Notification ID"
7631
- },
7632
- topic: {
7633
- label: "Topic",
7634
- help: "Notification topic, e.g. task.assigned, collab.mention"
7635
- },
7636
- payload: {
7637
- label: "Payload",
7638
- help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
7639
- },
7640
- severity: {
7641
- label: "Severity",
7642
- help: "Severity hint for rendering / filtering",
7643
- options: {
7644
- info: "info",
7645
- warning: "warning",
7646
- critical: "critical"
7647
- }
7648
- },
7649
- dedup_key: {
7650
- label: "Dedup Key",
7651
- help: "Idempotency key within a topic window; a repeat emit is a no-op"
7652
- },
7653
- source_object: {
7654
- label: "Source Object",
7655
- help: "Object name of the related record (e.g. lead, opportunity)"
7656
- },
7657
- source_id: {
7658
- label: "Source Record",
7659
- help: "Record id within source_object"
7660
- },
7661
- actor_id: {
7662
- label: "Actor",
7663
- help: "User who caused the notification (mentioner, assigner)"
7664
- },
7665
- created_at: {
7666
- label: "Created At"
7667
- }
7668
- },
7669
- _views: {
7670
- recent: {
7671
- label: "Recent"
7672
- },
7673
- by_topic: {
7674
- label: "By Topic"
7675
- }
7676
- }
7677
- },
7678
- sys_email: {
7679
- label: "Email",
7680
- pluralLabel: "Emails",
7681
- description: "Outbound email delivery log",
7682
- fields: {
7683
- id: {
7684
- label: "Email ID"
7679
+ label: "Email ID"
7685
7680
  },
7686
7681
  message_id: {
7687
7682
  label: "Message-ID",
@@ -8579,6 +8574,11 @@ var enObjects = {
8579
8574
  label: "Ciphertext",
8580
8575
  help: "Provider-encoded ciphertext blob (base64 / JSON). Implementation-defined; only the matching ICryptoProvider can read it."
8581
8576
  }
8577
+ },
8578
+ _views: {
8579
+ all: {
8580
+ label: "All Secrets"
8581
+ }
8582
8582
  }
8583
8583
  },
8584
8584
  sys_setting_audit: {
@@ -8654,6 +8654,11 @@ var enObjects = {
8654
8654
  label: "Request ID",
8655
8655
  help: "Correlates with sys_audit_log / tracing."
8656
8656
  }
8657
+ },
8658
+ _views: {
8659
+ recent: {
8660
+ label: "Recent"
8661
+ }
8657
8662
  }
8658
8663
  }
8659
8664
  };
@@ -8706,7 +8711,7 @@ var en = {
8706
8711
  nav_organizations: { label: "Organizations" },
8707
8712
  nav_invitations: { label: "Invitations" },
8708
8713
  // Access Control
8709
- nav_roles: { label: "Roles" },
8714
+ nav_positions: { label: "Positions" },
8710
8715
  nav_permission_sets: { label: "Permission Sets" },
8711
8716
  nav_sharing_rules: { label: "Sharing Rules" },
8712
8717
  nav_record_shares: { label: "Record Shares" },
@@ -8863,14 +8868,64 @@ var zhCNObjects = {
8863
8868
  label: "\u5C01\u7981\u5230\u671F\u65F6\u95F4",
8864
8869
  help: "\u8BBE\u7F6E\u540E\uFF0C\u5230\u8FBE\u8BE5\u65F6\u95F4\u4F1A\u81EA\u52A8\u89E3\u9664\u5C01\u7981\u3002"
8865
8870
  },
8871
+ failed_login_count: {
8872
+ label: "Failed Login Count",
8873
+ help: "Consecutive failed sign-in attempts; reset to 0 on success. Maintained by the auth manager."
8874
+ },
8875
+ locked_until: {
8876
+ label: "Locked Until",
8877
+ help: "When set and in the future, sign-in is rejected (brute-force lockout). Auto-clears past this time; an admin can clear it early via Unlock."
8878
+ },
8879
+ password_changed_at: {
8880
+ label: "Password Changed At",
8881
+ help: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
8882
+ },
8883
+ phone_number: {
8884
+ label: "Phone Number",
8885
+ help: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
8886
+ },
8887
+ phone_number_verified: {
8888
+ label: "Phone Verified",
8889
+ help: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
8890
+ },
8891
+ must_change_password: {
8892
+ label: "Must Change Password",
8893
+ help: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
8894
+ },
8895
+ mfa_required_at: {
8896
+ label: "MFA Required At",
8897
+ help: "When enforced MFA first applied to this user (grace-period clock). Backs mfa_required; system-managed."
8898
+ },
8899
+ last_login_at: {
8900
+ label: "Last Login At",
8901
+ help: "Timestamp of the last successful sign-in. Stamped by the auth manager; system-managed."
8902
+ },
8903
+ last_login_ip: {
8904
+ label: "Last Login IP",
8905
+ help: "Client IP of the last successful sign-in (from the trusted proxy forwarded header). System-managed."
8906
+ },
8907
+ ai_access: {
8908
+ label: "AI Access",
8909
+ help: "Whether this user holds an AI seat \u2014 grants access to the in-UI AI agents (build / ask). The framework synthesizes the `ai_seat` capability from this flag (plugin-hono-server resolveCtx). Assignment is capped by the licensed / purchased seat count (enforced by @objectstack/security-enterprise AiSeatPlugin). Owned by objectql (better-auth is oblivious to this column)."
8910
+ },
8866
8911
  image: {
8867
8912
  label: "\u5934\u50CF"
8868
8913
  },
8869
8914
  manager_id: {
8870
- label: "\u7ECF\u7406"
8915
+ label: "\u7ECF\u7406",
8916
+ help: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
8871
8917
  },
8872
8918
  primary_business_unit_id: {
8873
- label: "\u4E3B\u5C5E\u4E1A\u52A1\u5355\u5143"
8919
+ label: "\u4E3B\u5C5E\u4E1A\u52A1\u5355\u5143",
8920
+ help: "The user's primary business unit \u2014 a denormalised projection of sys_business_unit_member.is_primary, maintained by plugin-sharing (ADR-0057 addendum D12). Lets a user-lookup filter candidates by business unit without traversing the membership junction. Do not edit directly; set it via business-unit membership."
8921
+ },
8922
+ source: {
8923
+ label: "Identity Source",
8924
+ help: "How this identity was created \u2014 idp_provisioned (federated SSO JIT) or env_native (local signup / app end-user). System-managed; do not edit.",
8925
+ options: {
8926
+ idp_provisioned: "IdP-Provisioned",
8927
+ env_native: "Env-Native"
8928
+ }
8874
8929
  },
8875
8930
  id: {
8876
8931
  label: "\u7528\u6237 ID"
@@ -8913,6 +8968,14 @@ var zhCNObjects = {
8913
8968
  label: "\u89E3\u9664\u5C01\u7981",
8914
8969
  successMessage: "\u7528\u6237\u5DF2\u89E3\u9664\u5C01\u7981"
8915
8970
  },
8971
+ unlock_user: {
8972
+ label: "Unlock Account",
8973
+ successMessage: "Account unlocked"
8974
+ },
8975
+ create_user: {
8976
+ label: "Create User",
8977
+ successMessage: "User created"
8978
+ },
8916
8979
  set_user_password: {
8917
8980
  label: "\u8BBE\u7F6E\u5BC6\u7801",
8918
8981
  successMessage: "\u5BC6\u7801\u5DF2\u66F4\u65B0"
@@ -8974,6 +9037,18 @@ var zhCNObjects = {
8974
9037
  expires_at: {
8975
9038
  label: "\u8FC7\u671F\u65F6\u95F4"
8976
9039
  },
9040
+ last_activity_at: {
9041
+ label: "Last Activity At",
9042
+ help: "Timestamp of the last request on this session; drives idle-timeout. System-managed."
9043
+ },
9044
+ revoked_at: {
9045
+ label: "Revoked At",
9046
+ help: "When set, this session was revoked (idle / absolute-max / concurrent-cap / admin). System-managed."
9047
+ },
9048
+ revoke_reason: {
9049
+ label: "Revoke Reason",
9050
+ help: "Why the session was revoked (idle_timeout, absolute_max, concurrent_cap, \u2026)."
9051
+ },
8977
9052
  active_organization_id: {
8978
9053
  label: "\u5F53\u524D\u7EC4\u7EC7"
8979
9054
  },
@@ -9072,6 +9147,10 @@ var zhCNObjects = {
9072
9147
  password: {
9073
9148
  label: "\u5BC6\u7801\u54C8\u5E0C",
9074
9149
  help: "\u90AE\u7BB1/\u5BC6\u7801\u63D0\u4F9B\u65B9\u4F7F\u7528\u7684\u5BC6\u7801\u54C8\u5E0C"
9150
+ },
9151
+ previous_password_hashes: {
9152
+ label: "Previous Password Hashes",
9153
+ help: "JSON array of prior password hashes (bounded by password_history_count); reuse-prevention only. System-managed."
9075
9154
  }
9076
9155
  },
9077
9156
  _views: {
@@ -9142,6 +9221,10 @@ var zhCNObjects = {
9142
9221
  label: "\u5143\u6570\u636E",
9143
9222
  help: "JSON \u5E8F\u5217\u5316\u7684\u7EC4\u7EC7\u5143\u6570\u636E"
9144
9223
  },
9224
+ require_mfa: {
9225
+ label: "Require Multi-Factor Auth",
9226
+ help: "When true, every member of this organization must enroll an authenticator app to access data."
9227
+ },
9145
9228
  id: {
9146
9229
  label: "\u7EC4\u7EC7 ID"
9147
9230
  },
@@ -9466,6 +9549,9 @@ var zhCNObjects = {
9466
9549
  }
9467
9550
  },
9468
9551
  _views: {
9552
+ org_chart: {
9553
+ label: "Org Chart"
9554
+ },
9469
9555
  active: {
9470
9556
  label: "\u542F\u7528"
9471
9557
  },
@@ -10047,263 +10133,57 @@ var zhCNObjects = {
10047
10133
  }
10048
10134
  }
10049
10135
  },
10050
- sys_audit_log: {
10051
- label: "\u5BA1\u8BA1\u65E5\u5FD7",
10052
- pluralLabel: "\u5BA1\u8BA1\u65E5\u5FD7",
10053
- description: "\u5E73\u53F0\u4E8B\u4EF6\u7684\u4E0D\u53EF\u53D8\u5BA1\u8BA1\u8FFD\u8E2A",
10054
- fields: {
10055
- created_at: {
10056
- label: "\u65F6\u95F4\u6233"
10057
- },
10058
- action: {
10059
- label: "\u64CD\u4F5C",
10060
- help: "\u64CD\u4F5C\u7C7B\u578B\uFF08snake_case\uFF09",
10061
- options: {
10062
- create: "\u521B\u5EFA",
10063
- update: "\u66F4\u65B0",
10064
- delete: "\u5220\u9664",
10065
- restore: "\u6062\u590D",
10066
- login: "\u767B\u5F55",
10067
- logout: "\u767B\u51FA",
10068
- permission_change: "\u6743\u9650\u53D8\u66F4",
10069
- config_change: "\u914D\u7F6E\u53D8\u66F4",
10070
- export: "\u5BFC\u51FA",
10071
- import: "\u5BFC\u5165"
10072
- }
10073
- },
10074
- user_id: {
10075
- label: "\u6267\u884C\u4EBA",
10076
- help: "\u6267\u884C\u8BE5\u64CD\u4F5C\u7684\u7528\u6237\uFF08\u7CFB\u7EDF\u64CD\u4F5C\u65F6\u4E3A null\uFF09"
10077
- },
10078
- object_name: {
10079
- label: "\u5BF9\u8C61",
10080
- help: "\u76EE\u6807\u5BF9\u8C61\uFF08\u4F8B\u5982 sys_user\u3001project_task\uFF09"
10081
- },
10082
- record_id: {
10083
- label: "\u8BB0\u5F55 ID",
10084
- help: "\u53D7\u5F71\u54CD\u8BB0\u5F55\u7684 ID"
10085
- },
10086
- old_value: {
10087
- label: "\u65E7\u503C",
10088
- help: "\u65E7\u72B6\u6001\u7684 JSON \u5E8F\u5217\u5316\u5185\u5BB9"
10089
- },
10090
- new_value: {
10091
- label: "\u65B0\u503C",
10092
- help: "\u65B0\u72B6\u6001\u7684 JSON \u5E8F\u5217\u5316\u5185\u5BB9"
10093
- },
10094
- ip_address: {
10095
- label: "IP \u5730\u5740"
10096
- },
10097
- user_agent: {
10098
- label: "\u7528\u6237\u4EE3\u7406"
10099
- },
10100
- tenant_id: {
10101
- label: "\u79DF\u6237",
10102
- help: "\u7528\u4E8E\u591A\u79DF\u6237\u9694\u79BB\u7684\u79DF\u6237\u4E0A\u4E0B\u6587"
10103
- },
10104
- metadata: {
10105
- label: "\u5143\u6570\u636E",
10106
- help: "\u9644\u52A0\u4E0A\u4E0B\u6587\u7684 JSON \u5E8F\u5217\u5316\u5185\u5BB9"
10107
- },
10108
- id: {
10109
- label: "\u5BA1\u8BA1\u65E5\u5FD7 ID"
10110
- }
10111
- },
10112
- _views: {
10113
- recent: {
10114
- label: "\u6700\u8FD1"
10115
- },
10116
- writes_only: {
10117
- label: "\u5199\u5165"
10118
- },
10119
- auth_events: {
10120
- label: "\u8BA4\u8BC1"
10121
- },
10122
- config_changes: {
10123
- label: "\u914D\u7F6E"
10124
- },
10125
- all_events: {
10126
- label: "\u5168\u90E8"
10127
- }
10128
- }
10129
- },
10130
- sys_presence: {
10131
- label: "\u5728\u7EBF\u72B6\u6001",
10132
- pluralLabel: "\u5728\u7EBF\u72B6\u6001",
10133
- description: "\u5B9E\u65F6\u7528\u6237\u5728\u7EBF\u4E0E\u6D3B\u52A8\u8DDF\u8E2A",
10136
+ sys_notification: {
10137
+ label: "\u901A\u77E5",
10138
+ pluralLabel: "\u901A\u77E5",
10139
+ description: "\u6309\u7528\u6237\u5B58\u50A8\u7684\u901A\u77E5\u6536\u4EF6\u7BB1\u6761\u76EE",
10134
10140
  fields: {
10135
10141
  id: {
10136
- label: "\u5728\u7EBF\u72B6\u6001 ID"
10137
- },
10138
- created_at: {
10139
- label: "\u521B\u5EFA\u65F6\u95F4"
10140
- },
10141
- updated_at: {
10142
- label: "\u66F4\u65B0\u65F6\u95F4"
10143
- },
10144
- user_id: {
10145
- label: "\u7528\u6237"
10146
- },
10147
- session_id: {
10148
- label: "\u4F1A\u8BDD"
10149
- },
10150
- status: {
10151
- label: "\u72B6\u6001",
10152
- options: {
10153
- online: "\u5728\u7EBF",
10154
- away: "\u79BB\u5F00",
10155
- busy: "\u5FD9\u788C",
10156
- offline: "\u79BB\u7EBF"
10157
- }
10142
+ label: "\u901A\u77E5 ID"
10158
10143
  },
10159
- last_seen: {
10160
- label: "\u6700\u8FD1\u5728\u7EBF\u65F6\u95F4"
10144
+ topic: {
10145
+ label: "Topic",
10146
+ help: "Notification topic, e.g. task.assigned, collab.mention"
10161
10147
  },
10162
- current_location: {
10163
- label: "\u5F53\u524D\u4F4D\u7F6E"
10148
+ payload: {
10149
+ label: "Payload",
10150
+ help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
10164
10151
  },
10165
- device: {
10166
- label: "\u8BBE\u5907",
10152
+ severity: {
10153
+ label: "Severity",
10154
+ help: "Severity hint for rendering / filtering",
10167
10155
  options: {
10168
- desktop: "\u684C\u9762\u7AEF",
10169
- mobile: "\u79FB\u52A8\u7AEF",
10170
- tablet: "\u5E73\u677F\u7AEF",
10171
- other: "\u5176\u4ED6"
10156
+ info: "info",
10157
+ warning: "warning",
10158
+ critical: "critical"
10172
10159
  }
10173
10160
  },
10174
- custom_status: {
10175
- label: "\u81EA\u5B9A\u4E49\u72B6\u6001"
10176
- },
10177
- metadata: {
10178
- label: "\u5143\u6570\u636E",
10179
- help: "\u4E0E\u5728\u7EBF\u72B6\u6001\u5173\u8054\u7684\u4EFB\u610F JSON \u5143\u6570\u636E\uFF08\u5BF9\u5E94 PresenceStateSchema.metadata\uFF09\u3002"
10180
- }
10181
- }
10182
- },
10183
- sys_activity: {
10184
- label: "\u6D3B\u52A8",
10185
- pluralLabel: "\u6D3B\u52A8",
10186
- description: "\u6700\u8FD1\u6D3B\u52A8\u6D41\u6761\u76EE\uFF08\u8F7B\u91CF\u3001\u53BB\u89C4\u8303\u5316\uFF09",
10187
- fields: {
10188
- id: {
10189
- label: "\u6D3B\u52A8 ID"
10190
- },
10191
- timestamp: {
10192
- label: "\u65F6\u95F4\u6233"
10161
+ dedup_key: {
10162
+ label: "Dedup Key",
10163
+ help: "Idempotency key within a topic window; a repeat emit is a no-op"
10193
10164
  },
10194
- type: {
10195
- label: "\u7C7B\u578B",
10196
- options: {
10197
- created: "\u5DF2\u521B\u5EFA",
10198
- updated: "\u5DF2\u66F4\u65B0",
10199
- deleted: "\u5DF2\u5220\u9664",
10200
- commented: "\u5DF2\u8BC4\u8BBA",
10201
- mentioned: "\u88AB\u63D0\u53CA",
10202
- shared: "\u5DF2\u5171\u4EAB",
10203
- assigned: "\u5DF2\u5206\u914D",
10204
- completed: "\u5DF2\u5B8C\u6210",
10205
- login: "\u767B\u5F55",
10206
- logout: "\u767B\u51FA",
10207
- system: "\u7CFB\u7EDF"
10208
- }
10165
+ source_object: {
10166
+ label: "\u6765\u6E90\u5BF9\u8C61",
10167
+ help: "\u5173\u8054\u8BB0\u5F55\u7684\u5BF9\u8C61\u540D\u79F0\uFF08\u4F8B\u5982 lead\u3001opportunity\uFF09"
10209
10168
  },
10210
- summary: {
10211
- label: "\u6458\u8981",
10212
- help: "\u4EBA\u7C7B\u53EF\u8BFB\u7684\u5355\u884C\u6458\u8981"
10169
+ source_id: {
10170
+ label: "\u6765\u6E90\u8BB0\u5F55",
10171
+ help: "source_object \u4E2D\u7684\u8BB0\u5F55 ID"
10213
10172
  },
10214
10173
  actor_id: {
10215
- label: "\u6267\u884C\u4EBA"
10216
- },
10217
- actor_name: {
10218
- label: "\u6267\u884C\u4EBA\u540D\u79F0"
10219
- },
10220
- actor_avatar_url: {
10221
- label: "\u6267\u884C\u4EBA\u5934\u50CF"
10222
- },
10223
- object_name: {
10224
- label: "\u5BF9\u8C61",
10225
- help: "\u76EE\u6807\u5BF9\u8C61\u77ED\u540D\u79F0\uFF08\u4F8B\u5982 account\u3001sys_user\uFF09"
10226
- },
10227
- record_id: {
10228
- label: "\u8BB0\u5F55 ID"
10229
- },
10230
- record_label: {
10231
- label: "\u8BB0\u5F55\u6807\u7B7E",
10232
- help: "\u5199\u5165\u65F6\u76EE\u6807\u8BB0\u5F55\u7684\u663E\u793A\u6807\u7B7E"
10233
- },
10234
- url: {
10235
- label: "URL",
10236
- help: "\u6307\u5411\u6D3B\u52A8\u76EE\u6807\u7684\u53EF\u9009\u6DF1\u5EA6\u94FE\u63A5"
10237
- },
10238
- environment_id: {
10239
- label: "\u9879\u76EE",
10240
- help: "\u9879\u76EE\u4E0A\u4E0B\u6587\uFF08\u591A\u9879\u76EE\u90E8\u7F72\uFF09"
10241
- },
10242
- metadata: {
10243
- label: "\u5143\u6570\u636E",
10244
- help: "\u9644\u52A0\u4E0A\u4E0B\u6587\u7684 JSON \u5E8F\u5217\u5316\u5185\u5BB9"
10245
- }
10246
- }
10247
- },
10248
- sys_comment: {
10249
- label: "\u8BC4\u8BBA",
10250
- pluralLabel: "\u8BC4\u8BBA",
10251
- description: "\u901A\u8FC7 thread_id \u9644\u52A0\u5230\u8BB0\u5F55\u7684\u7EBF\u7A0B\u5316\u8BC4\u8BBA",
10252
- fields: {
10253
- id: {
10254
- label: "\u8BC4\u8BBA ID"
10255
- },
10256
- thread_id: {
10257
- label: "\u7EBF\u7A0B",
10258
- help: "\u7EBF\u7A0B\u6807\u8BC6\u2014\u2014\u7EA6\u5B9A\u683C\u5F0F\u4E3A `{object}:{record_id}`\uFF08\u4F8B\u5982 `sys_user:abc123`\uFF09"
10259
- },
10260
- parent_id: {
10261
- label: "\u7236\u8BC4\u8BBA",
10262
- help: "\u53EF\u9009\u7684\u7236\u8BC4\u8BBA\uFF0C\u7528\u4E8E\u5D4C\u5957\u56DE\u590D"
10263
- },
10264
- reply_count: {
10265
- label: "\u56DE\u590D\u6570"
10266
- },
10267
- author_id: {
10268
- label: "\u4F5C\u8005"
10269
- },
10270
- author_name: {
10271
- label: "\u4F5C\u8005\u540D\u79F0"
10272
- },
10273
- author_avatar_url: {
10274
- label: "\u4F5C\u8005\u5934\u50CF"
10275
- },
10276
- body: {
10277
- label: "\u6B63\u6587",
10278
- help: "\u8BC4\u8BBA\u6587\u672C\uFF08\u652F\u6301 Markdown\uFF09"
10279
- },
10280
- mentions: {
10281
- label: "\u63D0\u53CA",
10282
- help: "@mention \u5BF9\u8C61\u7684 JSON \u6570\u7EC4"
10283
- },
10284
- reactions: {
10285
- label: "\u56DE\u5E94",
10286
- help: "\u8868\u60C5\u56DE\u5E94\u5BF9\u8C61\u7684 JSON \u6570\u7EC4"
10287
- },
10288
- is_edited: {
10289
- label: "\u5DF2\u7F16\u8F91"
10290
- },
10291
- edited_at: {
10292
- label: "\u7F16\u8F91\u65F6\u95F4"
10293
- },
10294
- visibility: {
10295
- label: "\u53EF\u89C1\u6027",
10296
- options: {
10297
- public: "\u516C\u5F00",
10298
- internal: "\u5185\u90E8",
10299
- private: "\u79C1\u6709"
10300
- }
10174
+ label: "\u6267\u884C\u4EBA",
10175
+ help: "\u89E6\u53D1\u8BE5\u901A\u77E5\u7684\u7528\u6237\uFF08\u63D0\u53CA\u4EBA\u3001\u5206\u914D\u4EBA\uFF09"
10301
10176
  },
10302
10177
  created_at: {
10303
10178
  label: "\u521B\u5EFA\u65F6\u95F4"
10179
+ }
10180
+ },
10181
+ _views: {
10182
+ recent: {
10183
+ label: "Recent"
10304
10184
  },
10305
- updated_at: {
10306
- label: "\u66F4\u65B0\u65F6\u95F4"
10185
+ by_topic: {
10186
+ label: "By Topic"
10307
10187
  }
10308
10188
  }
10309
10189
  },
@@ -10368,74 +10248,20 @@ var zhCNObjects = {
10368
10248
  }
10369
10249
  }
10370
10250
  },
10371
- sys_notification: {
10372
- label: "\u901A\u77E5",
10373
- pluralLabel: "\u901A\u77E5",
10374
- description: "\u6309\u7528\u6237\u5B58\u50A8\u7684\u901A\u77E5\u6536\u4EF6\u7BB1\u6761\u76EE",
10251
+ sys_email: {
10252
+ label: "\u90AE\u4EF6",
10253
+ pluralLabel: "\u90AE\u4EF6",
10254
+ description: "\u5916\u53D1\u90AE\u4EF6\u6295\u9012\u65E5\u5FD7",
10375
10255
  fields: {
10376
10256
  id: {
10377
- label: "\u901A\u77E5 ID"
10257
+ label: "\u90AE\u4EF6 ID"
10378
10258
  },
10379
- topic: {
10380
- label: "Topic",
10381
- help: "Notification topic, e.g. task.assigned, collab.mention"
10259
+ message_id: {
10260
+ label: "Message-ID",
10261
+ help: "\u4F20\u8F93\u5C42\u5206\u914D\u7684 RFC-5322 Message-ID"
10382
10262
  },
10383
- payload: {
10384
- label: "Payload",
10385
- help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
10386
- },
10387
- severity: {
10388
- label: "Severity",
10389
- help: "Severity hint for rendering / filtering",
10390
- options: {
10391
- info: "info",
10392
- warning: "warning",
10393
- critical: "critical"
10394
- }
10395
- },
10396
- dedup_key: {
10397
- label: "Dedup Key",
10398
- help: "Idempotency key within a topic window; a repeat emit is a no-op"
10399
- },
10400
- source_object: {
10401
- label: "\u6765\u6E90\u5BF9\u8C61",
10402
- help: "\u5173\u8054\u8BB0\u5F55\u7684\u5BF9\u8C61\u540D\u79F0\uFF08\u4F8B\u5982 lead\u3001opportunity\uFF09"
10403
- },
10404
- source_id: {
10405
- label: "\u6765\u6E90\u8BB0\u5F55",
10406
- help: "source_object \u4E2D\u7684\u8BB0\u5F55 ID"
10407
- },
10408
- actor_id: {
10409
- label: "\u6267\u884C\u4EBA",
10410
- help: "\u89E6\u53D1\u8BE5\u901A\u77E5\u7684\u7528\u6237\uFF08\u63D0\u53CA\u4EBA\u3001\u5206\u914D\u4EBA\uFF09"
10411
- },
10412
- created_at: {
10413
- label: "\u521B\u5EFA\u65F6\u95F4"
10414
- }
10415
- },
10416
- _views: {
10417
- recent: {
10418
- label: "Recent"
10419
- },
10420
- by_topic: {
10421
- label: "By Topic"
10422
- }
10423
- }
10424
- },
10425
- sys_email: {
10426
- label: "\u90AE\u4EF6",
10427
- pluralLabel: "\u90AE\u4EF6",
10428
- description: "\u5916\u53D1\u90AE\u4EF6\u6295\u9012\u65E5\u5FD7",
10429
- fields: {
10430
- id: {
10431
- label: "\u90AE\u4EF6 ID"
10432
- },
10433
- message_id: {
10434
- label: "Message-ID",
10435
- help: "\u4F20\u8F93\u5C42\u5206\u914D\u7684 RFC-5322 Message-ID"
10436
- },
10437
- from_address: {
10438
- label: "\u53D1\u4EF6\u4EBA"
10263
+ from_address: {
10264
+ label: "\u53D1\u4EF6\u4EBA"
10439
10265
  },
10440
10266
  to_addresses: {
10441
10267
  label: "\u6536\u4EF6\u4EBA",
@@ -11326,6 +11152,11 @@ var zhCNObjects = {
11326
11152
  label: "\u5BC6\u6587",
11327
11153
  help: "\u63D0\u4F9B\u65B9\u7F16\u7801\u540E\u7684\u5BC6\u6587\u6570\u636E\uFF08base64 / JSON\uFF09\u3002\u5B9E\u73B0\u5B9A\u4E49\uFF1B\u4EC5\u5339\u914D\u7684 ICryptoProvider \u53EF\u8BFB\u53D6\u3002"
11328
11154
  }
11155
+ },
11156
+ _views: {
11157
+ all: {
11158
+ label: "All Secrets"
11159
+ }
11329
11160
  }
11330
11161
  },
11331
11162
  sys_setting_audit: {
@@ -11401,6 +11232,11 @@ var zhCNObjects = {
11401
11232
  label: "\u8BF7\u6C42 ID",
11402
11233
  help: "\u4E0E sys_audit_log / tracing \u5173\u8054\u3002"
11403
11234
  }
11235
+ },
11236
+ _views: {
11237
+ recent: {
11238
+ label: "Recent"
11239
+ }
11404
11240
  }
11405
11241
  }
11406
11242
  };
@@ -11449,12 +11285,13 @@ var zhCN = {
11449
11285
  nav_teams: { label: "\u56E2\u961F" },
11450
11286
  nav_organizations: { label: "\u7EC4\u7EC7" },
11451
11287
  nav_invitations: { label: "\u9080\u8BF7" },
11452
- nav_roles: { label: "\u89D2\u8272" },
11288
+ nav_positions: { label: "\u5C97\u4F4D" },
11453
11289
  nav_capabilities: { label: "\u80FD\u529B" },
11454
11290
  nav_permission_sets: { label: "\u6743\u9650\u96C6" },
11455
11291
  nav_sharing_rules: { label: "\u5171\u4EAB\u89C4\u5219" },
11456
11292
  nav_record_shares: { label: "\u8BB0\u5F55\u5171\u4EAB" },
11457
11293
  nav_api_keys: { label: "API \u5BC6\u94A5" },
11294
+ nav_connect_agent: { label: "\u8FDE\u63A5\u667A\u80FD\u4F53" },
11458
11295
  nav_approval_processes: { label: "\u5BA1\u6279\u6D41\u7A0B" },
11459
11296
  nav_approval_requests: { label: "\u5BA1\u6279\u7533\u8BF7" },
11460
11297
  nav_approval_actions: { label: "\u5BA1\u6279\u5386\u53F2" },
@@ -11573,14 +11410,64 @@ var jaJPObjects = {
11573
11410
  label: "\u5229\u7528\u505C\u6B62\u671F\u9650",
11574
11411
  help: "\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u3001\u3053\u306E\u65E5\u6642\u306B\u5229\u7528\u505C\u6B62\u304C\u81EA\u52D5\u89E3\u9664\u3055\u308C\u307E\u3059\u3002"
11575
11412
  },
11413
+ failed_login_count: {
11414
+ label: "Failed Login Count",
11415
+ help: "Consecutive failed sign-in attempts; reset to 0 on success. Maintained by the auth manager."
11416
+ },
11417
+ locked_until: {
11418
+ label: "Locked Until",
11419
+ help: "When set and in the future, sign-in is rejected (brute-force lockout). Auto-clears past this time; an admin can clear it early via Unlock."
11420
+ },
11421
+ password_changed_at: {
11422
+ label: "Password Changed At",
11423
+ help: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
11424
+ },
11425
+ phone_number: {
11426
+ label: "Phone Number",
11427
+ help: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
11428
+ },
11429
+ phone_number_verified: {
11430
+ label: "Phone Verified",
11431
+ help: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
11432
+ },
11433
+ must_change_password: {
11434
+ label: "Must Change Password",
11435
+ help: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
11436
+ },
11437
+ mfa_required_at: {
11438
+ label: "MFA Required At",
11439
+ help: "When enforced MFA first applied to this user (grace-period clock). Backs mfa_required; system-managed."
11440
+ },
11441
+ last_login_at: {
11442
+ label: "Last Login At",
11443
+ help: "Timestamp of the last successful sign-in. Stamped by the auth manager; system-managed."
11444
+ },
11445
+ last_login_ip: {
11446
+ label: "Last Login IP",
11447
+ help: "Client IP of the last successful sign-in (from the trusted proxy forwarded header). System-managed."
11448
+ },
11449
+ ai_access: {
11450
+ label: "AI Access",
11451
+ help: "Whether this user holds an AI seat \u2014 grants access to the in-UI AI agents (build / ask). The framework synthesizes the `ai_seat` capability from this flag (plugin-hono-server resolveCtx). Assignment is capped by the licensed / purchased seat count (enforced by @objectstack/security-enterprise AiSeatPlugin). Owned by objectql (better-auth is oblivious to this column)."
11452
+ },
11576
11453
  image: {
11577
11454
  label: "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u753B\u50CF"
11578
11455
  },
11579
11456
  manager_id: {
11580
- label: "\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC"
11457
+ label: "\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC",
11458
+ help: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
11581
11459
  },
11582
11460
  primary_business_unit_id: {
11583
- label: "\u4E3B\u6240\u5C5E\u30D3\u30B8\u30CD\u30B9\u30E6\u30CB\u30C3\u30C8"
11461
+ label: "\u4E3B\u6240\u5C5E\u30D3\u30B8\u30CD\u30B9\u30E6\u30CB\u30C3\u30C8",
11462
+ help: "The user's primary business unit \u2014 a denormalised projection of sys_business_unit_member.is_primary, maintained by plugin-sharing (ADR-0057 addendum D12). Lets a user-lookup filter candidates by business unit without traversing the membership junction. Do not edit directly; set it via business-unit membership."
11463
+ },
11464
+ source: {
11465
+ label: "Identity Source",
11466
+ help: "How this identity was created \u2014 idp_provisioned (federated SSO JIT) or env_native (local signup / app end-user). System-managed; do not edit.",
11467
+ options: {
11468
+ idp_provisioned: "IdP-Provisioned",
11469
+ env_native: "Env-Native"
11470
+ }
11584
11471
  },
11585
11472
  id: {
11586
11473
  label: "\u30E6\u30FC\u30B6\u30FC ID"
@@ -11623,6 +11510,14 @@ var jaJPObjects = {
11623
11510
  label: "\u5229\u7528\u505C\u6B62\u3092\u89E3\u9664",
11624
11511
  successMessage: "\u30E6\u30FC\u30B6\u30FC\u306E\u5229\u7528\u505C\u6B62\u3092\u89E3\u9664\u3057\u307E\u3057\u305F"
11625
11512
  },
11513
+ unlock_user: {
11514
+ label: "Unlock Account",
11515
+ successMessage: "Account unlocked"
11516
+ },
11517
+ create_user: {
11518
+ label: "Create User",
11519
+ successMessage: "User created"
11520
+ },
11626
11521
  set_user_password: {
11627
11522
  label: "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u8A2D\u5B9A",
11628
11523
  successMessage: "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F"
@@ -11684,6 +11579,18 @@ var jaJPObjects = {
11684
11579
  expires_at: {
11685
11580
  label: "\u6709\u52B9\u671F\u9650"
11686
11581
  },
11582
+ last_activity_at: {
11583
+ label: "Last Activity At",
11584
+ help: "Timestamp of the last request on this session; drives idle-timeout. System-managed."
11585
+ },
11586
+ revoked_at: {
11587
+ label: "Revoked At",
11588
+ help: "When set, this session was revoked (idle / absolute-max / concurrent-cap / admin). System-managed."
11589
+ },
11590
+ revoke_reason: {
11591
+ label: "Revoke Reason",
11592
+ help: "Why the session was revoked (idle_timeout, absolute_max, concurrent_cap, \u2026)."
11593
+ },
11687
11594
  active_organization_id: {
11688
11595
  label: "\u30A2\u30AF\u30C6\u30A3\u30D6\u7D44\u7E54"
11689
11596
  },
@@ -11782,6 +11689,10 @@ var jaJPObjects = {
11782
11689
  password: {
11783
11690
  label: "\u30D1\u30B9\u30EF\u30FC\u30C9\u30CF\u30C3\u30B7\u30E5",
11784
11691
  help: "\u30E1\u30FC\u30EB/\u30D1\u30B9\u30EF\u30FC\u30C9\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u7528\u306E\u30CF\u30C3\u30B7\u30E5\u5316\u30D1\u30B9\u30EF\u30FC\u30C9"
11692
+ },
11693
+ previous_password_hashes: {
11694
+ label: "Previous Password Hashes",
11695
+ help: "JSON array of prior password hashes (bounded by password_history_count); reuse-prevention only. System-managed."
11785
11696
  }
11786
11697
  },
11787
11698
  _views: {
@@ -11852,6 +11763,10 @@ var jaJPObjects = {
11852
11763
  label: "\u30E1\u30BF\u30C7\u30FC\u30BF",
11853
11764
  help: "JSON \u30B7\u30EA\u30A2\u30E9\u30A4\u30BA\u3055\u308C\u305F\u7D44\u7E54\u30E1\u30BF\u30C7\u30FC\u30BF"
11854
11765
  },
11766
+ require_mfa: {
11767
+ label: "Require Multi-Factor Auth",
11768
+ help: "When true, every member of this organization must enroll an authenticator app to access data."
11769
+ },
11855
11770
  id: {
11856
11771
  label: "\u7D44\u7E54 ID"
11857
11772
  },
@@ -12176,6 +12091,9 @@ var jaJPObjects = {
12176
12091
  }
12177
12092
  },
12178
12093
  _views: {
12094
+ org_chart: {
12095
+ label: "Org Chart"
12096
+ },
12179
12097
  active: {
12180
12098
  label: "\u6709\u52B9"
12181
12099
  },
@@ -12757,263 +12675,57 @@ var jaJPObjects = {
12757
12675
  }
12758
12676
  }
12759
12677
  },
12760
- sys_audit_log: {
12761
- label: "\u76E3\u67FB\u30ED\u30B0",
12762
- pluralLabel: "\u76E3\u67FB\u30ED\u30B0",
12763
- description: "\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u30A4\u30D9\u30F3\u30C8\u306E\u4E0D\u5909\u306E\u76E3\u67FB\u8A3C\u8DE1",
12764
- fields: {
12765
- created_at: {
12766
- label: "\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7"
12767
- },
12768
- action: {
12769
- label: "\u30A2\u30AF\u30B7\u30E7\u30F3",
12770
- help: "\u30A2\u30AF\u30B7\u30E7\u30F3\u30BF\u30A4\u30D7\uFF08snake_case\uFF09",
12771
- options: {
12772
- create: "\u4F5C\u6210",
12773
- update: "\u66F4\u65B0",
12774
- delete: "\u524A\u9664",
12775
- restore: "\u5FA9\u5143",
12776
- login: "\u30ED\u30B0\u30A4\u30F3",
12777
- logout: "\u30ED\u30B0\u30A2\u30A6\u30C8",
12778
- permission_change: "\u6A29\u9650\u5909\u66F4",
12779
- config_change: "\u69CB\u6210\u5909\u66F4",
12780
- export: "\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8",
12781
- import: "\u30A4\u30F3\u30DD\u30FC\u30C8"
12782
- }
12783
- },
12784
- user_id: {
12785
- label: "\u64CD\u4F5C\u8005",
12786
- help: "\u30A2\u30AF\u30B7\u30E7\u30F3\u3092\u5B9F\u884C\u3057\u305F\u30E6\u30FC\u30B6\u30FC\uFF08\u30B7\u30B9\u30C6\u30E0\u64CD\u4F5C\u306E\u5834\u5408\u306F null\uFF09"
12787
- },
12788
- object_name: {
12789
- label: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8",
12790
- help: "\u5BFE\u8C61\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\uFF08\u4F8B: sys_user\u3001project_task\uFF09"
12791
- },
12792
- record_id: {
12793
- label: "\u30EC\u30B3\u30FC\u30C9 ID",
12794
- help: "\u5F71\u97FF\u3092\u53D7\u3051\u305F\u30EC\u30B3\u30FC\u30C9\u306E ID"
12795
- },
12796
- old_value: {
12797
- label: "\u5909\u66F4\u524D\u306E\u5024",
12798
- help: "JSON \u30B7\u30EA\u30A2\u30E9\u30A4\u30BA\u3055\u308C\u305F\u4EE5\u524D\u306E\u72B6\u614B"
12799
- },
12800
- new_value: {
12801
- label: "\u5909\u66F4\u5F8C\u306E\u5024",
12802
- help: "JSON \u30B7\u30EA\u30A2\u30E9\u30A4\u30BA\u3055\u308C\u305F\u65B0\u3057\u3044\u72B6\u614B"
12803
- },
12804
- ip_address: {
12805
- label: "IP \u30A2\u30C9\u30EC\u30B9"
12806
- },
12807
- user_agent: {
12808
- label: "\u30E6\u30FC\u30B6\u30FC\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8"
12809
- },
12810
- tenant_id: {
12811
- label: "\u30C6\u30CA\u30F3\u30C8",
12812
- help: "\u30DE\u30EB\u30C1\u30C6\u30CA\u30F3\u30C8\u5206\u96E2\u306E\u305F\u3081\u306E\u30C6\u30CA\u30F3\u30C8\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8"
12813
- },
12814
- metadata: {
12815
- label: "\u30E1\u30BF\u30C7\u30FC\u30BF",
12816
- help: "JSON \u30B7\u30EA\u30A2\u30E9\u30A4\u30BA\u3055\u308C\u305F\u8FFD\u52A0\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8"
12817
- },
12818
- id: {
12819
- label: "\u76E3\u67FB\u30ED\u30B0 ID"
12820
- }
12821
- },
12822
- _views: {
12823
- recent: {
12824
- label: "\u6700\u8FD1"
12825
- },
12826
- writes_only: {
12827
- label: "\u66F8\u304D\u8FBC\u307F"
12828
- },
12829
- auth_events: {
12830
- label: "\u8A8D\u8A3C"
12831
- },
12832
- config_changes: {
12833
- label: "\u69CB\u6210\u5909\u66F4"
12834
- },
12835
- all_events: {
12836
- label: "\u3059\u3079\u3066"
12837
- }
12838
- }
12839
- },
12840
- sys_presence: {
12841
- label: "\u5728\u5E2D\u72B6\u6CC1",
12842
- pluralLabel: "\u5728\u5E2D\u72B6\u6CC1",
12843
- description: "\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u306E\u30E6\u30FC\u30B6\u30FC\u5728\u5E2D\u72B6\u6CC1\u3068\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u8FFD\u8DE1",
12678
+ sys_notification: {
12679
+ label: "\u901A\u77E5",
12680
+ pluralLabel: "\u901A\u77E5",
12681
+ description: "\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u901A\u77E5\u53D7\u4FE1\u30DC\u30C3\u30AF\u30B9\u30A8\u30F3\u30C8\u30EA",
12844
12682
  fields: {
12845
12683
  id: {
12846
- label: "\u5728\u5E2D ID"
12847
- },
12848
- created_at: {
12849
- label: "\u4F5C\u6210\u65E5\u6642"
12850
- },
12851
- updated_at: {
12852
- label: "\u66F4\u65B0\u65E5\u6642"
12853
- },
12854
- user_id: {
12855
- label: "\u30E6\u30FC\u30B6\u30FC"
12856
- },
12857
- session_id: {
12858
- label: "\u30BB\u30C3\u30B7\u30E7\u30F3"
12859
- },
12860
- status: {
12861
- label: "\u30B9\u30C6\u30FC\u30BF\u30B9",
12862
- options: {
12863
- online: "\u30AA\u30F3\u30E9\u30A4\u30F3",
12864
- away: "\u96E2\u5E2D\u4E2D",
12865
- busy: "\u53D6\u308A\u8FBC\u307F\u4E2D",
12866
- offline: "\u30AA\u30D5\u30E9\u30A4\u30F3"
12867
- }
12684
+ label: "\u901A\u77E5 ID"
12868
12685
  },
12869
- last_seen: {
12870
- label: "\u6700\u7D42\u78BA\u8A8D\u65E5\u6642"
12686
+ topic: {
12687
+ label: "Topic",
12688
+ help: "Notification topic, e.g. task.assigned, collab.mention"
12871
12689
  },
12872
- current_location: {
12873
- label: "\u73FE\u5728\u5730"
12690
+ payload: {
12691
+ label: "Payload",
12692
+ help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
12874
12693
  },
12875
- device: {
12876
- label: "\u30C7\u30D0\u30A4\u30B9",
12694
+ severity: {
12695
+ label: "Severity",
12696
+ help: "Severity hint for rendering / filtering",
12877
12697
  options: {
12878
- desktop: "\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7",
12879
- mobile: "\u30E2\u30D0\u30A4\u30EB",
12880
- tablet: "\u30BF\u30D6\u30EC\u30C3\u30C8",
12881
- other: "\u305D\u306E\u4ED6"
12698
+ info: "info",
12699
+ warning: "warning",
12700
+ critical: "critical"
12882
12701
  }
12883
12702
  },
12884
- custom_status: {
12885
- label: "\u30AB\u30B9\u30BF\u30E0\u30B9\u30C6\u30FC\u30BF\u30B9"
12886
- },
12887
- metadata: {
12888
- label: "\u30E1\u30BF\u30C7\u30FC\u30BF",
12889
- help: "\u5728\u5E2D\u72B6\u614B\u306B\u95A2\u9023\u4ED8\u3051\u3089\u308C\u305F\u4EFB\u610F\u306E JSON \u30E1\u30BF\u30C7\u30FC\u30BF\uFF08PresenceStateSchema.metadata \u306B\u5BFE\u5FDC\uFF09\u3002"
12890
- }
12891
- }
12892
- },
12893
- sys_activity: {
12894
- label: "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3",
12895
- pluralLabel: "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3",
12896
- description: "\u6700\u8FD1\u306E\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u30B9\u30C8\u30EA\u30FC\u30E0\u30A8\u30F3\u30C8\u30EA\uFF08\u8EFD\u91CF\u3001\u975E\u6B63\u898F\u5316\uFF09",
12897
- fields: {
12898
- id: {
12899
- label: "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3 ID"
12900
- },
12901
- timestamp: {
12902
- label: "\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7"
12703
+ dedup_key: {
12704
+ label: "Dedup Key",
12705
+ help: "Idempotency key within a topic window; a repeat emit is a no-op"
12903
12706
  },
12904
- type: {
12905
- label: "\u30BF\u30A4\u30D7",
12906
- options: {
12907
- created: "\u4F5C\u6210",
12908
- updated: "\u66F4\u65B0",
12909
- deleted: "\u524A\u9664",
12910
- commented: "\u30B3\u30E1\u30F3\u30C8",
12911
- mentioned: "\u30E1\u30F3\u30B7\u30E7\u30F3",
12912
- shared: "\u5171\u6709",
12913
- assigned: "\u5272\u308A\u5F53\u3066",
12914
- completed: "\u5B8C\u4E86",
12915
- login: "\u30ED\u30B0\u30A4\u30F3",
12916
- logout: "\u30ED\u30B0\u30A2\u30A6\u30C8",
12917
- system: "\u30B7\u30B9\u30C6\u30E0"
12918
- }
12707
+ source_object: {
12708
+ label: "\u30BD\u30FC\u30B9\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8",
12709
+ help: "\u95A2\u9023\u30EC\u30B3\u30FC\u30C9\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D\uFF08\u4F8B: lead\u3001opportunity\uFF09"
12919
12710
  },
12920
- summary: {
12921
- label: "\u30B5\u30DE\u30EA\u30FC",
12922
- help: "\u5224\u5225\u3057\u3084\u3059\u3044 1 \u884C\u30B5\u30DE\u30EA\u30FC"
12711
+ source_id: {
12712
+ label: "\u30BD\u30FC\u30B9\u30EC\u30B3\u30FC\u30C9",
12713
+ help: "source_object \u5185\u306E\u30EC\u30B3\u30FC\u30C9 ID"
12923
12714
  },
12924
12715
  actor_id: {
12925
- label: "\u64CD\u4F5C\u8005"
12926
- },
12927
- actor_name: {
12928
- label: "\u64CD\u4F5C\u8005\u540D"
12929
- },
12930
- actor_avatar_url: {
12931
- label: "\u64CD\u4F5C\u8005\u30A2\u30D0\u30BF\u30FC"
12932
- },
12933
- object_name: {
12934
- label: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8",
12935
- help: "\u5BFE\u8C61\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u77ED\u3044\u540D\u524D\uFF08\u4F8B: account\u3001sys_user\uFF09"
12936
- },
12937
- record_id: {
12938
- label: "\u30EC\u30B3\u30FC\u30C9 ID"
12939
- },
12940
- record_label: {
12941
- label: "\u30EC\u30B3\u30FC\u30C9\u8868\u793A\u540D",
12942
- help: "\u66F8\u304D\u8FBC\u307F\u6642\u70B9\u306E\u5BFE\u8C61\u30EC\u30B3\u30FC\u30C9\u306E\u8868\u793A\u540D"
12943
- },
12944
- url: {
12945
- label: "URL",
12946
- help: "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u30BF\u30FC\u30B2\u30C3\u30C8\u3078\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u30C7\u30A3\u30FC\u30D7\u30EA\u30F3\u30AF"
12947
- },
12948
- environment_id: {
12949
- label: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",
12950
- help: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\uFF08\u30DE\u30EB\u30C1\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30C7\u30D7\u30ED\u30A4\u30E1\u30F3\u30C8\uFF09"
12951
- },
12952
- metadata: {
12953
- label: "\u30E1\u30BF\u30C7\u30FC\u30BF",
12954
- help: "JSON \u30B7\u30EA\u30A2\u30E9\u30A4\u30BA\u3055\u308C\u305F\u8FFD\u52A0\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8"
12955
- }
12956
- }
12957
- },
12958
- sys_comment: {
12959
- label: "\u30B3\u30E1\u30F3\u30C8",
12960
- pluralLabel: "\u30B3\u30E1\u30F3\u30C8",
12961
- description: "thread_id \u3092\u4ECB\u3057\u3066\u30EC\u30B3\u30FC\u30C9\u306B\u6DFB\u4ED8\u3055\u308C\u305F\u30B9\u30EC\u30C3\u30C9\u30B3\u30E1\u30F3\u30C8",
12962
- fields: {
12963
- id: {
12964
- label: "\u30B3\u30E1\u30F3\u30C8 ID"
12965
- },
12966
- thread_id: {
12967
- label: "\u30B9\u30EC\u30C3\u30C9",
12968
- help: "\u30B9\u30EC\u30C3\u30C9\u8B58\u5225\u5B50 \u2014 \u901A\u5E38\u306F `{object}:{record_id}`\uFF08\u4F8B: `sys_user:abc123`\uFF09"
12969
- },
12970
- parent_id: {
12971
- label: "\u89AA\u30B3\u30E1\u30F3\u30C8",
12972
- help: "\u30CD\u30B9\u30C8\u3057\u305F\u8FD4\u4FE1\u7528\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u89AA\u30B3\u30E1\u30F3\u30C8"
12973
- },
12974
- reply_count: {
12975
- label: "\u8FD4\u4FE1\u6570"
12976
- },
12977
- author_id: {
12978
- label: "\u6295\u7A3F\u8005"
12979
- },
12980
- author_name: {
12981
- label: "\u6295\u7A3F\u8005\u540D"
12982
- },
12983
- author_avatar_url: {
12984
- label: "\u6295\u7A3F\u8005\u30A2\u30D0\u30BF\u30FC"
12985
- },
12986
- body: {
12987
- label: "\u672C\u6587",
12988
- help: "\u30B3\u30E1\u30F3\u30C8\u30C6\u30AD\u30B9\u30C8\uFF08Markdown \u5BFE\u5FDC\uFF09"
12989
- },
12990
- mentions: {
12991
- label: "\u30E1\u30F3\u30B7\u30E7\u30F3",
12992
- help: "@\u30E1\u30F3\u30B7\u30E7\u30F3\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E JSON \u914D\u5217"
12993
- },
12994
- reactions: {
12995
- label: "\u30EA\u30A2\u30AF\u30B7\u30E7\u30F3",
12996
- help: "\u7D75\u6587\u5B57\u30EA\u30A2\u30AF\u30B7\u30E7\u30F3\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E JSON \u914D\u5217"
12997
- },
12998
- is_edited: {
12999
- label: "\u7DE8\u96C6\u6E08\u307F"
13000
- },
13001
- edited_at: {
13002
- label: "\u7DE8\u96C6\u65E5\u6642"
13003
- },
13004
- visibility: {
13005
- label: "\u516C\u958B\u7BC4\u56F2",
13006
- options: {
13007
- public: "\u516C\u958B",
13008
- internal: "\u5185\u90E8",
13009
- private: "\u975E\u516C\u958B"
13010
- }
12716
+ label: "\u64CD\u4F5C\u8005",
12717
+ help: "\u901A\u77E5\u3092\u5F15\u304D\u8D77\u3053\u3057\u305F\u30E6\u30FC\u30B6\u30FC\uFF08\u30E1\u30F3\u30B7\u30E7\u30F3\u8005\u3001\u62C5\u5F53\u8005\uFF09"
13011
12718
  },
13012
12719
  created_at: {
13013
12720
  label: "\u4F5C\u6210\u65E5\u6642"
12721
+ }
12722
+ },
12723
+ _views: {
12724
+ recent: {
12725
+ label: "Recent"
13014
12726
  },
13015
- updated_at: {
13016
- label: "\u66F4\u65B0\u65E5\u6642"
12727
+ by_topic: {
12728
+ label: "By Topic"
13017
12729
  }
13018
12730
  }
13019
12731
  },
@@ -13078,74 +12790,20 @@ var jaJPObjects = {
13078
12790
  }
13079
12791
  }
13080
12792
  },
13081
- sys_notification: {
13082
- label: "\u901A\u77E5",
13083
- pluralLabel: "\u901A\u77E5",
13084
- description: "\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u901A\u77E5\u53D7\u4FE1\u30DC\u30C3\u30AF\u30B9\u30A8\u30F3\u30C8\u30EA",
12793
+ sys_email: {
12794
+ label: "\u30E1\u30FC\u30EB",
12795
+ pluralLabel: "\u30E1\u30FC\u30EB",
12796
+ description: "\u9001\u4FE1\u30E1\u30FC\u30EB\u914D\u4FE1\u30ED\u30B0",
13085
12797
  fields: {
13086
12798
  id: {
13087
- label: "\u901A\u77E5 ID"
12799
+ label: "\u30E1\u30FC\u30EB ID"
13088
12800
  },
13089
- topic: {
13090
- label: "Topic",
13091
- help: "Notification topic, e.g. task.assigned, collab.mention"
12801
+ message_id: {
12802
+ label: "Message-ID",
12803
+ help: "\u30C8\u30E9\u30F3\u30B9\u30DD\u30FC\u30C8\u304C\u5272\u308A\u5F53\u3066\u308B RFC-5322 Message-ID"
13092
12804
  },
13093
- payload: {
13094
- label: "Payload",
13095
- help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
13096
- },
13097
- severity: {
13098
- label: "Severity",
13099
- help: "Severity hint for rendering / filtering",
13100
- options: {
13101
- info: "info",
13102
- warning: "warning",
13103
- critical: "critical"
13104
- }
13105
- },
13106
- dedup_key: {
13107
- label: "Dedup Key",
13108
- help: "Idempotency key within a topic window; a repeat emit is a no-op"
13109
- },
13110
- source_object: {
13111
- label: "\u30BD\u30FC\u30B9\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8",
13112
- help: "\u95A2\u9023\u30EC\u30B3\u30FC\u30C9\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D\uFF08\u4F8B: lead\u3001opportunity\uFF09"
13113
- },
13114
- source_id: {
13115
- label: "\u30BD\u30FC\u30B9\u30EC\u30B3\u30FC\u30C9",
13116
- help: "source_object \u5185\u306E\u30EC\u30B3\u30FC\u30C9 ID"
13117
- },
13118
- actor_id: {
13119
- label: "\u64CD\u4F5C\u8005",
13120
- help: "\u901A\u77E5\u3092\u5F15\u304D\u8D77\u3053\u3057\u305F\u30E6\u30FC\u30B6\u30FC\uFF08\u30E1\u30F3\u30B7\u30E7\u30F3\u8005\u3001\u62C5\u5F53\u8005\uFF09"
13121
- },
13122
- created_at: {
13123
- label: "\u4F5C\u6210\u65E5\u6642"
13124
- }
13125
- },
13126
- _views: {
13127
- recent: {
13128
- label: "Recent"
13129
- },
13130
- by_topic: {
13131
- label: "By Topic"
13132
- }
13133
- }
13134
- },
13135
- sys_email: {
13136
- label: "\u30E1\u30FC\u30EB",
13137
- pluralLabel: "\u30E1\u30FC\u30EB",
13138
- description: "\u9001\u4FE1\u30E1\u30FC\u30EB\u914D\u4FE1\u30ED\u30B0",
13139
- fields: {
13140
- id: {
13141
- label: "\u30E1\u30FC\u30EB ID"
13142
- },
13143
- message_id: {
13144
- label: "Message-ID",
13145
- help: "\u30C8\u30E9\u30F3\u30B9\u30DD\u30FC\u30C8\u304C\u5272\u308A\u5F53\u3066\u308B RFC-5322 Message-ID"
13146
- },
13147
- from_address: {
13148
- label: "\u9001\u4FE1\u5143"
12805
+ from_address: {
12806
+ label: "\u9001\u4FE1\u5143"
13149
12807
  },
13150
12808
  to_addresses: {
13151
12809
  label: "\u5B9B\u5148",
@@ -14036,6 +13694,11 @@ var jaJPObjects = {
14036
13694
  label: "\u6697\u53F7\u6587",
14037
13695
  help: "\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u30A8\u30F3\u30B3\u30FC\u30C9\u3055\u308C\u305F\u6697\u53F7\u6587 blob\uFF08base64 / JSON\uFF09\u3002\u5B9F\u88C5\u5B9A\u7FA9\u306E\u305F\u3081\u3001\u5BFE\u5FDC\u3059\u308B ICryptoProvider \u306E\u307F\u304C\u8AAD\u307F\u53D6\u308A\u53EF\u80FD\u3002"
14038
13696
  }
13697
+ },
13698
+ _views: {
13699
+ all: {
13700
+ label: "All Secrets"
13701
+ }
14039
13702
  }
14040
13703
  },
14041
13704
  sys_setting_audit: {
@@ -14111,6 +13774,11 @@ var jaJPObjects = {
14111
13774
  label: "\u30EA\u30AF\u30A8\u30B9\u30C8 ID",
14112
13775
  help: "sys_audit_log / \u30C8\u30EC\u30FC\u30B7\u30F3\u30B0\u3068\u306E\u76F8\u95A2\u7528\u3002"
14113
13776
  }
13777
+ },
13778
+ _views: {
13779
+ recent: {
13780
+ label: "Recent"
13781
+ }
14114
13782
  }
14115
13783
  }
14116
13784
  };
@@ -14158,7 +13826,7 @@ var jaJP = {
14158
13826
  nav_teams: { label: "\u30C1\u30FC\u30E0" },
14159
13827
  nav_organizations: { label: "\u7D44\u7E54" },
14160
13828
  nav_invitations: { label: "\u62DB\u5F85" },
14161
- nav_roles: { label: "\u30ED\u30FC\u30EB" },
13829
+ nav_positions: { label: "\u30DD\u30B8\u30B7\u30E7\u30F3" },
14162
13830
  nav_permission_sets: { label: "\u6A29\u9650\u30BB\u30C3\u30C8" },
14163
13831
  nav_sharing_rules: { label: "\u5171\u6709\u30EB\u30FC\u30EB" },
14164
13832
  nav_record_shares: { label: "\u30EC\u30B3\u30FC\u30C9\u5171\u6709" },
@@ -14280,14 +13948,64 @@ var esESObjects = {
14280
13948
  label: "El bloqueo caduca el",
14281
13949
  help: "Si se establece, el bloqueo se elimina autom\xE1ticamente en ese momento."
14282
13950
  },
13951
+ failed_login_count: {
13952
+ label: "Failed Login Count",
13953
+ help: "Consecutive failed sign-in attempts; reset to 0 on success. Maintained by the auth manager."
13954
+ },
13955
+ locked_until: {
13956
+ label: "Locked Until",
13957
+ help: "When set and in the future, sign-in is rejected (brute-force lockout). Auto-clears past this time; an admin can clear it early via Unlock."
13958
+ },
13959
+ password_changed_at: {
13960
+ label: "Password Changed At",
13961
+ help: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
13962
+ },
13963
+ phone_number: {
13964
+ label: "Phone Number",
13965
+ help: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
13966
+ },
13967
+ phone_number_verified: {
13968
+ label: "Phone Verified",
13969
+ help: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
13970
+ },
13971
+ must_change_password: {
13972
+ label: "Must Change Password",
13973
+ help: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
13974
+ },
13975
+ mfa_required_at: {
13976
+ label: "MFA Required At",
13977
+ help: "When enforced MFA first applied to this user (grace-period clock). Backs mfa_required; system-managed."
13978
+ },
13979
+ last_login_at: {
13980
+ label: "Last Login At",
13981
+ help: "Timestamp of the last successful sign-in. Stamped by the auth manager; system-managed."
13982
+ },
13983
+ last_login_ip: {
13984
+ label: "Last Login IP",
13985
+ help: "Client IP of the last successful sign-in (from the trusted proxy forwarded header). System-managed."
13986
+ },
13987
+ ai_access: {
13988
+ label: "AI Access",
13989
+ help: "Whether this user holds an AI seat \u2014 grants access to the in-UI AI agents (build / ask). The framework synthesizes the `ai_seat` capability from this flag (plugin-hono-server resolveCtx). Assignment is capped by the licensed / purchased seat count (enforced by @objectstack/security-enterprise AiSeatPlugin). Owned by objectql (better-auth is oblivious to this column)."
13990
+ },
14283
13991
  image: {
14284
13992
  label: "Imagen de perfil"
14285
13993
  },
14286
13994
  manager_id: {
14287
- label: "Gerente"
13995
+ label: "Gerente",
13996
+ help: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
14288
13997
  },
14289
13998
  primary_business_unit_id: {
14290
- label: "Unidad de negocio principal"
13999
+ label: "Unidad de negocio principal",
14000
+ help: "The user's primary business unit \u2014 a denormalised projection of sys_business_unit_member.is_primary, maintained by plugin-sharing (ADR-0057 addendum D12). Lets a user-lookup filter candidates by business unit without traversing the membership junction. Do not edit directly; set it via business-unit membership."
14001
+ },
14002
+ source: {
14003
+ label: "Identity Source",
14004
+ help: "How this identity was created \u2014 idp_provisioned (federated SSO JIT) or env_native (local signup / app end-user). System-managed; do not edit.",
14005
+ options: {
14006
+ idp_provisioned: "IdP-Provisioned",
14007
+ env_native: "Env-Native"
14008
+ }
14291
14009
  },
14292
14010
  id: {
14293
14011
  label: "ID de usuario"
@@ -14330,6 +14048,14 @@ var esESObjects = {
14330
14048
  label: "Desbloquear usuario",
14331
14049
  successMessage: "Usuario desbloqueado"
14332
14050
  },
14051
+ unlock_user: {
14052
+ label: "Unlock Account",
14053
+ successMessage: "Account unlocked"
14054
+ },
14055
+ create_user: {
14056
+ label: "Create User",
14057
+ successMessage: "User created"
14058
+ },
14333
14059
  set_user_password: {
14334
14060
  label: "Establecer contrase\xF1a",
14335
14061
  successMessage: "Contrase\xF1a actualizada"
@@ -14391,6 +14117,18 @@ var esESObjects = {
14391
14117
  expires_at: {
14392
14118
  label: "Caduca el"
14393
14119
  },
14120
+ last_activity_at: {
14121
+ label: "Last Activity At",
14122
+ help: "Timestamp of the last request on this session; drives idle-timeout. System-managed."
14123
+ },
14124
+ revoked_at: {
14125
+ label: "Revoked At",
14126
+ help: "When set, this session was revoked (idle / absolute-max / concurrent-cap / admin). System-managed."
14127
+ },
14128
+ revoke_reason: {
14129
+ label: "Revoke Reason",
14130
+ help: "Why the session was revoked (idle_timeout, absolute_max, concurrent_cap, \u2026)."
14131
+ },
14394
14132
  active_organization_id: {
14395
14133
  label: "Organizaci\xF3n activa"
14396
14134
  },
@@ -14489,6 +14227,10 @@ var esESObjects = {
14489
14227
  password: {
14490
14228
  label: "Hash de la contrase\xF1a",
14491
14229
  help: "Hash de la contrase\xF1a para el proveedor de correo electr\xF3nico/contrase\xF1a."
14230
+ },
14231
+ previous_password_hashes: {
14232
+ label: "Previous Password Hashes",
14233
+ help: "JSON array of prior password hashes (bounded by password_history_count); reuse-prevention only. System-managed."
14492
14234
  }
14493
14235
  },
14494
14236
  _views: {
@@ -14559,6 +14301,10 @@ var esESObjects = {
14559
14301
  label: "Metadatos",
14560
14302
  help: "Metadatos de la organizaci\xF3n serializados en JSON."
14561
14303
  },
14304
+ require_mfa: {
14305
+ label: "Require Multi-Factor Auth",
14306
+ help: "When true, every member of this organization must enroll an authenticator app to access data."
14307
+ },
14562
14308
  id: {
14563
14309
  label: "ID de organizaci\xF3n"
14564
14310
  },
@@ -14883,6 +14629,9 @@ var esESObjects = {
14883
14629
  }
14884
14630
  },
14885
14631
  _views: {
14632
+ org_chart: {
14633
+ label: "Org Chart"
14634
+ },
14886
14635
  active: {
14887
14636
  label: "Activo"
14888
14637
  },
@@ -15464,263 +15213,57 @@ var esESObjects = {
15464
15213
  }
15465
15214
  }
15466
15215
  },
15467
- sys_audit_log: {
15468
- label: "Registro de auditor\xEDa",
15469
- pluralLabel: "Registros de auditor\xEDa",
15470
- description: "Registro de auditor\xEDa inmutable para eventos de la plataforma",
15471
- fields: {
15472
- created_at: {
15473
- label: "Marca temporal"
15474
- },
15475
- action: {
15476
- label: "Acci\xF3n",
15477
- help: "Tipo de acci\xF3n (snake_case).",
15478
- options: {
15479
- create: "Crear",
15480
- update: "Actualizar",
15481
- delete: "Eliminar",
15482
- restore: "Restaurar",
15483
- login: "Inicio de sesi\xF3n",
15484
- logout: "Cierre de sesi\xF3n",
15485
- permission_change: "Cambio de permisos",
15486
- config_change: "Cambio de configuraci\xF3n",
15487
- export: "Exportar",
15488
- import: "Importar"
15489
- }
15490
- },
15491
- user_id: {
15492
- label: "Actor",
15493
- help: "Usuario que realiz\xF3 la acci\xF3n (null para acciones del sistema)."
15494
- },
15495
- object_name: {
15496
- label: "Objeto",
15497
- help: "Objeto de destino (p. ej. sys_user, project_task)."
15498
- },
15499
- record_id: {
15500
- label: "ID de registro",
15501
- help: "ID del registro afectado."
15502
- },
15503
- old_value: {
15504
- label: "Valor anterior",
15505
- help: "Estado anterior serializado en JSON."
15506
- },
15507
- new_value: {
15508
- label: "Valor nuevo",
15509
- help: "Estado nuevo serializado en JSON."
15510
- },
15511
- ip_address: {
15512
- label: "Direcci\xF3n IP"
15513
- },
15514
- user_agent: {
15515
- label: "Agente de usuario"
15516
- },
15517
- tenant_id: {
15518
- label: "Inquilino",
15519
- help: "Contexto del tenant para el aislamiento multi-tenant."
15520
- },
15521
- metadata: {
15522
- label: "Metadatos",
15523
- help: "Contexto adicional serializado en JSON."
15524
- },
15525
- id: {
15526
- label: "ID de registro de auditor\xEDa"
15527
- }
15528
- },
15529
- _views: {
15530
- recent: {
15531
- label: "Recientes"
15532
- },
15533
- writes_only: {
15534
- label: "Escrituras"
15535
- },
15536
- auth_events: {
15537
- label: "Autenticaci\xF3n"
15538
- },
15539
- config_changes: {
15540
- label: "Configuraci\xF3n"
15541
- },
15542
- all_events: {
15543
- label: "Todos"
15544
- }
15545
- }
15546
- },
15547
- sys_presence: {
15548
- label: "Presencia",
15549
- pluralLabel: "Presencias",
15550
- description: "Seguimiento en tiempo real de presencia y actividad de usuarios",
15216
+ sys_notification: {
15217
+ label: "Notificaci\xF3n",
15218
+ pluralLabel: "Notificaciones",
15219
+ description: "Entradas del buz\xF3n de notificaciones por usuario",
15551
15220
  fields: {
15552
15221
  id: {
15553
- label: "ID de presencia"
15554
- },
15555
- created_at: {
15556
- label: "Creado el"
15557
- },
15558
- updated_at: {
15559
- label: "Actualizado el"
15560
- },
15561
- user_id: {
15562
- label: "Usuario"
15563
- },
15564
- session_id: {
15565
- label: "Sesi\xF3n"
15566
- },
15567
- status: {
15568
- label: "Estado",
15569
- options: {
15570
- online: "En l\xEDnea",
15571
- away: "Ausente",
15572
- busy: "Ocupado",
15573
- offline: "Desconectado"
15574
- }
15222
+ label: "ID de notificaci\xF3n"
15575
15223
  },
15576
- last_seen: {
15577
- label: "Visto por \xFAltima vez"
15224
+ topic: {
15225
+ label: "Topic",
15226
+ help: "Notification topic, e.g. task.assigned, collab.mention"
15578
15227
  },
15579
- current_location: {
15580
- label: "Ubicaci\xF3n actual"
15228
+ payload: {
15229
+ label: "Payload",
15230
+ help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
15581
15231
  },
15582
- device: {
15583
- label: "Dispositivo",
15232
+ severity: {
15233
+ label: "Severity",
15234
+ help: "Severity hint for rendering / filtering",
15584
15235
  options: {
15585
- desktop: "Escritorio",
15586
- mobile: "M\xF3vil",
15587
- tablet: "Tableta",
15588
- other: "Otro"
15236
+ info: "info",
15237
+ warning: "warning",
15238
+ critical: "critical"
15589
15239
  }
15590
15240
  },
15591
- custom_status: {
15592
- label: "Estado personalizado"
15593
- },
15594
- metadata: {
15595
- label: "Metadatos",
15596
- help: "Metadatos JSON arbitrarios asociados al estado de presencia (coincide con PresenceStateSchema.metadata)."
15597
- }
15598
- }
15599
- },
15600
- sys_activity: {
15601
- label: "Actividad",
15602
- pluralLabel: "Actividades",
15603
- description: "Entradas recientes del flujo de actividad (ligeras y desnormalizadas).",
15604
- fields: {
15605
- id: {
15606
- label: "ID de actividad"
15607
- },
15608
- timestamp: {
15609
- label: "Marca temporal"
15241
+ dedup_key: {
15242
+ label: "Dedup Key",
15243
+ help: "Idempotency key within a topic window; a repeat emit is a no-op"
15610
15244
  },
15611
- type: {
15612
- label: "Tipo",
15613
- options: {
15614
- created: "Creado",
15615
- updated: "Actualizado",
15616
- deleted: "Eliminado",
15617
- commented: "Comentado",
15618
- mentioned: "Mencionado",
15619
- shared: "Compartido",
15620
- assigned: "Asignado",
15621
- completed: "Completado",
15622
- login: "Inicio de sesi\xF3n",
15623
- logout: "Cierre de sesi\xF3n",
15624
- system: "Sistema"
15625
- }
15245
+ source_object: {
15246
+ label: "Objeto de origen",
15247
+ help: "Nombre del objeto del registro relacionado (p. ej. lead, opportunity)."
15626
15248
  },
15627
- summary: {
15628
- label: "Resumen",
15629
- help: "Resumen legible de una l\xEDnea."
15249
+ source_id: {
15250
+ label: "Registro de origen",
15251
+ help: "ID del registro dentro de source_object."
15630
15252
  },
15631
15253
  actor_id: {
15632
- label: "Actor"
15633
- },
15634
- actor_name: {
15635
- label: "Nombre del actor"
15636
- },
15637
- actor_avatar_url: {
15638
- label: "Avatar del actor"
15639
- },
15640
- object_name: {
15641
- label: "Objeto",
15642
- help: "Nombre corto del objeto de destino (p. ej. account, sys_user)."
15643
- },
15644
- record_id: {
15645
- label: "ID de registro"
15646
- },
15647
- record_label: {
15648
- label: "Nombre visible del registro",
15649
- help: "Nombre visible del registro de destino en el momento de escritura."
15650
- },
15651
- url: {
15652
- label: "URL",
15653
- help: "Enlace profundo opcional al destino de la actividad."
15654
- },
15655
- environment_id: {
15656
- label: "Proyecto",
15657
- help: "Contexto del proyecto (implementaciones multiproyecto)."
15658
- },
15659
- metadata: {
15660
- label: "Metadatos",
15661
- help: "Contexto adicional serializado en JSON."
15662
- }
15663
- }
15664
- },
15665
- sys_comment: {
15666
- label: "Comentario",
15667
- pluralLabel: "Comentarios",
15668
- description: "Comentarios en hilo adjuntos a registros mediante thread_id.",
15669
- fields: {
15670
- id: {
15671
- label: "ID de comentario"
15672
- },
15673
- thread_id: {
15674
- label: "Hilo",
15675
- help: "Identificador del hilo; por convenci\xF3n `{object}:{record_id}` (p. ej. `sys_user:abc123`)."
15676
- },
15677
- parent_id: {
15678
- label: "Comentario principal",
15679
- help: "Comentario principal opcional para respuestas anidadas."
15680
- },
15681
- reply_count: {
15682
- label: "N\xFAmero de respuestas"
15683
- },
15684
- author_id: {
15685
- label: "Autor"
15686
- },
15687
- author_name: {
15688
- label: "Nombre del autor"
15689
- },
15690
- author_avatar_url: {
15691
- label: "Avatar del autor"
15692
- },
15693
- body: {
15694
- label: "Contenido",
15695
- help: "Texto del comentario (compatible con Markdown)."
15696
- },
15697
- mentions: {
15698
- label: "Menciones",
15699
- help: "Matriz JSON de objetos @mention."
15700
- },
15701
- reactions: {
15702
- label: "Reacciones",
15703
- help: "Matriz JSON de objetos de reacci\xF3n emoji."
15704
- },
15705
- is_edited: {
15706
- label: "Editado"
15707
- },
15708
- edited_at: {
15709
- label: "Editado el"
15710
- },
15711
- visibility: {
15712
- label: "Visibilidad",
15713
- options: {
15714
- public: "P\xFAblico",
15715
- internal: "Interno",
15716
- private: "Privado"
15717
- }
15254
+ label: "Actor",
15255
+ help: "Usuario que provoc\xF3 la notificaci\xF3n (quien menciona, quien asigna)."
15718
15256
  },
15719
15257
  created_at: {
15720
15258
  label: "Creado el"
15259
+ }
15260
+ },
15261
+ _views: {
15262
+ recent: {
15263
+ label: "Recent"
15721
15264
  },
15722
- updated_at: {
15723
- label: "Actualizado el"
15265
+ by_topic: {
15266
+ label: "By Topic"
15724
15267
  }
15725
15268
  }
15726
15269
  },
@@ -15785,74 +15328,20 @@ var esESObjects = {
15785
15328
  }
15786
15329
  }
15787
15330
  },
15788
- sys_notification: {
15789
- label: "Notificaci\xF3n",
15790
- pluralLabel: "Notificaciones",
15791
- description: "Entradas del buz\xF3n de notificaciones por usuario",
15331
+ sys_email: {
15332
+ label: "Correo",
15333
+ pluralLabel: "Correos",
15334
+ description: "Registro de env\xEDos de correo salientes",
15792
15335
  fields: {
15793
15336
  id: {
15794
- label: "ID de notificaci\xF3n"
15337
+ label: "ID de correo"
15795
15338
  },
15796
- topic: {
15797
- label: "Topic",
15798
- help: "Notification topic, e.g. task.assigned, collab.mention"
15339
+ message_id: {
15340
+ label: "Message-ID",
15341
+ help: "Message-ID RFC-5322 asignado por el transporte."
15799
15342
  },
15800
- payload: {
15801
- label: "Payload",
15802
- help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
15803
- },
15804
- severity: {
15805
- label: "Severity",
15806
- help: "Severity hint for rendering / filtering",
15807
- options: {
15808
- info: "info",
15809
- warning: "warning",
15810
- critical: "critical"
15811
- }
15812
- },
15813
- dedup_key: {
15814
- label: "Dedup Key",
15815
- help: "Idempotency key within a topic window; a repeat emit is a no-op"
15816
- },
15817
- source_object: {
15818
- label: "Objeto de origen",
15819
- help: "Nombre del objeto del registro relacionado (p. ej. lead, opportunity)."
15820
- },
15821
- source_id: {
15822
- label: "Registro de origen",
15823
- help: "ID del registro dentro de source_object."
15824
- },
15825
- actor_id: {
15826
- label: "Actor",
15827
- help: "Usuario que provoc\xF3 la notificaci\xF3n (quien menciona, quien asigna)."
15828
- },
15829
- created_at: {
15830
- label: "Creado el"
15831
- }
15832
- },
15833
- _views: {
15834
- recent: {
15835
- label: "Recent"
15836
- },
15837
- by_topic: {
15838
- label: "By Topic"
15839
- }
15840
- }
15841
- },
15842
- sys_email: {
15843
- label: "Correo",
15844
- pluralLabel: "Correos",
15845
- description: "Registro de env\xEDos de correo salientes",
15846
- fields: {
15847
- id: {
15848
- label: "ID de correo"
15849
- },
15850
- message_id: {
15851
- label: "Message-ID",
15852
- help: "Message-ID RFC-5322 asignado por el transporte."
15853
- },
15854
- from_address: {
15855
- label: "De"
15343
+ from_address: {
15344
+ label: "De"
15856
15345
  },
15857
15346
  to_addresses: {
15858
15347
  label: "Para",
@@ -16743,6 +16232,11 @@ var esESObjects = {
16743
16232
  label: "Texto cifrado",
16744
16233
  help: "Blob de texto cifrado codificado por el proveedor (base64 / JSON). La implementaci\xF3n lo define; solo el ICryptoProvider correspondiente puede leerlo."
16745
16234
  }
16235
+ },
16236
+ _views: {
16237
+ all: {
16238
+ label: "All Secrets"
16239
+ }
16746
16240
  }
16747
16241
  },
16748
16242
  sys_setting_audit: {
@@ -16818,6 +16312,11 @@ var esESObjects = {
16818
16312
  label: "ID de solicitud",
16819
16313
  help: "Se correlaciona con sys_audit_log / tracing."
16820
16314
  }
16315
+ },
16316
+ _views: {
16317
+ recent: {
16318
+ label: "Recent"
16319
+ }
16821
16320
  }
16822
16321
  }
16823
16322
  };
@@ -16865,7 +16364,7 @@ var esES = {
16865
16364
  nav_teams: { label: "Equipos" },
16866
16365
  nav_organizations: { label: "Organizaciones" },
16867
16366
  nav_invitations: { label: "Invitaciones" },
16868
- nav_roles: { label: "Roles" },
16367
+ nav_positions: { label: "Posiciones" },
16869
16368
  nav_permission_sets: { label: "Conjuntos de Permisos" },
16870
16369
  nav_sharing_rules: { label: "Reglas de Compartici\xF3n" },
16871
16370
  nav_record_shares: { label: "Registros Compartidos" },
@@ -17119,6 +16618,38 @@ var SysUserDetailPage = {
17119
16618
  type: "line",
17120
16619
  position: "top",
17121
16620
  items: [
16621
+ {
16622
+ label: "Positions",
16623
+ icon: "shield-check",
16624
+ children: [
16625
+ {
16626
+ // [ADR-0090 D3] Position assignments (岗位分派) — pure SDUI:
16627
+ // the Add picker creates sys_user_position rows storing the
16628
+ // position's MACHINE NAME (valueField: 'name'), and every
16629
+ // server-side rule (the D12 delegated-admin gate, audience-
16630
+ // anchor rejection) surfaces its error in the dialog.
16631
+ type: "record:related_list",
16632
+ properties: {
16633
+ objectName: "sys_user_position",
16634
+ relationshipField: "user_id",
16635
+ columns: ["position", "business_unit_id", "granted_by", "created_at"],
16636
+ sort: [{ field: "created_at", order: "desc" }],
16637
+ limit: 25,
16638
+ showViewAll: true,
16639
+ title: "Positions",
16640
+ add: {
16641
+ picker: {
16642
+ object: "sys_position",
16643
+ valueField: "name",
16644
+ labelField: "label"
16645
+ },
16646
+ linkField: "position",
16647
+ label: "Assign position"
16648
+ }
16649
+ }
16650
+ }
16651
+ ]
16652
+ },
17122
16653
  {
17123
16654
  label: "Sessions",
17124
16655
  icon: "monitor",
@@ -17325,6 +16856,84 @@ var SysUserDetailPage = {
17325
16856
  }
17326
16857
  };
17327
16858
 
16859
+ // src/pages/sys-position.page.ts
16860
+ var SysPositionDetailPage = {
16861
+ name: "sys_position_detail",
16862
+ label: "Position",
16863
+ type: "record",
16864
+ object: "sys_position",
16865
+ template: "default",
16866
+ kind: "slotted",
16867
+ isDefault: true,
16868
+ regions: [],
16869
+ slots: {
16870
+ tabs: {
16871
+ type: "page:tabs",
16872
+ properties: {
16873
+ type: "line",
16874
+ position: "top",
16875
+ items: [
16876
+ {
16877
+ label: "Holders",
16878
+ icon: "users",
16879
+ children: [
16880
+ {
16881
+ type: "record:related_list",
16882
+ properties: {
16883
+ objectName: "sys_user_position",
16884
+ relationshipField: "position",
16885
+ relationshipValueField: "name",
16886
+ columns: ["user_id", "business_unit_id", "granted_by", "created_at"],
16887
+ sort: [{ field: "created_at", order: "desc" }],
16888
+ limit: 25,
16889
+ showViewAll: true,
16890
+ title: "Holders",
16891
+ add: {
16892
+ picker: {
16893
+ object: "sys_user",
16894
+ labelField: "name"
16895
+ },
16896
+ linkField: "user_id",
16897
+ label: "Assign user"
16898
+ }
16899
+ }
16900
+ }
16901
+ ]
16902
+ },
16903
+ {
16904
+ label: "Permission Sets",
16905
+ icon: "lock",
16906
+ children: [
16907
+ {
16908
+ type: "record:related_list",
16909
+ properties: {
16910
+ objectName: "sys_position_permission_set",
16911
+ relationshipField: "position_id",
16912
+ columns: ["permission_set_id", "created_at"],
16913
+ sort: [{ field: "created_at", order: "desc" }],
16914
+ limit: 25,
16915
+ showViewAll: true,
16916
+ title: "Permission Sets",
16917
+ add: {
16918
+ picker: {
16919
+ object: "sys_permission_set",
16920
+ labelField: "label"
16921
+ },
16922
+ linkField: "permission_set_id",
16923
+ label: "Bind permission set"
16924
+ }
16925
+ }
16926
+ }
16927
+ ]
16928
+ }
16929
+ ]
16930
+ }
16931
+ },
16932
+ // No Chatter feed on an RBAC primitive.
16933
+ discussion: []
16934
+ }
16935
+ };
16936
+
17328
16937
  // src/apps/translations/en.metadata-forms.generated.ts
17329
16938
  var enMetadataForms = {
17330
16939
  object: {
@@ -17590,6 +17199,70 @@ var enMetadataForms = {
17590
17199
  datasource: {
17591
17200
  label: "Datasource",
17592
17201
  helpText: 'Target datasource ID (default: "default")'
17202
+ },
17203
+ lifecycle: {
17204
+ label: "Lifecycle",
17205
+ helpText: "Data lifecycle contract (ADR-0057): how long rows live and how space is reclaimed. Leave empty for permanent record semantics. Non-record classes require at least one bounding policy (retention, TTL, or rotation)."
17206
+ },
17207
+ "lifecycle.class": {
17208
+ label: "Class",
17209
+ helpText: "Persistence contract for the rows of this object"
17210
+ },
17211
+ "lifecycle.retention": {
17212
+ label: "Retention",
17213
+ helpText: "Age-based retention window"
17214
+ },
17215
+ "lifecycle.retention.maxAge": {
17216
+ label: "Max Age",
17217
+ helpText: 'Rows older than this (by created_at) are reaped. Duration literal: h/d/w/y, e.g. "30d"'
17218
+ },
17219
+ "lifecycle.ttl": {
17220
+ label: "Ttl",
17221
+ helpText: "Per-row TTL expiry"
17222
+ },
17223
+ "lifecycle.ttl.field": {
17224
+ label: "Field",
17225
+ helpText: "Timestamp field the TTL is measured from (e.g. expires_at)"
17226
+ },
17227
+ "lifecycle.ttl.expireAfter": {
17228
+ label: "Expire After",
17229
+ helpText: 'Rows expire this long after the field, e.g. "1d"'
17230
+ },
17231
+ "lifecycle.storage": {
17232
+ label: "Storage",
17233
+ helpText: "Physical rotation for high-frequency telemetry (SQLite: O(1) shard DROP)"
17234
+ },
17235
+ "lifecycle.storage.strategy": {
17236
+ label: "Strategy",
17237
+ helpText: "Storage strategy"
17238
+ },
17239
+ "lifecycle.storage.shards": {
17240
+ label: "Shards",
17241
+ helpText: "Shards retained; total window = shards \xD7 unit"
17242
+ },
17243
+ "lifecycle.storage.unit": {
17244
+ label: "Unit",
17245
+ helpText: "Time width of one shard"
17246
+ },
17247
+ "lifecycle.archive": {
17248
+ label: "Archive",
17249
+ helpText: "Cold-store hand-off (audit class). Rows are never hot-deleted before the archive copy succeeded."
17250
+ },
17251
+ "lifecycle.archive.after": {
17252
+ label: "After",
17253
+ helpText: "Archive rows older than this \u2014 must equal retention.maxAge"
17254
+ },
17255
+ "lifecycle.archive.to": {
17256
+ label: "To",
17257
+ helpText: "Target datasource name for cold storage"
17258
+ },
17259
+ "lifecycle.archive.keep": {
17260
+ label: "Keep",
17261
+ helpText: 'How long the archive keeps rows (empty = forever), e.g. "7y"'
17262
+ },
17263
+ "lifecycle.reclaim": {
17264
+ label: "Reclaim",
17265
+ helpText: "Reclaim driver space after sweeps (default on for non-record classes)"
17593
17266
  }
17594
17267
  }
17595
17268
  },
@@ -17698,10 +17371,6 @@ var enMetadataForms = {
17698
17371
  label: "Summary Operations",
17699
17372
  helpText: "Roll-up summary configuration (for parent-child relationships)"
17700
17373
  },
17701
- cached: {
17702
- label: "Cached",
17703
- helpText: "Caching configuration for computed fields"
17704
- },
17705
17374
  columnName: {
17706
17375
  label: "Column Name",
17707
17376
  helpText: "Physical column name in database (defaults to field name)"
@@ -17729,28 +17398,9 @@ var enMetadataForms = {
17729
17398
  sortable: {
17730
17399
  label: "Sortable",
17731
17400
  helpText: "Allow sorting lists by this field"
17732
- },
17733
- auditTrail: {
17734
- label: "Audit Trail",
17735
- helpText: "Track detailed changes with user and timestamp"
17736
- },
17737
- trackFeedHistory: {
17738
- label: "Track Feed History",
17739
- helpText: "Show changes in activity feed"
17740
- },
17741
- encryptionConfig: {
17742
- label: "Encryption Config",
17743
- helpText: "Field-level encryption (GDPR/HIPAA/PCI-DSS)"
17744
- },
17745
- maskingRule: {
17746
- label: "Masking Rule",
17747
- helpText: "Data masking rules for PII protection"
17748
17401
  }
17749
17402
  }
17750
17403
  },
17751
- trigger: {
17752
- label: "Trigger"
17753
- },
17754
17404
  validation: {
17755
17405
  label: "Validation Rule"
17756
17406
  },
@@ -17827,12 +17477,36 @@ var enMetadataForms = {
17827
17477
  onError: {
17828
17478
  label: "On Error"
17829
17479
  },
17480
+ timeout: {
17481
+ label: "Timeout",
17482
+ helpText: "Abort the hook after N milliseconds"
17483
+ },
17830
17484
  condition: {
17831
17485
  label: "Condition",
17832
17486
  helpText: "Optional formula \u2014 skip the hook when this evaluates to false"
17487
+ },
17488
+ retryPolicy: {
17489
+ label: "Retry Policy",
17490
+ helpText: "Retry on failure \u2014 most useful for async hooks"
17491
+ },
17492
+ "retryPolicy.maxRetries": {
17493
+ label: "Max Retries",
17494
+ helpText: "Maximum retry attempts"
17495
+ },
17496
+ "retryPolicy.backoffMs": {
17497
+ label: "Backoff Ms",
17498
+ helpText: "Delay between retries (ms)"
17833
17499
  }
17834
17500
  }
17835
17501
  },
17502
+ seed: {
17503
+ label: "Seed Data",
17504
+ description: "Fixture / initialization data applied on publish"
17505
+ },
17506
+ mapping: {
17507
+ label: "Import Mapping",
17508
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
17509
+ },
17836
17510
  view: {
17837
17511
  label: "View",
17838
17512
  sections: {
@@ -18004,6 +17678,10 @@ var enMetadataForms = {
18004
17678
  label: "Layout",
18005
17679
  description: "Page regions and components placed within them."
18006
17680
  },
17681
+ interface: {
17682
+ label: "Interface (list pages)",
17683
+ description: "Interface mode (Airtable parity): the page defines its own data surface directly \u2014 columns, filters, visualizations and toolbar \u2014 no inheriting from a separate view."
17684
+ },
18007
17685
  advanced: {
18008
17686
  label: "Advanced",
18009
17687
  description: "Activation, audience, and accessibility."
@@ -18046,6 +17724,58 @@ var enMetadataForms = {
18046
17724
  label: "Regions",
18047
17725
  helpText: "Layout regions (header, main, sidebar, footer) with components"
18048
17726
  },
17727
+ interfaceConfig: {
17728
+ label: "Interface Config",
17729
+ helpText: "The page IS the view: source picks the object, columns/filterBy are defined directly here; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar."
17730
+ },
17731
+ "interfaceConfig.source": {
17732
+ label: "Source",
17733
+ helpText: "Object this page reads from"
17734
+ },
17735
+ "interfaceConfig.columns": {
17736
+ label: "Columns",
17737
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
17738
+ },
17739
+ "interfaceConfig.filterBy": {
17740
+ label: "Filter By",
17741
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
17742
+ },
17743
+ "interfaceConfig.levels": {
17744
+ label: "Levels",
17745
+ helpText: "Hierarchy levels to display (tree-like sources)"
17746
+ },
17747
+ "interfaceConfig.appearance": {
17748
+ label: "Appearance",
17749
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
17750
+ },
17751
+ "interfaceConfig.userFilters": {
17752
+ label: "User Filters",
17753
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
17754
+ },
17755
+ "interfaceConfig.userActions": {
17756
+ label: "User Actions",
17757
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
17758
+ },
17759
+ "interfaceConfig.addRecord": {
17760
+ label: "Add Record",
17761
+ helpText: "Add-record entry point"
17762
+ },
17763
+ "interfaceConfig.buttons": {
17764
+ label: "Buttons",
17765
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
17766
+ },
17767
+ "interfaceConfig.recordAction": {
17768
+ label: "Record Action",
17769
+ helpText: "How clicking a record opens its detail"
17770
+ },
17771
+ "interfaceConfig.showRecordCount": {
17772
+ label: "Show Record Count",
17773
+ helpText: "Show the record count bar"
17774
+ },
17775
+ "interfaceConfig.allowPrinting": {
17776
+ label: "Allow Printing",
17777
+ helpText: "Allow users to print this page"
17778
+ },
18049
17779
  isDefault: {
18050
17780
  label: "Is Default",
18051
17781
  helpText: "Set as default page for this page type"
@@ -18294,6 +18024,22 @@ var enMetadataForms = {
18294
18024
  label: "Body",
18295
18025
  helpText: "JavaScript code to execute"
18296
18026
  },
18027
+ "body.language": {
18028
+ label: "Language",
18029
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
18030
+ },
18031
+ "body.source": {
18032
+ label: "Source",
18033
+ helpText: "Function body source \u2014 no top-level imports"
18034
+ },
18035
+ "body.capabilities": {
18036
+ label: "Capabilities",
18037
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
18038
+ },
18039
+ "body.timeoutMs": {
18040
+ label: "Timeout Ms",
18041
+ helpText: "Per-invocation timeout (ms)"
18042
+ },
18297
18043
  params: {
18298
18044
  label: "Params",
18299
18045
  helpText: "User input parameters (show form before executing)"
@@ -18334,9 +18080,9 @@ var enMetadataForms = {
18334
18080
  label: "Bulk Enabled",
18335
18081
  helpText: "Allow applying to multiple selected records"
18336
18082
  },
18337
- aiExposed: {
18338
- label: "Ai Exposed",
18339
- helpText: "Allow AI agents to call this action"
18083
+ ai: {
18084
+ label: "Ai",
18085
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
18340
18086
  },
18341
18087
  recordIdParam: {
18342
18088
  label: "Record Id Param",
@@ -18359,13 +18105,9 @@ var enMetadataForms = {
18359
18105
  label: "Basics",
18360
18106
  description: "Identity and data source."
18361
18107
  },
18362
- columns: {
18363
- label: "Columns",
18364
- description: "Columns shown in the report output."
18365
- },
18366
- groupings: {
18367
- label: "Groupings",
18368
- description: "How rows (and columns, for matrix reports) are grouped."
18108
+ dataset_binding: {
18109
+ label: "Dataset binding",
18110
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
18369
18111
  },
18370
18112
  joined_blocks: {
18371
18113
  label: "Joined blocks",
@@ -18391,33 +18133,37 @@ var enMetadataForms = {
18391
18133
  description: {
18392
18134
  label: "Description"
18393
18135
  },
18394
- objectName: {
18395
- label: "Object Name",
18396
- helpText: "Data source object"
18397
- },
18398
18136
  type: {
18399
18137
  label: "Type",
18400
18138
  helpText: "Report type: tabular/summary/matrix/joined"
18401
18139
  },
18140
+ dataset: {
18141
+ label: "Dataset",
18142
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
18143
+ },
18144
+ values: {
18145
+ label: "Values",
18146
+ helpText: "Measure names (from the dataset) to display"
18147
+ },
18148
+ rows: {
18149
+ label: "Rows",
18150
+ helpText: "Dimension names (from the dataset) to group rows by"
18151
+ },
18402
18152
  columns: {
18403
18153
  label: "Columns",
18404
18154
  helpText: "Columns to display in the report"
18405
18155
  },
18406
- groupingsDown: {
18407
- label: "Groupings Down",
18408
- helpText: "Row grouping levels"
18409
- },
18410
- groupingsAcross: {
18411
- label: "Groupings Across",
18412
- helpText: "Column grouping levels (matrix only)"
18156
+ drilldown: {
18157
+ label: "Drilldown",
18158
+ helpText: "Click an aggregated row/cell to open the underlying records"
18413
18159
  },
18414
18160
  blocks: {
18415
18161
  label: "Blocks",
18416
18162
  helpText: "Join multiple objects (joined report only)"
18417
18163
  },
18418
- filter: {
18419
- label: "Filter",
18420
- helpText: "Report-level filters"
18164
+ runtimeFilter: {
18165
+ label: "Runtime Filter",
18166
+ helpText: "Render-time scope filter, ANDed at query time"
18421
18167
  },
18422
18168
  chart: {
18423
18169
  label: "Chart",
@@ -18433,6 +18179,62 @@ var enMetadataForms = {
18433
18179
  }
18434
18180
  }
18435
18181
  },
18182
+ dataset: {
18183
+ label: "Dataset",
18184
+ description: "Analytics semantic layer \u2014 dimensions & measures",
18185
+ sections: {
18186
+ basics: {
18187
+ label: "Basics",
18188
+ description: "Dataset identity."
18189
+ },
18190
+ source: {
18191
+ label: "Source",
18192
+ description: "The base object, the relationships to join, and the dataset\u2019s intrinsic scope. Joins are derived from the object graph \u2014 pick relationship (lookup / master_detail) names, never write an ON clause."
18193
+ },
18194
+ dimensions: {
18195
+ label: "Dimensions",
18196
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
18197
+ },
18198
+ measures: {
18199
+ label: "Measures",
18200
+ description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/\u2026 of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
18201
+ }
18202
+ },
18203
+ fields: {
18204
+ name: {
18205
+ label: "Name",
18206
+ helpText: "snake_case unique identifier"
18207
+ },
18208
+ label: {
18209
+ label: "Label",
18210
+ helpText: "Display name"
18211
+ },
18212
+ description: {
18213
+ label: "Description",
18214
+ helpText: "What this dataset measures"
18215
+ },
18216
+ object: {
18217
+ label: "Object",
18218
+ helpText: "Base object \u2014 the FROM"
18219
+ },
18220
+ include: {
18221
+ label: "Include",
18222
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
18223
+ },
18224
+ filter: {
18225
+ label: "Filter",
18226
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
18227
+ },
18228
+ dimensions: {
18229
+ label: "Dimensions",
18230
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
18231
+ },
18232
+ measures: {
18233
+ label: "Measures",
18234
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
18235
+ }
18236
+ }
18237
+ },
18436
18238
  flow: {
18437
18239
  label: "Flow",
18438
18240
  sections: {
@@ -18512,15 +18314,6 @@ var enMetadataForms = {
18512
18314
  translation: {
18513
18315
  label: "Translation"
18514
18316
  },
18515
- router: {
18516
- label: "Router"
18517
- },
18518
- function: {
18519
- label: "Function"
18520
- },
18521
- service: {
18522
- label: "Service"
18523
- },
18524
18317
  email_template: {
18525
18318
  label: "Email Template",
18526
18319
  sections: {
@@ -18601,6 +18394,14 @@ var enMetadataForms = {
18601
18394
  }
18602
18395
  }
18603
18396
  },
18397
+ doc: {
18398
+ label: "Documentation",
18399
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
18400
+ },
18401
+ book: {
18402
+ label: "Documentation Book",
18403
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
18404
+ },
18604
18405
  permission: {
18605
18406
  label: "Permission Set",
18606
18407
  sections: {
@@ -18656,80 +18457,21 @@ var enMetadataForms = {
18656
18457
  }
18657
18458
  }
18658
18459
  },
18659
- profile: {
18660
- label: "Profile",
18460
+ position: {
18461
+ label: "Position",
18661
18462
  sections: {
18662
- identity: {
18663
- label: "Identity",
18664
- description: "Permission Sets stack on top of a Profile to grant additional access. Profiles are the base set assigned 1:1 to each user."
18665
- },
18666
- system_permissions: {
18667
- label: "System Permissions",
18668
- description: "High-level capabilities not tied to a specific object \u2014 e.g. manage_users, view_audit_logs."
18669
- },
18670
- object_and_field_permissions: {
18671
- label: "Object & Field Permissions",
18672
- description: "Per-object CRUD + per-field FLS. Edit via the matrix editor or paste JSON here."
18673
- },
18674
- tab_and_row_level_security: {
18675
- label: "Tab & Row-Level Security",
18676
- description: "Tab visibility, RLS policies, and custom context variables for predicate evaluation."
18463
+ position: {
18464
+ label: "Position",
18465
+ description: "A position is a flat, assignable bundle of permission sets (e.g. sales_rep, sales_manager). Capability lives on permission sets; visibility depth lives on the business-unit tree."
18677
18466
  }
18678
18467
  },
18679
18468
  fields: {
18680
18469
  name: {
18681
18470
  label: "Name",
18682
- helpText: "Machine name (snake_case)"
18471
+ helpText: "snake_case"
18683
18472
  },
18684
18473
  label: {
18685
- label: "Label",
18686
- helpText: "Display label for admins"
18687
- },
18688
- systemPermissions: {
18689
- label: "System Permissions",
18690
- helpText: "List of system capability keys"
18691
- },
18692
- objects: {
18693
- label: "Objects",
18694
- helpText: '{ "account": { allowRead: true, allowEdit: true, ... } }'
18695
- },
18696
- fields: {
18697
- label: "Fields",
18698
- helpText: '{ "account.amount": { readable: true, editable: false } }'
18699
- },
18700
- tabPermissions: {
18701
- label: "Tab Permissions",
18702
- helpText: '{ "app_crm": "visible", "app_admin": "hidden" }'
18703
- },
18704
- rowLevelSecurity: {
18705
- label: "Row Level Security",
18706
- helpText: "Array of RLS policies (see rls.zod.ts)"
18707
- },
18708
- contextVariables: {
18709
- label: "Context Variables",
18710
- helpText: "Custom variables referenced in RLS predicates"
18711
- }
18712
- }
18713
- },
18714
- role: {
18715
- label: "Role",
18716
- sections: {
18717
- role: {
18718
- label: "Role",
18719
- description: "Roles compose a hierarchy used for record sharing (sales VP \u2192 sales mgr \u2192 sales rep). Permissions themselves live on Permission Sets and Profiles."
18720
- }
18721
- },
18722
- fields: {
18723
- name: {
18724
- label: "Name",
18725
- helpText: "snake_case"
18726
- },
18727
- label: {
18728
- label: "Label"
18729
- },
18730
- parent: {
18731
- label: "Parent",
18732
- helpText: "Parent role machine name (Reports To)"
18474
+ label: "Label"
18733
18475
  },
18734
18476
  description: {
18735
18477
  label: "Description"
@@ -19220,6 +18962,70 @@ var zhCNMetadataForms = {
19220
18962
  datasource: {
19221
18963
  label: "\u6570\u636E\u6E90",
19222
18964
  helpText: '\u76EE\u6807\u6570\u636E\u6E90 ID\uFF08\u9ED8\u8BA4\uFF1A"default"\uFF09'
18965
+ },
18966
+ lifecycle: {
18967
+ label: "\u6570\u636E\u751F\u547D\u5468\u671F",
18968
+ helpText: "\u6570\u636E\u751F\u547D\u5468\u671F\u5951\u7EA6\uFF08ADR-0057\uFF09\uFF1A\u6570\u636E\u4FDD\u7559\u591A\u4E45\u3001\u7A7A\u95F4\u5982\u4F55\u56DE\u6536\u3002\u7559\u7A7A\u5373\u6C38\u4E45\u4FDD\u7559\uFF08record \u8BED\u4E49\uFF09\u3002\u975E record \u7C7B\u5FC5\u987B\u58F0\u660E\u81F3\u5C11\u4E00\u4E2A\u754C\u5B9A\u7B56\u7565\uFF08\u4FDD\u7559\u671F\u3001TTL \u6216\u8F6E\u8F6C\uFF09\u3002"
18969
+ },
18970
+ "lifecycle.class": {
18971
+ label: "\u751F\u547D\u5468\u671F\u7C7B\u522B",
18972
+ helpText: "\u672C\u5BF9\u8C61\u6570\u636E\u7684\u6301\u4E45\u5316\u5951\u7EA6"
18973
+ },
18974
+ "lifecycle.retention": {
18975
+ label: "\u4FDD\u7559\u671F",
18976
+ helpText: "\u6309\u6570\u636E\u5E74\u9F84\u754C\u5B9A\u7684\u4FDD\u7559\u7A97\u53E3"
18977
+ },
18978
+ "lifecycle.retention.maxAge": {
18979
+ label: "\u6700\u957F\u4FDD\u7559",
18980
+ helpText: '\u65E9\u4E8E\u8BE5\u7A97\u53E3\uFF08\u6309 created_at\uFF09\u7684\u884C\u5C06\u88AB\u6E05\u7406\u3002\u65F6\u957F\u5B57\u9762\u91CF\uFF1Ah/d/w/y\uFF0C\u5982 "30d"'
18981
+ },
18982
+ "lifecycle.ttl": {
18983
+ label: "TTL \u8FC7\u671F",
18984
+ helpText: "\u6309\u884C\u7684 TTL \u81EA\u52A8\u8FC7\u671F"
18985
+ },
18986
+ "lifecycle.ttl.field": {
18987
+ label: "\u65F6\u95F4\u5B57\u6BB5",
18988
+ helpText: "TTL \u8BA1\u65F6\u8D77\u70B9\u7684\u65F6\u95F4\u6233\u5B57\u6BB5\uFF08\u5982 expires_at\uFF09"
18989
+ },
18990
+ "lifecycle.ttl.expireAfter": {
18991
+ label: "\u8FC7\u671F\u65F6\u957F",
18992
+ helpText: '\u884C\u5728\u8BE5\u5B57\u6BB5\u4E4B\u540E\u8FD9\u4E48\u4E45\u8FC7\u671F\uFF0C\u5982 "1d"'
18993
+ },
18994
+ "lifecycle.storage": {
18995
+ label: "\u5B58\u50A8\u7B56\u7565",
18996
+ helpText: "\u9AD8\u9891\u9065\u6D4B\u7684\u7269\u7406\u8F6E\u8F6C\uFF08SQLite\uFF1AO(1) \u5206\u7247 DROP\uFF09"
18997
+ },
18998
+ "lifecycle.storage.strategy": {
18999
+ label: "\u7B56\u7565",
19000
+ helpText: "\u5B58\u50A8\u7B56\u7565"
19001
+ },
19002
+ "lifecycle.storage.shards": {
19003
+ label: "\u5206\u7247\u6570",
19004
+ helpText: "\u4FDD\u7559\u7684\u5206\u7247\u6570\u91CF\uFF1B\u603B\u7A97\u53E3 = \u5206\u7247\u6570 \xD7 \u5355\u4F4D"
19005
+ },
19006
+ "lifecycle.storage.unit": {
19007
+ label: "\u5206\u7247\u5355\u4F4D",
19008
+ helpText: "\u5355\u4E2A\u5206\u7247\u7684\u65F6\u95F4\u5BBD\u5EA6"
19009
+ },
19010
+ "lifecycle.archive": {
19011
+ label: "\u5F52\u6863",
19012
+ helpText: "\u51B7\u5B58\u4EA4\u63A5\uFF08audit \u7C7B\uFF09\u3002\u5F52\u6863\u62F7\u8D1D\u6210\u529F\u524D\uFF0C\u884C\u7EDD\u4E0D\u4F1A\u88AB\u70ED\u5220\u9664\u3002"
19013
+ },
19014
+ "lifecycle.archive.after": {
19015
+ label: "\u5F52\u6863\u65F6\u70B9",
19016
+ helpText: "\u65E9\u4E8E\u8BE5\u7A97\u53E3\u7684\u884C\u8FDB\u5165\u5F52\u6863 \u2014 \u5FC5\u987B\u7B49\u4E8E retention.maxAge"
19017
+ },
19018
+ "lifecycle.archive.to": {
19019
+ label: "\u5F52\u6863\u6570\u636E\u6E90",
19020
+ helpText: "\u51B7\u5B58\u50A8\u7684\u76EE\u6807\u6570\u636E\u6E90\u540D\u79F0"
19021
+ },
19022
+ "lifecycle.archive.keep": {
19023
+ label: "\u5F52\u6863\u4FDD\u7559",
19024
+ helpText: '\u5F52\u6863\u4E2D\u4FDD\u7559\u591A\u4E45\uFF08\u7559\u7A7A = \u6C38\u4E45\uFF09\uFF0C\u5982 "7y"'
19025
+ },
19026
+ "lifecycle.reclaim": {
19027
+ label: "\u7A7A\u95F4\u56DE\u6536",
19028
+ helpText: "\u6E05\u7406\u540E\u56DE\u6536\u9A71\u52A8\u5C42\u7A7A\u95F4\uFF08\u975E record \u7C7B\u9ED8\u8BA4\u5F00\u542F\uFF09"
19223
19029
  }
19224
19030
  }
19225
19031
  },
@@ -19328,10 +19134,6 @@ var zhCNMetadataForms = {
19328
19134
  label: "\u6C47\u603B\u64CD\u4F5C",
19329
19135
  helpText: "\u7236\u5B50\u5173\u7CFB\u4E0B\u7684\u6C47\u603B\u805A\u5408\u914D\u7F6E"
19330
19136
  },
19331
- cached: {
19332
- label: "\u7F13\u5B58",
19333
- helpText: "\u8BA1\u7B97\u5B57\u6BB5\u7684\u7F13\u5B58\u914D\u7F6E"
19334
- },
19335
19137
  columnName: {
19336
19138
  label: "\u5217\u540D",
19337
19139
  helpText: "\u6570\u636E\u5E93\u4E2D\u7684\u7269\u7406\u5217\u540D\uFF08\u9ED8\u8BA4\u4E0E\u5B57\u6BB5\u540D\u76F8\u540C\uFF09"
@@ -19359,28 +19161,9 @@ var zhCNMetadataForms = {
19359
19161
  sortable: {
19360
19162
  label: "\u53EF\u6392\u5E8F",
19361
19163
  helpText: "\u5141\u8BB8\u6309\u6B64\u5B57\u6BB5\u6392\u5E8F"
19362
- },
19363
- auditTrail: {
19364
- label: "\u5BA1\u8BA1\u8DDF\u8E2A",
19365
- helpText: "\u8BB0\u5F55\u8BE6\u7EC6\u53D8\u66F4\u4E0E\u64CD\u4F5C\u4EBA\u3001\u65F6\u95F4\u6233"
19366
- },
19367
- trackFeedHistory: {
19368
- label: "\u52A8\u6001\u5386\u53F2\u8DDF\u8E2A",
19369
- helpText: "\u5728\u6D3B\u52A8\u52A8\u6001\u4E2D\u5C55\u793A\u53D8\u66F4"
19370
- },
19371
- encryptionConfig: {
19372
- label: "\u52A0\u5BC6\u914D\u7F6E",
19373
- helpText: "\u5B57\u6BB5\u7EA7\u52A0\u5BC6\uFF08GDPR / HIPAA / PCI-DSS\uFF09"
19374
- },
19375
- maskingRule: {
19376
- label: "\u63A9\u7801\u89C4\u5219",
19377
- helpText: "PII \u6570\u636E\u8131\u654F\u89C4\u5219"
19378
19164
  }
19379
19165
  }
19380
19166
  },
19381
- trigger: {
19382
- label: "\u89E6\u53D1\u5668"
19383
- },
19384
19167
  validation: {
19385
19168
  label: "\u9A8C\u8BC1\u89C4\u5219"
19386
19169
  },
@@ -19457,12 +19240,36 @@ var zhCNMetadataForms = {
19457
19240
  onError: {
19458
19241
  label: "\u9519\u8BEF\u5904\u7406"
19459
19242
  },
19243
+ timeout: {
19244
+ label: "Timeout",
19245
+ helpText: "Abort the hook after N milliseconds"
19246
+ },
19460
19247
  condition: {
19461
19248
  label: "\u6761\u4EF6",
19462
19249
  helpText: "\u53EF\u9009\u516C\u5F0F\u2014\u2014\u6C42\u503C\u4E3A false \u65F6\u8DF3\u8FC7\u8BE5\u94A9\u5B50"
19250
+ },
19251
+ retryPolicy: {
19252
+ label: "Retry Policy",
19253
+ helpText: "Retry on failure \u2014 most useful for async hooks"
19254
+ },
19255
+ "retryPolicy.maxRetries": {
19256
+ label: "Max Retries",
19257
+ helpText: "Maximum retry attempts"
19258
+ },
19259
+ "retryPolicy.backoffMs": {
19260
+ label: "Backoff Ms",
19261
+ helpText: "Delay between retries (ms)"
19463
19262
  }
19464
19263
  }
19465
19264
  },
19265
+ seed: {
19266
+ label: "Seed Data",
19267
+ description: "Fixture / initialization data applied on publish"
19268
+ },
19269
+ mapping: {
19270
+ label: "Import Mapping",
19271
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
19272
+ },
19466
19273
  view: {
19467
19274
  label: "\u89C6\u56FE",
19468
19275
  sections: {
@@ -19634,6 +19441,10 @@ var zhCNMetadataForms = {
19634
19441
  label: "\u5E03\u5C40",
19635
19442
  description: "\u9875\u9762\u533A\u5757\u4E0E\u7EC4\u4EF6"
19636
19443
  },
19444
+ interface: {
19445
+ label: "Interface (list pages)",
19446
+ description: "Interface mode (Airtable parity): the page defines its own data surface directly \u2014 columns, filters, visualizations and toolbar \u2014 no inheriting from a separate view."
19447
+ },
19637
19448
  advanced: {
19638
19449
  label: "\u9AD8\u7EA7\u8BBE\u7F6E",
19639
19450
  description: "\u9ED8\u8BA4\u9875\u3001\u7C7B\u578B\u4E0E\u5206\u914D"
@@ -19676,6 +19487,58 @@ var zhCNMetadataForms = {
19676
19487
  label: "\u533A\u57DF",
19677
19488
  helpText: "\u5E03\u5C40\u533A\u57DF\uFF08header\u3001main\u3001sidebar\u3001footer\uFF09\u53CA\u5176\u7EC4\u4EF6"
19678
19489
  },
19490
+ interfaceConfig: {
19491
+ label: "Interface Config",
19492
+ helpText: "The page IS the view: source picks the object, columns/filterBy are defined directly here; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar."
19493
+ },
19494
+ "interfaceConfig.source": {
19495
+ label: "Source",
19496
+ helpText: "Object this page reads from"
19497
+ },
19498
+ "interfaceConfig.columns": {
19499
+ label: "Columns",
19500
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
19501
+ },
19502
+ "interfaceConfig.filterBy": {
19503
+ label: "Filter By",
19504
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
19505
+ },
19506
+ "interfaceConfig.levels": {
19507
+ label: "Levels",
19508
+ helpText: "Hierarchy levels to display (tree-like sources)"
19509
+ },
19510
+ "interfaceConfig.appearance": {
19511
+ label: "Appearance",
19512
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
19513
+ },
19514
+ "interfaceConfig.userFilters": {
19515
+ label: "User Filters",
19516
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
19517
+ },
19518
+ "interfaceConfig.userActions": {
19519
+ label: "User Actions",
19520
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
19521
+ },
19522
+ "interfaceConfig.addRecord": {
19523
+ label: "Add Record",
19524
+ helpText: "Add-record entry point"
19525
+ },
19526
+ "interfaceConfig.buttons": {
19527
+ label: "Buttons",
19528
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
19529
+ },
19530
+ "interfaceConfig.recordAction": {
19531
+ label: "Record Action",
19532
+ helpText: "How clicking a record opens its detail"
19533
+ },
19534
+ "interfaceConfig.showRecordCount": {
19535
+ label: "Show Record Count",
19536
+ helpText: "Show the record count bar"
19537
+ },
19538
+ "interfaceConfig.allowPrinting": {
19539
+ label: "Allow Printing",
19540
+ helpText: "Allow users to print this page"
19541
+ },
19679
19542
  isDefault: {
19680
19543
  label: "\u9ED8\u8BA4",
19681
19544
  helpText: "\u8BBE\u4E3A\u8BE5\u9875\u9762\u7C7B\u578B\u7684\u9ED8\u8BA4\u9875"
@@ -19924,6 +19787,22 @@ var zhCNMetadataForms = {
19924
19787
  label: "\u6B63\u6587",
19925
19788
  helpText: "\u8981\u6267\u884C\u7684 JavaScript \u4EE3\u7801"
19926
19789
  },
19790
+ "body.language": {
19791
+ label: "Language",
19792
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
19793
+ },
19794
+ "body.source": {
19795
+ label: "Source",
19796
+ helpText: "Function body source \u2014 no top-level imports"
19797
+ },
19798
+ "body.capabilities": {
19799
+ label: "Capabilities",
19800
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
19801
+ },
19802
+ "body.timeoutMs": {
19803
+ label: "Timeout Ms",
19804
+ helpText: "Per-invocation timeout (ms)"
19805
+ },
19927
19806
  params: {
19928
19807
  label: "\u53C2\u6570",
19929
19808
  helpText: "\u6267\u884C\u524D\u5411\u7528\u6237\u6536\u96C6\u7684\u8F93\u5165\u53C2\u6570"
@@ -19964,9 +19843,9 @@ var zhCNMetadataForms = {
19964
19843
  label: "\u6279\u91CF\u542F\u7528",
19965
19844
  helpText: "\u5141\u8BB8\u5BF9\u591A\u6761\u9009\u4E2D\u8BB0\u5F55\u6267\u884C"
19966
19845
  },
19967
- aiExposed: {
19968
- label: "\u66B4\u9732\u7ED9 AI",
19969
- helpText: "\u5141\u8BB8 AI \u667A\u80FD\u4F53\u8C03\u7528\u6B64\u64CD\u4F5C"
19846
+ ai: {
19847
+ label: "Ai",
19848
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
19970
19849
  },
19971
19850
  recordIdParam: {
19972
19851
  label: "\u8BB0\u5F55 ID \u53C2\u6570",
@@ -19989,13 +19868,9 @@ var zhCNMetadataForms = {
19989
19868
  label: "\u57FA\u7840\u4FE1\u606F",
19990
19869
  description: "\u540D\u79F0\u4E0E\u6570\u636E\u6E90"
19991
19870
  },
19992
- columns: {
19993
- label: "\u5217",
19994
- description: "\u9009\u62E9\u8981\u5C55\u793A\u7684\u5217"
19995
- },
19996
- groupings: {
19997
- label: "\u5206\u7EC4\u4E0E\u6C47\u603B",
19998
- description: "\u884C\u5217\u5206\u7EC4\u7EF4\u5EA6"
19871
+ dataset_binding: {
19872
+ label: "Dataset binding",
19873
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
19999
19874
  },
20000
19875
  joined_blocks: {
20001
19876
  label: "\u5173\u8054\u5BF9\u8C61",
@@ -20021,33 +19896,37 @@ var zhCNMetadataForms = {
20021
19896
  description: {
20022
19897
  label: "\u63CF\u8FF0"
20023
19898
  },
20024
- objectName: {
20025
- label: "\u5BF9\u8C61\u540D\u79F0",
20026
- helpText: "\u62A5\u8868\u6570\u636E\u6E90\u5BF9\u8C61"
20027
- },
20028
19899
  type: {
20029
19900
  label: "\u7C7B\u578B",
20030
19901
  helpText: "\u62A5\u8868\u7C7B\u578B\uFF1Atabular / summary / matrix / joined"
20031
19902
  },
19903
+ dataset: {
19904
+ label: "Dataset",
19905
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
19906
+ },
19907
+ values: {
19908
+ label: "Values",
19909
+ helpText: "Measure names (from the dataset) to display"
19910
+ },
19911
+ rows: {
19912
+ label: "Rows",
19913
+ helpText: "Dimension names (from the dataset) to group rows by"
19914
+ },
20032
19915
  columns: {
20033
19916
  label: "\u5217",
20034
19917
  helpText: "\u62A5\u8868\u4E2D\u663E\u793A\u7684\u5217"
20035
19918
  },
20036
- groupingsDown: {
20037
- label: "\u884C\u5206\u7EC4",
20038
- helpText: "\u884C\u65B9\u5411\u5206\u7EC4\u5C42\u7EA7"
20039
- },
20040
- groupingsAcross: {
20041
- label: "\u5217\u5206\u7EC4",
20042
- helpText: "\u5217\u65B9\u5411\u5206\u7EC4\u5C42\u7EA7\uFF08matrix \u62A5\u8868\uFF09"
19919
+ drilldown: {
19920
+ label: "Drilldown",
19921
+ helpText: "Click an aggregated row/cell to open the underlying records"
20043
19922
  },
20044
19923
  blocks: {
20045
19924
  label: "\u5206\u5757",
20046
19925
  helpText: "joined \u62A5\u8868\u7684\u8054\u5408\u67E5\u8BE2\u5757"
20047
19926
  },
20048
- filter: {
20049
- label: "\u7B5B\u9009",
20050
- helpText: "\u62A5\u8868\u7EA7\u522B\u7684\u7B5B\u9009\u89C4\u5219"
19927
+ runtimeFilter: {
19928
+ label: "Runtime Filter",
19929
+ helpText: "Render-time scope filter, ANDed at query time"
20051
19930
  },
20052
19931
  chart: {
20053
19932
  label: "\u56FE\u8868",
@@ -20063,6 +19942,62 @@ var zhCNMetadataForms = {
20063
19942
  }
20064
19943
  }
20065
19944
  },
19945
+ dataset: {
19946
+ label: "Dataset",
19947
+ description: "Analytics semantic layer \u2014 dimensions & measures",
19948
+ sections: {
19949
+ basics: {
19950
+ label: "Basics",
19951
+ description: "Dataset identity."
19952
+ },
19953
+ source: {
19954
+ label: "Source",
19955
+ description: "The base object, the relationships to join, and the dataset\u2019s intrinsic scope. Joins are derived from the object graph \u2014 pick relationship (lookup / master_detail) names, never write an ON clause."
19956
+ },
19957
+ dimensions: {
19958
+ label: "Dimensions",
19959
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
19960
+ },
19961
+ measures: {
19962
+ label: "Measures",
19963
+ description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/\u2026 of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
19964
+ }
19965
+ },
19966
+ fields: {
19967
+ name: {
19968
+ label: "Name",
19969
+ helpText: "snake_case unique identifier"
19970
+ },
19971
+ label: {
19972
+ label: "Label",
19973
+ helpText: "Display name"
19974
+ },
19975
+ description: {
19976
+ label: "Description",
19977
+ helpText: "What this dataset measures"
19978
+ },
19979
+ object: {
19980
+ label: "Object",
19981
+ helpText: "Base object \u2014 the FROM"
19982
+ },
19983
+ include: {
19984
+ label: "Include",
19985
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
19986
+ },
19987
+ filter: {
19988
+ label: "Filter",
19989
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
19990
+ },
19991
+ dimensions: {
19992
+ label: "Dimensions",
19993
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
19994
+ },
19995
+ measures: {
19996
+ label: "Measures",
19997
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
19998
+ }
19999
+ }
20000
+ },
20066
20001
  flow: {
20067
20002
  label: "\u6D41\u7A0B",
20068
20003
  sections: {
@@ -20142,15 +20077,6 @@ var zhCNMetadataForms = {
20142
20077
  translation: {
20143
20078
  label: "\u7FFB\u8BD1"
20144
20079
  },
20145
- router: {
20146
- label: "\u8DEF\u7531\u5668"
20147
- },
20148
- function: {
20149
- label: "\u51FD\u6570"
20150
- },
20151
- service: {
20152
- label: "\u670D\u52A1"
20153
- },
20154
20080
  email_template: {
20155
20081
  label: "\u90AE\u4EF6\u6A21\u677F",
20156
20082
  sections: {
@@ -20231,6 +20157,14 @@ var zhCNMetadataForms = {
20231
20157
  }
20232
20158
  }
20233
20159
  },
20160
+ doc: {
20161
+ label: "Documentation",
20162
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
20163
+ },
20164
+ book: {
20165
+ label: "Documentation Book",
20166
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
20167
+ },
20234
20168
  permission: {
20235
20169
  label: "\u6743\u9650\u96C6 / \u914D\u7F6E\u6587\u4EF6",
20236
20170
  sections: {
@@ -20286,67 +20220,12 @@ var zhCNMetadataForms = {
20286
20220
  }
20287
20221
  }
20288
20222
  },
20289
- profile: {
20290
- label: "\u914D\u7F6E\u6587\u4EF6",
20291
- sections: {
20292
- identity: {
20293
- label: "\u6807\u8BC6",
20294
- description: "\u6743\u9650\u96C6\u53E0\u52A0\u5728\u914D\u7F6E\u6587\u4EF6\u4E4B\u4E0A\u4EE5\u6388\u4E88\u989D\u5916\u7684\u8BBF\u95EE\u6743\u9650\u3002\u914D\u7F6E\u6587\u4EF6\u662F\u6309 1:1 \u5206\u914D\u7ED9\u6BCF\u4E2A\u7528\u6237\u7684\u57FA\u7840\u96C6\u5408\u3002"
20295
- },
20296
- system_permissions: {
20297
- label: "\u7CFB\u7EDF\u6743\u9650",
20298
- description: "\u4E0E\u7279\u5B9A\u5BF9\u8C61\u65E0\u5173\u7684\u9AD8\u7EA7\u80FD\u529B\u2014\u2014\u4F8B\u5982 manage_users\u3001view_audit_logs\u3002"
20299
- },
20300
- object_and_field_permissions: {
20301
- label: "\u5BF9\u8C61\u4E0E\u5B57\u6BB5\u6743\u9650",
20302
- description: "\u6309\u5BF9\u8C61\u7684\u589E\u5220\u6539\u67E5 + \u6309\u5B57\u6BB5\u7684\u5B57\u6BB5\u7EA7\u5B89\u5168\uFF08FLS\uFF09\u3002\u53EF\u901A\u8FC7\u77E9\u9635\u7F16\u8F91\u5668\u7F16\u8F91\uFF0C\u6216\u5728\u6B64\u5904\u7C98\u8D34 JSON\u3002"
20303
- },
20304
- tab_and_row_level_security: {
20305
- label: "\u6807\u7B7E\u9875\u4E0E\u884C\u7EA7\u5B89\u5168",
20306
- description: "\u6807\u7B7E\u9875\u53EF\u89C1\u6027\u3001RLS \u7B56\u7565\uFF0C\u4EE5\u53CA\u7528\u4E8E\u8C13\u8BCD\u6C42\u503C\u7684\u81EA\u5B9A\u4E49\u4E0A\u4E0B\u6587\u53D8\u91CF\u3002"
20307
- }
20308
- },
20309
- fields: {
20310
- name: {
20311
- label: "\u540D\u79F0",
20312
- helpText: "\u673A\u5668\u540D\uFF08snake_case\uFF09"
20313
- },
20314
- label: {
20315
- label: "\u663E\u793A\u540D\u79F0",
20316
- helpText: "\u9762\u5411\u7BA1\u7406\u5458\u663E\u793A\u7684\u6807\u7B7E"
20317
- },
20318
- systemPermissions: {
20319
- label: "\u7CFB\u7EDF\u6743\u9650",
20320
- helpText: "\u7CFB\u7EDF\u80FD\u529B\u952E\u5217\u8868"
20321
- },
20322
- objects: {
20323
- label: "\u5BF9\u8C61\u6743\u9650",
20324
- helpText: '\u793A\u4F8B\uFF1A{ "account": { allowRead: true, allowEdit: true, ... } }'
20325
- },
20326
- fields: {
20327
- label: "\u5B57\u6BB5",
20328
- helpText: '\u793A\u4F8B\uFF1A{ "account.amount": { readable: true, editable: false } }'
20329
- },
20330
- tabPermissions: {
20331
- label: "\u6807\u7B7E\u9875\u6743\u9650",
20332
- helpText: '\u793A\u4F8B\uFF1A{ "app_crm": "visible", "app_admin": "hidden" }'
20333
- },
20334
- rowLevelSecurity: {
20335
- label: "\u884C\u7EA7\u5B89\u5168",
20336
- helpText: "RLS \u7B56\u7565\u6570\u7EC4\uFF08\u53C2\u89C1 rls.zod.ts\uFF09"
20337
- },
20338
- contextVariables: {
20339
- label: "\u4E0A\u4E0B\u6587\u53D8\u91CF",
20340
- helpText: "RLS \u8C13\u8BCD\u4E2D\u5F15\u7528\u7684\u81EA\u5B9A\u4E49\u53D8\u91CF"
20341
- }
20342
- }
20343
- },
20344
- role: {
20345
- label: "\u89D2\u8272",
20223
+ position: {
20224
+ label: "\u5C97\u4F4D",
20346
20225
  sections: {
20347
- role: {
20348
- label: "\u89D2\u8272\u5B9A\u4E49",
20349
- description: "\u89D2\u8272\u540D\u79F0\u4E0E\u7EE7\u627F\u5173\u7CFB"
20226
+ position: {
20227
+ label: "\u5C97\u4F4D",
20228
+ description: "\u5C97\u4F4D\u662F\u6241\u5E73\u7684\u3001\u53EF\u5206\u914D\u7684\u6743\u9650\u96C6\u7EC4\u5408(\u5982 sales_rep\u3001sales_manager)\u3002\u80FD\u529B\u5728\u6743\u9650\u96C6\u4E0A;\u53EF\u89C1\u8303\u56F4\u6DF1\u5EA6\u5728\u4E1A\u52A1\u5355\u5143\u6811\u4E0A\u3002"
20350
20229
  }
20351
20230
  },
20352
20231
  fields: {
@@ -20357,10 +20236,6 @@ var zhCNMetadataForms = {
20357
20236
  label: {
20358
20237
  label: "\u663E\u793A\u540D\u79F0"
20359
20238
  },
20360
- parent: {
20361
- label: "\u7236\u7EA7",
20362
- helpText: "\u7EE7\u627F\u7236\u89D2\u8272\u7684\u6743\u9650"
20363
- },
20364
20239
  description: {
20365
20240
  label: "\u63CF\u8FF0"
20366
20241
  }
@@ -20850,6 +20725,70 @@ var jaJPMetadataForms = {
20850
20725
  datasource: {
20851
20726
  label: "\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9",
20852
20727
  helpText: '\u5BFE\u8C61\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 ID\uFF08\u65E2\u5B9A: "default"\uFF09'
20728
+ },
20729
+ lifecycle: {
20730
+ label: "Lifecycle",
20731
+ helpText: "Data lifecycle contract (ADR-0057): how long rows live and how space is reclaimed. Leave empty for permanent record semantics. Non-record classes require at least one bounding policy (retention, TTL, or rotation)."
20732
+ },
20733
+ "lifecycle.class": {
20734
+ label: "Class",
20735
+ helpText: "Persistence contract for the rows of this object"
20736
+ },
20737
+ "lifecycle.retention": {
20738
+ label: "Retention",
20739
+ helpText: "Age-based retention window"
20740
+ },
20741
+ "lifecycle.retention.maxAge": {
20742
+ label: "Max Age",
20743
+ helpText: 'Rows older than this (by created_at) are reaped. Duration literal: h/d/w/y, e.g. "30d"'
20744
+ },
20745
+ "lifecycle.ttl": {
20746
+ label: "Ttl",
20747
+ helpText: "Per-row TTL expiry"
20748
+ },
20749
+ "lifecycle.ttl.field": {
20750
+ label: "Field",
20751
+ helpText: "Timestamp field the TTL is measured from (e.g. expires_at)"
20752
+ },
20753
+ "lifecycle.ttl.expireAfter": {
20754
+ label: "Expire After",
20755
+ helpText: 'Rows expire this long after the field, e.g. "1d"'
20756
+ },
20757
+ "lifecycle.storage": {
20758
+ label: "Storage",
20759
+ helpText: "Physical rotation for high-frequency telemetry (SQLite: O(1) shard DROP)"
20760
+ },
20761
+ "lifecycle.storage.strategy": {
20762
+ label: "Strategy",
20763
+ helpText: "Storage strategy"
20764
+ },
20765
+ "lifecycle.storage.shards": {
20766
+ label: "Shards",
20767
+ helpText: "Shards retained; total window = shards \xD7 unit"
20768
+ },
20769
+ "lifecycle.storage.unit": {
20770
+ label: "Unit",
20771
+ helpText: "Time width of one shard"
20772
+ },
20773
+ "lifecycle.archive": {
20774
+ label: "Archive",
20775
+ helpText: "Cold-store hand-off (audit class). Rows are never hot-deleted before the archive copy succeeded."
20776
+ },
20777
+ "lifecycle.archive.after": {
20778
+ label: "After",
20779
+ helpText: "Archive rows older than this \u2014 must equal retention.maxAge"
20780
+ },
20781
+ "lifecycle.archive.to": {
20782
+ label: "To",
20783
+ helpText: "Target datasource name for cold storage"
20784
+ },
20785
+ "lifecycle.archive.keep": {
20786
+ label: "Keep",
20787
+ helpText: 'How long the archive keeps rows (empty = forever), e.g. "7y"'
20788
+ },
20789
+ "lifecycle.reclaim": {
20790
+ label: "Reclaim",
20791
+ helpText: "Reclaim driver space after sweeps (default on for non-record classes)"
20853
20792
  }
20854
20793
  }
20855
20794
  },
@@ -20958,10 +20897,6 @@ var jaJPMetadataForms = {
20958
20897
  label: "\u96C6\u8A08\u64CD\u4F5C",
20959
20898
  helpText: "\u30ED\u30FC\u30EB\u30A2\u30C3\u30D7\u96C6\u8A08\u8A2D\u5B9A\uFF08\u89AA\u5B50\u95A2\u4FC2\u7528\uFF09"
20960
20899
  },
20961
- cached: {
20962
- label: "\u30AD\u30E3\u30C3\u30B7\u30E5",
20963
- helpText: "\u8A08\u7B97\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u30AD\u30E3\u30C3\u30B7\u30E5\u8A2D\u5B9A"
20964
- },
20965
20900
  columnName: {
20966
20901
  label: "\u5217\u540D",
20967
20902
  helpText: "\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u4E0A\u306E\u7269\u7406\u5217\u540D\uFF08\u65E2\u5B9A\u306F\u30D5\u30A3\u30FC\u30EB\u30C9\u540D\uFF09"
@@ -20989,28 +20924,9 @@ var jaJPMetadataForms = {
20989
20924
  sortable: {
20990
20925
  label: "\u4E26\u3073\u66FF\u3048\u53EF\u80FD",
20991
20926
  helpText: "\u3053\u306E\u30D5\u30A3\u30FC\u30EB\u30C9\u3067\u30EA\u30B9\u30C8\u306E\u4E26\u3079\u66FF\u3048\u3092\u8A31\u53EF"
20992
- },
20993
- auditTrail: {
20994
- label: "\u76E3\u67FB\u8A3C\u8DE1",
20995
- helpText: "\u30E6\u30FC\u30B6\u30FC\u3068\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u4ED8\u304D\u3067\u8A73\u7D30\u5909\u66F4\u3092\u8FFD\u8DE1"
20996
- },
20997
- trackFeedHistory: {
20998
- label: "\u30D5\u30A3\u30FC\u30C9\u5C65\u6B74\u8FFD\u8DE1",
20999
- helpText: "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u30D5\u30A3\u30FC\u30C9\u306B\u5909\u66F4\u3092\u8868\u793A"
21000
- },
21001
- encryptionConfig: {
21002
- label: "\u6697\u53F7\u5316\u8A2D\u5B9A",
21003
- helpText: "\u30D5\u30A3\u30FC\u30EB\u30C9\u30EC\u30D9\u30EB\u6697\u53F7\u5316\uFF08GDPR/HIPAA/PCI-DSS\uFF09"
21004
- },
21005
- maskingRule: {
21006
- label: "\u30DE\u30B9\u30AD\u30F3\u30B0\u30EB\u30FC\u30EB",
21007
- helpText: "PII \u4FDD\u8B77\u7528\u30C7\u30FC\u30BF\u30DE\u30B9\u30AD\u30F3\u30B0\u30EB\u30FC\u30EB"
21008
20927
  }
21009
20928
  }
21010
20929
  },
21011
- trigger: {
21012
- label: "\u30C8\u30EA\u30AC\u30FC"
21013
- },
21014
20930
  validation: {
21015
20931
  label: "\u691C\u8A3C\u30EB\u30FC\u30EB"
21016
20932
  },
@@ -21087,12 +21003,36 @@ var jaJPMetadataForms = {
21087
21003
  onError: {
21088
21004
  label: "\u30A8\u30E9\u30FC\u6642"
21089
21005
  },
21006
+ timeout: {
21007
+ label: "Timeout",
21008
+ helpText: "Abort the hook after N milliseconds"
21009
+ },
21090
21010
  condition: {
21091
21011
  label: "\u6761\u4EF6",
21092
21012
  helpText: "\u4EFB\u610F\u306E\u6570\u5F0F \u2014 false \u8A55\u4FA1\u6642\u306F\u30D5\u30C3\u30AF\u3092\u30B9\u30AD\u30C3\u30D7"
21013
+ },
21014
+ retryPolicy: {
21015
+ label: "Retry Policy",
21016
+ helpText: "Retry on failure \u2014 most useful for async hooks"
21017
+ },
21018
+ "retryPolicy.maxRetries": {
21019
+ label: "Max Retries",
21020
+ helpText: "Maximum retry attempts"
21021
+ },
21022
+ "retryPolicy.backoffMs": {
21023
+ label: "Backoff Ms",
21024
+ helpText: "Delay between retries (ms)"
21093
21025
  }
21094
21026
  }
21095
21027
  },
21028
+ seed: {
21029
+ label: "Seed Data",
21030
+ description: "Fixture / initialization data applied on publish"
21031
+ },
21032
+ mapping: {
21033
+ label: "Import Mapping",
21034
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
21035
+ },
21096
21036
  view: {
21097
21037
  label: "\u30D3\u30E5\u30FC",
21098
21038
  sections: {
@@ -21264,6 +21204,10 @@ var jaJPMetadataForms = {
21264
21204
  label: "\u30EC\u30A4\u30A2\u30A6\u30C8",
21265
21205
  description: "\u30DA\u30FC\u30B8\u9818\u57DF\u3068\u305D\u3053\u306B\u914D\u7F6E\u3059\u308B\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3002"
21266
21206
  },
21207
+ interface: {
21208
+ label: "Interface (list pages)",
21209
+ description: "Interface mode (Airtable parity): the page defines its own data surface directly \u2014 columns, filters, visualizations and toolbar \u2014 no inheriting from a separate view."
21210
+ },
21267
21211
  advanced: {
21268
21212
  label: "\u8A73\u7D30",
21269
21213
  description: "\u6709\u52B9\u5316\u3001\u5BFE\u8C61\u30E6\u30FC\u30B6\u30FC\u3001\u30A2\u30AF\u30BB\u30B7\u30D3\u30EA\u30C6\u30A3\u3002"
@@ -21306,6 +21250,58 @@ var jaJPMetadataForms = {
21306
21250
  label: "\u30EA\u30FC\u30B8\u30E7\u30F3",
21307
21251
  helpText: "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u542B\u3080\u30EC\u30A4\u30A2\u30A6\u30C8\u9818\u57DF\uFF08header, main, sidebar, footer\uFF09"
21308
21252
  },
21253
+ interfaceConfig: {
21254
+ label: "Interface Config",
21255
+ helpText: "The page IS the view: source picks the object, columns/filterBy are defined directly here; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar."
21256
+ },
21257
+ "interfaceConfig.source": {
21258
+ label: "Source",
21259
+ helpText: "Object this page reads from"
21260
+ },
21261
+ "interfaceConfig.columns": {
21262
+ label: "Columns",
21263
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
21264
+ },
21265
+ "interfaceConfig.filterBy": {
21266
+ label: "Filter By",
21267
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
21268
+ },
21269
+ "interfaceConfig.levels": {
21270
+ label: "Levels",
21271
+ helpText: "Hierarchy levels to display (tree-like sources)"
21272
+ },
21273
+ "interfaceConfig.appearance": {
21274
+ label: "Appearance",
21275
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
21276
+ },
21277
+ "interfaceConfig.userFilters": {
21278
+ label: "User Filters",
21279
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
21280
+ },
21281
+ "interfaceConfig.userActions": {
21282
+ label: "User Actions",
21283
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
21284
+ },
21285
+ "interfaceConfig.addRecord": {
21286
+ label: "Add Record",
21287
+ helpText: "Add-record entry point"
21288
+ },
21289
+ "interfaceConfig.buttons": {
21290
+ label: "Buttons",
21291
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
21292
+ },
21293
+ "interfaceConfig.recordAction": {
21294
+ label: "Record Action",
21295
+ helpText: "How clicking a record opens its detail"
21296
+ },
21297
+ "interfaceConfig.showRecordCount": {
21298
+ label: "Show Record Count",
21299
+ helpText: "Show the record count bar"
21300
+ },
21301
+ "interfaceConfig.allowPrinting": {
21302
+ label: "Allow Printing",
21303
+ helpText: "Allow users to print this page"
21304
+ },
21309
21305
  isDefault: {
21310
21306
  label: "\u65E2\u5B9A",
21311
21307
  helpText: "\u3053\u306E\u30DA\u30FC\u30B8\u7A2E\u5225\u306E\u65E2\u5B9A\u30DA\u30FC\u30B8\u306B\u8A2D\u5B9A"
@@ -21554,15 +21550,31 @@ var jaJPMetadataForms = {
21554
21550
  label: "\u672C\u6587",
21555
21551
  helpText: "\u5B9F\u884C\u3059\u308B JavaScript \u30B3\u30FC\u30C9"
21556
21552
  },
21557
- params: {
21558
- label: "\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC",
21559
- helpText: "\u30E6\u30FC\u30B6\u30FC\u5165\u529B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\uFF08\u5B9F\u884C\u524D\u306B\u30D5\u30A9\u30FC\u30E0\u3092\u8868\u793A\uFF09"
21560
- },
21561
- confirmText: {
21562
- label: "\u78BA\u8A8D\u6587",
21563
- helpText: '\u78BA\u8A8D\u30E1\u30C3\u30BB\u30FC\u30B8\uFF08\u4F8B: "Are you sure?"\uFF09'
21553
+ "body.language": {
21554
+ label: "Language",
21555
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
21564
21556
  },
21565
- successMessage: {
21557
+ "body.source": {
21558
+ label: "Source",
21559
+ helpText: "Function body source \u2014 no top-level imports"
21560
+ },
21561
+ "body.capabilities": {
21562
+ label: "Capabilities",
21563
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
21564
+ },
21565
+ "body.timeoutMs": {
21566
+ label: "Timeout Ms",
21567
+ helpText: "Per-invocation timeout (ms)"
21568
+ },
21569
+ params: {
21570
+ label: "\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC",
21571
+ helpText: "\u30E6\u30FC\u30B6\u30FC\u5165\u529B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\uFF08\u5B9F\u884C\u524D\u306B\u30D5\u30A9\u30FC\u30E0\u3092\u8868\u793A\uFF09"
21572
+ },
21573
+ confirmText: {
21574
+ label: "\u78BA\u8A8D\u6587",
21575
+ helpText: '\u78BA\u8A8D\u30E1\u30C3\u30BB\u30FC\u30B8\uFF08\u4F8B: "Are you sure?"\uFF09'
21576
+ },
21577
+ successMessage: {
21566
21578
  label: "\u6210\u529F\u30E1\u30C3\u30BB\u30FC\u30B8",
21567
21579
  helpText: "\u5B8C\u4E86\u5F8C\u306E\u6210\u529F\u30E1\u30C3\u30BB\u30FC\u30B8"
21568
21580
  },
@@ -21594,9 +21606,9 @@ var jaJPMetadataForms = {
21594
21606
  label: "\u4E00\u62EC\u64CD\u4F5C\u6709\u52B9",
21595
21607
  helpText: "\u9078\u629E\u3057\u305F\u8907\u6570\u30EC\u30B3\u30FC\u30C9\u3078\u306E\u9069\u7528\u3092\u8A31\u53EF"
21596
21608
  },
21597
- aiExposed: {
21598
- label: "AI \u306B\u516C\u958B",
21599
- helpText: "AI \u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306B\u3088\u308B\u3053\u306E\u30A2\u30AF\u30B7\u30E7\u30F3\u306E\u547C\u3073\u51FA\u3057\u3092\u8A31\u53EF"
21609
+ ai: {
21610
+ label: "Ai",
21611
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
21600
21612
  },
21601
21613
  recordIdParam: {
21602
21614
  label: "\u30EC\u30B3\u30FC\u30C9 ID \u30D1\u30E9\u30E1\u30FC\u30BF\u30FC",
@@ -21619,13 +21631,9 @@ var jaJPMetadataForms = {
21619
21631
  label: "\u57FA\u672C",
21620
21632
  description: "ID \u3068\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u3002"
21621
21633
  },
21622
- columns: {
21623
- label: "\u5217",
21624
- description: "\u30EC\u30DD\u30FC\u30C8\u51FA\u529B\u306B\u8868\u793A\u3059\u308B\u5217\u3002"
21625
- },
21626
- groupings: {
21627
- label: "\u30B0\u30EB\u30FC\u30D7\u5316",
21628
- description: "\u884C\uFF08matrix \u30EC\u30DD\u30FC\u30C8\u3067\u306F\u5217\u3082\uFF09\u306E\u30B0\u30EB\u30FC\u30D7\u5316\u65B9\u6CD5\u3002"
21634
+ dataset_binding: {
21635
+ label: "Dataset binding",
21636
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
21629
21637
  },
21630
21638
  joined_blocks: {
21631
21639
  label: "\u7D50\u5408\u30D6\u30ED\u30C3\u30AF",
@@ -21651,33 +21659,37 @@ var jaJPMetadataForms = {
21651
21659
  description: {
21652
21660
  label: "\u8AAC\u660E"
21653
21661
  },
21654
- objectName: {
21655
- label: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D",
21656
- helpText: "\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8"
21657
- },
21658
21662
  type: {
21659
21663
  label: "\u578B",
21660
21664
  helpText: "\u30EC\u30DD\u30FC\u30C8\u7A2E\u5225: tabular/summary/matrix/joined"
21661
21665
  },
21666
+ dataset: {
21667
+ label: "Dataset",
21668
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
21669
+ },
21670
+ values: {
21671
+ label: "Values",
21672
+ helpText: "Measure names (from the dataset) to display"
21673
+ },
21674
+ rows: {
21675
+ label: "Rows",
21676
+ helpText: "Dimension names (from the dataset) to group rows by"
21677
+ },
21662
21678
  columns: {
21663
21679
  label: "\u5217",
21664
21680
  helpText: "\u30EC\u30DD\u30FC\u30C8\u306B\u8868\u793A\u3059\u308B\u5217"
21665
21681
  },
21666
- groupingsDown: {
21667
- label: "\u7E26\u30B0\u30EB\u30FC\u30D7",
21668
- helpText: "\u884C\u30B0\u30EB\u30FC\u30D7\u5316\u30EC\u30D9\u30EB"
21669
- },
21670
- groupingsAcross: {
21671
- label: "\u6A2A\u30B0\u30EB\u30FC\u30D7",
21672
- helpText: "\u5217\u30B0\u30EB\u30FC\u30D7\u5316\u30EC\u30D9\u30EB\uFF08matrix \u306E\u307F\uFF09"
21682
+ drilldown: {
21683
+ label: "Drilldown",
21684
+ helpText: "Click an aggregated row/cell to open the underlying records"
21673
21685
  },
21674
21686
  blocks: {
21675
21687
  label: "\u30D6\u30ED\u30C3\u30AF",
21676
21688
  helpText: "\u8907\u6570\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u7D50\u5408\uFF08joined \u30EC\u30DD\u30FC\u30C8\u306E\u307F\uFF09"
21677
21689
  },
21678
- filter: {
21679
- label: "\u30D5\u30A3\u30EB\u30BF\u30FC",
21680
- helpText: "\u30EC\u30DD\u30FC\u30C8\u30EC\u30D9\u30EB\u306E\u30D5\u30A3\u30EB\u30BF\u30FC"
21690
+ runtimeFilter: {
21691
+ label: "Runtime Filter",
21692
+ helpText: "Render-time scope filter, ANDed at query time"
21681
21693
  },
21682
21694
  chart: {
21683
21695
  label: "\u30C1\u30E3\u30FC\u30C8",
@@ -21693,6 +21705,62 @@ var jaJPMetadataForms = {
21693
21705
  }
21694
21706
  }
21695
21707
  },
21708
+ dataset: {
21709
+ label: "Dataset",
21710
+ description: "Analytics semantic layer \u2014 dimensions & measures",
21711
+ sections: {
21712
+ basics: {
21713
+ label: "Basics",
21714
+ description: "Dataset identity."
21715
+ },
21716
+ source: {
21717
+ label: "Source",
21718
+ description: "The base object, the relationships to join, and the dataset\u2019s intrinsic scope. Joins are derived from the object graph \u2014 pick relationship (lookup / master_detail) names, never write an ON clause."
21719
+ },
21720
+ dimensions: {
21721
+ label: "Dimensions",
21722
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
21723
+ },
21724
+ measures: {
21725
+ label: "Measures",
21726
+ description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/\u2026 of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
21727
+ }
21728
+ },
21729
+ fields: {
21730
+ name: {
21731
+ label: "Name",
21732
+ helpText: "snake_case unique identifier"
21733
+ },
21734
+ label: {
21735
+ label: "Label",
21736
+ helpText: "Display name"
21737
+ },
21738
+ description: {
21739
+ label: "Description",
21740
+ helpText: "What this dataset measures"
21741
+ },
21742
+ object: {
21743
+ label: "Object",
21744
+ helpText: "Base object \u2014 the FROM"
21745
+ },
21746
+ include: {
21747
+ label: "Include",
21748
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
21749
+ },
21750
+ filter: {
21751
+ label: "Filter",
21752
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
21753
+ },
21754
+ dimensions: {
21755
+ label: "Dimensions",
21756
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
21757
+ },
21758
+ measures: {
21759
+ label: "Measures",
21760
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
21761
+ }
21762
+ }
21763
+ },
21696
21764
  flow: {
21697
21765
  label: "\u30D5\u30ED\u30FC",
21698
21766
  sections: {
@@ -21772,15 +21840,6 @@ var jaJPMetadataForms = {
21772
21840
  translation: {
21773
21841
  label: "\u7FFB\u8A33"
21774
21842
  },
21775
- router: {
21776
- label: "\u30EB\u30FC\u30BF\u30FC"
21777
- },
21778
- function: {
21779
- label: "\u95A2\u6570"
21780
- },
21781
- service: {
21782
- label: "\u30B5\u30FC\u30D3\u30B9"
21783
- },
21784
21843
  email_template: {
21785
21844
  label: "\u30E1\u30FC\u30EB\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8",
21786
21845
  sections: {
@@ -21861,6 +21920,14 @@ var jaJPMetadataForms = {
21861
21920
  }
21862
21921
  }
21863
21922
  },
21923
+ doc: {
21924
+ label: "Documentation",
21925
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
21926
+ },
21927
+ book: {
21928
+ label: "Documentation Book",
21929
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
21930
+ },
21864
21931
  permission: {
21865
21932
  label: "\u6A29\u9650\u30BB\u30C3\u30C8",
21866
21933
  sections: {
@@ -21916,67 +21983,12 @@ var jaJPMetadataForms = {
21916
21983
  }
21917
21984
  }
21918
21985
  },
21919
- profile: {
21920
- label: "\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB",
21921
- sections: {
21922
- identity: {
21923
- label: "ID",
21924
- description: "\u6A29\u9650\u30BB\u30C3\u30C8\u306F\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u306B\u8FFD\u52A0\u30A2\u30AF\u30BB\u30B9\u6A29\u3092\u91CD\u306D\u308B\u3002\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u306F\u5404\u30E6\u30FC\u30B6\u30FC\u306B 1:1 \u3067\u5272\u308A\u5F53\u3066\u308B\u57FA\u672C\u30BB\u30C3\u30C8\u3002"
21925
- },
21926
- system_permissions: {
21927
- label: "\u30B7\u30B9\u30C6\u30E0\u6A29\u9650",
21928
- description: "\u7279\u5B9A\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B\u7D10\u3065\u304B\u306A\u3044\u9AD8\u30EC\u30D9\u30EB\u6A5F\u80FD \u2014 \u4F8B: manage_users, view_audit_logs\u3002"
21929
- },
21930
- object_and_field_permissions: {
21931
- label: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3068\u30D5\u30A3\u30FC\u30EB\u30C9\u6A29\u9650",
21932
- description: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u5358\u4F4D\u306E CRUD + \u30D5\u30A3\u30FC\u30EB\u30C9\u5358\u4F4D\u306E FLS\u3002\u30DE\u30C8\u30EA\u30C3\u30AF\u30B9\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u7DE8\u96C6\u3001\u307E\u305F\u306F\u3053\u3053\u306B JSON \u3092\u8CBC\u308A\u4ED8\u3051\u3002"
21933
- },
21934
- tab_and_row_level_security: {
21935
- label: "\u30BF\u30D6\u3068\u884C\u30EC\u30D9\u30EB\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3",
21936
- description: "\u30BF\u30D6\u8868\u793A\u3001RLS \u30DD\u30EA\u30B7\u30FC\u3001\u8FF0\u8A9E\u8A55\u4FA1\u7528\u30AB\u30B9\u30BF\u30E0\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u5909\u6570\u3002"
21937
- }
21938
- },
21939
- fields: {
21940
- name: {
21941
- label: "\u540D\u524D",
21942
- helpText: "\u30DE\u30B7\u30F3\u540D\uFF08snake_case\uFF09"
21943
- },
21944
- label: {
21945
- label: "\u8868\u793A\u540D",
21946
- helpText: "\u7BA1\u7406\u8005\u5411\u3051\u8868\u793A\u30E9\u30D9\u30EB"
21947
- },
21948
- systemPermissions: {
21949
- label: "\u30B7\u30B9\u30C6\u30E0\u6A29\u9650",
21950
- helpText: "\u30B7\u30B9\u30C6\u30E0\u6A5F\u80FD\u30AD\u30FC\u306E\u30EA\u30B9\u30C8"
21951
- },
21952
- objects: {
21953
- label: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u6A29\u9650",
21954
- helpText: '\u4F8B: { "account": { allowRead: true, allowEdit: true, ... } }'
21955
- },
21956
- fields: {
21957
- label: "\u30D5\u30A3\u30FC\u30EB\u30C9",
21958
- helpText: '\u4F8B: { "account.amount": { readable: true, editable: false } }'
21959
- },
21960
- tabPermissions: {
21961
- label: "\u30BF\u30D6\u6A29\u9650",
21962
- helpText: '\u4F8B: { "app_crm": "visible", "app_admin": "hidden" }'
21963
- },
21964
- rowLevelSecurity: {
21965
- label: "\u884C\u30EC\u30D9\u30EB\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3",
21966
- helpText: "RLS \u30DD\u30EA\u30B7\u30FC\u306E\u914D\u5217\uFF08rls.zod.ts \u53C2\u7167\uFF09"
21967
- },
21968
- contextVariables: {
21969
- label: "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u5909\u6570",
21970
- helpText: "RLS \u8FF0\u8A9E\u3067\u53C2\u7167\u3059\u308B\u30AB\u30B9\u30BF\u30E0\u5909\u6570"
21971
- }
21972
- }
21973
- },
21974
- role: {
21975
- label: "\u30ED\u30FC\u30EB",
21986
+ position: {
21987
+ label: "\u30DD\u30B8\u30B7\u30E7\u30F3",
21976
21988
  sections: {
21977
- role: {
21978
- label: "\u30ED\u30FC\u30EB",
21979
- description: "\u30ED\u30FC\u30EB\u306F\u30EC\u30B3\u30FC\u30C9\u5171\u6709\u306B\u4F7F\u3046\u968E\u5C64\u3092\u69CB\u6210\uFF08sales VP \u2192 sales mgr \u2192 sales rep\uFF09\u3002\u6A29\u9650\u81EA\u4F53\u306F Permission Sets \u3068 Profiles \u306B\u5B58\u5728\u3002"
21989
+ position: {
21990
+ label: "\u30DD\u30B8\u30B7\u30E7\u30F3",
21991
+ description: "\u30DD\u30B8\u30B7\u30E7\u30F3\u306F\u6A29\u9650\u30BB\u30C3\u30C8\u3092\u307E\u3068\u3081\u3066\u5272\u308A\u5F53\u3066\u308B\u30D5\u30E9\u30C3\u30C8\u306A\u5358\u4F4D(\u4F8B: sales_rep\u3001sales_manager)\u3002\u80FD\u529B\u306F\u6A29\u9650\u30BB\u30C3\u30C8\u306B\u3001\u53EF\u8996\u7BC4\u56F2\u306E\u6DF1\u3055\u306F\u30D3\u30B8\u30CD\u30B9\u30E6\u30CB\u30C3\u30C8\u30C4\u30EA\u30FC\u306B\u3042\u308A\u307E\u3059\u3002"
21980
21992
  }
21981
21993
  },
21982
21994
  fields: {
@@ -21987,10 +21999,6 @@ var jaJPMetadataForms = {
21987
21999
  label: {
21988
22000
  label: "\u8868\u793A\u540D"
21989
22001
  },
21990
- parent: {
21991
- label: "\u89AA",
21992
- helpText: "\u89AA\u30ED\u30FC\u30EB\u306E\u30DE\u30B7\u30F3\u540D\uFF08Reports To\uFF09"
21993
- },
21994
22002
  description: {
21995
22003
  label: "\u8AAC\u660E"
21996
22004
  }
@@ -22480,6 +22488,70 @@ var esESMetadataForms = {
22480
22488
  datasource: {
22481
22489
  label: "Fuente de datos",
22482
22490
  helpText: 'ID de fuente de datos de destino (valor predeterminado: "default")'
22491
+ },
22492
+ lifecycle: {
22493
+ label: "Lifecycle",
22494
+ helpText: "Data lifecycle contract (ADR-0057): how long rows live and how space is reclaimed. Leave empty for permanent record semantics. Non-record classes require at least one bounding policy (retention, TTL, or rotation)."
22495
+ },
22496
+ "lifecycle.class": {
22497
+ label: "Class",
22498
+ helpText: "Persistence contract for the rows of this object"
22499
+ },
22500
+ "lifecycle.retention": {
22501
+ label: "Retention",
22502
+ helpText: "Age-based retention window"
22503
+ },
22504
+ "lifecycle.retention.maxAge": {
22505
+ label: "Max Age",
22506
+ helpText: 'Rows older than this (by created_at) are reaped. Duration literal: h/d/w/y, e.g. "30d"'
22507
+ },
22508
+ "lifecycle.ttl": {
22509
+ label: "Ttl",
22510
+ helpText: "Per-row TTL expiry"
22511
+ },
22512
+ "lifecycle.ttl.field": {
22513
+ label: "Field",
22514
+ helpText: "Timestamp field the TTL is measured from (e.g. expires_at)"
22515
+ },
22516
+ "lifecycle.ttl.expireAfter": {
22517
+ label: "Expire After",
22518
+ helpText: 'Rows expire this long after the field, e.g. "1d"'
22519
+ },
22520
+ "lifecycle.storage": {
22521
+ label: "Storage",
22522
+ helpText: "Physical rotation for high-frequency telemetry (SQLite: O(1) shard DROP)"
22523
+ },
22524
+ "lifecycle.storage.strategy": {
22525
+ label: "Strategy",
22526
+ helpText: "Storage strategy"
22527
+ },
22528
+ "lifecycle.storage.shards": {
22529
+ label: "Shards",
22530
+ helpText: "Shards retained; total window = shards \xD7 unit"
22531
+ },
22532
+ "lifecycle.storage.unit": {
22533
+ label: "Unit",
22534
+ helpText: "Time width of one shard"
22535
+ },
22536
+ "lifecycle.archive": {
22537
+ label: "Archive",
22538
+ helpText: "Cold-store hand-off (audit class). Rows are never hot-deleted before the archive copy succeeded."
22539
+ },
22540
+ "lifecycle.archive.after": {
22541
+ label: "After",
22542
+ helpText: "Archive rows older than this \u2014 must equal retention.maxAge"
22543
+ },
22544
+ "lifecycle.archive.to": {
22545
+ label: "To",
22546
+ helpText: "Target datasource name for cold storage"
22547
+ },
22548
+ "lifecycle.archive.keep": {
22549
+ label: "Keep",
22550
+ helpText: 'How long the archive keeps rows (empty = forever), e.g. "7y"'
22551
+ },
22552
+ "lifecycle.reclaim": {
22553
+ label: "Reclaim",
22554
+ helpText: "Reclaim driver space after sweeps (default on for non-record classes)"
22483
22555
  }
22484
22556
  }
22485
22557
  },
@@ -22588,10 +22660,6 @@ var esESMetadataForms = {
22588
22660
  label: "Operaciones de resumen",
22589
22661
  helpText: "Configuraci\xF3n de resumen roll-up (para relaciones padre-hijo)"
22590
22662
  },
22591
- cached: {
22592
- label: "En cach\xE9",
22593
- helpText: "Configuraci\xF3n de cach\xE9 para campos calculados"
22594
- },
22595
22663
  columnName: {
22596
22664
  label: "Nombre de columna",
22597
22665
  helpText: "Nombre de columna f\xEDsica en la base de datos (por defecto, el nombre del campo)"
@@ -22619,28 +22687,9 @@ var esESMetadataForms = {
22619
22687
  sortable: {
22620
22688
  label: "Ordenable",
22621
22689
  helpText: "Permite ordenar listas por este campo"
22622
- },
22623
- auditTrail: {
22624
- label: "Rastro de auditor\xEDa",
22625
- helpText: "Registra cambios detallados con usuario y marca temporal"
22626
- },
22627
- trackFeedHistory: {
22628
- label: "Historial de feed",
22629
- helpText: "Muestra cambios en el feed de actividad"
22630
- },
22631
- encryptionConfig: {
22632
- label: "Configuraci\xF3n de cifrado",
22633
- helpText: "Cifrado a nivel de campo (GDPR/HIPAA/PCI-DSS)"
22634
- },
22635
- maskingRule: {
22636
- label: "Regla de enmascaramiento",
22637
- helpText: "Reglas de enmascaramiento de datos para protecci\xF3n de PII"
22638
22690
  }
22639
22691
  }
22640
22692
  },
22641
- trigger: {
22642
- label: "Disparador"
22643
- },
22644
22693
  validation: {
22645
22694
  label: "Regla de validaci\xF3n"
22646
22695
  },
@@ -22717,12 +22766,36 @@ var esESMetadataForms = {
22717
22766
  onError: {
22718
22767
  label: "Al error"
22719
22768
  },
22769
+ timeout: {
22770
+ label: "Timeout",
22771
+ helpText: "Abort the hook after N milliseconds"
22772
+ },
22720
22773
  condition: {
22721
22774
  label: "Condici\xF3n",
22722
22775
  helpText: "F\xF3rmula opcional \u2014 omite el hook cuando eval\xFAa a false"
22776
+ },
22777
+ retryPolicy: {
22778
+ label: "Retry Policy",
22779
+ helpText: "Retry on failure \u2014 most useful for async hooks"
22780
+ },
22781
+ "retryPolicy.maxRetries": {
22782
+ label: "Max Retries",
22783
+ helpText: "Maximum retry attempts"
22784
+ },
22785
+ "retryPolicy.backoffMs": {
22786
+ label: "Backoff Ms",
22787
+ helpText: "Delay between retries (ms)"
22723
22788
  }
22724
22789
  }
22725
22790
  },
22791
+ seed: {
22792
+ label: "Seed Data",
22793
+ description: "Fixture / initialization data applied on publish"
22794
+ },
22795
+ mapping: {
22796
+ label: "Import Mapping",
22797
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
22798
+ },
22726
22799
  view: {
22727
22800
  label: "Vista",
22728
22801
  sections: {
@@ -22894,6 +22967,10 @@ var esESMetadataForms = {
22894
22967
  label: "Dise\xF1o",
22895
22968
  description: "Regiones de p\xE1gina y componentes colocados en ellas."
22896
22969
  },
22970
+ interface: {
22971
+ label: "Interface (list pages)",
22972
+ description: "Interface mode (Airtable parity): the page defines its own data surface directly \u2014 columns, filters, visualizations and toolbar \u2014 no inheriting from a separate view."
22973
+ },
22897
22974
  advanced: {
22898
22975
  label: "Avanzado",
22899
22976
  description: "Activaci\xF3n, audiencia y accesibilidad."
@@ -22936,6 +23013,58 @@ var esESMetadataForms = {
22936
23013
  label: "Regiones",
22937
23014
  helpText: "Regiones de dise\xF1o (header, main, sidebar, footer) con componentes"
22938
23015
  },
23016
+ interfaceConfig: {
23017
+ label: "Interface Config",
23018
+ helpText: "The page IS the view: source picks the object, columns/filterBy are defined directly here; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar."
23019
+ },
23020
+ "interfaceConfig.source": {
23021
+ label: "Source",
23022
+ helpText: "Object this page reads from"
23023
+ },
23024
+ "interfaceConfig.columns": {
23025
+ label: "Columns",
23026
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
23027
+ },
23028
+ "interfaceConfig.filterBy": {
23029
+ label: "Filter By",
23030
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
23031
+ },
23032
+ "interfaceConfig.levels": {
23033
+ label: "Levels",
23034
+ helpText: "Hierarchy levels to display (tree-like sources)"
23035
+ },
23036
+ "interfaceConfig.appearance": {
23037
+ label: "Appearance",
23038
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
23039
+ },
23040
+ "interfaceConfig.userFilters": {
23041
+ label: "User Filters",
23042
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
23043
+ },
23044
+ "interfaceConfig.userActions": {
23045
+ label: "User Actions",
23046
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
23047
+ },
23048
+ "interfaceConfig.addRecord": {
23049
+ label: "Add Record",
23050
+ helpText: "Add-record entry point"
23051
+ },
23052
+ "interfaceConfig.buttons": {
23053
+ label: "Buttons",
23054
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
23055
+ },
23056
+ "interfaceConfig.recordAction": {
23057
+ label: "Record Action",
23058
+ helpText: "How clicking a record opens its detail"
23059
+ },
23060
+ "interfaceConfig.showRecordCount": {
23061
+ label: "Show Record Count",
23062
+ helpText: "Show the record count bar"
23063
+ },
23064
+ "interfaceConfig.allowPrinting": {
23065
+ label: "Allow Printing",
23066
+ helpText: "Allow users to print this page"
23067
+ },
22939
23068
  isDefault: {
22940
23069
  label: "Predeterminado",
22941
23070
  helpText: "Establece como p\xE1gina predeterminada para este tipo de p\xE1gina"
@@ -23184,6 +23313,22 @@ var esESMetadataForms = {
23184
23313
  label: "Cuerpo",
23185
23314
  helpText: "C\xF3digo JavaScript que ejecutar"
23186
23315
  },
23316
+ "body.language": {
23317
+ label: "Language",
23318
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
23319
+ },
23320
+ "body.source": {
23321
+ label: "Source",
23322
+ helpText: "Function body source \u2014 no top-level imports"
23323
+ },
23324
+ "body.capabilities": {
23325
+ label: "Capabilities",
23326
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
23327
+ },
23328
+ "body.timeoutMs": {
23329
+ label: "Timeout Ms",
23330
+ helpText: "Per-invocation timeout (ms)"
23331
+ },
23187
23332
  params: {
23188
23333
  label: "Par\xE1metros",
23189
23334
  helpText: "Par\xE1metros de entrada de usuario (muestra el formulario antes de ejecutar)"
@@ -23224,9 +23369,9 @@ var esESMetadataForms = {
23224
23369
  label: "Acci\xF3n masiva",
23225
23370
  helpText: "Permite aplicar a varios registros seleccionados"
23226
23371
  },
23227
- aiExposed: {
23228
- label: "Expuesto a IA",
23229
- helpText: "Permite que agentes de IA llamen a esta acci\xF3n"
23372
+ ai: {
23373
+ label: "Ai",
23374
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
23230
23375
  },
23231
23376
  recordIdParam: {
23232
23377
  label: "Par\xE1metro de ID de registro",
@@ -23249,13 +23394,9 @@ var esESMetadataForms = {
23249
23394
  label: "Aspectos b\xE1sicos",
23250
23395
  description: "Identidad y fuente de datos."
23251
23396
  },
23252
- columns: {
23253
- label: "Columnas",
23254
- description: "Columnas mostradas en la salida del informe."
23255
- },
23256
- groupings: {
23257
- label: "Agrupaciones",
23258
- description: "C\xF3mo se agrupan las filas (y columnas, para informes matrix)."
23397
+ dataset_binding: {
23398
+ label: "Dataset binding",
23399
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
23259
23400
  },
23260
23401
  joined_blocks: {
23261
23402
  label: "Bloques unidos",
@@ -23281,33 +23422,37 @@ var esESMetadataForms = {
23281
23422
  description: {
23282
23423
  label: "Descripci\xF3n"
23283
23424
  },
23284
- objectName: {
23285
- label: "Nombre de objeto",
23286
- helpText: "Objeto de fuente de datos"
23287
- },
23288
23425
  type: {
23289
23426
  label: "Tipo",
23290
23427
  helpText: "Tipo de informe: tabular/summary/matrix/joined"
23291
23428
  },
23429
+ dataset: {
23430
+ label: "Dataset",
23431
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
23432
+ },
23433
+ values: {
23434
+ label: "Values",
23435
+ helpText: "Measure names (from the dataset) to display"
23436
+ },
23437
+ rows: {
23438
+ label: "Rows",
23439
+ helpText: "Dimension names (from the dataset) to group rows by"
23440
+ },
23292
23441
  columns: {
23293
23442
  label: "Columnas",
23294
23443
  helpText: "Columnas que mostrar en el informe"
23295
23444
  },
23296
- groupingsDown: {
23297
- label: "Agrupaciones verticales",
23298
- helpText: "Niveles de agrupaci\xF3n de filas"
23299
- },
23300
- groupingsAcross: {
23301
- label: "Agrupaciones horizontales",
23302
- helpText: "Niveles de agrupaci\xF3n de columnas (solo matrix)"
23445
+ drilldown: {
23446
+ label: "Drilldown",
23447
+ helpText: "Click an aggregated row/cell to open the underlying records"
23303
23448
  },
23304
23449
  blocks: {
23305
23450
  label: "Bloques",
23306
23451
  helpText: "Une varios objetos (solo informe joined)"
23307
23452
  },
23308
- filter: {
23309
- label: "Filtro",
23310
- helpText: "Filtros a nivel de informe"
23453
+ runtimeFilter: {
23454
+ label: "Runtime Filter",
23455
+ helpText: "Render-time scope filter, ANDed at query time"
23311
23456
  },
23312
23457
  chart: {
23313
23458
  label: "Gr\xE1fico",
@@ -23323,6 +23468,62 @@ var esESMetadataForms = {
23323
23468
  }
23324
23469
  }
23325
23470
  },
23471
+ dataset: {
23472
+ label: "Dataset",
23473
+ description: "Analytics semantic layer \u2014 dimensions & measures",
23474
+ sections: {
23475
+ basics: {
23476
+ label: "Basics",
23477
+ description: "Dataset identity."
23478
+ },
23479
+ source: {
23480
+ label: "Source",
23481
+ description: "The base object, the relationships to join, and the dataset\u2019s intrinsic scope. Joins are derived from the object graph \u2014 pick relationship (lookup / master_detail) names, never write an ON clause."
23482
+ },
23483
+ dimensions: {
23484
+ label: "Dimensions",
23485
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
23486
+ },
23487
+ measures: {
23488
+ label: "Measures",
23489
+ description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/\u2026 of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
23490
+ }
23491
+ },
23492
+ fields: {
23493
+ name: {
23494
+ label: "Name",
23495
+ helpText: "snake_case unique identifier"
23496
+ },
23497
+ label: {
23498
+ label: "Label",
23499
+ helpText: "Display name"
23500
+ },
23501
+ description: {
23502
+ label: "Description",
23503
+ helpText: "What this dataset measures"
23504
+ },
23505
+ object: {
23506
+ label: "Object",
23507
+ helpText: "Base object \u2014 the FROM"
23508
+ },
23509
+ include: {
23510
+ label: "Include",
23511
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
23512
+ },
23513
+ filter: {
23514
+ label: "Filter",
23515
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
23516
+ },
23517
+ dimensions: {
23518
+ label: "Dimensions",
23519
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
23520
+ },
23521
+ measures: {
23522
+ label: "Measures",
23523
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
23524
+ }
23525
+ }
23526
+ },
23326
23527
  flow: {
23327
23528
  label: "Flujo",
23328
23529
  sections: {
@@ -23402,15 +23603,6 @@ var esESMetadataForms = {
23402
23603
  translation: {
23403
23604
  label: "Traducci\xF3n"
23404
23605
  },
23405
- router: {
23406
- label: "Enrutador"
23407
- },
23408
- function: {
23409
- label: "Funci\xF3n"
23410
- },
23411
- service: {
23412
- label: "Servicio"
23413
- },
23414
23606
  email_template: {
23415
23607
  label: "Plantilla de email",
23416
23608
  sections: {
@@ -23491,6 +23683,14 @@ var esESMetadataForms = {
23491
23683
  }
23492
23684
  }
23493
23685
  },
23686
+ doc: {
23687
+ label: "Documentation",
23688
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
23689
+ },
23690
+ book: {
23691
+ label: "Documentation Book",
23692
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
23693
+ },
23494
23694
  permission: {
23495
23695
  label: "Conjunto de permisos",
23496
23696
  sections: {
@@ -23546,67 +23746,12 @@ var esESMetadataForms = {
23546
23746
  }
23547
23747
  }
23548
23748
  },
23549
- profile: {
23550
- label: "Perfil",
23749
+ position: {
23750
+ label: "Posici\xF3n",
23551
23751
  sections: {
23552
- identity: {
23553
- label: "Identidad",
23554
- description: "Los conjuntos de permisos se apilan sobre un perfil para conceder acceso adicional. Los perfiles son el conjunto base asignado 1:1 a cada usuario."
23555
- },
23556
- system_permissions: {
23557
- label: "Permisos del sistema",
23558
- description: "Capacidades de alto nivel no vinculadas a un objeto espec\xEDfico \u2014 p. ej. manage_users, view_audit_logs."
23559
- },
23560
- object_and_field_permissions: {
23561
- label: "Permisos de objeto y campo",
23562
- description: "CRUD por objeto + FLS por campo. Edita mediante el editor matricial o pega JSON aqu\xED."
23563
- },
23564
- tab_and_row_level_security: {
23565
- label: "Pesta\xF1a y seguridad a nivel de fila",
23566
- description: "Visibilidad de pesta\xF1as, pol\xEDticas RLS y variables de contexto personalizadas para evaluar predicados."
23567
- }
23568
- },
23569
- fields: {
23570
- name: {
23571
- label: "Nombre",
23572
- helpText: "Nombre de m\xE1quina (snake_case)"
23573
- },
23574
- label: {
23575
- label: "Etiqueta",
23576
- helpText: "Etiqueta mostrada para administradores"
23577
- },
23578
- systemPermissions: {
23579
- label: "Permisos del sistema",
23580
- helpText: "Lista de claves de capacidades del sistema"
23581
- },
23582
- objects: {
23583
- label: "Permisos de objeto",
23584
- helpText: 'Ejemplo: { "account": { allowRead: true, allowEdit: true, ... } }'
23585
- },
23586
- fields: {
23587
- label: "Campos",
23588
- helpText: 'Ejemplo: { "account.amount": { readable: true, editable: false } }'
23589
- },
23590
- tabPermissions: {
23591
- label: "Permisos de pesta\xF1a",
23592
- helpText: 'Ejemplo: { "app_crm": "visible", "app_admin": "hidden" }'
23593
- },
23594
- rowLevelSecurity: {
23595
- label: "Seguridad a nivel de fila",
23596
- helpText: "Array de pol\xEDticas RLS (ver rls.zod.ts)"
23597
- },
23598
- contextVariables: {
23599
- label: "Variables de contexto",
23600
- helpText: "Variables personalizadas referenciadas en predicados RLS"
23601
- }
23602
- }
23603
- },
23604
- role: {
23605
- label: "Rol",
23606
- sections: {
23607
- role: {
23608
- label: "Rol",
23609
- description: "Los roles componen una jerarqu\xEDa usada para compartir registros (sales VP \u2192 sales mgr \u2192 sales rep). Los permisos en s\xED residen en Permission Sets y Profiles."
23752
+ position: {
23753
+ label: "Posici\xF3n",
23754
+ description: "Una posici\xF3n es un conjunto plano y asignable de permission sets (p. ej. sales_rep, sales_manager). La capacidad reside en los permission sets; la profundidad de visibilidad en el \xE1rbol de unidades de negocio."
23610
23755
  }
23611
23756
  },
23612
23757
  fields: {
@@ -23617,10 +23762,6 @@ var esESMetadataForms = {
23617
23762
  label: {
23618
23763
  label: "Etiqueta"
23619
23764
  },
23620
- parent: {
23621
- label: "Padre",
23622
- helpText: "Nombre de m\xE1quina del rol padre (Reports To)"
23623
- },
23624
23765
  description: {
23625
23766
  label: "Descripci\xF3n"
23626
23767
  }
@@ -23902,6 +24043,6 @@ function createPlatformObjectsPlugin() {
23902
24043
  return new PlatformObjectsPlugin();
23903
24044
  }
23904
24045
 
23905
- export { ACCOUNT_APP, MetadataFormsTranslations, PlatformObjectsPlugin, SETUP_APP, SETUP_NAV_CONTRIBUTIONS, STUDIO_APP, SetupAppTranslations, SysAccount, SysApiKey, SysAttachment, SysBusinessUnit, SysBusinessUnitMember, SysDeviceCode, SysEmail, SysEmailTemplate, SysImportJob, SysInvitation, SysJob, SysJobQueue, SysJobRun, SysJwks, SysMember, SysNotification, SysOauthAccessToken, SysOauthApplication, SysOauthConsent, SysOauthRefreshToken, SysOrganization, SysOrganizationDetailPage, SysReportSchedule, SysSavedReport, SysScimProvider, SysSecret, SysSession, SysSetting, SysSettingAudit, SysSsoProvider, SysTeam, SysTeamMember, SysTwoFactor, SysUser, SysUserDetailPage, SysUserPreference, SysVerification, SystemOverviewDashboard, SystemOverviewDatasets, createPlatformObjectsPlugin, en, esES, jaJP, zhCN };
24046
+ export { ACCOUNT_APP, MetadataFormsTranslations, PlatformObjectsPlugin, SETUP_APP, SETUP_NAV_CONTRIBUTIONS, STUDIO_APP, SetupAppTranslations, SysAccount, SysApiKey, SysAttachment, SysBusinessUnit, SysBusinessUnitMember, SysDeviceCode, SysEmail, SysEmailTemplate, SysImportJob, SysInvitation, SysJob, SysJobQueue, SysJobRun, SysJwks, SysMember, SysNotification, SysOauthAccessToken, SysOauthApplication, SysOauthConsent, SysOauthRefreshToken, SysOrganization, SysOrganizationDetailPage, SysPositionDetailPage, SysReportSchedule, SysSavedReport, SysScimProvider, SysSecret, SysSession, SysSetting, SysSettingAudit, SysSsoProvider, SysTeam, SysTeamMember, SysTwoFactor, SysUser, SysUserDetailPage, SysUserPreference, SysVerification, SystemOverviewDashboard, SystemOverviewDatasets, createPlatformObjectsPlugin, en, esES, jaJP, zhCN };
23906
24047
  //# sourceMappingURL=index.mjs.map
23907
24048
  //# sourceMappingURL=index.mjs.map