reviewflow 3.33.0 → 3.34.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 (84) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/main/routes.d.ts.map +1 -1
  3. package/dist/main/routes.js +4 -3
  4. package/dist/main/routes.js.map +1 -1
  5. package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.guard.d.ts +1 -1
  6. package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.schema.d.ts +2 -0
  7. package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.schema.d.ts.map +1 -1
  8. package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.schema.js +1 -1
  9. package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.schema.js.map +1 -1
  10. package/dist/modules/{ember-chat/interface-adapters/gateways/emberStreamJson.parser.d.ts → claude-invocation/interface-adapters/gateways/transcriptStreamJson.parser.d.ts} +1 -1
  11. package/dist/modules/claude-invocation/interface-adapters/gateways/transcriptStreamJson.parser.d.ts.map +1 -0
  12. package/dist/modules/{ember-chat/interface-adapters/gateways/emberStreamJson.parser.js → claude-invocation/interface-adapters/gateways/transcriptStreamJson.parser.js} +1 -1
  13. package/dist/modules/claude-invocation/interface-adapters/gateways/transcriptStreamJson.parser.js.map +1 -0
  14. package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.js +1 -1
  15. package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.js.map +1 -1
  16. package/dist/modules/statistics-insights/entities/insight/aiInsightsSession.gateway.d.ts +13 -0
  17. package/dist/modules/statistics-insights/entities/insight/aiInsightsSession.gateway.d.ts.map +1 -0
  18. package/dist/modules/statistics-insights/entities/insight/aiInsightsSession.gateway.js +2 -0
  19. package/dist/modules/statistics-insights/entities/insight/aiInsightsSession.gateway.js.map +1 -0
  20. package/dist/modules/statistics-insights/interface-adapters/controllers/http/insights.routes.d.ts +4 -2
  21. package/dist/modules/statistics-insights/interface-adapters/controllers/http/insights.routes.d.ts.map +1 -1
  22. package/dist/modules/statistics-insights/interface-adapters/controllers/http/insights.routes.js +6 -4
  23. package/dist/modules/statistics-insights/interface-adapters/controllers/http/insights.routes.js.map +1 -1
  24. package/dist/modules/statistics-insights/interface-adapters/gateways/aiInsightsSession.claude.gateway.d.ts +31 -0
  25. package/dist/modules/statistics-insights/interface-adapters/gateways/aiInsightsSession.claude.gateway.d.ts.map +1 -0
  26. package/dist/modules/statistics-insights/interface-adapters/gateways/aiInsightsSession.claude.gateway.js +105 -0
  27. package/dist/modules/statistics-insights/interface-adapters/gateways/aiInsightsSession.claude.gateway.js.map +1 -0
  28. package/dist/modules/statistics-insights/usecases/insights/{generateAiInsights.usecase.d.ts → generateAiInsightsViaSession.usecase.d.ts} +7 -13
  29. package/dist/modules/statistics-insights/usecases/insights/generateAiInsightsViaSession.usecase.d.ts.map +1 -0
  30. package/dist/modules/statistics-insights/usecases/insights/generateAiInsightsViaSession.usecase.js +49 -0
  31. package/dist/modules/statistics-insights/usecases/insights/generateAiInsightsViaSession.usecase.js.map +1 -0
  32. package/dist/modules/statistics-insights/usecases/insights/parseAiInsightsResponse.d.ts +3 -0
  33. package/dist/modules/statistics-insights/usecases/insights/parseAiInsightsResponse.d.ts.map +1 -0
  34. package/dist/modules/statistics-insights/usecases/insights/parseAiInsightsResponse.js +20 -0
  35. package/dist/modules/statistics-insights/usecases/insights/parseAiInsightsResponse.js.map +1 -0
  36. package/dist/modules/statistics-insights/usecases/insights/persistAiInsights.usecase.d.ts +12 -0
  37. package/dist/modules/statistics-insights/usecases/insights/persistAiInsights.usecase.d.ts.map +1 -0
  38. package/dist/modules/statistics-insights/usecases/insights/persistAiInsights.usecase.js +14 -0
  39. package/dist/modules/statistics-insights/usecases/insights/persistAiInsights.usecase.js.map +1 -0
  40. package/dist/tests/acceptance/191-team-insights-bg-migration.acceptance.test.d.ts +2 -0
  41. package/dist/tests/acceptance/191-team-insights-bg-migration.acceptance.test.d.ts.map +1 -0
  42. package/dist/tests/acceptance/191-team-insights-bg-migration.acceptance.test.js +121 -0
  43. package/dist/tests/acceptance/191-team-insights-bg-migration.acceptance.test.js.map +1 -0
  44. package/dist/tests/stubs/aiInsightsSession.stub.d.ts +8 -0
  45. package/dist/tests/stubs/aiInsightsSession.stub.d.ts.map +1 -0
  46. package/dist/tests/stubs/aiInsightsSession.stub.js +15 -0
  47. package/dist/tests/stubs/aiInsightsSession.stub.js.map +1 -0
  48. package/dist/tests/units/architecture/noClaudePInProduction.test.js +0 -1
  49. package/dist/tests/units/architecture/noClaudePInProduction.test.js.map +1 -1
  50. package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.js +6 -4
  51. package/dist/tests/units/interface-adapters/controllers/http/insights.routes.test.js.map +1 -1
  52. package/dist/tests/units/modules/claude-invocation/gateways/transcriptStreamJson.parser.test.d.ts +2 -0
  53. package/dist/tests/units/modules/claude-invocation/gateways/transcriptStreamJson.parser.test.d.ts.map +1 -0
  54. package/dist/tests/units/modules/{ember-chat/gateways/emberStreamJson.parser.test.js → claude-invocation/gateways/transcriptStreamJson.parser.test.js} +2 -2
  55. package/dist/tests/units/modules/claude-invocation/gateways/transcriptStreamJson.parser.test.js.map +1 -0
  56. package/dist/tests/units/usecases/insights/generateAiInsightsViaSession.usecase.test.d.ts +2 -0
  57. package/dist/tests/units/usecases/insights/generateAiInsightsViaSession.usecase.test.d.ts.map +1 -0
  58. package/dist/tests/units/usecases/insights/generateAiInsightsViaSession.usecase.test.js +114 -0
  59. package/dist/tests/units/usecases/insights/generateAiInsightsViaSession.usecase.test.js.map +1 -0
  60. package/dist/tests/units/usecases/insights/parseAiInsightsResponse.test.d.ts +2 -0
  61. package/dist/tests/units/usecases/insights/parseAiInsightsResponse.test.d.ts.map +1 -0
  62. package/dist/tests/units/usecases/insights/parseAiInsightsResponse.test.js +45 -0
  63. package/dist/tests/units/usecases/insights/parseAiInsightsResponse.test.js.map +1 -0
  64. package/dist/tests/units/usecases/insights/persistAiInsights.usecase.test.d.ts +2 -0
  65. package/dist/tests/units/usecases/insights/persistAiInsights.usecase.test.d.ts.map +1 -0
  66. package/dist/tests/units/usecases/insights/persistAiInsights.usecase.test.js +87 -0
  67. package/dist/tests/units/usecases/insights/persistAiInsights.usecase.test.js.map +1 -0
  68. package/package.json +9 -2
  69. package/dist/frameworks/claude/claudeInsightsInvoker.d.ts +0 -3
  70. package/dist/frameworks/claude/claudeInsightsInvoker.d.ts.map +0 -1
  71. package/dist/frameworks/claude/claudeInsightsInvoker.js +0 -58
  72. package/dist/frameworks/claude/claudeInsightsInvoker.js.map +0 -1
  73. package/dist/modules/ember-chat/interface-adapters/gateways/emberStreamJson.parser.d.ts.map +0 -1
  74. package/dist/modules/ember-chat/interface-adapters/gateways/emberStreamJson.parser.js.map +0 -1
  75. package/dist/modules/statistics-insights/usecases/insights/generateAiInsights.usecase.d.ts.map +0 -1
  76. package/dist/modules/statistics-insights/usecases/insights/generateAiInsights.usecase.js +0 -65
  77. package/dist/modules/statistics-insights/usecases/insights/generateAiInsights.usecase.js.map +0 -1
  78. package/dist/tests/units/modules/ember-chat/gateways/emberStreamJson.parser.test.d.ts +0 -2
  79. package/dist/tests/units/modules/ember-chat/gateways/emberStreamJson.parser.test.d.ts.map +0 -1
  80. package/dist/tests/units/modules/ember-chat/gateways/emberStreamJson.parser.test.js.map +0 -1
  81. package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.d.ts +0 -2
  82. package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.d.ts.map +0 -1
  83. package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.js +0 -253
  84. package/dist/tests/units/usecases/insights/generateAiInsights.usecase.test.js.map +0 -1
