@diff-review-system/drs 2.1.0 → 2.2.1

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 (90) hide show
  1. package/.opencode/tools/drs_skill.ts +67 -0
  2. package/dist/ci/runner.d.ts.map +1 -1
  3. package/dist/ci/runner.js +1 -0
  4. package/dist/ci/runner.js.map +1 -1
  5. package/dist/cli/index.js +44 -0
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/cli/review-mr.d.ts +1 -0
  8. package/dist/cli/review-mr.d.ts.map +1 -1
  9. package/dist/cli/review-mr.js +1 -0
  10. package/dist/cli/review-mr.js.map +1 -1
  11. package/dist/cli/review-pr.d.ts +1 -0
  12. package/dist/cli/review-pr.d.ts.map +1 -1
  13. package/dist/cli/review-pr.js +1 -0
  14. package/dist/cli/review-pr.js.map +1 -1
  15. package/dist/github/client.d.ts +4 -0
  16. package/dist/github/client.d.ts.map +1 -1
  17. package/dist/github/client.js +10 -0
  18. package/dist/github/client.js.map +1 -1
  19. package/dist/github/platform-adapter.d.ts +1 -0
  20. package/dist/github/platform-adapter.d.ts.map +1 -1
  21. package/dist/github/platform-adapter.js +4 -0
  22. package/dist/github/platform-adapter.js.map +1 -1
  23. package/dist/gitlab/client.d.ts +4 -0
  24. package/dist/gitlab/client.d.ts.map +1 -1
  25. package/dist/gitlab/client.js +6 -0
  26. package/dist/gitlab/client.js.map +1 -1
  27. package/dist/gitlab/platform-adapter.d.ts +1 -0
  28. package/dist/gitlab/platform-adapter.d.ts.map +1 -1
  29. package/dist/gitlab/platform-adapter.js +3 -0
  30. package/dist/gitlab/platform-adapter.js.map +1 -1
  31. package/dist/lib/comment-formatter.d.ts +7 -0
  32. package/dist/lib/comment-formatter.d.ts.map +1 -1
  33. package/dist/lib/comment-formatter.js +19 -0
  34. package/dist/lib/comment-formatter.js.map +1 -1
  35. package/dist/lib/comment-formatter.test.js +27 -1
  36. package/dist/lib/comment-formatter.test.js.map +1 -1
  37. package/dist/lib/comment-manager.d.ts +5 -0
  38. package/dist/lib/comment-manager.d.ts.map +1 -1
  39. package/dist/lib/comment-manager.js +8 -0
  40. package/dist/lib/comment-manager.js.map +1 -1
  41. package/dist/lib/comment-manager.test.js +63 -1
  42. package/dist/lib/comment-manager.test.js.map +1 -1
  43. package/dist/lib/config.d.ts +2 -0
  44. package/dist/lib/config.d.ts.map +1 -1
  45. package/dist/lib/config.js +4 -0
  46. package/dist/lib/config.js.map +1 -1
  47. package/dist/lib/context-loader.d.ts +1 -1
  48. package/dist/lib/context-loader.d.ts.map +1 -1
  49. package/dist/lib/context-loader.js +7 -1
  50. package/dist/lib/context-loader.js.map +1 -1
  51. package/dist/lib/error-comment-poster.d.ts +19 -0
  52. package/dist/lib/error-comment-poster.d.ts.map +1 -0
  53. package/dist/lib/error-comment-poster.js +57 -0
  54. package/dist/lib/error-comment-poster.js.map +1 -0
  55. package/dist/lib/error-comment-poster.test.d.ts +2 -0
  56. package/dist/lib/error-comment-poster.test.d.ts.map +1 -0
  57. package/dist/lib/error-comment-poster.test.js +128 -0
  58. package/dist/lib/error-comment-poster.test.js.map +1 -0
  59. package/dist/lib/logger.d.ts +122 -0
  60. package/dist/lib/logger.d.ts.map +1 -0
  61. package/dist/lib/logger.js +215 -0
  62. package/dist/lib/logger.js.map +1 -0
  63. package/dist/lib/platform-client.d.ts +4 -0
  64. package/dist/lib/platform-client.d.ts.map +1 -1
  65. package/dist/lib/review-core.d.ts.map +1 -1
  66. package/dist/lib/review-core.js +89 -2
  67. package/dist/lib/review-core.js.map +1 -1
  68. package/dist/lib/review-core.test.js +2 -0
  69. package/dist/lib/review-core.test.js.map +1 -1
  70. package/dist/lib/skills-prompt.d.ts +3 -0
  71. package/dist/lib/skills-prompt.d.ts.map +1 -0
  72. package/dist/lib/skills-prompt.js +70 -0
  73. package/dist/lib/skills-prompt.js.map +1 -0
  74. package/dist/lib/unified-review-executor.d.ts +2 -0
  75. package/dist/lib/unified-review-executor.d.ts.map +1 -1
  76. package/dist/lib/unified-review-executor.js +71 -52
  77. package/dist/lib/unified-review-executor.js.map +1 -1
  78. package/dist/opencode/client.d.ts +1 -2
  79. package/dist/opencode/client.d.ts.map +1 -1
  80. package/dist/opencode/client.js +4 -11
  81. package/dist/opencode/client.js.map +1 -1
  82. package/dist/opencode/skill-loader.d.ts +11 -2
  83. package/dist/opencode/skill-loader.d.ts.map +1 -1
  84. package/dist/opencode/skill-loader.js +58 -6
  85. package/dist/opencode/skill-loader.js.map +1 -1
  86. package/package.json +3 -3
  87. package/dist/opencode/agent-skill-overlay.d.ts +0 -11
  88. package/dist/opencode/agent-skill-overlay.d.ts.map +0 -1
  89. package/dist/opencode/agent-skill-overlay.js +0 -164
  90. package/dist/opencode/agent-skill-overlay.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"context-loader.js","sourceRoot":"","sources":["../../src/lib/context-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-loader.js","sourceRoot":"","sources":["../../src/lib/context-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Error comment posting utilities for PR/MR reviews
3
+ *
4
+ * This module handles posting and removing error comments when DRS
5
+ * encounters failures during review execution.
6
+ */
7
+ import type { PlatformClient } from './platform-client.js';
8
+ /**
9
+ * Post or update an error comment on a PR/MR
10
+ * Note: Error details are intentionally not included in the comment
11
+ * to avoid exposing sensitive information. Users should check CI/CD logs.
12
+ */
13
+ export declare function postErrorComment(platformClient: PlatformClient, projectId: string, prNumber: number): Promise<void>;
14
+ /**
15
+ * Remove any existing error comment from a PR/MR
16
+ * Called when a review succeeds after a previous failure
17
+ */
18
+ export declare function removeErrorComment(platformClient: PlatformClient, projectId: string, prNumber: number): Promise<void>;
19
+ //# sourceMappingURL=error-comment-poster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-comment-poster.d.ts","sourceRoot":"","sources":["../../src/lib/error-comment-poster.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAmBf"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Error comment posting utilities for PR/MR reviews
3
+ *
4
+ * This module handles posting and removing error comments when DRS
5
+ * encounters failures during review execution.
6
+ */
7
+ import chalk from 'chalk';
8
+ import { formatErrorComment } from './comment-formatter.js';
9
+ import { ERROR_COMMENT_ID, findExistingErrorComment, } from './comment-manager.js';
10
+ /**
11
+ * Post or update an error comment on a PR/MR
12
+ * Note: Error details are intentionally not included in the comment
13
+ * to avoid exposing sensitive information. Users should check CI/CD logs.
14
+ */
15
+ export async function postErrorComment(platformClient, projectId, prNumber) {
16
+ console.log(chalk.gray('Posting error comment...\n'));
17
+ // Fetch existing comments to check for existing error comment
18
+ const existingComments = await platformClient.getComments(projectId, prNumber);
19
+ const mappedComments = existingComments.map((c) => ({
20
+ id: c.id,
21
+ body: c.body,
22
+ }));
23
+ const existingError = findExistingErrorComment(mappedComments);
24
+ const errorComment = formatErrorComment(ERROR_COMMENT_ID);
25
+ if (existingError) {
26
+ await platformClient.updateComment(projectId, prNumber, existingError.id, errorComment);
27
+ console.log(chalk.yellow('Updated existing error comment'));
28
+ }
29
+ else {
30
+ await platformClient.createComment(projectId, prNumber, errorComment);
31
+ console.log(chalk.yellow('Posted new error comment'));
32
+ }
33
+ }
34
+ /**
35
+ * Remove any existing error comment from a PR/MR
36
+ * Called when a review succeeds after a previous failure
37
+ */
38
+ export async function removeErrorComment(platformClient, projectId, prNumber) {
39
+ try {
40
+ const existingComments = await platformClient.getComments(projectId, prNumber);
41
+ const mappedComments = existingComments.map((c) => ({
42
+ id: c.id,
43
+ body: c.body,
44
+ }));
45
+ const existingError = findExistingErrorComment(mappedComments);
46
+ if (existingError) {
47
+ await platformClient.deleteComment(projectId, prNumber, existingError.id);
48
+ console.log(chalk.green('Removed previous error comment'));
49
+ }
50
+ }
51
+ catch (error) {
52
+ // Non-fatal: just log a warning if we can't remove the error comment
53
+ const errorMessage = error instanceof Error ? error.message : String(error);
54
+ console.warn(chalk.yellow(`Could not remove previous error comment: ${errorMessage}`));
55
+ }
56
+ }
57
+ //# sourceMappingURL=error-comment-poster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-comment-poster.js","sourceRoot":"","sources":["../../src/lib/error-comment-poster.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GAEzB,MAAM,sBAAsB,CAAC;AAG9B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,cAA8B,EAC9B,SAAiB,EACjB,QAAgB;IAEhB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAEtD,8DAA8D;IAC9D,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC/E,MAAM,cAAc,GAAsB,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;KACb,CAAC,CAAC,CAAC;IAEJ,MAAM,aAAa,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAE1D,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,MAAM,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,cAA8B,EAC9B,SAAiB,EACjB,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/E,MAAM,cAAc,GAAsB,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrE,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC,CAAC;QAEJ,MAAM,aAAa,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;QAE/D,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qEAAqE;QACrE,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,YAAY,EAAE,CAAC,CAAC,CAAC;IACzF,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=error-comment-poster.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-comment-poster.test.d.ts","sourceRoot":"","sources":["../../src/lib/error-comment-poster.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,128 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { postErrorComment, removeErrorComment } from './error-comment-poster.js';
3
+ import { ERROR_COMMENT_ID } from './comment-manager.js';
4
+ // Mock chalk to avoid color output in tests
5
+ vi.mock('chalk', () => ({
6
+ default: {
7
+ gray: (s) => s,
8
+ yellow: (s) => s,
9
+ green: (s) => s,
10
+ },
11
+ }));
12
+ describe('error-comment-poster', () => {
13
+ // Mock platform client
14
+ const createMockPlatformClient = (overrides) => ({
15
+ getPullRequest: vi.fn(),
16
+ getChangedFiles: vi.fn(),
17
+ getComments: vi.fn().mockResolvedValue([]),
18
+ getInlineComments: vi.fn().mockResolvedValue([]),
19
+ createComment: vi.fn().mockResolvedValue(undefined),
20
+ updateComment: vi.fn().mockResolvedValue(undefined),
21
+ deleteComment: vi.fn().mockResolvedValue(undefined),
22
+ createInlineComment: vi.fn(),
23
+ createBulkInlineComments: vi.fn(),
24
+ addLabels: vi.fn(),
25
+ hasLabel: vi.fn(),
26
+ ...overrides,
27
+ });
28
+ beforeEach(() => {
29
+ vi.clearAllMocks();
30
+ });
31
+ describe('postErrorComment', () => {
32
+ it('should create new error comment when none exists', async () => {
33
+ const mockClient = createMockPlatformClient({
34
+ getComments: vi.fn().mockResolvedValue([]),
35
+ });
36
+ await postErrorComment(mockClient, 'owner/repo', 123);
37
+ expect(mockClient.getComments).toHaveBeenCalledWith('owner/repo', 123);
38
+ expect(mockClient.createComment).toHaveBeenCalledWith('owner/repo', 123, expect.stringContaining(`<!-- drs-comment-id: ${ERROR_COMMENT_ID} -->`));
39
+ expect(mockClient.updateComment).not.toHaveBeenCalled();
40
+ });
41
+ it('should update existing error comment when one exists', async () => {
42
+ const existingErrorComment = {
43
+ id: 42,
44
+ body: `Old error\n<!-- drs-comment-id: ${ERROR_COMMENT_ID} -->`,
45
+ };
46
+ const mockClient = createMockPlatformClient({
47
+ getComments: vi.fn().mockResolvedValue([existingErrorComment]),
48
+ });
49
+ await postErrorComment(mockClient, 'owner/repo', 123);
50
+ expect(mockClient.getComments).toHaveBeenCalledWith('owner/repo', 123);
51
+ expect(mockClient.updateComment).toHaveBeenCalledWith('owner/repo', 123, 42, expect.stringContaining('DRS Review Failed'));
52
+ expect(mockClient.createComment).not.toHaveBeenCalled();
53
+ });
54
+ it('should not update unrelated comments', async () => {
55
+ const otherComments = [
56
+ { id: 1, body: 'Regular comment' },
57
+ { id: 2, body: '<!-- drs-comment-id: drs-review-summary -->' },
58
+ ];
59
+ const mockClient = createMockPlatformClient({
60
+ getComments: vi.fn().mockResolvedValue(otherComments),
61
+ });
62
+ await postErrorComment(mockClient, 'owner/repo', 123);
63
+ expect(mockClient.createComment).toHaveBeenCalled();
64
+ expect(mockClient.updateComment).not.toHaveBeenCalled();
65
+ });
66
+ it('should include error marker and check logs message in posted comment', async () => {
67
+ const mockClient = createMockPlatformClient();
68
+ await postErrorComment(mockClient, 'project-id', 456);
69
+ const calledBody = mockClient.createComment.mock.calls[0][2];
70
+ expect(calledBody).toContain(`<!-- drs-comment-id: ${ERROR_COMMENT_ID} -->`);
71
+ expect(calledBody).toContain('DRS Review Failed');
72
+ expect(calledBody).toContain('check the CI/CD logs');
73
+ });
74
+ });
75
+ describe('removeErrorComment', () => {
76
+ it('should delete existing error comment', async () => {
77
+ const existingErrorComment = {
78
+ id: 99,
79
+ body: `Error!\n<!-- drs-comment-id: ${ERROR_COMMENT_ID} -->`,
80
+ };
81
+ const mockClient = createMockPlatformClient({
82
+ getComments: vi.fn().mockResolvedValue([existingErrorComment]),
83
+ });
84
+ await removeErrorComment(mockClient, 'owner/repo', 123);
85
+ expect(mockClient.getComments).toHaveBeenCalledWith('owner/repo', 123);
86
+ expect(mockClient.deleteComment).toHaveBeenCalledWith('owner/repo', 123, 99);
87
+ });
88
+ it('should not delete anything when no error comment exists', async () => {
89
+ const otherComments = [
90
+ { id: 1, body: 'Regular comment' },
91
+ { id: 2, body: '<!-- drs-comment-id: drs-review-summary -->' },
92
+ ];
93
+ const mockClient = createMockPlatformClient({
94
+ getComments: vi.fn().mockResolvedValue(otherComments),
95
+ });
96
+ await removeErrorComment(mockClient, 'owner/repo', 123);
97
+ expect(mockClient.getComments).toHaveBeenCalledWith('owner/repo', 123);
98
+ expect(mockClient.deleteComment).not.toHaveBeenCalled();
99
+ });
100
+ it('should handle empty comments array', async () => {
101
+ const mockClient = createMockPlatformClient({
102
+ getComments: vi.fn().mockResolvedValue([]),
103
+ });
104
+ await removeErrorComment(mockClient, 'owner/repo', 123);
105
+ expect(mockClient.deleteComment).not.toHaveBeenCalled();
106
+ });
107
+ it('should handle delete failure gracefully', async () => {
108
+ const existingErrorComment = {
109
+ id: 99,
110
+ body: `Error!\n<!-- drs-comment-id: ${ERROR_COMMENT_ID} -->`,
111
+ };
112
+ const mockClient = createMockPlatformClient({
113
+ getComments: vi.fn().mockResolvedValue([existingErrorComment]),
114
+ deleteComment: vi.fn().mockRejectedValue(new Error('Delete failed')),
115
+ });
116
+ // Should not throw
117
+ await expect(removeErrorComment(mockClient, 'owner/repo', 123)).resolves.not.toThrow();
118
+ });
119
+ it('should handle getComments failure gracefully', async () => {
120
+ const mockClient = createMockPlatformClient({
121
+ getComments: vi.fn().mockRejectedValue(new Error('Network error')),
122
+ });
123
+ // Should not throw
124
+ await expect(removeErrorComment(mockClient, 'owner/repo', 123)).resolves.not.toThrow();
125
+ });
126
+ });
127
+ });
128
+ //# sourceMappingURL=error-comment-poster.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-comment-poster.test.js","sourceRoot":"","sources":["../../src/lib/error-comment-poster.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Structured logging utility for DRS
3
+ *
4
+ * Supports both human-readable (colored CLI) and JSON structured output.
5
+ * Provides log levels, context tracking, and consistent formatting.
6
+ */
7
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
8
+ export type LogFormat = 'human' | 'json';
9
+ export interface LogContext {
10
+ /** Agent type (e.g., 'security', 'unified-reviewer') */
11
+ agent?: string;
12
+ /** Tool name (e.g., 'drs_skill', 'write_json_output') */
13
+ tool?: string;
14
+ /** Skill name if applicable */
15
+ skill?: string;
16
+ /** Session ID */
17
+ sessionId?: string;
18
+ /** Additional metadata */
19
+ [key: string]: unknown;
20
+ }
21
+ export interface LogEntry {
22
+ timestamp: string;
23
+ level: LogLevel;
24
+ message: string;
25
+ context?: LogContext;
26
+ data?: unknown;
27
+ }
28
+ interface LoggerOptions {
29
+ /** Minimum log level to output */
30
+ level: LogLevel;
31
+ /** Output format */
32
+ format: LogFormat;
33
+ /** Include timestamps in output */
34
+ timestamps: boolean;
35
+ /** Enable colored output (human format only) */
36
+ colors: boolean;
37
+ }
38
+ declare class Logger {
39
+ private options;
40
+ private defaultContext;
41
+ constructor(options?: Partial<LoggerOptions>);
42
+ /**
43
+ * Set the minimum log level
44
+ */
45
+ setLevel(level: LogLevel): void;
46
+ /**
47
+ * Set the output format
48
+ */
49
+ setFormat(format: LogFormat): void;
50
+ /**
51
+ * Enable or disable timestamps
52
+ */
53
+ setTimestamps(enabled: boolean): void;
54
+ /**
55
+ * Set default context that will be included in all log entries
56
+ */
57
+ setDefaultContext(context: LogContext): void;
58
+ /**
59
+ * Create a child logger with additional default context
60
+ */
61
+ child(context: LogContext): Logger;
62
+ /**
63
+ * Check if a log level should be output
64
+ */
65
+ private shouldLog;
66
+ /**
67
+ * Format and output a log entry
68
+ */
69
+ private log;
70
+ /**
71
+ * Output as JSON (structured logging)
72
+ */
73
+ private outputJson;
74
+ /**
75
+ * Output as human-readable (colored CLI)
76
+ */
77
+ private outputHuman;
78
+ debug(message: string, context?: LogContext, data?: unknown): void;
79
+ info(message: string, context?: LogContext, data?: unknown): void;
80
+ warn(message: string, context?: LogContext, data?: unknown): void;
81
+ error(message: string, context?: LogContext, data?: unknown): void;
82
+ /**
83
+ * Log a skill tool call
84
+ */
85
+ skillLoaded(skillName: string, agent: string, metadata?: Record<string, unknown>): void;
86
+ /**
87
+ * Log a tool output
88
+ */
89
+ toolOutput(toolName: string, agent: string, output: string): void;
90
+ /**
91
+ * Log agent message
92
+ */
93
+ agentMessage(agent: string, content: string): void;
94
+ /**
95
+ * Log start of agent review
96
+ */
97
+ agentStart(agent: string): void;
98
+ /**
99
+ * Log end of agent review
100
+ */
101
+ agentComplete(agent: string, issueCount: number): void;
102
+ /**
103
+ * Log missing skill call warning
104
+ */
105
+ noSkillCalls(agent: string): void;
106
+ }
107
+ declare let defaultLogger: Logger;
108
+ /**
109
+ * Configure the default logger
110
+ */
111
+ export declare function configureLogger(options: Partial<LoggerOptions>): void;
112
+ /**
113
+ * Get the default logger instance
114
+ */
115
+ export declare function getLogger(): Logger;
116
+ /**
117
+ * Create a new logger with specific options
118
+ */
119
+ export declare function createLogger(options?: Partial<LoggerOptions>): Logger;
120
+ export { Logger };
121
+ export default defaultLogger;
122
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Structured logging utility for DRS
3
+ *
4
+ * Supports both human-readable (colored CLI) and JSON structured output.
5
+ * Provides log levels, context tracking, and consistent formatting.
6
+ */
7
+ import chalk from 'chalk';
8
+ const LOG_LEVEL_ORDER = {
9
+ debug: 0,
10
+ info: 1,
11
+ warn: 2,
12
+ error: 3,
13
+ };
14
+ const LOG_LEVEL_COLORS = {
15
+ debug: chalk.gray,
16
+ info: chalk.cyan,
17
+ warn: chalk.yellow,
18
+ error: chalk.red,
19
+ };
20
+ const LOG_LEVEL_ICONS = {
21
+ debug: '🔍',
22
+ info: 'ℹ️',
23
+ warn: '⚠️',
24
+ error: '❌',
25
+ };
26
+ class Logger {
27
+ options;
28
+ defaultContext = {};
29
+ constructor(options = {}) {
30
+ this.options = {
31
+ level: options.level ?? 'info',
32
+ format: options.format ?? 'human',
33
+ timestamps: options.timestamps ?? false,
34
+ colors: options.colors ?? true,
35
+ };
36
+ }
37
+ /**
38
+ * Set the minimum log level
39
+ */
40
+ setLevel(level) {
41
+ this.options.level = level;
42
+ }
43
+ /**
44
+ * Set the output format
45
+ */
46
+ setFormat(format) {
47
+ this.options.format = format;
48
+ }
49
+ /**
50
+ * Enable or disable timestamps
51
+ */
52
+ setTimestamps(enabled) {
53
+ this.options.timestamps = enabled;
54
+ }
55
+ /**
56
+ * Set default context that will be included in all log entries
57
+ */
58
+ setDefaultContext(context) {
59
+ this.defaultContext = context;
60
+ }
61
+ /**
62
+ * Create a child logger with additional default context
63
+ */
64
+ child(context) {
65
+ const child = new Logger(this.options);
66
+ child.defaultContext = { ...this.defaultContext, ...context };
67
+ return child;
68
+ }
69
+ /**
70
+ * Check if a log level should be output
71
+ */
72
+ shouldLog(level) {
73
+ return LOG_LEVEL_ORDER[level] >= LOG_LEVEL_ORDER[this.options.level];
74
+ }
75
+ /**
76
+ * Format and output a log entry
77
+ */
78
+ log(level, message, context, data) {
79
+ if (!this.shouldLog(level)) {
80
+ return;
81
+ }
82
+ const entry = {
83
+ timestamp: new Date().toISOString(),
84
+ level,
85
+ message,
86
+ context: { ...this.defaultContext, ...context },
87
+ data,
88
+ };
89
+ // Remove empty context
90
+ if (entry.context && Object.keys(entry.context).length === 0) {
91
+ delete entry.context;
92
+ }
93
+ if (this.options.format === 'json') {
94
+ this.outputJson(entry);
95
+ }
96
+ else {
97
+ this.outputHuman(entry);
98
+ }
99
+ }
100
+ /**
101
+ * Output as JSON (structured logging)
102
+ */
103
+ outputJson(entry) {
104
+ const output = entry.level === 'error' ? console.error : console.log;
105
+ output(JSON.stringify(entry));
106
+ }
107
+ /**
108
+ * Output as human-readable (colored CLI)
109
+ */
110
+ outputHuman(entry) {
111
+ const output = entry.level === 'error' ? console.error : console.log;
112
+ const colorFn = this.options.colors ? LOG_LEVEL_COLORS[entry.level] : (s) => s;
113
+ const icon = LOG_LEVEL_ICONS[entry.level];
114
+ let prefix = '';
115
+ // Add timestamp if enabled
116
+ if (this.options.timestamps) {
117
+ prefix += chalk.gray(`[${entry.timestamp}] `);
118
+ }
119
+ // Add context prefix (agent/tool/skill)
120
+ if (entry.context?.agent) {
121
+ prefix += chalk.cyan(`[${entry.context.agent}] `);
122
+ }
123
+ if (entry.context?.tool) {
124
+ prefix += chalk.magenta(`[${entry.context.tool}] `);
125
+ }
126
+ if (entry.context?.skill) {
127
+ prefix += chalk.green(`[skill:${entry.context.skill}] `);
128
+ }
129
+ // Format the message
130
+ const formattedMessage = `${prefix}${icon} ${colorFn(entry.message)}`;
131
+ output(formattedMessage);
132
+ // Output data if present (indented)
133
+ if (entry.data !== undefined) {
134
+ const dataStr = typeof entry.data === 'string' ? entry.data : JSON.stringify(entry.data, null, 2);
135
+ const indentedData = dataStr
136
+ .split('\n')
137
+ .map((line) => ` ${line}`)
138
+ .join('\n');
139
+ output(chalk.gray(indentedData));
140
+ }
141
+ }
142
+ // Log level methods
143
+ debug(message, context, data) {
144
+ this.log('debug', message, context, data);
145
+ }
146
+ info(message, context, data) {
147
+ this.log('info', message, context, data);
148
+ }
149
+ warn(message, context, data) {
150
+ this.log('warn', message, context, data);
151
+ }
152
+ error(message, context, data) {
153
+ this.log('error', message, context, data);
154
+ }
155
+ // Convenience methods for common patterns
156
+ /**
157
+ * Log a skill tool call
158
+ */
159
+ skillLoaded(skillName, agent, metadata) {
160
+ this.info(`Loaded skill: ${skillName}`, { agent, tool: 'drs_skill', skill: skillName }, metadata);
161
+ }
162
+ /**
163
+ * Log a tool output
164
+ */
165
+ toolOutput(toolName, agent, output) {
166
+ this.debug(`Tool output`, { agent, tool: toolName }, output || '[no output]');
167
+ }
168
+ /**
169
+ * Log agent message
170
+ */
171
+ agentMessage(agent, content) {
172
+ this.debug(`Agent response`, { agent }, content);
173
+ }
174
+ /**
175
+ * Log start of agent review
176
+ */
177
+ agentStart(agent) {
178
+ this.info(`Starting review`, { agent });
179
+ }
180
+ /**
181
+ * Log end of agent review
182
+ */
183
+ agentComplete(agent, issueCount) {
184
+ this.info(`Completed review - found ${issueCount} issue(s)`, { agent });
185
+ }
186
+ /**
187
+ * Log missing skill call warning
188
+ */
189
+ noSkillCalls(agent) {
190
+ this.warn(`No skill tool calls detected during review`, { agent });
191
+ }
192
+ }
193
+ // Default logger instance
194
+ let defaultLogger = new Logger();
195
+ /**
196
+ * Configure the default logger
197
+ */
198
+ export function configureLogger(options) {
199
+ defaultLogger = new Logger(options);
200
+ }
201
+ /**
202
+ * Get the default logger instance
203
+ */
204
+ export function getLogger() {
205
+ return defaultLogger;
206
+ }
207
+ /**
208
+ * Create a new logger with specific options
209
+ */
210
+ export function createLogger(options = {}) {
211
+ return new Logger(options);
212
+ }
213
+ export { Logger };
214
+ export default defaultLogger;
215
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
@@ -93,6 +93,10 @@ export interface PlatformClient {
93
93
  * Update an existing comment
94
94
  */
95
95
  updateComment(projectId: string, prNumber: number, commentId: number | string, body: string): Promise<void>;
96
+ /**
97
+ * Delete an existing comment
98
+ */
99
+ deleteComment(projectId: string, prNumber: number, commentId: number | string): Promise<void>;
96
100
  /**
97
101
  * Create an inline comment at a specific line
98
102
  */
@@ -1 +1 @@
1
- {"version":3,"file":"platform-client.d.ts","sourceRoot":"","sources":["../../src/lib/platform-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform-client.d.ts","sourceRoot":"","sources":["../../src/lib/platform-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"review-core.d.ts","sourceRoot":"","sources":["../../src/lib/review-core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAA8B,MAAM,aAAa,CAAC;AAKzE,OAAO,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,oCAAoC;IACpC,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAC7C,+CAA+C;IAC/C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AASD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EAAE,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAoIR;AA+DD,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,SAAS,EACjB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAC3C,UAAU,GAAE,MAAsB,EAClC,KAAK,UAAQ,GACZ,OAAO,CAAC,iBAAiB,CAAC,CAyF5B;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,SAAS,EACjB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAC3C,UAAU,GAAE,MAAsB,EAClC,KAAK,UAAQ,GACZ,OAAO,CAAC,iBAAiB,CAAC,CAyH5B;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,SAAS,EACjB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAC3C,UAAU,GAAE,MAAsB,EAClC,KAAK,UAAQ,GACZ,OAAO,CAAC,iBAAiB,CAAC,CA+E5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,GAAG,IAAI,CAmCP;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;CAC9C,GAAG,OAAO,CAEV"}
1
+ {"version":3,"file":"review-core.d.ts","sourceRoot":"","sources":["../../src/lib/review-core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAA8B,MAAM,aAAa,CAAC;AAMzE,OAAO,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK5D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,oCAAoC;IACpC,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAC7C,+CAA+C;IAC/C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAqDD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EAAE,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAoIR;AA+DD,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,SAAS,EACjB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAC3C,UAAU,GAAE,MAAsB,EAClC,KAAK,UAAQ,GACZ,OAAO,CAAC,iBAAiB,CAAC,CAsH5B;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,SAAS,EACjB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAC3C,UAAU,GAAE,MAAsB,EAClC,KAAK,UAAQ,GACZ,OAAO,CAAC,iBAAiB,CAAC,CAsJ5B;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,SAAS,EACjB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAC3C,UAAU,GAAE,MAAsB,EAClC,KAAK,UAAQ,GACZ,OAAO,CAAC,iBAAiB,CAAC,CA+E5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,GAAG,IAAI,CAmCP;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;CAC9C,GAAG,OAAO,CAEV"}