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