@blockspool/core 0.3.0 → 0.3.2

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,118 +0,0 @@
1
- /**
2
- * Scout Service - Orchestrates codebase scanning and ticket creation
3
- *
4
- * This is pure orchestration - it coordinates between:
5
- * - File scanning (scanner.ts)
6
- * - LLM analysis (runner.ts)
7
- * - Data persistence (repos/*)
8
- *
9
- * It accepts dependencies via ScoutDeps, making it testable and adapter-agnostic.
10
- */
11
- import type { DatabaseAdapter } from '../db/adapter.js';
12
- import * as projects from '../repos/projects.js';
13
- import * as tickets from '../repos/tickets.js';
14
- import * as runs from '../repos/runs.js';
15
- import { type TicketProposal, type ScoutBackend } from '../scout/index.js';
16
- /**
17
- * Dependencies for the scout service
18
- */
19
- export interface ScoutDeps {
20
- /** Database adapter */
21
- db: DatabaseAdapter;
22
- /** Git operations */
23
- git: GitService;
24
- /** Logger */
25
- logger?: Logger;
26
- /** Clock for timestamps (useful for testing) */
27
- clock?: () => Date;
28
- }
29
- /**
30
- * Git service interface
31
- */
32
- export interface GitService {
33
- /** Find repository root from a path */
34
- findRepoRoot(path: string): Promise<string | null>;
35
- /** Get remote URL */
36
- getRemoteUrl(repoRoot: string): Promise<string | null>;
37
- /** Generate deterministic project ID from repo */
38
- getProjectId(repoRoot: string, remoteUrl: string | null): string;
39
- }
40
- /**
41
- * Logger interface
42
- */
43
- export interface Logger {
44
- debug(msg: string, data?: Record<string, unknown>): void;
45
- info(msg: string, data?: Record<string, unknown>): void;
46
- warn(msg: string, data?: Record<string, unknown>): void;
47
- error(msg: string, data?: Record<string, unknown>): void;
48
- }
49
- /**
50
- * Scout options
51
- */
52
- export interface ScoutRepoOptions {
53
- /** Path to scan (defaults to repo root) */
54
- path?: string;
55
- /** Glob pattern for files */
56
- scope?: string;
57
- /** Filter to categories */
58
- types?: Array<'refactor' | 'docs' | 'test' | 'perf' | 'security'>;
59
- /** Maximum proposals */
60
- maxProposals?: number;
61
- /** Minimum confidence threshold */
62
- minConfidence?: number;
63
- /** Model to use */
64
- model?: 'haiku' | 'sonnet' | 'opus';
65
- /** Custom prompt from formula — tells the AI what to focus on */
66
- customPrompt?: string;
67
- /** Timeout per batch */
68
- timeoutMs?: number;
69
- /** Abort signal */
70
- signal?: AbortSignal;
71
- /** Progress callback */
72
- onProgress?: (progress: ScoutProgress) => void;
73
- /** Auto-create tickets from proposals */
74
- autoApprove?: boolean;
75
- /** Scout backend override (default: ClaudeScoutBackend) */
76
- backend?: ScoutBackend;
77
- }
78
- /**
79
- * Scout progress
80
- */
81
- export interface ScoutProgress {
82
- phase: 'init' | 'scanning' | 'analyzing' | 'storing' | 'complete';
83
- filesScanned?: number;
84
- totalFiles?: number;
85
- proposalsFound?: number;
86
- ticketsCreated?: number;
87
- message?: string;
88
- }
89
- /**
90
- * Scout result
91
- */
92
- export interface ScoutRepoResult {
93
- success: boolean;
94
- project: projects.Project;
95
- run: runs.Run;
96
- proposals: TicketProposal[];
97
- tickets: tickets.Ticket[];
98
- errors: string[];
99
- scannedFiles: number;
100
- durationMs: number;
101
- }
102
- /**
103
- * Scout a repository for improvement opportunities
104
- *
105
- * This is the main entry point for the scout service. It:
106
- * 1. Resolves the repository root
107
- * 2. Ensures the project exists in the database
108
- * 3. Creates a scout run
109
- * 4. Scans files and generates proposals
110
- * 5. Optionally creates tickets from proposals
111
- * 6. Records the run outcome
112
- */
113
- export declare function scoutRepo(deps: ScoutDeps, opts?: ScoutRepoOptions): Promise<ScoutRepoResult>;
114
- /**
115
- * Approve specific proposals and create tickets
116
- */
117
- export declare function approveProposals(deps: ScoutDeps, projectId: string, proposals: TicketProposal[]): Promise<tickets.Ticket[]>;
118
- //# sourceMappingURL=scout.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scout.d.ts","sourceRoot":"","sources":["../../src/services/scout.ts"],"names":[],"mappings":"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"}
@@ -1,204 +0,0 @@
1
- /**
2
- * Scout Service - Orchestrates codebase scanning and ticket creation
3
- *
4
- * This is pure orchestration - it coordinates between:
5
- * - File scanning (scanner.ts)
6
- * - LLM analysis (runner.ts)
7
- * - Data persistence (repos/*)
8
- *
9
- * It accepts dependencies via ScoutDeps, making it testable and adapter-agnostic.
10
- */
11
- import * as projects from '../repos/projects.js';
12
- import * as tickets from '../repos/tickets.js';
13
- import * as runs from '../repos/runs.js';
14
- import { scout as scanAndPropose, } from '../scout/index.js';
15
- /**
16
- * Scout a repository for improvement opportunities
17
- *
18
- * This is the main entry point for the scout service. It:
19
- * 1. Resolves the repository root
20
- * 2. Ensures the project exists in the database
21
- * 3. Creates a scout run
22
- * 4. Scans files and generates proposals
23
- * 5. Optionally creates tickets from proposals
24
- * 6. Records the run outcome
25
- */
26
- export async function scoutRepo(deps, opts = {}) {
27
- const { db, git, logger } = deps;
28
- const startTime = Date.now();
29
- const errors = [];
30
- const report = (progress) => {
31
- opts.onProgress?.({
32
- phase: 'init',
33
- ...progress,
34
- });
35
- };
36
- // Phase 1: Resolve repository
37
- report({ phase: 'init', message: 'Resolving repository...' });
38
- const targetPath = opts.path ?? process.cwd();
39
- const repoRoot = await git.findRepoRoot(targetPath);
40
- if (!repoRoot) {
41
- throw new Error(`Not a git repository: ${targetPath}`);
42
- }
43
- const remoteUrl = await git.getRemoteUrl(repoRoot);
44
- const projectId = git.getProjectId(repoRoot, remoteUrl);
45
- logger?.debug('Resolved repository', { repoRoot, remoteUrl, projectId });
46
- // Phase 2: Ensure project exists
47
- const project = await projects.ensureForRepo(db, {
48
- id: projectId,
49
- name: repoRoot.split('/').pop() || 'unknown',
50
- repoUrl: remoteUrl,
51
- rootPath: repoRoot,
52
- });
53
- logger?.info('Project ensured', { projectId: project.id, name: project.name });
54
- // Phase 3: Create scout run
55
- const run = await runs.create(db, {
56
- projectId: project.id,
57
- type: 'scout',
58
- metadata: {
59
- scope: opts.scope ?? 'src/**',
60
- maxProposals: opts.maxProposals ?? 10,
61
- model: opts.model ?? 'opus',
62
- },
63
- });
64
- logger?.debug('Scout run created', { runId: run.id });
65
- try {
66
- // Phase 4: Get dedup context
67
- const recentTickets = await tickets.getRecentlyCompleted(db, project.id, 20);
68
- const recentTitles = recentTickets.map(t => t.title);
69
- // Phase 5: Scan and generate proposals
70
- report({ phase: 'scanning', message: 'Scanning files...' });
71
- const scanResult = await scanAndPropose({
72
- scope: opts.scope ?? 'src/**',
73
- types: opts.types,
74
- maxProposals: opts.maxProposals ?? 10,
75
- minConfidence: opts.minConfidence ?? 50,
76
- projectPath: repoRoot,
77
- model: opts.model ?? 'opus',
78
- timeoutMs: opts.timeoutMs ?? 120000,
79
- signal: opts.signal,
80
- recentlyCompletedTitles: recentTitles,
81
- customPrompt: opts.customPrompt,
82
- backend: opts.backend,
83
- onProgress: (p) => {
84
- report({
85
- phase: 'analyzing',
86
- filesScanned: p.filesScanned,
87
- totalFiles: p.totalFiles,
88
- proposalsFound: p.proposalsFound,
89
- message: `Analyzing batch ${p.currentBatch}/${p.totalBatches}`,
90
- });
91
- },
92
- });
93
- if (!scanResult.success) {
94
- errors.push(...scanResult.errors);
95
- }
96
- logger?.info('Scan complete', {
97
- files: scanResult.scannedFiles,
98
- proposals: scanResult.proposals.length,
99
- });
100
- // Phase 6: Create tickets if auto-approve
101
- const createdTickets = [];
102
- if (opts.autoApprove && scanResult.proposals.length > 0) {
103
- report({
104
- phase: 'storing',
105
- proposalsFound: scanResult.proposals.length,
106
- message: 'Creating tickets...',
107
- });
108
- const ticketInputs = scanResult.proposals.map(proposal => ({
109
- projectId: project.id,
110
- title: proposal.title,
111
- description: formatProposalDescription(proposal),
112
- status: 'ready',
113
- priority: proposal.confidence,
114
- category: proposal.category,
115
- allowedPaths: proposal.allowed_paths,
116
- verificationCommands: proposal.verification_commands,
117
- }));
118
- const created = await tickets.createMany(db, ticketInputs);
119
- createdTickets.push(...created);
120
- logger?.info('Tickets created', { count: created.length });
121
- }
122
- // Phase 7: Mark run success
123
- await runs.markSuccess(db, run.id, {
124
- scannedFiles: scanResult.scannedFiles,
125
- proposalCount: scanResult.proposals.length,
126
- ticketCount: createdTickets.length,
127
- durationMs: Date.now() - startTime,
128
- });
129
- report({
130
- phase: 'complete',
131
- filesScanned: scanResult.scannedFiles,
132
- proposalsFound: scanResult.proposals.length,
133
- ticketsCreated: createdTickets.length,
134
- });
135
- return {
136
- success: true,
137
- project,
138
- run: (await runs.getById(db, run.id)),
139
- proposals: scanResult.proposals,
140
- tickets: createdTickets,
141
- errors: scanResult.errors,
142
- scannedFiles: scanResult.scannedFiles,
143
- durationMs: Date.now() - startTime,
144
- };
145
- }
146
- catch (error) {
147
- // Mark run as failed
148
- await runs.markFailure(db, run.id, error, {
149
- durationMs: Date.now() - startTime,
150
- });
151
- logger?.error('Scout failed', { error: error.message });
152
- return {
153
- success: false,
154
- project,
155
- run: (await runs.getById(db, run.id)),
156
- proposals: [],
157
- tickets: [],
158
- errors: [...errors, error.message],
159
- scannedFiles: 0,
160
- durationMs: Date.now() - startTime,
161
- };
162
- }
163
- }
164
- /**
165
- * Format a proposal into ticket description markdown
166
- */
167
- function formatProposalDescription(proposal) {
168
- const parts = [
169
- proposal.description,
170
- '',
171
- '## Acceptance Criteria',
172
- ...proposal.acceptance_criteria.map(c => `- ${c}`),
173
- '',
174
- '## Rationale',
175
- proposal.rationale,
176
- '',
177
- '## Files',
178
- ...proposal.files.map(f => `- \`${f}\``),
179
- '',
180
- `**Complexity:** ${proposal.estimated_complexity}`,
181
- `**Confidence:** ${proposal.confidence}%`,
182
- ];
183
- return parts.join('\n');
184
- }
185
- /**
186
- * Approve specific proposals and create tickets
187
- */
188
- export async function approveProposals(deps, projectId, proposals) {
189
- const { db, logger } = deps;
190
- const ticketInputs = proposals.map(proposal => ({
191
- projectId,
192
- title: proposal.title,
193
- description: formatProposalDescription(proposal),
194
- status: 'ready',
195
- priority: proposal.confidence,
196
- category: proposal.category,
197
- allowedPaths: proposal.allowed_paths,
198
- verificationCommands: proposal.verification_commands,
199
- }));
200
- const created = await tickets.createMany(db, ticketInputs);
201
- logger?.info('Proposals approved', { count: created.length });
202
- return created;
203
- }
204
- //# sourceMappingURL=scout.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scout.js","sourceRoot":"","sources":["../../src/services/scout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AACzC,OAAO,EACL,KAAK,IAAI,cAAc,GAKxB,MAAM,mBAAmB,CAAC;AA8F3B;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAe,EACf,OAAyB,EAAE;IAE3B,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,MAAM,GAAG,CAAC,QAAgC,EAAE,EAAE;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,KAAK,EAAE,MAAM;YACb,GAAG,QAAQ;SACZ,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,8BAA8B;IAC9B,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAE9D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAEpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAExD,MAAM,EAAE,KAAK,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IAEzE,iCAAiC;IACjC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE;QAC/C,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS;QAC5C,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;IAEH,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/E,4BAA4B;IAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;QAChC,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE;YACR,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE;YACrC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM;SAC5B;KACF,CAAC,CAAC;IAEH,MAAM,EAAE,KAAK,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAEtD,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7E,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAErD,uCAAuC;QACvC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAE5D,MAAM,UAAU,GAAe,MAAM,cAAc,CAAC;YAClD,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE;YACrC,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;YACvC,WAAW,EAAE,QAAQ;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,MAAM;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,uBAAuB,EAAE,YAAY;YACrC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;gBAChB,MAAM,CAAC;oBACL,KAAK,EAAE,WAAW;oBAClB,YAAY,EAAE,CAAC,CAAC,YAAY;oBAC5B,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,cAAc,EAAE,CAAC,CAAC,cAAc;oBAChC,OAAO,EAAE,mBAAmB,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,EAAE;iBAC/D,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE;YAC5B,KAAK,EAAE,UAAU,CAAC,YAAY;YAC9B,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM;SACvC,CAAC,CAAC;QAEH,0CAA0C;QAC1C,MAAM,cAAc,GAAqB,EAAE,CAAC;QAE5C,IAAI,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,CAAC;gBACL,KAAK,EAAE,SAAS;gBAChB,cAAc,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM;gBAC3C,OAAO,EAAE,qBAAqB;aAC/B,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACzD,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,WAAW,EAAE,yBAAyB,CAAC,QAAQ,CAAC;gBAChD,MAAM,EAAE,OAAgB;gBACxB,QAAQ,EAAE,QAAQ,CAAC,UAAU;gBAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,YAAY,EAAE,QAAQ,CAAC,aAAa;gBACpC,oBAAoB,EAAE,QAAQ,CAAC,qBAAqB;aACrD,CAAC,CAAC,CAAC;YAEJ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAC3D,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;YAEhC,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,4BAA4B;QAC5B,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;YACjC,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,aAAa,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM;YAC1C,WAAW,EAAE,cAAc,CAAC,MAAM;YAClC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC,CAAC;QAEH,MAAM,CAAC;YACL,KAAK,EAAE,UAAU;YACjB,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,cAAc,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM;YAC3C,cAAc,EAAE,cAAc,CAAC,MAAM;SACtC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO;YACP,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAE;YACtC,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC;IAEJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qBAAqB;QACrB,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAc,EAAE;YACjD,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC,CAAC;QAEH,MAAM,EAAE,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAEnE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO;YACP,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAE;YACtC,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,CAAC,GAAG,MAAM,EAAG,KAAe,CAAC,OAAO,CAAC;YAC7C,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,QAAwB;IACzD,MAAM,KAAK,GAAG;QACZ,QAAQ,CAAC,WAAW;QACpB,EAAE;QACF,wBAAwB;QACxB,GAAG,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,EAAE;QACF,cAAc;QACd,QAAQ,CAAC,SAAS;QAClB,EAAE;QACF,UAAU;QACV,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACxC,EAAE;QACF,mBAAmB,QAAQ,CAAC,oBAAoB,EAAE;QAClD,mBAAmB,QAAQ,CAAC,UAAU,GAAG;KAC1C,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAe,EACf,SAAiB,EACjB,SAA2B;IAE3B,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE5B,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9C,SAAS;QACT,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,WAAW,EAAE,yBAAyB,CAAC,QAAQ,CAAC;QAChD,MAAM,EAAE,OAAgB;QACxB,QAAQ,EAAE,QAAQ,CAAC,UAAU;QAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,YAAY,EAAE,QAAQ,CAAC,aAAa;QACpC,oBAAoB,EAAE,QAAQ,CAAC,qBAAqB;KACrD,CAAC,CAAC,CAAC;IAEJ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE9D,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=db-contract-sqlite.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db-contract-sqlite.test.d.ts","sourceRoot":"","sources":["../../src/test/db-contract-sqlite.test.ts"],"names":[],"mappings":""}
@@ -1,176 +0,0 @@
1
- import { describe, it, expect, beforeAll, afterAll } from 'vitest';
2
- import * as fs from 'node:fs';
3
- import * as path from 'node:path';
4
- import * as os from 'node:os';
5
- import { createSQLiteAdapter } from '@blockspool/sqlite';
6
- import * as projects from '../repos/projects.js';
7
- import * as tickets from '../repos/tickets.js';
8
- import * as runs from '../repos/runs.js';
9
- let db;
10
- let tmpDir;
11
- beforeAll(async () => {
12
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'blockspool-test-'));
13
- const dbPath = path.join(tmpDir, 'test.db');
14
- db = await createSQLiteAdapter({ url: dbPath });
15
- });
16
- afterAll(async () => {
17
- await db.close();
18
- fs.rmSync(tmpDir, { recursive: true, force: true });
19
- });
20
- describe('projects repo', () => {
21
- it('creates a project via ensureForRepo', async () => {
22
- const project = await projects.ensureForRepo(db, {
23
- id: 'proj_test1',
24
- name: 'test-project',
25
- rootPath: '/tmp/test-project',
26
- repoUrl: 'https://github.com/test/project',
27
- });
28
- expect(project.id).toBe('proj_test1');
29
- expect(project.name).toBe('test-project');
30
- expect(project.rootPath).toBe('/tmp/test-project');
31
- expect(project.repoUrl).toBe('https://github.com/test/project');
32
- });
33
- it('getById returns created project', async () => {
34
- const project = await projects.getById(db, 'proj_test1');
35
- expect(project).not.toBeNull();
36
- expect(project.id).toBe('proj_test1');
37
- expect(project.name).toBe('test-project');
38
- });
39
- it('getOrCreate returns existing project', async () => {
40
- const project = await projects.ensureForRepo(db, {
41
- id: 'proj_test1_different_id',
42
- name: 'different-name',
43
- rootPath: '/tmp/test-project',
44
- });
45
- // Should return the existing one (matched by rootPath)
46
- expect(project.id).toBe('proj_test1');
47
- expect(project.name).toBe('test-project');
48
- });
49
- it('list returns all projects', async () => {
50
- await projects.ensureForRepo(db, {
51
- id: 'proj_test2',
52
- name: 'second-project',
53
- rootPath: '/tmp/second-project',
54
- });
55
- const all = await projects.list(db);
56
- expect(all.length).toBeGreaterThanOrEqual(2);
57
- const ids = all.map(p => p.id);
58
- expect(ids).toContain('proj_test1');
59
- expect(ids).toContain('proj_test2');
60
- });
61
- });
62
- describe('tickets repo', () => {
63
- it('creates a ticket', async () => {
64
- const ticket = await tickets.create(db, {
65
- projectId: 'proj_test1',
66
- title: 'Fix broken tests',
67
- description: 'Some tests are flaky',
68
- status: 'ready',
69
- priority: 50,
70
- category: 'test',
71
- });
72
- expect(ticket.id).toMatch(/^tkt_/);
73
- expect(ticket.title).toBe('Fix broken tests');
74
- expect(ticket.projectId).toBe('proj_test1');
75
- expect(ticket.status).toBe('ready');
76
- expect(ticket.category).toBe('test');
77
- });
78
- let ticketId;
79
- it('getById returns ticket', async () => {
80
- const created = await tickets.create(db, {
81
- projectId: 'proj_test1',
82
- title: 'Improve docs',
83
- description: 'Add examples',
84
- priority: 30,
85
- category: 'docs',
86
- });
87
- ticketId = created.id;
88
- const ticket = await tickets.getById(db, ticketId);
89
- expect(ticket).not.toBeNull();
90
- expect(ticket.title).toBe('Improve docs');
91
- });
92
- it('listByProject with status filter', async () => {
93
- await tickets.create(db, {
94
- projectId: 'proj_test1',
95
- title: 'Done ticket',
96
- status: 'done',
97
- priority: 10,
98
- });
99
- const readyTickets = await tickets.listByProject(db, 'proj_test1', { status: 'ready' });
100
- for (const t of readyTickets) {
101
- expect(t.status).toBe('ready');
102
- }
103
- const doneTickets = await tickets.listByProject(db, 'proj_test1', { status: 'done' });
104
- expect(doneTickets.length).toBeGreaterThanOrEqual(1);
105
- for (const t of doneTickets) {
106
- expect(t.status).toBe('done');
107
- }
108
- });
109
- it('updateStatus changes status', async () => {
110
- const updated = await tickets.updateStatus(db, ticketId, 'in_progress');
111
- expect(updated).not.toBeNull();
112
- expect(updated.status).toBe('in_progress');
113
- const fetched = await tickets.getById(db, ticketId);
114
- expect(fetched.status).toBe('in_progress');
115
- });
116
- });
117
- describe('runs repo', () => {
118
- let runId;
119
- it('creates a run', async () => {
120
- const run = await runs.create(db, {
121
- projectId: 'proj_test1',
122
- type: 'scout',
123
- metadata: { scope: 'src/**' },
124
- });
125
- runId = run.id;
126
- expect(run.id).toMatch(/^run_/);
127
- expect(run.projectId).toBe('proj_test1');
128
- expect(run.type).toBe('scout');
129
- expect(run.status).toBe('running');
130
- expect(run.metadata).toEqual({ scope: 'src/**' });
131
- });
132
- it('getById returns run', async () => {
133
- const run = await runs.getById(db, runId);
134
- expect(run).not.toBeNull();
135
- expect(run.id).toBe(runId);
136
- expect(run.type).toBe('scout');
137
- });
138
- it('markSuccess changes status', async () => {
139
- const updated = await runs.markSuccess(db, runId, { proposalCount: 5 });
140
- expect(updated).not.toBeNull();
141
- expect(updated.status).toBe('success');
142
- expect(updated.completedAt).not.toBeNull();
143
- expect(updated.metadata).toEqual(expect.objectContaining({
144
- scope: 'src/**',
145
- proposalCount: 5,
146
- }));
147
- });
148
- it('markFailure records error', async () => {
149
- const run = await runs.create(db, {
150
- projectId: 'proj_test1',
151
- type: 'worker',
152
- });
153
- const updated = await runs.markFailure(db, run.id, new Error('Build failed'), {
154
- durationMs: 1234,
155
- });
156
- expect(updated).not.toBeNull();
157
- expect(updated.status).toBe('failure');
158
- expect(updated.error).toBe('Build failed');
159
- expect(updated.completedAt).not.toBeNull();
160
- expect(updated.metadata).toEqual(expect.objectContaining({ durationMs: 1234 }));
161
- });
162
- it('listByProject returns runs for project', async () => {
163
- const allRuns = await runs.listByProject(db, 'proj_test1');
164
- expect(allRuns.length).toBeGreaterThanOrEqual(2);
165
- for (const r of allRuns) {
166
- expect(r.projectId).toBe('proj_test1');
167
- }
168
- });
169
- it('listByProject filters by type', async () => {
170
- const scoutRuns = await runs.listByProject(db, 'proj_test1', { type: 'scout' });
171
- for (const r of scoutRuns) {
172
- expect(r.type).toBe('scout');
173
- }
174
- });
175
- });
176
- //# sourceMappingURL=db-contract-sqlite.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db-contract-sqlite.test.js","sourceRoot":"","sources":["../../src/test/db-contract-sqlite.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Integration gap-fill tests for packages/core/src/repos/index.ts exports
3
- *
4
- * Since learnings.ts does not exist in packages/core/src/repos/,
5
- * we test the repos barrel exports and the row-mapping logic in
6
- * tickets.ts and projects.ts via their public APIs with a mock DatabaseAdapter.
7
- */
8
- export {};
9
- //# sourceMappingURL=learnings-format.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"learnings-format.test.d.ts","sourceRoot":"","sources":["../../src/test/learnings-format.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}