@parall/daemon 1.48.0 → 1.50.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.
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "1.48.0",
3
- "built_at": "2026-07-21T07:52:25.995Z",
2
+ "version": "1.50.0",
3
+ "built_at": "2026-07-27T10:07:52.208Z",
4
4
  "min_node_version": "20.0.0",
5
5
  "files": {
6
6
  "bb-browser-daemon.js": {
@@ -16,29 +16,29 @@
16
16
  "size": 18
17
17
  },
18
18
  "parall-browser-pod.js": {
19
- "sha256": "d35ed50bf1fc1266cb8001c9dd3e694dff9847738d125582ccaca81bc3db45d5",
20
- "size": 2894062
19
+ "sha256": "0025fc6f85af4dcfe22a6d532c322bd2bf064f83378d88c77cbcca00a469ed82",
20
+ "size": 2901740
21
21
  },
22
22
  "parall-channel-exec.js": {
23
23
  "sha256": "7c2a6e12483a45e9eb4a42cd7d4cdd3c4fa21dd09ac1347d9a3e177b4ddee930",
24
24
  "size": 7220
25
25
  },
26
26
  "parall-claude-agent.js": {
27
- "sha256": "852f7b7d3840f243d39d5ec2f23735ee80fce6fb9c5f8ab5ff1cfb7d5281ad51",
28
- "size": 2727384
27
+ "sha256": "3786edb7e4d2dc22a95f2789416ee1fa1bf191e166d443c868cd8772a6033278",
28
+ "size": 2737538
29
29
  },
30
30
  "parall-codex-agent.js": {
31
- "sha256": "c331674763f9c237d6a3ee03d9bc8f4137c154e2e576caa5fd23bbe32f0f2b49",
32
- "size": 2769124
31
+ "sha256": "ba13d01de7a89860d75bbc1abd5ea5c9c605cc9104161a8d7960c38f84f7870c",
32
+ "size": 2779278
33
33
  },
34
34
  "parall-daemon.js": {
35
- "sha256": "0c41c7255f98339d095faf96e7b712c150d442696eefcb3965d3e59ad0f251fa",
36
- "size": 2955625
35
+ "sha256": "a135d16586ea01a0ed3aa811dac509827efc76d2eb14de6430e1421590afc70e",
36
+ "size": 2963977
37
37
  },
38
38
  "parall-openclaw-agent.js": {
39
39
  "sha256": "856a1c3a9ae0ffef8efe2481fa1171dbeb1d67cccb88616aa9bf16da96a69355",
40
40
  "size": 9923
41
41
  }
42
42
  },
43
- "signature": "u4mhCrFPCejnf/mBjQdNvKkDaQE0MjumZpTc5eHA+Qz7cbemy1WDRhy+j0A4pMvBezJqwUIoyQqn84jfjcgBDA=="
43
+ "signature": "KflWD7Xe1CWN7YZuBW3BTXirw4TfZITSwiKrRO+SU/OXNfXf3IC0nm4OWsR5zHb9J+y8cmqzpK2Zz8vXXSgwDw=="
44
44
  }
