@blockspool/core 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/package.json +1 -1
  2. package/dist/db/adapter.d.ts +0 -191
  3. package/dist/db/adapter.d.ts.map +0 -1
  4. package/dist/db/adapter.js +0 -40
  5. package/dist/db/adapter.js.map +0 -1
  6. package/dist/db/contract.d.ts +0 -47
  7. package/dist/db/contract.d.ts.map +0 -1
  8. package/dist/db/contract.js +0 -258
  9. package/dist/db/contract.js.map +0 -1
  10. package/dist/db/index.d.ts +0 -6
  11. package/dist/db/index.d.ts.map +0 -1
  12. package/dist/db/index.js +0 -7
  13. package/dist/db/index.js.map +0 -1
  14. package/dist/exec/index.d.ts +0 -5
  15. package/dist/exec/index.d.ts.map +0 -1
  16. package/dist/exec/index.js +0 -5
  17. package/dist/exec/index.js.map +0 -1
  18. package/dist/exec/types.d.ts +0 -64
  19. package/dist/exec/types.d.ts.map +0 -1
  20. package/dist/exec/types.js +0 -8
  21. package/dist/exec/types.js.map +0 -1
  22. package/dist/index.d.ts +0 -23
  23. package/dist/index.d.ts.map +0 -1
  24. package/dist/index.js +0 -27
  25. package/dist/index.js.map +0 -1
  26. package/dist/repos/index.d.ts +0 -15
  27. package/dist/repos/index.d.ts.map +0 -1
  28. package/dist/repos/index.js +0 -11
  29. package/dist/repos/index.js.map +0 -1
  30. package/dist/repos/projects.d.ts +0 -41
  31. package/dist/repos/projects.d.ts.map +0 -1
  32. package/dist/repos/projects.js +0 -74
  33. package/dist/repos/projects.js.map +0 -1
  34. package/dist/repos/run_steps.d.ts +0 -152
  35. package/dist/repos/run_steps.d.ts.map +0 -1
  36. package/dist/repos/run_steps.js +0 -321
  37. package/dist/repos/run_steps.js.map +0 -1
  38. package/dist/repos/runs.d.ts +0 -92
  39. package/dist/repos/runs.d.ts.map +0 -1
  40. package/dist/repos/runs.js +0 -177
  41. package/dist/repos/runs.js.map +0 -1
  42. package/dist/repos/tickets.d.ts +0 -71
  43. package/dist/repos/tickets.d.ts.map +0 -1
  44. package/dist/repos/tickets.js +0 -128
  45. package/dist/repos/tickets.js.map +0 -1
  46. package/dist/scout/index.d.ts +0 -15
  47. package/dist/scout/index.d.ts.map +0 -1
  48. package/dist/scout/index.js +0 -382
  49. package/dist/scout/index.js.map +0 -1
  50. package/dist/scout/prompt.d.ts +0 -30
  51. package/dist/scout/prompt.d.ts.map +0 -1
  52. package/dist/scout/prompt.js +0 -101
  53. package/dist/scout/prompt.js.map +0 -1
  54. package/dist/scout/runner.d.ts +0 -68
  55. package/dist/scout/runner.d.ts.map +0 -1
  56. package/dist/scout/runner.js +0 -241
  57. package/dist/scout/runner.js.map +0 -1
  58. package/dist/scout/scanner.d.ts +0 -35
  59. package/dist/scout/scanner.d.ts.map +0 -1
  60. package/dist/scout/scanner.js +0 -164
  61. package/dist/scout/scanner.js.map +0 -1
  62. package/dist/scout/types.d.ts +0 -177
  63. package/dist/scout/types.d.ts.map +0 -1
  64. package/dist/scout/types.js +0 -44
  65. package/dist/scout/types.js.map +0 -1
  66. package/dist/services/index.d.ts +0 -10
  67. package/dist/services/index.d.ts.map +0 -1
  68. package/dist/services/index.js +0 -9
  69. package/dist/services/index.js.map +0 -1
  70. package/dist/services/qa.d.ts +0 -76
  71. package/dist/services/qa.d.ts.map +0 -1
  72. package/dist/services/qa.js +0 -239
  73. package/dist/services/qa.js.map +0 -1
  74. package/dist/services/scout.d.ts +0 -118
  75. package/dist/services/scout.d.ts.map +0 -1
  76. package/dist/services/scout.js +0 -204
  77. package/dist/services/scout.js.map +0 -1
  78. package/dist/test/db-contract-sqlite.test.d.ts +0 -2
  79. package/dist/test/db-contract-sqlite.test.d.ts.map +0 -1
  80. package/dist/test/db-contract-sqlite.test.js +0 -176
  81. package/dist/test/db-contract-sqlite.test.js.map +0 -1
  82. package/dist/test/learnings-format.test.d.ts +0 -9
  83. package/dist/test/learnings-format.test.d.ts.map +0 -1
  84. package/dist/test/learnings-format.test.js +0 -174
  85. package/dist/test/learnings-format.test.js.map +0 -1
  86. package/dist/test/repos-integration.test.d.ts +0 -2
  87. package/dist/test/repos-integration.test.d.ts.map +0 -1
  88. package/dist/test/repos-integration.test.js +0 -565
  89. package/dist/test/repos-integration.test.js.map +0 -1
  90. package/dist/test/scout-full-pure.test.d.ts +0 -2
  91. package/dist/test/scout-full-pure.test.d.ts.map +0 -1
  92. package/dist/test/scout-full-pure.test.js +0 -122
  93. package/dist/test/scout-full-pure.test.js.map +0 -1
  94. package/dist/test/scout-integration.test.d.ts +0 -13
  95. package/dist/test/scout-integration.test.d.ts.map +0 -1
  96. package/dist/test/scout-integration.test.js +0 -229
  97. package/dist/test/scout-integration.test.js.map +0 -1
  98. package/dist/test/scout-prompt.test.d.ts +0 -2
  99. package/dist/test/scout-prompt.test.d.ts.map +0 -1
  100. package/dist/test/scout-prompt.test.js +0 -79
  101. package/dist/test/scout-prompt.test.js.map +0 -1
  102. package/dist/test/scout-runner-parse.test.d.ts +0 -2
  103. package/dist/test/scout-runner-parse.test.d.ts.map +0 -1
  104. package/dist/test/scout-runner-parse.test.js +0 -44
  105. package/dist/test/scout-runner-parse.test.js.map +0 -1
  106. package/dist/test/scout-runner-spawn.test.d.ts +0 -11
  107. package/dist/test/scout-runner-spawn.test.d.ts.map +0 -1
  108. package/dist/test/scout-runner-spawn.test.js +0 -359
  109. package/dist/test/scout-runner-spawn.test.js.map +0 -1
  110. package/dist/test/scout-scanner-fs.test.d.ts +0 -2
  111. package/dist/test/scout-scanner-fs.test.d.ts.map +0 -1
  112. package/dist/test/scout-scanner-fs.test.js +0 -188
  113. package/dist/test/scout-scanner-fs.test.js.map +0 -1
  114. package/dist/test/scout-scanner-pure.test.d.ts +0 -2
  115. package/dist/test/scout-scanner-pure.test.d.ts.map +0 -1
  116. package/dist/test/scout-scanner-pure.test.js +0 -131
  117. package/dist/test/scout-scanner-pure.test.js.map +0 -1
  118. package/dist/test/services-integration.test.d.ts +0 -2
  119. package/dist/test/services-integration.test.d.ts.map +0 -1
  120. package/dist/test/services-integration.test.js +0 -327
  121. package/dist/test/services-integration.test.js.map +0 -1
  122. package/dist/test/services-qa.test.d.ts +0 -2
  123. package/dist/test/services-qa.test.d.ts.map +0 -1
  124. package/dist/test/services-qa.test.js +0 -255
  125. package/dist/test/services-qa.test.js.map +0 -1
  126. package/dist/test/services-scout.test.d.ts +0 -2
  127. package/dist/test/services-scout.test.d.ts.map +0 -1
  128. package/dist/test/services-scout.test.js +0 -269
  129. package/dist/test/services-scout.test.js.map +0 -1
  130. package/dist/utils/id.d.ts +0 -12
  131. package/dist/utils/id.d.ts.map +0 -1
  132. package/dist/utils/id.js +0 -24
  133. package/dist/utils/id.js.map +0 -1
  134. package/dist/utils/id.test.d.ts +0 -5
  135. package/dist/utils/id.test.d.ts.map +0 -1
  136. package/dist/utils/id.test.js +0 -173
  137. package/dist/utils/id.test.js.map +0 -1
  138. package/dist/utils/index.d.ts +0 -6
  139. package/dist/utils/index.d.ts.map +0 -1
  140. package/dist/utils/index.js +0 -6
  141. package/dist/utils/index.js.map +0 -1
  142. package/dist/utils/json.d.ts +0 -9
  143. package/dist/utils/json.d.ts.map +0 -1
  144. package/dist/utils/json.js +0 -19
  145. package/dist/utils/json.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/scout/scanner.ts"],"names":[],"mappings":"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"}
