pi-herdsman 0.4.0 → 0.5.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/README.md +4 -4
- package/SKILL.md +18 -16
- package/dist/index.js +83 -81
- package/docs/agent-api.md +1 -1
- package/docs/concepts/agents.md +15 -16
- package/docs/concepts/lifecycle.md +5 -5
- package/docs/concepts/supervision.md +1 -1
- package/docs/development/documentation.md +1 -1
- package/docs/development/smoke-testing.md +7 -5
- package/docs/getting-started.md +3 -3
- package/docs/guides/agent-definitions.md +1 -1
- package/docs/guides/customizing-agents.md +1 -1
- package/docs/guides/handoffs.md +54 -20
- package/docs/guides/recovery.md +8 -7
- package/docs/reference/agent-definition-schema.md +2 -2
- package/docs/reference/agent.md +32 -37
- package/docs/reference/commands.md +3 -3
- package/docs/reference/configuration.md +48 -96
- package/docs/reference/errors.md +1 -1
- package/package.json +2 -2
package/docs/agent-api.md
CHANGED
|
@@ -78,7 +78,7 @@ question.
|
|
|
78
78
|
|
|
79
79
|
## Pass evidence through handoffs
|
|
80
80
|
|
|
81
|
-
Read [Handoffs and files](guides/handoffs.md) for `files`, result
|
|
81
|
+
Read [Handoffs and files](guides/handoffs.md) for `files`, result references, body
|
|
82
82
|
references, and coordination artifacts. That guide owns the evidence-transfer
|
|
83
83
|
workflow; the `agent` reference owns the accepted request fields.
|
|
84
84
|
|
package/docs/concepts/agents.md
CHANGED
|
@@ -32,8 +32,9 @@ my-review
|
|
|
32
32
|
|
|
33
33
|
Use the exact `agent` value from `agent list` only for
|
|
34
34
|
`steer.agent`, `reply.agent`, or `close.agent` while those actions are listed
|
|
35
|
-
in `available_actions`. An agent label is the
|
|
36
|
-
|
|
35
|
+
in `available_actions`. An agent label is the stable logical name across
|
|
36
|
+
sequential generations of one managed session, not a continuation selector.
|
|
37
|
+
It is a control target only for the currently live generation.
|
|
37
38
|
|
|
38
39
|
Labels must begin with a lowercase letter, contain only lowercase letters,
|
|
39
40
|
digits, `_`, or `-`, and be at most 32 characters.
|
|
@@ -43,14 +44,13 @@ digits, `_`, or `-`, and be at most 32 characters.
|
|
|
43
44
|
Every managed agent has an exact Pi session. The list may expose the session
|
|
44
45
|
ID and path for correlation.
|
|
45
46
|
|
|
46
|
-
A session path or full UUID can be supplied
|
|
47
|
-
historical work.
|
|
48
|
-
assignment and uses the saved session's cwd
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
blocks concurrent activation of that session.
|
|
47
|
+
A session path or full UUID can be supplied to the `continue` action to continue
|
|
48
|
+
historical work. Continuation creates a new agent generation for one new
|
|
49
|
+
assignment and uses the saved session's cwd, definition, logical label, and
|
|
50
|
+
historical context. The caller cannot rename the continued session. The Pi
|
|
51
|
+
session remains the continuation identity, not a live-control identity. An
|
|
52
|
+
exact active or unresolved managed representation blocks concurrent activation
|
|
53
|
+
of that session.
|
|
54
54
|
|
|
55
55
|
### herdr identities
|
|
56
56
|
|
|
@@ -104,18 +104,17 @@ and runtime state are cleaned up. Failed assignments follow the same terminal
|
|
|
104
104
|
cleanup path.
|
|
105
105
|
|
|
106
106
|
The Pi session remains available after agent cleanup. To continue the same
|
|
107
|
-
conversational context,
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
delegation.
|
|
107
|
+
conversational context, use `continue` with the exact session ID or session path
|
|
108
|
+
returned with the result. This creates a new agent generation, which uses the
|
|
109
|
+
current effective authorized configuration for the saved agent definition. To
|
|
110
|
+
derive a separate context instead, use `fork` on a `delegate` action.
|
|
112
111
|
|
|
113
112
|
The identities are therefore:
|
|
114
113
|
|
|
115
114
|
```text
|
|
116
115
|
agent definition → configuration for new work
|
|
117
116
|
Pi session → durable conversational context and continuation identity
|
|
118
|
-
agent label → live control
|
|
117
|
+
agent label → stable logical name across sequential generations; live control target only for the current generation
|
|
119
118
|
```
|
|
120
119
|
|
|
121
120
|
## See also
|
|
@@ -102,11 +102,11 @@ exactly-once delivery for both completed and failed terminal results.
|
|
|
102
102
|
## Session continuation
|
|
103
103
|
|
|
104
104
|
Agent cleanup does not delete the Pi session. To continue completed context,
|
|
105
|
-
use the exact returned session with `
|
|
106
|
-
|
|
107
|
-
and
|
|
108
|
-
|
|
109
|
-
session is required.
|
|
105
|
+
use the exact returned session with `continue`; Pi Herdsman starts a new agent
|
|
106
|
+
generation for the new assignment. The continuation uses the saved cwd, session
|
|
107
|
+
history, definition, and logical label together with the current effective
|
|
108
|
+
authorized definition configuration. The caller cannot rename the continued
|
|
109
|
+
session. Use `delegate` with `fork` when a separate derived session is required.
|
|
110
110
|
Session continuation does not retain the old Herdr tab. A still-live
|
|
111
111
|
generation may be restored from its exact managed identity, while ordinary
|
|
112
112
|
same-workspace tab movement remains presentation-only and does not change
|
|
@@ -60,7 +60,7 @@ correlated `staff reply`; a reply clears the pending ask only after accepted
|
|
|
60
60
|
follow-up delivery. A replacement chief can answer an existing ask using its
|
|
61
61
|
current lease and unchanged ask ID. Chief and staff message actions accept
|
|
62
62
|
files; their text is prepared with the same canonical attachment renderer and
|
|
63
|
-
configured
|
|
63
|
+
configured Herdsman byte limits as agent messages, while durable supervision
|
|
64
64
|
records remain text-only.
|
|
65
65
|
|
|
66
66
|
## Supervision state
|
|
@@ -121,7 +121,7 @@ registry, or another synchronization subsystem.
|
|
|
121
121
|
- One H1 per file.
|
|
122
122
|
- Short descriptive headings.
|
|
123
123
|
- Current behavior only.
|
|
124
|
-
- Spell the visible product name `Pi Herdsman`, the package and repository identifier `pi-herdsman`, the local coordination directory `.pi-herdsman`, the
|
|
124
|
+
- Spell the visible product name `Pi Herdsman`, the package and repository identifier `pi-herdsman`, the local coordination directory `.pi-herdsman`, the configuration file `config.json`, and the upstream dependency `herdr`.
|
|
125
125
|
- No backlog task numbers in product docs.
|
|
126
126
|
- Keep canonical user and reference pages focused on current behavior.
|
|
127
127
|
- Examples must match current accepted schemas.
|
|
@@ -58,7 +58,7 @@ Use the exact returned session ID or path for a follow-up assignment:
|
|
|
58
58
|
|
|
59
59
|
```json
|
|
60
60
|
{
|
|
61
|
-
"action": "
|
|
61
|
+
"action": "continue",
|
|
62
62
|
"session": "<exact session>",
|
|
63
63
|
"task": "Continue the investigation with one short follow-up."
|
|
64
64
|
}
|
|
@@ -68,25 +68,27 @@ Verify:
|
|
|
68
68
|
|
|
69
69
|
- the same Pi session and session file are used;
|
|
70
70
|
- a new agent generation, run ID, request ID, and pane are created;
|
|
71
|
+
- the saved logical label is reused exactly (there is no continuation label override);
|
|
71
72
|
- the saved conversation context is available;
|
|
72
73
|
- the current effective definition configuration is used;
|
|
73
74
|
- exactly one result reaches the owner;
|
|
74
75
|
- cleanup removes the second agent, pane, mailbox, and runtime.
|
|
75
76
|
|
|
76
|
-
While the continuation assignment is active, submit another
|
|
77
|
-
|
|
77
|
+
While the continuation assignment is active, submit another `continue` request
|
|
78
|
+
for the same exact session. Verify it fails with
|
|
78
79
|
`agent_busy`, creates no duplicate agent or pane, and leaves the active
|
|
79
80
|
assignment unchanged. After both assignments finish, `agent list` must show
|
|
80
81
|
no completed idle agent.
|
|
81
82
|
|
|
82
|
-
## Historical session
|
|
83
|
+
## Historical session continuation
|
|
83
84
|
|
|
84
85
|
Use an exact saved session path or full UUID.
|
|
85
86
|
|
|
86
87
|
Verify:
|
|
87
88
|
|
|
88
89
|
- saved definition and cwd are respected;
|
|
89
|
-
-
|
|
90
|
+
- the saved logical label is reused exactly;
|
|
91
|
+
- session continuation uses the saved cwd;
|
|
90
92
|
- current effective agent override values are used for the new agent
|
|
91
93
|
generation;
|
|
92
94
|
- the exact session continues.
|
package/docs/getting-started.md
CHANGED
|
@@ -126,9 +126,9 @@ See [Status widget](reference/status-widget.md) for exact state, refresh, and
|
|
|
126
126
|
rendering behavior.
|
|
127
127
|
|
|
128
128
|
To continue a completed assignment with its existing conversational context,
|
|
129
|
-
use the exact `session_id` returned with its result in a new `
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
use the exact `session_id` returned with its result in a new `continue` request.
|
|
130
|
+
This starts a new agent generation with the saved session and current effective
|
|
131
|
+
definition configuration.
|
|
132
132
|
|
|
133
133
|
## 7. Recover only when needed
|
|
134
134
|
|
|
@@ -102,7 +102,7 @@ referencing a disabled definition can remain discoverable, but is rejected durin
|
|
|
102
102
|
assignment or fresh agent startup with an explicit disabled-definition reason
|
|
103
103
|
rather than silently dropping that definition.
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
`delegate` and `continue` reject disabled definitions with an
|
|
106
106
|
actionable error. An already active agent may finish and remains controllable
|
|
107
107
|
according to its current available actions; disabling a definition does not
|
|
108
108
|
mutate that assignment.
|
|
@@ -229,7 +229,7 @@ Enable and disable write the scalar `enabled` field in the same global override.
|
|
|
229
229
|
Removing that field inherits the bundled value, or `true` when no source
|
|
230
230
|
declares it.
|
|
231
231
|
|
|
232
|
-
Changes affect future
|
|
232
|
+
Changes affect future `delegate` assignments and `continue` assignments, whose
|
|
233
233
|
runtime configuration comes from the current effective definition. They do not
|
|
234
234
|
mutate an already-running agent or the lead Pi session.
|
|
235
235
|
|
package/docs/guides/handoffs.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Pi Herdsman has two text-file mechanisms with different purposes:
|
|
6
6
|
|
|
7
|
-
- `files` supplies evidence to delegate
|
|
7
|
+
- `files` supplies evidence to delegate, continue, steer, reply,
|
|
8
8
|
or ask_owner.
|
|
9
9
|
- whole-line body `@file` references put definition-owned text into the agent
|
|
10
10
|
system prompt when a new agent generation is built.
|
|
@@ -14,7 +14,7 @@ canonical local references and are not copied or snapshotted.
|
|
|
14
14
|
|
|
15
15
|
## Message `files`
|
|
16
16
|
|
|
17
|
-
For `delegate
|
|
17
|
+
For `delegate`, `continue`, `steer`, and
|
|
18
18
|
`reply`, make the message self-contained. Do not attach or mention agent
|
|
19
19
|
instruction files such as `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, or equivalents
|
|
20
20
|
merely because they exist; rely on normal project or runtime discovery.
|
|
@@ -34,7 +34,10 @@ Example:
|
|
|
34
34
|
"action": "delegate",
|
|
35
35
|
"definition": "reviewer",
|
|
36
36
|
"task": "Review the implementation against the approved plan.",
|
|
37
|
-
"files": [
|
|
37
|
+
"files": [
|
|
38
|
+
".pi-herdsman/plan.md",
|
|
39
|
+
"result:550e8400-e29b-41d4-a716-446655440000"
|
|
40
|
+
]
|
|
38
41
|
}
|
|
39
42
|
```
|
|
40
43
|
|
|
@@ -52,17 +55,35 @@ A reference-only file uses a self-closing tag:
|
|
|
52
55
|
<file name="/absolute/canonical/path" bytes="123" />
|
|
53
56
|
```
|
|
54
57
|
|
|
55
|
-
`name` is the canonical absolute path and `bytes` is the
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
content remains raw text. This markup frames evidence for the model and is not
|
|
59
|
-
a security boundary.
|
|
58
|
+
For an ordinary file, `name` is the canonical absolute path and `bytes` is the
|
|
59
|
+
observed file size. For a result reference, an embedded file uses the exact
|
|
60
|
+
`result:<request-id>` as `name`:
|
|
60
61
|
|
|
61
|
-
|
|
62
|
+
```xml
|
|
63
|
+
<file name="result:550e8400-e29b-41d4-a716-446655440000" bytes="123">
|
|
64
|
+
contents
|
|
65
|
+
</file>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
A result that is supplied by reference keeps both identities in its
|
|
69
|
+
self-closing envelope:
|
|
70
|
+
|
|
71
|
+
```xml
|
|
72
|
+
<file name="result:550e8400-e29b-41d4-a716-446655440000" path="/absolute/canonical/path" bytes="123" />
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
A body means the complete submission-time UTF-8 snapshot was embedded. For an
|
|
76
|
+
ordinary file, a self-closing tag carries its canonical path and observed byte
|
|
77
|
+
size; for a result reference, it carries the logical result name, the physical
|
|
78
|
+
path attribute, and observed byte size. File content remains raw text. This
|
|
79
|
+
markup frames evidence for the model and is not a security boundary.
|
|
80
|
+
|
|
81
|
+
`files` is supported by `delegate`, `continue`,
|
|
62
82
|
`steer`, `reply`, and `ask_owner`. For
|
|
63
83
|
controller actions, relative paths resolve from the calling controller's cwd;
|
|
64
|
-
for `ask_owner`, they resolve from the managed agent's cwd.
|
|
65
|
-
|
|
84
|
+
for `ask_owner`, they resolve from the managed agent's cwd. Accepted ordinary
|
|
85
|
+
filesystem paths retain canonical absolute-path names; `result:<request-id>`
|
|
86
|
+
inputs retain the logical result reference as the model-facing name.
|
|
66
87
|
|
|
67
88
|
Supplied paths must resolve to readable regular files. Missing, broken,
|
|
68
89
|
unreadable, and non-regular paths reject the whole operation. Canonical
|
|
@@ -79,8 +100,10 @@ For each regular file:
|
|
|
79
100
|
|
|
80
101
|
- complete strict UTF-8 text without NUL bytes is embedded when the complete
|
|
81
102
|
message fits the effective configured `mailboxPayloadLimitBytes` boundary;
|
|
82
|
-
- invalid UTF-8, NUL-containing, binary, and non-fitting files are
|
|
83
|
-
only by
|
|
103
|
+
- invalid UTF-8, NUL-containing, binary, and non-fitting ordinary files are
|
|
104
|
+
represented only by their canonical local path and observed byte size;
|
|
105
|
+
result references retain their logical name and carry the physical path and
|
|
106
|
+
observed byte size.
|
|
84
107
|
|
|
85
108
|
The fixed 1 MiB mailbox protocol safety ceiling is a separate read limit for
|
|
86
109
|
mailbox records; it does not replace the configured admission limit for new
|
|
@@ -92,7 +115,10 @@ or disappear after submission, and the recipient must already have local
|
|
|
92
115
|
filesystem/tool access to inspect them. `files` supplies evidence and does not
|
|
93
116
|
grant runtime capabilities.
|
|
94
117
|
|
|
95
|
-
Files are read through their canonical `realpath` target.
|
|
118
|
+
Files are read through their canonical `realpath` target. Ordinary file inputs
|
|
119
|
+
are rendered with that canonical path; result references retain the
|
|
120
|
+
`result:<request-id>` name so recipients can pass the same reference through
|
|
121
|
+
`files` again.
|
|
96
122
|
|
|
97
123
|
## Canonical deduplication
|
|
98
124
|
|
|
@@ -184,22 +210,30 @@ definition configuration while preserving the saved Pi session context.
|
|
|
184
210
|
|
|
185
211
|
## Result handoff
|
|
186
212
|
|
|
187
|
-
Successful agent completion
|
|
213
|
+
Successful agent completion exposes a canonical `resultRef` such as
|
|
214
|
+
`result:550e8400-e29b-41d4-a716-446655440000`.
|
|
188
215
|
|
|
189
|
-
|
|
190
|
-
|
|
216
|
+
Pass the exact result reference directly through `files` rather than copying a
|
|
217
|
+
large result or reconstructing its physical path:
|
|
191
218
|
|
|
192
219
|
```json
|
|
193
220
|
{
|
|
194
221
|
"action": "delegate",
|
|
195
222
|
"definition": "reviewer",
|
|
196
223
|
"task": "Review the implementation described in the supplied result.",
|
|
197
|
-
"files": ["
|
|
224
|
+
"files": ["result:550e8400-e29b-41d4-a716-446655440000"]
|
|
198
225
|
}
|
|
199
226
|
```
|
|
200
227
|
|
|
201
|
-
|
|
202
|
-
|
|
228
|
+
`files` accepts ordinary readable regular local file paths and result
|
|
229
|
+
references. A result reference resolves internally to the normal private
|
|
230
|
+
result file under Pi Herdsman's durable data directory; it is still validated,
|
|
231
|
+
canonicalized, and deduplicated like any other file. Copy the exact reference
|
|
232
|
+
returned by completion. Do not guess or reconstruct the underlying path.
|
|
233
|
+
Completion results live under Pi's agent data directory
|
|
234
|
+
(`~/.pi/agent/pi-herdsman/results` by default, respecting Pi's configured agent
|
|
235
|
+
directory) rather than the OS temporary directory, so result handoffs are not
|
|
236
|
+
subject to temporary-directory cleanup.
|
|
203
237
|
Oversized non-completion registered-tool output may additionally expose
|
|
204
238
|
`full_output_path` when overflow persistence succeeds. Model-visible content
|
|
205
239
|
remains bounded in both cases.
|
package/docs/guides/recovery.md
CHANGED
|
@@ -65,7 +65,7 @@ Do not close solely because of inactivity.
|
|
|
65
65
|
|
|
66
66
|
## Startup failure
|
|
67
67
|
|
|
68
|
-
Fresh and historical-session
|
|
68
|
+
Fresh delegation and historical-session continuation startup is bounded.
|
|
69
69
|
|
|
70
70
|
When herdr returns a structured failure, Pi Herdsman preserves it. When startup
|
|
71
71
|
returns empty or malformed output and no better structured error is available,
|
|
@@ -116,16 +116,17 @@ not the normal model orchestration interface.
|
|
|
116
116
|
|
|
117
117
|
## Historical session failure
|
|
118
118
|
|
|
119
|
-
A `
|
|
119
|
+
A `continue` requires an exact session path or full UUID.
|
|
120
120
|
|
|
121
121
|
The saved session header must contain a non-empty working directory. Session
|
|
122
|
-
|
|
122
|
+
continuation uses that saved cwd and does not accept a caller-supplied `cwd`.
|
|
123
123
|
|
|
124
|
-
The saved agent-definition name
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
The saved agent-definition name and logical label are restored from the managed
|
|
125
|
+
session identity. If the definition no longer exists, continuation fails instead
|
|
126
|
+
of guessing a replacement; a missing or malformed session identity also fails
|
|
127
|
+
closed. The definition must also be enabled and authorized for the current
|
|
127
128
|
controller, and its current effective configuration is used for the new agent
|
|
128
|
-
generation.
|
|
129
|
+
generation. Continuation cannot override or regenerate its saved label.
|
|
129
130
|
|
|
130
131
|
An exact session that is already represented by active or unresolved managed
|
|
131
132
|
work cannot be activated concurrently. The session-start exclusion applies to
|
|
@@ -65,7 +65,7 @@ All effective definitions are sorted and validated together, including every
|
|
|
65
65
|
|
|
66
66
|
`enabled` controls definition availability. A disabled definition remains in the
|
|
67
67
|
lead roster so it can be enabled again, but owner-visible definition lists omit
|
|
68
|
-
it.
|
|
68
|
+
it. `delegate` and `continue` reject a disabled definition. An already
|
|
69
69
|
active agent may finish and remains controllable according to its current
|
|
70
70
|
available actions; disabling a definition does not mutate that assignment.
|
|
71
71
|
|
|
@@ -74,7 +74,7 @@ available actions; disabling a definition does not mutate that assignment.
|
|
|
74
74
|
| Field | Accepted value | Omitted/default behavior | Runtime/composition behavior |
|
|
75
75
|
| ----------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
|
|
76
76
|
| `name` | non-empty string | required | Effective definition identity. |
|
|
77
|
-
| `enabled` | boolean | `true` | `false` makes
|
|
77
|
+
| `enabled` | boolean | `true` | `false` makes `delegate` and `continue` unavailable; it does not mutate an active agent. |
|
|
78
78
|
| `description` | string | absent | Display/selection description. |
|
|
79
79
|
| `model` | non-empty string | Pi default/current launch behavior | Passed as Pi model selection. |
|
|
80
80
|
| `thinking` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max`, or `false` | Pi default/current launch behavior | `false` launches as `off`. |
|
package/docs/reference/agent.md
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
[Documentation index](../README.md) · [supervision reference](supervision.md)
|
|
4
4
|
|
|
5
|
-
`agent` is the structured model-facing API for managed agents. It has
|
|
5
|
+
`agent` is the structured model-facing API for managed agents. It has seven actions:
|
|
6
6
|
|
|
7
7
|
```text
|
|
8
8
|
list
|
|
9
9
|
delegate
|
|
10
|
+
continue
|
|
10
11
|
steer
|
|
11
12
|
reply
|
|
12
13
|
close
|
|
@@ -19,12 +20,6 @@ controllers.
|
|
|
19
20
|
|
|
20
21
|
## `delegate`
|
|
21
22
|
|
|
22
|
-
Delegation has exactly two strict variants. The required field (`definition` or
|
|
23
|
-
`session`) selects the variant; there is no target discriminator.
|
|
24
|
-
Every variant rejects additional properties.
|
|
25
|
-
|
|
26
|
-
### Definition
|
|
27
|
-
|
|
28
23
|
```json
|
|
29
24
|
{
|
|
30
25
|
"action": "delegate",
|
|
@@ -42,39 +37,38 @@ the source for a new derived context; otherwise a new Pi session is launched.
|
|
|
42
37
|
Each accepted definition delegation creates one agent generation for one
|
|
43
38
|
assignment. The terminal result is delivered once and the agent is cleaned up.
|
|
44
39
|
|
|
45
|
-
|
|
40
|
+
## `continue`
|
|
46
41
|
|
|
47
42
|
```json
|
|
48
43
|
{
|
|
49
|
-
"action": "
|
|
44
|
+
"action": "continue",
|
|
50
45
|
"session": "<exact .jsonl path or full UUID>",
|
|
51
46
|
"task": "Continue the investigation"
|
|
52
47
|
}
|
|
53
48
|
```
|
|
54
49
|
|
|
55
|
-
Allowed fields are `action`, `session`, `task`, optional `
|
|
56
|
-
`timeoutMs`. The exact saved session supplies its cwd,
|
|
57
|
-
historical Pi context.
|
|
50
|
+
Allowed fields are `action`, `session`, `task`, optional `files`, and
|
|
51
|
+
`timeoutMs`. The exact saved session path or full UUID supplies its cwd,
|
|
52
|
+
definition identity, and historical Pi context. Continuation always creates a new agent generation
|
|
58
53
|
for one assignment with a live label; it never assigns work to an existing
|
|
59
|
-
agent.
|
|
60
|
-
|
|
61
|
-
|
|
54
|
+
agent. `continue` does not accept `cwd` or `fork`; the cwd comes from the saved
|
|
55
|
+
session. The saved definition is resolved again from current configuration and
|
|
56
|
+
must currently be enabled and authorized; its current effective configuration
|
|
57
|
+
is used for the new generation.
|
|
62
58
|
Concurrent or otherwise conflicting managed representations of the exact
|
|
63
|
-
session fail closed. The controller's own active Pi session cannot be
|
|
64
|
-
to itself; use
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
generation
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
also makes the exact session identity prominent so it can be used with a later
|
|
77
|
-
`delegate.session` call.
|
|
59
|
+
session fail closed. The controller's own active Pi session cannot be continued
|
|
60
|
+
to itself; use `delegate` with `fork` when a separate derived context is
|
|
61
|
+
required.
|
|
62
|
+
|
|
63
|
+
The saved session's logical label is inherited exactly for the continued
|
|
64
|
+
generation. A caller cannot provide a continuation label; if the inherited
|
|
65
|
+
label is occupied, continuation fails with `agent_label_exists`.
|
|
66
|
+
|
|
67
|
+
Successful `delegate` results use `action: "delegate"`; successful `continue`
|
|
68
|
+
results use `action: "continue"`. Both include `agent`, `definition`, request,
|
|
69
|
+
session, and startup evidence where available. Both return after durable
|
|
70
|
+
acceptance, not completion. A terminal result makes the exact session identity
|
|
71
|
+
prominent for a later `continue` call.
|
|
78
72
|
|
|
79
73
|
## `list`
|
|
80
74
|
|
|
@@ -105,8 +99,9 @@ Each actionable live agent record includes:
|
|
|
105
99
|
`available_actions` is authoritative model guidance for the current snapshot.
|
|
106
100
|
Do not infer eligibility from `state`. Active work may list `steer`; a valid
|
|
107
101
|
correlated pending `ask_owner` may list `reply`; exact direct ownership may list
|
|
108
|
-
`close`. `available_actions` never lists `delegate
|
|
109
|
-
|
|
102
|
+
`close`. `available_actions` never lists `delegate` or `continue`: these are
|
|
103
|
+
controller operations, not controls on an already-live agent. An agent cannot
|
|
104
|
+
receive a second assignment. Descendant visibility does not grant control. Lead orphan
|
|
110
105
|
recovery may expose only `close`. Unknown and recovery-only records are
|
|
111
106
|
non-actionable. Every operation rechecks identity, ownership, mailbox state, and
|
|
112
107
|
lifecycle immediately before mutation.
|
|
@@ -146,15 +141,15 @@ mailbox records, lifecycle, or available controls.
|
|
|
146
141
|
|
|
147
142
|
## `files` and `timeoutMs`
|
|
148
143
|
|
|
149
|
-
`files` is valid on
|
|
144
|
+
`files` is valid on `delegate` and `continue`, and on `steer` and `reply`; it is not
|
|
150
145
|
valid on `list` or `close`. Paths are resolved from the controller cwd, checked
|
|
151
146
|
as readable regular files, canonicalized with `realpath`, and embedded only
|
|
152
147
|
when the exact message limit permits. Otherwise they remain canonical references.
|
|
153
148
|
|
|
154
|
-
`timeoutMs` is valid on
|
|
149
|
+
`timeoutMs` is valid on `delegate` and `continue` and must be an integer
|
|
155
150
|
from `5001` through `300000`. The startup budget reserves one bounded diagnostic
|
|
156
|
-
window. Current message limits are governed by
|
|
157
|
-
|
|
151
|
+
window. Current message limits are governed by the Herdsman config file and its
|
|
152
|
+
defaults, plus the fixed mailbox protocol ceiling. Managed mailbox records use
|
|
158
153
|
protocol V4 in the `mailboxes-v4` namespace, and control requests use the marker prefix
|
|
159
154
|
`__PI_HERDSMAN_AGENT_V4__:`.
|
|
160
155
|
|
|
@@ -216,7 +211,7 @@ and has one correlated final result. Delivery goes to the exact owning Pi
|
|
|
216
211
|
session and occurs exactly once. Model-visible completion wording uses
|
|
217
212
|
`agent=<agent>`, `definition=<definition>`, `session=<id>`,
|
|
218
213
|
`request=<id>`, and status. Details retain durable `agentLabel`,
|
|
219
|
-
`agentDefinition`, `piSessionId`, `piSessionFile`, result
|
|
214
|
+
`agentDefinition`, `piSessionId`, `piSessionFile`, result references, elapsed time,
|
|
220
215
|
context usage, truncation, and persistence-error evidence. The agent is cleaned
|
|
221
216
|
up after the terminal result is delivered; the Pi session remains available for
|
|
222
217
|
continuation.
|
|
@@ -19,8 +19,8 @@ Commands require a lead Pi session with UI.
|
|
|
19
19
|
|
|
20
20
|
The plain command opens a native Pi selection menu with `Running`,
|
|
21
21
|
`Definitions`, `Layout`, `Message limits`, and `Stop all…` destinations. The
|
|
22
|
-
Message limits view edits the
|
|
23
|
-
|
|
22
|
+
Message limits view edits the user-wide inline attachment and mailbox payload
|
|
23
|
+
limits. It is available only to a lead Pi session with UI. Current
|
|
24
24
|
values and presets show a rough token equivalent using four UTF-8 bytes per
|
|
25
25
|
token. The enforced limits are bytes, not tokens.
|
|
26
26
|
|
|
@@ -78,7 +78,7 @@ Details re-resolves the selected definition when opened, so it reflects current
|
|
|
78
78
|
overlays and body references even if the menu remained open while configuration
|
|
79
79
|
changed.
|
|
80
80
|
|
|
81
|
-
Changes apply to future
|
|
81
|
+
Changes apply to future `delegate` assignments and `continue` assignments, not
|
|
82
82
|
already-running agents or the lead Pi session.
|
|
83
83
|
|
|
84
84
|
Standalone global definitions are editable too. Removing a field from one uses
|