@parall/sdk 1.36.1 → 1.37.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/types.d.ts CHANGED
@@ -611,11 +611,17 @@ export interface Machine {
611
611
  clip_provider_url?: string;
612
612
  daemon_version?: string | null;
613
613
  self_update_capable?: boolean;
614
+ detected_runtimes?: DetectedRuntime[] | null;
614
615
  region: string | null;
615
616
  created_by: string;
616
617
  created_at: string;
617
618
  updated_at: string;
618
619
  }
620
+ export interface DetectedRuntime {
621
+ runtime_type: string;
622
+ version?: string;
623
+ status: 'ok' | 'broken';
624
+ }
619
625
  export type DaemonWorkspaceMode = 'default' | 'local_path' | 'git';
620
626
  export type DaemonWorkspaceSetupRunOn = 'first_attach' | 'config_change';
621
627
  export interface DaemonWorkspaceGitConfig {
@@ -670,7 +676,7 @@ export interface AgentProfile {
670
676
  model_management: string | null;
671
677
  permissions: string[];
672
678
  machine_id: string | null;
673
- hosting_mode?: 'hosted' | 'self_hosted';
679
+ hosting_mode?: 'hosted' | 'self_hosted' | 'platform_runtime';
674
680
  runtime_type: string;
675
681
  description: string | null;
676
682
  thinking_effort: string | null;
@@ -724,6 +730,11 @@ export interface MachineConfigUpdatedData {
724
730
  llm_source?: string;
725
731
  provider_enabled?: boolean;
726
732
  }
733
+ export interface MachineAgentConfigUpdatedData {
734
+ machine_id: string;
735
+ agent_id: string;
736
+ llm_source: string;
737
+ }
727
738
  export interface MachineWorkspaceSetupRequestedData {
728
739
  machine_id: string;
729
740
  agent_id: string;
@@ -754,6 +765,14 @@ export interface MachineBrowserProfileLifecycleData {
754
765
  profile_id: string;
755
766
  action: BrowserProfileLifecycleAction;
756
767
  start_url?: string;
768
+ /** Profile's lifecycle_generation after this transition's bump (PR #1650). The
769
+ * daemon acts under it and echoes it in its status report so the server can
770
+ * reject a stale report. Absent/0 from a pre-generation server. */
771
+ generation?: number;
772
+ /** Profile's reset_generation after this transition (bumped only by `reset`). On
773
+ * an online reset the daemon records it in its per-profile sidecar so a later
774
+ * reconnect doesn't redundantly re-wipe. */
775
+ reset_generation?: number;
757
776
  }
758
777
  /**
759
778
  * Live-viewer control command relayed to the host daemon over `machine:{id}`.
@@ -850,6 +869,13 @@ export interface Task {
850
869
  canceled_at: string | null;
851
870
  archived_at?: string | null;
852
871
  deleted_at?: string | null;
872
+ /**
873
+ * Per-viewer: whether the requesting user may manage OTHER members' comment
874
+ * subscriptions for this task (creator / assignee / project lead / org
875
+ * owner-admin). Populated on single-task GET; undefined elsewhere. Read this to
876
+ * gate subscriber-management UI — do not re-derive the rule client-side.
877
+ */
878
+ can_manage_subscribers?: boolean;
853
879
  }
854
880
  export interface TaskWatcher {
855
881
  task_id: string;
@@ -1239,6 +1265,19 @@ export interface Wiki {
1239
1265
  created_by: string;
1240
1266
  created_at: string;
1241
1267
  updated_at: string;
1268
+ /** Protected default wiki — cannot be deleted. */
1269
+ is_default?: boolean | null;
1270
+ /** Set when the wiki is soft-deleted (recoverable). */
1271
+ deleted_at?: string | null;
1272
+ /** User who soft-deleted the wiki. */
1273
+ deleted_by?: string | null;
1274
+ /** Set once purge is claimed — the wiki can no longer be restored. */
1275
+ purge_started_at?: string | null;
1276
+ /** deleted_at + retention window (server-computed) — the recycle-bin countdown
1277
+ * source. Past this, restore is rejected with 410 WIKI_RETENTION_EXPIRED. */
1278
+ purge_eligible_at?: string | null;
1279
+ /** Server-computed restore availability for recycle-bin rows. */
1280
+ restorable?: boolean | null;
1242
1281
  }
1243
1282
  export interface WikiFileChange {
1244
1283
  path: string;
@@ -1267,10 +1306,18 @@ export interface WikiTreeEntry {
1267
1306
  path: string;
1268
1307
  type: 'tree' | 'blob';
1269
1308
  size?: number;
1309
+ /**
1310
+ * Entry sits inside a read-gated private subtree (path restriction). Advisory
1311
+ * display flag — the caller already passed read authorization to receive the
1312
+ * entry; use it to badge private folders, never for access decisions.
1313
+ */
1314
+ restricted?: boolean;
1270
1315
  }
1271
1316
  export interface WikiTreeResponse {
1272
1317
  data: WikiTreeEntry[];
1273
1318
  path: string;
1319
+ /** Whether the listed directory itself sits inside a read-gated private subtree. */
1320
+ path_restricted?: boolean;
1274
1321
  }
1275
1322
  export interface WikiFileManifestEntry {
1276
1323
  path: string;
@@ -1491,6 +1538,7 @@ export interface CreateWikiPathRestrictionRequest {
1491
1538
  level?: 'read' | 'maintain' | 'admin';
1492
1539
  subjects: string[];
1493
1540
  apply_to_admins?: boolean;
1541
+ create_only?: boolean;
1494
1542
  }
1495
1543
  export interface WikiAccessStatus {
1496
1544
  path: string;
@@ -1518,6 +1566,22 @@ export interface WikiOperationsResponse {
1518
1566
  data: WikiOperation[];
1519
1567
  has_more: boolean;
1520
1568
  }
1569
+ /**
1570
+ * Copy one wiki file to another path as an independent snapshot (no ongoing
1571
+ * sync). Primary use: "share a private file out" — copy from the caller's
1572
+ * personal namespace (`users/{userId}/…`) into the public wiki so the whole
1573
+ * org can read + edit the copy, leaving the private original untouched.
1574
+ */
1575
+ export interface CopyWikiFileRequest {
1576
+ source_path: string;
1577
+ dest_path: string;
1578
+ message?: string;
1579
+ }
1580
+ export interface CopyWikiFileResponse {
1581
+ source_path: string;
1582
+ dest_path: string;
1583
+ commit_sha: string;
1584
+ }
1521
1585
  export interface WikiBlob {
1522
1586
  path: string;
1523
1587
  ref: string;
@@ -1527,6 +1591,8 @@ export interface WikiBlob {
1527
1591
  content?: string;
1528
1592
  line_count?: number;
1529
1593
  sha256?: string;
1594
+ /** File sits inside a read-gated private subtree — advisory display flag. */
1595
+ restricted?: boolean;
1530
1596
  mime?: string;
1531
1597
  is_lfs?: boolean;
1532
1598
  content_sha?: string;
@@ -1636,6 +1702,15 @@ export interface MembershipChangedData {
1636
1702
  user_id: string;
1637
1703
  action: 'added' | 'removed' | 'role_changed';
1638
1704
  }
1705
+ /**
1706
+ * A member was removed from an org — kicked by an admin or self-removal
1707
+ * ("leave org"). Delivered on org:{orgId} (remaining members refresh the
1708
+ * directory) and user:{userId} (the removed user's clients drop the org).
1709
+ */
1710
+ export interface OrgMemberRemovedData {
1711
+ org_id: string;
1712
+ user_id: string;
1713
+ }
1639
1714
  export type TaskActivityAction = 'created' | 'field_changed' | 'commented';
1640
1715
  export interface TaskComment {
1641
1716
  id: string;
@@ -1757,6 +1832,13 @@ export type WikiChangesetCreatedData = WikiChangeset & {
1757
1832
  export type WikiChangesetUpdatedData = WikiChangeset & {
1758
1833
  org_id: string;
1759
1834
  };
1835
+ export interface WikiDeletedData {
1836
+ org_id: string;
1837
+ wiki_id: string;
1838
+ slug: string;
1839
+ name: string;
1840
+ }
1841
+ export type WikiRestoredData = WikiDeletedData;
1760
1842
  export interface Comment {
1761
1843
  id: string;
1762
1844
  org_id: string;
@@ -1811,7 +1893,114 @@ export interface InboxItem {
1811
1893
  created_at: string;
1812
1894
  updated_at: string;
1813
1895
  }
1814
- export type DispatchEventType = 'message' | 'task_assign' | 'task_update' | 'task_comment' | 'wiki_comment' | 'schedule.fire' | 'external_trigger' | 'approval_decided';
1896
+ export type ChannelProvider = 'feishu' | 'slack';
1897
+ export type ChannelConnectionStatus = 'pending' | 'active' | 'disabled';
1898
+ /**
1899
+ * Inbound transport for a connection. Defaults to the provider's lowest-
1900
+ * onboarding-cost mode server-side (Feishu → socket, Slack → webhook) when
1901
+ * omitted on create; can be overridden per connection.
1902
+ */
1903
+ export type ChannelIngressMode = 'webhook' | 'socket';
1904
+ export type ChannelMessageStatus = 'received' | 'dispatched' | 'failed';
1905
+ export interface ChannelConnection {
1906
+ id: string;
1907
+ org_id: string;
1908
+ agent_id: string;
1909
+ provider: ChannelProvider;
1910
+ ingress_mode: ChannelIngressMode;
1911
+ display_name: string;
1912
+ created_by: string;
1913
+ status: ChannelConnectionStatus;
1914
+ external_app_id?: string;
1915
+ external_team_id?: string;
1916
+ archived_at?: string | null;
1917
+ archive_reason?: string | null;
1918
+ /** Returned once at mint time (create / token regeneration). */
1919
+ ingress_url?: string;
1920
+ /** Returned once at mint time (create / token regeneration). */
1921
+ ingress_token?: string;
1922
+ created_at: string;
1923
+ updated_at: string;
1924
+ }
1925
+ export interface ChannelCredentialsInput {
1926
+ app_id: string;
1927
+ app_secret: string;
1928
+ verification_token?: string;
1929
+ encrypt_key?: string;
1930
+ team_id?: string;
1931
+ }
1932
+ export interface CreateChannelConnectionInput {
1933
+ agent_id: string;
1934
+ provider: ChannelProvider;
1935
+ display_name: string;
1936
+ /** Override the provider's default inbound transport (optional). */
1937
+ ingress_mode?: ChannelIngressMode;
1938
+ /** Manual provisioning: activates the connection immediately. */
1939
+ credentials?: ChannelCredentialsInput;
1940
+ }
1941
+ export interface UpdateChannelConnectionInput {
1942
+ display_name?: string;
1943
+ status?: 'active' | 'disabled';
1944
+ }
1945
+ export interface ChannelConversation {
1946
+ id: string;
1947
+ org_id: string;
1948
+ connection_id: string;
1949
+ agent_id: string;
1950
+ agent_session_id?: string | null;
1951
+ external_conversation_id: string;
1952
+ external_thread_id: string;
1953
+ conversation_type: string;
1954
+ external_user_id: string;
1955
+ external_user_name: string;
1956
+ last_inbound_at?: string | null;
1957
+ created_at: string;
1958
+ updated_at: string;
1959
+ }
1960
+ export interface ChannelMessage {
1961
+ id: string;
1962
+ org_id: string;
1963
+ connection_id: string;
1964
+ conversation_id: string;
1965
+ external_message_id: string;
1966
+ text: string;
1967
+ external_user_id: string;
1968
+ external_user_name: string;
1969
+ status: ChannelMessageStatus;
1970
+ received_at: string;
1971
+ created_at: string;
1972
+ }
1973
+ /**
1974
+ * Feishu one-click provisioning session (OAuth device flow). The client
1975
+ * renders `verification_url` as a QR code and lazily polls the status
1976
+ * endpoint every `poll_interval_seconds` — each poll may forward one
1977
+ * provider poll server-side, so respect the interval.
1978
+ */
1979
+ export type ChannelProvisioningStatus = 'pending' | 'polling' | 'done' | 'expired' | 'denied' | 'canceled' | 'failed';
1980
+ export interface ChannelProvisioningSession {
1981
+ id: string;
1982
+ org_id: string;
1983
+ agent_id: string;
1984
+ provider: ChannelProvider;
1985
+ created_by: string;
1986
+ status: ChannelProvisioningStatus;
1987
+ poll_interval_seconds: number;
1988
+ /** Set when status = 'done': the minted connection. */
1989
+ connection_id?: string;
1990
+ /** Terminal detail: access_denied / expired_token / domain_switched / connection_exists / alias_conflict / internal. */
1991
+ error_code?: string;
1992
+ expires_at: string;
1993
+ created_at: string;
1994
+ updated_at: string;
1995
+ /** QR target — present on live (pending/polling) sessions only. */
1996
+ verification_url?: string;
1997
+ user_code?: string;
1998
+ }
1999
+ export interface InitiateChannelProvisioningInput {
2000
+ agent_id: string;
2001
+ provider: ChannelProvider;
2002
+ }
2003
+ export type DispatchEventType = 'message' | 'task_assign' | 'task_update' | 'task_comment' | 'wiki_comment' | 'schedule.fire' | 'external_trigger' | 'approval_decided' | 'channel_message';
1815
2004
  export type DispatchStatus = 'pending' | 'received' | 'acked';
1816
2005
  export type DispatchDeliveryReason = 'mention' | 'watcher' | 'assignee' | 'creator';
1817
2006
  export interface DispatchEvent {
@@ -1924,10 +2113,13 @@ export type WsEventMap = {
1924
2113
  'invitation.revoked': InvitationRevokedEventData;
1925
2114
  'org.join_request.new': OrgJoinRequestNewEventData;
1926
2115
  'org.invite_link.joined': OrgInviteLinkJoinedEventData;
2116
+ 'org.member.removed': OrgMemberRemovedData;
1927
2117
  'agent_config.update': AgentConfigUpdateData;
1928
2118
  'presence.update': PresenceUpdateData;
1929
2119
  'wiki.changeset.created': WikiChangesetCreatedData;
1930
2120
  'wiki.changeset.updated': WikiChangesetUpdatedData;
2121
+ 'wiki.deleted': WikiDeletedData;
2122
+ 'wiki.restored': WikiRestoredData;
1931
2123
  'comment.created': CommentCreatedData;
1932
2124
  'comment.updated': CommentUpdatedData;
1933
2125
  'comment.deleted': CommentDeletedData;
@@ -1951,6 +2143,7 @@ export type WsEventMap = {
1951
2143
  'machine.agent.attached': MachineAgentAttachedData;
1952
2144
  'machine.agent.detached': MachineAgentDetachedData;
1953
2145
  'machine.config.updated': MachineConfigUpdatedData;
2146
+ 'machine.agent_config.updated': MachineAgentConfigUpdatedData;
1954
2147
  'machine.workspace.setup.requested': MachineWorkspaceSetupRequestedData;
1955
2148
  'machine.stop': MachineStopData;
1956
2149
  'machine.filesystem.browse': MachineFilesystemBrowseData;
@@ -2008,7 +2201,14 @@ export interface PlatformConfigResponse {
2008
2201
  version: string;
2009
2202
  schema_version: number;
2010
2203
  min_plugin_version?: string;
2204
+ /** @deprecated V1-compat only — old bridges read this for override-vs-floor. New bridges read `model_is_pin`. */
2011
2205
  mode?: string;
2206
+ /**
2207
+ * Whether the delivered model is an operator PIN (override, beats the runtime's
2208
+ * env/default) vs a catalog FLOOR (loses to env). Optional: an old server omits
2209
+ * it and the bridge falls back to the legacy `model_management`-derived signal.
2210
+ */
2211
+ model_is_pin?: boolean;
2012
2212
  config: Record<string, unknown>;
2013
2213
  }
2014
2214
  export interface AgentConfigUpdateData {
@@ -2267,6 +2467,58 @@ export interface ComputePricing {
2267
2467
  created_at: string;
2268
2468
  }
2269
2469
  export type ComputePricingResponse = Record<string, ComputePricing>;
2470
+ /**
2471
+ * Per-runtime capability row from GET /api/v1/runtimes (public, no auth).
2472
+ * Server SSOT: server/pkg/hosting/capabilities.go RuntimeCapability — the
2473
+ * data source for the create/settings interlock (which compute × intelligence
2474
+ * × model combinations are offerable per runtime).
2475
+ */
2476
+ export interface RuntimeCapability {
2477
+ runtime: string;
2478
+ /** Where the runtime can run: "hosted" and/or "local". Hermes is cloud-only. */
2479
+ compute_modes: string[];
2480
+ /**
2481
+ * Provider family the runtime's OWN credentials can serve ("anthropic" /
2482
+ * "openai"), or "any" for family-agnostic runtimes. Own-route restriction
2483
+ * only — see cross_family_via_parall.
2484
+ */
2485
+ native_model_family: string;
2486
+ /** On the Parall proxy route any catalog model is allowed regardless of family. */
2487
+ cross_family_via_parall: boolean;
2488
+ /** Whether a pinned model is delivered when the agent runs on its own credentials. */
2489
+ own_route_model_pin: boolean;
2490
+ /** Catalog default the UI pre-selects for this runtime. */
2491
+ recommended_model: string;
2492
+ }
2493
+ /**
2494
+ * Catalog entry from GET /api/v1/models (public, no auth) — the DB-backed
2495
+ * platform model catalog. Server SSOT: handler.PlatformModelDTO
2496
+ * (docs/engineering-design/model-catalog-design.md §6.1). Replaces the
2497
+ * compile-time PLATFORM_MODELS constant as the picker data source.
2498
+ */
2499
+ export interface PlatformModelInfo {
2500
+ id: string;
2501
+ name: string;
2502
+ /** Provider family ("anthropic", "openai", "google", ...). */
2503
+ family: string;
2504
+ contextWindow: number;
2505
+ maxTokens: number;
2506
+ effortLevels?: string[];
2507
+ /** Runtime type → runtime-native CLI model name. */
2508
+ runtime_names?: Record<string, string>;
2509
+ /** Set on client-behavior variants (the "(1M)" entries) — see isPlatformModelSelectableForRuntime. */
2510
+ upstream_id?: string;
2511
+ /** Display hints: "recommended" / "new" / "beta". */
2512
+ tags?: string[];
2513
+ sort_order: number;
2514
+ /** True only for a legacy entry appended via include_model (not in the active catalog). */
2515
+ hidden?: boolean;
2516
+ }
2517
+ export interface PlatformModelsResponse {
2518
+ data: PlatformModelInfo[];
2519
+ /** Catalog content hash — changes whenever the catalog changes. */
2520
+ version: string;
2521
+ }
2270
2522
  export interface MachinePreset {
2271
2523
  key: string;
2272
2524
  cpu_cores: number;
@@ -2321,7 +2573,8 @@ export interface BillingMachineStoppedEvent {
2321
2573
  export interface BillingInsufficientEvent {
2322
2574
  org_id: string;
2323
2575
  }
2324
- export type ClipSourceType = 'registry' | 'custom' | 'builtin';
2576
+ export type ClipSourceType = 'registry' | 'custom' | 'builtin' | 'channel';
2577
+ export type UserClipSourceType = 'registry' | 'custom' | 'builtin';
2325
2578
  export type ClipStatus = 'active' | 'disabled';
2326
2579
  export interface Clip {
2327
2580
  id: string;
@@ -2353,7 +2606,7 @@ export interface CreateClipRequest {
2353
2606
  display_name?: string;
2354
2607
  description?: string;
2355
2608
  manifest?: Record<string, unknown>;
2356
- source_type?: ClipSourceType;
2609
+ source_type?: UserClipSourceType;
2357
2610
  source_ref?: string;
2358
2611
  version?: string;
2359
2612
  machine_id: string;
@@ -2416,6 +2669,14 @@ export type BrowserProfileStatus = 'pending' | 'running' | 'stopped' | 'error' |
2416
2669
  * required), `hosted` runs on the platform pool (machine_id null).
2417
2670
  */
2418
2671
  export type BrowserPlacement = 'byoc' | 'hosted';
2672
+ /** Deployment-wide hosted browser runtime availability (the controller startup
2673
+ * gate). Drives whether the create UI offers the platform-hosted placement; it
2674
+ * is org-scoped only for auth — the value itself is the same for every org.
2675
+ * Fail-closed: the server reports `available: false` if it cannot verify. */
2676
+ export interface BrowserRuntimeStatus {
2677
+ available: boolean;
2678
+ reason?: string;
2679
+ }
2419
2680
  export interface BrowserProfile {
2420
2681
  id: string;
2421
2682
  org_id: string;
@@ -2488,6 +2749,12 @@ export interface MachineBrowserProfile {
2488
2749
  proxy_server?: string | null;
2489
2750
  proxy_username?: string | null;
2490
2751
  proxy_password?: string | null;
2752
+ /** Per-profile fencing tokens (PR #1650): lifecycle_generation bumps on every
2753
+ * open/stop/reset (daemon reports under it; stale reports rejected);
2754
+ * reset_generation bumps only on reset (daemon wipes local state on reconnect
2755
+ * when this is newer than what it last applied). Default 0. */
2756
+ lifecycle_generation: number;
2757
+ reset_generation: number;
2491
2758
  }
2492
2759
  export interface BrowserProfileConsent {
2493
2760
  id: string;
@@ -2616,10 +2883,18 @@ export type SearchParams = {
2616
2883
  types?: string;
2617
2884
  chat_id?: string;
2618
2885
  limit?: number;
2886
+ /** Page offset into the per-type candidate pool (default 0). Reachability is capped — past the pool, results are empty with `has_more` false. */
2887
+ offset?: number;
2619
2888
  /** Wiki document-type facet (frontmatter `type`) — a separate axis from `types`. */
2620
2889
  wiki_type?: string;
2621
- /** RFC3339 or YYYY-MM-DD; narrows messages (created_at) and tasks (updated_at). Not applied to wiki. */
2890
+ /** RFC3339 or YYYY-MM-DD lower bound; narrows messages (created_at) and tasks (updated_at). Not applied to wiki. */
2622
2891
  since?: string;
2892
+ /** Sender filter (Slack `from:`) — user id. Messages only; tasks/wiki carry no sender. */
2893
+ from?: string;
2894
+ /** Result order: `relevance` (default, RRF hybrid) or `recent` (newest-first). Recent applies to messages/tasks; wiki stays relevance (no authored timestamp). */
2895
+ order?: 'relevance' | 'recent';
2896
+ /** Collapse cross-chat message results to one hit per chat (default true). Pass false on the full results page to page every match. No effect when `chat_id` is set. */
2897
+ collapse_by_chat?: boolean;
2623
2898
  };
2624
2899
  export interface SearchMessageResult {
2625
2900
  message_id: string;
@@ -2660,6 +2935,12 @@ export interface SearchResponse {
2660
2935
  messages: SearchMessageResult[];
2661
2936
  tasks: SearchTaskResult[];
2662
2937
  wiki: SearchWikiResult[];
2938
+ /** Per-type flag: more results remain past the returned page (within the reachable pool). Lets a tabbed results UI page each type independently. Optional for resilience to older payloads; clients default to all-false. */
2939
+ has_more?: {
2940
+ messages: boolean;
2941
+ tasks: boolean;
2942
+ wiki: boolean;
2943
+ };
2663
2944
  }
2664
2945
  export {};
2665
2946
  //# sourceMappingURL=types.d.ts.map