@@ -0,0 +1,49 @@
1
+ import { buildAiInsightsPrompt } from '../../../../modules/statistics-insights/usecases/insights/buildAiInsightsPrompt.js';
2
+ import { parseAiInsightsResponse } from '../../../../modules/statistics-insights/usecases/insights/parseAiInsightsResponse.js';
3
+ const NO_STATS_MESSAGE = 'Aucune statistique de review disponible pour ce projet';
4
+ const API_KEY_PRESENT_MESSAGE = "Impossible de générer les insights — l'abonnement Claude est requis, pas de clé API";
5
+ const UNAVAILABLE_MESSAGE = 'Impossible de générer les insights — connexion à l\'abonnement Claude requise';
6
+ const TIMEOUT_MESSAGE = 'La génération des insights a expiré';
7
+ export async function generateAiInsightsViaSession(input) {
8
+ const { projectPath, statsGateway, reviewFileGateway, reviewRequestTrackingGateway, logger, session, environment, language, } = input;
9
+ if (environment.hasAnthropicApiKey()) {
10
+ throw new Error(API_KEY_PRESENT_MESSAGE);
11
+ }
12
+ const stats = statsGateway.loadProjectStats(projectPath);
13
+ if (!stats || stats.reviews.length === 0) {
14
+ throw new Error(NO_STATS_MESSAGE);
15
+ }
16
+ const reviewFiles = await reviewFileGateway.listReviews(projectPath);
17
+ const reviewContents = new Map();
18
+ for (const reviewFile of reviewFiles) {
19
+ const content = await reviewFileGateway.readReview(projectPath, reviewFile.filename);
20
+ if (content) {
21
+ reviewContents.set(reviewFile.mrNumber, content);
22
+ }
23
+ }
24
+ const trackingData = reviewRequestTrackingGateway.loadTracking(projectPath);
25
+ const trackedMrs = trackingData?.mrs ?? [];
26
+ const prompt = buildAiInsightsPrompt({
27
+ reviews: stats.reviews,
28
+ reviewContents,
29
+ trackedMrs,
30
+ language,
31
+ });
32
+ logger.info({ promptLength: prompt.length }, 'Dispatching --bg session for AI insights');
33
+ const sessionResult = await session.run(prompt);
34
+ if (sessionResult.status === 'unavailable') {
35
+ logger.error({ reason: sessionResult.reason }, 'AI insights session unavailable');
36
+ throw new Error(UNAVAILABLE_MESSAGE);
37
+ }
38
+ if (sessionResult.status === 'timed-out') {
39
+ logger.error('AI insights session timed out');
40
+ throw new Error(TIMEOUT_MESSAGE);
41
+ }
42
+ logger.info({ answerLength: sessionResult.answer.length }, 'Received --bg answer for AI insights');
43
+ const result = parseAiInsightsResponse(sessionResult.answer);
44
+ return {
45
+ ...result,
46
+ generatedAt: new Date().toISOString(),
47
+ };
48
+ }
49
+ //# sourceMappingURL=generateAiInsightsViaSession.usecase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateAiInsightsViaSession.usecase.js","sourceRoot":"","sources":["../../../../../src/modules/statistics-insights/usecases/insights/generateAiInsightsViaSession.usecase.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0EAA0E,CAAC;AACjH,OAAO,EAAE,uBAAuB,EAAE,MAAM,4EAA4E,CAAC;AAErH,MAAM,gBAAgB,GAAG,wDAAwD,CAAC;AAClF,MAAM,uBAAuB,GAC3B,qFAAqF,CAAC;AACxF,MAAM,mBAAmB,GACvB,+EAA+E,CAAC;AAClF,MAAM,eAAe,GAAG,qCAAqC,CAAC;AAa9D,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,KAAwC;IAExC,MAAM,EACJ,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,4BAA4B,EAC5B,MAAM,EACN,OAAO,EACP,WAAW,EACX,QAAQ,GACT,GAAG,KAAK,CAAC;IAEV,IAAI,WAAW,CAAC,kBAAkB,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACrE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrF,IAAI,OAAO,EAAE,CAAC;YACZ,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,4BAA4B,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,YAAY,EAAE,GAAG,IAAI,EAAE,CAAC;IAE3C,MAAM,MAAM,GAAG,qBAAqB,CAAC;QACnC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,cAAc;QACd,UAAU;QACV,QAAQ;KACT,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,0CAA0C,CAAC,CAAC;IAEzF,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAI,aAAa,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,EAAE,iCAAiC,CAAC,CAAC;QAClF,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,sCAAsC,CAAC,CAAC;IAEnG,MAAM,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAE7D,OAAO;QACL,GAAG,MAAM;QACT,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AiInsightsResult } from '../../../../modules/statistics-insights/entities/insight/aiInsight.js';
2
+ export declare function parseAiInsightsResponse(rawOutput: string): Omit<AiInsightsResult, 'generatedAt'>;
3
+ //# sourceMappingURL=parseAiInsightsResponse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseAiInsightsResponse.d.ts","sourceRoot":"","sources":["../../../../../src/modules/statistics-insights/usecases/insights/parseAiInsightsResponse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAC;AAiBpG,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAIhG"}
@@ -0,0 +1,20 @@
1
+ import { aiInsightsRawResponseSchema } from '../../../../modules/statistics-insights/entities/insight/aiInsight.schema.js';
2
+ function stripMarkdownFences(text) {
3
+ let cleaned = text.trim();
4
+ if (cleaned.startsWith('```')) {
5
+ const firstNewline = cleaned.indexOf('\n');
6
+ if (firstNewline !== -1) {
7
+ cleaned = cleaned.substring(firstNewline + 1);
8
+ }
9
+ }
10
+ if (cleaned.endsWith('```')) {
11
+ cleaned = cleaned.substring(0, cleaned.length - 3).trim();
12
+ }
13
+ return cleaned;
14
+ }
15
+ export function parseAiInsightsResponse(rawOutput) {
16
+ const cleaned = stripMarkdownFences(rawOutput);
17
+ const parsed = JSON.parse(cleaned);
18
+ return aiInsightsRawResponseSchema.parse(parsed);
19
+ }
20
+ //# sourceMappingURL=parseAiInsightsResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseAiInsightsResponse.js","sourceRoot":"","sources":["../../../../../src/modules/statistics-insights/usecases/insights/parseAiInsightsResponse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oEAAoE,CAAC;AAEjH,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACxB,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,MAAM,OAAO,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { StatsGateway } from '../../../../modules/statistics-insights/entities/stats/stats.gateway.js';
2
+ import type { InsightsGateway } from '../../../../modules/statistics-insights/entities/insight/insights.gateway.js';
3
+ import type { AiInsightsResult } from '../../../../modules/statistics-insights/entities/insight/aiInsight.js';
4
+ interface PersistAiInsightsInput {
5
+ projectPath: string;
6
+ aiInsights: AiInsightsResult;
7
+ statsGateway: StatsGateway;
8
+ insightsGateway: InsightsGateway;
9
+ }
10
+ export declare function persistAiInsightsResult(input: PersistAiInsightsInput): void;
11
+ export {};
12
+ //# sourceMappingURL=persistAiInsights.usecase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistAiInsights.usecase.d.ts","sourceRoot":"","sources":["../../../../../src/modules/statistics-insights/usecases/insights/persistAiInsights.usecase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+DAA+D,CAAC;AAClG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oEAAoE,CAAC;AAC1G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAC;AAGpG,UAAU,sBAAsB;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAa3E"}
@@ -0,0 +1,14 @@
1
+ import { computeInsightsWithPersistence } from '../../../../modules/statistics-insights/usecases/insights/computeInsightsWithPersistence.usecase.js';
2
+ export function persistAiInsightsResult(input) {
3
+ const { projectPath, aiInsights, statsGateway, insightsGateway } = input;
4
+ const existingData = insightsGateway.loadPersistedInsights(projectPath);
5
+ const stats = statsGateway.loadProjectStats(projectPath);
6
+ const currentReviews = stats?.reviews ?? [];
7
+ const upToDateResult = computeInsightsWithPersistence(currentReviews, existingData);
8
+ insightsGateway.savePersistedInsights(projectPath, {
9
+ ...upToDateResult.persistedData,
10
+ aiInsights,
11
+ reviewCountAtAiGeneration: upToDateResult.persistedData.processedReviewIds.length,
12
+ });
13
+ }
14
+ //# sourceMappingURL=persistAiInsights.usecase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistAiInsights.usecase.js","sourceRoot":"","sources":["../../../../../src/modules/statistics-insights/usecases/insights/persistAiInsights.usecase.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,8BAA8B,EAAE,MAAM,2FAA2F,CAAC;AAS3I,MAAM,UAAU,uBAAuB,CAAC,KAA6B;IACnE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAEzE,MAAM,YAAY,GAAG,eAAe,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,YAAY,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,8BAA8B,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAEpF,eAAe,CAAC,qBAAqB,CAAC,WAAW,EAAE;QACjD,GAAG,cAAc,CAAC,aAAa;QAC/B,UAAU;QACV,yBAAyB,EAAE,cAAc,CAAC,aAAa,CAAC,kBAAkB,CAAC,MAAM;KAClF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=191-team-insights-bg-migration.acceptance.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"191-team-insights-bg-migration.acceptance.test.d.ts","sourceRoot":"","sources":["../../../src/tests/acceptance/191-team-insights-bg-migration.acceptance.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,121 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { readdirSync, readFileSync, existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { generateAiInsightsViaSession } from '../../modules/statistics-insights/usecases/insights/generateAiInsightsViaSession.usecase.js';
5
+ import { InMemoryStatsGateway } from '../../tests/stubs/stats.stub.js';
6
+ import { InMemoryReviewFileGateway } from '../../tests/stubs/reviewFile.stub.js';
7
+ import { InMemoryReviewRequestTrackingGateway } from '../../tests/stubs/reviewRequestTracking.stub.js';
8
+ import { StubEnvironmentGateway } from '../../tests/stubs/environment.stub.js';
9
+ import { StubAiInsightsSessionGateway } from '../../tests/stubs/aiInsightsSession.stub.js';
10
+ import { createStubLogger } from '../../tests/stubs/logger.stub.js';
11
+ import { ProjectStatsFactory, ReviewStatsFactory } from '../../tests/factories/projectStats.factory.js';
12
+ const validAiResult = {
13
+ developers: [
14
+ {
15
+ developerName: 'alice',
16
+ title: 'Le Chirurgien du Code',
17
+ titleExplanation: 'Precise and methodical',
18
+ strengths: ['Excellent test coverage'],
19
+ weaknesses: ['Slow review turnaround'],
20
+ recommendations: ['Automate repetitive checks'],
21
+ summary: 'Alice is a meticulous developer.',
22
+ },
23
+ ],
24
+ team: {
25
+ summary: 'A well-balanced team.',
26
+ strengths: ['Strong testing culture'],
27
+ weaknesses: ['Documentation gaps'],
28
+ recommendations: ['Establish review guidelines'],
29
+ dynamics: 'Good team dynamics.',
30
+ },
31
+ generatedAt: '2026-03-15T10:00:00Z',
32
+ };
33
+ describe('SPEC-191: Team AI Insights migrated to --bg subscription billing', () => {
34
+ let statsGateway;
35
+ let reviewFileGateway;
36
+ let reviewRequestTrackingGateway;
37
+ let environment;
38
+ let session;
39
+ function input() {
40
+ return {
41
+ projectPath: '/test/project',
42
+ statsGateway,
43
+ reviewFileGateway,
44
+ reviewRequestTrackingGateway,
45
+ logger: createStubLogger(),
46
+ session,
47
+ environment,
48
+ language: 'fr',
49
+ };
50
+ }
51
+ function seedReviews() {
52
+ const reviews = [
53
+ ReviewStatsFactory.create({ id: 'r1', assignedBy: 'alice', mrNumber: 1, score: 8 }),
54
+ ];
55
+ statsGateway.saveProjectStats('/test/project', ProjectStatsFactory.withReviews(reviews));
56
+ }
57
+ beforeEach(() => {
58
+ statsGateway = new InMemoryStatsGateway();
59
+ reviewFileGateway = new InMemoryReviewFileGateway();
60
+ reviewRequestTrackingGateway = new InMemoryReviewRequestTrackingGateway();
61
+ environment = new StubEnvironmentGateway();
62
+ session = new StubAiInsightsSessionGateway();
63
+ });
64
+ it('nominal: generates insights via a --bg session with identical content', async () => {
65
+ seedReviews();
66
+ session.setResult({ status: 'completed', answer: JSON.stringify(validAiResult) });
67
+ const result = await generateAiInsightsViaSession(input());
68
+ expect(session.runCalls).toHaveLength(1);
69
+ expect(result.developers[0].developerName).toBe('alice');
70
+ expect(result.team.summary).toBe('A well-balanced team.');
71
+ });
72
+ it('answer read from transcript: parses the completed session answer into insights', async () => {
73
+ seedReviews();
74
+ session.setResult({ status: 'completed', answer: JSON.stringify(validAiResult) });
75
+ const result = await generateAiInsightsViaSession(input());
76
+ expect(result.generatedAt).toBeDefined();
77
+ });
78
+ it('no stats: rejects with the French no-stats message', async () => {
79
+ await expect(generateAiInsightsViaSession(input())).rejects.toThrow('Aucune statistique de review disponible pour ce projet');
80
+ });
81
+ it('not logged in: rejects with the French subscription-required message', async () => {
82
+ seedReviews();
83
+ session.setResult({ status: 'unavailable', reason: 'dispatch-failed' });
84
+ await expect(generateAiInsightsViaSession(input())).rejects.toThrow('Impossible de générer les insights — connexion à l\'abonnement Claude requise');
85
+ });
86
+ it('api key present: refuses before dispatch with the subscription-only message', async () => {
87
+ seedReviews();
88
+ environment.setHasAnthropicApiKey(true);
89
+ await expect(generateAiInsightsViaSession(input())).rejects.toThrow("Impossible de générer les insights — l'abonnement Claude est requis, pas de clé API");
90
+ expect(session.runCalls).toHaveLength(0);
91
+ });
92
+ it('timeout: rejects with the French timeout message', async () => {
93
+ seedReviews();
94
+ session.setResult({ status: 'timed-out' });
95
+ await expect(generateAiInsightsViaSession(input())).rejects.toThrow('La génération des insights a expiré');
96
+ });
97
+ it('no remaining -p: no production insights code invokes claude -p / --print', () => {
98
+ const insightsDir = join(process.cwd(), 'src', 'modules', 'statistics-insights');
99
+ const offenders = [];
100
+ const walk = (dir) => {
101
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
102
+ const full = join(dir, entry.name);
103
+ if (entry.isDirectory()) {
104
+ walk(full);
105
+ continue;
106
+ }
107
+ if (!entry.name.endsWith('.ts') || full.includes('/tests/')) {
108
+ continue;
109
+ }
110
+ const content = readFileSync(full, 'utf-8');
111
+ if (/['"]--print['"]/.test(content) || /['"]-p['"]/.test(content)) {
112
+ offenders.push(full);
113
+ }
114
+ }
115
+ };
116
+ walk(insightsDir);
117
+ expect(offenders).toEqual([]);
118
+ expect(existsSync(join(process.cwd(), 'src', 'frameworks', 'claude', 'claudeInsightsInvoker.ts'))).toBe(false);
119
+ });
120
+ });
121
+ //# sourceMappingURL=191-team-insights-bg-migration.acceptance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"191-team-insights-bg-migration.acceptance.test.js","sourceRoot":"","sources":["../../../src/tests/acceptance/191-team-insights-bg-migration.acceptance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { AiInsightsSessionGateway, AiInsightsSessionResult } from '../../modules/statistics-insights/entities/insight/aiInsightsSession.gateway.js';
2
+ export declare class StubAiInsightsSessionGateway implements AiInsightsSessionGateway {
3
+ runCalls: string[];
4
+ private result;
5
+ setResult(result: AiInsightsSessionResult): void;
6
+ run(prompt: string): Promise<AiInsightsSessionResult>;
7
+ }
8
+ //# sourceMappingURL=aiInsightsSession.stub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiInsightsSession.stub.d.ts","sourceRoot":"","sources":["../../../src/tests/stubs/aiInsightsSession.stub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,6EAA6E,CAAC;AAErF,qBAAa,4BAA6B,YAAW,wBAAwB;IAC3E,QAAQ,EAAE,MAAM,EAAE,CAAM;IAExB,OAAO,CAAC,MAAM,CAGZ;IAEF,SAAS,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAI1C,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAI5D"}
@@ -0,0 +1,15 @@
1
+ export class StubAiInsightsSessionGateway {
2
+ runCalls = [];
3
+ result = {
4
+ status: 'completed',
5
+ answer: '{}',
6
+ };
7
+ setResult(result) {
8
+ this.result = result;
9
+ }
10
+ async run(prompt) {
11
+ this.runCalls.push(prompt);
12
+ return this.result;
13
+ }
14
+ }
15
+ //# sourceMappingURL=aiInsightsSession.stub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiInsightsSession.stub.js","sourceRoot":"","sources":["../../../src/tests/stubs/aiInsightsSession.stub.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,4BAA4B;IACvC,QAAQ,GAAa,EAAE,CAAC;IAEhB,MAAM,GAA4B;QACxC,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,IAAI;KACb,CAAC;IAEF,SAAS,CAAC,MAA+B;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAc;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
@@ -4,7 +4,6 @@ import { join } from 'node:path';
4
4
  const SRC_ROOT = join(process.cwd(), 'src');
