oh-my-codex 0.15.2 → 0.15.3

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 (166) hide show
  1. package/Cargo.lock +5 -5
  2. package/Cargo.toml +1 -1
  3. package/dist/agents/__tests__/native-config.test.js +33 -0
  4. package/dist/agents/__tests__/native-config.test.js.map +1 -1
  5. package/dist/catalog/__tests__/plugin-bundle-ssot.test.js +9 -1
  6. package/dist/catalog/__tests__/plugin-bundle-ssot.test.js.map +1 -1
  7. package/dist/cli/__tests__/doctor-context-window-warning.test.d.ts +2 -0
  8. package/dist/cli/__tests__/doctor-context-window-warning.test.d.ts.map +1 -0
  9. package/dist/cli/__tests__/doctor-context-window-warning.test.js +122 -0
  10. package/dist/cli/__tests__/doctor-context-window-warning.test.js.map +1 -0
  11. package/dist/cli/__tests__/doctor-warning-copy.test.js +2 -2
  12. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  13. package/dist/cli/__tests__/exec.test.js +1 -0
  14. package/dist/cli/__tests__/exec.test.js.map +1 -1
  15. package/dist/cli/__tests__/explore.test.js +40 -17
  16. package/dist/cli/__tests__/explore.test.js.map +1 -1
  17. package/dist/cli/__tests__/index.test.js +141 -8
  18. package/dist/cli/__tests__/index.test.js.map +1 -1
  19. package/dist/cli/__tests__/mcp-serve.test.js +27 -1
  20. package/dist/cli/__tests__/mcp-serve.test.js.map +1 -1
  21. package/dist/cli/__tests__/ralph.test.js +59 -1
  22. package/dist/cli/__tests__/ralph.test.js.map +1 -1
  23. package/dist/cli/__tests__/setup-scope.test.js +2 -1
  24. package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
  25. package/dist/cli/__tests__/team.test.js +55 -10
  26. package/dist/cli/__tests__/team.test.js.map +1 -1
  27. package/dist/cli/doctor.d.ts.map +1 -1
  28. package/dist/cli/doctor.js +46 -3
  29. package/dist/cli/doctor.js.map +1 -1
  30. package/dist/cli/index.d.ts +16 -1
  31. package/dist/cli/index.d.ts.map +1 -1
  32. package/dist/cli/index.js +126 -15
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/cli/mcp-serve.d.ts +1 -0
  35. package/dist/cli/mcp-serve.d.ts.map +1 -1
  36. package/dist/cli/mcp-serve.js +8 -0
  37. package/dist/cli/mcp-serve.js.map +1 -1
  38. package/dist/cli/ralph.d.ts +2 -0
  39. package/dist/cli/ralph.d.ts.map +1 -1
  40. package/dist/cli/ralph.js +17 -1
  41. package/dist/cli/ralph.js.map +1 -1
  42. package/dist/cli/team.d.ts +4 -0
  43. package/dist/cli/team.d.ts.map +1 -1
  44. package/dist/cli/team.js +47 -22
  45. package/dist/cli/team.js.map +1 -1
  46. package/dist/config/__tests__/generator-idempotent.test.js +27 -5
  47. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  48. package/dist/config/generator.d.ts +11 -2
  49. package/dist/config/generator.d.ts.map +1 -1
  50. package/dist/config/generator.js +114 -58
  51. package/dist/config/generator.js.map +1 -1
  52. package/dist/hooks/__tests__/agents-overlay.test.js +59 -0
  53. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  54. package/dist/hooks/__tests__/anti-slop-workflow.test.js +109 -18
  55. package/dist/hooks/__tests__/anti-slop-workflow.test.js.map +1 -1
  56. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  57. package/dist/hooks/agents-overlay.js +21 -0
  58. package/dist/hooks/agents-overlay.js.map +1 -1
  59. package/dist/hud/__tests__/index.test.js +30 -14
  60. package/dist/hud/__tests__/index.test.js.map +1 -1
  61. package/dist/openclaw/__tests__/dispatcher.test.js +1 -1
  62. package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -1
  63. package/dist/pipeline/__tests__/stages.test.js +398 -14
  64. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  65. package/dist/pipeline/stages/team-exec.d.ts +8 -4
  66. package/dist/pipeline/stages/team-exec.d.ts.map +1 -1
  67. package/dist/pipeline/stages/team-exec.js +198 -13
  68. package/dist/pipeline/stages/team-exec.js.map +1 -1
  69. package/dist/planning/__tests__/artifacts.test.js +246 -1
  70. package/dist/planning/__tests__/artifacts.test.js.map +1 -1
  71. package/dist/planning/artifact-names.d.ts +13 -0
  72. package/dist/planning/artifact-names.d.ts.map +1 -0
  73. package/dist/planning/artifact-names.js +108 -0
  74. package/dist/planning/artifact-names.js.map +1 -0
  75. package/dist/planning/artifacts.d.ts +22 -1
  76. package/dist/planning/artifacts.d.ts.map +1 -1
  77. package/dist/planning/artifacts.js +165 -50
  78. package/dist/planning/artifacts.js.map +1 -1
  79. package/dist/ralph/__tests__/persistence.test.js +21 -1
  80. package/dist/ralph/__tests__/persistence.test.js.map +1 -1
  81. package/dist/ralph/persistence.d.ts.map +1 -1
  82. package/dist/ralph/persistence.js +6 -4
  83. package/dist/ralph/persistence.js.map +1 -1
  84. package/dist/scripts/__tests__/codex-native-hook.test.js +352 -2
  85. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  86. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  87. package/dist/scripts/codex-native-hook.js +85 -6
  88. package/dist/scripts/codex-native-hook.js.map +1 -1
  89. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  90. package/dist/scripts/codex-native-pre-post.js +123 -0
  91. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  92. package/dist/scripts/notify-hook/team-worker-posttooluse.js +1 -1
  93. package/dist/scripts/notify-hook/team-worker-posttooluse.js.map +1 -1
  94. package/dist/scripts/notify-hook.js +1 -1
  95. package/dist/scripts/notify-hook.js.map +1 -1
  96. package/dist/scripts/sync-plugin-mirror.d.ts +1 -0
  97. package/dist/scripts/sync-plugin-mirror.d.ts.map +1 -1
  98. package/dist/scripts/sync-plugin-mirror.js +8 -2
  99. package/dist/scripts/sync-plugin-mirror.js.map +1 -1
  100. package/dist/state/__tests__/skill-active.test.js +41 -0
  101. package/dist/state/__tests__/skill-active.test.js.map +1 -1
  102. package/dist/team/__tests__/api-interop.test.js +220 -0
  103. package/dist/team/__tests__/api-interop.test.js.map +1 -1
  104. package/dist/team/__tests__/model-contract.test.js +40 -9
  105. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  106. package/dist/team/__tests__/repo-aware-decomposition.test.js +41 -0
  107. package/dist/team/__tests__/repo-aware-decomposition.test.js.map +1 -1
  108. package/dist/team/__tests__/runtime-cli.test.js +24 -0
  109. package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
  110. package/dist/team/__tests__/runtime.test.js +446 -67
  111. package/dist/team/__tests__/runtime.test.js.map +1 -1
  112. package/dist/team/__tests__/state.test.js +13 -0
  113. package/dist/team/__tests__/state.test.js.map +1 -1
  114. package/dist/team/__tests__/team-identity.test.d.ts +2 -0
  115. package/dist/team/__tests__/team-identity.test.d.ts.map +1 -0
  116. package/dist/team/__tests__/team-identity.test.js +166 -0
  117. package/dist/team/__tests__/team-identity.test.js.map +1 -0
  118. package/dist/team/__tests__/tmux-session.test.js +55 -1
  119. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  120. package/dist/team/__tests__/worker-bootstrap.test.js +12 -0
  121. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  122. package/dist/team/api-interop.d.ts +1 -0
  123. package/dist/team/api-interop.d.ts.map +1 -1
  124. package/dist/team/api-interop.js +159 -129
  125. package/dist/team/api-interop.js.map +1 -1
  126. package/dist/team/delivery-log.d.ts +1 -1
  127. package/dist/team/delivery-log.d.ts.map +1 -1
  128. package/dist/team/delivery-log.js.map +1 -1
  129. package/dist/team/repo-aware-decomposition.d.ts +3 -0
  130. package/dist/team/repo-aware-decomposition.d.ts.map +1 -1
  131. package/dist/team/repo-aware-decomposition.js +2 -0
  132. package/dist/team/repo-aware-decomposition.js.map +1 -1
  133. package/dist/team/runtime-cli.d.ts +32 -2
  134. package/dist/team/runtime-cli.d.ts.map +1 -1
  135. package/dist/team/runtime-cli.js +78 -26
  136. package/dist/team/runtime-cli.js.map +1 -1
  137. package/dist/team/runtime.d.ts +1 -1
  138. package/dist/team/runtime.d.ts.map +1 -1
  139. package/dist/team/runtime.js +338 -35
  140. package/dist/team/runtime.js.map +1 -1
  141. package/dist/team/state.d.ts +9 -0
  142. package/dist/team/state.d.ts.map +1 -1
  143. package/dist/team/state.js +21 -0
  144. package/dist/team/state.js.map +1 -1
  145. package/dist/team/team-identity.d.ts +26 -0
  146. package/dist/team/team-identity.d.ts.map +1 -0
  147. package/dist/team/team-identity.js +169 -0
  148. package/dist/team/team-identity.js.map +1 -0
  149. package/dist/team/tmux-session.d.ts +18 -0
  150. package/dist/team/tmux-session.d.ts.map +1 -1
  151. package/dist/team/tmux-session.js +61 -1
  152. package/dist/team/tmux-session.js.map +1 -1
  153. package/dist/team/worker-bootstrap.d.ts +2 -0
  154. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  155. package/dist/team/worker-bootstrap.js +10 -1
  156. package/dist/team/worker-bootstrap.js.map +1 -1
  157. package/package.json +1 -1
  158. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  159. package/plugins/oh-my-codex/skills/ai-slop-cleaner/SKILL.md +30 -5
  160. package/skills/ai-slop-cleaner/SKILL.md +30 -5
  161. package/src/scripts/__tests__/codex-native-hook.test.ts +398 -2
  162. package/src/scripts/codex-native-hook.ts +115 -5
  163. package/src/scripts/codex-native-pre-post.ts +121 -0
  164. package/src/scripts/notify-hook/team-worker-posttooluse.ts +1 -1
  165. package/src/scripts/notify-hook.ts +1 -1
  166. package/src/scripts/sync-plugin-mirror.ts +11 -2
