@sideboard-ai/core 0.1.271 → 0.1.273
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-M7626KJO.js → chunk-HO2T6BC3.js} +5 -2
- package/dist/{chunk-VC24GQN4.js → chunk-N3LASDJM.js} +9 -5
- package/dist/{chunk-RQR25LUB.js → chunk-OUBQH5GR.js} +5 -2
- package/dist/{chunk-BNIGN5JX.js → chunk-T47ARZ5Q.js} +9 -5
- package/dist/{conductor-POUIKR5A.js → conductor-3AQM67VK.js} +1 -1
- package/dist/{conductor-JA3A4NAI.js → conductor-FLWACOVC.js} +1 -1
- package/dist/index.cjs +11 -4
- package/dist/index.js +4 -4
- package/dist/mcp/run-stdio.cjs +11 -4
- package/dist/mcp/run-stdio.js +2 -2
- package/dist/{orchestrator-OPWMDMTK.js → orchestrator-K42IBMBE.js} +2 -2
- package/dist/{orchestrator-VDNZQIGA.js → orchestrator-YKSDWR6C.js} +2 -2
- package/package.json +1 -1
|
@@ -1362,7 +1362,9 @@ function looksLikeDeferredDonePromise(text) {
|
|
|
1362
1362
|
if (!t || t.length > DEFERRED_DONE_MAX_CHARS) return false;
|
|
1363
1363
|
const unquoted = t.replace(/`[^`]*`/g, " ").replace(/["“”][^"“”]*["“”]/g, " ").replace(/\s+/g, " ").trim();
|
|
1364
1364
|
if (!unquoted) return false;
|
|
1365
|
-
return /\b(i['’]?ll|i will)\s+let you know\b/i.test(unquoted) || /\blet you know when\b/i.test(unquoted) || /\b(check back|ping me)\s+when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(report|update you)\s+when\b/i.test(unquoted)
|
|
1365
|
+
return /\b(i['’]?ll|i will)\s+let you know\b/i.test(unquoted) || /\blet you know when\b/i.test(unquoted) || /\b(check back|ping me)\s+when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(report|update you)\s+when\b/i.test(unquoted) || /\bbackground poll\b/i.test(unquoted) || /\bwill notify (?:me|you) when\b/i.test(unquoted) || /\bi(?:['’]ll| will) be notified when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(?:keep|continue)\s+(?:watching|waiting|polling|checking)\b/i.test(
|
|
1366
|
+
unquoted
|
|
1367
|
+
) || /\bi(?:['’]ll| will)\s+come back when\b/i.test(unquoted);
|
|
1366
1368
|
}
|
|
1367
1369
|
function isJobContinuePrompt(text) {
|
|
1368
1370
|
if (typeof text !== "string") return false;
|
|
@@ -1404,6 +1406,7 @@ function formatJobStillRunningContinuePrompt(jobIds) {
|
|
|
1404
1406
|
function formatDeferredDoneContinuePrompt() {
|
|
1405
1407
|
return [
|
|
1406
1408
|
"You ended the turn after promising to report later, but no detached job is running.",
|
|
1409
|
+
"A native background poll / Task / bash notify does not resume this chat (Claude, Cursor, Codex, OpenCode).",
|
|
1407
1410
|
"If tests/pack/deploy still need to run: start once with detached-job.cjs, then loop wait_for_job until stillRunning is false (the log pane updates from wait JSON).",
|
|
1408
1411
|
"Do not say you will let the user know later."
|
|
1409
1412
|
].join(" ");
|
|
@@ -1628,7 +1631,7 @@ var PORT_RANGE_SIZE = 10;
|
|
|
1628
1631
|
var RECLAIM_RETRY_DELAY_MS = 40;
|
|
1629
1632
|
var RECLAIM_TRIES = 8;
|
|
1630
1633
|
async function killReclaimable(ports, worktreePath, signal) {
|
|
1631
|
-
const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-
|
|
1634
|
+
const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-3AQM67VK.js");
|
|
1632
1635
|
if (worktreePath) killStaleWorktreeListeners2(ports, worktreePath, signal);
|
|
1633
1636
|
else killListenersOnPorts2(ports);
|
|
1634
1637
|
}
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
worktreeDevProcessKey,
|
|
45
45
|
worktreeRunProcessKey,
|
|
46
46
|
worktreeSetupProcessKey
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-HO2T6BC3.js";
|
|
48
48
|
import {
|
|
49
49
|
applyAgentEvent,
|
|
50
50
|
clipAgentEventForPaint,
|
|
@@ -4374,7 +4374,7 @@ var LONG_RUNNING_SKILL_BODY = `# Long-running jobs
|
|
|
4374
4374
|
|
|
4375
4375
|
A Sideboard or Cursor **worktree turn** SIGTERMs the agent shell (and its process group) when the user sends another message or the turn is interrupted. \`block_until_ms: 0\` is not enough \u2014 the child stays in that group.
|
|
4376
4376
|
|
|
4377
|
-
Do **not** ask the human to check back. Detach, then **wait** in 45s slices (MCP \`wait_for_job\`, same idea as \`wait_for_turn\`) until \`stillRunning\` is false. Do not end the turn with \u201CI\u2019ll let you know.\u201D
|
|
4377
|
+
Do **not** ask the human to check back. Detach, then **wait** in 45s slices (MCP \`wait_for_job\`, same idea as \`wait_for_turn\`) until \`stillRunning\` is false. Do not end the turn with \u201CI\u2019ll let you know\u201D or \u201Ca background poll will notify me.\u201D Native background bash/Task notify (Claude, Cursor, Codex, OpenCode) does **not** resume a Sideboard chat.
|
|
4378
4378
|
|
|
4379
4379
|
## Tool
|
|
4380
4380
|
|
|
@@ -4449,6 +4449,10 @@ node <detached-job.cjs> start pr-checks -- gh pr checks --watch
|
|
|
4449
4449
|
\`\`\`
|
|
4450
4450
|
|
|
4451
4451
|
On miss, fix, commit, push, and watch again until the goal is met or you are blocked. Do not ask the human to poll. Do not merge unless asked.
|
|
4452
|
+
|
|
4453
|
+
## GitHub Actions runs
|
|
4454
|
+
|
|
4455
|
+
Do **not** \`gh run watch\`. It reprints the full TTY every 3 seconds and floods the Sideboard log pane. Poll \`gh run view --json status,conclusion,jobs\` every 20\u201330s and print only when status or the in-progress step changes.
|
|
4452
4456
|
`;
|
|
4453
4457
|
|
|
4454
4458
|
// src/skills/discover.ts
|
|
@@ -5013,7 +5017,7 @@ function formatPrGateDirective() {
|
|
|
5013
5017
|
return [
|
|
5014
5018
|
"If a goal is given (not after every push):",
|
|
5015
5019
|
"- Enter a watch-fix-push loop and stay in it until that goal is met or you are blocked (examples: \u201CGreptile 5/5\u201D, \u201CCI green\u201D, \u201Cuntil checks pass\u201D). Do not stop after one red run or one review cycle.",
|
|
5016
|
-
"- Wait with `/long-running`: `gh pr checks --watch` (add `-R <origin>` when needed).
|
|
5020
|
+
"- Wait with `/long-running`: detach `gh pr checks --watch` (add `-R <origin>` when needed), then loop `wait_for_job` until stillRunning is false. Do not end the turn \u2014 a background poll / Task notify does not resume this chat. Do not ask the human to poll.",
|
|
5017
5021
|
"- Greptile 5/5: wait for the greptile check; read the latest `N/5` from the PR body or Greptile\u2019s most recently *updated* issue comment; also fetch unresolved review comments / the \u201CPrompt to fix all with AI\u201D block. Done = **5/5 and zero unresolved Greptile comments**. If Greptile is idle, comment `@greptile review`. Cap about 5 iterations, then report leftovers. Do not merge unless asked."
|
|
5018
5022
|
].join("\n");
|
|
5019
5023
|
}
|
|
@@ -5046,7 +5050,7 @@ function formatLongRunningDirective(opts) {
|
|
|
5046
5050
|
}
|
|
5047
5051
|
function formatLongRunningReminder(opts) {
|
|
5048
5052
|
const invoke = formatDetachedJobInvoke(opts?.scriptPath);
|
|
5049
|
-
return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script / get_run_log (UI-connected \u2014 not detached-job). ${formatDevAccessHint(opts?.activeRuns)}`;
|
|
5053
|
+
return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. A background poll / Task notify does not resume this chat. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script / get_run_log (UI-connected \u2014 not detached-job). ${formatDevAccessHint(opts?.activeRuns)}`;
|
|
5050
5054
|
}
|
|
5051
5055
|
function formatArtifactDirective() {
|
|
5052
5056
|
return [
|
|
@@ -5606,7 +5610,7 @@ function formatScheduledPrompt(name, prompt) {
|
|
|
5606
5610
|
${prompt}`;
|
|
5607
5611
|
}
|
|
5608
5612
|
async function defaultDeps() {
|
|
5609
|
-
const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-
|
|
5613
|
+
const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-K42IBMBE.js");
|
|
5610
5614
|
const orch = getOrchestrator2();
|
|
5611
5615
|
return {
|
|
5612
5616
|
findThread: (id) => findThreadByRef(id),
|
|
@@ -1306,7 +1306,9 @@ function looksLikeDeferredDonePromise(text) {
|
|
|
1306
1306
|
if (!t || t.length > DEFERRED_DONE_MAX_CHARS) return false;
|
|
1307
1307
|
const unquoted = t.replace(/`[^`]*`/g, " ").replace(/["“”][^"“”]*["“”]/g, " ").replace(/\s+/g, " ").trim();
|
|
1308
1308
|
if (!unquoted) return false;
|
|
1309
|
-
return /\b(i['’]?ll|i will)\s+let you know\b/i.test(unquoted) || /\blet you know when\b/i.test(unquoted) || /\b(check back|ping me)\s+when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(report|update you)\s+when\b/i.test(unquoted)
|
|
1309
|
+
return /\b(i['’]?ll|i will)\s+let you know\b/i.test(unquoted) || /\blet you know when\b/i.test(unquoted) || /\b(check back|ping me)\s+when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(report|update you)\s+when\b/i.test(unquoted) || /\bbackground poll\b/i.test(unquoted) || /\bwill notify (?:me|you) when\b/i.test(unquoted) || /\bi(?:['’]ll| will) be notified when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(?:keep|continue)\s+(?:watching|waiting|polling|checking)\b/i.test(
|
|
1310
|
+
unquoted
|
|
1311
|
+
) || /\bi(?:['’]ll| will)\s+come back when\b/i.test(unquoted);
|
|
1310
1312
|
}
|
|
1311
1313
|
function isJobContinuePrompt(text) {
|
|
1312
1314
|
if (typeof text !== "string") return false;
|
|
@@ -1348,6 +1350,7 @@ function formatJobStillRunningContinuePrompt(jobIds) {
|
|
|
1348
1350
|
function formatDeferredDoneContinuePrompt() {
|
|
1349
1351
|
return [
|
|
1350
1352
|
"You ended the turn after promising to report later, but no detached job is running.",
|
|
1353
|
+
"A native background poll / Task / bash notify does not resume this chat (Claude, Cursor, Codex, OpenCode).",
|
|
1351
1354
|
"If tests/pack/deploy still need to run: start once with detached-job.cjs, then loop wait_for_job until stillRunning is false (the log pane updates from wait JSON).",
|
|
1352
1355
|
"Do not say you will let the user know later."
|
|
1353
1356
|
].join(" ");
|
|
@@ -1572,7 +1575,7 @@ var PORT_RANGE_SIZE = 10;
|
|
|
1572
1575
|
var RECLAIM_RETRY_DELAY_MS = 40;
|
|
1573
1576
|
var RECLAIM_TRIES = 8;
|
|
1574
1577
|
async function killReclaimable(ports, worktreePath, signal) {
|
|
1575
|
-
const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-
|
|
1578
|
+
const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-FLWACOVC.js");
|
|
1576
1579
|
if (worktreePath) killStaleWorktreeListeners2(ports, worktreePath, signal);
|
|
1577
1580
|
else killListenersOnPorts2(ports);
|
|
1578
1581
|
}
|
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
worktreeDevProcessKey,
|
|
59
59
|
worktreeRunProcessKey,
|
|
60
60
|
worktreeSetupProcessKey
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-OUBQH5GR.js";
|
|
62
62
|
import {
|
|
63
63
|
applyAgentEvent,
|
|
64
64
|
clipAgentEventForPaint,
|
|
@@ -4228,7 +4228,7 @@ var LONG_RUNNING_SKILL_BODY = `# Long-running jobs
|
|
|
4228
4228
|
|
|
4229
4229
|
A Sideboard or Cursor **worktree turn** SIGTERMs the agent shell (and its process group) when the user sends another message or the turn is interrupted. \`block_until_ms: 0\` is not enough \u2014 the child stays in that group.
|
|
4230
4230
|
|
|
4231
|
-
Do **not** ask the human to check back. Detach, then **wait** in 45s slices (MCP \`wait_for_job\`, same idea as \`wait_for_turn\`) until \`stillRunning\` is false. Do not end the turn with \u201CI\u2019ll let you know.\u201D
|
|
4231
|
+
Do **not** ask the human to check back. Detach, then **wait** in 45s slices (MCP \`wait_for_job\`, same idea as \`wait_for_turn\`) until \`stillRunning\` is false. Do not end the turn with \u201CI\u2019ll let you know\u201D or \u201Ca background poll will notify me.\u201D Native background bash/Task notify (Claude, Cursor, Codex, OpenCode) does **not** resume a Sideboard chat.
|
|
4232
4232
|
|
|
4233
4233
|
## Tool
|
|
4234
4234
|
|
|
@@ -4303,6 +4303,10 @@ node <detached-job.cjs> start pr-checks -- gh pr checks --watch
|
|
|
4303
4303
|
\`\`\`
|
|
4304
4304
|
|
|
4305
4305
|
On miss, fix, commit, push, and watch again until the goal is met or you are blocked. Do not ask the human to poll. Do not merge unless asked.
|
|
4306
|
+
|
|
4307
|
+
## GitHub Actions runs
|
|
4308
|
+
|
|
4309
|
+
Do **not** \`gh run watch\`. It reprints the full TTY every 3 seconds and floods the Sideboard log pane. Poll \`gh run view --json status,conclusion,jobs\` every 20\u201330s and print only when status or the in-progress step changes.
|
|
4306
4310
|
`;
|
|
4307
4311
|
|
|
4308
4312
|
// src/skills/discover.ts
|
|
@@ -4845,7 +4849,7 @@ function formatPrGateDirective() {
|
|
|
4845
4849
|
return [
|
|
4846
4850
|
"If a goal is given (not after every push):",
|
|
4847
4851
|
"- Enter a watch-fix-push loop and stay in it until that goal is met or you are blocked (examples: \u201CGreptile 5/5\u201D, \u201CCI green\u201D, \u201Cuntil checks pass\u201D). Do not stop after one red run or one review cycle.",
|
|
4848
|
-
"- Wait with `/long-running`: `gh pr checks --watch` (add `-R <origin>` when needed).
|
|
4852
|
+
"- Wait with `/long-running`: detach `gh pr checks --watch` (add `-R <origin>` when needed), then loop `wait_for_job` until stillRunning is false. Do not end the turn \u2014 a background poll / Task notify does not resume this chat. Do not ask the human to poll.",
|
|
4849
4853
|
"- Greptile 5/5: wait for the greptile check; read the latest `N/5` from the PR body or Greptile\u2019s most recently *updated* issue comment; also fetch unresolved review comments / the \u201CPrompt to fix all with AI\u201D block. Done = **5/5 and zero unresolved Greptile comments**. If Greptile is idle, comment `@greptile review`. Cap about 5 iterations, then report leftovers. Do not merge unless asked."
|
|
4850
4854
|
].join("\n");
|
|
4851
4855
|
}
|
|
@@ -4878,7 +4882,7 @@ function formatLongRunningDirective(opts) {
|
|
|
4878
4882
|
}
|
|
4879
4883
|
function formatLongRunningReminder(opts) {
|
|
4880
4884
|
const invoke = formatDetachedJobInvoke(opts?.scriptPath);
|
|
4881
|
-
return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script / get_run_log (UI-connected \u2014 not detached-job). ${formatDevAccessHint(opts?.activeRuns)}`;
|
|
4885
|
+
return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. A background poll / Task notify does not resume this chat. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script / get_run_log (UI-connected \u2014 not detached-job). ${formatDevAccessHint(opts?.activeRuns)}`;
|
|
4882
4886
|
}
|
|
4883
4887
|
function formatArtifactDirective() {
|
|
4884
4888
|
return [
|
|
@@ -5267,7 +5271,7 @@ function formatScheduledPrompt(name, prompt) {
|
|
|
5267
5271
|
${prompt}`;
|
|
5268
5272
|
}
|
|
5269
5273
|
async function defaultDeps() {
|
|
5270
|
-
const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-
|
|
5274
|
+
const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-YKSDWR6C.js");
|
|
5271
5275
|
const orch = getOrchestrator2();
|
|
5272
5276
|
return {
|
|
5273
5277
|
findThread: (id) => findThreadByRef(id),
|
package/dist/index.cjs
CHANGED
|
@@ -19287,7 +19287,9 @@ function looksLikeDeferredDonePromise(text6) {
|
|
|
19287
19287
|
if (!t || t.length > DEFERRED_DONE_MAX_CHARS) return false;
|
|
19288
19288
|
const unquoted = t.replace(/`[^`]*`/g, " ").replace(/["“”][^"“”]*["“”]/g, " ").replace(/\s+/g, " ").trim();
|
|
19289
19289
|
if (!unquoted) return false;
|
|
19290
|
-
return /\b(i['’]?ll|i will)\s+let you know\b/i.test(unquoted) || /\blet you know when\b/i.test(unquoted) || /\b(check back|ping me)\s+when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(report|update you)\s+when\b/i.test(unquoted)
|
|
19290
|
+
return /\b(i['’]?ll|i will)\s+let you know\b/i.test(unquoted) || /\blet you know when\b/i.test(unquoted) || /\b(check back|ping me)\s+when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(report|update you)\s+when\b/i.test(unquoted) || /\bbackground poll\b/i.test(unquoted) || /\bwill notify (?:me|you) when\b/i.test(unquoted) || /\bi(?:['’]ll| will) be notified when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(?:keep|continue)\s+(?:watching|waiting|polling|checking)\b/i.test(
|
|
19291
|
+
unquoted
|
|
19292
|
+
) || /\bi(?:['’]ll| will)\s+come back when\b/i.test(unquoted);
|
|
19291
19293
|
}
|
|
19292
19294
|
function isJobContinuePrompt(text6) {
|
|
19293
19295
|
if (typeof text6 !== "string") return false;
|
|
@@ -19329,6 +19331,7 @@ function formatJobStillRunningContinuePrompt(jobIds) {
|
|
|
19329
19331
|
function formatDeferredDoneContinuePrompt() {
|
|
19330
19332
|
return [
|
|
19331
19333
|
"You ended the turn after promising to report later, but no detached job is running.",
|
|
19334
|
+
"A native background poll / Task / bash notify does not resume this chat (Claude, Cursor, Codex, OpenCode).",
|
|
19332
19335
|
"If tests/pack/deploy still need to run: start once with detached-job.cjs, then loop wait_for_job until stillRunning is false (the log pane updates from wait JSON).",
|
|
19333
19336
|
"Do not say you will let the user know later."
|
|
19334
19337
|
].join(" ");
|
|
@@ -24862,7 +24865,7 @@ var init_long_running = __esm({
|
|
|
24862
24865
|
|
|
24863
24866
|
A Sideboard or Cursor **worktree turn** SIGTERMs the agent shell (and its process group) when the user sends another message or the turn is interrupted. \`block_until_ms: 0\` is not enough \u2014 the child stays in that group.
|
|
24864
24867
|
|
|
24865
|
-
Do **not** ask the human to check back. Detach, then **wait** in 45s slices (MCP \`wait_for_job\`, same idea as \`wait_for_turn\`) until \`stillRunning\` is false. Do not end the turn with \u201CI\u2019ll let you know.\u201D
|
|
24868
|
+
Do **not** ask the human to check back. Detach, then **wait** in 45s slices (MCP \`wait_for_job\`, same idea as \`wait_for_turn\`) until \`stillRunning\` is false. Do not end the turn with \u201CI\u2019ll let you know\u201D or \u201Ca background poll will notify me.\u201D Native background bash/Task notify (Claude, Cursor, Codex, OpenCode) does **not** resume a Sideboard chat.
|
|
24866
24869
|
|
|
24867
24870
|
## Tool
|
|
24868
24871
|
|
|
@@ -24937,6 +24940,10 @@ node <detached-job.cjs> start pr-checks -- gh pr checks --watch
|
|
|
24937
24940
|
\`\`\`
|
|
24938
24941
|
|
|
24939
24942
|
On miss, fix, commit, push, and watch again until the goal is met or you are blocked. Do not ask the human to poll. Do not merge unless asked.
|
|
24943
|
+
|
|
24944
|
+
## GitHub Actions runs
|
|
24945
|
+
|
|
24946
|
+
Do **not** \`gh run watch\`. It reprints the full TTY every 3 seconds and floods the Sideboard log pane. Poll \`gh run view --json status,conclusion,jobs\` every 20\u201330s and print only when status or the in-progress step changes.
|
|
24940
24947
|
`;
|
|
24941
24948
|
}
|
|
24942
24949
|
});
|
|
@@ -25527,7 +25534,7 @@ function formatPrGateDirective() {
|
|
|
25527
25534
|
return [
|
|
25528
25535
|
"If a goal is given (not after every push):",
|
|
25529
25536
|
"- Enter a watch-fix-push loop and stay in it until that goal is met or you are blocked (examples: \u201CGreptile 5/5\u201D, \u201CCI green\u201D, \u201Cuntil checks pass\u201D). Do not stop after one red run or one review cycle.",
|
|
25530
|
-
"- Wait with `/long-running`: `gh pr checks --watch` (add `-R <origin>` when needed).
|
|
25537
|
+
"- Wait with `/long-running`: detach `gh pr checks --watch` (add `-R <origin>` when needed), then loop `wait_for_job` until stillRunning is false. Do not end the turn \u2014 a background poll / Task notify does not resume this chat. Do not ask the human to poll.",
|
|
25531
25538
|
"- Greptile 5/5: wait for the greptile check; read the latest `N/5` from the PR body or Greptile\u2019s most recently *updated* issue comment; also fetch unresolved review comments / the \u201CPrompt to fix all with AI\u201D block. Done = **5/5 and zero unresolved Greptile comments**. If Greptile is idle, comment `@greptile review`. Cap about 5 iterations, then report leftovers. Do not merge unless asked."
|
|
25532
25539
|
].join("\n");
|
|
25533
25540
|
}
|
|
@@ -25560,7 +25567,7 @@ function formatLongRunningDirective(opts) {
|
|
|
25560
25567
|
}
|
|
25561
25568
|
function formatLongRunningReminder(opts) {
|
|
25562
25569
|
const invoke = formatDetachedJobInvoke(opts?.scriptPath);
|
|
25563
|
-
return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script / get_run_log (UI-connected \u2014 not detached-job). ${formatDevAccessHint(opts?.activeRuns)}`;
|
|
25570
|
+
return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. A background poll / Task notify does not resume this chat. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script / get_run_log (UI-connected \u2014 not detached-job). ${formatDevAccessHint(opts?.activeRuns)}`;
|
|
25564
25571
|
}
|
|
25565
25572
|
function formatArtifactDirective() {
|
|
25566
25573
|
return [
|
package/dist/index.js
CHANGED
|
@@ -173,7 +173,7 @@ import {
|
|
|
173
173
|
worktreeBoardStatus,
|
|
174
174
|
worktreeCleanupSettings,
|
|
175
175
|
writeWorktreeFile
|
|
176
|
-
} from "./chunk-
|
|
176
|
+
} from "./chunk-N3LASDJM.js";
|
|
177
177
|
import {
|
|
178
178
|
BASE_ALLOWED_TOOLS,
|
|
179
179
|
BRIGHTSY_MCP_ALLOWED_TOOLS,
|
|
@@ -380,7 +380,7 @@ import {
|
|
|
380
380
|
waitForTurnToolResult,
|
|
381
381
|
worktreeRunPortsPath,
|
|
382
382
|
wrapReviewSkillMarkdown
|
|
383
|
-
} from "./chunk-
|
|
383
|
+
} from "./chunk-HO2T6BC3.js";
|
|
384
384
|
import {
|
|
385
385
|
STDERR_EVENT_MAX_CHARS,
|
|
386
386
|
STDOUT_EVENT_MAX_CHARS,
|
|
@@ -5139,7 +5139,7 @@ async function handleJobStop(params, _ctx) {
|
|
|
5139
5139
|
return stopDetachedJob(jobCwd(rec), id, reason ? { reason } : void 0);
|
|
5140
5140
|
}
|
|
5141
5141
|
async function defaultTurnWait(ref, timeoutMs) {
|
|
5142
|
-
const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-
|
|
5142
|
+
const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-K42IBMBE.js");
|
|
5143
5143
|
const orch = getOrchestrator2();
|
|
5144
5144
|
const thread = await orch.waitForTurn(ref, timeoutMs, {
|
|
5145
5145
|
resolveIfStillRunning: true
|
|
@@ -10469,7 +10469,7 @@ async function continueSourceThread(threadId, prompt) {
|
|
|
10469
10469
|
await continueOnReply(threadId, prompt);
|
|
10470
10470
|
return;
|
|
10471
10471
|
}
|
|
10472
|
-
const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-
|
|
10472
|
+
const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-K42IBMBE.js");
|
|
10473
10473
|
await getOrchestrator2().send(threadId, prompt);
|
|
10474
10474
|
} catch {
|
|
10475
10475
|
}
|
package/dist/mcp/run-stdio.cjs
CHANGED
|
@@ -16138,7 +16138,9 @@ function looksLikeDeferredDonePromise(text6) {
|
|
|
16138
16138
|
if (!t || t.length > DEFERRED_DONE_MAX_CHARS) return false;
|
|
16139
16139
|
const unquoted = t.replace(/`[^`]*`/g, " ").replace(/["“”][^"“”]*["“”]/g, " ").replace(/\s+/g, " ").trim();
|
|
16140
16140
|
if (!unquoted) return false;
|
|
16141
|
-
return /\b(i['’]?ll|i will)\s+let you know\b/i.test(unquoted) || /\blet you know when\b/i.test(unquoted) || /\b(check back|ping me)\s+when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(report|update you)\s+when\b/i.test(unquoted)
|
|
16141
|
+
return /\b(i['’]?ll|i will)\s+let you know\b/i.test(unquoted) || /\blet you know when\b/i.test(unquoted) || /\b(check back|ping me)\s+when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(report|update you)\s+when\b/i.test(unquoted) || /\bbackground poll\b/i.test(unquoted) || /\bwill notify (?:me|you) when\b/i.test(unquoted) || /\bi(?:['’]ll| will) be notified when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(?:keep|continue)\s+(?:watching|waiting|polling|checking)\b/i.test(
|
|
16142
|
+
unquoted
|
|
16143
|
+
) || /\bi(?:['’]ll| will)\s+come back when\b/i.test(unquoted);
|
|
16142
16144
|
}
|
|
16143
16145
|
function isJobContinuePrompt(text6) {
|
|
16144
16146
|
if (typeof text6 !== "string") return false;
|
|
@@ -16180,6 +16182,7 @@ function formatJobStillRunningContinuePrompt(jobIds) {
|
|
|
16180
16182
|
function formatDeferredDoneContinuePrompt() {
|
|
16181
16183
|
return [
|
|
16182
16184
|
"You ended the turn after promising to report later, but no detached job is running.",
|
|
16185
|
+
"A native background poll / Task / bash notify does not resume this chat (Claude, Cursor, Codex, OpenCode).",
|
|
16183
16186
|
"If tests/pack/deploy still need to run: start once with detached-job.cjs, then loop wait_for_job until stillRunning is false (the log pane updates from wait JSON).",
|
|
16184
16187
|
"Do not say you will let the user know later."
|
|
16185
16188
|
].join(" ");
|
|
@@ -22531,7 +22534,7 @@ var init_long_running = __esm({
|
|
|
22531
22534
|
|
|
22532
22535
|
A Sideboard or Cursor **worktree turn** SIGTERMs the agent shell (and its process group) when the user sends another message or the turn is interrupted. \`block_until_ms: 0\` is not enough \u2014 the child stays in that group.
|
|
22533
22536
|
|
|
22534
|
-
Do **not** ask the human to check back. Detach, then **wait** in 45s slices (MCP \`wait_for_job\`, same idea as \`wait_for_turn\`) until \`stillRunning\` is false. Do not end the turn with \u201CI\u2019ll let you know.\u201D
|
|
22537
|
+
Do **not** ask the human to check back. Detach, then **wait** in 45s slices (MCP \`wait_for_job\`, same idea as \`wait_for_turn\`) until \`stillRunning\` is false. Do not end the turn with \u201CI\u2019ll let you know\u201D or \u201Ca background poll will notify me.\u201D Native background bash/Task notify (Claude, Cursor, Codex, OpenCode) does **not** resume a Sideboard chat.
|
|
22535
22538
|
|
|
22536
22539
|
## Tool
|
|
22537
22540
|
|
|
@@ -22606,6 +22609,10 @@ node <detached-job.cjs> start pr-checks -- gh pr checks --watch
|
|
|
22606
22609
|
\`\`\`
|
|
22607
22610
|
|
|
22608
22611
|
On miss, fix, commit, push, and watch again until the goal is met or you are blocked. Do not ask the human to poll. Do not merge unless asked.
|
|
22612
|
+
|
|
22613
|
+
## GitHub Actions runs
|
|
22614
|
+
|
|
22615
|
+
Do **not** \`gh run watch\`. It reprints the full TTY every 3 seconds and floods the Sideboard log pane. Poll \`gh run view --json status,conclusion,jobs\` every 20\u201330s and print only when status or the in-progress step changes.
|
|
22609
22616
|
`;
|
|
22610
22617
|
}
|
|
22611
22618
|
});
|
|
@@ -23174,7 +23181,7 @@ function formatPrGateDirective() {
|
|
|
23174
23181
|
return [
|
|
23175
23182
|
"If a goal is given (not after every push):",
|
|
23176
23183
|
"- Enter a watch-fix-push loop and stay in it until that goal is met or you are blocked (examples: \u201CGreptile 5/5\u201D, \u201CCI green\u201D, \u201Cuntil checks pass\u201D). Do not stop after one red run or one review cycle.",
|
|
23177
|
-
"- Wait with `/long-running`: `gh pr checks --watch` (add `-R <origin>` when needed).
|
|
23184
|
+
"- Wait with `/long-running`: detach `gh pr checks --watch` (add `-R <origin>` when needed), then loop `wait_for_job` until stillRunning is false. Do not end the turn \u2014 a background poll / Task notify does not resume this chat. Do not ask the human to poll.",
|
|
23178
23185
|
"- Greptile 5/5: wait for the greptile check; read the latest `N/5` from the PR body or Greptile\u2019s most recently *updated* issue comment; also fetch unresolved review comments / the \u201CPrompt to fix all with AI\u201D block. Done = **5/5 and zero unresolved Greptile comments**. If Greptile is idle, comment `@greptile review`. Cap about 5 iterations, then report leftovers. Do not merge unless asked."
|
|
23179
23186
|
].join("\n");
|
|
23180
23187
|
}
|
|
@@ -23207,7 +23214,7 @@ function formatLongRunningDirective(opts) {
|
|
|
23207
23214
|
}
|
|
23208
23215
|
function formatLongRunningReminder(opts) {
|
|
23209
23216
|
const invoke = formatDetachedJobInvoke(opts?.scriptPath);
|
|
23210
|
-
return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script / get_run_log (UI-connected \u2014 not detached-job). ${formatDevAccessHint(opts?.activeRuns)}`;
|
|
23217
|
+
return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. A background poll / Task notify does not resume this chat. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script / get_run_log (UI-connected \u2014 not detached-job). ${formatDevAccessHint(opts?.activeRuns)}`;
|
|
23211
23218
|
}
|
|
23212
23219
|
function formatArtifactDirective() {
|
|
23213
23220
|
return [
|
package/dist/mcp/run-stdio.js
CHANGED
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
sliceRunLogOutput,
|
|
53
53
|
syncBoardPins,
|
|
54
54
|
updateSchedule
|
|
55
|
-
} from "../chunk-
|
|
55
|
+
} from "../chunk-T47ARZ5Q.js";
|
|
56
56
|
import "../chunk-LX5R5JOR.js";
|
|
57
57
|
import {
|
|
58
58
|
PRESENT_PLAN_REQUIRES_PLAN_MODE,
|
|
@@ -86,7 +86,7 @@ import {
|
|
|
86
86
|
threadsSharingWorktree,
|
|
87
87
|
waitForDetachedJob,
|
|
88
88
|
waitForTurnToolResult
|
|
89
|
-
} from "../chunk-
|
|
89
|
+
} from "../chunk-OUBQH5GR.js";
|
|
90
90
|
import {
|
|
91
91
|
clipToolResultForStore,
|
|
92
92
|
isInternalAgentStatusText,
|
|
@@ -9,10 +9,10 @@ import {
|
|
|
9
9
|
resolveSendFollowUp,
|
|
10
10
|
startOrchestration,
|
|
11
11
|
waitForPidExit
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-N3LASDJM.js";
|
|
13
13
|
import "./chunk-ADWNK2JH.js";
|
|
14
14
|
import "./chunk-GWFVCCJZ.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-HO2T6BC3.js";
|
|
16
16
|
import "./chunk-FAGK33E2.js";
|
|
17
17
|
import "./chunk-7H655NEW.js";
|
|
18
18
|
import "./chunk-PGPSIEMW.js";
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
resolveSendFollowUp,
|
|
12
12
|
startOrchestration,
|
|
13
13
|
waitForPidExit
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-T47ARZ5Q.js";
|
|
15
15
|
import "./chunk-LX5R5JOR.js";
|
|
16
16
|
import "./chunk-4GK32AYX.js";
|
|
17
17
|
import "./chunk-5DZUWGKV.js";
|
|
@@ -19,7 +19,7 @@ import "./chunk-JLDJGGCL.js";
|
|
|
19
19
|
import "./chunk-TQRSVE7D.js";
|
|
20
20
|
import "./chunk-P2BSMNHB.js";
|
|
21
21
|
import "./chunk-VKQGAWHY.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-OUBQH5GR.js";
|
|
23
23
|
import "./chunk-UKSJO36E.js";
|
|
24
24
|
import "./chunk-2QUILREI.js";
|
|
25
25
|
import "./chunk-NWE3NOWQ.js";
|