@parall/daemon 1.46.0 → 1.47.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/bundle/manifest.json +11 -11
- package/bundle/parall-browser-pod.js +70 -4
- package/bundle/parall-claude-agent.js +70 -4
- package/bundle/parall-codex-agent.js +70 -4
- package/bundle/parall-daemon.js +602 -229
- package/dist/local-control.d.ts +59 -0
- package/dist/local-control.d.ts.map +1 -0
- package/dist/local-control.js +230 -0
- package/dist/local-profile-control.d.ts +77 -0
- package/dist/local-profile-control.d.ts.map +1 -0
- package/dist/local-profile-control.js +108 -0
- package/dist/supervisor.d.ts +13 -0
- package/dist/supervisor.d.ts.map +1 -1
- package/dist/supervisor.js +42 -0
- package/package.json +6 -6
package/bundle/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
3
|
-
"built_at": "2026-07-
|
|
2
|
+
"version": "1.47.0",
|
|
3
|
+
"built_at": "2026-07-20T03:34:22.601Z",
|
|
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": "
|
|
20
|
-
"size":
|
|
19
|
+
"sha256": "a3dcf5eaae3552b8c8220231dfc1af9abc07991d5e9d18a33c1e6e94550c5740",
|
|
20
|
+
"size": 2889611
|
|
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": "
|
|
28
|
-
"size":
|
|
27
|
+
"sha256": "ba2f015614ac1b2177fb1326129aba73ed1575bad646f279c2e4b3e7106a838c",
|
|
28
|
+
"size": 2721373
|
|
29
29
|
},
|
|
30
30
|
"parall-codex-agent.js": {
|
|
31
|
-
"sha256": "
|
|
32
|
-
"size":
|
|
31
|
+
"sha256": "35bcc6c1651f40e4e169eef9afb1969ca97bb946ebc6f80beb1eef61cf76c65f",
|
|
32
|
+
"size": 2763113
|
|
33
33
|
},
|
|
34
34
|
"parall-daemon.js": {
|
|
35
|
-
"sha256": "
|
|
36
|
-
"size":
|
|
35
|
+
"sha256": "5bcbd939b1c753687ec7a79f5df98210aee6d92d825e043d4ad1b38b2daa5883",
|
|
36
|
+
"size": 2950822
|
|
37
37
|
},
|
|
38
38
|
"parall-openclaw-agent.js": {
|
|
39
39
|
"sha256": "856a1c3a9ae0ffef8efe2481fa1171dbeb1d67cccb88616aa9bf16da96a69355",
|
|
40
40
|
"size": 9923
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
|
-
"signature": "
|
|
43
|
+
"signature": "jEnwJR/MRRqU9qfDoaqSVZdhjBLn4MLME3hjhe5l5AM7KRGMlrbTjc2r/8Vq3STH/d8RCJl++tBgL0rB31i+CA=="
|
|
44
44
|
}
|
|
@@ -63685,10 +63685,17 @@ var ENDPOINTS = {
|
|
|
63685
63685
|
CHANNEL_CONVERSATION_SESSION: (orgId, conversationId) => `${API_BASE}/orgs/${orgId}/channel-conversations/${conversationId}/session`,
|
|
63686
63686
|
CHANNEL_MESSAGE: (orgId, messageId) => `${API_BASE}/orgs/${orgId}/channel-messages/${messageId}`,
|
|
63687
63687
|
CHANNEL_PROVISIONING: (orgId) => `${API_BASE}/orgs/${orgId}/channel-provisioning`,
|
|
63688
|
+
CHANNEL_SLACK_MANIFEST_LINK: (orgId) => `${API_BASE}/orgs/${orgId}/channel-provisioning/slack/manifest-link`,
|
|
63688
63689
|
CHANNEL_PROVISIONING_SESSION: (orgId, sessionId) => `${API_BASE}/orgs/${orgId}/channel-provisioning/${sessionId}`,
|
|
63689
63690
|
CHANNEL_PROVISIONING_CANCEL: (orgId, sessionId) => `${API_BASE}/orgs/${orgId}/channel-provisioning/${sessionId}/cancel`,
|
|
63690
63691
|
// Tier-B platform verb (agent-only): send one message as the bound bot.
|
|
63691
63692
|
CHANNEL_SEND: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/channel-send`,
|
|
63693
|
+
// Tier-B read verbs (agent-only): workspace visibility as the bot sees it.
|
|
63694
|
+
SLACK_CHANNELS: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/channels`,
|
|
63695
|
+
SLACK_USERS: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/users`,
|
|
63696
|
+
SLACK_HISTORY: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/history`,
|
|
63697
|
+
SLACK_MEMBERS: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/members`,
|
|
63698
|
+
SLACK_STATUS: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/status`,
|
|
63692
63699
|
// Invitations (org-scoped, admin)
|
|
63693
63700
|
ORG_INVITATIONS: (orgId) => `${API_BASE}/orgs/${orgId}/invitations`,
|
|
63694
63701
|
ORG_INVITATION: (orgId, invId) => `${API_BASE}/orgs/${orgId}/invitations/${invId}`,
|
|
@@ -63783,6 +63790,7 @@ var ENDPOINTS = {
|
|
|
63783
63790
|
ORG_UNREAD: (orgId) => `${API_BASE}/orgs/${orgId}/unread`,
|
|
63784
63791
|
CHAT_READ: (orgId, chatId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/read`,
|
|
63785
63792
|
THREAD_UNREAD: (orgId, chatId, threadRootId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/threads/${threadRootId}/unread`,
|
|
63793
|
+
THREAD_READ: (orgId, chatId, threadRootId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/threads/${threadRootId}/read`,
|
|
63786
63794
|
// References (org-scoped)
|
|
63787
63795
|
REFS_RESOLVE: (orgId) => `${API_BASE}/orgs/${orgId}/refs/resolve`,
|
|
63788
63796
|
REFS_BACKLINKS: (orgId) => `${API_BASE}/orgs/${orgId}/refs/backlinks`,
|
|
@@ -64789,10 +64797,16 @@ var ParallClient = class _ParallClient {
|
|
|
64789
64797
|
async resizeMachine(orgId, machineId, spec) {
|
|
64790
64798
|
return this.request("PATCH", ENDPOINTS.MACHINE_SPEC(orgId, machineId), spec);
|
|
64791
64799
|
}
|
|
64792
|
-
/**
|
|
64800
|
+
/** @deprecated Retired server-side (daemon-control-authorization §4.2):
|
|
64801
|
+
* daemons update autonomously (CDN poll + platform release signal). The
|
|
64802
|
+
* endpoint now answers 409 LOCAL_UPDATE_NOT_SUPPORTED unconditionally. */
|
|
64793
64803
|
async requestMachineUpdate(orgId, machineId, mandatory = false) {
|
|
64794
64804
|
await this.request("POST", ENDPOINTS.MACHINE_REQUEST_UPDATE(orgId, machineId), { mandatory });
|
|
64795
64805
|
}
|
|
64806
|
+
/** @deprecated Retired server-side (daemon-control-authorization §4.2):
|
|
64807
|
+
* remote filesystem browse of a member's machine was remote device access.
|
|
64808
|
+
* The endpoint now answers 409 LOCAL_BROWSE_NOT_SUPPORTED unconditionally;
|
|
64809
|
+
* workspace paths are typed in (or picked on the machine's own Desktop). */
|
|
64796
64810
|
async browseMachineFilesystem(orgId, machineId, path7) {
|
|
64797
64811
|
return this.request("POST", ENDPOINTS.MACHINE_BROWSE(orgId, machineId), { path: path7 }, void 0, false, { timeoutMs: 15e3 });
|
|
64798
64812
|
}
|
|
@@ -64817,6 +64831,14 @@ var ParallClient = class _ParallClient {
|
|
|
64817
64831
|
async getThreadUnread(orgId, chatId, threadRootId) {
|
|
64818
64832
|
return this.request("GET", ENDPOINTS.THREAD_UNREAD(orgId, chatId, threadRootId));
|
|
64819
64833
|
}
|
|
64834
|
+
/** Advance the per-thread read cursor (forward-only). The server auto-clears
|
|
64835
|
+
* thread-scoped inbox items (thread_reply + in-thread mentions) the cursor
|
|
64836
|
+
* now covers. */
|
|
64837
|
+
async markThreadRead(orgId, chatId, threadRootId, messageId) {
|
|
64838
|
+
return this.request("POST", ENDPOINTS.THREAD_READ(orgId, chatId, threadRootId), {
|
|
64839
|
+
message_id: messageId
|
|
64840
|
+
});
|
|
64841
|
+
}
|
|
64820
64842
|
// ---- Inbox ----
|
|
64821
64843
|
async getInbox(orgId, params) {
|
|
64822
64844
|
return this.request("GET", ENDPOINTS.INBOX(orgId), void 0, params);
|
|
@@ -64840,9 +64862,12 @@ var ParallClient = class _ParallClient {
|
|
|
64840
64862
|
async archiveAllInbox(orgId) {
|
|
64841
64863
|
return this.request("POST", ENDPOINTS.INBOX_ARCHIVE_ALL(orgId));
|
|
64842
64864
|
}
|
|
64843
|
-
/** Mark
|
|
64844
|
-
|
|
64845
|
-
|
|
64865
|
+
/** Mark inbox items as read by their source (source_type + source_id) or by
|
|
64866
|
+
* group_key, rather than by inbox item ID. The group_key form clears a whole
|
|
64867
|
+
* group at once (e.g. `task:{taskId}` — task_assign/task_update/task_comment
|
|
64868
|
+
* share it), used by the task detail view's auto-ack on open. */
|
|
64869
|
+
async ackInbox(orgId, target) {
|
|
64870
|
+
return this.request("POST", ENDPOINTS.INBOX_ACK(orgId), target);
|
|
64846
64871
|
}
|
|
64847
64872
|
async deleteInboxItem(orgId, id) {
|
|
64848
64873
|
return this.request("DELETE", ENDPOINTS.INBOX_ITEM(orgId, id));
|
|
@@ -65124,6 +65149,15 @@ var ParallClient = class _ParallClient {
|
|
|
65124
65149
|
async initiateChannelProvisioning(orgId, input) {
|
|
65125
65150
|
return this.request("POST", ENDPOINTS.CHANNEL_PROVISIONING(orgId), input);
|
|
65126
65151
|
}
|
|
65152
|
+
/**
|
|
65153
|
+
* Mint a pending slack connection + api.slack.com manifest-prefill link
|
|
65154
|
+
* (guided manual path). Activate the returned connection_id with
|
|
65155
|
+
* deliverChannelCredentials once the user brings back the bot token +
|
|
65156
|
+
* signing secret.
|
|
65157
|
+
*/
|
|
65158
|
+
async createSlackManifestLink(orgId, input) {
|
|
65159
|
+
return this.request("POST", ENDPOINTS.CHANNEL_SLACK_MANIFEST_LINK(orgId), input);
|
|
65160
|
+
}
|
|
65127
65161
|
/**
|
|
65128
65162
|
* Lazy status poll — server-side this may forward one provider poll, so
|
|
65129
65163
|
* call it at the session's `poll_interval_seconds` cadence, not faster.
|
|
@@ -65142,6 +65176,38 @@ var ParallClient = class _ParallClient {
|
|
|
65142
65176
|
async sendChannelMessage(orgId, input) {
|
|
65143
65177
|
return this.request("POST", ENDPOINTS.CHANNEL_SEND(orgId), input);
|
|
65144
65178
|
}
|
|
65179
|
+
slackReadQuery(base, query, extra) {
|
|
65180
|
+
const params = new URLSearchParams();
|
|
65181
|
+
if (query?.cursor)
|
|
65182
|
+
params.set("cursor", query.cursor);
|
|
65183
|
+
if (query?.limit)
|
|
65184
|
+
params.set("limit", String(query.limit));
|
|
65185
|
+
for (const [k5, v] of Object.entries(extra ?? {}))
|
|
65186
|
+
params.set(k5, v);
|
|
65187
|
+
const qs = params.toString();
|
|
65188
|
+
return qs ? `${base}?${qs}` : base;
|
|
65189
|
+
}
|
|
65190
|
+
/**
|
|
65191
|
+
* Tier-B read verbs (agent-only): workspace visibility as the bot sees
|
|
65192
|
+
* it. Same live gate as the send verb; authorization beyond it is the
|
|
65193
|
+
* bot's own Slack permissions.
|
|
65194
|
+
*/
|
|
65195
|
+
async listSlackChannels(orgId, query) {
|
|
65196
|
+
return this.request("GET", this.slackReadQuery(ENDPOINTS.SLACK_CHANNELS(orgId), query));
|
|
65197
|
+
}
|
|
65198
|
+
async listSlackUsers(orgId, query) {
|
|
65199
|
+
return this.request("GET", this.slackReadQuery(ENDPOINTS.SLACK_USERS(orgId), query));
|
|
65200
|
+
}
|
|
65201
|
+
async slackHistory(orgId, conversationId, query) {
|
|
65202
|
+
return this.request("GET", this.slackReadQuery(ENDPOINTS.SLACK_HISTORY(orgId), query, { conversation: conversationId }));
|
|
65203
|
+
}
|
|
65204
|
+
async slackMembers(orgId, conversationId, query) {
|
|
65205
|
+
return this.request("GET", this.slackReadQuery(ENDPOINTS.SLACK_MEMBERS(orgId), query, { conversation: conversationId }));
|
|
65206
|
+
}
|
|
65207
|
+
/** Set/clear the Agents-pane "typing…" indicator (best-effort cosmetic). */
|
|
65208
|
+
async setSlackStatus(orgId, input) {
|
|
65209
|
+
await this.request("POST", ENDPOINTS.SLACK_STATUS(orgId), input);
|
|
65210
|
+
}
|
|
65145
65211
|
async listChannelConversations(orgId, connectionId) {
|
|
65146
65212
|
return this.request("GET", ENDPOINTS.CHANNEL_CONNECTION_CONVERSATIONS(orgId, connectionId));
|
|
65147
65213
|
}
|
|
@@ -51484,10 +51484,17 @@ var ENDPOINTS = {
|
|
|
51484
51484
|
CHANNEL_CONVERSATION_SESSION: (orgId, conversationId) => `${API_BASE}/orgs/${orgId}/channel-conversations/${conversationId}/session`,
|
|
51485
51485
|
CHANNEL_MESSAGE: (orgId, messageId) => `${API_BASE}/orgs/${orgId}/channel-messages/${messageId}`,
|
|
51486
51486
|
CHANNEL_PROVISIONING: (orgId) => `${API_BASE}/orgs/${orgId}/channel-provisioning`,
|
|
51487
|
+
CHANNEL_SLACK_MANIFEST_LINK: (orgId) => `${API_BASE}/orgs/${orgId}/channel-provisioning/slack/manifest-link`,
|
|
51487
51488
|
CHANNEL_PROVISIONING_SESSION: (orgId, sessionId) => `${API_BASE}/orgs/${orgId}/channel-provisioning/${sessionId}`,
|
|
51488
51489
|
CHANNEL_PROVISIONING_CANCEL: (orgId, sessionId) => `${API_BASE}/orgs/${orgId}/channel-provisioning/${sessionId}/cancel`,
|
|
51489
51490
|
// Tier-B platform verb (agent-only): send one message as the bound bot.
|
|
51490
51491
|
CHANNEL_SEND: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/channel-send`,
|
|
51492
|
+
// Tier-B read verbs (agent-only): workspace visibility as the bot sees it.
|
|
51493
|
+
SLACK_CHANNELS: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/channels`,
|
|
51494
|
+
SLACK_USERS: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/users`,
|
|
51495
|
+
SLACK_HISTORY: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/history`,
|
|
51496
|
+
SLACK_MEMBERS: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/members`,
|
|
51497
|
+
SLACK_STATUS: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/status`,
|
|
51491
51498
|
// Invitations (org-scoped, admin)
|
|
51492
51499
|
ORG_INVITATIONS: (orgId) => `${API_BASE}/orgs/${orgId}/invitations`,
|
|
51493
51500
|
ORG_INVITATION: (orgId, invId) => `${API_BASE}/orgs/${orgId}/invitations/${invId}`,
|
|
@@ -51582,6 +51589,7 @@ var ENDPOINTS = {
|
|
|
51582
51589
|
ORG_UNREAD: (orgId) => `${API_BASE}/orgs/${orgId}/unread`,
|
|
51583
51590
|
CHAT_READ: (orgId, chatId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/read`,
|
|
51584
51591
|
THREAD_UNREAD: (orgId, chatId, threadRootId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/threads/${threadRootId}/unread`,
|
|
51592
|
+
THREAD_READ: (orgId, chatId, threadRootId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/threads/${threadRootId}/read`,
|
|
51585
51593
|
// References (org-scoped)
|
|
51586
51594
|
REFS_RESOLVE: (orgId) => `${API_BASE}/orgs/${orgId}/refs/resolve`,
|
|
51587
51595
|
REFS_BACKLINKS: (orgId) => `${API_BASE}/orgs/${orgId}/refs/backlinks`,
|
|
@@ -52672,10 +52680,16 @@ var ParallClient = class _ParallClient {
|
|
|
52672
52680
|
async resizeMachine(orgId, machineId, spec) {
|
|
52673
52681
|
return this.request("PATCH", ENDPOINTS.MACHINE_SPEC(orgId, machineId), spec);
|
|
52674
52682
|
}
|
|
52675
|
-
/**
|
|
52683
|
+
/** @deprecated Retired server-side (daemon-control-authorization §4.2):
|
|
52684
|
+
* daemons update autonomously (CDN poll + platform release signal). The
|
|
52685
|
+
* endpoint now answers 409 LOCAL_UPDATE_NOT_SUPPORTED unconditionally. */
|
|
52676
52686
|
async requestMachineUpdate(orgId, machineId, mandatory = false) {
|
|
52677
52687
|
await this.request("POST", ENDPOINTS.MACHINE_REQUEST_UPDATE(orgId, machineId), { mandatory });
|
|
52678
52688
|
}
|
|
52689
|
+
/** @deprecated Retired server-side (daemon-control-authorization §4.2):
|
|
52690
|
+
* remote filesystem browse of a member's machine was remote device access.
|
|
52691
|
+
* The endpoint now answers 409 LOCAL_BROWSE_NOT_SUPPORTED unconditionally;
|
|
52692
|
+
* workspace paths are typed in (or picked on the machine's own Desktop). */
|
|
52679
52693
|
async browseMachineFilesystem(orgId, machineId, path11) {
|
|
52680
52694
|
return this.request("POST", ENDPOINTS.MACHINE_BROWSE(orgId, machineId), { path: path11 }, void 0, false, { timeoutMs: 15e3 });
|
|
52681
52695
|
}
|
|
@@ -52700,6 +52714,14 @@ var ParallClient = class _ParallClient {
|
|
|
52700
52714
|
async getThreadUnread(orgId, chatId, threadRootId) {
|
|
52701
52715
|
return this.request("GET", ENDPOINTS.THREAD_UNREAD(orgId, chatId, threadRootId));
|
|
52702
52716
|
}
|
|
52717
|
+
/** Advance the per-thread read cursor (forward-only). The server auto-clears
|
|
52718
|
+
* thread-scoped inbox items (thread_reply + in-thread mentions) the cursor
|
|
52719
|
+
* now covers. */
|
|
52720
|
+
async markThreadRead(orgId, chatId, threadRootId, messageId) {
|
|
52721
|
+
return this.request("POST", ENDPOINTS.THREAD_READ(orgId, chatId, threadRootId), {
|
|
52722
|
+
message_id: messageId
|
|
52723
|
+
});
|
|
52724
|
+
}
|
|
52703
52725
|
// ---- Inbox ----
|
|
52704
52726
|
async getInbox(orgId, params) {
|
|
52705
52727
|
return this.request("GET", ENDPOINTS.INBOX(orgId), void 0, params);
|
|
@@ -52723,9 +52745,12 @@ var ParallClient = class _ParallClient {
|
|
|
52723
52745
|
async archiveAllInbox(orgId) {
|
|
52724
52746
|
return this.request("POST", ENDPOINTS.INBOX_ARCHIVE_ALL(orgId));
|
|
52725
52747
|
}
|
|
52726
|
-
/** Mark
|
|
52727
|
-
|
|
52728
|
-
|
|
52748
|
+
/** Mark inbox items as read by their source (source_type + source_id) or by
|
|
52749
|
+
* group_key, rather than by inbox item ID. The group_key form clears a whole
|
|
52750
|
+
* group at once (e.g. `task:{taskId}` — task_assign/task_update/task_comment
|
|
52751
|
+
* share it), used by the task detail view's auto-ack on open. */
|
|
52752
|
+
async ackInbox(orgId, target) {
|
|
52753
|
+
return this.request("POST", ENDPOINTS.INBOX_ACK(orgId), target);
|
|
52729
52754
|
}
|
|
52730
52755
|
async deleteInboxItem(orgId, id) {
|
|
52731
52756
|
return this.request("DELETE", ENDPOINTS.INBOX_ITEM(orgId, id));
|
|
@@ -53007,6 +53032,15 @@ var ParallClient = class _ParallClient {
|
|
|
53007
53032
|
async initiateChannelProvisioning(orgId, input) {
|
|
53008
53033
|
return this.request("POST", ENDPOINTS.CHANNEL_PROVISIONING(orgId), input);
|
|
53009
53034
|
}
|
|
53035
|
+
/**
|
|
53036
|
+
* Mint a pending slack connection + api.slack.com manifest-prefill link
|
|
53037
|
+
* (guided manual path). Activate the returned connection_id with
|
|
53038
|
+
* deliverChannelCredentials once the user brings back the bot token +
|
|
53039
|
+
* signing secret.
|
|
53040
|
+
*/
|
|
53041
|
+
async createSlackManifestLink(orgId, input) {
|
|
53042
|
+
return this.request("POST", ENDPOINTS.CHANNEL_SLACK_MANIFEST_LINK(orgId), input);
|
|
53043
|
+
}
|
|
53010
53044
|
/**
|
|
53011
53045
|
* Lazy status poll — server-side this may forward one provider poll, so
|
|
53012
53046
|
* call it at the session's `poll_interval_seconds` cadence, not faster.
|
|
@@ -53025,6 +53059,38 @@ var ParallClient = class _ParallClient {
|
|
|
53025
53059
|
async sendChannelMessage(orgId, input) {
|
|
53026
53060
|
return this.request("POST", ENDPOINTS.CHANNEL_SEND(orgId), input);
|
|
53027
53061
|
}
|
|
53062
|
+
slackReadQuery(base, query, extra) {
|
|
53063
|
+
const params = new URLSearchParams();
|
|
53064
|
+
if (query?.cursor)
|
|
53065
|
+
params.set("cursor", query.cursor);
|
|
53066
|
+
if (query?.limit)
|
|
53067
|
+
params.set("limit", String(query.limit));
|
|
53068
|
+
for (const [k, v] of Object.entries(extra ?? {}))
|
|
53069
|
+
params.set(k, v);
|
|
53070
|
+
const qs = params.toString();
|
|
53071
|
+
return qs ? `${base}?${qs}` : base;
|
|
53072
|
+
}
|
|
53073
|
+
/**
|
|
53074
|
+
* Tier-B read verbs (agent-only): workspace visibility as the bot sees
|
|
53075
|
+
* it. Same live gate as the send verb; authorization beyond it is the
|
|
53076
|
+
* bot's own Slack permissions.
|
|
53077
|
+
*/
|
|
53078
|
+
async listSlackChannels(orgId, query) {
|
|
53079
|
+
return this.request("GET", this.slackReadQuery(ENDPOINTS.SLACK_CHANNELS(orgId), query));
|
|
53080
|
+
}
|
|
53081
|
+
async listSlackUsers(orgId, query) {
|
|
53082
|
+
return this.request("GET", this.slackReadQuery(ENDPOINTS.SLACK_USERS(orgId), query));
|
|
53083
|
+
}
|
|
53084
|
+
async slackHistory(orgId, conversationId, query) {
|
|
53085
|
+
return this.request("GET", this.slackReadQuery(ENDPOINTS.SLACK_HISTORY(orgId), query, { conversation: conversationId }));
|
|
53086
|
+
}
|
|
53087
|
+
async slackMembers(orgId, conversationId, query) {
|
|
53088
|
+
return this.request("GET", this.slackReadQuery(ENDPOINTS.SLACK_MEMBERS(orgId), query, { conversation: conversationId }));
|
|
53089
|
+
}
|
|
53090
|
+
/** Set/clear the Agents-pane "typing…" indicator (best-effort cosmetic). */
|
|
53091
|
+
async setSlackStatus(orgId, input) {
|
|
53092
|
+
await this.request("POST", ENDPOINTS.SLACK_STATUS(orgId), input);
|
|
53093
|
+
}
|
|
53028
53094
|
async listChannelConversations(orgId, connectionId) {
|
|
53029
53095
|
return this.request("GET", ENDPOINTS.CHANNEL_CONNECTION_CONVERSATIONS(orgId, connectionId));
|
|
53030
53096
|
}
|
|
@@ -51484,10 +51484,17 @@ var ENDPOINTS = {
|
|
|
51484
51484
|
CHANNEL_CONVERSATION_SESSION: (orgId, conversationId) => `${API_BASE}/orgs/${orgId}/channel-conversations/${conversationId}/session`,
|
|
51485
51485
|
CHANNEL_MESSAGE: (orgId, messageId) => `${API_BASE}/orgs/${orgId}/channel-messages/${messageId}`,
|
|
51486
51486
|
CHANNEL_PROVISIONING: (orgId) => `${API_BASE}/orgs/${orgId}/channel-provisioning`,
|
|
51487
|
+
CHANNEL_SLACK_MANIFEST_LINK: (orgId) => `${API_BASE}/orgs/${orgId}/channel-provisioning/slack/manifest-link`,
|
|
51487
51488
|
CHANNEL_PROVISIONING_SESSION: (orgId, sessionId) => `${API_BASE}/orgs/${orgId}/channel-provisioning/${sessionId}`,
|
|
51488
51489
|
CHANNEL_PROVISIONING_CANCEL: (orgId, sessionId) => `${API_BASE}/orgs/${orgId}/channel-provisioning/${sessionId}/cancel`,
|
|
51489
51490
|
// Tier-B platform verb (agent-only): send one message as the bound bot.
|
|
51490
51491
|
CHANNEL_SEND: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/channel-send`,
|
|
51492
|
+
// Tier-B read verbs (agent-only): workspace visibility as the bot sees it.
|
|
51493
|
+
SLACK_CHANNELS: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/channels`,
|
|
51494
|
+
SLACK_USERS: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/users`,
|
|
51495
|
+
SLACK_HISTORY: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/history`,
|
|
51496
|
+
SLACK_MEMBERS: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/members`,
|
|
51497
|
+
SLACK_STATUS: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me/slack/status`,
|
|
51491
51498
|
// Invitations (org-scoped, admin)
|
|
51492
51499
|
ORG_INVITATIONS: (orgId) => `${API_BASE}/orgs/${orgId}/invitations`,
|
|
51493
51500
|
ORG_INVITATION: (orgId, invId) => `${API_BASE}/orgs/${orgId}/invitations/${invId}`,
|
|
@@ -51582,6 +51589,7 @@ var ENDPOINTS = {
|
|
|
51582
51589
|
ORG_UNREAD: (orgId) => `${API_BASE}/orgs/${orgId}/unread`,
|
|
51583
51590
|
CHAT_READ: (orgId, chatId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/read`,
|
|
51584
51591
|
THREAD_UNREAD: (orgId, chatId, threadRootId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/threads/${threadRootId}/unread`,
|
|
51592
|
+
THREAD_READ: (orgId, chatId, threadRootId) => `${API_BASE}/orgs/${orgId}/chats/${chatId}/threads/${threadRootId}/read`,
|
|
51585
51593
|
// References (org-scoped)
|
|
51586
51594
|
REFS_RESOLVE: (orgId) => `${API_BASE}/orgs/${orgId}/refs/resolve`,
|
|
51587
51595
|
REFS_BACKLINKS: (orgId) => `${API_BASE}/orgs/${orgId}/refs/backlinks`,
|
|
@@ -52672,10 +52680,16 @@ var ParallClient = class _ParallClient {
|
|
|
52672
52680
|
async resizeMachine(orgId, machineId, spec) {
|
|
52673
52681
|
return this.request("PATCH", ENDPOINTS.MACHINE_SPEC(orgId, machineId), spec);
|
|
52674
52682
|
}
|
|
52675
|
-
/**
|
|
52683
|
+
/** @deprecated Retired server-side (daemon-control-authorization §4.2):
|
|
52684
|
+
* daemons update autonomously (CDN poll + platform release signal). The
|
|
52685
|
+
* endpoint now answers 409 LOCAL_UPDATE_NOT_SUPPORTED unconditionally. */
|
|
52676
52686
|
async requestMachineUpdate(orgId, machineId, mandatory = false) {
|
|
52677
52687
|
await this.request("POST", ENDPOINTS.MACHINE_REQUEST_UPDATE(orgId, machineId), { mandatory });
|
|
52678
52688
|
}
|
|
52689
|
+
/** @deprecated Retired server-side (daemon-control-authorization §4.2):
|
|
52690
|
+
* remote filesystem browse of a member's machine was remote device access.
|
|
52691
|
+
* The endpoint now answers 409 LOCAL_BROWSE_NOT_SUPPORTED unconditionally;
|
|
52692
|
+
* workspace paths are typed in (or picked on the machine's own Desktop). */
|
|
52679
52693
|
async browseMachineFilesystem(orgId, machineId, path12) {
|
|
52680
52694
|
return this.request("POST", ENDPOINTS.MACHINE_BROWSE(orgId, machineId), { path: path12 }, void 0, false, { timeoutMs: 15e3 });
|
|
52681
52695
|
}
|
|
@@ -52700,6 +52714,14 @@ var ParallClient = class _ParallClient {
|
|
|
52700
52714
|
async getThreadUnread(orgId, chatId, threadRootId) {
|
|
52701
52715
|
return this.request("GET", ENDPOINTS.THREAD_UNREAD(orgId, chatId, threadRootId));
|
|
52702
52716
|
}
|
|
52717
|
+
/** Advance the per-thread read cursor (forward-only). The server auto-clears
|
|
52718
|
+
* thread-scoped inbox items (thread_reply + in-thread mentions) the cursor
|
|
52719
|
+
* now covers. */
|
|
52720
|
+
async markThreadRead(orgId, chatId, threadRootId, messageId) {
|
|
52721
|
+
return this.request("POST", ENDPOINTS.THREAD_READ(orgId, chatId, threadRootId), {
|
|
52722
|
+
message_id: messageId
|
|
52723
|
+
});
|
|
52724
|
+
}
|
|
52703
52725
|
// ---- Inbox ----
|
|
52704
52726
|
async getInbox(orgId, params) {
|
|
52705
52727
|
return this.request("GET", ENDPOINTS.INBOX(orgId), void 0, params);
|
|
@@ -52723,9 +52745,12 @@ var ParallClient = class _ParallClient {
|
|
|
52723
52745
|
async archiveAllInbox(orgId) {
|
|
52724
52746
|
return this.request("POST", ENDPOINTS.INBOX_ARCHIVE_ALL(orgId));
|
|
52725
52747
|
}
|
|
52726
|
-
/** Mark
|
|
52727
|
-
|
|
52728
|
-
|
|
52748
|
+
/** Mark inbox items as read by their source (source_type + source_id) or by
|
|
52749
|
+
* group_key, rather than by inbox item ID. The group_key form clears a whole
|
|
52750
|
+
* group at once (e.g. `task:{taskId}` — task_assign/task_update/task_comment
|
|
52751
|
+
* share it), used by the task detail view's auto-ack on open. */
|
|
52752
|
+
async ackInbox(orgId, target) {
|
|
52753
|
+
return this.request("POST", ENDPOINTS.INBOX_ACK(orgId), target);
|
|
52729
52754
|
}
|
|
52730
52755
|
async deleteInboxItem(orgId, id) {
|
|
52731
52756
|
return this.request("DELETE", ENDPOINTS.INBOX_ITEM(orgId, id));
|
|
@@ -53007,6 +53032,15 @@ var ParallClient = class _ParallClient {
|
|
|
53007
53032
|
async initiateChannelProvisioning(orgId, input) {
|
|
53008
53033
|
return this.request("POST", ENDPOINTS.CHANNEL_PROVISIONING(orgId), input);
|
|
53009
53034
|
}
|
|
53035
|
+
/**
|
|
53036
|
+
* Mint a pending slack connection + api.slack.com manifest-prefill link
|
|
53037
|
+
* (guided manual path). Activate the returned connection_id with
|
|
53038
|
+
* deliverChannelCredentials once the user brings back the bot token +
|
|
53039
|
+
* signing secret.
|
|
53040
|
+
*/
|
|
53041
|
+
async createSlackManifestLink(orgId, input) {
|
|
53042
|
+
return this.request("POST", ENDPOINTS.CHANNEL_SLACK_MANIFEST_LINK(orgId), input);
|
|
53043
|
+
}
|
|
53010
53044
|
/**
|
|
53011
53045
|
* Lazy status poll — server-side this may forward one provider poll, so
|
|
53012
53046
|
* call it at the session's `poll_interval_seconds` cadence, not faster.
|
|
@@ -53025,6 +53059,38 @@ var ParallClient = class _ParallClient {
|
|
|
53025
53059
|
async sendChannelMessage(orgId, input) {
|
|
53026
53060
|
return this.request("POST", ENDPOINTS.CHANNEL_SEND(orgId), input);
|
|
53027
53061
|
}
|
|
53062
|
+
slackReadQuery(base, query, extra) {
|
|
53063
|
+
const params = new URLSearchParams();
|
|
53064
|
+
if (query?.cursor)
|
|
53065
|
+
params.set("cursor", query.cursor);
|
|
53066
|
+
if (query?.limit)
|
|
53067
|
+
params.set("limit", String(query.limit));
|
|
53068
|
+
for (const [k, v] of Object.entries(extra ?? {}))
|
|
53069
|
+
params.set(k, v);
|
|
53070
|
+
const qs = params.toString();
|
|
53071
|
+
return qs ? `${base}?${qs}` : base;
|
|
53072
|
+
}
|
|
53073
|
+
/**
|
|
53074
|
+
* Tier-B read verbs (agent-only): workspace visibility as the bot sees
|
|
53075
|
+
* it. Same live gate as the send verb; authorization beyond it is the
|
|
53076
|
+
* bot's own Slack permissions.
|
|
53077
|
+
*/
|
|
53078
|
+
async listSlackChannels(orgId, query) {
|
|
53079
|
+
return this.request("GET", this.slackReadQuery(ENDPOINTS.SLACK_CHANNELS(orgId), query));
|
|
53080
|
+
}
|
|
53081
|
+
async listSlackUsers(orgId, query) {
|
|
53082
|
+
return this.request("GET", this.slackReadQuery(ENDPOINTS.SLACK_USERS(orgId), query));
|
|
53083
|
+
}
|
|
53084
|
+
async slackHistory(orgId, conversationId, query) {
|
|
53085
|
+
return this.request("GET", this.slackReadQuery(ENDPOINTS.SLACK_HISTORY(orgId), query, { conversation: conversationId }));
|
|
53086
|
+
}
|
|
53087
|
+
async slackMembers(orgId, conversationId, query) {
|
|
53088
|
+
return this.request("GET", this.slackReadQuery(ENDPOINTS.SLACK_MEMBERS(orgId), query, { conversation: conversationId }));
|
|
53089
|
+
}
|
|
53090
|
+
/** Set/clear the Agents-pane "typing…" indicator (best-effort cosmetic). */
|
|
53091
|
+
async setSlackStatus(orgId, input) {
|
|
53092
|
+
await this.request("POST", ENDPOINTS.SLACK_STATUS(orgId), input);
|
|
53093
|
+
}
|
|
53028
53094
|
async listChannelConversations(orgId, connectionId) {
|
|
53029
53095
|
return this.request("GET", ENDPOINTS.CHANNEL_CONNECTION_CONVERSATIONS(orgId, connectionId));
|
|
53030
53096
|
}
|