@@ -1 +1 @@
1
- {"version":3,"file":"skill-active.test.js","sourceRoot":"","sources":["../../../src/state/__tests__/skill-active.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-active.test.js","sourceRoot":"","sources":["../../../src/state/__tests__/skill-active.test.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,34 @@ async function setupTeam(name) {
21
21
  },
22
22
  };
23
23
  }
24
+ async function setupDisplayTeam(internalName, displayName, sessionId, workerCount = 2) {
25
+ const cwd = await mkdtemp(join(tmpdir(), `omx-interop-${internalName}-`));
26
+ const previousTeamStateRoot = process.env.OMX_TEAM_STATE_ROOT;
27
+ const previousSessionId = process.env.OMX_SESSION_ID;
28
+ delete process.env.OMX_TEAM_STATE_ROOT;
29
+ process.env.OMX_SESSION_ID = sessionId;
30
+ await initTeamState(internalName, 'display-name API test', 'executor', workerCount, cwd, undefined, {
31
+ OMX_SESSION_ID: sessionId,
32
+ }, {
33
+ display_name: displayName,
34
+ requested_name: displayName,
35
+ identity_source: 'env-session',
36
+ });
37
+ return {
38
+ cwd,
39
+ cleanup: async () => {
40
+ if (typeof previousTeamStateRoot === 'string')
41
+ process.env.OMX_TEAM_STATE_ROOT = previousTeamStateRoot;
42
+ else
43
+ delete process.env.OMX_TEAM_STATE_ROOT;
44
+ if (typeof previousSessionId === 'string')
45
+ process.env.OMX_SESSION_ID = previousSessionId;
46
+ else
47
+ delete process.env.OMX_SESSION_ID;
48
+ await rm(cwd, { recursive: true, force: true });
49
+ },
50
+ };
51
+ }
24
52
  async function withMailboxCompatHoleRuntime(cwd, fn) {
25
53
  const fakeBin = join(cwd, 'runtime-bin');
26
54
  const runtimePath = join(fakeBin, 'omx-runtime');
@@ -164,6 +192,35 @@ describe('validateCommonFields', () => {
164
192
  assert.match(result.error.message, /Invalid team_name/);
165
193
  }
166
194
  });
