@stndrds/schema 1.0.0-alpha.359 → 1.0.0-alpha.360

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.
@@ -1,2 +1,2 @@
1
1
  /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("zod");const t=`Object UUID, kebab-case name (e.g., 'contacts'), or display label (e.g., 'Personne physique'). All three are accepted; UUID is most precise.`,n=`Relevance ranking for a name or a phrase — matches tokens, not values. Exact criteria go in filters with NO query.`,r=` For large text content (> a few KB), write it to a sandbox file first and pass {"$fromSandboxFile": "/workspace/<file>"} as the attribute value — the server substitutes the file content.`,i=e.z.object({combinator:e.z.enum([`and`,`or`]).default(`and`),rules:e.z.array(e.z.object({attribute:e.z.string().describe(`Attribute name on the object being searched`),property:e.z.string().optional().describe(`Optional, and the only way to read one part of a compound value. On a relation / document / user attribute declared with .qualifyWith({...}) it names an EDGE property (not the linked record); on a location attribute it is one of city | postalCode | country, which is how a postal code or a city is filtered exactly. The operator must be valid for that property's type. See <filter_operators>.`),operator:e.z.string().describe(`Filter operator (canonical: is, is_not, contains, not_contains, starts_with, ends_with, less_than, greater_than, less_or_equal, greater_or_equal, is_within, on_day_month, any_of, none_of, is_empty, is_not_empty). Short codes (lt, gt, lte, gte, eq, neq, in) are accepted as input and auto-normalized to the canonical names. The valid set depends on the attribute type (or property type when 'property' is set) — see <filter_operators>.`),value:e.z.unknown().nullable().describe(`Value matching the attribute (or property) type: scalar for is/contains/less_than/etc (checkbox is: true|false); array (string[]) for any_of/none_of; null for is_empty/is_not_empty; { amount, unit, direction } for is_within; { day, month } for on_day_month.`)}))}),a=e.z.array(e.z.object({attribute:e.z.string().describe(`Attribute name`),direction:e.z.enum([`asc`,`desc`])})),o=e.z.object({recordId:e.z.string().describe(`Record UUID`),fields:e.z.array(e.z.string()).optional().describe(`Attribute names to return`)}),s=e.z.object({objectId:e.z.string().describe(t),_displayLabel:e.z.string().optional().describe(`Display label`),query:e.z.string().optional().describe(n),limit:e.z.number().optional().describe(`Max results per call: 1-1000 (default 20). Paginate via offset for more.`),offset:e.z.number().optional().describe(`Skip N records (default 0)`),fields:e.z.array(e.z.string()).optional().describe(`Attribute names to include in values`),filters:i.optional().describe(`Structured filter: { combinator: 'and'|'or', rules: [{attribute, operator, value, property?}] }. Operators are constrained per attribute type — see <filter_operators>. Use 'property' on a rule to filter on a qualified edge property.`),sorts:a.optional().describe(`Sorts: [{ attribute, direction: 'asc'|'desc' }]`)}),c=e.z.object({objectId:e.z.string().describe(t),_displayLabel:e.z.string().optional().describe(`Display label`),data:e.z.record(e.z.string(),e.z.unknown()).describe(`Record data.${r}`)}),l=e.z.object({recordId:e.z.string().describe(`Record UUID`),data:e.z.record(e.z.string(),e.z.unknown()).describe(`Fields to update.${r}`)}),u=e.z.object({recordId:e.z.string().describe(`Record UUID`)}),d={get_record:{name:`get_record`,kind:`read`,input:o},search_records:{name:`search_records`,kind:`read`,input:s},create_record:{name:`create_record`,kind:`create`,input:c},update_record:{name:`update_record`,kind:`update`,input:l},delete_record:{name:`delete_record`,kind:`delete`,input:u}};exports.OBJECT_ID_DESCRIPTION=t,exports.QUERY_DESCRIPTION=n,exports.RECORD_CAPABILITIES=d,exports.SANDBOX_FILE_DATA_HINT=r,exports.filtersSchema=i,exports.sortsSchema=a;
