@opengeni/contracts 2.3.0-canary.0 → 2.5.0-canary.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.
@@ -1405,6 +1405,7 @@ var KnowledgeSearchRequest = z6.object({
1405
1405
  baseIds: z6.array(z6.string().uuid()).max(50).optional(),
1406
1406
  mode: z6.enum(["hybrid", "vector", "keyword"]).optional(),
1407
1407
  sourceKinds: z6.array(KnowledgeSource.shape.kind).max(8).optional(),
1408
+ authorityKinds: z6.array(KnowledgeAuthority.shape.kind).max(3).optional(),
1408
1409
  aclTags: z6.array(boundedUtf8(KNOWLEDGE_TOPIC_MAX_BYTES).pipe(z6.string().min(1))).max(64).optional(),
1409
1410
  limit: z6.number().int().positive().max(KNOWLEDGE_SEARCH_MAX_RESULTS).default(5)
1410
1411
  }).strict();
@@ -4368,6 +4369,218 @@ var SandboxFileArtifactReceipt = z12.object({
4368
4369
  }
4369
4370
  });
4370
4371
 
4372
+ // src/session-titles.ts
4373
+ var SESSION_TITLE_MAX_CHARACTERS = 200;
4374
+ var AUTOMATIC_SESSION_TITLE_MAX_GRAPHEMES = 80;
4375
+ var AUTOMATIC_SESSION_TITLE_FALLBACK = "New conversation";
4376
+ var titleSegmenter;
4377
+ var KNOWN_SENSITIVE_VALUE_PATTERNS = [
4378
+ /-----BEGIN [A-Z ]*PRIVATE KEY-----/iu,
4379
+ /\bBearer\s+[A-Za-z0-9._~+/=-]{8,}/iu,
4380
+ /\b(?:sk-(?:proj-)?|gh[oprsu]_|github_pat_|glpat-|xox[baprs]-)[A-Za-z0-9_-]{8,}/iu,
4381
+ /\bAKIA[0-9A-Z]{16}\b/u,
4382
+ /\bAIza[0-9A-Za-z_-]{20,}\b/u,
4383
+ /\beyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/u,
4384
+ /[?&](?:access_token|api_key|apikey|password|secret|token)=[^\s&#]+/iu
4385
+ ];
4386
+ var URI_SCHEME_CANDIDATE_PATTERN = /\b[a-z][a-z0-9+.-]*:\S+/giu;
4387
+ var WINDOWS_DRIVE_PATH_PATTERN = /^[a-z]:[\\/](?![\\/])[^:]*$/iu;
4388
+ var SCHEMELESS_HOST_CANDIDATE_PATTERN = /\b(?:www\.)?(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z](?:[a-z0-9-]{0,61}[a-z0-9])?(?::\d{1,5})?(?:[/?#][^\s]*)?/giu;
4389
+ var SCHEMELESS_LOCAL_NETWORK_PATTERNS = [
4390
+ /\blocalhost(?:(?::\d{1,5})(?:[/?#][^\s]*)?|[/?#][^\s]*)/iu,
4391
+ /\b(?:(?:25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|1?\d?\d)(?:(?::\d{1,5})(?:[/?#][^\s]*)?|[/?#][^\s]*)/u,
4392
+ /\[(?=[0-9a-f:.]*:[0-9a-f:.]*\])[0-9a-f:.]+\](?:(?::\d{1,5})(?:[/?#][^\s]*)?|[/?#][^\s]*)/iu
4393
+ ];
4394
+ var FILE_LIKE_HOST_SUFFIXES = /* @__PURE__ */ new Set([
4395
+ "css",
4396
+ "html",
4397
+ "js",
4398
+ "json",
4399
+ "jsx",
4400
+ "lock",
4401
+ "md",
4402
+ "sql",
4403
+ "toml",
4404
+ "ts",
4405
+ "tsx",
4406
+ "xml",
4407
+ "yaml",
4408
+ "yml"
4409
+ ]);
4410
+ var DOTTED_TECHNOLOGY_PATH_AUTHORITIES = /* @__PURE__ */ new Set([
4411
+ "ASP.NET",
4412
+ "AWS.SDK",
4413
+ "Microsoft.Extensions",
4414
+ "System.IO"
4415
+ ]);
4416
+ var SECRET_ASSIGNMENT_CANDIDATE_PATTERN = /(?:^|[^A-Za-z0-9])(?:(['"])([A-Za-z][A-Za-z0-9_. -]*)\1|([A-Za-z][A-Za-z0-9_.-]*))\s*[=:]\s*[^\s,;]+/gu;
4417
+ var SECRET_LABEL_ASSIGNMENT_PATTERN = /\b(?:api[ _-]?key|access[ _-]?token|auth[ _-]?token|credential|credentials|password|passwd|private[ _-]?key|secret|token)\b\s*[=:]\s*[^\s,;]+/iu;
4418
+ var SENSITIVE_ASSIGNMENT_KEY_SUFFIXES = /* @__PURE__ */ new Set([
4419
+ "credential",
4420
+ "credentials",
4421
+ "password",
4422
+ "passwd",
4423
+ "secret",
4424
+ "token"
4425
+ ]);
4426
+ var COMPACT_SENSITIVE_ASSIGNMENT_KEY_SUFFIXES = [
4427
+ "apikey",
4428
+ "accesskey",
4429
+ "accesskeyid",
4430
+ "accesstoken",
4431
+ "authtoken",
4432
+ "credential",
4433
+ "credentials",
4434
+ "password",
4435
+ "passwd",
4436
+ "privatekey",
4437
+ "secret",
4438
+ "secretkey",
4439
+ "token"
4440
+ ];
4441
+ var SENSITIVE_ASSIGNMENT_KEY_WORD_SUFFIXES = [
4442
+ ["api", "key"],
4443
+ ["access", "key"],
4444
+ ["access", "key", "id"],
4445
+ ["auth", "key"],
4446
+ ["private", "key"],
4447
+ ["secret", "key"]
4448
+ ];
4449
+ function hasWordSuffix(words, suffix) {
4450
+ if (words.length < suffix.length) return false;
4451
+ const offset = words.length - suffix.length;
4452
+ return suffix.every((word, index) => words[offset + index] === word);
4453
+ }
4454
+ function containsSensitiveAssignment(value) {
4455
+ for (const match of value.matchAll(SECRET_ASSIGNMENT_CANDIDATE_PATTERN)) {
4456
+ const key = match[2] ?? match[3];
4457
+ if (!key) continue;
4458
+ const words = key.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);
4459
+ const last = words.at(-1);
4460
+ if (last && SENSITIVE_ASSIGNMENT_KEY_SUFFIXES.has(last)) return true;
4461
+ if (last && COMPACT_SENSITIVE_ASSIGNMENT_KEY_SUFFIXES.some((suffix) => last.endsWith(suffix))) {
4462
+ return true;
4463
+ }
4464
+ if (SENSITIVE_ASSIGNMENT_KEY_WORD_SUFFIXES.some((suffix) => hasWordSuffix(words, suffix))) {
4465
+ return true;
4466
+ }
4467
+ }
4468
+ return false;
4469
+ }
4470
+ function containsUriScheme(value) {
4471
+ for (const match of value.matchAll(URI_SCHEME_CANDIDATE_PATTERN)) {
4472
+ if (!WINDOWS_DRIVE_PATH_PATTERN.test(match[0])) return true;
4473
+ }
4474
+ return false;
4475
+ }
4476
+ function isDottedTechnologyPath(candidate) {
4477
+ if (/[?:#]/u.test(candidate)) return false;
4478
+ const [authority, ...pathSegments] = candidate.split("/");
4479
+ if (!authority || pathSegments.length === 0 || pathSegments.some((segment) => !segment)) {
4480
+ return false;
4481
+ }
4482
+ if (!DOTTED_TECHNOLOGY_PATH_AUTHORITIES.has(authority) || pathSegments.some((segment) => !/^[A-Z][A-Za-z0-9_-]*$/u.test(segment))) {
4483
+ return false;
4484
+ }
4485
+ return true;
4486
+ }
4487
+ function containsSchemelessUrl(value) {
4488
+ if (SCHEMELESS_LOCAL_NETWORK_PATTERNS.some((pattern) => pattern.test(value))) return true;
4489
+ for (const match of value.matchAll(SCHEMELESS_HOST_CANDIDATE_PATTERN)) {
4490
+ const candidate = match[0];
4491
+ if (candidate.toLowerCase().startsWith("www.")) return true;
4492
+ if (!/[/?#]/u.test(candidate)) continue;
4493
+ const authority = candidate.split(/[/?#]/u, 1)[0] ?? "";
4494
+ const hostname = authority.replace(/:\d{1,5}$/u, "");
4495
+ const suffix = hostname.split(".").at(-1)?.toLowerCase();
4496
+ if (suffix && FILE_LIKE_HOST_SUFFIXES.has(suffix)) continue;
4497
+ if (isDottedTechnologyPath(candidate)) continue;
4498
+ return true;
4499
+ }
4500
+ return false;
4501
+ }
4502
+ var OPAQUE_IDENTIFIER_PATTERN = /\b(?=[A-Za-z0-9_-]{32,}\b)(?=[A-Za-z0-9_-]*[A-Za-z])(?=[A-Za-z0-9_-]*\d)[A-Za-z0-9_-]+\b/u;
4503
+ var DEFAULT_IGNORABLE_CODE_POINTS = /\p{Default_Ignorable_Code_Point}+/gu;
4504
+ var ESCAPED_QUOTE_DELIMITERS = /\\+(?=["'])/gu;
4505
+ var TITLE_LABEL_PATTERN = /^(?:(?:suggested|generated|concise)\s+)?(?:(?:session|chat|conversation|task)\s+)?title\s*[:\-–—]\s*/iu;
4506
+ var LEADING_BOILERPLATE_PATTERNS = [
4507
+ /^(?:hi|hello|hey)(?:\s+there)?\s*[,!:.\-–—]*\s*/iu,
4508
+ /^(?:i\s+(?:would\s+like|want|need)\s+you\s+to|i['’]d\s+like\s+you\s+to)\s+/iu,
4509
+ /^(?:please\s+)?(?:can|could|would|will)\s+you\s+/iu,
4510
+ /^(?:your|the)\s+(?:task|job)\s+is\s+to\s+/iu,
4511
+ /^(?:please\s+)?help\s+me\s+(?:to\s+)?/iu,
4512
+ /^please(?:\s*[,!:.\-–—]+\s*|\s+|$)/iu
4513
+ ];
4514
+ function automaticTitleDetectionValue(value) {
4515
+ return value.normalize("NFKC").replace(DEFAULT_IGNORABLE_CODE_POINTS, "").replace(ESCAPED_QUOTE_DELIMITERS, "");
4516
+ }
4517
+ function hasVisibleAutomaticTitleContent(value) {
4518
+ return automaticTitleDetectionValue(value).trim().length > 0;
4519
+ }
4520
+ function containsSensitiveAutomaticTitleValue(value) {
4521
+ const detectionValue = automaticTitleDetectionValue(value);
4522
+ if (KNOWN_SENSITIVE_VALUE_PATTERNS.some((pattern) => pattern.test(detectionValue))) return true;
4523
+ if (containsUriScheme(detectionValue)) return true;
4524
+ if (containsSchemelessUrl(detectionValue)) return true;
4525
+ if (SECRET_LABEL_ASSIGNMENT_PATTERN.test(detectionValue)) return true;
4526
+ if (containsSensitiveAssignment(detectionValue)) return true;
4527
+ if (OPAQUE_IDENTIFIER_PATTERN.test(detectionValue)) return true;
4528
+ return false;
4529
+ }
4530
+ function stripAutomaticTitleBoilerplate(value) {
4531
+ let title = value;
4532
+ for (let pass = 0; pass < 4; pass += 1) {
4533
+ const before = title;
4534
+ title = title.replace(/^(?:```[^\n]*|[\s#>*_`"'“”‘’\-–—]+)+/u, "").replace(TITLE_LABEL_PATTERN, "");
4535
+ for (const pattern of LEADING_BOILERPLATE_PATTERNS) {
4536
+ title = title.replace(pattern, "");
4537
+ }
4538
+ title = title.trim();
4539
+ if (title === before) break;
4540
+ }
4541
+ return title;
4542
+ }
4543
+ function automaticTitleGraphemes(value) {
4544
+ if (titleSegmenter === void 0) {
4545
+ titleSegmenter = typeof Intl.Segmenter === "function" ? new Intl.Segmenter(void 0, { granularity: "grapheme" }) : null;
4546
+ }
4547
+ if (titleSegmenter) {
4548
+ return Array.from(titleSegmenter.segment(value), (part) => part.segment);
4549
+ }
4550
+ const graphemes = [];
4551
+ for (const point of value) {
4552
+ const prior = graphemes.at(-1);
4553
+ if (prior && (/^[\p{Mark}\u{FE0E}\u{FE0F}\p{Emoji_Modifier}]$/u.test(point) || point === "\u200D" || prior.endsWith("\u200D"))) {
4554
+ graphemes[graphemes.length - 1] = `${prior}${point}`;
4555
+ } else {
4556
+ graphemes.push(point);
4557
+ }
4558
+ }
4559
+ return graphemes;
4560
+ }
4561
+ function boundAutomaticTitle(value) {
4562
+ const words = value.split(/\s+/u);
4563
+ const wordBounded = words.length > 10 ? words.slice(0, 10).join(" ") : value;
4564
+ const graphemes = automaticTitleGraphemes(wordBounded);
4565
+ if (graphemes.length <= AUTOMATIC_SESSION_TITLE_MAX_GRAPHEMES) return wordBounded;
4566
+ const prefix = graphemes.slice(0, AUTOMATIC_SESSION_TITLE_MAX_GRAPHEMES).join("");
4567
+ const lastWhitespace = prefix.search(/\s+\S*$/u);
4568
+ return (lastWhitespace >= 16 ? prefix.slice(0, lastWhitespace) : prefix).trimEnd();
4569
+ }
4570
+ function normalizeAutomaticSessionTitle(value) {
4571
+ const firstLine = value.replace(/[\u0000-\u001f\u007f-\u009f]+/gu, "\n").split(/\n+/u).map((line) => line.trim()).find(Boolean);
4572
+ if (!firstLine || !hasVisibleAutomaticTitleContent(firstLine) || containsSensitiveAutomaticTitleValue(firstLine)) {
4573
+ return null;
4574
+ }
4575
+ let title = stripAutomaticTitleBoilerplate(firstLine).replace(/\s+/gu, " ").replace(/[\s.!?,;:\-–—]+$/u, "").trim();
4576
+ if (!title || !hasVisibleAutomaticTitleContent(title) || containsSensitiveAutomaticTitleValue(title)) {
4577
+ return null;
4578
+ }
4579
+ title = boundAutomaticTitle(title).replace(/[\s.!?,;:\-–—]+$/u, "").trim();
4580
+ if (!title || !hasVisibleAutomaticTitleContent(title)) return null;
4581
+ return title;
4582
+ }
4583
+
4371
4584
  // src/artifacts.ts
4372
4585
  import { z as z13 } from "zod";
4373
4586
  var WORKSPACE_ARTIFACT_HTML_MAX_UTF8_BYTES = 4 * 1024 * 1024;
@@ -5755,8 +5968,8 @@ var AGENT_AUTHORED_COMPANY_PROFILE_SCALAR_MAX_CHARS = 400;
5755
5968
  var AGENT_AUTHORED_COMPANY_PROFILE_ENTRY_MAX_CHARS = 200;
5756
5969
  var AGENT_AUTHORED_COMPANY_PROFILE_CONTENT_MAX_UTF8_BYTES = 4096;
5757
5970
  var AGENT_AUTHORED_INSTRUCTION_POLICY_CONTENT_TOO_LONG_MESSAGE = `A workspace rule is composed verbatim into the prompt of every session it applies to (every session for a global charter or policy, every session bound to the role for a role policy), for as long as it stays active. Keep it under ${AGENT_AUTHORED_INSTRUCTION_POLICY_CONTENT_MAX_CHARS} characters: one rule, imperative, no numbered procedure. Split unrelated rules into separate entries.`;
5758
- var AGENT_AUTHORED_PREFERENCE_CONTENT_TOO_LONG_MESSAGE = `A workspace preference is durable Company Brain content that agents retrieve on demand, so its length is retrieval cost rather than standing prompt cost: only its short title and description are composed into every session prompt. Keep it under ${AGENT_AUTHORED_PREFERENCE_CONTENT_MAX_CHARS} characters: state the preference plainly, no numbered procedure and no examples. Put procedure in a Document or Skill and reference it instead.`;
5759
- var AGENT_AUTHORED_COMPANY_PROFILE_TOO_LONG_MESSAGE = `Every company-profile field is mandatory prompt context in every session across the organization. Keep identity and mission under ${AGENT_AUTHORED_COMPANY_PROFILE_SCALAR_MAX_CHARS} characters each, each list entry under ${AGENT_AUTHORED_COMPANY_PROFILE_ENTRY_MAX_CHARS}, and the whole profile under ${AGENT_AUTHORED_COMPANY_PROFILE_CONTENT_MAX_UTF8_BYTES} UTF-8 bytes: one concise statement per field, no numbered procedure and no marketing copy. Longer source material belongs in organization Documents and is retrieved as evidence.`;
5971
+ var AGENT_AUTHORED_PREFERENCE_CONTENT_TOO_LONG_MESSAGE = `A Skill is durable Agent Knowledge that agents retrieve on demand, so its length is retrieval cost rather than standing prompt cost: only its short title and description are composed into every session prompt. Keep it under ${AGENT_AUTHORED_PREFERENCE_CONTENT_MAX_CHARS} characters: state the preference plainly, no numbered procedure and no examples. Put procedure in a Document or Skill and reference it instead.`;
5972
+ var AGENT_AUTHORED_COMPANY_PROFILE_TOO_LONG_MESSAGE = `Organization identity and mission are mandatory prompt context in every root session across the organization. Keep each under ${AGENT_AUTHORED_COMPANY_PROFILE_SCALAR_MAX_CHARS} characters: one concise descriptive statement, no products, customers, goals, constraints, procedure, or marketing copy. Those details belong in organization Documents and are retrieved as evidence when relevant.`;
5760
5973
  var AGENT_AUTHORED_REMEMBER_CONTENT_TOO_LONG_MESSAGE = `Remembered content is bounded by where it lands: a mandatory workspace rule at most ${AGENT_AUTHORED_INSTRUCTION_POLICY_CONTENT_MAX_CHARS} characters because it is composed into every session prompt it applies to, a preference at most ${AGENT_AUTHORED_PREFERENCE_CONTENT_MAX_CHARS}, a Knowledge fact at most 4000. Write one imperative statement in 1-3 sentences, split unrelated entries, and keep procedure in a Document or Skill that the entry references.`;
5761
5974
  var AGENT_AUTHORED_DURABLE_TEXT_STYLE = "Durable text is prompt cost, not a place to be thorough: write one imperative statement in 1-3 sentences, with no numbered steps, no examples, no rationale and no restating of defaults. Prefer several small entries over one long one, and keep procedure in a Document or Skill that the rule references instead of inlining it.";
5762
5975
  function agentAuthoredDurableTextTooLongMessage(input) {
@@ -7468,10 +7681,30 @@ var TaskNoteListResponse = z24.object({
7468
7681
  // src/organization-membership-lifecycle.ts
7469
7682
  import { z as z25 } from "zod";
7470
7683
  var OrganizationMembershipRole = z25.enum(["owner", "admin", "member"]);
7684
+ var WorkspaceMemberRole = z25.enum(["viewer", "member", "admin", "custom"]);
7685
+ var AssignableWorkspaceMemberRole = z25.enum(["viewer", "member", "admin"]);
7471
7686
  var OrganizationInvitationStatus = z25.enum(["pending", "accepted", "revoked", "expired"]);
7687
+ var OrganizationUserSetupDeliveryState = z25.enum([
7688
+ "pending",
7689
+ "sent",
7690
+ "failed",
7691
+ "outcome_unknown",
7692
+ "revoked"
7693
+ ]);
7694
+ var OrganizationUserSetupDelivery = z25.object({
7695
+ id: z25.string().uuid(),
7696
+ state: OrganizationUserSetupDeliveryState,
7697
+ attemptCount: z25.number().int().nonnegative(),
7698
+ revision: z25.number().int().positive(),
7699
+ errorClass: z25.string().min(1).max(64).nullable(),
7700
+ retryState: z25.enum(["available", "reconciliation_required", "unavailable"]),
7701
+ sentAt: z25.string().datetime({ offset: true }).nullable(),
7702
+ updatedAt: z25.string().datetime({ offset: true })
7703
+ });
7472
7704
  var OrganizationInvitation = z25.object({
7473
7705
  id: z25.string().uuid(),
7474
7706
  organizationId: z25.string().uuid(),
7707
+ organizationName: z25.string().trim().min(1).max(120).nullable().default(null),
7475
7708
  targetEmail: z25.string().email(),
7476
7709
  targetName: z25.string().trim().min(1).max(120).nullable().default(null),
7477
7710
  initialWorkspaceIds: z25.array(z25.string().uuid()).max(100).default([]),
@@ -7481,7 +7714,8 @@ var OrganizationInvitation = z25.object({
7481
7714
  expiresAt: z25.string().datetime({ offset: true }),
7482
7715
  acceptedMembershipId: z25.string().uuid().nullable(),
7483
7716
  createdAt: z25.string().datetime({ offset: true }),
7484
- updatedAt: z25.string().datetime({ offset: true })
7717
+ updatedAt: z25.string().datetime({ offset: true }),
7718
+ delivery: OrganizationUserSetupDelivery.nullable().default(null)
7485
7719
  });
7486
7720
  var OrganizationMember = z25.object({
7487
7721
  id: z25.string().uuid(),
@@ -7498,6 +7732,27 @@ var OrganizationMember = z25.object({
7498
7732
  createdAt: z25.string().datetime({ offset: true }),
7499
7733
  updatedAt: z25.string().datetime({ offset: true })
7500
7734
  });
7735
+ var OrganizationAdministrationMemberWorkspaceAccess = z25.object({
7736
+ workspaceId: z25.string().uuid(),
7737
+ workspaceName: z25.string().min(1).max(255),
7738
+ membershipId: z25.string().uuid(),
7739
+ role: WorkspaceMemberRole,
7740
+ updatedAt: z25.string().datetime({ offset: true })
7741
+ });
7742
+ var OrganizationAdministrationMember = z25.object({
7743
+ id: z25.string().uuid(),
7744
+ organizationId: z25.string().uuid(),
7745
+ subjectId: z25.string().min(1).max(1024),
7746
+ name: z25.string().min(1).max(1024).nullable(),
7747
+ email: z25.string().email().max(320).nullable(),
7748
+ role: OrganizationMembershipRole,
7749
+ status: z25.enum(["provisioning", "active", "suspended", "revoked"]),
7750
+ authorizationRevision: z25.number().int().positive(),
7751
+ sharedWorkspaceAccess: z25.array(OrganizationAdministrationMemberWorkspaceAccess).max(500),
7752
+ revokedAt: z25.string().datetime({ offset: true }).nullable(),
7753
+ createdAt: z25.string().datetime({ offset: true }),
7754
+ updatedAt: z25.string().datetime({ offset: true })
7755
+ });
7501
7756
  var OrganizationSummary = z25.object({
7502
7757
  id: z25.string().uuid(),
7503
7758
  name: z25.string().trim().min(1).max(120),
@@ -7519,12 +7774,17 @@ var UpdateOrganizationPrivateSessionSettingsRequest = z25.object({
7519
7774
  }).strict();
7520
7775
  var OrganizationWorkspaceAccessMember = z25.object({
7521
7776
  membershipId: z25.string().uuid(),
7777
+ organizationMembershipId: z25.string().uuid().nullable(),
7522
7778
  subjectId: z25.string().min(1).max(1024),
7779
+ name: z25.string().min(1).max(1024).nullable(),
7780
+ email: z25.string().email().max(320).nullable(),
7523
7781
  subjectLabel: z25.string().min(1).max(1024).nullable(),
7524
7782
  principalKind: z25.enum(["human", "service"]),
7525
- role: z25.string().min(1).max(64),
7783
+ organizationRole: OrganizationMembershipRole.nullable(),
7784
+ role: WorkspaceMemberRole,
7526
7785
  permissions: z25.array(z25.string().min(1).max(128)),
7527
- createdAt: z25.string().datetime({ offset: true })
7786
+ createdAt: z25.string().datetime({ offset: true }),
7787
+ updatedAt: z25.string().datetime({ offset: true })
7528
7788
  });
7529
7789
  var OrganizationWorkspaceAccess = z25.object({
7530
7790
  id: z25.string().uuid(),
@@ -7534,21 +7794,47 @@ var OrganizationWorkspaceAccess = z25.object({
7534
7794
  updatedAt: z25.string().datetime({ offset: true }),
7535
7795
  members: z25.array(OrganizationWorkspaceAccessMember).max(1e3)
7536
7796
  });
7797
+ var OrganizationWorkspaceRoleDefinition = z25.object({
7798
+ role: AssignableWorkspaceMemberRole,
7799
+ label: z25.string().min(1).max(64),
7800
+ description: z25.string().min(1).max(512),
7801
+ permissions: z25.array(Permission).min(1)
7802
+ });
7537
7803
  var OrganizationAdministrationOverview = z25.object({
7538
7804
  organization: OrganizationSummary,
7805
+ roles: z25.array(OrganizationWorkspaceRoleDefinition).length(3),
7539
7806
  workspaces: z25.array(OrganizationWorkspaceAccess).max(500)
7540
7807
  });
7541
- var AddOrganizationWorkspaceMemberRequest = z25.object({
7542
- organizationMembershipId: z25.string().uuid(),
7543
- role: z25.string().trim().min(1).max(64).optional(),
7544
- permissions: z25.array(Permission).max(128)
7545
- });
7546
7808
  var CreateOrganizationWorkspaceRequest = z25.object({
7547
7809
  name: z25.string().trim().min(1).max(120),
7548
- slug: z25.string().trim().min(1).max(120).nullable().optional(),
7549
- agentInstructions: z25.string().nullable().optional(),
7550
7810
  operationId: z25.string().uuid()
7551
- });
7811
+ }).strict();
7812
+ var UpdateOrganizationWorkspaceRequest = z25.object({
7813
+ name: z25.string().trim().min(1).max(120),
7814
+ expectedUpdatedAt: z25.string().datetime({ offset: true }),
7815
+ operationId: z25.string().uuid()
7816
+ }).strict();
7817
+ var PutOrganizationWorkspaceMemberRequest = z25.discriminatedUnion("role", [
7818
+ z25.object({
7819
+ role: AssignableWorkspaceMemberRole,
7820
+ expectedUpdatedAt: z25.string().datetime({ offset: true }).nullable(),
7821
+ operationId: z25.string().uuid()
7822
+ }).strict(),
7823
+ z25.object({
7824
+ role: z25.literal("custom"),
7825
+ permissions: z25.array(Permission).max(128),
7826
+ expectedUpdatedAt: z25.string().datetime({ offset: true }).nullable(),
7827
+ operationId: z25.string().uuid()
7828
+ }).strict()
7829
+ ]);
7830
+ var RevokeOrganizationWorkspaceMemberRequest = z25.object({
7831
+ expectedUpdatedAt: z25.string().datetime({ offset: true }),
7832
+ operationId: z25.string().uuid()
7833
+ }).strict();
7834
+ var RevokeOrganizationWorkspaceMemberResponse = z25.object({
7835
+ removed: z25.boolean(),
7836
+ replay: z25.boolean()
7837
+ }).strict();
7552
7838
  var CreateOrganizationRequest = z25.object({
7553
7839
  name: z25.string().trim().min(1).max(120),
7554
7840
  operationId: z25.string().uuid()
@@ -7638,6 +7924,51 @@ var CreateOrganizationInvitationRequest = z25.object({
7638
7924
  expiresAt: z25.string().datetime({ offset: true }),
7639
7925
  operationId: z25.string().uuid()
7640
7926
  });
7927
+ var CompleteOrganizationUserSetupRequest = z25.object({
7928
+ token: z25.string().min(32).max(2048),
7929
+ name: z25.string().trim().min(1).max(120),
7930
+ password: z25.string().min(8).max(128),
7931
+ operationId: z25.string().uuid()
7932
+ });
7933
+ var CompleteOrganizationUserSetupResponse = z25.object({
7934
+ status: z25.literal("complete")
7935
+ });
7936
+ var PreviewOrganizationUserSetupRequest = z25.object({ token: z25.string().min(32).max(2048) }).strict();
7937
+ var OrganizationUserSetupPreviewWorkspace = z25.object({
7938
+ workspaceId: z25.string().uuid(),
7939
+ workspaceName: z25.string().min(1).max(255),
7940
+ role: AssignableWorkspaceMemberRole
7941
+ });
7942
+ var OrganizationUserSetupPreviewUnavailable = z25.object({
7943
+ state: z25.enum(["unavailable", "expired", "revoked", "completed"])
7944
+ });
7945
+ var OrganizationUserSetupPreviewPending = z25.object({
7946
+ state: z25.literal("pending"),
7947
+ organizationId: z25.string().uuid(),
7948
+ organizationName: z25.string().trim().min(1).max(120),
7949
+ targetEmail: z25.string().email().max(320),
7950
+ targetName: z25.string().trim().min(1).max(120).nullable(),
7951
+ organizationRole: OrganizationMembershipRole,
7952
+ sharedWorkspaceAccess: z25.array(OrganizationUserSetupPreviewWorkspace).max(100),
7953
+ expiresAt: z25.string().datetime({ offset: true })
7954
+ });
7955
+ var OrganizationUserSetupPreview = z25.discriminatedUnion("state", [
7956
+ OrganizationUserSetupPreviewUnavailable,
7957
+ OrganizationUserSetupPreviewPending
7958
+ ]);
7959
+ var RetryOrganizationUserSetupDeliveryRequest = z25.object({ operationId: z25.string().uuid() }).strict();
7960
+ var CompleteSelfServiceOrganizationSetupRequest = z25.object({
7961
+ organizationName: z25.string().trim().min(1).max(120),
7962
+ operationId: z25.string().uuid()
7963
+ });
7964
+ var CompleteSelfServiceOrganizationSetupResponse = z25.object({
7965
+ status: z25.literal("complete"),
7966
+ organizationId: z25.string().uuid(),
7967
+ personalWorkspaceId: z25.string().uuid()
7968
+ });
7969
+ var SelfServiceOrganizationOnboardingStatus = z25.object({
7970
+ state: z25.enum(["required", "invitation_pending", "unavailable", "complete"])
7971
+ });
7641
7972
  var AcceptOrganizationInvitationRequest = z25.object({
7642
7973
  expectedRevision: z25.number().int().positive(),
7643
7974
  operationId: z25.string().uuid()
@@ -7696,6 +8027,9 @@ var AcceptOrganizationInvitationResponse = z25.object({
7696
8027
  var ListOrganizationMembersResponse = z25.object({
7697
8028
  members: z25.array(OrganizationMember)
7698
8029
  });
8030
+ var ListOrganizationAdministrationMembersResponse = z25.object({
8031
+ members: z25.array(OrganizationAdministrationMember).max(1e3)
8032
+ });
7699
8033
  var ListSelfOrganizationMembershipsResponse = z25.object({
7700
8034
  memberships: z25.array(OrganizationMember)
7701
8035
  });
@@ -7734,7 +8068,7 @@ var RememberRequest = z26.discriminatedUnion("lane", [
7734
8068
  lane: z26.literal("instruction_policy"),
7735
8069
  // A mandatory rule is composed verbatim into the prompt of every session
7736
8070
  // it applies to, for as long as it stays active, so this is the tightest
7737
- // agent budget in the Company Brain.
8071
+ // agent budget in Agent Knowledge.
7738
8072
  content: z26.string().trim().min(1).max(
7739
8073
  AGENT_AUTHORED_INSTRUCTION_POLICY_CONTENT_MAX_CHARS,
7740
8074
  AGENT_AUTHORED_INSTRUCTION_POLICY_CONTENT_TOO_LONG_MESSAGE
@@ -7775,11 +8109,13 @@ var RememberActivationSummary = z26.discriminatedUnion("destination", [
7775
8109
  destination: z26.literal("knowledge"),
7776
8110
  receiptId: z26.string().uuid(),
7777
8111
  claimId: z26.string().uuid(),
8112
+ /** The retrievable Memory record materialized from the approved claim. */
8113
+ memoryId: z26.string().uuid(),
7778
8114
  approvalReviewId: z26.string().uuid(),
7779
8115
  effectiveAt: z26.string().datetime().nullable(),
7780
8116
  authorityKind: z26.literal("human_confirmed"),
7781
- /** Knowledge approvals are undone through the Knowledge review lifecycle (`knowledge_correct` or a human revocation). */
7782
- undo: z26.literal("knowledge_review")
8117
+ /** Correct or archive the materialized record through the Memory lifecycle. */
8118
+ undo: z26.literal("memory_management")
7783
8119
  })
7784
8120
  ]);
7785
8121
  var RememberReceipt = z26.discriminatedUnion("status", [
@@ -8852,6 +9188,7 @@ var SessionTenancyBlocker = z27.enum([
8852
9188
  "shared_sandbox_group"
8853
9189
  ]);
8854
9190
  var SESSION_OPERATION_KEY_MAX_CHARS = 256;
9191
+ var MAX_SELECTED_VARIABLE_SETS = 25;
8855
9192
  var SessionTenancyIdempotencyKey = z27.string().trim().min(1).max(SESSION_OPERATION_KEY_MAX_CHARS);
8856
9193
  var UpdateSessionVisibilityRequest = z27.object({
8857
9194
  visibility: SessionVisibility,
@@ -8886,7 +9223,11 @@ var UpdateSessionVisibilityResponse = z27.object({
8886
9223
  var ForkSessionRequest = z27.object({
8887
9224
  idempotencyKey: SessionTenancyIdempotencyKey,
8888
9225
  visibility: SessionVisibility,
8889
- workspaceSharedAcknowledged: z27.boolean()
9226
+ workspaceSharedAcknowledged: z27.boolean(),
9227
+ // Optional fresh-session runtime setup. Omission preserves the historical
9228
+ // content-only fork; explicit null/[] creates a rigless, set-free restart.
9229
+ rigId: z27.string().uuid().nullable().optional(),
9230
+ variableSetIds: z27.array(z27.string().uuid()).max(MAX_SELECTED_VARIABLE_SETS).optional()
8890
9231
  }).strict().superRefine((value, context) => {
8891
9232
  if (value.visibility === "private" && value.workspaceSharedAcknowledged) {
8892
9233
  context.addIssue({
@@ -8895,6 +9236,13 @@ var ForkSessionRequest = z27.object({
8895
9236
  message: "workspaceSharedAcknowledged must be false for a private destination"
8896
9237
  });
8897
9238
  }
9239
+ if (value.variableSetIds && new Set(value.variableSetIds).size !== value.variableSetIds.length) {
9240
+ context.addIssue({
9241
+ code: "custom",
9242
+ path: ["variableSetIds"],
9243
+ message: "variableSetIds must not contain duplicates"
9244
+ });
9245
+ }
8898
9246
  });
8899
9247
  var ForkSessionResponse = z27.object({
8900
9248
  operationId: z27.string().uuid(),
@@ -8918,6 +9266,7 @@ var ManagedAccount = z27.object({
8918
9266
  var Workspace = z27.object({
8919
9267
  id: z27.string().uuid(),
8920
9268
  accountId: z27.string().uuid(),
9269
+ kind: z27.enum(["personal", "shared"]),
8921
9270
  name: z27.string(),
8922
9271
  slug: z27.string().nullable(),
8923
9272
  externalSource: z27.string().nullable(),
@@ -10950,6 +11299,7 @@ var DocumentSearchRequest = z27.object({
10950
11299
  baseIds: z27.array(z27.string().uuid()).optional(),
10951
11300
  mode: DocumentSearchMode.optional(),
10952
11301
  sourceKinds: z27.array(KnowledgeSourceKind).optional(),
11302
+ authorityKinds: z27.array(DocumentAuthorityKind).max(3).optional(),
10953
11303
  aclTags: z27.array(z27.string().min(1)).optional(),
10954
11304
  limit: z27.number().int().positive().max(50).default(5)
10955
11305
  });
@@ -11515,6 +11865,17 @@ var UpdateSessionGoalRequest = z27.union([
11515
11865
  var UpdateSessionRequest = z27.object({
11516
11866
  title: z27.string().min(1).max(200)
11517
11867
  });
11868
+ var UpdateSessionVariableSetsRequest = z27.object({
11869
+ variableSetIds: z27.array(z27.string().uuid()).max(MAX_SELECTED_VARIABLE_SETS)
11870
+ }).strict().superRefine((value, context) => {
11871
+ if (new Set(value.variableSetIds).size !== value.variableSetIds.length) {
11872
+ context.addIssue({
11873
+ code: z27.ZodIssueCode.custom,
11874
+ path: ["variableSetIds"],
11875
+ message: "variableSetIds must not contain duplicates"
11876
+ });
11877
+ }
11878
+ });
11518
11879
  var UpdateSessionToolPolicyRequest = z27.union([
11519
11880
  z27.object({
11520
11881
  mode: z27.literal("workspace_default"),
@@ -11839,6 +12200,7 @@ var SessionAuthorizationOperation = z27.enum([
11839
12200
  "session.human_input.write",
11840
12201
  "session.title.write",
11841
12202
  "session.channel.write",
12203
+ "session.variable_sets.write",
11842
12204
  "session.mcp.approval_policy.write",
11843
12205
  "session.tool_policy.write",
11844
12206
  "session.goal.read",
@@ -12282,12 +12644,13 @@ var SubmitComposerDraftRequest = ComposerDraft.pick({
12282
12644
  connectionAuthorities: McpConnectionAuthoritySelections.default([]),
12283
12645
  personalResourceAttachment: PersonalResourceAttachmentIntent.optional()
12284
12646
  }).superRefine(requireEstablishedPersonalResourceEpoch);
12285
- var NewSessionDraftOptions = z27.object({
12647
+ var NewSessionDraftOptions = withVariableSetIdAlias({
12286
12648
  visibility: SessionVisibility.optional(),
12287
12649
  sandboxBackend: SandboxBackend.optional(),
12288
12650
  targetSandboxId: z27.string().uuid().optional(),
12289
12651
  workingDir: z27.string().min(1).optional(),
12290
12652
  variableSetId: z27.string().uuid().optional(),
12653
+ variableSetIds: z27.array(z27.string().uuid()).max(MAX_SELECTED_VARIABLE_SETS).optional(),
12291
12654
  rigId: z27.string().uuid().optional(),
12292
12655
  goal: GoalSpec.optional(),
12293
12656
  firstPartyMcpPermissions: z27.array(Permission).optional(),
@@ -12744,17 +13107,43 @@ ${goalContext}`] : [],
12744
13107
  }
12745
13108
  var VariableSetVariableName = z27.string().regex(/^[A-Z][A-Z0-9_]*$/).max(128);
12746
13109
  function withVariableSetIdAlias(shape, options = {}) {
12747
- return z27.preprocess((input) => {
12748
- if (!input || typeof input !== "object" || Array.isArray(input)) {
12749
- return input;
12750
- }
12751
- const record = input;
12752
- if (options.rejectKeys?.some((key) => Object.hasOwn(record, key))) return null;
12753
- if (record.variableSetId !== void 0 || record.environmentId === void 0) {
12754
- return record;
12755
- }
12756
- return { ...record, variableSetId: record.environmentId };
12757
- }, z27.object(shape));
13110
+ return z27.preprocess(
13111
+ (input) => {
13112
+ if (!input || typeof input !== "object" || Array.isArray(input)) {
13113
+ return input;
13114
+ }
13115
+ const record = input;
13116
+ if (options.rejectKeys?.some((key) => Object.hasOwn(record, key))) return null;
13117
+ const aliased = record.variableSetId !== void 0 || record.environmentId === void 0 ? record : { ...record, variableSetId: record.environmentId };
13118
+ if (aliased.variableSetIds === void 0 && aliased.variableSetId !== void 0) {
13119
+ return {
13120
+ ...aliased,
13121
+ variableSetIds: aliased.variableSetId === null ? [] : [aliased.variableSetId]
13122
+ };
13123
+ }
13124
+ return aliased;
13125
+ },
13126
+ z27.object(shape).superRefine((value, context) => {
13127
+ const record = value;
13128
+ if (!Array.isArray(record.variableSetIds)) return;
13129
+ if (new Set(record.variableSetIds).size !== record.variableSetIds.length) {
13130
+ context.addIssue({
13131
+ code: z27.ZodIssueCode.custom,
13132
+ path: ["variableSetIds"],
13133
+ message: "variableSetIds must not contain duplicates"
13134
+ });
13135
+ }
13136
+ if (record.variableSetId === void 0) return;
13137
+ const expected = record.variableSetIds.length > 0 ? record.variableSetIds[record.variableSetIds.length - 1] : null;
13138
+ if (record.variableSetId !== expected) {
13139
+ context.addIssue({
13140
+ code: z27.ZodIssueCode.custom,
13141
+ path: ["variableSetId"],
13142
+ message: "variableSetId must match the last variableSetIds entry"
13143
+ });
13144
+ }
13145
+ })
13146
+ );
12758
13147
  }
12759
13148
  var VariableSetVariableMetadata = z27.object({
12760
13149
  name: VariableSetVariableName,
@@ -12965,6 +13354,7 @@ var RigChangeVerification = z27.object({
12965
13354
  startedAt: z27.string().optional(),
12966
13355
  finishedAt: z27.string().optional(),
12967
13356
  log: z27.string().optional(),
13357
+ platformCheckResults: z27.array(RigCheckResult).optional(),
12968
13358
  checkResults: z27.array(RigCheckResult).optional()
12969
13359
  }).passthrough();
12970
13360
  var RigChange = z27.object({
@@ -12986,7 +13376,12 @@ var CreateRigRequest = z27.object({
12986
13376
  name: z27.string().min(1).max(120),
12987
13377
  description: z27.string().max(2e3).optional(),
12988
13378
  // Initial (version 1) content, inline.
12989
- image: z27.string().max(1024).optional(),
13379
+ // Explicit Rig base images are temporarily disabled. Rigs always compose on
13380
+ // the deployment-owned platform sandbox image so Computer, Browser, Terminal,
13381
+ // and the stock runtime cannot be replaced by a user definition. Keep an
13382
+ // explicit never-field instead of silently stripping `image` from older
13383
+ // clients: callers must receive a validation error and remove the override.
13384
+ image: z27.never().optional(),
12990
13385
  setupScript: z27.string().max(131072).optional(),
12991
13386
  checks: z27.array(RigCheck).max(100).default([]),
12992
13387
  credentialHooks: z27.array(z27.string().min(1).max(200)).max(50).default([]),
@@ -13026,7 +13421,10 @@ var RigSetupAppendPayload = z27.object({
13026
13421
  note: z27.string().max(2e3).optional()
13027
13422
  });
13028
13423
  var RigDefinitionEditPayload = z27.object({
13029
- image: z27.string().max(1024).nullish(),
13424
+ // See CreateRigRequest.image. Historical RigVersion.image values remain on
13425
+ // the read model for compatibility, but no new definition may set or clear
13426
+ // one through the public write contract.
13427
+ image: z27.never().optional(),
13030
13428
  setupScript: z27.string().max(131072).nullish(),
13031
13429
  checks: z27.array(RigCheck).max(100).optional(),
13032
13430
  credentialHooks: z27.array(z27.string().min(1).max(200)).max(50).optional(),
@@ -13428,6 +13826,12 @@ var ScheduledTaskRunAcceptedExecution = /* @__PURE__ */ z27.object({
13428
13826
  mcpServerIds: z27.array(z27.string().min(1).max(256)).max(SCHEDULED_TASK_TOOL_MAX_COUNT),
13429
13827
  effectiveMcpServerIds: z27.array(z27.string().min(1).max(256)).max(SCHEDULED_TASK_TOOL_MAX_COUNT),
13430
13828
  toolPolicyVersion: z27.number().int().nonnegative(),
13829
+ variableSets: z27.array(
13830
+ z27.object({
13831
+ id: z27.string().uuid(),
13832
+ generation: z27.number().int().positive()
13833
+ }).strict()
13834
+ ).max(MAX_SELECTED_VARIABLE_SETS).default([]),
13431
13835
  variableSetId: z27.string().uuid().nullable(),
13432
13836
  variableSetGeneration: z27.number().int().positive().nullable(),
13433
13837
  rigId: z27.string().uuid().nullable(),
@@ -14165,7 +14569,11 @@ var PackInstallation = z27.object({
14165
14569
  var OPENGENI_PR_REVIEW_PACK_ID = "pr-review";
14166
14570
  var OPENGENI_PR_REVIEW_SESSION_ROLE = "pull_request_review";
14167
14571
  var PrReviewProvider = GitCredentialProvider;
14168
- var PrReviewCredentialKind = /* @__PURE__ */ z27.enum(["github_app", "provider_token"]);
14572
+ var PrReviewCredentialKind = /* @__PURE__ */ z27.enum([
14573
+ "github_app",
14574
+ "managed_github_app",
14575
+ "provider_token"
14576
+ ]);
14169
14577
  var PrReviewWebhookAuthKind = /* @__PURE__ */ z27.enum([
14170
14578
  "hmac_sha256",
14171
14579
  "shared_token",
@@ -14261,6 +14669,9 @@ var PrReviewAppRegistration = /* @__PURE__ */ (() => z27.object({
14261
14669
  provider: PrReviewProvider,
14262
14670
  providerBaseUrl: z27.string().url(),
14263
14671
  appId: z27.string().nullable(),
14672
+ installationId: z27.string().nullable(),
14673
+ providerAccountLogin: z27.string().nullable(),
14674
+ providerAccountType: z27.enum(["User", "Organization"]).nullable(),
14264
14675
  credentialKind: PrReviewCredentialKind,
14265
14676
  hasCredential: z27.boolean(),
14266
14677
  accessTokenExpiresAt: z27.string().nullable(),
@@ -14273,6 +14684,21 @@ var PrReviewAppRegistration = /* @__PURE__ */ (() => z27.object({
14273
14684
  createdAt: z27.string(),
14274
14685
  updatedAt: z27.string()
14275
14686
  }))();
14687
+ var PrReviewManagedGitHubInstallation = /* @__PURE__ */ (() => z27.object({
14688
+ registrationId: z27.string().uuid(),
14689
+ installationId: z27.string(),
14690
+ accountLogin: z27.string().nullable(),
14691
+ configureUrl: z27.string().url().nullable(),
14692
+ repositoryCount: z27.number().int().nonnegative()
14693
+ }))();
14694
+ var PrReviewManagedGitHubSetup = /* @__PURE__ */ (() => z27.object({
14695
+ configured: z27.boolean(),
14696
+ status: z27.enum(["unavailable", "not_connected", "connected"]),
14697
+ appName: z27.literal("OpenGeni Lens"),
14698
+ connectUrl: z27.string().url().nullable(),
14699
+ installations: z27.array(PrReviewManagedGitHubInstallation),
14700
+ missing: z27.array(z27.string())
14701
+ }))();
14276
14702
  var CreatePrReviewRepositoryBindingRequest = /* @__PURE__ */ (() => z27.object({
14277
14703
  registrationId: z27.string().uuid(),
14278
14704
  repositoryUri: z27.string().url().max(2048),
@@ -15447,6 +15873,9 @@ var Session = z27.object({
15447
15873
  // The explicit connected-machine project root selected for this session.
15448
15874
  // Null means the enrolled agent's launch workspace root.
15449
15875
  workingDir: z27.string().nullable().default(null),
15876
+ // Ordered low-to-high precedence. The legacy singular aliases below expose
15877
+ // the final (highest-precedence) entry for older clients.
15878
+ variableSetIds: z27.array(z27.string().uuid()).max(MAX_SELECTED_VARIABLE_SETS).default([]),
15450
15879
  variableSetId: z27.string().uuid().nullable().default(null),
15451
15880
  /** @deprecated use variableSetId */
15452
15881
  environmentId: z27.string().uuid().nullable().default(null),
@@ -15624,6 +16053,8 @@ var SessionLineageResponse = z27.object({
15624
16053
  });
15625
16054
  var SessionEventType = z27.enum([
15626
16055
  "session.created",
16056
+ "session.variable_sets.updated",
16057
+ "session.runtime.configured",
15627
16058
  "session.personal_resources.attached",
15628
16059
  "session.visibility.changed",
15629
16060
  // Defensive read/transport projection for a malformed or historically
@@ -17294,8 +17725,10 @@ var CreateSessionRequest = withVariableSetIdAlias(
17294
17725
  // plane has no authenticated home-directory fact. Only valid WITH
17295
17726
  // targetSandboxId; omitted selects the reported root.
17296
17727
  workingDir: z27.string().min(1).optional(),
17297
- // Variable set attachment is fixed at session creation; follow-up
17298
- // user.message events cannot switch or add one.
17728
+ // Ordered low-to-high precedence. A legacy singular selection is normalized
17729
+ // into one entry by withVariableSetIdAlias; when both are present the
17730
+ // singular value must match the final (highest-precedence) entry.
17731
+ variableSetIds: z27.array(z27.string().uuid()).max(MAX_SELECTED_VARIABLE_SETS).optional(),
17299
17732
  variableSetId: z27.string().uuid().optional(),
17300
17733
  environmentId: z27.string().uuid().optional(),
17301
17734
  // The rig to bind this session to (M3). Its ACTIVE version is resolved and
@@ -18499,7 +18932,7 @@ var WorkspaceModelCatalogResponse = /* @__PURE__ */ defineModelContractSchema(
18499
18932
  models: z27.array(WorkspaceModelCatalogModel)
18500
18933
  })
18501
18934
  );
18502
- var OPENGENI_API_CONTRACT_REVISION = "2026-08-atomic-session-fork-visibility-v1";
18935
+ var OPENGENI_API_CONTRACT_REVISION = "2026-08-personal-only-organization-setup-v1";
18503
18936
  var OPENGENI_API_CONTRACT_HEADER = "x-opengeni-api-contract";
18504
18937
  var OPENGENI_CORRELATION_HEADER = "x-opengeni-correlation-id";
18505
18938
  var ClientConfig = /* @__PURE__ */ defineModelContractSchema(
@@ -19128,6 +19561,10 @@ export {
19128
19561
  SANDBOX_FILE_ARTIFACT_MAX_BYTES,
19129
19562
  PublishSandboxFileArtifactRequest,
19130
19563
  SandboxFileArtifactReceipt,
19564
+ SESSION_TITLE_MAX_CHARACTERS,
19565
+ AUTOMATIC_SESSION_TITLE_MAX_GRAPHEMES,
19566
+ AUTOMATIC_SESSION_TITLE_FALLBACK,
19567
+ normalizeAutomaticSessionTitle,
19131
19568
  WORKSPACE_ARTIFACT_HTML_MAX_UTF8_BYTES,
19132
19569
  WORKSPACE_ARTIFACT_TITLE_MAX_CHARS,
19133
19570
  WORKSPACE_ARTIFACT_DESCRIPTION_MAX_CHARS,
@@ -19413,17 +19850,27 @@ export {
19413
19850
  TaskNoteReplacementResult,
19414
19851
  TaskNoteListResponse,
19415
19852
  OrganizationMembershipRole,
19853
+ WorkspaceMemberRole,
19854
+ AssignableWorkspaceMemberRole,
19416
19855
  OrganizationInvitationStatus,
19856
+ OrganizationUserSetupDeliveryState,
19857
+ OrganizationUserSetupDelivery,
19417
19858
  OrganizationInvitation,
19418
19859
  OrganizationMember,
19860
+ OrganizationAdministrationMemberWorkspaceAccess,
19861
+ OrganizationAdministrationMember,
19419
19862
  OrganizationSummary,
19420
19863
  OrganizationPrivateSessionSettings,
19421
19864
  UpdateOrganizationPrivateSessionSettingsRequest,
19422
19865
  OrganizationWorkspaceAccessMember,
19423
19866
  OrganizationWorkspaceAccess,
19867
+ OrganizationWorkspaceRoleDefinition,
19424
19868
  OrganizationAdministrationOverview,
19425
- AddOrganizationWorkspaceMemberRequest,
19426
19869
  CreateOrganizationWorkspaceRequest,
19870
+ UpdateOrganizationWorkspaceRequest,
19871
+ PutOrganizationWorkspaceMemberRequest,
19872
+ RevokeOrganizationWorkspaceMemberRequest,
19873
+ RevokeOrganizationWorkspaceMemberResponse,
19427
19874
  CreateOrganizationRequest,
19428
19875
  CreateOrganizationResponse,
19429
19876
  UpdateOrganizationNameRequest,
@@ -19434,6 +19881,15 @@ export {
19434
19881
  OrganizationRetentionDeletionResult,
19435
19882
  OrganizationRetentionDeletionPreview,
19436
19883
  CreateOrganizationInvitationRequest,
19884
+ CompleteOrganizationUserSetupRequest,
19885
+ CompleteOrganizationUserSetupResponse,
19886
+ PreviewOrganizationUserSetupRequest,
19887
+ OrganizationUserSetupPreviewWorkspace,
19888
+ OrganizationUserSetupPreview,
19889
+ RetryOrganizationUserSetupDeliveryRequest,
19890
+ CompleteSelfServiceOrganizationSetupRequest,
19891
+ CompleteSelfServiceOrganizationSetupResponse,
19892
+ SelfServiceOrganizationOnboardingStatus,
19437
19893
  AcceptOrganizationInvitationRequest,
19438
19894
  RevokeOrganizationInvitationRequest,
19439
19895
  OrganizationMemberTransitionKind,
@@ -19444,6 +19900,7 @@ export {
19444
19900
  ListOrganizationInvitationsPageResponse,
19445
19901
  AcceptOrganizationInvitationResponse,
19446
19902
  ListOrganizationMembersResponse,
19903
+ ListOrganizationAdministrationMembersResponse,
19447
19904
  ListSelfOrganizationMembershipsResponse,
19448
19905
  RememberLane,
19449
19906
  RememberScope,
@@ -19529,6 +19986,7 @@ export {
19529
19986
  SessionTenancyPublicProjection,
19530
19987
  SessionTenancyBlocker,
19531
19988
  SESSION_OPERATION_KEY_MAX_CHARS,
19989
+ MAX_SELECTED_VARIABLE_SETS,
19532
19990
  UpdateSessionVisibilityRequest,
19533
19991
  UpdateSessionVisibilityResponse,
19534
19992
  ForkSessionRequest,
@@ -19804,6 +20262,7 @@ export {
19804
20262
  GoalSpec,
19805
20263
  UpdateSessionGoalRequest,
19806
20264
  UpdateSessionRequest,
20265
+ UpdateSessionVariableSetsRequest,
19807
20266
  UpdateSessionToolPolicyRequest,
19808
20267
  UpdateSessionPinRequest,
19809
20268
  UpdateSessionAttentionRequest,
@@ -20043,6 +20502,8 @@ export {
20043
20502
  CreatePrReviewAppRegistrationRequest,
20044
20503
  UpdatePrReviewAppRegistrationRequest,
20045
20504
  PrReviewAppRegistration,
20505
+ PrReviewManagedGitHubInstallation,
20506
+ PrReviewManagedGitHubSetup,
20046
20507
  CreatePrReviewRepositoryBindingRequest,
20047
20508
  UpdatePrReviewRepositoryBindingRequest,
20048
20509
  PrReviewRepositoryBinding,
@@ -20395,4 +20856,4 @@ export {
20395
20856
  ClientConfig,
20396
20857
  evaluateWorkspaceModelPolicy
20397
20858
  };
20398
- //# sourceMappingURL=chunk-XW2RKNEU.js.map
20859
+ //# sourceMappingURL=chunk-4I7DWNRR.js.map