@promptci/core 0.0.1 → 0.1.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/LICENSE +201 -201
- package/README.md +29 -30
- package/dist/agent-practices.d.ts +2 -0
- package/dist/agent-practices.d.ts.map +1 -1
- package/dist/agent-practices.js +91 -51
- package/dist/agent-practices.js.map +1 -1
- package/dist/ai-config.d.ts +139 -0
- package/dist/ai-config.d.ts.map +1 -0
- package/dist/ai-config.js +523 -0
- package/dist/ai-config.js.map +1 -0
- package/dist/baseline.d.ts +17 -1
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +5 -1
- package/dist/baseline.js.map +1 -1
- package/dist/buried-critical.d.ts +17 -0
- package/dist/buried-critical.d.ts.map +1 -0
- package/dist/buried-critical.js +112 -0
- package/dist/buried-critical.js.map +1 -0
- package/dist/canonical-owner.d.ts.map +1 -1
- package/dist/canonical-owner.js +18 -8
- package/dist/canonical-owner.js.map +1 -1
- package/dist/command-validity.d.ts.map +1 -1
- package/dist/command-validity.js +53 -74
- package/dist/command-validity.js.map +1 -1
- package/dist/conflicts.d.ts.map +1 -1
- package/dist/conflicts.js +1 -42
- package/dist/conflicts.js.map +1 -1
- package/dist/context-analysis.d.ts.map +1 -1
- package/dist/context-analysis.js +13 -2
- package/dist/context-analysis.js.map +1 -1
- package/dist/context-bloat.d.ts +19 -0
- package/dist/context-bloat.d.ts.map +1 -1
- package/dist/context-bloat.js +82 -9
- package/dist/context-bloat.js.map +1 -1
- package/dist/context-optimizer.d.ts.map +1 -1
- package/dist/context-optimizer.js +15 -54
- package/dist/context-optimizer.js.map +1 -1
- package/dist/copilot-instructions-detector.d.ts +24 -0
- package/dist/copilot-instructions-detector.d.ts.map +1 -0
- package/dist/copilot-instructions-detector.js +145 -0
- package/dist/copilot-instructions-detector.js.map +1 -0
- package/dist/cursor-rules-detector.d.ts +17 -0
- package/dist/cursor-rules-detector.d.ts.map +1 -0
- package/dist/cursor-rules-detector.js +110 -0
- package/dist/cursor-rules-detector.js.map +1 -0
- package/dist/custom-rules.d.ts +52 -0
- package/dist/custom-rules.d.ts.map +1 -0
- package/dist/custom-rules.js +298 -0
- package/dist/custom-rules.js.map +1 -0
- package/dist/dead-references.js +11 -9
- package/dist/dead-references.js.map +1 -1
- package/dist/detectors.d.ts +1 -3
- package/dist/detectors.d.ts.map +1 -1
- package/dist/detectors.js +46 -53
- package/dist/detectors.js.map +1 -1
- package/dist/duplicates.d.ts.map +1 -1
- package/dist/duplicates.js +10 -5
- package/dist/duplicates.js.map +1 -1
- package/dist/evidence.d.ts +28 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +38 -0
- package/dist/evidence.js.map +1 -0
- package/dist/fix-engine.d.ts +11 -0
- package/dist/fix-engine.d.ts.map +1 -1
- package/dist/fix-engine.js +88 -71
- package/dist/fix-engine.js.map +1 -1
- package/dist/frameworks/python.d.ts.map +1 -1
- package/dist/frameworks/python.js +5 -2
- package/dist/frameworks/python.js.map +1 -1
- package/dist/health-score.d.ts.map +1 -1
- package/dist/health-score.js +1 -0
- package/dist/health-score.js.map +1 -1
- package/dist/hooks-settings-detector.d.ts +17 -0
- package/dist/hooks-settings-detector.d.ts.map +1 -0
- package/dist/hooks-settings-detector.js +228 -0
- package/dist/hooks-settings-detector.js.map +1 -0
- package/dist/index.d.ts +22 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -6
- package/dist/index.js.map +1 -1
- package/dist/manifest-consistency.d.ts +6 -0
- package/dist/manifest-consistency.d.ts.map +1 -1
- package/dist/manifest-consistency.js +26 -5
- package/dist/manifest-consistency.js.map +1 -1
- package/dist/markdown-fences.d.ts +112 -0
- package/dist/markdown-fences.d.ts.map +1 -0
- package/dist/markdown-fences.js +174 -0
- package/dist/markdown-fences.js.map +1 -0
- package/dist/mcp-config-detector.d.ts +20 -0
- package/dist/mcp-config-detector.d.ts.map +1 -0
- package/dist/mcp-config-detector.js +237 -0
- package/dist/mcp-config-detector.js.map +1 -0
- package/dist/missing-context.d.ts.map +1 -1
- package/dist/missing-context.js +2 -52
- package/dist/missing-context.js.map +1 -1
- package/dist/model-budgets.d.ts +69 -0
- package/dist/model-budgets.d.ts.map +1 -0
- package/dist/model-budgets.js +110 -0
- package/dist/model-budgets.js.map +1 -0
- package/dist/negative-instructions.d.ts +26 -0
- package/dist/negative-instructions.d.ts.map +1 -0
- package/dist/negative-instructions.js +174 -0
- package/dist/negative-instructions.js.map +1 -0
- package/dist/path-containment.d.ts +12 -0
- package/dist/path-containment.d.ts.map +1 -0
- package/dist/path-containment.js +53 -0
- package/dist/path-containment.js.map +1 -0
- package/dist/project-type.d.ts +12 -2
- package/dist/project-type.d.ts.map +1 -1
- package/dist/project-type.js +25 -12
- package/dist/project-type.js.map +1 -1
- package/dist/prompt-cache.d.ts.map +1 -1
- package/dist/prompt-cache.js +26 -19
- package/dist/prompt-cache.js.map +1 -1
- package/dist/promptci-gitignore.d.ts +34 -0
- package/dist/promptci-gitignore.d.ts.map +1 -0
- package/dist/promptci-gitignore.js +42 -0
- package/dist/promptci-gitignore.js.map +1 -0
- package/dist/repo-context.d.ts +27 -0
- package/dist/repo-context.d.ts.map +1 -1
- package/dist/repo-context.js +42 -11
- package/dist/repo-context.js.map +1 -1
- package/dist/report.d.ts +1 -0
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +132 -61
- package/dist/report.js.map +1 -1
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +7 -3
- package/dist/scan.js.map +1 -1
- package/dist/scanner.d.ts +13 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +49 -37
- package/dist/scanner.js.map +1 -1
- package/dist/security-pack.d.ts +20 -0
- package/dist/security-pack.d.ts.map +1 -1
- package/dist/security-pack.js +27 -10
- package/dist/security-pack.js.map +1 -1
- package/dist/skills-detector.d.ts +19 -0
- package/dist/skills-detector.d.ts.map +1 -0
- package/dist/skills-detector.js +203 -0
- package/dist/skills-detector.js.map +1 -0
- package/dist/stale-instructions.d.ts +4 -1
- package/dist/stale-instructions.d.ts.map +1 -1
- package/dist/stale-instructions.js +51 -54
- package/dist/stale-instructions.js.map +1 -1
- package/dist/subagents-detector.d.ts +19 -0
- package/dist/subagents-detector.d.ts.map +1 -0
- package/dist/subagents-detector.js +155 -0
- package/dist/subagents-detector.js.map +1 -0
- package/dist/suppression.d.ts.map +1 -1
- package/dist/suppression.js +11 -45
- package/dist/suppression.js.map +1 -1
- package/dist/types.d.ts +28 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +25 -1
- package/dist/types.js.map +1 -1
- package/dist/vague-guidance.d.ts +15 -2
- package/dist/vague-guidance.d.ts.map +1 -1
- package/dist/vague-guidance.js +42 -40
- package/dist/vague-guidance.js.map +1 -1
- package/dist/windsurf-detector.d.ts +22 -0
- package/dist/windsurf-detector.d.ts.map +1 -0
- package/dist/windsurf-detector.js +87 -0
- package/dist/windsurf-detector.js.map +1 -0
- package/dist/within-section-dedup.d.ts +16 -0
- package/dist/within-section-dedup.d.ts.map +1 -0
- package/dist/within-section-dedup.js +153 -0
- package/dist/within-section-dedup.js.map +1 -0
- package/package.json +11 -8
- package/dist/cheap-model-routing.d.ts +0 -4
- package/dist/cheap-model-routing.d.ts.map +0 -1
- package/dist/cheap-model-routing.js +0 -43
- package/dist/cheap-model-routing.js.map +0 -1
- package/dist/cli-output-filter.d.ts +0 -16
- package/dist/cli-output-filter.d.ts.map +0 -1
- package/dist/cli-output-filter.js +0 -88
- package/dist/cli-output-filter.js.map +0 -1
- package/dist/context-cost.d.ts +0 -4
- package/dist/context-cost.d.ts.map +0 -1
- package/dist/context-cost.js +0 -70
- package/dist/context-cost.js.map +0 -1
- package/dist/context-recommender.d.ts +0 -3
- package/dist/context-recommender.d.ts.map +0 -1
- package/dist/context-recommender.js +0 -329
- package/dist/context-recommender.js.map +0 -1
- package/dist/llm.d.ts +0 -6
- package/dist/llm.d.ts.map +0 -1
- package/dist/llm.js +0 -67
- package/dist/llm.js.map +0 -1
- package/dist/mcp-detector.d.ts +0 -4
- package/dist/mcp-detector.d.ts.map +0 -1
- package/dist/mcp-detector.js +0 -131
- package/dist/mcp-detector.js.map +0 -1
- package/dist/native-tool-preference.d.ts +0 -20
- package/dist/native-tool-preference.d.ts.map +0 -1
- package/dist/native-tool-preference.js +0 -94
- package/dist/native-tool-preference.js.map +0 -1
- package/dist/output-verbosity.d.ts +0 -3
- package/dist/output-verbosity.d.ts.map +0 -1
- package/dist/output-verbosity.js +0 -83
- package/dist/output-verbosity.js.map +0 -1
- package/dist/product-boundary.d.ts +0 -11
- package/dist/product-boundary.d.ts.map +0 -1
- package/dist/product-boundary.js +0 -301
- package/dist/product-boundary.js.map +0 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Config Detector (issue #23)
|
|
3
|
+
*
|
|
4
|
+
* Audits `.mcp.json` (project-scoped MCP server definitions):
|
|
5
|
+
*
|
|
6
|
+
* - Invalid JSON: the file will not load.
|
|
7
|
+
* - Duplicate server names: JSON keeps only the last, silently dropping a
|
|
8
|
+
* server the author thinks is configured.
|
|
9
|
+
* - Placeholder env values never filled in (`"<your-key>"`, `"changeme"`, …).
|
|
10
|
+
* - stdio servers whose local `command`/script path does not exist, and
|
|
11
|
+
* servers declaring neither a `command` nor a `url`.
|
|
12
|
+
*
|
|
13
|
+
* PATH lookups for bare binaries (`npx`, `node`, `docker`) are intentionally out
|
|
14
|
+
* of scope — they are not verifiable deterministically or offline. Only
|
|
15
|
+
* repo-local paths are checked. Deterministic and offline.
|
|
16
|
+
*/
|
|
17
|
+
import type { RepoContext } from './repo-context.js';
|
|
18
|
+
import type { PromptCiIssue } from './types.js';
|
|
19
|
+
export declare function detectMcpConfig(context: RepoContext): PromptCiIssue[];
|
|
20
|
+
//# sourceMappingURL=mcp-config-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config-detector.d.ts","sourceRoot":"","sources":["../src/mcp-config-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA2FhD,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CAqGrE"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Config Detector (issue #23)
|
|
3
|
+
*
|
|
4
|
+
* Audits `.mcp.json` (project-scoped MCP server definitions):
|
|
5
|
+
*
|
|
6
|
+
* - Invalid JSON: the file will not load.
|
|
7
|
+
* - Duplicate server names: JSON keeps only the last, silently dropping a
|
|
8
|
+
* server the author thinks is configured.
|
|
9
|
+
* - Placeholder env values never filled in (`"<your-key>"`, `"changeme"`, …).
|
|
10
|
+
* - stdio servers whose local `command`/script path does not exist, and
|
|
11
|
+
* servers declaring neither a `command` nor a `url`.
|
|
12
|
+
*
|
|
13
|
+
* PATH lookups for bare binaries (`npx`, `node`, `docker`) are intentionally out
|
|
14
|
+
* of scope — they are not verifiable deterministically or offline. Only
|
|
15
|
+
* repo-local paths are checked. Deterministic and offline.
|
|
16
|
+
*/
|
|
17
|
+
import { readTextWithinRoot, isFileWithinRoot, shortHash, lineOf, withScannerPaths, SCRIPT_EXT_RE, aiConfigIssue as base, } from './ai-config.js';
|
|
18
|
+
function id(kind, key) {
|
|
19
|
+
return `ai-config-mcp-${kind}-${shortHash(key)}`;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Return the direct-child keys of the JSON object whose opening `{` is at
|
|
23
|
+
* `braceStart`, in source order. A string literal counts as a key only when it
|
|
24
|
+
* sits at the object's own depth and is immediately followed by `:`, so nested
|
|
25
|
+
* objects and value strings are ignored. Used to spot duplicate server names,
|
|
26
|
+
* which `JSON.parse` collapses to one.
|
|
27
|
+
*/
|
|
28
|
+
function directChildKeys(raw, braceStart) {
|
|
29
|
+
const keys = [];
|
|
30
|
+
let depth = 0;
|
|
31
|
+
let inStr = false;
|
|
32
|
+
let esc = false;
|
|
33
|
+
let strChars = '';
|
|
34
|
+
let pendingKey = null;
|
|
35
|
+
for (let i = braceStart; i < raw.length; i++) {
|
|
36
|
+
const c = raw[i];
|
|
37
|
+
if (inStr) {
|
|
38
|
+
if (esc) {
|
|
39
|
+
esc = false;
|
|
40
|
+
strChars += c;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (c === '\\') {
|
|
44
|
+
esc = true;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (c === '"') {
|
|
48
|
+
inStr = false;
|
|
49
|
+
if (depth === 1)
|
|
50
|
+
pendingKey = strChars;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
strChars += c;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (c === '"') {
|
|
57
|
+
inStr = true;
|
|
58
|
+
strChars = '';
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (c === '{' || c === '[') {
|
|
62
|
+
depth++;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (c === '}' || c === ']') {
|
|
66
|
+
depth--;
|
|
67
|
+
if (depth === 0)
|
|
68
|
+
break;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (c === ':') {
|
|
72
|
+
if (depth === 1 && pendingKey !== null) {
|
|
73
|
+
keys.push(pendingKey);
|
|
74
|
+
pendingKey = null;
|
|
75
|
+
}
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (c === ',') {
|
|
79
|
+
pendingKey = null;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return keys;
|
|
84
|
+
}
|
|
85
|
+
function findDuplicateServerNames(raw) {
|
|
86
|
+
const marker = /"mcpServers"\s*:/.exec(raw);
|
|
87
|
+
if (!marker)
|
|
88
|
+
return [];
|
|
89
|
+
const braceStart = raw.indexOf('{', marker.index + marker[0].length);
|
|
90
|
+
if (braceStart < 0)
|
|
91
|
+
return [];
|
|
92
|
+
const keys = directChildKeys(raw, braceStart);
|
|
93
|
+
const counts = new Map();
|
|
94
|
+
for (const k of keys)
|
|
95
|
+
counts.set(k, (counts.get(k) ?? 0) + 1);
|
|
96
|
+
return [...counts.entries()].filter(([, n]) => n > 1).map(([k]) => k).sort();
|
|
97
|
+
}
|
|
98
|
+
function isPlaceholderEnvValue(value) {
|
|
99
|
+
const v = value.trim();
|
|
100
|
+
if (v === '')
|
|
101
|
+
return true;
|
|
102
|
+
if (/^<.+>$/.test(v))
|
|
103
|
+
return true;
|
|
104
|
+
if (/^(your|my)[-_ ]/i.test(v))
|
|
105
|
+
return true;
|
|
106
|
+
if (/^x{3,}$/i.test(v))
|
|
107
|
+
return true;
|
|
108
|
+
if (/^\.\.\.+$/.test(v))
|
|
109
|
+
return true;
|
|
110
|
+
if (/\b(changeme|change[-_]me|replace[-_]?me|placeholder|example[-_]?key|todo|tbd)\b/i.test(v))
|
|
111
|
+
return true;
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
/** Local paths referenced by a server's command/args that we can verify exist. */
|
|
115
|
+
function localPathRefs(command, args) {
|
|
116
|
+
const refs = new Set();
|
|
117
|
+
const consider = (token, requireRelative) => {
|
|
118
|
+
const t = token.replace(/^['"]|['"]$/g, '');
|
|
119
|
+
if (!t || t.startsWith('-') || t.includes('$') || /[<>{}*?]/.test(t))
|
|
120
|
+
return;
|
|
121
|
+
if (t.startsWith('/') || /^[a-zA-Z]:[\\/]/.test(t) || /^https?:/i.test(t))
|
|
122
|
+
return;
|
|
123
|
+
if (t.includes('..'))
|
|
124
|
+
return;
|
|
125
|
+
const relative = t.startsWith('./') || t.startsWith('.claude/');
|
|
126
|
+
if (requireRelative && !relative)
|
|
127
|
+
return;
|
|
128
|
+
if (relative || (t.includes('/') && SCRIPT_EXT_RE.test(t)))
|
|
129
|
+
refs.add(t.replace(/\\/g, '/'));
|
|
130
|
+
};
|
|
131
|
+
if (command)
|
|
132
|
+
consider(command, false);
|
|
133
|
+
for (const a of args)
|
|
134
|
+
consider(a, true);
|
|
135
|
+
return [...refs];
|
|
136
|
+
}
|
|
137
|
+
export function detectMcpConfig(context) {
|
|
138
|
+
const issues = [];
|
|
139
|
+
for (const filePath of context.aiConfig.mcp) {
|
|
140
|
+
const raw = readTextWithinRoot(context.repoRoot, filePath);
|
|
141
|
+
if (raw === undefined)
|
|
142
|
+
continue;
|
|
143
|
+
let parsed;
|
|
144
|
+
try {
|
|
145
|
+
parsed = JSON.parse(raw);
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
issues.push(base({
|
|
149
|
+
id: id('invalid-json', filePath),
|
|
150
|
+
severity: 'high',
|
|
151
|
+
title: 'MCP config is not valid JSON',
|
|
152
|
+
summary: `${filePath} could not be parsed as JSON, so no MCP servers will load from it.`,
|
|
153
|
+
filePaths: [filePath],
|
|
154
|
+
locations: [{ filePath, startLine: 1, endLine: 1 }],
|
|
155
|
+
evidence: [`Parse error: ${err.message}`],
|
|
156
|
+
recommendation: 'Fix the JSON syntax (no trailing commas, no comments).',
|
|
157
|
+
confidence: 0.95,
|
|
158
|
+
}));
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
|
|
162
|
+
continue;
|
|
163
|
+
const servers = parsed.mcpServers;
|
|
164
|
+
if (typeof servers !== 'object' || servers === null || Array.isArray(servers))
|
|
165
|
+
continue;
|
|
166
|
+
// Duplicate server names (JSON.parse silently keeps the last).
|
|
167
|
+
for (const dup of findDuplicateServerNames(raw)) {
|
|
168
|
+
issues.push(base({
|
|
169
|
+
id: id('duplicate-name', `${filePath}|${dup}`),
|
|
170
|
+
title: 'Duplicate MCP server name',
|
|
171
|
+
summary: `${filePath} defines the server "${dup}" more than once. JSON keeps only the last definition and silently discards the earlier one.`,
|
|
172
|
+
filePaths: [filePath],
|
|
173
|
+
locations: [{ filePath, startLine: lineOf(raw, `"${dup}"`), endLine: lineOf(raw, `"${dup}"`) }],
|
|
174
|
+
evidence: [`Duplicated server name: ${dup}`],
|
|
175
|
+
recommendation: 'Rename or remove the duplicate so each server name is unique.',
|
|
176
|
+
confidence: 0.85,
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
for (const [name, rawDef] of Object.entries(servers)) {
|
|
180
|
+
if (typeof rawDef !== 'object' || rawDef === null || Array.isArray(rawDef))
|
|
181
|
+
continue;
|
|
182
|
+
const def = rawDef;
|
|
183
|
+
const command = typeof def.command === 'string' ? def.command : undefined;
|
|
184
|
+
const url = typeof def.url === 'string' ? def.url : undefined;
|
|
185
|
+
const args = Array.isArray(def.args) ? def.args.filter((a) => typeof a === 'string') : [];
|
|
186
|
+
const serverLine = lineOf(raw, `"${name}"`);
|
|
187
|
+
// A server needs either a command (stdio) or a url (http/sse).
|
|
188
|
+
if (!command && !url) {
|
|
189
|
+
issues.push(base({
|
|
190
|
+
id: id('no-command-or-url', `${filePath}|${name}`),
|
|
191
|
+
title: 'MCP server has neither a command nor a url',
|
|
192
|
+
summary: `${filePath}: server "${name}" defines no \`command\` (stdio) and no \`url\` (http/sse), so it cannot start.`,
|
|
193
|
+
filePaths: [filePath],
|
|
194
|
+
locations: [{ filePath, startLine: serverLine, endLine: serverLine }],
|
|
195
|
+
evidence: [`Server: ${name}`, `Keys: ${Object.keys(def).join(', ') || '(none)'}`],
|
|
196
|
+
recommendation: 'Add a `command` (with `args`) for a stdio server, or a `url` for a remote server.',
|
|
197
|
+
confidence: 0.8,
|
|
198
|
+
}));
|
|
199
|
+
}
|
|
200
|
+
// Placeholder env values that were never filled in.
|
|
201
|
+
if (typeof def.env === 'object' && def.env !== null && !Array.isArray(def.env)) {
|
|
202
|
+
for (const [envKey, envVal] of Object.entries(def.env)) {
|
|
203
|
+
if (typeof envVal !== 'string' || !isPlaceholderEnvValue(envVal))
|
|
204
|
+
continue;
|
|
205
|
+
issues.push(base({
|
|
206
|
+
id: id('placeholder-env', `${filePath}|${name}|${envKey}`),
|
|
207
|
+
title: 'MCP server env value is an unfilled placeholder',
|
|
208
|
+
summary: `${filePath}: server "${name}" sets \`env.${envKey}\` to a placeholder (${JSON.stringify(envVal)}) that was never replaced with a real value.`,
|
|
209
|
+
filePaths: [filePath],
|
|
210
|
+
locations: [{ filePath, startLine: lineOf(raw, `"${envKey}"`), endLine: lineOf(raw, `"${envKey}"`) }],
|
|
211
|
+
evidence: [`${envKey}: ${envVal}`],
|
|
212
|
+
recommendation: 'Replace the placeholder with a real value, or reference a shell variable like `"${' + envKey + '}"`.',
|
|
213
|
+
confidence: 0.7,
|
|
214
|
+
}));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Local command / script paths that do not exist.
|
|
218
|
+
for (const ref of localPathRefs(command, args)) {
|
|
219
|
+
if (isFileWithinRoot(context.repoRoot, ref))
|
|
220
|
+
continue;
|
|
221
|
+
issues.push(base({
|
|
222
|
+
id: id('missing-command', `${filePath}|${name}|${ref}`),
|
|
223
|
+
title: 'MCP server command path does not exist',
|
|
224
|
+
summary: `${filePath}: server "${name}" references the local path \`${ref}\`, which is not present in the repository.`,
|
|
225
|
+
filePaths: [filePath],
|
|
226
|
+
locations: [{ filePath, startLine: serverLine, endLine: serverLine }],
|
|
227
|
+
evidence: [`Referenced path: ${ref}`, `Server: ${name}`],
|
|
228
|
+
recommendation: 'Fix the path, add the missing file, or install the server so the path resolves.',
|
|
229
|
+
confidence: 0.7,
|
|
230
|
+
}));
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Scanner-form paths so inline suppressions can match (see withScannerPaths).
|
|
235
|
+
return withScannerPaths(context.repoRoot, issues);
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=mcp-config-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config-detector.js","sourceRoot":"","sources":["../src/mcp-config-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"missing-context.d.ts","sourceRoot":"","sources":["../src/missing-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"missing-context.d.ts","sourceRoot":"","sources":["../src/missing-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA4c9E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,eAAe,EAAE,EACxB,WAAW,EAAE,WAAW,GACvB,aAAa,EAAE,CAuDjB"}
|
package/dist/missing-context.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* All findings are heuristic — wording is cautious.
|
|
12
12
|
*/
|
|
13
13
|
import * as crypto from 'node:crypto';
|
|
14
|
+
import { fencedBlockContents } from './markdown-fences.js';
|
|
14
15
|
const PROJECT_TYPE_RULES = {
|
|
15
16
|
unity: {
|
|
16
17
|
// Any one of these signals Unity-specific coverage
|
|
@@ -75,57 +76,6 @@ function keywordPresent(content, keyword) {
|
|
|
75
76
|
return new RegExp(`\\b${kw}\\b`).test(content);
|
|
76
77
|
}
|
|
77
78
|
// ── Global checks (independent of project type) ───────────────────────────────
|
|
78
|
-
/**
|
|
79
|
-
* MC2: extracts the CONTENT of closed fenced code blocks (``` or ~~~,
|
|
80
|
-
* matching fence char/length per CommonMark) so setup-command patterns can be
|
|
81
|
-
* tested against real block content only.
|
|
82
|
-
*
|
|
83
|
-
* The old approach used a single regex per pattern like
|
|
84
|
-
* `` ` ```[\s\S]*?command` `` (non-greedy but unbounded) — it could skip
|
|
85
|
-
* straight past the block's OWN closing fence and match a command mentioned
|
|
86
|
-
* arbitrarily later in the file, in prose or in a completely different code
|
|
87
|
-
* block. A tempered-dot rewrite (`` `(?:(?!```)[\s\S])*?` ``) looked like a
|
|
88
|
-
* fix but has the same underlying flaw for a file with an EVEN number of
|
|
89
|
-
* fences: the regex engine, unable to start a match at the true opening
|
|
90
|
-
* fence (blocked by the closing fence ahead), backtracks to start at the
|
|
91
|
-
* CLOSING fence instead and treats IT as a new opener — with no third fence
|
|
92
|
-
* left to bound it, everything after is fair game again. Regex alone can't
|
|
93
|
-
* reliably track "am I inside a block" across a variable number of fences;
|
|
94
|
-
* a real line-by-line scan (the same fence-tracking approach used 5x
|
|
95
|
-
* elsewhere in this codebase) does.
|
|
96
|
-
*/
|
|
97
|
-
function extractFencedBlockContents(content) {
|
|
98
|
-
const lines = content.split('\n');
|
|
99
|
-
const blocks = [];
|
|
100
|
-
let inBlock = false;
|
|
101
|
-
let fenceChar = null;
|
|
102
|
-
let fenceLen = 0;
|
|
103
|
-
let current = [];
|
|
104
|
-
for (const line of lines) {
|
|
105
|
-
if (!inBlock) {
|
|
106
|
-
const openMatch = /^ {0,3}([`~]{3,})/.exec(line);
|
|
107
|
-
if (openMatch) {
|
|
108
|
-
inBlock = true;
|
|
109
|
-
fenceChar = openMatch[1][0] ?? null;
|
|
110
|
-
fenceLen = openMatch[1].length;
|
|
111
|
-
current = [];
|
|
112
|
-
}
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
const closeMatch = /^ {0,3}([`~]{3,})\s*$/.exec(line);
|
|
116
|
-
if (closeMatch && closeMatch[1][0] === fenceChar && closeMatch[1].length >= fenceLen) {
|
|
117
|
-
inBlock = false;
|
|
118
|
-
blocks.push(current.join('\n'));
|
|
119
|
-
fenceChar = null;
|
|
120
|
-
fenceLen = 0;
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
current.push(line);
|
|
124
|
-
}
|
|
125
|
-
// An unclosed trailing fence's partial content is intentionally excluded —
|
|
126
|
-
// this check only counts CONFIRMED, closed blocks as real documentation.
|
|
127
|
-
return blocks.join('\n');
|
|
128
|
-
}
|
|
129
79
|
/** Patterns that only count when found INSIDE a fenced code block's content. */
|
|
130
80
|
const FENCED_SETUP_COMMAND_PATTERNS = [
|
|
131
81
|
/(npm|pnpm|yarn|uv)\s+(install|ci|run|sync|test|build|lint|add)/,
|
|
@@ -191,7 +141,7 @@ const SECURITY_PATTERNS = [
|
|
|
191
141
|
];
|
|
192
142
|
function checkSetupCommands(files) {
|
|
193
143
|
const combined = files.map((f) => f.content).join('\n');
|
|
194
|
-
const fencedContent =
|
|
144
|
+
const fencedContent = fencedBlockContents(combined);
|
|
195
145
|
const hasSetup = FENCED_SETUP_COMMAND_PATTERNS.some((p) => p.test(fencedContent)) ||
|
|
196
146
|
PROSE_SETUP_COMMAND_PATTERNS.some((p) => p.test(combined));
|
|
197
147
|
if (hasSetup)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"missing-context.js","sourceRoot":"","sources":["../src/missing-context.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"missing-context.js","sourceRoot":"","sources":["../src/missing-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,kBAAkB,GAGpB;IACF,KAAK,EAAE;QACL,mDAAmD;QACnD,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,CAAC;QAClF,KAAK,EAAE,OAAO;QACd,cAAc,EAAE,CAAC;KAClB;IACD,UAAU,EAAE;QACV,mEAAmE;QACnE,QAAQ,EAAE;YACR,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc;YACjF,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU;YAChF,MAAM,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,YAAY;QACnB,cAAc,EAAE,CAAC;KAClB;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAC;QAClG,KAAK,EAAE,MAAM;QACb,cAAc,EAAE,CAAC;KAClB;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,CAAC;QACjG,KAAK,EAAE,SAAS;QAChB,cAAc,EAAE,CAAC;KAClB;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC;QACzE,KAAK,EAAE,QAAQ;QACf,cAAc,EAAE,CAAC;KAClB;IACD,EAAE,EAAE;QACF,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;QACrD,KAAK,EAAE,IAAI;QACX,cAAc,EAAE,CAAC;KAClB;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,CAAC;QACjE,KAAK,EAAE,MAAM;QACb,cAAc,EAAE,CAAC;KAClB;CACF,CAAC;AAEF,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,OAAO,mBAAmB,IAAI,EAAE,CAAC;AACnC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,OAAe;IACtD,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtD,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,iFAAiF;AAGjF,gFAAgF;AAChF,MAAM,6BAA6B,GAAG;IACpC,gEAAgE;IAChE,+BAA+B;IAC/B,6BAA6B;IAC7B,sBAAsB;IACtB,mBAAmB;IACnB,+BAA+B;IAC/B,kBAAkB;IAClB,iCAAiC;IACjC,yCAAyC;IACzC,sBAAsB;IACtB,YAAY;CACb,CAAC;AAEF;;;;;GAKG;AACH,MAAM,4BAA4B,GAAG;IACnC,0EAA0E;IAC1E,uDAAuD;IACvD,8CAA8C;IAC9C,oCAAoC;IACpC,uBAAuB;IACvB,kCAAkC;IAClC,WAAW;IACX,mFAAmF;IACnF,kCAAkC;IAClC,0CAA0C;IAC1C,4CAA4C;IAC5C,mCAAmC;IACnC,kCAAkC;IAClC,sDAAsD;IACtD,sCAAsC;IACtC,oBAAoB;IACpB,gCAAgC;IAChC,oBAAoB;IACpB,4CAA4C;IAC5C,aAAa;IACb,yBAAyB;IACzB,4BAA4B;IAC5B,4BAA4B;CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,iBAAiB,GAAG;IACxB,6DAA6D;IAC7D,6DAA6D;IAC7D,eAAe;IACf,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,cAAc;IACd,sCAAsC;IACtC,yCAAyC;IACzC,2FAA2F;IAC3F,mCAAmC;IACnC,6CAA6C;CAC9C,CAAC;AAEF,SAAS,kBAAkB,CAAC,KAAwB;IAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,QAAQ,GACZ,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,wBAAwB,CAAC;QACrC,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,iBAAiB;QAC3B,KAAK,EAAE,uCAAuC;QAC9C,OAAO,EACL,4FAA4F;YAC5F,qEAAqE;QACvE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,CAAC,+DAA+D,CAAC;QAC3E,cAAc,EACZ,kGAAkG;YAClG,iDAAiD;QACnD,UAAU,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,2BAA2B,GAAG;IAClC,8GAA8G;IAC9G,SAAS;IACT,+FAA+F;CAChG,CAAC;AAEF,MAAM,2BAA2B,GAAG;IAClC,wCAAwC;IACxC,kEAAkE;IAClE,yFAAyF;IACzF,oEAAoE;IACpE,gCAAgC;IAChC,wCAAwC;IACxC,uEAAuE;CACxE,CAAC;AAEF,SAAS,sBAAsB,CAAC,KAAwB;IACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAExD,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,IAAI,CAAC,oBAAoB;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,aAAa,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChF,IAAI,aAAa;QAAE,OAAO,IAAI,CAAC;IAE/B,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,4BAA4B,CAAC;QACzC,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,iBAAiB;QAC3B,KAAK,EAAE,kEAAkE;QACzE,OAAO,EACL,6EAA6E;YAC7E,6EAA6E;YAC7E,+EAA+E;YAC/E,2BAA2B;QAC7B,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,CAAC,mFAAmF,CAAC;QAC/F,cAAc,EACZ,sFAAsF;YACtF,+DAA+D;YAC/D,sEAAsE;QACxE,UAAU,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAwB;IAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,IAAI,WAAW;QAAE,OAAO,IAAI,CAAC;IAE7B,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,wBAAwB,CAAC;QACrC,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE,iBAAiB;QAC3B,KAAK,EAAE,4CAA4C;QACnD,OAAO,EACL,qGAAqG;YACrG,wFAAwF;QAC1F,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,CAAC,4DAA4D,CAAC;QACxE,cAAc,EACZ,0FAA0F;YAC1F,4EAA4E;QAC9E,UAAU,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,2BAA2B,GAAG;IAClC,sCAAsC;IACtC,6CAA6C;IAC7C,oBAAoB;IACpB,+BAA+B;IAC/B,+BAA+B;IAC/B,mEAAmE;IACnE,iCAAiC;CAClC,CAAC;AAEF;;;GAGG;AACH,MAAM,wBAAwB,GAAG;IAC/B,yFAAyF;IACzF,0DAA0D;IAC1D,kDAAkD;IAClD,yDAAyD;IACzD,4EAA4E;IAC5E,uEAAuE;IACvE,2DAA2D;CAC5D,CAAC;AAEF,SAAS,mBAAmB,CAAC,KAAwB;IACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnF,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,eAAe,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/E,IAAI,eAAe;QAAE,OAAO,IAAI,CAAC;IAEjC,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,yBAAyB,CAAC;QACtC,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,iBAAiB;QAC3B,KAAK,EAAE,iFAAiF;QACxF,OAAO,EACL,kHAAkH;YAClH,uGAAuG;YACvG,uEAAuE;QACzE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE;YACR,6HAA6H;SAC9H;QACD,cAAc,EACZ,iEAAiE;YACjE,+EAA+E;YAC/E,8CAA8C;QAChD,UAAU,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAEpD;;GAEG;AACH,MAAM,oBAAoB,GAAG;IAC3B,6FAA6F;IAC7F,mBAAmB;IACnB,wDAAwD;IACxD,0CAA0C;CAC3C,CAAC;AAEF,qEAAqE;AACrE,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IACvE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IACvE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IACvE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CACtE,CAAC,CAAC;AAEH,SAAS,eAAe,CAAC,KAAwB;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzE,IAAI,aAAa;QAAE,OAAO,IAAI,CAAC;IAE/B,gFAAgF;IAChF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,IAAI,CAAyB,CAAC;IAC9B,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IACrE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,yEAAyE;YACzE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEzD,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,sBAAsB,CAAC;QACnC,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE,iBAAiB;QAC3B,KAAK,EAAE,uEAAuE;QAC9E,OAAO,EACL,6BAA6B,WAAW,CAAC,IAAI,uCAAuC,QAAQ,IAAI;YAChG,sEAAsE;YACtE,oGAAoG;QACtG,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,8BAA8B,QAAQ,GAAG,CAAC;QACxE,cAAc,EACZ,oGAAoG;YACpG,iGAAiG;QACnG,UAAU,EAAE,GAAG;KAChB,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;GAQG;AACH,MAAM,iBAAiB,GAIlB;IACH;QACE,KAAK,EAAE,wBAAwB;QAC/B,QAAQ,EAAE;YACR,8FAA8F;SAC/F;QACD,cAAc,EACZ,kFAAkF;YAClF,kFAAkF;KACrF;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,yBAAyB,CAAC,KAAwB;IACzD,MAAM,cAAc,GAAG,CAAC,IAAqB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9F,MAAM,iBAAiB,GAAG,CAAC,IAAqB,EAAE,EAAE;QAClD,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,UAAU,KAAK,iCAAiC;YACrD,UAAU,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC;IAC5D,CAAC,CAAC;IACF,MAAM,wBAAwB,GAAG,CAAC,IAAqB,EAAE,EAAE,CACzD,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAEzF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAClD,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAE5B,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,iBAAiB,EAAE,CAAC;QACpE,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CACxC,CAAC;QACF,IAAI,CAAC,iBAAiB;YAAE,SAAS,CAAC,uCAAuC;QAEzE,MAAM,kBAAkB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACjD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CACxC,CAAC;QACF,IAAI,kBAAkB;YAAE,SAAS,CAAC,mCAAmC;QAErE,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,OAAO,CAAC,yBAAyB,KAAK,EAAE,CAAC;YAC7C,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,iBAAiB;YAC3B,KAAK,EAAE,yCAAyC,KAAK,EAAE;YACvD,OAAO,EACL,wCAAwC,KAAK,kCAAkC;gBAC/E,wEAAwE;YAC1E,SAAS,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;YAC7B,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;YAC3C,QAAQ,EAAE;gBACR,IAAI,KAAK,uFAAuF;aACjG;YACD,cAAc;YACd,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAwB,EACxB,WAAwB;IAExB,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,6EAA6E;IAC7E,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,UAAU;QAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAExC,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,aAAa;QAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE9C,6FAA6F;IAC7F,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,gBAAgB;QAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAEpD,uFAAuF;IACvF,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,mBAAmB;QAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAE1D,2EAA2E;IAC3E,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,WAAW;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE1C,yEAAyE;IACzE,MAAM,CAAC,IAAI,CAAC,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;IAEjD,6EAA6E;IAC7E,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAEvE,MAAM,KAAK,GAAG,kBAAkB,CAAC,WAA8C,CAAC,CAAC;IACjF,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IAE9E,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC;YACxB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,iBAAiB;YAC3B,KAAK,EAAE,WAAW,KAAK,CAAC,KAAK,mBAAmB;YAChD,OAAO,EACL,wBAAwB,KAAK,CAAC,KAAK,qDAAqD;gBACxF,OAAO,KAAK,CAAC,KAAK,gEAAgE;YACpF,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACnC,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,CAAC,+BAA+B,eAAe,GAAG,CAAC;YAC7D,cAAc,EACZ,0BAA0B,KAAK,CAAC,KAAK,iDAAiD;gBACtF,uFAAuF;YACzF,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model-aware context budgets (FEAT-012).
|
|
3
|
+
*
|
|
4
|
+
* The context-bloat detector measures always-loaded instruction cost in
|
|
5
|
+
* characters. A fixed default threshold is a blunt instrument: 30k characters
|
|
6
|
+
* of instructions is a large fraction of a small context window but a rounding
|
|
7
|
+
* error in a 1M-token one. A `targetModel` preset scales the warning/high
|
|
8
|
+
* thresholds to the model that will actually carry the instructions each turn.
|
|
9
|
+
*
|
|
10
|
+
* The presets are DERIVED from one small, maintainable table — each model's
|
|
11
|
+
* approximate context window — via a documented formula, so the only thing that
|
|
12
|
+
* can rot is the window map, and {@link MODEL_BUDGETS_REVIEW_BY} forces a
|
|
13
|
+
* periodic review before it does. Everything here is deterministic; nothing
|
|
14
|
+
* reads the clock (the staleness guard lives in a test, which may).
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Review-by date for the model table below. A test asserts the current date is
|
|
18
|
+
* before this — when it fails, the window map and this date must be refreshed
|
|
19
|
+
* so the presets cannot silently rot the way hard-coded model tables have
|
|
20
|
+
* before. Kept ~6 months out from the last refresh.
|
|
21
|
+
*
|
|
22
|
+
* Last refreshed: 2026-08-20 (windows from the @promptci/core `claude-api`
|
|
23
|
+
* reference snapshot dated 2026-06-24).
|
|
24
|
+
*/
|
|
25
|
+
export declare const MODEL_BUDGETS_REVIEW_BY = "2027-02-28";
|
|
26
|
+
/**
|
|
27
|
+
* Approximate context windows in tokens, used ONLY to scale instruction-budget
|
|
28
|
+
* heuristics — these are not exact spec sheets and are intentionally coarse.
|
|
29
|
+
* Refresh alongside {@link MODEL_BUDGETS_REVIEW_BY}.
|
|
30
|
+
*
|
|
31
|
+
* Claude windows are from the in-repo claude-api reference; the OpenAI and
|
|
32
|
+
* Google entries are rounded, conservative approximations for the coding
|
|
33
|
+
* assistants that consume these instruction files (Copilot, Gemini Code Assist).
|
|
34
|
+
*/
|
|
35
|
+
declare const MODEL_CONTEXT_WINDOWS: {
|
|
36
|
+
readonly 'claude-opus-5': 1000000;
|
|
37
|
+
readonly 'claude-opus-4-8': 1000000;
|
|
38
|
+
readonly 'claude-sonnet-5': 1000000;
|
|
39
|
+
readonly 'claude-sonnet-4-6': 1000000;
|
|
40
|
+
readonly 'claude-haiku-4-5': 200000;
|
|
41
|
+
readonly 'claude-fable-5': 1000000;
|
|
42
|
+
readonly 'gpt-5': 400000;
|
|
43
|
+
readonly 'gpt-5-mini': 400000;
|
|
44
|
+
readonly 'gemini-2.5-pro': 1000000;
|
|
45
|
+
readonly 'gemini-2.5-flash': 1000000;
|
|
46
|
+
};
|
|
47
|
+
export type TargetModel = keyof typeof MODEL_CONTEXT_WINDOWS;
|
|
48
|
+
/** Every recognised targetModel id, for validation and docs. */
|
|
49
|
+
export declare const TARGET_MODELS: TargetModel[];
|
|
50
|
+
export type ModelBudget = {
|
|
51
|
+
/** The approximate context window (tokens) the budget was derived from. */
|
|
52
|
+
contextWindowTokens: number;
|
|
53
|
+
/** Total instruction-char budget (context-bloat total warning threshold). */
|
|
54
|
+
contextBudget: number;
|
|
55
|
+
/** Per-file instruction-char budget (context-bloat per-file warning threshold). */
|
|
56
|
+
fileContextBudget: number;
|
|
57
|
+
};
|
|
58
|
+
/** Resolve a raw targetModel string (case-insensitive, alias-aware) to a known model, or undefined. */
|
|
59
|
+
export declare function resolveTargetModel(name: string): TargetModel | undefined;
|
|
60
|
+
/** Derive the char budgets for a known model from its context window. */
|
|
61
|
+
export declare function modelBudget(model: TargetModel): ModelBudget;
|
|
62
|
+
/**
|
|
63
|
+
* Resolve a targetModel string to its budget, or undefined when the name is not
|
|
64
|
+
* recognised. Callers that need to reject unknown names (the CLI config loader)
|
|
65
|
+
* should validate against {@link resolveTargetModel} first for a clear error.
|
|
66
|
+
*/
|
|
67
|
+
export declare function budgetForTargetModel(name: string): ModelBudget | undefined;
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=model-budgets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-budgets.d.ts","sourceRoot":"","sources":["../src/model-budgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,eAAe,CAAC;AAEpD;;;;;;;;GAQG;AACH,QAAA,MAAM,qBAAqB;;;;;;;;;;;CAcgB,CAAC;AAE5C,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,qBAAqB,CAAC;AAE7D,gEAAgE;AAChE,eAAO,MAAM,aAAa,EAAyC,WAAW,EAAE,CAAC;AA8BjF,MAAM,MAAM,WAAW,GAAG;IACxB,2EAA2E;IAC3E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,6EAA6E;IAC7E,aAAa,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAOF,uGAAuG;AACvG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CASxE;AAED,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAK3D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAG1E"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model-aware context budgets (FEAT-012).
|
|
3
|
+
*
|
|
4
|
+
* The context-bloat detector measures always-loaded instruction cost in
|
|
5
|
+
* characters. A fixed default threshold is a blunt instrument: 30k characters
|
|
6
|
+
* of instructions is a large fraction of a small context window but a rounding
|
|
7
|
+
* error in a 1M-token one. A `targetModel` preset scales the warning/high
|
|
8
|
+
* thresholds to the model that will actually carry the instructions each turn.
|
|
9
|
+
*
|
|
10
|
+
* The presets are DERIVED from one small, maintainable table — each model's
|
|
11
|
+
* approximate context window — via a documented formula, so the only thing that
|
|
12
|
+
* can rot is the window map, and {@link MODEL_BUDGETS_REVIEW_BY} forces a
|
|
13
|
+
* periodic review before it does. Everything here is deterministic; nothing
|
|
14
|
+
* reads the clock (the staleness guard lives in a test, which may).
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Review-by date for the model table below. A test asserts the current date is
|
|
18
|
+
* before this — when it fails, the window map and this date must be refreshed
|
|
19
|
+
* so the presets cannot silently rot the way hard-coded model tables have
|
|
20
|
+
* before. Kept ~6 months out from the last refresh.
|
|
21
|
+
*
|
|
22
|
+
* Last refreshed: 2026-08-20 (windows from the @promptci/core `claude-api`
|
|
23
|
+
* reference snapshot dated 2026-06-24).
|
|
24
|
+
*/
|
|
25
|
+
export const MODEL_BUDGETS_REVIEW_BY = '2027-02-28';
|
|
26
|
+
/**
|
|
27
|
+
* Approximate context windows in tokens, used ONLY to scale instruction-budget
|
|
28
|
+
* heuristics — these are not exact spec sheets and are intentionally coarse.
|
|
29
|
+
* Refresh alongside {@link MODEL_BUDGETS_REVIEW_BY}.
|
|
30
|
+
*
|
|
31
|
+
* Claude windows are from the in-repo claude-api reference; the OpenAI and
|
|
32
|
+
* Google entries are rounded, conservative approximations for the coding
|
|
33
|
+
* assistants that consume these instruction files (Copilot, Gemini Code Assist).
|
|
34
|
+
*/
|
|
35
|
+
const MODEL_CONTEXT_WINDOWS = {
|
|
36
|
+
// Anthropic Claude
|
|
37
|
+
'claude-opus-5': 1_000_000,
|
|
38
|
+
'claude-opus-4-8': 1_000_000,
|
|
39
|
+
'claude-sonnet-5': 1_000_000,
|
|
40
|
+
'claude-sonnet-4-6': 1_000_000,
|
|
41
|
+
'claude-haiku-4-5': 200_000,
|
|
42
|
+
'claude-fable-5': 1_000_000,
|
|
43
|
+
// OpenAI (GitHub Copilot)
|
|
44
|
+
'gpt-5': 400_000,
|
|
45
|
+
'gpt-5-mini': 400_000,
|
|
46
|
+
// Google Gemini (Gemini Code Assist)
|
|
47
|
+
'gemini-2.5-pro': 1_000_000,
|
|
48
|
+
'gemini-2.5-flash': 1_000_000,
|
|
49
|
+
};
|
|
50
|
+
/** Every recognised targetModel id, for validation and docs. */
|
|
51
|
+
export const TARGET_MODELS = Object.keys(MODEL_CONTEXT_WINDOWS);
|
|
52
|
+
/**
|
|
53
|
+
* Short family aliases → a representative current model, so users can write a
|
|
54
|
+
* friendly `targetModel: "claude"` instead of pinning an exact version.
|
|
55
|
+
*/
|
|
56
|
+
const MODEL_ALIASES = {
|
|
57
|
+
claude: 'claude-opus-5',
|
|
58
|
+
'claude-opus': 'claude-opus-5',
|
|
59
|
+
'claude-sonnet': 'claude-sonnet-5',
|
|
60
|
+
'claude-haiku': 'claude-haiku-4-5',
|
|
61
|
+
gpt: 'gpt-5',
|
|
62
|
+
openai: 'gpt-5',
|
|
63
|
+
copilot: 'gpt-5',
|
|
64
|
+
gemini: 'gemini-2.5-pro',
|
|
65
|
+
};
|
|
66
|
+
// ── Budget formula ──────────────────────────────────────────────────────────
|
|
67
|
+
// Warn when always-loaded instructions exceed a small fraction of the window.
|
|
68
|
+
// Chosen conservatively; tune here rather than per-model so the table stays a
|
|
69
|
+
// pure window map. Rationale for the constants:
|
|
70
|
+
// - CHARS_PER_TOKEN 4: PromptCI's repo-wide token estimate (chars / 4).
|
|
71
|
+
// - TOTAL_BUDGET_FRACTION 3%: instructions carried every turn should be a
|
|
72
|
+
// small slice of the window; 3% of 200k tokens ≈ the old 24k-char bar.
|
|
73
|
+
// - FILE_BUDGET_SHARE 35%: a single file past ~a third of the total budget is
|
|
74
|
+
// the dominant cost even when the total is fine.
|
|
75
|
+
const CHARS_PER_TOKEN = 4;
|
|
76
|
+
const TOTAL_BUDGET_FRACTION = 0.03;
|
|
77
|
+
const FILE_BUDGET_SHARE = 0.35;
|
|
78
|
+
/** Round to the nearest 1,000 chars so budgets read as tidy round numbers. */
|
|
79
|
+
function roundChars(n) {
|
|
80
|
+
return Math.round(n / 1_000) * 1_000;
|
|
81
|
+
}
|
|
82
|
+
/** Resolve a raw targetModel string (case-insensitive, alias-aware) to a known model, or undefined. */
|
|
83
|
+
export function resolveTargetModel(name) {
|
|
84
|
+
const key = name.trim().toLowerCase();
|
|
85
|
+
// hasOwnProperty, not `in`: the `in` operator checks the prototype chain
|
|
86
|
+
// too, so "constructor"/"toString"/"__proto__" would match and return an
|
|
87
|
+
// invalid model id, producing NaN budgets downstream.
|
|
88
|
+
if (Object.prototype.hasOwnProperty.call(MODEL_CONTEXT_WINDOWS, key))
|
|
89
|
+
return key;
|
|
90
|
+
if (Object.prototype.hasOwnProperty.call(MODEL_ALIASES, key))
|
|
91
|
+
return MODEL_ALIASES[key];
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
/** Derive the char budgets for a known model from its context window. */
|
|
95
|
+
export function modelBudget(model) {
|
|
96
|
+
const contextWindowTokens = MODEL_CONTEXT_WINDOWS[model];
|
|
97
|
+
const contextBudget = roundChars(contextWindowTokens * TOTAL_BUDGET_FRACTION * CHARS_PER_TOKEN);
|
|
98
|
+
const fileContextBudget = roundChars(contextBudget * FILE_BUDGET_SHARE);
|
|
99
|
+
return { contextWindowTokens, contextBudget, fileContextBudget };
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Resolve a targetModel string to its budget, or undefined when the name is not
|
|
103
|
+
* recognised. Callers that need to reject unknown names (the CLI config loader)
|
|
104
|
+
* should validate against {@link resolveTargetModel} first for a clear error.
|
|
105
|
+
*/
|
|
106
|
+
export function budgetForTargetModel(name) {
|
|
107
|
+
const model = resolveTargetModel(name);
|
|
108
|
+
return model ? modelBudget(model) : undefined;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=model-budgets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-budgets.js","sourceRoot":"","sources":["../src/model-budgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAY,CAAC;AAEpD;;;;;;;;GAQG;AACH,MAAM,qBAAqB,GAAG;IAC5B,mBAAmB;IACnB,eAAe,EAAE,SAAS;IAC1B,iBAAiB,EAAE,SAAS;IAC5B,iBAAiB,EAAE,SAAS;IAC5B,mBAAmB,EAAE,SAAS;IAC9B,kBAAkB,EAAE,OAAO;IAC3B,gBAAgB,EAAE,SAAS;IAC3B,0BAA0B;IAC1B,OAAO,EAAE,OAAO;IAChB,YAAY,EAAE,OAAO;IACrB,qCAAqC;IACrC,gBAAgB,EAAE,SAAS;IAC3B,kBAAkB,EAAE,SAAS;CACY,CAAC;AAI5C,gEAAgE;AAChE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAkB,CAAC;AAEjF;;;GAGG;AACH,MAAM,aAAa,GAAgC;IACjD,MAAM,EAAE,eAAe;IACvB,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,kBAAkB;IAClC,GAAG,EAAE,OAAO;IACZ,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,gBAAgB;CACzB,CAAC;AAEF,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,gDAAgD;AAChD,0EAA0E;AAC1E,4EAA4E;AAC5E,2EAA2E;AAC3E,gFAAgF;AAChF,qDAAqD;AACrD,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAW/B,8EAA8E;AAC9E,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;AACvC,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtC,yEAAyE;IACzE,yEAAyE;IACzE,sDAAsD;IACtD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC;QAClE,OAAO,GAAkB,CAAC;IAC5B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC;QAAE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IACxF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,WAAW,CAAC,KAAkB;IAC5C,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,UAAU,CAAC,mBAAmB,GAAG,qBAAqB,GAAG,eAAe,CAAC,CAAC;IAChG,MAAM,iBAAiB,GAAG,UAAU,CAAC,aAAa,GAAG,iBAAiB,CAAC,CAAC;IACxE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Negative-instruction overload detector (FEAT-010).
|
|
3
|
+
*
|
|
4
|
+
* Models follow positive directives ("use const") more reliably than
|
|
5
|
+
* prohibitions ("don't use var"). A file whose directive sentences are
|
|
6
|
+
* overwhelmingly phrased as prohibitions is harder to follow than the same
|
|
7
|
+
* guidance framed positively.
|
|
8
|
+
*
|
|
9
|
+
* Heuristic: split the file into candidate sentences, classify each as a
|
|
10
|
+
* positive directive, a negative directive, or neither, and — when there are
|
|
11
|
+
* enough directives to be meaningful — flag files where more than 40% of the
|
|
12
|
+
* directives are negative. Info severity only; the wording is deliberately
|
|
13
|
+
* cautious and the recommendation offers a positive-rewrite hint.
|
|
14
|
+
*
|
|
15
|
+
* Deterministic and rule-based: no clock, network, or randomness.
|
|
16
|
+
*/
|
|
17
|
+
import type { InstructionFile, PromptCiIssue } from './types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Split file content into candidate directive sentences. Fenced code blocks are
|
|
20
|
+
* dropped (a bash comment is not an instruction sentence). Each non-blank line
|
|
21
|
+
* is stripped of list/heading markers, then split on sentence terminators so a
|
|
22
|
+
* line holding two clauses is counted as two.
|
|
23
|
+
*/
|
|
24
|
+
export declare function splitSentences(content: string): string[];
|
|
25
|
+
export declare function detectNegativeInstructionOverload(files: InstructionFile[]): PromptCiIssue[];
|
|
26
|
+
//# sourceMappingURL=negative-instructions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negative-instructions.d.ts","sourceRoot":"","sources":["../src/negative-instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAwEjE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAwBxD;AAsBD,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CA+C3F"}
|