@opengeni/sdk 0.28.2 → 0.32.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/types.ts CHANGED
@@ -229,6 +229,7 @@ export type ViewerHeartbeatRequest = { leaseEpoch: number };
229
229
  export type ViewerHeartbeatResponse = { alive: boolean };
230
230
 
231
231
  export type ReasoningEffort = "none" | "minimal" | "low" | "medium" | "high" | "xhigh";
232
+ export type LatencyMode = "standard" | "priority" | "fast";
232
233
  export type GitCredentialProvider = "github" | "gitlab" | "azure_devops";
233
234
  export type GitCredentialBindingId = string;
234
235
  export type GitRepositoryAccess = "read" | "write";
@@ -272,7 +273,7 @@ export type ToolRef = {
272
273
  };
273
274
 
274
275
  export type SessionToolPolicy = {
275
- mode: "workspace_default" | "explicit" | "inherited" | "legacy";
276
+ mode: "workspace_default" | "explicit" | "inherited";
276
277
  inheritedFromSessionId: string | null;
277
278
  };
278
279
 
@@ -282,9 +283,9 @@ export type UpdateSessionToolPolicyRequest =
282
283
  expectedVersion: number;
283
284
  }
284
285
  | {
285
- /** Omitted for compatibility with the original explicit-only API. */
286
- mode?: "explicit" | undefined;
286
+ mode: "explicit";
287
287
  tools: ToolRef[];
288
+ firstPartyMcpTools: FirstPartyMcpToolName[];
288
289
  expectedVersion: number;
289
290
  };
290
291
 
@@ -418,6 +419,71 @@ export type OpenGeniSlackBotInstallStart = {
418
419
  expiresAt: string;
419
420
  };
420
421
 
