@parall/sdk 1.35.0 → 1.36.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/dist/constants.js CHANGED
@@ -472,6 +472,17 @@ export const ENDPOINTS = {
472
472
  SCHEDULE_CANCEL: (orgId, id) => `${API_BASE}/orgs/${orgId}/schedules/${id}/cancel`,
473
473
  SCHEDULE_RUNS: (orgId, id) => `${API_BASE}/orgs/${orgId}/schedules/${id}/runs`,
474
474
  SCHEDULE_RUN: (orgId, runId) => `${API_BASE}/orgs/${orgId}/schedule_runs/${runId}`,
475
+ // External triggers (org-scoped incoming integration primitive)
476
+ EXTERNAL_CONNECTIONS: (orgId) => `${API_BASE}/orgs/${orgId}/external-connections`,
477
+ EXTERNAL_CONNECTION: (orgId, connectionId) => `${API_BASE}/orgs/${orgId}/external-connections/${connectionId}`,
478
+ EXTERNAL_CONNECTION_INGRESS_TOKEN_REGENERATE: (orgId, connectionId) => `${API_BASE}/orgs/${orgId}/external-connections/${connectionId}/ingress-token/regenerate`,
479
+ EXTERNAL_TRIGGER_SCHEMA: (orgId, connectionId) => `${API_BASE}/orgs/${orgId}/external-connections/${connectionId}/trigger-schema`,
480
+ EXTERNAL_INGRESS_EVENTS: (orgId) => `${API_BASE}/orgs/${orgId}/external-ingress-events`,
481
+ EXTERNAL_INGRESS_EVENT: (orgId, eventId) => `${API_BASE}/orgs/${orgId}/external-ingress-events/${eventId}`,
482
+ EXTERNAL_TRIGGERS: (orgId) => `${API_BASE}/orgs/${orgId}/external-triggers`,
483
+ EXTERNAL_TRIGGER: (orgId, triggerId) => `${API_BASE}/orgs/${orgId}/external-triggers/${triggerId}`,
484
+ EXTERNAL_TRIGGER_RUNS: (orgId) => `${API_BASE}/orgs/${orgId}/external-trigger-runs`,
485
+ EXTERNAL_TRIGGER_RUN: (orgId, runId) => `${API_BASE}/orgs/${orgId}/external-trigger-runs/${runId}`,
475
486
  // Invitations (org-scoped, admin)
476
487
  ORG_INVITATIONS: (orgId) => `${API_BASE}/orgs/${orgId}/invitations`,
477
488
  ORG_INVITATION: (orgId, invId) => `${API_BASE}/orgs/${orgId}/invitations/${invId}`,
@@ -553,6 +564,7 @@ export const ENDPOINTS = {
553
564
  // References (org-scoped)
554
565
  REFS_RESOLVE: (orgId) => `${API_BASE}/orgs/${orgId}/refs/resolve`,
555
566
  REFS_BACKLINKS: (orgId) => `${API_BASE}/orgs/${orgId}/refs/backlinks`,
567
+ REFS_GRAPH: (orgId) => `${API_BASE}/orgs/${orgId}/refs/graph`,
556
568
  REFS_CHECK: (orgId) => `${API_BASE}/orgs/${orgId}/refs/check`,
557
569
  // Platform config (agent-scoped, not org-scoped)
558
570
  PLATFORM_CONFIG: `${API_BASE}/agents/platform-config`,
package/dist/types.d.ts CHANGED
@@ -202,6 +202,15 @@ export interface Message {
202
202
  content: MessageContent;
203
203
  version: number;
204
204
  reply_count: number;
205
+ /** Timestamp of the most recent reply in this message's thread (root only). */
206
+ last_reply_at?: string | null;
207
+ /**
208
+ * Most-recent distinct reply authors, newest-first (root only, capped at 3).
209
+ * Approximate: derived from the newest ~30 replies per root, so on very long
210
+ * threads dominated by a few recent senders, older distinct authors may be
211
+ * absent from the stack. A reload re-derives it from the server's view.
212
+ */
213
+ recent_repliers?: User[];
205
214
  edited_at: string | null;
206
215
  deleted_at: string | null;
207
216
  created_at: string;
@@ -1050,6 +1059,162 @@ export interface ScheduleRunFilters {
1050
1059
  cursor?: string;
1051
1060
  limit?: number;
1052
1061
  }
1062
+ export type ExternalConnectionStatus = 'active' | 'disabled';
1063
+ export type ExternalIngressEventStatus = 'received' | 'processed' | 'failed';
1064
+ export type ExternalTriggerStatus = 'active' | 'paused';
1065
+ export type ExternalTriggerEffectiveStatus = 'active' | 'inactive';
1066
+ export type ExternalTriggerInactiveReason = 'connection_disabled' | 'connection_archived' | 'trigger_paused' | 'trigger_archived' | 'expired' | 'max_runs_reached';
1067
+ export type ExternalTriggerRunStatus = 'delivered' | 'failed';
1068
+ export interface ExternalConnection {
1069
+ id: string;
1070
+ org_id: string;
1071
+ source_type: string;
1072
+ display_name: string;
1073
+ owner_id: string;
1074
+ status: ExternalConnectionStatus;
1075
+ auth_config: Record<string, unknown>;
1076
+ archived_at: string | null;
1077
+ archive_reason: string | null;
1078
+ ingress_url?: string;
1079
+ ingress_token?: string;
1080
+ created_at: string;
1081
+ updated_at: string;
1082
+ }
1083
+ export interface CreateExternalConnectionInput {
1084
+ source_type?: string;
1085
+ display_name: string;
1086
+ }
1087
+ export interface UpdateExternalConnectionInput {
1088
+ display_name?: string;
1089
+ status?: ExternalConnectionStatus;
1090
+ }
1091
+ export interface ExternalIngressEvent {
1092
+ id: string;
1093
+ org_id: string;
1094
+ connection_id: string;
1095
+ status: ExternalIngressEventStatus;
1096
+ dedupe_key: string | null;
1097
+ event_type: string;
1098
+ request_snapshot: Record<string, unknown>;
1099
+ body_snapshot: Record<string, unknown>;
1100
+ envelope_snapshot: Record<string, unknown>;
1101
+ raw_body_sha256: string;
1102
+ body_size: number;
1103
+ error_code: string | null;
1104
+ error_message: string | null;
1105
+ received_at: string;
1106
+ processed_at: string | null;
1107
+ }
1108
+ export interface ExternalTrigger {
1109
+ id: string;
1110
+ org_id: string;
1111
+ connection_id: string;
1112
+ creator_id: string;
1113
+ name: string;
1114
+ description: string;
1115
+ status: ExternalTriggerStatus;
1116
+ effective_status: ExternalTriggerEffectiveStatus;
1117
+ inactive_reason?: ExternalTriggerInactiveReason;
1118
+ archived_at: string | null;
1119
+ archive_reason: string | null;
1120
+ attached_to_uri: string | null;
1121
+ filter_language: 'cel';
1122
+ filter_profile: 'parall_cel_v1';
1123
+ filter_expr: string;
1124
+ filter_display_metadata: Record<string, unknown>;
1125
+ template_language: 'liquid';
1126
+ template_profile: 'parall_safe_v1';
1127
+ agent_input_template: string;
1128
+ max_runs: number | null;
1129
+ run_count: number;
1130
+ expires_at: string | null;
1131
+ client_context: Record<string, unknown>;
1132
+ target_agent_ids: string[];
1133
+ created_at: string;
1134
+ updated_at: string;
1135
+ }
1136
+ export interface CreateExternalTriggerInput {
1137
+ connection_id: string;
1138
+ name: string;
1139
+ description?: string;
1140
+ target_agent_ids: string[];
1141
+ attached_to_uri?: string;
1142
+ filter_expr: string;
1143
+ filter_display_metadata?: Record<string, unknown>;
1144
+ agent_input_template: string;
1145
+ max_runs?: number;
1146
+ expires_at?: string;
1147
+ client_context?: Record<string, unknown>;
1148
+ }
1149
+ export interface UpdateExternalTriggerInput {
1150
+ name?: string;
1151
+ description?: string;
1152
+ status?: ExternalTriggerStatus;
1153
+ target_agent_ids?: string[];
1154
+ attached_to_uri?: string;
1155
+ attached_to_uri_clear?: boolean;
1156
+ filter_expr?: string;
1157
+ filter_display_metadata?: Record<string, unknown>;
1158
+ agent_input_template?: string;
1159
+ max_runs?: number;
1160
+ max_runs_clear?: boolean;
1161
+ expires_at?: string;
1162
+ expires_at_clear?: boolean;
1163
+ client_context?: Record<string, unknown>;
1164
+ }
1165
+ export interface ExternalTriggerRun {
1166
+ id: string;
1167
+ org_id: string;
1168
+ connection_id: string;
1169
+ ingress_event_id: string;
1170
+ trigger_id: string;
1171
+ status: ExternalTriggerRunStatus;
1172
+ failure_stage: string | null;
1173
+ error_code: string | null;
1174
+ error_message: string | null;
1175
+ agent_input_body: string | null;
1176
+ trigger_snapshot: Record<string, unknown>;
1177
+ configured_target_agent_ids: string[];
1178
+ eligible_target_agent_ids: string[];
1179
+ skipped_target_agent_ids: string[];
1180
+ dispatch_event_ids: string[];
1181
+ trigger_name?: string;
1182
+ connection_source_type?: string;
1183
+ connection_display_name?: string;
1184
+ ingress_event_type?: string;
1185
+ created_at: string;
1186
+ delivered_at: string | null;
1187
+ }
1188
+ export interface ExternalConnectionFilters {
1189
+ cursor?: string;
1190
+ limit?: number;
1191
+ }
1192
+ export interface ExternalTriggerFilters {
1193
+ connection_id?: string;
1194
+ creator_id?: string;
1195
+ cursor?: string;
1196
+ limit?: number;
1197
+ }
1198
+ export interface ExternalIngressEventFilters {
1199
+ connection_id?: string;
1200
+ cursor?: string;
1201
+ limit?: number;
1202
+ }
1203
+ export interface ExternalTriggerRunFilters {
1204
+ trigger_id?: string;
1205
+ cursor?: string;
1206
+ limit?: number;
1207
+ }
1208
+ export interface ExternalTriggerSchema {
1209
+ filter_language: 'cel';
1210
+ filter_profile: 'parall_cel_v1';
1211
+ template_language: 'liquid';
1212
+ template_profile: 'parall_safe_v1';
1213
+ filter_variables: string[];
1214
+ template_variables: string[];
1215
+ template_filters: string[];
1216
+ examples: Record<string, string>;
1217
+ }
1053
1218
  export type ScheduleCreatedData = Schedule;
1054
1219
  export type ScheduleUpdatedData = Schedule;
1055
1220
  export interface ScheduleDeletedData {
@@ -1646,7 +1811,7 @@ export interface InboxItem {
1646
1811
  created_at: string;
1647
1812
  updated_at: string;
1648
1813
  }
1649
- export type DispatchEventType = 'message' | 'task_assign' | 'task_update' | 'task_comment' | 'wiki_comment' | 'schedule.fire' | 'approval_decided';
1814
+ export type DispatchEventType = 'message' | 'task_assign' | 'task_update' | 'task_comment' | 'wiki_comment' | 'schedule.fire' | 'external_trigger' | 'approval_decided';
1650
1815
  export type DispatchStatus = 'pending' | 'received' | 'acked';
1651
1816
  export type DispatchDeliveryReason = 'mention' | 'watcher' | 'assignee' | 'creator';
1652
1817
  export interface DispatchEvent {
@@ -1892,6 +2057,8 @@ export interface ResolvedRef {
1892
2057
  range_truncated?: boolean;
1893
2058
  file_name?: string;
1894
2059
  wiki_name?: string;
2060
+ /** Frontmatter description of the referenced wiki page (OKF), when present. */
2061
+ wiki_description?: string;
1895
2062
  fragment_exists?: boolean;
1896
2063
  anchor_kind?: string;
1897
2064
  anchor_exists?: boolean;
@@ -1924,6 +2091,35 @@ export interface BacklinksResponse {
1924
2091
  backlinks: BacklinkItem[];
1925
2092
  next_cursor?: string;
1926
2093
  }
2094
+ /**
2095
+ * One entity in a multi-hop ref-graph traversal (GET /refs/graph). `id`/`uri` are
2096
+ * the ref_links endpoint identifier: a bare prll:// entity id for most nodes
2097
+ * (`tsk_abc` → `prll://tsk_abc`), but a wiki_file source node carries its file
2098
+ * path (`wik_abc/docs/a.md` → `prll://wik_abc/docs/a.md`, type `wik`). The query
2099
+ * root must be entity-level (refined path/anchor URIs are rejected 400), yet
2100
+ * interior wiki_file nodes can legitimately be path-bearing.
2101
+ */
2102
+ export interface RefGraphNode {
2103
+ uri: string;
2104
+ type: string;
2105
+ id: string;
2106
+ depth: number;
2107
+ }
2108
+ /** One directed prll:// reference between two nodes in the graph. */
2109
+ export interface RefGraphEdge {
2110
+ source_uri: string;
2111
+ target_uri: string;
2112
+ source_type: string;
2113
+ target_type: string;
2114
+ context?: string;
2115
+ }
2116
+ export interface RefGraphResponse {
2117
+ root: string;
2118
+ depth: number;
2119
+ nodes: RefGraphNode[];
2120
+ edges: RefGraphEdge[];
2121
+ truncated: boolean;
2122
+ }
1927
2123
  export interface BrokenRefItem {
1928
2124
  ref_link_id: string;
1929
2125
  source_type: string;
@@ -2207,12 +2403,26 @@ export interface InvokeClipResponse {
2207
2403
  output: unknown;
2208
2404
  error: string | null;
2209
2405
  }
2210
- export type BrowserProfileStatus = 'pending' | 'running' | 'stopped' | 'error';
2406
+ /**
2407
+ * profile.status is owner INTENT only, never runtime readiness:
2408
+ * - BYOC: pending | running | stopped | error
2409
+ * - hosted: idle | stopped | error (idle = enabled, activates lazily on invoke/viewer)
2410
+ * Whether a hosted pod is registered + routable is the lease/controller/provider's
2411
+ * runtime state, NOT profile status — hosted profiles are never `active`.
2412
+ */
2413
+ export type BrowserProfileStatus = 'pending' | 'running' | 'stopped' | 'error' | 'idle';
2414
+ /**
2415
+ * Routing/identity discriminant: `byoc` runs on a user machine (machine_id
2416
+ * required), `hosted` runs on the platform pool (machine_id null).
2417
+ */
2418
+ export type BrowserPlacement = 'byoc' | 'hosted';
2211
2419
  export interface BrowserProfile {
2212
2420
  id: string;
2213
2421
  org_id: string;
2214
- /** Host machine where the profile's cookies / bb-browser account live. */
2215
- machine_id: string;
2422
+ /** byoc = user machine, hosted = platform pool. */
2423
+ placement: BrowserPlacement;
2424
+ /** Host machine for byoc profiles; null for hosted (the platform pool owns the pod). */
2425
+ machine_id: string | null;
2216
2426
  owner_user_id: string;
2217
2427
  display_name: string;
2218
2428
  status: BrowserProfileStatus;
@@ -2221,6 +2431,63 @@ export interface BrowserProfile {
2221
2431
  created_by?: string | null;
2222
2432
  created_at: string;
2223
2433
  updated_at: string;
2434
+ /** Control hint on the single-profile responses (create / get / lifecycle) —
2435
+ * always true, since reaching those endpoints means the caller passed the read
2436
+ * or control gate and owner/admin can always control. The org-wide list uses
2437
+ * {@link BrowserProfileListItem.can_open} (per-viewer) instead. */
2438
+ can_open?: boolean;
2439
+ /** Per-profile outbound proxy (BYO provider credentials). Returned to the owner /
2440
+ * org admin (Get) for the edit form. The password is NEVER returned —
2441
+ * {@link proxy_password_set} reports only whether one is configured. */
2442
+ proxy_server?: string | null;
2443
+ proxy_username?: string | null;
2444
+ /** True when a proxy password is stored. Drives the edit form's "leave blank to
2445
+ * keep" affordance; the value itself is never sent to a human-facing client. */
2446
+ proxy_password_set?: boolean;
2447
+ }
2448
+ /** Sanitized row from `GET /orgs/{orgId}/browser-profiles` (org-wide discovery).
2449
+ * Carries only the fields the Browser Profiles tab needs to render + gate
2450
+ * actions — the full domain model (provenance, timestamps) is never returned
2451
+ * org-wide. `error_msg` / `last_seen` are present only for readers (the profile
2452
+ * owner or an org admin), not merely for own-local host owners who can `can_open`. */
2453
+ export interface BrowserProfileListItem {
2454
+ id: string;
2455
+ org_id: string;
2456
+ /** byoc = user machine, hosted = platform pool. */
2457
+ placement: BrowserPlacement;
2458
+ /** Host machine for byoc; null for hosted (the platform pool owns the pod). */
2459
+ machine_id: string | null;
2460
+ owner_user_id: string;
2461
+ display_name: string;
2462
+ status: BrowserProfileStatus;
2463
+ /** Per-viewer control hint computed by the server (owner / org admin / own
2464
+ * local host machine). Optional only for forward-compat with an older
2465
+ * clip-service mid web-first rollout; the current server always sets it. */
2466
+ can_open?: boolean;
2467
+ error_msg?: string | null;
2468
+ last_seen?: string | null;
2469
+ /** Non-sensitive discovery flag: does this profile egress through a proxy. The
2470
+ * proxy server / credentials are NOT in the org-wide list (owner/admin Get only). */
2471
+ proxy_configured?: boolean;
2472
+ }
2473
+ /** Daemon-facing browser profile returned by `GET /machines/me/browser-profiles`
2474
+ * (mck_-authed, machine-scoped). Unlike {@link BrowserProfile} it carries
2475
+ * `proxy_password`: the local BYOC daemon must replay it to bb-browser. This is the
2476
+ * single intended channel for the credential to leave the server — never surface it
2477
+ * on a human-facing path. */
2478
+ export interface MachineBrowserProfile {
2479
+ id: string;
2480
+ org_id: string;
2481
+ placement: BrowserPlacement;
2482
+ machine_id: string | null;
2483
+ owner_user_id: string;
2484
+ display_name: string;
2485
+ status: BrowserProfileStatus;
2486
+ error_msg?: string | null;
2487
+ last_seen?: string | null;
2488
+ proxy_server?: string | null;
2489
+ proxy_username?: string | null;
2490
+ proxy_password?: string | null;
2224
2491
  }
2225
2492
  export interface BrowserProfileConsent {
2226
2493
  id: string;
@@ -2233,13 +2500,26 @@ export interface BrowserProfileConsent {
2233
2500
  revoked_at?: string | null;
2234
2501
  }
2235
2502
  export interface CreateBrowserProfileRequest {
2236
- /** Host machine that runs the BrowserProfile (cookies / bb-browser account). */
2237
- machine_id: string;
2503
+ /** Defaults to `byoc` when omitted (backward compatible). */
2504
+ placement?: BrowserPlacement;
2505
+ /** Required for byoc; omitted for hosted (the platform pool assigns a pod). */
2506
+ machine_id?: string | null;
2238
2507
  owner_user_id: string;
2239
2508
  display_name: string;
2509
+ /** Optional BYO proxy. Omit all for direct egress. proxy_server is `host:port`
2510
+ * (optional http/https/socks5 scheme); proxy_username/password are sent together. */
2511
+ proxy_server?: string | null;
2512
+ proxy_username?: string | null;
2513
+ proxy_password?: string | null;
2240
2514
  }
2241
2515
  export interface UpdateBrowserProfileRequest {
2242
2516
  display_name?: string;
2517
+ /** Per-field proxy edit (tri-state): omit = leave unchanged, "" = clear (an empty
2518
+ * proxy_server clears the whole proxy), value = set. Omitting proxy_password keeps
2519
+ * the stored one (never re-entered / echoed). */
2520
+ proxy_server?: string | null;
2521
+ proxy_username?: string | null;
2522
+ proxy_password?: string | null;
2243
2523
  }
2244
2524
  export interface BrowserProfileLifecycleRequest {
2245
2525
  start_url?: string;
@@ -2330,12 +2610,17 @@ export interface ClipRemovedData {
2330
2610
  clip_id: string;
2331
2611
  org_id: string;
2332
2612
  }
2333
- export interface SearchParams {
2613
+ export type SearchParams = {
2334
2614
  q: string;
2615
+ /** Entity selector CSV: message / task / wiki. Distinct from `wiki_type`. */
2335
2616
  types?: string;
2336
2617
  chat_id?: string;
2337
2618
  limit?: number;
2338
- }
2619
+ /** Wiki document-type facet (frontmatter `type`) — a separate axis from `types`. */
2620
+ wiki_type?: string;
2621
+ /** RFC3339 or YYYY-MM-DD; narrows messages (created_at) and tasks (updated_at). Not applied to wiki. */
2622
+ since?: string;
2623
+ };
2339
2624
  export interface SearchMessageResult {
2340
2625
  message_id: string;
2341
2626
  chat_id: string;