nayan-ai 1.0.0-beta.3 → 1.0.0-beta.5

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.
Files changed (61) hide show
  1. package/README.md +101 -14
  2. package/dist/cli.js +21 -157
  3. package/dist/cli.js.map +1 -1
  4. package/dist/common/claude.d.ts +6 -0
  5. package/dist/common/claude.js +180 -0
  6. package/dist/common/claude.js.map +1 -0
  7. package/dist/common/codex.d.ts +6 -0
  8. package/dist/common/codex.js +169 -0
  9. package/dist/common/codex.js.map +1 -0
  10. package/dist/common/github.d.ts +22 -0
  11. package/dist/common/github.js +153 -0
  12. package/dist/common/github.js.map +1 -0
  13. package/dist/common/logs.d.ts +15 -0
  14. package/dist/common/logs.js +154 -0
  15. package/dist/common/logs.js.map +1 -0
  16. package/dist/{types.d.ts → common/types.d.ts} +36 -1
  17. package/dist/common/types.js.map +1 -0
  18. package/dist/common/utils.d.ts +3 -0
  19. package/dist/common/utils.js +11 -0
  20. package/dist/common/utils.js.map +1 -0
  21. package/dist/index.d.ts +7 -6
  22. package/dist/index.js +6 -5
  23. package/dist/index.js.map +1 -1
  24. package/dist/{analyzer.d.ts → review/analyzer.d.ts} +1 -1
  25. package/dist/review/analyzer.js.map +1 -0
  26. package/dist/review/command.d.ts +2 -0
  27. package/dist/review/command.js +111 -0
  28. package/dist/review/command.js.map +1 -0
  29. package/dist/review/prompt.js.map +1 -0
  30. package/dist/scan/command.d.ts +2 -0
  31. package/dist/scan/command.js +700 -0
  32. package/dist/scan/command.js.map +1 -0
  33. package/dist/scan/fixer.d.ts +30 -0
  34. package/dist/scan/fixer.js +264 -0
  35. package/dist/scan/fixer.js.map +1 -0
  36. package/dist/scan/prompt.d.ts +4 -0
  37. package/dist/scan/prompt.js +175 -0
  38. package/dist/scan/prompt.js.map +1 -0
  39. package/package.json +2 -2
  40. package/dist/analyzer.js.map +0 -1
  41. package/dist/claude.d.ts +0 -5
  42. package/dist/claude.js +0 -128
  43. package/dist/claude.js.map +0 -1
  44. package/dist/codex.d.ts +0 -5
  45. package/dist/codex.js +0 -129
  46. package/dist/codex.js.map +0 -1
  47. package/dist/github.d.ts +0 -15
  48. package/dist/github.js +0 -88
  49. package/dist/github.js.map +0 -1
  50. package/dist/logs.d.ts +0 -34
  51. package/dist/logs.js +0 -219
  52. package/dist/logs.js.map +0 -1
  53. package/dist/prompt.js.map +0 -1
  54. package/dist/repo.d.ts +0 -8
  55. package/dist/repo.js +0 -61
  56. package/dist/repo.js.map +0 -1
  57. package/dist/types.js.map +0 -1
  58. /package/dist/{types.js → common/types.js} +0 -0
  59. /package/dist/{analyzer.js → review/analyzer.js} +0 -0
  60. /package/dist/{prompt.d.ts → review/prompt.d.ts} +0 -0
  61. /package/dist/{prompt.js → review/prompt.js} +0 -0
