@mcoda/core 0.1.7 → 0.1.9

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 (71) hide show
  1. package/CHANGELOG.md +4 -1
  2. package/README.md +22 -3
  3. package/dist/api/AgentsApi.d.ts +8 -1
  4. package/dist/api/AgentsApi.d.ts.map +1 -1
  5. package/dist/api/AgentsApi.js +70 -0
  6. package/dist/api/QaTasksApi.d.ts.map +1 -1
  7. package/dist/api/QaTasksApi.js +2 -0
  8. package/dist/api/TasksApi.d.ts.map +1 -1
  9. package/dist/api/TasksApi.js +1 -0
  10. package/dist/index.d.ts +4 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +4 -0
  13. package/dist/prompts/PdrPrompts.d.ts.map +1 -1
  14. package/dist/prompts/PdrPrompts.js +3 -1
  15. package/dist/prompts/SdsPrompts.d.ts.map +1 -1
  16. package/dist/prompts/SdsPrompts.js +2 -0
  17. package/dist/services/agents/AgentRatingFormula.d.ts +27 -0
  18. package/dist/services/agents/AgentRatingFormula.d.ts.map +1 -0
  19. package/dist/services/agents/AgentRatingFormula.js +45 -0
  20. package/dist/services/agents/AgentRatingService.d.ts +41 -0
  21. package/dist/services/agents/AgentRatingService.d.ts.map +1 -0
  22. package/dist/services/agents/AgentRatingService.js +299 -0
  23. package/dist/services/agents/GatewayAgentService.d.ts +3 -0
  24. package/dist/services/agents/GatewayAgentService.d.ts.map +1 -1
  25. package/dist/services/agents/GatewayAgentService.js +68 -24
  26. package/dist/services/agents/GatewayHandoff.d.ts +7 -0
  27. package/dist/services/agents/GatewayHandoff.d.ts.map +1 -0
  28. package/dist/services/agents/GatewayHandoff.js +108 -0
  29. package/dist/services/backlog/TaskOrderingService.d.ts +1 -0
  30. package/dist/services/backlog/TaskOrderingService.d.ts.map +1 -1
  31. package/dist/services/backlog/TaskOrderingService.js +19 -16
  32. package/dist/services/docs/DocsService.d.ts +11 -1
  33. package/dist/services/docs/DocsService.d.ts.map +1 -1
  34. package/dist/services/docs/DocsService.js +240 -52
  35. package/dist/services/execution/GatewayTrioService.d.ts +133 -0
  36. package/dist/services/execution/GatewayTrioService.d.ts.map +1 -0
  37. package/dist/services/execution/GatewayTrioService.js +1125 -0
  38. package/dist/services/execution/QaFollowupService.d.ts +1 -0
  39. package/dist/services/execution/QaFollowupService.d.ts.map +1 -1
  40. package/dist/services/execution/QaFollowupService.js +1 -0
  41. package/dist/services/execution/QaProfileService.d.ts +6 -0
  42. package/dist/services/execution/QaProfileService.d.ts.map +1 -1
  43. package/dist/services/execution/QaProfileService.js +165 -3
  44. package/dist/services/execution/QaTasksService.d.ts +18 -0
  45. package/dist/services/execution/QaTasksService.d.ts.map +1 -1
  46. package/dist/services/execution/QaTasksService.js +712 -34
  47. package/dist/services/execution/WorkOnTasksService.d.ts +14 -0
  48. package/dist/services/execution/WorkOnTasksService.d.ts.map +1 -1
  49. package/dist/services/execution/WorkOnTasksService.js +1497 -240
  50. package/dist/services/openapi/OpenApiService.d.ts +10 -0
  51. package/dist/services/openapi/OpenApiService.d.ts.map +1 -1
  52. package/dist/services/openapi/OpenApiService.js +66 -10
  53. package/dist/services/planning/CreateTasksService.d.ts +6 -0
  54. package/dist/services/planning/CreateTasksService.d.ts.map +1 -1
  55. package/dist/services/planning/CreateTasksService.js +261 -28
  56. package/dist/services/planning/RefineTasksService.d.ts +5 -0
  57. package/dist/services/planning/RefineTasksService.d.ts.map +1 -1
  58. package/dist/services/planning/RefineTasksService.js +184 -35
  59. package/dist/services/review/CodeReviewService.d.ts +14 -0
  60. package/dist/services/review/CodeReviewService.d.ts.map +1 -1
  61. package/dist/services/review/CodeReviewService.js +657 -61
  62. package/dist/services/shared/ProjectGuidance.d.ts +6 -0
  63. package/dist/services/shared/ProjectGuidance.d.ts.map +1 -0
  64. package/dist/services/shared/ProjectGuidance.js +21 -0
  65. package/dist/services/tasks/TaskCommentFormatter.d.ts +20 -0
  66. package/dist/services/tasks/TaskCommentFormatter.d.ts.map +1 -0
  67. package/dist/services/tasks/TaskCommentFormatter.js +54 -0
  68. package/dist/workspace/WorkspaceManager.d.ts +4 -0
  69. package/dist/workspace/WorkspaceManager.d.ts.map +1 -1
  70. package/dist/workspace/WorkspaceManager.js +3 -0
  71. package/package.json +5 -5