422
+ export type GoogleDriveTargetScope = "user" | "workspace" | "organization";
423
+ export type GoogleDriveSyncCadence = "manual" | "hourly" | "daily";
424
+ export type GoogleDriveReadPolicy = "allow" | "ask" | "block";
425
+
426
+ export type GoogleDriveSelectedSource = {
427
+ id: string;
428
+ name: string;
429
+ mimeType: string;
430
+ driveId: string | null;
431
+ targetScope: GoogleDriveTargetScope;
432
+ syncCadence: GoogleDriveSyncCadence;
433
+ readPolicy: GoogleDriveReadPolicy;
434
+ selectedAt: string;
435
+ };
436
+
437
+ export type GoogleDriveConnectionMetadata = {
438
+ credentialRole: "google_drive_metadata";
439
+ credentialLabel: "Google Drive metadata browser";
440
+ googlePermissionId: string;
441
+ googleEmail: string;
442
+ googleDisplayName: string | null;
443
+ verifiedAt: string;
444
+ accessMode: "metadata_readonly" | "readonly";
445
+ selectedSources?: GoogleDriveSelectedSource[] | undefined;
446
+ /** @deprecated Read selectedSources; retained while existing connections migrate. */
447
+ selectedSource?: GoogleDriveSelectedSource | null | undefined;
448
+ [key: string]: unknown;
449
+ };
450
+
451
+ export type GoogleDriveOAuthStartRequest = {
452
+ connectionId?: string | undefined;
453
+ };
454
+
455
+ export type GoogleDriveOAuthStartResponse = {
456
+ authorizationUrl: string;
457
+ expiresAt: string;
458
+ };
459
+
460
+ export type GoogleDriveBrowseItem = {
461
+ id: string;
462
+ name: string;
463
+ mimeType: string;
464
+ kind: "folder" | "file";
465
+ driveId: string | null;
466
+ modifiedTime: string | null;
467
+ size: string | null;
468
+ webViewLink: string | null;
469
+ };
470
+
471
+ export type GoogleDriveBrowseResponse = {
472
+ connection: ConnectionMetadata;
473
+ parentId: string;
474
+ current: GoogleDriveBrowseItem | null;
475
+ items: GoogleDriveBrowseItem[];
476
+ nextPageToken: string | null;
477
+ incompleteSearch: boolean;
478
+ };
479
+
480
+ export type SaveGoogleDriveSourceRequest = {
481
+ sources: Array<Pick<GoogleDriveBrowseItem, "id" | "name" | "mimeType" | "driveId">>;
482
+ targetScope: GoogleDriveTargetScope;
483
+ syncCadence: GoogleDriveSyncCadence;
484
+ readPolicy: GoogleDriveReadPolicy;
485
+ };
486
+
421
487
  export type UpdateConnectionRequest = {
422
488
  providerDomain?: string | undefined;
423
489
  subjectId?: string | null | undefined;
@@ -496,8 +562,8 @@ export type Session = {
496
562
  resources: ResourceRef[];
497
563
  skills: SessionSkill[];
498
564
  tools: ToolRef[];
499
- toolPolicy?: SessionToolPolicy | undefined;
500
- toolPolicyVersion?: number | undefined;
565
+ toolPolicy: SessionToolPolicy;
566
+ toolPolicyVersion: number;
501
567
  effectiveToolPolicy?: SessionEffectiveToolPolicy | undefined;
502
568
  metadata: Record<string, unknown>;
503
569
  /** Frozen creator fact; later turns carry their own independent initiator. */
@@ -517,7 +583,7 @@ export type Session = {
517
583
  rigId: string | null;
518
584
  rigVersionId: string | null;
519
585
  firstPartyMcpPermissions: string[] | null;
520
- firstPartyMcpTools: FirstPartyMcpToolName[] | null;
586
+ firstPartyMcpTools: FirstPartyMcpToolName[];
521
587
  mcpServers: SessionMcpServerMetadata[];
522
588
  parentSessionId: string | null;
523
589
  /** Immutable server-authored nested-agent lineage and policy snapshot. */
@@ -539,6 +605,11 @@ export type Session = {
539
605
  codexPinnedCredentialId?: string | null;
540
606
  /** Multi-account Codex (P1): the account the most recent turn ran on (the "Running on:" indicator). */
541
607
  codexLastCredentialId?: string | null;
608
+ /**
609
+ * Frozen at create. `remote_v2` ⇒ Codex remote compaction + Codex-only model
610
+ * admission; `portable` ⇒ plaintext compaction and free provider switching.
611
+ */
612
+ codexCompactionMode: "remote_v2" | "portable";
542
613
  /** Personal (authenticated subject) workspace pin state, never workspace-global. */
543
614
  pinned?: boolean;
544
615
  /** Stable pin ordering key; null when this subject has not pinned the session. */
@@ -630,6 +701,7 @@ export type SessionTurn = {
630
701
  toolsProvided?: boolean | undefined;
631
702
  model: string;
632
703
  reasoningEffort: ReasoningEffort;
704
+ latencyMode: LatencyMode;
633
705
  sandboxBackend: SandboxBackend;
634
706
  sandboxOs: SandboxOs | null;
635
707
  metadata: Record<string, unknown>;
@@ -716,6 +788,7 @@ export const SESSION_EVENT_TYPES = [
716
788
  "session.requiresAction",
717
789
  "session.humanInput.requested",
718
790
  "session.context.compaction.requested",
791
+ "session.context.compaction.started",
719
792
  "session.context.compacted",
720
793
  "session.context.compaction.skipped",
721
794
  "session.context.cleared",
@@ -1574,6 +1647,7 @@ export type CreateSessionRequest = {
1574
1647
  metadata?: Record<string, unknown> | undefined;
1575
1648
  model?: string | undefined;
1576
1649
  reasoningEffort?: ReasoningEffort | undefined;
1650
+ latencyMode?: LatencyMode | undefined;
1577
1651
  sandboxBackend?: SandboxBackend | undefined;
1578
1652
  // The enrolled machine (a sandbox id) to run this session on; seeds the
1579
1653
  // active-sandbox pointer at creation so the first turn lands on it.
@@ -1673,6 +1747,8 @@ export type FirstPartyMcpToolName =
1673
1747
  | "memory_search"
1674
1748
  | "memory_save"
1675
1749
  | "memory_correct"
1750
+ | "preference_registry_summary"
1751
+ | "preference_registry_get"
1676
1752
  | "sandboxes_list"
1677
1753
  | "sandbox_attach"
1678
1754
  | "sandbox_swap"
@@ -1713,8 +1789,13 @@ export type FirstPartyMcpToolName =
1713
1789
  | "scheduled_task_runs_list"
1714
1790
  | "slack_bot_list_channels"
1715
1791
  | "slack_bot_channel_history"
1792
+ | "slack_bot_thread_replies"
1716
1793
  | "slack_bot_list_users"
1717
- | "slack_bot_post_message";
1794
+ | "slack_bot_list_files"
1795
+ | "slack_bot_file_info"
1796
+ | "slack_bot_file_content"
1797
+ | "slack_bot_post_message"
1798
+ | "slack_bot_delete_message";
1718
1799
 
1719
1800
  export type ProductAccessMode = "local" | "configured" | "managed";
1720
1801
 
@@ -2102,6 +2183,8 @@ export type ClientConfig = {
2102
2183
  allowedReasoningEfforts: ReasoningEffort[];
2103
2184
  mcpServers: { id: string; name: string }[];
2104
2185
  fileUploads: { enabled: boolean; maxSizeBytes: number };
2186
+ /** Native browser microphone capture + server-side transcription capability. */
2187
+ voiceInput?: ClientVoiceInputConfig | undefined;
2105
2188
  productAccessMode: ProductAccessMode;
2106
2189
  auth: ClientAuthConfig;
2107
2190
  // Server-wide hint: does this deployment support Channel-A structured services
@@ -2115,8 +2198,29 @@ export type ClientConfig = {
2115
2198
  };
2116
2199
  };
2117
2200
 
2201
+ /** Client-safe voice-input capability projection. */
2202
+ export type ClientVoiceInputConfig = {
2203
+ available: boolean;
2204
+ maxDurationSeconds: number;
2205
+ maxSizeBytes: number;
2206
+ acceptedMimeTypes: string[];
2207
+ };
2208
+
2209
+ /** Response from POST /v1/workspaces/:workspaceId/transcriptions. */
2210
+ export type TranscribeAudioResponse = {
2211
+ text: string;
2212
+ languages: string[];
2213
+ };
2214
+
2118
2215
  export type AccountRole = "owner" | "admin" | "member";
2119
2216
 
2217
+ export type AccessPrincipalKind =
2218
+ | "human_session"
2219
+ | "agent_attempt"
2220
+ | "service"
2221
+ | "api_key"
2222
+ | "configured_key";
2223
+
2120
2224
  export type AccountGrant = {
2121
2225
  accountId: string;
2122
2226
  subjectId: string;
@@ -2132,6 +2236,7 @@ export type AccessGrant = {
2132
2236
  subjectId: string;
2133
2237
  subjectLabel?: string | undefined;
2134
2238
  permissions: Permission[];
2239
+ principalKind?: AccessPrincipalKind | undefined;
2135
2240
  metadata?: Record<string, unknown> | undefined;
2136
2241
  serviceInitiator?: ServiceTurnInitiator | undefined;
2137
2242
  serviceInitiatorContext?: ServiceTurnInitiatorContext | undefined;
@@ -2170,15 +2275,24 @@ export type Workspace = {
2170
2275
 
2171
2276
  export type WorkspaceSettings = {
2172
2277
  memoryEnabled?: boolean | undefined;
2278
+ voiceInput?: WorkspaceVoiceInputSettings | undefined;
2173
2279
  transcription?: WorkspaceTranscriptionPolicy | undefined;
2174
2280
  maxNestedAgentDepth?: number | null | undefined;
2281
+ /** Default for new Codex sessions; absent ⇒ remote_v2. */
2282
+ codexCompactionDefault?: "remote_v2" | "portable" | undefined;
2175
2283
  [key: string]: unknown;
2176
2284
  };
2177
2285
 
2286
+ export type WorkspaceVoiceInputSettings = {
2287
+ enabled: boolean;
2288
+ };
2289
+
2178
2290
  export type UpdateWorkspaceSettingsRequest = {
2179
2291
  memoryEnabled?: boolean | undefined;
2292
+ voiceInput?: WorkspaceVoiceInputSettings | undefined;
2180
2293
  transcription?: WorkspaceTranscriptionPolicy | undefined;
2181
2294
  maxNestedAgentDepth?: number | null | undefined;
2295
+ codexCompactionDefault?: "remote_v2" | "portable" | undefined;
2182
2296
  [key: string]: unknown;
2183
2297
  };
2184
2298
 
@@ -2389,11 +2503,9 @@ export type ComposerDraft = {
2389
2503
  revision: number;
2390
2504
  text: string;
2391
2505
  resources: ResourceRef[];
2392
- tools: ToolRef[];
2393
- /** False inherits the session policy; true preserves an explicit array. */
2394
- toolsProvided: boolean;
2395
2506
  model: string;
2396
2507
  reasoningEffort: ReasoningEffort;
2508
+ latencyMode?: LatencyMode | undefined;
2397
2509
  sourceTurnId: string | null;
2398
2510
  sourceTurnVersion: number | null;
2399
2511
  updatedAt: string | null;
@@ -2407,6 +2519,7 @@ export type NewSessionDraftOptions = {
2407
2519
  rigId?: string | undefined;
2408
2520
  goal?: GoalSpec | undefined;
2409
2521
  firstPartyMcpPermissions?: Permission[] | undefined;
2522
+ firstPartyMcpTools?: FirstPartyMcpToolName[] | undefined;
2410
2523
  };
2411
2524
 
2412
2525
  export type NewSessionDraft = {
@@ -2418,6 +2531,7 @@ export type NewSessionDraft = {
2418
2531
  toolsProvided: boolean;
2419
2532
  model: string;
2420
2533
  reasoningEffort: ReasoningEffort;
2534
+ latencyMode?: LatencyMode | undefined;
2421
2535
  options: NewSessionDraftOptions;
2422
2536
  updatedAt: string | null;
2423
2537
  };
@@ -3478,6 +3592,8 @@ export type GitHubRepositoryScope = "all" | "selected";
3478
3592
 
3479
3593
  export type GitHubBindingStatus = "disabled" | "unbound" | "bound";
3480
3594
 
3595
+ export type GitHubAppSetupMode = "platform" | "operator";
3596
+
3481
3597
  export type GitHubInstallationLifecycle = "active" | "suspended" | "deleted" | "unverified";
3482
3598
 
3483
3599
  export type GitHubInstallationBinding = {
@@ -3488,6 +3604,8 @@ export type GitHubInstallationBinding = {
3488
3604
  lifecycle: GitHubInstallationLifecycle;
3489
3605
  repositoryScope: GitHubRepositoryScope;
3490
3606
  repositoryCount: number;
3607
+ /** OpenGeni-owned entry point for changing the installation's repository allowlist. */
3608
+ configureUrl: string | null;
3491
3609
  createdAt: string;
3492
3610
  updatedAt: string;
3493
3611
  };
@@ -3496,12 +3614,14 @@ export type GitHubAppInfo = {
3496
3614
  configured: boolean;
3497
3615
  /** Truthful workspace binding state; server App credentials alone are not a binding. */
3498
3616
  status: GitHubBindingStatus;
3617
+ /** Platform deployments expose installation only; operator deployments may create an App. */
3618
+ setupMode: GitHubAppSetupMode;
3499
3619
  appId: string | null;
3500
3620
  clientId: string | null;
3501
3621
  appSlug: string | null;
3502
- /** Fresh GitHub-controlled installation/configuration consent entry point. */
3622
+ /** Fresh OAuth-first existing-installation discovery and install entry point. */
3503
3623
  installUrl: string | null;
3504
- /** Compatibility alias for installUrl; no repository-admin chooser is exposed. */
3624
+ /** Compatibility alias for installUrl. */
3505
3625
  linkUrl: string | null;
3506
3626
  /** Installation bindings owned independently by this workspace. */
3507
3627
  installations: GitHubInstallationBinding[];
@@ -3590,6 +3710,142 @@ export type BillingUsageResponse = {
3590
3710
  usage: UsageEvent[];
3591
3711
  };
3592
3712
 
3713
+ export type InsightsRange = "today" | "week" | "month" | "ytd";
3714
+
3715
+ export type InsightsBillingPath = "opengeni_credits" | "external";
3716
+
3717
+ export type InsightsModelUsageRow = {
3718
+ id: string;
3719
+ model: string;
3720
+ provider: string;
3721
+ billing: InsightsBillingPath;
3722
+ calls: number;
3723
+ inputTokens: number;
3724
+ outputTokens: number;
3725
+ cachedTokens: number;
3726
+ cacheWriteTokens: number;
3727
+ reasoningTokens: number;
3728
+ creditUsd: number;
3729
+ };
3730
+
3731
+ export type InsightsSeriesPoint = {
3732
+ label: string;
3733
+ modelCostUsd: number;
3734
+ warmSeconds: number;
3735
+ inputTokens: number;
3736
+ cachedTokens: number;
3737
+ cacheHitPct: number;
3738
+ calls: number;
3739
+ };
3740
+
3741
+ export type InsightsDepthBucket = {
3742
+ depth: number;
3743
+ sessions: number;
3744
+ };
3745
+
3746
+ export type InsightsModelFacet = {
3747
+ provider: string;
3748
+ model: string;
3749
+ };
3750
+
3751
+ export type InsightsSpendDriver = {
3752
+ id: string;
3753
+ groupBy: "root_session" | "schedule";
3754
+ label: string;
3755
+ creditUsd: number;
3756
+ tokens: number;
3757
+ cacheHitPct: number;
3758
+ pctOfCreditUsd: number;
3759
+ deltaUsdVsPrior: number;
3760
+ };
3761
+
3762
+ export type InsightsWarmGroupRow = {
3763
+ id: string;
3764
+ groupId: string;
3765
+ label: string;
3766
+ backend: string | null;
3767
+ warmSeconds: number;
3768
+ sessionsAttached: number;
3769
+ };
3770
+
3771
+ export type InsightsLiveWarmLease = {
3772
+ id: string;
3773
+ groupId: string;
3774
+ backend: string;
3775
+ turnHolders: number;
3776
+ viewerHolders: number;
3777
+ warmForLabel: string;
3778
+ warmSeconds: number;
3779
+ };
3780
+
3781
+ export type InsightsFloorSession = {
3782
+ id: string;
3783
+ title: string;
3784
+ state: "running" | "paused" | "failed" | "idle" | "compacting" | "waiting";
3785
+ depth: number;
3786
+ model: string | null;
3787
+ provider: string | null;
3788
+ ageLabel: string;
3789
+ cacheHitPct: number | null;
3790
+ route: string | null;
3791
+ };
3792
+
3793
+ export type InsightsScheduleRow = {
3794
+ id: string;
3795
+ name: string;
3796
+ fires: number;
3797
+ creditUsd: number | null;
3798
+ tokens: number | null;
3799
+ cacheHitPct: number | null;
3800
+ billing: InsightsBillingPath | null;
3801
+ };
3802
+
3803
+ export type WorkspaceInsightsSnapshot = {
3804
+ range: InsightsRange;
3805
+ rangeLabel: string;
3806
+ priorLabel: string;
3807
+ seriesLabel: string;
3808
+ cacheSeriesLabel: string;
3809
+ timezone: "UTC";
3810
+ models: InsightsModelUsageRow[];
3811
+ facets: InsightsModelFacet[];
3812
+ series: InsightsSeriesPoint[];
3813
+ depth: InsightsDepthBucket[];
3814
+ drivers: InsightsSpendDriver[];
3815
+ schedules: InsightsScheduleRow[];
3816
+ warmSeconds: number;
3817
+ priorWarmSeconds: number;
3818
+ warmGroups: InsightsWarmGroupRow[];
3819
+ liveWarm: InsightsLiveWarmLease[];
3820
+ floor: InsightsFloorSession[];
3821
+ selfhostedEnabled: boolean;
3822
+ machinesOnline: number;
3823
+ workspaceCreditUsd: number;
3824
+ priorWorkspaceCreditUsd: number;
3825
+ creditUsd: number;
3826
+ priorCreditUsd: number;
3827
+ priorInputTokens: number;
3828
+ priorCacheHitPct: number;
3829
+ priorCalls: number;
3830
+ goalsActive: number;
3831
+ goalsCompleted: number;
3832
+ sessionsTouched: number;
3833
+ rootSessions: number;
3834
+ deepestDepth: number;
3835
+ deepestSessionTitle: string;
3836
+ avgDepth: number;
3837
+ warmIdleNow: number;
3838
+ billableTokensUsed: number;
3839
+ billableTokenCap: number | null;
3840
+ agentRunsUsed: number;
3841
+ agentRunCap: number | null;
3842
+ modelFilterActive: boolean;
3843
+ };
3844
+
3845
+ export type WorkspaceInsightsResponse = {
3846
+ snapshot: WorkspaceInsightsSnapshot;
3847
+ };
3848
+
3593
3849
  export type BillingEntitlementsResponse = {
3594
3850
  accountId: string;
3595
3851
  mode: EntitlementsMode;
@@ -3616,9 +3872,9 @@ export type UserMessageEventInput = {
3616
3872
  text: string;
3617
3873
  turnInstructions?: string | undefined;
3618
3874
  resources?: ResourceRef[] | undefined;
3619
- tools?: ToolRef[] | undefined;
3620
3875
  model?: string | undefined;
3621
3876
  reasoningEffort?: ReasoningEffort | undefined;
3877
+ latencyMode?: LatencyMode | undefined;
3622
3878
  mcpCredentialUpdates?: SessionMcpCredentialUpdateInput[] | undefined;
3623
3879
  };
3624
3880
  };
@@ -0,0 +1,134 @@
1
+ import type {
2
+ WorkspaceInstructionPolicyKind,
3
+ WorkspaceInstructionPolicyProvenanceSource,
4
+ WorkspaceInstructionPolicyScope,
5
+ } from "./workspace-instruction-policies";
6
+
7
+ export type WorkspaceStateDocumentStatusCounts = {
8
+ queued: number;
9
+ indexing: number;
10
+ ready: number;
11
+ failed: number;
12
+ };
13
+
14
+ export type WorkspaceStateSourceKindCounts = {
15
+ manual_upload: number;
16
+ meeting_transcript: number;
17
+ repository: number;
18
+ email: number;
19
+ chat: number;
20
+ document: number;
21
+ web: number;
22
+ other: number;
23
+ };
24
+
25
+ export type WorkspaceStateMemoryStatusCounts = {
26
+ proposed: number;
27
+ approved: number;
28
+ rejected: number;
29
+ active: number;
30
+ superseded: number;
31
+ archived: number;
32
+ };
33
+
34
+ export type WorkspaceStateMemoryKindCounts = {
35
+ semantic: number;
36
+ episodic: number;
37
+ procedural: number;
38
+ decision: number;
39
+ preference: number;
40
+ };
41
+
42
+ export type WorkspaceStateGapCode =
43
+ | "no_document_bases"
44
+ | "no_visible_documents"
45
+ | "failed_documents"
46
+ | "processing_documents"
47
+ | "missing_topic_coverage"
48
+ | "no_memory_records"
49
+ | "pending_memory_review"
50
+ | "partial_inventory";
51
+
52
+ export type WorkspaceStateResponse = {
53
+ workspaceId: string;
54
+ generatedAt: string;
55
+ truth: {
56
+ current: { source: "read_time_projection"; capturedAt: string };
57
+ policySnapshot: {
58
+ status: "not_captured";
59
+ reason: "workspace_instruction_policy_snapshot_not_implemented";
60
+ };
61
+ };
62
+ policy: {
63
+ authority: "workspace_instruction_policy_heads";
64
+ activeHeads: Array<{
65
+ kind: WorkspaceInstructionPolicyKind;
66
+ scope: WorkspaceInstructionPolicyScope;
67
+ roleKey: string | null;
68
+ revisionId: string;
69
+ revision: number;
70
+ contentHash: string;
71
+ activationVersion: number;
72
+ activatedAt: string;
73
+ }>;
74
+ activeHeadsTruncated: boolean;
75
+ latestRevision: {
76
+ kind: WorkspaceInstructionPolicyKind;
77
+ scope: WorkspaceInstructionPolicyScope;
78
+ roleKey: string | null;
79
+ revisionId: string;
80
+ revision: number;
81
+ contentHash: string;
82
+ provenanceSource: WorkspaceInstructionPolicyProvenanceSource;
83
+ state: "active" | "inactive";
84
+ createdAt: string;
85
+ } | null;
86
+ legacyRuntime: {
87
+ source: "workspace_override" | "deployment_default";
88
+ workspaceOverrideConfigured: boolean;
89
+ };
90
+ runtimeComposition: { status: "not_implemented" };
91
+ };
92
+ knowledge:
93
+ | {
94
+ availability: "unavailable";
95
+ reason: "missing_permission";
96
+ requiredPermission: "documents:search";
97
+ }
98
+ | {
99
+ availability: "available";
100
+ coverage: "complete" | "partial";
101
+ baseCount: number;
102
+ bases: Array<{
103
+ id: string;
104
+ name: string;
105
+ visibleDocumentCount: number;
106
+ statusCounts: WorkspaceStateDocumentStatusCounts;
107
+ latestUpdatedAt: string | null;
108
+ }>;
109
+ basesTruncated: boolean;
110
+ inspectedVisibleDocumentCount: number;
111
+ documentStatusCounts: WorkspaceStateDocumentStatusCounts;
112
+ sourceKindCounts: WorkspaceStateSourceKindCounts;
113
+ topics: Array<{ name: string; documentCount: number }>;
114
+ topicsTruncated: boolean;
115
+ latestDocumentUpdatedAt: string | null;
116
+ memorySample: {
117
+ recordCount: number;
118
+ sampleLimit: 100;
119
+ limitReached: boolean;
120
+ statusCounts: WorkspaceStateMemoryStatusCounts;
121
+ kindCounts: WorkspaceStateMemoryKindCounts;
122
+ preferenceAuthority: {
123
+ kindCountSource: "knowledge_memories_legacy_observations";
124
+ activeAuthority: "structured_preference_registry";
125
+ };
126
+ latestUpdatedAt: string | null;
127
+ };
128
+ gaps: Array<{
129
+ code: WorkspaceStateGapCode;
130
+ severity: "info" | "warning";
131
+ relatedCount: number | null;
132
+ }>;
133
+ };
134
+ };