package/dist/claude.js DELETED
@@ -1,128 +0,0 @@
1
- import { spawn } from 'child_process';
2
- import chalk from 'chalk';
3
- import { getReviewPrompt } from './prompt.js';
4
- export async function analyzeWithClaude(repoPath, baseBranch = 'origin/main', options) {
5
- const response = await runClaudeExec(repoPath, baseBranch, options);
6
- return parseClaudeResponse(response);
7
- }
8
- async function runClaudeExec(repoPath, baseBranch, options) {
9
- const prompt = getReviewPrompt(baseBranch);
10
- return new Promise((resolve, reject) => {
11
- // Use claude with -p for print mode and --output-format json
12
- const args = [
13
- '-p',
14
- '--output-format', 'json',
15
- '--dangerously-skip-permissions',
16
- prompt
17
- ];
18
- if (options.verbose) {
19
- console.log(`\n[Claude] Running: claude ${args.slice(0, 3).join(' ')} "<prompt>"`);
20
- console.log(`[Claude] Working directory: ${repoPath}`);
21
- }
22
- const startTime = Date.now();
23
- const child = spawn('claude', args, {
24
- cwd: repoPath,
25
- stdio: ['pipe', 'pipe', 'pipe'],
26
- });
27
- let stdout = '';
28
- let stderr = '';
29
- child.stdout.on('data', (data) => {
30
- const chunk = data.toString();
31
- stdout += chunk;
32
- if (options.verbose) {
33
- process.stdout.write(chunk);
34
- }
35
- else {
36
- // Show progress dots
37
- process.stdout.write(chalk.gray('.'));
38
- }
39
- });
40
- child.stderr.on('data', (data) => {
41
- const chunk = data.toString();
42
- stderr += chunk;
43
- if (options.verbose) {
44
- process.stderr.write(chunk);
45
- }
46
- });
47
- child.on('close', (code) => {
48
- const elapsed = Date.now() - startTime;
49
- if (!options.verbose) {
50
- console.log(); // New line after progress dots
51
- }
52
- console.log(`\n[Claude] Completed in ${(elapsed / 1000).toFixed(1)}s`);
53
- if (code !== 0) {
54
- const errorMsg = stderr || stdout || 'Unknown error';
55
- reject(new Error(`Claude review failed (exit ${code}): ${errorMsg.slice(0, 500)}`));
56
- return;
57
- }
58
- resolve(stdout);
59
- });
60
- child.on('error', (err) => {
61
- if (err.code === 'ENOENT') {
62
- reject(new Error('claude CLI not found. Install Claude Code CLI first: https://code.claude.com'));
63
- return;
64
- }
65
- reject(err);
66
- });
67
- });
68
- }
69
- function parseClaudeResponse(response) {
70
- // Claude with --output-format json outputs a JSON object with result field
71
- let parseError = null;
72
- try {
73
- const parsed = JSON.parse(response);
74
- // Claude JSON output has a 'result' field with the text response
75
- const text = parsed.result || parsed.text || response;
76
- // Try to extract JSON from the text
77
- const jsonMatch = text.match(/\{\s*"issues"\s*:\s*\[[\s\S]*?\]\s*\}/);
78
- if (jsonMatch) {
79
- const issuesJson = JSON.parse(jsonMatch[0]);
80
- if (issuesJson.issues && Array.isArray(issuesJson.issues)) {
81
- return issuesJson.issues
82
- .filter((item) => item.message)
83
- .map((item) => ({
84
- filename: item.filename || 'unknown',
85
- line: item.line || 0,
86
- category: item.category || 'functionality',
87
- severity: item.severity || 'info',
88
- message: item.message,
89
- suggestion: item.suggestion,
90
- }));
91
- }
92
- }
93
- }
94
- catch (err) {
95
- parseError = err;
96
- }
97
- // Fallback: try to find raw JSON in the response
98
- const jsonMatch = response.match(/\{\s*"issues"\s*:\s*\[[\s\S]*?\]\s*\}/);
99
- if (jsonMatch) {
100
- try {
101
- const parsed = JSON.parse(jsonMatch[0]);
102
- return (parsed.issues || [])
103
- .filter((item) => item.message)
104
- .map((item) => ({
105
- filename: item.filename || 'unknown',
106
- line: item.line || 0,
107
- category: item.category || 'functionality',
108
- severity: item.severity || 'info',
109
- message: item.message,
110
- suggestion: item.suggestion,
111
- }));
112
- }
113
- catch (err) {
114
- parseError = err;
115
- }
116
- }
117
- // If we couldn't parse any issues and there was an error, log it
118
- if (parseError) {
119
- console.warn(chalk.yellow(`\n⚠ Warning: Failed to parse Claude response: ${parseError.message}`));
120
- console.warn(chalk.gray(` Response preview: ${response.slice(0, 200)}...`));
121
- }
122
- else if (response.trim() && !response.includes('"issues"')) {
123
- console.warn(chalk.yellow(`\n⚠ Warning: Claude response does not contain expected issues format`));
124
- console.warn(chalk.gray(` Response preview: ${response.slice(0, 200)}...`));
125
- }
126
- return [];
127
- }
128
- //# sourceMappingURL=claude.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"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"}
package/dist/codex.d.ts DELETED
@@ -1,5 +0,0 @@
1
- import type { CodeIssue } from './types.js';
2
- export interface CodexOptions {
3
- verbose?: boolean;
4
- }
5
- export declare function analyzeWithCodex(repoPath: string, baseBranch: string | undefined, options: CodexOptions): Promise<CodeIssue[]>;
package/dist/codex.js DELETED
@@ -1,129 +0,0 @@
1
- import { spawn } from 'child_process';
2
- import { logProcessor } from './logs.js';
3
- import { getReviewPrompt } from './prompt.js';
4
- export async function analyzeWithCodex(repoPath, baseBranch = 'origin/main', options) {
5
- const response = await runCodexExec(repoPath, baseBranch, options);
6
- return parseCodexResponse(response);
7
- }
8
- async function runCodexExec(repoPath, baseBranch, options) {
9
- const prompt = getReviewPrompt(baseBranch);
10
- return new Promise((resolve, reject) => {
11
- // Use codex exec with --json for structured output
12
- const args = ['@openai/codex', 'exec', '--json', '--full-auto', prompt];
13
- if (options.verbose) {
14
- console.log(`\n[Codex] Running: npx ${args.join(' ')}`);
15
- console.log(`[Codex] Working directory: ${repoPath}`);
16
- }
17
- const startTime = Date.now();
18
- const child = spawn('npx', args, {
19
- cwd: repoPath,
20
- stdio: ['pipe', 'pipe', 'pipe'],
21
- });
22
- let stdout = '';
23
- let stderr = '';
24
- // Reset log processor for new analysis
25
- logProcessor.reset();
26
- child.stdout.on('data', (data) => {
27
- const chunk = data.toString();
28
- stdout += chunk;
29
- // Parse JSONL and show progress
30
- for (const line of chunk.split('\n')) {
31
- if (!line.trim())
32
- continue;
33
- try {
34
- const event = JSON.parse(line);
35
- if (options.verbose) {
36
- console.log(JSON.stringify(event, null, 2));
37
- }
38
- else {
39
- // Use log processor for nice interactive output
40
- logProcessor.processEvent(event);
41
- }
42
- }
43
- catch {
44
- // Not JSON
45
- }
46
- }
47
- });
48
- child.stderr.on('data', (data) => {
49
- const chunk = data.toString();
50
- stderr += chunk;
51
- if (options.verbose) {
52
- process.stderr.write(chunk);
53
- }
54
- });
55
- child.on('close', (code) => {
56
- const elapsed = Date.now() - startTime;
57
- console.log(`\n[Codex] Completed in ${(elapsed / 1000).toFixed(1)}s`);
58
- if (code !== 0) {
59
- const errorMsg = stderr || stdout || 'Unknown error';
60
- reject(new Error(`Codex review failed (exit ${code}): ${errorMsg.slice(0, 500)}`));
61
- return;
62
- }
63
- resolve(stdout);
64
- });
65
- child.on('error', (err) => {
66
- if (err.code === 'ENOENT') {
67
- reject(new Error('npx not found. Install Node.js/npm (Node 18+) to run nayan-ai.'));
68
- return;
69
- }
70
- reject(err);
71
- });
72
- });
73
- }
74
- function parseCodexResponse(response) {
75
- // codex exec --json outputs JSONL - parse each line looking for agent_message with issues
76
- const lines = response.split('\n');
77
- for (const line of lines) {
78
- if (!line.trim())
79
- continue;
80
- try {
81
- const event = JSON.parse(line);
82
- // Look for agent_message in item.completed events
83
- if (event.type === 'item.completed' && event.item?.type === 'agent_message') {
84
- const text = event.item.text;
85
- if (text) {
86
- // Parse the JSON from the agent's message
87
- const issuesJson = JSON.parse(text);
88
- if (issuesJson.issues && Array.isArray(issuesJson.issues)) {
89
- return issuesJson.issues
90
- .filter((item) => item.message)
91
- .map((item) => ({
92
- filename: item.filename || 'unknown',
93
- line: item.line || 0,
94
- category: item.category || 'functionality',
95
- severity: item.severity || 'info',
96
- message: item.message,
97
- suggestion: item.suggestion,
98
- }));
99
- }
100
- }
101
- }
102
- }
103
- catch {
104
- // Not valid JSON, skip
105
- }
106
- }
107
- // Fallback: try to find raw JSON in the response
108
- const jsonMatch = response.match(/\{\s*"issues"\s*:\s*\[[\s\S]*?\]\s*\}/);
109
- if (jsonMatch) {
110
- try {
111
- const parsed = JSON.parse(jsonMatch[0]);
112
- return (parsed.issues || [])
113
- .filter((item) => item.message)
114
- .map((item) => ({
115
- filename: item.filename || 'unknown',
116
- line: item.line || 0,
117
- category: item.category || 'functionality',
118
- severity: item.severity || 'info',
119
- message: item.message,
120
- suggestion: item.suggestion,
121
- }));
122
- }
123
- catch {
124
- // ignore
125
- }
126
- }
127
- return [];
128
- }
129
- //# sourceMappingURL=codex.js.map
package/dist/codex.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../src/codex.ts"],"names":[],"mappings":"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"}
package/dist/github.d.ts DELETED
@@ -1,15 +0,0 @@
1
- import type { PRInfo, PullRequest, PullRequestFile, FileChange, ReviewComment } from './types.js';
2
- export declare class GitHubClient {
3
- private token;
4
- private apiBase;
5
- constructor(token: string, githubUrl?: string);
6
- private fetch;
7
- getPullRequest(pr: PRInfo): Promise<PullRequest>;
8
- getPullRequestFiles(pr: PRInfo): Promise<PullRequestFile[]>;
9
- postReview(pr: PRInfo, commitId: string, body: string, comments: ReviewComment[]): Promise<void>;
10
- postComment(pr: PRInfo, body: string): Promise<void>;
11
- }
12
- export declare function parseFiles(files: PullRequestFile[]): FileChange[];
13
- export declare function parsePRReference(input: string): PRInfo & {
14
- githubUrl?: string;
15
- };
package/dist/github.js DELETED
@@ -1,88 +0,0 @@
1
- export class GitHubClient {
2
- token;
3
- apiBase;
4
- constructor(token, githubUrl) {
5
- this.token = token;
6
- this.apiBase = githubUrl
7
- ? `${githubUrl.replace(/\/$/, '')}/api/v3`
8
- : 'https://api.github.com';
9
- }
10
- async fetch(endpoint, options = {}) {
11
- const url = `${this.apiBase}${endpoint}`;
12
- const response = await fetch(url, {
13
- ...options,
14
- headers: {
15
- 'Accept': 'application/vnd.github.v3+json',
16
- 'Authorization': `Bearer ${this.token}`,
17
- 'User-Agent': 'nayan-ai',
18
- ...options.headers,
19
- },
20
- });
21
- if (!response.ok) {
22
- const body = await response.text();
23
- throw new Error(`GitHub API error (${response.status}): ${body}`);
24
- }
25
- return response.json();
26
- }
27
- async getPullRequest(pr) {
28
- return this.fetch(`/repos/${pr.owner}/${pr.repo}/pulls/${pr.number}`);
29
- }
30
- async getPullRequestFiles(pr) {
31
- return this.fetch(`/repos/${pr.owner}/${pr.repo}/pulls/${pr.number}/files?per_page=100`);
32
- }
33
- async postReview(pr, commitId, body, comments) {
34
- await this.fetch(`/repos/${pr.owner}/${pr.repo}/pulls/${pr.number}/reviews`, {
35
- method: 'POST',
36
- headers: { 'Content-Type': 'application/json' },
37
- body: JSON.stringify({
38
- commit_id: commitId,
39
- body,
40
- event: 'COMMENT',
41
- comments,
42
- }),
43
- });
44
- }
45
- async postComment(pr, body) {
46
- await this.fetch(`/repos/${pr.owner}/${pr.repo}/issues/${pr.number}/comments`, {
47
- method: 'POST',
48
- headers: { 'Content-Type': 'application/json' },
49
- body: JSON.stringify({ body }),
50
- });
51
- }
52
- }
53
- export function parseFiles(files) {
54
- return files
55
- .filter((f) => !!f.patch)
56
- .map((f) => ({
57
- filename: f.filename,
58
- patch: f.patch,
59
- }));
60
- }
61
- export function parsePRReference(input) {
62
- // Full URL: https://github.com/owner/repo/pull/123 or https://enterprise.example.com/owner/repo/pull/123
63
- const urlMatch = input.match(/^(https?:\/\/[^/]+)\/([^/]+)\/([^/]+)\/pull\/(\d+)/);
64
- if (urlMatch) {
65
- const baseUrl = urlMatch[1];
66
- // Only github.com (exactly) is public GitHub, everything else is enterprise
67
- const isEnterprise = !baseUrl.match(/^https?:\/\/(www\.)?github\.com$/i);
68
- return {
69
- owner: urlMatch[2],
70
- repo: urlMatch[3],
71
- number: parseInt(urlMatch[4], 10),
72
- githubUrl: isEnterprise ? baseUrl : undefined,
73
- };
74
- }
75
- // Short reference: owner/repo#123
76
- const shortMatch = input.match(/^([^/]+)\/([^#]+)#(\d+)$/);
77
- if (shortMatch) {
78
- return {
79
- owner: shortMatch[1],
80
- repo: shortMatch[2],
81
- number: parseInt(shortMatch[3], 10),
82
- };
83
- }
84
- throw new Error('Invalid PR reference. Use:\n' +
85
- ' - https://github.com/owner/repo/pull/123\n' +
86
- ' - owner/repo#123');
87
- }
88
- //# sourceMappingURL=github.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,YAAY;IACf,KAAK,CAAS;IACd,OAAO,CAAS;IAExB,YAAY,KAAa,EAAE,SAAkB;QAC3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,SAAS;YACtB,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS;YAC1C,CAAC,CAAC,wBAAwB,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,KAAK,CAAI,QAAgB,EAAE,UAAuB,EAAE;QAChE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,QAAQ,EAAE,gCAAgC;gBAC1C,eAAe,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;gBACvC,YAAY,EAAE,UAAU;gBACxB,GAAG,OAAO,CAAC,OAAO;aACnB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,EAAU;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAc,UAAU,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,EAAU;QAClC,OAAO,IAAI,CAAC,KAAK,CAAoB,UAAU,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,MAAM,qBAAqB,CAAC,CAAC;IAC9G,CAAC;IAED,KAAK,CAAC,UAAU,CACd,EAAU,EACV,QAAgB,EAChB,IAAY,EACZ,QAAyB;QAEzB,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,MAAM,UAAU,EAAE;YAC3E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,SAAS,EAAE,QAAQ;gBACnB,IAAI;gBACJ,KAAK,EAAE,SAAS;gBAChB,QAAQ;aACT,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,IAAY;QACxC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,WAAW,EAAE;YAC7E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;SAC/B,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,KAAwB;IACjD,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,CAAC,EAA4C,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SAClE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,CAAC,CAAC;AACR,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,yGAAyG;IACzG,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACnF,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,4EAA4E;QAC5E,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACzE,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;YAClB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACjC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC3D,IAAI,UAAU,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;YACpB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SACpC,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CACb,8BAA8B;QAC9B,8CAA8C;QAC9C,oBAAoB,CACrB,CAAC;AACJ,CAAC"}
package/dist/logs.d.ts DELETED
@@ -1,34 +0,0 @@
1
- export interface CodexEvent {
2
- type: string;
3
- item?: {
4
- id?: string;
5
- type?: string;
6
- text?: string;
7
- command?: string;
8
- aggregated_output?: string;
9
- exit_code?: number | null;
10
- status?: string;
11
- };
12
- thread_id?: string;
13
- }
14
- export declare class LogProcessor {
15
- private seenFiles;
16
- private currentPhase;
17
- private currentSpinner;
18
- private fileCount;
19
- private analyzedCount;
20
- processEvent(event: CodexEvent): void;
21
- private startSpinner;
22
- private succeedSpinner;
23
- private stopSpinner;
24
- private logAndSpin;
25
- private handleItemStarted;
26
- private handleItemCompleted;
27
- private handleReasoning;
28
- private wrapText;
29
- private handleCommandCompleted;
30
- private extractFilePath;
31
- private setPhase;
32
- reset(): void;
33
- }
34
- export declare const logProcessor: LogProcessor;
package/dist/logs.js DELETED
@@ -1,219 +0,0 @@
1
- import chalk from 'chalk';
2
- import ora from 'ora';
3
- export class LogProcessor {
4
- seenFiles = new Set();
5
- currentPhase = '';
6
- currentSpinner = null;
7
- fileCount = 0;
8
- analyzedCount = 0;
9
- processEvent(event) {
10
- switch (event.type) {
11
- case 'thread.started':
12
- this.startSpinner('Starting analysis...');
13
- break;
14
- case 'turn.started':
15
- // Silent - just marks the start of a turn
16
- break;
17
- case 'item.completed':
18
- this.handleItemCompleted(event);
19
- break;
20
- case 'item.started':
21
- this.handleItemStarted(event);
22
- break;
23
- case 'turn.completed':
24
- // Analysis complete - handled elsewhere
25
- break;
26
- }
27
- }
28
- startSpinner(text) {
29
- this.stopSpinner();
30
- this.currentSpinner = ora({
31
- text: chalk.cyan(text),
32
- prefixText: ' ',
33
- spinner: 'dots'
34
- }).start();
35
- }
36
- succeedSpinner(text) {
37
- if (this.currentSpinner) {
38
- this.currentSpinner.succeed(text ? chalk.green(text) : undefined);
39
- this.currentSpinner = null;
40
- }
41
- else if (text) {
42
- console.log(chalk.green(` ✔ ${text}`));
43
- }
44
- }
45
- stopSpinner() {
46
- if (this.currentSpinner) {
47
- this.currentSpinner.stop();
48
- this.currentSpinner = null;
49
- }
50
- }
51
- logAndSpin(text) {
52
- // First, succeed the current spinner to print it
53
- if (this.currentSpinner) {
54
- this.currentSpinner.succeed();
55
- }
56
- // Then start a new spinner with the new text
57
- this.currentSpinner = ora({
58
- text: chalk.cyan(text),
59
- prefixText: ' ',
60
- spinner: 'dots'
61
- }).start();
62
- }
63
- handleItemStarted(event) {
64
- const item = event.item;
65
- if (!item)
66
- return;
67
- if (item.type === 'command_execution' && item.command) {
68
- const cmd = item.command;
69
- // Git diff command
70
- if (cmd.includes('git diff')) {
71
- this.setPhase('diff');
72
- this.logAndSpin('Checking differences...');
73
- }
74
- }
75
- }
76
- handleItemCompleted(event) {
77
- const item = event.item;
78
- if (!item)
79
- return;
80
- if (item.type === 'reasoning' && item.text) {
81
- this.handleReasoning(item.text);
82
- }
83
- else if (item.type === 'command_execution') {
84
- this.handleCommandCompleted(item);
85
- }
86
- else if (item.type === 'agent_message') {
87
- this.succeedSpinner('Analysis complete');
88
- }
89
- }
90
- handleReasoning(text) {
91
- // Clean up the reasoning text - remove ** markers
92
- const cleanText = text.replace(/\*\*/g, '').trim();
93
- if (!cleanText)
94
- return;
95
- // Split into title (first line/sentence) and details
96
- const lines = cleanText.split('\n').filter(Boolean);
97
- // Check if it's a short title or has additional content
98
- if (lines.length === 1 && cleanText.length < 80) {
99
- // Short reasoning - just show as spinner
100
- this.logAndSpin(`💭 ${cleanText}`);
101
- }
102
- else {
103
- // Long reasoning - extract title and show details as bullet points
104
- let title = lines[0];
105
- let details = '';
106
- // If single line but long, split at first semicolon or period after 40 chars
107
- if (lines.length === 1) {
108
- const splitMatch = cleanText.match(/^(.{30,80}?[;.])\s*(.+)$/);
109
- if (splitMatch) {
110
- title = splitMatch[1];
111
- details = splitMatch[2];
112
- }
113
- }
114
- else {
115
- details = lines.slice(1).join(' ');
116
- }
117
- // Show title with spinner
118
- this.logAndSpin(`💭 ${title}`);
119
- // If there are details, print them as indented bullet points
120
- if (details) {
121
- // Succeed current spinner first
122
- if (this.currentSpinner) {
123
- this.currentSpinner.succeed();
124
- this.currentSpinner = null;
125
- }
126
- // Print details indented
127
- const detailLines = this.wrapText(details, 70);
128
- detailLines.forEach(line => {
129
- console.log(chalk.dim(` ${line}`));
130
- });
131
- }
132
- }
133
- }
134
- wrapText(text, maxWidth) {
135
- const words = text.split(' ');
136
- const lines = [];
137
- let currentLine = '';
138
- for (const word of words) {
139
- if (currentLine.length + word.length + 1 <= maxWidth) {
140
- currentLine += (currentLine ? ' ' : '') + word;
141
- }
142
- else {
143
- if (currentLine)
144
- lines.push(currentLine);
145
- currentLine = word;
146
- }
147
- }
148
- if (currentLine)
149
- lines.push(currentLine);
150
- return lines;
151
- }
152
- handleCommandCompleted(item) {
153
- if (!item)
154
- return;
155
- const cmd = item.command || '';
156
- const output = item.aggregated_output || '';
157
- // Git diff completed - show changed files count
158
- if (cmd.includes('git diff') && output) {
159
- const diffFiles = output.match(/diff --git a\/([^\s]+)/g);
160
- if (diffFiles && diffFiles.length > 0) {
161
- this.fileCount = diffFiles.length;
162
- this.succeedSpinner(`Found ${diffFiles.length} changed files`);
163
- }
164
- }
165
- // File listing with rg --files
166
- if (cmd.includes('rg --files') && output) {
167
- const files = output.trim().split('\n').filter(Boolean);
168
- if (files.length > 0) {
169
- this.succeedSpinner(`Identified ${files.length} files to analyze`);
170
- }
171
- }
172
- // File reading commands - extract and show file path
173
- const fileMatch = this.extractFilePath(cmd);
174
- if (fileMatch && !this.seenFiles.has(fileMatch)) {
175
- this.seenFiles.add(fileMatch);
176
- this.analyzedCount++;
177
- this.logAndSpin(`📄 Analyzing ${fileMatch}`);
178
- }
179
- }
180
- extractFilePath(cmd) {
181
- // Skip git commands - they're not file reads
182
- if (cmd.includes('git '))
183
- return null;
184
- // Match patterns like:
185
- // sed -n '1,260p' path/to/file.tsx
186
- // nl -ba path/to/file.ts
187
- // cat path/to/file.ts
188
- const patterns = [
189
- /sed\s+-n\s+'[^']+'\s+([^\s|]+\.[a-z]{1,4})/i,
190
- /nl\s+-ba\s+([^\s|]+\.[a-z]{1,4})/i,
191
- /cat\s+([^\s|]+\.[a-z]{1,4})/i,
192
- ];
193
- for (const pattern of patterns) {
194
- const match = cmd.match(pattern);
195
- if (match && match[1]) {
196
- // Skip if it's a glob pattern or doesn't look like a real file
197
- if (match[1].includes('*'))
198
- continue;
199
- // Must have a proper file extension (1-4 chars)
200
- if (!/\.[a-z]{1,4}$/i.test(match[1]))
201
- continue;
202
- return match[1];
203
- }
204
- }
205
- return null;
206
- }
207
- setPhase(phase) {
208
- this.currentPhase = phase;
209
- }
210
- reset() {
211
- this.stopSpinner();
212
- this.seenFiles.clear();
213
- this.currentPhase = '';
214
- this.fileCount = 0;
215
- this.analyzedCount = 0;
216
- }
217
- }
218
- export const logProcessor = new LogProcessor();
219
- //# sourceMappingURL=logs.js.map
package/dist/logs.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../src/logs.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,OAAO;;wBAEe,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DAwE2B,CAAC;AAC9D,CAAC"}