195
+ it('resolves a long display team_name before applying internal key validation', async () => {
196
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-api-long-display-'));
197
+ try {
198
+ await initTeamState('long-display-aaaaaaaa', 'test task', 'executor', 1, cwd, undefined, { OMX_SESSION_ID: 'session-long' }, {
199
+ display_name: 'this-is-a-long-display-name-that-exceeds-thirty-chars',
200
+ requested_name: 'this-is-a-long-display-name-that-exceeds-thirty-chars',
201
+ identity_source: 'env-session',
202
+ });
203
+ const previousSessionId = process.env.OMX_SESSION_ID;
204
+ try {
205
+ process.env.OMX_SESSION_ID = 'session-long';
206
+ const result = await executeTeamApiOperation('list-tasks', {
207
+ team_name: 'this-is-a-long-display-name-that-exceeds-thirty-chars',
208
+ }, cwd);
209
+ assert.equal(result.ok, true);
210
+ if (result.ok)
211
+ assert.equal(result.data.count, 0);
212
+ }
213
+ finally {
214
+ if (previousSessionId === undefined)
215
+ delete process.env.OMX_SESSION_ID;
216
+ else
217
+ process.env.OMX_SESSION_ID = previousSessionId;
218
+ }
219
+ }
220
+ finally {
221
+ await rm(cwd, { recursive: true, force: true });
222
+ }
223
+ });
167
224
  it('rejects invalid worker name pattern', async () => {
168
225
  const { cwd, cleanup } = await setupTeam('validate-worker');
169
226
  try {
@@ -704,6 +761,53 @@ describe('executeTeamApiOperation: list-tasks', () => {
704
761
  await rm(cwdB, { recursive: true, force: true });
705
762
  }
706
763
  });
764
+ it('resolves display team names from OMX_TEAM_STATE_ROOT when API calls run outside the leader cwd', async () => {
765
+ const { cwd: leaderCwd, cleanup } = await setupDisplayTeam('api-root-display-11111111', 'api-root-display', 'session-api-root-display');
766
+ const workerCwd = await mkdtemp(join(tmpdir(), 'omx-interop-api-root-worker-'));
767
+ try {
768
+ process.env.OMX_TEAM_STATE_ROOT = join(leaderCwd, '.omx', 'state');
769
+ await createTask('api-root-display-11111111', { subject: 'From shared root', description: 'D', status: 'pending' }, leaderCwd);
770
+ const event = await appendTeamEvent('api-root-display-11111111', {
771
+ type: 'task_completed',
772
+ worker: 'worker-1',
773
+ task_id: '1',
774
+ }, leaderCwd);
775
+ await writeMonitorSnapshot('api-root-display-11111111', {
776
+ taskStatusById: { '1': 'pending' },
777
+ workerAliveByName: { 'worker-1': true, 'worker-2': true },
778
+ workerStateByName: { 'worker-1': 'idle', 'worker-2': 'working' },
779
+ workerTurnCountByName: { 'worker-1': 1, 'worker-2': 1 },
780
+ workerTaskIdByName: { 'worker-1': '1', 'worker-2': '1' },
781
+ mailboxNotifiedByMessageId: {},
782
+ completedEventTaskIds: {},
783
+ }, leaderCwd);
784
+ const listResult = await executeTeamApiOperation('list-tasks', { team_name: 'api-root-display' }, workerCwd);
785
+ assert.equal(listResult.ok, true);
786
+ if (!listResult.ok)
787
+ throw new Error('expected list-tasks to succeed');
788
+ assert.equal(listResult.data.count, 1);
789
+ assert.equal(listResult.data.tasks[0]?.subject, 'From shared root');
790
+ const eventsResult = await executeTeamApiOperation('read-events', {
791
+ team_name: 'api-root-display',
792
+ type: 'task_completed',
793
+ }, workerCwd);
794
+ assert.equal(eventsResult.ok, true);
795
+ if (!eventsResult.ok)
796
+ throw new Error('expected read-events to succeed');
797
+ assert.equal(eventsResult.data.count, 1);
798
+ assert.equal(eventsResult.data.events[0]?.event_id, event.event_id);
799
+ const idleResult = await executeTeamApiOperation('read-idle-state', { team_name: 'api-root-display' }, workerCwd);
800
+ assert.equal(idleResult.ok, true);
801
+ if (!idleResult.ok)
802
+ throw new Error('expected read-idle-state to succeed');
803
+ assert.equal(idleResult.data.team_name, 'api-root-display-11111111');
804
+ assert.deepEqual(idleResult.data.idle_workers, ['worker-1']);
805
+ }
806
+ finally {
807
+ await rm(workerCwd, { recursive: true, force: true });
808
+ await cleanup();
809
+ }
810
+ });
707
811
  it('prefers OMX_TEAM_STATE_ROOT over manifest metadata when resolving the team working directory', async () => {
708
812
  const teamName = 'list-tsk-env-root';
709
813
  const cwdA = await mkdtemp(join(tmpdir(), 'omx-interop-env-a-'));
@@ -1275,6 +1379,32 @@ describe('executeTeamApiOperation: read-events', () => {
1275
1379
  await cleanup();
1276
1380
  }
1277
1381
  });
1382
+ it('resolves display team names before reading events', async () => {
1383
+ const { cwd, cleanup } = await setupDisplayTeam('evt-display-11111111', 'evt-display', 'session-events-display');
1384
+ try {
1385
+ const event = await appendTeamEvent('evt-display-11111111', {
1386
+ type: 'task_completed',
1387
+ worker: 'worker-1',
1388
+ task_id: '1',
1389
+ }, cwd);
1390
+ const result = await executeTeamApiOperation('read-events', {
1391
+ team_name: 'evt-display',
1392
+ type: 'task_completed',
1393
+ }, cwd);
1394
+ assert.equal(result.ok, true);
1395
+ if (result.ok) {
1396
+ assert.equal(result.data.count, 1);
1397
+ assert.equal(result.data.cursor, event.event_id);
1398
+ const events = result.data.events;
1399
+ assert.equal(events[0]?.event_id, event.event_id);
1400
+ assert.equal(events[0]?.type, 'task_completed');
1401
+ assert.equal(events[0]?.worker, 'worker-1');
1402
+ }
1403
+ }
1404
+ finally {
1405
+ await cleanup();
1406
+ }
1407
+ });
1278
1408
  it('rejects invalid event filters', async () => {
1279
1409
  const result = await executeTeamApiOperation('read-events', {
1280
1410
  team_name: 'evt-read-invalid',
@@ -1339,6 +1469,36 @@ describe('executeTeamApiOperation: await-event', () => {
1339
1469
  assert.match(result.error.message, /timeout_ms must be a non-negative integer/);
1340
1470
  }
1341
1471
  });
1472
+ it('resolves display team names before awaiting events', async () => {
1473
+ const { cwd, cleanup } = await setupDisplayTeam('evt-await-display-111111', 'evt-await-display', 'session-await-display');
1474
+ try {
1475
+ const waitPromise = executeTeamApiOperation('await-event', {
1476
+ team_name: 'evt-await-display',
1477
+ type: 'task_completed',
1478
+ timeout_ms: 500,
1479
+ poll_ms: 25,
1480
+ }, cwd);
1481
+ setTimeout(() => {
1482
+ void appendTeamEvent('evt-await-display-111111', {
1483
+ type: 'task_completed',
1484
+ worker: 'worker-1',
1485
+ task_id: '1',
1486
+ }, cwd);
1487
+ }, 25);
1488
+ const result = await waitPromise;
1489
+ assert.equal(result.ok, true);
1490
+ if (result.ok) {
1491
+ assert.equal(result.data.status, 'event');
1492
+ const event = result.data.event;
1493
+ assert.equal(event?.type, 'task_completed');
1494
+ assert.equal(event?.worker, 'worker-1');
1495
+ assert.equal(event?.task_id, '1');
1496
+ }
1497
+ }
1498
+ finally {
1499
+ await cleanup();
1500
+ }
1501
+ });
1342
1502
  });
1343
1503
  // ─── read-idle-state ────────────────────────────────────────────────────────
1344
1504
  describe('executeTeamApiOperation: read-idle-state', () => {
@@ -1389,6 +1549,32 @@ describe('executeTeamApiOperation: read-idle-state', () => {
1389
1549
  await cleanup();
1390
1550
  }
1391
1551
  });
1552
+ it('resolves display team names before reading idle state', async () => {
1553
+ const { cwd, cleanup } = await setupDisplayTeam('idle-display-11111111', 'idle-display', 'session-idle-display');
1554
+ try {
1555
+ await writeMonitorSnapshot('idle-display-11111111', {
1556
+ taskStatusById: {},
1557
+ workerAliveByName: { 'worker-1': true, 'worker-2': true },
1558
+ workerStateByName: { 'worker-1': 'idle', 'worker-2': 'idle' },
1559
+ workerTurnCountByName: { 'worker-1': 1, 'worker-2': 1 },
1560
+ workerTaskIdByName: { 'worker-1': '', 'worker-2': '' },
1561
+ mailboxNotifiedByMessageId: {},
1562
+ completedEventTaskIds: {},
1563
+ }, cwd);
1564
+ const result = await executeTeamApiOperation('read-idle-state', {
1565
+ team_name: 'idle-display',
1566
+ }, cwd);
1567
+ assert.equal(result.ok, true);
1568
+ if (result.ok) {
1569
+ assert.equal(result.data.team_name, 'idle-display-11111111');
1570
+ assert.equal(result.data.all_workers_idle, true);
1571
+ assert.deepEqual(result.data.idle_workers, ['worker-1', 'worker-2']);
1572
+ }
1573
+ }
1574
+ finally {
1575
+ await cleanup();
1576
+ }
1577
+ });
1392
1578
  });
1393
1579
  // ─── read-stall-state ───────────────────────────────────────────────────────
1394
1580
  describe('executeTeamApiOperation: read-stall-state', () => {
@@ -1479,6 +1665,24 @@ describe('executeTeamApiOperation: read-stall-state', () => {
1479
1665
  await cleanup();
1480
1666
  }
1481
1667
  });
1668
+ it('resolves display team names before reading stall state', async () => {
1669
+ const { cwd, cleanup } = await setupDisplayTeam('stall-display-1111111', 'stall-display', 'session-stall-display');
1670
+ try {
1671
+ await sendDirectMessage('stall-display-1111111', 'worker-1', 'leader-fixed', 'please review', cwd);
1672
+ const result = await executeTeamApiOperation('read-stall-state', {
1673
+ team_name: 'stall-display',
1674
+ }, cwd);
1675
+ assert.equal(result.ok, true);
1676
+ if (result.ok) {
1677
+ assert.equal(result.data.team_name, 'stall-display-1111111');
1678
+ assert.equal(result.data.leader_attention_pending, true);
1679
+ assert.equal(result.data.unread_leader_message_count, 1);
1680
+ }
1681
+ }
1682
+ finally {
1683
+ await cleanup();
1684
+ }
1685
+ });
1482
1686
  it('uses unread leader mailbox state even without recent nudge events', async () => {
1483
1687
  const { cwd, cleanup } = await setupTeam('stall-state-mailbox');
1484
1688
  try {
@@ -1841,6 +2045,22 @@ describe('executeTeamApiOperation: orphan-cleanup', () => {
1841
2045
  assert.equal(result.data.cleanup_mode, 'orphan_cleanup');
1842
2046
  }
1843
2047
  });
2048
+ it('resolves display team names before orphan cleanup', async () => {
2049
+ const { cwd, cleanup } = await setupDisplayTeam('orphan-display-111111', 'orphan-display', 'session-orphan-display');
2050
+ try {
2051
+ const result = await executeTeamApiOperation('orphan-cleanup', {
2052
+ team_name: 'orphan-display',
2053
+ }, cwd);
2054
+ assert.equal(result.ok, true);
2055
+ if (result.ok) {
2056
+ assert.equal(result.data.team_name, 'orphan-display-111111');
2057
+ assert.equal(result.data.cleanup_mode, 'orphan_cleanup');
2058
+ }
2059
+ }
2060
+ finally {
2061
+ await cleanup();
2062
+ }
2063
+ });
1844
2064
  it('returns error when team_name missing', async () => {
1845
2065
  const result = await executeTeamApiOperation('orphan-cleanup', {}, '/tmp');
1846
2066
  assert.equal(result.ok, false);