agent-tower 0.5.1-beta.2 → 0.5.2-beta.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 (133) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +4 -0
  3. package/dist/app.js.map +1 -1
  4. package/dist/core/container.d.ts +2 -0
  5. package/dist/core/container.d.ts.map +1 -1
  6. package/dist/core/container.js +8 -0
  7. package/dist/core/container.js.map +1 -1
  8. package/dist/executors/__tests__/codex.executor.test.js +348 -7
  9. package/dist/executors/__tests__/codex.executor.test.js.map +1 -1
  10. package/dist/executors/codex.executor.d.ts +18 -1
  11. package/dist/executors/codex.executor.d.ts.map +1 -1
  12. package/dist/executors/codex.executor.js +75 -7
  13. package/dist/executors/codex.executor.js.map +1 -1
  14. package/dist/routes/__tests__/tasks.test.js +37 -0
  15. package/dist/routes/__tests__/tasks.test.js.map +1 -1
  16. package/dist/routes/sessions.d.ts.map +1 -1
  17. package/dist/routes/sessions.js +12 -0
  18. package/dist/routes/sessions.js.map +1 -1
  19. package/dist/routes/tasks.js +2 -2
  20. package/dist/routes/tasks.js.map +1 -1
  21. package/dist/services/__tests__/project.service.test.d.ts +2 -0
  22. package/dist/services/__tests__/project.service.test.d.ts.map +1 -0
  23. package/dist/services/__tests__/project.service.test.js +62 -0
  24. package/dist/services/__tests__/project.service.test.js.map +1 -0
  25. package/dist/services/__tests__/session-manager.team-run.test.js +98 -0
  26. package/dist/services/__tests__/session-manager.team-run.test.js.map +1 -1
  27. package/dist/services/__tests__/task.service.test.js +352 -38
  28. package/dist/services/__tests__/task.service.test.js.map +1 -1
  29. package/dist/services/__tests__/team-reconciler.service.test.js +68 -0
  30. package/dist/services/__tests__/team-reconciler.service.test.js.map +1 -1
  31. package/dist/services/__tests__/team-run.service.test.js +47 -1
  32. package/dist/services/__tests__/team-run.service.test.js.map +1 -1
  33. package/dist/services/__tests__/team-scheduler.service.test.js +49 -0
  34. package/dist/services/__tests__/team-scheduler.service.test.js.map +1 -1
  35. package/dist/services/__tests__/workspace.service.test.js +102 -0
  36. package/dist/services/__tests__/workspace.service.test.js.map +1 -1
  37. package/dist/services/deleted-task-guard.d.ts +11 -0
  38. package/dist/services/deleted-task-guard.d.ts.map +1 -0
  39. package/dist/services/deleted-task-guard.js +10 -0
  40. package/dist/services/deleted-task-guard.js.map +1 -0
  41. package/dist/services/project.service.d.ts +1 -0
  42. package/dist/services/project.service.d.ts.map +1 -1
  43. package/dist/services/project.service.js +1 -1
  44. package/dist/services/project.service.js.map +1 -1
  45. package/dist/services/session-manager.d.ts +47 -1
  46. package/dist/services/session-manager.d.ts.map +1 -1
  47. package/dist/services/session-manager.js +124 -35
  48. package/dist/services/session-manager.js.map +1 -1
  49. package/dist/services/task-cleanup.service.d.ts +46 -0
  50. package/dist/services/task-cleanup.service.d.ts.map +1 -0
  51. package/dist/services/task-cleanup.service.js +202 -0
  52. package/dist/services/task-cleanup.service.js.map +1 -0
  53. package/dist/services/task.service.d.ts +15 -7
  54. package/dist/services/task.service.d.ts.map +1 -1
  55. package/dist/services/task.service.js +136 -63
  56. package/dist/services/task.service.js.map +1 -1
  57. package/dist/services/team-reconciler.service.d.ts.map +1 -1
  58. package/dist/services/team-reconciler.service.js +21 -1
  59. package/dist/services/team-reconciler.service.js.map +1 -1
  60. package/dist/services/team-run.service.d.ts.map +1 -1
  61. package/dist/services/team-run.service.js +15 -1
  62. package/dist/services/team-run.service.js.map +1 -1
  63. package/dist/services/team-scheduler.service.d.ts +3 -1
  64. package/dist/services/team-scheduler.service.d.ts.map +1 -1
  65. package/dist/services/team-scheduler.service.js +16 -0
  66. package/dist/services/team-scheduler.service.js.map +1 -1
  67. package/dist/services/workspace.service.d.ts +8 -0
  68. package/dist/services/workspace.service.d.ts.map +1 -1
  69. package/dist/services/workspace.service.js +70 -12
  70. package/dist/services/workspace.service.js.map +1 -1
  71. package/dist/web/assets/AgentDemoPage-CWcu7-P7.js +1 -0
  72. package/dist/web/assets/{DemoPage-DVt_gGQE.js → DemoPage-6hMli_sP.js} +3 -3
  73. package/dist/web/assets/GeneralSettingsPage-DUaFSgCY.js +1 -0
  74. package/dist/web/assets/MemberAvatar-S-eJAdWH.js +1 -0
  75. package/dist/web/assets/NotificationSettingsPage-Cl5x8F4G.js +1 -0
  76. package/dist/web/assets/ProfileSettingsPage-QFN9385l.js +3 -0
  77. package/dist/web/assets/ProjectKanbanPage-Dye8K5K1.js +89 -0
  78. package/dist/web/assets/ProjectSettingsPage-Do3Q1_r4.js +2 -0
  79. package/dist/web/assets/ProviderSettingsPage-DYOb33XQ.js +54 -0
  80. package/dist/web/assets/SettingsSection-D0Zzbbhp.js +1 -0
  81. package/dist/web/assets/TeamSettingsPage-Dq_DU1S8.js +1 -0
  82. package/dist/web/assets/arrow-left-D0xGRsQG.js +1 -0
  83. package/dist/web/assets/button-C-IDw2d8.js +1 -0
  84. package/dist/web/assets/check-KjbNKANU.js +1 -0
  85. package/dist/web/assets/chevron-down-C735lPj9.js +1 -0
  86. package/dist/web/assets/chevron-right-DfFiWY3R.js +1 -0
  87. package/dist/web/assets/{chevron-up-BkPAyFXE.js → chevron-up-DqGc0SsZ.js} +1 -1
  88. package/dist/web/assets/{circle-check-BmWaxH2e.js → circle-check-CSlvn06a.js} +1 -1
  89. package/dist/web/assets/{code-block-OCS4YCEC-U8rjjKMO.js → code-block-OCS4YCEC-BRT1Nrpy.js} +1 -1
  90. package/dist/web/assets/confirm-dialog-BtsxywSG.js +1 -0
  91. package/dist/web/assets/folder-picker-BuvfyaHB.js +1 -0
  92. package/dist/web/assets/index-BAz6UxmL.js +13 -0
  93. package/dist/web/assets/index-r8en4dlI.css +1 -0
  94. package/dist/web/assets/loader-circle-BLO3w-ze.js +1 -0
  95. package/dist/web/assets/{mermaid-NOHMQCX5-CfVlHQvQ.js → mermaid-NOHMQCX5-BLfGHrOE.js} +53 -53
  96. package/dist/web/assets/message-square-CIyucdyo.js +1 -0
  97. package/dist/web/assets/modal-D_VShm6D.js +1 -0
  98. package/dist/web/assets/{pencil-DvjVNKIw.js → pencil-CdJXJig-.js} +1 -1
  99. package/dist/web/assets/rotate-ccw-B42Jf1RW.js +1 -0
  100. package/dist/web/assets/{select-Xt2WadPY.js → select-kVmZCXo9.js} +1 -1
  101. package/dist/web/assets/{use-profiles-oZ63gfvO.js → use-profiles-Bvj_EW-7.js} +1 -1
  102. package/dist/web/assets/{use-providers-BVrApYJA.js → use-providers-CcFzAUyf.js} +1 -1
  103. package/dist/web/index.html +2 -2
  104. package/node_modules/@prisma/client/.prisma/client/edge.js +22 -5
  105. package/node_modules/@prisma/client/.prisma/client/index-browser.js +17 -0
  106. package/node_modules/@prisma/client/.prisma/client/index.d.ts +1534 -142
  107. package/node_modules/@prisma/client/.prisma/client/index.js +22 -5
  108. package/node_modules/@prisma/client/.prisma/client/package.json +1 -1
  109. package/node_modules/@prisma/client/.prisma/client/schema.prisma +23 -0
  110. package/node_modules/@prisma/client/.prisma/client/wasm.js +17 -0
  111. package/package.json +1 -1
  112. package/prisma/migrations/20260603000000_add_task_cleanup_jobs/migration.sql +21 -0
  113. package/prisma/schema.prisma +23 -0
  114. package/dist/web/assets/AgentDemoPage-CEWSskKz.js +0 -1
  115. package/dist/web/assets/GeneralSettingsPage-B7DbUzT6.js +0 -1
  116. package/dist/web/assets/MemberAvatar--HnaCo5f.js +0 -1
  117. package/dist/web/assets/NotificationSettingsPage-BklUEhB2.js +0 -1
  118. package/dist/web/assets/ProfileSettingsPage-Be7yYwbc.js +0 -3
  119. package/dist/web/assets/ProjectKanbanPage-BZR3HX3_.js +0 -90
  120. package/dist/web/assets/ProjectSettingsPage-Cj1h7G2-.js +0 -2
  121. package/dist/web/assets/ProviderSettingsPage-l244dDeI.js +0 -54
  122. package/dist/web/assets/TeamSettingsPage-CXp-7kqb.js +0 -1
  123. package/dist/web/assets/button-Cc_0rVdG.js +0 -1
  124. package/dist/web/assets/chevron-down-DAto5uxR.js +0 -1
  125. package/dist/web/assets/chevron-right-fcp8yUcf.js +0 -1
  126. package/dist/web/assets/confirm-dialog-D0R59Lv2.js +0 -1
  127. package/dist/web/assets/folder-picker-COVJdb7m.js +0 -1
  128. package/dist/web/assets/index-BCz-PlSG.js +0 -13
  129. package/dist/web/assets/index-BjIvVVfi.css +0 -1
  130. package/dist/web/assets/loader-circle-B0dxeUg4.js +0 -1
  131. package/dist/web/assets/modal-kzH1vcBa.js +0 -1
  132. package/dist/web/assets/upload-dtpXWuCN.js +0 -1
  133. package/dist/web/assets/utils-CkSf8FUe.js +0 -1
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAkBA,wBAAsB,QAAQ,qUAmE7B"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAmBA,wBAAsB,QAAQ,qUAuE7B"}
package/dist/app.js CHANGED
@@ -10,6 +10,7 @@ import { initializeSocket, closeSocket } from './socket/index.js';
10
10
  import { WorkspaceService } from './services/workspace.service.js';
