@parall/parall 1.61.0 → 1.62.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/gateway.d.ts.map +1 -1
- package/dist/gateway.js +5 -2
- package/dist/index.bundle.mjs +3313 -1729
- package/package.json +3 -3
- package/skills/parall-clip-authoring/SKILL.md +9 -6
- package/skills/parall-clips/SKILL.md +19 -16
- package/skills/parall-platform/SKILL.md +5 -5
- package/skills/{parall-external-triggers → parall-triggers}/SKILL.md +27 -27
- package/src/gateway.ts +5 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@parall/parall",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.62.0",
|
|
4
4
|
"description": "OpenClaw channel plugin for Parall IM",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"openclaw.plugin.json"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@parall/agent-core": "1.
|
|
20
|
-
"@parall/sdk": "1.
|
|
19
|
+
"@parall/agent-core": "1.62.0",
|
|
20
|
+
"@parall/sdk": "1.62.0"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@types/node": "^22.0.0",
|
|
@@ -212,14 +212,17 @@ or configure.
|
|
|
212
212
|
|
|
213
213
|
```sh
|
|
214
214
|
parall clip exec <clip> <command> '{"query":"AI","count":10}' --connection <ccn_id|alias>
|
|
215
|
-
#
|
|
216
|
-
#
|
|
215
|
+
# --connection is REQUIRED for an agent: a desktop device, a cloud profile
|
|
216
|
+
# and an MCP server are all reached through the connection bound to the
|
|
217
|
+
# clip. --timeout <ms> defaults to 30000
|
|
217
218
|
```
|
|
218
219
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
Discover
|
|
220
|
+
Who may run through a connection follows its layer (ADR-020): an
|
|
221
|
+
org-shared connection (cloud profile, MCP server, org-managed device) is
|
|
222
|
+
decided by the clip's access list an org admin edits; a member's personal
|
|
223
|
+
desktop device is theirs alone. Discover what YOU may run through with
|
|
224
|
+
`parall clip connections <clip>` — an ungranted connection is not listed,
|
|
225
|
+
so a missing row means "ask an admin", not "retry".
|
|
223
226
|
|
|
224
227
|
3. **Iterate**: edit locally → `parall clip publish` again → re-exec. Exec
|
|
225
228
|
resolves the file set from the REGISTRY, server-side — your own org always
|
|
@@ -22,7 +22,9 @@ description, version) and WHERE it can run — every connection with its
|
|
|
22
22
|
`ccn_…` id, alias, and target kind:
|
|
23
23
|
|
|
24
24
|
- `cloud` — an org-shared cloud profile (a maintainer's signed-in browser)
|
|
25
|
-
- `desktop` — a member's
|
|
25
|
+
- `desktop` — a member's device: org-shared (`layer: org` — an org admin
|
|
26
|
+
binds it, the clip's access list decides, same as cloud and MCP) or
|
|
27
|
+
personal (`layer: personal` — its owner alone, nobody else sees it)
|
|
26
28
|
- `mcp` — a remote MCP tool server
|
|
27
29
|
- `device` — a device whose placement could not be resolved just now (the
|
|
28
30
|
device list was unavailable); don't guess which kind it is — re-run
|
|
@@ -54,15 +56,16 @@ via a quoted heredoc, as above; strict JSON, mutually exclusive with the
|
|
|
54
56
|
sees them, exactly the trap `messages send --text-file` exists for.
|
|
55
57
|
Results are JSON on stdout; failures print a typed error.
|
|
56
58
|
|
|
57
|
-
**Name the
|
|
58
|
-
|
|
59
|
-
profile
|
|
59
|
+
**Name the connection — every exec.** `clip exec` refuses to run without
|
|
60
|
+
`--connection`; there is no other target form. A desktop device, a cloud
|
|
61
|
+
(hosted) profile and an MCP server are all reached through the connection
|
|
62
|
+
bound to the clip, and the connection is what your access is granted on.
|
|
60
63
|
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
- Without a connection the server answers `AGENT_CONNECTION_REQUIRED`; the
|
|
65
|
+
fix is to discover the clip's connections and name one, never to retry.
|
|
66
|
+
- `CLIP_AGENT_NOT_ALLOWED` / `CLIP_AGENT_CONNECTION_NOT_ALLOWED` mean a
|
|
67
|
+
human has restricted who may run this clip (or through which account);
|
|
68
|
+
ask them to widen access — you cannot grant it to yourself.
|
|
66
69
|
- Waiting on a cloud profile is handled by the CLI: `EDGE_ACTIVATING` (cold
|
|
67
70
|
start), `EDGE_BUSY` (another exec is running) and
|
|
68
71
|
`EDGE_CONCURRENCY_LIMIT` (org at capacity) are all guaranteed-unexecuted
|
|
@@ -89,10 +92,9 @@ parall clip exec <clip> <tool> [json-args] --connection <ccn_|alias>
|
|
|
89
92
|
- `clip connections` marks MCP rows with their auth mode, `credential_set`
|
|
90
93
|
/ `oauth_status` and `tool_count` — a `needs_reauth` or credential-less
|
|
91
94
|
row will refuse exec until an org admin fixes it in the Clip Console.
|
|
92
|
-
- `--connection` is REQUIRED to exec an MCP connection, exactly like
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
always name it.
|
|
95
|
+
- `--connection` is REQUIRED to exec an MCP connection, exactly like every
|
|
96
|
+
other target. The alias tells you WHICH account you act as — always name
|
|
97
|
+
it.
|
|
96
98
|
(`is_default` marks the org's primary connection in listings and the
|
|
97
99
|
Console, not an implicit exec route.)
|
|
98
100
|
- `clip tools` without `--connection` reads the default connection's
|
|
@@ -112,9 +114,10 @@ parall clip exec <clip> <tool> [json-args] --connection <ccn_|alias>
|
|
|
112
114
|
|
|
113
115
|
## Behavior rules
|
|
114
116
|
|
|
115
|
-
- An authorization error (`
|
|
116
|
-
fail-fast: ask
|
|
117
|
-
grant the connection — do not retry or work
|
|
117
|
+
- An authorization error (`CLIP_AGENT_NOT_ALLOWED`,
|
|
118
|
+
`CLIP_AGENT_CONNECTION_NOT_ALLOWED`, `FORBIDDEN`) is a fail-fast: ask
|
|
119
|
+
an org admin to grant the clip or the connection — do not retry or work
|
|
120
|
+
around it.
|
|
118
121
|
- If the target device is offline or the call times out, report that
|
|
119
122
|
plainly; do not queue, and never fabricate a result for a run that errored.
|
|
120
123
|
- **`OUTCOME_UNKNOWN` is never retryable.** It means the command was
|
|
@@ -264,16 +264,16 @@ Every entity is addressable with a `prll://` URI. Common prefixes you'll see in
|
|
|
264
264
|
| `prll://prj_` | Project | parall-tasks |
|
|
265
265
|
| `prll://sch_` | Schedule (time trigger) | parall-schedules |
|
|
266
266
|
| `prll://srn_` | Schedule run (single fire audit record; carries fire-time snapshot) | parall-schedules |
|
|
267
|
-
| `prll://xcn_` |
|
|
268
|
-
| `prll://xin_` |
|
|
269
|
-
| `prll://xtr_` |
|
|
270
|
-
| `prll://xrn_` |
|
|
267
|
+
| `prll://xcn_` | Trigger Connection (incoming endpoint) | parall-triggers |
|
|
268
|
+
| `prll://xin_` | Trigger Event (single incoming event audit record) | parall-triggers |
|
|
269
|
+
| `prll://xtr_` | Trigger (incoming trigger configuration) | parall-triggers |
|
|
270
|
+
| `prll://xrn_` | Trigger run (single matched dispatch audit record) | parall-triggers |
|
|
271
271
|
| `prll://wik_` | Wiki | parall-wiki |
|
|
272
272
|
| `prll://att_` | Attachment | parall-platform (files) |
|
|
273
273
|
|
|
274
274
|
When a message or event references `prll://sch_xxx` or `prll://srn_xxx`, or when you receive `[Event: schedule.fired]`, switch to the **parall-schedules** skill for the CLI commands (create / list / pause / resume / cancel / runs).
|
|
275
275
|
|
|
276
|
-
When a message or event references `prll://xcn_xxx`, `prll://xin_xxx`, `prll://xtr_xxx`, or `prll://xrn_xxx`, or when you receive `[Event: external.trigger]`, switch to the **parall-
|
|
276
|
+
When a message or event references `prll://xcn_xxx`, `prll://xin_xxx`, `prll://xtr_xxx`, or `prll://xrn_xxx`, or when you receive `[Event: external.trigger]`, switch to the **parall-triggers** skill for the CLI commands (connections / triggers / events / runs).
|
|
277
277
|
|
|
278
278
|
## References (relationship graph)
|
|
279
279
|
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: parall-
|
|
3
|
-
description: "Parall
|
|
2
|
+
name: parall-triggers
|
|
3
|
+
description: "Parall Trigger operations: create incoming connections, configure CEL/Liquid triggers, inspect incoming events and runs, and respond to `[Event: external.trigger]` dispatches. Use when: user asks to connect an external system to an agent, set up incoming callbacks/notifications, or when the agent receives a trigger event."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Parall
|
|
6
|
+
# Parall Triggers
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
A **Trigger** is an incoming automation entity. External systems send events to a Trigger Connection, Parall matches active triggers with CEL, renders a Liquid template into an agent input body, and dispatches that input to the configured target agents.
|
|
9
9
|
|
|
10
|
-
Use
|
|
10
|
+
Use Triggers for incoming events such as GitHub callbacks, Slack/Feishu notifications, generic webhooks, or emails once the platform has a connection for them. The runtime behavior is incoming-only: receiving a trigger does not imply that you can call the external system back unless another explicit Parall capability is available.
|
|
11
11
|
|
|
12
12
|
## Prerequisite
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
Trigger CLI commands are gated by the org-level `external-triggers` feature flag. If a command reports that the feature is unavailable, ask a human org admin to enable the flag before trying again. Public ingress delivery may still be live even when the management CLI is hidden behind the rollout flag.
|
|
15
15
|
|
|
16
16
|
## Creating a trigger
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
19
|
# 1. Create a connection. The ingress token is shown once; prefer writing it
|
|
20
20
|
# to a local file so it does not land in shell history or logs.
|
|
21
|
-
parall
|
|
21
|
+
parall triggers create-connection --name "GitHub CI" --token-file ./github-ci-webhook-token.txt
|
|
22
22
|
|
|
23
23
|
# 2. Create a trigger that targets one or more agents.
|
|
24
|
-
parall
|
|
24
|
+
parall triggers create \
|
|
25
25
|
--connection prll://xcn_xxx \
|
|
26
26
|
--name "Failed checks" \
|
|
27
27
|
--target-ids prll://usr_agent_xxx \
|
|
@@ -53,25 +53,25 @@ Do not render access tokens, signing secrets, cookies, or private credentials in
|
|
|
53
53
|
## Inspecting and lifecycle
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
parall
|
|
57
|
-
parall
|
|
58
|
-
parall
|
|
59
|
-
|
|
60
|
-
parall
|
|
61
|
-
parall
|
|
62
|
-
parall
|
|
63
|
-
parall
|
|
64
|
-
parall
|
|
65
|
-
parall
|
|
66
|
-
parall
|
|
67
|
-
|
|
68
|
-
parall
|
|
69
|
-
parall
|
|
70
|
-
parall
|
|
71
|
-
parall
|
|
56
|
+
parall triggers connections
|
|
57
|
+
parall triggers connection prll://xcn_xxx
|
|
58
|
+
parall triggers schema prll://xcn_xxx
|
|
59
|
+
|
|
60
|
+
parall triggers list
|
|
61
|
+
parall triggers list --connection prll://xcn_xxx
|
|
62
|
+
parall triggers get prll://xtr_xxx
|
|
63
|
+
parall triggers update prll://xtr_xxx --filter "event.type == 'check_run'"
|
|
64
|
+
parall triggers pause prll://xtr_xxx
|
|
65
|
+
parall triggers resume prll://xtr_xxx
|
|
66
|
+
parall triggers delete prll://xtr_xxx
|
|
67
|
+
|
|
68
|
+
parall triggers runs prll://xtr_xxx
|
|
69
|
+
parall triggers run prll://xrn_xxx
|
|
70
|
+
parall triggers events --connection prll://xcn_xxx
|
|
71
|
+
parall triggers event prll://xin_xxx
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
## Responding to
|
|
74
|
+
## Responding to trigger dispatches
|
|
75
75
|
|
|
76
76
|
When you receive `[Event: external.trigger]`, Parall has already matched a trigger and rendered its template. The prompt includes headers such as:
|
|
77
77
|
|
|
@@ -84,9 +84,9 @@ When you receive `[Event: external.trigger]`, Parall has already matched a trigg
|
|
|
84
84
|
The rendered agent input body follows those headers. You usually do not need to fetch the run before acting. Fetch the run only for audit/debugging:
|
|
85
85
|
|
|
86
86
|
```bash
|
|
87
|
-
parall
|
|
87
|
+
parall triggers run prll://xrn_xxx
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
Act on the rendered input the same way you would act on a user message: send a message, create or update tasks, edit wiki pages, or use available clips. If no visible response is needed, use `parall no-reply --reason "handled
|
|
90
|
+
Act on the rendered input the same way you would act on a user message: send a message, create or update tasks, edit wiki pages, or use available clips. If no visible response is needed, use `parall no-reply --reason "handled trigger"` before sending any message.
|
|
91
91
|
|
|
92
92
|
CLI command results are JSON on stdout; mutation commands may emit auxiliary hints on stderr, for example `Created: prll://xtr_xxx`.
|
package/src/gateway.ts
CHANGED
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
initAgentTelemetry,
|
|
15
15
|
resolveServiceVersion,
|
|
16
16
|
createOtelLogger,
|
|
17
|
+
traceContextHeaders,
|
|
17
18
|
type DispatchAdapter,
|
|
18
19
|
type ParallEvent,
|
|
19
20
|
type RuntimeEvent,
|
|
@@ -436,6 +437,7 @@ export const parallGateway: ChannelGatewayAdapter<ResolvedParallAccount> = {
|
|
|
436
437
|
baseUrl: config.parall_url,
|
|
437
438
|
token: config.api_key,
|
|
438
439
|
swimlaneName: process.env.PRLL_SWIMLANE_NAME,
|
|
440
|
+
getRequestHeaders: traceContextHeaders,
|
|
439
441
|
});
|
|
440
442
|
|
|
441
443
|
const me = await getAgentMeWithLegacyFallback(client, config.org_id);
|
|
@@ -443,10 +445,11 @@ export const parallGateway: ChannelGatewayAdapter<ResolvedParallAccount> = {
|
|
|
443
445
|
setAgentIdentity(identityFromMe(me));
|
|
444
446
|
log?.info(`parall[${ctx.accountId}]: authenticated as ${me.display_name} (${agentUserId})`);
|
|
445
447
|
|
|
448
|
+
const serviceVersion = resolveServiceVersion(import.meta.url);
|
|
446
449
|
const telemetry = await initAgentTelemetry('parall-openclaw-agent', 'openclaw', {
|
|
447
450
|
apiUrl: process.env.PRLL_API_URL,
|
|
448
451
|
apiKey: process.env.PRLL_API_KEY,
|
|
449
|
-
serviceVersion
|
|
452
|
+
serviceVersion,
|
|
450
453
|
});
|
|
451
454
|
const otelLog = createOtelLogger('agent', 'openclaw-agent');
|
|
452
455
|
try {
|
|
@@ -526,6 +529,7 @@ export const parallGateway: ChannelGatewayAdapter<ResolvedParallAccount> = {
|
|
|
526
529
|
},
|
|
527
530
|
agentUserId,
|
|
528
531
|
runtimeType: 'openclaw',
|
|
532
|
+
runtimeVersion: serviceVersion,
|
|
529
533
|
runtimeKey: orchestratorKey,
|
|
530
534
|
runtimeRef: { hostname: os.hostname(), pid: process.pid },
|
|
531
535
|
dispatchAdapter,
|