@parall/sdk 1.33.0 → 1.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/constants.js CHANGED
@@ -10,6 +10,41 @@ export const CLIP_BASE = '/clip/v1';
10
10
  // included for catalog completeness and agent runtime delivery; product UI
11
11
  // should continue to display canonical model IDs/names.
12
12
  export const PLATFORM_MODELS = [
13
+ // Fable 5 rejects an explicit thinking "disabled" param (400) — bridges must
14
+ // omit the thinking config entirely instead of disabling it.
15
+ // "(1M)" variants opt the claude-code runtime into the 1M-token context
16
+ // window via the CLI's [1m] model-name suffix; the server proxy aliases the
17
+ // catalog ID back to the base model upstream.
18
+ {
19
+ id: 'anthropic/claude-fable-5',
20
+ name: 'Claude Fable 5',
21
+ provider: 'anthropic',
22
+ effortLevels: ['low', 'medium', 'high', 'xhigh', 'max'],
23
+ runtime_names: { 'claude-code': 'claude-fable-5' },
24
+ },
25
+ {
26
+ id: 'anthropic/claude-fable-5-1m',
27
+ name: 'Claude Fable 5 (1M)',
28
+ provider: 'anthropic',
29
+ effortLevels: ['low', 'medium', 'high', 'xhigh', 'max'],
30
+ runtime_names: { 'claude-code': 'claude-fable-5[1m]' },
31
+ upstream_id: 'anthropic/claude-fable-5',
32
+ },
33
+ {
34
+ id: 'anthropic/claude-opus-4.8',
35
+ name: 'Claude Opus 4.8',
36
+ provider: 'anthropic',
37
+ effortLevels: ['low', 'medium', 'high', 'xhigh', 'max'],
38
+ runtime_names: { 'claude-code': 'claude-opus-4-8' },
39
+ },
40
+ {
41
+ id: 'anthropic/claude-opus-4.8-1m',
42
+ name: 'Claude Opus 4.8 (1M)',
43
+ provider: 'anthropic',
44
+ effortLevels: ['low', 'medium', 'high', 'xhigh', 'max'],
45
+ runtime_names: { 'claude-code': 'claude-opus-4-8[1m]' },
46
+ upstream_id: 'anthropic/claude-opus-4.8',
47
+ },
13
48
  {
14
49
  id: 'anthropic/claude-opus-4.7',
15
50
  name: 'Claude Opus 4.7',
@@ -31,6 +66,14 @@ export const PLATFORM_MODELS = [
31
66
  effortLevels: ['low', 'medium', 'high', 'max'],
32
67
  runtime_names: { 'claude-code': 'claude-sonnet-4-6' },
33
68
  },
69
+ {
70
+ id: 'anthropic/claude-sonnet-4.6-1m',
71
+ name: 'Claude Sonnet 4.6 (1M)',
72
+ provider: 'anthropic',
73
+ effortLevels: ['low', 'medium', 'high', 'max'],
74
+ runtime_names: { 'claude-code': 'claude-sonnet-4-6[1m]' },
75
+ upstream_id: 'anthropic/claude-sonnet-4.6',
76
+ },
34
77
  {
35
78
  id: 'anthropic/claude-sonnet-4.5',
36
79
  name: 'Claude Sonnet 4.5',
@@ -74,6 +117,12 @@ export const PLATFORM_MODELS = [
74
117
  effortLevels: ['medium', 'high', 'xhigh'],
75
118
  runtime_names: { codex: 'gpt-5.4-pro' },
76
119
  },
120
+ {
121
+ id: 'google/gemini-3.5-flash',
122
+ name: 'Gemini 3.5 Flash',
123
+ provider: 'google',
124
+ effortLevels: [],
125
+ },
77
126
  {
78
127
  id: 'google/gemini-3.1-pro-preview',
79
128
  name: 'Gemini 3.1 Pro Preview',
@@ -238,6 +287,16 @@ export const PLATFORM_DEFAULT_MODEL_BY_RUNTIME = {
238
287
  'claude-code': 'anthropic/claude-sonnet-4.6',
239
288
  codex: 'openai/gpt-5.4',
240
289
  };
290
+ // Mirrors Go llmproxy.IsAllowedModelForRuntime's upstream-alias rule:
291
+ // variants that alias upstream (`upstream_id` set — the "(1M)" entries) encode
292
+ // runtime-specific client behavior and are only selectable by runtimes with an
293
+ // explicit runtime_names mapping. Model pickers must filter with this in
294
+ // addition to provider filtering.
295
+ export function isPlatformModelSelectableForRuntime(model, runtime) {
296
+ if (!model.upstream_id)
297
+ return true;
298
+ return Boolean(runtime && model.runtime_names && runtime in model.runtime_names);
299
+ }
241
300
  export function platformDefaultModelForRuntime(runtime) {
242
301
  switch (runtime?.trim()) {
243
302
  case undefined:
@@ -275,6 +334,7 @@ export const ENDPOINTS = {
275
334
  // Org-scoped
276
335
  ORG: (orgId) => `${API_BASE}/orgs/${orgId}`,
277
336
  ORG_MEMBERS: (orgId) => `${API_BASE}/orgs/${orgId}/members`,
337
+ TEAMS: (orgId) => `${API_BASE}/orgs/${orgId}/teams`,
278
338
  ORG_MEMBERS_ONLINE: (orgId) => `${API_BASE}/orgs/${orgId}/members/online`,
279
339
  ORG_MEMBER: (orgId, userId) => `${API_BASE}/orgs/${orgId}/members/${userId}`,
280
340
  ORG_MEMBER_CHATS: (orgId, memberId) => `${API_BASE}/orgs/${orgId}/members/${memberId}/chats`,
@@ -319,6 +379,7 @@ export const ENDPOINTS = {
319
379
  AGENT: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}`,
320
380
  AGENT_API_KEYS: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/api-keys`,
321
381
  AGENT_API_KEY: (orgId, agentId, key) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/api-keys/${key}`,
382
+ AGENT_API_KEY_REGENERATE: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/api-keys/regenerate`,
322
383
  AGENT_AVATAR: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/avatar`,
323
384
  AGENT_ACTIVITY: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/activity`,
324
385
  AGENT_MONITOR: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/monitor`,
@@ -358,6 +419,7 @@ export const ENDPOINTS = {
358
419
  MACHINE_AGENT_WORKSPACE_SETUP: (orgId, machineId, agentId) => `${API_BASE}/orgs/${orgId}/machines/${machineId}/agents/${agentId}/workspace/setup`,
359
420
  MACHINE_LLM_SOURCE: (orgId, machineId) => `${API_BASE}/orgs/${orgId}/machines/${machineId}/llm-source`,
360
421
  MACHINE_PROVIDER_ENABLED: (orgId, machineId) => `${API_BASE}/orgs/${orgId}/machines/${machineId}/provider-enabled`,
422
+ MACHINE_CAPABILITIES: (orgId, machineId) => `${API_BASE}/orgs/${orgId}/machines/${machineId}/capabilities`,
361
423
  MACHINE_RUNTIME_AUTH: (orgId, machineId) => `${API_BASE}/orgs/${orgId}/machines/${machineId}/runtime-auth`,
362
424
  MACHINE_KEYS: (orgId, machineId) => `${API_BASE}/orgs/${orgId}/machines/${machineId}/keys`,
363
425
  MACHINE_KEY: (orgId, machineId, keyId) => `${API_BASE}/orgs/${orgId}/machines/${machineId}/keys/${keyId}`,
@@ -378,6 +440,12 @@ export const ENDPOINTS = {
378
440
  MACHINES_ME_AGENT_WORKSPACE_STATE: (agentId) => `${API_BASE}/machines/me/agents/${agentId}/workspace-state`,
379
441
  MACHINES_ME_WS_TICKET: `${API_BASE}/machines/me/ws/ticket`,
380
442
  MACHINES_ME_BROWSE_RESPONSE: (requestId) => `${API_BASE}/machines/me/browse-response/${requestId}`,
443
+ // Hosted browser live-viewer control plane (api-server, NOT clip-service):
444
+ // the web client drives WebRTC signaling + tab nav through VIEWER_COMMAND;
445
+ // api-server brokers each command to the host daemon via the machine:{id}
446
+ // request/reply bridge (mirrors filesystem browse), and the daemon replies on
447
+ // VIEWER_RESPONSE. See docs/engineering-design/hosted-browser-provider-design.md.
448
+ MACHINES_ME_BROWSER_PROFILE_VIEWER_RESPONSE: (requestId) => `${API_BASE}/machines/me/browser-profiles/viewer-response/${requestId}`,
381
449
  // Tasks (org-scoped)
382
450
  TASKS: (orgId) => `${API_BASE}/orgs/${orgId}/tasks`,
383
451
  TASK: (orgId, taskId) => `${API_BASE}/orgs/${orgId}/tasks/${taskId}`,
@@ -443,6 +511,9 @@ export const ENDPOINTS = {
443
511
  // Wiki Path Scopes (AFCS ACL)
444
512
  WIKI_PATH_SCOPES: (orgId, wikiId) => `${WIKI_BASE}/orgs/${orgId}/wikis/${wikiId}/path-scopes`,
445
513
  WIKI_PATH_SCOPE: (orgId, wikiId, scopeId) => `${WIKI_BASE}/orgs/${orgId}/wikis/${wikiId}/path-scopes/${scopeId}`,
514
+ // Wiki Path Restrictions (AFCS narrowing ACL — private subtrees)
515
+ WIKI_RESTRICTIONS: (orgId, wikiId) => `${WIKI_BASE}/orgs/${orgId}/wikis/${wikiId}/restrictions`,
516
+ WIKI_RESTRICTION: (orgId, wikiId, restrictionId) => `${WIKI_BASE}/orgs/${orgId}/wikis/${wikiId}/restrictions/${restrictionId}`,
446
517
  WIKI_ACCESS_STATUS: (orgId, wikiId) => `${WIKI_BASE}/orgs/${orgId}/wikis/${wikiId}/access-status`,
447
518
  WIKI_ACCESS_REQUESTS: (orgId, wikiId) => `${WIKI_BASE}/orgs/${orgId}/wikis/${wikiId}/access-requests`,
448
519
  // Wiki History (commits, file commits, blame)
@@ -491,6 +562,8 @@ export const ENDPOINTS = {
491
562
  PUSH_VAPID_KEY: `${API_BASE}/push/vapid-key`,
492
563
  // Notification preferences
493
564
  NOTIFICATION_PREFERENCES: `${API_BASE}/notification-preferences`,
565
+ // Unified search (messages + tasks + wiki, org-scoped)
566
+ SEARCH: (orgId) => `${API_BASE}/orgs/${orgId}/search`,
494
567
  // Feature flags (org-scoped, server-evaluated)
495
568
  FEATURE_FLAGS: (orgId) => `${API_BASE}/orgs/${orgId}/feature-flags`,
496
569
  // Billing & Credits (org-scoped)
@@ -506,6 +579,7 @@ export const ENDPOINTS = {
506
579
  // Clips (org-scoped, served by clip-service)
507
580
  CLIPS: (orgId) => `${CLIP_BASE}/orgs/${orgId}/clips`,
508
581
  CLIP: (orgId, clipId) => `${CLIP_BASE}/orgs/${orgId}/clips/${clipId}`,
582
+ CLIPS_BULK_METADATA: (orgId) => `${CLIP_BASE}/orgs/${orgId}/clips/bulk-metadata`,
509
583
  CLIP_AGENTS: (orgId, clipId) => `${CLIP_BASE}/orgs/${orgId}/clips/${clipId}/agents`,
510
584
  AGENT_CLIPS: (orgId, agentId) => `${CLIP_BASE}/orgs/${orgId}/agents/${agentId}/clips`,
511
585
  AGENT_CLIP: (orgId, agentId, clipId) => `${CLIP_BASE}/orgs/${orgId}/agents/${agentId}/clips/${clipId}`,
@@ -518,6 +592,9 @@ export const ENDPOINTS = {
518
592
  BROWSER_PROFILE_RESET: (orgId, profileId) => `${CLIP_BASE}/orgs/${orgId}/browser-profiles/${profileId}/reset`,
519
593
  BROWSER_PROFILE_CONSENTS: (orgId, profileId) => `${CLIP_BASE}/orgs/${orgId}/browser-profiles/${profileId}/consents`,
520
594
  BROWSER_PROFILE_CONSENT: (orgId, profileId, clipId) => `${CLIP_BASE}/orgs/${orgId}/browser-profiles/${profileId}/consents/${clipId}`,
595
+ // Live viewer command — on api-server (API_BASE), not clip-service: it rides
596
+ // the machine control-plane request/reply bridge that lives in api-server.
597
+ BROWSER_PROFILE_VIEWER_COMMAND: (orgId, profileId) => `${API_BASE}/orgs/${orgId}/browser-profiles/${profileId}/viewer/command`,
521
598
  // Clip registry (global, served by clip-service → Pinix Hub proxy)
522
599
  CLIP_REGISTRY: () => `${CLIP_BASE}/registry/clips`,
523
600
  };
@@ -594,6 +671,7 @@ export const WS_EVENTS = {
594
671
  MACHINE_CONFIG_UPDATED: 'machine.config.updated',
595
672
  MACHINE_CLIP_SYNC: 'machine.clip.sync',
596
673
  MACHINE_BROWSER_PROFILE_LIFECYCLE: 'machine.browser_profile.lifecycle',
674
+ MACHINE_BROWSER_PROFILE_VIEWER: 'machine.browser_profile.viewer',
597
675
  AGENT_NEW_SESSION: 'agent.new_session',
598
676
  CLIP_CREATED: 'clip.created',
599
677
  CLIP_REMOVED: 'clip.removed',
package/dist/types.d.ts CHANGED
@@ -290,6 +290,15 @@ export interface OrgMember {
290
290
  joined_at: string;
291
291
  user?: User;
292
292
  }
293
+ export interface Team {
294
+ id: string;
295
+ org_id: string;
296
+ name: string;
297
+ slug: string;
298
+ created_by: string;
299
+ created_at: string;
300
+ updated_at: string;
301
+ }
293
302
  export type InvitationStatus = 'pending' | 'accepted' | 'declined' | 'revoked';
294
303
  export interface OrgInvitation {
295
304
  id: string;
@@ -357,9 +366,7 @@ export interface CreateInvitationRequest {
357
366
  }
358
367
  export interface ApiKey {
359
368
  id: string;
360
- key: string;
361
- agent_id: string;
362
- created_at: string;
369
+ api_key: string;
363
370
  }
364
371
  export interface CreateAgentResponse {
365
372
  user: User;
@@ -576,6 +583,7 @@ export interface UpdateAgentRequest {
576
583
  thinking_effort?: string;
577
584
  }
578
585
  export type MachineStatus = 'provisioning' | 'starting' | 'restarting' | 'running' | 'stopped' | 'error' | 'terminated';
586
+ export type MachineCapability = 'agent_host' | 'browser_provider';
579
587
  export interface Machine {
580
588
  id: string;
581
589
  org_id: string;
@@ -589,6 +597,7 @@ export interface Machine {
589
597
  daemon_mode: boolean;
590
598
  llm_source?: string;
591
599
  compute_mode: 'hosted' | 'local';
600
+ capabilities?: MachineCapability[];
592
601
  provider_enabled?: boolean;
593
602
  clip_provider_url?: string;
594
603
  daemon_version?: string | null;
@@ -737,6 +746,24 @@ export interface MachineBrowserProfileLifecycleData {
737
746
  action: BrowserProfileLifecycleAction;
738
747
  start_url?: string;
739
748
  }
749
+ /**
750
+ * Live-viewer control command relayed to the host daemon over `machine:{id}`.
751
+ * One command per WebRTC signaling / tab-nav step; the daemon replies via
752
+ * `POST /machines/me/browser-profiles/viewer-response/{request_id}`.
753
+ */
754
+ export interface MachineBrowserProfileViewerData {
755
+ request_id: string;
756
+ profile_id: string;
757
+ session_id: string;
758
+ command: string;
759
+ input?: Record<string, unknown>;
760
+ /** Short-lived managed TURN/ICE credentials, minted server-side per stream.start. */
761
+ turn?: {
762
+ url: string;
763
+ username?: string;
764
+ credential?: string;
765
+ };
766
+ }
740
767
  export interface AgentNewSessionData {
741
768
  previous_session_id?: string;
742
769
  }
@@ -1100,6 +1127,10 @@ export interface WikiNodeSection {
1100
1127
  start_line: number;
1101
1128
  end_line: number;
1102
1129
  content: string;
1130
+ /** Frontmatter metadata (OKF-inspired, file-level, all optional). */
1131
+ type?: string;
1132
+ description?: string;
1133
+ tags?: string[];
1103
1134
  }
1104
1135
  export interface WikiNodeSectionArtifact {
1105
1136
  version: number;
@@ -1213,15 +1244,23 @@ export interface CreateWikiRequest {
1213
1244
  name: string;
1214
1245
  default_branch?: string;
1215
1246
  }
1247
+ export interface WikiFileChangeInput {
1248
+ path: string;
1249
+ action: 'create' | 'update' | 'delete';
1250
+ content_base64?: string;
1251
+ base_version?: number;
1252
+ /**
1253
+ * Git blob SHA of the default-branch version this change was authored
1254
+ * against. When set on update/delete, the server rejects the changeset
1255
+ * with 409 STALE_BASE if the file has since changed on the default branch
1256
+ * (prevents silently overwriting concurrent edits).
1257
+ */
1258
+ base_sha?: string;
1259
+ }
1216
1260
  export interface CreateWikiChangesetRequest {
1217
1261
  title: string;
1218
1262
  message?: string;
1219
- file_changes: Array<{
1220
- path: string;
1221
- action: 'create' | 'update' | 'delete';
1222
- content_base64?: string;
1223
- base_version?: number;
1224
- }>;
1263
+ file_changes: WikiFileChangeInput[];
1225
1264
  source_chat_id?: string;
1226
1265
  source_message_id?: string;
1227
1266
  source_run_id?: string;
@@ -1229,12 +1268,15 @@ export interface CreateWikiChangesetRequest {
1229
1268
  export interface UpdateWikiChangesetRequest {
1230
1269
  title?: string;
1231
1270
  message?: string;
1232
- file_changes?: Array<{
1233
- path: string;
1234
- action: 'create' | 'update' | 'delete';
1235
- content_base64?: string;
1236
- base_version?: number;
1237
- }>;
1271
+ file_changes?: WikiFileChangeInput[];
1272
+ /**
1273
+ * When true, file_changes define the changeset's FULL content: the server
1274
+ * resets the feature branch to the current default-branch HEAD before
1275
+ * applying, so previously-proposed changes that are not re-sent are
1276
+ * dropped. Used by CLI re-propose (`changeset create --update`). Default
1277
+ * false preserves incremental merge semantics (binary-upload flow).
1278
+ */
1279
+ replace_files?: boolean;
1238
1280
  }
1239
1281
  export interface WikiCommit {
1240
1282
  sha: string;
@@ -1269,11 +1311,29 @@ export interface CreateWikiPathScopeRequest {
1269
1311
  maintainers?: unknown;
1270
1312
  admins?: unknown;
1271
1313
  }
1314
+ export interface WikiPathRestriction {
1315
+ id: string;
1316
+ wiki_id: string;
1317
+ path: string;
1318
+ level: 'read' | 'maintain' | 'admin';
1319
+ subjects: string[];
1320
+ apply_to_admins: boolean;
1321
+ created_by: string;
1322
+ created_at: string;
1323
+ }
1324
+ export interface CreateWikiPathRestrictionRequest {
1325
+ path: string;
1326
+ level?: 'read' | 'maintain' | 'admin';
1327
+ subjects: string[];
1328
+ apply_to_admins?: boolean;
1329
+ }
1272
1330
  export interface WikiAccessStatus {
1273
1331
  path: string;
1274
1332
  read: boolean;
1275
1333
  maintain: boolean;
1276
1334
  admin: boolean;
1335
+ acl_manage: boolean;
1336
+ acl_manage_any: boolean;
1277
1337
  }
1278
1338
  export interface CreateWikiAccessRequest {
1279
1339
  path: string;
@@ -1732,6 +1792,7 @@ export type WsEventMap = {
1732
1792
  'machine.update': MachineUpdateData;
1733
1793
  'machine.clip.sync': MachineClipSyncData;
1734
1794
  'machine.browser_profile.lifecycle': MachineBrowserProfileLifecycleData;
1795
+ 'machine.browser_profile.viewer': MachineBrowserProfileViewerData;
1735
1796
  'clip.created': ClipCreatedData;
1736
1797
  'clip.removed': ClipRemovedData;
1737
1798
  'clip.updated': ClipUpdatedData;
@@ -1816,6 +1877,7 @@ export interface ResolvedRef {
1816
1877
  sender_avatar_url?: string | null;
1817
1878
  message_type?: string;
1818
1879
  created_at?: string;
1880
+ attachments?: Attachment[];
1819
1881
  range_messages?: Array<{
1820
1882
  id: string;
1821
1883
  sender_id: string;
@@ -1825,6 +1887,7 @@ export interface ResolvedRef {
1825
1887
  message_type: string;
1826
1888
  preview: string;
1827
1889
  created_at: string;
1890
+ attachments?: Attachment[];
1828
1891
  }>;
1829
1892
  range_truncated?: boolean;
1830
1893
  file_name?: string;
@@ -2101,6 +2164,8 @@ export interface CreateClipRequest {
2101
2164
  browser_profile_id?: string;
2102
2165
  }
2103
2166
  export interface UpdateClipRequest {
2167
+ /** Rename the clip's org-local alias; uniqueness enforced per org. */
2168
+ alias?: string;
2104
2169
  name?: string;
2105
2170
  display_name?: string;
2106
2171
  description?: string;
@@ -2111,6 +2176,17 @@ export interface UpdateClipRequest {
2111
2176
  /** Empty string clears the binding; omitted leaves it unchanged. */
2112
2177
  browser_profile_id?: string;
2113
2178
  }
2179
+ /**
2180
+ * Atomically set application-level metadata (`display_name` and/or
2181
+ * `description`) on every clip instance of an application. All-or-nothing on the
2182
+ * server (one transaction). At least one field must be present; omitted leaves
2183
+ * it unchanged, an empty `description` clears it.
2184
+ */
2185
+ export interface BulkUpdateClipMetadataRequest {
2186
+ clip_ids: string[];
2187
+ display_name?: string;
2188
+ description?: string;
2189
+ }
2114
2190
  export interface BindAgentClipRequest {
2115
2191
  clip_id: string;
2116
2192
  config?: Record<string, unknown>;
@@ -2168,6 +2244,40 @@ export interface UpdateBrowserProfileRequest {
2168
2244
  export interface BrowserProfileLifecycleRequest {
2169
2245
  start_url?: string;
2170
2246
  }
2247
+ /** A WebRTC ICE server (STUN/TURN) for the live-viewer peer connection. */
2248
+ export interface BrowserViewerIceServer {
2249
+ urls: string[];
2250
+ username?: string;
2251
+ credential?: string;
2252
+ }
2253
+ /** A serialized ICE candidate exchanged during live-viewer signaling. */
2254
+ export interface BrowserViewerIceCandidate {
2255
+ candidate: string;
2256
+ sdpMLineIndex?: number | null;
2257
+ sdpMid?: string | null;
2258
+ }
2259
+ /**
2260
+ * One live-viewer control command. The web client drives the WebRTC handshake
2261
+ * (`stream.start` → `stream.answer` → `stream.close`/`stream.switch`) and tab
2262
+ * navigation (`tab_list`/`tab_new`/`open`/`reload`/`back`/`forward`) through a
2263
+ * single endpoint; api-server forwards `command` to the host daemon.
2264
+ */
2265
+ export interface BrowserViewerCommandRequest {
2266
+ /** Correlates a viewer session. Omit on `stream.start`; the server returns one. */
2267
+ session_id?: string;
2268
+ command: string;
2269
+ input?: Record<string, unknown>;
2270
+ }
2271
+ export interface BrowserViewerCommandResponse {
2272
+ session_id: string;
2273
+ /**
2274
+ * Command-specific result. For `stream.start`:
2275
+ * `{ offer_sdp: string, candidates: BrowserViewerIceCandidate[], ice_servers: BrowserViewerIceServer[] }`.
2276
+ * May be `null` on the wire — a nil Go result map serializes as JSON null; the
2277
+ * viewer client coalesces it to `{}`.
2278
+ */
2279
+ result: Record<string, unknown> | null;
2280
+ }
2171
2281
  export interface GrantBrowserProfileConsentRequest {
2172
2282
  clip_id: string;
2173
2283
  }
@@ -2220,5 +2330,51 @@ export interface ClipRemovedData {
2220
2330
  clip_id: string;
2221
2331
  org_id: string;
2222
2332
  }
2333
+ export interface SearchParams {
2334
+ q: string;
2335
+ types?: string;
2336
+ chat_id?: string;
2337
+ limit?: number;
2338
+ }
2339
+ export interface SearchMessageResult {
2340
+ message_id: string;
2341
+ chat_id: string;
2342
+ chat_name?: string;
2343
+ sender?: {
2344
+ id: string;
2345
+ display_name: string;
2346
+ };
2347
+ content_snippet: string;
2348
+ score: number;
2349
+ created_at: string;
2350
+ }
2351
+ export interface SearchTaskResult {
2352
+ task_id: string;
2353
+ project_id?: string;
2354
+ project_name?: string;
2355
+ title: string;
2356
+ content_snippet: string;
2357
+ score: number;
2358
+ updated_at?: string;
2359
+ }
2360
+ export interface SearchWikiResult {
2361
+ /** Globally-unique section id (stable React key — file_path can repeat across matched sections). */
2362
+ section_id: string;
2363
+ wiki_id: string;
2364
+ wiki_name?: string;
2365
+ file_path: string;
2366
+ heading_path: string[];
2367
+ content_snippet: string;
2368
+ score: number;
2369
+ /** Frontmatter document type (OKF facet label), when the file declares one. */
2370
+ type?: string;
2371
+ /** Frontmatter summary; clients may prefer it over content_snippet. */
2372
+ description?: string;
2373
+ }
2374
+ export interface SearchResponse {
2375
+ messages: SearchMessageResult[];
2376
+ tasks: SearchTaskResult[];
2377
+ wiki: SearchWikiResult[];
2378
+ }
2223
2379
  export {};
2224
2380
  //# sourceMappingURL=types.d.ts.map