@trishchuk/codex-mcp-tool 1.0.5 → 1.2.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/README.md +10 -11
- package/dist/constants.d.ts +55 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +74 -31
- package/dist/constants.js.map +1 -1
- package/dist/index.js +28 -26
- package/dist/index.js.map +1 -1
- package/dist/tools/apply-diff.tool.d.ts +3 -0
- package/dist/tools/apply-diff.tool.d.ts.map +1 -0
- package/dist/tools/apply-diff.tool.js +52 -0
- package/dist/tools/apply-diff.tool.js.map +1 -0
- package/dist/tools/ask-codex.tool.d.ts.map +1 -1
- package/dist/tools/ask-codex.tool.js +158 -33
- package/dist/tools/ask-codex.tool.js.map +1 -1
- package/dist/tools/batch-codex.tool.d.ts +3 -0
- package/dist/tools/batch-codex.tool.d.ts.map +1 -0
- package/dist/tools/batch-codex.tool.js +134 -0
- package/dist/tools/batch-codex.tool.js.map +1 -0
- package/dist/tools/brainstorm.tool.d.ts.map +1 -1
- package/dist/tools/brainstorm.tool.js +62 -29
- package/dist/tools/brainstorm.tool.js.map +1 -1
- package/dist/tools/exec-codex.tool.d.ts +3 -0
- package/dist/tools/exec-codex.tool.d.ts.map +1 -0
- package/dist/tools/exec-codex.tool.js +46 -0
- package/dist/tools/exec-codex.tool.js.map +1 -0
- package/dist/tools/fetch-chunk.tool.d.ts.map +1 -1
- package/dist/tools/fetch-chunk.tool.js +12 -8
- package/dist/tools/fetch-chunk.tool.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +6 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/registry.d.ts +3 -3
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +9 -5
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/review-codex.tool.d.ts +3 -0
- package/dist/tools/review-codex.tool.d.ts.map +1 -0
- package/dist/tools/review-codex.tool.js +91 -0
- package/dist/tools/review-codex.tool.js.map +1 -0
- package/dist/tools/simple-tools.d.ts +1 -0
- package/dist/tools/simple-tools.d.ts.map +1 -1
- package/dist/tools/simple-tools.js +42 -11
- package/dist/tools/simple-tools.js.map +1 -1
- package/dist/tools/test-tool.example.d.ts.map +1 -1
- package/dist/tools/test-tool.example.js +12 -10
- package/dist/tools/test-tool.example.js.map +1 -1
- package/dist/tools/timeout-test.tool.js +5 -5
- package/dist/tools/timeout-test.tool.js.map +1 -1
- package/dist/utils/changeModeChunker.d.ts.map +1 -1
- package/dist/utils/changeModeChunker.js +10 -6
- package/dist/utils/changeModeChunker.js.map +1 -1
- package/dist/utils/changeModeParser.d.ts.map +1 -1
- package/dist/utils/changeModeParser.js.map +1 -1
- package/dist/utils/changeModeRunner.d.ts.map +1 -1
- package/dist/utils/changeModeRunner.js +17 -11
- package/dist/utils/changeModeRunner.js.map +1 -1
- package/dist/utils/changeModeTranslator.d.ts.map +1 -1
- package/dist/utils/changeModeTranslator.js +5 -2
- package/dist/utils/changeModeTranslator.js.map +1 -1
- package/dist/utils/chunkCache.d.ts.map +1 -1
- package/dist/utils/chunkCache.js +6 -4
- package/dist/utils/chunkCache.js.map +1 -1
- package/dist/utils/codexExecutor.d.ts +17 -0
- package/dist/utils/codexExecutor.d.ts.map +1 -1
- package/dist/utils/codexExecutor.js +163 -4
- package/dist/utils/codexExecutor.js.map +1 -1
- package/dist/utils/commandExecutor.d.ts.map +1 -1
- package/dist/utils/commandExecutor.js +25 -17
- package/dist/utils/commandExecutor.js.map +1 -1
- package/dist/utils/fibonacci.d.ts +2 -0
- package/dist/utils/fibonacci.d.ts.map +1 -0
- package/dist/utils/fibonacci.js +17 -0
- package/dist/utils/fibonacci.js.map +1 -0
- package/dist/utils/gitHelper.d.ts +20 -0
- package/dist/utils/gitHelper.d.ts.map +1 -0
- package/dist/utils/gitHelper.js +66 -0
- package/dist/utils/gitHelper.js.map +1 -0
- package/dist/utils/logger.d.ts +2 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +21 -15
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/outputParser.d.ts +26 -0
- package/dist/utils/outputParser.d.ts.map +1 -0
- package/dist/utils/outputParser.js +174 -0
- package/dist/utils/outputParser.js.map +1 -0
- package/dist/utils/reviewParser.d.ts +28 -0
- package/dist/utils/reviewParser.d.ts.map +1 -0
- package/dist/utils/reviewParser.js +87 -0
- package/dist/utils/reviewParser.js.map +1 -0
- package/dist/utils/workingDirResolver.d.ts +47 -0
- package/dist/utils/workingDirResolver.d.ts.map +1 -0
- package/dist/utils/workingDirResolver.js +199 -0
- package/dist/utils/workingDirResolver.js.map +1 -0
- package/package.json +6 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandExecutor.js","sourceRoot":"","sources":["../../src/utils/commandExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAyBrC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAe,EACf,IAAc,EACd,UAA0B,EAAE;IAE5B,MAAM,EACJ,UAAU,EACV,SAAS,GAAG,MAAM,EAClB,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,eAAe;IAClD,KAAK,
|
|
1
|
+
{"version":3,"file":"commandExecutor.js","sourceRoot":"","sources":["../../src/utils/commandExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fibonacci.d.ts","sourceRoot":"","sources":["../../src/utils/fibonacci.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAmB3C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function fibonacci(n) {
|
|
2
|
+
if (!Number.isInteger(n) || n < 0) {
|
|
3
|
+
throw new Error('fibonacci expects a non-negative integer');
|
|
4
|
+
}
|
|
5
|
+
if (n <= 1) {
|
|
6
|
+
return n;
|
|
7
|
+
}
|
|
8
|
+
let prev = 0;
|
|
9
|
+
let curr = 1;
|
|
10
|
+
for (let i = 2; i <= n; i += 1) {
|
|
11
|
+
const next = prev + curr;
|
|
12
|
+
prev = curr;
|
|
13
|
+
curr = next;
|
|
14
|
+
}
|
|
15
|
+
return curr;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=fibonacci.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fibonacci.js","sourceRoot":"","sources":["../../src/utils/fibonacci.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC;QACZ,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface GitChanges {
|
|
2
|
+
diff: string;
|
|
3
|
+
stagedDiff: string;
|
|
4
|
+
untrackedFiles: string[];
|
|
5
|
+
modifiedFiles: string[];
|
|
6
|
+
hasChanges: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Get comprehensive git changes for review
|
|
10
|
+
*/
|
|
11
|
+
export declare function getGitChanges(): Promise<GitChanges>;
|
|
12
|
+
/**
|
|
13
|
+
* Format git changes for review prompt
|
|
14
|
+
*/
|
|
15
|
+
export declare function formatChangesForReview(changes: GitChanges): string;
|
|
16
|
+
/**
|
|
17
|
+
* Get git status summary
|
|
18
|
+
*/
|
|
19
|
+
export declare function getGitStatus(): Promise<string>;
|
|
20
|
+
//# sourceMappingURL=gitHelper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitHelper.d.ts","sourceRoot":"","sources":["../../src/utils/gitHelper.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CA+BzD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAoBlE;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAQpD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { executeCommand } from './commandExecutor.js';
|
|
2
|
+
import { Logger } from './logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Get comprehensive git changes for review
|
|
5
|
+
*/
|
|
6
|
+
export async function getGitChanges() {
|
|
7
|
+
try {
|
|
8
|
+
// Get unstaged changes
|
|
9
|
+
const diffResult = await executeCommand('git', ['diff', 'HEAD']);
|
|
10
|
+
const diff = diffResult.trim();
|
|
11
|
+
// Get staged changes
|
|
12
|
+
const stagedResult = await executeCommand('git', ['diff', '--cached']);
|
|
13
|
+
const stagedDiff = stagedResult.trim();
|
|
14
|
+
// Get list of modified files
|
|
15
|
+
const modifiedResult = await executeCommand('git', ['diff', '--name-only', 'HEAD']);
|
|
16
|
+
const modifiedFiles = modifiedResult.trim().split('\n').filter(Boolean);
|
|
17
|
+
// Get list of untracked files
|
|
18
|
+
const untrackedResult = await executeCommand('git', ['ls-files', '--others', '--exclude-standard']);
|
|
19
|
+
const untrackedFiles = untrackedResult.trim().split('\n').filter(Boolean);
|
|
20
|
+
const hasChanges = diff.length > 0 || stagedDiff.length > 0 || untrackedFiles.length > 0;
|
|
21
|
+
return {
|
|
22
|
+
diff,
|
|
23
|
+
stagedDiff,
|
|
24
|
+
untrackedFiles,
|
|
25
|
+
modifiedFiles,
|
|
26
|
+
hasChanges
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
Logger.error('Failed to get git changes:', error);
|
|
31
|
+
throw new Error(`Failed to get git changes: ${error}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Format git changes for review prompt
|
|
36
|
+
*/
|
|
37
|
+
export function formatChangesForReview(changes) {
|
|
38
|
+
const sections = [];
|
|
39
|
+
if (changes.diff) {
|
|
40
|
+
sections.push('## Unstaged Changes\n```diff\n' + changes.diff + '\n```');
|
|
41
|
+
}
|
|
42
|
+
if (changes.stagedDiff) {
|
|
43
|
+
sections.push('## Staged Changes\n```diff\n' + changes.stagedDiff + '\n```');
|
|
44
|
+
}
|
|
45
|
+
if (changes.untrackedFiles.length > 0) {
|
|
46
|
+
sections.push('## Untracked Files\n' + changes.untrackedFiles.map(f => `- ${f}`).join('\n'));
|
|
47
|
+
}
|
|
48
|
+
if (sections.length === 0) {
|
|
49
|
+
return 'No changes detected in the repository.';
|
|
50
|
+
}
|
|
51
|
+
return sections.join('\n\n');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get git status summary
|
|
55
|
+
*/
|
|
56
|
+
export async function getGitStatus() {
|
|
57
|
+
try {
|
|
58
|
+
const result = await executeCommand('git', ['status', '--short']);
|
|
59
|
+
return result.trim();
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
Logger.error('Failed to get git status:', error);
|
|
63
|
+
return '';
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=gitHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitHelper.js","sourceRoot":"","sources":["../../src/utils/gitHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAUrC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC;QACH,uBAAuB;QACvB,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAE/B,qBAAqB;QACrB,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QAEvC,6BAA6B;QAC7B,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;QACpF,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAExE,8BAA8B;QAC9B,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACpG,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE1E,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAEzF,OAAO;YACL,IAAI;YACJ,UAAU;YACV,cAAc;YACd,aAAa;YACb,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAmB;IACxD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,gCAAgC,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,8BAA8B,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,wCAAwC,CAAC;IAClD,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QACjD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { LoggingLevel } from
|
|
1
|
+
import type { LoggingLevel } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
export declare class Logger {
|
|
3
3
|
private static currentLevel;
|
|
4
4
|
static setLevel(level: LoggingLevel): void;
|
|
@@ -15,5 +15,6 @@ export declare class Logger {
|
|
|
15
15
|
static commandExecution(command: string, args: string[], startTime: number): void;
|
|
16
16
|
private static _commandStartTimes;
|
|
17
17
|
static commandComplete(startTime: number, exitCode: number | null, outputLength?: number): void;
|
|
18
|
+
static codexResponse(response: string, tokensUsed?: number): void;
|
|
18
19
|
}
|
|
19
20
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAyBvE,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,YAAY,CAA2B;IAEtD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAI1C,MAAM,CAAC,QAAQ,IAAI,YAAY;IAI/B,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB,OAAO,CAAC,MAAM,CAAC,aAAa;IAI5B,OAAO,CAAC,MAAM,CAAC,IAAI;IAOnB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAIjD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAIlD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAInD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAInD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;IAIxD,MAAM,CAAC,cAAc,CACnB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,EACjB,UAAU,CAAC,EAAE,OAAO,GACnB,IAAI;IAIP,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAQjF,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAG7B;IAEJ,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAW/F,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;CAMlE"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LOG_PREFIX } from
|
|
1
|
+
import { LOG_PREFIX } from '../constants.js';
|
|
2
2
|
const LEVEL_ORDER = {
|
|
3
3
|
debug: 0,
|
|
4
4
|
info: 1,
|
|
@@ -10,17 +10,17 @@ const LEVEL_ORDER = {
|
|
|
10
10
|
emergency: 7,
|
|
11
11
|
};
|
|
12
12
|
const LEVEL_CONSOLE_METHOD = {
|
|
13
|
-
debug:
|
|
14
|
-
info:
|
|
15
|
-
notice:
|
|
16
|
-
warning:
|
|
17
|
-
error:
|
|
18
|
-
critical:
|
|
19
|
-
alert:
|
|
20
|
-
emergency:
|
|
13
|
+
debug: 'log',
|
|
14
|
+
info: 'log',
|
|
15
|
+
notice: 'log',
|
|
16
|
+
warning: 'warn',
|
|
17
|
+
error: 'error',
|
|
18
|
+
critical: 'error',
|
|
19
|
+
alert: 'error',
|
|
20
|
+
emergency: 'error',
|
|
21
21
|
};
|
|
22
22
|
export class Logger {
|
|
23
|
-
static currentLevel =
|
|
23
|
+
static currentLevel = 'warning';
|
|
24
24
|
static setLevel(level) {
|
|
25
25
|
this.currentLevel = level;
|
|
26
26
|
}
|
|
@@ -40,16 +40,16 @@ export class Logger {
|
|
|
40
40
|
console[consoleMethod](this.formatMessage(level, message), ...args);
|
|
41
41
|
}
|
|
42
42
|
static log(message, ...args) {
|
|
43
|
-
this.emit(
|
|
43
|
+
this.emit('info', message, ...args);
|
|
44
44
|
}
|
|
45
45
|
static warn(message, ...args) {
|
|
46
|
-
this.emit(
|
|
46
|
+
this.emit('warning', message, ...args);
|
|
47
47
|
}
|
|
48
48
|
static error(message, ...args) {
|
|
49
|
-
this.emit(
|
|
49
|
+
this.emit('error', message, ...args);
|
|
50
50
|
}
|
|
51
51
|
static debug(message, ...args) {
|
|
52
|
-
this.emit(
|
|
52
|
+
this.emit('debug', message, ...args);
|
|
53
53
|
}
|
|
54
54
|
static toolInvocation(toolName, args) {
|
|
55
55
|
this.debug(`Raw args for tool '${toolName}':`, JSON.stringify(args, null, 2));
|
|
@@ -58,7 +58,7 @@ export class Logger {
|
|
|
58
58
|
this.debug(`Parsed prompt: "${prompt}"\nchangeMode: ${changeMode || false}`);
|
|
59
59
|
}
|
|
60
60
|
static commandExecution(command, args, startTime) {
|
|
61
|
-
this.warn(`[${startTime}] Starting: ${command} ${args.map(
|
|
61
|
+
this.warn(`[${startTime}] Starting: ${command} ${args.map(arg => `"${arg}"`).join(' ')}`);
|
|
62
62
|
// Store command execution start for timing analysis
|
|
63
63
|
this._commandStartTimes.set(startTime, { command, args, startTime });
|
|
64
64
|
}
|
|
@@ -73,5 +73,11 @@ export class Logger {
|
|
|
73
73
|
// Clean up command tracking
|
|
74
74
|
this._commandStartTimes.delete(startTime);
|
|
75
75
|
}
|
|
76
|
+
static codexResponse(response, tokensUsed) {
|
|
77
|
+
this.debug(`Codex response: ${response.substring(0, 200)}...`);
|
|
78
|
+
if (tokensUsed) {
|
|
79
|
+
this.debug(`Tokens used: ${tokensUsed}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
76
82
|
}
|
|
77
83
|
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface CodexOutput {
|
|
2
|
+
metadata: {
|
|
3
|
+
version?: string;
|
|
4
|
+
workdir?: string;
|
|
5
|
+
model?: string;
|
|
6
|
+
provider?: string;
|
|
7
|
+
approval?: string;
|
|
8
|
+
sandbox?: string;
|
|
9
|
+
reasoning_effort?: string;
|
|
10
|
+
reasoning_summaries?: string;
|
|
11
|
+
[key: string]: string | undefined;
|
|
12
|
+
};
|
|
13
|
+
userInstructions: string;
|
|
14
|
+
thinking?: string;
|
|
15
|
+
response: string;
|
|
16
|
+
tokensUsed?: number;
|
|
17
|
+
timestamps: string[];
|
|
18
|
+
rawOutput: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function parseCodexOutput(rawOutput: string): CodexOutput;
|
|
21
|
+
export declare function formatCodexResponse(output: CodexOutput, includeThinking?: boolean, includeMetadata?: boolean): string;
|
|
22
|
+
export declare function formatCodexResponseForMCP(result: string, includeThinking?: boolean, includeMetadata?: boolean): string;
|
|
23
|
+
export declare function extractCodeBlocks(text: string): string[];
|
|
24
|
+
export declare function extractDiffBlocks(text: string): string[];
|
|
25
|
+
export declare function isErrorResponse(output: CodexOutput | string): boolean;
|
|
26
|
+
//# sourceMappingURL=outputParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputParser.d.ts","sourceRoot":"","sources":["../../src/utils/outputParser.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAqG/D;AAiBD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,eAAe,GAAE,OAAc,EAC/B,eAAe,GAAE,OAAc,GAC9B,MAAM,CA8BR;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,eAAe,GAAE,OAAc,EAC/B,eAAe,GAAE,OAAc,GAC9B,MAAM,CASR;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAIxD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAIxD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,CAgBrE"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { Logger } from './logger.js';
|
|
2
|
+
export function parseCodexOutput(rawOutput) {
|
|
3
|
+
const lines = rawOutput.split('\n');
|
|
4
|
+
const timestamps = [];
|
|
5
|
+
let metadata = {};
|
|
6
|
+
let userInstructions = '';
|
|
7
|
+
let thinking = '';
|
|
8
|
+
let response = '';
|
|
9
|
+
let tokensUsed;
|
|
10
|
+
let currentSection = 'header';
|
|
11
|
+
let metadataLines = [];
|
|
12
|
+
let thinkingLines = [];
|
|
13
|
+
let responseLines = [];
|
|
14
|
+
for (let i = 0; i < lines.length; i++) {
|
|
15
|
+
const line = lines[i];
|
|
16
|
+
// Extract timestamps
|
|
17
|
+
const timestampMatch = line.match(/^\[([^\]]+)\]/);
|
|
18
|
+
if (timestampMatch) {
|
|
19
|
+
timestamps.push(timestampMatch[1]);
|
|
20
|
+
}
|
|
21
|
+
// Extract tokens used
|
|
22
|
+
const tokensMatch = line.match(/tokens used:\s*(\d+)/);
|
|
23
|
+
if (tokensMatch) {
|
|
24
|
+
tokensUsed = parseInt(tokensMatch[1], 10);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
// Identify sections
|
|
28
|
+
if (line.includes('OpenAI Codex') || line.includes('Codex CLI')) {
|
|
29
|
+
currentSection = 'header';
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
else if (line.startsWith('--------')) {
|
|
33
|
+
if (currentSection === 'header') {
|
|
34
|
+
currentSection = 'metadata';
|
|
35
|
+
}
|
|
36
|
+
else if (currentSection === 'metadata') {
|
|
37
|
+
currentSection = 'content';
|
|
38
|
+
}
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
else if (line.includes('User instructions:')) {
|
|
42
|
+
currentSection = 'userInstructions';
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
else if (line.includes('thinking')) {
|
|
46
|
+
currentSection = 'thinking';
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
else if (line.includes('codex') || line.includes('assistant')) {
|
|
50
|
+
currentSection = 'response';
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
// Parse based on current section
|
|
54
|
+
switch (currentSection) {
|
|
55
|
+
case 'metadata':
|
|
56
|
+
if (line.trim()) {
|
|
57
|
+
metadataLines.push(line.trim());
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
case 'userInstructions':
|
|
61
|
+
if (line.trim() && !line.includes('User instructions:')) {
|
|
62
|
+
userInstructions += line + '\n';
|
|
63
|
+
}
|
|
64
|
+
break;
|
|
65
|
+
case 'thinking':
|
|
66
|
+
if (line.trim() && !line.includes('thinking')) {
|
|
67
|
+
thinkingLines.push(line);
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
case 'response':
|
|
71
|
+
case 'content':
|
|
72
|
+
if (line.trim() &&
|
|
73
|
+
!line.includes('codex') &&
|
|
74
|
+
!line.includes('assistant') &&
|
|
75
|
+
!line.includes('tokens used:')) {
|
|
76
|
+
responseLines.push(line);
|
|
77
|
+
}
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Parse metadata
|
|
82
|
+
metadata = parseMetadata(metadataLines);
|
|
83
|
+
thinking = thinkingLines.join('\n').trim();
|
|
84
|
+
response = responseLines.join('\n').trim() || rawOutput; // Fallback to raw output if no response found
|
|
85
|
+
userInstructions = userInstructions.trim();
|
|
86
|
+
const output = {
|
|
87
|
+
metadata,
|
|
88
|
+
userInstructions,
|
|
89
|
+
thinking: thinking || undefined,
|
|
90
|
+
response,
|
|
91
|
+
tokensUsed,
|
|
92
|
+
timestamps,
|
|
93
|
+
rawOutput,
|
|
94
|
+
};
|
|
95
|
+
Logger.codexResponse(response, tokensUsed);
|
|
96
|
+
return output;
|
|
97
|
+
}
|
|
98
|
+
function parseMetadata(metadataLines) {
|
|
99
|
+
const metadata = {};
|
|
100
|
+
for (const line of metadataLines) {
|
|
101
|
+
const colonIndex = line.indexOf(':');
|
|
102
|
+
if (colonIndex > 0) {
|
|
103
|
+
const key = line.substring(0, colonIndex).trim().toLowerCase().replace(/\s+/g, '_');
|
|
104
|
+
const value = line.substring(colonIndex + 1).trim();
|
|
105
|
+
metadata[key] = value;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return metadata;
|
|
109
|
+
}
|
|
110
|
+
export function formatCodexResponse(output, includeThinking = true, includeMetadata = true) {
|
|
111
|
+
let formatted = '';
|
|
112
|
+
// Add metadata summary if requested
|
|
113
|
+
if (includeMetadata && (output.metadata.model || output.metadata.sandbox)) {
|
|
114
|
+
formatted += `**Codex Configuration:**\n`;
|
|
115
|
+
if (output.metadata.model)
|
|
116
|
+
formatted += `- Model: ${output.metadata.model}\n`;
|
|
117
|
+
if (output.metadata.sandbox)
|
|
118
|
+
formatted += `- Sandbox: ${output.metadata.sandbox}\n`;
|
|
119
|
+
if (output.metadata.approval)
|
|
120
|
+
formatted += `- Approval: ${output.metadata.approval}\n`;
|
|
121
|
+
formatted += '\n';
|
|
122
|
+
}
|
|
123
|
+
// Add thinking section if requested and available
|
|
124
|
+
if (includeThinking && output.thinking) {
|
|
125
|
+
formatted += `**Reasoning:**\n`;
|
|
126
|
+
formatted += output.thinking + '\n\n';
|
|
127
|
+
}
|
|
128
|
+
// Add main response
|
|
129
|
+
if (includeMetadata || includeThinking) {
|
|
130
|
+
formatted += `**Response:**\n`;
|
|
131
|
+
}
|
|
132
|
+
formatted += output.response;
|
|
133
|
+
// Add token usage if available
|
|
134
|
+
if (output.tokensUsed) {
|
|
135
|
+
formatted += `\n\n*Tokens used: ${output.tokensUsed}*`;
|
|
136
|
+
}
|
|
137
|
+
return formatted;
|
|
138
|
+
}
|
|
139
|
+
export function formatCodexResponseForMCP(result, includeThinking = true, includeMetadata = true) {
|
|
140
|
+
// Try to parse the output first
|
|
141
|
+
try {
|
|
142
|
+
const parsed = parseCodexOutput(result);
|
|
143
|
+
return formatCodexResponse(parsed, includeThinking, includeMetadata);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// If parsing fails, return the raw output
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
export function extractCodeBlocks(text) {
|
|
151
|
+
const codeBlockRegex = /```[\s\S]*?```/g;
|
|
152
|
+
const matches = text.match(codeBlockRegex);
|
|
153
|
+
return matches || [];
|
|
154
|
+
}
|
|
155
|
+
export function extractDiffBlocks(text) {
|
|
156
|
+
const diffRegex = /```diff[\s\S]*?```/g;
|
|
157
|
+
const matches = text.match(diffRegex);
|
|
158
|
+
return matches || [];
|
|
159
|
+
}
|
|
160
|
+
export function isErrorResponse(output) {
|
|
161
|
+
const errorKeywords = [
|
|
162
|
+
'error',
|
|
163
|
+
'failed',
|
|
164
|
+
'unable',
|
|
165
|
+
'cannot',
|
|
166
|
+
'authentication',
|
|
167
|
+
'permission denied',
|
|
168
|
+
'rate limit',
|
|
169
|
+
'quota exceeded',
|
|
170
|
+
];
|
|
171
|
+
const responseText = typeof output === 'string' ? output.toLowerCase() : output.response.toLowerCase();
|
|
172
|
+
return errorKeywords.some(keyword => responseText.includes(keyword));
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=outputParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputParser.js","sourceRoot":"","sources":["../../src/utils/outputParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface ReviewFinding {
|
|
2
|
+
title: string;
|
|
3
|
+
body: string;
|
|
4
|
+
confidence_score: number;
|
|
5
|
+
priority?: number;
|
|
6
|
+
code_location?: {
|
|
7
|
+
absolute_file_path: string;
|
|
8
|
+
line_range: {
|
|
9
|
+
start: number;
|
|
10
|
+
end: number;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface ReviewOutput {
|
|
15
|
+
findings: ReviewFinding[];
|
|
16
|
+
overall_correctness: 'patch is correct' | 'patch is incorrect';
|
|
17
|
+
overall_explanation: string;
|
|
18
|
+
overall_confidence_score: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse review output from Codex response
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseReviewOutput(response: string): ReviewOutput | null;
|
|
24
|
+
/**
|
|
25
|
+
* Format review findings for display
|
|
26
|
+
*/
|
|
27
|
+
export declare function formatReviewFindings(review: ReviewOutput): string;
|
|
28
|
+
//# sourceMappingURL=reviewParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewParser.d.ts","sourceRoot":"","sources":["../../src/utils/reviewParser.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE;QACd,kBAAkB,EAAE,MAAM,CAAC;QAC3B,UAAU,EAAE;YACV,KAAK,EAAE,MAAM,CAAC;YACd,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,mBAAmB,EAAE,kBAAkB,GAAG,oBAAoB,CAAC;IAC/D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAwBvE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA6CjE"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Logger } from './logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse review output from Codex response
|
|
4
|
+
*/
|
|
5
|
+
export function parseReviewOutput(response) {
|
|
6
|
+
try {
|
|
7
|
+
// Try to extract JSON from the response
|
|
8
|
+
// Look for JSON object pattern
|
|
9
|
+
const jsonMatch = response.match(/\{[\s\S]*"findings"[\s\S]*\}/);
|
|
10
|
+
if (!jsonMatch) {
|
|
11
|
+
Logger.warn('No JSON review output found in response');
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
const reviewData = JSON.parse(jsonMatch[0]);
|
|
15
|
+
// Validate structure
|
|
16
|
+
if (!Array.isArray(reviewData.findings)) {
|
|
17
|
+
Logger.warn('Invalid review output structure: missing findings array');
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return reviewData;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
Logger.error('Failed to parse review output:', error);
|
|
24
|
+
Logger.debug('Raw response:', response.substring(0, 500));
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Format review findings for display
|
|
30
|
+
*/
|
|
31
|
+
export function formatReviewFindings(review) {
|
|
32
|
+
const lines = [];
|
|
33
|
+
// Overall verdict
|
|
34
|
+
const verdict = review.overall_correctness === 'patch is correct' ? '✅' : '❌';
|
|
35
|
+
lines.push(`## Review Result: ${verdict} ${review.overall_correctness.toUpperCase()}`);
|
|
36
|
+
lines.push('');
|
|
37
|
+
lines.push(`**Overall Assessment:** ${review.overall_explanation}`);
|
|
38
|
+
lines.push(`**Confidence:** ${(review.overall_confidence_score * 100).toFixed(0)}%`);
|
|
39
|
+
lines.push('');
|
|
40
|
+
// Findings
|
|
41
|
+
if (review.findings.length === 0) {
|
|
42
|
+
lines.push('### No Issues Found');
|
|
43
|
+
lines.push('The code changes look good with no issues detected.');
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
lines.push(`### Issues Found (${review.findings.length})`);
|
|
47
|
+
lines.push('');
|
|
48
|
+
// Sort findings by priority
|
|
49
|
+
const sortedFindings = [...review.findings].sort((a, b) => {
|
|
50
|
+
const priorityA = a.priority ?? 999;
|
|
51
|
+
const priorityB = b.priority ?? 999;
|
|
52
|
+
return priorityA - priorityB;
|
|
53
|
+
});
|
|
54
|
+
sortedFindings.forEach((finding, index) => {
|
|
55
|
+
const priorityTag = getPriorityTag(finding.priority);
|
|
56
|
+
const confidence = `(${(finding.confidence_score * 100).toFixed(0)}% confidence)`;
|
|
57
|
+
lines.push(`#### ${index + 1}. ${priorityTag} ${finding.title} ${confidence}`);
|
|
58
|
+
lines.push('');
|
|
59
|
+
lines.push(finding.body);
|
|
60
|
+
if (finding.code_location) {
|
|
61
|
+
const location = `📍 \`${finding.code_location.absolute_file_path}:${finding.code_location.line_range.start}-${finding.code_location.line_range.end}\``;
|
|
62
|
+
lines.push('');
|
|
63
|
+
lines.push(location);
|
|
64
|
+
}
|
|
65
|
+
lines.push('');
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return lines.join('\n');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get priority tag for display
|
|
72
|
+
*/
|
|
73
|
+
function getPriorityTag(priority) {
|
|
74
|
+
switch (priority) {
|
|
75
|
+
case 0:
|
|
76
|
+
return '[P0 🔴]'; // Blocking
|
|
77
|
+
case 1:
|
|
78
|
+
return '[P1 🟠]'; // Urgent
|
|
79
|
+
case 2:
|
|
80
|
+
return '[P2 🟡]'; // Normal
|
|
81
|
+
case 3:
|
|
82
|
+
return '[P3 🔵]'; // Low
|
|
83
|
+
default:
|
|
84
|
+
return '';
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=reviewParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewParser.js","sourceRoot":"","sources":["../../src/utils/reviewParser.ts"],"names":[],"mappings":"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"}
|