2
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("zod");const t=`Object UUID, kebab-case name (e.g., 'contacts'), or display label (e.g., 'Personne physique'). All three are accepted; UUID is most precise.`,n=`Relevance ranking for a name or a phrase — matches tokens, not values. Exact criteria go in filters with NO query.`,r=` For large text content (> a few KB), write it to a sandbox file first and pass {"$fromSandboxFile": "/workspace/<file>"} as the attribute value — the server substitutes the file content.`,i=e.z.object({combinator:e.z.enum([`and`,`or`]).default(`and`),rules:e.z.array(e.z.object({attribute:e.z.string().describe(`Attribute name on the object being searched`),property:e.z.string().optional().describe(`Optional, and the only way to read one part of a compound value. On a relation / document / user attribute declared with .qualifyWith({...}) it names an EDGE property (not the linked record); on a location attribute it is one of city | postalCode | country, which is how a postal code or a city is filtered exactly. The operator must be valid for that property's type. See <filter_operators>.`),operator:e.z.string().describe(`Filter operator (canonical: is, is_not, contains, not_contains, starts_with, ends_with, less_than, greater_than, less_or_equal, greater_or_equal, is_within, on_day_month, any_of, none_of, is_empty, is_not_empty). Short codes (lt, gt, lte, gte, eq, neq, in) are accepted as input and auto-normalized to the canonical names. The valid set depends on the attribute type (or property type when 'property' is set) — see <filter_operators>.`),value:e.z.unknown().nullable().describe(`Value matching the attribute (or property) type: scalar for is/contains/less_than/etc (checkbox is: true|false); array (string[]) for any_of/none_of; null for is_empty/is_not_empty; { amount, unit, direction } for is_within; { day, month } for on_day_month; on a user attribute (or createdBy / lastUpdatedBy), { dynamic: 'actor', ref: 'current' } (@me) is the person asking.`)}))}),a=e.z.array(e.z.object({attribute:e.z.string().describe(`Attribute name`),direction:e.z.enum([`asc`,`desc`])})),o=e.z.object({recordId:e.z.string().describe(`Record UUID`),fields:e.z.array(e.z.string()).optional().describe(`Attribute names to return`)}),s=e.z.object({objectId:e.z.string().describe(t),_displayLabel:e.z.string().optional().describe(`Display label`),query:e.z.string().optional().describe(n),limit:e.z.number().optional().describe(`Max results per call: 1-1000 (default 20). Paginate via offset for more.`),offset:e.z.number().optional().describe(`Skip N records (default 0)`),fields:e.z.array(e.z.string()).optional().describe(`Attribute names to include in values`),filters:i.optional().describe(`Structured filter: { combinator: 'and'|'or', rules: [{attribute, operator, value, property?}] }. Operators are constrained per attribute type — see <filter_operators>. Use 'property' on a rule to filter on a qualified edge property.`),sorts:a.optional().describe(`Sorts: [{ attribute, direction: 'asc'|'desc' }]`)}),c=e.z.object({objectId:e.z.string().describe(t),_displayLabel:e.z.string().optional().describe(`Display label`),data:e.z.record(e.z.string(),e.z.unknown()).describe(`Record data.${r}`)}),l=e.z.object({recordId:e.z.string().describe(`Record UUID`),data:e.z.record(e.z.string(),e.z.unknown()).describe(`Fields to update.${r}`)}),u=e.z.object({recordId:e.z.string().describe(`Record UUID`)}),d={get_record:{name:`get_record`,kind:`read`,input:o},search_records:{name:`search_records`,kind:`read`,input:s},create_record:{name:`create_record`,kind:`create`,input:c},update_record:{name:`update_record`,kind:`update`,input:l},delete_record:{name:`delete_record`,kind:`delete`,input:u}};exports.OBJECT_ID_DESCRIPTION=t,exports.QUERY_DESCRIPTION=n,exports.RECORD_CAPABILITIES=d,exports.SANDBOX_FILE_DATA_HINT=r,exports.filtersSchema=i,exports.sortsSchema=a;
@@ -1,2 +1,2 @@
1
1
  /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
