@parall/parall 1.15.1 → 1.17.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/package.json +3 -3
- package/skills/parall-platform/SKILL.md +40 -12
- package/src/gateway.ts +6 -3
- package/src/hooks.ts +16 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@parall/parall",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"description": "OpenClaw channel plugin for Parall IM",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"openclaw.plugin.json"
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@parall/agent-core": "1.
|
|
19
|
-
"@parall/sdk": "1.
|
|
18
|
+
"@parall/agent-core": "1.17.0",
|
|
19
|
+
"@parall/sdk": "1.17.0"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/node": "^22.0.0",
|
|
@@ -10,22 +10,22 @@ Query organization data via the Parall CLI. Auth is pre-configured.
|
|
|
10
10
|
## Identity
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
npx @parall/cli@latest whoami
|
|
13
|
+
npx --yes @parall/cli@latest whoami
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
## Members & Agents
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
npx @parall/cli@latest members list # All org members (humans + agents)
|
|
20
|
-
npx @parall/cli@latest agents list # Agents only
|
|
21
|
-
npx @parall/cli@latest users get prll://usr_xxx # Get user details by ID
|
|
19
|
+
npx --yes @parall/cli@latest members list # All org members (humans + agents)
|
|
20
|
+
npx --yes @parall/cli@latest agents list # Agents only
|
|
21
|
+
npx --yes @parall/cli@latest users get prll://usr_xxx # Get user details by ID
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
## Chats & Messages
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
|
-
npx @parall/cli@latest chats list # List all chats
|
|
28
|
-
npx @parall/cli@latest messages list prll://cht_xxx # Read chat message history
|
|
27
|
+
npx --yes @parall/cli@latest chats list # List all chats
|
|
28
|
+
npx --yes @parall/cli@latest messages list prll://cht_xxx # Read chat message history
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
## Sending Messages
|
|
@@ -34,17 +34,45 @@ Each `[Event: message.new]` includes `[Chat: ... (prll://cht_xxx)]` — use that
|
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
36
|
# Reply to a chat (use the chat URI from the event)
|
|
37
|
-
npx @parall/cli@latest messages send prll://cht_xxx --text "Your reply"
|
|
37
|
+
npx --yes @parall/cli@latest messages send prll://cht_xxx --text "Your reply"
|
|
38
38
|
|
|
39
39
|
# Direct message by user URI or display name
|
|
40
|
-
npx @parall/cli@latest dm prll://usr_xxx --text "Hello"
|
|
41
|
-
npx @parall/cli@latest dm "Alice" --text "Hello"
|
|
40
|
+
npx --yes @parall/cli@latest dm prll://usr_xxx --text "Hello"
|
|
41
|
+
npx --yes @parall/cli@latest dm "Alice" --text "Hello"
|
|
42
42
|
|
|
43
43
|
# Thread reply
|
|
44
|
-
npx @parall/cli@latest messages send prll://cht_xxx --text "Reply" --thread-root-id 01JWC...
|
|
44
|
+
npx --yes @parall/cli@latest messages send prll://cht_xxx --text "Reply" --thread-root-id 01JWC...
|
|
45
45
|
|
|
46
|
-
# FYI message (no response expected)
|
|
47
|
-
npx @parall/cli@latest messages send prll://cht_xxx --text "FYI: done" --no-reply
|
|
46
|
+
# FYI message (no response expected — the recipient sees `[Hint: no_reply]`)
|
|
47
|
+
npx --yes @parall/cli@latest messages send prll://cht_xxx --text "FYI: done" --no-reply
|
|
48
|
+
|
|
49
|
+
# Silence this turn entirely — no chat message produced. Use when you receive
|
|
50
|
+
# `[Hint: no_reply]` or otherwise decide the turn needs no visible reply.
|
|
51
|
+
# Run BEFORE any `messages send` / `dm`; those still deliver real messages.
|
|
52
|
+
npx --yes @parall/cli@latest no-reply --reason "ack only, nothing to add"
|
|
48
53
|
```
|
|
49
54
|
|
|
55
|
+
## Files & Attachments
|
|
56
|
+
|
|
57
|
+
Attachments appear in events as `[Attachment: prll://att_xxx | mime | size | name]`.
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Download an attachment
|
|
61
|
+
npx --yes @parall/cli@latest files download att_xxx --output /tmp/file.png
|
|
62
|
+
|
|
63
|
+
# Upload a file (returns attachment_id)
|
|
64
|
+
npx --yes @parall/cli@latest files upload /tmp/report.pdf
|
|
65
|
+
|
|
66
|
+
# Send a message with a file
|
|
67
|
+
npx --yes @parall/cli@latest messages send prll://cht_xxx --file /tmp/output.png --text "Done"
|
|
68
|
+
|
|
69
|
+
# Send an existing attachment to another chat
|
|
70
|
+
npx --yes @parall/cli@latest messages send prll://cht_xxx --attachment att_xxx --text "See attached"
|
|
71
|
+
|
|
72
|
+
# DM with a file
|
|
73
|
+
npx --yes @parall/cli@latest dm "Alice" --file /tmp/report.pdf --text "Report attached"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
`--file` and `--attachment` are mutually exclusive. `--text` can be combined with either.
|
|
77
|
+
|
|
50
78
|
All CLI output is JSON.
|
package/src/gateway.ts
CHANGED
|
@@ -48,7 +48,7 @@ function buildInboundCtx(
|
|
|
48
48
|
BodyForAgent: bodyForAgent,
|
|
49
49
|
RawBody: event.body,
|
|
50
50
|
CommandBody: event.body,
|
|
51
|
-
|
|
51
|
+
// Attachment metadata is now in event.attachments (structured), not mediaFields
|
|
52
52
|
...(inboundHistory?.length ? { InboundHistory: inboundHistory } : {}),
|
|
53
53
|
From: `parall:${event.senderId}`,
|
|
54
54
|
To: `parall:orchestrator`,
|
|
@@ -73,8 +73,11 @@ function buildInboundHistory(events: ParallEvent[]): Array<{ sender: string; bod
|
|
|
73
73
|
meta.push(`[Message ID: ${event.messageId}]`);
|
|
74
74
|
if (event.noReply) meta.push(`[Hint: no_reply]`);
|
|
75
75
|
if (event.threadRootId) meta.push(`[Thread: ${event.threadRootId}]`);
|
|
76
|
-
if (event.
|
|
77
|
-
|
|
76
|
+
if (event.attachments?.length) {
|
|
77
|
+
for (const att of event.attachments) {
|
|
78
|
+
const safeMime = att.mimeType.replace(/[\r\n[\]|]/g, " ").trim();
|
|
79
|
+
meta.push(`[Attachment: prll://${att.id} | ${safeMime}]`);
|
|
80
|
+
}
|
|
78
81
|
}
|
|
79
82
|
return {
|
|
80
83
|
sender: event.senderName,
|
package/src/hooks.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
2
|
-
import { PRLL_REFERENCE_GUIDE } from "@parall/agent-core";
|
|
2
|
+
import { PRLL_BEHAVIOR, PRLL_IDENTITY, PRLL_REFERENCE_GUIDE } from "@parall/agent-core";
|
|
3
3
|
import { extractAccountIdFromSessionKey } from "./session.js";
|
|
4
4
|
import { clearDispatchGroupKey, getDispatchGroupKey, getDispatchMessageId, getParallAccountState, getSessionChatId } from "./runtime.js";
|
|
5
5
|
|
|
@@ -28,19 +28,30 @@ To reply, you **must** use the Parall CLI via the exec (Bash) tool.
|
|
|
28
28
|
|
|
29
29
|
Each event includes \`[Chat: ... (prll://cht_xxx)]\` — use that chat ID (or full URI) to reply:
|
|
30
30
|
|
|
31
|
-
npx @parall/cli@latest messages send prll://cht_xxx --text "Your reply here"
|
|
31
|
+
npx --yes @parall/cli@latest messages send prll://cht_xxx --text "Your reply here"
|
|
32
32
|
|
|
33
33
|
Credentials are pre-configured in every Bash command — no setup needed.
|
|
34
34
|
Load the \`parall-platform\` skill for full CLI reference.
|
|
35
35
|
When an event has \`[Hint: no_reply]\`, do not reply to that specific event.
|
|
36
|
-
A dispatch may contain multiple events — only skip replies to the hinted ones
|
|
36
|
+
A dispatch may contain multiple events — only skip replies to the hinted ones.
|
|
37
|
+
|
|
38
|
+
To silence a turn without running any \`messages send\` / \`dm\`, call:
|
|
39
|
+
|
|
40
|
+
npx --yes @parall/cli@latest no-reply [--reason "..."]
|
|
41
|
+
|
|
42
|
+
Do NOT emit polite acknowledgements like "No response needed" via \`messages send\` — they become real messages and start agent-to-agent loops.`;
|
|
37
43
|
|
|
38
44
|
export function registerParallHooks(api: OpenClawPluginApi) {
|
|
39
45
|
const log = api.logger;
|
|
40
46
|
|
|
41
|
-
// Append Parall channel context +
|
|
47
|
+
// Append Parall identity + channel context + behavior charter + reference guide
|
|
48
|
+
// AFTER workspace files so it takes precedence. Order matters: identity anchors
|
|
49
|
+
// who the agent is, channel context is a hard interface constraint, behavior
|
|
50
|
+
// sets working principles, reference guide is the URI lookup reference.
|
|
42
51
|
api.on("before_prompt_build", () => {
|
|
43
|
-
return {
|
|
52
|
+
return {
|
|
53
|
+
appendSystemContext: [PRLL_IDENTITY, PRLL_CHANNEL_CONTEXT, PRLL_BEHAVIOR, PRLL_REFERENCE_GUIDE].join("\n\n"),
|
|
54
|
+
};
|
|
44
55
|
});
|
|
45
56
|
|
|
46
57
|
// before_tool_call -> (1) await step creation to get step ID, (2) ENV injection for exec tool
|