diff --git a/bun.lock b/bun.lock index d6d39037..a69de088 100644 --- a/bun.lock +++ b/bun.lock @@ -32,7 +32,7 @@ "dependencies": { "@actions/core": "1.11.1", "@actions/github": "6.0.1", - "@clack/prompts": "0.11.0", + "@clack/prompts": "1.0.0-alpha.1", "@hono/zod-validator": "0.4.2", "@modelcontextprotocol/sdk": "1.15.1", "@octokit/graphql": "9.0.1", @@ -222,9 +222,9 @@ "@capsizecss/unpack": ["@capsizecss/unpack@2.4.0", "", { "dependencies": { "blob-to-buffer": "^1.2.8", "cross-fetch": "^3.0.4", "fontkit": "^2.0.2" } }, "sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q=="], - "@clack/core": ["@clack/core@0.5.0", "", { "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow=="], + "@clack/core": ["@clack/core@1.0.0-alpha.1", "", { "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-rFbCU83JnN7l3W1nfgCqqme4ZZvTTgsiKQ6FM0l+r0P+o2eJpExcocBUWUIwnDzL76Aca9VhUdWmB2MbUv+Qyg=="], - "@clack/prompts": ["@clack/prompts@0.11.0", "", { "dependencies": { "@clack/core": "0.5.0", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw=="], + "@clack/prompts": ["@clack/prompts@1.0.0-alpha.1", "", { "dependencies": { "@clack/core": "1.0.0-alpha.1", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-07MNT0OsxjKOcyVfX8KhXBhJiyUbDP1vuIAcHc+nx5v93MJO23pX3X/k3bWz6T3rpM9dgWPq90i4Jq7gZAyMbw=="], "@cloudflare/kv-asset-handler": ["@cloudflare/kv-asset-handler@0.4.0", "", { "dependencies": { "mime": "^3.0.0" } }, "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA=="], diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 7e1775d1..048d99b7 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -30,7 +30,7 @@ "dependencies": { "@actions/core": "1.11.1", "@actions/github": "6.0.1", - "@clack/prompts": "0.11.0", + "@clack/prompts": "1.0.0-alpha.1", "@hono/zod-validator": "0.4.2", "@modelcontextprotocol/sdk": "1.15.1", "@octokit/graphql": "9.0.1", diff --git a/packages/opencode/src/cli/cmd/agent.ts b/packages/opencode/src/cli/cmd/agent.ts index 33b270ee..e929c3a8 100644 --- a/packages/opencode/src/cli/cmd/agent.ts +++ b/packages/opencode/src/cli/cmd/agent.ts @@ -39,7 +39,7 @@ const AgentCreateCommand = cmd({ const query = await prompts.text({ message: "Description", placeholder: "What should this agent do?", - validate: (x) => (x.length > 0 ? undefined : "Required"), + validate: (x) => x && (x.length > 0 ? undefined : "Required"), }) if (prompts.isCancel(query)) throw new UI.CancelledError() diff --git a/packages/opencode/src/cli/cmd/auth.ts b/packages/opencode/src/cli/cmd/auth.ts index a9201a88..5d4a3524 100644 --- a/packages/opencode/src/cli/cmd/auth.ts +++ b/packages/opencode/src/cli/cmd/auth.ts @@ -75,6 +75,7 @@ export const AuthLoginCommand = cmd({ type: "string", }), async handler(args) { + UI.empty() prompts.intro("Add credential") if (args.url) { const wellknown = await fetch(`${args.url}/.well-known/opencode`).then((x) => x.json()) @@ -99,7 +100,6 @@ export const AuthLoginCommand = cmd({ prompts.outro("Done") return } - UI.empty() const providers = await ModelsDev.get() const priority: Record = { anthropic: 0, @@ -109,7 +109,7 @@ export const AuthLoginCommand = cmd({ openrouter: 4, vercel: 5, } - let provider = await prompts.select({ + let provider = await prompts.autocomplete({ message: "Select provider", maxItems: 8, options: [ @@ -138,7 +138,7 @@ export const AuthLoginCommand = cmd({ if (provider === "other") { provider = await prompts.text({ message: "Enter provider id", - validate: (x) => (x.match(/^[0-9a-z-]+$/) ? undefined : "a-z, 0-9 and hyphens only"), + validate: (x) => x && (x.match(/^[0-9a-z-]+$/) ? undefined : "a-z, 0-9 and hyphens only"), }) if (prompts.isCancel(provider)) throw new UI.CancelledError() provider = provider.replace(/^@ai-sdk\//, "") @@ -192,7 +192,7 @@ export const AuthLoginCommand = cmd({ const code = await prompts.text({ message: "Paste the authorization code here: ", - validate: (x) => (x.length > 0 ? undefined : "Required"), + validate: (x) => x && (x.length > 0 ? undefined : "Required"), }) if (prompts.isCancel(code)) throw new UI.CancelledError() @@ -228,7 +228,7 @@ export const AuthLoginCommand = cmd({ const code = await prompts.text({ message: "Paste the authorization code here: ", - validate: (x) => (x.length > 0 ? undefined : "Required"), + validate: (x) => x && (x.length > 0 ? undefined : "Required"), }) if (prompts.isCancel(code)) throw new UI.CancelledError() @@ -301,7 +301,7 @@ export const AuthLoginCommand = cmd({ const key = await prompts.password({ message: "Enter your API key", - validate: (x) => (x.length > 0 ? undefined : "Required"), + validate: (x) => x && (x.length > 0 ? undefined : "Required"), }) if (prompts.isCancel(key)) throw new UI.CancelledError() await Auth.set(provider, { diff --git a/packages/opencode/src/cli/cmd/mcp.ts b/packages/opencode/src/cli/cmd/mcp.ts index 5f8b6e5d..6e2d11fd 100644 --- a/packages/opencode/src/cli/cmd/mcp.ts +++ b/packages/opencode/src/cli/cmd/mcp.ts @@ -19,7 +19,7 @@ export const McpAddCommand = cmd({ const name = await prompts.text({ message: "Enter MCP server name", - validate: (x) => (x.length > 0 ? undefined : "Required"), + validate: (x) => x && (x.length > 0 ? undefined : "Required"), }) if (prompts.isCancel(name)) throw new UI.CancelledError() @@ -44,7 +44,7 @@ export const McpAddCommand = cmd({ const command = await prompts.text({ message: "Enter command to run", placeholder: "e.g., opencode x @modelcontextprotocol/server-filesystem", - validate: (x) => (x.length > 0 ? undefined : "Required"), + validate: (x) => x && (x.length > 0 ? undefined : "Required"), }) if (prompts.isCancel(command)) throw new UI.CancelledError() @@ -58,6 +58,7 @@ export const McpAddCommand = cmd({ message: "Enter MCP server URL", placeholder: "e.g., https://example.com/mcp", validate: (x) => { + if (!x) return "Required" if (x.length === 0) return "Required" const isValid = URL.canParse(x) return isValid ? undefined : "Invalid URL"