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