@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.
- package/package.json +1 -1
- package/dist/db/adapter.d.ts +0 -191
- package/dist/db/adapter.d.ts.map +0 -1
- package/dist/db/adapter.js +0 -40
- package/dist/db/adapter.js.map +0 -1
- package/dist/db/contract.d.ts +0 -47
- package/dist/db/contract.d.ts.map +0 -1
- package/dist/db/contract.js +0 -258
- package/dist/db/contract.js.map +0 -1
- package/dist/db/index.d.ts +0 -6
- package/dist/db/index.d.ts.map +0 -1
- package/dist/db/index.js +0 -7
- package/dist/db/index.js.map +0 -1
- package/dist/exec/index.d.ts +0 -5
- package/dist/exec/index.d.ts.map +0 -1
- package/dist/exec/index.js +0 -5
- package/dist/exec/index.js.map +0 -1
- package/dist/exec/types.d.ts +0 -64
- package/dist/exec/types.d.ts.map +0 -1
- package/dist/exec/types.js +0 -8
- package/dist/exec/types.js.map +0 -1
- package/dist/index.d.ts +0 -23
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -27
- package/dist/index.js.map +0 -1
- package/dist/repos/index.d.ts +0 -15
- package/dist/repos/index.d.ts.map +0 -1
- package/dist/repos/index.js +0 -11
- package/dist/repos/index.js.map +0 -1
- package/dist/repos/projects.d.ts +0 -41
- package/dist/repos/projects.d.ts.map +0 -1
- package/dist/repos/projects.js +0 -74
- package/dist/repos/projects.js.map +0 -1
- package/dist/repos/run_steps.d.ts +0 -152
- package/dist/repos/run_steps.d.ts.map +0 -1
- package/dist/repos/run_steps.js +0 -321
- package/dist/repos/run_steps.js.map +0 -1
- package/dist/repos/runs.d.ts +0 -92
- package/dist/repos/runs.d.ts.map +0 -1
- package/dist/repos/runs.js +0 -177
- package/dist/repos/runs.js.map +0 -1
- package/dist/repos/tickets.d.ts +0 -71
- package/dist/repos/tickets.d.ts.map +0 -1
- package/dist/repos/tickets.js +0 -128
- package/dist/repos/tickets.js.map +0 -1
- package/dist/scout/index.d.ts +0 -15
- package/dist/scout/index.d.ts.map +0 -1
- package/dist/scout/index.js +0 -382
- package/dist/scout/index.js.map +0 -1
- package/dist/scout/prompt.d.ts +0 -30
- package/dist/scout/prompt.d.ts.map +0 -1
- package/dist/scout/prompt.js +0 -101
- package/dist/scout/prompt.js.map +0 -1
- package/dist/scout/runner.d.ts +0 -68
- package/dist/scout/runner.d.ts.map +0 -1
- package/dist/scout/runner.js +0 -241
- package/dist/scout/runner.js.map +0 -1
- package/dist/scout/scanner.d.ts +0 -35
- package/dist/scout/scanner.d.ts.map +0 -1
- package/dist/scout/scanner.js +0 -164
- package/dist/scout/scanner.js.map +0 -1
- package/dist/scout/types.d.ts +0 -177
- package/dist/scout/types.d.ts.map +0 -1
- package/dist/scout/types.js +0 -44
- package/dist/scout/types.js.map +0 -1
- package/dist/services/index.d.ts +0 -10
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/index.js +0 -9
- package/dist/services/index.js.map +0 -1
- package/dist/services/qa.d.ts +0 -76
- package/dist/services/qa.d.ts.map +0 -1
- package/dist/services/qa.js +0 -239
- package/dist/services/qa.js.map +0 -1
- package/dist/services/scout.d.ts +0 -118
- package/dist/services/scout.d.ts.map +0 -1
- package/dist/services/scout.js +0 -204
- package/dist/services/scout.js.map +0 -1
- package/dist/test/db-contract-sqlite.test.d.ts +0 -2
- package/dist/test/db-contract-sqlite.test.d.ts.map +0 -1
- package/dist/test/db-contract-sqlite.test.js +0 -176
- package/dist/test/db-contract-sqlite.test.js.map +0 -1
- package/dist/test/learnings-format.test.d.ts +0 -9
- package/dist/test/learnings-format.test.d.ts.map +0 -1
- package/dist/test/learnings-format.test.js +0 -174
- package/dist/test/learnings-format.test.js.map +0 -1
- package/dist/test/repos-integration.test.d.ts +0 -2
- package/dist/test/repos-integration.test.d.ts.map +0 -1
- package/dist/test/repos-integration.test.js +0 -565
- package/dist/test/repos-integration.test.js.map +0 -1
- package/dist/test/scout-full-pure.test.d.ts +0 -2
- package/dist/test/scout-full-pure.test.d.ts.map +0 -1
- package/dist/test/scout-full-pure.test.js +0 -122
- package/dist/test/scout-full-pure.test.js.map +0 -1
- package/dist/test/scout-integration.test.d.ts +0 -13
- package/dist/test/scout-integration.test.d.ts.map +0 -1
- package/dist/test/scout-integration.test.js +0 -229
- package/dist/test/scout-integration.test.js.map +0 -1
- package/dist/test/scout-prompt.test.d.ts +0 -2
- package/dist/test/scout-prompt.test.d.ts.map +0 -1
- package/dist/test/scout-prompt.test.js +0 -79
- package/dist/test/scout-prompt.test.js.map +0 -1
- package/dist/test/scout-runner-parse.test.d.ts +0 -2
- package/dist/test/scout-runner-parse.test.d.ts.map +0 -1
- package/dist/test/scout-runner-parse.test.js +0 -44
- package/dist/test/scout-runner-parse.test.js.map +0 -1
- package/dist/test/scout-runner-spawn.test.d.ts +0 -11
- package/dist/test/scout-runner-spawn.test.d.ts.map +0 -1
- package/dist/test/scout-runner-spawn.test.js +0 -359
- package/dist/test/scout-runner-spawn.test.js.map +0 -1
- package/dist/test/scout-scanner-fs.test.d.ts +0 -2
- package/dist/test/scout-scanner-fs.test.d.ts.map +0 -1
- package/dist/test/scout-scanner-fs.test.js +0 -188
- package/dist/test/scout-scanner-fs.test.js.map +0 -1
- package/dist/test/scout-scanner-pure.test.d.ts +0 -2
- package/dist/test/scout-scanner-pure.test.d.ts.map +0 -1
- package/dist/test/scout-scanner-pure.test.js +0 -131
- package/dist/test/scout-scanner-pure.test.js.map +0 -1
- package/dist/test/services-integration.test.d.ts +0 -2
- package/dist/test/services-integration.test.d.ts.map +0 -1
- package/dist/test/services-integration.test.js +0 -327
- package/dist/test/services-integration.test.js.map +0 -1
- package/dist/test/services-qa.test.d.ts +0 -2
- package/dist/test/services-qa.test.d.ts.map +0 -1
- package/dist/test/services-qa.test.js +0 -255
- package/dist/test/services-qa.test.js.map +0 -1
- package/dist/test/services-scout.test.d.ts +0 -2
- package/dist/test/services-scout.test.d.ts.map +0 -1
- package/dist/test/services-scout.test.js +0 -269
- package/dist/test/services-scout.test.js.map +0 -1
- package/dist/utils/id.d.ts +0 -12
- package/dist/utils/id.d.ts.map +0 -1
- package/dist/utils/id.js +0 -24
- package/dist/utils/id.js.map +0 -1
- package/dist/utils/id.test.d.ts +0 -5
- package/dist/utils/id.test.d.ts.map +0 -1
- package/dist/utils/id.test.js +0 -173
- package/dist/utils/id.test.js.map +0 -1
- package/dist/utils/index.d.ts +0 -6
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -6
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/json.d.ts +0 -9
- package/dist/utils/json.d.ts.map +0 -1
- package/dist/utils/json.js +0 -19
- package/dist/utils/json.js.map +0 -1
package/dist/services/scout.d.ts
DELETED
|
@@ -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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"}
|
package/dist/services/scout.js
DELETED
|
@@ -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":"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"}
|
|
@@ -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"}
|