@@ -1,177 +0,0 @@
1
- /**
2
- * Scout types - Shared type definitions for codebase scanning
3
- */
4
- /**
5
- * Proposal categories
6
- */
7
- export type ProposalCategory = 'refactor' | 'docs' | 'test' | 'perf' | 'security';
8
- /**
9
- * Complexity levels
10
- */
11
- export type ComplexityLevel = 'trivial' | 'simple' | 'moderate' | 'complex';
12
- /**
13
- * A ticket proposal generated by the scout
14
- */
15
- export interface TicketProposal {
16
- /** Unique ID (scout-{timestamp}-{random}) */
17
- id: string;
18
- /** Category of improvement */
19
- category: ProposalCategory;
20
- /** Short, actionable title */
21
- title: string;
22
- /** What needs to be done and why */
23
- description: string;
24
- /** Verifiable acceptance criteria */
25
- acceptance_criteria: string[];
26
- /** Commands to verify the fix */
27
- verification_commands: string[];
28
- /** Files that can be modified */
29
- allowed_paths: string[];
30
- /** Specific files identified for change */
31
- files: string[];
32
- /** Confidence score (0-100) */
33
- confidence: number;
34
- /** Impact score (1-10, optional) — how much this matters */
35
- impact_score?: number;
36
- /** Why this improvement matters */
37
- rationale: string;
38
- /** Estimated complexity */
39
- estimated_complexity: ComplexityLevel;
40
- }
41
- /**
42
- * Scout configuration options
43
- */
44
- export interface ScoutOptions {
45
- /** Glob pattern for files to scan (e.g., "src/**") */
46
- scope: string;
47
- /** Filter to specific categories */
48
- types?: ProposalCategory[];
49
- /** Categories to exclude */
50
- excludeTypes?: ProposalCategory[];
51
- /** Glob patterns to exclude */
52
- exclude?: string[];
53
- /** Maximum proposals to generate (default: 10) */
54
- maxProposals?: number;
55
- /** Minimum confidence threshold (default: 50) */
56
- minConfidence?: number;
57
- /** Working directory (default: cwd) */
58
- projectPath?: string;
59
- /** Timeout per batch in ms (default: 120000) */
60
- timeoutMs?: number;
61
- /** Cancellation signal */
62
- signal?: AbortSignal;
63
- /** Progress callback */
64
- onProgress?: (progress: ScoutProgress) => void;
65
- /** Recently completed ticket titles to avoid duplicates */
66
- recentlyCompletedTitles?: string[];
67
- /** Model to use (default: opus) */
68
- model?: 'haiku' | 'sonnet' | 'opus';
69
- /** Custom prompt from formula — tells the AI what to focus on */
70
- customPrompt?: string;
71
- /** Scout backend to use (default: ClaudeScoutBackend) */
72
- backend?: import('./runner.js').ScoutBackend;
73
- }
74
- /**
75
- * Progress update during scanning
76
- */
77
- export interface ScoutProgress {
78
- /** Current phase */
79
- phase: 'discovering' | 'analyzing' | 'generating' | 'complete';
80
- /** Files scanned so far */
81
- filesScanned: number;
82
- /** Total files to scan */
83
- totalFiles: number;
84
- /** Proposals found so far */
85
- proposalsFound: number;
86
- /** Current batch number */
87
- currentBatch: number;
88
- /** Total batches */
89
- totalBatches: number;
90
- /** Current file being processed */
91
- currentFile?: string;
92
- }
93
- /**
94
- * Scout result
95
- */
96
- export interface ScoutResult {
97
- /** Whether the scan completed successfully */
98
- success: boolean;
99
- /** Generated proposals */
100
- proposals: TicketProposal[];
101
- /** Any errors encountered */
102
- errors: string[];
103
- /** Total files scanned */
104
- scannedFiles: number;
105
- /** Total scan duration in ms */
106
- scanDurationMs: number;
107
- }
108
- /**
109
- * Schema for validating LLM output
110
- */
111
- export declare const PROPOSAL_SCHEMA: {
112
- readonly type: "object";
113
- readonly properties: {
114
- readonly proposals: {
115
- readonly type: "array";
116
- readonly items: {
117
- readonly type: "object";
118
- readonly required: readonly ["category", "title", "description", "acceptance_criteria", "verification_commands", "allowed_paths", "files", "confidence", "rationale", "estimated_complexity"];
119
- readonly properties: {
120
- readonly category: {
121
- readonly type: "string";
122
- readonly enum: readonly ["refactor", "docs", "test", "perf", "security"];
123
- };
124
- readonly title: {
125
- readonly type: "string";
126
- };
127
- readonly description: {
128
- readonly type: "string";
129
- };
130
- readonly acceptance_criteria: {
131
- readonly type: "array";
132
- readonly items: {
133
- readonly type: "string";
134
- };
135
- };
136
- readonly verification_commands: {
137
- readonly type: "array";
138
- readonly items: {
139
- readonly type: "string";
140
- };
141
- };
142
- readonly allowed_paths: {
143
- readonly type: "array";
144
- readonly items: {
145
- readonly type: "string";
146
- };
147
- };
148
- readonly files: {
149
- readonly type: "array";
150
- readonly items: {
151
- readonly type: "string";
152
- };
153
- };
154
- readonly confidence: {
155
- readonly type: "number";
156
- readonly minimum: 0;
157
- readonly maximum: 100;
158
- };
159
- readonly impact_score: {
160
- readonly type: "number";
161
- readonly minimum: 1;
162
- readonly maximum: 10;
163
- };
164
- readonly rationale: {
165
- readonly type: "string";
166
- };
167
- readonly estimated_complexity: {
168
- readonly type: "string";
169
- readonly enum: readonly ["trivial", "simple", "moderate", "complex"];
170
- };
171
- };
172
- };
173
- };
174
- };
175
- readonly required: readonly ["proposals"];
176
- };
177
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scout/types.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- /**
2
- * Scout types - Shared type definitions for codebase scanning
3
- */
4
- /**
5
- * Schema for validating LLM output
6
- */
7
- export const PROPOSAL_SCHEMA = {
8
- type: 'object',
9
- properties: {
10
- proposals: {
11
- type: 'array',
12
- items: {
13
- type: 'object',
14
- required: [
15
- 'category',
16
- 'title',
17
- 'description',
18
- 'acceptance_criteria',
19
- 'verification_commands',
20
- 'allowed_paths',
21
- 'files',
22
- 'confidence',
23
- 'rationale',
24
- 'estimated_complexity',
25
- ],
26
- properties: {
27
- category: { type: 'string', enum: ['refactor', 'docs', 'test', 'perf', 'security'] },
28
- title: { type: 'string' },
29
- description: { type: 'string' },
30
- acceptance_criteria: { type: 'array', items: { type: 'string' } },
31
- verification_commands: { type: 'array', items: { type: 'string' } },
32
- allowed_paths: { type: 'array', items: { type: 'string' } },
33
- files: { type: 'array', items: { type: 'string' } },
34
- confidence: { type: 'number', minimum: 0, maximum: 100 },
35
- impact_score: { type: 'number', minimum: 1, maximum: 10 },
36
- rationale: { type: 'string' },
37
- estimated_complexity: { type: 'string', enum: ['trivial', 'simple', 'moderate', 'complex'] },
38
- },
39
- },
40
- },
41
- },
42
- required: ['proposals'],
43
- };
44
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/scout/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgHH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,SAAS,EAAE;YACT,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE;oBACR,UAAU;oBACV,OAAO;oBACP,aAAa;oBACb,qBAAqB;oBACrB,uBAAuB;oBACvB,eAAe;oBACf,OAAO;oBACP,YAAY;oBACZ,WAAW;oBACX,sBAAsB;iBACvB;gBACD,UAAU,EAAE;oBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;oBACpF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC/B,mBAAmB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBACjE,qBAAqB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBACnE,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBAC3D,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBACnD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;oBACxD,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;oBACzD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC7B,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE;iBAC7F;aACF;SACF;KACF;IACD,QAAQ,EAAE,CAAC,WAAW,CAAC;CACf,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Service exports
3
- *
4
- * Services provide business logic orchestration.
5
- * They use repositories for data access and are dependency-injected for testability.
6
- */
7
- export { scoutRepo, approveProposals, type ScoutDeps, type ScoutRepoOptions, type ScoutRepoResult, type ScoutProgress, type GitService, type Logger, } from './scout.js';
8
- export type { ScoutBackend } from '../scout/index.js';
9
- export { runQa, getQaRunDetails, type QaDeps, type QaLogger, type QaCommand, type QaConfig, type QaArtifactsConfig, type QaRetryConfig, type QaRunOptions, type QaRunResult, } from './qa.js';
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,MAAM,GACZ,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EACL,KAAK,EACL,eAAe,EACf,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,GACjB,MAAM,SAAS,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Service exports
3
- *
4
- * Services provide business logic orchestration.
5
- * They use repositories for data access and are dependency-injected for testability.
6
- */
7
- export { scoutRepo, approveProposals, } from './scout.js';
8
- export { runQa, getQaRunDetails, } from './qa.js';
9
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,SAAS,EACT,gBAAgB,GAOjB,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,KAAK,EACL,eAAe,GAShB,MAAM,SAAS,CAAC"}
@@ -1,76 +0,0 @@
1
- /**
2
- * QA Service - Run local QA commands and record results
3
- *
4
- * This is pure orchestration: no FS writes, no raw SQL.
5
- * Uses repos + ExecRunner for all operations.
6
- */
7
- import type { DatabaseAdapter } from '../db/adapter.js';
8
- import type { ExecRunner } from '../exec/types.js';
9
- import * as runs from '../repos/runs.js';
10
- import * as runSteps from '../repos/run_steps.js';
11
- export interface QaLogger {
12
- info: (msg: string) => void;
13
- warn?: (msg: string) => void;
14
- error: (msg: string) => void;
15
- debug?: (msg: string) => void;
16
- }
17
- export interface QaCommand {
18
- name: string;
19
- cmd: string;
20
- cwd?: string;
21
- env?: Record<string, string | undefined>;
22
- timeoutMs?: number;
23
- }
24
- export interface QaArtifactsConfig {
25
- dir: string;
26
- maxLogBytes: number;
27
- tailBytes: number;
28
- }
29
- export interface QaRetryConfig {
30
- enabled: boolean;
31
- maxAttempts: number;
32
- }
33
- export interface QaConfig {
34
- commands: QaCommand[];
35
- artifacts: QaArtifactsConfig;
36
- retry: QaRetryConfig;
37
- }
38
- export interface QaDeps {
39
- db: DatabaseAdapter;
40
- exec: ExecRunner;
41
- logger: QaLogger;
42
- }
43
- export interface QaRunOptions {
44
- projectId: string;
45
- repoRoot: string;
46
- config: QaConfig;
47
- maxAttemptsOverride?: number;
48
- signal?: AbortSignal;
49
- }
50
- export interface QaRunResult {
51
- runId: string;
52
- projectId: string;
53
- status: 'success' | 'failed' | 'canceled';
54
- attempts: number;
55
- latestAttempt: number;
56
- failedAt?: {
57
- attempt: number;
58
- stepName: string;
59
- };
60
- startedAtMs: number;
61
- endedAtMs: number;
62
- durationMs: number;
63
- }
64
- /**
65
- * Run QA commands and record results
66
- */
67
- export declare function runQa(deps: QaDeps, opts: QaRunOptions): Promise<QaRunResult>;
68
- /**
69
- * Get QA run details with step information
70
- */
71
- export declare function getQaRunDetails(db: DatabaseAdapter, runId: string): Promise<{
72
- run: runs.Run | null;
73
- steps: runSteps.RunStep[];
74
- summary: runSteps.StepSummary;
75
- } | null>;
76
- //# sourceMappingURL=qa.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"qa.d.ts","sourceRoot":"","sources":["../../src/services/qa.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAA0B,MAAM,kBAAkB,CAAC;AAE3E,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,eAAe,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAyBD;;GAEG;AACH,wBAAsB,KAAK,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,WAAW,CAAC,CAmOtB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,eAAe,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IACT,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC;CAC/B,GAAG,IAAI,CAAC,CAQR"}
@@ -1,239 +0,0 @@
1
- /**
2
- * QA Service - Run local QA commands and record results
3
- *
4
- * This is pure orchestration: no FS writes, no raw SQL.
5
- * Uses repos + ExecRunner for all operations.
6
- */
7
- import * as path from 'node:path';
8
- import * as runs from '../repos/runs.js';
9
- import * as runSteps from '../repos/run_steps.js';
10
- function resolveCwd(repoRootAbs, cwd) {
11
- if (!cwd || cwd === '.')
12
- return repoRootAbs;
13
- return path.isAbsolute(cwd) ? cwd : path.join(repoRootAbs, cwd);
14
- }
15
- function execStatusToStepStatus(exec) {
16
- if (exec.status === 'success')
17
- return 'success';
18
- if (exec.status === 'canceled')
19
- return 'canceled';
20
- return 'failed';
21
- }
22
- /**
23
- * Extract flat fields from ExecOutput for repo methods
24
- */
25
- function flattenOutput(output, prefix) {
26
- return {
27
- [`${prefix}Path`]: output.path,
28
- [`${prefix}Bytes`]: output.bytes,
29
- [`${prefix}Truncated`]: output.truncated,
30
- [`${prefix}Tail`]: output.tail,
31
- };
32
- }
33
- /**
34
- * Run QA commands and record results
35
- */
36
- export async function runQa(deps, opts) {
37
- const { db, exec, logger } = deps;
38
- const { projectId, repoRoot, config, signal } = opts;
39
- if (!config.commands?.length) {
40
- throw new Error('QA config has no commands. Add qa.commands to .blockspool/config.json');
41
- }
42
- // Validate unique step names
43
- const names = new Set();
44
- for (const c of config.commands) {
45
- if (!c.name?.trim())
46
- throw new Error('QA command is missing a name');
47
- if (!c.cmd?.trim())
48
- throw new Error(`QA command "${c.name}" is missing cmd`);
49
- if (names.has(c.name))
50
- throw new Error(`Duplicate QA command name: "${c.name}"`);
51
- names.add(c.name);
52
- }
53
- const startedAtMs = Date.now();
54
- // Determine max attempts
55
- const maxAttempts = opts.maxAttemptsOverride ??
56
- (config.retry.enabled ? config.retry.maxAttempts : 1);
57
- // Create the run
58
- const run = await runs.create(db, {
59
- projectId,
60
- type: 'qa',
61
- maxIterations: maxAttempts,
62
- metadata: {
63
- maxAttempts,
64
- commandCount: config.commands.length,
65
- },
66
- });
67
- logger.info(`QA run started: ${run.id}`);
68
- let latestAttempt = 1;
69
- let finalStatus = 'failed';
70
- let failedAt;
71
- // Check for early cancellation
72
- if (signal?.aborted) {
73
- await runs.markFailure(db, run.id, 'Canceled before start', { attempts: 0 });
74
- return {
75
- runId: run.id,
76
- projectId,
77
- status: 'canceled',
78
- attempts: 0,
79
- latestAttempt: 0,
80
- startedAtMs,
81
- endedAtMs: Date.now(),
82
- durationMs: Date.now() - startedAtMs,
83
- };
84
- }
85
- // Attempt loop
86
- for (let attempt = 1; attempt <= maxAttempts; attempt++) {
87
- latestAttempt = attempt;
88
- logger.info(`Attempt ${attempt}/${maxAttempts}`);
89
- // Pre-create steps as queued
90
- const createdSteps = await runSteps.createMany(db, run.id, config.commands.map((c) => ({
91
- name: c.name,
92
- cmd: c.cmd,
93
- cwd: c.cwd ?? '.',
94
- timeoutMs: c.timeoutMs,
95
- })), attempt);
96
- let attemptFailed = false;
97
- for (const step of createdSteps) {
98
- // Check for cancellation before each step
99
- if (signal?.aborted) {
100
- await runSteps.markCanceled(db, step.id, 'Canceled by user');
101
- // Cancel remaining steps
102
- for (const remaining of createdSteps) {
103
- if (remaining.ordinal > step.ordinal) {
104
- await runSteps.markCanceled(db, remaining.id, 'Canceled by user');
105
- }
106
- }
107
- finalStatus = 'canceled';
108
- failedAt = { attempt, stepName: step.name };
109
- attemptFailed = true;
110
- break;
111
- }
112
- await runSteps.markStarted(db, step.id);
113
- const cmdCfg = config.commands[step.ordinal];
114
- const cwdAbs = resolveCwd(repoRoot, cmdCfg.cwd ?? step.cwd ?? '.');
115
- const execRes = await exec.run({
116
- cmd: cmdCfg.cmd,
117
- cwd: cwdAbs,
118
- env: cmdCfg.env,
119
- timeoutMs: cmdCfg.timeoutMs ?? step.timeoutMs ?? undefined,
120
- signal,
121
- repoRoot,
122
- artifactsDir: config.artifacts.dir,
123
- runId: run.id,
124
- attempt,
125
- stepName: step.name,
126
- ordinal: step.ordinal,
127
- maxLogBytes: config.artifacts.maxLogBytes,
128
- tailBytes: config.artifacts.tailBytes,
129
- });
130
- const stepStatus = execStatusToStepStatus(execRes);
131
- if (stepStatus === 'success') {
132
- await runSteps.markSuccess(db, step.id, {
133
- exitCode: execRes.exitCode ?? 0,
134
- stdoutPath: execRes.stdout.path,
135
- stderrPath: execRes.stderr.path,
136
- stdoutBytes: execRes.stdout.bytes,
137
- stderrBytes: execRes.stderr.bytes,
138
- stdoutTruncated: execRes.stdout.truncated,
139
- stderrTruncated: execRes.stderr.truncated,
140
- stdoutTail: execRes.stdout.tail,
141
- stderrTail: execRes.stderr.tail,
142
- metadata: { execStatus: execRes.status },
143
- });
144
- logger.info(` ✓ ${step.name}`);
145
- continue;
146
- }
147
- // Failed or canceled
148
- attemptFailed = true;
149
- const errorMessage = execRes.errorMessage ??
150
- (execRes.status === 'timeout'
151
- ? `Timed out after ${cmdCfg.timeoutMs ?? step.timeoutMs ?? 'unknown'}ms`
152
- : execRes.status === 'canceled'
153
- ? 'Canceled'
154
- : `Exited with code ${execRes.exitCode ?? 'unknown'}`);
155
- if (stepStatus === 'canceled') {
156
- await runSteps.markCanceled(db, step.id, errorMessage);
157
- finalStatus = 'canceled';
158
- }
159
- else {
160
- await runSteps.markFailed(db, step.id, {
161
- exitCode: execRes.exitCode ?? undefined,
162
- signal: execRes.signal ?? undefined,
163
- errorMessage,
164
- stdoutPath: execRes.stdout.path,
165
- stderrPath: execRes.stderr.path,
166
- stdoutBytes: execRes.stdout.bytes,
167
- stderrBytes: execRes.stderr.bytes,
168
- stdoutTruncated: execRes.stdout.truncated,
169
- stderrTruncated: execRes.stderr.truncated,
170
- stdoutTail: execRes.stdout.tail,
171
- stderrTail: execRes.stderr.tail,
172
- metadata: { execStatus: execRes.status },
173
- });
174
- finalStatus = 'failed';
175
- }
176
- logger.error(` ✗ ${step.name}: ${errorMessage}`);
177
- failedAt = { attempt, stepName: step.name };
178
- // Cancel remaining queued steps in this attempt
179
- for (const remaining of createdSteps) {
180
- if (remaining.ordinal <= step.ordinal)
181
- continue;
182
- await runSteps.markSkipped(db, remaining.id, `Skipped (previous step "${step.name}" ${stepStatus})`);
183
- }
184
- break;
185
- }
186
- if (!attemptFailed) {
187
- finalStatus = 'success';
188
- failedAt = undefined;
189
- break;
190
- }
191
- // If canceled, don't retry
192
- if (finalStatus === 'canceled') {
193
- break;
194
- }
195
- }
196
- const endedAtMs = Date.now();
197
- // Finalize run
198
- if (finalStatus === 'success') {
199
- await runs.markSuccess(db, run.id, {
200
- attempts: latestAttempt,
201
- durationMs: endedAtMs - startedAtMs,
202
- });
203
- }
204
- else {
205
- const errorMsg = failedAt
206
- ? `Failed at ${failedAt.stepName} (attempt ${failedAt.attempt})`
207
- : finalStatus === 'canceled'
208
- ? 'QA canceled'
209
- : 'QA failed';
210
- await runs.markFailure(db, run.id, errorMsg, {
211
- attempts: latestAttempt,
212
- failedAt,
213
- durationMs: endedAtMs - startedAtMs,
214
- });
215
- }
216
- return {
217
- runId: run.id,
218
- projectId,
219
- status: finalStatus,
220
- attempts: latestAttempt,
221
- latestAttempt,
222
- failedAt,
223
- startedAtMs,
224
- endedAtMs,
225
- durationMs: endedAtMs - startedAtMs,
226
- };
227
- }
228
- /**
229
- * Get QA run details with step information
230
- */
231
- export async function getQaRunDetails(db, runId) {
232
- const run = await runs.getById(db, runId);
233
- if (!run)
234
- return null;
235
- const steps = await runSteps.listByRun(db, runId);
236
- const summary = await runSteps.getSummary(db, runId);
237
- return { run, steps, summary };
238
- }
239
- //# sourceMappingURL=qa.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"qa.js","sourceRoot":"","sources":["../../src/services/qa.ts"],"names":[],"mappings":"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"}