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