@objectstack/platform-objects 14.3.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.
package/dist/index.mjs CHANGED
@@ -10,6 +10,15 @@ var SysUser = ObjectSchema.create({
10
10
  icon: "user",
11
11
  isSystem: true,
12
12
  managedBy: "better-auth",
13
+ // ADR-0092 D4 — the ONE generic affordance opened on an identity table:
14
+ // standard row editing. Safe because the plugin-auth identity write guard
15
+ // (ADR-0092 D2) enforces the profile whitelist server-side — a user-context
16
+ // update may only touch SYS_USER_PROFILE_EDIT_FIELDS ({name, image});
17
+ // everything else is stripped/rejected regardless of what a form submits.
18
+ // The permission layer still decides WHO may edit (platform admins only by
19
+ // default; member/org-admin sets keep allowEdit: false). create / import /
20
+ // delete stay bucket-default (off).
21
+ userActions: { edit: true },
13
22
  // ADR-0010 §3.7 — identity table is managed by better-auth; schema must not drift.
14
23
  protection: {
15
24
  lock: "full",
@@ -57,15 +66,17 @@ var SysUser = ObjectSchema.create({
57
66
  // These actions hit /api/v1/auth/admin/* endpoints that are only
58
67
  // wired when `auth.plugins.admin` is enabled. When the plugin is
59
68
  // disabled the actions still render (schema is static) but server
60
- // returns 404. UI surfaces them under the row menu so platform
61
- // admins can manage accounts without dropping to SQL or
69
+ // returns 404. UI surfaces them under the row menu AND the
70
+ // record-detail header (`record_header`, overflowing into the
71
+ // "More" menu) so platform admins can manage an account from either
72
+ // the Users list or an open user record — without dropping to SQL or
62
73
  // a custom Setup wizard.
63
74
  {
64
75
  name: "ban_user",
65
76
  label: "Ban User",
66
77
  icon: "ban",
67
78
  variant: "danger",
68
- locations: ["list_item"],
79
+ locations: ["list_item", "record_header"],
69
80
  type: "api",
70
81
  target: "/api/v1/auth/admin/ban-user",
71
82
  recordIdParam: "userId",
@@ -81,7 +92,7 @@ var SysUser = ObjectSchema.create({
81
92
  label: "Unban User",
82
93
  icon: "check-circle-2",
83
94
  variant: "secondary",
84
- locations: ["list_item"],
95
+ locations: ["list_item", "record_header"],
85
96
  type: "api",
86
97
  target: "/api/v1/auth/admin/unban-user",
87
98
  recordIdParam: "userId",
@@ -96,7 +107,7 @@ var SysUser = ObjectSchema.create({
96
107
  label: "Unlock Account",
97
108
  icon: "lock-open",
98
109
  variant: "secondary",
99
- locations: ["list_item"],
110
+ locations: ["list_item", "record_header"],
100
111
  type: "api",
101
112
  target: "/api/v1/auth/admin/unlock-user",
102
113
  recordIdParam: "userId",
@@ -164,7 +175,7 @@ var SysUser = ObjectSchema.create({
164
175
  label: "Set Password",
165
176
  icon: "key-round",
166
177
  variant: "secondary",
167
- locations: ["list_item"],
178
+ locations: ["list_item", "record_header"],
168
179
  type: "api",
169
180
  // #2766 V1 — same path as better-auth's stock route, but served by the
170
181
  // plugin-auth wrapper registered ahead of the catch-all: it accepts the
@@ -206,7 +217,7 @@ var SysUser = ObjectSchema.create({
206
217
  label: "Set Platform Role",
207
218
  icon: "shield-check",
208
219
  variant: "secondary",
209
- locations: ["list_item"],
220
+ locations: ["list_item", "record_header"],
210
221
  type: "api",
211
222
  target: "/api/v1/auth/admin/set-role",
212
223
  recordIdParam: "userId",
@@ -221,7 +232,7 @@ var SysUser = ObjectSchema.create({
221
232
  label: "Impersonate User",
222
233
  icon: "user-cog",
223
234
  variant: "secondary",
224
- locations: ["list_item"],
235
+ locations: ["list_item", "record_header"],
225
236
  type: "api",
226
237
  target: "/api/v1/auth/admin/impersonate-user",
227
238
  recordIdParam: "userId",
@@ -445,20 +456,28 @@ var SysUser = ObjectSchema.create({
445
456
  maxLength: 255,
446
457
  group: "Identity"
447
458
  }),
459
+ // ADR-0092 D4 — with the generic edit affordance open, every non-profile
460
+ // field is readonly so the standard edit form renders it non-editable.
461
+ // This is UX only; the server boundary is the plugin-auth identity write
462
+ // guard (ADR-0092 D2), which strips/rejects these regardless.
448
463
  email: Field.email({
449
464
  label: "Email",
450
465
  required: true,
466
+ readonly: true,
467
+ // login identity — change flows through better-auth change-email verification
451
468
  searchable: true,
452
469
  group: "Identity"
453
470
  }),
454
471
  email_verified: Field.boolean({
455
472
  label: "Email Verified",
456
473
  defaultValue: false,
474
+ readonly: true,
457
475
  group: "Identity"
458
476
  }),
459
477
  two_factor_enabled: Field.boolean({
460
478
  label: "Two-Factor Enabled",
461
479
  defaultValue: false,
480
+ readonly: true,
462
481
  group: "Identity",
463
482
  description: "Whether two-factor authentication is enabled for this user. Maintained by the better-auth `twoFactor` plugin."
464
483
  }),
@@ -466,6 +485,8 @@ var SysUser = ObjectSchema.create({
466
485
  role: Field.text({
467
486
  label: "Platform Role",
468
487
  required: false,
488
+ readonly: true,
489
+ // ADR-0092 — set via the Set Platform Role action, never the edit form
469
490
  maxLength: 64,
470
491
  group: "Admin",
471
492
  description: "Platform-level role (admin, user, \u2026). Set via the Set Platform Role action."
@@ -473,18 +494,24 @@ var SysUser = ObjectSchema.create({
473
494
  banned: Field.boolean({
474
495
  label: "Banned",
475
496
  defaultValue: false,
497
+ readonly: true,
498
+ // ADR-0092 — toggled via Ban/Unban actions (session side effects)
476
499
  group: "Admin",
477
500
  description: "When true, the user cannot sign in. Toggle via Ban User / Unban User actions."
478
501
  }),
479
502
  ban_reason: Field.text({
480
503
  label: "Ban Reason",
481
504
  required: false,
505
+ readonly: true,
506
+ // ADR-0092 — written by the Ban User action
482
507
  maxLength: 255,
483
508
  group: "Admin"
484
509
  }),
485
510
  ban_expires: Field.datetime({
486
511
  label: "Ban Expires",
487
512
  required: false,
513
+ readonly: true,
514
+ // ADR-0092 — written by the Ban User action
488
515
  group: "Admin",
489
516
  description: "When set, the ban auto-clears at this time."
490
517
  }),
@@ -580,6 +607,8 @@ var SysUser = ObjectSchema.create({
580
607
  ai_access: Field.boolean({
581
608
  label: "AI Access",
582
609
  defaultValue: false,
610
+ readonly: true,
611
+ // ADR-0092 — a licensed-seat grant; flows through the AiSeatPlugin enforcement path
583
612
  group: "Admin",
584
613
  description: "Whether this user holds an AI seat \u2014 grants access to the in-UI AI agents (build / ask). The framework synthesizes the `ai_seat` capability from this flag (plugin-hono-server resolveCtx). Assignment is capped by the licensed / purchased seat count (enforced by @objectstack/security-enterprise AiSeatPlugin). Owned by objectql (better-auth is oblivious to this column)."
585
614
  }),
@@ -593,12 +622,16 @@ var SysUser = ObjectSchema.create({
593
622
  manager_id: Field.lookup("sys_user", {
594
623
  label: "Manager",
595
624
  required: false,
625
+ readonly: true,
626
+ // ADR-0092 — drives own_and_reports RLS scope; org-structure maintenance is its own surface
596
627
  group: "Organization",
597
628
  description: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
598
629
  }),
599
630
  primary_business_unit_id: Field.lookup("sys_business_unit", {
600
631
  label: "Primary Business Unit",
601
632
  required: false,
633
+ readonly: true,
634
+ // ADR-0092 — denormalised projection maintained by plugin-sharing; never hand-edited
602
635
  group: "Organization",
603
636
  description: "The user's primary business unit \u2014 a denormalised projection of sys_business_unit_member.is_primary, maintained by plugin-sharing (ADR-0057 addendum D12). Lets a user-lookup filter candidates by business unit without traversing the membership junction. Do not edit directly; set it via business-unit membership."
604
637
  }),
@@ -2618,6 +2651,12 @@ var SysDeviceCode = ObjectSchema.create({
2618
2651
  icon: "key-round",
2619
2652
  isSystem: true,
2620
2653
  managedBy: "better-auth",
2654
+ // ADR-0057: device codes are dead the moment `expires_at` passes — keep a
2655
+ // 1d grace for post-mortem, then reap.
2656
+ lifecycle: {
2657
+ class: "transient",
2658
+ ttl: { field: "expires_at", expireAfter: "1d" }
2659
+ },
2621
2660
  // [ADR-0066 D2/④] Secure-by-default: rows are LIVE pending device-grant
2622
2661
  // codes — reading `user_code`/`device_code` lets an attacker hijack a
2623
2662
  // pending CLI login. Not covered by the wildcard `'*'` grant; admins retain
@@ -3636,9 +3675,13 @@ var SysSsoProvider = ObjectSchema.create({
3636
3675
  // for a one-time DNS-TXT challenge and reveals the ready-to-paste record
3637
3676
  // ONCE via `resultDialog`. Routed through the env bridge (plugin-auth /
3638
3677
  // cloud AuthProxyPlugin) which reshapes the `{domainVerificationToken}`
3639
- // response into the `{ data: { dnsRecordName, dnsRecordValue } }` envelope
3640
- // the dialog reads. When the feature is OFF the bridge returns a clear
3641
- // "not enabled for this environment" error instead of a bare 404.
3678
+ // response into a `{ success, data: { dnsRecordName, dnsRecordValue } }`
3679
+ // envelope. The console action runtime unwraps that envelope, so the
3680
+ // `resultDialog` field paths are relative to the inner `data` payload
3681
+ // (`dnsRecordName`, not `data.dnsRecordName`) — consistent with every
3682
+ // other object's resultDialog (create_user, two-factor, OAuth). When the
3683
+ // feature is OFF the bridge returns a clear "not enabled for this
3684
+ // environment" error instead of a bare 404.
3642
3685
  target: "/api/v1/auth/admin/sso/request-domain-verification",
3643
3686
  params: [
3644
3687
  { name: "providerId", field: "provider_id", defaultFromRow: true, required: true },
@@ -3649,9 +3692,9 @@ var SysSsoProvider = ObjectSchema.create({
3649
3692
  description: "Add the DNS TXT record below at your domain\u2019s DNS provider, then run \u201CVerify Domain\u201D. The token is shown once.",
3650
3693
  acknowledge: "Done",
3651
3694
  fields: [
3652
- { path: "data.dnsRecordType", label: "Record type", format: "text" },
3653
- { path: "data.dnsRecordName", label: "Name / Host", format: "secret" },
3654
- { path: "data.dnsRecordValue", label: "Value", format: "secret" }
3695
+ { path: "dnsRecordType", label: "Record type", format: "text" },
3696
+ { path: "dnsRecordName", label: "Name / Host", format: "secret" },
3697
+ { path: "dnsRecordValue", label: "Value", format: "secret" }
3655
3698
  ]
3656
3699
  }
3657
3700
  },
@@ -3883,6 +3926,13 @@ var SysNotification = ObjectSchema.create({
3883
3926
  icon: "bell",
3884
3927
  isSystem: true,
3885
3928
  managedBy: "system",
3929
+ // ADR-0057: one 90d window across the whole notification pipeline
3930
+ // (event → delivery → receipt/inbox), enforced by the LifecycleService
3931
+ // (the retired NotificationRetention sweeper kept the same default).
3932
+ lifecycle: {
3933
+ class: "telemetry",
3934
+ retention: { maxAge: "90d" }
3935
+ },
3886
3936
  description: "Notification events \u2014 one row per emit() (ADR-0030 Layer 2 ingress)",
3887
3937
  displayNameField: "topic",
3888
3938
  nameField: "topic",
@@ -4689,6 +4739,13 @@ var SysJobRun = ObjectSchema.create({
4689
4739
  icon: "play",
4690
4740
  isSystem: true,
4691
4741
  managedBy: "append-only",
4742
+ // ADR-0057: run history is append-only telemetry. The platform
4743
+ // LifecycleService is the ONE sweeper for this window (the plugin-local
4744
+ // JobRunRetention it replaced kept the same 30d default).
4745
+ lifecycle: {
4746
+ class: "telemetry",
4747
+ retention: { maxAge: "30d" }
4748
+ },
4692
4749
  description: "Background job execution audit trail",
4693
4750
  displayNameField: "job_name",
4694
4751
  nameField: "job_name",
@@ -6233,14 +6290,64 @@ var enObjects = {
6233
6290
  label: "Ban Expires",
6234
6291
  help: "When set, the ban auto-clears at this time."
6235
6292
  },
6293
+ failed_login_count: {
6294
+ label: "Failed Login Count",
6295
+ help: "Consecutive failed sign-in attempts; reset to 0 on success. Maintained by the auth manager."
6296
+ },
6297
+ locked_until: {
6298
+ label: "Locked Until",
6299
+ help: "When set and in the future, sign-in is rejected (brute-force lockout). Auto-clears past this time; an admin can clear it early via Unlock."
6300
+ },
6301
+ password_changed_at: {
6302
+ label: "Password Changed At",
6303
+ help: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
6304
+ },
6305
+ phone_number: {
6306
+ label: "Phone Number",
6307
+ help: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
6308
+ },
6309
+ phone_number_verified: {
6310
+ label: "Phone Verified",
6311
+ help: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
6312
+ },
6313
+ must_change_password: {
6314
+ label: "Must Change Password",
6315
+ help: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
6316
+ },
6317
+ mfa_required_at: {
6318
+ label: "MFA Required At",
6319
+ help: "When enforced MFA first applied to this user (grace-period clock). Backs mfa_required; system-managed."
6320
+ },
6321
+ last_login_at: {
6322
+ label: "Last Login At",
6323
+ help: "Timestamp of the last successful sign-in. Stamped by the auth manager; system-managed."
6324
+ },
6325
+ last_login_ip: {
6326
+ label: "Last Login IP",
6327
+ help: "Client IP of the last successful sign-in (from the trusted proxy forwarded header). System-managed."
6328
+ },
6329
+ ai_access: {
6330
+ label: "AI Access",
6331
+ help: "Whether this user holds an AI seat \u2014 grants access to the in-UI AI agents (build / ask). The framework synthesizes the `ai_seat` capability from this flag (plugin-hono-server resolveCtx). Assignment is capped by the licensed / purchased seat count (enforced by @objectstack/security-enterprise AiSeatPlugin). Owned by objectql (better-auth is oblivious to this column)."
6332
+ },
6236
6333
  image: {
6237
6334
  label: "Profile Image"
6238
6335
  },
6239
6336
  manager_id: {
6240
- label: "Manager"
6337
+ label: "Manager",
6338
+ help: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
6241
6339
  },
6242
6340
  primary_business_unit_id: {
6243
- label: "Primary Business Unit"
6341
+ label: "Primary Business Unit",
6342
+ help: "The user's primary business unit \u2014 a denormalised projection of sys_business_unit_member.is_primary, maintained by plugin-sharing (ADR-0057 addendum D12). Lets a user-lookup filter candidates by business unit without traversing the membership junction. Do not edit directly; set it via business-unit membership."
6343
+ },
6344
+ source: {
6345
+ label: "Identity Source",
6346
+ help: "How this identity was created \u2014 idp_provisioned (federated SSO JIT) or env_native (local signup / app end-user). System-managed; do not edit.",
6347
+ options: {
6348
+ idp_provisioned: "IdP-Provisioned",
6349
+ env_native: "Env-Native"
6350
+ }
6244
6351
  },
6245
6352
  id: {
6246
6353
  label: "User ID"
@@ -6283,6 +6390,14 @@ var enObjects = {
6283
6390
  label: "Unban User",
6284
6391
  successMessage: "User unbanned"
6285
6392
  },
6393
+ unlock_user: {
6394
+ label: "Unlock Account",
6395
+ successMessage: "Account unlocked"
6396
+ },
6397
+ create_user: {
6398
+ label: "Create User",
6399
+ successMessage: "User created"
6400
+ },
6286
6401
  set_user_password: {
6287
6402
  label: "Set Password",
6288
6403
  successMessage: "Password updated"
@@ -6344,6 +6459,18 @@ var enObjects = {
6344
6459
  expires_at: {
6345
6460
  label: "Expires At"
6346
6461
  },
6462
+ last_activity_at: {
6463
+ label: "Last Activity At",
6464
+ help: "Timestamp of the last request on this session; drives idle-timeout. System-managed."
6465
+ },
6466
+ revoked_at: {
6467
+ label: "Revoked At",
6468
+ help: "When set, this session was revoked (idle / absolute-max / concurrent-cap / admin). System-managed."
6469
+ },
6470
+ revoke_reason: {
6471
+ label: "Revoke Reason",
6472
+ help: "Why the session was revoked (idle_timeout, absolute_max, concurrent_cap, \u2026)."
6473
+ },
6347
6474
  active_organization_id: {
6348
6475
  label: "Active Organization"
6349
6476
  },
@@ -6442,6 +6569,10 @@ var enObjects = {
6442
6569
  password: {
6443
6570
  label: "Password Hash",
6444
6571
  help: "Hashed password for email/password provider"
6572
+ },
6573
+ previous_password_hashes: {
6574
+ label: "Previous Password Hashes",
6575
+ help: "JSON array of prior password hashes (bounded by password_history_count); reuse-prevention only. System-managed."
6445
6576
  }
6446
6577
  },
6447
6578
  _views: {
@@ -6512,6 +6643,10 @@ var enObjects = {
6512
6643
  label: "Metadata",
6513
6644
  help: "JSON-serialized organization metadata"
6514
6645
  },
6646
+ require_mfa: {
6647
+ label: "Require Multi-Factor Auth",
6648
+ help: "When true, every member of this organization must enroll an authenticator app to access data."
6649
+ },
6515
6650
  id: {
6516
6651
  label: "Organization ID"
6517
6652
  },
@@ -6836,6 +6971,9 @@ var enObjects = {
6836
6971
  }
6837
6972
  },
6838
6973
  _views: {
6974
+ org_chart: {
6975
+ label: "Org Chart"
6976
+ },
6839
6977
  active: {
6840
6978
  label: "Active"
6841
6979
  },
@@ -7417,263 +7555,57 @@ var enObjects = {
7417
7555
  }
7418
7556
  }
7419
7557
  },
7420
- sys_audit_log: {
7421
- label: "Audit Log",
7422
- pluralLabel: "Audit Logs",
7423
- description: "Immutable audit trail for platform events",
7424
- fields: {
7425
- created_at: {
7426
- label: "Timestamp"
7427
- },
7428
- action: {
7429
- label: "Action",
7430
- help: "Action type (snake_case)",
7431
- options: {
7432
- create: "create",
7433
- update: "update",
7434
- delete: "delete",
7435
- restore: "restore",
7436
- login: "login",
7437
- logout: "logout",
7438
- permission_change: "permission_change",
7439
- config_change: "config_change",
7440
- export: "export",
7441
- import: "import"
7442
- }
7443
- },
7444
- user_id: {
7445
- label: "Actor",
7446
- help: "User who performed the action (null for system actions)"
7447
- },
7448
- object_name: {
7449
- label: "Object",
7450
- help: "Target object (e.g. sys_user, project_task)"
7451
- },
7452
- record_id: {
7453
- label: "Record ID",
7454
- help: "ID of the affected record"
7455
- },
7456
- old_value: {
7457
- label: "Old Value",
7458
- help: "JSON-serialized previous state"
7459
- },
7460
- new_value: {
7461
- label: "New Value",
7462
- help: "JSON-serialized new state"
7463
- },
7464
- ip_address: {
7465
- label: "IP Address"
7466
- },
7467
- user_agent: {
7468
- label: "User Agent"
7469
- },
7470
- tenant_id: {
7471
- label: "Tenant",
7472
- help: "Tenant context for multi-tenant isolation"
7473
- },
7474
- metadata: {
7475
- label: "Metadata",
7476
- help: "JSON-serialized additional context"
7477
- },
7478
- id: {
7479
- label: "Audit Log ID"
7480
- }
7481
- },
7482
- _views: {
7483
- recent: {
7484
- label: "Recent"
7485
- },
7486
- writes_only: {
7487
- label: "Writes"
7488
- },
7489
- auth_events: {
7490
- label: "Auth"
7491
- },
7492
- config_changes: {
7493
- label: "Config"
7494
- },
7495
- all_events: {
7496
- label: "All"
7497
- }
7498
- }
7499
- },
7500
- sys_presence: {
7501
- label: "Presence",
7502
- pluralLabel: "Presences",
7503
- description: "Real-time user presence and activity tracking",
7558
+ sys_notification: {
7559
+ label: "Notification",
7560
+ pluralLabel: "Notifications",
7561
+ description: "Per-user notification inbox entries",
7504
7562
  fields: {
7505
7563
  id: {
7506
- label: "Presence ID"
7507
- },
7508
- created_at: {
7509
- label: "Created At"
7510
- },
7511
- updated_at: {
7512
- label: "Updated At"
7513
- },
7514
- user_id: {
7515
- label: "User"
7516
- },
7517
- session_id: {
7518
- label: "Session"
7519
- },
7520
- status: {
7521
- label: "Status",
7522
- options: {
7523
- online: "Online",
7524
- away: "Away",
7525
- busy: "Busy",
7526
- offline: "Offline"
7527
- }
7564
+ label: "Notification ID"
7528
7565
  },
7529
- last_seen: {
7530
- label: "Last Seen"
7566
+ topic: {
7567
+ label: "Topic",
7568
+ help: "Notification topic, e.g. task.assigned, collab.mention"
7531
7569
  },
7532
- current_location: {
7533
- label: "Current Location"
7570
+ payload: {
7571
+ label: "Payload",
7572
+ help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
7534
7573
  },
7535
- device: {
7536
- label: "Device",
7574
+ severity: {
7575
+ label: "Severity",
7576
+ help: "Severity hint for rendering / filtering",
7537
7577
  options: {
7538
- desktop: "Desktop",
7539
- mobile: "Mobile",
7540
- tablet: "Tablet",
7541
- other: "Other"
7578
+ info: "info",
7579
+ warning: "warning",
7580
+ critical: "critical"
7542
7581
  }
7543
7582
  },
7544
- custom_status: {
7545
- label: "Custom Status"
7546
- },
7547
- metadata: {
7548
- label: "Metadata",
7549
- help: "Arbitrary JSON metadata associated with the presence state (matches PresenceStateSchema.metadata)."
7550
- }
7551
- }
7552
- },
7553
- sys_activity: {
7554
- label: "Activity",
7555
- pluralLabel: "Activities",
7556
- description: "Recent activity stream entries (lightweight, denormalized)",
7557
- fields: {
7558
- id: {
7559
- label: "Activity ID"
7560
- },
7561
- timestamp: {
7562
- label: "Timestamp"
7583
+ dedup_key: {
7584
+ label: "Dedup Key",
7585
+ help: "Idempotency key within a topic window; a repeat emit is a no-op"
7563
7586
  },
7564
- type: {
7565
- label: "Type",
7566
- options: {
7567
- created: "created",
7568
- updated: "updated",
7569
- deleted: "deleted",
7570
- commented: "commented",
7571
- mentioned: "mentioned",
7572
- shared: "shared",
7573
- assigned: "assigned",
7574
- completed: "completed",
7575
- login: "login",
7576
- logout: "logout",
7577
- system: "system"
7578
- }
7587
+ source_object: {
7588
+ label: "Source Object",
7589
+ help: "Object name of the related record (e.g. lead, opportunity)"
7579
7590
  },
7580
- summary: {
7581
- label: "Summary",
7582
- help: "Human-readable one-line summary"
7591
+ source_id: {
7592
+ label: "Source Record",
7593
+ help: "Record id within source_object"
7583
7594
  },
7584
7595
  actor_id: {
7585
- label: "Actor"
7586
- },
7587
- actor_name: {
7588
- label: "Actor Name"
7589
- },
7590
- actor_avatar_url: {
7591
- label: "Actor Avatar"
7592
- },
7593
- object_name: {
7594
- label: "Object",
7595
- help: "Target object short name (e.g. account, sys_user)"
7596
- },
7597
- record_id: {
7598
- label: "Record ID"
7599
- },
7600
- record_label: {
7601
- label: "Record Label",
7602
- help: "Display label of the target record at write time"
7603
- },
7604
- url: {
7605
- label: "URL",
7606
- help: "Optional deep-link to the activity target"
7607
- },
7608
- environment_id: {
7609
- label: "Project",
7610
- help: "Environment context (multi-environment deployments)"
7611
- },
7612
- metadata: {
7613
- label: "Metadata",
7614
- help: "JSON-serialized additional context"
7615
- }
7616
- }
7617
- },
7618
- sys_comment: {
7619
- label: "Comment",
7620
- pluralLabel: "Comments",
7621
- description: "Threaded comments attached to records via thread_id",
7622
- fields: {
7623
- id: {
7624
- label: "Comment ID"
7625
- },
7626
- thread_id: {
7627
- label: "Thread",
7628
- help: "Thread identifier \u2014 conventionally `{object}:{record_id}` (e.g. `sys_user:abc123`)"
7629
- },
7630
- parent_id: {
7631
- label: "Parent Comment",
7632
- help: "Optional parent comment for nested replies"
7633
- },
7634
- reply_count: {
7635
- label: "Reply Count"
7636
- },
7637
- author_id: {
7638
- label: "Author"
7639
- },
7640
- author_name: {
7641
- label: "Author Name"
7642
- },
7643
- author_avatar_url: {
7644
- label: "Author Avatar"
7645
- },
7646
- body: {
7647
- label: "Body",
7648
- help: "Comment text (Markdown supported)"
7649
- },
7650
- mentions: {
7651
- label: "Mentions",
7652
- help: "JSON array of @mention objects"
7653
- },
7654
- reactions: {
7655
- label: "Reactions",
7656
- help: "JSON array of emoji reaction objects"
7657
- },
7658
- is_edited: {
7659
- label: "Edited"
7660
- },
7661
- edited_at: {
7662
- label: "Edited At"
7663
- },
7664
- visibility: {
7665
- label: "Visibility",
7666
- options: {
7667
- public: "public",
7668
- internal: "internal",
7669
- private: "private"
7670
- }
7596
+ label: "Actor",
7597
+ help: "User who caused the notification (mentioner, assigner)"
7671
7598
  },
7672
7599
  created_at: {
7673
7600
  label: "Created At"
7601
+ }
7602
+ },
7603
+ _views: {
7604
+ recent: {
7605
+ label: "Recent"
7674
7606
  },
7675
- updated_at: {
7676
- label: "Updated At"
7607
+ by_topic: {
7608
+ label: "By Topic"
7677
7609
  }
7678
7610
  }
7679
7611
  },
@@ -7738,60 +7670,6 @@ var enObjects = {
7738
7670
  }
7739
7671
  }
7740
7672
  },
7741
- sys_notification: {
7742
- label: "Notification",
7743
- pluralLabel: "Notifications",
7744
- description: "Per-user notification inbox entries",
7745
- fields: {
7746
- id: {
7747
- label: "Notification ID"
7748
- },
7749
- topic: {
7750
- label: "Topic",
7751
- help: "Notification topic, e.g. task.assigned, collab.mention"
7752
- },
7753
- payload: {
7754
- label: "Payload",
7755
- help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
7756
- },
7757
- severity: {
7758
- label: "Severity",
7759
- help: "Severity hint for rendering / filtering",
7760
- options: {
7761
- info: "info",
7762
- warning: "warning",
7763
- critical: "critical"
7764
- }
7765
- },
7766
- dedup_key: {
7767
- label: "Dedup Key",
7768
- help: "Idempotency key within a topic window; a repeat emit is a no-op"
7769
- },
7770
- source_object: {
7771
- label: "Source Object",
7772
- help: "Object name of the related record (e.g. lead, opportunity)"
7773
- },
7774
- source_id: {
7775
- label: "Source Record",
7776
- help: "Record id within source_object"
7777
- },
7778
- actor_id: {
7779
- label: "Actor",
7780
- help: "User who caused the notification (mentioner, assigner)"
7781
- },
7782
- created_at: {
7783
- label: "Created At"
7784
- }
7785
- },
7786
- _views: {
7787
- recent: {
7788
- label: "Recent"
7789
- },
7790
- by_topic: {
7791
- label: "By Topic"
7792
- }
7793
- }
7794
- },
7795
7673
  sys_email: {
7796
7674
  label: "Email",
7797
7675
  pluralLabel: "Emails",
@@ -8696,8 +8574,13 @@ var enObjects = {
8696
8574
  label: "Ciphertext",
8697
8575
  help: "Provider-encoded ciphertext blob (base64 / JSON). Implementation-defined; only the matching ICryptoProvider can read it."
8698
8576
  }
8699
- }
8700
- },
8577
+ },
8578
+ _views: {
8579
+ all: {
8580
+ label: "All Secrets"
8581
+ }
8582
+ }
8583
+ },
8701
8584
  sys_setting_audit: {
8702
8585
  label: "Setting Audit Entry",
8703
8586
  pluralLabel: "Setting Audit",
@@ -8771,6 +8654,11 @@ var enObjects = {
8771
8654
  label: "Request ID",
8772
8655
  help: "Correlates with sys_audit_log / tracing."
8773
8656
  }
8657
+ },
8658
+ _views: {
8659
+ recent: {
8660
+ label: "Recent"
8661
+ }
8774
8662
  }
8775
8663
  }
8776
8664
  };
@@ -8980,14 +8868,64 @@ var zhCNObjects = {
8980
8868
  label: "\u5C01\u7981\u5230\u671F\u65F6\u95F4",
8981
8869
  help: "\u8BBE\u7F6E\u540E\uFF0C\u5230\u8FBE\u8BE5\u65F6\u95F4\u4F1A\u81EA\u52A8\u89E3\u9664\u5C01\u7981\u3002"
8982
8870
  },
8871
+ failed_login_count: {
8872
+ label: "Failed Login Count",
8873
+ help: "Consecutive failed sign-in attempts; reset to 0 on success. Maintained by the auth manager."
8874
+ },
8875
+ locked_until: {
8876
+ label: "Locked Until",
8877
+ help: "When set and in the future, sign-in is rejected (brute-force lockout). Auto-clears past this time; an admin can clear it early via Unlock."
8878
+ },
8879
+ password_changed_at: {
8880
+ label: "Password Changed At",
8881
+ help: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
8882
+ },
8883
+ phone_number: {
8884
+ label: "Phone Number",
8885
+ help: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
8886
+ },
8887
+ phone_number_verified: {
8888
+ label: "Phone Verified",
8889
+ help: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
8890
+ },
8891
+ must_change_password: {
8892
+ label: "Must Change Password",
8893
+ help: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
8894
+ },
8895
+ mfa_required_at: {
8896
+ label: "MFA Required At",
8897
+ help: "When enforced MFA first applied to this user (grace-period clock). Backs mfa_required; system-managed."
8898
+ },
8899
+ last_login_at: {
8900
+ label: "Last Login At",
8901
+ help: "Timestamp of the last successful sign-in. Stamped by the auth manager; system-managed."
8902
+ },
8903
+ last_login_ip: {
8904
+ label: "Last Login IP",
8905
+ help: "Client IP of the last successful sign-in (from the trusted proxy forwarded header). System-managed."
8906
+ },
8907
+ ai_access: {
8908
+ label: "AI Access",
8909
+ help: "Whether this user holds an AI seat \u2014 grants access to the in-UI AI agents (build / ask). The framework synthesizes the `ai_seat` capability from this flag (plugin-hono-server resolveCtx). Assignment is capped by the licensed / purchased seat count (enforced by @objectstack/security-enterprise AiSeatPlugin). Owned by objectql (better-auth is oblivious to this column)."
8910
+ },
8983
8911
  image: {
8984
8912
  label: "\u5934\u50CF"
8985
8913
  },
8986
8914
  manager_id: {
8987
- label: "\u7ECF\u7406"
8915
+ label: "\u7ECF\u7406",
8916
+ help: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
8988
8917
  },
8989
8918
  primary_business_unit_id: {
8990
- label: "\u4E3B\u5C5E\u4E1A\u52A1\u5355\u5143"
8919
+ label: "\u4E3B\u5C5E\u4E1A\u52A1\u5355\u5143",
8920
+ help: "The user's primary business unit \u2014 a denormalised projection of sys_business_unit_member.is_primary, maintained by plugin-sharing (ADR-0057 addendum D12). Lets a user-lookup filter candidates by business unit without traversing the membership junction. Do not edit directly; set it via business-unit membership."
8921
+ },
8922
+ source: {
8923
+ label: "Identity Source",
8924
+ help: "How this identity was created \u2014 idp_provisioned (federated SSO JIT) or env_native (local signup / app end-user). System-managed; do not edit.",
8925
+ options: {
8926
+ idp_provisioned: "IdP-Provisioned",
8927
+ env_native: "Env-Native"
8928
+ }
8991
8929
  },
8992
8930
  id: {
8993
8931
  label: "\u7528\u6237 ID"
@@ -9030,6 +8968,14 @@ var zhCNObjects = {
9030
8968
  label: "\u89E3\u9664\u5C01\u7981",
9031
8969
  successMessage: "\u7528\u6237\u5DF2\u89E3\u9664\u5C01\u7981"
9032
8970
  },
8971
+ unlock_user: {
8972
+ label: "Unlock Account",
8973
+ successMessage: "Account unlocked"
8974
+ },
8975
+ create_user: {
8976
+ label: "Create User",
8977
+ successMessage: "User created"
8978
+ },
9033
8979
  set_user_password: {
9034
8980
  label: "\u8BBE\u7F6E\u5BC6\u7801",
9035
8981
  successMessage: "\u5BC6\u7801\u5DF2\u66F4\u65B0"
@@ -9091,6 +9037,18 @@ var zhCNObjects = {
9091
9037
  expires_at: {
9092
9038
  label: "\u8FC7\u671F\u65F6\u95F4"
9093
9039
  },
9040
+ last_activity_at: {
9041
+ label: "Last Activity At",
9042
+ help: "Timestamp of the last request on this session; drives idle-timeout. System-managed."
9043
+ },
9044
+ revoked_at: {
9045
+ label: "Revoked At",
9046
+ help: "When set, this session was revoked (idle / absolute-max / concurrent-cap / admin). System-managed."
9047
+ },
9048
+ revoke_reason: {
9049
+ label: "Revoke Reason",
9050
+ help: "Why the session was revoked (idle_timeout, absolute_max, concurrent_cap, \u2026)."
9051
+ },
9094
9052
  active_organization_id: {
9095
9053
  label: "\u5F53\u524D\u7EC4\u7EC7"
9096
9054
  },
@@ -9189,6 +9147,10 @@ var zhCNObjects = {
9189
9147
  password: {
9190
9148
  label: "\u5BC6\u7801\u54C8\u5E0C",
9191
9149
  help: "\u90AE\u7BB1/\u5BC6\u7801\u63D0\u4F9B\u65B9\u4F7F\u7528\u7684\u5BC6\u7801\u54C8\u5E0C"
9150
+ },
9151
+ previous_password_hashes: {
9152
+ label: "Previous Password Hashes",
9153
+ help: "JSON array of prior password hashes (bounded by password_history_count); reuse-prevention only. System-managed."
9192
9154
  }
9193
9155
  },
9194
9156
  _views: {
@@ -9259,6 +9221,10 @@ var zhCNObjects = {
9259
9221
  label: "\u5143\u6570\u636E",
9260
9222
  help: "JSON \u5E8F\u5217\u5316\u7684\u7EC4\u7EC7\u5143\u6570\u636E"
9261
9223
  },
9224
+ require_mfa: {
9225
+ label: "Require Multi-Factor Auth",
9226
+ help: "When true, every member of this organization must enroll an authenticator app to access data."
9227
+ },
9262
9228
  id: {
9263
9229
  label: "\u7EC4\u7EC7 ID"
9264
9230
  },
@@ -9583,6 +9549,9 @@ var zhCNObjects = {
9583
9549
  }
9584
9550
  },
9585
9551
  _views: {
9552
+ org_chart: {
9553
+ label: "Org Chart"
9554
+ },
9586
9555
  active: {
9587
9556
  label: "\u542F\u7528"
9588
9557
  },
@@ -10164,263 +10133,57 @@ var zhCNObjects = {
10164
10133
  }
10165
10134
  }
10166
10135
  },
10167
- sys_audit_log: {
10168
- label: "\u5BA1\u8BA1\u65E5\u5FD7",
10169
- pluralLabel: "\u5BA1\u8BA1\u65E5\u5FD7",
10170
- description: "\u5E73\u53F0\u4E8B\u4EF6\u7684\u4E0D\u53EF\u53D8\u5BA1\u8BA1\u8FFD\u8E2A",
10171
- fields: {
10172
- created_at: {
10173
- label: "\u65F6\u95F4\u6233"
10174
- },
10175
- action: {
10176
- label: "\u64CD\u4F5C",
10177
- help: "\u64CD\u4F5C\u7C7B\u578B\uFF08snake_case\uFF09",
10178
- options: {
10179
- create: "\u521B\u5EFA",
10180
- update: "\u66F4\u65B0",
10181
- delete: "\u5220\u9664",
10182
- restore: "\u6062\u590D",
10183
- login: "\u767B\u5F55",
10184
- logout: "\u767B\u51FA",
10185
- permission_change: "\u6743\u9650\u53D8\u66F4",
10186
- config_change: "\u914D\u7F6E\u53D8\u66F4",
10187
- export: "\u5BFC\u51FA",
10188
- import: "\u5BFC\u5165"
10189
- }
10190
- },
10191
- user_id: {
10192
- label: "\u6267\u884C\u4EBA",
10193
- help: "\u6267\u884C\u8BE5\u64CD\u4F5C\u7684\u7528\u6237\uFF08\u7CFB\u7EDF\u64CD\u4F5C\u65F6\u4E3A null\uFF09"
10194
- },
10195
- object_name: {
10196
- label: "\u5BF9\u8C61",
10197
- help: "\u76EE\u6807\u5BF9\u8C61\uFF08\u4F8B\u5982 sys_user\u3001project_task\uFF09"
10198
- },
10199
- record_id: {
10200
- label: "\u8BB0\u5F55 ID",
10201
- help: "\u53D7\u5F71\u54CD\u8BB0\u5F55\u7684 ID"
10202
- },
10203
- old_value: {
10204
- label: "\u65E7\u503C",
10205
- help: "\u65E7\u72B6\u6001\u7684 JSON \u5E8F\u5217\u5316\u5185\u5BB9"
10206
- },
10207
- new_value: {
10208
- label: "\u65B0\u503C",
10209
- help: "\u65B0\u72B6\u6001\u7684 JSON \u5E8F\u5217\u5316\u5185\u5BB9"
10210
- },
10211
- ip_address: {
10212
- label: "IP \u5730\u5740"
10213
- },
10214
- user_agent: {
10215
- label: "\u7528\u6237\u4EE3\u7406"
10216
- },
10217
- tenant_id: {
10218
- label: "\u79DF\u6237",
10219
- help: "\u7528\u4E8E\u591A\u79DF\u6237\u9694\u79BB\u7684\u79DF\u6237\u4E0A\u4E0B\u6587"
10220
- },
10221
- metadata: {
10222
- label: "\u5143\u6570\u636E",
10223
- help: "\u9644\u52A0\u4E0A\u4E0B\u6587\u7684 JSON \u5E8F\u5217\u5316\u5185\u5BB9"
10224
- },
10225
- id: {
10226
- label: "\u5BA1\u8BA1\u65E5\u5FD7 ID"
10227
- }
10228
- },
10229
- _views: {
10230
- recent: {
10231
- label: "\u6700\u8FD1"
10232
- },
10233
- writes_only: {
10234
- label: "\u5199\u5165"
10235
- },
10236
- auth_events: {
10237
- label: "\u8BA4\u8BC1"
10238
- },
10239
- config_changes: {
10240
- label: "\u914D\u7F6E"
10241
- },
10242
- all_events: {
10243
- label: "\u5168\u90E8"
10244
- }
10245
- }
10246
- },
10247
- sys_presence: {
10248
- label: "\u5728\u7EBF\u72B6\u6001",
10249
- pluralLabel: "\u5728\u7EBF\u72B6\u6001",
10250
- description: "\u5B9E\u65F6\u7528\u6237\u5728\u7EBF\u4E0E\u6D3B\u52A8\u8DDF\u8E2A",
10136
+ sys_notification: {
10137
+ label: "\u901A\u77E5",
10138
+ pluralLabel: "\u901A\u77E5",
10139
+ description: "\u6309\u7528\u6237\u5B58\u50A8\u7684\u901A\u77E5\u6536\u4EF6\u7BB1\u6761\u76EE",
10251
10140
  fields: {
10252
10141
  id: {
10253
- label: "\u5728\u7EBF\u72B6\u6001 ID"
10254
- },
10255
- created_at: {
10256
- label: "\u521B\u5EFA\u65F6\u95F4"
10257
- },
10258
- updated_at: {
10259
- label: "\u66F4\u65B0\u65F6\u95F4"
10260
- },
10261
- user_id: {
10262
- label: "\u7528\u6237"
10263
- },
10264
- session_id: {
10265
- label: "\u4F1A\u8BDD"
10266
- },
10267
- status: {
10268
- label: "\u72B6\u6001",
10269
- options: {
10270
- online: "\u5728\u7EBF",
10271
- away: "\u79BB\u5F00",
10272
- busy: "\u5FD9\u788C",
10273
- offline: "\u79BB\u7EBF"
10274
- }
10142
+ label: "\u901A\u77E5 ID"
10275
10143
  },
10276
- last_seen: {
10277
- label: "\u6700\u8FD1\u5728\u7EBF\u65F6\u95F4"
10144
+ topic: {
10145
+ label: "Topic",
10146
+ help: "Notification topic, e.g. task.assigned, collab.mention"
10278
10147
  },
10279
- current_location: {
10280
- label: "\u5F53\u524D\u4F4D\u7F6E"
10148
+ payload: {
10149
+ label: "Payload",
10150
+ help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
10281
10151
  },
10282
- device: {
10283
- label: "\u8BBE\u5907",
10152
+ severity: {
10153
+ label: "Severity",
10154
+ help: "Severity hint for rendering / filtering",
10284
10155
  options: {
10285
- desktop: "\u684C\u9762\u7AEF",
10286
- mobile: "\u79FB\u52A8\u7AEF",
10287
- tablet: "\u5E73\u677F\u7AEF",
10288
- other: "\u5176\u4ED6"
10156
+ info: "info",
10157
+ warning: "warning",
10158
+ critical: "critical"
10289
10159
  }
10290
10160
  },
10291
- custom_status: {
10292
- label: "\u81EA\u5B9A\u4E49\u72B6\u6001"
10293
- },
10294
- metadata: {
10295
- label: "\u5143\u6570\u636E",
10296
- help: "\u4E0E\u5728\u7EBF\u72B6\u6001\u5173\u8054\u7684\u4EFB\u610F JSON \u5143\u6570\u636E\uFF08\u5BF9\u5E94 PresenceStateSchema.metadata\uFF09\u3002"
10297
- }
10298
- }
10299
- },
10300
- sys_activity: {
10301
- label: "\u6D3B\u52A8",
10302
- pluralLabel: "\u6D3B\u52A8",
10303
- description: "\u6700\u8FD1\u6D3B\u52A8\u6D41\u6761\u76EE\uFF08\u8F7B\u91CF\u3001\u53BB\u89C4\u8303\u5316\uFF09",
10304
- fields: {
10305
- id: {
10306
- label: "\u6D3B\u52A8 ID"
10307
- },
10308
- timestamp: {
10309
- label: "\u65F6\u95F4\u6233"
10161
+ dedup_key: {
10162
+ label: "Dedup Key",
10163
+ help: "Idempotency key within a topic window; a repeat emit is a no-op"
10310
10164
  },
10311
- type: {
10312
- label: "\u7C7B\u578B",
10313
- options: {
10314
- created: "\u5DF2\u521B\u5EFA",
10315
- updated: "\u5DF2\u66F4\u65B0",
10316
- deleted: "\u5DF2\u5220\u9664",
10317
- commented: "\u5DF2\u8BC4\u8BBA",
10318
- mentioned: "\u88AB\u63D0\u53CA",
10319
- shared: "\u5DF2\u5171\u4EAB",
10320
- assigned: "\u5DF2\u5206\u914D",
10321
- completed: "\u5DF2\u5B8C\u6210",
10322
- login: "\u767B\u5F55",
10323
- logout: "\u767B\u51FA",
10324
- system: "\u7CFB\u7EDF"
10325
- }
10165
+ source_object: {
10166
+ label: "\u6765\u6E90\u5BF9\u8C61",
10167
+ help: "\u5173\u8054\u8BB0\u5F55\u7684\u5BF9\u8C61\u540D\u79F0\uFF08\u4F8B\u5982 lead\u3001opportunity\uFF09"
10326
10168
  },
10327
- summary: {
10328
- label: "\u6458\u8981",
10329
- help: "\u4EBA\u7C7B\u53EF\u8BFB\u7684\u5355\u884C\u6458\u8981"
10169
+ source_id: {
10170
+ label: "\u6765\u6E90\u8BB0\u5F55",
10171
+ help: "source_object \u4E2D\u7684\u8BB0\u5F55 ID"
10330
10172
  },
10331
10173
  actor_id: {
10332
- label: "\u6267\u884C\u4EBA"
10333
- },
10334
- actor_name: {
10335
- label: "\u6267\u884C\u4EBA\u540D\u79F0"
10336
- },
10337
- actor_avatar_url: {
10338
- label: "\u6267\u884C\u4EBA\u5934\u50CF"
10339
- },
10340
- object_name: {
10341
- label: "\u5BF9\u8C61",
10342
- help: "\u76EE\u6807\u5BF9\u8C61\u77ED\u540D\u79F0\uFF08\u4F8B\u5982 account\u3001sys_user\uFF09"
10343
- },
10344
- record_id: {
10345
- label: "\u8BB0\u5F55 ID"
10346
- },
10347
- record_label: {
10348
- label: "\u8BB0\u5F55\u6807\u7B7E",
10349
- help: "\u5199\u5165\u65F6\u76EE\u6807\u8BB0\u5F55\u7684\u663E\u793A\u6807\u7B7E"
10350
- },
10351
- url: {
10352
- label: "URL",
10353
- help: "\u6307\u5411\u6D3B\u52A8\u76EE\u6807\u7684\u53EF\u9009\u6DF1\u5EA6\u94FE\u63A5"
10354
- },
10355
- environment_id: {
10356
- label: "\u9879\u76EE",
10357
- help: "\u9879\u76EE\u4E0A\u4E0B\u6587\uFF08\u591A\u9879\u76EE\u90E8\u7F72\uFF09"
10358
- },
10359
- metadata: {
10360
- label: "\u5143\u6570\u636E",
10361
- help: "\u9644\u52A0\u4E0A\u4E0B\u6587\u7684 JSON \u5E8F\u5217\u5316\u5185\u5BB9"
10362
- }
10363
- }
10364
- },
10365
- sys_comment: {
10366
- label: "\u8BC4\u8BBA",
10367
- pluralLabel: "\u8BC4\u8BBA",
10368
- description: "\u901A\u8FC7 thread_id \u9644\u52A0\u5230\u8BB0\u5F55\u7684\u7EBF\u7A0B\u5316\u8BC4\u8BBA",
10369
- fields: {
10370
- id: {
10371
- label: "\u8BC4\u8BBA ID"
10372
- },
10373
- thread_id: {
10374
- label: "\u7EBF\u7A0B",
10375
- help: "\u7EBF\u7A0B\u6807\u8BC6\u2014\u2014\u7EA6\u5B9A\u683C\u5F0F\u4E3A `{object}:{record_id}`\uFF08\u4F8B\u5982 `sys_user:abc123`\uFF09"
10376
- },
10377
- parent_id: {
10378
- label: "\u7236\u8BC4\u8BBA",
10379
- help: "\u53EF\u9009\u7684\u7236\u8BC4\u8BBA\uFF0C\u7528\u4E8E\u5D4C\u5957\u56DE\u590D"
10380
- },
10381
- reply_count: {
10382
- label: "\u56DE\u590D\u6570"
10383
- },
10384
- author_id: {
10385
- label: "\u4F5C\u8005"
10386
- },
10387
- author_name: {
10388
- label: "\u4F5C\u8005\u540D\u79F0"
10389
- },
10390
- author_avatar_url: {
10391
- label: "\u4F5C\u8005\u5934\u50CF"
10392
- },
10393
- body: {
10394
- label: "\u6B63\u6587",
10395
- help: "\u8BC4\u8BBA\u6587\u672C\uFF08\u652F\u6301 Markdown\uFF09"
10396
- },
10397
- mentions: {
10398
- label: "\u63D0\u53CA",
10399
- help: "@mention \u5BF9\u8C61\u7684 JSON \u6570\u7EC4"
10400
- },
10401
- reactions: {
10402
- label: "\u56DE\u5E94",
10403
- help: "\u8868\u60C5\u56DE\u5E94\u5BF9\u8C61\u7684 JSON \u6570\u7EC4"
10404
- },
10405
- is_edited: {
10406
- label: "\u5DF2\u7F16\u8F91"
10407
- },
10408
- edited_at: {
10409
- label: "\u7F16\u8F91\u65F6\u95F4"
10410
- },
10411
- visibility: {
10412
- label: "\u53EF\u89C1\u6027",
10413
- options: {
10414
- public: "\u516C\u5F00",
10415
- internal: "\u5185\u90E8",
10416
- private: "\u79C1\u6709"
10417
- }
10174
+ label: "\u6267\u884C\u4EBA",
10175
+ help: "\u89E6\u53D1\u8BE5\u901A\u77E5\u7684\u7528\u6237\uFF08\u63D0\u53CA\u4EBA\u3001\u5206\u914D\u4EBA\uFF09"
10418
10176
  },
10419
10177
  created_at: {
10420
10178
  label: "\u521B\u5EFA\u65F6\u95F4"
10179
+ }
10180
+ },
10181
+ _views: {
10182
+ recent: {
10183
+ label: "Recent"
10421
10184
  },
10422
- updated_at: {
10423
- label: "\u66F4\u65B0\u65F6\u95F4"
10185
+ by_topic: {
10186
+ label: "By Topic"
10424
10187
  }
10425
10188
  }
10426
10189
  },
@@ -10485,60 +10248,6 @@ var zhCNObjects = {
10485
10248
  }
10486
10249
  }
10487
10250
  },
10488
- sys_notification: {
10489
- label: "\u901A\u77E5",
10490
- pluralLabel: "\u901A\u77E5",
10491
- description: "\u6309\u7528\u6237\u5B58\u50A8\u7684\u901A\u77E5\u6536\u4EF6\u7BB1\u6761\u76EE",
10492
- fields: {
10493
- id: {
10494
- label: "\u901A\u77E5 ID"
10495
- },
10496
- topic: {
10497
- label: "Topic",
10498
- help: "Notification topic, e.g. task.assigned, collab.mention"
10499
- },
10500
- payload: {
10501
- label: "Payload",
10502
- help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
10503
- },
10504
- severity: {
10505
- label: "Severity",
10506
- help: "Severity hint for rendering / filtering",
10507
- options: {
10508
- info: "info",
10509
- warning: "warning",
10510
- critical: "critical"
10511
- }
10512
- },
10513
- dedup_key: {
10514
- label: "Dedup Key",
10515
- help: "Idempotency key within a topic window; a repeat emit is a no-op"
10516
- },
10517
- source_object: {
10518
- label: "\u6765\u6E90\u5BF9\u8C61",
10519
- help: "\u5173\u8054\u8BB0\u5F55\u7684\u5BF9\u8C61\u540D\u79F0\uFF08\u4F8B\u5982 lead\u3001opportunity\uFF09"
10520
- },
10521
- source_id: {
10522
- label: "\u6765\u6E90\u8BB0\u5F55",
10523
- help: "source_object \u4E2D\u7684\u8BB0\u5F55 ID"
10524
- },
10525
- actor_id: {
10526
- label: "\u6267\u884C\u4EBA",
10527
- help: "\u89E6\u53D1\u8BE5\u901A\u77E5\u7684\u7528\u6237\uFF08\u63D0\u53CA\u4EBA\u3001\u5206\u914D\u4EBA\uFF09"
10528
- },
10529
- created_at: {
10530
- label: "\u521B\u5EFA\u65F6\u95F4"
10531
- }
10532
- },
10533
- _views: {
10534
- recent: {
10535
- label: "Recent"
10536
- },
10537
- by_topic: {
10538
- label: "By Topic"
10539
- }
10540
- }
10541
- },
10542
10251
  sys_email: {
10543
10252
  label: "\u90AE\u4EF6",
10544
10253
  pluralLabel: "\u90AE\u4EF6",
@@ -11443,6 +11152,11 @@ var zhCNObjects = {
11443
11152
  label: "\u5BC6\u6587",
11444
11153
  help: "\u63D0\u4F9B\u65B9\u7F16\u7801\u540E\u7684\u5BC6\u6587\u6570\u636E\uFF08base64 / JSON\uFF09\u3002\u5B9E\u73B0\u5B9A\u4E49\uFF1B\u4EC5\u5339\u914D\u7684 ICryptoProvider \u53EF\u8BFB\u53D6\u3002"
11445
11154
  }
11155
+ },
11156
+ _views: {
11157
+ all: {
11158
+ label: "All Secrets"
11159
+ }
11446
11160
  }
11447
11161
  },
11448
11162
  sys_setting_audit: {
@@ -11518,6 +11232,11 @@ var zhCNObjects = {
11518
11232
  label: "\u8BF7\u6C42 ID",
11519
11233
  help: "\u4E0E sys_audit_log / tracing \u5173\u8054\u3002"
11520
11234
  }
11235
+ },
11236
+ _views: {
11237
+ recent: {
11238
+ label: "Recent"
11239
+ }
11521
11240
  }
11522
11241
  }
11523
11242
  };
@@ -11691,20 +11410,70 @@ var jaJPObjects = {
11691
11410
  label: "\u5229\u7528\u505C\u6B62\u671F\u9650",
11692
11411
  help: "\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u3001\u3053\u306E\u65E5\u6642\u306B\u5229\u7528\u505C\u6B62\u304C\u81EA\u52D5\u89E3\u9664\u3055\u308C\u307E\u3059\u3002"
11693
11412
  },
11694
- image: {
11695
- label: "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u753B\u50CF"
11413
+ failed_login_count: {
11414
+ label: "Failed Login Count",
11415
+ help: "Consecutive failed sign-in attempts; reset to 0 on success. Maintained by the auth manager."
11696
11416
  },
11697
- manager_id: {
11698
- label: "\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC"
11417
+ locked_until: {
11418
+ label: "Locked Until",
11419
+ help: "When set and in the future, sign-in is rejected (brute-force lockout). Auto-clears past this time; an admin can clear it early via Unlock."
11699
11420
  },
11700
- primary_business_unit_id: {
11701
- label: "\u4E3B\u6240\u5C5E\u30D3\u30B8\u30CD\u30B9\u30E6\u30CB\u30C3\u30C8"
11421
+ password_changed_at: {
11422
+ label: "Password Changed At",
11423
+ help: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
11702
11424
  },
11703
- id: {
11704
- label: "\u30E6\u30FC\u30B6\u30FC ID"
11425
+ phone_number: {
11426
+ label: "Phone Number",
11427
+ help: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
11705
11428
  },
11706
- created_at: {
11707
- label: "\u4F5C\u6210\u65E5\u6642"
11429
+ phone_number_verified: {
11430
+ label: "Phone Verified",
11431
+ help: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
11432
+ },
11433
+ must_change_password: {
11434
+ label: "Must Change Password",
11435
+ help: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
11436
+ },
11437
+ mfa_required_at: {
11438
+ label: "MFA Required At",
11439
+ help: "When enforced MFA first applied to this user (grace-period clock). Backs mfa_required; system-managed."
11440
+ },
11441
+ last_login_at: {
11442
+ label: "Last Login At",
11443
+ help: "Timestamp of the last successful sign-in. Stamped by the auth manager; system-managed."
11444
+ },
11445
+ last_login_ip: {
11446
+ label: "Last Login IP",
11447
+ help: "Client IP of the last successful sign-in (from the trusted proxy forwarded header). System-managed."
11448
+ },
11449
+ ai_access: {
11450
+ label: "AI Access",
11451
+ help: "Whether this user holds an AI seat \u2014 grants access to the in-UI AI agents (build / ask). The framework synthesizes the `ai_seat` capability from this flag (plugin-hono-server resolveCtx). Assignment is capped by the licensed / purchased seat count (enforced by @objectstack/security-enterprise AiSeatPlugin). Owned by objectql (better-auth is oblivious to this column)."
11452
+ },
11453
+ image: {
11454
+ label: "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u753B\u50CF"
11455
+ },
11456
+ manager_id: {
11457
+ label: "\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC",
11458
+ help: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
11459
+ },
11460
+ primary_business_unit_id: {
11461
+ label: "\u4E3B\u6240\u5C5E\u30D3\u30B8\u30CD\u30B9\u30E6\u30CB\u30C3\u30C8",
11462
+ help: "The user's primary business unit \u2014 a denormalised projection of sys_business_unit_member.is_primary, maintained by plugin-sharing (ADR-0057 addendum D12). Lets a user-lookup filter candidates by business unit without traversing the membership junction. Do not edit directly; set it via business-unit membership."
11463
+ },
11464
+ source: {
11465
+ label: "Identity Source",
11466
+ help: "How this identity was created \u2014 idp_provisioned (federated SSO JIT) or env_native (local signup / app end-user). System-managed; do not edit.",
11467
+ options: {
11468
+ idp_provisioned: "IdP-Provisioned",
11469
+ env_native: "Env-Native"
11470
+ }
11471
+ },
11472
+ id: {
11473
+ label: "\u30E6\u30FC\u30B6\u30FC ID"
11474
+ },
11475
+ created_at: {
11476
+ label: "\u4F5C\u6210\u65E5\u6642"
11708
11477
  },
11709
11478
  updated_at: {
11710
11479
  label: "\u66F4\u65B0\u65E5\u6642"
@@ -11741,6 +11510,14 @@ var jaJPObjects = {
11741
11510
  label: "\u5229\u7528\u505C\u6B62\u3092\u89E3\u9664",
11742
11511
  successMessage: "\u30E6\u30FC\u30B6\u30FC\u306E\u5229\u7528\u505C\u6B62\u3092\u89E3\u9664\u3057\u307E\u3057\u305F"
11743
11512
  },
11513
+ unlock_user: {
11514
+ label: "Unlock Account",
11515
+ successMessage: "Account unlocked"
11516
+ },
11517
+ create_user: {
11518
+ label: "Create User",
11519
+ successMessage: "User created"
11520
+ },
11744
11521
  set_user_password: {
11745
11522
  label: "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u8A2D\u5B9A",
11746
11523
  successMessage: "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F"
@@ -11802,6 +11579,18 @@ var jaJPObjects = {
11802
11579
  expires_at: {
11803
11580
  label: "\u6709\u52B9\u671F\u9650"
11804
11581
  },
11582
+ last_activity_at: {
11583
+ label: "Last Activity At",
11584
+ help: "Timestamp of the last request on this session; drives idle-timeout. System-managed."
11585
+ },
11586
+ revoked_at: {
11587
+ label: "Revoked At",
11588
+ help: "When set, this session was revoked (idle / absolute-max / concurrent-cap / admin). System-managed."
11589
+ },
11590
+ revoke_reason: {
11591
+ label: "Revoke Reason",
11592
+ help: "Why the session was revoked (idle_timeout, absolute_max, concurrent_cap, \u2026)."
11593
+ },
11805
11594
  active_organization_id: {
11806
11595
  label: "\u30A2\u30AF\u30C6\u30A3\u30D6\u7D44\u7E54"
11807
11596
  },
@@ -11900,6 +11689,10 @@ var jaJPObjects = {
11900
11689
  password: {
11901
11690
  label: "\u30D1\u30B9\u30EF\u30FC\u30C9\u30CF\u30C3\u30B7\u30E5",
11902
11691
  help: "\u30E1\u30FC\u30EB/\u30D1\u30B9\u30EF\u30FC\u30C9\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u7528\u306E\u30CF\u30C3\u30B7\u30E5\u5316\u30D1\u30B9\u30EF\u30FC\u30C9"
11692
+ },
11693
+ previous_password_hashes: {
11694
+ label: "Previous Password Hashes",
11695
+ help: "JSON array of prior password hashes (bounded by password_history_count); reuse-prevention only. System-managed."
11903
11696
  }
11904
11697
  },
11905
11698
  _views: {
@@ -11970,6 +11763,10 @@ var jaJPObjects = {
11970
11763
  label: "\u30E1\u30BF\u30C7\u30FC\u30BF",
11971
11764
  help: "JSON \u30B7\u30EA\u30A2\u30E9\u30A4\u30BA\u3055\u308C\u305F\u7D44\u7E54\u30E1\u30BF\u30C7\u30FC\u30BF"
11972
11765
  },
11766
+ require_mfa: {
11767
+ label: "Require Multi-Factor Auth",
11768
+ help: "When true, every member of this organization must enroll an authenticator app to access data."
11769
+ },
11973
11770
  id: {
11974
11771
  label: "\u7D44\u7E54 ID"
11975
11772
  },
@@ -12294,6 +12091,9 @@ var jaJPObjects = {
12294
12091
  }
12295
12092
  },
12296
12093
  _views: {
12094
+ org_chart: {
12095
+ label: "Org Chart"
12096
+ },
12297
12097
  active: {
12298
12098
  label: "\u6709\u52B9"
12299
12099
  },
@@ -12875,263 +12675,57 @@ var jaJPObjects = {
12875
12675
  }
12876
12676
  }
12877
12677
  },
12878
- sys_audit_log: {
12879
- label: "\u76E3\u67FB\u30ED\u30B0",
12880
- pluralLabel: "\u76E3\u67FB\u30ED\u30B0",
12881
- description: "\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u30A4\u30D9\u30F3\u30C8\u306E\u4E0D\u5909\u306E\u76E3\u67FB\u8A3C\u8DE1",
12882
- fields: {
12883
- created_at: {
12884
- label: "\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7"
12885
- },
12886
- action: {
12887
- label: "\u30A2\u30AF\u30B7\u30E7\u30F3",
12888
- help: "\u30A2\u30AF\u30B7\u30E7\u30F3\u30BF\u30A4\u30D7\uFF08snake_case\uFF09",
12889
- options: {
12890
- create: "\u4F5C\u6210",
12891
- update: "\u66F4\u65B0",
12892
- delete: "\u524A\u9664",
12893
- restore: "\u5FA9\u5143",
12894
- login: "\u30ED\u30B0\u30A4\u30F3",
12895
- logout: "\u30ED\u30B0\u30A2\u30A6\u30C8",
12896
- permission_change: "\u6A29\u9650\u5909\u66F4",
12897
- config_change: "\u69CB\u6210\u5909\u66F4",
12898
- export: "\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8",
12899
- import: "\u30A4\u30F3\u30DD\u30FC\u30C8"
12900
- }
12901
- },
12902
- user_id: {
12903
- label: "\u64CD\u4F5C\u8005",
12904
- 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"
12905
- },
12906
- object_name: {
12907
- label: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8",
12908
- help: "\u5BFE\u8C61\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\uFF08\u4F8B: sys_user\u3001project_task\uFF09"
12909
- },
12910
- record_id: {
12911
- label: "\u30EC\u30B3\u30FC\u30C9 ID",
12912
- help: "\u5F71\u97FF\u3092\u53D7\u3051\u305F\u30EC\u30B3\u30FC\u30C9\u306E ID"
12913
- },
12914
- old_value: {
12915
- label: "\u5909\u66F4\u524D\u306E\u5024",
12916
- help: "JSON \u30B7\u30EA\u30A2\u30E9\u30A4\u30BA\u3055\u308C\u305F\u4EE5\u524D\u306E\u72B6\u614B"
12917
- },
12918
- new_value: {
12919
- label: "\u5909\u66F4\u5F8C\u306E\u5024",
12920
- help: "JSON \u30B7\u30EA\u30A2\u30E9\u30A4\u30BA\u3055\u308C\u305F\u65B0\u3057\u3044\u72B6\u614B"
12921
- },
12922
- ip_address: {
12923
- label: "IP \u30A2\u30C9\u30EC\u30B9"
12924
- },
12925
- user_agent: {
12926
- label: "\u30E6\u30FC\u30B6\u30FC\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8"
12927
- },
12928
- tenant_id: {
12929
- label: "\u30C6\u30CA\u30F3\u30C8",
12930
- help: "\u30DE\u30EB\u30C1\u30C6\u30CA\u30F3\u30C8\u5206\u96E2\u306E\u305F\u3081\u306E\u30C6\u30CA\u30F3\u30C8\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8"
12931
- },
12932
- metadata: {
12933
- label: "\u30E1\u30BF\u30C7\u30FC\u30BF",
12934
- help: "JSON \u30B7\u30EA\u30A2\u30E9\u30A4\u30BA\u3055\u308C\u305F\u8FFD\u52A0\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8"
12935
- },
12936
- id: {
12937
- label: "\u76E3\u67FB\u30ED\u30B0 ID"
12938
- }
12939
- },
12940
- _views: {
12941
- recent: {
12942
- label: "\u6700\u8FD1"
12943
- },
12944
- writes_only: {
12945
- label: "\u66F8\u304D\u8FBC\u307F"
12946
- },
12947
- auth_events: {
12948
- label: "\u8A8D\u8A3C"
12949
- },
12950
- config_changes: {
12951
- label: "\u69CB\u6210\u5909\u66F4"
12952
- },
12953
- all_events: {
12954
- label: "\u3059\u3079\u3066"
12955
- }
12956
- }
12957
- },
12958
- sys_presence: {
12959
- label: "\u5728\u5E2D\u72B6\u6CC1",
12960
- pluralLabel: "\u5728\u5E2D\u72B6\u6CC1",
12961
- description: "\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u306E\u30E6\u30FC\u30B6\u30FC\u5728\u5E2D\u72B6\u6CC1\u3068\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u8FFD\u8DE1",
12678
+ sys_notification: {
12679
+ label: "\u901A\u77E5",
12680
+ pluralLabel: "\u901A\u77E5",
12681
+ description: "\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u901A\u77E5\u53D7\u4FE1\u30DC\u30C3\u30AF\u30B9\u30A8\u30F3\u30C8\u30EA",
12962
12682
  fields: {
12963
12683
  id: {
12964
- label: "\u5728\u5E2D ID"
12965
- },
12966
- created_at: {
12967
- label: "\u4F5C\u6210\u65E5\u6642"
12968
- },
12969
- updated_at: {
12970
- label: "\u66F4\u65B0\u65E5\u6642"
12971
- },
12972
- user_id: {
12973
- label: "\u30E6\u30FC\u30B6\u30FC"
12974
- },
12975
- session_id: {
12976
- label: "\u30BB\u30C3\u30B7\u30E7\u30F3"
12977
- },
12978
- status: {
12979
- label: "\u30B9\u30C6\u30FC\u30BF\u30B9",
12980
- options: {
12981
- online: "\u30AA\u30F3\u30E9\u30A4\u30F3",
12982
- away: "\u96E2\u5E2D\u4E2D",
12983
- busy: "\u53D6\u308A\u8FBC\u307F\u4E2D",
12984
- offline: "\u30AA\u30D5\u30E9\u30A4\u30F3"
12985
- }
12684
+ label: "\u901A\u77E5 ID"
12986
12685
  },
12987
- last_seen: {
12988
- label: "\u6700\u7D42\u78BA\u8A8D\u65E5\u6642"
12686
+ topic: {
12687
+ label: "Topic",
12688
+ help: "Notification topic, e.g. task.assigned, collab.mention"
12989
12689
  },
12990
- current_location: {
12991
- label: "\u73FE\u5728\u5730"
12690
+ payload: {
12691
+ label: "Payload",
12692
+ help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
12992
12693
  },
12993
- device: {
12994
- label: "\u30C7\u30D0\u30A4\u30B9",
12694
+ severity: {
12695
+ label: "Severity",
12696
+ help: "Severity hint for rendering / filtering",
12995
12697
  options: {
12996
- desktop: "\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7",
12997
- mobile: "\u30E2\u30D0\u30A4\u30EB",
12998
- tablet: "\u30BF\u30D6\u30EC\u30C3\u30C8",
12999
- other: "\u305D\u306E\u4ED6"
12698
+ info: "info",
12699
+ warning: "warning",
12700
+ critical: "critical"
13000
12701
  }
13001
12702
  },
13002
- custom_status: {
13003
- label: "\u30AB\u30B9\u30BF\u30E0\u30B9\u30C6\u30FC\u30BF\u30B9"
13004
- },
13005
- metadata: {
13006
- label: "\u30E1\u30BF\u30C7\u30FC\u30BF",
13007
- 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"
13008
- }
13009
- }
13010
- },
13011
- sys_activity: {
13012
- label: "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3",
13013
- pluralLabel: "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3",
13014
- 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",
13015
- fields: {
13016
- id: {
13017
- label: "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3 ID"
13018
- },
13019
- timestamp: {
13020
- label: "\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7"
12703
+ dedup_key: {
12704
+ label: "Dedup Key",
12705
+ help: "Idempotency key within a topic window; a repeat emit is a no-op"
13021
12706
  },
13022
- type: {
13023
- label: "\u30BF\u30A4\u30D7",
13024
- options: {
13025
- created: "\u4F5C\u6210",
13026
- updated: "\u66F4\u65B0",
13027
- deleted: "\u524A\u9664",
13028
- commented: "\u30B3\u30E1\u30F3\u30C8",
13029
- mentioned: "\u30E1\u30F3\u30B7\u30E7\u30F3",
13030
- shared: "\u5171\u6709",
13031
- assigned: "\u5272\u308A\u5F53\u3066",
13032
- completed: "\u5B8C\u4E86",
13033
- login: "\u30ED\u30B0\u30A4\u30F3",
13034
- logout: "\u30ED\u30B0\u30A2\u30A6\u30C8",
13035
- system: "\u30B7\u30B9\u30C6\u30E0"
13036
- }
12707
+ source_object: {
12708
+ label: "\u30BD\u30FC\u30B9\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8",
12709
+ help: "\u95A2\u9023\u30EC\u30B3\u30FC\u30C9\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D\uFF08\u4F8B: lead\u3001opportunity\uFF09"
13037
12710
  },
13038
- summary: {
13039
- label: "\u30B5\u30DE\u30EA\u30FC",
13040
- help: "\u5224\u5225\u3057\u3084\u3059\u3044 1 \u884C\u30B5\u30DE\u30EA\u30FC"
12711
+ source_id: {
12712
+ label: "\u30BD\u30FC\u30B9\u30EC\u30B3\u30FC\u30C9",
12713
+ help: "source_object \u5185\u306E\u30EC\u30B3\u30FC\u30C9 ID"
13041
12714
  },
13042
12715
  actor_id: {
13043
- label: "\u64CD\u4F5C\u8005"
13044
- },
13045
- actor_name: {
13046
- label: "\u64CD\u4F5C\u8005\u540D"
13047
- },
13048
- actor_avatar_url: {
13049
- label: "\u64CD\u4F5C\u8005\u30A2\u30D0\u30BF\u30FC"
13050
- },
13051
- object_name: {
13052
- label: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8",
13053
- help: "\u5BFE\u8C61\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u77ED\u3044\u540D\u524D\uFF08\u4F8B: account\u3001sys_user\uFF09"
13054
- },
13055
- record_id: {
13056
- label: "\u30EC\u30B3\u30FC\u30C9 ID"
13057
- },
13058
- record_label: {
13059
- label: "\u30EC\u30B3\u30FC\u30C9\u8868\u793A\u540D",
13060
- help: "\u66F8\u304D\u8FBC\u307F\u6642\u70B9\u306E\u5BFE\u8C61\u30EC\u30B3\u30FC\u30C9\u306E\u8868\u793A\u540D"
13061
- },
13062
- url: {
13063
- label: "URL",
13064
- 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"
13065
- },
13066
- environment_id: {
13067
- label: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",
13068
- 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"
13069
- },
13070
- metadata: {
13071
- label: "\u30E1\u30BF\u30C7\u30FC\u30BF",
13072
- help: "JSON \u30B7\u30EA\u30A2\u30E9\u30A4\u30BA\u3055\u308C\u305F\u8FFD\u52A0\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8"
13073
- }
13074
- }
13075
- },
13076
- sys_comment: {
13077
- label: "\u30B3\u30E1\u30F3\u30C8",
13078
- pluralLabel: "\u30B3\u30E1\u30F3\u30C8",
13079
- 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",
13080
- fields: {
13081
- id: {
13082
- label: "\u30B3\u30E1\u30F3\u30C8 ID"
13083
- },
13084
- thread_id: {
13085
- label: "\u30B9\u30EC\u30C3\u30C9",
13086
- help: "\u30B9\u30EC\u30C3\u30C9\u8B58\u5225\u5B50 \u2014 \u901A\u5E38\u306F `{object}:{record_id}`\uFF08\u4F8B: `sys_user:abc123`\uFF09"
13087
- },
13088
- parent_id: {
13089
- label: "\u89AA\u30B3\u30E1\u30F3\u30C8",
13090
- help: "\u30CD\u30B9\u30C8\u3057\u305F\u8FD4\u4FE1\u7528\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u89AA\u30B3\u30E1\u30F3\u30C8"
13091
- },
13092
- reply_count: {
13093
- label: "\u8FD4\u4FE1\u6570"
13094
- },
13095
- author_id: {
13096
- label: "\u6295\u7A3F\u8005"
13097
- },
13098
- author_name: {
13099
- label: "\u6295\u7A3F\u8005\u540D"
13100
- },
13101
- author_avatar_url: {
13102
- label: "\u6295\u7A3F\u8005\u30A2\u30D0\u30BF\u30FC"
13103
- },
13104
- body: {
13105
- label: "\u672C\u6587",
13106
- help: "\u30B3\u30E1\u30F3\u30C8\u30C6\u30AD\u30B9\u30C8\uFF08Markdown \u5BFE\u5FDC\uFF09"
13107
- },
13108
- mentions: {
13109
- label: "\u30E1\u30F3\u30B7\u30E7\u30F3",
13110
- help: "@\u30E1\u30F3\u30B7\u30E7\u30F3\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E JSON \u914D\u5217"
13111
- },
13112
- reactions: {
13113
- label: "\u30EA\u30A2\u30AF\u30B7\u30E7\u30F3",
13114
- help: "\u7D75\u6587\u5B57\u30EA\u30A2\u30AF\u30B7\u30E7\u30F3\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E JSON \u914D\u5217"
13115
- },
13116
- is_edited: {
13117
- label: "\u7DE8\u96C6\u6E08\u307F"
13118
- },
13119
- edited_at: {
13120
- label: "\u7DE8\u96C6\u65E5\u6642"
13121
- },
13122
- visibility: {
13123
- label: "\u516C\u958B\u7BC4\u56F2",
13124
- options: {
13125
- public: "\u516C\u958B",
13126
- internal: "\u5185\u90E8",
13127
- private: "\u975E\u516C\u958B"
13128
- }
12716
+ label: "\u64CD\u4F5C\u8005",
12717
+ help: "\u901A\u77E5\u3092\u5F15\u304D\u8D77\u3053\u3057\u305F\u30E6\u30FC\u30B6\u30FC\uFF08\u30E1\u30F3\u30B7\u30E7\u30F3\u8005\u3001\u62C5\u5F53\u8005\uFF09"
13129
12718
  },
13130
12719
  created_at: {
13131
12720
  label: "\u4F5C\u6210\u65E5\u6642"
12721
+ }
12722
+ },
12723
+ _views: {
12724
+ recent: {
12725
+ label: "Recent"
13132
12726
  },
13133
- updated_at: {
13134
- label: "\u66F4\u65B0\u65E5\u6642"
12727
+ by_topic: {
12728
+ label: "By Topic"
13135
12729
  }
13136
12730
  }
13137
12731
  },
@@ -13196,60 +12790,6 @@ var jaJPObjects = {
13196
12790
  }
13197
12791
  }
13198
12792
  },
13199
- sys_notification: {
13200
- label: "\u901A\u77E5",
13201
- pluralLabel: "\u901A\u77E5",
13202
- description: "\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u901A\u77E5\u53D7\u4FE1\u30DC\u30C3\u30AF\u30B9\u30A8\u30F3\u30C8\u30EA",
13203
- fields: {
13204
- id: {
13205
- label: "\u901A\u77E5 ID"
13206
- },
13207
- topic: {
13208
- label: "Topic",
13209
- help: "Notification topic, e.g. task.assigned, collab.mention"
13210
- },
13211
- payload: {
13212
- label: "Payload",
13213
- help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
13214
- },
13215
- severity: {
13216
- label: "Severity",
13217
- help: "Severity hint for rendering / filtering",
13218
- options: {
13219
- info: "info",
13220
- warning: "warning",
13221
- critical: "critical"
13222
- }
13223
- },
13224
- dedup_key: {
13225
- label: "Dedup Key",
13226
- help: "Idempotency key within a topic window; a repeat emit is a no-op"
13227
- },
13228
- source_object: {
13229
- label: "\u30BD\u30FC\u30B9\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8",
13230
- help: "\u95A2\u9023\u30EC\u30B3\u30FC\u30C9\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D\uFF08\u4F8B: lead\u3001opportunity\uFF09"
13231
- },
13232
- source_id: {
13233
- label: "\u30BD\u30FC\u30B9\u30EC\u30B3\u30FC\u30C9",
13234
- help: "source_object \u5185\u306E\u30EC\u30B3\u30FC\u30C9 ID"
13235
- },
13236
- actor_id: {
13237
- label: "\u64CD\u4F5C\u8005",
13238
- 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"
13239
- },
13240
- created_at: {
13241
- label: "\u4F5C\u6210\u65E5\u6642"
13242
- }
13243
- },
13244
- _views: {
13245
- recent: {
13246
- label: "Recent"
13247
- },
13248
- by_topic: {
13249
- label: "By Topic"
13250
- }
13251
- }
13252
- },
13253
12793
  sys_email: {
13254
12794
  label: "\u30E1\u30FC\u30EB",
13255
12795
  pluralLabel: "\u30E1\u30FC\u30EB",
@@ -14154,6 +13694,11 @@ var jaJPObjects = {
14154
13694
  label: "\u6697\u53F7\u6587",
14155
13695
  help: "\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u30A8\u30F3\u30B3\u30FC\u30C9\u3055\u308C\u305F\u6697\u53F7\u6587 blob\uFF08base64 / JSON\uFF09\u3002\u5B9F\u88C5\u5B9A\u7FA9\u306E\u305F\u3081\u3001\u5BFE\u5FDC\u3059\u308B ICryptoProvider \u306E\u307F\u304C\u8AAD\u307F\u53D6\u308A\u53EF\u80FD\u3002"
14156
13696
  }
13697
+ },
13698
+ _views: {
13699
+ all: {
13700
+ label: "All Secrets"
13701
+ }
14157
13702
  }
14158
13703
  },
14159
13704
  sys_setting_audit: {
@@ -14229,6 +13774,11 @@ var jaJPObjects = {
14229
13774
  label: "\u30EA\u30AF\u30A8\u30B9\u30C8 ID",
14230
13775
  help: "sys_audit_log / \u30C8\u30EC\u30FC\u30B7\u30F3\u30B0\u3068\u306E\u76F8\u95A2\u7528\u3002"
14231
13776
  }
13777
+ },
13778
+ _views: {
13779
+ recent: {
13780
+ label: "Recent"
13781
+ }
14232
13782
  }
14233
13783
  }
14234
13784
  };
@@ -14398,14 +13948,64 @@ var esESObjects = {
14398
13948
  label: "El bloqueo caduca el",
14399
13949
  help: "Si se establece, el bloqueo se elimina autom\xE1ticamente en ese momento."
14400
13950
  },
13951
+ failed_login_count: {
13952
+ label: "Failed Login Count",
13953
+ help: "Consecutive failed sign-in attempts; reset to 0 on success. Maintained by the auth manager."
13954
+ },
13955
+ locked_until: {
13956
+ label: "Locked Until",
13957
+ help: "When set and in the future, sign-in is rejected (brute-force lockout). Auto-clears past this time; an admin can clear it early via Unlock."
13958
+ },
13959
+ password_changed_at: {
13960
+ label: "Password Changed At",
13961
+ help: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
13962
+ },
13963
+ phone_number: {
13964
+ label: "Phone Number",
13965
+ help: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
13966
+ },
13967
+ phone_number_verified: {
13968
+ label: "Phone Verified",
13969
+ help: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
13970
+ },
13971
+ must_change_password: {
13972
+ label: "Must Change Password",
13973
+ help: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
13974
+ },
13975
+ mfa_required_at: {
13976
+ label: "MFA Required At",
13977
+ help: "When enforced MFA first applied to this user (grace-period clock). Backs mfa_required; system-managed."
13978
+ },
13979
+ last_login_at: {
13980
+ label: "Last Login At",
13981
+ help: "Timestamp of the last successful sign-in. Stamped by the auth manager; system-managed."
13982
+ },
13983
+ last_login_ip: {
13984
+ label: "Last Login IP",
13985
+ help: "Client IP of the last successful sign-in (from the trusted proxy forwarded header). System-managed."
13986
+ },
13987
+ ai_access: {
13988
+ label: "AI Access",
13989
+ help: "Whether this user holds an AI seat \u2014 grants access to the in-UI AI agents (build / ask). The framework synthesizes the `ai_seat` capability from this flag (plugin-hono-server resolveCtx). Assignment is capped by the licensed / purchased seat count (enforced by @objectstack/security-enterprise AiSeatPlugin). Owned by objectql (better-auth is oblivious to this column)."
13990
+ },
14401
13991
  image: {
14402
13992
  label: "Imagen de perfil"
14403
13993
  },
14404
13994
  manager_id: {
14405
- label: "Gerente"
13995
+ label: "Gerente",
13996
+ help: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
14406
13997
  },
14407
13998
  primary_business_unit_id: {
14408
- label: "Unidad de negocio principal"
13999
+ label: "Unidad de negocio principal",
14000
+ help: "The user's primary business unit \u2014 a denormalised projection of sys_business_unit_member.is_primary, maintained by plugin-sharing (ADR-0057 addendum D12). Lets a user-lookup filter candidates by business unit without traversing the membership junction. Do not edit directly; set it via business-unit membership."
14001
+ },
14002
+ source: {
14003
+ label: "Identity Source",
14004
+ help: "How this identity was created \u2014 idp_provisioned (federated SSO JIT) or env_native (local signup / app end-user). System-managed; do not edit.",
14005
+ options: {
14006
+ idp_provisioned: "IdP-Provisioned",
14007
+ env_native: "Env-Native"
14008
+ }
14409
14009
  },
14410
14010
  id: {
14411
14011
  label: "ID de usuario"
@@ -14448,6 +14048,14 @@ var esESObjects = {
14448
14048
  label: "Desbloquear usuario",
14449
14049
  successMessage: "Usuario desbloqueado"
14450
14050
  },
14051
+ unlock_user: {
14052
+ label: "Unlock Account",
14053
+ successMessage: "Account unlocked"
14054
+ },
14055
+ create_user: {
14056
+ label: "Create User",
14057
+ successMessage: "User created"
14058
+ },
14451
14059
  set_user_password: {
14452
14060
  label: "Establecer contrase\xF1a",
14453
14061
  successMessage: "Contrase\xF1a actualizada"
@@ -14509,6 +14117,18 @@ var esESObjects = {
14509
14117
  expires_at: {
14510
14118
  label: "Caduca el"
14511
14119
  },
14120
+ last_activity_at: {
14121
+ label: "Last Activity At",
14122
+ help: "Timestamp of the last request on this session; drives idle-timeout. System-managed."
14123
+ },
14124
+ revoked_at: {
14125
+ label: "Revoked At",
14126
+ help: "When set, this session was revoked (idle / absolute-max / concurrent-cap / admin). System-managed."
14127
+ },
14128
+ revoke_reason: {
14129
+ label: "Revoke Reason",
14130
+ help: "Why the session was revoked (idle_timeout, absolute_max, concurrent_cap, \u2026)."
14131
+ },
14512
14132
  active_organization_id: {
14513
14133
  label: "Organizaci\xF3n activa"
14514
14134
  },
@@ -14607,6 +14227,10 @@ var esESObjects = {
14607
14227
  password: {
14608
14228
  label: "Hash de la contrase\xF1a",
14609
14229
  help: "Hash de la contrase\xF1a para el proveedor de correo electr\xF3nico/contrase\xF1a."
14230
+ },
14231
+ previous_password_hashes: {
14232
+ label: "Previous Password Hashes",
14233
+ help: "JSON array of prior password hashes (bounded by password_history_count); reuse-prevention only. System-managed."
14610
14234
  }
14611
14235
  },
14612
14236
  _views: {
@@ -14677,6 +14301,10 @@ var esESObjects = {
14677
14301
  label: "Metadatos",
14678
14302
  help: "Metadatos de la organizaci\xF3n serializados en JSON."
14679
14303
  },
14304
+ require_mfa: {
14305
+ label: "Require Multi-Factor Auth",
14306
+ help: "When true, every member of this organization must enroll an authenticator app to access data."
14307
+ },
14680
14308
  id: {
14681
14309
  label: "ID de organizaci\xF3n"
14682
14310
  },
@@ -15001,6 +14629,9 @@ var esESObjects = {
15001
14629
  }
15002
14630
  },
15003
14631
  _views: {
14632
+ org_chart: {
14633
+ label: "Org Chart"
14634
+ },
15004
14635
  active: {
15005
14636
  label: "Activo"
15006
14637
  },
@@ -15582,263 +15213,57 @@ var esESObjects = {
15582
15213
  }
15583
15214
  }
15584
15215
  },
15585
- sys_audit_log: {
15586
- label: "Registro de auditor\xEDa",
15587
- pluralLabel: "Registros de auditor\xEDa",
15588
- description: "Registro de auditor\xEDa inmutable para eventos de la plataforma",
15589
- fields: {
15590
- created_at: {
15591
- label: "Marca temporal"
15592
- },
15593
- action: {
15594
- label: "Acci\xF3n",
15595
- help: "Tipo de acci\xF3n (snake_case).",
15596
- options: {
15597
- create: "Crear",
15598
- update: "Actualizar",
15599
- delete: "Eliminar",
15600
- restore: "Restaurar",
15601
- login: "Inicio de sesi\xF3n",
15602
- logout: "Cierre de sesi\xF3n",
15603
- permission_change: "Cambio de permisos",
15604
- config_change: "Cambio de configuraci\xF3n",
15605
- export: "Exportar",
15606
- import: "Importar"
15607
- }
15608
- },
15609
- user_id: {
15610
- label: "Actor",
15611
- help: "Usuario que realiz\xF3 la acci\xF3n (null para acciones del sistema)."
15612
- },
15613
- object_name: {
15614
- label: "Objeto",
15615
- help: "Objeto de destino (p. ej. sys_user, project_task)."
15616
- },
15617
- record_id: {
15618
- label: "ID de registro",
15619
- help: "ID del registro afectado."
15620
- },
15621
- old_value: {
15622
- label: "Valor anterior",
15623
- help: "Estado anterior serializado en JSON."
15624
- },
15625
- new_value: {
15626
- label: "Valor nuevo",
15627
- help: "Estado nuevo serializado en JSON."
15628
- },
15629
- ip_address: {
15630
- label: "Direcci\xF3n IP"
15631
- },
15632
- user_agent: {
15633
- label: "Agente de usuario"
15634
- },
15635
- tenant_id: {
15636
- label: "Inquilino",
15637
- help: "Contexto del tenant para el aislamiento multi-tenant."
15638
- },
15639
- metadata: {
15640
- label: "Metadatos",
15641
- help: "Contexto adicional serializado en JSON."
15642
- },
15643
- id: {
15644
- label: "ID de registro de auditor\xEDa"
15645
- }
15646
- },
15647
- _views: {
15648
- recent: {
15649
- label: "Recientes"
15650
- },
15651
- writes_only: {
15652
- label: "Escrituras"
15653
- },
15654
- auth_events: {
15655
- label: "Autenticaci\xF3n"
15656
- },
15657
- config_changes: {
15658
- label: "Configuraci\xF3n"
15659
- },
15660
- all_events: {
15661
- label: "Todos"
15662
- }
15663
- }
15664
- },
15665
- sys_presence: {
15666
- label: "Presencia",
15667
- pluralLabel: "Presencias",
15668
- description: "Seguimiento en tiempo real de presencia y actividad de usuarios",
15216
+ sys_notification: {
15217
+ label: "Notificaci\xF3n",
15218
+ pluralLabel: "Notificaciones",
15219
+ description: "Entradas del buz\xF3n de notificaciones por usuario",
15669
15220
  fields: {
15670
15221
  id: {
15671
- label: "ID de presencia"
15672
- },
15673
- created_at: {
15674
- label: "Creado el"
15675
- },
15676
- updated_at: {
15677
- label: "Actualizado el"
15678
- },
15679
- user_id: {
15680
- label: "Usuario"
15681
- },
15682
- session_id: {
15683
- label: "Sesi\xF3n"
15684
- },
15685
- status: {
15686
- label: "Estado",
15687
- options: {
15688
- online: "En l\xEDnea",
15689
- away: "Ausente",
15690
- busy: "Ocupado",
15691
- offline: "Desconectado"
15692
- }
15222
+ label: "ID de notificaci\xF3n"
15693
15223
  },
15694
- last_seen: {
15695
- label: "Visto por \xFAltima vez"
15224
+ topic: {
15225
+ label: "Topic",
15226
+ help: "Notification topic, e.g. task.assigned, collab.mention"
15696
15227
  },
15697
- current_location: {
15698
- label: "Ubicaci\xF3n actual"
15228
+ payload: {
15229
+ label: "Payload",
15230
+ help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
15699
15231
  },
15700
- device: {
15701
- label: "Dispositivo",
15232
+ severity: {
15233
+ label: "Severity",
15234
+ help: "Severity hint for rendering / filtering",
15702
15235
  options: {
15703
- desktop: "Escritorio",
15704
- mobile: "M\xF3vil",
15705
- tablet: "Tableta",
15706
- other: "Otro"
15236
+ info: "info",
15237
+ warning: "warning",
15238
+ critical: "critical"
15707
15239
  }
15708
15240
  },
15709
- custom_status: {
15710
- label: "Estado personalizado"
15711
- },
15712
- metadata: {
15713
- label: "Metadatos",
15714
- help: "Metadatos JSON arbitrarios asociados al estado de presencia (coincide con PresenceStateSchema.metadata)."
15715
- }
15716
- }
15717
- },
15718
- sys_activity: {
15719
- label: "Actividad",
15720
- pluralLabel: "Actividades",
15721
- description: "Entradas recientes del flujo de actividad (ligeras y desnormalizadas).",
15722
- fields: {
15723
- id: {
15724
- label: "ID de actividad"
15725
- },
15726
- timestamp: {
15727
- label: "Marca temporal"
15241
+ dedup_key: {
15242
+ label: "Dedup Key",
15243
+ help: "Idempotency key within a topic window; a repeat emit is a no-op"
15728
15244
  },
15729
- type: {
15730
- label: "Tipo",
15731
- options: {
15732
- created: "Creado",
15733
- updated: "Actualizado",
15734
- deleted: "Eliminado",
15735
- commented: "Comentado",
15736
- mentioned: "Mencionado",
15737
- shared: "Compartido",
15738
- assigned: "Asignado",
15739
- completed: "Completado",
15740
- login: "Inicio de sesi\xF3n",
15741
- logout: "Cierre de sesi\xF3n",
15742
- system: "Sistema"
15743
- }
15245
+ source_object: {
15246
+ label: "Objeto de origen",
15247
+ help: "Nombre del objeto del registro relacionado (p. ej. lead, opportunity)."
15744
15248
  },
15745
- summary: {
15746
- label: "Resumen",
15747
- help: "Resumen legible de una l\xEDnea."
15249
+ source_id: {
15250
+ label: "Registro de origen",
15251
+ help: "ID del registro dentro de source_object."
15748
15252
  },
15749
15253
  actor_id: {
15750
- label: "Actor"
15751
- },
15752
- actor_name: {
15753
- label: "Nombre del actor"
15754
- },
15755
- actor_avatar_url: {
15756
- label: "Avatar del actor"
15757
- },
15758
- object_name: {
15759
- label: "Objeto",
15760
- help: "Nombre corto del objeto de destino (p. ej. account, sys_user)."
15761
- },
15762
- record_id: {
15763
- label: "ID de registro"
15764
- },
15765
- record_label: {
15766
- label: "Nombre visible del registro",
15767
- help: "Nombre visible del registro de destino en el momento de escritura."
15768
- },
15769
- url: {
15770
- label: "URL",
15771
- help: "Enlace profundo opcional al destino de la actividad."
15772
- },
15773
- environment_id: {
15774
- label: "Proyecto",
15775
- help: "Contexto del proyecto (implementaciones multiproyecto)."
15776
- },
15777
- metadata: {
15778
- label: "Metadatos",
15779
- help: "Contexto adicional serializado en JSON."
15780
- }
15781
- }
15782
- },
15783
- sys_comment: {
15784
- label: "Comentario",
15785
- pluralLabel: "Comentarios",
15786
- description: "Comentarios en hilo adjuntos a registros mediante thread_id.",
15787
- fields: {
15788
- id: {
15789
- label: "ID de comentario"
15790
- },
15791
- thread_id: {
15792
- label: "Hilo",
15793
- help: "Identificador del hilo; por convenci\xF3n `{object}:{record_id}` (p. ej. `sys_user:abc123`)."
15794
- },
15795
- parent_id: {
15796
- label: "Comentario principal",
15797
- help: "Comentario principal opcional para respuestas anidadas."
15798
- },
15799
- reply_count: {
15800
- label: "N\xFAmero de respuestas"
15801
- },
15802
- author_id: {
15803
- label: "Autor"
15804
- },
15805
- author_name: {
15806
- label: "Nombre del autor"
15807
- },
15808
- author_avatar_url: {
15809
- label: "Avatar del autor"
15810
- },
15811
- body: {
15812
- label: "Contenido",
15813
- help: "Texto del comentario (compatible con Markdown)."
15814
- },
15815
- mentions: {
15816
- label: "Menciones",
15817
- help: "Matriz JSON de objetos @mention."
15818
- },
15819
- reactions: {
15820
- label: "Reacciones",
15821
- help: "Matriz JSON de objetos de reacci\xF3n emoji."
15822
- },
15823
- is_edited: {
15824
- label: "Editado"
15825
- },
15826
- edited_at: {
15827
- label: "Editado el"
15828
- },
15829
- visibility: {
15830
- label: "Visibilidad",
15831
- options: {
15832
- public: "P\xFAblico",
15833
- internal: "Interno",
15834
- private: "Privado"
15835
- }
15254
+ label: "Actor",
15255
+ help: "Usuario que provoc\xF3 la notificaci\xF3n (quien menciona, quien asigna)."
15836
15256
  },
15837
15257
  created_at: {
15838
15258
  label: "Creado el"
15259
+ }
15260
+ },
15261
+ _views: {
15262
+ recent: {
15263
+ label: "Recent"
15839
15264
  },
15840
- updated_at: {
15841
- label: "Actualizado el"
15265
+ by_topic: {
15266
+ label: "By Topic"
15842
15267
  }
15843
15268
  }
15844
15269
  },
@@ -15889,71 +15314,17 @@ var esESObjects = {
15889
15314
  shared_users: "Usuarios compartidos"
15890
15315
  }
15891
15316
  },
15892
- uploaded_by: {
15893
- label: "Subido por"
15894
- },
15895
- description: {
15896
- label: "Descripci\xF3n"
15897
- },
15898
- created_at: {
15899
- label: "Creado el"
15900
- },
15901
- updated_at: {
15902
- label: "Actualizado el"
15903
- }
15904
- }
15905
- },
15906
- sys_notification: {
15907
- label: "Notificaci\xF3n",
15908
- pluralLabel: "Notificaciones",
15909
- description: "Entradas del buz\xF3n de notificaciones por usuario",
15910
- fields: {
15911
- id: {
15912
- label: "ID de notificaci\xF3n"
15913
- },
15914
- topic: {
15915
- label: "Topic",
15916
- help: "Notification topic, e.g. task.assigned, collab.mention"
15917
- },
15918
- payload: {
15919
- label: "Payload",
15920
- help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
15921
- },
15922
- severity: {
15923
- label: "Severity",
15924
- help: "Severity hint for rendering / filtering",
15925
- options: {
15926
- info: "info",
15927
- warning: "warning",
15928
- critical: "critical"
15929
- }
15930
- },
15931
- dedup_key: {
15932
- label: "Dedup Key",
15933
- help: "Idempotency key within a topic window; a repeat emit is a no-op"
15934
- },
15935
- source_object: {
15936
- label: "Objeto de origen",
15937
- help: "Nombre del objeto del registro relacionado (p. ej. lead, opportunity)."
15938
- },
15939
- source_id: {
15940
- label: "Registro de origen",
15941
- help: "ID del registro dentro de source_object."
15317
+ uploaded_by: {
15318
+ label: "Subido por"
15942
15319
  },
15943
- actor_id: {
15944
- label: "Actor",
15945
- help: "Usuario que provoc\xF3 la notificaci\xF3n (quien menciona, quien asigna)."
15320
+ description: {
15321
+ label: "Descripci\xF3n"
15946
15322
  },
15947
15323
  created_at: {
15948
15324
  label: "Creado el"
15949
- }
15950
- },
15951
- _views: {
15952
- recent: {
15953
- label: "Recent"
15954
15325
  },
15955
- by_topic: {
15956
- label: "By Topic"
15326
+ updated_at: {
15327
+ label: "Actualizado el"
15957
15328
  }
15958
15329
  }
15959
15330
  },
@@ -16861,6 +16232,11 @@ var esESObjects = {
16861
16232
  label: "Texto cifrado",
16862
16233
  help: "Blob de texto cifrado codificado por el proveedor (base64 / JSON). La implementaci\xF3n lo define; solo el ICryptoProvider correspondiente puede leerlo."
16863
16234
  }
16235
+ },
16236
+ _views: {
16237
+ all: {
16238
+ label: "All Secrets"
16239
+ }
16864
16240
  }
16865
16241
  },
16866
16242
  sys_setting_audit: {
@@ -16936,6 +16312,11 @@ var esESObjects = {
16936
16312
  label: "ID de solicitud",
16937
16313
  help: "Se correlaciona con sys_audit_log / tracing."
16938
16314
  }
16315
+ },
16316
+ _views: {
16317
+ recent: {
16318
+ label: "Recent"
16319
+ }
16939
16320
  }
16940
16321
  }
16941
16322
  };
@@ -17818,6 +17199,70 @@ var enMetadataForms = {
17818
17199
  datasource: {
17819
17200
  label: "Datasource",
17820
17201
  helpText: 'Target datasource ID (default: "default")'
17202
+ },
17203
+ lifecycle: {
17204
+ label: "Lifecycle",
17205
+ helpText: "Data lifecycle contract (ADR-0057): how long rows live and how space is reclaimed. Leave empty for permanent record semantics. Non-record classes require at least one bounding policy (retention, TTL, or rotation)."
17206
+ },
17207
+ "lifecycle.class": {
17208
+ label: "Class",
17209
+ helpText: "Persistence contract for the rows of this object"
17210
+ },
17211
+ "lifecycle.retention": {
17212
+ label: "Retention",
17213
+ helpText: "Age-based retention window"
17214
+ },
17215
+ "lifecycle.retention.maxAge": {
17216
+ label: "Max Age",
17217
+ helpText: 'Rows older than this (by created_at) are reaped. Duration literal: h/d/w/y, e.g. "30d"'
17218
+ },
17219
+ "lifecycle.ttl": {
17220
+ label: "Ttl",
17221
+ helpText: "Per-row TTL expiry"
17222
+ },
17223
+ "lifecycle.ttl.field": {
17224
+ label: "Field",
17225
+ helpText: "Timestamp field the TTL is measured from (e.g. expires_at)"
17226
+ },
17227
+ "lifecycle.ttl.expireAfter": {
17228
+ label: "Expire After",
17229
+ helpText: 'Rows expire this long after the field, e.g. "1d"'
17230
+ },
17231
+ "lifecycle.storage": {
17232
+ label: "Storage",
17233
+ helpText: "Physical rotation for high-frequency telemetry (SQLite: O(1) shard DROP)"
17234
+ },
17235
+ "lifecycle.storage.strategy": {
17236
+ label: "Strategy",
17237
+ helpText: "Storage strategy"
17238
+ },
17239
+ "lifecycle.storage.shards": {
17240
+ label: "Shards",
17241
+ helpText: "Shards retained; total window = shards \xD7 unit"
17242
+ },
17243
+ "lifecycle.storage.unit": {
17244
+ label: "Unit",
17245
+ helpText: "Time width of one shard"
17246
+ },
17247
+ "lifecycle.archive": {
17248
+ label: "Archive",
17249
+ helpText: "Cold-store hand-off (audit class). Rows are never hot-deleted before the archive copy succeeded."
17250
+ },
17251
+ "lifecycle.archive.after": {
17252
+ label: "After",
17253
+ helpText: "Archive rows older than this \u2014 must equal retention.maxAge"
17254
+ },
17255
+ "lifecycle.archive.to": {
17256
+ label: "To",
17257
+ helpText: "Target datasource name for cold storage"
17258
+ },
17259
+ "lifecycle.archive.keep": {
17260
+ label: "Keep",
17261
+ helpText: 'How long the archive keeps rows (empty = forever), e.g. "7y"'
17262
+ },
17263
+ "lifecycle.reclaim": {
17264
+ label: "Reclaim",
17265
+ helpText: "Reclaim driver space after sweeps (default on for non-record classes)"
17821
17266
  }
17822
17267
  }
17823
17268
  },
@@ -17926,10 +17371,6 @@ var enMetadataForms = {
17926
17371
  label: "Summary Operations",
17927
17372
  helpText: "Roll-up summary configuration (for parent-child relationships)"
17928
17373
  },
17929
- cached: {
17930
- label: "Cached",
17931
- helpText: "Caching configuration for computed fields"
17932
- },
17933
17374
  columnName: {
17934
17375
  label: "Column Name",
17935
17376
  helpText: "Physical column name in database (defaults to field name)"
@@ -17957,28 +17398,9 @@ var enMetadataForms = {
17957
17398
  sortable: {
17958
17399
  label: "Sortable",
17959
17400
  helpText: "Allow sorting lists by this field"
17960
- },
17961
- auditTrail: {
17962
- label: "Audit Trail",
17963
- helpText: "Track detailed changes with user and timestamp"
17964
- },
17965
- trackFeedHistory: {
17966
- label: "Track Feed History",
17967
- helpText: "Show changes in activity feed"
17968
- },
17969
- encryptionConfig: {
17970
- label: "Encryption Config",
17971
- helpText: "Field-level encryption (GDPR/HIPAA/PCI-DSS)"
17972
- },
17973
- maskingRule: {
17974
- label: "Masking Rule",
17975
- helpText: "Data masking rules for PII protection"
17976
17401
  }
17977
17402
  }
17978
17403
  },
17979
- trigger: {
17980
- label: "Trigger"
17981
- },
17982
17404
  validation: {
17983
17405
  label: "Validation Rule"
17984
17406
  },
@@ -18055,12 +17477,36 @@ var enMetadataForms = {
18055
17477
  onError: {
18056
17478
  label: "On Error"
18057
17479
  },
17480
+ timeout: {
17481
+ label: "Timeout",
17482
+ helpText: "Abort the hook after N milliseconds"
17483
+ },
18058
17484
  condition: {
18059
17485
  label: "Condition",
18060
17486
  helpText: "Optional formula \u2014 skip the hook when this evaluates to false"
17487
+ },
17488
+ retryPolicy: {
17489
+ label: "Retry Policy",
17490
+ helpText: "Retry on failure \u2014 most useful for async hooks"
17491
+ },
17492
+ "retryPolicy.maxRetries": {
17493
+ label: "Max Retries",
17494
+ helpText: "Maximum retry attempts"
17495
+ },
17496
+ "retryPolicy.backoffMs": {
17497
+ label: "Backoff Ms",
17498
+ helpText: "Delay between retries (ms)"
18061
17499
  }
18062
17500
  }
18063
17501
  },
17502
+ seed: {
17503
+ label: "Seed Data",
17504
+ description: "Fixture / initialization data applied on publish"
17505
+ },
17506
+ mapping: {
17507
+ label: "Import Mapping",
17508
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
17509
+ },
18064
17510
  view: {
18065
17511
  label: "View",
18066
17512
  sections: {
@@ -18232,6 +17678,10 @@ var enMetadataForms = {
18232
17678
  label: "Layout",
18233
17679
  description: "Page regions and components placed within them."
18234
17680
  },
17681
+ interface: {
17682
+ label: "Interface (list pages)",
17683
+ description: "Interface mode (Airtable parity): the page defines its own data surface directly \u2014 columns, filters, visualizations and toolbar \u2014 no inheriting from a separate view."
17684
+ },
18235
17685
  advanced: {
18236
17686
  label: "Advanced",
18237
17687
  description: "Activation, audience, and accessibility."
@@ -18274,6 +17724,58 @@ var enMetadataForms = {
18274
17724
  label: "Regions",
18275
17725
  helpText: "Layout regions (header, main, sidebar, footer) with components"
18276
17726
  },
17727
+ interfaceConfig: {
17728
+ label: "Interface Config",
17729
+ helpText: "The page IS the view: source picks the object, columns/filterBy are defined directly here; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar."
17730
+ },
17731
+ "interfaceConfig.source": {
17732
+ label: "Source",
17733
+ helpText: "Object this page reads from"
17734
+ },
17735
+ "interfaceConfig.columns": {
17736
+ label: "Columns",
17737
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
17738
+ },
17739
+ "interfaceConfig.filterBy": {
17740
+ label: "Filter By",
17741
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
17742
+ },
17743
+ "interfaceConfig.levels": {
17744
+ label: "Levels",
17745
+ helpText: "Hierarchy levels to display (tree-like sources)"
17746
+ },
17747
+ "interfaceConfig.appearance": {
17748
+ label: "Appearance",
17749
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
17750
+ },
17751
+ "interfaceConfig.userFilters": {
17752
+ label: "User Filters",
17753
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
17754
+ },
17755
+ "interfaceConfig.userActions": {
17756
+ label: "User Actions",
17757
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
17758
+ },
17759
+ "interfaceConfig.addRecord": {
17760
+ label: "Add Record",
17761
+ helpText: "Add-record entry point"
17762
+ },
17763
+ "interfaceConfig.buttons": {
17764
+ label: "Buttons",
17765
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
17766
+ },
17767
+ "interfaceConfig.recordAction": {
17768
+ label: "Record Action",
17769
+ helpText: "How clicking a record opens its detail"
17770
+ },
17771
+ "interfaceConfig.showRecordCount": {
17772
+ label: "Show Record Count",
17773
+ helpText: "Show the record count bar"
17774
+ },
17775
+ "interfaceConfig.allowPrinting": {
17776
+ label: "Allow Printing",
17777
+ helpText: "Allow users to print this page"
17778
+ },
18277
17779
  isDefault: {
18278
17780
  label: "Is Default",
18279
17781
  helpText: "Set as default page for this page type"
@@ -18522,6 +18024,22 @@ var enMetadataForms = {
18522
18024
  label: "Body",
18523
18025
  helpText: "JavaScript code to execute"
18524
18026
  },
18027
+ "body.language": {
18028
+ label: "Language",
18029
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
18030
+ },
18031
+ "body.source": {
18032
+ label: "Source",
18033
+ helpText: "Function body source \u2014 no top-level imports"
18034
+ },
18035
+ "body.capabilities": {
18036
+ label: "Capabilities",
18037
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
18038
+ },
18039
+ "body.timeoutMs": {
18040
+ label: "Timeout Ms",
18041
+ helpText: "Per-invocation timeout (ms)"
18042
+ },
18525
18043
  params: {
18526
18044
  label: "Params",
18527
18045
  helpText: "User input parameters (show form before executing)"
@@ -18562,9 +18080,9 @@ var enMetadataForms = {
18562
18080
  label: "Bulk Enabled",
18563
18081
  helpText: "Allow applying to multiple selected records"
18564
18082
  },
18565
- aiExposed: {
18566
- label: "Ai Exposed",
18567
- helpText: "Allow AI agents to call this action"
18083
+ ai: {
18084
+ label: "Ai",
18085
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
18568
18086
  },
18569
18087
  recordIdParam: {
18570
18088
  label: "Record Id Param",
@@ -18587,13 +18105,9 @@ var enMetadataForms = {
18587
18105
  label: "Basics",
18588
18106
  description: "Identity and data source."
18589
18107
  },
18590
- columns: {
18591
- label: "Columns",
18592
- description: "Columns shown in the report output."
18593
- },
18594
- groupings: {
18595
- label: "Groupings",
18596
- description: "How rows (and columns, for matrix reports) are grouped."
18108
+ dataset_binding: {
18109
+ label: "Dataset binding",
18110
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
18597
18111
  },
18598
18112
  joined_blocks: {
18599
18113
  label: "Joined blocks",
@@ -18619,33 +18133,37 @@ var enMetadataForms = {
18619
18133
  description: {
18620
18134
  label: "Description"
18621
18135
  },
18622
- objectName: {
18623
- label: "Object Name",
18624
- helpText: "Data source object"
18625
- },
18626
18136
  type: {
18627
18137
  label: "Type",
18628
18138
  helpText: "Report type: tabular/summary/matrix/joined"
18629
18139
  },
18140
+ dataset: {
18141
+ label: "Dataset",
18142
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
18143
+ },
18144
+ values: {
18145
+ label: "Values",
18146
+ helpText: "Measure names (from the dataset) to display"
18147
+ },
18148
+ rows: {
18149
+ label: "Rows",
18150
+ helpText: "Dimension names (from the dataset) to group rows by"
18151
+ },
18630
18152
  columns: {
18631
18153
  label: "Columns",
18632
18154
  helpText: "Columns to display in the report"
18633
18155
  },
18634
- groupingsDown: {
18635
- label: "Groupings Down",
18636
- helpText: "Row grouping levels"
18637
- },
18638
- groupingsAcross: {
18639
- label: "Groupings Across",
18640
- helpText: "Column grouping levels (matrix only)"
18156
+ drilldown: {
18157
+ label: "Drilldown",
18158
+ helpText: "Click an aggregated row/cell to open the underlying records"
18641
18159
  },
18642
18160
  blocks: {
18643
18161
  label: "Blocks",
18644
18162
  helpText: "Join multiple objects (joined report only)"
18645
18163
  },
18646
- filter: {
18647
- label: "Filter",
18648
- helpText: "Report-level filters"
18164
+ runtimeFilter: {
18165
+ label: "Runtime Filter",
18166
+ helpText: "Render-time scope filter, ANDed at query time"
18649
18167
  },
18650
18168
  chart: {
18651
18169
  label: "Chart",
@@ -18661,6 +18179,62 @@ var enMetadataForms = {
18661
18179
  }
18662
18180
  }
18663
18181
  },
18182
+ dataset: {
18183
+ label: "Dataset",
18184
+ description: "Analytics semantic layer \u2014 dimensions & measures",
18185
+ sections: {
18186
+ basics: {
18187
+ label: "Basics",
18188
+ description: "Dataset identity."
18189
+ },
18190
+ source: {
18191
+ label: "Source",
18192
+ description: "The base object, the relationships to join, and the dataset\u2019s intrinsic scope. Joins are derived from the object graph \u2014 pick relationship (lookup / master_detail) names, never write an ON clause."
18193
+ },
18194
+ dimensions: {
18195
+ label: "Dimensions",
18196
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
18197
+ },
18198
+ measures: {
18199
+ label: "Measures",
18200
+ description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/\u2026 of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
18201
+ }
18202
+ },
18203
+ fields: {
18204
+ name: {
18205
+ label: "Name",
18206
+ helpText: "snake_case unique identifier"
18207
+ },
18208
+ label: {
18209
+ label: "Label",
18210
+ helpText: "Display name"
18211
+ },
18212
+ description: {
18213
+ label: "Description",
18214
+ helpText: "What this dataset measures"
18215
+ },
18216
+ object: {
18217
+ label: "Object",
18218
+ helpText: "Base object \u2014 the FROM"
18219
+ },
18220
+ include: {
18221
+ label: "Include",
18222
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
18223
+ },
18224
+ filter: {
18225
+ label: "Filter",
18226
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
18227
+ },
18228
+ dimensions: {
18229
+ label: "Dimensions",
18230
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
18231
+ },
18232
+ measures: {
18233
+ label: "Measures",
18234
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
18235
+ }
18236
+ }
18237
+ },
18664
18238
  flow: {
18665
18239
  label: "Flow",
18666
18240
  sections: {
@@ -18740,15 +18314,6 @@ var enMetadataForms = {
18740
18314
  translation: {
18741
18315
  label: "Translation"
18742
18316
  },
18743
- router: {
18744
- label: "Router"
18745
- },
18746
- function: {
18747
- label: "Function"
18748
- },
18749
- service: {
18750
- label: "Service"
18751
- },
18752
18317
  email_template: {
18753
18318
  label: "Email Template",
18754
18319
  sections: {
@@ -18829,6 +18394,14 @@ var enMetadataForms = {
18829
18394
  }
18830
18395
  }
18831
18396
  },
18397
+ doc: {
18398
+ label: "Documentation",
18399
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
18400
+ },
18401
+ book: {
18402
+ label: "Documentation Book",
18403
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
18404
+ },
18832
18405
  permission: {
18833
18406
  label: "Permission Set",
18834
18407
  sections: {
@@ -19389,6 +18962,70 @@ var zhCNMetadataForms = {
19389
18962
  datasource: {
19390
18963
  label: "\u6570\u636E\u6E90",
19391
18964
  helpText: '\u76EE\u6807\u6570\u636E\u6E90 ID\uFF08\u9ED8\u8BA4\uFF1A"default"\uFF09'
18965
+ },
18966
+ lifecycle: {
18967
+ label: "\u6570\u636E\u751F\u547D\u5468\u671F",
18968
+ helpText: "\u6570\u636E\u751F\u547D\u5468\u671F\u5951\u7EA6\uFF08ADR-0057\uFF09\uFF1A\u6570\u636E\u4FDD\u7559\u591A\u4E45\u3001\u7A7A\u95F4\u5982\u4F55\u56DE\u6536\u3002\u7559\u7A7A\u5373\u6C38\u4E45\u4FDD\u7559\uFF08record \u8BED\u4E49\uFF09\u3002\u975E record \u7C7B\u5FC5\u987B\u58F0\u660E\u81F3\u5C11\u4E00\u4E2A\u754C\u5B9A\u7B56\u7565\uFF08\u4FDD\u7559\u671F\u3001TTL \u6216\u8F6E\u8F6C\uFF09\u3002"
18969
+ },
18970
+ "lifecycle.class": {
18971
+ label: "\u751F\u547D\u5468\u671F\u7C7B\u522B",
18972
+ helpText: "\u672C\u5BF9\u8C61\u6570\u636E\u7684\u6301\u4E45\u5316\u5951\u7EA6"
18973
+ },
18974
+ "lifecycle.retention": {
18975
+ label: "\u4FDD\u7559\u671F",
18976
+ helpText: "\u6309\u6570\u636E\u5E74\u9F84\u754C\u5B9A\u7684\u4FDD\u7559\u7A97\u53E3"
18977
+ },
18978
+ "lifecycle.retention.maxAge": {
18979
+ label: "\u6700\u957F\u4FDD\u7559",
18980
+ helpText: '\u65E9\u4E8E\u8BE5\u7A97\u53E3\uFF08\u6309 created_at\uFF09\u7684\u884C\u5C06\u88AB\u6E05\u7406\u3002\u65F6\u957F\u5B57\u9762\u91CF\uFF1Ah/d/w/y\uFF0C\u5982 "30d"'
18981
+ },
18982
+ "lifecycle.ttl": {
18983
+ label: "TTL \u8FC7\u671F",
18984
+ helpText: "\u6309\u884C\u7684 TTL \u81EA\u52A8\u8FC7\u671F"
18985
+ },
18986
+ "lifecycle.ttl.field": {
18987
+ label: "\u65F6\u95F4\u5B57\u6BB5",
18988
+ helpText: "TTL \u8BA1\u65F6\u8D77\u70B9\u7684\u65F6\u95F4\u6233\u5B57\u6BB5\uFF08\u5982 expires_at\uFF09"
18989
+ },
18990
+ "lifecycle.ttl.expireAfter": {
18991
+ label: "\u8FC7\u671F\u65F6\u957F",
18992
+ helpText: '\u884C\u5728\u8BE5\u5B57\u6BB5\u4E4B\u540E\u8FD9\u4E48\u4E45\u8FC7\u671F\uFF0C\u5982 "1d"'
18993
+ },
18994
+ "lifecycle.storage": {
18995
+ label: "\u5B58\u50A8\u7B56\u7565",
18996
+ helpText: "\u9AD8\u9891\u9065\u6D4B\u7684\u7269\u7406\u8F6E\u8F6C\uFF08SQLite\uFF1AO(1) \u5206\u7247 DROP\uFF09"
18997
+ },
18998
+ "lifecycle.storage.strategy": {
18999
+ label: "\u7B56\u7565",
19000
+ helpText: "\u5B58\u50A8\u7B56\u7565"
19001
+ },
19002
+ "lifecycle.storage.shards": {
19003
+ label: "\u5206\u7247\u6570",
19004
+ helpText: "\u4FDD\u7559\u7684\u5206\u7247\u6570\u91CF\uFF1B\u603B\u7A97\u53E3 = \u5206\u7247\u6570 \xD7 \u5355\u4F4D"
19005
+ },
19006
+ "lifecycle.storage.unit": {
19007
+ label: "\u5206\u7247\u5355\u4F4D",
19008
+ helpText: "\u5355\u4E2A\u5206\u7247\u7684\u65F6\u95F4\u5BBD\u5EA6"
19009
+ },
19010
+ "lifecycle.archive": {
19011
+ label: "\u5F52\u6863",
19012
+ helpText: "\u51B7\u5B58\u4EA4\u63A5\uFF08audit \u7C7B\uFF09\u3002\u5F52\u6863\u62F7\u8D1D\u6210\u529F\u524D\uFF0C\u884C\u7EDD\u4E0D\u4F1A\u88AB\u70ED\u5220\u9664\u3002"
19013
+ },
19014
+ "lifecycle.archive.after": {
19015
+ label: "\u5F52\u6863\u65F6\u70B9",
19016
+ helpText: "\u65E9\u4E8E\u8BE5\u7A97\u53E3\u7684\u884C\u8FDB\u5165\u5F52\u6863 \u2014 \u5FC5\u987B\u7B49\u4E8E retention.maxAge"
19017
+ },
19018
+ "lifecycle.archive.to": {
19019
+ label: "\u5F52\u6863\u6570\u636E\u6E90",
19020
+ helpText: "\u51B7\u5B58\u50A8\u7684\u76EE\u6807\u6570\u636E\u6E90\u540D\u79F0"
19021
+ },
19022
+ "lifecycle.archive.keep": {
19023
+ label: "\u5F52\u6863\u4FDD\u7559",
19024
+ helpText: '\u5F52\u6863\u4E2D\u4FDD\u7559\u591A\u4E45\uFF08\u7559\u7A7A = \u6C38\u4E45\uFF09\uFF0C\u5982 "7y"'
19025
+ },
19026
+ "lifecycle.reclaim": {
19027
+ label: "\u7A7A\u95F4\u56DE\u6536",
19028
+ helpText: "\u6E05\u7406\u540E\u56DE\u6536\u9A71\u52A8\u5C42\u7A7A\u95F4\uFF08\u975E record \u7C7B\u9ED8\u8BA4\u5F00\u542F\uFF09"
19392
19029
  }
19393
19030
  }
19394
19031
  },
@@ -19497,10 +19134,6 @@ var zhCNMetadataForms = {
19497
19134
  label: "\u6C47\u603B\u64CD\u4F5C",
19498
19135
  helpText: "\u7236\u5B50\u5173\u7CFB\u4E0B\u7684\u6C47\u603B\u805A\u5408\u914D\u7F6E"
19499
19136
  },
19500
- cached: {
19501
- label: "\u7F13\u5B58",
19502
- helpText: "\u8BA1\u7B97\u5B57\u6BB5\u7684\u7F13\u5B58\u914D\u7F6E"
19503
- },
19504
19137
  columnName: {
19505
19138
  label: "\u5217\u540D",
19506
19139
  helpText: "\u6570\u636E\u5E93\u4E2D\u7684\u7269\u7406\u5217\u540D\uFF08\u9ED8\u8BA4\u4E0E\u5B57\u6BB5\u540D\u76F8\u540C\uFF09"
@@ -19528,28 +19161,9 @@ var zhCNMetadataForms = {
19528
19161
  sortable: {
19529
19162
  label: "\u53EF\u6392\u5E8F",
19530
19163
  helpText: "\u5141\u8BB8\u6309\u6B64\u5B57\u6BB5\u6392\u5E8F"
19531
- },
19532
- auditTrail: {
19533
- label: "\u5BA1\u8BA1\u8DDF\u8E2A",
19534
- helpText: "\u8BB0\u5F55\u8BE6\u7EC6\u53D8\u66F4\u4E0E\u64CD\u4F5C\u4EBA\u3001\u65F6\u95F4\u6233"
19535
- },
19536
- trackFeedHistory: {
19537
- label: "\u52A8\u6001\u5386\u53F2\u8DDF\u8E2A",
19538
- helpText: "\u5728\u6D3B\u52A8\u52A8\u6001\u4E2D\u5C55\u793A\u53D8\u66F4"
19539
- },
19540
- encryptionConfig: {
19541
- label: "\u52A0\u5BC6\u914D\u7F6E",
19542
- helpText: "\u5B57\u6BB5\u7EA7\u52A0\u5BC6\uFF08GDPR / HIPAA / PCI-DSS\uFF09"
19543
- },
19544
- maskingRule: {
19545
- label: "\u63A9\u7801\u89C4\u5219",
19546
- helpText: "PII \u6570\u636E\u8131\u654F\u89C4\u5219"
19547
19164
  }
19548
19165
  }
19549
19166
  },
19550
- trigger: {
19551
- label: "\u89E6\u53D1\u5668"
19552
- },
19553
19167
  validation: {
19554
19168
  label: "\u9A8C\u8BC1\u89C4\u5219"
19555
19169
  },
@@ -19626,12 +19240,36 @@ var zhCNMetadataForms = {
19626
19240
  onError: {
19627
19241
  label: "\u9519\u8BEF\u5904\u7406"
19628
19242
  },
19243
+ timeout: {
19244
+ label: "Timeout",
19245
+ helpText: "Abort the hook after N milliseconds"
19246
+ },
19629
19247
  condition: {
19630
19248
  label: "\u6761\u4EF6",
19631
19249
  helpText: "\u53EF\u9009\u516C\u5F0F\u2014\u2014\u6C42\u503C\u4E3A false \u65F6\u8DF3\u8FC7\u8BE5\u94A9\u5B50"
19250
+ },
19251
+ retryPolicy: {
19252
+ label: "Retry Policy",
19253
+ helpText: "Retry on failure \u2014 most useful for async hooks"
19254
+ },
19255
+ "retryPolicy.maxRetries": {
19256
+ label: "Max Retries",
19257
+ helpText: "Maximum retry attempts"
19258
+ },
19259
+ "retryPolicy.backoffMs": {
19260
+ label: "Backoff Ms",
19261
+ helpText: "Delay between retries (ms)"
19632
19262
  }
19633
19263
  }
19634
19264
  },
19265
+ seed: {
19266
+ label: "Seed Data",
19267
+ description: "Fixture / initialization data applied on publish"
19268
+ },
19269
+ mapping: {
19270
+ label: "Import Mapping",
19271
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
19272
+ },
19635
19273
  view: {
19636
19274
  label: "\u89C6\u56FE",
19637
19275
  sections: {
@@ -19803,6 +19441,10 @@ var zhCNMetadataForms = {
19803
19441
  label: "\u5E03\u5C40",
19804
19442
  description: "\u9875\u9762\u533A\u5757\u4E0E\u7EC4\u4EF6"
19805
19443
  },
19444
+ interface: {
19445
+ label: "Interface (list pages)",
19446
+ description: "Interface mode (Airtable parity): the page defines its own data surface directly \u2014 columns, filters, visualizations and toolbar \u2014 no inheriting from a separate view."
19447
+ },
19806
19448
  advanced: {
19807
19449
  label: "\u9AD8\u7EA7\u8BBE\u7F6E",
19808
19450
  description: "\u9ED8\u8BA4\u9875\u3001\u7C7B\u578B\u4E0E\u5206\u914D"
@@ -19845,6 +19487,58 @@ var zhCNMetadataForms = {
19845
19487
  label: "\u533A\u57DF",
19846
19488
  helpText: "\u5E03\u5C40\u533A\u57DF\uFF08header\u3001main\u3001sidebar\u3001footer\uFF09\u53CA\u5176\u7EC4\u4EF6"
19847
19489
  },
19490
+ interfaceConfig: {
19491
+ label: "Interface Config",
19492
+ helpText: "The page IS the view: source picks the object, columns/filterBy are defined directly here; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar."
19493
+ },
19494
+ "interfaceConfig.source": {
19495
+ label: "Source",
19496
+ helpText: "Object this page reads from"
19497
+ },
19498
+ "interfaceConfig.columns": {
19499
+ label: "Columns",
19500
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
19501
+ },
19502
+ "interfaceConfig.filterBy": {
19503
+ label: "Filter By",
19504
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
19505
+ },
19506
+ "interfaceConfig.levels": {
19507
+ label: "Levels",
19508
+ helpText: "Hierarchy levels to display (tree-like sources)"
19509
+ },
19510
+ "interfaceConfig.appearance": {
19511
+ label: "Appearance",
19512
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
19513
+ },
19514
+ "interfaceConfig.userFilters": {
19515
+ label: "User Filters",
19516
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
19517
+ },
19518
+ "interfaceConfig.userActions": {
19519
+ label: "User Actions",
19520
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
19521
+ },
19522
+ "interfaceConfig.addRecord": {
19523
+ label: "Add Record",
19524
+ helpText: "Add-record entry point"
19525
+ },
19526
+ "interfaceConfig.buttons": {
19527
+ label: "Buttons",
19528
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
19529
+ },
19530
+ "interfaceConfig.recordAction": {
19531
+ label: "Record Action",
19532
+ helpText: "How clicking a record opens its detail"
19533
+ },
19534
+ "interfaceConfig.showRecordCount": {
19535
+ label: "Show Record Count",
19536
+ helpText: "Show the record count bar"
19537
+ },
19538
+ "interfaceConfig.allowPrinting": {
19539
+ label: "Allow Printing",
19540
+ helpText: "Allow users to print this page"
19541
+ },
19848
19542
  isDefault: {
19849
19543
  label: "\u9ED8\u8BA4",
19850
19544
  helpText: "\u8BBE\u4E3A\u8BE5\u9875\u9762\u7C7B\u578B\u7684\u9ED8\u8BA4\u9875"
@@ -20093,6 +19787,22 @@ var zhCNMetadataForms = {
20093
19787
  label: "\u6B63\u6587",
20094
19788
  helpText: "\u8981\u6267\u884C\u7684 JavaScript \u4EE3\u7801"
20095
19789
  },
19790
+ "body.language": {
19791
+ label: "Language",
19792
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
19793
+ },
19794
+ "body.source": {
19795
+ label: "Source",
19796
+ helpText: "Function body source \u2014 no top-level imports"
19797
+ },
19798
+ "body.capabilities": {
19799
+ label: "Capabilities",
19800
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
19801
+ },
19802
+ "body.timeoutMs": {
19803
+ label: "Timeout Ms",
19804
+ helpText: "Per-invocation timeout (ms)"
19805
+ },
20096
19806
  params: {
20097
19807
  label: "\u53C2\u6570",
20098
19808
  helpText: "\u6267\u884C\u524D\u5411\u7528\u6237\u6536\u96C6\u7684\u8F93\u5165\u53C2\u6570"
@@ -20133,9 +19843,9 @@ var zhCNMetadataForms = {
20133
19843
  label: "\u6279\u91CF\u542F\u7528",
20134
19844
  helpText: "\u5141\u8BB8\u5BF9\u591A\u6761\u9009\u4E2D\u8BB0\u5F55\u6267\u884C"
20135
19845
  },
20136
- aiExposed: {
20137
- label: "\u66B4\u9732\u7ED9 AI",
20138
- helpText: "\u5141\u8BB8 AI \u667A\u80FD\u4F53\u8C03\u7528\u6B64\u64CD\u4F5C"
19846
+ ai: {
19847
+ label: "Ai",
19848
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
20139
19849
  },
20140
19850
  recordIdParam: {
20141
19851
  label: "\u8BB0\u5F55 ID \u53C2\u6570",
@@ -20158,13 +19868,9 @@ var zhCNMetadataForms = {
20158
19868
  label: "\u57FA\u7840\u4FE1\u606F",
20159
19869
  description: "\u540D\u79F0\u4E0E\u6570\u636E\u6E90"
20160
19870
  },
20161
- columns: {
20162
- label: "\u5217",
20163
- description: "\u9009\u62E9\u8981\u5C55\u793A\u7684\u5217"
20164
- },
20165
- groupings: {
20166
- label: "\u5206\u7EC4\u4E0E\u6C47\u603B",
20167
- description: "\u884C\u5217\u5206\u7EC4\u7EF4\u5EA6"
19871
+ dataset_binding: {
19872
+ label: "Dataset binding",
19873
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
20168
19874
  },
20169
19875
  joined_blocks: {
20170
19876
  label: "\u5173\u8054\u5BF9\u8C61",
@@ -20190,45 +19896,105 @@ var zhCNMetadataForms = {
20190
19896
  description: {
20191
19897
  label: "\u63CF\u8FF0"
20192
19898
  },
20193
- objectName: {
20194
- label: "\u5BF9\u8C61\u540D\u79F0",
20195
- helpText: "\u62A5\u8868\u6570\u636E\u6E90\u5BF9\u8C61"
20196
- },
20197
19899
  type: {
20198
19900
  label: "\u7C7B\u578B",
20199
19901
  helpText: "\u62A5\u8868\u7C7B\u578B\uFF1Atabular / summary / matrix / joined"
20200
19902
  },
19903
+ dataset: {
19904
+ label: "Dataset",
19905
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
19906
+ },
19907
+ values: {
19908
+ label: "Values",
19909
+ helpText: "Measure names (from the dataset) to display"
19910
+ },
19911
+ rows: {
19912
+ label: "Rows",
19913
+ helpText: "Dimension names (from the dataset) to group rows by"
19914
+ },
20201
19915
  columns: {
20202
19916
  label: "\u5217",
20203
19917
  helpText: "\u62A5\u8868\u4E2D\u663E\u793A\u7684\u5217"
20204
19918
  },
20205
- groupingsDown: {
20206
- label: "\u884C\u5206\u7EC4",
20207
- helpText: "\u884C\u65B9\u5411\u5206\u7EC4\u5C42\u7EA7"
19919
+ drilldown: {
19920
+ label: "Drilldown",
19921
+ helpText: "Click an aggregated row/cell to open the underlying records"
19922
+ },
19923
+ blocks: {
19924
+ label: "\u5206\u5757",
19925
+ helpText: "joined \u62A5\u8868\u7684\u8054\u5408\u67E5\u8BE2\u5757"
19926
+ },
19927
+ runtimeFilter: {
19928
+ label: "Runtime Filter",
19929
+ helpText: "Render-time scope filter, ANDed at query time"
19930
+ },
19931
+ chart: {
19932
+ label: "\u56FE\u8868",
19933
+ helpText: "\u56FE\u8868\u7C7B\u578B\u4E0E\u914D\u7F6E"
19934
+ },
19935
+ aria: {
19936
+ label: "\u65E0\u969C\u788D",
19937
+ helpText: "\u65E0\u969C\u788D\u6807\u7B7E\u4E0E\u89D2\u8272"
19938
+ },
19939
+ performance: {
19940
+ label: "\u6027\u80FD",
19941
+ helpText: "\u6027\u80FD\u4E0E\u7F13\u5B58\u7B56\u7565"
19942
+ }
19943
+ }
19944
+ },
19945
+ dataset: {
19946
+ label: "Dataset",
19947
+ description: "Analytics semantic layer \u2014 dimensions & measures",
19948
+ sections: {
19949
+ basics: {
19950
+ label: "Basics",
19951
+ description: "Dataset identity."
19952
+ },
19953
+ source: {
19954
+ label: "Source",
19955
+ description: "The base object, the relationships to join, and the dataset\u2019s intrinsic scope. Joins are derived from the object graph \u2014 pick relationship (lookup / master_detail) names, never write an ON clause."
19956
+ },
19957
+ dimensions: {
19958
+ label: "Dimensions",
19959
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
19960
+ },
19961
+ measures: {
19962
+ label: "Measures",
19963
+ description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/\u2026 of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
19964
+ }
19965
+ },
19966
+ fields: {
19967
+ name: {
19968
+ label: "Name",
19969
+ helpText: "snake_case unique identifier"
19970
+ },
19971
+ label: {
19972
+ label: "Label",
19973
+ helpText: "Display name"
19974
+ },
19975
+ description: {
19976
+ label: "Description",
19977
+ helpText: "What this dataset measures"
20208
19978
  },
20209
- groupingsAcross: {
20210
- label: "\u5217\u5206\u7EC4",
20211
- helpText: "\u5217\u65B9\u5411\u5206\u7EC4\u5C42\u7EA7\uFF08matrix \u62A5\u8868\uFF09"
19979
+ object: {
19980
+ label: "Object",
19981
+ helpText: "Base object \u2014 the FROM"
20212
19982
  },
20213
- blocks: {
20214
- label: "\u5206\u5757",
20215
- helpText: "joined \u62A5\u8868\u7684\u8054\u5408\u67E5\u8BE2\u5757"
19983
+ include: {
19984
+ label: "Include",
19985
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
20216
19986
  },
20217
19987
  filter: {
20218
- label: "\u7B5B\u9009",
20219
- helpText: "\u62A5\u8868\u7EA7\u522B\u7684\u7B5B\u9009\u89C4\u5219"
20220
- },
20221
- chart: {
20222
- label: "\u56FE\u8868",
20223
- helpText: "\u56FE\u8868\u7C7B\u578B\u4E0E\u914D\u7F6E"
19988
+ label: "Filter",
19989
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
20224
19990
  },
20225
- aria: {
20226
- label: "\u65E0\u969C\u788D",
20227
- helpText: "\u65E0\u969C\u788D\u6807\u7B7E\u4E0E\u89D2\u8272"
19991
+ dimensions: {
19992
+ label: "Dimensions",
19993
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
20228
19994
  },
20229
- performance: {
20230
- label: "\u6027\u80FD",
20231
- helpText: "\u6027\u80FD\u4E0E\u7F13\u5B58\u7B56\u7565"
19995
+ measures: {
19996
+ label: "Measures",
19997
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
20232
19998
  }
20233
19999
  }
20234
20000
  },
@@ -20311,15 +20077,6 @@ var zhCNMetadataForms = {
20311
20077
  translation: {
20312
20078
  label: "\u7FFB\u8BD1"
20313
20079
  },
20314
- router: {
20315
- label: "\u8DEF\u7531\u5668"
20316
- },
20317
- function: {
20318
- label: "\u51FD\u6570"
20319
- },
20320
- service: {
20321
- label: "\u670D\u52A1"
20322
- },
20323
20080
  email_template: {
20324
20081
  label: "\u90AE\u4EF6\u6A21\u677F",
20325
20082
  sections: {
@@ -20400,6 +20157,14 @@ var zhCNMetadataForms = {
20400
20157
  }
20401
20158
  }
20402
20159
  },
20160
+ doc: {
20161
+ label: "Documentation",
20162
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
20163
+ },
20164
+ book: {
20165
+ label: "Documentation Book",
20166
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
20167
+ },
20403
20168
  permission: {
20404
20169
  label: "\u6743\u9650\u96C6 / \u914D\u7F6E\u6587\u4EF6",
20405
20170
  sections: {
@@ -20960,6 +20725,70 @@ var jaJPMetadataForms = {
20960
20725
  datasource: {
20961
20726
  label: "\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9",
20962
20727
  helpText: '\u5BFE\u8C61\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 ID\uFF08\u65E2\u5B9A: "default"\uFF09'
20728
+ },
20729
+ lifecycle: {
20730
+ label: "Lifecycle",
20731
+ helpText: "Data lifecycle contract (ADR-0057): how long rows live and how space is reclaimed. Leave empty for permanent record semantics. Non-record classes require at least one bounding policy (retention, TTL, or rotation)."
20732
+ },
20733
+ "lifecycle.class": {
20734
+ label: "Class",
20735
+ helpText: "Persistence contract for the rows of this object"
20736
+ },
20737
+ "lifecycle.retention": {
20738
+ label: "Retention",
20739
+ helpText: "Age-based retention window"
20740
+ },
20741
+ "lifecycle.retention.maxAge": {
20742
+ label: "Max Age",
20743
+ helpText: 'Rows older than this (by created_at) are reaped. Duration literal: h/d/w/y, e.g. "30d"'
20744
+ },
20745
+ "lifecycle.ttl": {
20746
+ label: "Ttl",
20747
+ helpText: "Per-row TTL expiry"
20748
+ },
20749
+ "lifecycle.ttl.field": {
20750
+ label: "Field",
20751
+ helpText: "Timestamp field the TTL is measured from (e.g. expires_at)"
20752
+ },
20753
+ "lifecycle.ttl.expireAfter": {
20754
+ label: "Expire After",
20755
+ helpText: 'Rows expire this long after the field, e.g. "1d"'
20756
+ },
20757
+ "lifecycle.storage": {
20758
+ label: "Storage",
20759
+ helpText: "Physical rotation for high-frequency telemetry (SQLite: O(1) shard DROP)"
20760
+ },
20761
+ "lifecycle.storage.strategy": {
20762
+ label: "Strategy",
20763
+ helpText: "Storage strategy"
20764
+ },
20765
+ "lifecycle.storage.shards": {
20766
+ label: "Shards",
20767
+ helpText: "Shards retained; total window = shards \xD7 unit"
20768
+ },
20769
+ "lifecycle.storage.unit": {
20770
+ label: "Unit",
20771
+ helpText: "Time width of one shard"
20772
+ },
20773
+ "lifecycle.archive": {
20774
+ label: "Archive",
20775
+ helpText: "Cold-store hand-off (audit class). Rows are never hot-deleted before the archive copy succeeded."
20776
+ },
20777
+ "lifecycle.archive.after": {
20778
+ label: "After",
20779
+ helpText: "Archive rows older than this \u2014 must equal retention.maxAge"
20780
+ },
20781
+ "lifecycle.archive.to": {
20782
+ label: "To",
20783
+ helpText: "Target datasource name for cold storage"
20784
+ },
20785
+ "lifecycle.archive.keep": {
20786
+ label: "Keep",
20787
+ helpText: 'How long the archive keeps rows (empty = forever), e.g. "7y"'
20788
+ },
20789
+ "lifecycle.reclaim": {
20790
+ label: "Reclaim",
20791
+ helpText: "Reclaim driver space after sweeps (default on for non-record classes)"
20963
20792
  }
20964
20793
  }
20965
20794
  },
@@ -21068,10 +20897,6 @@ var jaJPMetadataForms = {
21068
20897
  label: "\u96C6\u8A08\u64CD\u4F5C",
21069
20898
  helpText: "\u30ED\u30FC\u30EB\u30A2\u30C3\u30D7\u96C6\u8A08\u8A2D\u5B9A\uFF08\u89AA\u5B50\u95A2\u4FC2\u7528\uFF09"
21070
20899
  },
21071
- cached: {
21072
- label: "\u30AD\u30E3\u30C3\u30B7\u30E5",
21073
- helpText: "\u8A08\u7B97\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u30AD\u30E3\u30C3\u30B7\u30E5\u8A2D\u5B9A"
21074
- },
21075
20900
  columnName: {
21076
20901
  label: "\u5217\u540D",
21077
20902
  helpText: "\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u4E0A\u306E\u7269\u7406\u5217\u540D\uFF08\u65E2\u5B9A\u306F\u30D5\u30A3\u30FC\u30EB\u30C9\u540D\uFF09"
@@ -21099,28 +20924,9 @@ var jaJPMetadataForms = {
21099
20924
  sortable: {
21100
20925
  label: "\u4E26\u3073\u66FF\u3048\u53EF\u80FD",
21101
20926
  helpText: "\u3053\u306E\u30D5\u30A3\u30FC\u30EB\u30C9\u3067\u30EA\u30B9\u30C8\u306E\u4E26\u3079\u66FF\u3048\u3092\u8A31\u53EF"
21102
- },
21103
- auditTrail: {
21104
- label: "\u76E3\u67FB\u8A3C\u8DE1",
21105
- helpText: "\u30E6\u30FC\u30B6\u30FC\u3068\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u4ED8\u304D\u3067\u8A73\u7D30\u5909\u66F4\u3092\u8FFD\u8DE1"
21106
- },
21107
- trackFeedHistory: {
21108
- label: "\u30D5\u30A3\u30FC\u30C9\u5C65\u6B74\u8FFD\u8DE1",
21109
- helpText: "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u30D5\u30A3\u30FC\u30C9\u306B\u5909\u66F4\u3092\u8868\u793A"
21110
- },
21111
- encryptionConfig: {
21112
- label: "\u6697\u53F7\u5316\u8A2D\u5B9A",
21113
- helpText: "\u30D5\u30A3\u30FC\u30EB\u30C9\u30EC\u30D9\u30EB\u6697\u53F7\u5316\uFF08GDPR/HIPAA/PCI-DSS\uFF09"
21114
- },
21115
- maskingRule: {
21116
- label: "\u30DE\u30B9\u30AD\u30F3\u30B0\u30EB\u30FC\u30EB",
21117
- helpText: "PII \u4FDD\u8B77\u7528\u30C7\u30FC\u30BF\u30DE\u30B9\u30AD\u30F3\u30B0\u30EB\u30FC\u30EB"
21118
20927
  }
21119
20928
  }
21120
20929
  },
21121
- trigger: {
21122
- label: "\u30C8\u30EA\u30AC\u30FC"
21123
- },
21124
20930
  validation: {
21125
20931
  label: "\u691C\u8A3C\u30EB\u30FC\u30EB"
21126
20932
  },
@@ -21197,12 +21003,36 @@ var jaJPMetadataForms = {
21197
21003
  onError: {
21198
21004
  label: "\u30A8\u30E9\u30FC\u6642"
21199
21005
  },
21006
+ timeout: {
21007
+ label: "Timeout",
21008
+ helpText: "Abort the hook after N milliseconds"
21009
+ },
21200
21010
  condition: {
21201
21011
  label: "\u6761\u4EF6",
21202
21012
  helpText: "\u4EFB\u610F\u306E\u6570\u5F0F \u2014 false \u8A55\u4FA1\u6642\u306F\u30D5\u30C3\u30AF\u3092\u30B9\u30AD\u30C3\u30D7"
21013
+ },
21014
+ retryPolicy: {
21015
+ label: "Retry Policy",
21016
+ helpText: "Retry on failure \u2014 most useful for async hooks"
21017
+ },
21018
+ "retryPolicy.maxRetries": {
21019
+ label: "Max Retries",
21020
+ helpText: "Maximum retry attempts"
21021
+ },
21022
+ "retryPolicy.backoffMs": {
21023
+ label: "Backoff Ms",
21024
+ helpText: "Delay between retries (ms)"
21203
21025
  }
21204
21026
  }
21205
21027
  },
21028
+ seed: {
21029
+ label: "Seed Data",
21030
+ description: "Fixture / initialization data applied on publish"
21031
+ },
21032
+ mapping: {
21033
+ label: "Import Mapping",
21034
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
21035
+ },
21206
21036
  view: {
21207
21037
  label: "\u30D3\u30E5\u30FC",
21208
21038
  sections: {
@@ -21374,6 +21204,10 @@ var jaJPMetadataForms = {
21374
21204
  label: "\u30EC\u30A4\u30A2\u30A6\u30C8",
21375
21205
  description: "\u30DA\u30FC\u30B8\u9818\u57DF\u3068\u305D\u3053\u306B\u914D\u7F6E\u3059\u308B\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3002"
21376
21206
  },
21207
+ interface: {
21208
+ label: "Interface (list pages)",
21209
+ description: "Interface mode (Airtable parity): the page defines its own data surface directly \u2014 columns, filters, visualizations and toolbar \u2014 no inheriting from a separate view."
21210
+ },
21377
21211
  advanced: {
21378
21212
  label: "\u8A73\u7D30",
21379
21213
  description: "\u6709\u52B9\u5316\u3001\u5BFE\u8C61\u30E6\u30FC\u30B6\u30FC\u3001\u30A2\u30AF\u30BB\u30B7\u30D3\u30EA\u30C6\u30A3\u3002"
@@ -21416,6 +21250,58 @@ var jaJPMetadataForms = {
21416
21250
  label: "\u30EA\u30FC\u30B8\u30E7\u30F3",
21417
21251
  helpText: "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u542B\u3080\u30EC\u30A4\u30A2\u30A6\u30C8\u9818\u57DF\uFF08header, main, sidebar, footer\uFF09"
21418
21252
  },
21253
+ interfaceConfig: {
21254
+ label: "Interface Config",
21255
+ helpText: "The page IS the view: source picks the object, columns/filterBy are defined directly here; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar."
21256
+ },
21257
+ "interfaceConfig.source": {
21258
+ label: "Source",
21259
+ helpText: "Object this page reads from"
21260
+ },
21261
+ "interfaceConfig.columns": {
21262
+ label: "Columns",
21263
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
21264
+ },
21265
+ "interfaceConfig.filterBy": {
21266
+ label: "Filter By",
21267
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
21268
+ },
21269
+ "interfaceConfig.levels": {
21270
+ label: "Levels",
21271
+ helpText: "Hierarchy levels to display (tree-like sources)"
21272
+ },
21273
+ "interfaceConfig.appearance": {
21274
+ label: "Appearance",
21275
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
21276
+ },
21277
+ "interfaceConfig.userFilters": {
21278
+ label: "User Filters",
21279
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
21280
+ },
21281
+ "interfaceConfig.userActions": {
21282
+ label: "User Actions",
21283
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
21284
+ },
21285
+ "interfaceConfig.addRecord": {
21286
+ label: "Add Record",
21287
+ helpText: "Add-record entry point"
21288
+ },
21289
+ "interfaceConfig.buttons": {
21290
+ label: "Buttons",
21291
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
21292
+ },
21293
+ "interfaceConfig.recordAction": {
21294
+ label: "Record Action",
21295
+ helpText: "How clicking a record opens its detail"
21296
+ },
21297
+ "interfaceConfig.showRecordCount": {
21298
+ label: "Show Record Count",
21299
+ helpText: "Show the record count bar"
21300
+ },
21301
+ "interfaceConfig.allowPrinting": {
21302
+ label: "Allow Printing",
21303
+ helpText: "Allow users to print this page"
21304
+ },
21419
21305
  isDefault: {
21420
21306
  label: "\u65E2\u5B9A",
21421
21307
  helpText: "\u3053\u306E\u30DA\u30FC\u30B8\u7A2E\u5225\u306E\u65E2\u5B9A\u30DA\u30FC\u30B8\u306B\u8A2D\u5B9A"
@@ -21664,6 +21550,22 @@ var jaJPMetadataForms = {
21664
21550
  label: "\u672C\u6587",
21665
21551
  helpText: "\u5B9F\u884C\u3059\u308B JavaScript \u30B3\u30FC\u30C9"
21666
21552
  },
21553
+ "body.language": {
21554
+ label: "Language",
21555
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
21556
+ },
21557
+ "body.source": {
21558
+ label: "Source",
21559
+ helpText: "Function body source \u2014 no top-level imports"
21560
+ },
21561
+ "body.capabilities": {
21562
+ label: "Capabilities",
21563
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
21564
+ },
21565
+ "body.timeoutMs": {
21566
+ label: "Timeout Ms",
21567
+ helpText: "Per-invocation timeout (ms)"
21568
+ },
21667
21569
  params: {
21668
21570
  label: "\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC",
21669
21571
  helpText: "\u30E6\u30FC\u30B6\u30FC\u5165\u529B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\uFF08\u5B9F\u884C\u524D\u306B\u30D5\u30A9\u30FC\u30E0\u3092\u8868\u793A\uFF09"
@@ -21704,9 +21606,9 @@ var jaJPMetadataForms = {
21704
21606
  label: "\u4E00\u62EC\u64CD\u4F5C\u6709\u52B9",
21705
21607
  helpText: "\u9078\u629E\u3057\u305F\u8907\u6570\u30EC\u30B3\u30FC\u30C9\u3078\u306E\u9069\u7528\u3092\u8A31\u53EF"
21706
21608
  },
21707
- aiExposed: {
21708
- label: "AI \u306B\u516C\u958B",
21709
- helpText: "AI \u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306B\u3088\u308B\u3053\u306E\u30A2\u30AF\u30B7\u30E7\u30F3\u306E\u547C\u3073\u51FA\u3057\u3092\u8A31\u53EF"
21609
+ ai: {
21610
+ label: "Ai",
21611
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
21710
21612
  },
21711
21613
  recordIdParam: {
21712
21614
  label: "\u30EC\u30B3\u30FC\u30C9 ID \u30D1\u30E9\u30E1\u30FC\u30BF\u30FC",
@@ -21729,13 +21631,9 @@ var jaJPMetadataForms = {
21729
21631
  label: "\u57FA\u672C",
21730
21632
  description: "ID \u3068\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u3002"
21731
21633
  },
21732
- columns: {
21733
- label: "\u5217",
21734
- description: "\u30EC\u30DD\u30FC\u30C8\u51FA\u529B\u306B\u8868\u793A\u3059\u308B\u5217\u3002"
21735
- },
21736
- groupings: {
21737
- label: "\u30B0\u30EB\u30FC\u30D7\u5316",
21738
- description: "\u884C\uFF08matrix \u30EC\u30DD\u30FC\u30C8\u3067\u306F\u5217\u3082\uFF09\u306E\u30B0\u30EB\u30FC\u30D7\u5316\u65B9\u6CD5\u3002"
21634
+ dataset_binding: {
21635
+ label: "Dataset binding",
21636
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
21739
21637
  },
21740
21638
  joined_blocks: {
21741
21639
  label: "\u7D50\u5408\u30D6\u30ED\u30C3\u30AF",
@@ -21761,33 +21659,37 @@ var jaJPMetadataForms = {
21761
21659
  description: {
21762
21660
  label: "\u8AAC\u660E"
21763
21661
  },
21764
- objectName: {
21765
- label: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D",
21766
- helpText: "\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8"
21767
- },
21768
21662
  type: {
21769
21663
  label: "\u578B",
21770
21664
  helpText: "\u30EC\u30DD\u30FC\u30C8\u7A2E\u5225: tabular/summary/matrix/joined"
21771
21665
  },
21666
+ dataset: {
21667
+ label: "Dataset",
21668
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
21669
+ },
21670
+ values: {
21671
+ label: "Values",
21672
+ helpText: "Measure names (from the dataset) to display"
21673
+ },
21674
+ rows: {
21675
+ label: "Rows",
21676
+ helpText: "Dimension names (from the dataset) to group rows by"
21677
+ },
21772
21678
  columns: {
21773
21679
  label: "\u5217",
21774
21680
  helpText: "\u30EC\u30DD\u30FC\u30C8\u306B\u8868\u793A\u3059\u308B\u5217"
21775
21681
  },
21776
- groupingsDown: {
21777
- label: "\u7E26\u30B0\u30EB\u30FC\u30D7",
21778
- helpText: "\u884C\u30B0\u30EB\u30FC\u30D7\u5316\u30EC\u30D9\u30EB"
21779
- },
21780
- groupingsAcross: {
21781
- label: "\u6A2A\u30B0\u30EB\u30FC\u30D7",
21782
- helpText: "\u5217\u30B0\u30EB\u30FC\u30D7\u5316\u30EC\u30D9\u30EB\uFF08matrix \u306E\u307F\uFF09"
21682
+ drilldown: {
21683
+ label: "Drilldown",
21684
+ helpText: "Click an aggregated row/cell to open the underlying records"
21783
21685
  },
21784
21686
  blocks: {
21785
21687
  label: "\u30D6\u30ED\u30C3\u30AF",
21786
21688
  helpText: "\u8907\u6570\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u7D50\u5408\uFF08joined \u30EC\u30DD\u30FC\u30C8\u306E\u307F\uFF09"
21787
21689
  },
21788
- filter: {
21789
- label: "\u30D5\u30A3\u30EB\u30BF\u30FC",
21790
- helpText: "\u30EC\u30DD\u30FC\u30C8\u30EC\u30D9\u30EB\u306E\u30D5\u30A3\u30EB\u30BF\u30FC"
21690
+ runtimeFilter: {
21691
+ label: "Runtime Filter",
21692
+ helpText: "Render-time scope filter, ANDed at query time"
21791
21693
  },
21792
21694
  chart: {
21793
21695
  label: "\u30C1\u30E3\u30FC\u30C8",
@@ -21803,6 +21705,62 @@ var jaJPMetadataForms = {
21803
21705
  }
21804
21706
  }
21805
21707
  },
21708
+ dataset: {
21709
+ label: "Dataset",
21710
+ description: "Analytics semantic layer \u2014 dimensions & measures",
21711
+ sections: {
21712
+ basics: {
21713
+ label: "Basics",
21714
+ description: "Dataset identity."
21715
+ },
21716
+ source: {
21717
+ label: "Source",
21718
+ description: "The base object, the relationships to join, and the dataset\u2019s intrinsic scope. Joins are derived from the object graph \u2014 pick relationship (lookup / master_detail) names, never write an ON clause."
21719
+ },
21720
+ dimensions: {
21721
+ label: "Dimensions",
21722
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
21723
+ },
21724
+ measures: {
21725
+ label: "Measures",
21726
+ description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/\u2026 of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
21727
+ }
21728
+ },
21729
+ fields: {
21730
+ name: {
21731
+ label: "Name",
21732
+ helpText: "snake_case unique identifier"
21733
+ },
21734
+ label: {
21735
+ label: "Label",
21736
+ helpText: "Display name"
21737
+ },
21738
+ description: {
21739
+ label: "Description",
21740
+ helpText: "What this dataset measures"
21741
+ },
21742
+ object: {
21743
+ label: "Object",
21744
+ helpText: "Base object \u2014 the FROM"
21745
+ },
21746
+ include: {
21747
+ label: "Include",
21748
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
21749
+ },
21750
+ filter: {
21751
+ label: "Filter",
21752
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
21753
+ },
21754
+ dimensions: {
21755
+ label: "Dimensions",
21756
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
21757
+ },
21758
+ measures: {
21759
+ label: "Measures",
21760
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
21761
+ }
21762
+ }
21763
+ },
21806
21764
  flow: {
21807
21765
  label: "\u30D5\u30ED\u30FC",
21808
21766
  sections: {
@@ -21882,15 +21840,6 @@ var jaJPMetadataForms = {
21882
21840
  translation: {
21883
21841
  label: "\u7FFB\u8A33"
21884
21842
  },
21885
- router: {
21886
- label: "\u30EB\u30FC\u30BF\u30FC"
21887
- },
21888
- function: {
21889
- label: "\u95A2\u6570"
21890
- },
21891
- service: {
21892
- label: "\u30B5\u30FC\u30D3\u30B9"
21893
- },
21894
21843
  email_template: {
21895
21844
  label: "\u30E1\u30FC\u30EB\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8",
21896
21845
  sections: {
@@ -21971,6 +21920,14 @@ var jaJPMetadataForms = {
21971
21920
  }
21972
21921
  }
21973
21922
  },
21923
+ doc: {
21924
+ label: "Documentation",
21925
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
21926
+ },
21927
+ book: {
21928
+ label: "Documentation Book",
21929
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
21930
+ },
21974
21931
  permission: {
21975
21932
  label: "\u6A29\u9650\u30BB\u30C3\u30C8",
21976
21933
  sections: {
@@ -22531,6 +22488,70 @@ var esESMetadataForms = {
22531
22488
  datasource: {
22532
22489
  label: "Fuente de datos",
22533
22490
  helpText: 'ID de fuente de datos de destino (valor predeterminado: "default")'
22491
+ },
22492
+ lifecycle: {
22493
+ label: "Lifecycle",
22494
+ helpText: "Data lifecycle contract (ADR-0057): how long rows live and how space is reclaimed. Leave empty for permanent record semantics. Non-record classes require at least one bounding policy (retention, TTL, or rotation)."
22495
+ },
22496
+ "lifecycle.class": {
22497
+ label: "Class",
22498
+ helpText: "Persistence contract for the rows of this object"
22499
+ },
22500
+ "lifecycle.retention": {
22501
+ label: "Retention",
22502
+ helpText: "Age-based retention window"
22503
+ },
22504
+ "lifecycle.retention.maxAge": {
22505
+ label: "Max Age",
22506
+ helpText: 'Rows older than this (by created_at) are reaped. Duration literal: h/d/w/y, e.g. "30d"'
22507
+ },
22508
+ "lifecycle.ttl": {
22509
+ label: "Ttl",
22510
+ helpText: "Per-row TTL expiry"
22511
+ },
22512
+ "lifecycle.ttl.field": {
22513
+ label: "Field",
22514
+ helpText: "Timestamp field the TTL is measured from (e.g. expires_at)"
22515
+ },
22516
+ "lifecycle.ttl.expireAfter": {
22517
+ label: "Expire After",
22518
+ helpText: 'Rows expire this long after the field, e.g. "1d"'
22519
+ },
22520
+ "lifecycle.storage": {
22521
+ label: "Storage",
22522
+ helpText: "Physical rotation for high-frequency telemetry (SQLite: O(1) shard DROP)"
22523
+ },
22524
+ "lifecycle.storage.strategy": {
22525
+ label: "Strategy",
22526
+ helpText: "Storage strategy"
22527
+ },
22528
+ "lifecycle.storage.shards": {
22529
+ label: "Shards",
22530
+ helpText: "Shards retained; total window = shards \xD7 unit"
22531
+ },
22532
+ "lifecycle.storage.unit": {
22533
+ label: "Unit",
22534
+ helpText: "Time width of one shard"
22535
+ },
22536
+ "lifecycle.archive": {
22537
+ label: "Archive",
22538
+ helpText: "Cold-store hand-off (audit class). Rows are never hot-deleted before the archive copy succeeded."
22539
+ },
22540
+ "lifecycle.archive.after": {
22541
+ label: "After",
22542
+ helpText: "Archive rows older than this \u2014 must equal retention.maxAge"
22543
+ },
22544
+ "lifecycle.archive.to": {
22545
+ label: "To",
22546
+ helpText: "Target datasource name for cold storage"
22547
+ },
22548
+ "lifecycle.archive.keep": {
22549
+ label: "Keep",
22550
+ helpText: 'How long the archive keeps rows (empty = forever), e.g. "7y"'
22551
+ },
22552
+ "lifecycle.reclaim": {
22553
+ label: "Reclaim",
22554
+ helpText: "Reclaim driver space after sweeps (default on for non-record classes)"
22534
22555
  }
22535
22556
  }
22536
22557
  },
@@ -22639,10 +22660,6 @@ var esESMetadataForms = {
22639
22660
  label: "Operaciones de resumen",
22640
22661
  helpText: "Configuraci\xF3n de resumen roll-up (para relaciones padre-hijo)"
22641
22662
  },
22642
- cached: {
22643
- label: "En cach\xE9",
22644
- helpText: "Configuraci\xF3n de cach\xE9 para campos calculados"
22645
- },
22646
22663
  columnName: {
22647
22664
  label: "Nombre de columna",
22648
22665
  helpText: "Nombre de columna f\xEDsica en la base de datos (por defecto, el nombre del campo)"
@@ -22670,28 +22687,9 @@ var esESMetadataForms = {
22670
22687
  sortable: {
22671
22688
  label: "Ordenable",
22672
22689
  helpText: "Permite ordenar listas por este campo"
22673
- },
22674
- auditTrail: {
22675
- label: "Rastro de auditor\xEDa",
22676
- helpText: "Registra cambios detallados con usuario y marca temporal"
22677
- },
22678
- trackFeedHistory: {
22679
- label: "Historial de feed",
22680
- helpText: "Muestra cambios en el feed de actividad"
22681
- },
22682
- encryptionConfig: {
22683
- label: "Configuraci\xF3n de cifrado",
22684
- helpText: "Cifrado a nivel de campo (GDPR/HIPAA/PCI-DSS)"
22685
- },
22686
- maskingRule: {
22687
- label: "Regla de enmascaramiento",
22688
- helpText: "Reglas de enmascaramiento de datos para protecci\xF3n de PII"
22689
22690
  }
22690
22691
  }
22691
22692
  },
22692
- trigger: {
22693
- label: "Disparador"
22694
- },
22695
22693
  validation: {
22696
22694
  label: "Regla de validaci\xF3n"
22697
22695
  },
@@ -22768,12 +22766,36 @@ var esESMetadataForms = {
22768
22766
  onError: {
22769
22767
  label: "Al error"
22770
22768
  },
22769
+ timeout: {
22770
+ label: "Timeout",
22771
+ helpText: "Abort the hook after N milliseconds"
22772
+ },
22771
22773
  condition: {
22772
22774
  label: "Condici\xF3n",
22773
22775
  helpText: "F\xF3rmula opcional \u2014 omite el hook cuando eval\xFAa a false"
22776
+ },
22777
+ retryPolicy: {
22778
+ label: "Retry Policy",
22779
+ helpText: "Retry on failure \u2014 most useful for async hooks"
22780
+ },
22781
+ "retryPolicy.maxRetries": {
22782
+ label: "Max Retries",
22783
+ helpText: "Maximum retry attempts"
22784
+ },
22785
+ "retryPolicy.backoffMs": {
22786
+ label: "Backoff Ms",
22787
+ helpText: "Delay between retries (ms)"
22774
22788
  }
22775
22789
  }
22776
22790
  },
22791
+ seed: {
22792
+ label: "Seed Data",
22793
+ description: "Fixture / initialization data applied on publish"
22794
+ },
22795
+ mapping: {
22796
+ label: "Import Mapping",
22797
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
22798
+ },
22777
22799
  view: {
22778
22800
  label: "Vista",
22779
22801
  sections: {
@@ -22945,6 +22967,10 @@ var esESMetadataForms = {
22945
22967
  label: "Dise\xF1o",
22946
22968
  description: "Regiones de p\xE1gina y componentes colocados en ellas."
22947
22969
  },
22970
+ interface: {
22971
+ label: "Interface (list pages)",
22972
+ description: "Interface mode (Airtable parity): the page defines its own data surface directly \u2014 columns, filters, visualizations and toolbar \u2014 no inheriting from a separate view."
22973
+ },
22948
22974
  advanced: {
22949
22975
  label: "Avanzado",
22950
22976
  description: "Activaci\xF3n, audiencia y accesibilidad."
@@ -22987,6 +23013,58 @@ var esESMetadataForms = {
22987
23013
  label: "Regiones",
22988
23014
  helpText: "Regiones de dise\xF1o (header, main, sidebar, footer) con componentes"
22989
23015
  },
23016
+ interfaceConfig: {
23017
+ label: "Interface Config",
23018
+ helpText: "The page IS the view: source picks the object, columns/filterBy are defined directly here; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar."
23019
+ },
23020
+ "interfaceConfig.source": {
23021
+ label: "Source",
23022
+ helpText: "Object this page reads from"
23023
+ },
23024
+ "interfaceConfig.columns": {
23025
+ label: "Columns",
23026
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
23027
+ },
23028
+ "interfaceConfig.filterBy": {
23029
+ label: "Filter By",
23030
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
23031
+ },
23032
+ "interfaceConfig.levels": {
23033
+ label: "Levels",
23034
+ helpText: "Hierarchy levels to display (tree-like sources)"
23035
+ },
23036
+ "interfaceConfig.appearance": {
23037
+ label: "Appearance",
23038
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
23039
+ },
23040
+ "interfaceConfig.userFilters": {
23041
+ label: "User Filters",
23042
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
23043
+ },
23044
+ "interfaceConfig.userActions": {
23045
+ label: "User Actions",
23046
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
23047
+ },
23048
+ "interfaceConfig.addRecord": {
23049
+ label: "Add Record",
23050
+ helpText: "Add-record entry point"
23051
+ },
23052
+ "interfaceConfig.buttons": {
23053
+ label: "Buttons",
23054
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
23055
+ },
23056
+ "interfaceConfig.recordAction": {
23057
+ label: "Record Action",
23058
+ helpText: "How clicking a record opens its detail"
23059
+ },
23060
+ "interfaceConfig.showRecordCount": {
23061
+ label: "Show Record Count",
23062
+ helpText: "Show the record count bar"
23063
+ },
23064
+ "interfaceConfig.allowPrinting": {
23065
+ label: "Allow Printing",
23066
+ helpText: "Allow users to print this page"
23067
+ },
22990
23068
  isDefault: {
22991
23069
  label: "Predeterminado",
22992
23070
  helpText: "Establece como p\xE1gina predeterminada para este tipo de p\xE1gina"
@@ -23235,6 +23313,22 @@ var esESMetadataForms = {
23235
23313
  label: "Cuerpo",
23236
23314
  helpText: "C\xF3digo JavaScript que ejecutar"
23237
23315
  },
23316
+ "body.language": {
23317
+ label: "Language",
23318
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
23319
+ },
23320
+ "body.source": {
23321
+ label: "Source",
23322
+ helpText: "Function body source \u2014 no top-level imports"
23323
+ },
23324
+ "body.capabilities": {
23325
+ label: "Capabilities",
23326
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
23327
+ },
23328
+ "body.timeoutMs": {
23329
+ label: "Timeout Ms",
23330
+ helpText: "Per-invocation timeout (ms)"
23331
+ },
23238
23332
  params: {
23239
23333
  label: "Par\xE1metros",
23240
23334
  helpText: "Par\xE1metros de entrada de usuario (muestra el formulario antes de ejecutar)"
@@ -23275,9 +23369,9 @@ var esESMetadataForms = {
23275
23369
  label: "Acci\xF3n masiva",
23276
23370
  helpText: "Permite aplicar a varios registros seleccionados"
23277
23371
  },
23278
- aiExposed: {
23279
- label: "Expuesto a IA",
23280
- helpText: "Permite que agentes de IA llamen a esta acci\xF3n"
23372
+ ai: {
23373
+ label: "Ai",
23374
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
23281
23375
  },
23282
23376
  recordIdParam: {
23283
23377
  label: "Par\xE1metro de ID de registro",
@@ -23300,13 +23394,9 @@ var esESMetadataForms = {
23300
23394
  label: "Aspectos b\xE1sicos",
23301
23395
  description: "Identidad y fuente de datos."
23302
23396
  },
23303
- columns: {
23304
- label: "Columnas",
23305
- description: "Columnas mostradas en la salida del informe."
23306
- },
23307
- groupings: {
23308
- label: "Agrupaciones",
23309
- description: "C\xF3mo se agrupan las filas (y columnas, para informes matrix)."
23397
+ dataset_binding: {
23398
+ label: "Dataset binding",
23399
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
23310
23400
  },
23311
23401
  joined_blocks: {
23312
23402
  label: "Bloques unidos",
@@ -23332,33 +23422,37 @@ var esESMetadataForms = {
23332
23422
  description: {
23333
23423
  label: "Descripci\xF3n"
23334
23424
  },
23335
- objectName: {
23336
- label: "Nombre de objeto",
23337
- helpText: "Objeto de fuente de datos"
23338
- },
23339
23425
  type: {
23340
23426
  label: "Tipo",
23341
23427
  helpText: "Tipo de informe: tabular/summary/matrix/joined"
23342
23428
  },
23429
+ dataset: {
23430
+ label: "Dataset",
23431
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
23432
+ },
23433
+ values: {
23434
+ label: "Values",
23435
+ helpText: "Measure names (from the dataset) to display"
23436
+ },
23437
+ rows: {
23438
+ label: "Rows",
23439
+ helpText: "Dimension names (from the dataset) to group rows by"
23440
+ },
23343
23441
  columns: {
23344
23442
  label: "Columnas",
23345
23443
  helpText: "Columnas que mostrar en el informe"
23346
23444
  },
23347
- groupingsDown: {
23348
- label: "Agrupaciones verticales",
23349
- helpText: "Niveles de agrupaci\xF3n de filas"
23350
- },
23351
- groupingsAcross: {
23352
- label: "Agrupaciones horizontales",
23353
- helpText: "Niveles de agrupaci\xF3n de columnas (solo matrix)"
23445
+ drilldown: {
23446
+ label: "Drilldown",
23447
+ helpText: "Click an aggregated row/cell to open the underlying records"
23354
23448
  },
23355
23449
  blocks: {
23356
23450
  label: "Bloques",
23357
23451
  helpText: "Une varios objetos (solo informe joined)"
23358
23452
  },
23359
- filter: {
23360
- label: "Filtro",
23361
- helpText: "Filtros a nivel de informe"
23453
+ runtimeFilter: {
23454
+ label: "Runtime Filter",
23455
+ helpText: "Render-time scope filter, ANDed at query time"
23362
23456
  },
23363
23457
  chart: {
23364
23458
  label: "Gr\xE1fico",
@@ -23374,6 +23468,62 @@ var esESMetadataForms = {
23374
23468
  }
23375
23469
  }
23376
23470
  },
23471
+ dataset: {
23472
+ label: "Dataset",
23473
+ description: "Analytics semantic layer \u2014 dimensions & measures",
23474
+ sections: {
23475
+ basics: {
23476
+ label: "Basics",
23477
+ description: "Dataset identity."
23478
+ },
23479
+ source: {
23480
+ label: "Source",
23481
+ description: "The base object, the relationships to join, and the dataset\u2019s intrinsic scope. Joins are derived from the object graph \u2014 pick relationship (lookup / master_detail) names, never write an ON clause."
23482
+ },
23483
+ dimensions: {
23484
+ label: "Dimensions",
23485
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
23486
+ },
23487
+ measures: {
23488
+ label: "Measures",
23489
+ description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/\u2026 of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
23490
+ }
23491
+ },
23492
+ fields: {
23493
+ name: {
23494
+ label: "Name",
23495
+ helpText: "snake_case unique identifier"
23496
+ },
23497
+ label: {
23498
+ label: "Label",
23499
+ helpText: "Display name"
23500
+ },
23501
+ description: {
23502
+ label: "Description",
23503
+ helpText: "What this dataset measures"
23504
+ },
23505
+ object: {
23506
+ label: "Object",
23507
+ helpText: "Base object \u2014 the FROM"
23508
+ },
23509
+ include: {
23510
+ label: "Include",
23511
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
23512
+ },
23513
+ filter: {
23514
+ label: "Filter",
23515
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
23516
+ },
23517
+ dimensions: {
23518
+ label: "Dimensions",
23519
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
23520
+ },
23521
+ measures: {
23522
+ label: "Measures",
23523
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
23524
+ }
23525
+ }
23526
+ },
23377
23527
  flow: {
23378
23528
  label: "Flujo",
23379
23529
  sections: {
@@ -23453,15 +23603,6 @@ var esESMetadataForms = {
23453
23603
  translation: {
23454
23604
  label: "Traducci\xF3n"
23455
23605
  },
23456
- router: {
23457
- label: "Enrutador"
23458
- },
23459
- function: {
23460
- label: "Funci\xF3n"
23461
- },
23462
- service: {
23463
- label: "Servicio"
23464
- },
23465
23606
  email_template: {
23466
23607
  label: "Plantilla de email",
23467
23608
  sections: {
@@ -23542,6 +23683,14 @@ var esESMetadataForms = {
23542
23683
  }
23543
23684
  }
23544
23685
  },
23686
+ doc: {
23687
+ label: "Documentation",
23688
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
23689
+ },
23690
+ book: {
23691
+ label: "Documentation Book",
23692
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
23693
+ },
23545
23694
  permission: {
23546
23695
  label: "Conjunto de permisos",
23547
23696
  sections: {