@cdoing/cli 0.1.0
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/.cdoing/permissions.json +8 -0
- package/dist/callbacks.d.ts +17 -0
- package/dist/callbacks.d.ts.map +1 -0
- package/dist/callbacks.js +265 -0
- package/dist/callbacks.js.map +1 -0
- package/dist/chat.d.ts +27 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +57 -0
- package/dist/chat.js.map +1 -0
- package/dist/commands.d.ts +22 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +452 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +84 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +427 -0
- package/dist/config.js.map +1 -0
- package/dist/help.d.ts +9 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +167 -0
- package/dist/help.js.map +1 -0
- package/dist/history.d.ts +51 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +207 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +220 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth.d.ts +13 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +182 -0
- package/dist/oauth.js.map +1 -0
- package/dist/review.d.ts +26 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +198 -0
- package/dist/review.js.map +1 -0
- package/dist/serve.d.ts +23 -0
- package/dist/serve.d.ts.map +1 -0
- package/dist/serve.js +293 -0
- package/dist/serve.js.map +1 -0
- package/dist/tools.d.ts +14 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +57 -0
- package/dist/tools.js.map +1 -0
- package/dist/ui/App.d.ts +24 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js +321 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/MessageList.d.ts +14 -0
- package/dist/ui/MessageList.d.ts.map +1 -0
- package/dist/ui/MessageList.js +147 -0
- package/dist/ui/MessageList.js.map +1 -0
- package/dist/ui/SessionBrowser.d.ts +18 -0
- package/dist/ui/SessionBrowser.d.ts.map +1 -0
- package/dist/ui/SessionBrowser.js +149 -0
- package/dist/ui/SessionBrowser.js.map +1 -0
- package/dist/ui/SetupWizard.d.ts +23 -0
- package/dist/ui/SetupWizard.d.ts.map +1 -0
- package/dist/ui/SetupWizard.js +402 -0
- package/dist/ui/SetupWizard.js.map +1 -0
- package/dist/ui/Spinner.d.ts +15 -0
- package/dist/ui/Spinner.d.ts.map +1 -0
- package/dist/ui/Spinner.js +111 -0
- package/dist/ui/Spinner.js.map +1 -0
- package/dist/ui/StatusBar.d.ts +16 -0
- package/dist/ui/StatusBar.d.ts.map +1 -0
- package/dist/ui/StatusBar.js +56 -0
- package/dist/ui/StatusBar.js.map +1 -0
- package/dist/ui/UserInput.d.ts +13 -0
- package/dist/ui/UserInput.d.ts.map +1 -0
- package/dist/ui/UserInput.js +872 -0
- package/dist/ui/UserInput.js.map +1 -0
- package/dist/ui/hooks/helpers.d.ts +55 -0
- package/dist/ui/hooks/helpers.d.ts.map +1 -0
- package/dist/ui/hooks/helpers.js +304 -0
- package/dist/ui/hooks/helpers.js.map +1 -0
- package/dist/ui/hooks/useAgent.d.ts +60 -0
- package/dist/ui/hooks/useAgent.d.ts.map +1 -0
- package/dist/ui/hooks/useAgent.js +213 -0
- package/dist/ui/hooks/useAgent.js.map +1 -0
- package/dist/ui/hooks/useChat.d.ts +74 -0
- package/dist/ui/hooks/useChat.d.ts.map +1 -0
- package/dist/ui/hooks/useChat.js +819 -0
- package/dist/ui/hooks/useChat.js.map +1 -0
- package/dist/ui/theme.d.ts +73 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +214 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/types.d.ts +37 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +3 -0
- package/dist/ui/types.js.map +1 -0
- package/package.json +33 -0
- package/src/callbacks.ts +294 -0
- package/src/chat.ts +72 -0
- package/src/commands.ts +425 -0
- package/src/config.ts +462 -0
- package/src/help.ts +182 -0
- package/src/history.ts +205 -0
- package/src/index.ts +248 -0
- package/src/oauth.ts +164 -0
- package/src/review.ts +233 -0
- package/src/serve.ts +290 -0
- package/src/tools.ts +104 -0
- package/src/ui/App.tsx +426 -0
- package/src/ui/MessageList.tsx +222 -0
- package/src/ui/SessionBrowser.tsx +161 -0
- package/src/ui/SetupWizard.tsx +412 -0
- package/src/ui/Spinner.tsx +103 -0
- package/src/ui/StatusBar.tsx +106 -0
- package/src/ui/UserInput.tsx +954 -0
- package/src/ui/hooks/helpers.ts +271 -0
- package/src/ui/hooks/useAgent.ts +270 -0
- package/src/ui/hooks/useChat.ts +943 -0
- package/src/ui/theme.ts +326 -0
- package/src/ui/types.ts +41 -0
- package/tsconfig.json +18 -0
package/dist/oauth.js
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLI OAuth — thin wrapper around @cdoing/core OAuth
|
|
4
|
+
*
|
|
5
|
+
* Only contains CLI-specific UI code (readline prompts, chalk output, browser opener).
|
|
6
|
+
* All credential storage, PKCE, token management lives in @cdoing/core.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
42
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.getOAuthStatus = exports.exchangeOAuthCode = exports.generateOAuthUrl = exports.resolveOAuthToken = exports.refreshAccessToken = exports.isOAuthExpired = exports.clearOAuthTokens = exports.loadOAuthTokens = exports.saveOAuthTokens = void 0;
|
|
46
|
+
exports.oauthLogin = oauthLogin;
|
|
47
|
+
exports.oauthLogout = oauthLogout;
|
|
48
|
+
exports.oauthStatus = oauthStatus;
|
|
49
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const os = __importStar(require("os"));
|
|
53
|
+
// Re-export everything from core so existing imports keep working
|
|
54
|
+
var core_1 = require("@cdoing/core");
|
|
55
|
+
Object.defineProperty(exports, "saveOAuthTokens", { enumerable: true, get: function () { return core_1.saveOAuthTokens; } });
|
|
56
|
+
Object.defineProperty(exports, "loadOAuthTokens", { enumerable: true, get: function () { return core_1.loadOAuthTokens; } });
|
|
57
|
+
Object.defineProperty(exports, "clearOAuthTokens", { enumerable: true, get: function () { return core_1.clearOAuthTokens; } });
|
|
58
|
+
Object.defineProperty(exports, "isOAuthExpired", { enumerable: true, get: function () { return core_1.isOAuthExpired; } });
|
|
59
|
+
Object.defineProperty(exports, "refreshAccessToken", { enumerable: true, get: function () { return core_1.refreshAccessToken; } });
|
|
60
|
+
Object.defineProperty(exports, "resolveOAuthToken", { enumerable: true, get: function () { return core_1.resolveOAuthToken; } });
|
|
61
|
+
Object.defineProperty(exports, "generateOAuthUrl", { enumerable: true, get: function () { return core_1.generateOAuthUrl; } });
|
|
62
|
+
Object.defineProperty(exports, "exchangeOAuthCode", { enumerable: true, get: function () { return core_1.exchangeOAuthCode; } });
|
|
63
|
+
Object.defineProperty(exports, "getOAuthStatus", { enumerable: true, get: function () { return core_1.getOAuthStatus; } });
|
|
64
|
+
const core_2 = require("@cdoing/core");
|
|
65
|
+
// ── CLI-specific: Interactive login ──────────────────────
|
|
66
|
+
async function oauthLogin() {
|
|
67
|
+
const readline = await Promise.resolve().then(() => __importStar(require("readline")));
|
|
68
|
+
const { url, codeVerifier } = (0, core_2.generateOAuthUrl)();
|
|
69
|
+
console.log();
|
|
70
|
+
console.log(chalk_1.default.bold.cyan(" Claude OAuth Login"));
|
|
71
|
+
console.log(chalk_1.default.dim(" Opening browser for authentication...\n"));
|
|
72
|
+
console.log(chalk_1.default.white(" If the browser doesn't open, visit:"));
|
|
73
|
+
console.log(chalk_1.default.dim(` ${url}\n`));
|
|
74
|
+
openBrowser(url);
|
|
75
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
76
|
+
const code = await new Promise((resolve) => {
|
|
77
|
+
rl.question(chalk_1.default.green(" Paste the authorization code here: "), (a) => {
|
|
78
|
+
rl.close();
|
|
79
|
+
resolve(a.trim());
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
if (!code)
|
|
83
|
+
throw new Error("No authorization code provided");
|
|
84
|
+
return (0, core_2.exchangeOAuthCode)(code, codeVerifier);
|
|
85
|
+
}
|
|
86
|
+
// ── CLI-specific: Browser opener ─────────────────────────
|
|
87
|
+
function openBrowser(urlToOpen) {
|
|
88
|
+
const { exec } = require("child_process");
|
|
89
|
+
const platform = process.platform;
|
|
90
|
+
let command;
|
|
91
|
+
if (platform === "darwin") {
|
|
92
|
+
command = `open "${urlToOpen}"`;
|
|
93
|
+
}
|
|
94
|
+
else if (platform === "win32") {
|
|
95
|
+
command = `start "" "${urlToOpen}"`;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
command = `xdg-open "${urlToOpen}"`;
|
|
99
|
+
}
|
|
100
|
+
exec(command, (err) => {
|
|
101
|
+
if (err) {
|
|
102
|
+
console.log(chalk_1.default.yellow(" Could not open browser automatically."));
|
|
103
|
+
console.log(chalk_1.default.white(" Please open the URL above manually.\n"));
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
// ── CLI-specific: Logout with message ────────────────────
|
|
108
|
+
function oauthLogout() {
|
|
109
|
+
(0, core_2.clearOAuthTokens)();
|
|
110
|
+
return "Logged out. OAuth tokens cleared.";
|
|
111
|
+
}
|
|
112
|
+
// ── CLI-specific: Detailed status report ─────────────────
|
|
113
|
+
function oauthStatus() {
|
|
114
|
+
const tokens = (0, core_2.loadOAuthTokens)();
|
|
115
|
+
const configPath = path.join(os.homedir(), ".cdoing", "config.json");
|
|
116
|
+
let apiKeys;
|
|
117
|
+
let apiKeyHelper;
|
|
118
|
+
try {
|
|
119
|
+
if (fs.existsSync(configPath)) {
|
|
120
|
+
const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
121
|
+
apiKeys = config.apiKeys;
|
|
122
|
+
apiKeyHelper = config.apiKeyHelper;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch { }
|
|
126
|
+
const lines = [];
|
|
127
|
+
lines.push("Authentication Status");
|
|
128
|
+
lines.push("");
|
|
129
|
+
lines.push("OAuth (Claude):");
|
|
130
|
+
if (tokens) {
|
|
131
|
+
const expired = (0, core_2.isOAuthExpired)(tokens);
|
|
132
|
+
lines.push(` ${expired ? "✗ expired" : "✓ active"}`);
|
|
133
|
+
if (tokens.expires_at) {
|
|
134
|
+
lines.push(` Expires: ${new Date(tokens.expires_at).toLocaleString()}`);
|
|
135
|
+
}
|
|
136
|
+
lines.push(` Refresh token: ${tokens.refresh_token ? "available" : "none"}`);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
lines.push(" Not logged in — use /setup to authenticate");
|
|
140
|
+
}
|
|
141
|
+
lines.push("");
|
|
142
|
+
lines.push("API Key Helper (dynamic):");
|
|
143
|
+
if (apiKeyHelper) {
|
|
144
|
+
lines.push(` ✓ Script: ${apiKeyHelper}`);
|
|
145
|
+
lines.push(` Key is fetched by running this script on every startup`);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
lines.push(" Not configured");
|
|
149
|
+
lines.push(" Set with: /config set api-key-helper ~/path/to/script.sh");
|
|
150
|
+
}
|
|
151
|
+
lines.push("");
|
|
152
|
+
lines.push("Manually stored API keys:");
|
|
153
|
+
if (apiKeys && Object.keys(apiKeys).length > 0) {
|
|
154
|
+
for (const [provider, key] of Object.entries(apiKeys)) {
|
|
155
|
+
const masked = key.slice(0, 8) + "..." + key.slice(-4);
|
|
156
|
+
lines.push(` ✓ ${provider}: ${masked} (saved via /config set api-key)`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
lines.push(" None");
|
|
161
|
+
lines.push(" Set with: /config set api-key <your-key>");
|
|
162
|
+
}
|
|
163
|
+
lines.push("");
|
|
164
|
+
lines.push("Environment variables:");
|
|
165
|
+
const envVars = [
|
|
166
|
+
["ANTHROPIC_API_KEY", process.env.ANTHROPIC_API_KEY],
|
|
167
|
+
["OPENAI_API_KEY", process.env.OPENAI_API_KEY],
|
|
168
|
+
["GOOGLE_API_KEY", process.env.GOOGLE_API_KEY],
|
|
169
|
+
];
|
|
170
|
+
let hasEnvKey = false;
|
|
171
|
+
for (const [name, value] of envVars) {
|
|
172
|
+
if (value) {
|
|
173
|
+
hasEnvKey = true;
|
|
174
|
+
const masked = value.slice(0, 8) + "..." + value.slice(-4);
|
|
175
|
+
lines.push(` ✓ ${name}: ${masked}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (!hasEnvKey)
|
|
179
|
+
lines.push(" None");
|
|
180
|
+
return lines.join("\n");
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}
|
package/dist/review.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cdoing review — AI Code Review
|
|
3
|
+
*
|
|
4
|
+
* Gets the git diff and sends it to the AI for a structured review with
|
|
5
|
+
* concrete improvement suggestions and patches.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* cdoing review — review staged + unstaged changes
|
|
9
|
+
* cdoing review HEAD~1 — review last commit
|
|
10
|
+
* cdoing review --staged — review staged changes only
|
|
11
|
+
* cdoing review --base main — review diff from main branch
|
|
12
|
+
* cdoing review --output json — JSON output
|
|
13
|
+
*/
|
|
14
|
+
export interface ReviewOptions {
|
|
15
|
+
base?: string;
|
|
16
|
+
staged?: boolean;
|
|
17
|
+
dir: string;
|
|
18
|
+
model?: string;
|
|
19
|
+
provider?: string;
|
|
20
|
+
apiKey?: string;
|
|
21
|
+
mode: string;
|
|
22
|
+
output?: "text" | "json";
|
|
23
|
+
verbose?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function runReview(opts: ReviewOptions): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAcH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmFD,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiHlE"}
|
package/dist/review.js
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* cdoing review — AI Code Review
|
|
4
|
+
*
|
|
5
|
+
* Gets the git diff and sends it to the AI for a structured review with
|
|
6
|
+
* concrete improvement suggestions and patches.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* cdoing review — review staged + unstaged changes
|
|
10
|
+
* cdoing review HEAD~1 — review last commit
|
|
11
|
+
* cdoing review --staged — review staged changes only
|
|
12
|
+
* cdoing review --base main — review diff from main branch
|
|
13
|
+
* cdoing review --output json — JSON output
|
|
14
|
+
*/
|
|
15
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
16
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.runReview = runReview;
|
|
20
|
+
const child_process_1 = require("child_process");
|
|
21
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
22
|
+
const ai_1 = require("@cdoing/ai");
|
|
23
|
+
const core_1 = require("@cdoing/core");
|
|
24
|
+
const config_1 = require("./config");
|
|
25
|
+
const tools_1 = require("./tools");
|
|
26
|
+
function getDiff(opts) {
|
|
27
|
+
const cwd = opts.dir;
|
|
28
|
+
try {
|
|
29
|
+
if (opts.staged) {
|
|
30
|
+
const diff = (0, child_process_1.execSync)("git diff --cached", { cwd, encoding: "utf-8" });
|
|
31
|
+
return { diff, source: "staged changes" };
|
|
32
|
+
}
|
|
33
|
+
if (opts.base) {
|
|
34
|
+
const diff = (0, child_process_1.execSync)(`git diff ${opts.base}`, { cwd, encoding: "utf-8" });
|
|
35
|
+
return { diff, source: `diff from ${opts.base}` };
|
|
36
|
+
}
|
|
37
|
+
// Default: staged + unstaged; fall back to last commit if clean
|
|
38
|
+
const staged = (0, child_process_1.execSync)("git diff --cached", { cwd, encoding: "utf-8" });
|
|
39
|
+
const unstaged = (0, child_process_1.execSync)("git diff", { cwd, encoding: "utf-8" });
|
|
40
|
+
const combined = (staged + unstaged).trim();
|
|
41
|
+
if (combined) {
|
|
42
|
+
return { diff: combined, source: "current changes" };
|
|
43
|
+
}
|
|
44
|
+
// Nothing staged/unstaged — review last commit
|
|
45
|
+
const lastCommit = (0, child_process_1.execSync)("git diff HEAD~1 HEAD", { cwd, encoding: "utf-8" });
|
|
46
|
+
return { diff: lastCommit, source: "last commit" };
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
return { diff: "", source: "unknown" };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function getRecentCommits(dir) {
|
|
53
|
+
try {
|
|
54
|
+
return (0, child_process_1.execSync)("git log --oneline -5", { cwd: dir, encoding: "utf-8" }).trim();
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return "";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function getFileSummary(diff) {
|
|
61
|
+
const files = new Set();
|
|
62
|
+
for (const line of diff.split("\n")) {
|
|
63
|
+
if (line.startsWith("+++ b/") || line.startsWith("--- a/")) {
|
|
64
|
+
const f = line.slice(6);
|
|
65
|
+
if (f !== "/dev/null")
|
|
66
|
+
files.add(f);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return [...files].join(", ") || "(unknown files)";
|
|
70
|
+
}
|
|
71
|
+
const REVIEW_SYSTEM_PROMPT = `You are a senior staff engineer conducting a thorough code review. Analyze the provided git diff and give detailed, actionable feedback.
|
|
72
|
+
|
|
73
|
+
Structure your review as follows:
|
|
74
|
+
|
|
75
|
+
## Summary
|
|
76
|
+
Brief overview of what changed and the overall quality.
|
|
77
|
+
|
|
78
|
+
## Issues Found
|
|
79
|
+
For each issue, specify:
|
|
80
|
+
- **Severity**: Critical / Major / Minor / Nit
|
|
81
|
+
- **Location**: file:line
|
|
82
|
+
- **Problem**: what's wrong
|
|
83
|
+
- **Fix**: concrete code suggestion
|
|
84
|
+
|
|
85
|
+
## Security Concerns
|
|
86
|
+
Any security vulnerabilities, auth issues, data exposure, injection risks.
|
|
87
|
+
|
|
88
|
+
## Performance
|
|
89
|
+
Inefficient algorithms, unnecessary re-renders, N+1 queries, memory leaks.
|
|
90
|
+
|
|
91
|
+
## Missing Tests
|
|
92
|
+
What should be tested but isn't.
|
|
93
|
+
|
|
94
|
+
## Suggested Improvements
|
|
95
|
+
Additional improvements beyond bug fixes — readability, naming, patterns.
|
|
96
|
+
|
|
97
|
+
## Verdict
|
|
98
|
+
Overall: ✅ Approve / ⚠️ Approve with suggestions / ❌ Request changes
|
|
99
|
+
|
|
100
|
+
Be specific, cite line numbers, include before/after code snippets. Use markdown.`;
|
|
101
|
+
async function runReview(opts) {
|
|
102
|
+
console.log();
|
|
103
|
+
console.log(chalk_1.default.bold.cyan(" 🔍 AI Code Review"));
|
|
104
|
+
console.log(chalk_1.default.gray(" ─────────────────────────────────────────"));
|
|
105
|
+
const { diff, source } = getDiff(opts);
|
|
106
|
+
if (!diff.trim()) {
|
|
107
|
+
console.log(chalk_1.default.yellow(" No changes to review.\n"));
|
|
108
|
+
console.log(chalk_1.default.dim(" Tips:"));
|
|
109
|
+
console.log(chalk_1.default.dim(" cdoing review HEAD~1 — review last commit"));
|
|
110
|
+
console.log(chalk_1.default.dim(" cdoing review --staged — review staged changes"));
|
|
111
|
+
console.log(chalk_1.default.dim(" cdoing review --base main — review diff from main"));
|
|
112
|
+
console.log();
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const lines = diff.split("\n").length;
|
|
116
|
+
const files = getFileSummary(diff);
|
|
117
|
+
const commits = getRecentCommits(opts.dir);
|
|
118
|
+
console.log(chalk_1.default.white(` Source: `) + chalk_1.default.cyan(source));
|
|
119
|
+
console.log(chalk_1.default.white(` Files: `) + chalk_1.default.gray(files));
|
|
120
|
+
console.log(chalk_1.default.white(` Lines: `) + chalk_1.default.gray(String(lines)));
|
|
121
|
+
console.log();
|
|
122
|
+
console.log(chalk_1.default.dim(" Sending to AI for review..."));
|
|
123
|
+
console.log();
|
|
124
|
+
const cliOpts = {
|
|
125
|
+
model: opts.model,
|
|
126
|
+
provider: opts.provider || "anthropic",
|
|
127
|
+
apiKey: opts.apiKey,
|
|
128
|
+
dir: opts.dir,
|
|
129
|
+
mode: opts.mode || "auto",
|
|
130
|
+
};
|
|
131
|
+
await (0, config_1.resolveApiKey)(cliOpts);
|
|
132
|
+
const modelConfig = (0, config_1.buildModelConfig)(cliOpts);
|
|
133
|
+
const permissionManager = (0, config_1.createPermissionManager)(cliOpts);
|
|
134
|
+
const hookManager = new core_1.HookManager(opts.dir);
|
|
135
|
+
const memoryStore = new core_1.MemoryStore();
|
|
136
|
+
const projectConfig = (0, core_1.loadProjectConfig)(opts.dir);
|
|
137
|
+
const toolRegistry = (0, tools_1.createToolRegistry)(opts.dir);
|
|
138
|
+
const agent = new ai_1.AgentRunner(modelConfig, toolRegistry, permissionManager, hookManager, {
|
|
139
|
+
systemPrompt: REVIEW_SYSTEM_PROMPT,
|
|
140
|
+
projectConfig: projectConfig || undefined,
|
|
141
|
+
memory: memoryStore.formatForPrompt() || undefined,
|
|
142
|
+
});
|
|
143
|
+
// Truncate very large diffs (keep first 60k chars)
|
|
144
|
+
const truncatedDiff = diff.length > 60000
|
|
145
|
+
? diff.substring(0, 60000) + "\n\n... (diff truncated at 60k chars)"
|
|
146
|
+
: diff;
|
|
147
|
+
const prompt = [
|
|
148
|
+
commits ? `Recent commits:\n${commits}\n` : "",
|
|
149
|
+
`Please review the following git diff (${source}):\n`,
|
|
150
|
+
"```diff",
|
|
151
|
+
truncatedDiff,
|
|
152
|
+
"```",
|
|
153
|
+
].filter(Boolean).join("\n");
|
|
154
|
+
if (opts.output === "json") {
|
|
155
|
+
let response = "";
|
|
156
|
+
await agent.run(prompt, {
|
|
157
|
+
onToken: (t) => { response += t; },
|
|
158
|
+
onToolCall: () => { },
|
|
159
|
+
onToolResult: () => { },
|
|
160
|
+
onComplete: () => {
|
|
161
|
+
console.log(JSON.stringify({ review: response, source, files, lines }, null, 2));
|
|
162
|
+
},
|
|
163
|
+
onError: (e) => {
|
|
164
|
+
console.error(JSON.stringify({ error: e.message }));
|
|
165
|
+
process.exit(1);
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
// Streamed text output
|
|
171
|
+
let buffer = "";
|
|
172
|
+
await agent.run(prompt, {
|
|
173
|
+
onToken: (token) => {
|
|
174
|
+
buffer += token;
|
|
175
|
+
const parts = buffer.split("\n");
|
|
176
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
177
|
+
process.stdout.write(parts[i] + "\n");
|
|
178
|
+
}
|
|
179
|
+
buffer = parts[parts.length - 1];
|
|
180
|
+
},
|
|
181
|
+
onToolCall: (name) => {
|
|
182
|
+
if (opts.verbose) {
|
|
183
|
+
process.stdout.write(chalk_1.default.dim(`\n [${name}]\n`));
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
onToolResult: () => { },
|
|
187
|
+
onComplete: () => {
|
|
188
|
+
if (buffer)
|
|
189
|
+
process.stdout.write(buffer + "\n");
|
|
190
|
+
console.log();
|
|
191
|
+
},
|
|
192
|
+
onError: (e) => {
|
|
193
|
+
console.error(chalk_1.default.red(`\n ❌ Error: ${e.message}\n`));
|
|
194
|
+
process.exit(1);
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"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"}
|
package/dist/serve.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cdoing serve — HTTP API server
|
|
3
|
+
*
|
|
4
|
+
* Exposes the AI agent as a REST API:
|
|
5
|
+
* GET /health
|
|
6
|
+
* GET /sessions
|
|
7
|
+
* POST /sessions — create new session
|
|
8
|
+
* GET /sessions/:id
|
|
9
|
+
* POST /sessions/:id/messages — continue a conversation
|
|
10
|
+
* POST /chat — one-shot prompt
|
|
11
|
+
* POST /chat/stream — streaming via SSE
|
|
12
|
+
*/
|
|
13
|
+
export interface ServeOptions {
|
|
14
|
+
port: number;
|
|
15
|
+
host: string;
|
|
16
|
+
model?: string;
|
|
17
|
+
provider?: string;
|
|
18
|
+
apiKey?: string;
|
|
19
|
+
dir: string;
|
|
20
|
+
mode: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function startServer(opts: ServeOptions): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=serve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsBH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAyBD,wBAAsB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+NnE"}
|