codeloop 0.1.4 → 0.1.6

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.
@@ -0,0 +1,12 @@
1
+ interface AuthOptions {
2
+ browser?: boolean;
3
+ global?: boolean;
4
+ }
5
+ export declare function authCommand(options?: AuthOptions): Promise<void>;
6
+ /**
7
+ * Browser-based auth flow usable from other commands (e.g. init).
8
+ * Returns the API key or null on failure/timeout.
9
+ */
10
+ export declare function browserAuth(): Promise<string | null>;
11
+ export {};
12
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAYA,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B1E;AA+ED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW1D"}
@@ -0,0 +1,164 @@
1
+ import { createServer } from "http";
2
+ import { randomBytes } from "crypto";
3
+ import ora from "ora";
4
+ import chalk from "chalk";
5
+ import open from "open";
6
+ import { saveToShellProfile, saveToConfig } from "../utils/key-storage.js";
7
+ import { printBox, printSuccess, printError, printApiKey, printInfo, printWarning } from "../utils/ui.js";
8
+ import { loginCommand } from "./login.js";
9
+ const AUTH_URL = "https://codeloop.tech/cli-auth";
10
+ const TIMEOUT_MS = 5 * 60 * 1000;
11
+ export async function authCommand(options = {}) {
12
+ if (options.browser === false) {
13
+ return loginCommand();
14
+ }
15
+ printBox("CodeLoop — Authenticate");
16
+ printInfo("Opening browser to sign in or create an account...\n");
17
+ const state = randomBytes(16).toString("hex");
18
+ const apiKey = await startAuthFlow(state);
19
+ if (!apiKey) {
20
+ printWarning("Browser authentication didn't complete.\n");
21
+ printInfo("Falling back to email/password login...\n");
22
+ return loginCommand();
23
+ }
24
+ printApiKey(apiKey);
25
+ saveToShellProfile(apiKey);
26
+ await saveToConfig(apiKey);
27
+ printSuccess("API key saved to shell profile and .codeloop/config.json");
28
+ if (options.global) {
29
+ const { applyGlobalMcpConfig } = await import("../utils/global-setup.js");
30
+ await applyGlobalMcpConfig(apiKey);
31
+ }
32
+ console.log("\n Next steps:");
33
+ printInfo("Run npx codeloop init to set up your project");
34
+ printInfo("Or npx codeloop status to check your plan\n");
35
+ }
36
+ function startAuthFlow(state) {
37
+ return new Promise((resolve) => {
38
+ const server = createServer((req, res) => {
39
+ const url = new URL(req.url || "/", `http://localhost`);
40
+ if (url.pathname === "/callback") {
41
+ const key = url.searchParams.get("key");
42
+ const returnedState = url.searchParams.get("state");
43
+ if (returnedState !== state) {
44
+ res.writeHead(400, { "Content-Type": "text/html" });
45
+ res.end(errorPage("State mismatch — possible CSRF attack. Please try again."));
46
+ return;
47
+ }
48
+ if (!key || !key.startsWith("cl_")) {
49
+ res.writeHead(400, { "Content-Type": "text/html" });
50
+ res.end(errorPage("Invalid API key received. Please try again."));
51
+ return;
52
+ }
53
+ res.writeHead(200, { "Content-Type": "text/html" });
54
+ res.end(successPage());
55
+ cleanup();
56
+ resolve(key);
57
+ return;
58
+ }
59
+ res.writeHead(404, { "Content-Type": "text/plain" });
60
+ res.end("Not found");
61
+ });
62
+ let timer;
63
+ function cleanup() {
64
+ clearTimeout(timer);
65
+ server.close();
66
+ }
67
+ server.listen(0, "127.0.0.1", async () => {
68
+ const addr = server.address();
69
+ if (!addr || typeof addr === "string") {
70
+ printError("Failed to start local server");
71
+ resolve(null);
72
+ return;
73
+ }
74
+ const port = addr.port;
75
+ const authUrl = `${AUTH_URL}?port=${port}&state=${state}`;
76
+ const spinner = ora("Waiting for browser authentication...").start();
77
+ spinner.text = `Opening browser to sign in...\n\n ${chalk.cyan(authUrl)}\n`;
78
+ try {
79
+ await open(authUrl);
80
+ spinner.text = `Waiting for authentication in browser...\n\n If the browser didn't open, visit:\n ${chalk.cyan(authUrl)}\n`;
81
+ }
82
+ catch {
83
+ spinner.text = `Could not open browser automatically.\n\n Open this URL manually:\n ${chalk.cyan(authUrl)}\n`;
84
+ }
85
+ timer = setTimeout(() => {
86
+ spinner.fail("Authentication timed out (5 minutes)");
87
+ printError("Try again with: npx codeloop auth");
88
+ printInfo("Or use email/password: npx codeloop auth --no-browser\n");
89
+ cleanup();
90
+ resolve(null);
91
+ }, TIMEOUT_MS);
92
+ });
93
+ server.on("error", (err) => {
94
+ printError(`Server error: ${err.message}`);
95
+ resolve(null);
96
+ });
97
+ });
98
+ }
99
+ /**
100
+ * Browser-based auth flow usable from other commands (e.g. init).
101
+ * Returns the API key or null on failure/timeout.
102
+ */
103
+ export async function browserAuth() {
104
+ const state = randomBytes(16).toString("hex");
105
+ const apiKey = await startAuthFlow(state);
106
+ if (apiKey) {
107
+ saveToShellProfile(apiKey);
108
+ await saveToConfig(apiKey);
109
+ printSuccess("API key saved to shell profile and .codeloop/config.json");
110
+ }
111
+ return apiKey;
112
+ }
113
+ function successPage() {
114
+ return `<!DOCTYPE html>
115
+ <html>
116
+ <head>
117
+ <meta charset="utf-8">
118
+ <title>CodeLoop — Authenticated</title>
119
+ <style>
120
+ * { margin: 0; padding: 0; box-sizing: border-box; }
121
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: #0a0a0a; color: #fafafa; display: flex; align-items: center; justify-content: center; min-height: 100vh; }
122
+ .card { text-align: center; max-width: 420px; padding: 48px 32px; }
123
+ .icon { font-size: 48px; margin-bottom: 16px; }
124
+ h1 { font-size: 24px; margin-bottom: 8px; }
125
+ p { color: #a1a1aa; font-size: 14px; line-height: 1.6; }
126
+ .close { margin-top: 24px; color: #71717a; font-size: 13px; }
127
+ </style>
128
+ </head>
129
+ <body>
130
+ <div class="card">
131
+ <div class="icon">&#10003;</div>
132
+ <h1>Authentication Successful</h1>
133
+ <p>Your API key has been sent to the CLI.<br>You can close this tab and return to your terminal.</p>
134
+ <p class="close">This window will close automatically in 3 seconds.</p>
135
+ </div>
136
+ <script>setTimeout(() => window.close(), 3000);</script>
137
+ </body>
138
+ </html>`;
139
+ }
140
+ function errorPage(message) {
141
+ return `<!DOCTYPE html>
142
+ <html>
143
+ <head>
144
+ <meta charset="utf-8">
145
+ <title>CodeLoop — Error</title>
146
+ <style>
147
+ * { margin: 0; padding: 0; box-sizing: border-box; }
148
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: #0a0a0a; color: #fafafa; display: flex; align-items: center; justify-content: center; min-height: 100vh; }
149
+ .card { text-align: center; max-width: 420px; padding: 48px 32px; }
150
+ .icon { font-size: 48px; margin-bottom: 16px; color: #ef4444; }
151
+ h1 { font-size: 24px; margin-bottom: 8px; }
152
+ p { color: #a1a1aa; font-size: 14px; line-height: 1.6; }
153
+ </style>
154
+ </head>
155
+ <body>
156
+ <div class="card">
157
+ <div class="icon">&#10007;</div>
158
+ <h1>Authentication Failed</h1>
159
+ <p>${message}</p>
160
+ </div>
161
+ </body>
162
+ </html>`;
163
+ }
164
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export declare function initCommand(options?: {
2
2
  global?: boolean;
3
+ key?: string;
4
+ yes?: boolean;
3
5
  }): Promise<void>;