- import{z as e}from"zod";const t=`Object UUID, kebab-case name (e.g., 'contacts'), or display label (e.g., 'Personne physique'). All three are accepted; UUID is most precise.`,n=`Relevance ranking for a name or a phrase — matches tokens, not values. Exact criteria go in filters with NO query.`,r=` For large text content (> a few KB), write it to a sandbox file first and pass {"$fromSandboxFile": "/workspace/<file>"} as the attribute value — the server substitutes the file content.`,i=e.object({combinator:e.enum([`and`,`or`]).default(`and`),rules:e.array(e.object({attribute:e.string().describe(`Attribute name on the object being searched`),property:e.string().optional().describe(`Optional, and the only way to read one part of a compound value. On a relation / document / user attribute declared with .qualifyWith({...}) it names an EDGE property (not the linked record); on a location attribute it is one of city | postalCode | country, which is how a postal code or a city is filtered exactly. The operator must be valid for that property's type. See <filter_operators>.`),operator:e.string().describe(`Filter operator (canonical: is, is_not, contains, not_contains, starts_with, ends_with, less_than, greater_than, less_or_equal, greater_or_equal, is_within, on_day_month, any_of, none_of, is_empty, is_not_empty). Short codes (lt, gt, lte, gte, eq, neq, in) are accepted as input and auto-normalized to the canonical names. The valid set depends on the attribute type (or property type when 'property' is set) — see <filter_operators>.`),value:e.unknown().nullable().describe(`Value matching the attribute (or property) type: scalar for is/contains/less_than/etc (checkbox is: true|false); array (string[]) for any_of/none_of; null for is_empty/is_not_empty; { amount, unit, direction } for is_within; { day, month } for on_day_month.`)}))}),a=e.array(e.object({attribute:e.string().describe(`Attribute name`),direction:e.enum([`asc`,`desc`])})),o=e.object({recordId:e.string().describe(`Record UUID`),fields:e.array(e.string()).optional().describe(`Attribute names to return`)}),s=e.object({objectId:e.string().describe(t),_displayLabel:e.string().optional().describe(`Display label`),query:e.string().optional().describe(n),limit:e.number().optional().describe(`Max results per call: 1-1000 (default 20). Paginate via offset for more.`),offset:e.number().optional().describe(`Skip N records (default 0)`),fields:e.array(e.string()).optional().describe(`Attribute names to include in values`),filters:i.optional().describe(`Structured filter: { combinator: 'and'|'or', rules: [{attribute, operator, value, property?}] }. Operators are constrained per attribute type — see <filter_operators>. Use 'property' on a rule to filter on a qualified edge property.`),sorts:a.optional().describe(`Sorts: [{ attribute, direction: 'asc'|'desc' }]`)}),c=e.object({objectId:e.string().describe(t),_displayLabel:e.string().optional().describe(`Display label`),data:e.record(e.string(),e.unknown()).describe(`Record data.${r}`)}),l=e.object({recordId:e.string().describe(`Record UUID`),data:e.record(e.string(),e.unknown()).describe(`Fields to update.${r}`)}),u=e.object({recordId:e.string().describe(`Record UUID`)}),d={get_record:{name:`get_record`,kind:`read`,input:o},search_records:{name:`search_records`,kind:`read`,input:s},create_record:{name:`create_record`,kind:`create`,input:c},update_record:{name:`update_record`,kind:`update`,input:l},delete_record:{name:`delete_record`,kind:`delete`,input:u}};export{t as OBJECT_ID_DESCRIPTION,n as QUERY_DESCRIPTION,d as RECORD_CAPABILITIES,r as SANDBOX_FILE_DATA_HINT,i as filtersSchema,a as sortsSchema};
2
+ import{z as e}from"zod";const t=`Object UUID, kebab-case name (e.g., 'contacts'), or display label (e.g., 'Personne physique'). All three are accepted; UUID is most precise.`,n=`Relevance ranking for a name or a phrase — matches tokens, not values. Exact criteria go in filters with NO query.`,r=` For large text content (> a few KB), write it to a sandbox file first and pass {"$fromSandboxFile": "/workspace/<file>"} as the attribute value — the server substitutes the file content.`,i=e.object({combinator:e.enum([`and`,`or`]).default(`and`),rules:e.array(e.object({attribute:e.string().describe(`Attribute name on the object being searched`),property:e.string().optional().describe(`Optional, and the only way to read one part of a compound value. On a relation / document / user attribute declared with .qualifyWith({...}) it names an EDGE property (not the linked record); on a location attribute it is one of city | postalCode | country, which is how a postal code or a city is filtered exactly. The operator must be valid for that property's type. See <filter_operators>.`),operator:e.string().describe(`Filter operator (canonical: is, is_not, contains, not_contains, starts_with, ends_with, less_than, greater_than, less_or_equal, greater_or_equal, is_within, on_day_month, any_of, none_of, is_empty, is_not_empty). Short codes (lt, gt, lte, gte, eq, neq, in) are accepted as input and auto-normalized to the canonical names. The valid set depends on the attribute type (or property type when 'property' is set) — see <filter_operators>.`),value:e.unknown().nullable().describe(`Value matching the attribute (or property) type: scalar for is/contains/less_than/etc (checkbox is: true|false); array (string[]) for any_of/none_of; null for is_empty/is_not_empty; { amount, unit, direction } for is_within; { day, month } for on_day_month; on a user attribute (or createdBy / lastUpdatedBy), { dynamic: 'actor', ref: 'current' } (@me) is the person asking.`)}))}),a=e.array(e.object({attribute:e.string().describe(`Attribute name`),direction:e.enum([`asc`,`desc`])})),o=e.object({recordId:e.string().describe(`Record UUID`),fields:e.array(e.string()).optional().describe(`Attribute names to return`)}),s=e.object({objectId:e.string().describe(t),_displayLabel:e.string().optional().describe(`Display label`),query:e.string().optional().describe(n),limit:e.number().optional().describe(`Max results per call: 1-1000 (default 20). Paginate via offset for more.`),offset:e.number().optional().describe(`Skip N records (default 0)`),fields:e.array(e.string()).optional().describe(`Attribute names to include in values`),filters:i.optional().describe(`Structured filter: { combinator: 'and'|'or', rules: [{attribute, operator, value, property?}] }. Operators are constrained per attribute type — see <filter_operators>. Use 'property' on a rule to filter on a qualified edge property.`),sorts:a.optional().describe(`Sorts: [{ attribute, direction: 'asc'|'desc' }]`)}),c=e.object({objectId:e.string().describe(t),_displayLabel:e.string().optional().describe(`Display label`),data:e.record(e.string(),e.unknown()).describe(`Record data.${r}`)}),l=e.object({recordId:e.string().describe(`Record UUID`),data:e.record(e.string(),e.unknown()).describe(`Fields to update.${r}`)}),u=e.object({recordId:e.string().describe(`Record UUID`)}),d={get_record:{name:`get_record`,kind:`read`,input:o},search_records:{name:`search_records`,kind:`read`,input:s},create_record:{name:`create_record`,kind:`create`,input:c},update_record:{name:`update_record`,kind:`update`,input:l},delete_record:{name:`delete_record`,kind:`delete`,input:u}};export{t as OBJECT_ID_DESCRIPTION,n as QUERY_DESCRIPTION,d as RECORD_CAPABILITIES,r as SANDBOX_FILE_DATA_HINT,i as filtersSchema,a as sortsSchema};
package/dist/index.d.mts CHANGED
@@ -7451,6 +7451,24 @@ export interface AcceptTenantInvitationInput {
7451
7451
  proof: string;
7452
7452
  identity: AcceptTenantInvitationIdentity;
7453
7453
  }
