@xfey/tutti 0.1.103 → 0.1.104

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.
Files changed (106) hide show
  1. package/README.md +9 -4
  2. package/dist/chat-assistant/index.d.ts +6 -1
  3. package/dist/chat-assistant/index.js +22 -12
  4. package/dist/collaboration-ingestion/external-source.d.ts +15 -0
  5. package/dist/collaboration-ingestion/external-source.js +120 -0
  6. package/dist/collaboration-ingestion/index.d.ts +5 -0
  7. package/dist/collaboration-ingestion/index.js +4 -0
  8. package/dist/collaboration-ingestion/invalidations.d.ts +4 -0
  9. package/dist/collaboration-ingestion/invalidations.js +15 -0
  10. package/dist/collaboration-ingestion/main-chat.d.ts +33 -0
  11. package/dist/collaboration-ingestion/main-chat.js +67 -0
  12. package/dist/collaboration-ingestion/reference-files.d.ts +29 -0
  13. package/dist/collaboration-ingestion/reference-files.js +158 -0
  14. package/dist/collaboration-ingestion/types.d.ts +19 -0
  15. package/dist/collaboration-ingestion/types.js +2 -0
  16. package/dist/platform-outbound/coordinator.d.ts +17 -0
  17. package/dist/platform-outbound/coordinator.js +48 -0
  18. package/dist/platform-outbound/index.d.ts +5 -0
  19. package/dist/platform-outbound/index.js +5 -0
  20. package/dist/platform-outbound/repository.d.ts +30 -0
  21. package/dist/platform-outbound/repository.js +108 -0
  22. package/dist/platform-outbound/types.d.ts +38 -0
  23. package/dist/platform-outbound/types.js +2 -0
  24. package/dist/platform-outbound/worker.d.ts +36 -0
  25. package/dist/platform-outbound/worker.js +164 -0
  26. package/dist/server-shell/cli/cli.js +9 -0
  27. package/dist/server-shell/cli/errors.d.ts +1 -1
  28. package/dist/server-shell/cli/host-lifecycle.d.ts +2 -0
  29. package/dist/server-shell/cli/host-lifecycle.js +34 -1
  30. package/dist/server-shell/cli/host-relay-connection-manager.js +22 -11
  31. package/dist/server-shell/cli/host-relay-status.js +1 -0
  32. package/dist/server-shell/cli/host-runtime-endpoint.js +17 -1
  33. package/dist/server-shell/cli/host-server-runtime.d.ts +2 -0
  34. package/dist/server-shell/cli/host-server-runtime.js +88 -14
  35. package/dist/server-shell/cli/launch-command.d.ts +7 -0
  36. package/dist/server-shell/cli/launch-command.js +39 -1
  37. package/dist/server-shell/cli/launch.d.ts +2 -0
  38. package/dist/server-shell/cli/launch.js +3 -0
  39. package/dist/server-shell/cli/machine-local.d.ts +20 -0
  40. package/dist/server-shell/cli/machine-local.js +61 -1
  41. package/dist/server-shell/cli/managed-host.d.ts +16 -1
  42. package/dist/server-shell/cli/managed-host.js +191 -23
  43. package/dist/server-shell/cli/relay-registration.d.ts +4 -1
  44. package/dist/server-shell/cli/relay-registration.js +36 -7
  45. package/dist/server-shell/cli/runtime-commands.d.ts +5 -1
  46. package/dist/server-shell/cli/runtime-commands.js +9 -3
  47. package/dist/server-shell/http/host-tunnel.d.ts +5 -0
  48. package/dist/server-shell/http/host-tunnel.js +109 -0
  49. package/dist/server-shell/http/routes/local-control.d.ts +2 -0
  50. package/dist/server-shell/http/routes/local-control.js +2 -0
  51. package/dist/server-shell/http/routes/project-api/invalidations.d.ts +0 -1
  52. package/dist/server-shell/http/routes/project-api/invalidations.js +0 -3
  53. package/dist/server-shell/http/routes/project-api/messages-routes.js +32 -63
  54. package/dist/server-shell/http/routes/project-api/openapi-workspace-routes.d.ts +8 -4
  55. package/dist/server-shell/http/routes/project-api/openapi.d.ts +8 -4
  56. package/dist/server-shell/http/routes/project-api/reference-files-routes.js +25 -94
  57. package/dist/server-shell/http/routes/project-api/reference-files.d.ts +1 -11
  58. package/dist/server-shell/http/routes/project-api/reference-files.js +2 -87
  59. package/dist/server-shell/http/routes/project-api/schemas.d.ts +8 -4
  60. package/dist/server-shell/http/routes/project-api/schemas.js +8 -3
  61. package/dist/server-shell/http/routes/project-api/session-requirements.js +34 -2
  62. package/dist/server-shell/http/routes/project-api/types.d.ts +3 -1
  63. package/dist/server-shell/http/routes/project-api/workspace-projections.js +8 -2
  64. package/dist/server-shell/local-console/package-update-hosts.js +4 -1
  65. package/dist/server-shell/local-console/project-service.d.ts +11 -2
  66. package/dist/server-shell/local-console/project-service.js +36 -8
  67. package/dist/server-shell/local-console/server.js +6 -1
  68. package/dist/server-shell/local-console/session.d.ts +4 -0
  69. package/dist/server-shell/local-console/session.js +14 -0
  70. package/dist/server-shell/session/relay-session-context.d.ts +12 -1
  71. package/dist/server-shell/session/relay-session-context.js +19 -1
  72. package/migrations/0016_external_source_mappings.sql +141 -0
  73. package/migrations/0017_platform_outbound_intents.sql +31 -0
  74. package/migrations/README.md +3 -1
  75. package/node_modules/@tutti/relay-client/dist/host-control.d.ts +26 -1
  76. package/node_modules/@tutti/relay-client/dist/host-control.js +62 -0
  77. package/node_modules/@tutti/relay-client/dist/tunnel-frames.js +32 -6
  78. package/node_modules/@tutti/relay-client/dist/tunnel-types.d.ts +5 -1
  79. package/node_modules/@tutti/shared/dist/domain/index.d.ts +9 -0
  80. package/node_modules/@tutti/shared/dist/domain/index.js +14 -0
  81. package/node_modules/@tutti/shared/dist/ids/index.d.ts +6 -0
  82. package/node_modules/@tutti/shared/dist/ids/index.js +4 -0
  83. package/node_modules/@tutti/shared/dist/schemas/api/index.d.ts +4 -0
  84. package/node_modules/@tutti/shared/dist/schemas/api/index.js +2 -0
  85. package/node_modules/@tutti/shared/dist/schemas/api/local-console-account-handoffs.d.ts +13 -0
  86. package/node_modules/@tutti/shared/dist/schemas/api/local-console-account-handoffs.js +16 -0
  87. package/node_modules/@tutti/shared/dist/schemas/api/platform-sessions.d.ts +43 -0
  88. package/node_modules/@tutti/shared/dist/schemas/api/platform-sessions.js +44 -0
  89. package/node_modules/@tutti/shared/dist/schemas/domain/index.d.ts +7 -0
  90. package/node_modules/@tutti/shared/dist/schemas/domain/index.js +10 -0
  91. package/node_modules/@tutti/shared/dist/schemas/internal/index.d.ts +29 -0
  92. package/node_modules/@tutti/shared/dist/schemas/internal/index.js +24 -1
  93. package/node_modules/@tutti/shared/dist/schemas/internal/platform-integration.d.ts +1346 -0
  94. package/node_modules/@tutti/shared/dist/schemas/internal/platform-integration.js +516 -0
  95. package/node_modules/@tutti/shared/dist/utils/feishu-diagnostics/index.d.ts +10 -0
  96. package/node_modules/@tutti/shared/dist/utils/feishu-diagnostics/index.js +19 -0
  97. package/node_modules/@tutti/shared/dist/utils/index.d.ts +1 -0
  98. package/node_modules/@tutti/shared/dist/utils/index.js +1 -0
  99. package/node_modules/@tutti/shared/dist/utils/redaction/index.d.ts +1 -1
  100. package/node_modules/@tutti/shared/dist/utils/redaction/index.js +18 -0
  101. package/package.json +1 -1
  102. package/web/assets/{homepage-motion-scene-CPs4EYQq.js → homepage-motion-scene-DEVrQ9aj.js} +1 -1
  103. package/web/assets/{index-CxCTqGFO.css → index-6i9Uk7fS.css} +1 -1
  104. package/web/assets/index-Lxtst2sl.js +69 -0
  105. package/web/index.html +2 -2
  106. package/web/assets/index-D3lwP_UR.js +0 -69