@@ -63529,6 +63529,12 @@ var ENDPOINTS = {
63529
63529
  ORG_MEMBER: (orgId, userId) => `${API_BASE}/orgs/${orgId}/members/${userId}`,
63530
63530
  ORG_MEMBER_CHATS: (orgId, memberId) => `${API_BASE}/orgs/${orgId}/members/${memberId}/chats`,
63531
63531
  ORG_MEMBER_TASKS: (orgId, memberId) => `${API_BASE}/orgs/${orgId}/members/${memberId}/tasks`,
63532
+ // Org-scoped public profile (title / description). GET readable by every
63533
+ // active member; PATCH is CAS-guarded (expected_version).
63534
+ ORG_MEMBER_PROFILE: (orgId, userId) => `${API_BASE}/orgs/${orgId}/members/${userId}/profile`,
63535
+ // Private agent Instructions — visibility gated server-side
63536
+ // (agent self + Human org admin/owner). Never cached.
63537
+ AGENT_INSTRUCTIONS: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/instructions`,
63532
63538
  REF_SEARCH: (orgId) => `${API_BASE}/orgs/${orgId}/refs/search`,
63533
63539
  // Direct messages (org-scoped, atomic find-or-create + send)
63534
63540
  DM: (orgId) => `${API_BASE}/orgs/${orgId}/dm`,
@@ -63552,6 +63558,8 @@ var ENDPOINTS = {
63552
63558
  MESSAGE_WATCH: (id) => `${API_BASE}/messages/${id}/watch`,
63553
63559
  MESSAGE_WATCHERS: (id) => `${API_BASE}/messages/${id}/watchers`,
63554
63560
  MESSAGE_WATCHING: (id) => `${API_BASE}/messages/${id}/watching`,
63561
+ MESSAGE_REACTIONS: (id) => `${API_BASE}/messages/${id}/reactions`,
63562
+ MESSAGE_REACTION: (id, emoji) => `${API_BASE}/messages/${id}/reactions/${encodeURIComponent(emoji)}`,
63555
63563
  // Upload (org-scoped)
63556
63564
  UPLOAD_PRESIGN: (orgId) => `${API_BASE}/orgs/${orgId}/upload/presign`,
63557
63565
  UPLOAD_COMPLETE: (orgId) => `${API_BASE}/orgs/${orgId}/upload/complete`,
@@ -63789,11 +63797,13 @@ var ENDPOINTS = {
63789
63797
  UNREAD: `${API_BASE}/me/unread`,
63790
63798
  ORG_UNREAD: (orgId) => `${API_BASE}/orgs/${orgId}/unread`,
63791
63799
  CHAT_READ: (orgId, chatId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/read`,
63800
+ CHAT_READ_ALL: (orgId, chatId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/read-all`,
63792
63801
  THREAD_UNREAD: (orgId, chatId, threadRootId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/threads/${threadRootId}/unread`,
63793
63802
  THREAD_READ: (orgId, chatId, threadRootId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/threads/${threadRootId}/read`,
63794
63803
  // References (org-scoped)
63795
63804
  REFS_RESOLVE: (orgId) => `${API_BASE}/orgs/${orgId}/refs/resolve`,
63796
63805
  REFS_BACKLINKS: (orgId) => `${API_BASE}/orgs/${orgId}/refs/backlinks`,
63806
+ REFS_OUTBOUND: (orgId) => `${API_BASE}/orgs/${orgId}/refs/outbound`,
63797
63807
  REFS_GRAPH: (orgId) => `${API_BASE}/orgs/${orgId}/refs/graph`,
63798
63808
  REFS_CHECK: (orgId) => `${API_BASE}/orgs/${orgId}/refs/check`,
63799
63809
  // Platform config (agent-scoped, not org-scoped)
@@ -63808,6 +63818,11 @@ var ENDPOINTS = {
63808
63818
  SEARCH: (orgId) => `${API_BASE}/orgs/${orgId}/search`,
63809
63819
  // Feature flags (org-scoped, server-evaluated)
63810
63820
  FEATURE_FLAGS: (orgId) => `${API_BASE}/orgs/${orgId}/feature-flags`,
63821
+ // Team templates (org-scoped, owner/admin only)
63822
+ TEMPLATES: (orgId) => `${API_BASE}/orgs/${orgId}/templates`,
63823
+ TEMPLATE: (orgId, templateId) => `${API_BASE}/orgs/${orgId}/templates/${templateId}`,
63824
+ TEMPLATE_DEPLOYMENTS: (orgId) => `${API_BASE}/orgs/${orgId}/template-deployments`,
63825
+ TEMPLATE_DEPLOYMENT: (orgId, deploymentId) => `${API_BASE}/orgs/${orgId}/template-deployments/${deploymentId}`,
63811
63826
  // Billing & Credits (org-scoped)
63812
63827
  BILLING: (orgId) => `${API_BASE}/orgs/${orgId}/billing`,
63813
63828
  BILLING_TRANSACTIONS: (orgId) => `${API_BASE}/orgs/${orgId}/billing/transactions`,
@@ -63855,7 +63870,13 @@ var ENDPOINTS = {
63855
63870
  ORG_EDGE_DEVICE_UNREGISTER: (orgId, edgeId) => `/api/v1/orgs/${orgId}/edge/${edgeId}/unregister`,
63856
63871
  ORG_EDGE_ONBOARDING: (orgId) => `/api/v1/orgs/${orgId}/edge/onboarding`,
63857
63872
  ORG_EDGE_PROFILES: (orgId, edgeId) => `/api/v1/orgs/${orgId}/edge/${edgeId}/profiles`,
63873
+ // Per-profile egress proxy (hosted Cloud Profiles; manager-only, human-only).
63874
+ ORG_EDGE_PROFILE_PROXY: (orgId, edgeId, profileName) => `/api/v1/orgs/${orgId}/edge/${edgeId}/profiles/${encodeURIComponent(profileName)}/proxy`,
63858
63875
  ORG_EDGE_EXEC: (orgId) => `/api/v1/orgs/${orgId}/edge/exec`,
63876
+ // Cloud Edge live viewer command (V1b) — api-server, gated on cap:edge-viewer.
63877
+ // Same request/reply shape as the v2 browser-profile viewer, on the v3 edge
63878
+ // pipe. Additive: does NOT replace BROWSER_PROFILE_VIEWER_COMMAND.
63879
+ ORG_EDGE_VIEWER_COMMAND: (orgId, edgeId) => `/api/v1/orgs/${orgId}/edge/${edgeId}/viewer/command`,
63859
63880
  CLIP_CONNECTIONS: (orgId, clipId) => `/api/v1/orgs/${orgId}/clip-registry/${clipId}/connections`,
63860
63881
  CLIP_CONNECTION: (orgId, connId) => `/api/v1/orgs/${orgId}/clip-connections/${connId}`,
63861
63882
  // Clip registry (v3, org-scoped, served by api-server — `crg_` entries; the
@@ -64020,7 +64041,7 @@ var ParallClient = class _ParallClient {
64020
64041
  if (qs)
64021
64042
  url += `?${qs}`;
64022
64043
  }
64023
- const headers = this.buildHeaders(path7);
64044
+ const headers = this.buildHeaders(path7, opts?.headers);
64024
64045
  const timeoutSignal = AbortSignal.timeout(opts?.timeoutMs ?? 15e3);
64025
64046
  const signal = opts?.signal ? AbortSignal.any([opts.signal, timeoutSignal]) : timeoutSignal;
64026
64047
  let res;
@@ -64236,6 +64257,30 @@ var ParallClient = class _ParallClient {
64236
64257
  async updateOrgMember(orgId, userId, role) {
64237
64258
  return this.request("PATCH", ENDPOINTS.ORG_MEMBER(orgId, userId), { role });
64238
64259
  }
64260
+ /** Org-scoped public profile (title / description) of any active member. */
64261
+ async getMemberProfile(orgId, userId) {
64262
+ return this.request("GET", ENDPOINTS.ORG_MEMBER_PROFILE(orgId, userId));
64263
+ }
64264
+ /**
64265
+ * CAS full-replacement of a member's public profile. Humans edit their
64266
+ * own; Human org admins/owners edit agents'. A stale expected_version
64267
+ * gets 409 PROFILE_VERSION_CONFLICT with error.details.current_version.
64268
+ */
64269
+ async updateMemberProfile(orgId, userId, req) {
64270
+ return this.request("PATCH", ENDPOINTS.ORG_MEMBER_PROFILE(orgId, userId), req);
64271
+ }
64272
+ /** Private agent Instructions — agent self or Human org admin/owner only. */
64273
+ async getAgentInstructions(orgId, agentId) {
64274
+ return this.request("GET", ENDPOINTS.AGENT_INSTRUCTIONS(orgId, agentId));
64275
+ }
64276
+ /**
64277
+ * CAS update of the private Instructions (Human org admin/owner only).
64278
+ * A stale expected_version gets 409 INSTRUCTIONS_VERSION_CONFLICT with
64279
+ * error.details.current_version.
64280
+ */
64281
+ async updateAgentInstructions(orgId, agentId, req) {
64282
+ return this.request("PATCH", ENDPOINTS.AGENT_INSTRUCTIONS(orgId, agentId), req);
64283
+ }
64239
64284
  // Member activity surfaces — chats the member participates in within this org,
64240
64285
  // ordered by most recent activity. Powers the member profile Activity tab.
64241
64286
  async getMemberChats(orgId, memberId, params) {
@@ -64426,6 +64471,14 @@ var ParallClient = class _ParallClient {
64426
64471
  async getMessageReplies(id, params) {
64427
64472
  return this.request("GET", ENDPOINTS.MESSAGE_REPLIES(id), void 0, params);
64428
64473
  }
64474
+ // ---- Reactions ----
64475
+ async toggleReaction(messageId, emoji) {
64476
+ return this.request("PUT", ENDPOINTS.MESSAGE_REACTION(messageId, emoji));
64477
+ }
64478
+ async listReactions(messageId) {
64479
+ const res = await this.request("GET", ENDPOINTS.MESSAGE_REACTIONS(messageId));
64480
+ return res.reactions;
64481
+ }
64429
64482
  // ---- File Upload ----
64430
64483
  async getUploadPresignUrl(orgId, req) {
64431
64484
  return this.request("POST", ENDPOINTS.UPLOAD_PRESIGN(orgId), req);
@@ -64801,6 +64854,15 @@ var ParallClient = class _ParallClient {
64801
64854
  async browserViewerCommand(orgId, profileId, req, opts) {
64802
64855
  return this.request("POST", ENDPOINTS.BROWSER_PROFILE_VIEWER_COMMAND(orgId, profileId), req, void 0, false, opts);
64803
64856
  }
64857
+ /**
64858
+ * Drive the Cloud Edge live viewer (V1b, design §6): WebRTC signaling + input +
64859
+ * tab nav for a hosted browser (Cloud Profile). Same request/reply shape as
64860
+ * browserViewerCommand, on the v3 edge pipe; additive — the v2 browser-profile
64861
+ * viewer is unchanged.
64862
+ */
64863
+ async edgeViewerCommand(orgId, edgeId, req, opts) {
64864
+ return this.request("POST", ENDPOINTS.ORG_EDGE_VIEWER_COMMAND(orgId, edgeId), req, void 0, false, opts);
64865
+ }
64804
64866
  async resizeMachine(orgId, machineId, spec) {
64805
64867
  return this.request("PATCH", ENDPOINTS.MACHINE_SPEC(orgId, machineId), spec);
64806
64868
  }
@@ -64827,14 +64889,23 @@ var ParallClient = class _ParallClient {
64827
64889
  }
64828
64890
  // Wiki mount/token methods removed — wiki-service handles all wiki endpoints.
64829
64891
  // ---- Unread ----
64830
- async getUnreadCounts(orgId) {
64892
+ async getUnreadCounts(orgId, opts) {
64831
64893
  const endpoint = orgId ? ENDPOINTS.ORG_UNREAD(orgId) : ENDPOINTS.UNREAD;
64832
- const res = await this.request("GET", endpoint);
64894
+ const res = await this.request("GET", endpoint, void 0, {
64895
+ include_thread_replies: opts?.includeThreadReplies ? "true" : void 0
64896
+ });
64833
64897
  return res.data;
64834
64898
  }
64835
64899
  async markRead(orgId, chatId, messageId) {
64836
64900
  return this.request("POST", ENDPOINTS.CHAT_READ(orgId, chatId), { message_id: messageId });
64837
64901
  }
64902
+ /** Mark everything in a chat read: the channel cursor jumps to the latest
64903
+ * top-level message and every thread cursor to its latest reply, in one
64904
+ * idempotent call. The server echoes the same per-cursor WS events the
64905
+ * single-cursor routes emit and auto-clears covered inbox items. */
64906
+ async markAllRead(orgId, chatId) {
64907
+ return this.request("POST", ENDPOINTS.CHAT_READ_ALL(orgId, chatId));
64908
+ }
64838
64909
  async getThreadUnread(orgId, chatId, threadRootId) {
64839
64910
  return this.request("GET", ENDPOINTS.THREAD_UNREAD(orgId, chatId, threadRootId));
64840
64911
  }
@@ -65509,6 +65580,16 @@ var ParallClient = class _ParallClient {
65509
65580
  async getBacklinks(orgId, params) {
65510
65581
  return this.request("GET", ENDPOINTS.REFS_BACKLINKS(orgId), void 0, params);
65511
65582
  }
65583
+ /**
65584
+ * Outbound prll:// refs authored in a set of sources, as raw ref_links rows
65585
+ * (dedupe/group client-side). Pass `{ thread_root_id }` to list a whole
65586
+ * thread's refs (root + all replies, resolved server-side — the client's
65587
+ * reply window may be partial), or `{ source_type, source_ids }` for
65588
+ * explicit sources (max 500; v1 accepts only message sources).
65589
+ */
65590
+ async listOutboundRefs(orgId, req) {
65591
+ return this.request("POST", ENDPOINTS.REFS_OUTBOUND(orgId), req);
65592
+ }
65512
65593
  /**
65513
65594
  * Bounded multi-hop walk of the prll:// reference graph around `uri`. `uri`
65514
65595
  * must be an entity-level prll:// URI — a refined URI (path/query/fragment) is
@@ -65543,6 +65624,22 @@ var ParallClient = class _ParallClient {
65543
65624
  async getFeatureFlags(orgId) {
65544
65625
  return this.request("GET", ENDPOINTS.FEATURE_FLAGS(orgId));
65545
65626
  }
65627
+ // ---- Official Template catalog (org-contextual owner/admin reads + Hire) ----
65628
+ async listOfficialTemplates(orgId) {
65629
+ const response = await this.request("GET", ENDPOINTS.TEMPLATES(orgId));
65630
+ return response.templates ?? [];
65631
+ }
65632
+ async getOfficialTemplate(orgId, templateId) {
65633
+ return this.request("GET", ENDPOINTS.TEMPLATE(orgId, templateId));
65634
+ }
65635
+ async deployTemplate(orgId, request) {
65636
+ return this.request("POST", ENDPOINTS.TEMPLATE_DEPLOYMENTS(orgId), request, void 0, false, {
65637
+ timeoutMs: 185e3
65638
+ });
65639
+ }
65640
+ async getTemplateDeployment(orgId, deploymentId) {
65641
+ return this.request("GET", ENDPOINTS.TEMPLATE_DEPLOYMENT(orgId, deploymentId));
65642
+ }
65546
65643
  // ---- Billing & Credits (org-scoped) ----
65547
65644
  async getBilling(orgId) {
65548
65645
  return this.request("GET", ENDPOINTS.BILLING(orgId));
@@ -65788,6 +65885,43 @@ var ParallClient = class _ParallClient {
65788
65885
  async listEdgeProfiles(orgId, edgeId) {
65789
65886
  return this.request("GET", ENDPOINTS.ORG_EDGE_PROFILES(orgId, edgeId));
65790
65887
  }
65888
+ /**
65889
+ * Read a hosted Cloud Profile's egress-proxy status (manager-only: hosted
65890
+ * human maintainer or org admin). Sanitized — the password never comes back.
65891
+ * Typed errors: `EDGE_NOT_HOSTED` (BYOC device), `PROXY_CONFIG_CORRUPT` /
65892
+ * validation codes as 422 when a stored config no longer passes current rules.
65893
+ * `can_mutate` and `lease_status` are the authoritative idle gate; device
65894
+ * list status is not a substitute.
65895
+ */
65896
+ async getEdgeProfileProxy(orgId, edgeId, profileName) {
65897
+ return this.request("GET", ENDPOINTS.ORG_EDGE_PROFILE_PROXY(orgId, edgeId, profileName));
65898
+ }
65899
+ /**
65900
+ * Set/replace the profile's egress proxy (full triple every time) — IDLE
65901
+ * ONLY: while the profile's hosted browser is running (a viewer session is
65902
+ * open or a pod is otherwise live) the server answers 409
65903
+ * `EDGE_PROFILE_IN_USE`; close the viewer, wait for idle scale-to-zero, and
65904
+ * retry. The next cold start uses the new egress; browser login state is
65905
+ * preserved across it. Other typed errors: the validation vocabulary
65906
+ * (`INVALID_PROXY_SERVER`, `PROXY_AUTH_INCOMPLETE`,
65907
+ * `PROXY_SERVER_FORBIDDEN_TARGET`, …), `EDGE_DELETING` (409), and
65908
+ * `SECRETBOX_UNCONFIGURED` (503 — server cannot store credentials safely),
65909
+ * and `EDGE_PROFILE_PROXY_STALE` (409 — expectedVersion lost a tab race).
65910
+ */
65911
+ async setEdgeProfileProxy(orgId, edgeId, profileName, req, expectedVersion) {
65912
+ return this.request("PUT", ENDPOINTS.ORG_EDGE_PROFILE_PROXY(orgId, edgeId, profileName), req, void 0, false, {
65913
+ headers: expectedVersion ? { "If-Match": `"proxy-${expectedVersion}"` } : void 0
65914
+ });
65915
+ }
65916
+ /**
65917
+ * Clear the profile's egress proxy; the next pod start egresses directly.
65918
+ * Idle-only like set — 409 `EDGE_PROFILE_IN_USE` while the browser is live.
65919
+ */
65920
+ async clearEdgeProfileProxy(orgId, edgeId, profileName, expectedVersion) {
65921
+ return this.request("DELETE", ENDPOINTS.ORG_EDGE_PROFILE_PROXY(orgId, edgeId, profileName), void 0, void 0, false, {
65922
+ headers: expectedVersion ? { "If-Match": `"proxy-${expectedVersion}"` } : void 0
65923
+ });
65924
+ }
65791
65925
  /**
65792
65926
  * Execute a registry clip command on an Edge device.
65793
65927
  *
@@ -65856,6 +65990,8 @@ var ApiError = class extends Error {
65856
65990
  status;
65857
65991
  code;
65858
65992
  extras;
65993
+ /** Retry-After delta seconds when the server supplies one. */
65994
+ retryAfterSeconds;
65859
65995
  /** Attempted action (authorization denials) — e.g. "chat.add_member". */
65860
65996
  action;
65861
65997
  /** Target resource URI that was evaluated — e.g. "prll://cht_…". */
@@ -65875,6 +66011,9 @@ function buildApiError(res, rawErrorBody) {
65875
66011
  const errMsg2 = (typeof errorObj?.message === "string" ? errorObj.message : void 0) ?? (typeof errorBody.message === "string" ? errorBody.message : void 0) ?? (typeof errorBody.error === "string" ? errorBody.error : void 0);
65876
66012
  const errCode = (typeof errorObj?.code === "string" ? errorObj.code : void 0) ?? (typeof errorBody.code === "string" ? errorBody.code : void 0);
65877
66013
  const apiError = new ApiError(res.status, errMsg2 ?? res.statusText, errCode);
66014
+ const retryAfter = Number(res.headers?.get("Retry-After"));
66015
+ if (Number.isFinite(retryAfter) && retryAfter > 0)
66016
+ apiError.retryAfterSeconds = retryAfter;
65878
66017
  const anchors = errorObj ?? errorBody;
65879
66018
  if (typeof anchors.action === "string")
65880
66019
  apiError.action = anchors.action;