11
11
  import { HibernationScheduler } from './services/hibernation-scheduler.js';
12
12
  import { TunnelService } from './services/tunnel.service.js';
13
+ import { getTaskCleanupService } from './core/container.js';
13
14
  import { tunnelAuthHook } from './middleware/tunnel-auth.js';
14
15
  let hibernationScheduler = null;
15
16
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
@@ -57,10 +58,13 @@ export async function buildApp() {
57
58
  // 启动空闲 workspace 自动休眠调度器
58
59
  hibernationScheduler = new HibernationScheduler();
59
60
  hibernationScheduler.start();
61
+ // 启动任务删除后台资源清理 worker
62
+ getTaskCleanupService().start();
60
63
  });
61
64
  // 服务器关闭时清理 Socket.IO、Tunnel 和 HibernationScheduler
62
65
  app.addHook('onClose', async () => {
63
66
  hibernationScheduler?.stop();
67
+ getTaskCleanupService().stop();
64
68
  TunnelService.stop();
65
69
  await closeSocket();
66
70
  });
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,12 @@ import { EventBus } from './event-bus.js';
2
2
  import { SessionManager } from '../services/session-manager.js';
3
3
  import { CommitMessageService } from '../services/commit-message.service.js';
4
4
  import { NotificationService } from '../services/notifications/index.js';
