@codeledger/selector 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.d.ts.map +1 -1
- package/dist/bundle.js +29 -0
- package/dist/bundle.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/secret-detection.d.ts +53 -0
- package/dist/secret-detection.d.ts.map +1 -0
- package/dist/secret-detection.js +390 -0
- package/dist/secret-detection.js.map +1 -0
- package/dist/shadow-scoring.d.ts +17 -0
- package/dist/shadow-scoring.d.ts.map +1 -0
- package/dist/shadow-scoring.js +92 -0
- package/dist/shadow-scoring.js.map +1 -0
- package/dist/stop-rule.d.ts.map +1 -1
- package/dist/stop-rule.js +2 -1
- package/dist/stop-rule.js.map +1 -1
- package/package.json +2 -2
package/dist/bundle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EAEN,aAAa,EAGb,SAAS,EACT,cAAc,
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EAEN,aAAa,EAGb,SAAS,EACT,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAiBnE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,+EAA+E;IAC/E,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CA+UnE"}
|
package/dist/bundle.js
CHANGED
|
@@ -15,6 +15,7 @@ import { sortByLayer } from './layer-ordering.js';
|
|
|
15
15
|
import { estimateTokensByExtension } from './token-calibration.js';
|
|
16
16
|
import { scanTodos } from './todo-scan.js';
|
|
17
17
|
import { isSecurityTask } from './security-surface.js';
|
|
18
|
+
import { computeShadowCandidates, DEFAULT_SHADOW_CONFIG } from './shadow-scoring.js';
|
|
18
19
|
export function buildBundle(opts) {
|
|
19
20
|
const { taskText, repoIndex, selectorConfig, budget = selectorConfig.default_budget, sufficiencyThreshold = selectorConfig.sufficiency_threshold, ledgerStats, explain = false, scope, branchChangedFiles, includeNearMisses = false, includeBlastRadius = false, layerOrder = false, } = opts;
|
|
20
21
|
// Auto-infer task type and apply weight adjustments
|
|
@@ -136,6 +137,34 @@ export function buildBundle(opts) {
|
|
|
136
137
|
});
|
|
137
138
|
state.totalTokens += tokenEst;
|
|
138
139
|
}
|
|
140
|
+
// Step 5.5: Shadow file inclusion — temporally-coupled files
|
|
141
|
+
const shadowConfig = {
|
|
142
|
+
...DEFAULT_SHADOW_CONFIG,
|
|
143
|
+
...selectorConfig.shadow_files,
|
|
144
|
+
};
|
|
145
|
+
if (shadowConfig.enabled && repoIndex.temporal_co_commit) {
|
|
146
|
+
const shadowCandidates = computeShadowCandidates(state.files, repoIndex, shadowConfig);
|
|
147
|
+
for (const candidate of shadowCandidates) {
|
|
148
|
+
if (budget.max_files && state.files.length >= budget.max_files)
|
|
149
|
+
break;
|
|
150
|
+
const excerpt = extractExcerpt(repoIndex.root, candidate.path, keywords, selectorConfig.excerpt_full_file_max_lines, selectorConfig.excerpt_window_lines);
|
|
151
|
+
const ext = candidate.path.includes('.') ? '.' + candidate.path.split('.').pop() : '';
|
|
152
|
+
const tokenEst = estimateTokensByExtension(excerpt.lineCount, ext);
|
|
153
|
+
if (budget.tokens && state.totalTokens + tokenEst > budget.tokens * 1.1)
|
|
154
|
+
continue;
|
|
155
|
+
const bundleFile = {
|
|
156
|
+
path: candidate.path,
|
|
157
|
+
score: Math.round(candidate.boost * 1000) / 1000,
|
|
158
|
+
reasons: ['temporal_affinity'],
|
|
159
|
+
excerpt_spans: excerpt.spans,
|
|
160
|
+
content: excerpt.content,
|
|
161
|
+
token_estimate: tokenEst,
|
|
162
|
+
shadow_reason: candidate.reason,
|
|
163
|
+
};
|
|
164
|
+
state.files.push(bundleFile);
|
|
165
|
+
state.totalTokens += tokenEst;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
139
168
|
// Step 6: Generate interface stubs for unselected dependencies.
|
|
140
169
|
// These give the agent the type signatures of files adjacent to the bundle
|
|
141
170
|
// without the full token cost.
|
package/dist/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,12 +20,15 @@ export { estimateTokensCalibrated, estimateTokensByExtension } from './token-cal
|
|
|
20
20
|
export { getFileLayer, sortByLayer } from './layer-ordering.js';
|
|
21
21
|
export type { LayerRule } from './layer-ordering.js';
|
|
22
22
|
export { detectSecuritySurface, isSecurityTask } from './security-surface.js';
|
|
23
|
+
export { computeShadowCandidates, DEFAULT_SHADOW_CONFIG } from './shadow-scoring.js';
|
|
24
|
+
export type { ShadowCandidate } from './shadow-scoring.js';
|
|
23
25
|
export { scanDebtPatterns, computeDebtScore } from './debt-detection.js';
|
|
24
26
|
export { detectStuckPatterns, buildActivityLogFromGit, DEFAULT_LOOP_THRESHOLDS } from './loop-detection.js';
|
|
25
27
|
export type { ActivityEntry } from './loop-detection.js';
|
|
26
28
|
export { deriveScopeContract, isInScope, detectScopeDrift, renderScopeContractMarkdown } from './scope-contract.js';
|
|
27
29
|
export { detectConflictZones, countConflictZoneTouches, renderConflictZonesMarkdown } from './conflict-zones.js';
|
|
28
30
|
export { detectAddressedFiles, parseCommittedFiles, renderInvalidationMarkdown } from './bundle-invalidation.js';
|
|
31
|
+
export { scanFileForSecrets, shouldSkipFile, isAllowlisted, buildSecretScanReport, createBaseline, filterNewFindings, toSarif, shannonEntropy, } from './secret-detection.js';
|
|
29
32
|
export { norm as intentNorm, normArr as intentNormArr, canonicalize, sha256 as intentSha256, intentHash, jaccardDistanceTokens, setDistance, computeDrift, recommendedAction, } from './intent/index.js';
|
|
30
33
|
export type { TaskContractV1, DriftLevel, DriftResult, DriftReason, IntentDriftEvent, } from './intent/index.js';
|
|
31
34
|
export { computeKnowledgeFeatures, scoreKnowledgeFile, deriveKnowledgeReasons, scoreAllKnowledgeCandidates, DEFAULT_KNOWLEDGE_WEIGHTS, } from './knowledge-scorer.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACnH,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAClH,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACrE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC5G,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AACpH,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AACjH,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -15,11 +15,13 @@ export { scanTodos, todoRelevanceScore } from './todo-scan.js';
|
|
|
15
15
|
export { estimateTokensCalibrated, estimateTokensByExtension } from './token-calibration.js';
|
|
16
16
|
export { getFileLayer, sortByLayer } from './layer-ordering.js';
|
|
17
17
|
export { detectSecuritySurface, isSecurityTask } from './security-surface.js';
|
|
18
|
+
export { computeShadowCandidates, DEFAULT_SHADOW_CONFIG } from './shadow-scoring.js';
|
|
18
19
|
export { scanDebtPatterns, computeDebtScore } from './debt-detection.js';
|
|
19
20
|
export { detectStuckPatterns, buildActivityLogFromGit, DEFAULT_LOOP_THRESHOLDS } from './loop-detection.js';
|
|
20
21
|
export { deriveScopeContract, isInScope, detectScopeDrift, renderScopeContractMarkdown } from './scope-contract.js';
|
|
21
22
|
export { detectConflictZones, countConflictZoneTouches, renderConflictZonesMarkdown } from './conflict-zones.js';
|
|
22
23
|
export { detectAddressedFiles, parseCommittedFiles, renderInvalidationMarkdown } from './bundle-invalidation.js';
|
|
24
|
+
export { scanFileForSecrets, shouldSkipFile, isAllowlisted, buildSecretScanReport, createBaseline, filterNewFindings, toSarif, shannonEntropy, } from './secret-detection.js';
|
|
23
25
|
// ─── Intent Governance ──────────────────────────────────────────────────────
|
|
24
26
|
export { norm as intentNorm, normArr as intentNormArr, canonicalize, sha256 as intentSha256, intentHash, jaccardDistanceTokens, setDistance, computeDrift, recommendedAction, } from './intent/index.js';
|
|
25
27
|
// ─── Knowledge Mode ─────────────────────────────────────────────────────────
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnH,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAElH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE5G,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AACpH,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AACjH,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { SecretFinding, SecretScanReport, SecretBaseline, SecretAllowlist, SarifLog } from '@codeledger/types';
|
|
2
|
+
/** A rule for detecting secrets in source code */
|
|
3
|
+
interface SecretRule {
|
|
4
|
+
id: string;
|
|
5
|
+
pattern: RegExp;
|
|
6
|
+
severity: 'high' | 'medium' | 'low';
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Check if a file path should be skipped during secret scanning.
|
|
11
|
+
*/
|
|
12
|
+
export declare function shouldSkipFile(filePath: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Check if a file path is suppressed by an allowlist.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isAllowlisted(filePath: string, ruleId: string, allowlist: SecretAllowlist | undefined): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Scan a single file's content for secret patterns.
|
|
19
|
+
*
|
|
20
|
+
* @param filePath - Relative file path (for reporting)
|
|
21
|
+
* @param content - File content to scan
|
|
22
|
+
* @param options - Optional: allowlist and entropy scanning config
|
|
23
|
+
* @returns Array of secret findings
|
|
24
|
+
*/
|
|
25
|
+
export declare function scanFileForSecrets(filePath: string, content: string, options?: {
|
|
26
|
+
allowlist?: SecretAllowlist;
|
|
27
|
+
entropy?: boolean;
|
|
28
|
+
}): SecretFinding[];
|
|
29
|
+
/**
|
|
30
|
+
* Shannon entropy of a string. Returns bits per character.
|
|
31
|
+
*/
|
|
32
|
+
export declare function shannonEntropy(str: string): number;
|
|
33
|
+
/**
|
|
34
|
+
* Build a scan report from an array of findings.
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildSecretScanReport(findings: SecretFinding[], filesScanned: number): SecretScanReport;
|
|
37
|
+
/**
|
|
38
|
+
* Create a baseline from current findings.
|
|
39
|
+
*/
|
|
40
|
+
export declare function createBaseline(findings: SecretFinding[]): SecretBaseline;
|
|
41
|
+
/**
|
|
42
|
+
* Filter findings to only those not present in the baseline.
|
|
43
|
+
* Comparison is by file + rule (line numbers shift between edits).
|
|
44
|
+
*/
|
|
45
|
+
export declare function filterNewFindings(findings: SecretFinding[], baseline: SecretBaseline): SecretFinding[];
|
|
46
|
+
/**
|
|
47
|
+
* Convert a SecretScanReport to SARIF format for GitHub code scanning.
|
|
48
|
+
*/
|
|
49
|
+
export declare function toSarif(report: SecretScanReport, version: string): SarifLog;
|
|
50
|
+
/** Exported for testing */
|
|
51
|
+
export declare const SECRET_RULES_EXPORTED: SecretRule[];
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=secret-detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-detection.d.ts","sourceRoot":"","sources":["../src/secret-detection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAEhB,cAAc,EACd,eAAe,EACf,QAAQ,EAET,MAAM,mBAAmB,CAAC;AAE3B,kDAAkD;AAClD,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AA0HD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,eAAe,GAAG,SAAS,GACrC,OAAO,CAqBT;AAeD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,eAAe,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D,aAAa,EAAE,CA+CjB;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYlD;AA4ED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,EAAE,EACzB,YAAY,EAAE,MAAM,GACnB,gBAAgB,CAYlB;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,cAAc,CAUxE;AAUD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,EAAE,cAAc,GACvB,aAAa,EAAE,CAGjB;AAUD;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CA8C3E;AAED,2BAA2B;AAC3B,eAAO,MAAM,qBAAqB,cAAe,CAAC"}
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
/** File extensions/paths to skip during secret scanning */
|
|
2
|
+
const SKIP_EXTENSIONS = new Set([
|
|
3
|
+
'.png', '.jpg', '.jpeg', '.gif', '.ico', '.svg', '.woff', '.woff2',
|
|
4
|
+
'.ttf', '.eot', '.mp3', '.mp4', '.webm', '.zip', '.tar', '.gz',
|
|
5
|
+
'.pdf', '.lock', '.sqlite', '.db',
|
|
6
|
+
]);
|
|
7
|
+
/** Directories to always skip */
|
|
8
|
+
const SKIP_DIRS = new Set([
|
|
9
|
+
'node_modules', '.git', 'dist', 'build', '.codeledger', 'vendor',
|
|
10
|
+
'__pycache__', '.next', '.nuxt', 'coverage',
|
|
11
|
+
]);
|
|
12
|
+
/** Inline suppression pragma: `// codeledger: allow-secret <rule-id>` */
|
|
13
|
+
const INLINE_SUPPRESSION = /\/\/\s*codeledger:\s*allow-secret\s+(\S+)/;
|
|
14
|
+
/**
|
|
15
|
+
* Secret detection rules.
|
|
16
|
+
* Each rule matches a pattern that likely indicates a hardcoded secret.
|
|
17
|
+
* Patterns are designed to minimize false positives by requiring
|
|
18
|
+
* an assignment or value context.
|
|
19
|
+
*/
|
|
20
|
+
const SECRET_RULES = [
|
|
21
|
+
// ── High severity: likely real credentials ──────────────────────────────
|
|
22
|
+
{
|
|
23
|
+
id: 'aws-access-key',
|
|
24
|
+
pattern: /(?:^|['"`:=\s])AKIA[0-9A-Z]{16}\b/,
|
|
25
|
+
severity: 'high',
|
|
26
|
+
message: 'AWS Access Key ID detected',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: 'aws-secret-key',
|
|
30
|
+
pattern: /(?:aws_secret_access_key|aws_secret)\s*[:=]\s*['"][A-Za-z0-9/+=]{40}['"]/i,
|
|
31
|
+
severity: 'high',
|
|
32
|
+
message: 'AWS Secret Access Key detected',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: 'github-token',
|
|
36
|
+
pattern: /(?:^|['"`:=\s])(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{36,}\b/,
|
|
37
|
+
severity: 'high',
|
|
38
|
+
message: 'GitHub personal access token detected',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: 'generic-private-key',
|
|
42
|
+
pattern: /-----BEGIN (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----/,
|
|
43
|
+
severity: 'high',
|
|
44
|
+
message: 'Private key detected',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: 'slack-token',
|
|
48
|
+
pattern: /xox[bporas]-[0-9]{10,}-[A-Za-z0-9-]+/,
|
|
49
|
+
severity: 'high',
|
|
50
|
+
message: 'Slack token detected',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: 'stripe-secret-key',
|
|
54
|
+
pattern: /(?:^|['"`:=\s])sk_live_[0-9a-zA-Z]{24,}\b/,
|
|
55
|
+
severity: 'high',
|
|
56
|
+
message: 'Stripe secret key detected',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 'stripe-restricted-key',
|
|
60
|
+
pattern: /(?:^|['"`:=\s])rk_live_[0-9a-zA-Z]{24,}\b/,
|
|
61
|
+
severity: 'high',
|
|
62
|
+
message: 'Stripe restricted key detected',
|
|
63
|
+
},
|
|
64
|
+
// ── Medium severity: likely secrets in assignment context ──────────────
|
|
65
|
+
{
|
|
66
|
+
id: 'generic-api-key',
|
|
67
|
+
pattern: /(?:api[_-]?key|apikey)\s*[:=]\s*['"][A-Za-z0-9_\-/.]{16,}['"]/i,
|
|
68
|
+
severity: 'medium',
|
|
69
|
+
message: 'Hardcoded API key assignment detected',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: 'generic-secret',
|
|
73
|
+
pattern: /(?:secret|secret[_-]?key)\s*[:=]\s*['"][A-Za-z0-9_\-/.]{16,}['"]/i,
|
|
74
|
+
severity: 'medium',
|
|
75
|
+
message: 'Hardcoded secret assignment detected',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: 'generic-password',
|
|
79
|
+
pattern: /(?:password|passwd|pwd)\s*[:=]\s*['"][^'"]{8,}['"]/i,
|
|
80
|
+
severity: 'medium',
|
|
81
|
+
message: 'Hardcoded password assignment detected',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: 'generic-token',
|
|
85
|
+
pattern: /(?:auth[_-]?token|access[_-]?token|bearer[_-]?token)\s*[:=]\s*['"][A-Za-z0-9_\-/.]{16,}['"]/i,
|
|
86
|
+
severity: 'medium',
|
|
87
|
+
message: 'Hardcoded auth token assignment detected',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: 'database-url',
|
|
91
|
+
pattern: /(?:database[_-]?url|db[_-]?url|connection[_-]?string)\s*[:=]\s*['"](?:postgres|mysql|mongodb|redis):\/\/[^'"]+['"]/i,
|
|
92
|
+
severity: 'medium',
|
|
93
|
+
message: 'Hardcoded database connection string detected',
|
|
94
|
+
},
|
|
95
|
+
// ── Low severity: suspicious patterns that may be false positives ─────
|
|
96
|
+
{
|
|
97
|
+
id: 'env-file-reference',
|
|
98
|
+
pattern: /(?:^|['"`:=\s])(?:GOOGLE_API_KEY|OPENAI_API_KEY|ANTHROPIC_API_KEY|SENDGRID_API_KEY|TWILIO_AUTH_TOKEN)\s*=\s*['"]?[A-Za-z0-9_\-/.]{10,}/i,
|
|
99
|
+
severity: 'low',
|
|
100
|
+
message: 'Environment variable with potential secret value',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: 'jwt-token',
|
|
104
|
+
pattern: /eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/,
|
|
105
|
+
severity: 'low',
|
|
106
|
+
message: 'JWT token detected (may be a test fixture)',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
id: 'base64-high-entropy',
|
|
110
|
+
pattern: /(?:secret|key|token|password|credential)\s*[:=]\s*['"][A-Za-z0-9+/]{40,}={0,2}['"]/i,
|
|
111
|
+
severity: 'low',
|
|
112
|
+
message: 'High-entropy base64 string in secret context',
|
|
113
|
+
},
|
|
114
|
+
];
|
|
115
|
+
/**
|
|
116
|
+
* Check if a file path should be skipped during secret scanning.
|
|
117
|
+
*/
|
|
118
|
+
export function shouldSkipFile(filePath) {
|
|
119
|
+
// Skip binary/asset extensions
|
|
120
|
+
const ext = filePath.slice(filePath.lastIndexOf('.')).toLowerCase();
|
|
121
|
+
if (SKIP_EXTENSIONS.has(ext))
|
|
122
|
+
return true;
|
|
123
|
+
// Skip known non-source directories
|
|
124
|
+
const segments = filePath.split('/');
|
|
125
|
+
return segments.some((s) => SKIP_DIRS.has(s));
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Check if a file path is suppressed by an allowlist.
|
|
129
|
+
*/
|
|
130
|
+
export function isAllowlisted(filePath, ruleId, allowlist) {
|
|
131
|
+
if (!allowlist)
|
|
132
|
+
return false;
|
|
133
|
+
// Global path skips
|
|
134
|
+
if (allowlist.skip_paths) {
|
|
135
|
+
for (const pattern of allowlist.skip_paths) {
|
|
136
|
+
if (matchGlob(filePath, pattern))
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Global rule skips
|
|
141
|
+
if (allowlist.skip_rules?.includes(ruleId))
|
|
142
|
+
return true;
|
|
143
|
+
// Per-file rule skips
|
|
144
|
+
if (allowlist.file_rules) {
|
|
145
|
+
for (const entry of allowlist.file_rules) {
|
|
146
|
+
if (entry.file === filePath && entry.rules.includes(ruleId))
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Simple glob matcher supporting * and ** patterns.
|
|
154
|
+
*/
|
|
155
|
+
function matchGlob(path, pattern) {
|
|
156
|
+
// Convert glob to regex
|
|
157
|
+
const regex = pattern
|
|
158
|
+
.replace(/\./g, '\\.')
|
|
159
|
+
.replace(/\*\*/g, '§§') // temp placeholder for **
|
|
160
|
+
.replace(/\*/g, '[^/]*')
|
|
161
|
+
.replace(/§§/g, '.*');
|
|
162
|
+
return new RegExp(`^${regex}$`).test(path);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Scan a single file's content for secret patterns.
|
|
166
|
+
*
|
|
167
|
+
* @param filePath - Relative file path (for reporting)
|
|
168
|
+
* @param content - File content to scan
|
|
169
|
+
* @param options - Optional: allowlist and entropy scanning config
|
|
170
|
+
* @returns Array of secret findings
|
|
171
|
+
*/
|
|
172
|
+
export function scanFileForSecrets(filePath, content, options) {
|
|
173
|
+
const findings = [];
|
|
174
|
+
const lines = content.split('\n');
|
|
175
|
+
const allowlist = options?.allowlist;
|
|
176
|
+
for (let i = 0; i < lines.length; i++) {
|
|
177
|
+
const line = lines[i];
|
|
178
|
+
const trimmed = line.trim();
|
|
179
|
+
// Check for inline suppression pragma
|
|
180
|
+
const suppressionMatch = INLINE_SUPPRESSION.exec(line);
|
|
181
|
+
const suppressedRule = suppressionMatch ? suppressionMatch[1] : null;
|
|
182
|
+
// Skip comment-only lines (common in docs/examples)
|
|
183
|
+
if (trimmed.startsWith('//') && !SECRET_RULES.some((r) => r.pattern.test(trimmed))) {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
for (const rule of SECRET_RULES) {
|
|
187
|
+
// Skip if this rule is suppressed inline
|
|
188
|
+
if (suppressedRule === rule.id)
|
|
189
|
+
continue;
|
|
190
|
+
// Skip if allowlisted
|
|
191
|
+
if (isAllowlisted(filePath, rule.id, allowlist))
|
|
192
|
+
continue;
|
|
193
|
+
if (rule.pattern.test(line)) {
|
|
194
|
+
// Redact the actual secret value for safe reporting
|
|
195
|
+
const redacted = redactMatch(line.trim(), rule.pattern);
|
|
196
|
+
findings.push({
|
|
197
|
+
file: filePath,
|
|
198
|
+
line: i + 1,
|
|
199
|
+
rule: rule.id,
|
|
200
|
+
severity: rule.severity,
|
|
201
|
+
match: redacted,
|
|
202
|
+
message: rule.message,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Two-pass: entropy detection (opt-in)
|
|
208
|
+
if (options?.entropy) {
|
|
209
|
+
const entropyFindings = scanEntropy(filePath, lines, allowlist);
|
|
210
|
+
findings.push(...entropyFindings);
|
|
211
|
+
}
|
|
212
|
+
return findings;
|
|
213
|
+
}
|
|
214
|
+
// ── Entropy Detection (Two-Pass) ────────────────────────────────────────────
|
|
215
|
+
/**
|
|
216
|
+
* Shannon entropy of a string. Returns bits per character.
|
|
217
|
+
*/
|
|
218
|
+
export function shannonEntropy(str) {
|
|
219
|
+
if (str.length === 0)
|
|
220
|
+
return 0;
|
|
221
|
+
const freq = new Map();
|
|
222
|
+
for (const ch of str) {
|
|
223
|
+
freq.set(ch, (freq.get(ch) ?? 0) + 1);
|
|
224
|
+
}
|
|
225
|
+
let entropy = 0;
|
|
226
|
+
for (const count of freq.values()) {
|
|
227
|
+
const p = count / str.length;
|
|
228
|
+
entropy -= p * Math.log2(p);
|
|
229
|
+
}
|
|
230
|
+
return entropy;
|
|
231
|
+
}
|
|
232
|
+
/** Minimum length for an entropy candidate string */
|
|
233
|
+
const ENTROPY_MIN_LENGTH = 20;
|
|
234
|
+
/** Minimum Shannon entropy (bits/char) to flag */
|
|
235
|
+
const ENTROPY_THRESHOLD = 4.0;
|
|
236
|
+
/** Contexts that suggest a value is a secret */
|
|
237
|
+
const ENTROPY_CONTEXTS = /(?:key|secret|token|password|credential|auth|api)[_\-]?\s*[:=]/i;
|
|
238
|
+
/**
|
|
239
|
+
* Second-pass entropy scanner for unknown token formats.
|
|
240
|
+
* Only flags high-entropy strings that appear in a secret-like context.
|
|
241
|
+
*/
|
|
242
|
+
function scanEntropy(filePath, lines, allowlist) {
|
|
243
|
+
const findings = [];
|
|
244
|
+
const ruleId = 'high-entropy';
|
|
245
|
+
if (isAllowlisted(filePath, ruleId, allowlist))
|
|
246
|
+
return findings;
|
|
247
|
+
for (let i = 0; i < lines.length; i++) {
|
|
248
|
+
const line = lines[i];
|
|
249
|
+
// Only consider lines with a secret-context keyword
|
|
250
|
+
if (!ENTROPY_CONTEXTS.test(line))
|
|
251
|
+
continue;
|
|
252
|
+
// Check inline suppression
|
|
253
|
+
const suppressionMatch = INLINE_SUPPRESSION.exec(line);
|
|
254
|
+
if (suppressionMatch?.[1] === ruleId)
|
|
255
|
+
continue;
|
|
256
|
+
// Extract quoted string values
|
|
257
|
+
const quotedStrings = line.matchAll(/['"]([A-Za-z0-9+/=_\-]{20,})['"]/g);
|
|
258
|
+
for (const match of quotedStrings) {
|
|
259
|
+
const value = match[1];
|
|
260
|
+
if (value.length < ENTROPY_MIN_LENGTH)
|
|
261
|
+
continue;
|
|
262
|
+
const entropy = shannonEntropy(value);
|
|
263
|
+
if (entropy >= ENTROPY_THRESHOLD) {
|
|
264
|
+
findings.push({
|
|
265
|
+
file: filePath,
|
|
266
|
+
line: i + 1,
|
|
267
|
+
rule: ruleId,
|
|
268
|
+
severity: 'low',
|
|
269
|
+
match: redactMatch(line.trim(), /['"][A-Za-z0-9+/=_\-]{20,}['"]/),
|
|
270
|
+
message: `High-entropy string (${entropy.toFixed(1)} bits/char) in secret context`,
|
|
271
|
+
});
|
|
272
|
+
break; // one finding per line for entropy
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return findings;
|
|
277
|
+
}
|
|
278
|
+
// ── Redaction ───────────────────────────────────────────────────────────────
|
|
279
|
+
/**
|
|
280
|
+
* Redact the matched secret value, keeping only the first and last 4 chars visible.
|
|
281
|
+
*/
|
|
282
|
+
function redactMatch(line, pattern) {
|
|
283
|
+
const match = pattern.exec(line);
|
|
284
|
+
if (!match)
|
|
285
|
+
return line.slice(0, 80);
|
|
286
|
+
const matched = match[0];
|
|
287
|
+
if (matched.length <= 12) {
|
|
288
|
+
return line.slice(0, 80).replace(matched, '***REDACTED***');
|
|
289
|
+
}
|
|
290
|
+
const visible = matched.slice(0, 4) + '...' + matched.slice(-4);
|
|
291
|
+
return line.slice(0, 80).replace(matched, visible);
|
|
292
|
+
}
|
|
293
|
+
// ── Report Building ─────────────────────────────────────────────────────────
|
|
294
|
+
/**
|
|
295
|
+
* Build a scan report from an array of findings.
|
|
296
|
+
*/
|
|
297
|
+
export function buildSecretScanReport(findings, filesScanned) {
|
|
298
|
+
const filesWithSecrets = new Set(findings.map((f) => f.file)).size;
|
|
299
|
+
return {
|
|
300
|
+
findings,
|
|
301
|
+
files_scanned: filesScanned,
|
|
302
|
+
files_with_secrets: filesWithSecrets,
|
|
303
|
+
total_findings: findings.length,
|
|
304
|
+
high_count: findings.filter((f) => f.severity === 'high').length,
|
|
305
|
+
medium_count: findings.filter((f) => f.severity === 'medium').length,
|
|
306
|
+
low_count: findings.filter((f) => f.severity === 'low').length,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
// ── Baseline Comparison ─────────────────────────────────────────────────────
|
|
310
|
+
/**
|
|
311
|
+
* Create a baseline from current findings.
|
|
312
|
+
*/
|
|
313
|
+
export function createBaseline(findings) {
|
|
314
|
+
return {
|
|
315
|
+
version: 1,
|
|
316
|
+
generated_at: new Date().toISOString(),
|
|
317
|
+
entries: findings.map((f) => ({
|
|
318
|
+
file: f.file,
|
|
319
|
+
line: f.line,
|
|
320
|
+
rule: f.rule,
|
|
321
|
+
})),
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Fingerprint a finding for baseline comparison.
|
|
326
|
+
* Uses file + rule (not line number, since lines shift).
|
|
327
|
+
*/
|
|
328
|
+
function baselineKey(entry) {
|
|
329
|
+
return `${entry.file}::${entry.rule}`;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Filter findings to only those not present in the baseline.
|
|
333
|
+
* Comparison is by file + rule (line numbers shift between edits).
|
|
334
|
+
*/
|
|
335
|
+
export function filterNewFindings(findings, baseline) {
|
|
336
|
+
const baselineKeys = new Set(baseline.entries.map(baselineKey));
|
|
337
|
+
return findings.filter((f) => !baselineKeys.has(`${f.file}::${f.rule}`));
|
|
338
|
+
}
|
|
339
|
+
// ── SARIF Output ────────────────────────────────────────────────────────────
|
|
340
|
+
const SEVERITY_TO_SARIF = {
|
|
341
|
+
high: 'error',
|
|
342
|
+
medium: 'warning',
|
|
343
|
+
low: 'note',
|
|
344
|
+
};
|
|
345
|
+
/**
|
|
346
|
+
* Convert a SecretScanReport to SARIF format for GitHub code scanning.
|
|
347
|
+
*/
|
|
348
|
+
export function toSarif(report, version) {
|
|
349
|
+
// Collect unique rules
|
|
350
|
+
const seenRules = new Set();
|
|
351
|
+
const sarifRules = [];
|
|
352
|
+
for (const f of report.findings) {
|
|
353
|
+
if (!seenRules.has(f.rule)) {
|
|
354
|
+
seenRules.add(f.rule);
|
|
355
|
+
sarifRules.push({
|
|
356
|
+
id: f.rule,
|
|
357
|
+
shortDescription: { text: f.message },
|
|
358
|
+
defaultConfiguration: { level: SEVERITY_TO_SARIF[f.severity] ?? 'note' },
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
const results = report.findings.map((f) => ({
|
|
363
|
+
ruleId: f.rule,
|
|
364
|
+
level: SEVERITY_TO_SARIF[f.severity] ?? 'note',
|
|
365
|
+
message: { text: f.message },
|
|
366
|
+
locations: [{
|
|
367
|
+
physicalLocation: {
|
|
368
|
+
artifactLocation: { uri: f.file },
|
|
369
|
+
region: { startLine: f.line },
|
|
370
|
+
},
|
|
371
|
+
}],
|
|
372
|
+
}));
|
|
373
|
+
return {
|
|
374
|
+
$schema: 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json',
|
|
375
|
+
version: '2.1.0',
|
|
376
|
+
runs: [{
|
|
377
|
+
tool: {
|
|
378
|
+
driver: {
|
|
379
|
+
name: 'codeledger-detect-secrets',
|
|
380
|
+
version,
|
|
381
|
+
rules: sarifRules,
|
|
382
|
+
},
|
|
383
|
+
},
|
|
384
|
+
results,
|
|
385
|
+
}],
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
/** Exported for testing */
|
|
389
|
+
export const SECRET_RULES_EXPORTED = SECRET_RULES;
|
|
390
|
+
//# sourceMappingURL=secret-detection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-detection.js","sourceRoot":"","sources":["../src/secret-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { BundleFile, RepoIndex, ShadowConfig, ShadowReason } from '@codeledger/types';
|
|
2
|
+
/** Default shadow config values */
|
|
3
|
+
export declare const DEFAULT_SHADOW_CONFIG: ShadowConfig;
|
|
4
|
+
export interface ShadowCandidate {
|
|
5
|
+
path: string;
|
|
6
|
+
boost: number;
|
|
7
|
+
reason: ShadowReason;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Compute shadow file candidates from the temporal co-commit index.
|
|
11
|
+
*
|
|
12
|
+
* Strategy: "expand from bundle neighbors" — only consider files that are
|
|
13
|
+
* temporal neighbors of already-selected bundle files. This keeps runtime
|
|
14
|
+
* proportional to |bundle| × maxNeighborsPerFile, not repo size.
|
|
15
|
+
*/
|
|
16
|
+
export declare function computeShadowCandidates(bundleFiles: BundleFile[], repoIndex: RepoIndex, config: ShadowConfig): ShadowCandidate[];
|
|
17
|
+
//# sourceMappingURL=shadow-scoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shadow-scoring.d.ts","sourceRoot":"","sources":["../src/shadow-scoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,YAAY,EACZ,YAAY,EAEb,MAAM,mBAAmB,CAAC;AAE3B,mCAAmC;AACnC,eAAO,MAAM,qBAAqB,EAAE,YAQnC,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,CAAC;CACtB;AAOD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,UAAU,EAAE,EACzB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,YAAY,GACnB,eAAe,EAAE,CAuFnB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/** Default shadow config values */
|
|
2
|
+
export const DEFAULT_SHADOW_CONFIG = {
|
|
3
|
+
enabled: false,
|
|
4
|
+
weight: 0.20,
|
|
5
|
+
min_affinity: 0.25,
|
|
6
|
+
min_co_commit_count: 3,
|
|
7
|
+
tau_days: 60,
|
|
8
|
+
commit_size_penalty: true,
|
|
9
|
+
max_shadow_adds: 8,
|
|
10
|
+
};
|
|
11
|
+
/** Round a number to 3 decimal places. */
|
|
12
|
+
function roundTo3(x) {
|
|
13
|
+
return Math.round(x * 1000) / 1000;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Compute shadow file candidates from the temporal co-commit index.
|
|
17
|
+
*
|
|
18
|
+
* Strategy: "expand from bundle neighbors" — only consider files that are
|
|
19
|
+
* temporal neighbors of already-selected bundle files. This keeps runtime
|
|
20
|
+
* proportional to |bundle| × maxNeighborsPerFile, not repo size.
|
|
21
|
+
*/
|
|
22
|
+
export function computeShadowCandidates(bundleFiles, repoIndex, config) {
|
|
23
|
+
// Step 1: If no temporal co-commit index, nothing to do
|
|
24
|
+
if (!repoIndex.temporal_co_commit)
|
|
25
|
+
return [];
|
|
26
|
+
const { meta, adjacency } = repoIndex.temporal_co_commit;
|
|
27
|
+
// Step 2: Build set of already-selected bundle paths
|
|
28
|
+
const bundlePathSet = new Set(bundleFiles.map((f) => f.path));
|
|
29
|
+
// Step 3: Build churn map from repoIndex.churn: path → commit_count
|
|
30
|
+
const churnMap = new Map(repoIndex.churn.map((c) => [c.path, c.commit_count]));
|
|
31
|
+
// Step 4: Track best candidate per path (highest boost wins)
|
|
32
|
+
const bestCandidate = new Map();
|
|
33
|
+
// Step 5: For each bundle file, expand its temporal neighbors
|
|
34
|
+
for (const b of bundleFiles) {
|
|
35
|
+
const edges = adjacency[b.path];
|
|
36
|
+
if (!edges)
|
|
37
|
+
continue;
|
|
38
|
+
const churnB = churnMap.get(b.path) ?? 0;
|
|
39
|
+
for (const edge of edges) {
|
|
40
|
+
// Skip files already in the bundle
|
|
41
|
+
if (bundlePathSet.has(edge.other_path))
|
|
42
|
+
continue;
|
|
43
|
+
// Skip edges below minimum co-commit count
|
|
44
|
+
if (edge.co_commit_count < config.min_co_commit_count)
|
|
45
|
+
continue;
|
|
46
|
+
const churnX = churnMap.get(edge.other_path) ?? 0;
|
|
47
|
+
// Compute affinity: co-commit count / max(churnB, churnX)
|
|
48
|
+
// Default to edge.co_commit_count if churn not found (0)
|
|
49
|
+
const denominator = Math.max(churnB || edge.co_commit_count, churnX || edge.co_commit_count);
|
|
50
|
+
const A = edge.co_commit_count / denominator;
|
|
51
|
+
// Skip if affinity below threshold
|
|
52
|
+
if (A < config.min_affinity)
|
|
53
|
+
continue;
|
|
54
|
+
// Compute recency: exponential decay based on age in days
|
|
55
|
+
const ageDays = (meta.built_at_unix - edge.last_co_commit_unix) / 86400;
|
|
56
|
+
const R = Math.exp(-ageDays / config.tau_days);
|
|
57
|
+
// Compute commit-size penalty
|
|
58
|
+
const P = config.commit_size_penalty
|
|
59
|
+
? 1 / Math.log2(2 + edge.avg_commit_files)
|
|
60
|
+
: 1;
|
|
61
|
+
// Combine into shadow score
|
|
62
|
+
const shadowScore = A * R * P;
|
|
63
|
+
// Final boost, clamped to [0, 1] range then scaled by weight
|
|
64
|
+
const boost = config.weight * Math.min(1, shadowScore);
|
|
65
|
+
// Build the explanation payload
|
|
66
|
+
const reason = {
|
|
67
|
+
linked_to: b.path,
|
|
68
|
+
co_commit_count: edge.co_commit_count,
|
|
69
|
+
churn_shadow: churnX,
|
|
70
|
+
churn_linked: churnB,
|
|
71
|
+
affinity: roundTo3(A),
|
|
72
|
+
recency_days: Math.round(ageDays),
|
|
73
|
+
shadow_score: roundTo3(shadowScore),
|
|
74
|
+
boost: roundTo3(boost),
|
|
75
|
+
};
|
|
76
|
+
// Keep only the best (highest boost) candidate for each path
|
|
77
|
+
const existing = bestCandidate.get(edge.other_path);
|
|
78
|
+
if (!existing || boost > existing.boost) {
|
|
79
|
+
bestCandidate.set(edge.other_path, {
|
|
80
|
+
path: edge.other_path,
|
|
81
|
+
boost,
|
|
82
|
+
reason,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Step 6: Collect, sort by boost descending, return top N
|
|
88
|
+
const candidates = Array.from(bestCandidate.values());
|
|
89
|
+
candidates.sort((a, b) => b.boost - a.boost);
|
|
90
|
+
return candidates.slice(0, config.max_shadow_adds);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=shadow-scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shadow-scoring.js","sourceRoot":"","sources":["../src/shadow-scoring.ts"],"names":[],"mappings":"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"}
|
package/dist/stop-rule.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop-rule.d.ts","sourceRoot":"","sources":["../src/stop-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI5D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"stop-rule.d.ts","sourceRoot":"","sources":["../src/stop-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI5D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAeD,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,MAAM,EAC5B,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAqBT"}
|
package/dist/stop-rule.js
CHANGED
|
@@ -9,7 +9,8 @@ export function estimateTokens(lines) {
|
|
|
9
9
|
*/
|
|
10
10
|
function hasStrongSignal(files) {
|
|
11
11
|
return files.some((f) => f.reasons.includes('keyword_match') ||
|
|
12
|
-
f.reasons.includes('test_relevant')
|
|
12
|
+
f.reasons.includes('test_relevant') ||
|
|
13
|
+
f.reasons.includes('temporal_affinity'));
|
|
13
14
|
}
|
|
14
15
|
export function shouldStop(state, budget, sufficiencyThreshold, maxCumulativeScore) {
|
|
15
16
|
// Hard limits: always enforce max_files and token budget
|
package/dist/stop-rule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop-rule.js","sourceRoot":"","sources":["../src/stop-rule.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,GAAG,eAAe,CAAC;AACjC,CAAC;AAQD;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAAmB;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACtB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"stop-rule.js","sourceRoot":"","sources":["../src/stop-rule.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,GAAG,eAAe,CAAC;AACjC,CAAC;AAQD;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAAmB;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACtB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,KAAgB,EAChB,MAAc,EACd,oBAA4B,EAC5B,kBAA0B;IAE1B,yDAAyD;IACzD,IAAI,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4EAA4E;IAC5E,2EAA2E;IAC3E,sEAAsE;IACtE,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,GAAG,kBAAkB,CAAC;QACzD,IAAI,KAAK,IAAI,oBAAoB,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codeledger/selector",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Deterministic context selection algorithm for CodeLedger",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@codeledger/types": "0.6.
|
|
27
|
+
"@codeledger/types": "0.6.2"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"typescript": "^5.4.0"
|