@promptwheel/core 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/codebase-index/index.d.ts +23 -0
- package/dist/codebase-index/index.d.ts.map +1 -0
- package/dist/codebase-index/index.js +361 -0
- package/dist/codebase-index/index.js.map +1 -0
- package/dist/codebase-index/shared.d.ts +95 -0
- package/dist/codebase-index/shared.d.ts.map +1 -0
- package/dist/codebase-index/shared.js +319 -0
- package/dist/codebase-index/shared.js.map +1 -0
- package/dist/config/defaults.d.ts +45 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +79 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/critic/shared.d.ts +49 -0
- package/dist/critic/shared.d.ts.map +1 -0
- package/dist/critic/shared.js +204 -0
- package/dist/critic/shared.js.map +1 -0
- package/dist/db/adapter.d.ts +191 -0
- package/dist/db/adapter.d.ts.map +1 -0
- package/dist/db/adapter.js +40 -0
- package/dist/db/adapter.js.map +1 -0
- package/dist/db/contract.d.ts +47 -0
- package/dist/db/contract.d.ts.map +1 -0
- package/dist/db/contract.js +258 -0
- package/dist/db/contract.js.map +1 -0
- package/dist/db/index.d.ts +6 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +7 -0
- package/dist/db/index.js.map +1 -0
- package/dist/dedup/shared.d.ts +82 -0
- package/dist/dedup/shared.d.ts.map +1 -0
- package/dist/dedup/shared.js +215 -0
- package/dist/dedup/shared.js.map +1 -0
- package/dist/exec/index.d.ts +5 -0
- package/dist/exec/index.d.ts.map +1 -0
- package/dist/exec/index.js +5 -0
- package/dist/exec/index.js.map +1 -0
- package/dist/exec/types.d.ts +64 -0
- package/dist/exec/types.d.ts.map +1 -0
- package/dist/exec/types.js +8 -0
- package/dist/exec/types.js.map +1 -0
- package/dist/formulas/shared.d.ts +42 -0
- package/dist/formulas/shared.d.ts.map +1 -0
- package/dist/formulas/shared.js +204 -0
- package/dist/formulas/shared.js.map +1 -0
- package/dist/guidelines/shared.d.ts +46 -0
- package/dist/guidelines/shared.d.ts.map +1 -0
- package/dist/guidelines/shared.js +128 -0
- package/dist/guidelines/shared.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/learnings/shared.d.ts +112 -0
- package/dist/learnings/shared.d.ts.map +1 -0
- package/dist/learnings/shared.js +402 -0
- package/dist/learnings/shared.js.map +1 -0
- package/dist/proposals/shared.d.ts +137 -0
- package/dist/proposals/shared.d.ts.map +1 -0
- package/dist/proposals/shared.js +254 -0
- package/dist/proposals/shared.js.map +1 -0
- package/dist/repos/index.d.ts +15 -0
- package/dist/repos/index.d.ts.map +1 -0
- package/dist/repos/index.js +11 -0
- package/dist/repos/index.js.map +1 -0
- package/dist/repos/projects.d.ts +41 -0
- package/dist/repos/projects.d.ts.map +1 -0
- package/dist/repos/projects.js +75 -0
- package/dist/repos/projects.js.map +1 -0
- package/dist/repos/run_steps.d.ts +152 -0
- package/dist/repos/run_steps.d.ts.map +1 -0
- package/dist/repos/run_steps.js +328 -0
- package/dist/repos/run_steps.js.map +1 -0
- package/dist/repos/runs.d.ts +92 -0
- package/dist/repos/runs.d.ts.map +1 -0
- package/dist/repos/runs.js +185 -0
- package/dist/repos/runs.js.map +1 -0
- package/dist/repos/tickets.d.ts +71 -0
- package/dist/repos/tickets.d.ts.map +1 -0
- package/dist/repos/tickets.js +158 -0
- package/dist/repos/tickets.js.map +1 -0
- package/dist/scope/shared.d.ts +67 -0
- package/dist/scope/shared.d.ts.map +1 -0
- package/dist/scope/shared.js +355 -0
- package/dist/scope/shared.js.map +1 -0
- package/dist/scout/index.d.ts +18 -0
- package/dist/scout/index.d.ts.map +1 -0
- package/dist/scout/index.js +445 -0
- package/dist/scout/index.js.map +1 -0
- package/dist/scout/kimi-runner.d.ts +21 -0
- package/dist/scout/kimi-runner.d.ts.map +1 -0
- package/dist/scout/kimi-runner.js +76 -0
- package/dist/scout/kimi-runner.js.map +1 -0
- package/dist/scout/mcp-batch-server.d.ts +37 -0
- package/dist/scout/mcp-batch-server.d.ts.map +1 -0
- package/dist/scout/mcp-batch-server.js +144 -0
- package/dist/scout/mcp-batch-server.js.map +1 -0
- package/dist/scout/openai-local-runner.d.ts +20 -0
- package/dist/scout/openai-local-runner.d.ts.map +1 -0
- package/dist/scout/openai-local-runner.js +82 -0
- package/dist/scout/openai-local-runner.js.map +1 -0
- package/dist/scout/prompt.d.ts +49 -0
- package/dist/scout/prompt.d.ts.map +1 -0
- package/dist/scout/prompt.js +153 -0
- package/dist/scout/prompt.js.map +1 -0
- package/dist/scout/runner.d.ts +101 -0
- package/dist/scout/runner.d.ts.map +1 -0
- package/dist/scout/runner.js +521 -0
- package/dist/scout/runner.js.map +1 -0
- package/dist/scout/scanner.d.ts +61 -0
- package/dist/scout/scanner.d.ts.map +1 -0
- package/dist/scout/scanner.js +315 -0
- package/dist/scout/scanner.js.map +1 -0
- package/dist/scout/types.d.ts +221 -0
- package/dist/scout/types.d.ts.map +1 -0
- package/dist/scout/types.js +44 -0
- package/dist/scout/types.js.map +1 -0
- package/dist/sectors/shared.d.ts +146 -0
- package/dist/sectors/shared.d.ts.map +1 -0
- package/dist/sectors/shared.js +408 -0
- package/dist/sectors/shared.js.map +1 -0
- package/dist/services/index.d.ts +10 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +9 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/qa.d.ts +76 -0
- package/dist/services/qa.d.ts.map +1 -0
- package/dist/services/qa.js +228 -0
- package/dist/services/qa.js.map +1 -0
- package/dist/services/scout.d.ts +164 -0
- package/dist/services/scout.d.ts.map +1 -0
- package/dist/services/scout.js +215 -0
- package/dist/services/scout.js.map +1 -0
- package/dist/spindle/shared.d.ts +14 -0
- package/dist/spindle/shared.d.ts.map +1 -0
- package/dist/spindle/shared.js +65 -0
- package/dist/spindle/shared.js.map +1 -0
- package/dist/tools/shared.d.ts +35 -0
- package/dist/tools/shared.d.ts.map +1 -0
- package/dist/tools/shared.js +247 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/trace/shared.d.ts +147 -0
- package/dist/trace/shared.d.ts.map +1 -0
- package/dist/trace/shared.js +414 -0
- package/dist/trace/shared.js.map +1 -0
- package/dist/trajectory/shared.d.ts +69 -0
- package/dist/trajectory/shared.d.ts.map +1 -0
- package/dist/trajectory/shared.js +336 -0
- package/dist/trajectory/shared.js.map +1 -0
- package/dist/utils/id.d.ts +12 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +24 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/id.test.d.ts +5 -0
- package/dist/utils/id.test.d.ts.map +1 -0
- package/dist/utils/id.test.js +173 -0
- package/dist/utils/id.test.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json.d.ts +9 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +19 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/waves/shared.d.ts +106 -0
- package/dist/waves/shared.d.ts.map +1 -0
- package/dist/waves/shared.js +356 -0
- package/dist/waves/shared.js.map +1 -0
- package/package.json +126 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure scope algorithms — no filesystem, no external dependencies.
|
|
3
|
+
*
|
|
4
|
+
* Shared by both @promptwheel/cli and @promptwheel/mcp.
|
|
5
|
+
* CLI keeps its proposal-level scope checking wrapper.
|
|
6
|
+
* MCP keeps its minimatch-based policy enforcement + file I/O.
|
|
7
|
+
*/
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Always-denied paths (build artifacts, lockfiles, VCS internals)
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
export const ALWAYS_DENIED = [
|
|
12
|
+
'.env', '.env.*',
|
|
13
|
+
'node_modules/**', '.git/**', '.promptwheel/**',
|
|
14
|
+
'dist/**', 'build/**', 'coverage/**',
|
|
15
|
+
// Lock files are auto-generated; governed by per-ticket allowed_paths instead
|
|
16
|
+
'package-lock.json',
|
|
17
|
+
];
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Credential / secret detection patterns
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
export const CREDENTIAL_PATTERNS = [
|
|
22
|
+
/AKIA[0-9A-Z]{16}/, // AWS access key
|
|
23
|
+
/-----BEGIN.*PRIVATE KEY-----/, // PEM keys
|
|
24
|
+
/ghp_[a-zA-Z0-9]{36}/, // GitHub PAT
|
|
25
|
+
/\bsk-(?:proj-)?[a-zA-Z0-9_-]{32,}/, // OpenAI key
|
|
26
|
+
/password\s*[:=]\s*['"][^'"]+/i, // hardcoded passwords
|
|
27
|
+
/xox[bporas]-[a-zA-Z0-9-]+/, // Slack tokens
|
|
28
|
+
/postgres(ql)?:\/\/[^\s'"]+/i, // PostgreSQL connection string
|
|
29
|
+
/mongodb(\+srv)?:\/\/[^\s'"]+/i, // MongoDB connection string
|
|
30
|
+
/mysql:\/\/[^\s'"]+/i, // MySQL connection string
|
|
31
|
+
/eyJ[a-zA-Z0-9_-]{10,}\.[a-zA-Z0-9_-]{10,}\./, // JWT tokens
|
|
32
|
+
/(?:SECRET|TOKEN|API_?KEY|PRIVATE_?KEY)\s*[:=]\s*['"][^'"]{8,}/i, // Generic secrets
|
|
33
|
+
];
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// File deny patterns (sensitive file names)
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
export const FILE_DENY_PATTERNS = [
|
|
38
|
+
/\.(env|pem|key)$/,
|
|
39
|
+
/credentials/i,
|
|
40
|
+
/secret/i,
|
|
41
|
+
];
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Path normalization
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
/**
|
|
46
|
+
* Normalize a file path for consistent matching.
|
|
47
|
+
*/
|
|
48
|
+
export function normalizePath(filePath) {
|
|
49
|
+
return filePath
|
|
50
|
+
.replace(/\\/g, '/') // Normalize backslashes
|
|
51
|
+
.replace(/^\.\//, '') // Remove leading ./
|
|
52
|
+
.replace(/\/+/g, '/') // Collapse multiple slashes
|
|
53
|
+
.replace(/\/$/, ''); // Remove trailing slash
|
|
54
|
+
}
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Hallucinated path detection
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
/**
|
|
59
|
+
* Detect if a path appears to be hallucinated by an LLM.
|
|
60
|
+
* Common patterns: repeated segments like 'foo/foo/'.
|
|
61
|
+
*/
|
|
62
|
+
export function detectHallucinatedPath(filePath) {
|
|
63
|
+
const normalized = normalizePath(filePath);
|
|
64
|
+
const segments = normalized.split('/').filter(s => s.length > 0);
|
|
65
|
+
// Check for repeated consecutive segments
|
|
66
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
67
|
+
if (segments[i] === segments[i + 1] && segments[i].length > 0) {
|
|
68
|
+
return {
|
|
69
|
+
isHallucinated: true,
|
|
70
|
+
reason: `Repeated path segment: '${segments[i]}/${segments[i]}'`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Double slashes in original
|
|
75
|
+
if (/\/\//.test(filePath)) {
|
|
76
|
+
return {
|
|
77
|
+
isHallucinated: true,
|
|
78
|
+
reason: 'Contains double slashes',
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return { isHallucinated: false };
|
|
82
|
+
}
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// Credential detection in file content
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
/**
|
|
87
|
+
* Check file content for credential patterns.
|
|
88
|
+
* Returns a description of the first match, or null if clean.
|
|
89
|
+
*/
|
|
90
|
+
export function detectCredentialInContent(content) {
|
|
91
|
+
for (const pattern of CREDENTIAL_PATTERNS) {
|
|
92
|
+
const match = content.match(pattern);
|
|
93
|
+
if (match) {
|
|
94
|
+
return `Content contains potential credential: ${pattern.source}`;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if a file path matches credential/sensitive file patterns.
|
|
101
|
+
*/
|
|
102
|
+
export function detectCredentialPattern(filePath) {
|
|
103
|
+
for (const pattern of FILE_DENY_PATTERNS) {
|
|
104
|
+
if (pattern.test(filePath))
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
// Pure glob-style pattern matching (no external deps)
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
/**
|
|
113
|
+
* Simple glob-style pattern matching.
|
|
114
|
+
* Supports: * (any chars), ** (any path segments), ? (single char)
|
|
115
|
+
*/
|
|
116
|
+
export function matchesPattern(filePath, pattern) {
|
|
117
|
+
const normalizedFile = filePath.replace(/\\/g, '/');
|
|
118
|
+
const normalizedPattern = pattern.replace(/\\/g, '/');
|
|
119
|
+
// Convert glob to regex
|
|
120
|
+
let regexPattern = normalizedPattern
|
|
121
|
+
.replace(/\*\*\//g, '<<<GLOBSTAR_SLASH>>>')
|
|
122
|
+
.replace(/\*\*/g, '<<<GLOBSTAR>>>')
|
|
123
|
+
.replace(/\*/g, '<<<STAR>>>')
|
|
124
|
+
.replace(/\?/g, '<<<QUESTION>>>');
|
|
125
|
+
regexPattern = regexPattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
|
|
126
|
+
regexPattern = regexPattern
|
|
127
|
+
.replace(/<<<GLOBSTAR_SLASH>>>/g, '(?:.*/)?')
|
|
128
|
+
.replace(/<<<GLOBSTAR>>>/g, '.*')
|
|
129
|
+
.replace(/<<<STAR>>>/g, '[^/]*')
|
|
130
|
+
.replace(/<<<QUESTION>>>/g, '[^/]');
|
|
131
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
132
|
+
return regex.test(normalizedFile);
|
|
133
|
+
}
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
// Path allowed/denied checking (pure — no minimatch dependency)
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
/**
|
|
138
|
+
* Check if a path is allowed given allow/deny lists using built-in glob matching.
|
|
139
|
+
* When allowed is empty, everything not denied is allowed.
|
|
140
|
+
*/
|
|
141
|
+
export function isPathAllowed(filePath, allowed, denied) {
|
|
142
|
+
const normalized = normalizePath(filePath);
|
|
143
|
+
// Check denied first (higher priority)
|
|
144
|
+
for (const pattern of denied) {
|
|
145
|
+
if (matchesPattern(normalized, pattern))
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
// Check denied file patterns
|
|
149
|
+
if (detectCredentialPattern(normalized))
|
|
150
|
+
return false;
|
|
151
|
+
// Check allowed (empty = everything allowed)
|
|
152
|
+
if (allowed.length === 0)
|
|
153
|
+
return true;
|
|
154
|
+
return allowed.some(pattern => matchesPattern(normalized, pattern));
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Check if changed files violate scope constraints.
|
|
158
|
+
*/
|
|
159
|
+
export function checkScopeViolations(changedFiles, allowedPaths, forbiddenPaths) {
|
|
160
|
+
const violations = [];
|
|
161
|
+
for (const file of changedFiles) {
|
|
162
|
+
// Check hallucinated paths first
|
|
163
|
+
const hallucinationCheck = detectHallucinatedPath(file);
|
|
164
|
+
if (hallucinationCheck.isHallucinated) {
|
|
165
|
+
violations.push({
|
|
166
|
+
file,
|
|
167
|
+
violation: 'not_in_allowed',
|
|
168
|
+
pattern: `hallucinated: ${hallucinationCheck.reason}`,
|
|
169
|
+
});
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
const normalizedFile = normalizePath(file);
|
|
173
|
+
// Check forbidden paths (higher priority)
|
|
174
|
+
let isForbidden = false;
|
|
175
|
+
for (const pattern of forbiddenPaths) {
|
|
176
|
+
if (matchesPattern(normalizedFile, pattern)) {
|
|
177
|
+
violations.push({ file, violation: 'in_forbidden', pattern });
|
|
178
|
+
isForbidden = true;
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Check allowed paths
|
|
183
|
+
if (!isForbidden && allowedPaths.length > 0) {
|
|
184
|
+
let isAllowed = allowedPaths.some(pattern => matchesPattern(normalizedFile, pattern));
|
|
185
|
+
if (!isAllowed && file.endsWith('/')) {
|
|
186
|
+
const dirPrefix = normalizedFile + '/';
|
|
187
|
+
isAllowed = allowedPaths.some(pattern => pattern.startsWith(dirPrefix));
|
|
188
|
+
}
|
|
189
|
+
if (!isAllowed) {
|
|
190
|
+
violations.push({ file, violation: 'not_in_allowed' });
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return violations;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Analyze violations and determine if paths can be auto-expanded.
|
|
198
|
+
* Allows expansion for sibling files, test files, type definitions,
|
|
199
|
+
* index files, subdirectories, and root configs.
|
|
200
|
+
*/
|
|
201
|
+
export function analyzeViolationsForExpansion(violations, currentAllowedPaths, maxExpansions = 10) {
|
|
202
|
+
// Forbidden violations cannot be expanded
|
|
203
|
+
const forbiddenViolations = violations.filter(v => v.violation === 'in_forbidden');
|
|
204
|
+
if (forbiddenViolations.length > 0) {
|
|
205
|
+
return {
|
|
206
|
+
canExpand: false,
|
|
207
|
+
expandedPaths: currentAllowedPaths,
|
|
208
|
+
addedPaths: [],
|
|
209
|
+
reason: `Cannot expand: ${forbiddenViolations.length} file(s) match forbidden paths`,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// Hallucinated paths cannot be expanded
|
|
213
|
+
const hallucinatedViolations = violations.filter(v => v.pattern?.startsWith('hallucinated:'));
|
|
214
|
+
if (hallucinatedViolations.length > 0) {
|
|
215
|
+
return {
|
|
216
|
+
canExpand: false,
|
|
217
|
+
expandedPaths: currentAllowedPaths,
|
|
218
|
+
addedPaths: [],
|
|
219
|
+
reason: `Cannot expand: ${hallucinatedViolations.length} hallucinated path(s) detected`,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
// Get allowed directories
|
|
223
|
+
const allowedDirs = new Set();
|
|
224
|
+
for (const p of currentAllowedPaths) {
|
|
225
|
+
const normalized = normalizePath(p);
|
|
226
|
+
const lastSlash = normalized.lastIndexOf('/');
|
|
227
|
+
if (lastSlash > 0) {
|
|
228
|
+
allowedDirs.add(normalized.slice(0, lastSlash));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
const pathsToAdd = [];
|
|
232
|
+
const notAllowedViolations = violations.filter(v => v.violation === 'not_in_allowed');
|
|
233
|
+
for (const violation of notAllowedViolations) {
|
|
234
|
+
const normalizedFile = normalizePath(violation.file);
|
|
235
|
+
const lastSlash = normalizedFile.lastIndexOf('/');
|
|
236
|
+
const fileDir = lastSlash > 0 ? normalizedFile.slice(0, lastSlash) : '';
|
|
237
|
+
const fileName = lastSlash > 0 ? normalizedFile.slice(lastSlash + 1) : normalizedFile;
|
|
238
|
+
const isSiblingFile = allowedDirs.has(fileDir);
|
|
239
|
+
const isRelatedFile =
|
|
240
|
+
// JS/TS
|
|
241
|
+
fileName.endsWith('.d.ts') ||
|
|
242
|
+
fileName.includes('.test.') ||
|
|
243
|
+
fileName.includes('.spec.') ||
|
|
244
|
+
fileName === 'index.ts' || fileName === 'index.tsx' || fileName === 'index.js' ||
|
|
245
|
+
fileName === 'types.ts' || fileName === 'types.tsx' ||
|
|
246
|
+
// Python
|
|
247
|
+
fileName === '__init__.py' || fileName === 'conftest.py' ||
|
|
248
|
+
fileName.startsWith('test_') || fileName.endsWith('_test.py') ||
|
|
249
|
+
// Rust
|
|
250
|
+
fileName === 'mod.rs' || fileName === 'lib.rs' || fileName === 'build.rs' ||
|
|
251
|
+
// Go
|
|
252
|
+
fileName === 'go.mod' || fileName === 'go.sum' ||
|
|
253
|
+
fileName.endsWith('_test.go') ||
|
|
254
|
+
// Java/Kotlin
|
|
255
|
+
fileName.endsWith('Test.java') || fileName.endsWith('Test.kt') ||
|
|
256
|
+
// C#
|
|
257
|
+
fileName.endsWith('.csproj') || fileName.endsWith('.sln') ||
|
|
258
|
+
fileName.endsWith('Tests.cs') || fileName.endsWith('Test.cs') ||
|
|
259
|
+
// Ruby
|
|
260
|
+
fileName.endsWith('_spec.rb') || fileName === 'Rakefile' || fileName === 'Gemfile.lock' ||
|
|
261
|
+
// Elixir
|
|
262
|
+
fileName.endsWith('_test.exs') || fileName === 'mix.lock' ||
|
|
263
|
+
// Swift
|
|
264
|
+
fileName === 'Package.swift' || fileName.endsWith('Tests.swift') ||
|
|
265
|
+
// Dart
|
|
266
|
+
fileName === 'pubspec.yaml' || fileName === 'pubspec.lock' ||
|
|
267
|
+
fileName.endsWith('_test.dart') ||
|
|
268
|
+
// Scala
|
|
269
|
+
fileName.endsWith('Spec.scala') || fileName.endsWith('Test.scala') ||
|
|
270
|
+
fileName === 'build.sbt' ||
|
|
271
|
+
// Haskell
|
|
272
|
+
fileName.endsWith('Spec.hs') || fileName === 'stack.yaml' ||
|
|
273
|
+
fileName.endsWith('.cabal') ||
|
|
274
|
+
// Zig
|
|
275
|
+
fileName === 'build.zig' || fileName === 'build.zig.zon' ||
|
|
276
|
+
// C/C++
|
|
277
|
+
fileName === 'CMakeLists.txt' || fileName === 'Makefile';
|
|
278
|
+
const isSubdirectory = [...allowedDirs].some(dir => fileDir.startsWith(dir + '/'));
|
|
279
|
+
const isRootConfig = !fileDir && /^(vitest|vite|jest|tsconfig|eslint|prettier|babel|rollup|webpack|next|tailwind|pyproject|setup|Cargo|go\.mod|go\.sum|Gemfile|mix|pom|build\.gradle|CMakeLists|Makefile)\b/.test(fileName);
|
|
280
|
+
if (isSiblingFile || isRelatedFile || isSubdirectory || isRootConfig) {
|
|
281
|
+
pathsToAdd.push(normalizedFile);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Second pass: cross-directory within same top-level module
|
|
285
|
+
if (pathsToAdd.length < notAllowedViolations.length) {
|
|
286
|
+
const allowedTopDirs = new Set();
|
|
287
|
+
for (const dir of allowedDirs) {
|
|
288
|
+
const parts = dir.split('/');
|
|
289
|
+
if (parts.length >= 1)
|
|
290
|
+
allowedTopDirs.add(parts[0]);
|
|
291
|
+
if (parts.length >= 2)
|
|
292
|
+
allowedTopDirs.add(parts.slice(0, 2).join('/'));
|
|
293
|
+
}
|
|
294
|
+
const hasPackagesDir = [...allowedDirs].some(d => d.startsWith('packages/'));
|
|
295
|
+
if (hasPackagesDir)
|
|
296
|
+
allowedTopDirs.add('packages');
|
|
297
|
+
for (const violation of notAllowedViolations) {
|
|
298
|
+
const normalizedFile = normalizePath(violation.file);
|
|
299
|
+
if (pathsToAdd.includes(normalizedFile))
|
|
300
|
+
continue;
|
|
301
|
+
const fileParts = normalizedFile.split('/');
|
|
302
|
+
const fileTopDir = fileParts.length >= 2
|
|
303
|
+
? fileParts.slice(0, 2).join('/')
|
|
304
|
+
: fileParts[0];
|
|
305
|
+
if (allowedTopDirs.has(fileTopDir) || allowedTopDirs.has(fileParts[0])) {
|
|
306
|
+
pathsToAdd.push(normalizedFile);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
if (pathsToAdd.length === 0) {
|
|
311
|
+
return {
|
|
312
|
+
canExpand: false,
|
|
313
|
+
expandedPaths: currentAllowedPaths,
|
|
314
|
+
addedPaths: [],
|
|
315
|
+
reason: `Cannot expand: ${notAllowedViolations.length} file(s) in unrelated directories`,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
if (pathsToAdd.length > maxExpansions) {
|
|
319
|
+
return {
|
|
320
|
+
canExpand: false,
|
|
321
|
+
expandedPaths: currentAllowedPaths,
|
|
322
|
+
addedPaths: [],
|
|
323
|
+
reason: `Cannot expand: ${pathsToAdd.length} files need expansion (max: ${maxExpansions})`,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
const expandedPaths = [...new Set([...currentAllowedPaths, ...pathsToAdd])];
|
|
327
|
+
return {
|
|
328
|
+
canExpand: true,
|
|
329
|
+
expandedPaths,
|
|
330
|
+
addedPaths: pathsToAdd,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
// ---------------------------------------------------------------------------
|
|
334
|
+
// Git status parsing
|
|
335
|
+
// ---------------------------------------------------------------------------
|
|
336
|
+
/**
|
|
337
|
+
* Parse git status --porcelain output to get changed file paths.
|
|
338
|
+
*/
|
|
339
|
+
export function parseChangedFiles(statusOutput) {
|
|
340
|
+
if (!statusOutput.trim())
|
|
341
|
+
return [];
|
|
342
|
+
return statusOutput
|
|
343
|
+
.split('\n')
|
|
344
|
+
.filter(line => line.trim())
|
|
345
|
+
.map(line => {
|
|
346
|
+
// Format: XY filename or XY original -> renamed
|
|
347
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
348
|
+
const match = line.match(/^..\s+(.+?)(?:\s+->\s+(.+))?$/);
|
|
349
|
+
if (!match)
|
|
350
|
+
return null;
|
|
351
|
+
return match[2] || match[1];
|
|
352
|
+
})
|
|
353
|
+
.filter((f) => f !== null);
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/scope/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scout service - Analyzes codebases and generates improvement proposals
|
|
3
|
+
*
|
|
4
|
+
* This is the core scout implementation that works with any DatabaseAdapter.
|
|
5
|
+
*/
|
|
6
|
+
import type { ScoutOptions, ScoutResult } from './types.js';
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
export { buildScoutPrompt, buildCategoryPrompt } from './prompt.js';
|
|
9
|
+
export { runClaude, parseClaudeOutput, ClaudeScoutBackend, CodexScoutBackend, CodexMcpScoutBackend, type ScoutBackend } from './runner.js';
|
|
10
|
+
export { KimiScoutBackend } from './kimi-runner.js';
|
|
11
|
+
export { OpenAILocalScoutBackend } from './openai-local-runner.js';
|
|
12
|
+
export { McpBatchServer } from './mcp-batch-server.js';
|
|
13
|
+
export { scanFiles, batchFiles, batchFilesByTokens, batchFilesByModule, estimateTokens, type ScannedFile, type ModuleGroup } from './scanner.js';
|
|
14
|
+
/**
|
|
15
|
+
* Scout a codebase for improvement opportunities
|
|
16
|
+
*/
|
|
17
|
+
export declare function scout(options: ScoutOptions): Promise<ScoutResult>;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scout/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAIZ,MAAM,YAAY,CAAC;AAEpB,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3I,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAiOjJ;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA6QvE"}
|