5
+ import { TaskCleanupService } from '../services/task-cleanup.service.js';
5
6
  import type { TerminalManager } from '../services/terminal-manager.js';
6
7
  export declare function getEventBus(): EventBus;
7
8
  export declare function getSessionManager(): SessionManager;
8
9
  export declare function getCommitMessageService(): CommitMessageService;
10
+ export declare function getTaskCleanupService(): TaskCleanupService;
9
11
  export declare function getTerminalManager(): Promise<TerminalManager>;
10
12
  export declare function getNotificationService(): NotificationService;
11
13
  //# sourceMappingURL=container.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/core/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAIzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAQvE,wBAAgB,WAAW,IAAI,QAAQ,CAKtC;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,CAK9D;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAMnE;AAED,wBAAgB,sBAAsB,IAAI,mBAAmB,CA6B5D"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/core/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAIzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AASvE,wBAAgB,WAAW,IAAI,QAAQ,CAKtC;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,CAK9D;AAED,wBAAgB,qBAAqB,IAAI,kBAAkB,CAK1D;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAMnE;AAED,wBAAgB,sBAAsB,IAAI,mBAAmB,CA6B5D"}
@@ -2,12 +2,14 @@ import { EventBus } from './event-bus.js';
2
2
  import { SessionManager } from '../services/session-manager.js';
3
3
  import { CommitMessageService } from '../services/commit-message.service.js';
4
4
  import { NotificationService } from '../services/notifications/index.js';
5
+ import { TaskCleanupService } from '../services/task-cleanup.service.js';
5
6
  import { prisma } from '../utils/index.js';
6
7
  let eventBus = null;
7
8
  let sessionManager = null;
8
9
  let terminalManager = null;
9
10
  let commitMessageService = null;
10
11
  let notificationService = null;