5
5
  const ALLOWED_PATHS = [
6
6
  'src/cli/parseCliArgs.ts',
7
- 'src/frameworks/claude/claudeInsightsInvoker.ts',
8
7
  'src/tests/units/architecture/noClaudePInProduction.test.ts',
9
8
  ];
10
9
  // Files allowed to mention StreamJsonParser / ProgressParser by name. Both
@@ -1 +1 @@
1
- {"version":3,"file":"noClaudePInProduction.test.js","sourceRoot":"","sources":["../../../../src/tests/units/architecture/noClaudePInProduction.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"noClaudePInProduction.test.js","sourceRoot":"","sources":["../../../../src/tests/units/architecture/noClaudePInProduction.test.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ import { InMemoryReviewFileGateway } from '../../../../../tests/stubs/reviewFile
7
7
  import { InMemoryReviewRequestTrackingGateway } from '../../../../../tests/stubs/reviewRequestTracking.stub.js';
8
8
  import { createStubLogger } from '../../../../../tests/stubs/logger.stub.js';
9
9
  import { ProjectStatsFactory, ReviewStatsFactory } from '../../../../../tests/factories/projectStats.factory.js';
10
+ import { StubAiInsightsSessionGateway } from '../../../../../tests/stubs/aiInsightsSession.stub.js';
11
+ import { StubEnvironmentGateway } from '../../../../../tests/stubs/environment.stub.js';
10
12
  const validAiResult = {
11
13
  developers: [
12
14
  {
@@ -28,9 +30,6 @@ const validAiResult = {
28
30
  },
29
31
  generatedAt: '2026-03-15T10:00:00Z',
30
32
  };
31
- function createSuccessfulClaudeInvoker() {
32
- return async () => JSON.stringify(validAiResult);
33
- }
34
33
  describe('insights routes', () => {
35
34
  let app;
36
35
  let statsGateway;
@@ -43,13 +42,16 @@ describe('insights routes', () => {
43
42
  insightsGateway = new InMemoryInsightsGateway();
44
43
  reviewFileGateway = new InMemoryReviewFileGateway();
45
44
  reviewRequestTrackingGateway = new InMemoryReviewRequestTrackingGateway();
45
+ const session = new StubAiInsightsSessionGateway();
46
+ session.setResult({ status: 'completed', answer: JSON.stringify(validAiResult) });
46
47
  await app.register(insightsRoutes, {
47
48
  statsGateway,
48
49
  insightsGateway,
49
50
  reviewFileGateway,
50
51
  reviewRequestTrackingGateway,
51
52
  logger: createStubLogger(),
52
- claudeInvoker: createSuccessfulClaudeInvoker(),
53
+ session,
54
+ environment: new StubEnvironmentGateway(),
53
55
  language: 'fr',
54
56
  });
55
57
  await app.ready();
@@ -1 +1 @@
1
- {"version":3,"file":"insights.routes.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/insights.routes.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"insights.routes.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/insights.routes.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transcriptStreamJson.parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcriptStreamJson.parser.test.d.ts","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/claude-invocation/gateways/transcriptStreamJson.parser.test.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect } from 'vitest';
2
- import { parseStreamJsonEvent, extractText, isTurnComplete, } from '../../../../../modules/ember-chat/interface-adapters/gateways/emberStreamJson.parser.js';
2
+ import { parseStreamJsonEvent, extractText, isTurnComplete, } from '../../../../../modules/claude-invocation/interface-adapters/gateways/transcriptStreamJson.parser.js';
3
3
  describe('parseStreamJsonEvent', () => {
4
4
  it('parses a JSON object line into an event', () => {
5
5
  expect(parseStreamJsonEvent('{"type":"result"}')).toEqual({ type: 'result' });
@@ -62,4 +62,4 @@ describe('isTurnComplete', () => {
62
62
  expect(isTurnComplete({})).toBe(false);
63
63
  });
64
64
  });
65
- //# sourceMappingURL=emberStreamJson.parser.test.js.map
65
+ //# sourceMappingURL=transcriptStreamJson.parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcriptStreamJson.parser.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/claude-invocation/gateways/transcriptStreamJson.parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generateAiInsightsViaSession.usecase.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateAiInsightsViaSession.usecase.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/units/usecases/insights/generateAiInsightsViaSession.usecase.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,114 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { generateAiInsightsViaSession } from '../../../../modules/statistics-insights/usecases/insights/generateAiInsightsViaSession.usecase.js';
3
+ import { InMemoryStatsGateway } from '../../../../tests/stubs/stats.stub.js';
4
+ import { InMemoryReviewFileGateway } from '../../../../tests/stubs/reviewFile.stub.js';
5
+ import { InMemoryReviewRequestTrackingGateway } from '../../../../tests/stubs/reviewRequestTracking.stub.js';
6
+ import { StubEnvironmentGateway } from '../../../../tests/stubs/environment.stub.js';
7
+ import { StubAiInsightsSessionGateway } from '../../../../tests/stubs/aiInsightsSession.stub.js';
8
+ import { createStubLogger } from '../../../../tests/stubs/logger.stub.js';
9
+ import { ProjectStatsFactory, ReviewStatsFactory } from '../../../../tests/factories/projectStats.factory.js';
10
+ const validAiResult = {
11
+ developers: [
12
+ {
13
+ developerName: 'alice',
14
+ title: 'Le Chirurgien du Code',
15
+ titleExplanation: 'Precise and methodical',
16
+ strengths: ['Excellent test coverage'],
17
+ weaknesses: ['Slow review turnaround'],
18
+ recommendations: ['Automate repetitive checks'],
19
+ summary: 'Alice is a meticulous developer.',
20
+ },
21
+ ],
22
+ team: {
23
+ summary: 'A well-balanced team.',
24
+ strengths: ['Strong testing culture'],
25
+ weaknesses: ['Documentation gaps'],
26
+ recommendations: ['Establish review guidelines'],
27
+ dynamics: 'Good team dynamics.',
28
+ },
29
+ generatedAt: '2026-03-15T10:00:00Z',
30
+ };
31
+ describe('generateAiInsightsViaSession', () => {
32
+ let statsGateway;
33
+ let reviewFileGateway;
34
+ let reviewRequestTrackingGateway;
35
+ let environment;
36
+ let session;
37
+ function input() {
38
+ return {
39
+ projectPath: '/test/project',
40
+ statsGateway,
41
+ reviewFileGateway,
42
+ reviewRequestTrackingGateway,
43
+ logger: createStubLogger(),
44
+ session,
45
+ environment,
46
+ language: 'fr',
47
+ };
48
+ }
49
+ function seedReviews() {
50
+ const reviews = [
51
+ ReviewStatsFactory.create({ id: 'r1', assignedBy: 'alice', mrNumber: 1, score: 8 }),
52
+ ];
53
+ statsGateway.saveProjectStats('/test/project', ProjectStatsFactory.withReviews(reviews));
54
+ }
55
+ beforeEach(() => {
56
+ statsGateway = new InMemoryStatsGateway();
57
+ reviewFileGateway = new InMemoryReviewFileGateway();
58
+ reviewRequestTrackingGateway = new InMemoryReviewRequestTrackingGateway();
59
+ environment = new StubEnvironmentGateway();
60
+ session = new StubAiInsightsSessionGateway();
61
+ });
62
+ it('returns insights parsed from the completed --bg session answer', async () => {
63
+ seedReviews();
64
+ session.setResult({ status: 'completed', answer: JSON.stringify(validAiResult) });
65
+ const result = await generateAiInsightsViaSession(input());
66
+ expect(result.developers).toHaveLength(1);
67
+ expect(result.developers[0].developerName).toBe('alice');
68
+ expect(result.team.summary).toBe('A well-balanced team.');
69
+ expect(result.generatedAt).toBeDefined();
70
+ expect(new Date(result.generatedAt).getTime()).not.toBeNaN();
71
+ });
72
+ it('parses an answer wrapped in markdown fences', async () => {
73
+ seedReviews();
74
+ session.setResult({
75
+ status: 'completed',
76
+ answer: '```json\n' + JSON.stringify(validAiResult) + '\n```',
77
+ });
78
+ const result = await generateAiInsightsViaSession(input());
79
+ expect(result.developers).toHaveLength(1);
80
+ });
81
+ it('sends the prompt with review content and tracked data to the session', async () => {
82
+ seedReviews();
83
+ reviewFileGateway.addReview('/test/project', '2026-03-13-MR-1-review.md', '# Code Review - MR !1\n\n## Synthèse Exécutive\n\n| Audit | Score |\n|---|---|\n| Testing | 9/10 |\n\n**Score Global : 8/10**\n\n## Constats Positifs\n\n### 1. Great test coverage\n');
84
+ session.setResult({ status: 'completed', answer: JSON.stringify(validAiResult) });
85
+ await generateAiInsightsViaSession(input());
86
+ expect(session.runCalls).toHaveLength(1);
87
+ expect(session.runCalls[0]).toContain('Synthèse Exécutive');
88
+ });
89
+ it('refuses when an Anthropic API key is present (subscription-only safeguard)', async () => {
90
+ seedReviews();
91
+ environment.setHasAnthropicApiKey(true);
92
+ await expect(generateAiInsightsViaSession(input())).rejects.toThrow("Impossible de générer les insights — l'abonnement Claude est requis, pas de clé API");
93
+ expect(session.runCalls).toHaveLength(0);
94
+ });
95
+ it('rejects in French when no review stats exist', async () => {
96
+ await expect(generateAiInsightsViaSession(input())).rejects.toThrow('Aucune statistique de review disponible pour ce projet');
97
+ });
98
+ it('rejects in French when the subscription session is unavailable (logged out)', async () => {
99
+ seedReviews();
100
+ session.setResult({ status: 'unavailable', reason: 'dispatch-failed' });
101
+ await expect(generateAiInsightsViaSession(input())).rejects.toThrow('Impossible de générer les insights — connexion à l\'abonnement Claude requise');
102
+ });
103
+ it('rejects in French when the session times out', async () => {
104
+ seedReviews();
105
+ session.setResult({ status: 'timed-out' });
106
+ await expect(generateAiInsightsViaSession(input())).rejects.toThrow('La génération des insights a expiré');
107
+ });
108
+ it('throws when the completed answer is not valid JSON', async () => {
109
+ seedReviews();
110
+ session.setResult({ status: 'completed', answer: 'this is not JSON' });
111
+ await expect(generateAiInsightsViaSession(input())).rejects.toThrow();
112
+ });
113
+ });
114
+ //# sourceMappingURL=generateAiInsightsViaSession.usecase.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateAiInsightsViaSession.usecase.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/usecases/insights/generateAiInsightsViaSession.usecase.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parseAiInsightsResponse.test.d.ts.map