4
6
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAoBA,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqJ/E"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAoBA,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuI5G"}
@@ -10,46 +10,57 @@ import { signup, login, createKey, ApiError } from "../utils/api-client.js";
10
10
  import { printBox, printSuccess, printWarning, printInfo, printApiKey, printError } from "../utils/ui.js";
11
11
  import { CORE_MDC, LOOP_MDC, RECOMMENDATIONS_MDC, PERMISSIONS_MDC, FLUTTER_MDC, WEB_MDC, MOBILE_MDC } from "../templates/cursor-rules.js";
12
12
  import { CODELOOP_LOOP_MD, CODELOOP_QA_MD, CODELOOP_ADVISOR_MD, CLAUDE_MD } from "../templates/claude-agents.js";
13
- import { CURSOR_MCP_CONFIG, CLAUDE_MCP_CONFIG, CLAUDE_PERMISSIONS_ALLOW } from "../templates/mcp-config.js";
14
- import { confirm } from "@inquirer/prompts";
13
+ import { CLAUDE_PERMISSIONS_ALLOW, getMcpConfig } from "../templates/mcp-config.js";
15
14
  import { SKILL_LOOP, SKILL_VERIFY, SKILL_VISUAL_REVIEW, SKILL_RECOMMEND } from "../templates/cursor-skills.js";
