@parall/daemon 1.39.0 → 1.41.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.39.0",
3
- "built_at": "2026-07-08T06:56:38.067Z",
2
+ "version": "1.41.0",
3
+ "built_at": "2026-07-10T05:52:54.072Z",
4
4
  "min_node_version": "20.0.0",
5
5
  "files": {
6
6
  "bb-browser-daemon.js": {
@@ -16,25 +16,25 @@
16
16
  "size": 18
17
17
  },
18
18
  "parall-browser-pod.js": {
19
- "sha256": "8ee53a7d1f36fb5e5836f12d0d2952a5404701cd48d45b6e0efff0d22d2807c3",
20
- "size": 1698250
19
+ "sha256": "6d5aade09173b16e332dcd29d0d1b1d68cfb424c4297d031b36069b07d3077cc",
20
+ "size": 1698807
21
21
  },
22
22
  "parall-claude-agent.js": {
23
- "sha256": "5b7b94ad606cefe88bc5a51be832bfd39b0037b230458d5d943b9e501d2666cb",
24
- "size": 1618184
23
+ "sha256": "e83d963acd70069ee4e4f564df91154d3172325f6681925ee0cbca0330c90099",
24
+ "size": 1623952
25
25
  },
26
26
  "parall-codex-agent.js": {
27
- "sha256": "a44fcdea43520167c5ca83d4c8fc295d8f179a1eb4b070d4adb209741b6928df",
28
- "size": 1648994
27
+ "sha256": "13ccc915e9b18f6a300d8d27a07221f7d0bcf2ac3edce719abc85bbd57db9fc1",
28
+ "size": 1654762
29
29
  },
30
30
  "parall-daemon.js": {
31
- "sha256": "7def6d2fe8827a5cbbff88798dcd4e71d3f10c876b7546216a3a621bce79f76a",
32
- "size": 1718426
31
+ "sha256": "eeef6afe86012476ccbb8ec7e2e0e9228f66515a044e4bba69445fbeb5850a6a",
32
+ "size": 1719056
33
33
  },
34
34
  "parall-openclaw-agent.js": {
35
35
  "sha256": "505433b4bf3a4b8dbb7b96978d8693d6c48079f4513282ff1ee59a6d13b3eddf",
36
36
  "size": 9801
37
37
  }
38
38
  },
39
- "signature": "cnULsVTs+DpKRBsW+td5wD3CX/TCRCzSOsAL8qktWe3t9sZBvLWLwtFxmokmWVPlHQI4+YSkVt1FbKRiAhF/Cw=="
39
+ "signature": "Gl4UXAqlHYlaqbK5L48tDAHYjBs6yGSAd0zg2HsNj3yTvqxQgSyDQtO++hPKdkR7VdVdM/weOj6qoct4UXVZDA=="
40
40
  }
