@codeledger/selector 0.1.1 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/blast-radius.d.ts +7 -0
  2. package/dist/blast-radius.d.ts.map +1 -0
  3. package/dist/blast-radius.js +105 -0
  4. package/dist/blast-radius.js.map +1 -0
  5. package/dist/bundle.d.ts +10 -0
  6. package/dist/bundle.d.ts.map +1 -1
  7. package/dist/bundle.js +83 -9
  8. package/dist/bundle.js.map +1 -1
  9. package/dist/candidates.d.ts +12 -1
  10. package/dist/candidates.d.ts.map +1 -1
  11. package/dist/candidates.js +147 -22
  12. package/dist/candidates.js.map +1 -1
  13. package/dist/confidence.d.ts.map +1 -1
  14. package/dist/confidence.js +31 -0
  15. package/dist/confidence.js.map +1 -1
  16. package/dist/exemplars.d.ts +8 -0
  17. package/dist/exemplars.d.ts.map +1 -0
  18. package/dist/exemplars.js +122 -0
  19. package/dist/exemplars.js.map +1 -0
  20. package/dist/index.d.ts +19 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +15 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/knowledge-bundle.d.ts +41 -0
  25. package/dist/knowledge-bundle.d.ts.map +1 -0
  26. package/dist/knowledge-bundle.js +200 -0
  27. package/dist/knowledge-bundle.js.map +1 -0
  28. package/dist/knowledge-candidates.d.ts +27 -0
  29. package/dist/knowledge-candidates.d.ts.map +1 -0
  30. package/dist/knowledge-candidates.js +123 -0
  31. package/dist/knowledge-candidates.js.map +1 -0
  32. package/dist/knowledge-excerpt.d.ts +26 -0
  33. package/dist/knowledge-excerpt.d.ts.map +1 -0
  34. package/dist/knowledge-excerpt.js +179 -0
  35. package/dist/knowledge-excerpt.js.map +1 -0
  36. package/dist/knowledge-scorer.d.ts +33 -0
  37. package/dist/knowledge-scorer.d.ts.map +1 -0
  38. package/dist/knowledge-scorer.js +234 -0
  39. package/dist/knowledge-scorer.js.map +1 -0
  40. package/dist/layer-ordering.d.ts +37 -0
  41. package/dist/layer-ordering.d.ts.map +1 -0
  42. package/dist/layer-ordering.js +93 -0
  43. package/dist/layer-ordering.js.map +1 -0
  44. package/dist/mode-detect.d.ts +23 -0
  45. package/dist/mode-detect.d.ts.map +1 -0
  46. package/dist/mode-detect.js +76 -0
  47. package/dist/mode-detect.js.map +1 -0
  48. package/dist/near-miss.d.ts +9 -0
  49. package/dist/near-miss.d.ts.map +1 -0
  50. package/dist/near-miss.js +78 -0
  51. package/dist/near-miss.js.map +1 -0
  52. package/dist/scorer.d.ts +2 -2
  53. package/dist/scorer.d.ts.map +1 -1
  54. package/dist/scorer.js +23 -6
  55. package/dist/scorer.js.map +1 -1
  56. package/dist/stubs.d.ts.map +1 -1
  57. package/dist/stubs.js +4 -3
  58. package/dist/stubs.js.map +1 -1
  59. package/dist/task-type.d.ts +28 -0
  60. package/dist/task-type.d.ts.map +1 -0
  61. package/dist/task-type.js +115 -0
  62. package/dist/task-type.js.map +1 -0
  63. package/dist/todo-scan.d.ts +31 -0
  64. package/dist/todo-scan.d.ts.map +1 -0
  65. package/dist/todo-scan.js +63 -0
  66. package/dist/todo-scan.js.map +1 -0
  67. package/dist/token-calibration.d.ts +27 -0
  68. package/dist/token-calibration.d.ts.map +1 -0
  69. package/dist/token-calibration.js +113 -0
  70. package/dist/token-calibration.js.map +1 -0
  71. package/dist/validation.d.ts +7 -0
  72. package/dist/validation.d.ts.map +1 -0
  73. package/dist/validation.js +108 -0
  74. package/dist/validation.js.map +1 -0
  75. package/package.json +2 -2
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Architectural Layer Ordering (Feature 15)
3
+ *
4
+ * Defines a configurable layer hierarchy for sorting bundle files.
5
+ * When enabled, files are ordered by their architectural layer
6
+ * (types → models → services → routes → tests) within the bundle,
7
+ * giving agents a clear top-down reading order.
8
+ *
9
+ * Default layers (configurable via selector config):
10
+ * 0: types/interfaces (lowest = read first)
11
+ * 1: models/entities
12
+ * 2: repositories/data access
13
+ * 3: services/business logic
14
+ * 4: controllers/routes/handlers
15
+ * 5: middleware
16
+ * 6: configuration/infrastructure
17
+ * 7: tests
18
+ */
19
+ export interface LayerRule {
20
+ /** Pattern to match against file path (substring match) */
21
+ pattern: string;
22
+ /** Layer priority (lower = earlier in the reading order) */
23
+ layer: number;
24
+ }
25
+ /**
26
+ * Determine the architectural layer for a file path.
27
+ * Returns the layer number (lower = earlier in reading order).
28
+ */
29
+ export declare function getFileLayer(filePath: string, customLayers?: LayerRule[]): number;
30
+ /**
31
+ * Sort file paths by architectural layer, preserving score order within
32
+ * each layer. Returns a new array (does not mutate the input).
33
+ */
34
+ export declare function sortByLayer<T extends {
35
+ path: string;
36
+ }>(files: T[], customLayers?: LayerRule[]): T[];
37
+ //# sourceMappingURL=layer-ordering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-ordering.d.ts","sourceRoot":"","sources":["../src/layer-ordering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,SAAS;IACxB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;CACf;AAoDD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,SAAS,EAAE,GACzB,MAAM,CAWR;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACpD,KAAK,EAAE,CAAC,EAAE,EACV,YAAY,CAAC,EAAE,SAAS,EAAE,GACzB,CAAC,EAAE,CAOL"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Architectural Layer Ordering (Feature 15)
3
+ *
4
+ * Defines a configurable layer hierarchy for sorting bundle files.
5
+ * When enabled, files are ordered by their architectural layer
6
+ * (types → models → services → routes → tests) within the bundle,
7
+ * giving agents a clear top-down reading order.
8
+ *
9
+ * Default layers (configurable via selector config):
10
+ * 0: types/interfaces (lowest = read first)
11
+ * 1: models/entities
12
+ * 2: repositories/data access
13
+ * 3: services/business logic
14
+ * 4: controllers/routes/handlers
15
+ * 5: middleware
16
+ * 6: configuration/infrastructure
17
+ * 7: tests
18
+ */
19
+ /** Default architectural layer rules */
20
+ const DEFAULT_LAYERS = [
21
+ // Types and interfaces — define contracts first
22
+ { pattern: '/types/', layer: 0 },
23
+ { pattern: '/types.', layer: 0 },
24
+ { pattern: '/interfaces/', layer: 0 },
25
+ // Models and entities
26
+ { pattern: '/models/', layer: 1 },
27
+ { pattern: '/entities/', layer: 1 },
28
+ { pattern: '/schemas/', layer: 1 },
29
+ // Data access / repositories
30
+ { pattern: '/repo/', layer: 2 },
31
+ { pattern: '/repositories/', layer: 2 },
32
+ { pattern: '/db/', layer: 2 },
33
+ { pattern: '/database/', layer: 2 },
34
+ { pattern: '/migrations/', layer: 2 },
35
+ // Services / business logic
36
+ { pattern: '/services/', layer: 3 },
37
+ { pattern: '/service.', layer: 3 },
38
+ { pattern: '/use-cases/', layer: 3 },
39
+ { pattern: '/domain/', layer: 3 },
40
+ // Routes / controllers / handlers
41
+ { pattern: '/api/', layer: 4 },
42
+ { pattern: '/routes/', layer: 4 },
43
+ { pattern: '/controllers/', layer: 4 },
44
+ { pattern: '/handlers/', layer: 4 },
45
+ { pattern: '/pages/', layer: 4 },
46
+ { pattern: '/components/', layer: 4 },
47
+ // Middleware
48
+ { pattern: '/middleware/', layer: 5 },
49
+ // Infrastructure / config
50
+ { pattern: '/config/', layer: 6 },
51
+ { pattern: '/utils/', layer: 6 },
52
+ { pattern: '/helpers/', layer: 6 },
53
+ { pattern: '/lib/', layer: 6 },
54
+ // Jobs / workers
55
+ { pattern: '/jobs/', layer: 7 },
56
+ { pattern: '/workers/', layer: 7 },
57
+ { pattern: '/tasks/', layer: 7 },
58
+ // Tests — always last
59
+ { pattern: '/tests/', layer: 8 },
60
+ { pattern: '/test/', layer: 8 },
61
+ { pattern: '/__tests__/', layer: 8 },
62
+ { pattern: '.test.', layer: 8 },
63
+ { pattern: '.spec.', layer: 8 },
64
+ ];
65
+ /** Layer for files that don't match any rule */
66
+ const DEFAULT_LAYER = 5;
67
+ /**
68
+ * Determine the architectural layer for a file path.
69
+ * Returns the layer number (lower = earlier in reading order).
70
+ */
71
+ export function getFileLayer(filePath, customLayers) {
72
+ const rules = customLayers ?? DEFAULT_LAYERS;
73
+ const pathLower = filePath.toLowerCase();
74
+ for (const rule of rules) {
75
+ if (pathLower.includes(rule.pattern)) {
76
+ return rule.layer;
77
+ }
78
+ }
79
+ return DEFAULT_LAYER;
80
+ }
81
+ /**
82
+ * Sort file paths by architectural layer, preserving score order within
83
+ * each layer. Returns a new array (does not mutate the input).
84
+ */
85
+ export function sortByLayer(files, customLayers) {
86
+ return [...files].sort((a, b) => {
87
+ const layerA = getFileLayer(a.path, customLayers);
88
+ const layerB = getFileLayer(b.path, customLayers);
89
+ return layerA - layerB;
90
+ // Within same layer, preserve original order (score-based)
91
+ });
92
+ }
93
+ //# sourceMappingURL=layer-ordering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-ordering.js","sourceRoot":"","sources":["../src/layer-ordering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AASH,wCAAwC;AACxC,MAAM,cAAc,GAAgB;IAClC,gDAAgD;IAChD,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;IAChC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;IAChC,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE;IACrC,sBAAsB;IACtB,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;IACjC,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE;IACnC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE;IAClC,6BAA6B;IAC7B,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;IAC/B,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE;IACvC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;IAC7B,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE;IACnC,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE;IACrC,4BAA4B;IAC5B,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE;IACnC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE;IAClC,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE;IACpC,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;IACjC,kCAAkC;IAClC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE;IAC9B,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;IACjC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE;IACtC,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE;IACnC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;IAChC,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE;IACrC,aAAa;IACb,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE;IACrC,0BAA0B;IAC1B,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;IACjC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;IAChC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE;IAClC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE;IAC9B,iBAAiB;IACjB,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;IAC/B,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE;IAClC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;IAChC,sBAAsB;IACtB,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;IAChC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;IAC/B,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE;IACpC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;IAC/B,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;CAChC,CAAC;AAEF,gDAAgD;AAChD,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,YAA0B;IAE1B,MAAM,KAAK,GAAG,YAAY,IAAI,cAAc,CAAC;IAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,KAAU,EACV,YAA0B;IAE1B,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAClD,OAAO,MAAM,GAAG,MAAM,CAAC;QACvB,2DAA2D;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Mode auto-detection: determine whether a workspace should use
3
+ * code mode or knowledge mode.
4
+ *
5
+ * Detection rules:
6
+ * 1. IF package.json OR pyproject.toml OR go.mod OR Cargo.toml → code mode
7
+ * 2. ELSE → knowledge mode
8
+ * 3. Override: IF 70%+ files are .md, .txt, .json → knowledge mode
9
+ * 4. Override: IF 50%+ files are .ts, .js, .py, .go, .rs, .java → code mode
10
+ * 5. Explicit --mode flag always overrides
11
+ */
12
+ import type { SelectionMode } from '@codeledger/types';
13
+ export interface ModeDetectionInput {
14
+ /** File paths relative to workspace root */
15
+ filePaths: string[];
16
+ /** Basenames of files in the workspace root directory */
17
+ rootFiles: string[];
18
+ }
19
+ /**
20
+ * Auto-detect selection mode based on workspace contents.
21
+ */
22
+ export declare function detectSelectionMode(input: ModeDetectionInput): SelectionMode;
23
+ //# sourceMappingURL=mode-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-detect.d.ts","sourceRoot":"","sources":["../src/mode-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA8BvD,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,yDAAyD;IACzD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAoC5E"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Mode auto-detection: determine whether a workspace should use
3
+ * code mode or knowledge mode.
4
+ *
5
+ * Detection rules:
6
+ * 1. IF package.json OR pyproject.toml OR go.mod OR Cargo.toml → code mode
7
+ * 2. ELSE → knowledge mode
8
+ * 3. Override: IF 70%+ files are .md, .txt, .json → knowledge mode
9
+ * 4. Override: IF 50%+ files are .ts, .js, .py, .go, .rs, .java → code mode
10
+ * 5. Explicit --mode flag always overrides
11
+ */
12
+ /** Project root markers that indicate a code repository */
13
+ const CODE_ROOT_MARKERS = [
14
+ 'package.json',
15
+ 'pyproject.toml',
16
+ 'go.mod',
17
+ 'Cargo.toml',
18
+ 'Gemfile',
19
+ 'pom.xml',
20
+ 'build.gradle',
21
+ 'CMakeLists.txt',
22
+ 'Makefile',
23
+ ];
24
+ /** Extensions that indicate code files */
25
+ const CODE_EXTENSIONS = new Set([
26
+ '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs',
27
+ '.py', '.go', '.rs', '.java', '.kt', '.cs',
28
+ '.c', '.cpp', '.h', '.hpp', '.rb', '.php',
29
+ '.swift', '.scala', '.dart',
30
+ ]);
31
+ /** Extensions that indicate knowledge/document files */
32
+ const KNOWLEDGE_EXTENSIONS = new Set([
33
+ '.md', '.mdx', '.txt', '.json', '.yaml', '.yml',
34
+ '.csv', '.pdf', '.docx', '.xlsx', '.pptx',
35
+ '.rst', '.adoc', '.org',
36
+ ]);
37
+ /**
38
+ * Auto-detect selection mode based on workspace contents.
39
+ */
40
+ export function detectSelectionMode(input) {
41
+ const { filePaths, rootFiles } = input;
42
+ // Rule 1: Check for code project root markers
43
+ const hasCodeMarker = CODE_ROOT_MARKERS.some((marker) => rootFiles.some((f) => f === marker));
44
+ // Count file types
45
+ let codeCount = 0;
46
+ let knowledgeCount = 0;
47
+ const total = filePaths.length;
48
+ for (const fp of filePaths) {
49
+ const ext = getExtension(fp);
50
+ if (CODE_EXTENSIONS.has(ext))
51
+ codeCount++;
52
+ if (KNOWLEDGE_EXTENSIONS.has(ext))
53
+ knowledgeCount++;
54
+ }
55
+ // Rule 3: If 70%+ are knowledge files → knowledge mode (even if code marker present)
56
+ if (total > 0 && knowledgeCount / total >= 0.7) {
57
+ return 'knowledge';
58
+ }
59
+ // Rule 4: If 50%+ are code files → code mode
60
+ if (total > 0 && codeCount / total >= 0.5) {
61
+ return 'code';
62
+ }
63
+ // Rule 1 fallback: Code marker present → code mode
64
+ if (hasCodeMarker) {
65
+ return 'code';
66
+ }
67
+ // Default: knowledge mode
68
+ return 'knowledge';
69
+ }
70
+ function getExtension(filePath) {
71
+ const lastDot = filePath.lastIndexOf('.');
72
+ if (lastDot < 0)
73
+ return '';
74
+ return filePath.slice(lastDot).toLowerCase();
75
+ }
76
+ //# sourceMappingURL=mode-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-detect.js","sourceRoot":"","sources":["../src/mode-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,2DAA2D;AAC3D,MAAM,iBAAiB,GAAG;IACxB,cAAc;IACd,gBAAgB;IAChB,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,SAAS;IACT,cAAc;IACd,gBAAgB;IAChB,UAAU;CACX,CAAC;AAEF,0CAA0C;AAC1C,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC5C,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IAC1C,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IACzC,QAAQ,EAAE,QAAQ,EAAE,OAAO;CAC5B,CAAC,CAAC;AAEH,wDAAwD;AACxD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;IAC/C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;IACzC,MAAM,EAAE,OAAO,EAAE,MAAM;CACxB,CAAC,CAAC;AASH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAyB;IAC3D,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAEvC,8CAA8C;IAC9C,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CACtD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CACpC,CAAC;IAEF,mBAAmB;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;IAE/B,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS,EAAE,CAAC;QAC1C,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,cAAc,EAAE,CAAC;IACtD,CAAC;IAED,qFAAqF;IACrF,IAAI,KAAK,GAAG,CAAC,IAAI,cAAc,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC;QAC/C,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,6CAA6C;IAC7C,IAAI,KAAK,GAAG,CAAC,IAAI,SAAS,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,mDAAmD;IACnD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,0BAA0B;IAC1B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3B,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { NearMiss, ScoredFile, BundleFile } from '@codeledger/types';
2
+ /**
3
+ * Compute near-miss entries: files that were scored and ranked but didn't
4
+ * make it into the final bundle.
5
+ */
6
+ export declare function computeNearMisses(allScored: ScoredFile[], selectedFiles: BundleFile[], tokenBudgetUsed: number, tokenBudgetTotal: number | undefined, maxNearMisses?: number,
7
+ /** Actual line counts per file path — avoids size_penalty cap at 1000 lines */
8
+ fileLineCounts?: Map<string, number>): NearMiss[];
9
+ //# sourceMappingURL=near-miss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"near-miss.d.ts","sourceRoot":"","sources":["../src/near-miss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAc,MAAM,mBAAmB,CAAC;AActF;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,UAAU,EAAE,EACvB,aAAa,EAAE,UAAU,EAAE,EAC3B,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,aAAa,CAAC,EAAE,MAAM;AACtB,+EAA+E;AAC/E,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,QAAQ,EAAE,CA6CZ"}
@@ -0,0 +1,78 @@
1
+ import { estimateTokensByExtension } from './token-calibration.js';
2
+ /**
3
+ * Near-Miss Explanation
4
+ *
5
+ * Shows files that almost made the bundle cut — useful for diagnostics,
6
+ * weight tuning, and task refinement. For each near-miss, explains
7
+ * why it was excluded and suggests how to include it.
8
+ */
9
+ /** Maximum near-misses to report */
10
+ const DEFAULT_MAX_NEAR_MISSES = 5;
11
+ /**
12
+ * Compute near-miss entries: files that were scored and ranked but didn't
13
+ * make it into the final bundle.
14
+ */
15
+ export function computeNearMisses(allScored, selectedFiles, tokenBudgetUsed, tokenBudgetTotal, maxNearMisses,
16
+ /** Actual line counts per file path — avoids size_penalty cap at 1000 lines */
17
+ fileLineCounts) {
18
+ const selectedPaths = new Set(selectedFiles.map((f) => f.path));
19
+ const max = maxNearMisses ?? DEFAULT_MAX_NEAR_MISSES;
20
+ // Find files that were scored but not selected (and aren't stubs/exemplars)
21
+ const misses = [];
22
+ let rank = 0;
23
+ for (const scored of allScored) {
24
+ rank++;
25
+ if (selectedPaths.has(scored.path))
26
+ continue;
27
+ if (scored.score <= 0)
28
+ continue; // Don't report zero/negative-score files
29
+ if (misses.length >= max)
30
+ break;
31
+ // Estimate the file's token cost using language-aware calibration.
32
+ // Prefer actual line count from the repo index (avoids size_penalty cap at 1000).
33
+ const actualLines = fileLineCounts?.get(scored.path);
34
+ const estimatedLines = actualLines ?? Math.max(1, Math.round(scored.features.size_penalty * 1000));
35
+ const fileExt = scored.path.includes('.')
36
+ ? '.' + scored.path.split('.').pop()
37
+ : '';
38
+ const estimatedTokens = estimateTokensByExtension(estimatedLines, fileExt);
39
+ // How many tokens short of including this file?
40
+ const budgetRemaining = tokenBudgetTotal
41
+ ? tokenBudgetTotal - tokenBudgetUsed
42
+ : Infinity;
43
+ const gapTokens = Math.max(0, estimatedTokens - budgetRemaining);
44
+ // Generate a suggestion based on the file's characteristics
45
+ const suggestion = generateSuggestion(scored, gapTokens);
46
+ const reasons = [...scored.reasons];
47
+ misses.push({
48
+ path: scored.path,
49
+ score: Math.round(scored.score * 1000) / 1000,
50
+ rank,
51
+ reasons,
52
+ budget_gap_tokens: gapTokens,
53
+ suggestion,
54
+ });
55
+ }
56
+ return misses;
57
+ }
58
+ /**
59
+ * Generate a human-readable suggestion for how to include a near-miss file.
60
+ */
61
+ function generateSuggestion(scored, gapTokens) {
62
+ const parts = [];
63
+ // Extract the file's basename stem for keyword suggestion
64
+ const pathParts = scored.path.split('/');
65
+ const filename = pathParts[pathParts.length - 1] ?? '';
66
+ const stem = filename.replace(/\.\w+$/, '').split(/[-_.]/).join(' ');
67
+ if (gapTokens > 0) {
68
+ parts.push(`increase budget by ~${gapTokens} tokens`);
69
+ }
70
+ if (scored.features.keyword === 0 && stem) {
71
+ parts.push(`add "${stem}" to your task description`);
72
+ }
73
+ if (parts.length === 0) {
74
+ parts.push('increase --max-files or --budget');
75
+ }
76
+ return parts.join('; or ');
77
+ }
78
+ //# sourceMappingURL=near-miss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"near-miss.js","sourceRoot":"","sources":["../src/near-miss.ts"],"names":[],"mappings":"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"}
package/dist/scorer.d.ts CHANGED
@@ -3,7 +3,7 @@ export interface LedgerStats {
3
3
  success_files: Set<string>;
4
4
  fail_files: Set<string>;
5
5
  }
