@rallycry/conveyor-agent 11.0.9 → 11.0.11
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.
|
@@ -8118,6 +8118,7 @@ ${config.instructions}`);
|
|
|
8118
8118
|
`
|
|
8119
8119
|
Your turn output appears ONLY in the live agent terminal \u2014 it is NOT posted to the task chat. The team does NOT see your replies unless you post them.`,
|
|
8120
8120
|
`Use post_to_chat (omit task_id \u2192 your own task's chat) to share meaningful status as you work, a summary when you finish, and any blocker or question you need a human to answer.`,
|
|
8121
|
+
`A question you need answered goes through AskUserQuestion \u2014 that is what pages a person. post_to_chat with milestone: "blocked" records that you are parked and does not page anyone.`,
|
|
8121
8122
|
`Pass task_id only to message a DIFFERENT task's chat (e.g. a parent task via get_task).`,
|
|
8122
8123
|
`Use read_task_chat only if you need to re-read earlier messages beyond the chat context above.`,
|
|
8123
8124
|
`
|
|
@@ -8559,7 +8560,7 @@ var postToChatContract = defineToolContract({
|
|
|
8559
8560
|
),
|
|
8560
8561
|
milestone: f.optional(
|
|
8561
8562
|
f.enum(["plan_ready", "implementation_complete", "blocked"], {
|
|
8562
|
-
desc: "Declare a narrative milestone instead of a routine update. Use SPARINGLY \u2014 only when the plan is ready, implementation is complete, or you are blocked. Milestones appear on the card's activity timeline and in Slack."
|
|
8563
|
+
desc: "Declare a narrative milestone instead of a routine update. Use SPARINGLY \u2014 only when the plan is ready (plan_ready), implementation is complete (implementation_complete), or you are parked and cannot continue until a human acts (blocked). `blocked` posts a note and enables reply delivery but pages nobody; to page a person, ask them with AskUserQuestion. Never use `blocked` for a finished plan, finished work, or a tool error you can retry. Milestones appear on the card's activity timeline and in Slack."
|
|
8563
8564
|
})
|
|
8564
8565
|
)
|
|
8565
8566
|
}
|
|
@@ -15124,7 +15125,7 @@ function resolveQuestionGraceMs() {
|
|
|
15124
15125
|
}
|
|
15125
15126
|
var QUESTION_TYPING_RECENT_MS = 6e4;
|
|
15126
15127
|
var QUESTION_TYPING_DEFER_MS = 2 * 6e4;
|
|
15127
|
-
var QUESTION_TIMEOUT_PROMPT = 'No one answered your clarifying questions within 10 minutes. Do this now: (1) Save your findings-so-far as the card plan (`update_task`). (2) Post the unanswered questions to chat with `post_to_chat` using `milestone: "blocked"`, stating the assumption you would make for each. (3) If you can safely proceed on your best-judgment answers, state the assumptions and continue; otherwise end your turn \u2014 answers posted in chat will be delivered when you resume.';
|
|
15128
|
+
var QUESTION_TIMEOUT_PROMPT = 'No one answered your clarifying questions within 10 minutes. Do this now: (1) Save your findings-so-far as the card plan (`update_task`). (2) Post the unanswered questions to chat with `post_to_chat` using `milestone: "blocked"`, stating the assumption you would make for each (this is a parking note \u2014 the question already paged them). (3) If you can safely proceed on your best-judgment answers, state the assumptions and continue; otherwise end your turn \u2014 answers posted in chat will be delivered when you resume.';
|
|
15128
15129
|
var SessionRunner = class _SessionRunner {
|
|
15129
15130
|
connection;
|
|
15130
15131
|
mode;
|
package/dist/cli.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rallycry/conveyor-agent",
|
|
3
|
-
"version": "11.0.
|
|
3
|
+
"version": "11.0.11",
|
|
4
4
|
"description": "Conveyor Agent Runner v10 - PTY harness for the task chat (SDK harness for audit/project-chat). Agent-as-User architecture with BaseService patterns. Works locally too.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -122,7 +122,10 @@ parked and the chat marker IS the claim.
|
|
|
122
122
|
|
|
123
123
|
Post to chat at real milestones only — claim, a blocking discovery, gates
|
|
124
124
|
green, PR — never play-by-play. Your turn output is not visible to the team;
|
|
125
|
-
chat is.
|
|
125
|
+
chat is. Post a blocking discovery with `milestone: "blocked"` only if you are
|
|
126
|
+
actually parked and cannot continue until a human acts — it is a quiet parking
|
|
127
|
+
note that pages nobody. When you need an answer, ask with AskUserQuestion; that
|
|
128
|
+
is what pages a person.
|
|
126
129
|
|
|
127
130
|
**Saving the plan and card fields:** `mcp__conveyor__update_task` handles
|
|
128
131
|
title, description, plan, status, and `githubBranch` on both surfaces. Story
|
|
@@ -233,13 +236,14 @@ the merged base.
|
|
|
233
236
|
|
|
234
237
|
The card is in ReviewPR. What happens next depends on who is driving:
|
|
235
238
|
|
|
236
|
-
> **Environment — a pod is woken; a standalone local run is not.** In a
|
|
237
|
-
> you stay wake-able: the system wakes you on CI results and review
|
|
238
|
-
> so go idle rather than polling.
|
|
239
|
-
>
|
|
240
|
-
>
|
|
241
|
-
>
|
|
242
|
-
>
|
|
239
|
+
> **Environment — a pod is woken; a standalone local run is not.** In a
|
|
240
|
+
> **pod** you stay wake-able: the system wakes you on CI results and review
|
|
241
|
+
> comments, so go idle rather than polling. That holds only once the PR exists
|
|
242
|
+
> — mid-pack, nothing wakes either environment (see the pack path's pacing
|
|
243
|
+
> rule). In a **standalone local run** there is no wake mechanism — report the
|
|
244
|
+
> card and PR state to the user and STOP. No pacing, no loop, no babysitting;
|
|
245
|
+
> a follow-up CI fix is a fresh ask. Under `conveyor-local-loop` the loop's
|
|
246
|
+
> own Babysit tier owns aftercare instead, and its pacing rules govern.
|
|
243
247
|
|
|
244
248
|
When you are the one handling it:
|
|
245
249
|
|
|
@@ -82,23 +82,44 @@ session memory for pack state.
|
|
|
82
82
|
|
|
83
83
|
Work children **one at a time**. Interleaving them thrashes branch state.
|
|
84
84
|
|
|
85
|
-
## Pacing — a pack is many
|
|
86
|
-
|
|
87
|
-
A
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
-
|
|
98
|
-
|
|
85
|
+
## Pacing — a pack is many steps, not many turns
|
|
86
|
+
|
|
87
|
+
A child boundary is not a turn boundary. Keep driving the pack in the same
|
|
88
|
+
turn: merge, implement the next child, merge, cross-reference, finale. Nothing
|
|
89
|
+
wakes a pack session between children — not locally, and not in a pod, where
|
|
90
|
+
children have no PRs, no builds, and no CI to generate an event. A turn that
|
|
91
|
+
ends with a child still ready is a stalled pack, not a paused one: locally it
|
|
92
|
+
sits until a human re-runs the skill; in a pod it idles out, sleeps, and waits
|
|
93
|
+
on the pack watchdog — roughly an hour lost per occurrence.
|
|
94
|
+
|
|
95
|
+
End a turn with children remaining ONLY when a wake is guaranteed:
|
|
96
|
+
|
|
97
|
+
- **A background gate is in flight.** Its completion notification re-invokes
|
|
98
|
+
you. (Launch it with the harness's `run_in_background`; hand-rolled
|
|
99
|
+
backgrounding wakes nothing.)
|
|
100
|
+
- **You are blocked on a human** — the parked protocol below. The user's chat
|
|
101
|
+
reply is the wake.
|
|
102
|
+
- **The finale PR is open and quiet** — the Babysit tier. Green and quiet is
|
|
103
|
+
the end.
|
|
104
|
+
|
|
105
|
+
Any other end-of-turn must arm `ScheduleWakeup` first: 60–90s, prompt
|
|
106
|
+
restating which child comes next. That is the pod-sanctioned mechanism (the
|
|
107
|
+
pod prompt allows `ScheduleWakeup` exactly when nothing else will notify you),
|
|
108
|
+
and it is a rare exception, not the cadence. Never end a turn "to report
|
|
109
|
+
progress" — chat is where progress goes, and posting there does not end the
|
|
110
|
+
pack.
|
|
111
|
+
|
|
112
|
+
**Pre-exit invariant.** Before ending ANY turn, re-run
|
|
113
|
+
`mcp__conveyor__list_subtasks`. A child that is `Open` with its dependencies
|
|
114
|
+
met, or `InProgress` under your claim, plus no background job in flight and no
|
|
115
|
+
parked question outstanding, means you are not done: continue, or arm the
|
|
116
|
+
wake. Ending a turn in that state without a wake is the bug this section
|
|
117
|
+
exists to prevent.
|
|
99
118
|
|
|
100
119
|
`conveyor-local-loop` supplies its own pacing table and its own claim-marker
|
|
101
|
-
prefix; when running under it, those govern.
|
|
120
|
+
prefix; when running under it, those govern. Under `/loop` the invariant above
|
|
121
|
+
still holds — the loop's re-invocation is a fallback for a dropped wake, never
|
|
122
|
+
a reason to stop after one child.
|
|
102
123
|
|
|
103
124
|
## Implement a child
|
|
104
125
|
|
|
@@ -134,8 +134,11 @@ touching Conveyor, unless they asked you to just ship it.
|
|
|
134
134
|
> create a NEW card, which is the local/MCP shape; `mcp__conveyor__create_task`
|
|
135
135
|
> does not exist in a pod. In a pod, the card exists and you are on it: save
|
|
136
136
|
> the plan with `mcp__conveyor__update_task` (`plan`, and `description` if it
|
|
137
|
-
> needs sharpening), post the same recommendation message to chat
|
|
138
|
-
> a pod does not promote its own card to
|
|
137
|
+
> needs sharpening), post the same recommendation message to chat with
|
|
138
|
+
> `milestone: "plan_ready"`, and stop — a pod does not promote its own card to
|
|
139
|
+
> Open. A parked plan is never `blocked`: that milestone means you cannot
|
|
140
|
+
> continue until a human acts, and it pages nobody. To page a person, ask them
|
|
141
|
+
> with AskUserQuestion. If the pod also has to leave
|
|
139
142
|
> plan mode, note that `update_task` carries no story points or risk; those go
|
|
140
143
|
> through `mcp__conveyor__update_task_properties`. Everything in Phases 1-3 is
|
|
141
144
|
> identical in both environments. To break a large pod card into a pack, use
|