@evalops/maestro 0.10.46 → 0.10.47

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 (101) hide show
  1. package/dist/agent/providers/openai-codex-session.js +1 -1
  2. package/dist/agent/providers/openai-codex-session.js.map +1 -1
  3. package/dist/app-server/in-process-client.d.ts +2 -2
  4. package/dist/app-server/in-process-client.js.map +1 -1
  5. package/dist/app-server/protocol-modes-api.js +1 -1
  6. package/dist/app-server/protocol-modes-api.js.map +1 -1
  7. package/dist/app-server/sandbox-check-api.d.ts +21 -0
  8. package/dist/app-server/{sandbox-proof-api.d.ts.map → sandbox-check-api.d.ts.map} +1 -1
  9. package/dist/app-server/{sandbox-proof-api.js → sandbox-check-api.js} +18 -18
  10. package/dist/app-server/{sandbox-proof-api.js.map → sandbox-check-api.js.map} +1 -1
  11. package/dist/app-server/session-api.d.ts +5 -5
  12. package/dist/app-server/session-api.js +18 -18
  13. package/dist/app-server/session-api.js.map +1 -1
  14. package/dist/audit/logger.d.ts +1 -1
  15. package/dist/cli/args.js +1 -1
  16. package/dist/cli/args.js.map +1 -1
  17. package/dist/cli/commands/codex.js +30 -3
  18. package/dist/cli/commands/codex.js.map +1 -1
  19. package/dist/cli-tui/auth-state.d.ts +7 -0
  20. package/dist/cli-tui/auth-state.d.ts.map +1 -0
  21. package/dist/cli-tui/auth-state.js +46 -0
  22. package/dist/cli-tui/auth-state.js.map +1 -0
  23. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
  24. package/dist/cli-tui/commands/command-catalog.js +6 -1
  25. package/dist/cli-tui/commands/command-catalog.js.map +1 -1
  26. package/dist/cli-tui/commands/command-suite-handlers.d.ts +2 -5
  27. package/dist/cli-tui/commands/command-suite-handlers.d.ts.map +1 -1
  28. package/dist/cli-tui/commands/command-suite-handlers.js.map +1 -1
  29. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +6 -5
  30. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
  31. package/dist/cli-tui/commands/subcommands/auth-commands.js +2 -2
  32. package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
  33. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
  34. package/dist/cli-tui/oauth/oauth-flow-controller.js +24 -11
  35. package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
  36. package/dist/cli-tui/selectors/oauth-selector-view.d.ts +1 -0
  37. package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
  38. package/dist/cli-tui/selectors/oauth-selector-view.js +1 -1
  39. package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
  40. package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -1
  41. package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
  42. package/dist/cli-tui/selectors/oauth-selector.js +25 -2
  43. package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
  44. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts +2 -5
  45. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts.map +1 -1
  46. package/dist/cli-tui/tui-renderer/command-suite-wiring.js.map +1 -1
  47. package/dist/cli-tui/tui-renderer.d.ts +0 -4
  48. package/dist/cli-tui/tui-renderer.d.ts.map +1 -1
  49. package/dist/cli-tui/tui-renderer.js +3 -28
  50. package/dist/cli-tui/tui-renderer.js.map +1 -1
  51. package/dist/cli.js +896 -497
  52. package/dist/codex/app-server-client.d.ts +8 -2
  53. package/dist/codex/app-server-client.d.ts.map +1 -1
  54. package/dist/codex/app-server-client.js +18 -4
  55. package/dist/codex/app-server-client.js.map +1 -1
  56. package/dist/codex/auth.d.ts +4 -0
  57. package/dist/codex/auth.d.ts.map +1 -0
  58. package/dist/codex/auth.js +103 -0
  59. package/dist/codex/auth.js.map +1 -0
  60. package/dist/db/schema.d.ts +1 -1
  61. package/dist/evalops/agent-bootstrap.js +2 -2
  62. package/dist/evalops/agent-bootstrap.js.map +1 -1
  63. package/dist/main.d.ts.map +1 -1
  64. package/dist/main.js +5 -1
  65. package/dist/main.js.map +1 -1
  66. package/dist/models/config-loader.d.ts +5 -5
  67. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +19 -19
  68. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
  69. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +12 -13
  70. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
  71. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  72. package/dist/node_modules/@evalops/tui/package.json +1 -1
  73. package/dist/oauth/index.d.ts +1 -0
  74. package/dist/oauth/index.d.ts.map +1 -1
  75. package/dist/oauth/index.js +42 -2
  76. package/dist/oauth/index.js.map +1 -1
  77. package/dist/server/app-context.d.ts +2 -0
  78. package/dist/server/app-context.d.ts.map +1 -1
  79. package/dist/server/app-context.js.map +1 -1
  80. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  81. package/dist/server/handlers/headless-sessions.js +44 -10
  82. package/dist/server/handlers/headless-sessions.js.map +1 -1
  83. package/dist/server/handlers/hosted-runner-identity.d.ts +2 -0
  84. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  85. package/dist/server/handlers/hosted-runner-identity.js +2 -0
  86. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  87. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  88. package/dist/server/handlers/platform-a2a-push.js +113 -2
  89. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  90. package/dist/server/headless-in-process-host.d.ts.map +1 -1
  91. package/dist/server/headless-in-process-host.js +1 -1
  92. package/dist/server/headless-in-process-host.js.map +1 -1
  93. package/dist/server/headless-runtime-service.d.ts +9 -2
  94. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  95. package/dist/server/headless-runtime-service.js +54 -15
  96. package/dist/server/headless-runtime-service.js.map +1 -1
  97. package/dist/tools/background/task-runtime.js +1 -1
  98. package/dist/tools/background/task-runtime.js.map +1 -1
  99. package/dist/version.json +2 -2
  100. package/package.json +1 -1
  101. package/dist/app-server/sandbox-proof-api.d.ts +0 -21