6
- export declare function computeFeatures(file: FileInfo, taskKeywords: string[], repoIndex: RepoIndex, ledgerStats?: LedgerStats, tokenWeights?: Map<string, number>): FileFeatures;
6
+ export declare function computeFeatures(file: FileInfo, taskKeywords: string[], repoIndex: RepoIndex, ledgerStats?: LedgerStats, tokenWeights?: Map<string, number>, branchChangedFiles?: Set<string>): FileFeatures;
7
7
  /**
8
8
  * Scale temporal signals (churn, recent_touch) by keyword strength.
9
9
  *
@@ -20,5 +20,5 @@ export declare function computeFeatures(file: FileInfo, taskKeywords: string[],
20
20
  export declare function gateTemporalFeatures(features: FileFeatures): FileFeatures;
21
21
  export declare function scoreFile(features: FileFeatures, weights: SelectorWeights): number;
22
22
  export declare function deriveReasons(features: FileFeatures): ReasonCode[];
23
- export declare function scoreAllCandidates(candidates: Set<string>, taskKeywords: string[], repoIndex: RepoIndex, weights: SelectorWeights, ledgerStats?: LedgerStats, tokenWeights?: Map<string, number>, fanoutFiles?: Set<string>): ScoredFile[];
23
+ export declare function scoreAllCandidates(candidates: Set<string>, taskKeywords: string[], repoIndex: RepoIndex, weights: SelectorWeights, ledgerStats?: LedgerStats, tokenWeights?: Map<string, number>, fanoutFiles?: Set<string>, branchChangedFiles?: Set<string>, surfaceFiles?: Set<string>): ScoredFile[];
24
24
  //# sourceMappingURL=scorer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,UAAU,EACV,eAAe,EACf,UAAU,EACX,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzB;AAkCD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,SAAS,EACpB,WAAW,CAAC,EAAE,WAAW,EACzB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,YAAY,CA6Gd;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,CAoBzE;AAED,wBAAgB,SAAS,CACvB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,eAAe,GACvB,MAAM,CAYR;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,EAAE,CAelE;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,eAAe,EACxB,WAAW,CAAC,EAAE,WAAW,EACzB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,UAAU,EAAE,CA8Bd"}
1
+ {"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,UAAU,EACV,eAAe,EACf,UAAU,EACX,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzB;AAkCD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,SAAS,EACpB,WAAW,CAAC,EAAE,WAAW,EACzB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC/B,YAAY,CAiHd;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,CAoBzE;AAED,wBAAgB,SAAS,CACvB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,eAAe,GACvB,MAAM,CAaR;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,EAAE,CAgBlE;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,eAAe,EACxB,WAAW,CAAC,EAAE,WAAW,EACzB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAChC,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACzB,UAAU,EAAE,CA0Cd"}
package/dist/scorer.js CHANGED
@@ -21,7 +21,7 @@ function detectErrorInfrastructure(file) {
21
21
  const isErrorInfra = stems.some((stem) => ERROR_INFRA_PATTERNS.some((pat) => stem === pat || stem === pat + 's'));
22
22
  return isErrorInfra ? 1.0 : 0;
23
23
  }
24
- export function computeFeatures(file, taskKeywords, repoIndex, ledgerStats, tokenWeights) {
24
+ export function computeFeatures(file, taskKeywords, repoIndex, ledgerStats, tokenWeights, branchChangedFiles) {
25
25
  const pathLower = file.path.toLowerCase();
26
26
  const contentKws = file.content_keywords ?? [];
27
27
  // Extract filename stems for exact-match boosting.
@@ -101,6 +101,8 @@ export function computeFeatures(file, taskKeywords, repoIndex, ledgerStats, toke
101
101
  const fail_prior = ledgerStats?.fail_files.has(file.path) ? 1.0 : 0;
102
102
  // ERROR_INFRA: detect error infrastructure files (custom errors, validators, error middleware)
103
103
  const error_infrastructure = detectErrorInfrastructure(file);
104
+ // BRANCH_CHANGED: work-in-progress awareness — boost files on the current branch
105
+ const branch_changed = branchChangedFiles?.has(file.path) ? 1.0 : 0;
104
106
  return {
105
107
  keyword,
106
108
  centrality,
@@ -111,6 +113,7 @@ export function computeFeatures(file, taskKeywords, repoIndex, ledgerStats, toke
111
113
  success_prior,
112
114
  fail_prior,
113
115
  error_infrastructure,
116
+ branch_changed,
114
117
  _hasContentMatch,
115
118
  };
116
119
  }
@@ -158,7 +161,8 @@ export function scoreFile(features, weights) {
158
161
  features.size_penalty * weights.size_penalty +
159
162
  features.success_prior * weights.success_prior -
160
163
  features.fail_prior * weights.fail_prior +
161
- features.error_infrastructure * (weights.error_infrastructure ?? 0.08));
164
+ features.error_infrastructure * (weights.error_infrastructure ?? 0.08) +
165
+ features.branch_changed * (weights.branch_changed ?? 0));
162
166
  }
163
167
  export function deriveReasons(features) {
164
168
  const reasons = [];
@@ -182,19 +186,25 @@ export function deriveReasons(features) {
182
186
  reasons.push('success_prior');
183
187
  if (features.error_infrastructure > 0)
184
188
  reasons.push('error_infrastructure');
189
+ if (features.branch_changed > 0)
190
+ reasons.push('branch_changed');
185
191
  return reasons;
186
192
  }
187
- export function scoreAllCandidates(candidates, taskKeywords, repoIndex, weights, ledgerStats, tokenWeights, fanoutFiles) {
193
+ export function scoreAllCandidates(candidates, taskKeywords, repoIndex, weights, ledgerStats, tokenWeights, fanoutFiles, branchChangedFiles, surfaceFiles) {
188
194
  const fileMap = new Map(repoIndex.files.map((f) => [f.path, f]));
189
195
  const results = [];
190
196
  for (const path of candidates) {
191
197
  const file = fileMap.get(path);
192
198
  if (!file)
193
199
  continue;
194
- const rawFeatures = computeFeatures(file, taskKeywords, repoIndex, ledgerStats, tokenWeights);
200
+ const rawFeatures = computeFeatures(file, taskKeywords, repoIndex, ledgerStats, tokenWeights, branchChangedFiles);
195
201
  const gated = gateTemporalFeatures(rawFeatures);
196
- // Preserve _hasContentMatch through gating for reason derivation
197
- const features = { ...gated, _hasContentMatch: rawFeatures._hasContentMatch };
202
+ // Preserve _hasContentMatch and branch_changed through gating for reason derivation
203
+ const features = {
204
+ ...gated,
205
+ _hasContentMatch: rawFeatures._hasContentMatch,
206
+ branch_changed: rawFeatures.branch_changed,
207
+ };
198
208
  let score = scoreFile(features, weights);
199
209
  const reasons = deriveReasons(features);
200
210
  // Fan-out bonus: files pulled in via dependent expansion get a boost
@@ -205,6 +215,13 @@ export function scoreAllCandidates(candidates, taskKeywords, repoIndex, weights,
205
215
  reasons.push('dependent_neighbor');
206
216
  }
207
217
  }
218
+ // Surface files get scored at 0 with a dedicated reason, so they fill
219
+ // remaining budget slots without competing with keyword-scored files.
220
+ if (surfaceFiles?.has(path) && features.keyword === 0) {
221
+ score = 0;
222
+ reasons.length = 0;
223
+ reasons.push('surface_auto_include');
224
+ }
208
225
  results.push({ path, score, features, reasons });
209
226
  }
210
227
  // Sort by score descending
@@ -1 +1 @@
1
- {"version":3,"file":"scorer.js","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scorer.js","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../src/stubs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAc,MAAM,mBAAmB,CAAC;AAE1E;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,EAChB,oBAAoB,EAAE,MAAM,GAC3B,UAAU,EAAE,CAuDd"}
1
+ {"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../src/stubs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAc,MAAM,mBAAmB,CAAC;AAG1E;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,EAChB,oBAAoB,EAAE,MAAM,GAC3B,UAAU,EAAE,CAuDd"}
package/dist/stubs.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { readFileSync } from 'node:fs';
2
- import { join } from 'node:path';
2
+ import { join, extname } from 'node:path';
3
+ import { estimateTokensByExtension } from './token-calibration.js';
3
4
  /**
4
5
  * Extract lightweight interface stubs for files that are imported by bundle files
5
6
  * but didn't make the cut. These stubs contain only exported type signatures —
@@ -25,7 +26,6 @@ export function generateInterfaceStubs(root, selectedPaths, depGraph, maxStubs,
25
26
  .slice(0, maxStubs);
26
27
  const stubs = [];
27
28
  let tokensUsed = 0;
28
- const TOKENS_PER_LINE = 4;
29
29
  for (const [filePath] of sorted) {
30
30
  const absPath = join(root, filePath);
31
31
  let content;
@@ -39,7 +39,8 @@ export function generateInterfaceStubs(root, selectedPaths, depGraph, maxStubs,
39
39
  if (!stubContent)
40
40
  continue;
41
41
  const lines = stubContent.split('\n').length;
42
- const tokenEstimate = lines * TOKENS_PER_LINE;
42
+ const fileExt = extname(filePath);
43
+ const tokenEstimate = estimateTokensByExtension(lines, fileExt);
43
44
  if (tokensUsed + tokenEstimate > tokenBudgetRemaining)
44
45
  continue;
45
46
  const reasons = ['interface_stub'];
package/dist/stubs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"stubs.js","sourceRoot":"","sources":["../src/stubs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stubs.js","sourceRoot":"","sources":["../src/stubs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { SelectorWeights } from '@codeledger/types';
2
+ /**
3
+ * Task-Type Auto-Inference (Feature 12)
4
+ *
5
+ * Automatically detects the task type from the task description and
6
+ * returns weight adjustments that emphasize the most relevant scoring
7
+ * dimensions for that task type.
8
+ *
9
+ * Task types:
10
+ * - bug_fix: emphasizes error_infrastructure, recent_touch
11
+ * - feature_add: emphasizes centrality, keyword
12
+ * - refactor: emphasizes churn, centrality
13
+ * - test_update: emphasizes test_relevance, keyword
14
+ * - config: emphasizes keyword (infrastructure files)
15
+ * - general: no adjustment (default weights)
16
+ */
17
+ export type TaskType = 'bug_fix' | 'feature_add' | 'refactor' | 'test_update' | 'config' | 'general';
18
+ /**
19
+ * Infer the task type from the task description.
20
+ * Returns the most likely type based on keyword pattern matching.
21
+ */
22
+ export declare function inferTaskType(taskText: string): TaskType;
23
+ /**
24
+ * Apply task-type weight adjustments to the base weights.
25
+ * Returns a new weights object with scaled values.
26
+ */
27
+ export declare function applyTaskTypeWeights(baseWeights: SelectorWeights, taskType: TaskType): SelectorWeights;
28
+ //# sourceMappingURL=task-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-type.d.ts","sourceRoot":"","sources":["../src/task-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,aAAa,GACb,UAAU,GACV,aAAa,GACb,QAAQ,GACR,SAAS,CAAC;AA8Bd;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAmCxD;AAoCD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,eAAe,EAC5B,QAAQ,EAAE,QAAQ,GACjB,eAAe,CAYjB"}