devchain-cli 0.6.0 → 0.7.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.
Files changed (170) hide show
  1. package/dist/drizzle/0024_review_tables.sql +71 -0
  2. package/dist/drizzle/0025_reviews_mode_and_nullable_shas.sql +80 -0
  3. package/dist/drizzle/0026_review_comments_edited_at.sql +2 -0
  4. package/dist/drizzle/meta/_journal.json +22 -1
  5. package/dist/node_modules/@devchain/shared/tsconfig.tsbuildinfo +1 -1
  6. package/dist/server/common/errors/error-types.d.ts +3 -0
  7. package/dist/server/common/errors/error-types.js +7 -1
  8. package/dist/server/common/errors/error-types.js.map +1 -1
  9. package/dist/server/common/validation/path-validation.d.ts +11 -0
  10. package/dist/server/common/validation/path-validation.js +197 -0
  11. package/dist/server/common/validation/path-validation.js.map +1 -0
  12. package/dist/server/modules/chat/dtos/chat.dto.d.ts +13 -13
  13. package/dist/server/modules/core/core.module.js +3 -2
  14. package/dist/server/modules/core/core.module.js.map +1 -1
  15. package/dist/server/modules/core/services/preflight.service.d.ts +1 -3
  16. package/dist/server/modules/core/services/preflight.service.js +2 -28
  17. package/dist/server/modules/core/services/preflight.service.js.map +1 -1
  18. package/dist/server/modules/core/services/provider-mcp-ensure.service.d.ts +26 -0
  19. package/dist/server/modules/core/services/provider-mcp-ensure.service.js +224 -0
  20. package/dist/server/modules/core/services/provider-mcp-ensure.service.js.map +1 -0
  21. package/dist/server/modules/epics/controllers/epics.controller.d.ts +3 -2
  22. package/dist/server/modules/epics/controllers/epics.controller.js +16 -6
  23. package/dist/server/modules/epics/controllers/epics.controller.js.map +1 -1
  24. package/dist/server/modules/events/catalog/epic.created.d.ts +2 -2
  25. package/dist/server/modules/events/catalog/index.d.ts +340 -2
  26. package/dist/server/modules/events/catalog/index.js +12 -0
  27. package/dist/server/modules/events/catalog/index.js.map +1 -1
  28. package/dist/server/modules/events/catalog/review.comment.created.d.ts +69 -0
  29. package/dist/server/modules/events/catalog/review.comment.created.js +30 -0
  30. package/dist/server/modules/events/catalog/review.comment.created.js.map +1 -0
  31. package/dist/server/modules/events/catalog/review.comment.deleted.d.ts +30 -0
  32. package/dist/server/modules/events/catalog/review.comment.deleted.js +17 -0
  33. package/dist/server/modules/events/catalog/review.comment.deleted.js.map +1 -0
  34. package/dist/server/modules/events/catalog/review.comment.resolved.d.ts +30 -0
  35. package/dist/server/modules/events/catalog/review.comment.resolved.js +17 -0
  36. package/dist/server/modules/events/catalog/review.comment.resolved.js.map +1 -0
  37. package/dist/server/modules/events/catalog/review.comment.updated.d.ts +39 -0
  38. package/dist/server/modules/events/catalog/review.comment.updated.js +20 -0
  39. package/dist/server/modules/events/catalog/review.comment.updated.js.map +1 -0
  40. package/dist/server/modules/events/catalog/review.created.d.ts +90 -0
  41. package/dist/server/modules/events/catalog/review.created.js +40 -0
  42. package/dist/server/modules/events/catalog/review.created.js.map +1 -0
  43. package/dist/server/modules/events/catalog/review.updated.d.ts +110 -0
  44. package/dist/server/modules/events/catalog/review.updated.js +35 -0
  45. package/dist/server/modules/events/catalog/review.updated.js.map +1 -0
  46. package/dist/server/modules/events/subscribers/index.js +4 -0
  47. package/dist/server/modules/events/subscribers/index.js.map +1 -1
  48. package/dist/server/modules/events/subscribers/review-broadcaster.subscriber.d.ts +16 -0
  49. package/dist/server/modules/events/subscribers/review-broadcaster.subscriber.js +163 -0
  50. package/dist/server/modules/events/subscribers/review-broadcaster.subscriber.js.map +1 -0
  51. package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.d.ts +23 -0
  52. package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.js +217 -0
  53. package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.js.map +1 -0
  54. package/dist/server/modules/git/controllers/git.controller.d.ts +24 -0
  55. package/dist/server/modules/git/controllers/git.controller.js +230 -0
  56. package/dist/server/modules/git/controllers/git.controller.js.map +1 -0
  57. package/dist/server/modules/git/dtos/git.dto.d.ts +86 -0
  58. package/dist/server/modules/git/dtos/git.dto.js +36 -0
  59. package/dist/server/modules/git/dtos/git.dto.js.map +1 -0
  60. package/dist/server/modules/git/git.module.d.ts +2 -0
  61. package/dist/server/modules/git/git.module.js +25 -0
  62. package/dist/server/modules/git/git.module.js.map +1 -0
  63. package/dist/server/modules/git/services/git.service.d.ts +71 -0
  64. package/dist/server/modules/git/services/git.service.js +550 -0
  65. package/dist/server/modules/git/services/git.service.js.map +1 -0
  66. package/dist/server/modules/mcp/controllers/mcp-http.controller.js +17 -562
  67. package/dist/server/modules/mcp/controllers/mcp-http.controller.js.map +1 -1
  68. package/dist/server/modules/mcp/controllers/mcp-sdk.controller.js +9 -568
  69. package/dist/server/modules/mcp/controllers/mcp-sdk.controller.js.map +1 -1
  70. package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +226 -36
  71. package/dist/server/modules/mcp/dtos/mcp.dto.js +158 -50
  72. package/dist/server/modules/mcp/dtos/mcp.dto.js.map +1 -1
  73. package/dist/server/modules/mcp/dtos/schema-registry.d.ts +7 -0
  74. package/dist/server/modules/mcp/dtos/schema-registry.js +56 -0
  75. package/dist/server/modules/mcp/dtos/schema-registry.js.map +1 -0
  76. package/dist/server/modules/mcp/mcp.module.js +2 -0
  77. package/dist/server/modules/mcp/mcp.module.js.map +1 -1
  78. package/dist/server/modules/mcp/services/mcp.service.d.ts +9 -1
  79. package/dist/server/modules/mcp/services/mcp.service.js +702 -33
  80. package/dist/server/modules/mcp/services/mcp.service.js.map +1 -1
  81. package/dist/server/modules/mcp/tool-definitions.d.ts +2438 -0
  82. package/dist/server/modules/mcp/tool-definitions.js +727 -0
  83. package/dist/server/modules/mcp/tool-definitions.js.map +1 -0
  84. package/dist/server/modules/mcp/utils/param-suggestion.d.ts +3 -0
  85. package/dist/server/modules/mcp/utils/param-suggestion.js +95 -0
  86. package/dist/server/modules/mcp/utils/param-suggestion.js.map +1 -0
  87. package/dist/server/modules/providers/controllers/providers.controller.d.ts +7 -6
  88. package/dist/server/modules/providers/controllers/providers.controller.js +12 -107
  89. package/dist/server/modules/providers/controllers/providers.controller.js.map +1 -1
  90. package/dist/server/modules/reviews/controllers/reviews.controller.d.ts +28 -0
  91. package/dist/server/modules/reviews/controllers/reviews.controller.js +369 -0
  92. package/dist/server/modules/reviews/controllers/reviews.controller.js.map +1 -0
  93. package/dist/server/modules/reviews/dtos/review.dto.d.ts +195 -0
  94. package/dist/server/modules/reviews/dtos/review.dto.js +92 -0
  95. package/dist/server/modules/reviews/dtos/review.dto.js.map +1 -0
  96. package/dist/server/modules/reviews/reviews.module.d.ts +2 -0
  97. package/dist/server/modules/reviews/reviews.module.js +27 -0
  98. package/dist/server/modules/reviews/reviews.module.js.map +1 -0
  99. package/dist/server/modules/reviews/services/reviews.service.d.ts +86 -0
  100. package/dist/server/modules/reviews/services/reviews.service.js +464 -0
  101. package/dist/server/modules/reviews/services/reviews.service.js.map +1 -0
  102. package/dist/server/modules/reviews/utils/notification-formatter.d.ts +12 -0
  103. package/dist/server/modules/reviews/utils/notification-formatter.js +60 -0
  104. package/dist/server/modules/reviews/utils/notification-formatter.js.map +1 -0
  105. package/dist/server/modules/sessions/services/sessions.service.d.ts +3 -1
  106. package/dist/server/modules/sessions/services/sessions.service.js +32 -2
  107. package/dist/server/modules/sessions/services/sessions.service.js.map +1 -1
  108. package/dist/server/modules/storage/db/schema.d.ts +697 -0
  109. package/dist/server/modules/storage/db/schema.js +71 -1
  110. package/dist/server/modules/storage/db/schema.js.map +1 -1
  111. package/dist/server/modules/storage/interfaces/storage.interface.d.ts +23 -1
  112. package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
  113. package/dist/server/modules/storage/local/local-storage.service.d.ts +15 -2
  114. package/dist/server/modules/storage/local/local-storage.service.js +396 -7
  115. package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
  116. package/dist/server/modules/storage/models/domain.models.d.ts +62 -0
  117. package/dist/server/templates/claude-codex-advanced-swe.json +139 -0
  118. package/dist/server/templates/claude-codex-advanced.json +82 -82
  119. package/dist/server/templates/claude-opus.json +99 -99
  120. package/dist/server/templates/claude-swe-single.json +105 -0
  121. package/dist/server/templates/simple-codex.json +70 -70
  122. package/dist/server/test-setup.js +45 -0
  123. package/dist/server/test-setup.js.map +1 -1
  124. package/dist/server/tsconfig.tsbuildinfo +1 -1
  125. package/dist/server/ui/assets/ReviewDetailPage-I54h-2L-.js +6 -0
  126. package/dist/server/ui/assets/ReviewsPage-B4ua5hiX.js +19 -0
  127. package/dist/server/ui/assets/index-CqcmnFBh.css +32 -0
  128. package/dist/server/ui/assets/index-JbUMpbg7.js +858 -0
  129. package/dist/server/ui/assets/useReviewSubscription-C0GEsiRw.js +83 -0
  130. package/dist/server/ui/assets/useReviewSubscription-T3uj2-aP.css +1 -0
  131. package/dist/server/ui/index.html +2 -2
  132. package/dist/templates/claude-codex-advanced-swe.json +139 -0
  133. package/dist/templates/claude-codex-advanced.json +82 -82
  134. package/dist/templates/claude-opus.json +99 -99
  135. package/dist/templates/claude-swe-single.json +105 -0
  136. package/dist/templates/simple-codex.json +70 -70
  137. package/package.json +16 -3
  138. package/prebuilds/node-pty/darwin-arm64/pty.node +0 -0
  139. package/prebuilds/node-pty/darwin-arm64/spawn-helper +0 -0
  140. package/prebuilds/node-pty/darwin-x64/pty.node +0 -0
  141. package/prebuilds/node-pty/darwin-x64/spawn-helper +0 -0
  142. package/prebuilds/node-pty/linux-arm64/pty.node +0 -0
  143. package/prebuilds/node-pty/linux-x64/pty.node +0 -0
  144. package/prebuilds/node-pty/win32-arm64/conpty/OpenConsole.exe +0 -0
  145. package/prebuilds/node-pty/win32-arm64/conpty/conpty.dll +0 -0
  146. package/prebuilds/node-pty/win32-arm64/conpty.node +0 -0
  147. package/prebuilds/node-pty/win32-arm64/conpty.pdb +0 -0
  148. package/prebuilds/node-pty/win32-arm64/conpty_console_list.node +0 -0
  149. package/prebuilds/node-pty/win32-arm64/conpty_console_list.pdb +0 -0
  150. package/prebuilds/node-pty/win32-arm64/pty.node +0 -0
  151. package/prebuilds/node-pty/win32-arm64/pty.pdb +0 -0
  152. package/prebuilds/node-pty/win32-arm64/winpty-agent.exe +0 -0
  153. package/prebuilds/node-pty/win32-arm64/winpty-agent.pdb +0 -0
  154. package/prebuilds/node-pty/win32-arm64/winpty.dll +0 -0
  155. package/prebuilds/node-pty/win32-arm64/winpty.pdb +0 -0
  156. package/prebuilds/node-pty/win32-x64/conpty/OpenConsole.exe +0 -0
  157. package/prebuilds/node-pty/win32-x64/conpty/conpty.dll +0 -0
  158. package/prebuilds/node-pty/win32-x64/conpty.node +0 -0
  159. package/prebuilds/node-pty/win32-x64/conpty.pdb +0 -0
  160. package/prebuilds/node-pty/win32-x64/conpty_console_list.node +0 -0
  161. package/prebuilds/node-pty/win32-x64/conpty_console_list.pdb +0 -0
  162. package/prebuilds/node-pty/win32-x64/pty.node +0 -0
  163. package/prebuilds/node-pty/win32-x64/pty.pdb +0 -0
  164. package/prebuilds/node-pty/win32-x64/winpty-agent.exe +0 -0
  165. package/prebuilds/node-pty/win32-x64/winpty-agent.pdb +0 -0
  166. package/prebuilds/node-pty/win32-x64/winpty.dll +0 -0
  167. package/prebuilds/node-pty/win32-x64/winpty.pdb +0 -0
  168. package/scripts/postinstall.js +51 -1
  169. package/dist/server/ui/assets/index-BoDZOB7c.css +0 -32
  170. package/dist/server/ui/assets/index-hB0e02VB.js +0 -735
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.dto.js","sourceRoot":"","sources":["../../../../src/modules/reviews/dtos/review.dto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare class ReviewsModule {
2
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ReviewsModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const reviews_controller_1 = require("./controllers/reviews.controller");
12
+ const reviews_service_1 = require("./services/reviews.service");
13
+ const storage_module_1 = require("../storage/storage.module");
14
+ const events_module_1 = require("../events/events.module");
15
+ const git_module_1 = require("../git/git.module");
16
+ let ReviewsModule = class ReviewsModule {
17
+ };
18
+ exports.ReviewsModule = ReviewsModule;
19
+ exports.ReviewsModule = ReviewsModule = __decorate([
20
+ (0, common_1.Module)({
21
+ imports: [storage_module_1.StorageModule, events_module_1.EventsModule, git_module_1.GitModule],
22
+ controllers: [reviews_controller_1.ReviewsController],
23
+ providers: [reviews_service_1.ReviewsService],
24
+ exports: [reviews_service_1.ReviewsService],
25
+ })
26
+ ], ReviewsModule);
27
+ //# sourceMappingURL=reviews.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviews.module.js","sourceRoot":"","sources":["../../../src/modules/reviews/reviews.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,yEAAqE;AACrE,gEAA4D;AAC5D,8DAA0D;AAC1D,2DAAuD;AACvD,kDAA8C;AAQvC,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IANzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,8BAAa,EAAE,4BAAY,EAAE,sBAAS,CAAC;QACjD,WAAW,EAAE,CAAC,sCAAiB,CAAC;QAChC,SAAS,EAAE,CAAC,gCAAc,CAAC;QAC3B,OAAO,EAAE,CAAC,gCAAc,CAAC;KAC1B,CAAC;GACW,aAAa,CAAG"}
@@ -0,0 +1,86 @@
1
+ import { type StorageService, type ListResult } from '../../storage/interfaces/storage.interface';
2
+ import type { Review, ReviewComment, ReviewCommentTarget, ReviewStatus, ReviewCommentStatus, ReviewMode } from '../../storage/models/domain.models';
3
+ import { EventsService } from '../../events/services/events.service';
4
+ import { GitService } from '../../git/services/git.service';
5
+ export interface CreateReviewInput {
6
+ projectId: string;
7
+ epicId?: string | null;
8
+ title: string;
9
+ description?: string | null;
10
+ status?: ReviewStatus;
11
+ mode?: ReviewMode;
12
+ baseRef: string;
13
+ headRef: string;
14
+ baseSha?: string | null;
15
+ headSha?: string | null;
16
+ createdBy?: 'user' | 'agent';
17
+ createdByAgentId?: string | null;
18
+ }
19
+ export interface UpdateReviewInput {
20
+ title?: string;
21
+ description?: string | null;
22
+ status?: ReviewStatus;
23
+ headSha?: string;
24
+ }
25
+ export interface CreateCommentInput {
26
+ filePath?: string | null;
27
+ parentId?: string | null;
28
+ lineStart?: number | null;
29
+ lineEnd?: number | null;
30
+ side?: 'left' | 'right' | null;
31
+ content: string;
32
+ commentType?: 'comment' | 'suggestion' | 'issue' | 'approval';
33
+ status?: ReviewCommentStatus;
34
+ authorType?: 'user' | 'agent';
35
+ authorAgentId?: string | null;
36
+ targetAgentIds?: string[];
37
+ }
38
+ export interface ListReviewsOptions {
39
+ status?: ReviewStatus;
40
+ epicId?: string;
41
+ limit?: number;
42
+ offset?: number;
43
+ }
44
+ export interface ListCommentsOptions {
45
+ status?: ReviewCommentStatus;
46
+ filePath?: string;
47
+ parentId?: string | null;
48
+ limit?: number;
49
+ offset?: number;
50
+ }
51
+ export type ServiceReviewMode = 'working-tree' | 'commit';
52
+ export interface GetOrCreateActiveReviewOptions {
53
+ commitSha?: string;
54
+ baseRef?: string;
55
+ headRef?: string;
56
+ }
57
+ export declare class ReviewsService {
58
+ private readonly storage;
59
+ private readonly eventsService;
60
+ private readonly gitService;
61
+ private readonly logger;
62
+ constructor(storage: StorageService, eventsService: EventsService, gitService: GitService);
63
+ createReview(input: CreateReviewInput): Promise<Review>;
64
+ getReview(reviewId: string): Promise<Review & {
65
+ changedFiles?: Awaited<ReturnType<GitService['getChangedFiles']>>;
66
+ }>;
67
+ updateReview(reviewId: string, input: UpdateReviewInput, expectedVersion: number): Promise<Review>;
68
+ listReviews(projectId: string, options?: ListReviewsOptions): Promise<ListResult<Review>>;
69
+ getActiveReview(projectId: string): Promise<Review | null>;
70
+ getOrCreateActiveReview(projectId: string, mode: ServiceReviewMode, options?: GetOrCreateActiveReviewOptions): Promise<Review>;
71
+ closeReview(reviewId: string, expectedVersion: number): Promise<Review>;
72
+ deleteReview(reviewId: string): Promise<void>;
73
+ createComment(reviewId: string, input: CreateCommentInput): Promise<ReviewComment>;
74
+ private verifyCommentOwnership;
75
+ getComment(commentId: string, reviewId?: string): Promise<ReviewComment>;
76
+ private verifyUserAuthored;
77
+ updateComment(reviewId: string, commentId: string, input: {
78
+ content?: string;
79
+ status?: ReviewCommentStatus;
80
+ }, expectedVersion: number): Promise<ReviewComment>;
81
+ resolveComment(reviewId: string, commentId: string, status: 'resolved' | 'wont_fix', expectedVersion: number): Promise<ReviewComment>;
82
+ deleteComment(reviewId: string, commentId: string): Promise<void>;
83
+ listComments(reviewId: string, options?: ListCommentsOptions): Promise<ListResult<ReviewComment>>;
84
+ getCommentTargets(reviewId: string, commentId: string): Promise<ReviewCommentTarget[]>;
85
+ private buildReviewChanges;
86
+ }
@@ -0,0 +1,464 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var ReviewsService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ReviewsService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const storage_interface_1 = require("../../storage/interfaces/storage.interface");
19
+ const events_service_1 = require("../../events/services/events.service");
20
+ const git_service_1 = require("../../git/services/git.service");
21
+ const error_types_1 = require("../../../common/errors/error-types");
22
+ function toStorageMode(mode) {
23
+ return mode === 'working-tree' ? 'working_tree' : 'commit';
24
+ }
25
+ let ReviewsService = ReviewsService_1 = class ReviewsService {
26
+ constructor(storage, eventsService, gitService) {
27
+ this.storage = storage;
28
+ this.eventsService = eventsService;
29
+ this.gitService = gitService;
30
+ this.logger = new common_1.Logger(ReviewsService_1.name);
31
+ }
32
+ async createReview(input) {
33
+ const project = await this.storage.getProject(input.projectId);
34
+ const mode = input.mode ?? 'working_tree';
35
+ let baseSha = null;
36
+ let headSha = null;
37
+ if (mode === 'commit') {
38
+ baseSha = input.baseSha ?? null;
39
+ headSha = input.headSha ?? null;
40
+ if (!baseSha || !headSha) {
41
+ try {
42
+ const [resolvedBase, resolvedHead] = await Promise.all([
43
+ baseSha
44
+ ? Promise.resolve(baseSha)
45
+ : this.gitService.resolveRef(input.projectId, input.baseRef),
46
+ headSha
47
+ ? Promise.resolve(headSha)
48
+ : this.gitService.resolveRef(input.projectId, input.headRef),
49
+ ]);
50
+ baseSha = resolvedBase;
51
+ headSha = resolvedHead;
52
+ }
53
+ catch (error) {
54
+ throw new error_types_1.ValidationError('Failed to resolve git refs', {
55
+ baseRef: input.baseRef,
56
+ headRef: input.headRef,
57
+ error: error.message,
58
+ });
59
+ }
60
+ }
61
+ }
62
+ const review = await this.storage.createReview({
63
+ projectId: input.projectId,
64
+ epicId: input.epicId ?? null,
65
+ title: input.title,
66
+ description: input.description ?? null,
67
+ status: input.status ?? 'draft',
68
+ mode,
69
+ baseRef: input.baseRef,
70
+ headRef: input.headRef,
71
+ baseSha,
72
+ headSha,
73
+ createdBy: input.createdBy ?? 'user',
74
+ createdByAgentId: input.createdByAgentId ?? null,
75
+ });
76
+ try {
77
+ if (review.mode === 'commit') {
78
+ if (!review.baseSha || !review.headSha) {
79
+ throw new Error('Commit-mode review created without SHAs');
80
+ }
81
+ await this.eventsService.publish('review.created', {
82
+ reviewId: review.id,
83
+ projectId: review.projectId,
84
+ epicId: review.epicId,
85
+ title: review.title,
86
+ status: review.status,
87
+ mode: 'commit',
88
+ baseRef: review.baseRef,
89
+ headRef: review.headRef,
90
+ baseSha: review.baseSha,
91
+ headSha: review.headSha,
92
+ createdBy: review.createdBy,
93
+ createdByAgentId: review.createdByAgentId,
94
+ projectName: project.name,
95
+ });
96
+ }
97
+ else {
98
+ await this.eventsService.publish('review.created', {
99
+ reviewId: review.id,
100
+ projectId: review.projectId,
101
+ epicId: review.epicId,
102
+ title: review.title,
103
+ status: review.status,
104
+ mode: 'working_tree',
105
+ baseRef: review.baseRef,
106
+ headRef: review.headRef,
107
+ baseSha: null,
108
+ headSha: null,
109
+ createdBy: review.createdBy,
110
+ createdByAgentId: review.createdByAgentId,
111
+ projectName: project.name,
112
+ });
113
+ }
114
+ }
115
+ catch (error) {
116
+ this.logger.error({ reviewId: review.id, projectId: review.projectId, error }, 'Failed to publish review.created event');
117
+ }
118
+ return review;
119
+ }
120
+ async getReview(reviewId) {
121
+ const review = await this.storage.getReview(reviewId);
122
+ if (review.mode === 'working_tree' || !review.baseSha || !review.headSha) {
123
+ return review;
124
+ }
125
+ let changedFiles;
126
+ try {
127
+ changedFiles = await this.gitService.getChangedFiles(review.projectId, review.baseSha, review.headSha);
128
+ }
129
+ catch (error) {
130
+ this.logger.warn({ reviewId, projectId: review.projectId, error }, 'Failed to compute changed files for review');
131
+ }
132
+ return { ...review, changedFiles };
133
+ }
134
+ async updateReview(reviewId, input, expectedVersion) {
135
+ const before = await this.storage.getReview(reviewId);
136
+ const updated = await this.storage.updateReview(reviewId, {
137
+ title: input.title,
138
+ description: input.description,
139
+ status: input.status,
140
+ headSha: input.headSha,
141
+ }, expectedVersion);
142
+ try {
143
+ const changes = this.buildReviewChanges(before, updated);
144
+ if (Object.keys(changes).length > 0) {
145
+ let projectName;
146
+ try {
147
+ const project = await this.storage.getProject(updated.projectId);
148
+ projectName = project.name;
149
+ }
150
+ catch {
151
+ }
152
+ await this.eventsService.publish('review.updated', {
153
+ reviewId: updated.id,
154
+ projectId: updated.projectId,
155
+ version: updated.version,
156
+ title: updated.title,
157
+ projectName,
158
+ changes,
159
+ });
160
+ }
161
+ }
162
+ catch (error) {
163
+ this.logger.error({ reviewId: updated.id, projectId: updated.projectId, error }, 'Failed to publish review.updated event');
164
+ }
165
+ return updated;
166
+ }
167
+ async listReviews(projectId, options) {
168
+ await this.storage.getProject(projectId);
169
+ return this.storage.listReviews(projectId, {
170
+ status: options?.status,
171
+ epicId: options?.epicId,
172
+ limit: options?.limit,
173
+ offset: options?.offset,
174
+ });
175
+ }
176
+ async getActiveReview(projectId) {
177
+ await this.storage.getProject(projectId);
178
+ const result = await this.storage.listReviews(projectId, {
179
+ limit: 100,
180
+ offset: 0,
181
+ });
182
+ const activeReview = result.items.find((r) => r.status !== 'closed');
183
+ return activeReview ?? null;
184
+ }
185
+ async getOrCreateActiveReview(projectId, mode, options = {}) {
186
+ const existing = await this.getActiveReview(projectId);
187
+ if (existing) {
188
+ return existing;
189
+ }
190
+ let title;
191
+ let baseRef;
192
+ let headRef;
193
+ if (mode === 'commit') {
194
+ if (!options.commitSha) {
195
+ throw new error_types_1.ValidationError('commitSha is required for commit mode', { mode });
196
+ }
197
+ const shortSha = options.commitSha.substring(0, 7);
198
+ title = `Review: ${shortSha}`;
199
+ baseRef = options.baseRef ?? `${options.commitSha}^`;
200
+ headRef = options.headRef ?? options.commitSha;
201
+ }
202
+ else {
203
+ title = 'Pre-commit review';
204
+ baseRef = options.baseRef ?? 'HEAD';
205
+ headRef = options.headRef ?? 'HEAD';
206
+ }
207
+ try {
208
+ const review = await this.createReview({
209
+ projectId,
210
+ title,
211
+ mode: toStorageMode(mode),
212
+ baseRef,
213
+ headRef,
214
+ status: 'draft',
215
+ });
216
+ this.logger.log({ projectId, reviewId: review.id, mode, title }, 'Created new active review');
217
+ return review;
218
+ }
219
+ catch (error) {
220
+ const retryExisting = await this.getActiveReview(projectId);
221
+ if (retryExisting) {
222
+ this.logger.log({ projectId, reviewId: retryExisting.id }, 'Found concurrently created review');
223
+ return retryExisting;
224
+ }
225
+ throw error;
226
+ }
227
+ }
228
+ async closeReview(reviewId, expectedVersion) {
229
+ const closed = await this.updateReview(reviewId, { status: 'closed' }, expectedVersion);
230
+ try {
231
+ const deletedCount = await this.storage.deleteNonResolvedComments(reviewId);
232
+ this.logger.log({ reviewId, deletedCount }, 'Deleted non-resolved comments on review close');
233
+ }
234
+ catch (error) {
235
+ this.logger.warn({ reviewId, error }, 'Failed to delete non-resolved comments on review close');
236
+ }
237
+ return closed;
238
+ }
239
+ async deleteReview(reviewId) {
240
+ await this.storage.getReview(reviewId);
241
+ await this.storage.deleteReview(reviewId);
242
+ }
243
+ async createComment(reviewId, input) {
244
+ const review = await this.storage.getReview(reviewId);
245
+ let filePath = input.filePath ?? null;
246
+ let lineStart = input.lineStart ?? null;
247
+ let lineEnd = input.lineEnd ?? null;
248
+ let side = input.side ?? null;
249
+ let resolvedTargetAgentIds = input.targetAgentIds;
250
+ if (input.parentId) {
251
+ const parentComment = await this.verifyCommentOwnership(input.parentId, reviewId);
252
+ filePath = parentComment.filePath;
253
+ lineStart = parentComment.lineStart;
254
+ lineEnd = parentComment.lineEnd;
255
+ side = parentComment.side;
256
+ if (!resolvedTargetAgentIds || resolvedTargetAgentIds.length === 0) {
257
+ const parentTargets = await this.storage.getReviewCommentTargets(input.parentId);
258
+ if (parentTargets.length > 0) {
259
+ resolvedTargetAgentIds = parentTargets.map((t) => t.agentId);
260
+ }
261
+ else if (parentComment.authorType === 'agent' && parentComment.authorAgentId) {
262
+ resolvedTargetAgentIds = [parentComment.authorAgentId];
263
+ }
264
+ }
265
+ }
266
+ const comment = await this.storage.createReviewComment({
267
+ reviewId,
268
+ filePath,
269
+ parentId: input.parentId ?? null,
270
+ lineStart,
271
+ lineEnd,
272
+ side,
273
+ content: input.content,
274
+ commentType: input.commentType ?? 'comment',
275
+ status: input.status ?? 'open',
276
+ authorType: input.authorType ?? 'user',
277
+ authorAgentId: input.authorAgentId ?? null,
278
+ }, resolvedTargetAgentIds);
279
+ try {
280
+ let projectName;
281
+ try {
282
+ const project = await this.storage.getProject(review.projectId);
283
+ projectName = project.name;
284
+ }
285
+ catch {
286
+ }
287
+ await this.eventsService.publish('review.comment.created', {
288
+ commentId: comment.id,
289
+ reviewId: comment.reviewId,
290
+ projectId: review.projectId,
291
+ content: comment.content,
292
+ commentType: comment.commentType,
293
+ status: comment.status,
294
+ authorType: comment.authorType,
295
+ authorAgentId: comment.authorAgentId,
296
+ filePath: comment.filePath,
297
+ lineStart: comment.lineStart,
298
+ lineEnd: comment.lineEnd,
299
+ parentId: comment.parentId,
300
+ targetAgentIds: resolvedTargetAgentIds,
301
+ projectName,
302
+ reviewTitle: review.title,
303
+ reviewMode: review.mode,
304
+ baseRef: review.baseRef,
305
+ headRef: review.headRef,
306
+ baseSha: review.baseSha,
307
+ headSha: review.headSha,
308
+ });
309
+ }
310
+ catch (error) {
311
+ this.logger.error({ commentId: comment.id, reviewId, projectId: review.projectId, error }, 'Failed to publish review.comment.created event');
312
+ }
313
+ return comment;
314
+ }
315
+ async verifyCommentOwnership(commentId, reviewId) {
316
+ const comment = await this.storage.getReviewComment(commentId);
317
+ if (comment.reviewId !== reviewId) {
318
+ this.logger.warn({ commentId, expectedReviewId: reviewId, actualReviewId: comment.reviewId }, 'IDOR attempt blocked: comment does not belong to review');
319
+ throw new error_types_1.NotFoundError('ReviewComment', commentId);
320
+ }
321
+ return comment;
322
+ }
323
+ async getComment(commentId, reviewId) {
324
+ if (reviewId) {
325
+ return this.verifyCommentOwnership(commentId, reviewId);
326
+ }
327
+ return this.storage.getReviewComment(commentId);
328
+ }
329
+ verifyUserAuthored(comment) {
330
+ if (comment.authorType !== 'user') {
331
+ this.logger.warn({
332
+ commentId: comment.id,
333
+ authorType: comment.authorType,
334
+ authorAgentId: comment.authorAgentId,
335
+ }, 'Blocked attempt to modify agent-authored comment via user endpoint');
336
+ throw new error_types_1.ForbiddenError('Cannot modify agent-authored comments', {
337
+ commentId: comment.id,
338
+ authorType: comment.authorType,
339
+ });
340
+ }
341
+ }
342
+ async updateComment(reviewId, commentId, input, expectedVersion) {
343
+ const before = await this.verifyCommentOwnership(commentId, reviewId);
344
+ this.verifyUserAuthored(before);
345
+ const review = await this.storage.getReview(reviewId);
346
+ const updated = await this.storage.updateReviewComment(commentId, input, expectedVersion);
347
+ if (input.content !== undefined && input.content !== before.content) {
348
+ try {
349
+ let projectName;
350
+ try {
351
+ const project = await this.storage.getProject(review.projectId);
352
+ projectName = project.name;
353
+ }
354
+ catch {
355
+ }
356
+ await this.eventsService.publish('review.comment.updated', {
357
+ commentId: updated.id,
358
+ reviewId: updated.reviewId,
359
+ projectId: review.projectId,
360
+ content: updated.content,
361
+ previousContent: before.content,
362
+ version: updated.version,
363
+ editedAt: updated.editedAt,
364
+ filePath: updated.filePath,
365
+ projectName,
366
+ reviewTitle: review.title,
367
+ });
368
+ }
369
+ catch (error) {
370
+ this.logger.error({ commentId: updated.id, reviewId, projectId: review.projectId, error }, 'Failed to publish review.comment.updated event');
371
+ }
372
+ }
373
+ return updated;
374
+ }
375
+ async resolveComment(reviewId, commentId, status, expectedVersion) {
376
+ const comment = await this.verifyCommentOwnership(commentId, reviewId);
377
+ const review = await this.storage.getReview(comment.reviewId);
378
+ const updated = await this.storage.updateReviewComment(commentId, { status }, expectedVersion);
379
+ try {
380
+ let projectName;
381
+ try {
382
+ const project = await this.storage.getProject(review.projectId);
383
+ projectName = project.name;
384
+ }
385
+ catch {
386
+ }
387
+ await this.eventsService.publish('review.comment.resolved', {
388
+ commentId: updated.id,
389
+ reviewId: updated.reviewId,
390
+ projectId: review.projectId,
391
+ status: updated.status,
392
+ version: updated.version,
393
+ projectName,
394
+ reviewTitle: review.title,
395
+ });
396
+ }
397
+ catch (error) {
398
+ this.logger.error({ commentId: updated.id, reviewId: updated.reviewId, projectId: review.projectId, error }, 'Failed to publish review.comment.resolved event');
399
+ }
400
+ return updated;
401
+ }
402
+ async deleteComment(reviewId, commentId) {
403
+ const comment = await this.verifyCommentOwnership(commentId, reviewId);
404
+ this.verifyUserAuthored(comment);
405
+ const review = await this.storage.getReview(reviewId);
406
+ await this.storage.deleteReviewComment(commentId);
407
+ try {
408
+ let projectName;
409
+ try {
410
+ const project = await this.storage.getProject(review.projectId);
411
+ projectName = project.name;
412
+ }
413
+ catch {
414
+ }
415
+ await this.eventsService.publish('review.comment.deleted', {
416
+ commentId: comment.id,
417
+ reviewId: comment.reviewId,
418
+ projectId: review.projectId,
419
+ filePath: comment.filePath,
420
+ parentId: comment.parentId,
421
+ projectName,
422
+ reviewTitle: review.title,
423
+ });
424
+ }
425
+ catch (error) {
426
+ this.logger.error({ commentId, reviewId, projectId: review.projectId, error }, 'Failed to publish review.comment.deleted event');
427
+ }
428
+ }
429
+ async listComments(reviewId, options) {
430
+ await this.storage.getReview(reviewId);
431
+ return this.storage.listReviewComments(reviewId, {
432
+ status: options?.status,
433
+ filePath: options?.filePath,
434
+ parentId: options?.parentId,
435
+ limit: options?.limit,
436
+ offset: options?.offset,
437
+ });
438
+ }
439
+ async getCommentTargets(reviewId, commentId) {
440
+ await this.verifyCommentOwnership(commentId, reviewId);
441
+ return this.storage.getReviewCommentTargets(commentId);
442
+ }
443
+ buildReviewChanges(before, after) {
444
+ const changes = {};
445
+ if (before.title !== after.title) {
446
+ changes.title = { previous: before.title, current: after.title };
447
+ }
448
+ if (before.status !== after.status) {
449
+ changes.status = { previous: before.status, current: after.status };
450
+ }
451
+ if (before.headSha !== after.headSha) {
452
+ changes.headSha = { previous: before.headSha, current: after.headSha };
453
+ }
454
+ return changes;
455
+ }
456
+ };
457
+ exports.ReviewsService = ReviewsService;
458
+ exports.ReviewsService = ReviewsService = ReviewsService_1 = __decorate([
459
+ (0, common_1.Injectable)(),
460
+ __param(0, (0, common_1.Inject)(storage_interface_1.STORAGE_SERVICE)),
461
+ __metadata("design:paramtypes", [Object, events_service_1.EventsService,
462
+ git_service_1.GitService])
463
+ ], ReviewsService);
464
+ //# sourceMappingURL=reviews.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviews.service.js","sourceRoot":"","sources":["../../../../src/modules/reviews/services/reviews.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface CommentNotificationInput {
2
+ commentId: string;
3
+ reviewId: string;
4
+ content: string;
5
+ commentType: 'comment' | 'suggestion' | 'issue' | 'approval';
6
+ authorName: string;
7
+ filePath: string | null;
8
+ lineStart: number | null;
9
+ lineEnd: number | null;
10
+ reviewTitle: string;
11
+ }
12
+ export declare function formatReviewCommentNotification(input: CommentNotificationInput): string;