* feat(mcp-oauth): add oauth field to ClaudeCodeMcpServer schema Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai> * feat(mcp-oauth): add RFC 7591 Dynamic Client Registration * feat(mcp-oauth): add RFC 9728 PRM + RFC 8414 AS discovery * feat(mcp-oauth): add secure token storage with {host}/{resource} key format * feat(mcp-oauth): add dynamic port OAuth callback server * feat(mcp-oauth): add RFC 8707 Resource Indicators * feat(mcp-oauth): implement full-spec McpOAuthProvider * feat(mcp-oauth): add step-up authorization handler * feat(mcp-oauth): integrate authProvider into SkillMcpManager * feat(doctor): add MCP OAuth token status check * feat(cli): add mcp oauth subcommand structure * feat(cli): implement mcp oauth login command * fix(mcp-oauth): address cubic review — security, correctness, and test issues - Remove @ts-nocheck from provider.ts, storage.ts, provider.test.ts - Fix server resource leak on missing code/state (close + reject) - Fix command injection in openBrowser (spawn array args, cross-platform) - Mock McpOAuthProvider in login.test.ts for deterministic CI - Recreate auth provider with merged scopes in step-up flow - Add listAllTokens() for global status listing - Fix logout to accept --server-url for correct token deletion - Support both quoted and unquoted WWW-Authenticate params (RFC 2617) - Save/restore OPENCODE_CONFIG_DIR in storage.test.ts - Fix index.test.ts: vitest → bun:test * fix(mcp-oauth): use explorer instead of cmd /c start on Windows to prevent shell injection * fix(mcp-oauth): address remaining cubic review issues - Add 5-minute timeout to provider callback server to prevent indefinite hangs - Persist client registration from token storage across process restarts - Require --server-url for logout to match token storage key format - Use listTokensByHost for server-specific status lookups - Fix callback-server test to handle promise rejection ordering - Fix provider test port expectations (8912 → 19877) - Fix cli-guide.md duplicate Section 7 numbering - Fix manager test for login-on-missing-tokens behavior * fix(mcp-oauth): address final review issues - P1: Redact token values in status.ts output to prevent credential leakage - P2: Read OAuth error response body before throwing in token exchange - Test: Fix mcp-oauth doctor test to use epoch seconds (not milliseconds) --------- Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com> Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
77 lines
2.3 KiB
TypeScript
77 lines
2.3 KiB
TypeScript
import color from "picocolors"
|
|
|
|
export const SYMBOLS = {
|
|
check: color.green("\u2713"),
|
|
cross: color.red("\u2717"),
|
|
warn: color.yellow("\u26A0"),
|
|
info: color.blue("\u2139"),
|
|
arrow: color.cyan("\u2192"),
|
|
bullet: color.dim("\u2022"),
|
|
skip: color.dim("\u25CB"),
|
|
} as const
|
|
|
|
export const STATUS_COLORS = {
|
|
pass: color.green,
|
|
fail: color.red,
|
|
warn: color.yellow,
|
|
skip: color.dim,
|
|
} as const
|
|
|
|
export const CHECK_IDS = {
|
|
OPENCODE_INSTALLATION: "opencode-installation",
|
|
PLUGIN_REGISTRATION: "plugin-registration",
|
|
CONFIG_VALIDATION: "config-validation",
|
|
MODEL_RESOLUTION: "model-resolution",
|
|
AUTH_ANTHROPIC: "auth-anthropic",
|
|
AUTH_OPENAI: "auth-openai",
|
|
AUTH_GOOGLE: "auth-google",
|
|
DEP_AST_GREP_CLI: "dep-ast-grep-cli",
|
|
DEP_AST_GREP_NAPI: "dep-ast-grep-napi",
|
|
DEP_COMMENT_CHECKER: "dep-comment-checker",
|
|
GH_CLI: "gh-cli",
|
|
LSP_SERVERS: "lsp-servers",
|
|
MCP_BUILTIN: "mcp-builtin",
|
|
MCP_USER: "mcp-user",
|
|
MCP_OAUTH_TOKENS: "mcp-oauth-tokens",
|
|
VERSION_STATUS: "version-status",
|
|
} as const
|
|
|
|
export const CHECK_NAMES: Record<string, string> = {
|
|
[CHECK_IDS.OPENCODE_INSTALLATION]: "OpenCode Installation",
|
|
[CHECK_IDS.PLUGIN_REGISTRATION]: "Plugin Registration",
|
|
[CHECK_IDS.CONFIG_VALIDATION]: "Configuration Validity",
|
|
[CHECK_IDS.MODEL_RESOLUTION]: "Model Resolution",
|
|
[CHECK_IDS.AUTH_ANTHROPIC]: "Anthropic (Claude) Auth",
|
|
[CHECK_IDS.AUTH_OPENAI]: "OpenAI (ChatGPT) Auth",
|
|
[CHECK_IDS.AUTH_GOOGLE]: "Google (Gemini) Auth",
|
|
[CHECK_IDS.DEP_AST_GREP_CLI]: "AST-Grep CLI",
|
|
[CHECK_IDS.DEP_AST_GREP_NAPI]: "AST-Grep NAPI",
|
|
[CHECK_IDS.DEP_COMMENT_CHECKER]: "Comment Checker",
|
|
[CHECK_IDS.GH_CLI]: "GitHub CLI",
|
|
[CHECK_IDS.LSP_SERVERS]: "LSP Servers",
|
|
[CHECK_IDS.MCP_BUILTIN]: "Built-in MCP Servers",
|
|
[CHECK_IDS.MCP_USER]: "User MCP Configuration",
|
|
[CHECK_IDS.MCP_OAUTH_TOKENS]: "MCP OAuth Tokens",
|
|
[CHECK_IDS.VERSION_STATUS]: "Version Status",
|
|
} as const
|
|
|
|
export const CATEGORY_NAMES: Record<string, string> = {
|
|
installation: "Installation",
|
|
configuration: "Configuration",
|
|
authentication: "Authentication",
|
|
dependencies: "Dependencies",
|
|
tools: "Tools & Servers",
|
|
updates: "Updates",
|
|
} as const
|
|
|
|
export const EXIT_CODES = {
|
|
SUCCESS: 0,
|
|
FAILURE: 1,
|
|
} as const
|
|
|
|
export const MIN_OPENCODE_VERSION = "1.0.150"
|
|
|
|
export const PACKAGE_NAME = "oh-my-opencode"
|
|
|
|
export const OPENCODE_BINARIES = ["opencode", "opencode-desktop"] as const
|