16
15
  import { createDefaultConfig } from "../templates/config.js";
17
16
  import { SPEC_TEMPLATE, ACCEPTANCE_TEMPLATE, UX_CHECKLIST_TEMPLATE } from "../templates/specs.js";
18
17
  import { PROMPT_LOOP, PROMPT_VERIFY, PROMPT_REVIEW } from "../templates/claude-prompts.js";
19
18
  import { password as passwordPrompt } from "@inquirer/prompts";
19
+ import { browserAuth } from "./auth.js";
20
20
  export async function initCommand(options) {
21
21
  if (options?.global) {
22
- return initGlobal();
22
+ return initGlobal(options);
23
23
  }
24
24
  const cwd = process.cwd();
25
25
  printBox("CodeLoop — Initialize Project");
26
- // 1. Check for existing API key
27
- let apiKey = findApiKey(cwd);
26
+ // 1. Check for existing API key (priority: --key flag > env var > config file)
27
+ let apiKey = options?.key || findApiKey(cwd);
28
28
  if (!apiKey) {
29
- printWarning("No API key found\n");
30
- const action = await select({
31
- message: "How would you like to get an API key?",
32
- choices: [
33
- { name: "Sign up for a new account", value: "signup" },
34
- { name: "Log in to existing account", value: "login" },
35
- { name: "Enter API key manually", value: "manual" },
36
- { name: "Skip (configure later)", value: "skip" },
37
- ],
38
- });
39
- if (action === "signup") {
40
- apiKey = await handleInlineSignup();
29
+ if (options?.yes) {
30
+ printWarning("No API key provided. Skipping authentication.\n");
41
31
  }
42
- else if (action === "login") {
43
- apiKey = await handleInlineLogin();
44
- }
45
- else if (action === "manual") {
46
- const key = await input({
47
- message: "Paste your API key:",
48
- validate: (v) => v.startsWith("cl_") ? true : 'API key should start with "cl_"',
49
- });
50
- apiKey = key.trim();
32
+ else {
33
+ printInfo("No API key found — opening browser to sign in...\n");
34
+ apiKey = await browserAuth();
35
+ if (!apiKey) {
36
+ const fallback = await select({
37
+ message: "Browser auth didn't complete. What would you like to do?",
38
+ choices: [
39
+ { name: "Try browser again", value: "browser" },
40
+ { name: "Sign up with email/password", value: "signup" },
41
+ { name: "Log in with email/password", value: "login" },
42
+ { name: "Enter API key manually", value: "manual" },
43
+ { name: "Skip (configure later)", value: "skip" },
44
+ ],
45
+ });
46
+ if (fallback === "browser") {
47
+ apiKey = await browserAuth();
48
+ }
49
+ else if (fallback === "signup") {
50
+ apiKey = await handleInlineSignup();
51
+ }
52
+ else if (fallback === "login") {
53
+ apiKey = await handleInlineLogin();
54
+ }
55
+ else if (fallback === "manual") {
56
+ const key = await input({
57
+ message: "Paste your API key:",
58
+ validate: (v) => v.startsWith("cl_") ? true : 'API key should start with "cl_"',
59
+ });
60
+ apiKey = key.trim();
61
+ }
62
+ }
51
63
  }
52
- // skip leaves apiKey as null
53
64
  }
54
65
  else {
55
66
  printSuccess(`Found API key: ${apiKey.slice(0, 12)}...`);
@@ -63,17 +74,8 @@ export async function initCommand(options) {
63
74
  printInfo("Project type: could not auto-detect (using defaults)");
64
75
  }
65
76
  console.log("");
66
- // 2b. Ask about automatic terminal authorization
67
- let autoAuthorize = false;
68
- try {
69
- autoAuthorize = await confirm({
70
- message: "Enable automatic terminal authorization for dev commands? (flutter, npm, git, brew, etc.)",
71
- default: true,
72
- });
73
- }
74
- catch {
75
- autoAuthorize = true;
76
- }
77
+ // Auto-authorize is enabled by default (no prompt)
78
+ const autoAuthorize = true;
77
79
  // 3. Create .codeloop/config.json
78
80
  const config = createDefaultConfig(apiKey || "", project.type !== "unknown" ? [project.type] : ["auto"]);
79
81
  const configPath = join(cwd, ".codeloop", "config.json");
@@ -106,104 +108,100 @@ export async function initCommand(options) {
106
108
  console.log("\n" + chalk.bold(" CodeLoop initialized!\n"));
107
109
  if (apiKey) {
108
110
  printSuccess("API key configured");
111
+ printSuccess("MCP server registered in Cursor and Claude Code");
112
+ printSuccess("Auto-authorization enabled for Claude Code");
109
113
  }
110
114
  else {
111
- printWarning("No API key set — run: npx codeloop login or npx codeloop signup");
112
- }
113
- if (autoAuthorize) {
114
- printSuccess("Auto-authorization configured for Claude Code");
115
- console.log("");
116
- console.log(chalk.yellow(" ╔═══════════════════════════════════════════════════════════╗"));
117
- console.log(chalk.yellow(" ║") + chalk.bold(" IMPORTANT: Enable Cursor Auto-Run (one-time setup) ") + chalk.yellow(" ║"));
118
- console.log(chalk.yellow(" ║ ║"));
119
- console.log(chalk.yellow(" ║") + " To stop 'Skip / Run' prompts on every terminal command: " + chalk.yellow(" ║"));
120
- console.log(chalk.yellow(" ║ ║"));
121
- console.log(chalk.yellow(" ║") + " 1. Open Cursor Settings: " + chalk.cyan("Cmd+Shift+J") + " (or Cmd+,) " + chalk.yellow(" ║"));
122
- console.log(chalk.yellow(" ║") + " 2. Go to: " + chalk.cyan("Features > Terminal") + " " + chalk.yellow(" ║"));
123
- console.log(chalk.yellow(" ║") + " 3. Find: " + chalk.cyan('"Auto-Run Mode"') + " " + chalk.yellow(" ║"));
124
- console.log(chalk.yellow(" ║") + ' 4. Set to: ' + chalk.green('"Yolo"') + " (runs everything) " + chalk.yellow(" ║"));
125
- console.log(chalk.yellow(" ║") + ' or: ' + chalk.green('"Auto-Run with Allowlist"') + " (safer) " + chalk.yellow(" ║"));
126
- console.log(chalk.yellow(" ║ ║"));
127
- console.log(chalk.yellow(" ║") + " This is a " + chalk.bold("one-time") + " Cursor IDE setting. " + chalk.yellow(" ║"));
128
- console.log(chalk.yellow(" ╚═══════════════════════════════════════════════════════════╝"));
129
- console.log("");
115
+ printWarning("No API key set — run: npx codeloop auth to authenticate");
130
116
  }
131
- printInfo("Read the docs: https://codeloop.tech/docs/setup");
132
- printInfo("Run your AI agent and CodeLoop will handle verification automatically\n");
117
+ console.log("");
118
+ printInfo("CodeLoop MCP is now configured — your AI agent can use CodeLoop tools.");
119
+ printInfo("Reload your IDE window if MCP tools don't appear immediately.\n");
133
120
  }
134
- async function initGlobal() {
121
+ async function initGlobal(options) {
135
122
  printBox("CodeLoop — Global Install");
136
123
  printInfo("This installs the CodeLoop MCP server globally so it's available in every workspace.\n");
137
124
  const home = homedir();
138
- const cursorMcpConfig = JSON.parse(JSON.stringify(CURSOR_MCP_CONFIG));
139
- const claudeMcpConfig = JSON.parse(JSON.stringify(CLAUDE_MCP_CONFIG));
140
- let apiKey = findApiKey(process.cwd());
125
+ let apiKey = options?.key || findApiKey(process.cwd());
141
126
  if (!apiKey) {
142
- printWarning("No API key found\n");
143
- const action = await select({
144
- message: "How would you like to get an API key?",
145
- choices: [
146
- { name: "Sign up for a new account", value: "signup" },
147
- { name: "Log in to existing account", value: "login" },
148
- { name: "Enter API key manually", value: "manual" },
149
- { name: "Skip (configure later)", value: "skip" },
150
- ],
151
- });
152
- if (action === "signup") {
153
- apiKey = await handleInlineSignup();
154
- }
155
- else if (action === "login") {
156
- apiKey = await handleInlineLogin();
127
+ if (options?.yes) {
128
+ printWarning("No API key provided. Skipping authentication.\n");
157
129
  }
158
- else if (action === "manual") {
159
- const key = await input({
160
- message: "Paste your API key:",
161
- validate: (v) => v.startsWith("cl_") ? true : 'API key should start with "cl_"',
162
- });
163
- apiKey = key.trim();
130
+ else {
131
+ printInfo("No API key found opening browser to sign in...\n");
132
+ apiKey = await browserAuth();
133
+ if (!apiKey) {
134
+ const fallback = await select({
135
+ message: "Browser auth didn't complete. What would you like to do?",
136
+ choices: [
137
+ { name: "Try browser again", value: "browser" },
138
+ { name: "Sign up with email/password", value: "signup" },
139
+ { name: "Log in with email/password", value: "login" },
140
+ { name: "Enter API key manually", value: "manual" },
141
+ { name: "Skip (configure later)", value: "skip" },
142
+ ],
143
+ });
144
+ if (fallback === "browser") {
145
+ apiKey = await browserAuth();
146
+ }
147
+ else if (fallback === "signup") {
148
+ apiKey = await handleInlineSignup();
149
+ }
150
+ else if (fallback === "login") {
151
+ apiKey = await handleInlineLogin();
152
+ }
153
+ else if (fallback === "manual") {
154
+ const key = await input({
155
+ message: "Paste your API key:",
156
+ validate: (v) => v.startsWith("cl_") ? true : 'API key should start with "cl_"',
157
+ });
158
+ apiKey = key.trim();
159
+ }
160
+ }
164
161
  }
165
162
  }
166
163
  else {
167
164
  printSuccess(`Found API key: ${apiKey.slice(0, 12)}...`);
168
165
  }
169
166
  if (apiKey) {
170
- await saveToShellProfile(apiKey);
167
+ saveToShellProfile(apiKey);
168
+ }
169
+ // When --yes is set or AI agent is running, default to both IDEs
170
+ let ide = "both";
171
+ if (!options?.yes) {
172
+ ide = await select({
173
+ message: "Which IDEs do you use?",
174
+ choices: [
175
+ { name: "Both Cursor and Claude Code", value: "both" },
176
+ { name: "Cursor only", value: "cursor" },
177
+ { name: "Claude Code only", value: "claude" },
178
+ ],
179
+ });
171
180
  }
172
- const ide = await select({
173
- message: "Which IDEs do you use?",
174
- choices: [
175
- { name: "Both Cursor and Claude Code", value: "both" },
176
- { name: "Cursor only", value: "cursor" },
177
- { name: "Claude Code only", value: "claude" },
178
- ],
179
- });
180
- const installed = [];
181
+ const mcpConfig = getMcpConfig(apiKey);
181
182
  if (ide === "cursor" || ide === "both") {
182
183
  const cursorGlobalPath = join(home, ".cursor", "mcp.json");
183
- mergeMcpConfig(cursorGlobalPath, cursorMcpConfig.mcpServers);
184
- installed.push(cursorGlobalPath);
184
+ mergeMcpConfig(cursorGlobalPath, mcpConfig.mcpServers);
185
185
  printSuccess(`~/.cursor/mcp.json (global — all Cursor workspaces)`);
186
186
  }
187
187
  if (ide === "claude" || ide === "both") {
188
188
  const claudeGlobalPath = join(home, ".claude.json");
189
- mergeMcpConfig(claudeGlobalPath, claudeMcpConfig.mcpServers);
190
- installed.push(claudeGlobalPath);
189
+ mergeMcpConfig(claudeGlobalPath, mcpConfig.mcpServers);
191
190
  printSuccess(`~/.claude.json (global — all Claude Code workspaces)`);
192
191
  }
193
192
  console.log("\n" + chalk.bold(" CodeLoop installed globally!\n"));
194
- printInfo("CodeLoop MCP server is now available in every workspace.");
195
- printInfo("Projects will be auto-initialized when the agent first runs.");
196
- printInfo("For project-specific setup, run: npx codeloop init (without --global)\n");
197
193
  if (apiKey) {
198
194
  printSuccess("API key configured");
195
+ printSuccess("MCP server registered for all workspaces");
199
196
  }
200
197
  else {
201
- printWarning("No API key set — run: npx codeloop login or npx codeloop signup");
198
+ printWarning("No API key set — run: npx codeloop auth to authenticate");
202
199
  }
200
+ printInfo("Reload your IDE window if MCP tools don't appear immediately.\n");
203
201
  }
204
- function setupCursorIntegration(cwd, _apiKey, projectType, autoAuthorize) {
202
+ function setupCursorIntegration(cwd, apiKey, projectType, autoAuthorize) {
205
203
  const mcpPath = join(cwd, ".cursor", "mcp.json");
206
- const mcpConfig = JSON.parse(JSON.stringify(CURSOR_MCP_CONFIG));
204
+ const mcpConfig = getMcpConfig(apiKey);
207
205
  mergeMcpConfig(mcpPath, mcpConfig.mcpServers);
208
206
  printSuccess(".cursor/mcp.json (merged)");
209
207
  const rulesDir = join(cwd, ".cursor", "rules");
@@ -241,9 +239,9 @@ function setupCursorIntegration(cwd, _apiKey, projectType, autoAuthorize) {
241
239
  writeFileSafe(join(skillsDir, "codeloop-recommend", "SKILL.md"), SKILL_RECOMMEND);
242
240
  printSuccess(".cursor/skills/ (4 skill files)");
243
241
  }
244
- function setupClaudeIntegration(cwd, _apiKey, autoAuthorize) {
242
+ function setupClaudeIntegration(cwd, apiKey, autoAuthorize) {
245
243
  const settingsPath = join(cwd, ".claude", "settings.local.json");
246
- const claudeConfig = JSON.parse(JSON.stringify(CLAUDE_MCP_CONFIG));
244
+ const claudeConfig = getMcpConfig(apiKey);
247
245
  mergeMcpConfig(settingsPath, claudeConfig.mcpServers);
248
246
  if (autoAuthorize) {
249
247
  let existing = {};
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import { Command } from "commander";
3
3
  import { signupCommand } from "./commands/signup.js";
4
4
  import { loginCommand } from "./commands/login.js";
5
+ import { authCommand } from "./commands/auth.js";
5
6
  import { initCommand } from "./commands/init.js";
6
7
  import { statusCommand } from "./commands/status.js";
7
8
  import { configureCommand } from "./commands/configure.js";
@@ -18,10 +19,18 @@ program
18
19
  .command("login")
19
20
  .description("Log in to your CodeLoop account and generate an API key")
20
21
  .action(loginCommand);
22
+ program
23
+ .command("auth")
24
+ .description("Authenticate via browser (supports GitHub, Google, Apple, email) — recommended")
25
+ .option("--no-browser", "Skip browser and use email/password prompts instead")
26
+ .option("-g, --global", "Also install CodeLoop MCP globally for all workspaces")
27
+ .action((options) => authCommand(options));
21
28
  program
22
29
  .command("init")
23
30
  .description("Initialize CodeLoop in the current project (creates config, MCP registration, rules)")
24
31
  .option("-g, --global", "Install CodeLoop MCP server globally for all workspaces (Cursor + Claude Code)")
32
+ .option("-k, --key <api-key>", "Provide API key directly (skips browser auth)")
33
+ .option("-y, --yes", "Accept all defaults, no interactive prompts (for AI agents)")
25
34
  .action((options) => initCommand(options));
26
35
  program
27
36
  .command("status")
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,wDAAwD,CAAC;KACrE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CACV,sFAAsF,CACvF;KACA,MAAM,CAAC,cAAc,EAAE,gFAAgF,CAAC;KACxG,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7C,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CACV,4CAA4C,CAC7C;KACA,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,KAAK,CAAC,QAAQ,CAAC;KACf,WAAW,CAAC,4DAA4D,CAAC;KACzE,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5B,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,wDAAwD,CAAC;KACrE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gFAAgF,CAAC;KAC7F,MAAM,CAAC,cAAc,EAAE,qDAAqD,CAAC;KAC7E,MAAM,CAAC,cAAc,EAAE,uDAAuD,CAAC;KAC/E,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7C,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CACV,sFAAsF,CACvF;KACA,MAAM,CAAC,cAAc,EAAE,gFAAgF,CAAC;KACxG,MAAM,CAAC,qBAAqB,EAAE,+CAA+C,CAAC;KAC9E,MAAM,CAAC,WAAW,EAAE,6DAA6D,CAAC;KAClF,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7C,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CACV,4CAA4C,CAC7C;KACA,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,KAAK,CAAC,QAAQ,CAAC;KACf,WAAW,CAAC,4DAA4D,CAAC;KACzE,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5B,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -20,5 +20,13 @@ export declare const CLAUDE_MCP_CONFIG: {
20
20
  };
21
21
  };
22
22
  };
23
+ /**
24
+ * Returns MCP config with the actual API key value injected.
25
+ * When apiKey is provided, writes the real key instead of the env placeholder.
26
+ * This is critical for Claude Code which doesn't expand shell env vars in JSON.
27
+ */
28
+ export declare function getMcpConfig(apiKey?: string | null): {
29
+ mcpServers: Record<string, unknown>;
30
+ };
23
31
  export declare const CLAUDE_PERMISSIONS_ALLOW: string[];
24
32
  //# sourceMappingURL=mcp-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../src/templates/mcp-config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB;;;;;;;;;;CAU7B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;CAU7B,CAAC;AAEF,eAAO,MAAM,wBAAwB,UA2BpC,CAAC"}
1
+ {"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../src/templates/mcp-config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB;;;;;;;;;;CAU7B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;CAU7B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAY5F;AAED,eAAO,MAAM,wBAAwB,UA2BpC,CAAC"}
@@ -20,6 +20,24 @@ export const CLAUDE_MCP_CONFIG = {
20
20
  },
21
21
  },
22
22
  };
23
+ /**
24
+ * Returns MCP config with the actual API key value injected.
25
+ * When apiKey is provided, writes the real key instead of the env placeholder.
26
+ * This is critical for Claude Code which doesn't expand shell env vars in JSON.
27
+ */
28
+ export function getMcpConfig(apiKey) {
29
+ return {
30
+ mcpServers: {
31
+ codeloop: {
32
+ command: "npx",
33
+ args: ["-y", "codeloop-mcp-server"],
34
+ env: {
35
+ CODELOOP_API_KEY: apiKey || "${CODELOOP_API_KEY}",
36
+ },
37
+ },
38
+ },
39
+ };
40
+ }
23
41
  export const CLAUDE_PERMISSIONS_ALLOW = [
24
42
  "Bash(flutter *)",
25
43
  "Bash(dart *)",
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/templates/mcp-config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;YACnC,GAAG,EAAE;gBACH,gBAAgB,EAAE,qBAAqB;aACxC;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;YACnC,GAAG,EAAE;gBACH,gBAAgB,EAAE,qBAAqB;aACxC;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,iBAAiB;IACjB,cAAc;IACd,aAAa;IACb,aAAa;IACb,cAAc;IACd,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,iBAAiB;IACjB,uBAAuB;IACvB,aAAa;IACb,eAAe;IACf,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,eAAe;IACf,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,YAAY;IACZ,cAAc;IACd,WAAW;CACZ,CAAC"}
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/templates/mcp-config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;YACnC,GAAG,EAAE;gBACH,gBAAgB,EAAE,qBAAqB;aACxC;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;YACnC,GAAG,EAAE;gBACH,gBAAgB,EAAE,qBAAqB;aACxC;SACF;KACF;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAsB;IACjD,OAAO;QACL,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;gBACnC,GAAG,EAAE;oBACH,gBAAgB,EAAE,MAAM,IAAI,qBAAqB;iBAClD;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,iBAAiB;IACjB,cAAc;IACd,aAAa;IACb,aAAa;IACb,cAAc;IACd,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,iBAAiB;IACjB,uBAAuB;IACvB,aAAa;IACb,eAAe;IACf,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,eAAe;IACf,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,YAAY;IACZ,cAAc;IACd,WAAW;CACZ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function applyGlobalMcpConfig(apiKey: string): Promise<void>;
2
+ //# sourceMappingURL=global-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-setup.d.ts","sourceRoot":"","sources":["../../src/utils/global-setup.ts"],"names":[],"mappings":"AAMA,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWxE"}
@@ -0,0 +1,16 @@
1
+ import { join } from "path";
2
+ import { homedir } from "os";
3
+ import { mergeMcpConfig } from "./file-writer.js";
4
+ import { getMcpConfig } from "../templates/mcp-config.js";
5
+ import { printSuccess } from "./ui.js";
6
+ export async function applyGlobalMcpConfig(apiKey) {
7
+ const home = homedir();
8
+ const config = getMcpConfig(apiKey);
9
+ const cursorGlobalPath = join(home, ".cursor", "mcp.json");
10
+ mergeMcpConfig(cursorGlobalPath, config.mcpServers);
11
+ printSuccess("~/.cursor/mcp.json (global — all Cursor workspaces)");
12
+ const claudeGlobalPath = join(home, ".claude.json");
13
+ mergeMcpConfig(claudeGlobalPath, config.mcpServers);
14
+ printSuccess("~/.claude.json (global — all Claude Code workspaces)");
15
+ }
16
+ //# sourceMappingURL=global-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-setup.js","sourceRoot":"","sources":["../../src/utils/global-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAc;IACvD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3D,cAAc,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACpD,YAAY,CAAC,qDAAqD,CAAC,CAAC;IAEpE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACpD,cAAc,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACpD,YAAY,CAAC,sDAAsD,CAAC,CAAC;AACvE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeloop",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "CLI tool for CodeLoop — automated verification for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -30,14 +30,15 @@
30
30
  ],
31
31
  "license": "MIT",
32
32
  "dependencies": {
33
- "commander": "^13.1.0",
34
33
  "@inquirer/prompts": "^7.5.0",
35
34
  "chalk": "^5.4.1",
35
+ "commander": "^13.1.0",
36
+ "open": "^11.0.0",
36
37
  "ora": "^8.2.0"
37
38
  },
38
39
  "devDependencies": {
39
- "typescript": "^5.8.3",
40
40
  "@types/node": "^22.15.3",
41
+ "typescript": "^5.8.3",
41
42
  "vitest": "^3.1.2"
42
43
  }
43
44
  }