7454
+ /**
7455
+ * What the invitee may read about a still-usable invitation before joining —
7456
+ * fetched with the single-use proof, never with a session.
7457
+ */
7458
+ export interface TenantInvitationPreview {
7459
+ invitationId: Uuid;
7460
+ email: string;
7461
+ expiresAt: Date;
7462
+ inviter: {
7463
+ name: string;
7464
+ };
7465
+ role: {
7466
+ name: string;
7467
+ };
7468
+ workspace?: {
7469
+ name: string;
7470
+ };
7471
+ }
7454
7472
  //#endregion
7455
7473
  //#region src/connectors/types.d.ts
7456
7474
  /** Built-in external connector providers. Mirrors the runtime's
@@ -7895,12 +7913,6 @@ export interface UserProfile extends Timestamps {
7895
7913
  * Last login timestamp (updated on each successful auth)
7896
7914
  */
7897
7915
  lastLoginAt?: Date;
7898
- /**
7899
- * Whether the user is still pending their initial invitation (has never logged in).
7900
- * Derived field — true when `lastLoginAt` is unset.
7901
- * Used by the UI to gate "Resend invite" vs "Reset access" actions.
7902
- */
7903
- invitePending: boolean;
7904
7916
  }
7905
7917
  /**
7906
7918
  * A profile as the members screen (spec A1) needs it: the underlying user
@@ -7948,24 +7960,6 @@ export interface UpdateUserProfile {
7948
7960
  /** Omit to preserve the preference; null clears it. */
7949
7961
  defaultChatModel?: ModelReference | null;
7950
7962
  }
7951
- /**
7952
- * Data for inviting a new user by email.
7953
- * Creates an active user profile and sends an invitation email via Supabase Auth.
7954
- * The role is resolved and checked BEFORE any provisioning (spec 3 A4); with no
7955
- * `roleId`, the default `member` role is assigned automatically by the service.
7956
- */
7957
- export interface InviteUserInput {
7958
- /** Email address to invite */
7959
- email: string;
7960
- /** User's first name (stored in user_metadata) */
7961
- firstName?: string;
7962
- /** User's last name (stored in user_metadata) */
7963
- lastName?: string;
7964
- /** URL to redirect after accepting invitation */
7965
- redirectTo?: string;
7966
- /** Role to assign instead of the default `member`. Checked before provisioning. */
7967
- roleId?: string;
7968
- }
7969
7963
  //#endregion