@@ -1,4 +1,5 @@
1
1
  import { createIdempotencyKey, } from "@tutti/shared/ids";
2
+ import { isPlatformOutboundHandoffResponse, } from "@tutti/shared/schemas/internal";
2
3
  export class RelayHostControlClientError extends Error {
3
4
  code;
4
5
  retryable;
@@ -32,6 +33,9 @@ function uploadResolveUrl(relayUrl) {
32
33
  function uploadCompleteUrl(relayUrl) {
33
34
  return new URL("/host-control/v1/uploads/complete", relayUrl);
34
35
  }
36
+ function platformOutboundUrl(relayUrl) {
37
+ return new URL("/host-control/v1/platform-outbound", relayUrl);
38
+ }
35
39
  function createRegisterPayload(options) {
36
40
  const capabilities = options.capabilities ?? {};
37
41
  const payload = {
@@ -52,9 +56,14 @@ function createRegisterPayload(options) {
52
56
  provider_config_query: capabilities.provider_config_query ?? true,
53
57
  browser_secret_write: false,
54
58
  repo_viewer: capabilities.repo_viewer ?? false,
59
+ integration_source_ingestion_v1: capabilities.integration_source_ingestion_v1 ?? false,
60
+ integration_outbound_v1: capabilities.integration_outbound_v1 ?? false,
55
61
  },
56
62
  },
57
63
  };
64
+ if (options.surfaceProfile !== undefined) {
65
+ payload.surface_profile = options.surfaceProfile;
66
+ }
58
67
  if (options.joinToken !== undefined) {
59
68
  payload.join_token = {
60
69
  mode: options.joinToken.mode,
@@ -63,6 +72,12 @@ function createRegisterPayload(options) {
63
72
  : { ttl_seconds: options.joinToken.ttlSeconds }),
64
73
  };
65
74
  }
75
+ if (options.accountHandoffToken !== undefined) {
76
+ payload.owner_bootstrap = {
77
+ kind: "local_console_account_handoff_v1",
78
+ account_handoff_token: options.accountHandoffToken,
79
+ };
80
+ }
66
81
  return payload;
67
82
  }
68
83
  function createRefreshJoinTokenPayload(options) {
@@ -401,4 +416,51 @@ export async function completeRelayUpload(options) {
401
416
  }
402
417
  return assertCompleteRelayUploadResponse(await response.json());
403
418
  }
419
+ export async function deliverRelayPlatformOutbound(options) {
420
+ const fetchImpl = options.fetch ?? fetch;
421
+ let response;
422
+ try {
423
+ response = await fetchWithTimeout(fetchImpl, platformOutboundUrl(options.relayUrl), {
424
+ method: "POST",
425
+ headers: {
426
+ accept: "application/json",
427
+ "content-type": "application/json",
428
+ },
429
+ body: JSON.stringify({
430
+ project_identity: { source: "git_config", project_id: options.projectId },
431
+ host_auth: {
432
+ kind: "host_registration_secret_v1",
433
+ secret: options.hostRegistrationSecret,
434
+ },
435
+ relay_project_ref: options.relayProjectRef,
436
+ host_connection_ref: options.hostConnectionRef,
437
+ intent: options.intent,
438
+ }),
439
+ }, options.timeoutMs ?? 15_000, options.signal);
440
+ }
441
+ catch {
442
+ throw new RelayHostControlClientError("relay_unavailable", `Cannot reach Relay at ${options.relayUrl}`, true);
443
+ }
444
+ if (!response.ok) {
445
+ let relayErrorCode;
446
+ try {
447
+ relayErrorCode = relayErrorCodeFromBody(await response.json());
448
+ }
449
+ catch {
450
+ relayErrorCode = undefined;
451
+ }
452
+ throw new RelayHostControlClientError(response.status >= 500 ? "relay_unavailable" : "relay_registration_failed", `Relay platform outbound handoff failed with HTTP ${response.status}`, response.status === 408 || response.status === 429 || response.status >= 500, response.status, relayErrorCode);
453
+ }
454
+ let value;
455
+ try {
456
+ value = await response.json();
457
+ }
458
+ catch {
459
+ throw new RelayHostControlClientError("relay_unavailable", "Relay platform outbound response is invalid", true);
460
+ }
461
+ if (!isPlatformOutboundHandoffResponse(value)) {
462
+ throw new RelayHostControlClientError("relay_unavailable", "Relay platform outbound response is invalid", true);
463
+ }
464
+ return value;
465
+ }
404
466
  //# sourceMappingURL=host-control.js.map
@@ -1,4 +1,4 @@
1
- import { parseRelaySessionContext } from "@tutti/shared/schemas/internal";
1
+ import { isIntegrationDeliveryTunnelMetadata, parseFeishuPlatformSessionContext, parseRelaySessionContext, } from "@tutti/shared/schemas/internal";
2
2
  function bufferFromWsMessage(data) {
3
3
  if (typeof data === "string") {
4
4
  return Buffer.from(data, "utf8");
@@ -48,12 +48,34 @@ export function parseHostRequestFrame(data, expectedKind) {
48
48
  }
49
49
  const headers = parseTunnelHeaders(value.headers);
50
50
  const metadata = isRecord(value.metadata) ? value.metadata : null;
51
- const relaySessionContext = metadata === null ? null : parseRelaySessionContext(metadata.relay_session_context);
51
+ const metadataKeys = metadata === null ? [] : Object.keys(metadata);
52
+ const hasRelaySessionContext = metadata !== null && Object.hasOwn(metadata, "relay_session_context");
53
+ const hasFeishuPlatformSessionContext = metadata !== null && Object.hasOwn(metadata, "feishu_platform_session_context");
54
+ const hasIntegrationDelivery = metadata !== null && Object.hasOwn(metadata, "integration_delivery");
55
+ const relaySessionContext = !hasRelaySessionContext || metadata === null
56
+ ? null
57
+ : parseRelaySessionContext(metadata.relay_session_context);
58
+ const feishuPlatformSessionContext = !hasFeishuPlatformSessionContext || metadata === null
59
+ ? null
60
+ : parseFeishuPlatformSessionContext(metadata.feishu_platform_session_context);
61
+ const integrationDelivery = !hasIntegrationDelivery ||
62
+ metadata === null ||
63
+ !isIntegrationDeliveryTunnelMetadata(metadata.integration_delivery)
64
+ ? null
65
+ : metadata.integration_delivery;
52
66
  if (typeof value.request_id !== "string" ||
53
67
  typeof value.method !== "string" ||
54
68
  typeof value.path !== "string" ||
55
69
  headers === null ||
56
- relaySessionContext === null ||
70
+ metadataKeys.length !== 1 ||
71
+ Number(hasRelaySessionContext) +
72
+ Number(hasFeishuPlatformSessionContext) +
73
+ Number(hasIntegrationDelivery) !==
74
+ 1 ||
75
+ Number(relaySessionContext !== null) +
76
+ Number(feishuPlatformSessionContext !== null) +
77
+ Number(integrationDelivery !== null) !==
78
+ 1 ||
57
79
  (value.body_base64 !== undefined && typeof value.body_base64 !== "string")) {
58
80
  return null;
59
81
  }
@@ -62,9 +84,13 @@ export function parseHostRequestFrame(data, expectedKind) {
62
84
  method: value.method,
63
85
  path: value.path,
64
86
  headers,
65
- metadata: {
66
- relay_session_context: relaySessionContext,
67
- },
87
+ metadata: relaySessionContext !== null
88
+ ? { relay_session_context: relaySessionContext }
89
+ : feishuPlatformSessionContext !== null
90
+ ? { feishu_platform_session_context: feishuPlatformSessionContext }
91
+ : {
92
+ integration_delivery: integrationDelivery,
93
+ },
68
94
  };
69
95
  if (value.body_base64 !== undefined) {
70
96
  request.body_base64 = value.body_base64;
@@ -1,5 +1,5 @@
1
1
  import type { HostConnectionRef, RelayProjectRef } from "@tutti/shared/ids";
2
- import type { RelaySessionContext } from "@tutti/shared/schemas/internal";
2
+ import type { FeishuPlatformSessionContext, IntegrationDeliveryTunnelMetadata, RelaySessionContext } from "@tutti/shared/schemas/internal";
3
3
  export type RelayTunnelHeaderValue = string | readonly string[];
4
4
  export type RelayTunnelHeaders = Record<string, RelayTunnelHeaderValue>;
5
5
  export type RelayHostTunnelRequest = {
@@ -10,6 +10,10 @@ export type RelayHostTunnelRequest = {
10
10
  body_base64?: string;
11
11
  metadata: {
12
12
  relay_session_context: RelaySessionContext;
13
+ } | {
14
+ feishu_platform_session_context: FeishuPlatformSessionContext;
15
+ } | {
16
+ integration_delivery: IntegrationDeliveryTunnelMetadata;
13
17
  };
14
18
  };
15
19
  export type RelayHostTunnelResponse = {
@@ -2,6 +2,15 @@ import type { ActivityRef, ClarificationRoundRef, ClarificationThreadRef, Idempo
2
2
  export type { ActivityRef, ClarificationInteractionResponseId, ClarificationRoundRef, ClarificationThreadRef, EventRef, HostConnectionRef, IdempotencyKey, JoinTokenRef, MessageId, ProjectId, RecoverySummaryId, RelayAccountRef, RelayAccountSessionRef, RelayClientSessionId, RelayMembershipRef, RelayProjectRef, RunResultId, TaskId, TaskModuleId, WorkflowInvocationRef, } from "../ids/index.js";
3
3
  export type IsoDateTimeString = string;
4
4
  export type Cursor = string;
5
+ export declare const PROJECT_SURFACES: readonly ["standalone", "feishu"];
6
+ export type ProjectSurface = (typeof PROJECT_SURFACES)[number];
7
+ export type ProjectSurfaceProfile = {
8
+ kind: ProjectSurface;
9
+ version: 1;
10
+ };
11
+ export declare function createProjectSurfaceProfile(kind?: ProjectSurface): ProjectSurfaceProfile;
12
+ export declare function isProjectSurface(value: unknown): value is ProjectSurface;
13
+ export declare function isProjectSurfaceProfile(value: unknown): value is ProjectSurfaceProfile;
5
14
  export declare const ACCOUNT_AVATAR_COLORS: readonly ["green", "blue", "yellow", "neutral"];
6
15
  export declare const ACCOUNT_DISPLAY_NAME_MAX_GRAPHEMES = 16;
7
16
  export declare const ACCOUNT_AVATAR_INITIALS_MAX_GRAPHEMES = 2;
@@ -1,3 +1,17 @@
1
+ export const PROJECT_SURFACES = ["standalone", "feishu"];
2
+ export function createProjectSurfaceProfile(kind = "standalone") {
3
+ return { kind, version: 1 };
4
+ }
5
+ export function isProjectSurface(value) {
6
+ return value === "standalone" || value === "feishu";
7
+ }
8
+ export function isProjectSurfaceProfile(value) {
9
+ return (typeof value === "object" &&
10
+ value !== null &&
11
+ !Array.isArray(value) &&
12
+ value.version === 1 &&
13
+ isProjectSurface(value.kind));
14
+ }
1
15
  export const ACCOUNT_AVATAR_COLORS = ["green", "blue", "yellow", "neutral"];
2
16
  export const ACCOUNT_DISPLAY_NAME_MAX_GRAPHEMES = 16;
3
17
  export const ACCOUNT_AVATAR_INITIALS_MAX_GRAPHEMES = 2;
@@ -19,6 +19,8 @@ export declare const ID_PREFIXES: {
19
19
  readonly relayMembership: "relay_member_";
20
20
  readonly relayAccountSession: "relay_account_session_";
21
21
  readonly relayClientSession: "relay_client_session_";
22
+ readonly relayPlatformSessionBootstrap: "relay_platform_bootstrap_";
23
+ readonly relayPlatformSession: "relay_platform_session_";
22
24
  readonly relayUpload: "relay_upload_";
23
25
  readonly relayAuthChallenge: "relay_auth_challenge_";
24
26
  readonly relayDesktopEntryContinuation: "relay_desktop_entry_continuation_";
@@ -48,6 +50,8 @@ export type RelayAccountRef = PrefixedId<typeof ID_PREFIXES.relayAccount>;
48
50
  export type RelayMembershipRef = PrefixedId<typeof ID_PREFIXES.relayMembership>;
49
51
  export type RelayAccountSessionRef = PrefixedId<typeof ID_PREFIXES.relayAccountSession>;
50
52
  export type RelayClientSessionId = PrefixedId<typeof ID_PREFIXES.relayClientSession>;
53
+ export type RelayPlatformSessionBootstrapRef = PrefixedId<typeof ID_PREFIXES.relayPlatformSessionBootstrap>;
54
+ export type RelayPlatformSessionRef = PrefixedId<typeof ID_PREFIXES.relayPlatformSession>;
51
55
  export type RelayUploadRef = PrefixedId<typeof ID_PREFIXES.relayUpload>;
52
56
  export type RelayAuthChallengeRef = PrefixedId<typeof ID_PREFIXES.relayAuthChallenge>;
53
57
  export type RelayDesktopEntryContinuationRef = PrefixedId<typeof ID_PREFIXES.relayDesktopEntryContinuation>;
@@ -81,6 +85,8 @@ export declare const createRelayAccountRef: () => RelayAccountRef;
81
85
  export declare const createRelayMembershipRef: () => RelayMembershipRef;
82
86
  export declare const createRelayAccountSessionRef: () => RelayAccountSessionRef;
83
87
  export declare const createRelayClientSessionId: () => RelayClientSessionId;
88
+ export declare const createRelayPlatformSessionBootstrapRef: () => RelayPlatformSessionBootstrapRef;
89
+ export declare const createRelayPlatformSessionRef: () => RelayPlatformSessionRef;
84
90
  export declare const createRelayUploadRef: () => RelayUploadRef;
85
91
  export declare const createRelayAuthChallengeRef: () => RelayAuthChallengeRef;
86
92
  export declare const createRelayDesktopEntryContinuationRef: () => RelayDesktopEntryContinuationRef;
@@ -21,6 +21,8 @@ export const ID_PREFIXES = {
21
21
  relayMembership: "relay_member_",
22
22
  relayAccountSession: "relay_account_session_",
23
23
  relayClientSession: "relay_client_session_",
24
+ relayPlatformSessionBootstrap: "relay_platform_bootstrap_",
25
+ relayPlatformSession: "relay_platform_session_",
24
26
  relayUpload: "relay_upload_",
25
27
  relayAuthChallenge: "relay_auth_challenge_",
26
28
  relayDesktopEntryContinuation: "relay_desktop_entry_continuation_",
@@ -82,6 +84,8 @@ export const createRelayAccountRef = () => createPrefixedId(ID_PREFIXES.relayAcc
82
84
  export const createRelayMembershipRef = () => createPrefixedId(ID_PREFIXES.relayMembership);
83
85
  export const createRelayAccountSessionRef = () => createPrefixedId(ID_PREFIXES.relayAccountSession);
84
86
  export const createRelayClientSessionId = () => createPrefixedId(ID_PREFIXES.relayClientSession);
87
+ export const createRelayPlatformSessionBootstrapRef = () => createPrefixedId(ID_PREFIXES.relayPlatformSessionBootstrap);
88
+ export const createRelayPlatformSessionRef = () => createPrefixedId(ID_PREFIXES.relayPlatformSession);
85
89
  export const createRelayUploadRef = () => createPrefixedId(ID_PREFIXES.relayUpload);
86
90
  export const createRelayAuthChallengeRef = () => createPrefixedId(ID_PREFIXES.relayAuthChallenge);
87
91
  export const createRelayDesktopEntryContinuationRef = () => createPrefixedId(ID_PREFIXES.relayDesktopEntryContinuation);
@@ -3,6 +3,10 @@ export type * from "./types.js";
3
3
  export { ARTIFACT_FEEDBACK_MAX_ANNOTATIONS, ARTIFACT_FEEDBACK_MAX_AUTHORED_TEXT_LENGTH, ARTIFACT_FEEDBACK_MAX_COMMENT_LENGTH, ARTIFACT_FEEDBACK_MAX_SERIALIZED_BYTES, ARTIFACT_FEEDBACK_MAX_SUMMARY_LENGTH, ArtifactElementAnchorSchema, ArtifactElementKindSchema, ArtifactElementTargetSchema, ArtifactFeedbackAnnotationSchema, ArtifactFeedbackCommandSchema, ArtifactFeedbackRefSchema, ArtifactSemanticContextSchema, ArtifactSemanticSnapshotSchema, ArtifactSemanticStateSchema, } from "./artifact-feedback.js";
4
4
  export { CompleteDesktopEntryContinuationBodySchema, CompleteDesktopEntryContinuationResponseSchema, CreateDesktopEntryContinuationResponseSchema, DESKTOP_ENTRY_COMPLETION_TOKEN_LENGTH, DESKTOP_ENTRY_PAYLOAD_KEY_LENGTH, DESKTOP_ENTRY_SEALED_IV_LENGTH, DesktopEntryCompletionTokenSchema, DesktopEntryContinuationPendingProjectionSchema, DesktopEntryContinuationReadyProjectionSchema, DesktopEntryPayloadKeySchema, GetDesktopEntryContinuationResponseSchema, MAX_DESKTOP_ENTRY_SEALED_CIPHERTEXT_LENGTH, SealedDesktopEntryPayloadSchema, } from "./desktop-entry-continuations.js";
5
5
  export type { CompleteDesktopEntryContinuationBody, CreateDesktopEntryContinuationResponse, GetDesktopEntryContinuationResponse, SealedDesktopEntryPayload, } from "./desktop-entry-continuations.js";
6
+ export { LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MAX_LENGTH, LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MIN_LENGTH, RegisterLocalConsoleAccountHandoffBodySchema, RegisterLocalConsoleAccountHandoffResponseSchema, } from "./local-console-account-handoffs.js";
7
+ export type { RegisterLocalConsoleAccountHandoffBody, RegisterLocalConsoleAccountHandoffResponse, } from "./local-console-account-handoffs.js";
8
+ export { FEISHU_H5_AUTHORIZATION_CODE_MAX_LENGTH, FEISHU_H5_REQUIRED_USER_SCOPE, FEISHU_PLATFORM_STATE_LENGTH, FeishuPlatformSessionBootstrapBodySchema, FeishuPlatformSessionBootstrapResponseSchema, FeishuPlatformSessionExchangeBodySchema, FeishuPlatformSessionProjectionSchema, FeishuPlatformStateSchema, } from "./platform-sessions.js";
9
+ export type { FeishuPlatformSessionBootstrapBody, FeishuPlatformSessionBootstrapResponse, FeishuPlatformSessionExchangeBody, FeishuPlatformSessionProjection, } from "./platform-sessions.js";
6
10
  export { ApiErrorCodeSchema, ApiErrorResponseSchema, CommandDispositionBaseSchema, CursorPageRequestSchema, DEFAULT_SSE_REPLAY_WINDOW_POLICY, InterruptedCommandDispositionSchema, QueryInvalidationHintSchema, RelayInvalidationHintSchema, RelaySseEventTypeSchema, SseReplayWindowPolicySchema, WorkspaceSseEventTypeSchema, commandEnvelopeSchema, commandResponseSchema, commandResponseWithResultSchema, cursorPageSchema, relaySseEventSchema, timelineWindowSchema, workspaceSseEventSchema, } from "./primitives.js";
7
11
  export { GetProviderModelsResponseSchema, MAX_PROVIDER_MODEL_NAME_LENGTH, ProviderConfigInvalidReasonCodeSchema, ProviderConfigProjectionSchema, ProviderModelDiscoveryUnavailableReasonSchema, ProviderModelNameSchema, ProviderModelValidationFailureReasonSchema, ProviderUnavailableReasonCodeSchema, ProjectProviderUnavailableReasonSchema, UpdateProviderDefaultModelBodySchema, UpdateProviderDefaultModelDispositionSchema, UpdateProviderDefaultModelPayloadSchema, UpdateProviderDefaultModelResponseSchema, } from "./provider-config.js";
8
12
  export { ProviderUsageBreakdownProjectionSchema, ProviderUsageCategorySchema, ProviderUsageModelSummaryProjectionSchema, ProviderUsageProjectionSchema, ProviderUsageSourceSummaryProjectionSchema, } from "./provider-usage.js";
@@ -1,6 +1,8 @@
1
1
  export * from "./openapi.js";
2
2
  export { ARTIFACT_FEEDBACK_MAX_ANNOTATIONS, ARTIFACT_FEEDBACK_MAX_AUTHORED_TEXT_LENGTH, ARTIFACT_FEEDBACK_MAX_COMMENT_LENGTH, ARTIFACT_FEEDBACK_MAX_SERIALIZED_BYTES, ARTIFACT_FEEDBACK_MAX_SUMMARY_LENGTH, ArtifactElementAnchorSchema, ArtifactElementKindSchema, ArtifactElementTargetSchema, ArtifactFeedbackAnnotationSchema, ArtifactFeedbackCommandSchema, ArtifactFeedbackRefSchema, ArtifactSemanticContextSchema, ArtifactSemanticSnapshotSchema, ArtifactSemanticStateSchema, } from "./artifact-feedback.js";
3
3
  export { CompleteDesktopEntryContinuationBodySchema, CompleteDesktopEntryContinuationResponseSchema, CreateDesktopEntryContinuationResponseSchema, DESKTOP_ENTRY_COMPLETION_TOKEN_LENGTH, DESKTOP_ENTRY_PAYLOAD_KEY_LENGTH, DESKTOP_ENTRY_SEALED_IV_LENGTH, DesktopEntryCompletionTokenSchema, DesktopEntryContinuationPendingProjectionSchema, DesktopEntryContinuationReadyProjectionSchema, DesktopEntryPayloadKeySchema, GetDesktopEntryContinuationResponseSchema, MAX_DESKTOP_ENTRY_SEALED_CIPHERTEXT_LENGTH, SealedDesktopEntryPayloadSchema, } from "./desktop-entry-continuations.js";
4
+ export { LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MAX_LENGTH, LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MIN_LENGTH, RegisterLocalConsoleAccountHandoffBodySchema, RegisterLocalConsoleAccountHandoffResponseSchema, } from "./local-console-account-handoffs.js";
5
+ export { FEISHU_H5_AUTHORIZATION_CODE_MAX_LENGTH, FEISHU_H5_REQUIRED_USER_SCOPE, FEISHU_PLATFORM_STATE_LENGTH, FeishuPlatformSessionBootstrapBodySchema, FeishuPlatformSessionBootstrapResponseSchema, FeishuPlatformSessionExchangeBodySchema, FeishuPlatformSessionProjectionSchema, FeishuPlatformStateSchema, } from "./platform-sessions.js";
4
6
  export { ApiErrorCodeSchema, ApiErrorResponseSchema, CommandDispositionBaseSchema, CursorPageRequestSchema, DEFAULT_SSE_REPLAY_WINDOW_POLICY, InterruptedCommandDispositionSchema, QueryInvalidationHintSchema, RelayInvalidationHintSchema, RelaySseEventTypeSchema, SseReplayWindowPolicySchema, WorkspaceSseEventTypeSchema, commandEnvelopeSchema, commandResponseSchema, commandResponseWithResultSchema, cursorPageSchema, relaySseEventSchema, timelineWindowSchema, workspaceSseEventSchema, } from "./primitives.js";
5
7
  export { GetProviderModelsResponseSchema, MAX_PROVIDER_MODEL_NAME_LENGTH, ProviderConfigInvalidReasonCodeSchema, ProviderConfigProjectionSchema, ProviderModelDiscoveryUnavailableReasonSchema, ProviderModelNameSchema, ProviderModelValidationFailureReasonSchema, ProviderUnavailableReasonCodeSchema, ProjectProviderUnavailableReasonSchema, UpdateProviderDefaultModelBodySchema, UpdateProviderDefaultModelDispositionSchema, UpdateProviderDefaultModelPayloadSchema, UpdateProviderDefaultModelResponseSchema, } from "./provider-config.js";
6
8
  export { ProviderUsageBreakdownProjectionSchema, ProviderUsageCategorySchema, ProviderUsageModelSummaryProjectionSchema, ProviderUsageProjectionSchema, ProviderUsageSourceSummaryProjectionSchema, } from "./provider-usage.js";
@@ -0,0 +1,13 @@
1
+ import type { Static } from "@sinclair/typebox";
2
+ export declare const LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MIN_LENGTH = 32;
3
+ export declare const LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MAX_LENGTH = 128;
4
+ export declare const RegisterLocalConsoleAccountHandoffBodySchema: import("@sinclair/typebox").TObject<{
5
+ handoff_token: import("@sinclair/typebox").TString;
6
+ }>;
7
+ export declare const RegisterLocalConsoleAccountHandoffResponseSchema: import("@sinclair/typebox").TObject<{
8
+ expires_at: import("@sinclair/typebox").TString;
9
+ visibility: import("@sinclair/typebox").TLiteral<"hash_only">;
10
+ }>;
11
+ export type RegisterLocalConsoleAccountHandoffBody = Static<typeof RegisterLocalConsoleAccountHandoffBodySchema>;
12
+ export type RegisterLocalConsoleAccountHandoffResponse = Static<typeof RegisterLocalConsoleAccountHandoffResponseSchema>;
13
+ //# sourceMappingURL=local-console-account-handoffs.d.ts.map
@@ -0,0 +1,16 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { IsoDateTimeStringSchema } from "../domain/index.js";
3
+ export const LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MIN_LENGTH = 32;
4
+ export const LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MAX_LENGTH = 128;
5
+ export const RegisterLocalConsoleAccountHandoffBodySchema = Type.Object({
6
+ handoff_token: Type.String({
7
+ minLength: LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MIN_LENGTH,
8
+ maxLength: LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MAX_LENGTH,
9
+ pattern: "^[A-Za-z0-9_-]+$",
10
+ }),
11
+ }, { additionalProperties: false });
12
+ export const RegisterLocalConsoleAccountHandoffResponseSchema = Type.Object({
13
+ expires_at: IsoDateTimeStringSchema,
14
+ visibility: Type.Literal("hash_only"),
15
+ }, { additionalProperties: false });
16
+ //# sourceMappingURL=local-console-account-handoffs.js.map
@@ -0,0 +1,43 @@
1
+ import type { Static } from "@sinclair/typebox";
2
+ export declare const FEISHU_H5_AUTHORIZATION_CODE_MAX_LENGTH = 2048;
3
+ export declare const FEISHU_H5_REQUIRED_USER_SCOPE = "im:chat.members:read";
4
+ export declare const FEISHU_PLATFORM_STATE_LENGTH = 43;
5
+ export declare const FeishuPlatformStateSchema: import("@sinclair/typebox").TString;
6
+ export declare const FeishuPlatformSessionBootstrapBodySchema: import("@sinclair/typebox").TObject<{
7
+ relay_project_ref: import("@sinclair/typebox").TString;
8
+ }>;
9
+ export declare const FeishuPlatformSessionBootstrapResponseSchema: import("@sinclair/typebox").TObject<{
10
+ platform: import("@sinclair/typebox").TLiteral<"feishu">;
11
+ app_id: import("@sinclair/typebox").TString;
12
+ state: import("@sinclair/typebox").TString;
13
+ expires_at: import("@sinclair/typebox").TString;
14
+ }>;
15
+ export declare const FeishuPlatformSessionExchangeBodySchema: import("@sinclair/typebox").TObject<{
16
+ relay_project_ref: import("@sinclair/typebox").TString;
17
+ state: import("@sinclair/typebox").TString;
18
+ authorization_code: import("@sinclair/typebox").TString;
19
+ }>;
20
+ export declare const FeishuPlatformSessionProjectionSchema: import("@sinclair/typebox").TObject<{
21
+ platform: import("@sinclair/typebox").TLiteral<"feishu">;
22
+ project: import("@sinclair/typebox").TObject<{
23
+ relay_project_ref: import("@sinclair/typebox").TString;
24
+ display_name: import("@sinclair/typebox").TString;
25
+ }>;
26
+ account: import("@sinclair/typebox").TObject<{
27
+ account_ref: import("@sinclair/typebox").TString;
28
+ display_name: import("@sinclair/typebox").TString;
29
+ }>;
30
+ membership: import("@sinclair/typebox").TObject<{
31
+ label: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"member">]>;
32
+ }>;
33
+ session: import("@sinclair/typebox").TObject<{
34
+ platform_session_ref: import("@sinclair/typebox").TString;
35
+ expires_at: import("@sinclair/typebox").TString;
36
+ transport: import("@sinclair/typebox").TLiteral<"http_only_cookie">;
37
+ }>;
38
+ }>;
39
+ export type FeishuPlatformSessionBootstrapBody = Static<typeof FeishuPlatformSessionBootstrapBodySchema>;
40
+ export type FeishuPlatformSessionBootstrapResponse = Static<typeof FeishuPlatformSessionBootstrapResponseSchema>;
41
+ export type FeishuPlatformSessionExchangeBody = Static<typeof FeishuPlatformSessionExchangeBodySchema>;
42
+ export type FeishuPlatformSessionProjection = Static<typeof FeishuPlatformSessionProjectionSchema>;
43
+ //# sourceMappingURL=platform-sessions.d.ts.map
@@ -0,0 +1,44 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { IsoDateTimeStringSchema, RelayAccountRefSchema, RelayPlatformSessionRefSchema, RelayProjectRefSchema, } from "../domain/index.js";
3
+ export const FEISHU_H5_AUTHORIZATION_CODE_MAX_LENGTH = 2_048;
4
+ export const FEISHU_H5_REQUIRED_USER_SCOPE = "im:chat.members:read";
5
+ export const FEISHU_PLATFORM_STATE_LENGTH = 43;
6
+ export const FeishuPlatformStateSchema = Type.String({
7
+ minLength: FEISHU_PLATFORM_STATE_LENGTH,
8
+ maxLength: FEISHU_PLATFORM_STATE_LENGTH,
9
+ pattern: "^[A-Za-z0-9_-]+$",
10
+ });
11
+ export const FeishuPlatformSessionBootstrapBodySchema = Type.Object({ relay_project_ref: RelayProjectRefSchema }, { additionalProperties: false });
12
+ export const FeishuPlatformSessionBootstrapResponseSchema = Type.Object({
13
+ platform: Type.Literal("feishu"),
14
+ app_id: Type.String({ minLength: 1, maxLength: 128, pattern: "^cli_[A-Za-z0-9]+$" }),
15
+ state: FeishuPlatformStateSchema,
16
+ expires_at: IsoDateTimeStringSchema,
17
+ }, { additionalProperties: false });
18
+ export const FeishuPlatformSessionExchangeBodySchema = Type.Object({
19
+ relay_project_ref: RelayProjectRefSchema,
20
+ state: FeishuPlatformStateSchema,
21
+ authorization_code: Type.String({
22
+ minLength: 1,
23
+ maxLength: FEISHU_H5_AUTHORIZATION_CODE_MAX_LENGTH,
24
+ pattern: "^[^\\u0000-\\u001f\\u007f]+$",
25
+ }),
26
+ }, { additionalProperties: false });
27
+ export const FeishuPlatformSessionProjectionSchema = Type.Object({
28
+ platform: Type.Literal("feishu"),
29
+ project: Type.Object({
30
+ relay_project_ref: RelayProjectRefSchema,
31
+ display_name: Type.String({ minLength: 1, maxLength: 256 }),
32
+ }, { additionalProperties: false }),
33
+ account: Type.Object({
34
+ account_ref: RelayAccountRefSchema,
35
+ display_name: Type.String({ minLength: 1, maxLength: 256 }),
36
+ }, { additionalProperties: false }),
37
+ membership: Type.Object({ label: Type.Union([Type.Literal("owner"), Type.Literal("member")]) }, { additionalProperties: false }),
38
+ session: Type.Object({
39
+ platform_session_ref: RelayPlatformSessionRefSchema,
40
+ expires_at: IsoDateTimeStringSchema,
41
+ transport: Type.Literal("http_only_cookie"),
42
+ }, { additionalProperties: false }),
43
+ }, { additionalProperties: false });
44
+ //# sourceMappingURL=platform-sessions.js.map
@@ -3,6 +3,11 @@ import type { IdPrefix } from "../../ids/index.js";
3
3
  export declare function prefixedIdSchema(prefix: IdPrefix, description?: string): TString;
4
4
  export declare const IsoDateTimeStringSchema: TString;
5
5
  export declare const CursorSchema: TString;
6
+ export declare const ProjectSurfaceSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"standalone">, import("@sinclair/typebox").TLiteral<"feishu">]>;
7
+ export declare const ProjectSurfaceProfileSchema: import("@sinclair/typebox").TObject<{
8
+ kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"standalone">, import("@sinclair/typebox").TLiteral<"feishu">]>;
9
+ version: import("@sinclair/typebox").TLiteral<1>;
10
+ }>;
6
11
  export declare const ProjectIdSchema: TString;
7
12
  export declare const MessageIdSchema: TString;
8
13
  export declare const TaskModuleIdSchema: TString;
@@ -22,6 +27,8 @@ export declare const RelayAccountRefSchema: TString;
22
27
  export declare const RelayMembershipRefSchema: TString;
23
28
  export declare const RelayAccountSessionRefSchema: TString;
24
29
  export declare const RelayClientSessionIdSchema: TString;
30
+ export declare const RelayPlatformSessionBootstrapRefSchema: TString;
31
+ export declare const RelayPlatformSessionRefSchema: TString;
25
32
  export declare const RelayUploadRefSchema: TString;
26
33
  export declare const RelayAuthChallengeRefSchema: TString;
27
34
  export declare const RelayDesktopEntryContinuationRefSchema: TString;
@@ -14,6 +14,14 @@ export const IsoDateTimeStringSchema = Type.String({
14
14
  description: "ISO 8601 date-time string",
15
15
  });
16
16
  export const CursorSchema = Type.String({ minLength: 1 });
17
+ export const ProjectSurfaceSchema = Type.Union([
18
+ Type.Literal("standalone"),
19
+ Type.Literal("feishu"),
20
+ ]);
21
+ export const ProjectSurfaceProfileSchema = Type.Object({
22
+ kind: ProjectSurfaceSchema,
23
+ version: Type.Literal(1),
24
+ }, { additionalProperties: false });
17
25
  export const ProjectIdSchema = prefixedIdSchema(ID_PREFIXES.project, "ProjectId");
18
26
  export const MessageIdSchema = prefixedIdSchema(ID_PREFIXES.message, "MessageId");
19
27
  export const TaskModuleIdSchema = prefixedIdSchema(ID_PREFIXES.taskModule, "TaskModuleId");
@@ -33,6 +41,8 @@ export const RelayAccountRefSchema = prefixedIdSchema(ID_PREFIXES.relayAccount,
33
41
  export const RelayMembershipRefSchema = prefixedIdSchema(ID_PREFIXES.relayMembership, "RelayMembershipRef");
34
42
  export const RelayAccountSessionRefSchema = prefixedIdSchema(ID_PREFIXES.relayAccountSession, "RelayAccountSessionRef");
35
43
  export const RelayClientSessionIdSchema = prefixedIdSchema(ID_PREFIXES.relayClientSession, "RelayClientSessionId");
44
+ export const RelayPlatformSessionBootstrapRefSchema = prefixedIdSchema(ID_PREFIXES.relayPlatformSessionBootstrap, "RelayPlatformSessionBootstrapRef");
45
+ export const RelayPlatformSessionRefSchema = prefixedIdSchema(ID_PREFIXES.relayPlatformSession, "RelayPlatformSessionRef");
36
46
  export const RelayUploadRefSchema = prefixedIdSchema(ID_PREFIXES.relayUpload, "RelayUploadRef");
37
47
  export const RelayAuthChallengeRefSchema = prefixedIdSchema(ID_PREFIXES.relayAuthChallenge, "RelayAuthChallengeRef");
38
48
  export const RelayDesktopEntryContinuationRefSchema = prefixedIdSchema(ID_PREFIXES.relayDesktopEntryContinuation, "RelayDesktopEntryContinuationRef");
@@ -36,11 +36,40 @@ export declare const RelaySessionContextSchema: import("@sinclair/typebox").TObj
36
36
  client_session_id: import("@sinclair/typebox").TString;
37
37
  client_session_created_at: import("@sinclair/typebox").TString;
38
38
  }>;
39
+ export declare const FeishuPlatformSessionContextSchema: import("@sinclair/typebox").TObject<{
40
+ platform_session_ref: import("@sinclair/typebox").TString;
41
+ account_ref: import("@sinclair/typebox").TString;
42
+ display_name: import("@sinclair/typebox").TString;
43
+ avatar: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
44
+ kind: import("@sinclair/typebox").TLiteral<"initials">;
45
+ initials: import("@sinclair/typebox").TString;
46
+ color: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"green" | "blue" | "yellow" | "neutral">[]>;
47
+ }>, import("@sinclair/typebox").TObject<{
48
+ kind: import("@sinclair/typebox").TLiteral<"image">;
49
+ image_url: import("@sinclair/typebox").TString;
50
+ initials: import("@sinclair/typebox").TString;
51
+ color: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"green" | "blue" | "yellow" | "neutral">[]>;
52
+ }>]>;
53
+ membership: import("@sinclair/typebox").TObject<{
54
+ label: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"member">]>;
55
+ relay_project_ref: import("@sinclair/typebox").TString;
56
+ joined_at: import("@sinclair/typebox").TString;
57
+ }>;
58
+ binding_ref: import("@sinclair/typebox").TString;
59
+ installation_ref: import("@sinclair/typebox").TString;
60
+ external_subject_ref: import("@sinclair/typebox").TString;
61
+ platform_session_created_at: import("@sinclair/typebox").TString;
62
+ platform_session_expires_at: import("@sinclair/typebox").TString;
63
+ }>;
39
64
  export type CommandIdempotencyStatus = Static<typeof CommandIdempotencyStatusSchema>;
40
65
  export type InterruptedCommandDisposition = Static<typeof InterruptedCommandDispositionSchema>;
41
66
  export type AccountAvatarColor = Static<typeof AccountAvatarColorSchema>;
42
67
  export type AccountAvatarProjection = Static<typeof AccountAvatarProjectionSchema>;
43
68
  export type RelaySessionContext = Static<typeof RelaySessionContextSchema>;
69
+ export type FeishuPlatformSessionContext = Static<typeof FeishuPlatformSessionContextSchema>;
44
70
  export declare function isRelaySessionContext(value: unknown): value is RelaySessionContext;
45
71
  export declare function parseRelaySessionContext(value: unknown): RelaySessionContext | null;
72
+ export declare function isFeishuPlatformSessionContext(value: unknown): value is FeishuPlatformSessionContext;
73
+ export declare function parseFeishuPlatformSessionContext(value: unknown): FeishuPlatformSessionContext | null;
74
+ export * from "./platform-integration.js";
46
75
  //# sourceMappingURL=index.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import { Type } from "@sinclair/typebox";
2
2
  import { Value } from "@sinclair/typebox/value";
3
3
  import { ACCOUNT_AVATAR_COLORS } from "../../domain/index.js";
4
- import { IsoDateTimeStringSchema, RelayAccountRefSchema, RelayClientSessionIdSchema, RelayProjectRefSchema, } from "../domain/index.js";
4
+ import { IsoDateTimeStringSchema, RelayAccountRefSchema, RelayClientSessionIdSchema, RelayPlatformSessionRefSchema, RelayProjectRefSchema, } from "../domain/index.js";
5
5
  export const CommandIdempotencyStatusSchema = Type.Union([
6
6
  Type.Literal("in_progress"),
7
7
  Type.Literal("completed"),
@@ -37,10 +37,33 @@ export const RelaySessionContextSchema = Type.Object({
37
37
  client_session_id: RelayClientSessionIdSchema,
38
38
  client_session_created_at: IsoDateTimeStringSchema,
39
39
  }, { additionalProperties: false });
40
+ export const FeishuPlatformSessionContextSchema = Type.Object({
41
+ platform_session_ref: RelayPlatformSessionRefSchema,
42
+ account_ref: RelayAccountRefSchema,
43
+ display_name: Type.String({ minLength: 1 }),
44
+ avatar: AccountAvatarProjectionSchema,
45
+ membership: Type.Object({
46
+ label: Type.Union([Type.Literal("owner"), Type.Literal("member")]),
47
+ relay_project_ref: RelayProjectRefSchema,
48
+ joined_at: IsoDateTimeStringSchema,
49
+ }, { additionalProperties: false }),
50
+ binding_ref: Type.String({ minLength: 1, maxLength: 512 }),
51
+ installation_ref: Type.String({ minLength: 1, maxLength: 512 }),
52
+ external_subject_ref: Type.String({ minLength: 1, maxLength: 512 }),
53
+ platform_session_created_at: IsoDateTimeStringSchema,
54
+ platform_session_expires_at: IsoDateTimeStringSchema,
55
+ }, { additionalProperties: false });
40
56
  export function isRelaySessionContext(value) {
41
57
  return Value.Check(RelaySessionContextSchema, value);
42
58
  }
43
59
  export function parseRelaySessionContext(value) {
44
60
  return isRelaySessionContext(value) ? value : null;
45
61
  }
62
+ export function isFeishuPlatformSessionContext(value) {
63
+ return Value.Check(FeishuPlatformSessionContextSchema, value);
64
+ }
65
+ export function parseFeishuPlatformSessionContext(value) {
66
+ return isFeishuPlatformSessionContext(value) ? value : null;
67
+ }
68
+ export * from "./platform-integration.js";
46
69
  //# sourceMappingURL=index.js.map