@@ -1 +1 @@
1
- {"version":3,"file":"command-suite-handlers.d.ts","sourceRoot":"","sources":["../../../src/cli-tui/commands/command-suite-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-suite-handlers.d.ts","sourceRoot":"","sources":["../../../src/cli-tui/commands/command-suite-handlers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"command-suite-handlers.js","sourceRoot":"","sources":["../../../src/cli-tui/commands/command-suite-handlers.ts"],"names":[],"mappings":"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","sourcesContent":["import { isDatabaseConfigured } from \"../../db/client.js\";\nimport {\n\tcreateAuthCommandHandler,\n\tcreateConfigCommandHandler,\n\tcreateDiagCommandHandler,\n\tcreateGitCommandHandler,\n\tcreateSafetyCommandHandler,\n\tcreateSessionCommandHandler,\n\tcreateToolsCommandHandler,\n\tcreateUiCommandHandler,\n\tcreateUndoCommandHandler,\n\tcreateUsageCommandHandler,\n} from \"./subcommands/index.js\";\nimport type { CommandExecutionContext } from \"./types.js\";\n\nexport enum CommandSuiteKey {\n\tSession = \"session\",\n\tDiag = \"diag\",\n\tUi = \"ui\",\n\tSafety = \"safety\",\n\tGit = \"git\",\n\tAuth = \"auth\",\n\tUsage = \"usage\",\n\tUndo = \"undo\",\n\tConfig = \"config\",\n\tTools = \"tools\",\n}\n\nexport type CommandSuiteHandlers = Record<\n\tCommandSuiteKey,\n\t(context: CommandExecutionContext) => Promise<void>\n>;\n\nexport type CommandSuiteDeps = {\n\t[CommandSuiteKey.Session]: {\n\t\thandleNewChat: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleClear: () => void | Promise<void>;\n\t\thandleSessionInfo: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleSessionsList: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleBranch: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleTree: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleQueue: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleExport: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleShare: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleRecover: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleCleanup: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t};\n\t[CommandSuiteKey.Diag]: {\n\t\thandleStatus: () => void | Promise<void>;\n\t\thandleAbout: () => void | Promise<void>;\n\t\thandleContext: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleStats: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleBackground: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleDiagnostics: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleTelemetry: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleTraining: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleOtel: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleConfig: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleLsp: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleMcp: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleSources: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandlePerf: () => void | Promise<void>;\n\t};\n\t[CommandSuiteKey.Ui]: {\n\t\tshowTheme: () => void | Promise<void>;\n\t\thandleClean: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleFooter: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleZen: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleCompactTools: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\tgetUiState: () => {\n\t\t\tzenMode: boolean;\n\t\t\tcleanMode: string;\n\t\t\tfooterMode: string;\n\t\t\tcompactTools: boolean;\n\t\t};\n\t};\n\t[CommandSuiteKey.Safety]: {\n\t\thandleApprovals: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandlePlanMode: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleGuardian: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\tgetSafetyState: () => {\n\t\t\tapprovalMode: string;\n\t\t\tplanMode: boolean;\n\t\t\tguardianEnabled: boolean;\n\t\t};\n\t};\n\t[CommandSuiteKey.Git]: {\n\t\thandleDiff: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleReview: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t};\n\t[CommandSuiteKey.Auth]: {\n\t\thandleLogin: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleLogout: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleSourceOfTruthPolicy: (\n\t\t\tctx: CommandExecutionContext,\n\t\t) => void | Promise<void>;\n\t\tgetAuthState: () => {\n\t\t\tauthenticated: boolean;\n\t\t\tprovider?: string;\n\t\t\tmode?: string;\n\t\t};\n\t};\n\t[CommandSuiteKey.Usage]: {\n\t\thandleCost: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleQuota: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleStats: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t};\n\t[CommandSuiteKey.Undo]: {\n\t\thandleUndo: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleCheckpoint: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleChanges: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\tgetUndoState: () => {\n\t\t\tcanUndo: boolean;\n\t\t\tundoCount: number;\n\t\t\tcheckpoints: string[];\n\t\t};\n\t};\n\t[CommandSuiteKey.Config]: {\n\t\thandleConfig: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleImport: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleFramework: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleComposer: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleInit: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t};\n\t[CommandSuiteKey.Tools]: {\n\t\thandleTools: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleMcp: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleLsp: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleWorkflow: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleRun: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleCommands: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t};\n};\n\nexport function createCommandSuiteHandlers(\n\tdeps: CommandSuiteDeps,\n): CommandSuiteHandlers {\n\tconst session = deps[CommandSuiteKey.Session];\n\tconst diag = deps[CommandSuiteKey.Diag];\n\tconst ui = deps[CommandSuiteKey.Ui];\n\tconst safety = deps[CommandSuiteKey.Safety];\n\tconst git = deps[CommandSuiteKey.Git];\n\tconst auth = deps[CommandSuiteKey.Auth];\n\tconst usage = deps[CommandSuiteKey.Usage];\n\tconst undo = deps[CommandSuiteKey.Undo];\n\tconst config = deps[CommandSuiteKey.Config];\n\tconst tools = deps[CommandSuiteKey.Tools];\n\n\treturn {\n\t\t[CommandSuiteKey.Session]: createSessionCommandHandler({\n\t\t\thandleNewChat: (ctx) => session.handleNewChat(ctx),\n\t\t\thandleClear: () => session.handleClear(),\n\t\t\thandleSessionInfo: (ctx) => session.handleSessionInfo(ctx),\n\t\t\thandleSessionsList: (ctx) => session.handleSessionsList(ctx),\n\t\t\thandleBranch: (ctx) => session.handleBranch(ctx),\n\t\t\thandleTree: (ctx) => session.handleTree(ctx),\n\t\t\thandleQueue: (ctx) => session.handleQueue(ctx),\n\t\t\thandleExport: (ctx) => session.handleExport(ctx),\n\t\t\thandleShare: (ctx) => session.handleShare(ctx),\n\t\t\thandleRecover: (ctx) => session.handleRecover(ctx),\n\t\t\thandleCleanup: (ctx) => session.handleCleanup(ctx),\n\t\t}),\n\t\t[CommandSuiteKey.Diag]: createDiagCommandHandler({\n\t\t\thandleStatus: () => diag.handleStatus(),\n\t\t\thandleAbout: () => diag.handleAbout(),\n\t\t\thandleContext: (ctx) => diag.handleContext(ctx),\n\t\t\thandleStats: (ctx) => diag.handleStats(ctx),\n\t\t\thandleBackground: (ctx) => diag.handleBackground(ctx),\n\t\t\thandleDiagnostics: (ctx) => diag.handleDiagnostics(ctx),\n\t\t\thandleTelemetry: (ctx) => diag.handleTelemetry(ctx),\n\t\t\thandleTraining: (ctx) => diag.handleTraining(ctx),\n\t\t\thandleOtel: (ctx) => diag.handleOtel(ctx),\n\t\t\thandleConfig: (ctx) => diag.handleConfig(ctx),\n\t\t\thandleLsp: (ctx) => diag.handleLsp(ctx),\n\t\t\thandleMcp: (ctx) => diag.handleMcp(ctx),\n\t\t\thandleSources: (ctx) => diag.handleSources(ctx),\n\t\t\thandlePerf: () => diag.handlePerf(),\n\t\t\tisDatabaseConfigured: () => isDatabaseConfigured(),\n\t\t}),\n\t\t[CommandSuiteKey.Ui]: createUiCommandHandler({\n\t\t\thandleTheme: () => ui.showTheme(),\n\t\t\thandleClean: (ctx) => ui.handleClean(ctx),\n\t\t\thandleFooter: (ctx) => ui.handleFooter(ctx),\n\t\t\thandleZen: (ctx) => ui.handleZen(ctx),\n\t\t\thandleCompactTools: (ctx) => ui.handleCompactTools(ctx),\n\t\t\tgetUiState: () => ui.getUiState(),\n\t\t}),\n\t\t[CommandSuiteKey.Safety]: createSafetyCommandHandler({\n\t\t\thandleApprovals: (ctx) => safety.handleApprovals(ctx),\n\t\t\thandlePlanMode: (ctx) => safety.handlePlanMode(ctx),\n\t\t\thandleGuardian: (ctx) => safety.handleGuardian(ctx),\n\t\t\tgetSafetyState: () => safety.getSafetyState(),\n\t\t}),\n\t\t[CommandSuiteKey.Git]: createGitCommandHandler({\n\t\t\thandleDiff: (ctx) => git.handleDiff(ctx),\n\t\t\thandleReview: (ctx) => git.handleReview(ctx),\n\t\t}),\n\t\t[CommandSuiteKey.Auth]: createAuthCommandHandler({\n\t\t\thandleLogin: (ctx) => auth.handleLogin(ctx),\n\t\t\thandleLogout: (ctx) => auth.handleLogout(ctx),\n\t\t\thandleSourceOfTruthPolicy: (ctx) => auth.handleSourceOfTruthPolicy(ctx),\n\t\t\tgetAuthState: () => auth.getAuthState(),\n\t\t}),\n\t\t[CommandSuiteKey.Usage]: createUsageCommandHandler({\n\t\t\thandleCost: (ctx) => usage.handleCost(ctx),\n\t\t\thandleQuota: (ctx) => usage.handleQuota(ctx),\n\t\t\thandleStats: (ctx) => usage.handleStats(ctx),\n\t\t}),\n\t\t[CommandSuiteKey.Undo]: createUndoCommandHandler({\n\t\t\thandleUndo: (ctx) => undo.handleUndo(ctx),\n\t\t\thandleCheckpoint: (ctx) => undo.handleCheckpoint(ctx),\n\t\t\thandleChanges: (ctx) => undo.handleChanges(ctx),\n\t\t\tgetUndoState: () => undo.getUndoState(),\n\t\t}),\n\t\t[CommandSuiteKey.Config]: createConfigCommandHandler({\n\t\t\thandleConfig: (ctx) => config.handleConfig(ctx),\n\t\t\thandleImport: (ctx) => config.handleImport(ctx),\n\t\t\thandleFramework: (ctx) => config.handleFramework(ctx),\n\t\t\thandleComposer: (ctx) => config.handleComposer(ctx),\n\t\t\thandleInit: (ctx) => config.handleInit(ctx),\n\t\t}),\n\t\t[CommandSuiteKey.Tools]: createToolsCommandHandler({\n\t\t\thandleTools: (ctx) => tools.handleTools(ctx),\n\t\t\thandleMcp: (ctx) => tools.handleMcp(ctx),\n\t\t\thandleLsp: (ctx) => tools.handleLsp(ctx),\n\t\t\thandleWorkflow: (ctx) => tools.handleWorkflow(ctx),\n\t\t\thandleRun: (ctx) => tools.handleRun(ctx),\n\t\t\thandleCommands: (ctx) => tools.handleCommands(ctx),\n\t\t}),\n\t};\n}\n"]}
1
+ {"version":3,"file":"command-suite-handlers.js","sourceRoot":"","sources":["../../../src/cli-tui/commands/command-suite-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EACN,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,GACzB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,CAAN,IAAY,eAWX;AAXD,WAAY,eAAe;IAC1B,sCAAmB,CAAA;IACnB,gCAAa,CAAA;IACb,4BAAS,CAAA;IACT,oCAAiB,CAAA;IACjB,8BAAW,CAAA;IACX,gCAAa,CAAA;IACb,kCAAe,CAAA;IACf,gCAAa,CAAA;IACb,oCAAiB,CAAA;IACjB,kCAAe,CAAA;AAChB,CAAC,EAXW,eAAe,KAAf,eAAe,QAW1B;AAwGD,MAAM,UAAU,0BAA0B,CACzC,IAAsB;IAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAE1C,OAAO;QACN,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,2BAA2B,CAAC;YACtD,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;YAClD,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE;YACxC,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC;YAC1D,kBAAkB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC;YAC5D,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;YAChD,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAC5C,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC;YAC9C,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;YAChD,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC;YAC9C,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;YAClD,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;SAClD,CAAC;QACF,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,wBAAwB,CAAC;YAChD,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE;YACvC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;YACrC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC/C,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YAC3C,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;YACrD,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;YACvD,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACnD,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YACjD,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACzC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;YAC7C,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YACvC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YACvC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC/C,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;YACnC,oBAAoB,EAAE,GAAG,EAAE,CAAC,oBAAoB,EAAE;SAClD,CAAC;QACF,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,sBAAsB,CAAC;YAC5C,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE;YACjC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC;YACzC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC;YAC3C,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC;YACrC,kBAAkB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC;YACvD,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE;SACjC,CAAC;QACF,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,0BAA0B,CAAC;YACpD,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC;YACrD,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;YACnD,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;YACnD,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE;SAC7C,CAAC;QACF,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,uBAAuB,CAAC;YAC9C,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YACxC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC;SAC5C,CAAC;QACF,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,wBAAwB,CAAC;YAChD,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YAC3C,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;YAC7C,yBAAyB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;YACvE,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE;SACvC,CAAC;QACF,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,yBAAyB,CAAC;YAClD,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAC1C,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;YAC5C,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;SAC5C,CAAC;QACF,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,wBAAwB,CAAC;YAChD,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACzC,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;YACrD,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC/C,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE;SACvC,CAAC;QACF,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,0BAA0B,CAAC;YACpD,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;YAC/C,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;YAC/C,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC;YACrD,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;YACnD,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;SAC3C,CAAC;QACF,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,yBAAyB,CAAC;YAClD,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;YAC5C,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;YACxC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;YACxC,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC;YAClD,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;YACxC,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC;SAClD,CAAC;KACF,CAAC;AACH,CAAC","sourcesContent":["import { isDatabaseConfigured } from \"../../db/client.js\";\nimport type { AuthState } from \"./subcommands/auth-commands.js\";\nimport {\n\tcreateAuthCommandHandler,\n\tcreateConfigCommandHandler,\n\tcreateDiagCommandHandler,\n\tcreateGitCommandHandler,\n\tcreateSafetyCommandHandler,\n\tcreateSessionCommandHandler,\n\tcreateToolsCommandHandler,\n\tcreateUiCommandHandler,\n\tcreateUndoCommandHandler,\n\tcreateUsageCommandHandler,\n} from \"./subcommands/index.js\";\nimport type { CommandExecutionContext } from \"./types.js\";\n\nexport enum CommandSuiteKey {\n\tSession = \"session\",\n\tDiag = \"diag\",\n\tUi = \"ui\",\n\tSafety = \"safety\",\n\tGit = \"git\",\n\tAuth = \"auth\",\n\tUsage = \"usage\",\n\tUndo = \"undo\",\n\tConfig = \"config\",\n\tTools = \"tools\",\n}\n\nexport type CommandSuiteHandlers = Record<\n\tCommandSuiteKey,\n\t(context: CommandExecutionContext) => Promise<void>\n>;\n\nexport type CommandSuiteDeps = {\n\t[CommandSuiteKey.Session]: {\n\t\thandleNewChat: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleClear: () => void | Promise<void>;\n\t\thandleSessionInfo: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleSessionsList: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleBranch: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleTree: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleQueue: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleExport: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleShare: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleRecover: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleCleanup: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t};\n\t[CommandSuiteKey.Diag]: {\n\t\thandleStatus: () => void | Promise<void>;\n\t\thandleAbout: () => void | Promise<void>;\n\t\thandleContext: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleStats: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleBackground: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleDiagnostics: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleTelemetry: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleTraining: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleOtel: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleConfig: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleLsp: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleMcp: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleSources: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandlePerf: () => void | Promise<void>;\n\t};\n\t[CommandSuiteKey.Ui]: {\n\t\tshowTheme: () => void | Promise<void>;\n\t\thandleClean: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleFooter: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleZen: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleCompactTools: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\tgetUiState: () => {\n\t\t\tzenMode: boolean;\n\t\t\tcleanMode: string;\n\t\t\tfooterMode: string;\n\t\t\tcompactTools: boolean;\n\t\t};\n\t};\n\t[CommandSuiteKey.Safety]: {\n\t\thandleApprovals: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandlePlanMode: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleGuardian: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\tgetSafetyState: () => {\n\t\t\tapprovalMode: string;\n\t\t\tplanMode: boolean;\n\t\t\tguardianEnabled: boolean;\n\t\t};\n\t};\n\t[CommandSuiteKey.Git]: {\n\t\thandleDiff: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleReview: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t};\n\t[CommandSuiteKey.Auth]: {\n\t\thandleLogin: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleLogout: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleSourceOfTruthPolicy: (\n\t\t\tctx: CommandExecutionContext,\n\t\t) => void | Promise<void>;\n\t\tgetAuthState: () => AuthState | Promise<AuthState>;\n\t};\n\t[CommandSuiteKey.Usage]: {\n\t\thandleCost: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleQuota: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleStats: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t};\n\t[CommandSuiteKey.Undo]: {\n\t\thandleUndo: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleCheckpoint: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleChanges: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\tgetUndoState: () => {\n\t\t\tcanUndo: boolean;\n\t\t\tundoCount: number;\n\t\t\tcheckpoints: string[];\n\t\t};\n\t};\n\t[CommandSuiteKey.Config]: {\n\t\thandleConfig: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleImport: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleFramework: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleComposer: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleInit: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t};\n\t[CommandSuiteKey.Tools]: {\n\t\thandleTools: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleMcp: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleLsp: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleWorkflow: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleRun: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t\thandleCommands: (ctx: CommandExecutionContext) => void | Promise<void>;\n\t};\n};\n\nexport function createCommandSuiteHandlers(\n\tdeps: CommandSuiteDeps,\n): CommandSuiteHandlers {\n\tconst session = deps[CommandSuiteKey.Session];\n\tconst diag = deps[CommandSuiteKey.Diag];\n\tconst ui = deps[CommandSuiteKey.Ui];\n\tconst safety = deps[CommandSuiteKey.Safety];\n\tconst git = deps[CommandSuiteKey.Git];\n\tconst auth = deps[CommandSuiteKey.Auth];\n\tconst usage = deps[CommandSuiteKey.Usage];\n\tconst undo = deps[CommandSuiteKey.Undo];\n\tconst config = deps[CommandSuiteKey.Config];\n\tconst tools = deps[CommandSuiteKey.Tools];\n\n\treturn {\n\t\t[CommandSuiteKey.Session]: createSessionCommandHandler({\n\t\t\thandleNewChat: (ctx) => session.handleNewChat(ctx),\n\t\t\thandleClear: () => session.handleClear(),\n\t\t\thandleSessionInfo: (ctx) => session.handleSessionInfo(ctx),\n\t\t\thandleSessionsList: (ctx) => session.handleSessionsList(ctx),\n\t\t\thandleBranch: (ctx) => session.handleBranch(ctx),\n\t\t\thandleTree: (ctx) => session.handleTree(ctx),\n\t\t\thandleQueue: (ctx) => session.handleQueue(ctx),\n\t\t\thandleExport: (ctx) => session.handleExport(ctx),\n\t\t\thandleShare: (ctx) => session.handleShare(ctx),\n\t\t\thandleRecover: (ctx) => session.handleRecover(ctx),\n\t\t\thandleCleanup: (ctx) => session.handleCleanup(ctx),\n\t\t}),\n\t\t[CommandSuiteKey.Diag]: createDiagCommandHandler({\n\t\t\thandleStatus: () => diag.handleStatus(),\n\t\t\thandleAbout: () => diag.handleAbout(),\n\t\t\thandleContext: (ctx) => diag.handleContext(ctx),\n\t\t\thandleStats: (ctx) => diag.handleStats(ctx),\n\t\t\thandleBackground: (ctx) => diag.handleBackground(ctx),\n\t\t\thandleDiagnostics: (ctx) => diag.handleDiagnostics(ctx),\n\t\t\thandleTelemetry: (ctx) => diag.handleTelemetry(ctx),\n\t\t\thandleTraining: (ctx) => diag.handleTraining(ctx),\n\t\t\thandleOtel: (ctx) => diag.handleOtel(ctx),\n\t\t\thandleConfig: (ctx) => diag.handleConfig(ctx),\n\t\t\thandleLsp: (ctx) => diag.handleLsp(ctx),\n\t\t\thandleMcp: (ctx) => diag.handleMcp(ctx),\n\t\t\thandleSources: (ctx) => diag.handleSources(ctx),\n\t\t\thandlePerf: () => diag.handlePerf(),\n\t\t\tisDatabaseConfigured: () => isDatabaseConfigured(),\n\t\t}),\n\t\t[CommandSuiteKey.Ui]: createUiCommandHandler({\n\t\t\thandleTheme: () => ui.showTheme(),\n\t\t\thandleClean: (ctx) => ui.handleClean(ctx),\n\t\t\thandleFooter: (ctx) => ui.handleFooter(ctx),\n\t\t\thandleZen: (ctx) => ui.handleZen(ctx),\n\t\t\thandleCompactTools: (ctx) => ui.handleCompactTools(ctx),\n\t\t\tgetUiState: () => ui.getUiState(),\n\t\t}),\n\t\t[CommandSuiteKey.Safety]: createSafetyCommandHandler({\n\t\t\thandleApprovals: (ctx) => safety.handleApprovals(ctx),\n\t\t\thandlePlanMode: (ctx) => safety.handlePlanMode(ctx),\n\t\t\thandleGuardian: (ctx) => safety.handleGuardian(ctx),\n\t\t\tgetSafetyState: () => safety.getSafetyState(),\n\t\t}),\n\t\t[CommandSuiteKey.Git]: createGitCommandHandler({\n\t\t\thandleDiff: (ctx) => git.handleDiff(ctx),\n\t\t\thandleReview: (ctx) => git.handleReview(ctx),\n\t\t}),\n\t\t[CommandSuiteKey.Auth]: createAuthCommandHandler({\n\t\t\thandleLogin: (ctx) => auth.handleLogin(ctx),\n\t\t\thandleLogout: (ctx) => auth.handleLogout(ctx),\n\t\t\thandleSourceOfTruthPolicy: (ctx) => auth.handleSourceOfTruthPolicy(ctx),\n\t\t\tgetAuthState: () => auth.getAuthState(),\n\t\t}),\n\t\t[CommandSuiteKey.Usage]: createUsageCommandHandler({\n\t\t\thandleCost: (ctx) => usage.handleCost(ctx),\n\t\t\thandleQuota: (ctx) => usage.handleQuota(ctx),\n\t\t\thandleStats: (ctx) => usage.handleStats(ctx),\n\t\t}),\n\t\t[CommandSuiteKey.Undo]: createUndoCommandHandler({\n\t\t\thandleUndo: (ctx) => undo.handleUndo(ctx),\n\t\t\thandleCheckpoint: (ctx) => undo.handleCheckpoint(ctx),\n\t\t\thandleChanges: (ctx) => undo.handleChanges(ctx),\n\t\t\tgetUndoState: () => undo.getUndoState(),\n\t\t}),\n\t\t[CommandSuiteKey.Config]: createConfigCommandHandler({\n\t\t\thandleConfig: (ctx) => config.handleConfig(ctx),\n\t\t\thandleImport: (ctx) => config.handleImport(ctx),\n\t\t\thandleFramework: (ctx) => config.handleFramework(ctx),\n\t\t\thandleComposer: (ctx) => config.handleComposer(ctx),\n\t\t\thandleInit: (ctx) => config.handleInit(ctx),\n\t\t}),\n\t\t[CommandSuiteKey.Tools]: createToolsCommandHandler({\n\t\t\thandleTools: (ctx) => tools.handleTools(ctx),\n\t\t\thandleMcp: (ctx) => tools.handleMcp(ctx),\n\t\t\thandleLsp: (ctx) => tools.handleLsp(ctx),\n\t\t\thandleWorkflow: (ctx) => tools.handleWorkflow(ctx),\n\t\t\thandleRun: (ctx) => tools.handleRun(ctx),\n\t\t\thandleCommands: (ctx) => tools.handleCommands(ctx),\n\t\t}),\n\t};\n}\n"]}
@@ -11,15 +11,16 @@
11
11
  * /auth status - Show current auth state
12
12
  */
13
13
  import type { CommandExecutionContext } from "../types.js";
14
+ export interface AuthState {
15
+ authenticated: boolean;
16
+ provider?: string;
17
+ mode?: string;
18
+ }
14
19
  export interface AuthCommandDeps {
15
20
  handleLogin: (ctx: CommandExecutionContext) => Promise<void> | void;
16
21
  handleLogout: (ctx: CommandExecutionContext) => Promise<void> | void;
17
22
  handleSourceOfTruthPolicy?: (ctx: CommandExecutionContext) => Promise<void> | void;
18
- getAuthState: () => {
19
- authenticated: boolean;
20
- provider?: string;
21
- mode?: string;
22
- };
23
+ getAuthState: () => AuthState | Promise<AuthState>;
23
24
  }
24
25
  export declare function createAuthCommandHandler(deps: AuthCommandDeps): (ctx: CommandExecutionContext) => Promise<void>;
25
26
  //# sourceMappingURL=auth-commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-commands.d.ts","sourceRoot":"","sources":["../../../../src/cli-tui/commands/subcommands/auth-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAG3D,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,CAAC,GAAG,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpE,YAAY,EAAE,CAAC,GAAG,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrE,yBAAyB,CAAC,EAAE,CAC3B,GAAG,EAAE,uBAAuB,KACxB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM;QACnB,aAAa,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,eAAe,mDA0C7D"}
1
+ {"version":3,"file":"auth-commands.d.ts","sourceRoot":"","sources":["../../../../src/cli-tui/commands/subcommands/auth-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAG3D,MAAM,WAAW,SAAS;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,CAAC,GAAG,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpE,YAAY,EAAE,CAAC,GAAG,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrE,yBAAyB,CAAC,EAAE,CAC3B,GAAG,EAAE,uBAAuB,KACxB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACnD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,eAAe,mDA0C7D"}
@@ -45,8 +45,8 @@ export function createAuthCommandHandler(deps) {
45
45
  },
46
46
  });
47
47
  }