12
+ let taskCleanupService = null;
11
13
  export function getEventBus() {
12
14
  if (!eventBus) {
13
15
  eventBus = new EventBus();
@@ -26,6 +28,12 @@ export function getCommitMessageService() {
26
28
  }
27
29
  return commitMessageService;
28
30
  }
31
+ export function getTaskCleanupService() {
32
+ if (!taskCleanupService) {
33
+ taskCleanupService = new TaskCleanupService(getSessionManager());
34
+ }
35
+ return taskCleanupService;
36
+ }
29
37
  export async function getTerminalManager() {
30
38
  if (!terminalManager) {
31
39
  const { TerminalManager: TM } = await import('../services/terminal-manager.js');
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/core/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAK3C,IAAI,QAAQ,GAAoB,IAAI,CAAC;AACrC,IAAI,cAAc,GAA0B,IAAI,CAAC;AACjD,IAAI,eAAe,GAA2B,IAAI,CAAC;AACnD,IAAI,oBAAoB,GAAgC,IAAI,CAAC;AAC7D,IAAI,mBAAmB,GAA+B,IAAI,CAAC;AAE3D,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;QAChF,eAAe,GAAG,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAEhD,wCAAwC;QACxC,WAAW,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;YACtD,IAAI,MAAM,KAAK,WAAW;gBAAE,OAAO;YACnC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;gBACrB,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;gBACrB,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;aACzC,CAAC;iBACC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACb,mBAAoB,CAAC,MAAM,CAAC;oBAC1B,IAAI,EAAE,gBAAgB;oBACtB,KAAK,EAAE,aAAa,EAAE,SAAS;oBAC/B,IAAI,EAAE,EAAE,EAAE,SAAS;oBACnB,QAAQ,EAAE;wBACR,MAAM;wBACN,SAAS,EAAE,IAAI,EAAE,KAAK,IAAI,MAAM;wBAChC,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE;qBACjC;iBACF,CAAC,CAAC;YACL,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACb,OAAO,CAAC,KAAK,CAAC,8DAA8D,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/core/container.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,327 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { buildAgentTowerMcpEnvConfigOverrides } from '../codex.executor.js';
1
+ import { describe, expect, it, afterAll, afterEach } from 'vitest';
2
+ import * as fs from 'fs';
3
+ import * as os from 'os';
4
+ import * as path from 'path';
5
+ import { buildAgentTowerMcpEnvConfigOverrides, getCodexDeclaredMcpServerNames, queryCodexMcpServerNames, detectDeclaredMcpServers, } from '../codex.executor.js';
3
6
  import { ExecutionEnv } from '../execution-env.js';
4
- describe('CodexExecutor TeamRun MCP env overrides', () => {
5
- it('projects TeamRun identity env into Codex MCP server config overrides', () => {
7
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'codex-executor-test-'));
8
+ afterAll(() => { fs.rmSync(tmpDir, { recursive: true, force: true }); });
9
+ const savedCodexHome = process.env.CODEX_HOME;
10
+ afterEach(() => {
11
+ if (savedCodexHome === undefined)
12
+ delete process.env.CODEX_HOME;
13
+ else
14
+ process.env.CODEX_HOME = savedCodexHome;
15
+ });
16
+ /**
17
+ * Create a fake `codex` executable that writes argv to a file and outputs the given stdout.
18
+ * Returns the directory containing the fake binary (for prepending to PATH).
19
+ */
20
+ function createFakeCodex(name, stdout, exitCode = 0) {
21
+ const binDir = path.join(tmpDir, `fake-codex-${name}`);
22
+ fs.mkdirSync(binDir, { recursive: true });
23
+ const argsFile = path.join(binDir, 'captured-args.json');
24
+ const script = `#!/bin/sh
25
+ printf '%s\\n' "$@" > "${argsFile}"
26
+ cat <<'FAKE_EOF'
27
+ ${stdout}
28
+ FAKE_EOF
29
+ exit ${exitCode}
30
+ `;
31
+ fs.writeFileSync(path.join(binDir, 'codex'), script, { mode: 0o755 });
32
+ return binDir;
33
+ }
34
+ function readCapturedArgs(binDir) {
35
+ const argsFile = path.join(binDir, 'captured-args.json');
36
+ return fs.readFileSync(argsFile, 'utf-8').trim().split('\n');
37
+ }
38
+ // ─── getCodexDeclaredMcpServerNames (config.toml fallback) ───────
39
+ describe('getCodexDeclaredMcpServerNames', () => {
40
+ it('returns mcp_servers keys from a valid config.toml', () => {
41
+ const configPath = path.join(tmpDir, 'both.toml');
42
+ fs.writeFileSync(configPath, `
43
+ [mcp_servers.agent-tower]
44
+ command = "agent-tower-mcp"
45
+
46
+ [mcp_servers.agent-tower.env]
47
+ AGENT_TOWER_URL = "http://127.0.0.1:12580"
48
+
49
+ [mcp_servers.agent-tower-dev]
50
+ command = "npx"
51
+ args = ["tsx", "index.ts"]
52
+ `);
53
+ const result = getCodexDeclaredMcpServerNames(configPath);
54
+ expect(result).toEqual(new Set(['agent-tower', 'agent-tower-dev']));
55
+ });
56
+ it('returns only declared servers when agent-tower-dev is absent', () => {
57
+ const configPath = path.join(tmpDir, 'only-at.toml');
58
+ fs.writeFileSync(configPath, `
59
+ [mcp_servers.agent-tower]
60
+ command = "agent-tower-mcp"
61
+ `);
62
+ const result = getCodexDeclaredMcpServerNames(configPath);
63
+ expect(result).toEqual(new Set(['agent-tower']));
64
+ });
65
+ it('returns empty set when config file does not exist', () => {
66
+ const result = getCodexDeclaredMcpServerNames(path.join(tmpDir, 'nonexistent.toml'));
67
+ expect(result).toEqual(new Set());
68
+ });
69
+ it('returns empty set when config has no mcp_servers section', () => {
70
+ const configPath = path.join(tmpDir, 'no-mcp.toml');
71
+ fs.writeFileSync(configPath, `model = "gpt-5.5"\n`);
72
+ const result = getCodexDeclaredMcpServerNames(configPath);
73
+ expect(result).toEqual(new Set());
74
+ });
75
+ it('uses CODEX_HOME env to resolve config path when no explicit path given', () => {
76
+ const customDir = path.join(tmpDir, 'custom-codex-home');
77
+ fs.mkdirSync(customDir, { recursive: true });
78
+ fs.writeFileSync(path.join(customDir, 'config.toml'), `
79
+ [mcp_servers.agent-tower]
80
+ command = "agent-tower-mcp"
81
+ `);
82
+ process.env.CODEX_HOME = customDir;
83
+ const result = getCodexDeclaredMcpServerNames();
84
+ expect(result).toEqual(new Set(['agent-tower']));
85
+ });
86
+ it('returns empty set for invalid TOML content', () => {
87
+ const configPath = path.join(tmpDir, 'invalid.toml');
88
+ fs.writeFileSync(configPath, `[mcp_servers.agent-tower\nbroken`);
89
+ const result = getCodexDeclaredMcpServerNames(configPath);
90
+ expect(result).toEqual(new Set());
91
+ });
92
+ it('returns empty set when mcp_servers is not an object', () => {
93
+ const configPath = path.join(tmpDir, 'mcp-string.toml');
94
+ fs.writeFileSync(configPath, `mcp_servers = "not-an-object"\n`);
95
+ const result = getCodexDeclaredMcpServerNames(configPath);
96
+ expect(result).toEqual(new Set());
97
+ });
98
+ });
99
+ // ─── queryCodexMcpServerNames (CLI primary path, fake codex) ─────
100
+ describe('queryCodexMcpServerNames', () => {
101
+ it('parses valid JSON array and returns server names', () => {
102
+ const json = JSON.stringify([
103
+ { name: 'agent-tower', transport: 'stdio', enabled: true },
104
+ { name: 'agent-tower-dev', transport: 'stdio', enabled: true },
105
+ ]);
106
+ const binDir = createFakeCodex('valid', json);
107
+ const origPath = process.env.PATH;
108
+ process.env.PATH = `${binDir}:${origPath}`;
109
+ try {
110
+ const result = queryCodexMcpServerNames();
111
+ expect(result).toEqual(new Set(['agent-tower', 'agent-tower-dev']));
112
+ }
113
+ finally {
114
+ process.env.PATH = origPath;
115
+ }
116
+ });
117
+ it('places configOverrideArgs before subcommand (codex ...args mcp list --json)', () => {
118
+ const json = JSON.stringify([{ name: 'agent-tower', transport: 'stdio', enabled: true }]);
119
+ const binDir = createFakeCodex('arg-order', json);
120
+ const origPath = process.env.PATH;
121
+ process.env.PATH = `${binDir}:${origPath}`;
122
+ try {
123
+ queryCodexMcpServerNames(['--profile', 'myprofile', '-c', 'mcp_servers.x.command="y"']);
124
+ const args = readCapturedArgs(binDir);
125
+ expect(args).toEqual([
126
+ '--profile', 'myprofile',
127
+ '-c', 'mcp_servers.x.command="y"',
128
+ 'mcp', 'list', '--json',
129
+ ]);
130
+ }
131
+ finally {
132
+ process.env.PATH = origPath;
133
+ }
134
+ });
135
+ it('returns only agent-tower when CLI output has one server', () => {
136
+ const json = JSON.stringify([{ name: 'agent-tower', transport: 'stdio', enabled: true }]);
137
+ const binDir = createFakeCodex('one-server', json);
138
+ const origPath = process.env.PATH;
139
+ process.env.PATH = `${binDir}:${origPath}`;
140
+ try {
141
+ const result = queryCodexMcpServerNames();
142
+ expect(result).toEqual(new Set(['agent-tower']));
143
+ }
144
+ finally {
145
+ process.env.PATH = origPath;
146
+ }
147
+ });
148
+ it('returns empty set when CLI outputs empty array', () => {
149
+ const binDir = createFakeCodex('empty-array', '[]');
150
+ const origPath = process.env.PATH;
151
+ process.env.PATH = `${binDir}:${origPath}`;
152
+ try {
153
+ const result = queryCodexMcpServerNames();
154
+ expect(result).toEqual(new Set());
155
+ }
156
+ finally {
157
+ process.env.PATH = origPath;
158
+ }
159
+ });
160
+ it('returns null when CLI outputs non-JSON', () => {
161
+ const binDir = createFakeCodex('non-json', 'not json at all');
162
+ const origPath = process.env.PATH;
163
+ process.env.PATH = `${binDir}:${origPath}`;
164
+ try {
165
+ expect(queryCodexMcpServerNames()).toBeNull();
166
+ }
167
+ finally {
168
+ process.env.PATH = origPath;
169
+ }
170
+ });
171
+ it('returns null when CLI outputs non-array JSON (object)', () => {
172
+ const binDir = createFakeCodex('non-array', '{"servers": []}');
173
+ const origPath = process.env.PATH;
174
+ process.env.PATH = `${binDir}:${origPath}`;
175
+ try {
176
+ expect(queryCodexMcpServerNames()).toBeNull();
177
+ }
178
+ finally {
179
+ process.env.PATH = origPath;
180
+ }
181
+ });
182
+ it('returns null when array contains element without name field', () => {
183
+ const json = JSON.stringify([
184
+ { name: 'agent-tower', transport: 'stdio' },
185
+ { transport: 'stdio', enabled: true },
186
+ ]);
187
+ const binDir = createFakeCodex('missing-name', json);
188
+ const origPath = process.env.PATH;
189
+ process.env.PATH = `${binDir}:${origPath}`;
190
+ try {
191
+ expect(queryCodexMcpServerNames()).toBeNull();
192
+ }
193
+ finally {
194
+ process.env.PATH = origPath;
195
+ }
196
+ });
197
+ it('returns null when array contains element with non-string name', () => {
198
+ const json = JSON.stringify([
199
+ { name: 'agent-tower', transport: 'stdio' },
200
+ { name: 123, transport: 'stdio' },
201
+ ]);
202
+ const binDir = createFakeCodex('bad-name-type', json);
203
+ const origPath = process.env.PATH;
204
+ process.env.PATH = `${binDir}:${origPath}`;
205
+ try {
206
+ expect(queryCodexMcpServerNames()).toBeNull();
207
+ }
208
+ finally {
209
+ process.env.PATH = origPath;
210
+ }
211
+ });
212
+ it('returns null when array contains non-object element', () => {
213
+ const json = JSON.stringify([
214
+ { name: 'agent-tower', transport: 'stdio' },
215
+ 'not-an-object',
216
+ ]);
217
+ const binDir = createFakeCodex('non-object-element', json);
218
+ const origPath = process.env.PATH;
219
+ process.env.PATH = `${binDir}:${origPath}`;
220
+ try {
221
+ expect(queryCodexMcpServerNames()).toBeNull();
222
+ }
223
+ finally {
224
+ process.env.PATH = origPath;
225
+ }
226
+ });
227
+ it('returns null when CLI exits with non-zero code', () => {
228
+ const binDir = createFakeCodex('exit-error', '', 1);
229
+ const origPath = process.env.PATH;
230
+ process.env.PATH = `${binDir}:${origPath}`;
231
+ try {
232
+ expect(queryCodexMcpServerNames()).toBeNull();
233
+ }
234
+ finally {
235
+ process.env.PATH = origPath;
236
+ }
237
+ });
238
+ it('returns null when codex CLI is not in PATH', () => {
239
+ const origPath = process.env.PATH;
240
+ process.env.PATH = '/nonexistent-path-only';
241
+ try {
242
+ expect(queryCodexMcpServerNames()).toBeNull();
243
+ }
244
+ finally {
245
+ process.env.PATH = origPath;
246
+ }
247
+ });
248
+ });
249
+ // ─── detectDeclaredMcpServers (CLI + fallback) ──────────────────
250
+ describe('detectDeclaredMcpServers', () => {
251
+ it('uses CLI result when available', () => {
252
+ const json = JSON.stringify([
253
+ { name: 'agent-tower', transport: 'stdio', enabled: true },
254
+ { name: 'injected-mcp', transport: 'stdio', enabled: true },
255
+ ]);
256
+ const binDir = createFakeCodex('detect-cli', json);
257
+ const origPath = process.env.PATH;
258
+ process.env.PATH = `${binDir}:${origPath}`;
259
+ try {
260
+ const result = detectDeclaredMcpServers(['-c', 'mcp_servers.injected-mcp.command="x"']);
261
+ expect(result).toEqual(new Set(['agent-tower', 'injected-mcp']));
262
+ }
263
+ finally {
264
+ process.env.PATH = origPath;
265
+ }
266
+ });
267
+ it('falls back to config.toml when CLI is unavailable', () => {
268
+ const configPath = path.join(tmpDir, 'fallback.toml');
269
+ fs.writeFileSync(configPath, `
270
+ [mcp_servers.agent-tower]
271
+ command = "echo"
272
+ `);
273
+ const origPath = process.env.PATH;
274
+ process.env.PATH = '/nonexistent-path-only';
275
+ try {
276
+ const result = detectDeclaredMcpServers([], configPath);
277
+ expect(result).toEqual(new Set(['agent-tower']));
278
+ }
279
+ finally {
280
+ process.env.PATH = origPath;
281
+ }
282
+ });
283
+ it('falls back to config.toml when CLI output has bad schema', () => {
284
+ const binDir = createFakeCodex('detect-bad-schema', '{"not": "array"}');
285
+ const configPath = path.join(tmpDir, 'fallback-schema.toml');
286
+ fs.writeFileSync(configPath, `
287
+ [mcp_servers.agent-tower]
288
+ command = "echo"
289
+ [mcp_servers.agent-tower-dev]
290
+ command = "npx"
291
+ `);
292
+ const origPath = process.env.PATH;
293
+ process.env.PATH = `${binDir}:${origPath}`;
294
+ try {
295
+ const result = detectDeclaredMcpServers([], configPath);
296
+ expect(result).toEqual(new Set(['agent-tower', 'agent-tower-dev']));
297
+ }
298
+ finally {
299
+ process.env.PATH = origPath;
300
+ }
301
+ });
302
+ it('returns empty set when both CLI and config.toml fail', () => {
303
+ const origPath = process.env.PATH;
304
+ process.env.PATH = '/nonexistent-path-only';
305
+ try {
306
+ const result = detectDeclaredMcpServers([], path.join(tmpDir, 'no-such-file.toml'));
307
+ expect(result).toEqual(new Set());
308
+ }
309
+ finally {
310
+ process.env.PATH = origPath;
311
+ }
312
+ });
313
+ });
314
+ // ─── buildAgentTowerMcpEnvConfigOverrides ────────────────────────
315
+ describe('buildAgentTowerMcpEnvConfigOverrides', () => {
316
+ it('generates overrides only for declared MCP servers (both present)', () => {
6
317
  const env = ExecutionEnv.default('/tmp/worktree').merge({
7
318
  AGENT_TOWER_SESSION_ID: 'session-1',
8
319
  AGENT_TOWER_INVOCATION_ID: 'invocation-1',
9
320
  AGENT_TOWER_TEAM_RUN_ID: 'team-run-1',
10
321
  AGENT_TOWER_MEMBER_ID: 'member-1',
11
322
  });
12
- expect(buildAgentTowerMcpEnvConfigOverrides(env)).toEqual([
323
+ const declared = new Set(['agent-tower', 'agent-tower-dev']);
324
+ expect(buildAgentTowerMcpEnvConfigOverrides(env, declared)).toEqual([
13
325
  '-c',
14
326
  'mcp_servers.agent-tower.env.AGENT_TOWER_SESSION_ID="session-1"',
15
327
  '-c',
@@ -28,9 +340,37 @@ describe('CodexExecutor TeamRun MCP env overrides', () => {
28
340
  'mcp_servers.agent-tower-dev.env.AGENT_TOWER_MEMBER_ID="member-1"',
29
341
  ]);
30
342
  });
343
+ it('generates overrides only for agent-tower when agent-tower-dev is not declared', () => {
344
+ const env = ExecutionEnv.default('/tmp/worktree').merge({
345
+ AGENT_TOWER_SESSION_ID: 'session-1',
346
+ AGENT_TOWER_INVOCATION_ID: 'invocation-1',
347
+ AGENT_TOWER_TEAM_RUN_ID: 'team-run-1',
348
+ AGENT_TOWER_MEMBER_ID: 'member-1',
349
+ });
350
+ const declared = new Set(['agent-tower']);
351
+ expect(buildAgentTowerMcpEnvConfigOverrides(env, declared)).toEqual([
352
+ '-c',
353
+ 'mcp_servers.agent-tower.env.AGENT_TOWER_SESSION_ID="session-1"',
354
+ '-c',
355
+ 'mcp_servers.agent-tower.env.AGENT_TOWER_INVOCATION_ID="invocation-1"',
356
+ '-c',
357
+ 'mcp_servers.agent-tower.env.AGENT_TOWER_TEAM_RUN_ID="team-run-1"',
358
+ '-c',
359
+ 'mcp_servers.agent-tower.env.AGENT_TOWER_MEMBER_ID="member-1"',
360
+ ]);
361
+ });
362
+ it('returns empty array when no MCP servers are declared', () => {
363
+ const env = ExecutionEnv.default('/tmp/worktree').merge({
364
+ AGENT_TOWER_SESSION_ID: 'session-1',
365
+ AGENT_TOWER_TEAM_RUN_ID: 'team-run-1',
366
+ });
367
+ const declared = new Set();
368
+ expect(buildAgentTowerMcpEnvConfigOverrides(env, declared)).toEqual([]);
369
+ });
31
370
  it('omits MCP identity overrides for non-TeamRun sessions', () => {
32
371
  const env = ExecutionEnv.default('/tmp/worktree');
33
- expect(buildAgentTowerMcpEnvConfigOverrides(env)).toEqual([]);
372
+ const declared = new Set(['agent-tower', 'agent-tower-dev']);
373
+ expect(buildAgentTowerMcpEnvConfigOverrides(env, declared)).toEqual([]);
34
374
  });
35
375
  it('only projects TeamRun identity env keys', () => {
36
376
  const env = ExecutionEnv.default('/tmp/worktree').merge({
@@ -38,7 +378,8 @@ describe('CodexExecutor TeamRun MCP env overrides', () => {
38
378
  AGENT_TOWER_URL: 'http://127.0.0.1:42232',
39
379
  OPENAI_API_KEY: 'provider-secret',
40
380
  });
41
- expect(buildAgentTowerMcpEnvConfigOverrides(env)).toEqual([
381
+ const declared = new Set(['agent-tower', 'agent-tower-dev']);
382
+ expect(buildAgentTowerMcpEnvConfigOverrides(env, declared)).toEqual([
42
383
  '-c',
43
384
  'mcp_servers.agent-tower.env.AGENT_TOWER_TEAM_RUN_ID="team-run-1"',
44
385
  '-c',
@@ -1 +1 @@
1
- {"version":3,"file":"codex.executor.test.js","sourceRoot":"","sources":["../../../src/executors/__tests__/codex.executor.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,oCAAoC,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC;YACtD,sBAAsB,EAAE,WAAW;YACnC,yBAAyB,EAAE,cAAc;YACzC,uBAAuB,EAAE,YAAY;YACrC,qBAAqB,EAAE,UAAU;SAClC,CAAC,CAAC;QAEH,MAAM,CAAC,oCAAoC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YACxD,IAAI;YACJ,gEAAgE;YAChE,IAAI;YACJ,sEAAsE;YACtE,IAAI;YACJ,kEAAkE;YAClE,IAAI;YACJ,8DAA8D;YAC9D,IAAI;YACJ,oEAAoE;YACpE,IAAI;YACJ,0EAA0E;YAC1E,IAAI;YACJ,sEAAsE;YACtE,IAAI;YACJ,kEAAkE;SACnE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAElD,MAAM,CAAC,oCAAoC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC;YACtD,uBAAuB,EAAE,YAAY;YACrC,eAAe,EAAE,wBAAwB;YACzC,cAAc,EAAE,iBAAiB;SAClC,CAAC,CAAC;QAEH,MAAM,CAAC,oCAAoC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YACxD,IAAI;YACJ,kEAAkE;YAClE,IAAI;YACJ,sEAAsE;SACvE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"codex.executor.test.js","sourceRoot":"","sources":["../../../src/executors/__tests__/codex.executor.test.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,24 @@
5
5
  import { AgentType } from '../types/index.js';
6
6
  import { BaseExecutor, AvailabilityInfo, AgentCapability, ExecutorSpawnConfig, SpawnedChild } from './base.executor.js';
7
7
  import { CommandBuilder, CmdOverrides } from './command-builder.js';
8
- export declare function buildAgentTowerMcpEnvConfigOverrides(env: ExecutorSpawnConfig['env']): string[];
8
+ /**
9
+ * 读取 Codex config.toml 中实际声明的 mcp_servers 顶层 key。
10
+ * 文件不存在、读取失败或解析失败时返回空集合(不抛错)。
11
+ */
12
+ export declare function getCodexDeclaredMcpServerNames(configPath?: string): Set<string>;
13
+ /**
14
+ * 通过 `codex mcp list --json` 查询 Codex 运行时实际可见的 MCP server 名称。
15
+ * 传入 provider settings 展平后的 `-c` 参数,确保 settings 注入的 MCP 也在列表中。
16
+ * CLI 不存在、超时、exit 非 0、JSON 异常时返回 null 表示需要 fallback。
17
+ */
18
+ export declare function queryCodexMcpServerNames(configOverrideArgs?: string[]): Set<string> | null;
19
+ /**
20
+ * 检测 Codex 已声明的 MCP server 名称。
21
+ * 主路径:`codex mcp list --json`(能反映 config + `-c` 注入的完整 MCP 视图)。
22
+ * Fallback:直接读取 config.toml(CLI 不可用时)。
23
+ */
24
+ export declare function detectDeclaredMcpServers(configOverrideArgs?: string[], fallbackConfigPath?: string): Set<string>;
25
+ export declare function buildAgentTowerMcpEnvConfigOverrides(env: ExecutorSpawnConfig['env'], declaredMcpServers: Set<string>): string[];
9
26
  /**
10
27
  * Codex CLI 配置
11
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"codex.executor.d.ts","sourceRoot":"","sources":["../../src/executors/codex.executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAkB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAwDpF,wBAAgB,oCAAoC,CAAC,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAa9F;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,oCAAoC,CAAC,EAAE,OAAO,CAAC;IAC/C,eAAe;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AASD,qBAAa,aAAc,SAAQ,YAAY;IAC7C,QAAQ,CAAC,SAAS,mBAAmB;IACrC,QAAQ,CAAC,WAAW,WAAW;IAE/B,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,GAAE,WAAgB;IAMpC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAqCtD;;OAEG;IACH,eAAe,IAAI,eAAe,EAAE;IAIpC;;OAEG;IACH,uBAAuB,IAAI,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,SAAS,CAAC,mBAAmB,IAAI,cAAc;IA4B/C;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;IA2B/D;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC;IAkCxB;;OAEG;IACH,OAAO,CAAC,aAAa;CAMtB"}
1
+ {"version":3,"file":"codex.executor.d.ts","sourceRoot":"","sources":["../../src/executors/codex.executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAkB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AA4DpF;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAa/E;AAID;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,kBAAkB,GAAE,MAAM,EAAO,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAmB9F;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,kBAAkB,GAAE,MAAM,EAAO,EACjC,kBAAkB,CAAC,EAAE,MAAM,GAC1B,GAAG,CAAC,MAAM,CAAC,CAIb;AAED,wBAAgB,oCAAoC,CAClD,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAC/B,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC9B,MAAM,EAAE,CAcV;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,oCAAoC,CAAC,EAAE,OAAO,CAAC;IAC/C,eAAe;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AASD,qBAAa,aAAc,SAAQ,YAAY;IAC7C,QAAQ,CAAC,SAAS,mBAAmB;IACrC,QAAQ,CAAC,WAAW,WAAW;IAE/B,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,GAAE,WAAgB;IAMpC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAqCtD;;OAEG;IACH,eAAe,IAAI,eAAe,EAAE;IAIpC;;OAEG;IACH,uBAAuB,IAAI,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,SAAS,CAAC,mBAAmB,IAAI,cAAc;IA4B/C;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;IAgC/D;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC;IAuCxB;;OAEG;IACH,OAAO,CAAC,aAAa;CAMtB"}