@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.
- package/dist/agent/providers/openai-codex-session.js +1 -1
- package/dist/agent/providers/openai-codex-session.js.map +1 -1
- package/dist/app-server/in-process-client.d.ts +2 -2
- package/dist/app-server/in-process-client.js.map +1 -1
- package/dist/app-server/protocol-modes-api.js +1 -1
- package/dist/app-server/protocol-modes-api.js.map +1 -1
- package/dist/app-server/sandbox-check-api.d.ts +21 -0
- package/dist/app-server/{sandbox-proof-api.d.ts.map → sandbox-check-api.d.ts.map} +1 -1
- package/dist/app-server/{sandbox-proof-api.js → sandbox-check-api.js} +18 -18
- package/dist/app-server/{sandbox-proof-api.js.map → sandbox-check-api.js.map} +1 -1
- package/dist/app-server/session-api.d.ts +5 -5
- package/dist/app-server/session-api.js +18 -18
- package/dist/app-server/session-api.js.map +1 -1
- package/dist/audit/logger.d.ts +1 -1
- package/dist/cli/args.js +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/codex.js +30 -3
- package/dist/cli/commands/codex.js.map +1 -1
- package/dist/cli-tui/auth-state.d.ts +7 -0
- package/dist/cli-tui/auth-state.d.ts.map +1 -0
- package/dist/cli-tui/auth-state.js +46 -0
- package/dist/cli-tui/auth-state.js.map +1 -0
- package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
- package/dist/cli-tui/commands/command-catalog.js +6 -1
- package/dist/cli-tui/commands/command-catalog.js.map +1 -1
- package/dist/cli-tui/commands/command-suite-handlers.d.ts +2 -5
- package/dist/cli-tui/commands/command-suite-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/command-suite-handlers.js.map +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +6 -5
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.js +2 -2
- package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.js +24 -11
- package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.d.ts +1 -0
- package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.js +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -1
- package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector.js +25 -2
- package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
- package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts +2 -5
- package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/command-suite-wiring.js.map +1 -1
- package/dist/cli-tui/tui-renderer.d.ts +0 -4
- package/dist/cli-tui/tui-renderer.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer.js +3 -28
- package/dist/cli-tui/tui-renderer.js.map +1 -1
- package/dist/cli.js +896 -497
- package/dist/codex/app-server-client.d.ts +8 -2
- package/dist/codex/app-server-client.d.ts.map +1 -1
- package/dist/codex/app-server-client.js +18 -4
- package/dist/codex/app-server-client.js.map +1 -1
- package/dist/codex/auth.d.ts +4 -0
- package/dist/codex/auth.d.ts.map +1 -0
- package/dist/codex/auth.js +103 -0
- package/dist/codex/auth.js.map +1 -0
- package/dist/db/schema.d.ts +1 -1
- package/dist/evalops/agent-bootstrap.js +2 -2
- package/dist/evalops/agent-bootstrap.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +5 -1
- package/dist/main.js.map +1 -1
- package/dist/models/config-loader.d.ts +5 -5
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +19 -19
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +12 -13
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/oauth/index.d.ts +1 -0
- package/dist/oauth/index.d.ts.map +1 -1
- package/dist/oauth/index.js +42 -2
- package/dist/oauth/index.js.map +1 -1
- package/dist/server/app-context.d.ts +2 -0
- package/dist/server/app-context.d.ts.map +1 -1
- package/dist/server/app-context.js.map +1 -1
- package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
- package/dist/server/handlers/headless-sessions.js +44 -10
- package/dist/server/handlers/headless-sessions.js.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.d.ts +2 -0
- package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.js +2 -0
- package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
- package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
- package/dist/server/handlers/platform-a2a-push.js +113 -2
- package/dist/server/handlers/platform-a2a-push.js.map +1 -1
- package/dist/server/headless-in-process-host.d.ts.map +1 -1
- package/dist/server/headless-in-process-host.js +1 -1
- package/dist/server/headless-in-process-host.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts +9 -2
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +54 -15
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/tools/background/task-runtime.js +1 -1
- package/dist/tools/background/task-runtime.js.map +1 -1
- package/dist/version.json +2 -2
- package/package.json +1 -1
- 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":"
|
|
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":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,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;AA4GD,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 {\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":"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","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
|
|
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;
|
|
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;
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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,
|
|
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,
|
|
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 {
|
|
132
|
+
const { listOAuthLogoutProvidersWithCodexAppServer } = await import("../../oauth/index.js");
|
|
127
133
|
// Get logged-in providers
|
|
128
|
-
const loggedInProviders =
|
|
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
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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":"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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\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;
|
|
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"}
|
|
@@ -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;
|
|
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;
|
|
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 =
|
|
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
|