48
- function showAuthStatus(ctx, deps) {
49
- const state = deps.getAuthState();
48
+ async function showAuthStatus(ctx, deps) {
49
+ const state = await deps.getAuthState();
50
50
  if (state.authenticated) {
51
51
  ctx.showInfo(`Authentication Status:
52
52
  Authenticated: yes
@@ -1 +1 @@
1
- {"version":3,"file":"auth-commands.js","sourceRoot":"","sources":["../../../../src/cli-tui/commands/subcommands/auth-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAerD,MAAM,UAAU,wBAAwB,CAAC,IAAqB;IAC7D,OAAO,uBAAuB,CAAC;QAC9B,iBAAiB,EAAE,QAAQ;QAC3B,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE;YACP;gBACC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;gBACnC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC;aAC/C;YACD;gBACC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAC1B,OAAO,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,CAC/B,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;aAC1C;YACD;gBACC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAC5B,OAAO,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,CAC/B,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;aAC5C;YACD;gBACC,KAAK,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,QAAQ,CAAC;gBAC3C,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,gBAAgB,EAAE,EAAE,EAAE;oBACrD,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;wBACrC,GAAG,CAAC,SAAS,CACZ,qEAAqE,CACrE,CAAC;wBACF,OAAO;oBACR,CAAC;oBACD,OAAO,IAAI,CAAC,yBAAyB,CACpC,aAAa,CACZ,yBAAyB,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAClD,gBAAgB,CAChB,CACD,CAAC;gBACH,CAAC;aACD;SACD;QACD,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE;YACxC,GAAG,CAAC,SAAS,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;YACnD,YAAY,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;KACD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACtB,GAA4B,EAC5B,IAAqB;IAErB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,GAAG,CAAC,QAAQ,CAAC;;cAED,KAAK,CAAC,QAAQ,IAAI,SAAS;UAC/B,KAAK,CAAC,IAAI,IAAI,SAAS;;8BAEH,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACP,GAAG,CAAC,QAAQ,CAAC;;;mDAGoC,CAAC,CAAC;IACpD,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,GAA4B;IACjD,GAAG,CAAC,QAAQ,CAAC;;;;;;;;;;;6CAW+B,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["/**\n * Consolidated /auth command handler.\n *\n * Combines: /login, /logout\n *\n * Usage:\n * /auth - Show auth status\n * /auth login [provider] - Authenticate (openai-codex by default)\n * /auth logout [provider] - Remove credentials\n * /auth source-of-truth <provider> <area> [fallbackConnectionId] - Set connector policy\n * /auth status - Show current auth state\n */\n\nimport type { CommandExecutionContext } from \"../types.js\";\nimport { createSubcommandHandler } from \"./utils.js\";\n\nexport interface AuthCommandDeps {\n\thandleLogin: (ctx: CommandExecutionContext) => Promise<void> | void;\n\thandleLogout: (ctx: CommandExecutionContext) => Promise<void> | void;\n\thandleSourceOfTruthPolicy?: (\n\t\tctx: CommandExecutionContext,\n\t) => Promise<void> | void;\n\tgetAuthState: () => {\n\t\tauthenticated: boolean;\n\t\tprovider?: string;\n\t\tmode?: string;\n\t};\n}\n\nexport function createAuthCommandHandler(deps: AuthCommandDeps) {\n\treturn createSubcommandHandler({\n\t\tdefaultSubcommand: \"status\",\n\t\tshowHelp: showAuthHelp,\n\t\troutes: [\n\t\t\t{\n\t\t\t\tmatch: [\"status\", \"info\", \"whoami\"],\n\t\t\t\texecute: ({ ctx }) => showAuthStatus(ctx, deps),\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatch: [\"login\", \"signin\"],\n\t\t\t\texecute: ({ rewriteContext }) =>\n\t\t\t\t\tdeps.handleLogin(rewriteContext(\"login\")),\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatch: [\"logout\", \"signout\"],\n\t\t\t\texecute: ({ rewriteContext }) =>\n\t\t\t\t\tdeps.handleLogout(rewriteContext(\"logout\")),\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatch: [\"source-of-truth\", \"sot\", \"policy\"],\n\t\t\t\texecute: ({ ctx, customContext, restArgumentText }) => {\n\t\t\t\t\tif (!deps.handleSourceOfTruthPolicy) {\n\t\t\t\t\t\tctx.showError(\n\t\t\t\t\t\t\t\"Source-of-truth policy management is not available in this session.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn deps.handleSourceOfTruthPolicy(\n\t\t\t\t\t\tcustomContext(\n\t\t\t\t\t\t\t`/auth source-of-truth ${restArgumentText}`.trim(),\n\t\t\t\t\t\t\trestArgumentText,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tonUnknown: async ({ ctx, subcommand }) => {\n\t\t\tctx.showError(`Unknown subcommand: ${subcommand}`);\n\t\t\tshowAuthHelp(ctx);\n\t\t},\n\t});\n}\n\nfunction showAuthStatus(\n\tctx: CommandExecutionContext,\n\tdeps: AuthCommandDeps,\n): void {\n\tconst state = deps.getAuthState();\n\tif (state.authenticated) {\n\t\tctx.showInfo(`Authentication Status:\n Authenticated: yes\n Provider: ${state.provider || \"unknown\"}\n Mode: ${state.mode || \"unknown\"}\n\nUse /auth logout to sign out.`);\n\t} else {\n\t\tctx.showInfo(`Authentication Status:\n Authenticated: no\n\nUse /auth login to authenticate with OpenAI Codex.`);\n\t}\n}\n\nfunction showAuthHelp(ctx: CommandExecutionContext): void {\n\tctx.showInfo(`Auth Commands:\n /auth Show auth status\n /auth login [provider] Authenticate (openai-codex by default)\n /auth logout [provider] Remove credentials\n /auth source-of-truth <provider> <area> [fallbackConnectionId]\n Set connector source-of-truth policy metadata\n Areas: analytics, billing, crm, hris, support\n /auth source-of-truth clear <provider>\n Remove local policy metadata\n /auth status Show current auth state\n\nDirect shortcuts still work: /login, /logout`);\n}\n"]}
1
+ {"version":3,"file":"auth-commands.js","sourceRoot":"","sources":["../../../../src/cli-tui/commands/subcommands/auth-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAiBrD,MAAM,UAAU,wBAAwB,CAAC,IAAqB;IAC7D,OAAO,uBAAuB,CAAC;QAC9B,iBAAiB,EAAE,QAAQ;QAC3B,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE;YACP;gBACC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;gBACnC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC;aAC/C;YACD;gBACC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAC1B,OAAO,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,CAC/B,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;aAC1C;YACD;gBACC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAC5B,OAAO,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,CAC/B,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;aAC5C;YACD;gBACC,KAAK,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,QAAQ,CAAC;gBAC3C,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,gBAAgB,EAAE,EAAE,EAAE;oBACrD,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;wBACrC,GAAG,CAAC,SAAS,CACZ,qEAAqE,CACrE,CAAC;wBACF,OAAO;oBACR,CAAC;oBACD,OAAO,IAAI,CAAC,yBAAyB,CACpC,aAAa,CACZ,yBAAyB,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAClD,gBAAgB,CAChB,CACD,CAAC;gBACH,CAAC;aACD;SACD;QACD,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE;YACxC,GAAG,CAAC,SAAS,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;YACnD,YAAY,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;KACD,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAC5B,GAA4B,EAC5B,IAAqB;IAErB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IACxC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,GAAG,CAAC,QAAQ,CAAC;;cAED,KAAK,CAAC,QAAQ,IAAI,SAAS;UAC/B,KAAK,CAAC,IAAI,IAAI,SAAS;;8BAEH,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACP,GAAG,CAAC,QAAQ,CAAC;;;mDAGoC,CAAC,CAAC;IACpD,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,GAA4B;IACjD,GAAG,CAAC,QAAQ,CAAC;;;;;;;;;;;6CAW+B,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["/**\n * Consolidated /auth command handler.\n *\n * Combines: /login, /logout\n *\n * Usage:\n * /auth - Show auth status\n * /auth login [provider] - Authenticate (openai-codex by default)\n * /auth logout [provider] - Remove credentials\n * /auth source-of-truth <provider> <area> [fallbackConnectionId] - Set connector policy\n * /auth status - Show current auth state\n */\n\nimport type { CommandExecutionContext } from \"../types.js\";\nimport { createSubcommandHandler } from \"./utils.js\";\n\nexport interface AuthState {\n\tauthenticated: boolean;\n\tprovider?: string;\n\tmode?: string;\n}\n\nexport interface AuthCommandDeps {\n\thandleLogin: (ctx: CommandExecutionContext) => Promise<void> | void;\n\thandleLogout: (ctx: CommandExecutionContext) => Promise<void> | void;\n\thandleSourceOfTruthPolicy?: (\n\t\tctx: CommandExecutionContext,\n\t) => Promise<void> | void;\n\tgetAuthState: () => AuthState | Promise<AuthState>;\n}\n\nexport function createAuthCommandHandler(deps: AuthCommandDeps) {\n\treturn createSubcommandHandler({\n\t\tdefaultSubcommand: \"status\",\n\t\tshowHelp: showAuthHelp,\n\t\troutes: [\n\t\t\t{\n\t\t\t\tmatch: [\"status\", \"info\", \"whoami\"],\n\t\t\t\texecute: ({ ctx }) => showAuthStatus(ctx, deps),\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatch: [\"login\", \"signin\"],\n\t\t\t\texecute: ({ rewriteContext }) =>\n\t\t\t\t\tdeps.handleLogin(rewriteContext(\"login\")),\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatch: [\"logout\", \"signout\"],\n\t\t\t\texecute: ({ rewriteContext }) =>\n\t\t\t\t\tdeps.handleLogout(rewriteContext(\"logout\")),\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatch: [\"source-of-truth\", \"sot\", \"policy\"],\n\t\t\t\texecute: ({ ctx, customContext, restArgumentText }) => {\n\t\t\t\t\tif (!deps.handleSourceOfTruthPolicy) {\n\t\t\t\t\t\tctx.showError(\n\t\t\t\t\t\t\t\"Source-of-truth policy management is not available in this session.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn deps.handleSourceOfTruthPolicy(\n\t\t\t\t\t\tcustomContext(\n\t\t\t\t\t\t\t`/auth source-of-truth ${restArgumentText}`.trim(),\n\t\t\t\t\t\t\trestArgumentText,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tonUnknown: async ({ ctx, subcommand }) => {\n\t\t\tctx.showError(`Unknown subcommand: ${subcommand}`);\n\t\t\tshowAuthHelp(ctx);\n\t\t},\n\t});\n}\n\nasync function showAuthStatus(\n\tctx: CommandExecutionContext,\n\tdeps: AuthCommandDeps,\n): Promise<void> {\n\tconst state = await deps.getAuthState();\n\tif (state.authenticated) {\n\t\tctx.showInfo(`Authentication Status:\n Authenticated: yes\n Provider: ${state.provider || \"unknown\"}\n Mode: ${state.mode || \"unknown\"}\n\nUse /auth logout to sign out.`);\n\t} else {\n\t\tctx.showInfo(`Authentication Status:\n Authenticated: no\n\nUse /auth login to authenticate with OpenAI Codex.`);\n\t}\n}\n\nfunction showAuthHelp(ctx: CommandExecutionContext): void {\n\tctx.showInfo(`Auth Commands:\n /auth Show auth status\n /auth login [provider] Authenticate (openai-codex by default)\n /auth logout [provider] Remove credentials\n /auth source-of-truth <provider> <area> [fallbackConnectionId]\n Set connector source-of-truth policy metadata\n Areas: analytics, billing, crm, hris, support\n /auth source-of-truth clear <provider>\n Remove local policy metadata\n /auth status Show current auth state\n\nDirect shortcuts still work: /login, /logout`);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-flow-controller.d.ts","sourceRoot":"","sources":["../../../src/cli-tui/oauth/oauth-flow-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,GAAG,EAAQ,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAM9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAgBhE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,WAAW,IAAI,IAAI,CAAC;IACpB,OAAO,IAAI,MAAM,CAAC;IAClB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,aAAa,EAAE,SAAS,CAAC;IACzB,EAAE,EAAE,GAAG,CAAC;IACR,aAAa,IAAI,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IAC1C,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,aAAa,EAAE,kBAAkB,CAAC;IAClC,eAAe,EAAE,oBAAoB,CAAC;CACtC;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;IACvD,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAC,CAAoB;IAC3C,OAAO,CAAC,eAAe,CAAC,CAAoB;gBAEhC,OAAO,EAAE,0BAA0B;IAO/C;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACG,kBAAkB,CACvB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC;IAoGhB;;OAEG;IACG,mBAAmB,CACxB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAChC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC;IAiEhB;;OAEG;IACG,gCAAgC,CACrC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAChC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC;YAyEF,iBAAiB;YAgOjB,kBAAkB;CA4BhC"}
1
+ {"version":3,"file":"oauth-flow-controller.d.ts","sourceRoot":"","sources":["../../../src/cli-tui/oauth/oauth-flow-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,GAAG,EAAQ,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAM9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAgBhE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,WAAW,IAAI,IAAI,CAAC;IACpB,OAAO,IAAI,MAAM,CAAC;IAClB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,aAAa,EAAE,SAAS,CAAC;IACzB,EAAE,EAAE,GAAG,CAAC;IACR,aAAa,IAAI,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IAC1C,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,aAAa,EAAE,kBAAkB,CAAC;IAClC,eAAe,EAAE,oBAAoB,CAAC;CACtC;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;IACvD,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAC,CAAoB;IAC3C,OAAO,CAAC,eAAe,CAAC,CAAoB;gBAEhC,OAAO,EAAE,0BAA0B;IAO/C;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACG,kBAAkB,CACvB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC;IA6GhB;;OAEG;IACG,mBAAmB,CACxB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAChC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC;IAqEhB;;OAEG;IACG,gCAAgC,CACrC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAChC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC;YAyEF,iBAAiB;YA8NjB,kBAAkB;CAuBhC"}
@@ -46,15 +46,21 @@ export class OAuthFlowController {
46
46
  // Parse argument as a provider. Anthropic-specific mode arguments were
47
47
  // retired with Anthropic OAuth login support.
48
48
  let requestedProvider;
49
+ let requestedMode;
49
50
  if (args) {
50
51
  if (args.includes(":")) {
51
52
  const parts = args.split(":").map((s) => s.trim());
52
53
  requestedProvider = parts[0];
53
54
  const mode = parts[1];
54
55
  if (mode) {
55
- this.isOAuthFlowActive = false;
56
- showError("Provider login modes are no longer supported. Use /login openai-codex for Codex auth or /login openai for OpenAI Platform auth.");
57
- return;
56
+ if (requestedProvider === "openai-codex" && mode === "responses") {
57
+ requestedMode = mode;
58
+ }
59
+ else {
60
+ this.isOAuthFlowActive = false;
61
+ showError("Provider login modes are no longer supported, except /login openai-codex:responses for legacy Codex Responses credentials.");
62
+ return;
63
+ }
58
64
  }
59
65
  }
60
66
  else {
@@ -74,7 +80,7 @@ export class OAuthFlowController {
74
80
  }
75
81
  const defaultProvider = providers.find((provider) => provider.id === "openai-codex");
76
82
  if (!requestedProvider && defaultProvider) {
77
- await this.performOAuthLogin(defaultProvider.id, undefined, showError);
83
+ await this.performOAuthLogin(defaultProvider.id, requestedMode, showError);
78
84
  return;
79
85
  }
80
86
  // If only one provider or specific provider requested, use it directly
@@ -88,7 +94,7 @@ export class OAuthFlowController {
88
94
  showError(`Unknown provider: ${requestedProvider}`);
89
95
  return;
90
96
  }
91
- await this.performOAuthLogin(provider.id, undefined, showError);
97
+ await this.performOAuthLogin(provider.id, requestedMode, showError);
92
98
  return;
93
99
  }
94
100
  // Multiple providers - show selector
@@ -123,9 +129,9 @@ export class OAuthFlowController {
123
129
  const args = argumentText.trim().toLowerCase();
124
130
  const requestedProvider = args || null;
125
131
  // Import OAuth system
126
- const { listOAuthLogoutProviders } = await import("../../oauth/index.js");
132
+ const { listOAuthLogoutProvidersWithCodexAppServer } = await import("../../oauth/index.js");
127
133
  // Get logged-in providers
128
- const loggedInProviders = listOAuthLogoutProviders();
134
+ const loggedInProviders = await listOAuthLogoutProvidersWithCodexAppServer();
129
135
  if (loggedInProviders.length === 0) {
130
136
  this.isOAuthFlowActive = false;
131
137
  showInfo("No OAuth providers logged in. Use /login first.");
@@ -150,6 +156,7 @@ export class OAuthFlowController {
150
156
  modalManager: this.modalManager,
151
157
  ui: this.renderContext.ui,
152
158
  mode: "logout",
159
+ providers: loggedInProviders,
153
160
  onProviderSelected: async (providerId) => {
154
161
  try {
155
162
  await this.performOAuthLogout(providerId, showError);
@@ -235,7 +242,7 @@ export class OAuthFlowController {
235
242
  requestRender();
236
243
  try {
237
244
  await login(providerId, {
238
- mode: mode,
245
+ mode,
239
246
  onStatus: (status) => {
240
247
  chatContainer.addChild(new Spacer(1));
241
248
  chatContainer.addChild(new Text(status, 1, 0));
@@ -343,8 +350,11 @@ export class OAuthFlowController {
343
350
  },
344
351
  });
345
352
  this.notificationView.showToast(`Successfully authenticated with ${providerId}!`, "success");
353
+ const completionMessage = providerId === "openai-codex" && mode !== "responses"
354
+ ? "Authentication complete. Codex app-server sign-in is ready."
355
+ : `Authentication complete. ${providerId} OAuth credentials saved.`;
346
356
  chatContainer.addChild(new Spacer(1));
347
- chatContainer.addChild(new Text(`Authentication complete. ${providerId} OAuth credentials saved.`, 1, 0));
357
+ chatContainer.addChild(new Text(completionMessage, 1, 0));
348
358
  requestRender();
349
359
  }
350
360
  catch (error) {
@@ -373,9 +383,12 @@ export class OAuthFlowController {
373
383
  try {
374
384
  const { logout } = await import("../../oauth/index.js");
375
385
  await logout(providerId);
376
- this.notificationView.showToast(`${providerId} OAuth credentials removed`, "success");
386
+ const message = providerId === "openai-codex"
387
+ ? "Signed out from openai-codex"
388
+ : `${providerId} OAuth credentials removed`;
389
+ this.notificationView.showToast(message, "success");
377
390
  chatContainer.addChild(new Spacer(1));
378
- chatContainer.addChild(new Text(`Logged out from ${providerId}. OAuth credentials removed.`, 1, 0));
391
+ chatContainer.addChild(new Text(message, 1, 0));
379
392
  requestRender();
380
393
  }
381
394
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-flow-controller.js","sourceRoot":"","sources":["../../../src/cli-tui/oauth/oauth-flow-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFile } from \"node:child_process\";\nimport { Spacer, type TUI, Text } from \"@evalops/tui\";\nimport type { Container } from \"@evalops/tui\";\nimport type {\n\tOAuthLogoutProvider,\n\tSupportedOAuthProvider,\n} from \"../../oauth/index.js\";\nimport { theme } from \"../../theme/theme.js\";\nimport type { ModalManager } from \"../modal-manager.js\";\nimport type { NotificationView } from \"../notification-view.js\";\nimport { OAuthSelectorView } from \"../selectors/oauth-selector-view.js\";\nimport { formatLink } from \"../utils/links.js\";\n\nconst OSC52_PREFIX = \"\\u001b]52;c;\";\nconst OSC52_SUFFIX = \"\\u0007\";\n\nfunction copyToOsc52(value: string): boolean {\n\tif (!process.stdout.isTTY) {\n\t\treturn false;\n\t}\n\tconst base64 = Buffer.from(value).toString(\"base64\");\n\tprocess.stdout.write(`${OSC52_PREFIX}${base64}${OSC52_SUFFIX}`);\n\treturn true;\n}\n\n/**\n * Callback interface for editor interactions during OAuth flow.\n */\nexport interface OAuthEditorCallbacks {\n\tclearEditor(): void;\n\tgetText(): string;\n\tsetText(text: string): void;\n\tonSubmit: ((text: string) => void) | undefined;\n}\n\n/**\n * Context for rendering OAuth UI elements.\n */\nexport interface OAuthRenderContext {\n\tchatContainer: Container;\n\tui: TUI;\n\trequestRender(): void;\n}\n\n/**\n * Options for the OAuth flow controller.\n */\nexport interface OAuthFlowControllerOptions {\n\tmodalManager: ModalManager;\n\tnotificationView: NotificationView;\n\trenderContext: OAuthRenderContext;\n\teditorCallbacks: OAuthEditorCallbacks;\n}\n\n/**\n * Controller for handling OAuth login and logout flows.\n *\n * Extracts OAuth flow logic from TuiRenderer to provide a cohesive unit\n * for authentication operations.\n */\nexport class OAuthFlowController {\n\tprivate readonly modalManager: ModalManager;\n\tprivate readonly notificationView: NotificationView;\n\tprivate readonly renderContext: OAuthRenderContext;\n\tprivate readonly editorCallbacks: OAuthEditorCallbacks;\n\tprivate isOAuthFlowActive = false;\n\tprivate oauthLoginView?: OAuthSelectorView;\n\tprivate oauthLogoutView?: OAuthSelectorView;\n\n\tconstructor(options: OAuthFlowControllerOptions) {\n\t\tthis.modalManager = options.modalManager;\n\t\tthis.notificationView = options.notificationView;\n\t\tthis.renderContext = options.renderContext;\n\t\tthis.editorCallbacks = options.editorCallbacks;\n\t}\n\n\t/**\n\t * Check if an OAuth flow is currently active.\n\t */\n\tisActive(): boolean {\n\t\treturn this.isOAuthFlowActive;\n\t}\n\n\t/**\n\t * Handle the /login command.\n\t */\n\tasync handleLoginCommand(\n\t\targumentText: string,\n\t\tshowError: (msg: string) => void,\n\t): Promise<void> {\n\t\tif (this.isOAuthFlowActive) {\n\t\t\tshowError(\n\t\t\t\t\"An OAuth flow is already in progress. Please complete or cancel it first.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOAuthFlowActive = true;\n\n\t\tconst args = argumentText.trim().toLowerCase();\n\n\t\t// Parse argument as a provider. Anthropic-specific mode arguments were\n\t\t// retired with Anthropic OAuth login support.\n\t\tlet requestedProvider: string | undefined;\n\n\t\tif (args) {\n\t\t\tif (args.includes(\":\")) {\n\t\t\t\tconst parts = args.split(\":\").map((s) => s.trim());\n\t\t\t\trequestedProvider = parts[0];\n\t\t\t\tconst mode = parts[1];\n\t\t\t\tif (mode) {\n\t\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\t\tshowError(\n\t\t\t\t\t\t\"Provider login modes are no longer supported. Use /login openai-codex for Codex auth or /login openai for OpenAI Platform auth.\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trequestedProvider = args;\n\t\t\t}\n\t\t}\n\n\t\t// Import OAuth system\n\t\tconst { getOAuthProviders, migrateOAuthCredentials } = await import(\n\t\t\t\"../../oauth/index.js\"\n\t\t);\n\n\t\t// Migrate old credentials if needed\n\t\tawait migrateOAuthCredentials();\n\n\t\t// Get available providers\n\t\tconst providers = getOAuthProviders().filter((p) => p.available);\n\n\t\tif (providers.length === 0) {\n\t\t\tthis.isOAuthFlowActive = false;\n\t\t\tshowError(\"No OAuth providers available\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst defaultProvider = providers.find(\n\t\t\t(provider) => provider.id === \"openai-codex\",\n\t\t);\n\t\tif (!requestedProvider && defaultProvider) {\n\t\t\tawait this.performOAuthLogin(defaultProvider.id, undefined, showError);\n\t\t\treturn;\n\t\t}\n\n\t\t// If only one provider or specific provider requested, use it directly\n\t\tif (providers.length === 1 || requestedProvider) {\n\t\t\tconst provider = requestedProvider\n\t\t\t\t? (providers.find((p) => p.id === requestedProvider) ??\n\t\t\t\t\tproviders.find((p) => p.id.includes(requestedProvider)))\n\t\t\t\t: providers[0];\n\n\t\t\tif (!provider) {\n\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\tshowError(`Unknown provider: ${requestedProvider}`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.performOAuthLogin(provider.id, undefined, showError);\n\t\t\treturn;\n\t\t}\n\n\t\t// Multiple providers - show selector\n\t\tthis.oauthLoginView = new OAuthSelectorView({\n\t\t\tmodalManager: this.modalManager,\n\t\t\tui: this.renderContext.ui,\n\t\t\tmode: \"login\",\n\t\t\tonProviderSelected: async (providerId) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.performOAuthLogin(\n\t\t\t\t\t\tproviderId as SupportedOAuthProvider,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tshowError,\n\t\t\t\t\t);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonCancel: () => {\n\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\tthis.notificationView.showInfo(\"Login cancelled\");\n\t\t\t},\n\t\t});\n\n\t\tthis.oauthLoginView.show();\n\t}\n\n\t/**\n\t * Handle the /logout command.\n\t */\n\tasync handleLogoutCommand(\n\t\targumentText: string,\n\t\tshowError: (msg: string) => void,\n\t\tshowInfo: (msg: string) => void,\n\t): Promise<void> {\n\t\tif (this.isOAuthFlowActive) {\n\t\t\tshowError(\n\t\t\t\t\"An OAuth flow is already in progress. Please complete or cancel it first.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOAuthFlowActive = true;\n\n\t\tconst args = argumentText.trim().toLowerCase();\n\t\tconst requestedProvider = args || null;\n\n\t\t// Import OAuth system\n\t\tconst { listOAuthLogoutProviders } = await import(\"../../oauth/index.js\");\n\n\t\t// Get logged-in providers\n\t\tconst loggedInProviders = listOAuthLogoutProviders();\n\n\t\tif (loggedInProviders.length === 0) {\n\t\t\tthis.isOAuthFlowActive = false;\n\t\t\tshowInfo(\"No OAuth providers logged in. Use /login first.\");\n\t\t\treturn;\n\t\t}\n\n\t\t// If specific provider requested or only one logged in, use it directly\n\t\tif (loggedInProviders.length === 1 || requestedProvider) {\n\t\t\tconst provider = requestedProvider\n\t\t\t\t? loggedInProviders.find(\n\t\t\t\t\t\t(p) => p === requestedProvider || p.includes(requestedProvider),\n\t\t\t\t\t)\n\t\t\t\t: loggedInProviders[0];\n\n\t\t\tif (!provider) {\n\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\tshowError(`Not logged in to: ${requestedProvider}`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.performOAuthLogout(provider, showError);\n\t\t\tthis.isOAuthFlowActive = false;\n\t\t\treturn;\n\t\t}\n\n\t\t// Multiple providers - show selector\n\t\tthis.oauthLogoutView = new OAuthSelectorView({\n\t\t\tmodalManager: this.modalManager,\n\t\t\tui: this.renderContext.ui,\n\t\t\tmode: \"logout\",\n\t\t\tonProviderSelected: async (providerId) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.performOAuthLogout(providerId, showError);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonCancel: () => {\n\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\tthis.notificationView.showInfo(\"Logout cancelled\");\n\t\t\t},\n\t\t});\n\n\t\tthis.oauthLogoutView.show();\n\t}\n\n\t/**\n\t * Handle the /auth source-of-truth command.\n\t */\n\tasync handleSourceOfTruthPolicyCommand(\n\t\targumentText: string,\n\t\tshowError: (msg: string) => void,\n\t\tshowInfo: (msg: string) => void,\n\t): Promise<void> {\n\t\tconst args = argumentText.trim().split(/\\s+/).filter(Boolean);\n\t\tconst usage =\n\t\t\t\"Usage: /auth source-of-truth <provider> <area> [fallbackConnectionId]\\n\" +\n\t\t\t\" /auth source-of-truth clear <provider>\\n\" +\n\t\t\t\"Areas: analytics, billing, crm, hris, support\";\n\t\tif (\n\t\t\targs.length === 0 ||\n\t\t\t[\"help\", \"?\", \"-h\", \"--help\"].includes(args[0]?.toLowerCase() ?? \"\")\n\t\t) {\n\t\t\tshowInfo(usage);\n\t\t\treturn;\n\t\t}\n\n\t\tconst subcommand = args[0]?.toLowerCase();\n\t\ttry {\n\t\t\tif ([\"clear\", \"unset\", \"remove\"].includes(subcommand ?? \"\")) {\n\t\t\t\tconst provider = args[1];\n\t\t\t\tif (!provider || args.length > 2) {\n\t\t\t\t\tshowError(usage);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst { clearOAuthProviderSourceOfTruthPolicy } = await import(\n\t\t\t\t\t\"../../oauth/connectors.js\"\n\t\t\t\t);\n\t\t\t\tconst cleared = clearOAuthProviderSourceOfTruthPolicy(provider);\n\t\t\t\tshowInfo(\n\t\t\t\t\tcleared\n\t\t\t\t\t\t? `Source-of-truth policy metadata cleared for ${provider}.`\n\t\t\t\t\t\t: `No source-of-truth policy metadata was set for ${provider}.`,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst provider = args[0];\n\t\t\tconst area = args[1];\n\t\t\tconst fallbackConnectionId = args[2];\n\t\t\tif (!provider || !area || args.length > 3) {\n\t\t\t\tshowError(usage);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { configureOAuthProviderSourceOfTruthPolicy } = await import(\n\t\t\t\t\"../../oauth/connectors.js\"\n\t\t\t);\n\t\t\tconst configured = await configureOAuthProviderSourceOfTruthPolicy(\n\t\t\t\tprovider,\n\t\t\t\t{ area, fallbackConnectionId },\n\t\t\t);\n\t\t\tconst details = [\n\t\t\t\t`Source-of-truth policy configured for ${configured.provider}.`,\n\t\t\t\t`Area: ${configured.area}`,\n\t\t\t\t...(configured.fallbackConnectionId\n\t\t\t\t\t? [`Fallback connection: ${configured.fallbackConnectionId}`]\n\t\t\t\t\t: []),\n\t\t\t\t...(configured.connectorConnectionId\n\t\t\t\t\t? [`Connector connection: ${configured.connectorConnectionId}`]\n\t\t\t\t\t: []),\n\t\t\t\t...(configured.primaryConnectionId\n\t\t\t\t\t? [`Platform primary connection: ${configured.primaryConnectionId}`]\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t\"Platform policy will sync when the connector service is configured and reachable.\",\n\t\t\t\t\t\t]),\n\t\t\t\t...(configured.workspaceId\n\t\t\t\t\t? [`Workspace: ${configured.workspaceId}`]\n\t\t\t\t\t: []),\n\t\t\t];\n\t\t\tshowInfo(details.join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tshowError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate async performOAuthLogin(\n\t\tproviderId: SupportedOAuthProvider,\n\t\tmode: string | undefined,\n\t\tshowError: (msg: string) => void,\n\t): Promise<void> {\n\t\tconst { login } = await import(\"../../oauth/index.js\");\n\n\t\tconst { chatContainer, ui, requestRender } = this.renderContext;\n\t\tconst requiresPromptCode = providerId === \"openai-codex\";\n\n\t\tchatContainer.addChild(new Spacer(1));\n\t\tchatContainer.addChild(new Text(`Logging in to ${providerId}...`, 1, 0));\n\t\trequestRender();\n\n\t\ttry {\n\t\t\tawait login(providerId, {\n\t\t\t\tmode: mode as \"pro\" | \"console\" | undefined,\n\t\t\t\tonStatus: (status: string) => {\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tchatContainer.addChild(new Text(status, 1, 0));\n\t\t\t\t\trequestRender();\n\t\t\t\t},\n\t\t\t\tonAuthUrl: (url: string) => {\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tchatContainer.addChild(new Text(\"Opening browser to:\", 1, 0));\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tif (process.stdout.isTTY) {\n\t\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\ttheme.fg(\"accent\", formatLink(url, \"Open login URL\")),\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tchatContainer.addChild(new Text(url, 1, 0));\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tif (copyToOsc52(url)) {\n\t\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\t\t\"dim\",\n\t\t\t\t\t\t\t\t\t\"(Clipboard copy requested via OSC-52; paste in browser if supported.)\",\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\t}\n\t\t\t\t\tif (requiresPromptCode) {\n\t\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\"Complete authentication in the browser. If asked, paste the redirect URL or authorization code below.\",\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\"Complete authentication in the browser, then return here.\",\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\trequestRender();\n\n\t\t\t\t\t// Auto-open browser using execFile for security\n\t\t\t\t\tconst openCmd =\n\t\t\t\t\t\tprocess.platform === \"darwin\"\n\t\t\t\t\t\t\t? \"open\"\n\t\t\t\t\t\t\t: process.platform === \"win32\"\n\t\t\t\t\t\t\t\t? \"cmd\"\n\t\t\t\t\t\t\t\t: \"xdg-open\";\n\t\t\t\t\tconst args =\n\t\t\t\t\t\tprocess.platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n\t\t\t\t\texecFile(openCmd, args, (error) => {\n\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\tthis.notificationView.showInfo(\n\t\t\t\t\t\t\t\t\"Could not auto-open browser. Please copy the URL manually.\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonDeviceCode: (code: string, verificationUri: string) => {\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tchatContainer.addChild(new Text(\"Authenticate by visiting:\", 1, 0));\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tif (process.stdout.isTTY) {\n\t\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\t\t\"accent\",\n\t\t\t\t\t\t\t\t\tformatLink(verificationUri, \"Open verification URL\"),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tchatContainer.addChild(new Text(verificationUri, 1, 0));\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tif (copyToOsc52(verificationUri)) {\n\t\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\t\t\"dim\",\n\t\t\t\t\t\t\t\t\t\"(Clipboard copy requested via OSC-52; paste in browser if supported.)\",\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\t}\n\t\t\t\t\tchatContainer.addChild(new Text(`Enter code: ${code}`, 1, 0));\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\tnew Text(\"Waiting for authorization...\", 1, 0),\n\t\t\t\t\t);\n\t\t\t\t\trequestRender();\n\n\t\t\t\t\tconst openCmd =\n\t\t\t\t\t\tprocess.platform === \"darwin\"\n\t\t\t\t\t\t\t? \"open\"\n\t\t\t\t\t\t\t: process.platform === \"win32\"\n\t\t\t\t\t\t\t\t? \"cmd\"\n\t\t\t\t\t\t\t\t: \"xdg-open\";\n\t\t\t\t\tconst args =\n\t\t\t\t\t\tprocess.platform === \"win32\"\n\t\t\t\t\t\t\t? [\"/c\", \"start\", \"\", verificationUri]\n\t\t\t\t\t\t\t: [verificationUri];\n\t\t\t\t\texecFile(openCmd, args, (error) => {\n\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\tthis.notificationView.showInfo(\n\t\t\t\t\t\t\t\t\"Could not auto-open browser. Please copy the URL manually.\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonPromptCode: async () => {\n\t\t\t\t\tconst originalOnSubmit = this.editorCallbacks.onSubmit;\n\t\t\t\t\treturn new Promise<string>((resolve, reject) => {\n\t\t\t\t\t\tconst timeout = setTimeout(\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\treject(new Error(\"OAuth flow timed out after 5 minutes\"));\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t5 * 60 * 1000,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tthis.editorCallbacks.onSubmit = (text) => {\n\t\t\t\t\t\t\tconst trimmedText = text.trim();\n\n\t\t\t\t\t\t\tif (trimmedText.toLowerCase() === \"cancel\") {\n\t\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\t\tthis.editorCallbacks.clearEditor();\n\t\t\t\t\t\t\t\treject(new Error(\"OAuth flow cancelled by user\"));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Basic authorization code validation. OpenAI Codex also accepts\n\t\t\t\t\t\t\t// a full redirect URL for the manual fallback path.\n\t\t\t\t\t\t\tconst looksLikeOAuthValue =\n\t\t\t\t\t\t\t\tproviderId === \"openai-codex\"\n\t\t\t\t\t\t\t\t\t? trimmedText.length >= 10 &&\n\t\t\t\t\t\t\t\t\t\t(trimmedText.startsWith(\"http://\") ||\n\t\t\t\t\t\t\t\t\t\t\ttrimmedText.startsWith(\"https://\") ||\n\t\t\t\t\t\t\t\t\t\t\ttrimmedText.includes(\"code=\") ||\n\t\t\t\t\t\t\t\t\t\t\t/^[a-zA-Z0-9_#-]+$/.test(trimmedText))\n\t\t\t\t\t\t\t\t\t: false;\n\t\t\t\t\t\t\tif (!looksLikeOAuthValue) {\n\t\t\t\t\t\t\t\tthis.notificationView.showError(\n\t\t\t\t\t\t\t\t\t\"Invalid authorization code format. Please try again or type 'cancel'.\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tthis.editorCallbacks.clearEditor();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\tthis.editorCallbacks.clearEditor();\n\t\t\t\t\t\t\tresolve(trimmedText);\n\t\t\t\t\t\t};\n\t\t\t\t\t}).finally(() => {\n\t\t\t\t\t\tthis.editorCallbacks.onSubmit = originalOnSubmit;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tthis.notificationView.showToast(\n\t\t\t\t`Successfully authenticated with ${providerId}!`,\n\t\t\t\t\"success\",\n\t\t\t);\n\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\tchatContainer.addChild(\n\t\t\t\tnew Text(\n\t\t\t\t\t`Authentication complete. ${providerId} OAuth credentials saved.`,\n\t\t\t\t\t1,\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t);\n\t\t\trequestRender();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"Login failed\";\n\n\t\t\tlet errorDetail = message;\n\t\t\tif (message.includes(\"timeout\")) {\n\t\t\t\terrorDetail = \"OAuth flow timed out after 5 minutes. Please try again.\";\n\t\t\t} else if (message.includes(\"cancel\")) {\n\t\t\t\terrorDetail = \"OAuth flow cancelled by user.\";\n\t\t\t} else if (message.includes(\"Invalid\") || message.includes(\"failed\")) {\n\t\t\t\terrorDetail = `${message}. The authorization code may be expired or invalid.`;\n\t\t\t}\n\n\t\t\tshowError(errorDetail);\n\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\tchatContainer.addChild(new Text(`Login failed: ${errorDetail}`, 1, 0));\n\t\t\trequestRender();\n\t\t} finally {\n\t\t\tthis.isOAuthFlowActive = false;\n\t\t}\n\t}\n\n\tprivate async performOAuthLogout(\n\t\tproviderId: OAuthLogoutProvider,\n\t\tshowError: (msg: string) => void,\n\t): Promise<void> {\n\t\tconst { chatContainer, requestRender } = this.renderContext;\n\n\t\ttry {\n\t\t\tconst { logout } = await import(\"../../oauth/index.js\");\n\t\t\tawait logout(providerId);\n\n\t\t\tthis.notificationView.showToast(\n\t\t\t\t`${providerId} OAuth credentials removed`,\n\t\t\t\t\"success\",\n\t\t\t);\n\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\tchatContainer.addChild(\n\t\t\t\tnew Text(\n\t\t\t\t\t`Logged out from ${providerId}. OAuth credentials removed.`,\n\t\t\t\t\t1,\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t);\n\t\t\trequestRender();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"Logout failed\";\n\t\t\tshowError(message);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"oauth-flow-controller.js","sourceRoot":"","sources":["../../../src/cli-tui/oauth/oauth-flow-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAY,IAAI,EAAE,MAAM,cAAc,CAAC;AAMtD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAG7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,YAAY,GAAG,cAAc,CAAC;AACpC,MAAM,YAAY,GAAG,QAAQ,CAAC;AAE9B,SAAS,WAAW,CAAC,KAAa;IACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,GAAG,MAAM,GAAG,YAAY,EAAE,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC;AACb,CAAC;AA+BD;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IAS/B,YAAY,OAAmC;QAJvC,sBAAiB,GAAG,KAAK,CAAC;QAKjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,QAAQ;QACP,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACvB,YAAoB,EACpB,SAAgC;QAEhC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,SAAS,CACR,2EAA2E,CAC3E,CAAC;YACF,OAAO;QACR,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAE9B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE/C,uEAAuE;QACvE,8CAA8C;QAC9C,IAAI,iBAAqC,CAAC;QAC1C,IAAI,aAAiC,CAAC;QAEtC,IAAI,IAAI,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACnD,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,IAAI,EAAE,CAAC;oBACV,IAAI,iBAAiB,KAAK,cAAc,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;wBAClE,aAAa,GAAG,IAAI,CAAC;oBACtB,CAAC;yBAAM,CAAC;wBACP,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;wBAC/B,SAAS,CACR,4HAA4H,CAC5H,CAAC;wBACF,OAAO;oBACR,CAAC;gBACF,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,iBAAiB,GAAG,IAAI,CAAC;YAC1B,CAAC;QACF,CAAC;QAED,sBAAsB;QACtB,MAAM,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAClE,sBAAsB,CACtB,CAAC;QAEF,oCAAoC;QACpC,MAAM,uBAAuB,EAAE,CAAC;QAEhC,0BAA0B;QAC1B,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEjE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,SAAS,CAAC,8BAA8B,CAAC,CAAC;YAC1C,OAAO;QACR,CAAC;QAED,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CACrC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,cAAc,CAC5C,CAAC;QACF,IAAI,CAAC,iBAAiB,IAAI,eAAe,EAAE,CAAC;YAC3C,MAAM,IAAI,CAAC,iBAAiB,CAC3B,eAAe,CAAC,EAAE,EAClB,aAAa,EACb,SAAS,CACT,CAAC;YACF,OAAO;QACR,CAAC;QAED,uEAAuE;QACvE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,EAAE,CAAC;YACjD,MAAM,QAAQ,GAAG,iBAAiB;gBACjC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,iBAAiB,CAAC;oBACnD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACzD,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAEhB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,SAAS,CAAC,qBAAqB,iBAAiB,EAAE,CAAC,CAAC;gBACpD,OAAO;YACR,CAAC;YAED,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;YACpE,OAAO;QACR,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,cAAc,GAAG,IAAI,iBAAiB,CAAC;YAC3C,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE;YACzB,IAAI,EAAE,OAAO;YACb,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACxC,IAAI,CAAC;oBACJ,MAAM,IAAI,CAAC,iBAAiB,CAC3B,UAAoC,EACpC,SAAS,EACT,SAAS,CACT,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACV,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAChC,CAAC;YACF,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;gBACd,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YACnD,CAAC;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CACxB,YAAoB,EACpB,SAAgC,EAChC,QAA+B;QAE/B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,SAAS,CACR,2EAA2E,CAC3E,CAAC;YACF,OAAO;QACR,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAE9B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,IAAI,IAAI,IAAI,CAAC;QAEvC,sBAAsB;QACtB,MAAM,EAAE,0CAA0C,EAAE,GAAG,MAAM,MAAM,CAClE,sBAAsB,CACtB,CAAC;QAEF,0BAA0B;QAC1B,MAAM,iBAAiB,GACtB,MAAM,0CAA0C,EAAE,CAAC;QAEpD,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,QAAQ,CAAC,iDAAiD,CAAC,CAAC;YAC5D,OAAO;QACR,CAAC;QAED,wEAAwE;QACxE,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,iBAAiB;gBACjC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,iBAAiB,IAAI,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAC/D;gBACF,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,SAAS,CAAC,qBAAqB,iBAAiB,EAAE,CAAC,CAAC;gBACpD,OAAO;YACR,CAAC;YAED,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACnD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,OAAO;QACR,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,eAAe,GAAG,IAAI,iBAAiB,CAAC;YAC5C,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE;YACzB,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,iBAAiB;YAC5B,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACxC,IAAI,CAAC;oBACJ,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBACtD,CAAC;wBAAS,CAAC;oBACV,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAChC,CAAC;YACF,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;gBACd,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YACpD,CAAC;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gCAAgC,CACrC,YAAoB,EACpB,SAAgC,EAChC,QAA+B;QAE/B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,KAAK,GACV,yEAAyE;YACzE,iDAAiD;YACjD,+CAA+C,CAAC;QACjD,IACC,IAAI,CAAC,MAAM,KAAK,CAAC;YACjB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EACnE,CAAC;YACF,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,OAAO;QACR,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC;YACJ,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,SAAS,CAAC,KAAK,CAAC,CAAC;oBACjB,OAAO;gBACR,CAAC;gBACD,MAAM,EAAE,qCAAqC,EAAE,GAAG,MAAM,MAAM,CAC7D,2BAA2B,CAC3B,CAAC;gBACF,MAAM,OAAO,GAAG,qCAAqC,CAAC,QAAQ,CAAC,CAAC;gBAChE,QAAQ,CACP,OAAO;oBACN,CAAC,CAAC,+CAA+C,QAAQ,GAAG;oBAC5D,CAAC,CAAC,kDAAkD,QAAQ,GAAG,CAChE,CAAC;gBACF,OAAO;YACR,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,oBAAoB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,SAAS,CAAC,KAAK,CAAC,CAAC;gBACjB,OAAO;YACR,CAAC;YAED,MAAM,EAAE,yCAAyC,EAAE,GAAG,MAAM,MAAM,CACjE,2BAA2B,CAC3B,CAAC;YACF,MAAM,UAAU,GAAG,MAAM,yCAAyC,CACjE,QAAQ,EACR,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAC9B,CAAC;YACF,MAAM,OAAO,GAAG;gBACf,yCAAyC,UAAU,CAAC,QAAQ,GAAG;gBAC/D,SAAS,UAAU,CAAC,IAAI,EAAE;gBAC1B,GAAG,CAAC,UAAU,CAAC,oBAAoB;oBAClC,CAAC,CAAC,CAAC,wBAAwB,UAAU,CAAC,oBAAoB,EAAE,CAAC;oBAC7D,CAAC,CAAC,EAAE,CAAC;gBACN,GAAG,CAAC,UAAU,CAAC,qBAAqB;oBACnC,CAAC,CAAC,CAAC,yBAAyB,UAAU,CAAC,qBAAqB,EAAE,CAAC;oBAC/D,CAAC,CAAC,EAAE,CAAC;gBACN,GAAG,CAAC,UAAU,CAAC,mBAAmB;oBACjC,CAAC,CAAC,CAAC,gCAAgC,UAAU,CAAC,mBAAmB,EAAE,CAAC;oBACpE,CAAC,CAAC;wBACA,mFAAmF;qBACnF,CAAC;gBACJ,GAAG,CAAC,UAAU,CAAC,WAAW;oBACzB,CAAC,CAAC,CAAC,cAAc,UAAU,CAAC,WAAW,EAAE,CAAC;oBAC1C,CAAC,CAAC,EAAE,CAAC;aACN,CAAC;YACF,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,SAAS,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC9B,UAAkC,EAClC,IAAwB,EACxB,SAAgC;QAEhC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAEvD,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAChE,MAAM,kBAAkB,GAAG,UAAU,KAAK,cAAc,CAAC;QAEzD,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,iBAAiB,UAAU,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzE,aAAa,EAAE,CAAC;QAEhB,IAAI,CAAC;YACJ,MAAM,KAAK,CAAC,UAAU,EAAE;gBACvB,IAAI;gBACJ,QAAQ,EAAE,CAAC,MAAc,EAAE,EAAE;oBAC5B,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtC,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC/C,aAAa,EAAE,CAAC;gBACjB,CAAC;gBACD,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE;oBAC1B,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtC,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC9D,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;wBAC1B,aAAa,CAAC,QAAQ,CACrB,IAAI,IAAI,CACP,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,EACrD,CAAC,EACD,CAAC,CACD,CACD,CAAC;oBACH,CAAC;oBACD,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5C,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;wBACtB,aAAa,CAAC,QAAQ,CACrB,IAAI,IAAI,CACP,KAAK,CAAC,EAAE,CACP,KAAK,EACL,uEAAuE,CACvE,EACD,CAAC,EACD,CAAC,CACD,CACD,CAAC;wBACF,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvC,CAAC;oBACD,IAAI,kBAAkB,EAAE,CAAC;wBACxB,aAAa,CAAC,QAAQ,CACrB,IAAI,IAAI,CACP,uGAAuG,EACvG,CAAC,EACD,CAAC,CACD,CACD,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACP,aAAa,CAAC,QAAQ,CACrB,IAAI,IAAI,CACP,2DAA2D,EAC3D,CAAC,EACD,CAAC,CACD,CACD,CAAC;oBACH,CAAC;oBACD,aAAa,EAAE,CAAC;oBAEhB,gDAAgD;oBAChD,MAAM,OAAO,GACZ,OAAO,CAAC,QAAQ,KAAK,QAAQ;wBAC5B,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;4BAC7B,CAAC,CAAC,KAAK;4BACP,CAAC,CAAC,UAAU,CAAC;oBAChB,MAAM,IAAI,GACT,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACjE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;wBACjC,IAAI,KAAK,EAAE,CAAC;4BACX,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAC7B,4DAA4D,CAC5D,CAAC;wBACH,CAAC;oBACF,CAAC,CAAC,CAAC;gBACJ,CAAC;gBACD,YAAY,EAAE,CAAC,IAAY,EAAE,eAAuB,EAAE,EAAE;oBACvD,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtC,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACpE,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;wBAC1B,aAAa,CAAC,QAAQ,CACrB,IAAI,IAAI,CACP,KAAK,CAAC,EAAE,CACP,QAAQ,EACR,UAAU,CAAC,eAAe,EAAE,uBAAuB,CAAC,CACpD,EACD,CAAC,EACD,CAAC,CACD,CACD,CAAC;oBACH,CAAC;oBACD,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxD,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtC,IAAI,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;wBAClC,aAAa,CAAC,QAAQ,CACrB,IAAI,IAAI,CACP,KAAK,CAAC,EAAE,CACP,KAAK,EACL,uEAAuE,CACvE,EACD,CAAC,EACD,CAAC,CACD,CACD,CAAC;wBACF,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvC,CAAC;oBACD,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC9D,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtC,aAAa,CAAC,QAAQ,CACrB,IAAI,IAAI,CAAC,8BAA8B,EAAE,CAAC,EAAE,CAAC,CAAC,CAC9C,CAAC;oBACF,aAAa,EAAE,CAAC;oBAEhB,MAAM,OAAO,GACZ,OAAO,CAAC,QAAQ,KAAK,QAAQ;wBAC5B,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;4BAC7B,CAAC,CAAC,KAAK;4BACP,CAAC,CAAC,UAAU,CAAC;oBAChB,MAAM,IAAI,GACT,OAAO,CAAC,QAAQ,KAAK,OAAO;wBAC3B,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,CAAC;wBACtC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;oBACtB,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;wBACjC,IAAI,KAAK,EAAE,CAAC;4BACX,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAC7B,4DAA4D,CAC5D,CAAC;wBACH,CAAC;oBACF,CAAC,CAAC,CAAC;gBACJ,CAAC;gBACD,YAAY,EAAE,KAAK,IAAI,EAAE;oBACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;oBACvD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBAC9C,MAAM,OAAO,GAAG,UAAU,CACzB,GAAG,EAAE;4BACJ,MAAM,CAAC,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;wBAC3D,CAAC,EACD,CAAC,GAAG,EAAE,GAAG,IAAI,CACb,CAAC;wBAEF,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE;4BACxC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;4BAEhC,IAAI,WAAW,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;gCAC5C,YAAY,CAAC,OAAO,CAAC,CAAC;gCACtB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;gCACnC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;gCAClD,OAAO;4BACR,CAAC;4BAED,iEAAiE;4BACjE,oDAAoD;4BACpD,MAAM,mBAAmB,GACxB,UAAU,KAAK,cAAc;gCAC5B,CAAC,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE;oCACzB,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC;wCACjC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC;wCAClC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;wCAC7B,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gCACxC,CAAC,CAAC,KAAK,CAAC;4BACV,IAAI,CAAC,mBAAmB,EAAE,CAAC;gCAC1B,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAC9B,uEAAuE,CACvE,CAAC;gCACF,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;gCACnC,OAAO;4BACR,CAAC;4BAED,YAAY,CAAC,OAAO,CAAC,CAAC;4BACtB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;4BACnC,OAAO,CAAC,WAAW,CAAC,CAAC;wBACtB,CAAC,CAAC;oBACH,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;wBACf,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,gBAAgB,CAAC;oBAClD,CAAC,CAAC,CAAC;gBACJ,CAAC;aACD,CAAC,CAAC;YAEH,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAC9B,mCAAmC,UAAU,GAAG,EAChD,SAAS,CACT,CAAC;YACF,MAAM,iBAAiB,GACtB,UAAU,KAAK,cAAc,IAAI,IAAI,KAAK,WAAW;gBACpD,CAAC,CAAC,6DAA6D;gBAC/D,CAAC,CAAC,4BAA4B,UAAU,2BAA2B,CAAC;YACtE,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,aAAa,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;YAExE,IAAI,WAAW,GAAG,OAAO,CAAC;YAC1B,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,WAAW,GAAG,yDAAyD,CAAC;YACzE,CAAC;iBAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvC,WAAW,GAAG,+BAA+B,CAAC;YAC/C,CAAC;iBAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtE,WAAW,GAAG,GAAG,OAAO,qDAAqD,CAAC;YAC/E,CAAC;YAED,SAAS,CAAC,WAAW,CAAC,CAAC;YACvB,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,iBAAiB,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvE,aAAa,EAAE,CAAC;QACjB,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAChC,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC/B,UAA+B,EAC/B,SAAgC;QAEhC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAE5D,IAAI,CAAC;YACJ,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YACxD,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YAEzB,MAAM,OAAO,GACZ,UAAU,KAAK,cAAc;gBAC5B,CAAC,CAAC,8BAA8B;gBAChC,CAAC,CAAC,GAAG,UAAU,4BAA4B,CAAC;YAC9C,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACpD,aAAa,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChD,aAAa,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACzE,SAAS,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;IACF,CAAC;CACD","sourcesContent":["import { execFile } from \"node:child_process\";\nimport { Spacer, type TUI, Text } from \"@evalops/tui\";\nimport type { Container } from \"@evalops/tui\";\nimport type {\n\tOAuthLogoutProvider,\n\tSupportedOAuthProvider,\n} from \"../../oauth/index.js\";\nimport { theme } from \"../../theme/theme.js\";\nimport type { ModalManager } from \"../modal-manager.js\";\nimport type { NotificationView } from \"../notification-view.js\";\nimport { OAuthSelectorView } from \"../selectors/oauth-selector-view.js\";\nimport { formatLink } from \"../utils/links.js\";\n\nconst OSC52_PREFIX = \"\\u001b]52;c;\";\nconst OSC52_SUFFIX = \"\\u0007\";\n\nfunction copyToOsc52(value: string): boolean {\n\tif (!process.stdout.isTTY) {\n\t\treturn false;\n\t}\n\tconst base64 = Buffer.from(value).toString(\"base64\");\n\tprocess.stdout.write(`${OSC52_PREFIX}${base64}${OSC52_SUFFIX}`);\n\treturn true;\n}\n\n/**\n * Callback interface for editor interactions during OAuth flow.\n */\nexport interface OAuthEditorCallbacks {\n\tclearEditor(): void;\n\tgetText(): string;\n\tsetText(text: string): void;\n\tonSubmit: ((text: string) => void) | undefined;\n}\n\n/**\n * Context for rendering OAuth UI elements.\n */\nexport interface OAuthRenderContext {\n\tchatContainer: Container;\n\tui: TUI;\n\trequestRender(): void;\n}\n\n/**\n * Options for the OAuth flow controller.\n */\nexport interface OAuthFlowControllerOptions {\n\tmodalManager: ModalManager;\n\tnotificationView: NotificationView;\n\trenderContext: OAuthRenderContext;\n\teditorCallbacks: OAuthEditorCallbacks;\n}\n\n/**\n * Controller for handling OAuth login and logout flows.\n *\n * Extracts OAuth flow logic from TuiRenderer to provide a cohesive unit\n * for authentication operations.\n */\nexport class OAuthFlowController {\n\tprivate readonly modalManager: ModalManager;\n\tprivate readonly notificationView: NotificationView;\n\tprivate readonly renderContext: OAuthRenderContext;\n\tprivate readonly editorCallbacks: OAuthEditorCallbacks;\n\tprivate isOAuthFlowActive = false;\n\tprivate oauthLoginView?: OAuthSelectorView;\n\tprivate oauthLogoutView?: OAuthSelectorView;\n\n\tconstructor(options: OAuthFlowControllerOptions) {\n\t\tthis.modalManager = options.modalManager;\n\t\tthis.notificationView = options.notificationView;\n\t\tthis.renderContext = options.renderContext;\n\t\tthis.editorCallbacks = options.editorCallbacks;\n\t}\n\n\t/**\n\t * Check if an OAuth flow is currently active.\n\t */\n\tisActive(): boolean {\n\t\treturn this.isOAuthFlowActive;\n\t}\n\n\t/**\n\t * Handle the /login command.\n\t */\n\tasync handleLoginCommand(\n\t\targumentText: string,\n\t\tshowError: (msg: string) => void,\n\t): Promise<void> {\n\t\tif (this.isOAuthFlowActive) {\n\t\t\tshowError(\n\t\t\t\t\"An OAuth flow is already in progress. Please complete or cancel it first.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOAuthFlowActive = true;\n\n\t\tconst args = argumentText.trim().toLowerCase();\n\n\t\t// Parse argument as a provider. Anthropic-specific mode arguments were\n\t\t// retired with Anthropic OAuth login support.\n\t\tlet requestedProvider: string | undefined;\n\t\tlet requestedMode: string | undefined;\n\n\t\tif (args) {\n\t\t\tif (args.includes(\":\")) {\n\t\t\t\tconst parts = args.split(\":\").map((s) => s.trim());\n\t\t\t\trequestedProvider = parts[0];\n\t\t\t\tconst mode = parts[1];\n\t\t\t\tif (mode) {\n\t\t\t\t\tif (requestedProvider === \"openai-codex\" && mode === \"responses\") {\n\t\t\t\t\t\trequestedMode = mode;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\t\t\tshowError(\n\t\t\t\t\t\t\t\"Provider login modes are no longer supported, except /login openai-codex:responses for legacy Codex Responses credentials.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trequestedProvider = args;\n\t\t\t}\n\t\t}\n\n\t\t// Import OAuth system\n\t\tconst { getOAuthProviders, migrateOAuthCredentials } = await import(\n\t\t\t\"../../oauth/index.js\"\n\t\t);\n\n\t\t// Migrate old credentials if needed\n\t\tawait migrateOAuthCredentials();\n\n\t\t// Get available providers\n\t\tconst providers = getOAuthProviders().filter((p) => p.available);\n\n\t\tif (providers.length === 0) {\n\t\t\tthis.isOAuthFlowActive = false;\n\t\t\tshowError(\"No OAuth providers available\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst defaultProvider = providers.find(\n\t\t\t(provider) => provider.id === \"openai-codex\",\n\t\t);\n\t\tif (!requestedProvider && defaultProvider) {\n\t\t\tawait this.performOAuthLogin(\n\t\t\t\tdefaultProvider.id,\n\t\t\t\trequestedMode,\n\t\t\t\tshowError,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// If only one provider or specific provider requested, use it directly\n\t\tif (providers.length === 1 || requestedProvider) {\n\t\t\tconst provider = requestedProvider\n\t\t\t\t? (providers.find((p) => p.id === requestedProvider) ??\n\t\t\t\t\tproviders.find((p) => p.id.includes(requestedProvider)))\n\t\t\t\t: providers[0];\n\n\t\t\tif (!provider) {\n\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\tshowError(`Unknown provider: ${requestedProvider}`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.performOAuthLogin(provider.id, requestedMode, showError);\n\t\t\treturn;\n\t\t}\n\n\t\t// Multiple providers - show selector\n\t\tthis.oauthLoginView = new OAuthSelectorView({\n\t\t\tmodalManager: this.modalManager,\n\t\t\tui: this.renderContext.ui,\n\t\t\tmode: \"login\",\n\t\t\tonProviderSelected: async (providerId) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.performOAuthLogin(\n\t\t\t\t\t\tproviderId as SupportedOAuthProvider,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tshowError,\n\t\t\t\t\t);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonCancel: () => {\n\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\tthis.notificationView.showInfo(\"Login cancelled\");\n\t\t\t},\n\t\t});\n\n\t\tthis.oauthLoginView.show();\n\t}\n\n\t/**\n\t * Handle the /logout command.\n\t */\n\tasync handleLogoutCommand(\n\t\targumentText: string,\n\t\tshowError: (msg: string) => void,\n\t\tshowInfo: (msg: string) => void,\n\t): Promise<void> {\n\t\tif (this.isOAuthFlowActive) {\n\t\t\tshowError(\n\t\t\t\t\"An OAuth flow is already in progress. Please complete or cancel it first.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOAuthFlowActive = true;\n\n\t\tconst args = argumentText.trim().toLowerCase();\n\t\tconst requestedProvider = args || null;\n\n\t\t// Import OAuth system\n\t\tconst { listOAuthLogoutProvidersWithCodexAppServer } = await import(\n\t\t\t\"../../oauth/index.js\"\n\t\t);\n\n\t\t// Get logged-in providers\n\t\tconst loggedInProviders =\n\t\t\tawait listOAuthLogoutProvidersWithCodexAppServer();\n\n\t\tif (loggedInProviders.length === 0) {\n\t\t\tthis.isOAuthFlowActive = false;\n\t\t\tshowInfo(\"No OAuth providers logged in. Use /login first.\");\n\t\t\treturn;\n\t\t}\n\n\t\t// If specific provider requested or only one logged in, use it directly\n\t\tif (loggedInProviders.length === 1 || requestedProvider) {\n\t\t\tconst provider = requestedProvider\n\t\t\t\t? loggedInProviders.find(\n\t\t\t\t\t\t(p) => p === requestedProvider || p.includes(requestedProvider),\n\t\t\t\t\t)\n\t\t\t\t: loggedInProviders[0];\n\n\t\t\tif (!provider) {\n\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\tshowError(`Not logged in to: ${requestedProvider}`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.performOAuthLogout(provider, showError);\n\t\t\tthis.isOAuthFlowActive = false;\n\t\t\treturn;\n\t\t}\n\n\t\t// Multiple providers - show selector\n\t\tthis.oauthLogoutView = new OAuthSelectorView({\n\t\t\tmodalManager: this.modalManager,\n\t\t\tui: this.renderContext.ui,\n\t\t\tmode: \"logout\",\n\t\t\tproviders: loggedInProviders,\n\t\t\tonProviderSelected: async (providerId) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.performOAuthLogout(providerId, showError);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonCancel: () => {\n\t\t\t\tthis.isOAuthFlowActive = false;\n\t\t\t\tthis.notificationView.showInfo(\"Logout cancelled\");\n\t\t\t},\n\t\t});\n\n\t\tthis.oauthLogoutView.show();\n\t}\n\n\t/**\n\t * Handle the /auth source-of-truth command.\n\t */\n\tasync handleSourceOfTruthPolicyCommand(\n\t\targumentText: string,\n\t\tshowError: (msg: string) => void,\n\t\tshowInfo: (msg: string) => void,\n\t): Promise<void> {\n\t\tconst args = argumentText.trim().split(/\\s+/).filter(Boolean);\n\t\tconst usage =\n\t\t\t\"Usage: /auth source-of-truth <provider> <area> [fallbackConnectionId]\\n\" +\n\t\t\t\" /auth source-of-truth clear <provider>\\n\" +\n\t\t\t\"Areas: analytics, billing, crm, hris, support\";\n\t\tif (\n\t\t\targs.length === 0 ||\n\t\t\t[\"help\", \"?\", \"-h\", \"--help\"].includes(args[0]?.toLowerCase() ?? \"\")\n\t\t) {\n\t\t\tshowInfo(usage);\n\t\t\treturn;\n\t\t}\n\n\t\tconst subcommand = args[0]?.toLowerCase();\n\t\ttry {\n\t\t\tif ([\"clear\", \"unset\", \"remove\"].includes(subcommand ?? \"\")) {\n\t\t\t\tconst provider = args[1];\n\t\t\t\tif (!provider || args.length > 2) {\n\t\t\t\t\tshowError(usage);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst { clearOAuthProviderSourceOfTruthPolicy } = await import(\n\t\t\t\t\t\"../../oauth/connectors.js\"\n\t\t\t\t);\n\t\t\t\tconst cleared = clearOAuthProviderSourceOfTruthPolicy(provider);\n\t\t\t\tshowInfo(\n\t\t\t\t\tcleared\n\t\t\t\t\t\t? `Source-of-truth policy metadata cleared for ${provider}.`\n\t\t\t\t\t\t: `No source-of-truth policy metadata was set for ${provider}.`,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst provider = args[0];\n\t\t\tconst area = args[1];\n\t\t\tconst fallbackConnectionId = args[2];\n\t\t\tif (!provider || !area || args.length > 3) {\n\t\t\t\tshowError(usage);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { configureOAuthProviderSourceOfTruthPolicy } = await import(\n\t\t\t\t\"../../oauth/connectors.js\"\n\t\t\t);\n\t\t\tconst configured = await configureOAuthProviderSourceOfTruthPolicy(\n\t\t\t\tprovider,\n\t\t\t\t{ area, fallbackConnectionId },\n\t\t\t);\n\t\t\tconst details = [\n\t\t\t\t`Source-of-truth policy configured for ${configured.provider}.`,\n\t\t\t\t`Area: ${configured.area}`,\n\t\t\t\t...(configured.fallbackConnectionId\n\t\t\t\t\t? [`Fallback connection: ${configured.fallbackConnectionId}`]\n\t\t\t\t\t: []),\n\t\t\t\t...(configured.connectorConnectionId\n\t\t\t\t\t? [`Connector connection: ${configured.connectorConnectionId}`]\n\t\t\t\t\t: []),\n\t\t\t\t...(configured.primaryConnectionId\n\t\t\t\t\t? [`Platform primary connection: ${configured.primaryConnectionId}`]\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t\"Platform policy will sync when the connector service is configured and reachable.\",\n\t\t\t\t\t\t]),\n\t\t\t\t...(configured.workspaceId\n\t\t\t\t\t? [`Workspace: ${configured.workspaceId}`]\n\t\t\t\t\t: []),\n\t\t\t];\n\t\t\tshowInfo(details.join(\"\\n\"));\n\t\t} catch (error) {\n\t\t\tshowError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate async performOAuthLogin(\n\t\tproviderId: SupportedOAuthProvider,\n\t\tmode: string | undefined,\n\t\tshowError: (msg: string) => void,\n\t): Promise<void> {\n\t\tconst { login } = await import(\"../../oauth/index.js\");\n\n\t\tconst { chatContainer, ui, requestRender } = this.renderContext;\n\t\tconst requiresPromptCode = providerId === \"openai-codex\";\n\n\t\tchatContainer.addChild(new Spacer(1));\n\t\tchatContainer.addChild(new Text(`Logging in to ${providerId}...`, 1, 0));\n\t\trequestRender();\n\n\t\ttry {\n\t\t\tawait login(providerId, {\n\t\t\t\tmode,\n\t\t\t\tonStatus: (status: string) => {\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tchatContainer.addChild(new Text(status, 1, 0));\n\t\t\t\t\trequestRender();\n\t\t\t\t},\n\t\t\t\tonAuthUrl: (url: string) => {\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tchatContainer.addChild(new Text(\"Opening browser to:\", 1, 0));\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tif (process.stdout.isTTY) {\n\t\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\ttheme.fg(\"accent\", formatLink(url, \"Open login URL\")),\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tchatContainer.addChild(new Text(url, 1, 0));\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tif (copyToOsc52(url)) {\n\t\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\t\t\"dim\",\n\t\t\t\t\t\t\t\t\t\"(Clipboard copy requested via OSC-52; paste in browser if supported.)\",\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\t}\n\t\t\t\t\tif (requiresPromptCode) {\n\t\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\"Complete authentication in the browser. If asked, paste the redirect URL or authorization code below.\",\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\"Complete authentication in the browser, then return here.\",\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\trequestRender();\n\n\t\t\t\t\t// Auto-open browser using execFile for security\n\t\t\t\t\tconst openCmd =\n\t\t\t\t\t\tprocess.platform === \"darwin\"\n\t\t\t\t\t\t\t? \"open\"\n\t\t\t\t\t\t\t: process.platform === \"win32\"\n\t\t\t\t\t\t\t\t? \"cmd\"\n\t\t\t\t\t\t\t\t: \"xdg-open\";\n\t\t\t\t\tconst args =\n\t\t\t\t\t\tprocess.platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n\t\t\t\t\texecFile(openCmd, args, (error) => {\n\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\tthis.notificationView.showInfo(\n\t\t\t\t\t\t\t\t\"Could not auto-open browser. Please copy the URL manually.\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonDeviceCode: (code: string, verificationUri: string) => {\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tchatContainer.addChild(new Text(\"Authenticate by visiting:\", 1, 0));\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tif (process.stdout.isTTY) {\n\t\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\t\t\"accent\",\n\t\t\t\t\t\t\t\t\tformatLink(verificationUri, \"Open verification URL\"),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tchatContainer.addChild(new Text(verificationUri, 1, 0));\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tif (copyToOsc52(verificationUri)) {\n\t\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\t\t\"dim\",\n\t\t\t\t\t\t\t\t\t\"(Clipboard copy requested via OSC-52; paste in browser if supported.)\",\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\t}\n\t\t\t\t\tchatContainer.addChild(new Text(`Enter code: ${code}`, 1, 0));\n\t\t\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\t\t\tchatContainer.addChild(\n\t\t\t\t\t\tnew Text(\"Waiting for authorization...\", 1, 0),\n\t\t\t\t\t);\n\t\t\t\t\trequestRender();\n\n\t\t\t\t\tconst openCmd =\n\t\t\t\t\t\tprocess.platform === \"darwin\"\n\t\t\t\t\t\t\t? \"open\"\n\t\t\t\t\t\t\t: process.platform === \"win32\"\n\t\t\t\t\t\t\t\t? \"cmd\"\n\t\t\t\t\t\t\t\t: \"xdg-open\";\n\t\t\t\t\tconst args =\n\t\t\t\t\t\tprocess.platform === \"win32\"\n\t\t\t\t\t\t\t? [\"/c\", \"start\", \"\", verificationUri]\n\t\t\t\t\t\t\t: [verificationUri];\n\t\t\t\t\texecFile(openCmd, args, (error) => {\n\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\tthis.notificationView.showInfo(\n\t\t\t\t\t\t\t\t\"Could not auto-open browser. Please copy the URL manually.\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonPromptCode: async () => {\n\t\t\t\t\tconst originalOnSubmit = this.editorCallbacks.onSubmit;\n\t\t\t\t\treturn new Promise<string>((resolve, reject) => {\n\t\t\t\t\t\tconst timeout = setTimeout(\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\treject(new Error(\"OAuth flow timed out after 5 minutes\"));\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t5 * 60 * 1000,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tthis.editorCallbacks.onSubmit = (text) => {\n\t\t\t\t\t\t\tconst trimmedText = text.trim();\n\n\t\t\t\t\t\t\tif (trimmedText.toLowerCase() === \"cancel\") {\n\t\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\t\tthis.editorCallbacks.clearEditor();\n\t\t\t\t\t\t\t\treject(new Error(\"OAuth flow cancelled by user\"));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Basic authorization code validation. OpenAI Codex also accepts\n\t\t\t\t\t\t\t// a full redirect URL for the manual fallback path.\n\t\t\t\t\t\t\tconst looksLikeOAuthValue =\n\t\t\t\t\t\t\t\tproviderId === \"openai-codex\"\n\t\t\t\t\t\t\t\t\t? trimmedText.length >= 10 &&\n\t\t\t\t\t\t\t\t\t\t(trimmedText.startsWith(\"http://\") ||\n\t\t\t\t\t\t\t\t\t\t\ttrimmedText.startsWith(\"https://\") ||\n\t\t\t\t\t\t\t\t\t\t\ttrimmedText.includes(\"code=\") ||\n\t\t\t\t\t\t\t\t\t\t\t/^[a-zA-Z0-9_#-]+$/.test(trimmedText))\n\t\t\t\t\t\t\t\t\t: false;\n\t\t\t\t\t\t\tif (!looksLikeOAuthValue) {\n\t\t\t\t\t\t\t\tthis.notificationView.showError(\n\t\t\t\t\t\t\t\t\t\"Invalid authorization code format. Please try again or type 'cancel'.\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tthis.editorCallbacks.clearEditor();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\tthis.editorCallbacks.clearEditor();\n\t\t\t\t\t\t\tresolve(trimmedText);\n\t\t\t\t\t\t};\n\t\t\t\t\t}).finally(() => {\n\t\t\t\t\t\tthis.editorCallbacks.onSubmit = originalOnSubmit;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tthis.notificationView.showToast(\n\t\t\t\t`Successfully authenticated with ${providerId}!`,\n\t\t\t\t\"success\",\n\t\t\t);\n\t\t\tconst completionMessage =\n\t\t\t\tproviderId === \"openai-codex\" && mode !== \"responses\"\n\t\t\t\t\t? \"Authentication complete. Codex app-server sign-in is ready.\"\n\t\t\t\t\t: `Authentication complete. ${providerId} OAuth credentials saved.`;\n\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\tchatContainer.addChild(new Text(completionMessage, 1, 0));\n\t\t\trequestRender();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"Login failed\";\n\n\t\t\tlet errorDetail = message;\n\t\t\tif (message.includes(\"timeout\")) {\n\t\t\t\terrorDetail = \"OAuth flow timed out after 5 minutes. Please try again.\";\n\t\t\t} else if (message.includes(\"cancel\")) {\n\t\t\t\terrorDetail = \"OAuth flow cancelled by user.\";\n\t\t\t} else if (message.includes(\"Invalid\") || message.includes(\"failed\")) {\n\t\t\t\terrorDetail = `${message}. The authorization code may be expired or invalid.`;\n\t\t\t}\n\n\t\t\tshowError(errorDetail);\n\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\tchatContainer.addChild(new Text(`Login failed: ${errorDetail}`, 1, 0));\n\t\t\trequestRender();\n\t\t} finally {\n\t\t\tthis.isOAuthFlowActive = false;\n\t\t}\n\t}\n\n\tprivate async performOAuthLogout(\n\t\tproviderId: OAuthLogoutProvider,\n\t\tshowError: (msg: string) => void,\n\t): Promise<void> {\n\t\tconst { chatContainer, requestRender } = this.renderContext;\n\n\t\ttry {\n\t\t\tconst { logout } = await import(\"../../oauth/index.js\");\n\t\t\tawait logout(providerId);\n\n\t\t\tconst message =\n\t\t\t\tproviderId === \"openai-codex\"\n\t\t\t\t\t? \"Signed out from openai-codex\"\n\t\t\t\t\t: `${providerId} OAuth credentials removed`;\n\t\t\tthis.notificationView.showToast(message, \"success\");\n\t\t\tchatContainer.addChild(new Spacer(1));\n\t\t\tchatContainer.addChild(new Text(message, 1, 0));\n\t\t\trequestRender();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"Logout failed\";\n\t\t\tshowError(message);\n\t\t}\n\t}\n}\n"]}
@@ -5,6 +5,7 @@ interface OAuthSelectorViewOptions {
5
5
  modalManager: ModalManager;
6
6
  ui: TUI;
7
7
  mode: "login" | "logout";
8
+ providers?: OAuthLogoutProvider[];
8
9
  onProviderSelected: (providerId: SupportedOAuthProvider | OAuthLogoutProvider) => Promise<void>;
9
10
  onCancel: () => void;
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-selector-view.d.ts","sourceRoot":"","sources":["../../../src/cli-tui/selectors/oauth-selector-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EACX,mBAAmB,EACnB,sBAAsB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,UAAU,wBAAwB;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,EAAE,EAAE,GAAG,CAAC;IACR,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,kBAAkB,EAAE,CACnB,UAAU,EAAE,sBAAsB,GAAG,mBAAmB,KACpD,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,qBAAa,iBAAiB;IAGjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAuC;gBAE1B,OAAO,EAAE,wBAAwB;IAE9D,IAAI,IAAI,IAAI;IAoBZ,OAAO,CAAC,IAAI;CAOZ"}
1
+ {"version":3,"file":"oauth-selector-view.d.ts","sourceRoot":"","sources":["../../../src/cli-tui/selectors/oauth-selector-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EACX,mBAAmB,EACnB,sBAAsB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,UAAU,wBAAwB;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,EAAE,EAAE,GAAG,CAAC;IACR,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,kBAAkB,EAAE,CACnB,UAAU,EAAE,sBAAsB,GAAG,mBAAmB,KACpD,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,qBAAa,iBAAiB;IAGjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAuC;gBAE1B,OAAO,EAAE,wBAAwB;IAE9D,IAAI,IAAI,IAAI;IAqBZ,OAAO,CAAC,IAAI;CAOZ"}
@@ -14,7 +14,7 @@ export class OAuthSelectorView {
14
14
  }, () => {
15
15
  this.options.onCancel();
16
16
  this.hide();
17
- });
17
+ }, this.options.providers);
18
18
  this.options.modalManager.push(this.selector);
19
19
  }
20
20
  hide() {
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-selector-view.js","sourceRoot":"","sources":["../../../src/cli-tui/selectors/oauth-selector-view.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAY7D,MAAM,OAAO,iBAAiB;IAG7B,YAA6B,OAAiC;QAAjC,YAAO,GAAP,OAAO,CAA0B;QAFtD,aAAQ,GAAkC,IAAI,CAAC;IAEU,CAAC;IAElE,IAAI;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAsB,CACzC,IAAI,CAAC,OAAO,CAAC,IAAI,EACjB,KAAK,EAAE,UAAU,EAAE,EAAE;YACpB,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,EAAE,CAAC;QACb,CAAC,EACD,GAAG,EAAE;YACJ,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE,CAAC;QACb,CAAC,CACD,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAEO,IAAI;QACX,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACtB,CAAC;CACD","sourcesContent":["import type { TUI } from \"@evalops/tui\";\nimport type {\n\tOAuthLogoutProvider,\n\tSupportedOAuthProvider,\n} from \"../../oauth/index.js\";\nimport type { ModalManager } from \"../modal-manager.js\";\nimport { OAuthSelectorComponent } from \"./oauth-selector.js\";\n\ninterface OAuthSelectorViewOptions {\n\tmodalManager: ModalManager;\n\tui: TUI;\n\tmode: \"login\" | \"logout\";\n\tonProviderSelected: (\n\t\tproviderId: SupportedOAuthProvider | OAuthLogoutProvider,\n\t) => Promise<void>;\n\tonCancel: () => void;\n}\n\nexport class OAuthSelectorView {\n\tprivate selector: OAuthSelectorComponent | null = null;\n\n\tconstructor(private readonly options: OAuthSelectorViewOptions) {}\n\n\tshow(): void {\n\t\tif (this.selector) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selector = new OAuthSelectorComponent(\n\t\t\tthis.options.mode,\n\t\t\tasync (providerId) => {\n\t\t\t\tawait this.options.onProviderSelected(providerId);\n\t\t\t\tthis.hide();\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tthis.options.onCancel();\n\t\t\t\tthis.hide();\n\t\t\t},\n\t\t);\n\n\t\tthis.options.modalManager.push(this.selector);\n\t}\n\n\tprivate hide(): void {\n\t\tif (!this.selector) {\n\t\t\treturn;\n\t\t}\n\t\tthis.options.modalManager.pop();\n\t\tthis.selector = null;\n\t}\n}\n"]}
1
+ {"version":3,"file":"oauth-selector-view.js","sourceRoot":"","sources":["../../../src/cli-tui/selectors/oauth-selector-view.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAa7D,MAAM,OAAO,iBAAiB;IAG7B,YAA6B,OAAiC;QAAjC,YAAO,GAAP,OAAO,CAA0B;QAFtD,aAAQ,GAAkC,IAAI,CAAC;IAEU,CAAC;IAElE,IAAI;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAsB,CACzC,IAAI,CAAC,OAAO,CAAC,IAAI,EACjB,KAAK,EAAE,UAAU,EAAE,EAAE;YACpB,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,EAAE,CAAC;QACb,CAAC,EACD,GAAG,EAAE;YACJ,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE,CAAC;QACb,CAAC,EACD,IAAI,CAAC,OAAO,CAAC,SAAS,CACtB,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAEO,IAAI;QACX,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACtB,CAAC;CACD","sourcesContent":["import type { TUI } from \"@evalops/tui\";\nimport type {\n\tOAuthLogoutProvider,\n\tSupportedOAuthProvider,\n} from \"../../oauth/index.js\";\nimport type { ModalManager } from \"../modal-manager.js\";\nimport { OAuthSelectorComponent } from \"./oauth-selector.js\";\n\ninterface OAuthSelectorViewOptions {\n\tmodalManager: ModalManager;\n\tui: TUI;\n\tmode: \"login\" | \"logout\";\n\tproviders?: OAuthLogoutProvider[];\n\tonProviderSelected: (\n\t\tproviderId: SupportedOAuthProvider | OAuthLogoutProvider,\n\t) => Promise<void>;\n\tonCancel: () => void;\n}\n\nexport class OAuthSelectorView {\n\tprivate selector: OAuthSelectorComponent | null = null;\n\n\tconstructor(private readonly options: OAuthSelectorViewOptions) {}\n\n\tshow(): void {\n\t\tif (this.selector) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selector = new OAuthSelectorComponent(\n\t\t\tthis.options.mode,\n\t\t\tasync (providerId) => {\n\t\t\t\tawait this.options.onProviderSelected(providerId);\n\t\t\t\tthis.hide();\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tthis.options.onCancel();\n\t\t\t\tthis.hide();\n\t\t\t},\n\t\t\tthis.options.providers,\n\t\t);\n\n\t\tthis.options.modalManager.push(this.selector);\n\t}\n\n\tprivate hide(): void {\n\t\tif (!this.selector) {\n\t\t\treturn;\n\t\t}\n\t\tthis.options.modalManager.pop();\n\t\tthis.selector = null;\n\t}\n}\n"]}
@@ -6,11 +6,12 @@ import type { OAuthLogoutProvider } from "../../oauth/index.js";
6
6
  export declare class OAuthSelectorComponent extends Container {
7
7
  private onSelectCallback;
8
8
  private onCancelCallback;
9
+ private readonly providerIds?;
9
10
  private listContainer;
10
11
  private allProviders;
11
12
  private selectedIndex;
12
13
  private mode;
13
- constructor(mode: "login" | "logout", onSelectCallback: (providerId: OAuthLogoutProvider) => void, onCancelCallback: () => void);
14
+ constructor(mode: "login" | "logout", onSelectCallback: (providerId: OAuthLogoutProvider) => void, onCancelCallback: () => void, providerIds?: OAuthLogoutProvider[] | undefined);
14
15
  private loadProviders;
15
16
  private updateList;
16
17
  handleInput(keyData: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-selector.d.ts","sourceRoot":"","sources":["../../../src/cli-tui/selectors/oauth-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EACX,mBAAmB,EAGnB,MAAM,sBAAsB,CAAC;AAM9B;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IAQnD,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,gBAAgB;IARzB,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,IAAI,CAAqB;gBAGhC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAChB,gBAAgB,EAAE,CAAC,UAAU,EAAE,mBAAmB,KAAK,IAAI,EAC3D,gBAAgB,EAAE,MAAM,IAAI;IA6BrC,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,UAAU;IAwClB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CA8BlC"}
1
+ {"version":3,"file":"oauth-selector.d.ts","sourceRoot":"","sources":["../../../src/cli-tui/selectors/oauth-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EACX,mBAAmB,EAGnB,MAAM,sBAAsB,CAAC;AAM9B;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IAQnD,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAT9B,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,IAAI,CAAqB;gBAGhC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAChB,gBAAgB,EAAE,CAAC,UAAU,EAAE,mBAAmB,KAAK,IAAI,EAC3D,gBAAgB,EAAE,MAAM,IAAI,EACnB,WAAW,CAAC,EAAE,mBAAmB,EAAE,YAAA;IA6BrD,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,UAAU;IAwClB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CA8BlC"}
@@ -4,10 +4,11 @@ import { getOAuthLogoutProviders, getOAuthProviders, } from "../../oauth/index.j
4
4
  * Component that renders an OAuth provider selector
5
5
  */
6
6
  export class OAuthSelectorComponent extends Container {
7
- constructor(mode, onSelectCallback, onCancelCallback) {
7
+ constructor(mode, onSelectCallback, onCancelCallback, providerIds) {
8
8
  super();
9
9
  this.onSelectCallback = onSelectCallback;
10
10
  this.onCancelCallback = onCancelCallback;
11
+ this.providerIds = providerIds;
11
12
  this.allProviders = [];
12
13
  this.selectedIndex = 0;
13
14
  this.mode = mode;
@@ -30,7 +31,9 @@ export class OAuthSelectorComponent extends Container {
30
31
  loadProviders() {
31
32
  // For logout mode, only show providers with credentials
32
33
  if (this.mode === "logout") {
33
- this.allProviders = getOAuthLogoutProviders();
34
+ this.allProviders = this.providerIds
35
+ ? this.providerIds.map((providerId) => resolveLogoutProviderInfo(providerId))
36
+ : getOAuthLogoutProviders();
34
37
  }
35
38
  else {
36
39
  // For login mode, only show available providers
@@ -94,4 +97,24 @@ export class OAuthSelectorComponent extends Container {
94
97
  }
95
98
  }
96
99
  }
100
+ function resolveLogoutProviderInfo(providerId) {
101
+ const provider = getOAuthProviders().find((candidate) => candidate.id === providerId);
102
+ if (provider) {
103
+ return provider;
104
+ }
105
+ if (providerId === "anthropic") {
106
+ return {
107
+ id: "anthropic",
108
+ name: "Anthropic OAuth",
109
+ description: "Legacy Anthropic OAuth credentials (logout only)",
110
+ available: true,
111
+ };
112
+ }
113
+ return {
114
+ id: providerId,
115
+ name: providerId,
116
+ description: "OAuth credentials",
117
+ available: true,
118
+ };
119
+ }
97
120
  //# sourceMappingURL=oauth-selector.js.map