7970
7964
  //#region src/types/schema-groups.d.ts
7971
7965
  export type SchemaGroupKind = "bundle" | "source";
@@ -12870,6 +12864,8 @@ export type AgentUIMessageBatchItem<TChunk = unknown> = {
12870
12864
  startOffset: number;
12871
12865
  endOffset: number;
12872
12866
  };
12867
+ /** Wall-clock time (epoch ms) at which the runtime enqueued the chunk. */
12868
+ emittedAtMs?: number;
12873
12869
  chunk: TChunk;
12874
12870
  };
12875
12871
  export type AgentUIMessageBatch<TChunk = unknown> = {
@@ -13085,9 +13081,11 @@ export declare function filterTargetsOf(attributes: readonly Attribute[]): Filte
13085
13081
  /** True when a filter value is a query-time dynamic token. */
13086
13082
  export declare function isDynamicValue(value: unknown): value is DynamicValue;
13087
13083
  /**
13088
- * `@me` — resolves to the current identity as the set `{actor id, user id}`,
13089
- * matched with `any_of`/`none_of`. Works on `user` attributes (which store the
13090
- * user id) and on `createdBy`/`lastUpdatedBy` (which store the actor id).
13084
+ * `@me` — resolves to the current identity: every id the read scope names
13085
+ * (the actor, and in an agent turn the person it runs for) plus the user
13086
+ * behind each, matched with `any_of`/`none_of`. Works on `user` attributes
13087
+ * (which store the user id) and on `createdBy`/`lastUpdatedBy` (which store
13088
+ * the actor id).
13091
13089
  */
13092
13090
  export declare function currentActor(): DynamicValue;
13093
13091
  /** `@today` — resolves to today's date (ctx timezone). Use on `date` attributes. */
@@ -13097,14 +13095,13 @@ export declare function now(): DynamicValue;
13097
13095
  /** Execution context made available to dynamic-value resolvers. */
13098
13096
  export interface ResolutionContext {
13099
13097
  tenantId: TenantId;
13100
- actorId?: Uuid;
13101
- rootActorId?: Uuid;
13102
13098
  /**
13103
- * User id behind the current actor (`actor.subjectId` when `actor.type === "user"`).
13104
- * Part of the `@me` set alongside `actorId` — user attributes store user ids,
13105
- * while createdBy/lastUpdatedBy store the actor id. Absent for agents.
13099
+ * The ids `@me` resolves to: the read scope's actor ids — the acting actor
13100
+ * and, when the context names one, the root human it works for (a chat
13101
+ * turn's asker, a scheduled run's creator; a trigger-fired run has none) —
13102
+ * plus the user behind each. Empty or absent drops the rule.
13106
13103
  */
13107
- userId?: Uuid;
13104
+ currentIdentityIds?: readonly Uuid[];
13108
13105
  now: Date;
13109
13106
  /** IANA timezone used to resolve `@today`. Defaults to "UTC" when unknown. */
13110
13107
  timezone: string;
package/dist/index.d.ts CHANGED
@@ -7451,6 +7451,24 @@ export interface AcceptTenantInvitationInput {
7451
7451
  proof: string;
7452
7452
  identity: AcceptTenantInvitationIdentity;
7453
7453
  }
7454
+ /**
7455
+ * What the invitee may read about a still-usable invitation before joining —
7456
+ * fetched with the single-use proof, never with a session.
7457
+ */
7458
+ export interface TenantInvitationPreview {
7459
+ invitationId: Uuid;
7460
+ email: string;
7461
+ expiresAt: Date;
7462
+ inviter: {
7463
+ name: string;
7464
+ };
7465
+ role: {
7466
+ name: string;
7467
+ };
7468
+ workspace?: {
7469
+ name: string;
7470
+ };
7471
+ }
7454
7472
  //#endregion
7455
7473
  //#region src/connectors/types.d.ts
7456
7474
  /** Built-in external connector providers. Mirrors the runtime's
@@ -7895,12 +7913,6 @@ export interface UserProfile extends Timestamps {
7895
7913
  * Last login timestamp (updated on each successful auth)
7896
7914
  */
7897
7915
  lastLoginAt?: Date;
7898
- /**
7899
- * Whether the user is still pending their initial invitation (has never logged in).
7900
- * Derived field — true when `lastLoginAt` is unset.
7901
- * Used by the UI to gate "Resend invite" vs "Reset access" actions.
7902
- */
7903
- invitePending: boolean;
7904
7916
  }
7905
7917
  /**
7906
7918
  * A profile as the members screen (spec A1) needs it: the underlying user
@@ -7948,24 +7960,6 @@ export interface UpdateUserProfile {
7948
7960
  /** Omit to preserve the preference; null clears it. */
7949
7961
  defaultChatModel?: ModelReference | null;
7950
7962
  }
