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.
Files changed (64) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/bridge/cli.cjs +121 -21
  4. package/bridge/mcp-server.cjs +63 -14
  5. package/bridge/runtime-cli.cjs +24 -1
  6. package/bridge/team.js +26 -3
  7. package/dist/__tests__/rate-limit-wait/daemon.test.js +49 -1
  8. package/dist/__tests__/rate-limit-wait/daemon.test.js.map +1 -1
  9. package/dist/__tests__/rate-limit-wait/integration.test.js +39 -1
  10. package/dist/__tests__/rate-limit-wait/integration.test.js.map +1 -1
  11. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js +42 -1
  12. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js.map +1 -1
  13. package/dist/__tests__/runtime-guidance-plan-ralph.test.js +4 -0
  14. package/dist/__tests__/runtime-guidance-plan-ralph.test.js.map +1 -1
  15. package/dist/cli/team.js +2 -2
  16. package/dist/cli/team.js.map +1 -1
  17. package/dist/features/rate-limit-wait/daemon.d.ts +7 -1
  18. package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -1
  19. package/dist/features/rate-limit-wait/daemon.js +13 -6
  20. package/dist/features/rate-limit-wait/daemon.js.map +1 -1
  21. package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts +4 -2
  22. package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts.map +1 -1
  23. package/dist/features/rate-limit-wait/rate-limit-monitor.js +5 -3
  24. package/dist/features/rate-limit-wait/rate-limit-monitor.js.map +1 -1
  25. package/dist/hooks/autopilot/__tests__/cancel.test.js +12 -5
  26. package/dist/hooks/autopilot/__tests__/cancel.test.js.map +1 -1
  27. package/dist/hooks/autopilot/__tests__/transitions.test.js +10 -3
  28. package/dist/hooks/autopilot/__tests__/transitions.test.js.map +1 -1
  29. package/dist/hooks/autopilot/__tests__/validation.test.js +12 -3
  30. package/dist/hooks/autopilot/__tests__/validation.test.js.map +1 -1
  31. package/dist/hooks/persistent-mode/__tests__/cancel-race.test.js +30 -0
  32. package/dist/hooks/persistent-mode/__tests__/cancel-race.test.js.map +1 -1
  33. package/dist/installer/mcp-registry.d.ts.map +1 -1
  34. package/dist/installer/mcp-registry.js +20 -1
  35. package/dist/installer/mcp-registry.js.map +1 -1
  36. package/dist/team/capabilities.d.ts.map +1 -1
  37. package/dist/team/capabilities.js +1 -0
  38. package/dist/team/capabilities.js.map +1 -1
  39. package/dist/team/cli-detection.d.ts.map +1 -1
  40. package/dist/team/cli-detection.js +1 -0
  41. package/dist/team/cli-detection.js.map +1 -1
  42. package/dist/team/cli-worker-contract.d.ts.map +1 -1
  43. package/dist/team/cli-worker-contract.js +8 -1
  44. package/dist/team/cli-worker-contract.js.map +1 -1
  45. package/dist/team/model-contract.d.ts +1 -1
  46. package/dist/team/model-contract.d.ts.map +1 -1
  47. package/dist/team/model-contract.js +18 -0
  48. package/dist/team/model-contract.js.map +1 -1
  49. package/dist/team/types.d.ts +2 -2
  50. package/dist/team/types.d.ts.map +1 -1
  51. package/dist/team/unified-team.d.ts.map +1 -1
  52. package/dist/team/unified-team.js +2 -0
  53. package/dist/team/unified-team.js.map +1 -1
  54. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  55. package/dist/team/worker-bootstrap.js +7 -0
  56. package/dist/team/worker-bootstrap.js.map +1 -1
  57. package/dist/tools/__tests__/state-tools.test.js +20 -9
  58. package/dist/tools/__tests__/state-tools.test.js.map +1 -1
  59. package/dist/tools/state-tools.d.ts.map +1 -1
  60. package/dist/tools/state-tools.js +79 -14
  61. package/dist/tools/state-tools.js.map +1 -1
  62. package/docs/copilot-instructions.md +1 -1
  63. package/package.json +1 -1
  64. 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.12.0",
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.12.0"
30
+ "version": "4.13.0"
31
31
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-copilot",
3
- "version": "4.12.0",
3
+ "version": "4.13.0",
4
4
  "description": "Multi-agent orchestration system for Copilot CLI",
5
5
  "author": {
6
6
  "name": "Robin Norberg and oh-my-copilot contributors"
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 managedBlock = renderManagedCodexMcpBlock(registry2);
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
- const now = Date.now();
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
- if (success2) {
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
- if ((0, import_fs17.existsSync)(statePath)) {
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 && (status.isLimited || isRateLimitStatusDegraded(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
- const scanReason = rateLimitStatus?.isLimited ? "Rate limited - scanning for blocked panes" : "Usage API degraded (429/stale cache) - scanning for blocked panes";
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 (wasLimited && !isNowLimited && state.blockedPanes.length > 0) {
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)) {
@@ -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
- const now = Date.now();
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
- if (success2) {
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
- if ((0, import_fs12.existsSync)(statePath)) {
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
  }
@@ -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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"}