@rallycry/conveyor-agent 11.0.16 → 11.0.17
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/{chunk-GAUVITY7.js → chunk-GVDQQZCO.js} +10 -6
- package/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -8517,7 +8517,7 @@ Workflow:`,
|
|
|
8517
8517
|
`- If you toggled into active mode temporarily, mention when you're done so the team can switch you back to planning mode.`
|
|
8518
8518
|
].filter(Boolean);
|
|
8519
8519
|
}
|
|
8520
|
-
function buildTaskAgentPreamble(context, workspaceDir) {
|
|
8520
|
+
function buildTaskAgentPreamble(context, workspaceDir, runtimeTui) {
|
|
8521
8521
|
const managedStack = repoHasScript(workspaceDir, "web:rebuild");
|
|
8522
8522
|
const stackLines = managedStack ? [
|
|
8523
8523
|
`- The web app is served on port 3050, the API on port 7090.`,
|
|
@@ -8543,8 +8543,8 @@ Working rules:`,
|
|
|
8543
8543
|
`- Read a file before your first Write/Edit to it, and batch multiple changes to the same file into a single call instead of many sequential edits.`,
|
|
8544
8544
|
`- To learn what calls a symbol or where it lives, query the prebuilt code graph before grepping: \`graphify query "<SymbolName>"\` from the repo root. Query a SYMBOL, never a sentence \u2014 \`graphify query "resolveTaskBaseBranch"\` returns the definition plus every call site, while "how does a task get its base branch" seeds unrelated start nodes and returns test files and loggers. Don't know the symbol yet? Grep for the name first, then query it: grep finds names, the graph finds relationships. \`No matching nodes found\` means "not in this graph" (it is prebuilt, so very recent code is absent), NOT "not in the codebase" \u2014 fall back to \`git grep\`. Skip all of this if \`graphify-out/graph.json\` is not present.`,
|
|
8545
8545
|
`- When a build/lint/test run fails, capture its output to a file once and grep the file \u2014 never re-run the suite just to re-filter the same output.`,
|
|
8546
|
-
`- Waiting on long-running commands: if a gate finishes in under ~2 minutes, run it in the foreground with a timeout. For a longer one, launch it with run_in_background and STOP; a completion notification arrives when it finishes, and the workspace stays awake for as long as background work is outstanding, so a backgrounded gate will not be killed by an idle sleep. For the final pre-PR gate a bounded foreground run (\`timeout 590 <gate>\` with Bash \`timeout: 600000\`) is still preferred as defense in depth \u2014 it survives a pod resume, which a background job does not. Never busy-wait with sleep/pgrep/tail loops, and never re-run the suite to escape a wait that looks stalled.`,
|
|
8547
|
-
`- Ending your turn with NO tool call is the correct way to wait, and it is safe: the pod stays alive and the next notification re-invokes you. Never emit filler commands (\`echo waiting\`, \`true\`, \`sleep N; echo done\`) to "stay alive" \u2014 they are detected and blocked. The proven long-wait shape: start the job with run_in_background, then end the turn. Arm a ScheduleWakeup (delaySeconds 900-1500, prompt restating your next steps) only when nothing will notify you \u2014 an external CI run, a deploy, a remote queue \u2014 never as insurance against a background job's own notification, which does fire.`,
|
|
8546
|
+
runtimeTui === "codex" ? `- Waiting on long-running commands: retain and resume the command session until it returns an exit result. Finish each required gate before ending the task. Never pretend a completion notification will resume you, and never start another gate while the current one is running.` : `- Waiting on long-running commands: if a gate finishes in under ~2 minutes, run it in the foreground with a timeout. For a longer one, launch it with run_in_background and STOP; a completion notification arrives when it finishes, and the workspace stays awake for as long as background work is outstanding, so a backgrounded gate will not be killed by an idle sleep. For the final pre-PR gate a bounded foreground run (\`timeout 590 <gate>\` with Bash \`timeout: 600000\`) is still preferred as defense in depth \u2014 it survives a pod resume, which a background job does not. Never busy-wait with sleep/pgrep/tail loops, and never re-run the suite to escape a wait that looks stalled.`,
|
|
8547
|
+
runtimeTui === "codex" ? `- Do not end your turn to wait on a required gate. Resume its command session, inspect its exit result, and then continue the checklist.` : `- Ending your turn with NO tool call is the correct way to wait, and it is safe: the pod stays alive and the next notification re-invokes you. Never emit filler commands (\`echo waiting\`, \`true\`, \`sleep N; echo done\`) to "stay alive" \u2014 they are detected and blocked. The proven long-wait shape: start the job with run_in_background, then end the turn. Arm a ScheduleWakeup (delaySeconds 900-1500, prompt restating your next steps) only when nothing will notify you \u2014 an external CI run, a deploy, a remote queue \u2014 never as insurance against a background job's own notification, which does fire.`,
|
|
8548
8548
|
`
|
|
8549
8549
|
Git:`,
|
|
8550
8550
|
`- Stay on \`${context.githubBranch}\` for the whole task: do not check out another branch and do not create one. It was cut from \`${context.baseBranch}\`, and PRs target that automatically.`,
|
|
@@ -8561,7 +8561,7 @@ function buildSystemPrompt(mode, context, config, setupLog, agentMode) {
|
|
|
8561
8561
|
if (isPackRunner) {
|
|
8562
8562
|
return buildPackPrompt(mode, context, config, setupLog);
|
|
8563
8563
|
}
|
|
8564
|
-
const parts = isPmActive ? buildActivePreamble(context, config.workspaceDir) : isPm ? buildPmPreamble(context) : buildTaskAgentPreamble(context, config.workspaceDir);
|
|
8564
|
+
const parts = isPmActive ? buildActivePreamble(context, config.workspaceDir) : isPm ? buildPmPreamble(context) : buildTaskAgentPreamble(context, config.workspaceDir, config.runtimeTui);
|
|
8565
8565
|
if (setupLog.length > 0) {
|
|
8566
8566
|
parts.push(
|
|
8567
8567
|
`
|
|
@@ -13656,10 +13656,14 @@ var ToolLoopTracker = class {
|
|
|
13656
13656
|
};
|
|
13657
13657
|
function buildRepeatLoopMessage(repeatCount, heavyGateActive) {
|
|
13658
13658
|
const head = `Conveyor blocked this call: you have run the exact same command ${repeatCount} times in a row with nothing different in between. Repeating it again will return the same result.`;
|
|
13659
|
-
const
|
|
13659
|
+
const codex = process.env.CONVEYOR_TUI === "codex";
|
|
13660
|
+
const advice = codex ? heavyGateActive ? `A build gate is running. Resume its command session for the exit result, then continue the required gates.` : `If a command is still running, resume its session for the result. Otherwise change your approach or post to chat.` : heavyGateActive ? `A build gate (test/typecheck/build) is running on this pod right now. Do NOT poll its log. End your turn \u2014 the completion notification re-invokes you when the gate finishes.` : `If you are waiting on a background job, end your turn instead of polling; the completion notification re-invokes you. If you are stuck, change your approach: read a different file, run a different command, or post to chat and ask the team.`;
|
|
13660
13661
|
return `${head} ${advice} Call a different tool now.`;
|
|
13661
13662
|
}
|
|
13662
13663
|
function buildNoOpKeepAliveMessage(noOpCount) {
|
|
13664
|
+
if (process.env.CONVEYOR_TUI === "codex") {
|
|
13665
|
+
return `Conveyor blocked this call: it is a no-op keep-alive (${noOpCount} this session). If a required command is running, resume its session for the exit result. Otherwise do real work or end the turn.`;
|
|
13666
|
+
}
|
|
13663
13667
|
return `Conveyor blocked this call: it is a no-op keep-alive (${noOpCount} this session). You do not need to emit tool calls to stay alive. Ending your turn with NO tool call is safe and expected while waiting: the pod stays up and the completion notification re-invokes you. If nothing is running, do real work or end the turn. For a long wait with no notification source, use Monitor or ScheduleWakeup instead of filler commands.`;
|
|
13664
13668
|
}
|
|
13665
13669
|
function buildRepeatLoopChatMessage(repeatCount, forceStopped) {
|
|
@@ -14110,7 +14114,7 @@ function buildQueryOptions(host, context) {
|
|
|
14110
14114
|
const systemPromptText = buildSystemPrompt(
|
|
14111
14115
|
host.config.mode,
|
|
14112
14116
|
context,
|
|
14113
|
-
{ ...host.config, isAuto: host.isAuto },
|
|
14117
|
+
{ ...host.config, isAuto: host.isAuto, runtimeTui: process.env.CONVEYOR_TUI },
|
|
14114
14118
|
host.setupLog,
|
|
14115
14119
|
mode
|
|
14116
14120
|
);
|
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.17",
|
|
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",
|