@objectstack/platform-objects 14.3.0 → 14.6.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",
@@ -132,7 +143,12 @@ var SysUser = data.ObjectSchema.create({
132
143
  label: "Phone Number",
133
144
  type: "text",
134
145
  required: false,
135
- helpText: "Sign-in phone number (E.164, e.g. +8613800000000). Required when no email is given."
146
+ helpText: "Sign-in phone number (E.164, e.g. +8613800000000). Required when no email is given.",
147
+ // Only offer phone when the opt-in phoneNumber auth plugin is loaded —
148
+ // otherwise the create-user endpoint rejects a phone with
149
+ // "Phone numbers require the phoneNumber auth plugin". `features.phoneNumber`
150
+ // is served in /api/v1/auth/config (getPublicConfig).
151
+ visible: "features.phoneNumber == true"
136
152
  },
137
153
  { field: "name", required: false },
138
154
  {
@@ -166,7 +182,7 @@ var SysUser = data.ObjectSchema.create({
166
182
  label: "Set Password",
167
183
  icon: "key-round",
168
184
  variant: "secondary",
169
- locations: ["list_item"],
185
+ locations: ["list_item", "record_header"],
170
186
  type: "api",
171
187
  // #2766 V1 — same path as better-auth's stock route, but served by the
172
188
  // plugin-auth wrapper registered ahead of the catch-all: it accepts the
@@ -208,7 +224,7 @@ var SysUser = data.ObjectSchema.create({
208
224
  label: "Set Platform Role",
209
225
  icon: "shield-check",
210
226
  variant: "secondary",
211
- locations: ["list_item"],
227
+ locations: ["list_item", "record_header"],
212
228
  type: "api",
213
229
  target: "/api/v1/auth/admin/set-role",
214
230
  recordIdParam: "userId",
@@ -223,7 +239,7 @@ var SysUser = data.ObjectSchema.create({
223
239
  label: "Impersonate User",
224
240
  icon: "user-cog",
225
241
  variant: "secondary",
226
- locations: ["list_item"],
242
+ locations: ["list_item", "record_header"],
227
243
  type: "api",
228
244
  target: "/api/v1/auth/admin/impersonate-user",
229
245
  recordIdParam: "userId",
@@ -447,20 +463,28 @@ var SysUser = data.ObjectSchema.create({
447
463
  maxLength: 255,
448
464
  group: "Identity"
449
465
  }),
466
+ // ADR-0092 D4 — with the generic edit affordance open, every non-profile
467
+ // field is readonly so the standard edit form renders it non-editable.
468
+ // This is UX only; the server boundary is the plugin-auth identity write
469
+ // guard (ADR-0092 D2), which strips/rejects these regardless.
450
470
  email: data.Field.email({
451
471
  label: "Email",
452
472
  required: true,
473
+ readonly: true,
474
+ // login identity — change flows through better-auth change-email verification
453
475
  searchable: true,
454
476
  group: "Identity"
455
477
  }),
456
478
  email_verified: data.Field.boolean({
457
479
  label: "Email Verified",
458
480
  defaultValue: false,
481
+ readonly: true,
459
482
  group: "Identity"
460
483
  }),
461
484
  two_factor_enabled: data.Field.boolean({
462
485
  label: "Two-Factor Enabled",
463
486
  defaultValue: false,
487
+ readonly: true,
464
488
  group: "Identity",
465
489
  description: "Whether two-factor authentication is enabled for this user. Maintained by the better-auth `twoFactor` plugin."
466
490
  }),
@@ -468,6 +492,8 @@ var SysUser = data.ObjectSchema.create({
468
492
  role: data.Field.text({
469
493
  label: "Platform Role",
470
494
  required: false,
495
+ readonly: true,
496
+ // ADR-0092 — set via the Set Platform Role action, never the edit form
471
497
  maxLength: 64,
472
498
  group: "Admin",
473
499
  description: "Platform-level role (admin, user, \u2026). Set via the Set Platform Role action."
@@ -475,18 +501,24 @@ var SysUser = data.ObjectSchema.create({
475
501
  banned: data.Field.boolean({
476
502
  label: "Banned",
477
503
  defaultValue: false,
504
+ readonly: true,
505
+ // ADR-0092 — toggled via Ban/Unban actions (session side effects)
478
506
  group: "Admin",
479
507
  description: "When true, the user cannot sign in. Toggle via Ban User / Unban User actions."
480
508
  }),
481
509
  ban_reason: data.Field.text({
482
510
  label: "Ban Reason",
483
511
  required: false,
512
+ readonly: true,
513
+ // ADR-0092 — written by the Ban User action
484
514
  maxLength: 255,
485
515
  group: "Admin"
486
516
  }),
487
517
  ban_expires: data.Field.datetime({
488
518
  label: "Ban Expires",
489
519
  required: false,
520
+ readonly: true,
521
+ // ADR-0092 — written by the Ban User action
490
522
  group: "Admin",
491
523
  description: "When set, the ban auto-clears at this time."
492
524
  }),
@@ -582,6 +614,8 @@ var SysUser = data.ObjectSchema.create({
582
614
  ai_access: data.Field.boolean({
583
615
  label: "AI Access",
584
616
  defaultValue: false,
617
+ readonly: true,
618
+ // ADR-0092 — a licensed-seat grant; flows through the AiSeatPlugin enforcement path
585
619
  group: "Admin",
586
620
  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
621
  }),
@@ -595,12 +629,16 @@ var SysUser = data.ObjectSchema.create({
595
629
  manager_id: data.Field.lookup("sys_user", {
596
630
  label: "Manager",
597
631
  required: false,
632
+ readonly: true,
633
+ // ADR-0092 — drives own_and_reports RLS scope; org-structure maintenance is its own surface
598
634
  group: "Organization",
599
635
  description: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
600
636
  }),
601
637
  primary_business_unit_id: data.Field.lookup("sys_business_unit", {
602
638
  label: "Primary Business Unit",
603
639
  required: false,
640
+ readonly: true,
641
+ // ADR-0092 — denormalised projection maintained by plugin-sharing; never hand-edited
604
642
  group: "Organization",
605
643
  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
644
  }),
@@ -2620,6 +2658,12 @@ var SysDeviceCode = data.ObjectSchema.create({
2620
2658
  icon: "key-round",
2621
2659
  isSystem: true,
2622
2660
  managedBy: "better-auth",
2661
+ // ADR-0057: device codes are dead the moment `expires_at` passes — keep a
2662
+ // 1d grace for post-mortem, then reap.
2663
+ lifecycle: {
2664
+ class: "transient",
2665
+ ttl: { field: "expires_at", expireAfter: "1d" }
2666
+ },
2623
2667
  // [ADR-0066 D2/④] Secure-by-default: rows are LIVE pending device-grant
2624
2668
  // codes — reading `user_code`/`device_code` lets an attacker hijack a
2625
2669
  // pending CLI login. Not covered by the wildcard `'*'` grant; admins retain
@@ -3638,9 +3682,13 @@ var SysSsoProvider = data.ObjectSchema.create({
3638
3682
  // for a one-time DNS-TXT challenge and reveals the ready-to-paste record
3639
3683
  // ONCE via `resultDialog`. Routed through the env bridge (plugin-auth /
3640
3684
  // 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.
3685
+ // response into a `{ success, data: { dnsRecordName, dnsRecordValue } }`
3686
+ // envelope. The console action runtime unwraps that envelope, so the
3687
+ // `resultDialog` field paths are relative to the inner `data` payload
3688
+ // (`dnsRecordName`, not `data.dnsRecordName`) — consistent with every
3689
+ // other object's resultDialog (create_user, two-factor, OAuth). When the
3690
+ // feature is OFF the bridge returns a clear "not enabled for this
3691
+ // environment" error instead of a bare 404.
3644
3692
  target: "/api/v1/auth/admin/sso/request-domain-verification",
3645
3693
  params: [
3646
3694
  { name: "providerId", field: "provider_id", defaultFromRow: true, required: true },
@@ -3651,9 +3699,9 @@ var SysSsoProvider = data.ObjectSchema.create({
3651
3699
  description: "Add the DNS TXT record below at your domain\u2019s DNS provider, then run \u201CVerify Domain\u201D. The token is shown once.",
3652
3700
  acknowledge: "Done",
3653
3701
  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" }
3702
+ { path: "dnsRecordType", label: "Record type", format: "text" },
3703
+ { path: "dnsRecordName", label: "Name / Host", format: "secret" },
3704
+ { path: "dnsRecordValue", label: "Value", format: "secret" }
3657
3705
  ]
3658
3706
  }
3659
3707
  },
@@ -3885,6 +3933,13 @@ var SysNotification = data.ObjectSchema.create({
3885
3933
  icon: "bell",
3886
3934
  isSystem: true,
3887
3935
  managedBy: "system",
3936
+ // ADR-0057: one 90d window across the whole notification pipeline
3937
+ // (event → delivery → receipt/inbox), enforced by the LifecycleService
3938
+ // (the retired NotificationRetention sweeper kept the same default).
3939
+ lifecycle: {
3940
+ class: "telemetry",
3941
+ retention: { maxAge: "90d" }
3942
+ },
3888
3943
  description: "Notification events \u2014 one row per emit() (ADR-0030 Layer 2 ingress)",
3889
3944
  displayNameField: "topic",
3890
3945
  nameField: "topic",
@@ -4691,6 +4746,13 @@ var SysJobRun = data.ObjectSchema.create({
4691
4746
  icon: "play",
4692
4747
  isSystem: true,
4693
4748
  managedBy: "append-only",
4749
+ // ADR-0057: run history is append-only telemetry. The platform
4750
+ // LifecycleService is the ONE sweeper for this window (the plugin-local
4751
+ // JobRunRetention it replaced kept the same 30d default).
4752
+ lifecycle: {
4753
+ class: "telemetry",
4754
+ retention: { maxAge: "30d" }
4755
+ },
4694
4756
  description: "Background job execution audit trail",
4695
4757
  displayNameField: "job_name",
4696
4758
  nameField: "job_name",
@@ -6235,14 +6297,64 @@ var enObjects = {
6235
6297
  label: "Ban Expires",
6236
6298
  help: "When set, the ban auto-clears at this time."
6237
6299
  },
6300
+ failed_login_count: {
6301
+ label: "Failed Login Count",
6302
+ help: "Consecutive failed sign-in attempts; reset to 0 on success. Maintained by the auth manager."
6303
+ },
6304
+ locked_until: {
6305
+ label: "Locked Until",
6306
+ 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."
6307
+ },
6308
+ password_changed_at: {
6309
+ label: "Password Changed At",
6310
+ help: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
6311
+ },
6312
+ phone_number: {
6313
+ label: "Phone Number",
6314
+ help: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
6315
+ },
6316
+ phone_number_verified: {
6317
+ label: "Phone Verified",
6318
+ help: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
6319
+ },
6320
+ must_change_password: {
6321
+ label: "Must Change Password",
6322
+ help: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
6323
+ },
6324
+ mfa_required_at: {
6325
+ label: "MFA Required At",
6326
+ help: "When enforced MFA first applied to this user (grace-period clock). Backs mfa_required; system-managed."
6327
+ },
6328
+ last_login_at: {
6329
+ label: "Last Login At",
6330
+ help: "Timestamp of the last successful sign-in. Stamped by the auth manager; system-managed."
6331
+ },
6332
+ last_login_ip: {
6333
+ label: "Last Login IP",
6334
+ help: "Client IP of the last successful sign-in (from the trusted proxy forwarded header). System-managed."
6335
+ },
6336
+ ai_access: {
6337
+ label: "AI Access",
6338
+ 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)."
6339
+ },
6238
6340
  image: {
6239
6341
  label: "Profile Image"
6240
6342
  },
6241
6343
  manager_id: {
6242
- label: "Manager"
6344
+ label: "Manager",
6345
+ help: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
6243
6346
  },
6244
6347
  primary_business_unit_id: {
6245
- label: "Primary Business Unit"
6348
+ label: "Primary Business Unit",
6349
+ 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."
6350
+ },
6351
+ source: {
6352
+ label: "Identity Source",
6353
+ 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.",
6354
+ options: {
6355
+ idp_provisioned: "IdP-Provisioned",
6356
+ env_native: "Env-Native"
6357
+ }
6246
6358
  },
6247
6359
  id: {
6248
6360
  label: "User ID"
@@ -6285,6 +6397,14 @@ var enObjects = {
6285
6397
  label: "Unban User",
6286
6398
  successMessage: "User unbanned"
6287
6399
  },
6400
+ unlock_user: {
6401
+ label: "Unlock Account",
6402
+ successMessage: "Account unlocked"
6403
+ },
6404
+ create_user: {
6405
+ label: "Create User",
6406
+ successMessage: "User created"
6407
+ },
6288
6408
  set_user_password: {
6289
6409
  label: "Set Password",
6290
6410
  successMessage: "Password updated"
@@ -6346,6 +6466,18 @@ var enObjects = {
6346
6466
  expires_at: {
6347
6467
  label: "Expires At"
6348
6468
  },
6469
+ last_activity_at: {
6470
+ label: "Last Activity At",
6471
+ help: "Timestamp of the last request on this session; drives idle-timeout. System-managed."
6472
+ },
6473
+ revoked_at: {
6474
+ label: "Revoked At",
6475
+ help: "When set, this session was revoked (idle / absolute-max / concurrent-cap / admin). System-managed."
6476
+ },
6477
+ revoke_reason: {
6478
+ label: "Revoke Reason",
6479
+ help: "Why the session was revoked (idle_timeout, absolute_max, concurrent_cap, \u2026)."
6480
+ },
6349
6481
  active_organization_id: {
6350
6482
  label: "Active Organization"
6351
6483
  },
@@ -6444,6 +6576,10 @@ var enObjects = {
6444
6576
  password: {
6445
6577
  label: "Password Hash",
6446
6578
  help: "Hashed password for email/password provider"
6579
+ },
6580
+ previous_password_hashes: {
6581
+ label: "Previous Password Hashes",
6582
+ help: "JSON array of prior password hashes (bounded by password_history_count); reuse-prevention only. System-managed."
6447
6583
  }
6448
6584
  },
6449
6585
  _views: {
@@ -6514,6 +6650,10 @@ var enObjects = {
6514
6650
  label: "Metadata",
6515
6651
  help: "JSON-serialized organization metadata"
6516
6652
  },
6653
+ require_mfa: {
6654
+ label: "Require Multi-Factor Auth",
6655
+ help: "When true, every member of this organization must enroll an authenticator app to access data."
6656
+ },
6517
6657
  id: {
6518
6658
  label: "Organization ID"
6519
6659
  },
@@ -6838,6 +6978,9 @@ var enObjects = {
6838
6978
  }
6839
6979
  },
6840
6980
  _views: {
6981
+ org_chart: {
6982
+ label: "Org Chart"
6983
+ },
6841
6984
  active: {
6842
6985
  label: "Active"
6843
6986
  },
@@ -7419,263 +7562,57 @@ var enObjects = {
7419
7562
  }
7420
7563
  }
7421
7564
  },
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",
7565
+ sys_notification: {
7566
+ label: "Notification",
7567
+ pluralLabel: "Notifications",
7568
+ description: "Per-user notification inbox entries",
7506
7569
  fields: {
7507
7570
  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
- }
7571
+ label: "Notification ID"
7530
7572
  },
7531
- last_seen: {
7532
- label: "Last Seen"
7573
+ topic: {
7574
+ label: "Topic",
7575
+ help: "Notification topic, e.g. task.assigned, collab.mention"
7533
7576
  },
7534
- current_location: {
7535
- label: "Current Location"
7577
+ payload: {
7578
+ label: "Payload",
7579
+ help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
7536
7580
  },
7537
- device: {
7538
- label: "Device",
7581
+ severity: {
7582
+ label: "Severity",
7583
+ help: "Severity hint for rendering / filtering",
7539
7584
  options: {
7540
- desktop: "Desktop",
7541
- mobile: "Mobile",
7542
- tablet: "Tablet",
7543
- other: "Other"
7585
+ info: "info",
7586
+ warning: "warning",
7587
+ critical: "critical"
7544
7588
  }
7545
7589
  },
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"
7590
+ dedup_key: {
7591
+ label: "Dedup Key",
7592
+ help: "Idempotency key within a topic window; a repeat emit is a no-op"
7565
7593
  },
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
- }
7594
+ source_object: {
7595
+ label: "Source Object",
7596
+ help: "Object name of the related record (e.g. lead, opportunity)"
7581
7597
  },
7582
- summary: {
7583
- label: "Summary",
7584
- help: "Human-readable one-line summary"
7598
+ source_id: {
7599
+ label: "Source Record",
7600
+ help: "Record id within source_object"
7585
7601
  },
7586
7602
  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
- }
7603
+ label: "Actor",
7604
+ help: "User who caused the notification (mentioner, assigner)"
7673
7605
  },
7674
7606
  created_at: {
7675
7607
  label: "Created At"
7608
+ }
7609
+ },
7610
+ _views: {
7611
+ recent: {
7612
+ label: "Recent"
7676
7613
  },
7677
- updated_at: {
7678
- label: "Updated At"
7614
+ by_topic: {
7615
+ label: "By Topic"
7679
7616
  }
7680
7617
  }
7681
7618
  },
@@ -7740,60 +7677,6 @@ var enObjects = {
7740
7677
  }
7741
7678
  }
7742
7679
  },
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
7680
  sys_email: {
7798
7681
  label: "Email",
7799
7682
  pluralLabel: "Emails",
@@ -8698,8 +8581,13 @@ var enObjects = {
8698
8581
  label: "Ciphertext",
8699
8582
  help: "Provider-encoded ciphertext blob (base64 / JSON). Implementation-defined; only the matching ICryptoProvider can read it."
8700
8583
  }
8701
- }
8702
- },
8584
+ },
8585
+ _views: {
8586
+ all: {
8587
+ label: "All Secrets"
8588
+ }
8589
+ }
8590
+ },
8703
8591
  sys_setting_audit: {
8704
8592
  label: "Setting Audit Entry",
8705
8593
  pluralLabel: "Setting Audit",
@@ -8773,6 +8661,11 @@ var enObjects = {
8773
8661
  label: "Request ID",
8774
8662
  help: "Correlates with sys_audit_log / tracing."
8775
8663
  }
8664
+ },
8665
+ _views: {
8666
+ recent: {
8667
+ label: "Recent"
8668
+ }
8776
8669
  }
8777
8670
  }
8778
8671
  };
@@ -8982,14 +8875,64 @@ var zhCNObjects = {
8982
8875
  label: "\u5C01\u7981\u5230\u671F\u65F6\u95F4",
8983
8876
  help: "\u8BBE\u7F6E\u540E\uFF0C\u5230\u8FBE\u8BE5\u65F6\u95F4\u4F1A\u81EA\u52A8\u89E3\u9664\u5C01\u7981\u3002"
8984
8877
  },
8878
+ failed_login_count: {
8879
+ label: "Failed Login Count",
8880
+ help: "Consecutive failed sign-in attempts; reset to 0 on success. Maintained by the auth manager."
8881
+ },
8882
+ locked_until: {
8883
+ label: "Locked Until",
8884
+ 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."
8885
+ },
8886
+ password_changed_at: {
8887
+ label: "Password Changed At",
8888
+ help: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
8889
+ },
8890
+ phone_number: {
8891
+ label: "Phone Number",
8892
+ help: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
8893
+ },
8894
+ phone_number_verified: {
8895
+ label: "Phone Verified",
8896
+ help: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
8897
+ },
8898
+ must_change_password: {
8899
+ label: "Must Change Password",
8900
+ help: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
8901
+ },
8902
+ mfa_required_at: {
8903
+ label: "MFA Required At",
8904
+ help: "When enforced MFA first applied to this user (grace-period clock). Backs mfa_required; system-managed."
8905
+ },
8906
+ last_login_at: {
8907
+ label: "Last Login At",
8908
+ help: "Timestamp of the last successful sign-in. Stamped by the auth manager; system-managed."
8909
+ },
8910
+ last_login_ip: {
8911
+ label: "Last Login IP",
8912
+ help: "Client IP of the last successful sign-in (from the trusted proxy forwarded header). System-managed."
8913
+ },
8914
+ ai_access: {
8915
+ label: "AI Access",
8916
+ 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)."
8917
+ },
8985
8918
  image: {
8986
8919
  label: "\u5934\u50CF"
8987
8920
  },
8988
8921
  manager_id: {
8989
- label: "\u7ECF\u7406"
8922
+ label: "\u7ECF\u7406",
8923
+ help: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
8990
8924
  },
8991
8925
  primary_business_unit_id: {
8992
- label: "\u4E3B\u5C5E\u4E1A\u52A1\u5355\u5143"
8926
+ label: "\u4E3B\u5C5E\u4E1A\u52A1\u5355\u5143",
8927
+ 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."
8928
+ },
8929
+ source: {
8930
+ label: "Identity Source",
8931
+ 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.",
8932
+ options: {
8933
+ idp_provisioned: "IdP-Provisioned",
8934
+ env_native: "Env-Native"
8935
+ }
8993
8936
  },
8994
8937
  id: {
8995
8938
  label: "\u7528\u6237 ID"
@@ -9032,6 +8975,14 @@ var zhCNObjects = {
9032
8975
  label: "\u89E3\u9664\u5C01\u7981",
9033
8976
  successMessage: "\u7528\u6237\u5DF2\u89E3\u9664\u5C01\u7981"
9034
8977
  },
8978
+ unlock_user: {
8979
+ label: "Unlock Account",
8980
+ successMessage: "Account unlocked"
8981
+ },
8982
+ create_user: {
8983
+ label: "Create User",
8984
+ successMessage: "User created"
8985
+ },
9035
8986
  set_user_password: {
9036
8987
  label: "\u8BBE\u7F6E\u5BC6\u7801",
9037
8988
  successMessage: "\u5BC6\u7801\u5DF2\u66F4\u65B0"
@@ -9093,6 +9044,18 @@ var zhCNObjects = {
9093
9044
  expires_at: {
9094
9045
  label: "\u8FC7\u671F\u65F6\u95F4"
9095
9046
  },
9047
+ last_activity_at: {
9048
+ label: "Last Activity At",
9049
+ help: "Timestamp of the last request on this session; drives idle-timeout. System-managed."
9050
+ },
9051
+ revoked_at: {
9052
+ label: "Revoked At",
9053
+ help: "When set, this session was revoked (idle / absolute-max / concurrent-cap / admin). System-managed."
9054
+ },
9055
+ revoke_reason: {
9056
+ label: "Revoke Reason",
9057
+ help: "Why the session was revoked (idle_timeout, absolute_max, concurrent_cap, \u2026)."
9058
+ },
9096
9059
  active_organization_id: {
9097
9060
  label: "\u5F53\u524D\u7EC4\u7EC7"
9098
9061
  },
@@ -9191,6 +9154,10 @@ var zhCNObjects = {
9191
9154
  password: {
9192
9155
  label: "\u5BC6\u7801\u54C8\u5E0C",
9193
9156
  help: "\u90AE\u7BB1/\u5BC6\u7801\u63D0\u4F9B\u65B9\u4F7F\u7528\u7684\u5BC6\u7801\u54C8\u5E0C"
9157
+ },
9158
+ previous_password_hashes: {
9159
+ label: "Previous Password Hashes",
9160
+ help: "JSON array of prior password hashes (bounded by password_history_count); reuse-prevention only. System-managed."
9194
9161
  }
9195
9162
  },
9196
9163
  _views: {
@@ -9261,6 +9228,10 @@ var zhCNObjects = {
9261
9228
  label: "\u5143\u6570\u636E",
9262
9229
  help: "JSON \u5E8F\u5217\u5316\u7684\u7EC4\u7EC7\u5143\u6570\u636E"
9263
9230
  },
9231
+ require_mfa: {
9232
+ label: "Require Multi-Factor Auth",
9233
+ help: "When true, every member of this organization must enroll an authenticator app to access data."
9234
+ },
9264
9235
  id: {
9265
9236
  label: "\u7EC4\u7EC7 ID"
9266
9237
  },
@@ -9585,6 +9556,9 @@ var zhCNObjects = {
9585
9556
  }
9586
9557
  },
9587
9558
  _views: {
9559
+ org_chart: {
9560
+ label: "Org Chart"
9561
+ },
9588
9562
  active: {
9589
9563
  label: "\u542F\u7528"
9590
9564
  },
@@ -10166,263 +10140,57 @@ var zhCNObjects = {
10166
10140
  }
10167
10141
  }
10168
10142
  },
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",
10143
+ sys_notification: {
10144
+ label: "\u901A\u77E5",
10145
+ pluralLabel: "\u901A\u77E5",
10146
+ description: "\u6309\u7528\u6237\u5B58\u50A8\u7684\u901A\u77E5\u6536\u4EF6\u7BB1\u6761\u76EE",
10253
10147
  fields: {
10254
10148
  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
- }
10149
+ label: "\u901A\u77E5 ID"
10277
10150
  },
10278
- last_seen: {
10279
- label: "\u6700\u8FD1\u5728\u7EBF\u65F6\u95F4"
10151
+ topic: {
10152
+ label: "Topic",
10153
+ help: "Notification topic, e.g. task.assigned, collab.mention"
10280
10154
  },
10281
- current_location: {
10282
- label: "\u5F53\u524D\u4F4D\u7F6E"
10155
+ payload: {
10156
+ label: "Payload",
10157
+ help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
10283
10158
  },
10284
- device: {
10285
- label: "\u8BBE\u5907",
10159
+ severity: {
10160
+ label: "Severity",
10161
+ help: "Severity hint for rendering / filtering",
10286
10162
  options: {
10287
- desktop: "\u684C\u9762\u7AEF",
10288
- mobile: "\u79FB\u52A8\u7AEF",
10289
- tablet: "\u5E73\u677F\u7AEF",
10290
- other: "\u5176\u4ED6"
10163
+ info: "info",
10164
+ warning: "warning",
10165
+ critical: "critical"
10291
10166
  }
10292
10167
  },
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"
10168
+ dedup_key: {
10169
+ label: "Dedup Key",
10170
+ help: "Idempotency key within a topic window; a repeat emit is a no-op"
10312
10171
  },
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
- }
10172
+ source_object: {
10173
+ label: "\u6765\u6E90\u5BF9\u8C61",
10174
+ help: "\u5173\u8054\u8BB0\u5F55\u7684\u5BF9\u8C61\u540D\u79F0\uFF08\u4F8B\u5982 lead\u3001opportunity\uFF09"
10328
10175
  },
10329
- summary: {
10330
- label: "\u6458\u8981",
10331
- help: "\u4EBA\u7C7B\u53EF\u8BFB\u7684\u5355\u884C\u6458\u8981"
10176
+ source_id: {
10177
+ label: "\u6765\u6E90\u8BB0\u5F55",
10178
+ help: "source_object \u4E2D\u7684\u8BB0\u5F55 ID"
10332
10179
  },
10333
10180
  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
- }
10181
+ label: "\u6267\u884C\u4EBA",
10182
+ help: "\u89E6\u53D1\u8BE5\u901A\u77E5\u7684\u7528\u6237\uFF08\u63D0\u53CA\u4EBA\u3001\u5206\u914D\u4EBA\uFF09"
10420
10183
  },
10421
10184
  created_at: {
10422
10185
  label: "\u521B\u5EFA\u65F6\u95F4"
10186
+ }
10187
+ },
10188
+ _views: {
10189
+ recent: {
10190
+ label: "Recent"
10423
10191
  },
10424
- updated_at: {
10425
- label: "\u66F4\u65B0\u65F6\u95F4"
10192
+ by_topic: {
10193
+ label: "By Topic"
10426
10194
  }
10427
10195
  }
10428
10196
  },
@@ -10487,60 +10255,6 @@ var zhCNObjects = {
10487
10255
  }
10488
10256
  }
10489
10257
  },
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
10258
  sys_email: {
10545
10259
  label: "\u90AE\u4EF6",
10546
10260
  pluralLabel: "\u90AE\u4EF6",
@@ -11445,6 +11159,11 @@ var zhCNObjects = {
11445
11159
  label: "\u5BC6\u6587",
11446
11160
  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
11161
  }
11162
+ },
11163
+ _views: {
11164
+ all: {
11165
+ label: "All Secrets"
11166
+ }
11448
11167
  }
11449
11168
  },
11450
11169
  sys_setting_audit: {
@@ -11520,6 +11239,11 @@ var zhCNObjects = {
11520
11239
  label: "\u8BF7\u6C42 ID",
11521
11240
  help: "\u4E0E sys_audit_log / tracing \u5173\u8054\u3002"
11522
11241
  }
11242
+ },
11243
+ _views: {
11244
+ recent: {
11245
+ label: "Recent"
11246
+ }
11523
11247
  }
11524
11248
  }
11525
11249
  };
@@ -11693,20 +11417,70 @@ var jaJPObjects = {
11693
11417
  label: "\u5229\u7528\u505C\u6B62\u671F\u9650",
11694
11418
  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
11419
  },
11696
- image: {
11697
- label: "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u753B\u50CF"
11420
+ failed_login_count: {
11421
+ label: "Failed Login Count",
11422
+ help: "Consecutive failed sign-in attempts; reset to 0 on success. Maintained by the auth manager."
11698
11423
  },
11699
- manager_id: {
11700
- label: "\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC"
11424
+ locked_until: {
11425
+ label: "Locked Until",
11426
+ 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
11427
  },
11702
- primary_business_unit_id: {
11703
- label: "\u4E3B\u6240\u5C5E\u30D3\u30B8\u30CD\u30B9\u30E6\u30CB\u30C3\u30C8"
11428
+ password_changed_at: {
11429
+ label: "Password Changed At",
11430
+ help: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
11704
11431
  },
11705
- id: {
11706
- label: "\u30E6\u30FC\u30B6\u30FC ID"
11432
+ phone_number: {
11433
+ label: "Phone Number",
11434
+ help: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
11707
11435
  },
11708
- created_at: {
11709
- label: "\u4F5C\u6210\u65E5\u6642"
11436
+ phone_number_verified: {
11437
+ label: "Phone Verified",
11438
+ help: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
11439
+ },
11440
+ must_change_password: {
11441
+ label: "Must Change Password",
11442
+ help: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
11443
+ },
11444
+ mfa_required_at: {
11445
+ label: "MFA Required At",
11446
+ help: "When enforced MFA first applied to this user (grace-period clock). Backs mfa_required; system-managed."
11447
+ },
11448
+ last_login_at: {
11449
+ label: "Last Login At",
11450
+ help: "Timestamp of the last successful sign-in. Stamped by the auth manager; system-managed."
11451
+ },
11452
+ last_login_ip: {
11453
+ label: "Last Login IP",
11454
+ help: "Client IP of the last successful sign-in (from the trusted proxy forwarded header). System-managed."
11455
+ },
11456
+ ai_access: {
11457
+ label: "AI Access",
11458
+ 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)."
11459
+ },
11460
+ image: {
11461
+ label: "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u753B\u50CF"
11462
+ },
11463
+ manager_id: {
11464
+ label: "\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC",
11465
+ help: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
11466
+ },
11467
+ primary_business_unit_id: {
11468
+ label: "\u4E3B\u6240\u5C5E\u30D3\u30B8\u30CD\u30B9\u30E6\u30CB\u30C3\u30C8",
11469
+ 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."
11470
+ },
11471
+ source: {
11472
+ label: "Identity Source",
11473
+ 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.",
11474
+ options: {
11475
+ idp_provisioned: "IdP-Provisioned",
11476
+ env_native: "Env-Native"
11477
+ }
11478
+ },
11479
+ id: {
11480
+ label: "\u30E6\u30FC\u30B6\u30FC ID"
11481
+ },
11482
+ created_at: {
11483
+ label: "\u4F5C\u6210\u65E5\u6642"
11710
11484
  },
11711
11485
  updated_at: {
11712
11486
  label: "\u66F4\u65B0\u65E5\u6642"
@@ -11743,6 +11517,14 @@ var jaJPObjects = {
11743
11517
  label: "\u5229\u7528\u505C\u6B62\u3092\u89E3\u9664",
11744
11518
  successMessage: "\u30E6\u30FC\u30B6\u30FC\u306E\u5229\u7528\u505C\u6B62\u3092\u89E3\u9664\u3057\u307E\u3057\u305F"
11745
11519
  },
11520
+ unlock_user: {
11521
+ label: "Unlock Account",
11522
+ successMessage: "Account unlocked"
11523
+ },
11524
+ create_user: {
11525
+ label: "Create User",
11526
+ successMessage: "User created"
11527
+ },
11746
11528
  set_user_password: {
11747
11529
  label: "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u8A2D\u5B9A",
11748
11530
  successMessage: "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F"
@@ -11804,6 +11586,18 @@ var jaJPObjects = {
11804
11586
  expires_at: {
11805
11587
  label: "\u6709\u52B9\u671F\u9650"
11806
11588
  },
11589
+ last_activity_at: {
11590
+ label: "Last Activity At",
11591
+ help: "Timestamp of the last request on this session; drives idle-timeout. System-managed."
11592
+ },
11593
+ revoked_at: {
11594
+ label: "Revoked At",
11595
+ help: "When set, this session was revoked (idle / absolute-max / concurrent-cap / admin). System-managed."
11596
+ },
11597
+ revoke_reason: {
11598
+ label: "Revoke Reason",
11599
+ help: "Why the session was revoked (idle_timeout, absolute_max, concurrent_cap, \u2026)."
11600
+ },
11807
11601
  active_organization_id: {
11808
11602
  label: "\u30A2\u30AF\u30C6\u30A3\u30D6\u7D44\u7E54"
11809
11603
  },
@@ -11902,6 +11696,10 @@ var jaJPObjects = {
11902
11696
  password: {
11903
11697
  label: "\u30D1\u30B9\u30EF\u30FC\u30C9\u30CF\u30C3\u30B7\u30E5",
11904
11698
  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"
11699
+ },
11700
+ previous_password_hashes: {
11701
+ label: "Previous Password Hashes",
11702
+ help: "JSON array of prior password hashes (bounded by password_history_count); reuse-prevention only. System-managed."
11905
11703
  }
11906
11704
  },
11907
11705
  _views: {
@@ -11972,6 +11770,10 @@ var jaJPObjects = {
11972
11770
  label: "\u30E1\u30BF\u30C7\u30FC\u30BF",
11973
11771
  help: "JSON \u30B7\u30EA\u30A2\u30E9\u30A4\u30BA\u3055\u308C\u305F\u7D44\u7E54\u30E1\u30BF\u30C7\u30FC\u30BF"
11974
11772
  },
11773
+ require_mfa: {
11774
+ label: "Require Multi-Factor Auth",
11775
+ help: "When true, every member of this organization must enroll an authenticator app to access data."
11776
+ },
11975
11777
  id: {
11976
11778
  label: "\u7D44\u7E54 ID"
11977
11779
  },
@@ -12296,6 +12098,9 @@ var jaJPObjects = {
12296
12098
  }
12297
12099
  },
12298
12100
  _views: {
12101
+ org_chart: {
12102
+ label: "Org Chart"
12103
+ },
12299
12104
  active: {
12300
12105
  label: "\u6709\u52B9"
12301
12106
  },
@@ -12877,263 +12682,57 @@ var jaJPObjects = {
12877
12682
  }
12878
12683
  }
12879
12684
  },
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",
12685
+ sys_notification: {
12686
+ label: "\u901A\u77E5",
12687
+ pluralLabel: "\u901A\u77E5",
12688
+ description: "\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u901A\u77E5\u53D7\u4FE1\u30DC\u30C3\u30AF\u30B9\u30A8\u30F3\u30C8\u30EA",
12964
12689
  fields: {
12965
12690
  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
- }
12691
+ label: "\u901A\u77E5 ID"
12988
12692
  },
12989
- last_seen: {
12990
- label: "\u6700\u7D42\u78BA\u8A8D\u65E5\u6642"
12693
+ topic: {
12694
+ label: "Topic",
12695
+ help: "Notification topic, e.g. task.assigned, collab.mention"
12991
12696
  },
12992
- current_location: {
12993
- label: "\u73FE\u5728\u5730"
12697
+ payload: {
12698
+ label: "Payload",
12699
+ help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
12994
12700
  },
12995
- device: {
12996
- label: "\u30C7\u30D0\u30A4\u30B9",
12701
+ severity: {
12702
+ label: "Severity",
12703
+ help: "Severity hint for rendering / filtering",
12997
12704
  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"
12705
+ info: "info",
12706
+ warning: "warning",
12707
+ critical: "critical"
13002
12708
  }
13003
12709
  },
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"
12710
+ dedup_key: {
12711
+ label: "Dedup Key",
12712
+ help: "Idempotency key within a topic window; a repeat emit is a no-op"
13023
12713
  },
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
- }
12714
+ source_object: {
12715
+ label: "\u30BD\u30FC\u30B9\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8",
12716
+ help: "\u95A2\u9023\u30EC\u30B3\u30FC\u30C9\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D\uFF08\u4F8B: lead\u3001opportunity\uFF09"
13039
12717
  },
13040
- summary: {
13041
- label: "\u30B5\u30DE\u30EA\u30FC",
13042
- help: "\u5224\u5225\u3057\u3084\u3059\u3044 1 \u884C\u30B5\u30DE\u30EA\u30FC"
12718
+ source_id: {
12719
+ label: "\u30BD\u30FC\u30B9\u30EC\u30B3\u30FC\u30C9",
12720
+ help: "source_object \u5185\u306E\u30EC\u30B3\u30FC\u30C9 ID"
13043
12721
  },
13044
12722
  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
- }
12723
+ label: "\u64CD\u4F5C\u8005",
12724
+ 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
12725
  },
13132
12726
  created_at: {
13133
12727
  label: "\u4F5C\u6210\u65E5\u6642"
12728
+ }
12729
+ },
12730
+ _views: {
12731
+ recent: {
12732
+ label: "Recent"
13134
12733
  },
13135
- updated_at: {
13136
- label: "\u66F4\u65B0\u65E5\u6642"
12734
+ by_topic: {
12735
+ label: "By Topic"
13137
12736
  }
13138
12737
  }
13139
12738
  },
@@ -13198,60 +12797,6 @@ var jaJPObjects = {
13198
12797
  }
13199
12798
  }
13200
12799
  },
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
12800
  sys_email: {
13256
12801
  label: "\u30E1\u30FC\u30EB",
13257
12802
  pluralLabel: "\u30E1\u30FC\u30EB",
@@ -14156,6 +13701,11 @@ var jaJPObjects = {
14156
13701
  label: "\u6697\u53F7\u6587",
14157
13702
  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
13703
  }
13704
+ },
13705
+ _views: {
13706
+ all: {
13707
+ label: "All Secrets"
13708
+ }
14159
13709
  }
14160
13710
  },
14161
13711
  sys_setting_audit: {
@@ -14231,6 +13781,11 @@ var jaJPObjects = {
14231
13781
  label: "\u30EA\u30AF\u30A8\u30B9\u30C8 ID",
14232
13782
  help: "sys_audit_log / \u30C8\u30EC\u30FC\u30B7\u30F3\u30B0\u3068\u306E\u76F8\u95A2\u7528\u3002"
14233
13783
  }
13784
+ },
13785
+ _views: {
13786
+ recent: {
13787
+ label: "Recent"
13788
+ }
14234
13789
  }
14235
13790
  }
14236
13791
  };
@@ -14400,14 +13955,64 @@ var esESObjects = {
14400
13955
  label: "El bloqueo caduca el",
14401
13956
  help: "Si se establece, el bloqueo se elimina autom\xE1ticamente en ese momento."
14402
13957
  },
13958
+ failed_login_count: {
13959
+ label: "Failed Login Count",
13960
+ help: "Consecutive failed sign-in attempts; reset to 0 on success. Maintained by the auth manager."
13961
+ },
13962
+ locked_until: {
13963
+ label: "Locked Until",
13964
+ 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."
13965
+ },
13966
+ password_changed_at: {
13967
+ label: "Password Changed At",
13968
+ help: "Timestamp of the last password change. Backs password_expiry_days; system-managed."
13969
+ },
13970
+ phone_number: {
13971
+ label: "Phone Number",
13972
+ help: "Sign-in phone number (E.164 recommended). Unique per user; managed by better-auth when the phoneNumber plugin is enabled."
13973
+ },
13974
+ phone_number_verified: {
13975
+ label: "Phone Verified",
13976
+ help: "Whether the phone number has been verified (OTP verification requires SMS infrastructure; false until that ships). System-managed."
13977
+ },
13978
+ must_change_password: {
13979
+ label: "Must Change Password",
13980
+ help: "When true, the user is blocked (403 PASSWORD_EXPIRED) until they change their password. Stamped by the admin user-management routes; system-managed."
13981
+ },
13982
+ mfa_required_at: {
13983
+ label: "MFA Required At",
13984
+ help: "When enforced MFA first applied to this user (grace-period clock). Backs mfa_required; system-managed."
13985
+ },
13986
+ last_login_at: {
13987
+ label: "Last Login At",
13988
+ help: "Timestamp of the last successful sign-in. Stamped by the auth manager; system-managed."
13989
+ },
13990
+ last_login_ip: {
13991
+ label: "Last Login IP",
13992
+ help: "Client IP of the last successful sign-in (from the trusted proxy forwarded header). System-managed."
13993
+ },
13994
+ ai_access: {
13995
+ label: "AI Access",
13996
+ 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)."
13997
+ },
14403
13998
  image: {
14404
13999
  label: "Imagen de perfil"
14405
14000
  },
14406
14001
  manager_id: {
14407
- label: "Gerente"
14002
+ label: "Gerente",
14003
+ help: "This user's direct manager. Forms the reporting chain the `own_and_reports` hierarchy scope walks (ADR-0057 / @objectstack/security-enterprise)."
14408
14004
  },
14409
14005
  primary_business_unit_id: {
14410
- label: "Unidad de negocio principal"
14006
+ label: "Unidad de negocio principal",
14007
+ 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."
14008
+ },
14009
+ source: {
14010
+ label: "Identity Source",
14011
+ 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.",
14012
+ options: {
14013
+ idp_provisioned: "IdP-Provisioned",
14014
+ env_native: "Env-Native"
14015
+ }
14411
14016
  },
14412
14017
  id: {
14413
14018
  label: "ID de usuario"
@@ -14450,6 +14055,14 @@ var esESObjects = {
14450
14055
  label: "Desbloquear usuario",
14451
14056
  successMessage: "Usuario desbloqueado"
14452
14057
  },
14058
+ unlock_user: {
14059
+ label: "Unlock Account",
14060
+ successMessage: "Account unlocked"
14061
+ },
14062
+ create_user: {
14063
+ label: "Create User",
14064
+ successMessage: "User created"
14065
+ },
14453
14066
  set_user_password: {
14454
14067
  label: "Establecer contrase\xF1a",
14455
14068
  successMessage: "Contrase\xF1a actualizada"
@@ -14511,6 +14124,18 @@ var esESObjects = {
14511
14124
  expires_at: {
14512
14125
  label: "Caduca el"
14513
14126
  },
14127
+ last_activity_at: {
14128
+ label: "Last Activity At",
14129
+ help: "Timestamp of the last request on this session; drives idle-timeout. System-managed."
14130
+ },
14131
+ revoked_at: {
14132
+ label: "Revoked At",
14133
+ help: "When set, this session was revoked (idle / absolute-max / concurrent-cap / admin). System-managed."
14134
+ },
14135
+ revoke_reason: {
14136
+ label: "Revoke Reason",
14137
+ help: "Why the session was revoked (idle_timeout, absolute_max, concurrent_cap, \u2026)."
14138
+ },
14514
14139
  active_organization_id: {
14515
14140
  label: "Organizaci\xF3n activa"
14516
14141
  },
@@ -14609,6 +14234,10 @@ var esESObjects = {
14609
14234
  password: {
14610
14235
  label: "Hash de la contrase\xF1a",
14611
14236
  help: "Hash de la contrase\xF1a para el proveedor de correo electr\xF3nico/contrase\xF1a."
14237
+ },
14238
+ previous_password_hashes: {
14239
+ label: "Previous Password Hashes",
14240
+ help: "JSON array of prior password hashes (bounded by password_history_count); reuse-prevention only. System-managed."
14612
14241
  }
14613
14242
  },
14614
14243
  _views: {
@@ -14679,6 +14308,10 @@ var esESObjects = {
14679
14308
  label: "Metadatos",
14680
14309
  help: "Metadatos de la organizaci\xF3n serializados en JSON."
14681
14310
  },
14311
+ require_mfa: {
14312
+ label: "Require Multi-Factor Auth",
14313
+ help: "When true, every member of this organization must enroll an authenticator app to access data."
14314
+ },
14682
14315
  id: {
14683
14316
  label: "ID de organizaci\xF3n"
14684
14317
  },
@@ -15003,6 +14636,9 @@ var esESObjects = {
15003
14636
  }
15004
14637
  },
15005
14638
  _views: {
14639
+ org_chart: {
14640
+ label: "Org Chart"
14641
+ },
15006
14642
  active: {
15007
14643
  label: "Activo"
15008
14644
  },
@@ -15584,263 +15220,57 @@ var esESObjects = {
15584
15220
  }
15585
15221
  }
15586
15222
  },
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",
15223
+ sys_notification: {
15224
+ label: "Notificaci\xF3n",
15225
+ pluralLabel: "Notificaciones",
15226
+ description: "Entradas del buz\xF3n de notificaciones por usuario",
15671
15227
  fields: {
15672
15228
  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
- }
15229
+ label: "ID de notificaci\xF3n"
15695
15230
  },
15696
- last_seen: {
15697
- label: "Visto por \xFAltima vez"
15231
+ topic: {
15232
+ label: "Topic",
15233
+ help: "Notification topic, e.g. task.assigned, collab.mention"
15698
15234
  },
15699
- current_location: {
15700
- label: "Ubicaci\xF3n actual"
15235
+ payload: {
15236
+ label: "Payload",
15237
+ help: "Template inputs carried to channels (title/body/url/actor/source/\u2026)"
15701
15238
  },
15702
- device: {
15703
- label: "Dispositivo",
15239
+ severity: {
15240
+ label: "Severity",
15241
+ help: "Severity hint for rendering / filtering",
15704
15242
  options: {
15705
- desktop: "Escritorio",
15706
- mobile: "M\xF3vil",
15707
- tablet: "Tableta",
15708
- other: "Otro"
15243
+ info: "info",
15244
+ warning: "warning",
15245
+ critical: "critical"
15709
15246
  }
15710
15247
  },
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"
15248
+ dedup_key: {
15249
+ label: "Dedup Key",
15250
+ help: "Idempotency key within a topic window; a repeat emit is a no-op"
15730
15251
  },
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
- }
15252
+ source_object: {
15253
+ label: "Objeto de origen",
15254
+ help: "Nombre del objeto del registro relacionado (p. ej. lead, opportunity)."
15746
15255
  },
15747
- summary: {
15748
- label: "Resumen",
15749
- help: "Resumen legible de una l\xEDnea."
15256
+ source_id: {
15257
+ label: "Registro de origen",
15258
+ help: "ID del registro dentro de source_object."
15750
15259
  },
15751
15260
  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
- }
15261
+ label: "Actor",
15262
+ help: "Usuario que provoc\xF3 la notificaci\xF3n (quien menciona, quien asigna)."
15838
15263
  },
15839
15264
  created_at: {
15840
15265
  label: "Creado el"
15266
+ }
15267
+ },
15268
+ _views: {
15269
+ recent: {
15270
+ label: "Recent"
15841
15271
  },
15842
- updated_at: {
15843
- label: "Actualizado el"
15272
+ by_topic: {
15273
+ label: "By Topic"
15844
15274
  }
15845
15275
  }
15846
15276
  },
@@ -15891,71 +15321,17 @@ var esESObjects = {
15891
15321
  shared_users: "Usuarios compartidos"
15892
15322
  }
15893
15323
  },
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."
15324
+ uploaded_by: {
15325
+ label: "Subido por"
15944
15326
  },
15945
- actor_id: {
15946
- label: "Actor",
15947
- help: "Usuario que provoc\xF3 la notificaci\xF3n (quien menciona, quien asigna)."
15327
+ description: {
15328
+ label: "Descripci\xF3n"
15948
15329
  },
15949
15330
  created_at: {
15950
15331
  label: "Creado el"
15951
- }
15952
- },
15953
- _views: {
15954
- recent: {
15955
- label: "Recent"
15956
15332
  },
15957
- by_topic: {
15958
- label: "By Topic"
15333
+ updated_at: {
15334
+ label: "Actualizado el"
15959
15335
  }
15960
15336
  }
15961
15337
  },
@@ -16863,6 +16239,11 @@ var esESObjects = {
16863
16239
  label: "Texto cifrado",
16864
16240
  help: "Blob de texto cifrado codificado por el proveedor (base64 / JSON). La implementaci\xF3n lo define; solo el ICryptoProvider correspondiente puede leerlo."
16865
16241
  }
16242
+ },
16243
+ _views: {
16244
+ all: {
16245
+ label: "All Secrets"
16246
+ }
16866
16247
  }
16867
16248
  },
16868
16249
  sys_setting_audit: {
@@ -16938,6 +16319,11 @@ var esESObjects = {
16938
16319
  label: "ID de solicitud",
16939
16320
  help: "Se correlaciona con sys_audit_log / tracing."
16940
16321
  }
16322
+ },
16323
+ _views: {
16324
+ recent: {
16325
+ label: "Recent"
16326
+ }
16941
16327
  }
16942
16328
  }
16943
16329
  };
@@ -17820,6 +17206,70 @@ var enMetadataForms = {
17820
17206
  datasource: {
17821
17207
  label: "Datasource",
17822
17208
  helpText: 'Target datasource ID (default: "default")'
17209
+ },
17210
+ lifecycle: {
17211
+ label: "Lifecycle",
17212
+ 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)."
17213
+ },
17214
+ "lifecycle.class": {
17215
+ label: "Class",
17216
+ helpText: "Persistence contract for the rows of this object"
17217
+ },
17218
+ "lifecycle.retention": {
17219
+ label: "Retention",
17220
+ helpText: "Age-based retention window"
17221
+ },
17222
+ "lifecycle.retention.maxAge": {
17223
+ label: "Max Age",
17224
+ helpText: 'Rows older than this (by created_at) are reaped. Duration literal: h/d/w/y, e.g. "30d"'
17225
+ },
17226
+ "lifecycle.ttl": {
17227
+ label: "Ttl",
17228
+ helpText: "Per-row TTL expiry"
17229
+ },
17230
+ "lifecycle.ttl.field": {
17231
+ label: "Field",
17232
+ helpText: "Timestamp field the TTL is measured from (e.g. expires_at)"
17233
+ },
17234
+ "lifecycle.ttl.expireAfter": {
17235
+ label: "Expire After",
17236
+ helpText: 'Rows expire this long after the field, e.g. "1d"'
17237
+ },
17238
+ "lifecycle.storage": {
17239
+ label: "Storage",
17240
+ helpText: "Physical rotation for high-frequency telemetry (SQLite: O(1) shard DROP)"
17241
+ },
17242
+ "lifecycle.storage.strategy": {
17243
+ label: "Strategy",
17244
+ helpText: "Storage strategy"
17245
+ },
17246
+ "lifecycle.storage.shards": {
17247
+ label: "Shards",
17248
+ helpText: "Shards retained; total window = shards \xD7 unit"
17249
+ },
17250
+ "lifecycle.storage.unit": {
17251
+ label: "Unit",
17252
+ helpText: "Time width of one shard"
17253
+ },
17254
+ "lifecycle.archive": {
17255
+ label: "Archive",
17256
+ helpText: "Cold-store hand-off (audit class). Rows are never hot-deleted before the archive copy succeeded."
17257
+ },
17258
+ "lifecycle.archive.after": {
17259
+ label: "After",
17260
+ helpText: "Archive rows older than this \u2014 must equal retention.maxAge"
17261
+ },
17262
+ "lifecycle.archive.to": {
17263
+ label: "To",
17264
+ helpText: "Target datasource name for cold storage"
17265
+ },
17266
+ "lifecycle.archive.keep": {
17267
+ label: "Keep",
17268
+ helpText: 'How long the archive keeps rows (empty = forever), e.g. "7y"'
17269
+ },
17270
+ "lifecycle.reclaim": {
17271
+ label: "Reclaim",
17272
+ helpText: "Reclaim driver space after sweeps (default on for non-record classes)"
17823
17273
  }
17824
17274
  }
17825
17275
  },
@@ -17928,10 +17378,6 @@ var enMetadataForms = {
17928
17378
  label: "Summary Operations",
17929
17379
  helpText: "Roll-up summary configuration (for parent-child relationships)"
17930
17380
  },
17931
- cached: {
17932
- label: "Cached",
17933
- helpText: "Caching configuration for computed fields"
17934
- },
17935
17381
  columnName: {
17936
17382
  label: "Column Name",
17937
17383
  helpText: "Physical column name in database (defaults to field name)"
@@ -17959,28 +17405,9 @@ var enMetadataForms = {
17959
17405
  sortable: {
17960
17406
  label: "Sortable",
17961
17407
  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
17408
  }
17979
17409
  }
17980
17410
  },
17981
- trigger: {
17982
- label: "Trigger"
17983
- },
17984
17411
  validation: {
17985
17412
  label: "Validation Rule"
17986
17413
  },
@@ -18057,12 +17484,36 @@ var enMetadataForms = {
18057
17484
  onError: {
18058
17485
  label: "On Error"
18059
17486
  },
17487
+ timeout: {
17488
+ label: "Timeout",
17489
+ helpText: "Abort the hook after N milliseconds"
17490
+ },
18060
17491
  condition: {
18061
17492
  label: "Condition",
18062
17493
  helpText: "Optional formula \u2014 skip the hook when this evaluates to false"
17494
+ },
17495
+ retryPolicy: {
17496
+ label: "Retry Policy",
17497
+ helpText: "Retry on failure \u2014 most useful for async hooks"
17498
+ },
17499
+ "retryPolicy.maxRetries": {
17500
+ label: "Max Retries",
17501
+ helpText: "Maximum retry attempts"
17502
+ },
17503
+ "retryPolicy.backoffMs": {
17504
+ label: "Backoff Ms",
17505
+ helpText: "Delay between retries (ms)"
18063
17506
  }
18064
17507
  }
18065
17508
  },
17509
+ seed: {
17510
+ label: "Seed Data",
17511
+ description: "Fixture / initialization data applied on publish"
17512
+ },
17513
+ mapping: {
17514
+ label: "Import Mapping",
17515
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
17516
+ },
18066
17517
  view: {
18067
17518
  label: "View",
18068
17519
  sections: {
@@ -18234,6 +17685,10 @@ var enMetadataForms = {
18234
17685
  label: "Layout",
18235
17686
  description: "Page regions and components placed within them."
18236
17687
  },
17688
+ interface: {
17689
+ label: "Interface (list pages)",
17690
+ 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."
17691
+ },
18237
17692
  advanced: {
18238
17693
  label: "Advanced",
18239
17694
  description: "Activation, audience, and accessibility."
@@ -18276,6 +17731,58 @@ var enMetadataForms = {
18276
17731
  label: "Regions",
18277
17732
  helpText: "Layout regions (header, main, sidebar, footer) with components"
18278
17733
  },
17734
+ interfaceConfig: {
17735
+ label: "Interface Config",
17736
+ 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."
17737
+ },
17738
+ "interfaceConfig.source": {
17739
+ label: "Source",
17740
+ helpText: "Object this page reads from"
17741
+ },
17742
+ "interfaceConfig.columns": {
17743
+ label: "Columns",
17744
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
17745
+ },
17746
+ "interfaceConfig.filterBy": {
17747
+ label: "Filter By",
17748
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
17749
+ },
17750
+ "interfaceConfig.levels": {
17751
+ label: "Levels",
17752
+ helpText: "Hierarchy levels to display (tree-like sources)"
17753
+ },
17754
+ "interfaceConfig.appearance": {
17755
+ label: "Appearance",
17756
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
17757
+ },
17758
+ "interfaceConfig.userFilters": {
17759
+ label: "User Filters",
17760
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
17761
+ },
17762
+ "interfaceConfig.userActions": {
17763
+ label: "User Actions",
17764
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
17765
+ },
17766
+ "interfaceConfig.addRecord": {
17767
+ label: "Add Record",
17768
+ helpText: "Add-record entry point"
17769
+ },
17770
+ "interfaceConfig.buttons": {
17771
+ label: "Buttons",
17772
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
17773
+ },
17774
+ "interfaceConfig.recordAction": {
17775
+ label: "Record Action",
17776
+ helpText: "How clicking a record opens its detail"
17777
+ },
17778
+ "interfaceConfig.showRecordCount": {
17779
+ label: "Show Record Count",
17780
+ helpText: "Show the record count bar"
17781
+ },
17782
+ "interfaceConfig.allowPrinting": {
17783
+ label: "Allow Printing",
17784
+ helpText: "Allow users to print this page"
17785
+ },
18279
17786
  isDefault: {
18280
17787
  label: "Is Default",
18281
17788
  helpText: "Set as default page for this page type"
@@ -18524,6 +18031,22 @@ var enMetadataForms = {
18524
18031
  label: "Body",
18525
18032
  helpText: "JavaScript code to execute"
18526
18033
  },
18034
+ "body.language": {
18035
+ label: "Language",
18036
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
18037
+ },
18038
+ "body.source": {
18039
+ label: "Source",
18040
+ helpText: "Function body source \u2014 no top-level imports"
18041
+ },
18042
+ "body.capabilities": {
18043
+ label: "Capabilities",
18044
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
18045
+ },
18046
+ "body.timeoutMs": {
18047
+ label: "Timeout Ms",
18048
+ helpText: "Per-invocation timeout (ms)"
18049
+ },
18527
18050
  params: {
18528
18051
  label: "Params",
18529
18052
  helpText: "User input parameters (show form before executing)"
@@ -18564,9 +18087,9 @@ var enMetadataForms = {
18564
18087
  label: "Bulk Enabled",
18565
18088
  helpText: "Allow applying to multiple selected records"
18566
18089
  },
18567
- aiExposed: {
18568
- label: "Ai Exposed",
18569
- helpText: "Allow AI agents to call this action"
18090
+ ai: {
18091
+ label: "Ai",
18092
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
18570
18093
  },
18571
18094
  recordIdParam: {
18572
18095
  label: "Record Id Param",
@@ -18589,13 +18112,9 @@ var enMetadataForms = {
18589
18112
  label: "Basics",
18590
18113
  description: "Identity and data source."
18591
18114
  },
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."
18115
+ dataset_binding: {
18116
+ label: "Dataset binding",
18117
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
18599
18118
  },
18600
18119
  joined_blocks: {
18601
18120
  label: "Joined blocks",
@@ -18621,33 +18140,37 @@ var enMetadataForms = {
18621
18140
  description: {
18622
18141
  label: "Description"
18623
18142
  },
18624
- objectName: {
18625
- label: "Object Name",
18626
- helpText: "Data source object"
18627
- },
18628
18143
  type: {
18629
18144
  label: "Type",
18630
18145
  helpText: "Report type: tabular/summary/matrix/joined"
18631
18146
  },
18147
+ dataset: {
18148
+ label: "Dataset",
18149
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
18150
+ },
18151
+ values: {
18152
+ label: "Values",
18153
+ helpText: "Measure names (from the dataset) to display"
18154
+ },
18155
+ rows: {
18156
+ label: "Rows",
18157
+ helpText: "Dimension names (from the dataset) to group rows by"
18158
+ },
18632
18159
  columns: {
18633
18160
  label: "Columns",
18634
18161
  helpText: "Columns to display in the report"
18635
18162
  },
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)"
18163
+ drilldown: {
18164
+ label: "Drilldown",
18165
+ helpText: "Click an aggregated row/cell to open the underlying records"
18643
18166
  },
18644
18167
  blocks: {
18645
18168
  label: "Blocks",
18646
18169
  helpText: "Join multiple objects (joined report only)"
18647
18170
  },
18648
- filter: {
18649
- label: "Filter",
18650
- helpText: "Report-level filters"
18171
+ runtimeFilter: {
18172
+ label: "Runtime Filter",
18173
+ helpText: "Render-time scope filter, ANDed at query time"
18651
18174
  },
18652
18175
  chart: {
18653
18176
  label: "Chart",
@@ -18663,6 +18186,62 @@ var enMetadataForms = {
18663
18186
  }
18664
18187
  }
18665
18188
  },
18189
+ dataset: {
18190
+ label: "Dataset",
18191
+ description: "Analytics semantic layer \u2014 dimensions & measures",
18192
+ sections: {
18193
+ basics: {
18194
+ label: "Basics",
18195
+ description: "Dataset identity."
18196
+ },
18197
+ source: {
18198
+ label: "Source",
18199
+ 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."
18200
+ },
18201
+ dimensions: {
18202
+ label: "Dimensions",
18203
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
18204
+ },
18205
+ measures: {
18206
+ label: "Measures",
18207
+ 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."
18208
+ }
18209
+ },
18210
+ fields: {
18211
+ name: {
18212
+ label: "Name",
18213
+ helpText: "snake_case unique identifier"
18214
+ },
18215
+ label: {
18216
+ label: "Label",
18217
+ helpText: "Display name"
18218
+ },
18219
+ description: {
18220
+ label: "Description",
18221
+ helpText: "What this dataset measures"
18222
+ },
18223
+ object: {
18224
+ label: "Object",
18225
+ helpText: "Base object \u2014 the FROM"
18226
+ },
18227
+ include: {
18228
+ label: "Include",
18229
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
18230
+ },
18231
+ filter: {
18232
+ label: "Filter",
18233
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
18234
+ },
18235
+ dimensions: {
18236
+ label: "Dimensions",
18237
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
18238
+ },
18239
+ measures: {
18240
+ label: "Measures",
18241
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
18242
+ }
18243
+ }
18244
+ },
18666
18245
  flow: {
18667
18246
  label: "Flow",
18668
18247
  sections: {
@@ -18742,15 +18321,6 @@ var enMetadataForms = {
18742
18321
  translation: {
18743
18322
  label: "Translation"
18744
18323
  },
18745
- router: {
18746
- label: "Router"
18747
- },
18748
- function: {
18749
- label: "Function"
18750
- },
18751
- service: {
18752
- label: "Service"
18753
- },
18754
18324
  email_template: {
18755
18325
  label: "Email Template",
18756
18326
  sections: {
@@ -18831,6 +18401,14 @@ var enMetadataForms = {
18831
18401
  }
18832
18402
  }
18833
18403
  },
18404
+ doc: {
18405
+ label: "Documentation",
18406
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
18407
+ },
18408
+ book: {
18409
+ label: "Documentation Book",
18410
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
18411
+ },
18834
18412
  permission: {
18835
18413
  label: "Permission Set",
18836
18414
  sections: {
@@ -19391,6 +18969,70 @@ var zhCNMetadataForms = {
19391
18969
  datasource: {
19392
18970
  label: "\u6570\u636E\u6E90",
19393
18971
  helpText: '\u76EE\u6807\u6570\u636E\u6E90 ID\uFF08\u9ED8\u8BA4\uFF1A"default"\uFF09'
18972
+ },
18973
+ lifecycle: {
18974
+ label: "\u6570\u636E\u751F\u547D\u5468\u671F",
18975
+ 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"
18976
+ },
18977
+ "lifecycle.class": {
18978
+ label: "\u751F\u547D\u5468\u671F\u7C7B\u522B",
18979
+ helpText: "\u672C\u5BF9\u8C61\u6570\u636E\u7684\u6301\u4E45\u5316\u5951\u7EA6"
18980
+ },
18981
+ "lifecycle.retention": {
18982
+ label: "\u4FDD\u7559\u671F",
18983
+ helpText: "\u6309\u6570\u636E\u5E74\u9F84\u754C\u5B9A\u7684\u4FDD\u7559\u7A97\u53E3"
18984
+ },
18985
+ "lifecycle.retention.maxAge": {
18986
+ label: "\u6700\u957F\u4FDD\u7559",
18987
+ 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"'
18988
+ },
18989
+ "lifecycle.ttl": {
18990
+ label: "TTL \u8FC7\u671F",
18991
+ helpText: "\u6309\u884C\u7684 TTL \u81EA\u52A8\u8FC7\u671F"
18992
+ },
18993
+ "lifecycle.ttl.field": {
18994
+ label: "\u65F6\u95F4\u5B57\u6BB5",
18995
+ helpText: "TTL \u8BA1\u65F6\u8D77\u70B9\u7684\u65F6\u95F4\u6233\u5B57\u6BB5\uFF08\u5982 expires_at\uFF09"
18996
+ },
18997
+ "lifecycle.ttl.expireAfter": {
18998
+ label: "\u8FC7\u671F\u65F6\u957F",
18999
+ helpText: '\u884C\u5728\u8BE5\u5B57\u6BB5\u4E4B\u540E\u8FD9\u4E48\u4E45\u8FC7\u671F\uFF0C\u5982 "1d"'
19000
+ },
19001
+ "lifecycle.storage": {
19002
+ label: "\u5B58\u50A8\u7B56\u7565",
19003
+ helpText: "\u9AD8\u9891\u9065\u6D4B\u7684\u7269\u7406\u8F6E\u8F6C\uFF08SQLite\uFF1AO(1) \u5206\u7247 DROP\uFF09"
19004
+ },
19005
+ "lifecycle.storage.strategy": {
19006
+ label: "\u7B56\u7565",
19007
+ helpText: "\u5B58\u50A8\u7B56\u7565"
19008
+ },
19009
+ "lifecycle.storage.shards": {
19010
+ label: "\u5206\u7247\u6570",
19011
+ helpText: "\u4FDD\u7559\u7684\u5206\u7247\u6570\u91CF\uFF1B\u603B\u7A97\u53E3 = \u5206\u7247\u6570 \xD7 \u5355\u4F4D"
19012
+ },
19013
+ "lifecycle.storage.unit": {
19014
+ label: "\u5206\u7247\u5355\u4F4D",
19015
+ helpText: "\u5355\u4E2A\u5206\u7247\u7684\u65F6\u95F4\u5BBD\u5EA6"
19016
+ },
19017
+ "lifecycle.archive": {
19018
+ label: "\u5F52\u6863",
19019
+ 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"
19020
+ },
19021
+ "lifecycle.archive.after": {
19022
+ label: "\u5F52\u6863\u65F6\u70B9",
19023
+ helpText: "\u65E9\u4E8E\u8BE5\u7A97\u53E3\u7684\u884C\u8FDB\u5165\u5F52\u6863 \u2014 \u5FC5\u987B\u7B49\u4E8E retention.maxAge"
19024
+ },
19025
+ "lifecycle.archive.to": {
19026
+ label: "\u5F52\u6863\u6570\u636E\u6E90",
19027
+ helpText: "\u51B7\u5B58\u50A8\u7684\u76EE\u6807\u6570\u636E\u6E90\u540D\u79F0"
19028
+ },
19029
+ "lifecycle.archive.keep": {
19030
+ label: "\u5F52\u6863\u4FDD\u7559",
19031
+ helpText: '\u5F52\u6863\u4E2D\u4FDD\u7559\u591A\u4E45\uFF08\u7559\u7A7A = \u6C38\u4E45\uFF09\uFF0C\u5982 "7y"'
19032
+ },
19033
+ "lifecycle.reclaim": {
19034
+ label: "\u7A7A\u95F4\u56DE\u6536",
19035
+ helpText: "\u6E05\u7406\u540E\u56DE\u6536\u9A71\u52A8\u5C42\u7A7A\u95F4\uFF08\u975E record \u7C7B\u9ED8\u8BA4\u5F00\u542F\uFF09"
19394
19036
  }
19395
19037
  }
19396
19038
  },
@@ -19499,10 +19141,6 @@ var zhCNMetadataForms = {
19499
19141
  label: "\u6C47\u603B\u64CD\u4F5C",
19500
19142
  helpText: "\u7236\u5B50\u5173\u7CFB\u4E0B\u7684\u6C47\u603B\u805A\u5408\u914D\u7F6E"
19501
19143
  },
19502
- cached: {
19503
- label: "\u7F13\u5B58",
19504
- helpText: "\u8BA1\u7B97\u5B57\u6BB5\u7684\u7F13\u5B58\u914D\u7F6E"
19505
- },
19506
19144
  columnName: {
19507
19145
  label: "\u5217\u540D",
19508
19146
  helpText: "\u6570\u636E\u5E93\u4E2D\u7684\u7269\u7406\u5217\u540D\uFF08\u9ED8\u8BA4\u4E0E\u5B57\u6BB5\u540D\u76F8\u540C\uFF09"
@@ -19530,28 +19168,9 @@ var zhCNMetadataForms = {
19530
19168
  sortable: {
19531
19169
  label: "\u53EF\u6392\u5E8F",
19532
19170
  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
19171
  }
19550
19172
  }
19551
19173
  },
19552
- trigger: {
19553
- label: "\u89E6\u53D1\u5668"
19554
- },
19555
19174
  validation: {
19556
19175
  label: "\u9A8C\u8BC1\u89C4\u5219"
19557
19176
  },
@@ -19628,12 +19247,36 @@ var zhCNMetadataForms = {
19628
19247
  onError: {
19629
19248
  label: "\u9519\u8BEF\u5904\u7406"
19630
19249
  },
19250
+ timeout: {
19251
+ label: "Timeout",
19252
+ helpText: "Abort the hook after N milliseconds"
19253
+ },
19631
19254
  condition: {
19632
19255
  label: "\u6761\u4EF6",
19633
19256
  helpText: "\u53EF\u9009\u516C\u5F0F\u2014\u2014\u6C42\u503C\u4E3A false \u65F6\u8DF3\u8FC7\u8BE5\u94A9\u5B50"
19257
+ },
19258
+ retryPolicy: {
19259
+ label: "Retry Policy",
19260
+ helpText: "Retry on failure \u2014 most useful for async hooks"
19261
+ },
19262
+ "retryPolicy.maxRetries": {
19263
+ label: "Max Retries",
19264
+ helpText: "Maximum retry attempts"
19265
+ },
19266
+ "retryPolicy.backoffMs": {
19267
+ label: "Backoff Ms",
19268
+ helpText: "Delay between retries (ms)"
19634
19269
  }
19635
19270
  }
19636
19271
  },
19272
+ seed: {
19273
+ label: "Seed Data",
19274
+ description: "Fixture / initialization data applied on publish"
19275
+ },
19276
+ mapping: {
19277
+ label: "Import Mapping",
19278
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
19279
+ },
19637
19280
  view: {
19638
19281
  label: "\u89C6\u56FE",
19639
19282
  sections: {
@@ -19805,6 +19448,10 @@ var zhCNMetadataForms = {
19805
19448
  label: "\u5E03\u5C40",
19806
19449
  description: "\u9875\u9762\u533A\u5757\u4E0E\u7EC4\u4EF6"
19807
19450
  },
19451
+ interface: {
19452
+ label: "Interface (list pages)",
19453
+ 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."
19454
+ },
19808
19455
  advanced: {
19809
19456
  label: "\u9AD8\u7EA7\u8BBE\u7F6E",
19810
19457
  description: "\u9ED8\u8BA4\u9875\u3001\u7C7B\u578B\u4E0E\u5206\u914D"
@@ -19847,6 +19494,58 @@ var zhCNMetadataForms = {
19847
19494
  label: "\u533A\u57DF",
19848
19495
  helpText: "\u5E03\u5C40\u533A\u57DF\uFF08header\u3001main\u3001sidebar\u3001footer\uFF09\u53CA\u5176\u7EC4\u4EF6"
19849
19496
  },
19497
+ interfaceConfig: {
19498
+ label: "Interface Config",
19499
+ 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."
19500
+ },
19501
+ "interfaceConfig.source": {
19502
+ label: "Source",
19503
+ helpText: "Object this page reads from"
19504
+ },
19505
+ "interfaceConfig.columns": {
19506
+ label: "Columns",
19507
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
19508
+ },
19509
+ "interfaceConfig.filterBy": {
19510
+ label: "Filter By",
19511
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
19512
+ },
19513
+ "interfaceConfig.levels": {
19514
+ label: "Levels",
19515
+ helpText: "Hierarchy levels to display (tree-like sources)"
19516
+ },
19517
+ "interfaceConfig.appearance": {
19518
+ label: "Appearance",
19519
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
19520
+ },
19521
+ "interfaceConfig.userFilters": {
19522
+ label: "User Filters",
19523
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
19524
+ },
19525
+ "interfaceConfig.userActions": {
19526
+ label: "User Actions",
19527
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
19528
+ },
19529
+ "interfaceConfig.addRecord": {
19530
+ label: "Add Record",
19531
+ helpText: "Add-record entry point"
19532
+ },
19533
+ "interfaceConfig.buttons": {
19534
+ label: "Buttons",
19535
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
19536
+ },
19537
+ "interfaceConfig.recordAction": {
19538
+ label: "Record Action",
19539
+ helpText: "How clicking a record opens its detail"
19540
+ },
19541
+ "interfaceConfig.showRecordCount": {
19542
+ label: "Show Record Count",
19543
+ helpText: "Show the record count bar"
19544
+ },
19545
+ "interfaceConfig.allowPrinting": {
19546
+ label: "Allow Printing",
19547
+ helpText: "Allow users to print this page"
19548
+ },
19850
19549
  isDefault: {
19851
19550
  label: "\u9ED8\u8BA4",
19852
19551
  helpText: "\u8BBE\u4E3A\u8BE5\u9875\u9762\u7C7B\u578B\u7684\u9ED8\u8BA4\u9875"
@@ -20095,6 +19794,22 @@ var zhCNMetadataForms = {
20095
19794
  label: "\u6B63\u6587",
20096
19795
  helpText: "\u8981\u6267\u884C\u7684 JavaScript \u4EE3\u7801"
20097
19796
  },
19797
+ "body.language": {
19798
+ label: "Language",
19799
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
19800
+ },
19801
+ "body.source": {
19802
+ label: "Source",
19803
+ helpText: "Function body source \u2014 no top-level imports"
19804
+ },
19805
+ "body.capabilities": {
19806
+ label: "Capabilities",
19807
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
19808
+ },
19809
+ "body.timeoutMs": {
19810
+ label: "Timeout Ms",
19811
+ helpText: "Per-invocation timeout (ms)"
19812
+ },
20098
19813
  params: {
20099
19814
  label: "\u53C2\u6570",
20100
19815
  helpText: "\u6267\u884C\u524D\u5411\u7528\u6237\u6536\u96C6\u7684\u8F93\u5165\u53C2\u6570"
@@ -20135,9 +19850,9 @@ var zhCNMetadataForms = {
20135
19850
  label: "\u6279\u91CF\u542F\u7528",
20136
19851
  helpText: "\u5141\u8BB8\u5BF9\u591A\u6761\u9009\u4E2D\u8BB0\u5F55\u6267\u884C"
20137
19852
  },
20138
- aiExposed: {
20139
- label: "\u66B4\u9732\u7ED9 AI",
20140
- helpText: "\u5141\u8BB8 AI \u667A\u80FD\u4F53\u8C03\u7528\u6B64\u64CD\u4F5C"
19853
+ ai: {
19854
+ label: "Ai",
19855
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
20141
19856
  },
20142
19857
  recordIdParam: {
20143
19858
  label: "\u8BB0\u5F55 ID \u53C2\u6570",
@@ -20160,13 +19875,9 @@ var zhCNMetadataForms = {
20160
19875
  label: "\u57FA\u7840\u4FE1\u606F",
20161
19876
  description: "\u540D\u79F0\u4E0E\u6570\u636E\u6E90"
20162
19877
  },
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"
19878
+ dataset_binding: {
19879
+ label: "Dataset binding",
19880
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
20170
19881
  },
20171
19882
  joined_blocks: {
20172
19883
  label: "\u5173\u8054\u5BF9\u8C61",
@@ -20192,45 +19903,105 @@ var zhCNMetadataForms = {
20192
19903
  description: {
20193
19904
  label: "\u63CF\u8FF0"
20194
19905
  },
20195
- objectName: {
20196
- label: "\u5BF9\u8C61\u540D\u79F0",
20197
- helpText: "\u62A5\u8868\u6570\u636E\u6E90\u5BF9\u8C61"
20198
- },
20199
19906
  type: {
20200
19907
  label: "\u7C7B\u578B",
20201
19908
  helpText: "\u62A5\u8868\u7C7B\u578B\uFF1Atabular / summary / matrix / joined"
20202
19909
  },
19910
+ dataset: {
19911
+ label: "Dataset",
19912
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
19913
+ },
19914
+ values: {
19915
+ label: "Values",
19916
+ helpText: "Measure names (from the dataset) to display"
19917
+ },
19918
+ rows: {
19919
+ label: "Rows",
19920
+ helpText: "Dimension names (from the dataset) to group rows by"
19921
+ },
20203
19922
  columns: {
20204
19923
  label: "\u5217",
20205
19924
  helpText: "\u62A5\u8868\u4E2D\u663E\u793A\u7684\u5217"
20206
19925
  },
20207
- groupingsDown: {
20208
- label: "\u884C\u5206\u7EC4",
20209
- helpText: "\u884C\u65B9\u5411\u5206\u7EC4\u5C42\u7EA7"
19926
+ drilldown: {
19927
+ label: "Drilldown",
19928
+ helpText: "Click an aggregated row/cell to open the underlying records"
19929
+ },
19930
+ blocks: {
19931
+ label: "\u5206\u5757",
19932
+ helpText: "joined \u62A5\u8868\u7684\u8054\u5408\u67E5\u8BE2\u5757"
19933
+ },
19934
+ runtimeFilter: {
19935
+ label: "Runtime Filter",
19936
+ helpText: "Render-time scope filter, ANDed at query time"
19937
+ },
19938
+ chart: {
19939
+ label: "\u56FE\u8868",
19940
+ helpText: "\u56FE\u8868\u7C7B\u578B\u4E0E\u914D\u7F6E"
19941
+ },
19942
+ aria: {
19943
+ label: "\u65E0\u969C\u788D",
19944
+ helpText: "\u65E0\u969C\u788D\u6807\u7B7E\u4E0E\u89D2\u8272"
19945
+ },
19946
+ performance: {
19947
+ label: "\u6027\u80FD",
19948
+ helpText: "\u6027\u80FD\u4E0E\u7F13\u5B58\u7B56\u7565"
19949
+ }
19950
+ }
19951
+ },
19952
+ dataset: {
19953
+ label: "Dataset",
19954
+ description: "Analytics semantic layer \u2014 dimensions & measures",
19955
+ sections: {
19956
+ basics: {
19957
+ label: "Basics",
19958
+ description: "Dataset identity."
19959
+ },
19960
+ source: {
19961
+ label: "Source",
19962
+ 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."
19963
+ },
19964
+ dimensions: {
19965
+ label: "Dimensions",
19966
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
19967
+ },
19968
+ measures: {
19969
+ label: "Measures",
19970
+ 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."
19971
+ }
19972
+ },
19973
+ fields: {
19974
+ name: {
19975
+ label: "Name",
19976
+ helpText: "snake_case unique identifier"
19977
+ },
19978
+ label: {
19979
+ label: "Label",
19980
+ helpText: "Display name"
19981
+ },
19982
+ description: {
19983
+ label: "Description",
19984
+ helpText: "What this dataset measures"
20210
19985
  },
20211
- groupingsAcross: {
20212
- label: "\u5217\u5206\u7EC4",
20213
- helpText: "\u5217\u65B9\u5411\u5206\u7EC4\u5C42\u7EA7\uFF08matrix \u62A5\u8868\uFF09"
19986
+ object: {
19987
+ label: "Object",
19988
+ helpText: "Base object \u2014 the FROM"
20214
19989
  },
20215
- blocks: {
20216
- label: "\u5206\u5757",
20217
- helpText: "joined \u62A5\u8868\u7684\u8054\u5408\u67E5\u8BE2\u5757"
19990
+ include: {
19991
+ label: "Include",
19992
+ 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
19993
  },
20219
19994
  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"
19995
+ label: "Filter",
19996
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
20226
19997
  },
20227
- aria: {
20228
- label: "\u65E0\u969C\u788D",
20229
- helpText: "\u65E0\u969C\u788D\u6807\u7B7E\u4E0E\u89D2\u8272"
19998
+ dimensions: {
19999
+ label: "Dimensions",
20000
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
20230
20001
  },
20231
- performance: {
20232
- label: "\u6027\u80FD",
20233
- helpText: "\u6027\u80FD\u4E0E\u7F13\u5B58\u7B56\u7565"
20002
+ measures: {
20003
+ label: "Measures",
20004
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
20234
20005
  }
20235
20006
  }
20236
20007
  },
@@ -20313,15 +20084,6 @@ var zhCNMetadataForms = {
20313
20084
  translation: {
20314
20085
  label: "\u7FFB\u8BD1"
20315
20086
  },
20316
- router: {
20317
- label: "\u8DEF\u7531\u5668"
20318
- },
20319
- function: {
20320
- label: "\u51FD\u6570"
20321
- },
20322
- service: {
20323
- label: "\u670D\u52A1"
20324
- },
20325
20087
  email_template: {
20326
20088
  label: "\u90AE\u4EF6\u6A21\u677F",
20327
20089
  sections: {
@@ -20402,6 +20164,14 @@ var zhCNMetadataForms = {
20402
20164
  }
20403
20165
  }
20404
20166
  },
20167
+ doc: {
20168
+ label: "Documentation",
20169
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
20170
+ },
20171
+ book: {
20172
+ label: "Documentation Book",
20173
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
20174
+ },
20405
20175
  permission: {
20406
20176
  label: "\u6743\u9650\u96C6 / \u914D\u7F6E\u6587\u4EF6",
20407
20177
  sections: {
@@ -20962,6 +20732,70 @@ var jaJPMetadataForms = {
20962
20732
  datasource: {
20963
20733
  label: "\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9",
20964
20734
  helpText: '\u5BFE\u8C61\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 ID\uFF08\u65E2\u5B9A: "default"\uFF09'
20735
+ },
20736
+ lifecycle: {
20737
+ label: "Lifecycle",
20738
+ 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)."
20739
+ },
20740
+ "lifecycle.class": {
20741
+ label: "Class",
20742
+ helpText: "Persistence contract for the rows of this object"
20743
+ },
20744
+ "lifecycle.retention": {
20745
+ label: "Retention",
20746
+ helpText: "Age-based retention window"
20747
+ },
20748
+ "lifecycle.retention.maxAge": {
20749
+ label: "Max Age",
20750
+ helpText: 'Rows older than this (by created_at) are reaped. Duration literal: h/d/w/y, e.g. "30d"'
20751
+ },
20752
+ "lifecycle.ttl": {
20753
+ label: "Ttl",
20754
+ helpText: "Per-row TTL expiry"
20755
+ },
20756
+ "lifecycle.ttl.field": {
20757
+ label: "Field",
20758
+ helpText: "Timestamp field the TTL is measured from (e.g. expires_at)"
20759
+ },
20760
+ "lifecycle.ttl.expireAfter": {
20761
+ label: "Expire After",
20762
+ helpText: 'Rows expire this long after the field, e.g. "1d"'
20763
+ },
20764
+ "lifecycle.storage": {
20765
+ label: "Storage",
20766
+ helpText: "Physical rotation for high-frequency telemetry (SQLite: O(1) shard DROP)"
20767
+ },
20768
+ "lifecycle.storage.strategy": {
20769
+ label: "Strategy",
20770
+ helpText: "Storage strategy"
20771
+ },
20772
+ "lifecycle.storage.shards": {
20773
+ label: "Shards",
20774
+ helpText: "Shards retained; total window = shards \xD7 unit"
20775
+ },
20776
+ "lifecycle.storage.unit": {
20777
+ label: "Unit",
20778
+ helpText: "Time width of one shard"
20779
+ },
20780
+ "lifecycle.archive": {
20781
+ label: "Archive",
20782
+ helpText: "Cold-store hand-off (audit class). Rows are never hot-deleted before the archive copy succeeded."
20783
+ },
20784
+ "lifecycle.archive.after": {
20785
+ label: "After",
20786
+ helpText: "Archive rows older than this \u2014 must equal retention.maxAge"
20787
+ },
20788
+ "lifecycle.archive.to": {
20789
+ label: "To",
20790
+ helpText: "Target datasource name for cold storage"
20791
+ },
20792
+ "lifecycle.archive.keep": {
20793
+ label: "Keep",
20794
+ helpText: 'How long the archive keeps rows (empty = forever), e.g. "7y"'
20795
+ },
20796
+ "lifecycle.reclaim": {
20797
+ label: "Reclaim",
20798
+ helpText: "Reclaim driver space after sweeps (default on for non-record classes)"
20965
20799
  }
20966
20800
  }
20967
20801
  },
@@ -21070,10 +20904,6 @@ var jaJPMetadataForms = {
21070
20904
  label: "\u96C6\u8A08\u64CD\u4F5C",
21071
20905
  helpText: "\u30ED\u30FC\u30EB\u30A2\u30C3\u30D7\u96C6\u8A08\u8A2D\u5B9A\uFF08\u89AA\u5B50\u95A2\u4FC2\u7528\uFF09"
21072
20906
  },
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
20907
  columnName: {
21078
20908
  label: "\u5217\u540D",
21079
20909
  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 +20931,9 @@ var jaJPMetadataForms = {
21101
20931
  sortable: {
21102
20932
  label: "\u4E26\u3073\u66FF\u3048\u53EF\u80FD",
21103
20933
  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
20934
  }
21121
20935
  }
21122
20936
  },
21123
- trigger: {
21124
- label: "\u30C8\u30EA\u30AC\u30FC"
21125
- },
21126
20937
  validation: {
21127
20938
  label: "\u691C\u8A3C\u30EB\u30FC\u30EB"
21128
20939
  },
@@ -21199,12 +21010,36 @@ var jaJPMetadataForms = {
21199
21010
  onError: {
21200
21011
  label: "\u30A8\u30E9\u30FC\u6642"
21201
21012
  },
21013
+ timeout: {
21014
+ label: "Timeout",
21015
+ helpText: "Abort the hook after N milliseconds"
21016
+ },
21202
21017
  condition: {
21203
21018
  label: "\u6761\u4EF6",
21204
21019
  helpText: "\u4EFB\u610F\u306E\u6570\u5F0F \u2014 false \u8A55\u4FA1\u6642\u306F\u30D5\u30C3\u30AF\u3092\u30B9\u30AD\u30C3\u30D7"
21020
+ },
21021
+ retryPolicy: {
21022
+ label: "Retry Policy",
21023
+ helpText: "Retry on failure \u2014 most useful for async hooks"
21024
+ },
21025
+ "retryPolicy.maxRetries": {
21026
+ label: "Max Retries",
21027
+ helpText: "Maximum retry attempts"
21028
+ },
21029
+ "retryPolicy.backoffMs": {
21030
+ label: "Backoff Ms",
21031
+ helpText: "Delay between retries (ms)"
21205
21032
  }
21206
21033
  }
21207
21034
  },
21035
+ seed: {
21036
+ label: "Seed Data",
21037
+ description: "Fixture / initialization data applied on publish"
21038
+ },
21039
+ mapping: {
21040
+ label: "Import Mapping",
21041
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
21042
+ },
21208
21043
  view: {
21209
21044
  label: "\u30D3\u30E5\u30FC",
21210
21045
  sections: {
@@ -21376,6 +21211,10 @@ var jaJPMetadataForms = {
21376
21211
  label: "\u30EC\u30A4\u30A2\u30A6\u30C8",
21377
21212
  description: "\u30DA\u30FC\u30B8\u9818\u57DF\u3068\u305D\u3053\u306B\u914D\u7F6E\u3059\u308B\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3002"
21378
21213
  },
21214
+ interface: {
21215
+ label: "Interface (list pages)",
21216
+ 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."
21217
+ },
21379
21218
  advanced: {
21380
21219
  label: "\u8A73\u7D30",
21381
21220
  description: "\u6709\u52B9\u5316\u3001\u5BFE\u8C61\u30E6\u30FC\u30B6\u30FC\u3001\u30A2\u30AF\u30BB\u30B7\u30D3\u30EA\u30C6\u30A3\u3002"
@@ -21418,6 +21257,58 @@ var jaJPMetadataForms = {
21418
21257
  label: "\u30EA\u30FC\u30B8\u30E7\u30F3",
21419
21258
  helpText: "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u542B\u3080\u30EC\u30A4\u30A2\u30A6\u30C8\u9818\u57DF\uFF08header, main, sidebar, footer\uFF09"
21420
21259
  },
21260
+ interfaceConfig: {
21261
+ label: "Interface Config",
21262
+ 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."
21263
+ },
21264
+ "interfaceConfig.source": {
21265
+ label: "Source",
21266
+ helpText: "Object this page reads from"
21267
+ },
21268
+ "interfaceConfig.columns": {
21269
+ label: "Columns",
21270
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
21271
+ },
21272
+ "interfaceConfig.filterBy": {
21273
+ label: "Filter By",
21274
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
21275
+ },
21276
+ "interfaceConfig.levels": {
21277
+ label: "Levels",
21278
+ helpText: "Hierarchy levels to display (tree-like sources)"
21279
+ },
21280
+ "interfaceConfig.appearance": {
21281
+ label: "Appearance",
21282
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
21283
+ },
21284
+ "interfaceConfig.userFilters": {
21285
+ label: "User Filters",
21286
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
21287
+ },
21288
+ "interfaceConfig.userActions": {
21289
+ label: "User Actions",
21290
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
21291
+ },
21292
+ "interfaceConfig.addRecord": {
21293
+ label: "Add Record",
21294
+ helpText: "Add-record entry point"
21295
+ },
21296
+ "interfaceConfig.buttons": {
21297
+ label: "Buttons",
21298
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
21299
+ },
21300
+ "interfaceConfig.recordAction": {
21301
+ label: "Record Action",
21302
+ helpText: "How clicking a record opens its detail"
21303
+ },
21304
+ "interfaceConfig.showRecordCount": {
21305
+ label: "Show Record Count",
21306
+ helpText: "Show the record count bar"
21307
+ },
21308
+ "interfaceConfig.allowPrinting": {
21309
+ label: "Allow Printing",
21310
+ helpText: "Allow users to print this page"
21311
+ },
21421
21312
  isDefault: {
21422
21313
  label: "\u65E2\u5B9A",
21423
21314
  helpText: "\u3053\u306E\u30DA\u30FC\u30B8\u7A2E\u5225\u306E\u65E2\u5B9A\u30DA\u30FC\u30B8\u306B\u8A2D\u5B9A"
@@ -21666,6 +21557,22 @@ var jaJPMetadataForms = {
21666
21557
  label: "\u672C\u6587",
21667
21558
  helpText: "\u5B9F\u884C\u3059\u308B JavaScript \u30B3\u30FC\u30C9"
21668
21559
  },
21560
+ "body.language": {
21561
+ label: "Language",
21562
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
21563
+ },
21564
+ "body.source": {
21565
+ label: "Source",
21566
+ helpText: "Function body source \u2014 no top-level imports"
21567
+ },
21568
+ "body.capabilities": {
21569
+ label: "Capabilities",
21570
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
21571
+ },
21572
+ "body.timeoutMs": {
21573
+ label: "Timeout Ms",
21574
+ helpText: "Per-invocation timeout (ms)"
21575
+ },
21669
21576
  params: {
21670
21577
  label: "\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC",
21671
21578
  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 +21613,9 @@ var jaJPMetadataForms = {
21706
21613
  label: "\u4E00\u62EC\u64CD\u4F5C\u6709\u52B9",
21707
21614
  helpText: "\u9078\u629E\u3057\u305F\u8907\u6570\u30EC\u30B3\u30FC\u30C9\u3078\u306E\u9069\u7528\u3092\u8A31\u53EF"
21708
21615
  },
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"
21616
+ ai: {
21617
+ label: "Ai",
21618
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
21712
21619
  },
21713
21620
  recordIdParam: {
21714
21621
  label: "\u30EC\u30B3\u30FC\u30C9 ID \u30D1\u30E9\u30E1\u30FC\u30BF\u30FC",
@@ -21731,13 +21638,9 @@ var jaJPMetadataForms = {
21731
21638
  label: "\u57FA\u672C",
21732
21639
  description: "ID \u3068\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u3002"
21733
21640
  },
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"
21641
+ dataset_binding: {
21642
+ label: "Dataset binding",
21643
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
21741
21644
  },
21742
21645
  joined_blocks: {
21743
21646
  label: "\u7D50\u5408\u30D6\u30ED\u30C3\u30AF",
@@ -21763,33 +21666,37 @@ var jaJPMetadataForms = {
21763
21666
  description: {
21764
21667
  label: "\u8AAC\u660E"
21765
21668
  },
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
21669
  type: {
21771
21670
  label: "\u578B",
21772
21671
  helpText: "\u30EC\u30DD\u30FC\u30C8\u7A2E\u5225: tabular/summary/matrix/joined"
21773
21672
  },
21673
+ dataset: {
21674
+ label: "Dataset",
21675
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
21676
+ },
21677
+ values: {
21678
+ label: "Values",
21679
+ helpText: "Measure names (from the dataset) to display"
21680
+ },
21681
+ rows: {
21682
+ label: "Rows",
21683
+ helpText: "Dimension names (from the dataset) to group rows by"
21684
+ },
21774
21685
  columns: {
21775
21686
  label: "\u5217",
21776
21687
  helpText: "\u30EC\u30DD\u30FC\u30C8\u306B\u8868\u793A\u3059\u308B\u5217"
21777
21688
  },
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"
21689
+ drilldown: {
21690
+ label: "Drilldown",
21691
+ helpText: "Click an aggregated row/cell to open the underlying records"
21785
21692
  },
21786
21693
  blocks: {
21787
21694
  label: "\u30D6\u30ED\u30C3\u30AF",
21788
21695
  helpText: "\u8907\u6570\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u7D50\u5408\uFF08joined \u30EC\u30DD\u30FC\u30C8\u306E\u307F\uFF09"
21789
21696
  },
21790
- filter: {
21791
- label: "\u30D5\u30A3\u30EB\u30BF\u30FC",
21792
- helpText: "\u30EC\u30DD\u30FC\u30C8\u30EC\u30D9\u30EB\u306E\u30D5\u30A3\u30EB\u30BF\u30FC"
21697
+ runtimeFilter: {
21698
+ label: "Runtime Filter",
21699
+ helpText: "Render-time scope filter, ANDed at query time"
21793
21700
  },
21794
21701
  chart: {
21795
21702
  label: "\u30C1\u30E3\u30FC\u30C8",
@@ -21805,6 +21712,62 @@ var jaJPMetadataForms = {
21805
21712
  }
21806
21713
  }
21807
21714
  },
21715
+ dataset: {
21716
+ label: "Dataset",
21717
+ description: "Analytics semantic layer \u2014 dimensions & measures",
21718
+ sections: {
21719
+ basics: {
21720
+ label: "Basics",
21721
+ description: "Dataset identity."
21722
+ },
21723
+ source: {
21724
+ label: "Source",
21725
+ 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."
21726
+ },
21727
+ dimensions: {
21728
+ label: "Dimensions",
21729
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
21730
+ },
21731
+ measures: {
21732
+ label: "Measures",
21733
+ 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."
21734
+ }
21735
+ },
21736
+ fields: {
21737
+ name: {
21738
+ label: "Name",
21739
+ helpText: "snake_case unique identifier"
21740
+ },
21741
+ label: {
21742
+ label: "Label",
21743
+ helpText: "Display name"
21744
+ },
21745
+ description: {
21746
+ label: "Description",
21747
+ helpText: "What this dataset measures"
21748
+ },
21749
+ object: {
21750
+ label: "Object",
21751
+ helpText: "Base object \u2014 the FROM"
21752
+ },
21753
+ include: {
21754
+ label: "Include",
21755
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
21756
+ },
21757
+ filter: {
21758
+ label: "Filter",
21759
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
21760
+ },
21761
+ dimensions: {
21762
+ label: "Dimensions",
21763
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
21764
+ },
21765
+ measures: {
21766
+ label: "Measures",
21767
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
21768
+ }
21769
+ }
21770
+ },
21808
21771
  flow: {
21809
21772
  label: "\u30D5\u30ED\u30FC",
21810
21773
  sections: {
@@ -21884,15 +21847,6 @@ var jaJPMetadataForms = {
21884
21847
  translation: {
21885
21848
  label: "\u7FFB\u8A33"
21886
21849
  },
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
21850
  email_template: {
21897
21851
  label: "\u30E1\u30FC\u30EB\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8",
21898
21852
  sections: {
@@ -21973,6 +21927,14 @@ var jaJPMetadataForms = {
21973
21927
  }
21974
21928
  }
21975
21929
  },
21930
+ doc: {
21931
+ label: "Documentation",
21932
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
21933
+ },
21934
+ book: {
21935
+ label: "Documentation Book",
21936
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
21937
+ },
21976
21938
  permission: {
21977
21939
  label: "\u6A29\u9650\u30BB\u30C3\u30C8",
21978
21940
  sections: {
@@ -22533,6 +22495,70 @@ var esESMetadataForms = {
22533
22495
  datasource: {
22534
22496
  label: "Fuente de datos",
22535
22497
  helpText: 'ID de fuente de datos de destino (valor predeterminado: "default")'
22498
+ },
22499
+ lifecycle: {
22500
+ label: "Lifecycle",
22501
+ 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)."
22502
+ },
22503
+ "lifecycle.class": {
22504
+ label: "Class",
22505
+ helpText: "Persistence contract for the rows of this object"
22506
+ },
22507
+ "lifecycle.retention": {
22508
+ label: "Retention",
22509
+ helpText: "Age-based retention window"
22510
+ },
22511
+ "lifecycle.retention.maxAge": {
22512
+ label: "Max Age",
22513
+ helpText: 'Rows older than this (by created_at) are reaped. Duration literal: h/d/w/y, e.g. "30d"'
22514
+ },
22515
+ "lifecycle.ttl": {
22516
+ label: "Ttl",
22517
+ helpText: "Per-row TTL expiry"
22518
+ },
22519
+ "lifecycle.ttl.field": {
22520
+ label: "Field",
22521
+ helpText: "Timestamp field the TTL is measured from (e.g. expires_at)"
22522
+ },
22523
+ "lifecycle.ttl.expireAfter": {
22524
+ label: "Expire After",
22525
+ helpText: 'Rows expire this long after the field, e.g. "1d"'
22526
+ },
22527
+ "lifecycle.storage": {
22528
+ label: "Storage",
22529
+ helpText: "Physical rotation for high-frequency telemetry (SQLite: O(1) shard DROP)"
22530
+ },
22531
+ "lifecycle.storage.strategy": {
22532
+ label: "Strategy",
22533
+ helpText: "Storage strategy"
22534
+ },
22535
+ "lifecycle.storage.shards": {
22536
+ label: "Shards",
22537
+ helpText: "Shards retained; total window = shards \xD7 unit"
22538
+ },
22539
+ "lifecycle.storage.unit": {
22540
+ label: "Unit",
22541
+ helpText: "Time width of one shard"
22542
+ },
22543
+ "lifecycle.archive": {
22544
+ label: "Archive",
22545
+ helpText: "Cold-store hand-off (audit class). Rows are never hot-deleted before the archive copy succeeded."
22546
+ },
22547
+ "lifecycle.archive.after": {
22548
+ label: "After",
22549
+ helpText: "Archive rows older than this \u2014 must equal retention.maxAge"
22550
+ },
22551
+ "lifecycle.archive.to": {
22552
+ label: "To",
22553
+ helpText: "Target datasource name for cold storage"
22554
+ },
22555
+ "lifecycle.archive.keep": {
22556
+ label: "Keep",
22557
+ helpText: 'How long the archive keeps rows (empty = forever), e.g. "7y"'
22558
+ },
22559
+ "lifecycle.reclaim": {
22560
+ label: "Reclaim",
22561
+ helpText: "Reclaim driver space after sweeps (default on for non-record classes)"
22536
22562
  }
22537
22563
  }
22538
22564
  },
@@ -22641,10 +22667,6 @@ var esESMetadataForms = {
22641
22667
  label: "Operaciones de resumen",
22642
22668
  helpText: "Configuraci\xF3n de resumen roll-up (para relaciones padre-hijo)"
22643
22669
  },
22644
- cached: {
22645
- label: "En cach\xE9",
22646
- helpText: "Configuraci\xF3n de cach\xE9 para campos calculados"
22647
- },
22648
22670
  columnName: {
22649
22671
  label: "Nombre de columna",
22650
22672
  helpText: "Nombre de columna f\xEDsica en la base de datos (por defecto, el nombre del campo)"
@@ -22672,28 +22694,9 @@ var esESMetadataForms = {
22672
22694
  sortable: {
22673
22695
  label: "Ordenable",
22674
22696
  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
22697
  }
22692
22698
  }
22693
22699
  },
22694
- trigger: {
22695
- label: "Disparador"
22696
- },
22697
22700
  validation: {
22698
22701
  label: "Regla de validaci\xF3n"
22699
22702
  },
@@ -22770,12 +22773,36 @@ var esESMetadataForms = {
22770
22773
  onError: {
22771
22774
  label: "Al error"
22772
22775
  },
22776
+ timeout: {
22777
+ label: "Timeout",
22778
+ helpText: "Abort the hook after N milliseconds"
22779
+ },
22773
22780
  condition: {
22774
22781
  label: "Condici\xF3n",
22775
22782
  helpText: "F\xF3rmula opcional \u2014 omite el hook cuando eval\xFAa a false"
22783
+ },
22784
+ retryPolicy: {
22785
+ label: "Retry Policy",
22786
+ helpText: "Retry on failure \u2014 most useful for async hooks"
22787
+ },
22788
+ "retryPolicy.maxRetries": {
22789
+ label: "Max Retries",
22790
+ helpText: "Maximum retry attempts"
22791
+ },
22792
+ "retryPolicy.backoffMs": {
22793
+ label: "Backoff Ms",
22794
+ helpText: "Delay between retries (ms)"
22776
22795
  }
22777
22796
  }
22778
22797
  },
22798
+ seed: {
22799
+ label: "Seed Data",
22800
+ description: "Fixture / initialization data applied on publish"
22801
+ },
22802
+ mapping: {
22803
+ label: "Import Mapping",
22804
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
22805
+ },
22779
22806
  view: {
22780
22807
  label: "Vista",
22781
22808
  sections: {
@@ -22947,6 +22974,10 @@ var esESMetadataForms = {
22947
22974
  label: "Dise\xF1o",
22948
22975
  description: "Regiones de p\xE1gina y componentes colocados en ellas."
22949
22976
  },
22977
+ interface: {
22978
+ label: "Interface (list pages)",
22979
+ 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."
22980
+ },
22950
22981
  advanced: {
22951
22982
  label: "Avanzado",
22952
22983
  description: "Activaci\xF3n, audiencia y accesibilidad."
@@ -22989,6 +23020,58 @@ var esESMetadataForms = {
22989
23020
  label: "Regiones",
22990
23021
  helpText: "Regiones de dise\xF1o (header, main, sidebar, footer) con componentes"
22991
23022
  },
23023
+ interfaceConfig: {
23024
+ label: "Interface Config",
23025
+ 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."
23026
+ },
23027
+ "interfaceConfig.source": {
23028
+ label: "Source",
23029
+ helpText: "Object this page reads from"
23030
+ },
23031
+ "interfaceConfig.columns": {
23032
+ label: "Columns",
23033
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
23034
+ },
23035
+ "interfaceConfig.filterBy": {
23036
+ label: "Filter By",
23037
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
23038
+ },
23039
+ "interfaceConfig.levels": {
23040
+ label: "Levels",
23041
+ helpText: "Hierarchy levels to display (tree-like sources)"
23042
+ },
23043
+ "interfaceConfig.appearance": {
23044
+ label: "Appearance",
23045
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
23046
+ },
23047
+ "interfaceConfig.userFilters": {
23048
+ label: "User Filters",
23049
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
23050
+ },
23051
+ "interfaceConfig.userActions": {
23052
+ label: "User Actions",
23053
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
23054
+ },
23055
+ "interfaceConfig.addRecord": {
23056
+ label: "Add Record",
23057
+ helpText: "Add-record entry point"
23058
+ },
23059
+ "interfaceConfig.buttons": {
23060
+ label: "Buttons",
23061
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
23062
+ },
23063
+ "interfaceConfig.recordAction": {
23064
+ label: "Record Action",
23065
+ helpText: "How clicking a record opens its detail"
23066
+ },
23067
+ "interfaceConfig.showRecordCount": {
23068
+ label: "Show Record Count",
23069
+ helpText: "Show the record count bar"
23070
+ },
23071
+ "interfaceConfig.allowPrinting": {
23072
+ label: "Allow Printing",
23073
+ helpText: "Allow users to print this page"
23074
+ },
22992
23075
  isDefault: {
22993
23076
  label: "Predeterminado",
22994
23077
  helpText: "Establece como p\xE1gina predeterminada para este tipo de p\xE1gina"
@@ -23237,6 +23320,22 @@ var esESMetadataForms = {
23237
23320
  label: "Cuerpo",
23238
23321
  helpText: "C\xF3digo JavaScript que ejecutar"
23239
23322
  },
23323
+ "body.language": {
23324
+ label: "Language",
23325
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
23326
+ },
23327
+ "body.source": {
23328
+ label: "Source",
23329
+ helpText: "Function body source \u2014 no top-level imports"
23330
+ },
23331
+ "body.capabilities": {
23332
+ label: "Capabilities",
23333
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
23334
+ },
23335
+ "body.timeoutMs": {
23336
+ label: "Timeout Ms",
23337
+ helpText: "Per-invocation timeout (ms)"
23338
+ },
23240
23339
  params: {
23241
23340
  label: "Par\xE1metros",
23242
23341
  helpText: "Par\xE1metros de entrada de usuario (muestra el formulario antes de ejecutar)"
@@ -23277,9 +23376,9 @@ var esESMetadataForms = {
23277
23376
  label: "Acci\xF3n masiva",
23278
23377
  helpText: "Permite aplicar a varios registros seleccionados"
23279
23378
  },
23280
- aiExposed: {
23281
- label: "Expuesto a IA",
23282
- helpText: "Permite que agentes de IA llamen a esta acci\xF3n"
23379
+ ai: {
23380
+ label: "Ai",
23381
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
23283
23382
  },
23284
23383
  recordIdParam: {
23285
23384
  label: "Par\xE1metro de ID de registro",
@@ -23302,13 +23401,9 @@ var esESMetadataForms = {
23302
23401
  label: "Aspectos b\xE1sicos",
23303
23402
  description: "Identidad y fuente de datos."
23304
23403
  },
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)."
23404
+ dataset_binding: {
23405
+ label: "Dataset binding",
23406
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
23312
23407
  },
23313
23408
  joined_blocks: {
23314
23409
  label: "Bloques unidos",
@@ -23334,33 +23429,37 @@ var esESMetadataForms = {
23334
23429
  description: {
23335
23430
  label: "Descripci\xF3n"
23336
23431
  },
23337
- objectName: {
23338
- label: "Nombre de objeto",
23339
- helpText: "Objeto de fuente de datos"
23340
- },
23341
23432
  type: {
23342
23433
  label: "Tipo",
23343
23434
  helpText: "Tipo de informe: tabular/summary/matrix/joined"
23344
23435
  },
23436
+ dataset: {
23437
+ label: "Dataset",
23438
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
23439
+ },
23440
+ values: {
23441
+ label: "Values",
23442
+ helpText: "Measure names (from the dataset) to display"
23443
+ },
23444
+ rows: {
23445
+ label: "Rows",
23446
+ helpText: "Dimension names (from the dataset) to group rows by"
23447
+ },
23345
23448
  columns: {
23346
23449
  label: "Columnas",
23347
23450
  helpText: "Columnas que mostrar en el informe"
23348
23451
  },
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)"
23452
+ drilldown: {
23453
+ label: "Drilldown",
23454
+ helpText: "Click an aggregated row/cell to open the underlying records"
23356
23455
  },
23357
23456
  blocks: {
23358
23457
  label: "Bloques",
23359
23458
  helpText: "Une varios objetos (solo informe joined)"
23360
23459
  },
23361
- filter: {
23362
- label: "Filtro",
23363
- helpText: "Filtros a nivel de informe"
23460
+ runtimeFilter: {
23461
+ label: "Runtime Filter",
23462
+ helpText: "Render-time scope filter, ANDed at query time"
23364
23463
  },
23365
23464
  chart: {
23366
23465
  label: "Gr\xE1fico",
@@ -23376,6 +23475,62 @@ var esESMetadataForms = {
23376
23475
  }
23377
23476
  }
23378
23477
  },
23478
+ dataset: {
23479
+ label: "Dataset",
23480
+ description: "Analytics semantic layer \u2014 dimensions & measures",
23481
+ sections: {
23482
+ basics: {
23483
+ label: "Basics",
23484
+ description: "Dataset identity."
23485
+ },
23486
+ source: {
23487
+ label: "Source",
23488
+ 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."
23489
+ },
23490
+ dimensions: {
23491
+ label: "Dimensions",
23492
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
23493
+ },
23494
+ measures: {
23495
+ label: "Measures",
23496
+ 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."
23497
+ }
23498
+ },
23499
+ fields: {
23500
+ name: {
23501
+ label: "Name",
23502
+ helpText: "snake_case unique identifier"
23503
+ },
23504
+ label: {
23505
+ label: "Label",
23506
+ helpText: "Display name"
23507
+ },
23508
+ description: {
23509
+ label: "Description",
23510
+ helpText: "What this dataset measures"
23511
+ },
23512
+ object: {
23513
+ label: "Object",
23514
+ helpText: "Base object \u2014 the FROM"
23515
+ },
23516
+ include: {
23517
+ label: "Include",
23518
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
23519
+ },
23520
+ filter: {
23521
+ label: "Filter",
23522
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
23523
+ },
23524
+ dimensions: {
23525
+ label: "Dimensions",
23526
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
23527
+ },
23528
+ measures: {
23529
+ label: "Measures",
23530
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
23531
+ }
23532
+ }
23533
+ },
23379
23534
  flow: {
23380
23535
  label: "Flujo",
23381
23536
  sections: {
@@ -23455,15 +23610,6 @@ var esESMetadataForms = {
23455
23610
  translation: {
23456
23611
  label: "Traducci\xF3n"
23457
23612
  },
23458
- router: {
23459
- label: "Enrutador"
23460
- },
23461
- function: {
23462
- label: "Funci\xF3n"
23463
- },
23464
- service: {
23465
- label: "Servicio"
23466
- },
23467
23613
  email_template: {
23468
23614
  label: "Plantilla de email",
23469
23615
  sections: {
@@ -23544,6 +23690,14 @@ var esESMetadataForms = {
23544
23690
  }
23545
23691
  }
23546
23692
  },
23693
+ doc: {
23694
+ label: "Documentation",
23695
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
23696
+ },
23697
+ book: {
23698
+ label: "Documentation Book",
23699
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
23700
+ },
23547
23701
  permission: {
23548
23702
  label: "Conjunto de permisos",
23549
23703
  sections: {