7951
- /**
7952
- * Data for inviting a new user by email.
7953
- * Creates an active user profile and sends an invitation email via Supabase Auth.
7954
- * The role is resolved and checked BEFORE any provisioning (spec 3 A4); with no
7955
- * `roleId`, the default `member` role is assigned automatically by the service.
7956
- */
7957
- export interface InviteUserInput {
7958
- /** Email address to invite */
7959
- email: string;
7960
- /** User's first name (stored in user_metadata) */
7961
- firstName?: string;
7962
- /** User's last name (stored in user_metadata) */
7963
- lastName?: string;
7964
- /** URL to redirect after accepting invitation */
7965
- redirectTo?: string;
7966
- /** Role to assign instead of the default `member`. Checked before provisioning. */
7967
- roleId?: string;
7968
- }
7969
7963
  //#endregion
7970
7964
  //#region src/types/schema-groups.d.ts
7971
7965
  export type SchemaGroupKind = "bundle" | "source";
@@ -12870,6 +12864,8 @@ export type AgentUIMessageBatchItem<TChunk = unknown> = {
12870
12864
  startOffset: number;
12871
12865
  endOffset: number;
12872
12866
  };
12867
+ /** Wall-clock time (epoch ms) at which the runtime enqueued the chunk. */
12868
+ emittedAtMs?: number;
12873
12869
  chunk: TChunk;
12874
12870
  };
12875
12871
  export type AgentUIMessageBatch<TChunk = unknown> = {
@@ -13085,9 +13081,11 @@ export declare function filterTargetsOf(attributes: readonly Attribute[]): Filte
13085
13081
  /** True when a filter value is a query-time dynamic token. */
13086
13082
  export declare function isDynamicValue(value: unknown): value is DynamicValue;
13087
13083
  /**
13088
- * `@me` — resolves to the current identity as the set `{actor id, user id}`,
13089
- * matched with `any_of`/`none_of`. Works on `user` attributes (which store the
13090
- * user id) and on `createdBy`/`lastUpdatedBy` (which store the actor id).
13084
+ * `@me` — resolves to the current identity: every id the read scope names
13085
+ * (the actor, and in an agent turn the person it runs for) plus the user
13086
+ * behind each, matched with `any_of`/`none_of`. Works on `user` attributes
13087
+ * (which store the user id) and on `createdBy`/`lastUpdatedBy` (which store
13088
+ * the actor id).
13091
13089
  */
13092
13090
  export declare function currentActor(): DynamicValue;
13093
13091
  /** `@today` — resolves to today's date (ctx timezone). Use on `date` attributes. */
@@ -13097,14 +13095,13 @@ export declare function now(): DynamicValue;
13097
13095
  /** Execution context made available to dynamic-value resolvers. */
13098
13096
  export interface ResolutionContext {
13099
13097
  tenantId: TenantId;
13100
- actorId?: Uuid;
13101
- rootActorId?: Uuid;
13102
13098
  /**
13103
- * User id behind the current actor (`actor.subjectId` when `actor.type === "user"`).
13104
- * Part of the `@me` set alongside `actorId` — user attributes store user ids,
13105
- * while createdBy/lastUpdatedBy store the actor id. Absent for agents.
13099
+ * The ids `@me` resolves to: the read scope's actor ids — the acting actor
13100
+ * and, when the context names one, the root human it works for (a chat
13101
+ * turn's asker, a scheduled run's creator; a trigger-fired run has none) —
13102
+ * plus the user behind each. Empty or absent drops the rule.
13106
13103
  */
13107
- userId?: Uuid;
13104
+ currentIdentityIds?: readonly Uuid[];
13108
13105
  now: Date;
13109
13106
  /** IANA timezone used to resolve `@today`. Defaults to "UTC" when unknown. */
13110
13107
  timezone: string;