@@ -14,6 +14,7 @@ export interface FollowupSuggestion {
14
14
  testName?: string;
15
15
  evidenceUrl?: string;
16
16
  artifacts?: string[];
17
+ followupSlug?: string;
17
18
  }
18
19
  export declare class QaFollowupService {
19
20
  private workspaceRepo;
@@ -1 +1 @@
1
- {"version":3,"file":"QaFollowupService.d.ts","sourceRoot":"","sources":["../../../src/services/execution/QaFollowupService.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,OAAO,EACP,mBAAmB,EACpB,MAAM,WAAW,CAAC;AAMnB,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAgCD,qBAAa,iBAAiB;IAChB,OAAO,CAAC,aAAa;IAAuB,OAAO,CAAC,aAAa;gBAAzD,aAAa,EAAE,mBAAmB,EAAU,aAAa,EAAE,MAAM;IAErF,OAAO,KAAK,SAAS,GAEpB;YAEa,SAAS;YAST,UAAU;YAKV,kBAAkB;IA+C1B,kBAAkB,CACtB,UAAU,EAAE,OAAO,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAC7D,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,GAAG;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;QAAC,OAAO,CAAC,EAAE,iBAAiB,CAAA;KAAE,CAAC;YA6EnG,sBAAsB;CA+ErC"}
1
+ {"version":3,"file":"QaFollowupService.d.ts","sourceRoot":"","sources":["../../../src/services/execution/QaFollowupService.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,OAAO,EACP,mBAAmB,EACpB,MAAM,WAAW,CAAC;AAMnB,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAgCD,qBAAa,iBAAiB;IAChB,OAAO,CAAC,aAAa;IAAuB,OAAO,CAAC,aAAa;gBAAzD,aAAa,EAAE,mBAAmB,EAAU,aAAa,EAAE,MAAM;IAErF,OAAO,KAAK,SAAS,GAEpB;YAEa,SAAS;YAST,UAAU;YAKV,kBAAkB;IA+C1B,kBAAkB,CACtB,UAAU,EAAE,OAAO,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAC7D,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,GAAG;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;QAAC,OAAO,CAAC,EAAE,iBAAiB,CAAA;KAAE,CAAC;YA8EnG,sBAAsB;CA+ErC"}
@@ -97,6 +97,7 @@ export class QaFollowupService {
97
97
  const metadata = {
98
98
  tags: ['qa-found', 'auto-created', 'ready-for-ai-dev', 'source=qa', ...(suggestion.tags ?? [])],
99
99
  source_task: sourceTask.key,
100
+ ...(suggestion.followupSlug ? { qa_followup_slug: suggestion.followupSlug } : {}),
100
101
  ...(suggestion.components ? { components: suggestion.components } : {}),
101
102
  ...(suggestion.docLinks ? { doc_links: suggestion.docLinks } : {}),
102
103
  ...(suggestion.testName ? { failing_test: suggestion.testName } : {}),
@@ -8,8 +8,14 @@ export interface QaProfileResolutionOptions {
8
8
  export declare class QaProfileService {
9
9
  private workspaceRoot;
10
10
  private cache?;
11
+ private webInterfaceCache?;
11
12
  private routingCache?;
12
13
  constructor(workspaceRoot: string);
14
+ private fileExists;
15
+ private readPackageJson;
16
+ private detectWebInterface;
17
+ private detectUiTask;
18
+ private resolveRunnerPreference;
13
19
  private get profilePath();
14
20
  private get workspaceConfigPath();
15
21
  private getConfiguredDefaultProfileName;
@@ -1 +1 @@
1
- {"version":3,"file":"QaProfileService.d.ts","sourceRoot":"","sources":["../../../src/services/execution/QaProfileService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG1D,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,gBAAgB;IASf,OAAO,CAAC,aAAa;IARjC,OAAO,CAAC,KAAK,CAAC,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAC,CAKnB;gBAEkB,aAAa,EAAE,MAAM;IAEzC,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,mBAAmB,GAE9B;YAEa,+BAA+B;YAU/B,gBAAgB;IAwBxB,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAyBpC,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG;QAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE,EAAE,OAAO,GAAE,0BAA+B,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CAqE1I"}
1
+ {"version":3,"file":"QaProfileService.d.ts","sourceRoot":"","sources":["../../../src/services/execution/QaProfileService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG1D,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAcD,qBAAa,gBAAgB;IAUf,OAAO,CAAC,aAAa;IATjC,OAAO,CAAC,KAAK,CAAC,CAAc;IAC5B,OAAO,CAAC,iBAAiB,CAAC,CAAU;IACpC,OAAO,CAAC,YAAY,CAAC,CAKnB;gBAEkB,aAAa,EAAE,MAAM;YAE3B,UAAU;YASV,eAAe;YAUf,kBAAkB;IAuDhC,OAAO,CAAC,YAAY;YAuCN,uBAAuB;IAMrC,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,mBAAmB,GAE9B;YAEa,+BAA+B;YAU/B,gBAAgB;IAwBxB,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAyBpC,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG;QAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE,EAAE,OAAO,GAAE,0BAA+B,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CAgG1I"}
@@ -1,10 +1,142 @@
1
1
  import path from 'node:path';
2
2
  import { PathHelper } from '@mcoda/shared';
3
3
  import fs from 'node:fs/promises';
4
+ const DEFAULT_QA_PROFILES = [
5
+ {
6
+ name: 'cli',
7
+ runner: 'cli',
8
+ default: true,
9
+ },
10
+ {
11
+ name: 'chromium',
12
+ runner: 'chromium',
13
+ },
14
+ ];
4
15
  export class QaProfileService {
5
16
  constructor(workspaceRoot) {
6
17
  this.workspaceRoot = workspaceRoot;
7
18
  }
19
+ async fileExists(targetPath) {
20
+ try {
21
+ await fs.access(targetPath);
22
+ return true;
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ }
28
+ async readPackageJson() {
29
+ const pkgPath = path.join(this.workspaceRoot, 'package.json');
30
+ try {
31
+ const raw = await fs.readFile(pkgPath, 'utf8');
32
+ return JSON.parse(raw);
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ }
38
+ async detectWebInterface() {
39
+ if (this.webInterfaceCache !== undefined)
40
+ return this.webInterfaceCache;
41
+ const markers = [
42
+ 'client',
43
+ 'frontend',
44
+ 'web',
45
+ 'ui',
46
+ 'apps/web',
47
+ 'apps/client',
48
+ 'packages/web',
49
+ 'packages/client',
50
+ 'public/index.html',
51
+ 'index.html',
52
+ 'src/App.tsx',
53
+ 'src/main.tsx',
54
+ 'src/App.jsx',
55
+ 'src/main.jsx',
56
+ 'next.config.js',
57
+ 'next.config.mjs',
58
+ 'vite.config.ts',
59
+ 'vite.config.js',
60
+ 'svelte.config.js',
61
+ 'angular.json',
62
+ 'nuxt.config.js',
63
+ 'astro.config.mjs',
64
+ 'remix.config.js',
65
+ ];
66
+ for (const marker of markers) {
67
+ if (await this.fileExists(path.join(this.workspaceRoot, marker))) {
68
+ this.webInterfaceCache = true;
69
+ return true;
70
+ }
71
+ }
72
+ const pkg = await this.readPackageJson();
73
+ const deps = {
74
+ ...(pkg?.dependencies ?? {}),
75
+ ...(pkg?.devDependencies ?? {}),
76
+ ...(pkg?.peerDependencies ?? {}),
77
+ };
78
+ const uiDeps = [
79
+ 'react',
80
+ 'next',
81
+ 'vue',
82
+ 'nuxt',
83
+ 'svelte',
84
+ 'astro',
85
+ '@angular/core',
86
+ '@remix-run/react',
87
+ 'solid-js',
88
+ ];
89
+ const hasUiDep = uiDeps.some((dep) => typeof deps?.[dep] === 'string');
90
+ this.webInterfaceCache = hasUiDep;
91
+ return hasUiDep;
92
+ }
93
+ detectUiTask(task) {
94
+ const metadata = task.metadata ?? {};
95
+ const tags = Array.isArray(metadata.tags) ? metadata.tags.map((t) => t.toLowerCase()) : [];
96
+ const uiTags = new Set([
97
+ 'ui',
98
+ 'frontend',
99
+ 'front-end',
100
+ 'client',
101
+ 'web',
102
+ 'react',
103
+ 'vue',
104
+ 'svelte',
105
+ 'angular',
106
+ 'next',
107
+ 'nuxt',
108
+ 'astro',
109
+ ]);
110
+ if (tags.some((tag) => uiTags.has(tag)))
111
+ return true;
112
+ const files = Array.isArray(metadata.files) ? metadata.files : [];
113
+ const uiHints = [
114
+ '/ui/',
115
+ '/frontend/',
116
+ '/client/',
117
+ '/web/',
118
+ '/components/',
119
+ '/pages/',
120
+ '/app/',
121
+ '/public/',
122
+ '/styles/',
123
+ ];
124
+ const uiExtensions = ['.tsx', '.jsx', '.vue', '.svelte', '.astro', '.html', '.css', '.scss', '.less'];
125
+ for (const file of files) {
126
+ const normalized = String(file).toLowerCase();
127
+ if (uiExtensions.some((ext) => normalized.endsWith(ext)))
128
+ return true;
129
+ if (uiHints.some((hint) => normalized.includes(hint)))
130
+ return true;
131
+ }
132
+ return false;
133
+ }
134
+ async resolveRunnerPreference(task) {
135
+ if (task && this.detectUiTask(task))
136
+ return 'chromium';
137
+ const hasUi = await this.detectWebInterface();
138
+ return hasUi ? 'chromium' : 'cli';
139
+ }
8
140
  get profilePath() {
9
141
  return path.join(this.workspaceRoot, '.mcoda', 'qa-profiles.json');
10
142
  }
@@ -56,12 +188,12 @@ export class QaProfileService {
56
188
  this.cache = parsed.profiles;
57
189
  return this.cache;
58
190
  }
59
- this.cache = [];
191
+ this.cache = DEFAULT_QA_PROFILES;
60
192
  return this.cache;
61
193
  }
62
194
  catch (error) {
63
195
  if (error?.code === 'ENOENT') {
64
- this.cache = [];
196
+ this.cache = DEFAULT_QA_PROFILES;
65
197
  return this.cache;
66
198
  }
67
199
  throw error;
@@ -73,6 +205,18 @@ export class QaProfileService {
73
205
  return undefined;
74
206
  const envProfile = process.env.MCODA_QA_PROFILE;
75
207
  const routing = await this.getRoutingConfig();
208
+ const runnerPreference = await this.resolveRunnerPreference(task);
209
+ const normalizeRunner = (profile) => profile.runner ?? 'cli';
210
+ const matchRunner = (profile) => normalizeRunner(profile) === runnerPreference || profile.name === runnerPreference;
211
+ const pickByRunner = () => {
212
+ const matches = profiles.filter(matchRunner);
213
+ if (!matches.length)
214
+ return undefined;
215
+ const defaults = matches.filter((p) => p.default);
216
+ if (defaults.length === 1)
217
+ return defaults[0];
218
+ return matches[0];
219
+ };
76
220
  const configuredDefault = options.profileName ?? envProfile ?? (await this.getConfiguredDefaultProfileName()) ?? routing.defaultProfile;
77
221
  const pickByName = (name) => {
78
222
  if (!name)
@@ -85,6 +229,11 @@ export class QaProfileService {
85
229
  };
86
230
  const explicit = pickByName(configuredDefault);
87
231
  if (explicit) {
232
+ if (normalizeRunner(explicit) !== runnerPreference) {
233
+ const fallback = pickByRunner();
234
+ if (fallback)
235
+ return fallback;
236
+ }
88
237
  return explicit;
89
238
  }
90
239
  const taskTags = Array.isArray(task.metadata?.tags)
@@ -107,8 +256,18 @@ export class QaProfileService {
107
256
  : undefined;
108
257
  const routedName = levelRoute ?? typeRoute ?? tagRoute;
109
258
  const routed = pickByName(routedName);
110
- if (routed)
259
+ if (routed) {
260
+ if (normalizeRunner(routed) !== runnerPreference) {
261
+ const fallback = pickByRunner();
262
+ if (fallback)
263
+ return fallback;
264
+ }
111
265
  return routed;
266
+ }
267
+ }
268
+ const runnerCandidates = candidates.filter(matchRunner);
269
+ if (runnerCandidates.length) {
270
+ candidates = runnerCandidates;
112
271
  }
113
272
  const targetLevel = options.level ?? options.defaultLevel;
114
273
  if (targetLevel) {
@@ -131,6 +290,9 @@ export class QaProfileService {
131
290
  .map((p) => p.name)
132
291
  .join(', ')}`);
133
292
  }
293
+ const runnerDefault = pickByRunner();
294
+ if (runnerDefault)
295
+ return runnerDefault;
134
296
  const defaults = profiles.filter((p) => p.default);
135
297
  if (defaults.length === 1)
136
298
  return defaults[0];
@@ -10,6 +10,7 @@ import { AgentService } from '@mcoda/agents';
10
10
  import { GlobalRepository } from '@mcoda/db';
11
11
  import { DocdexClient } from '@mcoda/integrations';
12
12
  import { RoutingService } from '../agents/RoutingService.js';
13
+ import { AgentRatingService } from '../agents/AgentRatingService.js';
13
14
  export interface QaTasksRequest extends TaskSelectionFilters {
14
15
  workspace: WorkspaceResolution;
15
16
  mode?: 'auto' | 'manual';
@@ -19,11 +20,14 @@ export interface QaTasksRequest extends TaskSelectionFilters {
19
20
  testCommand?: string;
20
21
  agentName?: string;
21
22
  agentStream?: boolean;
23
+ rateAgents?: boolean;
22
24
  createFollowupTasks?: 'auto' | 'none' | 'prompt';
23
25
  dryRun?: boolean;
24
26
  result?: 'pass' | 'fail' | 'blocked';
25
27
  notes?: string;
26
28
  evidenceUrl?: string;
29
+ allowDirty?: boolean;
30
+ abortSignal?: AbortSignal;
27
31
  }
28
32
  export interface QaTaskResult {
29
33
  taskKey: string;
@@ -55,6 +59,7 @@ export declare class QaTasksService {
55
59
  private docdex?;
56
60
  private repo?;
57
61
  private routingService?;
62
+ private ratingService?;
58
63
  private dryRunGuard;
59
64
  constructor(workspace: WorkspaceResolution, deps: {
60
65
  workspaceRepo: WorkspaceRepository;
@@ -68,6 +73,7 @@ export declare class QaTasksService {
68
73
  docdex?: DocdexClient;
69
74
  repo?: GlobalRepository;
70
75
  routingService?: RoutingService;
76
+ ratingService?: AgentRatingService;
71
77
  });
72
78
  static create(workspace: WorkspaceResolution, options?: {
73
79
  noTelemetry?: boolean;
@@ -80,18 +86,30 @@ export declare class QaTasksService {
80
86
  private ensureMcoda;
81
87
  private adapterForProfile;
82
88
  private mapOutcome;
89
+ private adjustOutcomeForSkippedTests;
83
90
  private combineOutcome;
84
91
  private gatherDocContext;
85
92
  private resolveAgent;
93
+ private ensureRatingService;
94
+ private resolveTaskComplexity;
86
95
  private estimateTokens;
96
+ private fileExists;
97
+ private readPackageJson;
98
+ private detectPackageManager;
99
+ private resolveTestCommand;
87
100
  private extractJsonCandidate;
88
101
  private normalizeAgentOutput;
89
102
  private interpretResult;
103
+ private loadCommentContext;
104
+ private resolveFailureSlug;
105
+ private applyCommentResolutions;
90
106
  private createTaskRun;
91
107
  private finishTaskRun;
92
108
  private logTask;
93
109
  private applyStateTransition;
94
110
  private buildFollowupSuggestion;
111
+ private buildManualQaFollowup;
112
+ private buildFollowupSlug;
95
113
  private toFollowupSuggestion;
96
114
  private suggestFollowupsFromAgent;
97
115
  private runAuto;
@@ -1 +1 @@
1
- {"version":3,"file":"QaTasksService.d.ts","sourceRoot":"","sources":["../../../src/services/execution/QaTasksService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QaTasksService.d.ts","sourceRoot":"","sources":["../../../src/services/execution/QaTasksService.ts"],"names":[],"mappings":"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"}