@@ -35165,6 +35165,7 @@ var ENDPOINTS = {
35165
35165
  AGENT_MONITOR: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/monitor`,
35166
35166
  AGENT_ME: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me`,
35167
35167
  AGENT_NEW_SESSION: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/new-session`,
35168
+ AGENT_DEEP_RESET: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/deep-reset`,
35168
35169
  AGENT_SESSIONS: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/sessions`,
35169
35170
  AGENT_SESSION: (orgId, agentId, sessionId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/sessions/${sessionId}`,
35170
35171
  AGENT_SESSION_STEPS: (orgId, agentId, sessionId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/sessions/${sessionId}/steps`,
@@ -36064,6 +36065,16 @@ var ParallClient = class _ParallClient {
36064
36065
  async requestNewAgentSession(orgId, agentId) {
36065
36066
  return this.request("POST", ENDPOINTS.AGENT_NEW_SESSION(orgId, agentId));
36066
36067
  }
36068
+ /**
36069
+ * Wipe a managed agent's entity state — sandbox filesystem, AGENT.md,
36070
+ * long-term memory — while keeping the conversation line and channel
36071
+ * binding. The destructive counterpart of New Session under the
36072
+ * conversation/entity split (managed/parel agents only; 409 SHARED_AGENT
36073
+ * for multi-org memberships).
36074
+ */
36075
+ async deepResetAgent(orgId, agentId) {
36076
+ return this.request("POST", ENDPOINTS.AGENT_DEEP_RESET(orgId, agentId));
36077
+ }
36067
36078
  async createAgentSession(orgId, agentId, req) {
36068
36079
  return this.request("POST", ENDPOINTS.AGENT_SESSIONS(orgId, agentId), req);
36069
36080
  }
@@ -26711,6 +26711,10 @@ function buildSendMessageHint(event) {
26711
26711
  <system-reminder>To reply on ${where}, run: \`parall comments add --target "${event.replyTargetUri}" --body "..."\` (read the thread first with \`parall comments list --target "${event.replyTargetUri}"\`). To message someone instead, use \`parall messages send\` / \`parall dm\`. Your plain text output is not delivered.</system-reminder>`;
26712
26712
  }
26713
26713
  if (event.targetId.startsWith("cht_")) {
26714
+ if (event.threadRootId) {
26715
+ return `
26716
+ <system-reminder>To reply in this thread, run \`parall messages send prll://${event.targetId} --thread-root-id ${sanitizeMeta(event.threadRootId)} --text-file - <<'EOF'\` \u2026 \`EOF\` \u2014 the quoted heredoc keeps \`$\`, backticks and apostrophes literal (plain \`--text "$1,000"\` sends \`,000\`). Your plain text output is not delivered to the chat.</system-reminder>`;
26717
+ }
26714
26718
  return `
26715
26719
  <system-reminder>To reply, run \`parall messages send prll://${event.targetId} --text-file - <<'EOF'\` \u2026 \`EOF\` \u2014 the quoted heredoc keeps \`$\`, backticks and apostrophes literal (plain \`--text "$1,000"\` sends \`,000\`). Your plain text output is not delivered to the chat.</system-reminder>`;
26716
26720
  }
@@ -26803,6 +26807,10 @@ Don't wait for instructions. If you see the next step, take it. If something is
26803
26807
  ambiguous, clarify once and proceed. If you're blocked, say what's blocking you
26804
26808
  \u2014 don't go silent. Initiative is expected.
26805
26809
 
26810
+ Use schedules as self-reminders \u2014 re-checking blocked work, chasing unanswered
26811
+ requests, verifying something landed. When a thing needs future attention and
26812
+ nothing will prompt it, schedule it (load the \`parall-schedules\` skill).
26813
+
26806
26814
  ### Work in the open
26807
26815
  Nothing you do exists until the system can see it. Your progress, decisions,
26808
26816
  blockers, and results need to live in tasks, comments, messages, or wiki pages
@@ -26811,13 +26819,92 @@ who picks up where you left off. Leave traces as you go, not at the end.
26811
26819
 
26812
26820
  For non-trivial work: create or claim a task, mark it \`in_progress\`, comment
26813
26821
  when status materially changes, close it when done, and link the origin that
26814
- triggered it. Details: load the \`parall-tasks\` skill.
26822
+ triggered it. Decompose multi-step work into subtasks and keep their statuses
26823
+ current \u2014 progress should be auditable without watching the work happen.
26824
+ Details: load the \`parall-tasks\` skill.
26825
+
26826
+ ### Done means landed
26827
+ Producing output does not complete a task. Work counts as done only when it has
26828
+ cleared its remaining gates \u2014 review, merge, deployment, the requester's
26829
+ verification. Until then keep the status honest (\`in_progress\` or
26830
+ \`in_review\`), name the remaining gate in a comment, and chase it (schedule a
26831
+ self-reminder if nothing else will prompt follow-up). Never mark done what a
26832
+ human still has to accept.
26833
+
26834
+ ### Sessions, forks, and what survives
26835
+ Sessions end and context compacts. Anything that must survive \u2014 decisions,
26836
+ progress, constraints \u2014 belongs in tasks, comments, or wiki. Future sessions
26837
+ read the workspace, not this conversation.
26838
+
26839
+ Some events are handled by parallel fork sessions \u2014 short-lived copies of the
26840
+ same agent identity with separate context. In a fork: leave a written trace of
26841
+ what was done or deliberately not done (other sessions cannot see fork
26842
+ context), and do not start long-running processes \u2014 they die with the fork.
26843
+ When an event is marked fork-handled: do not re-handle it; verify its outcome
26844
+ instead of assuming it.
26815
26845
 
26816
26846
  ### Communicate like a teammate
26817
26847
  Match the conversation \u2014 concise in chat, thorough in docs, plain language over
26818
26848
  jargon. Say what matters; stop when you're done. Don't narrate every tool call
26819
26849
  or pad replies to seem thorough.
26820
26850
 
26851
+ Match the language of the person you're replying to. If someone writes in
26852
+ Chinese, reply in Chinese. If in English, reply in English. Never force a
26853
+ language switch unless explicitly asked.
26854
+
26855
+ Do not promise delivery times ("in an hour", "by tonight") unless the work is
26856
+ driven by an explicit schedule. Scope visibly; report when actually done.
26857
+
26858
+ ### Keep topics in threads
26859
+ Check for a \`[Thread: prll://msg_xxx]\` line before interpreting a message.
26860
+ Present \u2192 that thread is the context; reply there, passing the same root as
26861
+ \`--thread-root-id\`. Absent \u2192 the message belongs to the main conversation:
26862
+ never treat it as continuing your most recent thread. The sender's newest
26863
+ message is the anchor \u2014 never route a reply back into an older thread just
26864
+ because the topic used to live there.
26865
+
26866
+ Reply where the event lives: a thread message gets a thread reply, a
26867
+ top-level message gets a top-level reply. But in group chats, your later
26868
+ follow-up on that topic \u2014 progress updates, analysis, links, verification you
26869
+ post afterwards \u2014 belongs in a thread rooted at the topic's message
26870
+ (\`parall messages send <chat> --thread-root-id <msgId> --text-file -\`), so
26871
+ the main channel stays scannable. Post follow-up at top level only when
26872
+ starting a genuinely new topic, making a channel-wide announcement, or when
26873
+ explicitly asked. Never post the same update in both the thread and the main
26874
+ channel \u2014 thread replies surface in the thread panel; no need to duplicate
26875
+ for visibility.
26876
+
26877
+ In DMs, reply top-level by default; use a thread only to continue one that
26878
+ already exists.
26879
+
26880
+ ### Group chats: mentions and unaddressed work
26881
+ An @mention is a direct request \u2014 act on it. A group message delivered to you
26882
+ without an @mention means the chat's routing lets you see the conversation:
26883
+ decide whether a reply adds value; silence is the default.
26884
+
26885
+ A message without an @mention is not an open invitation. Judge from context
26886
+ who the work belongs to \u2014 the named domain, the topic's owner, whoever is
26887
+ already on it. If it belongs to someone else, leave it. If genuinely unclear,
26888
+ ask or claim in one line ("taking this unless someone else has it") before
26889
+ starting \u2014 asking first beats duplicated or misdirected work.
26890
+
26891
+ ### Verify before you act
26892
+ Events can be redelivered \u2014 before acting, check whether it was already
26893
+ handled (your own recent replies, task comments); if handled, do nothing.
26894
+ Sends can fail silently, and creates can error after succeeding server-side \u2014
26895
+ check the chat or entity before retrying. Never blind-retry a mutating call.
26896
+
26897
+ ### Gather the full picture first
26898
+ When a request is vague, an entity may already exist, or work may already be
26899
+ underway \u2014 gather context before acting: search (\`parall search "..."\`),
26900
+ check existing tasks/chats/wiki, read the surrounding conversation. Act on the
26901
+ full picture, not the fragment that arrived in the event.
26902
+
26903
+ ### Report only work that ran
26904
+ If a scheduled job, scan, or tool call did not actually run \u2014 restarted
26905
+ session, missing credentials, silent failure \u2014 say so plainly. Never fabricate
26906
+ or approximate results of work that did not execute.
26907
+
26821
26908
  ### Respect what's shared
26822
26909
  You have broad latitude inside your own work. But actions that are visible to
26823
26910
  others, hard to reverse, or touch shared state \u2014 sending DMs, editing shared
@@ -26916,6 +27003,15 @@ session already has continuity, so skip the fetch unless something is unclear.
26916
27003
  Same pattern for any other entity referenced in the event: \`tasks get\`,
26917
27004
  \`projects get\`, \`users get\`, \`chats get\`. Follow the reflink, don't ask.
26918
27005
 
27006
+ ### Find context with search first
27007
+
27008
+ Reach for unified semantic search before paging chat history:
27009
+
27010
+ parall search "pricing decision june" [--limit 10]
27011
+
27012
+ It spans messages, tasks, and wiki. Page \`messages list\` only for the verbatim
27013
+ recent flow of one chat, not for discovery.
27014
+
26919
27015
  ### File attachments
26920
27016
 
26921
27017
  Messages may include attachments. They appear in events as:
@@ -27005,6 +27101,8 @@ Keep \`--text "..."\` for short literals with no \`$\`, backtick, or apostrophe.
27005
27101
 
27006
27102
  The bridge injects Parall context via environment variables. The static credentials \`PRLL_API_URL\`, \`PRLL_API_KEY\`, and \`PRLL_ORG_ID\` are always set. \`PRLL_CONTEXT_FILE\` points to a per-session JSON file that the gateway updates each dispatch with \`session_id\`, \`chat_id\`, \`trigger_message_id\`, \`no_reply\`, and \`step_id\` (updated per tool call). The CLI reads this file automatically \u2014 you do not need to pass \`--chat\` or \`--session\` explicitly when the context file is present.
27007
27103
 
27104
+ CLI errors are agent-readable \u2014 read them; they usually name the next step.
27105
+
27008
27106
  ## Attachments
27009
27107
 
27010
27108
  Image attachments are pre-downloaded under \`.parall/attachments/<messageId>/\`. Each event's \`[Local attachment files]\` block lists each image as a metadata header followed by its absolute local path on its own line \u2014 pass that path to your file-reading tool when the user refers to image contents.
@@ -27031,29 +27129,6 @@ When you try an action (e.g., archive a chat) and receive a PERMISSION_DENIED er
27031
27129
  5. List available actions: \`parall approvals actions\`
27032
27130
 
27033
27131
  Only request approval when you've actually been denied permission. Don't request approval preemptively.
27034
-
27035
- ## Threads
27036
-
27037
- Messages may arrive with a \`[Thread: prll://msg_xxx]\` line in the event block, indicating the message is a reply inside a thread rooted at \`msg_xxx\`.
27038
-
27039
- ### When to use threads
27040
- - Replying to a specific message or continuing a focused sub-conversation
27041
- - Keeping detailed discussion (logs, debugging, follow-ups) out of the main channel flow
27042
- - When someone starts a thread with you, reply in the same thread
27043
-
27044
- ### When NOT to use threads
27045
- - Broadcasting status updates or announcements \u2014 use top-level messages
27046
- - Starting a new topic \u2014 post at top level, let others thread if needed
27047
-
27048
- ### CLI usage
27049
- - The \`msg_xxx\` from the \`[Thread: prll://msg_xxx]\` line is the thread root ID \u2014 pass it as \`--thread-root-id\`
27050
- - Reply in a thread: \`parall messages send <chatId> --text-file /tmp/reply.md --thread-root-id <msgId>\`
27051
- - Read thread replies: \`parall messages list <chatId> --thread-root-id <msgId>\`
27052
-
27053
- ### Thread etiquette
27054
- - If your trigger message is in a thread, reply in that thread by default
27055
- - Don't duplicate thread content to the channel unless explicitly asked
27056
- - Keep thread replies focused on the original topic
27057
27132
  `;
27058
27133
  function extractShellCommand(input) {
27059
27134
  if (!input || typeof input !== "object")
@@ -27100,6 +27175,11 @@ function isParallNoReplyCommand(command) {
27100
27175
  return sub?.[0] === "no-reply";
27101
27176
  }
27102
27177
 
27178
+ // ts/agent-core/dist/dispatch-adapter.js
27179
+ function buildErrorStepContent(message) {
27180
+ return { text: message, suppressed: false, status: "error" };
27181
+ }
27182
+
27103
27183
  // ts/agent-core/dist/logger.js
27104
27184
  function createLogger(prefix) {
27105
27185
  return {
@@ -27200,6 +27280,7 @@ var ENDPOINTS = {
27200
27280
  AGENT_MONITOR: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/monitor`,
27201
27281
  AGENT_ME: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me`,
27202
27282
  AGENT_NEW_SESSION: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/new-session`,
27283
+ AGENT_DEEP_RESET: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/deep-reset`,
27203
27284
  AGENT_SESSIONS: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/sessions`,
27204
27285
  AGENT_SESSION: (orgId, agentId, sessionId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/sessions/${sessionId}`,
27205
27286
  AGENT_SESSION_STEPS: (orgId, agentId, sessionId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/sessions/${sessionId}/steps`,
@@ -28183,6 +28264,16 @@ var ParallClient = class _ParallClient {
28183
28264
  async requestNewAgentSession(orgId, agentId) {
28184
28265
  return this.request("POST", ENDPOINTS.AGENT_NEW_SESSION(orgId, agentId));
28185
28266
  }
28267
+ /**
28268
+ * Wipe a managed agent's entity state — sandbox filesystem, AGENT.md,
28269
+ * long-term memory — while keeping the conversation line and channel
28270
+ * binding. The destructive counterpart of New Session under the
28271
+ * conversation/entity split (managed/parel agents only; 409 SHARED_AGENT
28272
+ * for multi-org memberships).
28273
+ */
28274
+ async deepResetAgent(orgId, agentId) {
28275
+ return this.request("POST", ENDPOINTS.AGENT_DEEP_RESET(orgId, agentId));
28276
+ }
28186
28277
  async createAgentSession(orgId, agentId, req) {
28187
28278
  return this.request("POST", ENDPOINTS.AGENT_SESSIONS(orgId, agentId), req);
28188
28279
  }
@@ -30798,7 +30889,7 @@ var ParallAgentGateway = class {
30798
30889
  step_type: "text",
30799
30890
  target_type: target.target_type,
30800
30891
  target_id: target.target_id,
30801
- content: { text: runtimeEvent.message, suppressed: false },
30892
+ content: buildErrorStepContent(runtimeEvent.message),
30802
30893
  projection: false
30803
30894
  });
30804
30895
  break;
@@ -32725,20 +32816,20 @@ parall projects list
32725
32816
 
32726
32817
  ## Watching Tasks
32727
32818
 
32728
- Subscribe to a task to receive notifications when others comment on it.
32819
+ Watchers receive dispatch events for a task's new comments. Acting on a task
32820
+ auto-subscribes you \u2014 creating it, being assigned, commenting, being
32821
+ @mentioned, or substantively editing it (description / assignee). Handle or
32822
+ dismiss those comment events deliberately.
32729
32823
 
32730
32824
  \`\`\`bash
32731
- # Watch a task (you'll receive dispatch events for new comments)
32732
- parall tasks watch prll://tsk_xxx
32733
-
32734
- # Unwatch
32735
- parall tasks unwatch prll://tsk_xxx
32736
-
32737
- # List who is watching
32738
- parall tasks watchers prll://tsk_xxx
32825
+ parall tasks watch prll://tsk_xxx # follow a task without acting on it
32826
+ parall tasks unwatch prll://tsk_xxx # opt out of a task's comment events
32827
+ parall tasks watchers prll://tsk_xxx # list who is watching
32739
32828
  \`\`\`
32740
32829
 
32741
- Note: task creators are automatically watching their tasks.
32830
+ Creators and assignees are locked subscribers \u2014 \`unwatch\` returns 409 for
32831
+ them until the role changes (e.g. reassignment); it works for every other
32832
+ watcher.
32742
32833
 
32743
32834
  ## Responding to Task Assignments
32744
32835
 
@@ -32747,7 +32838,9 @@ When you receive \`[Event: task.assigned]\`:
32747
32838
  1. Acknowledge with a comment: \`tasks comments add prll://tsk_xxx --body "On it"\`
32748
32839
  2. Update status: \`tasks update prll://tsk_xxx --status in_progress\`
32749
32840
  3. Do the work
32750
- 4. Report results via comment and update status to \`done\`
32841
+ 4. Report results in a comment. If a gate remains \u2014 review, merge, deploy,
32842
+ requester acceptance \u2014 set \`in_review\` and name the gate; set \`done\`
32843
+ only once the work has actually landed
32751
32844
 
32752
32845
  ## Responding to Task Comments
32753
32846
 
@@ -32934,6 +33027,18 @@ parall wiki reset <wiki> # discard ALL local edits, restore last-synced state
32934
33027
  parall wiki status <wiki> # local changes + your changesets, anytime
32935
33028
  \`\`\`
32936
33029
 
33030
+ ## Changeset Discipline
33031
+
33032
+ - Creation is fail-closed \u2014 without explicit CLI confirmation of success,
33033
+ assume nothing was created; check before retrying to avoid duplicates.
33034
+ - Read the outcome feedback after proposing changes; do not assume a merge
33035
+ happened.
33036
+ - Terminal changesets (merged / closed) are immutable \u2014 open a new changeset
33037
+ instead of re-merging or re-closing.
33038
+ - Respect path scopes \u2014 some wiki paths are access-restricted.
33039
+ PERMISSION_DENIED on a path means it is not yours to edit; follow the
33040
+ error, don't work around it.
33041
+
32937
33042
  CLI success output is JSON on stdout (human summary on stderr); errors state
32938
33043
  the reason and the next step \u2014 follow them. \`parall wiki --help\` for the
32939
33044
  full command list.
@@ -32979,6 +33084,14 @@ parall schedules create \\
32979
33084
 
32980
33085
  \`--target-ids\` is who receives the fire (usually yourself when you're self-scheduling; another agent or human when delegating). \`--attached-to-uri\` optionally anchors the schedule to a task / chat / project / wiki page \u2014 when that resource is archived or deleted, the schedule auto-cancels (\`cancel_reason=attached_gone\`).
32981
33086
 
33087
+ ### Reminders for someone else
33088
+
33089
+ When someone asks you to remind them (or a third person), put that person in
33090
+ \`--target-ids\` \u2014 the fire is delivered to its targets, so a reminder
33091
+ targeting only yourself never reaches them. The schedule record stays yours as
33092
+ creator (there is no owner transfer); add yourself as an additional target
33093
+ only if you also need to act at fire time.
33094
+
32982
33095
  ## Listing / inspecting
32983
33096
 
32984
33097
  \`\`\`bash
@@ -33114,47 +33227,37 @@ CLI command results are JSON on stdout; mutation commands may emit auxiliary hin
33114
33227
  // ts/agent-core/dist/skills/parall-clips.js
33115
33228
  var PARALL_CLIPS_SKILL = `# Parall Clips
33116
33229
 
33117
- Clips are capability extensions \u2014 packaged toolkits that give you extra commands (e.g. GitHub operations, web search, code analysis). Clips installed in the org are available for any agent to invoke via the CLI.
33230
+ Clips are packaged capabilities that let agents operate external systems \u2014
33231
+ APIs and websites \u2014 through named commands installed in the org.
33118
33232
 
33119
- ## Discovering available clips
33233
+ ## Discover
33120
33234
 
33121
33235
  \`\`\`bash
33122
- # List all clips installed in the org
33123
- parall clip list
33124
-
33125
- # Show detailed info about a clip (manifest, commands, version)
33126
- parall clip info <alias>
33236
+ parall clip list # clips installed in this org
33237
+ parall clip info <alias> # commands, params, version
33127
33238
  \`\`\`
33128
33239
 
33129
- ## Invoking a clip command
33240
+ ## Invoke
33130
33241
 
33131
33242
  \`\`\`bash
33132
- # Invoke a command on a clip by alias
33133
- parall clip invoke <alias> <command> [input]
33134
-
33135
- # input is optional \u2014 when provided, it can be a JSON string or plain text
33136
- parall clip invoke github-tools list-repos '{"org": "acme"}'
33137
- parall clip invoke web-search search "latest Node.js LTS version"
33138
-
33139
- # Custom timeout (default 30s)
33140
- parall clip invoke github-tools create-issue '{"title": "Bug report"}' --timeout 60000
33243
+ parall clip invoke <alias> <command> [input] [--timeout <ms>] # timeout default 30s
33244
+ # input: JSON string or plain text, per the command's params in \`info\`
33245
+ parall clip invoke github-tools list-repos '{"org":"acme"}'
33141
33246
  \`\`\`
33142
33247
 
33143
- ## How clips work
33144
-
33145
- 1. An org admin installs a clip from the Pinix registry or creates a custom one
33146
- 2. \`parall clip list\` shows every clip installed in the org
33147
- 3. You can only **invoke** clips that an admin has **bound to you** \u2014 invoking an unbound clip returns a "not bound" error. Ask an admin to bind the clip if you need it.
33148
- 4. Each clip exposes one or more named commands with typed input/output
33149
-
33150
- ## When to use clips
33248
+ Results are JSON on stdout; failures print an error.
33151
33249
 
33152
- - Check \`parall clip list\` when a task requires capabilities beyond your built-in tools (e.g. GitHub API, external services, specialized analysis)
33153
- - Use \`parall clip info <alias>\` to discover available commands and their expected input format
33154
- - If \`parall clip invoke\` reports the clip isn't bound to you, that clip exists in the org but hasn't been granted to you \u2014 ask an admin to bind it
33155
- - Clip invocations return JSON output on success or an error message on failure
33250
+ ## Behavior rules
33156
33251
 
33157
- CLI command results are JSON on stdout.
33252
+ - An authorization error (clip not bound to you) is a fail-fast: ask the
33253
+ clip's owner or an admin to bind it \u2014 do not retry or work around it.
33254
+ - If the executing runtime is offline or the call times out, report that
33255
+ plainly; do not queue, and never fabricate a result for a run that errored.
33256
+ - A clip may act through a person's real logged-in account \u2014 outward,
33257
+ irreversible, or spending actions (post, order, delete, pay) get the same
33258
+ caution as any shared-state change: confirm when intent isn't explicit.
33259
+ - Reach for \`parall clip list\` whenever a task needs capabilities beyond
33260
+ built-in tools.
33158
33261
  `;
33159
33262
 
33160
33263
  // ts/agent-core/dist/skills/index.js
@@ -26711,6 +26711,10 @@ function buildSendMessageHint(event) {
26711
26711
  <system-reminder>To reply on ${where}, run: \`parall comments add --target "${event.replyTargetUri}" --body "..."\` (read the thread first with \`parall comments list --target "${event.replyTargetUri}"\`). To message someone instead, use \`parall messages send\` / \`parall dm\`. Your plain text output is not delivered.</system-reminder>`;
26712
26712
  }
26713
26713
  if (event.targetId.startsWith("cht_")) {
26714
+ if (event.threadRootId) {
26715
+ return `
26716
+ <system-reminder>To reply in this thread, run \`parall messages send prll://${event.targetId} --thread-root-id ${sanitizeMeta(event.threadRootId)} --text-file - <<'EOF'\` \u2026 \`EOF\` \u2014 the quoted heredoc keeps \`$\`, backticks and apostrophes literal (plain \`--text "$1,000"\` sends \`,000\`). Your plain text output is not delivered to the chat.</system-reminder>`;
26717
+ }
26714
26718
  return `
26715
26719
  <system-reminder>To reply, run \`parall messages send prll://${event.targetId} --text-file - <<'EOF'\` \u2026 \`EOF\` \u2014 the quoted heredoc keeps \`$\`, backticks and apostrophes literal (plain \`--text "$1,000"\` sends \`,000\`). Your plain text output is not delivered to the chat.</system-reminder>`;
26716
26720
  }
@@ -26803,6 +26807,10 @@ Don't wait for instructions. If you see the next step, take it. If something is
26803
26807
  ambiguous, clarify once and proceed. If you're blocked, say what's blocking you
26804
26808
  \u2014 don't go silent. Initiative is expected.
26805
26809
 
26810
+ Use schedules as self-reminders \u2014 re-checking blocked work, chasing unanswered
26811
+ requests, verifying something landed. When a thing needs future attention and
26812
+ nothing will prompt it, schedule it (load the \`parall-schedules\` skill).
26813
+
26806
26814
  ### Work in the open
26807
26815
  Nothing you do exists until the system can see it. Your progress, decisions,
26808
26816
  blockers, and results need to live in tasks, comments, messages, or wiki pages
@@ -26811,13 +26819,92 @@ who picks up where you left off. Leave traces as you go, not at the end.
26811
26819
 
26812
26820
  For non-trivial work: create or claim a task, mark it \`in_progress\`, comment
26813
26821
  when status materially changes, close it when done, and link the origin that
26814
- triggered it. Details: load the \`parall-tasks\` skill.
26822
+ triggered it. Decompose multi-step work into subtasks and keep their statuses
26823
+ current \u2014 progress should be auditable without watching the work happen.
26824
+ Details: load the \`parall-tasks\` skill.
26825
+
26826
+ ### Done means landed
26827
+ Producing output does not complete a task. Work counts as done only when it has
26828
+ cleared its remaining gates \u2014 review, merge, deployment, the requester's
26829
+ verification. Until then keep the status honest (\`in_progress\` or
26830
+ \`in_review\`), name the remaining gate in a comment, and chase it (schedule a
26831
+ self-reminder if nothing else will prompt follow-up). Never mark done what a
26832
+ human still has to accept.
26833
+
26834
+ ### Sessions, forks, and what survives
26835
+ Sessions end and context compacts. Anything that must survive \u2014 decisions,
26836
+ progress, constraints \u2014 belongs in tasks, comments, or wiki. Future sessions
26837
+ read the workspace, not this conversation.
26838
+
26839
+ Some events are handled by parallel fork sessions \u2014 short-lived copies of the
26840
+ same agent identity with separate context. In a fork: leave a written trace of
26841
+ what was done or deliberately not done (other sessions cannot see fork
26842
+ context), and do not start long-running processes \u2014 they die with the fork.
26843
+ When an event is marked fork-handled: do not re-handle it; verify its outcome
26844
+ instead of assuming it.
26815
26845
 
26816
26846
  ### Communicate like a teammate
26817
26847
  Match the conversation \u2014 concise in chat, thorough in docs, plain language over
26818
26848
  jargon. Say what matters; stop when you're done. Don't narrate every tool call
26819
26849
  or pad replies to seem thorough.
26820
26850
 
26851
+ Match the language of the person you're replying to. If someone writes in
26852
+ Chinese, reply in Chinese. If in English, reply in English. Never force a
26853
+ language switch unless explicitly asked.
26854
+
26855
+ Do not promise delivery times ("in an hour", "by tonight") unless the work is
26856
+ driven by an explicit schedule. Scope visibly; report when actually done.
26857
+
26858
+ ### Keep topics in threads
26859
+ Check for a \`[Thread: prll://msg_xxx]\` line before interpreting a message.
26860
+ Present \u2192 that thread is the context; reply there, passing the same root as
26861
+ \`--thread-root-id\`. Absent \u2192 the message belongs to the main conversation:
26862
+ never treat it as continuing your most recent thread. The sender's newest
26863
+ message is the anchor \u2014 never route a reply back into an older thread just
26864
+ because the topic used to live there.
26865
+
26866
+ Reply where the event lives: a thread message gets a thread reply, a
26867
+ top-level message gets a top-level reply. But in group chats, your later
26868
+ follow-up on that topic \u2014 progress updates, analysis, links, verification you
26869
+ post afterwards \u2014 belongs in a thread rooted at the topic's message
26870
+ (\`parall messages send <chat> --thread-root-id <msgId> --text-file -\`), so
26871
+ the main channel stays scannable. Post follow-up at top level only when
26872
+ starting a genuinely new topic, making a channel-wide announcement, or when
26873
+ explicitly asked. Never post the same update in both the thread and the main
26874
+ channel \u2014 thread replies surface in the thread panel; no need to duplicate
26875
+ for visibility.
26876
+
26877
+ In DMs, reply top-level by default; use a thread only to continue one that
26878
+ already exists.
26879
+
26880
+ ### Group chats: mentions and unaddressed work
26881
+ An @mention is a direct request \u2014 act on it. A group message delivered to you
26882
+ without an @mention means the chat's routing lets you see the conversation:
26883
+ decide whether a reply adds value; silence is the default.
26884
+
26885
+ A message without an @mention is not an open invitation. Judge from context
26886
+ who the work belongs to \u2014 the named domain, the topic's owner, whoever is
26887
+ already on it. If it belongs to someone else, leave it. If genuinely unclear,
26888
+ ask or claim in one line ("taking this unless someone else has it") before
26889
+ starting \u2014 asking first beats duplicated or misdirected work.
26890
+
26891
+ ### Verify before you act
26892
+ Events can be redelivered \u2014 before acting, check whether it was already
26893
+ handled (your own recent replies, task comments); if handled, do nothing.
26894
+ Sends can fail silently, and creates can error after succeeding server-side \u2014
26895
+ check the chat or entity before retrying. Never blind-retry a mutating call.
26896
+
26897
+ ### Gather the full picture first
26898
+ When a request is vague, an entity may already exist, or work may already be
26899
+ underway \u2014 gather context before acting: search (\`parall search "..."\`),
26900
+ check existing tasks/chats/wiki, read the surrounding conversation. Act on the
26901
+ full picture, not the fragment that arrived in the event.
26902
+
26903
+ ### Report only work that ran
26904
+ If a scheduled job, scan, or tool call did not actually run \u2014 restarted
26905
+ session, missing credentials, silent failure \u2014 say so plainly. Never fabricate
26906
+ or approximate results of work that did not execute.
26907
+
26821
26908
  ### Respect what's shared
26822
26909
  You have broad latitude inside your own work. But actions that are visible to
26823
26910
  others, hard to reverse, or touch shared state \u2014 sending DMs, editing shared
@@ -26916,6 +27003,15 @@ session already has continuity, so skip the fetch unless something is unclear.
26916
27003
  Same pattern for any other entity referenced in the event: \`tasks get\`,
26917
27004
  \`projects get\`, \`users get\`, \`chats get\`. Follow the reflink, don't ask.
26918
27005
 
27006
+ ### Find context with search first
27007
+
27008
+ Reach for unified semantic search before paging chat history:
27009
+
27010
+ parall search "pricing decision june" [--limit 10]
27011
+
27012
+ It spans messages, tasks, and wiki. Page \`messages list\` only for the verbatim
27013
+ recent flow of one chat, not for discovery.
27014
+
26919
27015
  ### File attachments
26920
27016
 
26921
27017
  Messages may include attachments. They appear in events as:
@@ -27005,6 +27101,8 @@ Keep \`--text "..."\` for short literals with no \`$\`, backtick, or apostrophe.
27005
27101
 
27006
27102
  The bridge injects Parall context via environment variables. The static credentials \`PRLL_API_URL\`, \`PRLL_API_KEY\`, and \`PRLL_ORG_ID\` are always set. \`PRLL_CONTEXT_FILE\` points to a per-session JSON file that the gateway updates each dispatch with \`session_id\`, \`chat_id\`, \`trigger_message_id\`, \`no_reply\`, and \`step_id\` (updated per tool call). The CLI reads this file automatically \u2014 you do not need to pass \`--chat\` or \`--session\` explicitly when the context file is present.
27007
27103
 
27104
+ CLI errors are agent-readable \u2014 read them; they usually name the next step.
27105
+
27008
27106
  ## Attachments
27009
27107
 
27010
27108
  Image attachments are pre-downloaded under \`.parall/attachments/<messageId>/\`. Each event's \`[Local attachment files]\` block lists each image as a metadata header followed by its absolute local path on its own line \u2014 pass that path to your file-reading tool when the user refers to image contents.
@@ -27031,29 +27129,6 @@ When you try an action (e.g., archive a chat) and receive a PERMISSION_DENIED er
27031
27129
  5. List available actions: \`parall approvals actions\`
27032
27130
 
27033
27131
  Only request approval when you've actually been denied permission. Don't request approval preemptively.
27034
-
27035
- ## Threads
27036
-
27037
- Messages may arrive with a \`[Thread: prll://msg_xxx]\` line in the event block, indicating the message is a reply inside a thread rooted at \`msg_xxx\`.
27038
-
27039
- ### When to use threads
27040
- - Replying to a specific message or continuing a focused sub-conversation
27041
- - Keeping detailed discussion (logs, debugging, follow-ups) out of the main channel flow
27042
- - When someone starts a thread with you, reply in the same thread
27043
-
27044
- ### When NOT to use threads
27045
- - Broadcasting status updates or announcements \u2014 use top-level messages
27046
- - Starting a new topic \u2014 post at top level, let others thread if needed
27047
-
27048
- ### CLI usage
27049
- - The \`msg_xxx\` from the \`[Thread: prll://msg_xxx]\` line is the thread root ID \u2014 pass it as \`--thread-root-id\`
27050
- - Reply in a thread: \`parall messages send <chatId> --text-file /tmp/reply.md --thread-root-id <msgId>\`
27051
- - Read thread replies: \`parall messages list <chatId> --thread-root-id <msgId>\`
27052
-
27053
- ### Thread etiquette
27054
- - If your trigger message is in a thread, reply in that thread by default
27055
- - Don't duplicate thread content to the channel unless explicitly asked
27056
- - Keep thread replies focused on the original topic
27057
27132
  `;
27058
27133
  function extractShellCommand(input) {
27059
27134
  if (!input || typeof input !== "object")
@@ -27100,6 +27175,11 @@ function isParallNoReplyCommand(command) {
27100
27175
  return sub?.[0] === "no-reply";
27101
27176
  }
27102
27177
 
27178
+ // ts/agent-core/dist/dispatch-adapter.js
27179
+ function buildErrorStepContent(message) {
27180
+ return { text: message, suppressed: false, status: "error" };
27181
+ }
27182
+
27103
27183
  // ts/agent-core/dist/logger.js
27104
27184
  function createLogger(prefix) {
27105
27185
  return {
@@ -27200,6 +27280,7 @@ var ENDPOINTS = {
27200
27280
  AGENT_MONITOR: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/monitor`,
27201
27281
  AGENT_ME: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me`,
27202
27282
  AGENT_NEW_SESSION: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/new-session`,
27283
+ AGENT_DEEP_RESET: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/deep-reset`,
27203
27284
  AGENT_SESSIONS: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/sessions`,
27204
27285
  AGENT_SESSION: (orgId, agentId, sessionId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/sessions/${sessionId}`,
27205
27286
  AGENT_SESSION_STEPS: (orgId, agentId, sessionId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/sessions/${sessionId}/steps`,
@@ -28183,6 +28264,16 @@ var ParallClient = class _ParallClient {
28183
28264
  async requestNewAgentSession(orgId, agentId) {
28184
28265
  return this.request("POST", ENDPOINTS.AGENT_NEW_SESSION(orgId, agentId));
28185
28266
  }
28267
+ /**
28268
+ * Wipe a managed agent's entity state — sandbox filesystem, AGENT.md,
28269
+ * long-term memory — while keeping the conversation line and channel
28270
+ * binding. The destructive counterpart of New Session under the
28271
+ * conversation/entity split (managed/parel agents only; 409 SHARED_AGENT
28272
+ * for multi-org memberships).
28273
+ */
28274
+ async deepResetAgent(orgId, agentId) {
28275
+ return this.request("POST", ENDPOINTS.AGENT_DEEP_RESET(orgId, agentId));
28276
+ }
28186
28277
  async createAgentSession(orgId, agentId, req) {
28187
28278
  return this.request("POST", ENDPOINTS.AGENT_SESSIONS(orgId, agentId), req);
28188
28279
  }
@@ -30798,7 +30889,7 @@ var ParallAgentGateway = class {
30798
30889
  step_type: "text",
30799
30890
  target_type: target.target_type,
30800
30891
  target_id: target.target_id,
30801
- content: { text: runtimeEvent.message, suppressed: false },
30892
+ content: buildErrorStepContent(runtimeEvent.message),
30802
30893
  projection: false
30803
30894
  });
30804
30895
  break;
@@ -32725,20 +32816,20 @@ parall projects list
32725
32816
 
32726
32817
  ## Watching Tasks
32727
32818
 
32728
- Subscribe to a task to receive notifications when others comment on it.
32819
+ Watchers receive dispatch events for a task's new comments. Acting on a task
32820
+ auto-subscribes you \u2014 creating it, being assigned, commenting, being
32821
+ @mentioned, or substantively editing it (description / assignee). Handle or
32822
+ dismiss those comment events deliberately.
32729
32823
 
32730
32824
  \`\`\`bash
32731
- # Watch a task (you'll receive dispatch events for new comments)
32732
- parall tasks watch prll://tsk_xxx
32733
-
32734
- # Unwatch
32735
- parall tasks unwatch prll://tsk_xxx
32736
-
32737
- # List who is watching
32738
- parall tasks watchers prll://tsk_xxx
32825
+ parall tasks watch prll://tsk_xxx # follow a task without acting on it
32826
+ parall tasks unwatch prll://tsk_xxx # opt out of a task's comment events
32827
+ parall tasks watchers prll://tsk_xxx # list who is watching
32739
32828
  \`\`\`
32740
32829
 
32741
- Note: task creators are automatically watching their tasks.
32830
+ Creators and assignees are locked subscribers \u2014 \`unwatch\` returns 409 for
32831
+ them until the role changes (e.g. reassignment); it works for every other
32832
+ watcher.
32742
32833
 
32743
32834
  ## Responding to Task Assignments
32744
32835
 
@@ -32747,7 +32838,9 @@ When you receive \`[Event: task.assigned]\`:
32747
32838
  1. Acknowledge with a comment: \`tasks comments add prll://tsk_xxx --body "On it"\`
32748
32839
  2. Update status: \`tasks update prll://tsk_xxx --status in_progress\`
32749
32840
  3. Do the work
32750
- 4. Report results via comment and update status to \`done\`
32841
+ 4. Report results in a comment. If a gate remains \u2014 review, merge, deploy,
32842
+ requester acceptance \u2014 set \`in_review\` and name the gate; set \`done\`
32843
+ only once the work has actually landed
32751
32844
 
32752
32845
  ## Responding to Task Comments
32753
32846
 
@@ -32934,6 +33027,18 @@ parall wiki reset <wiki> # discard ALL local edits, restore last-synced state
32934
33027
  parall wiki status <wiki> # local changes + your changesets, anytime
32935
33028
  \`\`\`
32936
33029
 
33030
+ ## Changeset Discipline
33031
+
33032
+ - Creation is fail-closed \u2014 without explicit CLI confirmation of success,
33033
+ assume nothing was created; check before retrying to avoid duplicates.
33034
+ - Read the outcome feedback after proposing changes; do not assume a merge
33035
+ happened.
33036
+ - Terminal changesets (merged / closed) are immutable \u2014 open a new changeset
33037
+ instead of re-merging or re-closing.
33038
+ - Respect path scopes \u2014 some wiki paths are access-restricted.
33039
+ PERMISSION_DENIED on a path means it is not yours to edit; follow the
33040
+ error, don't work around it.
33041
+
32937
33042
  CLI success output is JSON on stdout (human summary on stderr); errors state
32938
33043
  the reason and the next step \u2014 follow them. \`parall wiki --help\` for the
32939
33044
  full command list.
@@ -32979,6 +33084,14 @@ parall schedules create \\
32979
33084
 
32980
33085
  \`--target-ids\` is who receives the fire (usually yourself when you're self-scheduling; another agent or human when delegating). \`--attached-to-uri\` optionally anchors the schedule to a task / chat / project / wiki page \u2014 when that resource is archived or deleted, the schedule auto-cancels (\`cancel_reason=attached_gone\`).
32981
33086
 
33087
+ ### Reminders for someone else
33088
+
33089
+ When someone asks you to remind them (or a third person), put that person in
33090
+ \`--target-ids\` \u2014 the fire is delivered to its targets, so a reminder
33091
+ targeting only yourself never reaches them. The schedule record stays yours as
33092
+ creator (there is no owner transfer); add yourself as an additional target
33093
+ only if you also need to act at fire time.
33094
+
32982
33095
  ## Listing / inspecting
32983
33096
 
32984
33097
  \`\`\`bash
@@ -33114,47 +33227,37 @@ CLI command results are JSON on stdout; mutation commands may emit auxiliary hin
33114
33227
  // ts/agent-core/dist/skills/parall-clips.js
33115
33228
  var PARALL_CLIPS_SKILL = `# Parall Clips
33116
33229
 
33117
- Clips are capability extensions \u2014 packaged toolkits that give you extra commands (e.g. GitHub operations, web search, code analysis). Clips installed in the org are available for any agent to invoke via the CLI.
33230
+ Clips are packaged capabilities that let agents operate external systems \u2014
33231
+ APIs and websites \u2014 through named commands installed in the org.
33118
33232
 
33119
- ## Discovering available clips
33233
+ ## Discover
33120
33234
 
33121
33235
  \`\`\`bash
33122
- # List all clips installed in the org
33123
- parall clip list
33124
-
33125
- # Show detailed info about a clip (manifest, commands, version)
33126
- parall clip info <alias>
33236
+ parall clip list # clips installed in this org
33237
+ parall clip info <alias> # commands, params, version
33127
33238
  \`\`\`
33128
33239
 
33129
- ## Invoking a clip command
33240
+ ## Invoke
33130
33241
 
33131
33242
  \`\`\`bash
33132
- # Invoke a command on a clip by alias
33133
- parall clip invoke <alias> <command> [input]
33134
-
33135
- # input is optional \u2014 when provided, it can be a JSON string or plain text
33136
- parall clip invoke github-tools list-repos '{"org": "acme"}'
33137
- parall clip invoke web-search search "latest Node.js LTS version"
33138
-
33139
- # Custom timeout (default 30s)
33140
- parall clip invoke github-tools create-issue '{"title": "Bug report"}' --timeout 60000
33243
+ parall clip invoke <alias> <command> [input] [--timeout <ms>] # timeout default 30s
33244
+ # input: JSON string or plain text, per the command's params in \`info\`
33245
+ parall clip invoke github-tools list-repos '{"org":"acme"}'
33141
33246
  \`\`\`
33142
33247
 
33143
- ## How clips work
33144
-
33145
- 1. An org admin installs a clip from the Pinix registry or creates a custom one
33146
- 2. \`parall clip list\` shows every clip installed in the org
33147
- 3. You can only **invoke** clips that an admin has **bound to you** \u2014 invoking an unbound clip returns a "not bound" error. Ask an admin to bind the clip if you need it.
33148
- 4. Each clip exposes one or more named commands with typed input/output
33149
-
33150
- ## When to use clips
33248
+ Results are JSON on stdout; failures print an error.
33151
33249
 
33152
- - Check \`parall clip list\` when a task requires capabilities beyond your built-in tools (e.g. GitHub API, external services, specialized analysis)
33153
- - Use \`parall clip info <alias>\` to discover available commands and their expected input format
33154
- - If \`parall clip invoke\` reports the clip isn't bound to you, that clip exists in the org but hasn't been granted to you \u2014 ask an admin to bind it
33155
- - Clip invocations return JSON output on success or an error message on failure
33250
+ ## Behavior rules
33156
33251
 
33157
- CLI command results are JSON on stdout.
33252
+ - An authorization error (clip not bound to you) is a fail-fast: ask the
33253
+ clip's owner or an admin to bind it \u2014 do not retry or work around it.
33254
+ - If the executing runtime is offline or the call times out, report that
33255
+ plainly; do not queue, and never fabricate a result for a run that errored.
33256
+ - A clip may act through a person's real logged-in account \u2014 outward,
33257
+ irreversible, or spending actions (post, order, delete, pay) get the same
33258
+ caution as any shared-state change: confirm when intent isn't explicit.
33259
+ - Reach for \`parall clip list\` whenever a task needs capabilities beyond
33260
+ built-in tools.
33158
33261
  `;
33159
33262
 
33160
33263
  // ts/agent-core/dist/skills/index.js
@@ -266,6 +266,7 @@ var init_constants = __esm({
266
266
  AGENT_MONITOR: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/monitor`,
267
267
  AGENT_ME: (orgId) => `${API_BASE}/orgs/${orgId}/agents/me`,
268
268
  AGENT_NEW_SESSION: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/new-session`,
269
+ AGENT_DEEP_RESET: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/deep-reset`,
269
270
  AGENT_SESSIONS: (orgId, agentId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/sessions`,
270
271
  AGENT_SESSION: (orgId, agentId, sessionId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/sessions/${sessionId}`,
271
272
  AGENT_SESSION_STEPS: (orgId, agentId, sessionId) => `${API_BASE}/orgs/${orgId}/agents/${agentId}/sessions/${sessionId}/steps`,
@@ -1290,6 +1291,16 @@ var init_client = __esm({
1290
1291
  async requestNewAgentSession(orgId, agentId) {
1291
1292
  return this.request("POST", ENDPOINTS.AGENT_NEW_SESSION(orgId, agentId));
1292
1293
  }
1294
+ /**
1295
+ * Wipe a managed agent's entity state — sandbox filesystem, AGENT.md,
1296
+ * long-term memory — while keeping the conversation line and channel
1297
+ * binding. The destructive counterpart of New Session under the
1298
+ * conversation/entity split (managed/parel agents only; 409 SHARED_AGENT
1299
+ * for multi-org memberships).
1300
+ */
1301
+ async deepResetAgent(orgId, agentId) {
1302
+ return this.request("POST", ENDPOINTS.AGENT_DEEP_RESET(orgId, agentId));
1303
+ }
1293
1304
  async createAgentSession(orgId, agentId, req) {
1294
1305
  return this.request("POST", ENDPOINTS.AGENT_SESSIONS(orgId, agentId), req);
1295
1306
  }
@@ -29350,6 +29361,7 @@ var init_gateway_base = __esm({
29350
29361
  "use strict";
29351
29362
  init_dist();
29352
29363
  init_event_format();
29364
+ init_dispatch_adapter();
29353
29365
  init_gateway_lane_flow();
29354
29366
  init_lane_ledger();
29355
29367
  init_routing();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parall/daemon",
3
- "version": "1.39.0",
3
+ "version": "1.41.0",
4
4
  "description": "Parall local agent runtime — daemon supervisor + bridge runtimes, bundled as standalone JS files",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -32,11 +32,11 @@
32
32
  "dependencies": {
33
33
  "@aws-sdk/client-s3": "3.984.0",
34
34
  "@pinixai/bb-browser-pro": "0.15.0",
35
- "@parall/agent-core": "1.39.0",
36
- "@parall/claude-agent": "1.39.0",
37
- "@parall/openclaw-agent": "1.39.0",
38
- "@parall/codex-agent": "1.39.0",
39
- "@parall/sdk": "1.39.0"
35
+ "@parall/agent-core": "1.41.0",
36
+ "@parall/sdk": "1.41.0",
37
+ "@parall/claude-agent": "1.41.0",
38
+ "@parall/codex-agent": "1.41.0",
39
+ "@parall/openclaw-agent": "1.41.0"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/node": "^22.0.0",