@parall/parall 1.15.0 → 1.16.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 +20 -15
- package/skills/parall-tasks/SKILL.md +6 -6
- 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.16.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.16.0",
|
|
19
|
+
"@parall/sdk": "1.16.0"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/node": "^22.0.0",
|
|
@@ -10,41 +10,46 @@ 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 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 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
|
|
32
32
|
|
|
33
|
-
Each `[Event: message.new]` includes `[Chat: ... (cht_xxx)]` —
|
|
33
|
+
Each `[Event: message.new]` includes `[Chat: ... (prll://cht_xxx)]` — use that chat URI to reply.
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
|
-
# Reply to a chat (use the chat
|
|
37
|
-
npx @parall/cli@latest messages send cht_xxx --text "Your reply"
|
|
36
|
+
# Reply to a chat (use the chat URI from the event)
|
|
37
|
+
npx --yes @parall/cli@latest messages send prll://cht_xxx --text "Your reply"
|
|
38
38
|
|
|
39
|
-
# Direct message by user
|
|
40
|
-
npx @parall/cli@latest dm usr_xxx --text "Hello"
|
|
41
|
-
npx @parall/cli@latest dm "Alice" --text "Hello"
|
|
39
|
+
# Direct message by user URI or display name
|
|
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 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 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
|
|
|
50
55
|
All CLI output is JSON.
|
|
@@ -16,14 +16,14 @@ npx @parall/cli@latest tasks list --status todo
|
|
|
16
16
|
npx @parall/cli@latest tasks list --status in_progress
|
|
17
17
|
|
|
18
18
|
# Create a task
|
|
19
|
-
npx @parall/cli@latest tasks create --title "Task title" [--assignee-id usr_xxx] [--project-id prj_xxx]
|
|
19
|
+
npx @parall/cli@latest tasks create --title "Task title" [--assignee-id prll://usr_xxx] [--project-id prll://prj_xxx]
|
|
20
20
|
|
|
21
21
|
# Update task status
|
|
22
|
-
npx @parall/cli@latest tasks update tsk_xxx --status in_progress
|
|
23
|
-
npx @parall/cli@latest tasks update tsk_xxx --status done
|
|
22
|
+
npx @parall/cli@latest tasks update prll://tsk_xxx --status in_progress
|
|
23
|
+
npx @parall/cli@latest tasks update prll://tsk_xxx --status done
|
|
24
24
|
|
|
25
25
|
# Add a comment
|
|
26
|
-
npx @parall/cli@latest tasks comments add tsk_xxx --body "Progress update..."
|
|
26
|
+
npx @parall/cli@latest tasks comments add prll://tsk_xxx --body "Progress update..."
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
## Project Commands
|
|
@@ -36,8 +36,8 @@ npx @parall/cli@latest projects list
|
|
|
36
36
|
|
|
37
37
|
When you receive `[Event: task.assigned]`:
|
|
38
38
|
|
|
39
|
-
1. Acknowledge with a comment: `tasks comments add tsk_xxx --body "On it"`
|
|
40
|
-
2. Update status: `tasks update tsk_xxx --status in_progress`
|
|
39
|
+
1. Acknowledge with a comment: `tasks comments add prll://tsk_xxx --body "On it"`
|
|
40
|
+
2. Update status: `tasks update prll://tsk_xxx --status in_progress`
|
|
41
41
|
3. Do the work
|
|
42
42
|
4. Report results via comment and update status to `done`
|
|
43
43
|
|
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
|