oh-my-copilot 4.12.0 → 4.13.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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/bridge/cli.cjs +121 -21
- package/bridge/mcp-server.cjs +63 -14
- package/bridge/runtime-cli.cjs +24 -1
- package/bridge/team.js +26 -3
- package/dist/__tests__/rate-limit-wait/daemon.test.js +49 -1
- package/dist/__tests__/rate-limit-wait/daemon.test.js.map +1 -1
- package/dist/__tests__/rate-limit-wait/integration.test.js +39 -1
- package/dist/__tests__/rate-limit-wait/integration.test.js.map +1 -1
- package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js +42 -1
- package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js.map +1 -1
- package/dist/__tests__/runtime-guidance-plan-ralph.test.js +4 -0
- package/dist/__tests__/runtime-guidance-plan-ralph.test.js.map +1 -1
- package/dist/cli/team.js +2 -2
- package/dist/cli/team.js.map +1 -1
- package/dist/features/rate-limit-wait/daemon.d.ts +7 -1
- package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -1
- package/dist/features/rate-limit-wait/daemon.js +13 -6
- package/dist/features/rate-limit-wait/daemon.js.map +1 -1
- package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts +4 -2
- package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts.map +1 -1
- package/dist/features/rate-limit-wait/rate-limit-monitor.js +5 -3
- package/dist/features/rate-limit-wait/rate-limit-monitor.js.map +1 -1
- package/dist/hooks/autopilot/__tests__/cancel.test.js +12 -5
- package/dist/hooks/autopilot/__tests__/cancel.test.js.map +1 -1
- package/dist/hooks/autopilot/__tests__/transitions.test.js +10 -3
- package/dist/hooks/autopilot/__tests__/transitions.test.js.map +1 -1
- package/dist/hooks/autopilot/__tests__/validation.test.js +12 -3
- package/dist/hooks/autopilot/__tests__/validation.test.js.map +1 -1
- package/dist/hooks/persistent-mode/__tests__/cancel-race.test.js +30 -0
- package/dist/hooks/persistent-mode/__tests__/cancel-race.test.js.map +1 -1
- package/dist/installer/mcp-registry.d.ts.map +1 -1
- package/dist/installer/mcp-registry.js +20 -1
- package/dist/installer/mcp-registry.js.map +1 -1
- package/dist/team/capabilities.d.ts.map +1 -1
- package/dist/team/capabilities.js +1 -0
- package/dist/team/capabilities.js.map +1 -1
- package/dist/team/cli-detection.d.ts.map +1 -1
- package/dist/team/cli-detection.js +1 -0
- package/dist/team/cli-detection.js.map +1 -1
- package/dist/team/cli-worker-contract.d.ts.map +1 -1
- package/dist/team/cli-worker-contract.js +8 -1
- package/dist/team/cli-worker-contract.js.map +1 -1
- package/dist/team/model-contract.d.ts +1 -1
- package/dist/team/model-contract.d.ts.map +1 -1
- package/dist/team/model-contract.js +18 -0
- package/dist/team/model-contract.js.map +1 -1
- package/dist/team/types.d.ts +2 -2
- package/dist/team/types.d.ts.map +1 -1
- package/dist/team/unified-team.d.ts.map +1 -1
- package/dist/team/unified-team.js +2 -0
- package/dist/team/unified-team.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +7 -0
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/tools/__tests__/state-tools.test.js +20 -9
- package/dist/tools/__tests__/state-tools.test.js.map +1 -1
- package/dist/tools/state-tools.d.ts.map +1 -1
- package/dist/tools/state-tools.js +79 -14
- package/dist/tools/state-tools.js.map +1 -1
- package/docs/copilot-instructions.md +1 -1
- package/package.json +1 -1
- package/scripts/keyword-detector.mjs +5 -1
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
{
|
|
11
11
|
"name": "oh-my-copilot",
|
|
12
12
|
"description": "Copilot CLI native multi-agent orchestration with intelligent model routing, 18 agent variants, and 32 powerful skills. Zero learning curve. Maximum power.",
|
|
13
|
-
"version": "4.
|
|
13
|
+
"version": "4.13.0",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "Robin Norberg",
|
|
16
16
|
"email": "github@platypus.se"
|
|
@@ -27,5 +27,5 @@
|
|
|
27
27
|
]
|
|
28
28
|
}
|
|
29
29
|
],
|
|
30
|
-
"version": "4.
|
|
30
|
+
"version": "4.13.0"
|
|
31
31
|
}
|
package/bridge/cli.cjs
CHANGED
|
@@ -14397,6 +14397,23 @@ function stripManagedCodexBlock(content) {
|
|
|
14397
14397
|
);
|
|
14398
14398
|
return content.replace(managedBlockPattern, "").trimEnd();
|
|
14399
14399
|
}
|
|
14400
|
+
function parseCodexMcpServerNames(content) {
|
|
14401
|
+
const names = /* @__PURE__ */ new Set();
|
|
14402
|
+
for (const rawLine of content.split(/\r?\n/)) {
|
|
14403
|
+
const line = rawLine.trim();
|
|
14404
|
+
if (!line || line.startsWith("#")) {
|
|
14405
|
+
continue;
|
|
14406
|
+
}
|
|
14407
|
+
const sectionMatch = line.match(/^\[mcp_servers\.([^\]]+)\]$/);
|
|
14408
|
+
if (sectionMatch) {
|
|
14409
|
+
const name = sectionMatch[1].trim();
|
|
14410
|
+
if (name) {
|
|
14411
|
+
names.add(name);
|
|
14412
|
+
}
|
|
14413
|
+
}
|
|
14414
|
+
}
|
|
14415
|
+
return names;
|
|
14416
|
+
}
|
|
14400
14417
|
function renderManagedCodexMcpBlock(registry2) {
|
|
14401
14418
|
const names = Object.keys(registry2);
|
|
14402
14419
|
if (names.length === 0) {
|
|
@@ -14407,7 +14424,11 @@ function renderManagedCodexMcpBlock(registry2) {
|
|
|
14407
14424
|
}
|
|
14408
14425
|
function syncCodexConfigToml(existingContent, registry2) {
|
|
14409
14426
|
const base = stripManagedCodexBlock(existingContent);
|
|
14410
|
-
const
|
|
14427
|
+
const existingServerNames = parseCodexMcpServerNames(base);
|
|
14428
|
+
const managedRegistry = Object.fromEntries(
|
|
14429
|
+
Object.entries(registry2).filter(([name]) => !existingServerNames.has(name))
|
|
14430
|
+
);
|
|
14431
|
+
const managedBlock = renderManagedCodexMcpBlock(managedRegistry);
|
|
14411
14432
|
const nextContent = managedBlock ? `${base ? `${base}
|
|
14412
14433
|
|
|
14413
14434
|
` : ""}${managedBlock}
|
|
@@ -33825,6 +33846,22 @@ var init_model_contract = __esm({
|
|
|
33825
33846
|
parseOutput(rawOutput) {
|
|
33826
33847
|
return rawOutput.trim();
|
|
33827
33848
|
}
|
|
33849
|
+
},
|
|
33850
|
+
cursor: {
|
|
33851
|
+
agentType: "cursor",
|
|
33852
|
+
binary: "cursor-agent",
|
|
33853
|
+
installInstructions: "Install Cursor Agent CLI: see https://docs.cursor.com/cli",
|
|
33854
|
+
// cursor-agent runs as an interactive REPL — no exit-on-complete prompt mode.
|
|
33855
|
+
// Keep supportsPromptMode false so the verdict-file contract path
|
|
33856
|
+
// (CONTRACT_ROLES + shouldInjectContract) skips this provider; cursor
|
|
33857
|
+
// workers participate as executors only.
|
|
33858
|
+
supportsPromptMode: false,
|
|
33859
|
+
buildLaunchArgs(_model, extraFlags = []) {
|
|
33860
|
+
return [...extraFlags];
|
|
33861
|
+
},
|
|
33862
|
+
parseOutput(rawOutput) {
|
|
33863
|
+
return rawOutput.trim();
|
|
33864
|
+
}
|
|
33828
33865
|
}
|
|
33829
33866
|
};
|
|
33830
33867
|
WORKER_MODEL_ENV_ALLOWLIST = [
|
|
@@ -34643,6 +34680,13 @@ function agentTypeGuidance(agentType) {
|
|
|
34643
34680
|
"- Keep commit-sized changes scoped to assigned files only; no broad refactors.",
|
|
34644
34681
|
`- CRITICAL: You MUST run \`${claimTaskCommand}\` before starting work and \`${transitionTaskStatusCommand}\` when done. Do not exit without transitioning the task status.`
|
|
34645
34682
|
].join("\n");
|
|
34683
|
+
case "cursor":
|
|
34684
|
+
return [
|
|
34685
|
+
"### Agent-Type Guidance (cursor)",
|
|
34686
|
+
"- You are an interactive REPL (cursor-agent), not a one-shot CLI. Stay in the session; the leader will continue to send prompts via mailbox.",
|
|
34687
|
+
`- You MUST run \`${claimTaskCommand}\` before starting work and \`${transitionTaskStatusCommand}\` when done. Then keep waiting for the next mailbox message; do NOT type \`/exit\` unless the leader sends an explicit shutdown.`,
|
|
34688
|
+
"- Reviewer/critic/security-review roles are NOT supported for cursor workers \u2014 those require a verdict-file write-and-exit which the REPL does not perform. Take only executor-style tasks."
|
|
34689
|
+
].join("\n");
|
|
34646
34690
|
case "claude":
|
|
34647
34691
|
default:
|
|
34648
34692
|
return [
|
|
@@ -35766,7 +35810,7 @@ var init_role_router = __esm({
|
|
|
35766
35810
|
// src/team/cli-worker-contract.ts
|
|
35767
35811
|
function shouldInjectContract(role, provider) {
|
|
35768
35812
|
if (!role || !provider) return false;
|
|
35769
|
-
if (provider === "claude") return false;
|
|
35813
|
+
if (provider === "claude" || provider === "cursor") return false;
|
|
35770
35814
|
return CONTRACT_ROLES.has(role);
|
|
35771
35815
|
}
|
|
35772
35816
|
function renderCliWorkerOutputContract(role, output_file) {
|
|
@@ -74716,6 +74760,36 @@ function getStatePath(mode, root) {
|
|
|
74716
74760
|
}
|
|
74717
74761
|
return resolveStatePath(mode, root);
|
|
74718
74762
|
}
|
|
74763
|
+
function writeSessionCancelSignal(root, sessionId, mode) {
|
|
74764
|
+
const now = Date.now();
|
|
74765
|
+
const cancelSignalPath = resolveSessionStatePath("cancel-signal", sessionId, root);
|
|
74766
|
+
atomicWriteJsonSync(cancelSignalPath, {
|
|
74767
|
+
active: true,
|
|
74768
|
+
requested_at: new Date(now).toISOString(),
|
|
74769
|
+
expires_at: new Date(now + CANCEL_SIGNAL_TTL_MS).toISOString(),
|
|
74770
|
+
mode,
|
|
74771
|
+
source: "state_clear"
|
|
74772
|
+
});
|
|
74773
|
+
}
|
|
74774
|
+
function isSessionModeActive(mode, root, sessionId) {
|
|
74775
|
+
if (MODE_CONFIGS[mode]) {
|
|
74776
|
+
return isModeActive(mode, root, sessionId);
|
|
74777
|
+
}
|
|
74778
|
+
const statePath = resolveSessionStatePath(mode, sessionId, root);
|
|
74779
|
+
if (!(0, import_fs17.existsSync)(statePath)) {
|
|
74780
|
+
return false;
|
|
74781
|
+
}
|
|
74782
|
+
try {
|
|
74783
|
+
const state = JSON.parse((0, import_fs17.readFileSync)(statePath, "utf-8"));
|
|
74784
|
+
return state.active === true;
|
|
74785
|
+
} catch {
|
|
74786
|
+
return false;
|
|
74787
|
+
}
|
|
74788
|
+
}
|
|
74789
|
+
function findSingleOwningSessionForMode(mode, root, requesterSessionId) {
|
|
74790
|
+
const owningSessions = listSessionIds(root).filter((sid) => sid !== requesterSessionId && isSessionModeActive(mode, root, sid));
|
|
74791
|
+
return owningSessions.length === 1 ? owningSessions[0] : void 0;
|
|
74792
|
+
}
|
|
74719
74793
|
var stateReadTool = {
|
|
74720
74794
|
name: "state_read",
|
|
74721
74795
|
description: "Read the current state for a specific mode (ralph, ultrawork, autopilot, etc.). Returns the JSON state data or indicates if no state exists.",
|
|
@@ -74973,16 +75047,10 @@ var stateClearTool = {
|
|
|
74973
75047
|
const sessionId = session_id;
|
|
74974
75048
|
if (sessionId) {
|
|
74975
75049
|
validateSessionId(sessionId);
|
|
74976
|
-
|
|
74977
|
-
const cancelSignalPath = resolveSessionStatePath("cancel-signal", sessionId, root);
|
|
74978
|
-
atomicWriteJsonSync(cancelSignalPath, {
|
|
74979
|
-
active: true,
|
|
74980
|
-
requested_at: new Date(now).toISOString(),
|
|
74981
|
-
expires_at: new Date(now + CANCEL_SIGNAL_TTL_MS).toISOString(),
|
|
74982
|
-
mode,
|
|
74983
|
-
source: "state_clear"
|
|
74984
|
-
});
|
|
75050
|
+
writeSessionCancelSignal(root, sessionId, mode);
|
|
74985
75051
|
if (MODE_CONFIGS[mode]) {
|
|
75052
|
+
const requesterStatePath = getStateFilePath(root, mode, sessionId);
|
|
75053
|
+
const hadRequesterState2 = (0, import_fs17.existsSync)(requesterStatePath);
|
|
74986
75054
|
const success2 = clearModeState(mode, root, sessionId);
|
|
74987
75055
|
let ghostCleaned2 = false;
|
|
74988
75056
|
try {
|
|
@@ -74997,25 +75065,35 @@ var stateClearTool = {
|
|
|
74997
75065
|
}
|
|
74998
75066
|
} catch {
|
|
74999
75067
|
}
|
|
75068
|
+
let ownerSessionId2;
|
|
75069
|
+
if (!hadRequesterState2 && !ghostCleaned2) {
|
|
75070
|
+
ownerSessionId2 = findSingleOwningSessionForMode(mode, root, sessionId);
|
|
75071
|
+
if (ownerSessionId2) {
|
|
75072
|
+
writeSessionCancelSignal(root, ownerSessionId2, mode);
|
|
75073
|
+
clearModeState(mode, root, ownerSessionId2);
|
|
75074
|
+
}
|
|
75075
|
+
}
|
|
75000
75076
|
const ghostNote2 = ghostCleaned2 ? " (ghost legacy file also removed)" : "";
|
|
75001
|
-
|
|
75077
|
+
const ownerNote2 = ownerSessionId2 ? ` (cleared owning session: ${ownerSessionId2})` : "";
|
|
75078
|
+
if (success2 || ownerSessionId2) {
|
|
75002
75079
|
return {
|
|
75003
75080
|
content: [{
|
|
75004
75081
|
type: "text",
|
|
75005
|
-
text: `Successfully cleared state for mode: ${mode} in session: ${sessionId}${ghostNote2}`
|
|
75082
|
+
text: `Successfully cleared state for mode: ${mode} in session: ${sessionId}${ghostNote2}${ownerNote2}`
|
|
75006
75083
|
}]
|
|
75007
75084
|
};
|
|
75008
75085
|
} else {
|
|
75009
75086
|
return {
|
|
75010
75087
|
content: [{
|
|
75011
75088
|
type: "text",
|
|
75012
|
-
text: `Warning: Some files could not be removed for mode: ${mode} in session: ${sessionId}${ghostNote2}`
|
|
75089
|
+
text: `Warning: Some files could not be removed for mode: ${mode} in session: ${sessionId}${ghostNote2}${ownerNote2}`
|
|
75013
75090
|
}]
|
|
75014
75091
|
};
|
|
75015
75092
|
}
|
|
75016
75093
|
}
|
|
75017
75094
|
const statePath = resolveSessionStatePath(mode, sessionId, root);
|
|
75018
|
-
|
|
75095
|
+
const hadRequesterState = (0, import_fs17.existsSync)(statePath);
|
|
75096
|
+
if (hadRequesterState) {
|
|
75019
75097
|
(0, import_fs17.unlinkSync)(statePath);
|
|
75020
75098
|
}
|
|
75021
75099
|
let ghostCleaned = false;
|
|
@@ -75031,11 +75109,26 @@ var stateClearTool = {
|
|
|
75031
75109
|
}
|
|
75032
75110
|
} catch {
|
|
75033
75111
|
}
|
|
75112
|
+
let ownerSessionId;
|
|
75113
|
+
if (!hadRequesterState && !ghostCleaned) {
|
|
75114
|
+
ownerSessionId = findSingleOwningSessionForMode(mode, root, sessionId);
|
|
75115
|
+
if (ownerSessionId) {
|
|
75116
|
+
writeSessionCancelSignal(root, ownerSessionId, mode);
|
|
75117
|
+
const ownerStatePath = resolveSessionStatePath(mode, ownerSessionId, root);
|
|
75118
|
+
if ((0, import_fs17.existsSync)(ownerStatePath)) {
|
|
75119
|
+
try {
|
|
75120
|
+
(0, import_fs17.unlinkSync)(ownerStatePath);
|
|
75121
|
+
} catch {
|
|
75122
|
+
}
|
|
75123
|
+
}
|
|
75124
|
+
}
|
|
75125
|
+
}
|
|
75034
75126
|
const ghostNote = ghostCleaned ? " (ghost legacy file also removed)" : "";
|
|
75127
|
+
const ownerNote = ownerSessionId ? ` (cleared owning session: ${ownerSessionId})` : "";
|
|
75035
75128
|
return {
|
|
75036
75129
|
content: [{
|
|
75037
75130
|
type: "text",
|
|
75038
|
-
text: `Successfully cleared state for mode: ${mode} in session: ${sessionId}${ghostNote}`
|
|
75131
|
+
text: `Successfully cleared state for mode: ${mode} in session: ${sessionId}${ghostNote}${ownerNote}`
|
|
75039
75132
|
}]
|
|
75040
75133
|
};
|
|
75041
75134
|
}
|
|
@@ -83233,7 +83326,7 @@ function isRateLimitStatusDegraded(status) {
|
|
|
83233
83326
|
return status?.apiErrorReason === "rate_limited";
|
|
83234
83327
|
}
|
|
83235
83328
|
function shouldMonitorBlockedPanes(status) {
|
|
83236
|
-
return !!status
|
|
83329
|
+
return !!status?.isLimited;
|
|
83237
83330
|
}
|
|
83238
83331
|
|
|
83239
83332
|
// src/features/rate-limit-wait/index.ts
|
|
@@ -83439,6 +83532,11 @@ function createInitialState() {
|
|
|
83439
83532
|
errorCount: 0
|
|
83440
83533
|
};
|
|
83441
83534
|
}
|
|
83535
|
+
function shouldResumeBlockedPanesOnStatusChange(previousStatus, nextStatus) {
|
|
83536
|
+
const wasLimited = shouldMonitorBlockedPanes(previousStatus);
|
|
83537
|
+
const isNowLimited = shouldMonitorBlockedPanes(nextStatus);
|
|
83538
|
+
return wasLimited && !isNowLimited && !isRateLimitStatusDegraded(nextStatus);
|
|
83539
|
+
}
|
|
83442
83540
|
function registerDaemonCleanup(config2) {
|
|
83443
83541
|
const cleanup = () => {
|
|
83444
83542
|
try {
|
|
@@ -83480,8 +83578,11 @@ async function pollLoop2(config2) {
|
|
|
83480
83578
|
(_, reject) => setTimeout(() => reject(new Error("checkRateLimitStatus timed out after 30s")), 3e4)
|
|
83481
83579
|
)
|
|
83482
83580
|
]);
|
|
83483
|
-
const wasLimited = shouldMonitorBlockedPanes(state.rateLimitStatus);
|
|
83484
83581
|
const isNowLimited = shouldMonitorBlockedPanes(rateLimitStatus);
|
|
83582
|
+
const shouldResumeBlockedPanes = shouldResumeBlockedPanesOnStatusChange(
|
|
83583
|
+
state.rateLimitStatus,
|
|
83584
|
+
rateLimitStatus
|
|
83585
|
+
);
|
|
83485
83586
|
state.rateLimitStatus = rateLimitStatus;
|
|
83486
83587
|
if (rateLimitStatus) {
|
|
83487
83588
|
log2(`Rate limit status: ${formatRateLimitStatus(rateLimitStatus)}`, config2);
|
|
@@ -83489,8 +83590,7 @@ async function pollLoop2(config2) {
|
|
|
83489
83590
|
log2("Rate limit status unavailable (no OAuth credentials?)", config2);
|
|
83490
83591
|
}
|
|
83491
83592
|
if (isNowLimited && isTmuxAvailable2()) {
|
|
83492
|
-
|
|
83493
|
-
log2(scanReason, config2);
|
|
83593
|
+
log2("Rate limited - scanning for blocked panes", config2);
|
|
83494
83594
|
const blockedPanes = scanForBlockedPanes(config2.paneLinesToCapture, (0, import_path105.dirname)(config2.stateFilePath));
|
|
83495
83595
|
for (const pane of blockedPanes) {
|
|
83496
83596
|
const existing = state.blockedPanes.find((p) => p.id === pane.id);
|
|
@@ -83503,7 +83603,7 @@ async function pollLoop2(config2) {
|
|
|
83503
83603
|
(tracked) => blockedPanes.some((current) => current.id === tracked.id)
|
|
83504
83604
|
);
|
|
83505
83605
|
}
|
|
83506
|
-
if (
|
|
83606
|
+
if (shouldResumeBlockedPanes && state.blockedPanes.length > 0) {
|
|
83507
83607
|
log2("Rate limit cleared! Attempting to resume blocked panes", config2);
|
|
83508
83608
|
for (const pane of state.blockedPanes) {
|
|
83509
83609
|
if (state.resumedPaneIds.includes(pane.id)) {
|
package/bridge/mcp-server.cjs
CHANGED
|
@@ -32751,6 +32751,36 @@ function getStatePath(mode, root) {
|
|
|
32751
32751
|
}
|
|
32752
32752
|
return resolveStatePath(mode, root);
|
|
32753
32753
|
}
|
|
32754
|
+
function writeSessionCancelSignal(root, sessionId, mode) {
|
|
32755
|
+
const now = Date.now();
|
|
32756
|
+
const cancelSignalPath = resolveSessionStatePath("cancel-signal", sessionId, root);
|
|
32757
|
+
atomicWriteJsonSync(cancelSignalPath, {
|
|
32758
|
+
active: true,
|
|
32759
|
+
requested_at: new Date(now).toISOString(),
|
|
32760
|
+
expires_at: new Date(now + CANCEL_SIGNAL_TTL_MS).toISOString(),
|
|
32761
|
+
mode,
|
|
32762
|
+
source: "state_clear"
|
|
32763
|
+
});
|
|
32764
|
+
}
|
|
32765
|
+
function isSessionModeActive(mode, root, sessionId) {
|
|
32766
|
+
if (MODE_CONFIGS[mode]) {
|
|
32767
|
+
return isModeActive(mode, root, sessionId);
|
|
32768
|
+
}
|
|
32769
|
+
const statePath = resolveSessionStatePath(mode, sessionId, root);
|
|
32770
|
+
if (!(0, import_fs12.existsSync)(statePath)) {
|
|
32771
|
+
return false;
|
|
32772
|
+
}
|
|
32773
|
+
try {
|
|
32774
|
+
const state = JSON.parse((0, import_fs12.readFileSync)(statePath, "utf-8"));
|
|
32775
|
+
return state.active === true;
|
|
32776
|
+
} catch {
|
|
32777
|
+
return false;
|
|
32778
|
+
}
|
|
32779
|
+
}
|
|
32780
|
+
function findSingleOwningSessionForMode(mode, root, requesterSessionId) {
|
|
32781
|
+
const owningSessions = listSessionIds(root).filter((sid) => sid !== requesterSessionId && isSessionModeActive(mode, root, sid));
|
|
32782
|
+
return owningSessions.length === 1 ? owningSessions[0] : void 0;
|
|
32783
|
+
}
|
|
32754
32784
|
var stateReadTool = {
|
|
32755
32785
|
name: "state_read",
|
|
32756
32786
|
description: "Read the current state for a specific mode (ralph, ultrawork, autopilot, etc.). Returns the JSON state data or indicates if no state exists.",
|
|
@@ -33008,16 +33038,10 @@ var stateClearTool = {
|
|
|
33008
33038
|
const sessionId = session_id;
|
|
33009
33039
|
if (sessionId) {
|
|
33010
33040
|
validateSessionId(sessionId);
|
|
33011
|
-
|
|
33012
|
-
const cancelSignalPath = resolveSessionStatePath("cancel-signal", sessionId, root);
|
|
33013
|
-
atomicWriteJsonSync(cancelSignalPath, {
|
|
33014
|
-
active: true,
|
|
33015
|
-
requested_at: new Date(now).toISOString(),
|
|
33016
|
-
expires_at: new Date(now + CANCEL_SIGNAL_TTL_MS).toISOString(),
|
|
33017
|
-
mode,
|
|
33018
|
-
source: "state_clear"
|
|
33019
|
-
});
|
|
33041
|
+
writeSessionCancelSignal(root, sessionId, mode);
|
|
33020
33042
|
if (MODE_CONFIGS[mode]) {
|
|
33043
|
+
const requesterStatePath = getStateFilePath(root, mode, sessionId);
|
|
33044
|
+
const hadRequesterState2 = (0, import_fs12.existsSync)(requesterStatePath);
|
|
33021
33045
|
const success2 = clearModeState(mode, root, sessionId);
|
|
33022
33046
|
let ghostCleaned2 = false;
|
|
33023
33047
|
try {
|
|
@@ -33032,25 +33056,35 @@ var stateClearTool = {
|
|
|
33032
33056
|
}
|
|
33033
33057
|
} catch {
|
|
33034
33058
|
}
|
|
33059
|
+
let ownerSessionId2;
|
|
33060
|
+
if (!hadRequesterState2 && !ghostCleaned2) {
|
|
33061
|
+
ownerSessionId2 = findSingleOwningSessionForMode(mode, root, sessionId);
|
|
33062
|
+
if (ownerSessionId2) {
|
|
33063
|
+
writeSessionCancelSignal(root, ownerSessionId2, mode);
|
|
33064
|
+
clearModeState(mode, root, ownerSessionId2);
|
|
33065
|
+
}
|
|
33066
|
+
}
|
|
33035
33067
|
const ghostNote2 = ghostCleaned2 ? " (ghost legacy file also removed)" : "";
|
|
33036
|
-
|
|
33068
|
+
const ownerNote2 = ownerSessionId2 ? ` (cleared owning session: ${ownerSessionId2})` : "";
|
|
33069
|
+
if (success2 || ownerSessionId2) {
|
|
33037
33070
|
return {
|
|
33038
33071
|
content: [{
|
|
33039
33072
|
type: "text",
|
|
33040
|
-
text: `Successfully cleared state for mode: ${mode} in session: ${sessionId}${ghostNote2}`
|
|
33073
|
+
text: `Successfully cleared state for mode: ${mode} in session: ${sessionId}${ghostNote2}${ownerNote2}`
|
|
33041
33074
|
}]
|
|
33042
33075
|
};
|
|
33043
33076
|
} else {
|
|
33044
33077
|
return {
|
|
33045
33078
|
content: [{
|
|
33046
33079
|
type: "text",
|
|
33047
|
-
text: `Warning: Some files could not be removed for mode: ${mode} in session: ${sessionId}${ghostNote2}`
|
|
33080
|
+
text: `Warning: Some files could not be removed for mode: ${mode} in session: ${sessionId}${ghostNote2}${ownerNote2}`
|
|
33048
33081
|
}]
|
|
33049
33082
|
};
|
|
33050
33083
|
}
|
|
33051
33084
|
}
|
|
33052
33085
|
const statePath = resolveSessionStatePath(mode, sessionId, root);
|
|
33053
|
-
|
|
33086
|
+
const hadRequesterState = (0, import_fs12.existsSync)(statePath);
|
|
33087
|
+
if (hadRequesterState) {
|
|
33054
33088
|
(0, import_fs12.unlinkSync)(statePath);
|
|
33055
33089
|
}
|
|
33056
33090
|
let ghostCleaned = false;
|
|
@@ -33066,11 +33100,26 @@ var stateClearTool = {
|
|
|
33066
33100
|
}
|
|
33067
33101
|
} catch {
|
|
33068
33102
|
}
|
|
33103
|
+
let ownerSessionId;
|
|
33104
|
+
if (!hadRequesterState && !ghostCleaned) {
|
|
33105
|
+
ownerSessionId = findSingleOwningSessionForMode(mode, root, sessionId);
|
|
33106
|
+
if (ownerSessionId) {
|
|
33107
|
+
writeSessionCancelSignal(root, ownerSessionId, mode);
|
|
33108
|
+
const ownerStatePath = resolveSessionStatePath(mode, ownerSessionId, root);
|
|
33109
|
+
if ((0, import_fs12.existsSync)(ownerStatePath)) {
|
|
33110
|
+
try {
|
|
33111
|
+
(0, import_fs12.unlinkSync)(ownerStatePath);
|
|
33112
|
+
} catch {
|
|
33113
|
+
}
|
|
33114
|
+
}
|
|
33115
|
+
}
|
|
33116
|
+
}
|
|
33069
33117
|
const ghostNote = ghostCleaned ? " (ghost legacy file also removed)" : "";
|
|
33118
|
+
const ownerNote = ownerSessionId ? ` (cleared owning session: ${ownerSessionId})` : "";
|
|
33070
33119
|
return {
|
|
33071
33120
|
content: [{
|
|
33072
33121
|
type: "text",
|
|
33073
|
-
text: `Successfully cleared state for mode: ${mode} in session: ${sessionId}${ghostNote}`
|
|
33122
|
+
text: `Successfully cleared state for mode: ${mode} in session: ${sessionId}${ghostNote}${ownerNote}`
|
|
33074
33123
|
}]
|
|
33075
33124
|
};
|
|
33076
33125
|
}
|
package/bridge/runtime-cli.cjs
CHANGED
|
@@ -1647,6 +1647,22 @@ var CONTRACTS = {
|
|
|
1647
1647
|
parseOutput(rawOutput) {
|
|
1648
1648
|
return rawOutput.trim();
|
|
1649
1649
|
}
|
|
1650
|
+
},
|
|
1651
|
+
cursor: {
|
|
1652
|
+
agentType: "cursor",
|
|
1653
|
+
binary: "cursor-agent",
|
|
1654
|
+
installInstructions: "Install Cursor Agent CLI: see https://docs.cursor.com/cli",
|
|
1655
|
+
// cursor-agent runs as an interactive REPL — no exit-on-complete prompt mode.
|
|
1656
|
+
// Keep supportsPromptMode false so the verdict-file contract path
|
|
1657
|
+
// (CONTRACT_ROLES + shouldInjectContract) skips this provider; cursor
|
|
1658
|
+
// workers participate as executors only.
|
|
1659
|
+
supportsPromptMode: false,
|
|
1660
|
+
buildLaunchArgs(_model, extraFlags = []) {
|
|
1661
|
+
return [...extraFlags];
|
|
1662
|
+
},
|
|
1663
|
+
parseOutput(rawOutput) {
|
|
1664
|
+
return rawOutput.trim();
|
|
1665
|
+
}
|
|
1650
1666
|
}
|
|
1651
1667
|
};
|
|
1652
1668
|
function getContract(agentType) {
|
|
@@ -1931,6 +1947,13 @@ function agentTypeGuidance(agentType) {
|
|
|
1931
1947
|
"- Keep commit-sized changes scoped to assigned files only; no broad refactors.",
|
|
1932
1948
|
`- CRITICAL: You MUST run \`${claimTaskCommand}\` before starting work and \`${transitionTaskStatusCommand}\` when done. Do not exit without transitioning the task status.`
|
|
1933
1949
|
].join("\n");
|
|
1950
|
+
case "cursor":
|
|
1951
|
+
return [
|
|
1952
|
+
"### Agent-Type Guidance (cursor)",
|
|
1953
|
+
"- You are an interactive REPL (cursor-agent), not a one-shot CLI. Stay in the session; the leader will continue to send prompts via mailbox.",
|
|
1954
|
+
`- You MUST run \`${claimTaskCommand}\` before starting work and \`${transitionTaskStatusCommand}\` when done. Then keep waiting for the next mailbox message; do NOT type \`/exit\` unless the leader sends an explicit shutdown.`,
|
|
1955
|
+
"- Reviewer/critic/security-review roles are NOT supported for cursor workers \u2014 those require a verdict-file write-and-exit which the REPL does not perform. Take only executor-style tasks."
|
|
1956
|
+
].join("\n");
|
|
1934
1957
|
case "claude":
|
|
1935
1958
|
default:
|
|
1936
1959
|
return [
|
|
@@ -5143,7 +5166,7 @@ var VALID_VERDICTS = /* @__PURE__ */ new Set(["approve", "revise", "reject"]);
|
|
|
5143
5166
|
var VALID_SEVERITIES = /* @__PURE__ */ new Set(["critical", "major", "minor", "nit"]);
|
|
5144
5167
|
function shouldInjectContract(role, provider) {
|
|
5145
5168
|
if (!role || !provider) return false;
|
|
5146
|
-
if (provider === "claude") return false;
|
|
5169
|
+
if (provider === "claude" || provider === "cursor") return false;
|
|
5147
5170
|
return CONTRACT_ROLES.has(role);
|
|
5148
5171
|
}
|
|
5149
5172
|
function renderCliWorkerOutputContract(role, output_file) {
|
package/bridge/team.js
CHANGED
|
@@ -2313,6 +2313,22 @@ var init_model_contract = __esm({
|
|
|
2313
2313
|
parseOutput(rawOutput) {
|
|
2314
2314
|
return rawOutput.trim();
|
|
2315
2315
|
}
|
|
2316
|
+
},
|
|
2317
|
+
cursor: {
|
|
2318
|
+
agentType: "cursor",
|
|
2319
|
+
binary: "cursor-agent",
|
|
2320
|
+
installInstructions: "Install Cursor Agent CLI: see https://docs.cursor.com/cli",
|
|
2321
|
+
// cursor-agent runs as an interactive REPL — no exit-on-complete prompt mode.
|
|
2322
|
+
// Keep supportsPromptMode false so the verdict-file contract path
|
|
2323
|
+
// (CONTRACT_ROLES + shouldInjectContract) skips this provider; cursor
|
|
2324
|
+
// workers participate as executors only.
|
|
2325
|
+
supportsPromptMode: false,
|
|
2326
|
+
buildLaunchArgs(_model, extraFlags = []) {
|
|
2327
|
+
return [...extraFlags];
|
|
2328
|
+
},
|
|
2329
|
+
parseOutput(rawOutput) {
|
|
2330
|
+
return rawOutput.trim();
|
|
2331
|
+
}
|
|
2316
2332
|
}
|
|
2317
2333
|
};
|
|
2318
2334
|
WORKER_MODEL_ENV_ALLOWLIST = [
|
|
@@ -2384,6 +2400,13 @@ function agentTypeGuidance(agentType) {
|
|
|
2384
2400
|
"- Keep commit-sized changes scoped to assigned files only; no broad refactors.",
|
|
2385
2401
|
`- CRITICAL: You MUST run \`${claimTaskCommand}\` before starting work and \`${transitionTaskStatusCommand}\` when done. Do not exit without transitioning the task status.`
|
|
2386
2402
|
].join("\n");
|
|
2403
|
+
case "cursor":
|
|
2404
|
+
return [
|
|
2405
|
+
"### Agent-Type Guidance (cursor)",
|
|
2406
|
+
"- You are an interactive REPL (cursor-agent), not a one-shot CLI. Stay in the session; the leader will continue to send prompts via mailbox.",
|
|
2407
|
+
`- You MUST run \`${claimTaskCommand}\` before starting work and \`${transitionTaskStatusCommand}\` when done. Then keep waiting for the next mailbox message; do NOT type \`/exit\` unless the leader sends an explicit shutdown.`,
|
|
2408
|
+
"- Reviewer/critic/security-review roles are NOT supported for cursor workers \u2014 those require a verdict-file write-and-exit which the REPL does not perform. Take only executor-style tasks."
|
|
2409
|
+
].join("\n");
|
|
2387
2410
|
case "claude":
|
|
2388
2411
|
default:
|
|
2389
2412
|
return [
|
|
@@ -4200,7 +4223,7 @@ var init_role_router = __esm({
|
|
|
4200
4223
|
// src/team/cli-worker-contract.ts
|
|
4201
4224
|
function shouldInjectContract(role, provider) {
|
|
4202
4225
|
if (!role || !provider) return false;
|
|
4203
|
-
if (provider === "claude") return false;
|
|
4226
|
+
if (provider === "claude" || provider === "cursor") return false;
|
|
4204
4227
|
return CONTRACT_ROLES.has(role);
|
|
4205
4228
|
}
|
|
4206
4229
|
function renderCliWorkerOutputContract(role, output_file) {
|
|
@@ -7040,7 +7063,7 @@ async function resumeTeam(teamName, cwd) {
|
|
|
7040
7063
|
init_monitor();
|
|
7041
7064
|
init_process_utils();
|
|
7042
7065
|
var JOB_ID_PATTERN = /^omc-[a-z0-9]{1,16}$/;
|
|
7043
|
-
var VALID_CLI_AGENT_TYPES = /* @__PURE__ */ new Set(["claude", "copilot", "codex", "gemini"]);
|
|
7066
|
+
var VALID_CLI_AGENT_TYPES = /* @__PURE__ */ new Set(["claude", "copilot", "codex", "gemini", "cursor"]);
|
|
7044
7067
|
var SUBCOMMANDS = /* @__PURE__ */ new Set(["start", "status", "wait", "cleanup", "resume", "shutdown", "api", "help", "--help", "-h"]);
|
|
7045
7068
|
var SUPPORTED_API_OPERATIONS = /* @__PURE__ */ new Set([
|
|
7046
7069
|
"send-message",
|
|
@@ -7466,7 +7489,7 @@ async function teamCleanupCommand(jobId, cleanupOptions = {}, options = {}) {
|
|
|
7466
7489
|
}
|
|
7467
7490
|
var TEAM_USAGE = `
|
|
7468
7491
|
Usage:
|
|
7469
|
-
omcp team start --agent <claude|copilot|codex|gemini>[,<agent>...] --task "<task>" [--count N] [--name TEAM] [--cwd DIR] [--new-window] [--json]
|
|
7492
|
+
omcp team start --agent <claude|copilot|codex|gemini|cursor>[,<agent>...] --task "<task>" [--count N] [--name TEAM] [--cwd DIR] [--new-window] [--json]
|
|
7470
7493
|
omcp team status <job_id|team_name> [--json] [--cwd DIR]
|
|
7471
7494
|
omcp team wait <job_id> [--timeout-ms MS] [--json]
|
|
7472
7495
|
omcp team cleanup <job_id> [--grace-ms MS] [--json]
|
|
@@ -5,7 +5,7 @@ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
|
5
5
|
import { mkdirSync, writeFileSync, existsSync, rmSync } from 'fs';
|
|
6
6
|
import { join } from 'path';
|
|
7
7
|
import { tmpdir } from 'os';
|
|
8
|
-
import { readDaemonState, isDaemonRunning, getDaemonStatus, formatDaemonState, } from '../../features/rate-limit-wait/daemon.js';
|
|
8
|
+
import { readDaemonState, isDaemonRunning, getDaemonStatus, formatDaemonState, shouldResumeBlockedPanesOnStatusChange, } from '../../features/rate-limit-wait/daemon.js';
|
|
9
9
|
describe('daemon', () => {
|
|
10
10
|
const testDir = join(tmpdir(), 'omc-daemon-test-' + Date.now());
|
|
11
11
|
const testConfig = {
|
|
@@ -262,6 +262,54 @@ describe('daemon', () => {
|
|
|
262
262
|
expect(output).toContain('Daemon not running');
|
|
263
263
|
});
|
|
264
264
|
});
|
|
265
|
+
describe('resume guard', () => {
|
|
266
|
+
function createRateLimitStatus(overrides = {}) {
|
|
267
|
+
return {
|
|
268
|
+
fiveHourLimited: false,
|
|
269
|
+
weeklyLimited: false,
|
|
270
|
+
monthlyLimited: false,
|
|
271
|
+
isLimited: false,
|
|
272
|
+
fiveHourResetsAt: null,
|
|
273
|
+
weeklyResetsAt: null,
|
|
274
|
+
monthlyResetsAt: null,
|
|
275
|
+
nextResetAt: null,
|
|
276
|
+
timeUntilResetMs: null,
|
|
277
|
+
lastCheckedAt: new Date('2026-04-20T00:00:00.000Z'),
|
|
278
|
+
...overrides,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
it('does not resume blocked panes when a limited state becomes degraded stale-cache 429', () => {
|
|
282
|
+
const previousStatus = createRateLimitStatus({
|
|
283
|
+
fiveHourLimited: true,
|
|
284
|
+
isLimited: true,
|
|
285
|
+
fiveHourPercent: 100,
|
|
286
|
+
fiveHourResetsAt: new Date('2026-04-20T01:00:00.000Z'),
|
|
287
|
+
nextResetAt: new Date('2026-04-20T01:00:00.000Z'),
|
|
288
|
+
timeUntilResetMs: 3_600_000,
|
|
289
|
+
});
|
|
290
|
+
const degradedStatus = createRateLimitStatus({
|
|
291
|
+
fiveHourPercent: 83,
|
|
292
|
+
weeklyPercent: 57,
|
|
293
|
+
apiErrorReason: 'rate_limited',
|
|
294
|
+
usingStaleData: true,
|
|
295
|
+
});
|
|
296
|
+
expect(shouldResumeBlockedPanesOnStatusChange(previousStatus, degradedStatus)).toBe(false);
|
|
297
|
+
});
|
|
298
|
+
it('resumes blocked panes when a limited state becomes a clean non-limited status', () => {
|
|
299
|
+
const previousStatus = createRateLimitStatus({
|
|
300
|
+
weeklyLimited: true,
|
|
301
|
+
isLimited: true,
|
|
302
|
+
weeklyPercent: 100,
|
|
303
|
+
weeklyResetsAt: new Date('2026-04-21T00:00:00.000Z'),
|
|
304
|
+
nextResetAt: new Date('2026-04-21T00:00:00.000Z'),
|
|
305
|
+
timeUntilResetMs: 86_400_000,
|
|
306
|
+
});
|
|
307
|
+
const clearedStatus = createRateLimitStatus({
|
|
308
|
+
weeklyPercent: 42,
|
|
309
|
+
});
|
|
310
|
+
expect(shouldResumeBlockedPanesOnStatusChange(previousStatus, clearedStatus)).toBe(true);
|
|
311
|
+
});
|
|
312
|
+
});
|
|
265
313
|
describe('security: file permissions', () => {
|
|
266
314
|
it('should create state file with restrictive permissions', () => {
|
|
267
315
|
const testState = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/daemon.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"daemon.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/daemon.test.ts"],"names":[],"mappings":"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"}
|