@promptwheel/core 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/codebase-index/index.d.ts +23 -0
  2. package/dist/codebase-index/index.d.ts.map +1 -0
  3. package/dist/codebase-index/index.js +361 -0
  4. package/dist/codebase-index/index.js.map +1 -0
  5. package/dist/codebase-index/shared.d.ts +95 -0
  6. package/dist/codebase-index/shared.d.ts.map +1 -0
  7. package/dist/codebase-index/shared.js +319 -0
  8. package/dist/codebase-index/shared.js.map +1 -0
  9. package/dist/config/defaults.d.ts +45 -0
  10. package/dist/config/defaults.d.ts.map +1 -0
  11. package/dist/config/defaults.js +79 -0
  12. package/dist/config/defaults.js.map +1 -0
  13. package/dist/critic/shared.d.ts +49 -0
  14. package/dist/critic/shared.d.ts.map +1 -0
  15. package/dist/critic/shared.js +204 -0
  16. package/dist/critic/shared.js.map +1 -0
  17. package/dist/db/adapter.d.ts +191 -0
  18. package/dist/db/adapter.d.ts.map +1 -0
  19. package/dist/db/adapter.js +40 -0
  20. package/dist/db/adapter.js.map +1 -0
  21. package/dist/db/contract.d.ts +47 -0
  22. package/dist/db/contract.d.ts.map +1 -0
  23. package/dist/db/contract.js +258 -0
  24. package/dist/db/contract.js.map +1 -0
  25. package/dist/db/index.d.ts +6 -0
  26. package/dist/db/index.d.ts.map +1 -0
  27. package/dist/db/index.js +7 -0
  28. package/dist/db/index.js.map +1 -0
  29. package/dist/dedup/shared.d.ts +82 -0
  30. package/dist/dedup/shared.d.ts.map +1 -0
  31. package/dist/dedup/shared.js +215 -0
  32. package/dist/dedup/shared.js.map +1 -0
  33. package/dist/exec/index.d.ts +5 -0
  34. package/dist/exec/index.d.ts.map +1 -0
  35. package/dist/exec/index.js +5 -0
  36. package/dist/exec/index.js.map +1 -0
  37. package/dist/exec/types.d.ts +64 -0
  38. package/dist/exec/types.d.ts.map +1 -0
  39. package/dist/exec/types.js +8 -0
  40. package/dist/exec/types.js.map +1 -0
  41. package/dist/formulas/shared.d.ts +42 -0
  42. package/dist/formulas/shared.d.ts.map +1 -0
  43. package/dist/formulas/shared.js +204 -0
  44. package/dist/formulas/shared.js.map +1 -0
  45. package/dist/guidelines/shared.d.ts +46 -0
  46. package/dist/guidelines/shared.d.ts.map +1 -0
  47. package/dist/guidelines/shared.js +128 -0
  48. package/dist/guidelines/shared.js.map +1 -0
  49. package/dist/index.d.ts +35 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +51 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/learnings/shared.d.ts +112 -0
  54. package/dist/learnings/shared.d.ts.map +1 -0
  55. package/dist/learnings/shared.js +402 -0
  56. package/dist/learnings/shared.js.map +1 -0
  57. package/dist/proposals/shared.d.ts +137 -0
  58. package/dist/proposals/shared.d.ts.map +1 -0
  59. package/dist/proposals/shared.js +254 -0
  60. package/dist/proposals/shared.js.map +1 -0
  61. package/dist/repos/index.d.ts +15 -0
  62. package/dist/repos/index.d.ts.map +1 -0
  63. package/dist/repos/index.js +11 -0
  64. package/dist/repos/index.js.map +1 -0
  65. package/dist/repos/projects.d.ts +41 -0
  66. package/dist/repos/projects.d.ts.map +1 -0
  67. package/dist/repos/projects.js +75 -0
  68. package/dist/repos/projects.js.map +1 -0
  69. package/dist/repos/run_steps.d.ts +152 -0
  70. package/dist/repos/run_steps.d.ts.map +1 -0
  71. package/dist/repos/run_steps.js +328 -0
  72. package/dist/repos/run_steps.js.map +1 -0
  73. package/dist/repos/runs.d.ts +92 -0
  74. package/dist/repos/runs.d.ts.map +1 -0
  75. package/dist/repos/runs.js +185 -0
  76. package/dist/repos/runs.js.map +1 -0
  77. package/dist/repos/tickets.d.ts +71 -0
  78. package/dist/repos/tickets.d.ts.map +1 -0
  79. package/dist/repos/tickets.js +158 -0
  80. package/dist/repos/tickets.js.map +1 -0
  81. package/dist/scope/shared.d.ts +67 -0
  82. package/dist/scope/shared.d.ts.map +1 -0
  83. package/dist/scope/shared.js +355 -0
  84. package/dist/scope/shared.js.map +1 -0
  85. package/dist/scout/index.d.ts +18 -0
  86. package/dist/scout/index.d.ts.map +1 -0
  87. package/dist/scout/index.js +445 -0
  88. package/dist/scout/index.js.map +1 -0
  89. package/dist/scout/kimi-runner.d.ts +21 -0
  90. package/dist/scout/kimi-runner.d.ts.map +1 -0
  91. package/dist/scout/kimi-runner.js +76 -0
  92. package/dist/scout/kimi-runner.js.map +1 -0
  93. package/dist/scout/mcp-batch-server.d.ts +37 -0
  94. package/dist/scout/mcp-batch-server.d.ts.map +1 -0
  95. package/dist/scout/mcp-batch-server.js +144 -0
  96. package/dist/scout/mcp-batch-server.js.map +1 -0
  97. package/dist/scout/openai-local-runner.d.ts +20 -0
  98. package/dist/scout/openai-local-runner.d.ts.map +1 -0
  99. package/dist/scout/openai-local-runner.js +82 -0
  100. package/dist/scout/openai-local-runner.js.map +1 -0
  101. package/dist/scout/prompt.d.ts +49 -0
  102. package/dist/scout/prompt.d.ts.map +1 -0
  103. package/dist/scout/prompt.js +153 -0
  104. package/dist/scout/prompt.js.map +1 -0
  105. package/dist/scout/runner.d.ts +101 -0
  106. package/dist/scout/runner.d.ts.map +1 -0
  107. package/dist/scout/runner.js +521 -0
  108. package/dist/scout/runner.js.map +1 -0
  109. package/dist/scout/scanner.d.ts +61 -0
  110. package/dist/scout/scanner.d.ts.map +1 -0
  111. package/dist/scout/scanner.js +315 -0
  112. package/dist/scout/scanner.js.map +1 -0
  113. package/dist/scout/types.d.ts +221 -0
  114. package/dist/scout/types.d.ts.map +1 -0
  115. package/dist/scout/types.js +44 -0
  116. package/dist/scout/types.js.map +1 -0
  117. package/dist/sectors/shared.d.ts +146 -0
  118. package/dist/sectors/shared.d.ts.map +1 -0
  119. package/dist/sectors/shared.js +408 -0
  120. package/dist/sectors/shared.js.map +1 -0
  121. package/dist/services/index.d.ts +10 -0
  122. package/dist/services/index.d.ts.map +1 -0
  123. package/dist/services/index.js +9 -0
  124. package/dist/services/index.js.map +1 -0
  125. package/dist/services/qa.d.ts +76 -0
  126. package/dist/services/qa.d.ts.map +1 -0
  127. package/dist/services/qa.js +228 -0
  128. package/dist/services/qa.js.map +1 -0
  129. package/dist/services/scout.d.ts +164 -0
  130. package/dist/services/scout.d.ts.map +1 -0
  131. package/dist/services/scout.js +215 -0
  132. package/dist/services/scout.js.map +1 -0
  133. package/dist/spindle/shared.d.ts +14 -0
  134. package/dist/spindle/shared.d.ts.map +1 -0
  135. package/dist/spindle/shared.js +65 -0
  136. package/dist/spindle/shared.js.map +1 -0
  137. package/dist/tools/shared.d.ts +35 -0
  138. package/dist/tools/shared.d.ts.map +1 -0
  139. package/dist/tools/shared.js +247 -0
  140. package/dist/tools/shared.js.map +1 -0
  141. package/dist/trace/shared.d.ts +147 -0
  142. package/dist/trace/shared.d.ts.map +1 -0
  143. package/dist/trace/shared.js +414 -0
  144. package/dist/trace/shared.js.map +1 -0
  145. package/dist/trajectory/shared.d.ts +69 -0
  146. package/dist/trajectory/shared.d.ts.map +1 -0
  147. package/dist/trajectory/shared.js +336 -0
  148. package/dist/trajectory/shared.js.map +1 -0
  149. package/dist/utils/id.d.ts +12 -0
  150. package/dist/utils/id.d.ts.map +1 -0
  151. package/dist/utils/id.js +24 -0
  152. package/dist/utils/id.js.map +1 -0
  153. package/dist/utils/id.test.d.ts +5 -0
  154. package/dist/utils/id.test.d.ts.map +1 -0
  155. package/dist/utils/id.test.js +173 -0
  156. package/dist/utils/id.test.js.map +1 -0
  157. package/dist/utils/index.d.ts +6 -0
  158. package/dist/utils/index.d.ts.map +1 -0
  159. package/dist/utils/index.js +6 -0
  160. package/dist/utils/index.js.map +1 -0
  161. package/dist/utils/json.d.ts +9 -0
  162. package/dist/utils/json.d.ts.map +1 -0
  163. package/dist/utils/json.js +19 -0
  164. package/dist/utils/json.js.map +1 -0
  165. package/dist/waves/shared.d.ts +106 -0
  166. package/dist/waves/shared.d.ts.map +1 -0
  167. package/dist/waves/shared.js +356 -0
  168. package/dist/waves/shared.js.map +1 -0
  169. package/package.json +126 -0
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Wave scheduling shared algorithms — pure functions for conflict-free
3
+ * parallel execution partitioning.
4
+ *
5
+ * Detects potential merge conflicts between proposals based on file paths,
6
+ * sibling files, shared directories, monorepo packages, and conflict-prone
7
+ * hub files (index.ts, configs, etc.).
8
+ *
9
+ * No filesystem, git, or child_process I/O.
10
+ */
11
+ import type { CodebaseIndex } from '../codebase-index/shared.js';
12
+ import type { SectorState } from '../sectors/shared.js';
13
+ export type ConflictSensitivity = 'strict' | 'normal' | 'relaxed';
14
+ export interface ConflictDetectionOptions {
15
+ /**
16
+ * Sensitivity level:
17
+ * - 'strict': Any shared directory or package = conflict (safest, most sequential)
18
+ * - 'normal': Sibling files + conflict-prone files + shared dirs (balanced)
19
+ * - 'relaxed': Only direct file overlap + glob overlap (most parallel, riskier)
20
+ */
21
+ sensitivity?: ConflictSensitivity;
22
+ }
23
+ /**
24
+ * Files that frequently cause merge conflicts when multiple tickets
25
+ * touch the same directory. These are "hub" files that re-export or
26
+ * aggregate content from sibling files.
27
+ */
28
+ export declare const CONFLICT_PRONE_FILENAMES: Set<string>;
29
+ /**
30
+ * Directory patterns that indicate shared/common code.
31
+ * Files in these directories are more likely to be touched by multiple tickets.
32
+ */
33
+ export declare const SHARED_DIRECTORY_PATTERNS: RegExp[];
34
+ /** Monorepo top-level directory patterns. */
35
+ export declare const PACKAGE_PATTERN: RegExp;
36
+ /** Default directory overlap threshold for normal mode. */
37
+ export declare const DIRECTORY_OVERLAP_NORMAL = 0.3;
38
+ /** Default directory overlap threshold for strict mode. */
39
+ export declare const DIRECTORY_OVERLAP_STRICT = 0.2;
40
+ /** Extract the directory and filename from a path. */
41
+ export declare function parsePath(filePath: string): {
42
+ dir: string;
43
+ filename: string;
44
+ };
45
+ /**
46
+ * Check if two file paths overlap: exact match, directory containment,
47
+ * or glob pattern overlap.
48
+ */
49
+ export declare function pathsOverlap(pathA: string, pathB: string): boolean;
50
+ /**
51
+ * Check if two sets of file paths share directories above a threshold.
52
+ * Used for semantic conflict detection in wave scheduling.
53
+ */
54
+ export declare function directoriesOverlap(pathsA: string[], pathsB: string[], threshold?: number): boolean;
55
+ /** Check if a file is conflict-prone (index files, configs, etc.) */
56
+ export declare function isConflictProneFile(filePath: string): boolean;
57
+ /** Check if a path is in a shared/common directory. */
58
+ export declare function isInSharedDirectory(filePath: string): boolean;
59
+ /** Get all unique directories from a list of file paths, including parent hierarchy. */
60
+ export declare function getDirectories(files: string[]): Set<string>;
61
+ /**
62
+ * Check if two proposals have sibling files (different files in the same directory).
63
+ */
64
+ export declare function hasSiblingFiles(filesA: string[], filesB: string[]): boolean;
65
+ /**
66
+ * Check if either proposal touches conflict-prone files in overlapping directories.
67
+ */
68
+ export declare function hasConflictProneOverlap(filesA: string[], filesB: string[]): boolean;
69
+ /**
70
+ * Check if proposals share a common parent directory that might have
71
+ * configuration or index files affected by both changes.
72
+ */
73
+ export declare function hasSharedParentConflict(filesA: string[], filesB: string[]): boolean;
74
+ /**
75
+ * Monorepo-aware: check if both proposals touch the same package.
76
+ * Common patterns: packages/*, apps/*, libs/*, modules/*
77
+ */
78
+ export declare function touchesSamePackage(filesA: string[], filesB: string[]): boolean;
79
+ /**
80
+ * Check if two proposals have a potential conflict based on their file lists.
81
+ */
82
+ export declare function proposalsConflict<T extends {
83
+ files: string[];
84
+ category?: string;
85
+ }>(a: T, b: T, options?: ConflictDetectionOptions): boolean;
86
+ /**
87
+ * Partition proposals into conflict-free waves.
88
+ * Proposals with overlapping file paths go into separate waves
89
+ * so they run sequentially, avoiding merge conflicts.
90
+ *
91
+ * Uses a greedy first-fit bin-packing algorithm.
92
+ *
93
+ * @param proposals - List of proposals with file paths
94
+ * @param options - Conflict detection options
95
+ * @returns Array of waves, each containing non-conflicting proposals
96
+ */
97
+ export declare function partitionIntoWaves<T extends {
98
+ files: string[];
99
+ category?: string;
100
+ }>(proposals: T[], options?: ConflictDetectionOptions): T[][];
101
+ /**
102
+ * Build escalation prompt text for scout retries.
103
+ * Suggests unexplored modules and fresh angles when previous attempts found nothing.
104
+ */
105
+ export declare function buildScoutEscalation(retryCount: number, scoutedDirs: string[], codebaseIndex: CodebaseIndex | null, sectorState?: SectorState): string;
106
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/waves/shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMxD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElE,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAMD;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,aAgCnC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,yBAAyB,UAUrC,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,eAAe,QAA2C,CAAC;AAExE,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAM5C,sDAAsD;AACtD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAU7E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CA6BlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,SAAM,GAAG,OAAO,CAO/F;AAMD,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED,uDAAuD;AACvD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAY3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAU3E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAanF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAUnF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAkB9E;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAChF,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,OAAO,GAAE,wBAA6B,GACrC,OAAO,CA0CT;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EACjF,SAAS,EAAE,CAAC,EAAE,EACd,OAAO,GAAE,wBAA6B,GACrC,CAAC,EAAE,EAAE,CAmBP;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,EAAE,aAAa,GAAG,IAAI,EACnC,WAAW,CAAC,EAAE,WAAW,GACxB,MAAM,CAsDR"}
@@ -0,0 +1,356 @@
1
+ /**
2
+ * Wave scheduling shared algorithms — pure functions for conflict-free
3
+ * parallel execution partitioning.
4
+ *
5
+ * Detects potential merge conflicts between proposals based on file paths,
6
+ * sibling files, shared directories, monorepo packages, and conflict-prone
7
+ * hub files (index.ts, configs, etc.).
8
+ *
9
+ * No filesystem, git, or child_process I/O.
10
+ */
11
+ // ---------------------------------------------------------------------------
12
+ // Constants
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * Files that frequently cause merge conflicts when multiple tickets
16
+ * touch the same directory. These are "hub" files that re-export or
17
+ * aggregate content from sibling files.
18
+ */
19
+ export const CONFLICT_PRONE_FILENAMES = new Set([
20
+ 'index.ts',
21
+ 'index.tsx',
22
+ 'index.js',
23
+ 'index.jsx',
24
+ 'index.mjs',
25
+ 'index.cjs',
26
+ 'mod.ts', // Deno convention
27
+ 'mod.js',
28
+ 'package.json',
29
+ 'tsconfig.json',
30
+ 'vite.config.ts',
31
+ 'vitest.config.ts',
32
+ 'jest.config.js',
33
+ 'jest.config.ts',
34
+ '.eslintrc.js',
35
+ '.eslintrc.json',
36
+ 'eslint.config.js',
37
+ 'eslint.config.mjs',
38
+ '__init__.py', // Python
39
+ 'Cargo.toml', // Rust
40
+ 'go.mod', // Go
41
+ 'build.gradle', // Java/Kotlin
42
+ 'pom.xml', // Maven
43
+ 'Gemfile', // Ruby
44
+ 'mix.exs', // Elixir
45
+ 'Package.swift', // Swift
46
+ 'pubspec.yaml', // Dart/Flutter
47
+ 'build.sbt', // Scala
48
+ 'stack.yaml', // Haskell
49
+ 'build.zig', // Zig
50
+ 'CMakeLists.txt', // C/C++
51
+ ]);
52
+ /**
53
+ * Directory patterns that indicate shared/common code.
54
+ * Files in these directories are more likely to be touched by multiple tickets.
55
+ */
56
+ export const SHARED_DIRECTORY_PATTERNS = [
57
+ /\/shared\//,
58
+ /\/common\//,
59
+ /\/utils\//,
60
+ /\/helpers\//,
61
+ /\/lib\//,
62
+ /\/types\//,
63
+ /\/interfaces\//,
64
+ /\/constants\//,
65
+ /\/config\//,
66
+ ];
67
+ /** Monorepo top-level directory patterns. */
68
+ export const PACKAGE_PATTERN = /^(packages|apps|libs|modules)\/([^/]+)/;
69
+ /** Default directory overlap threshold for normal mode. */
70
+ export const DIRECTORY_OVERLAP_NORMAL = 0.3;
71
+ /** Default directory overlap threshold for strict mode. */
72
+ export const DIRECTORY_OVERLAP_STRICT = 0.2;
73
+ // ---------------------------------------------------------------------------
74
+ // Path helpers
75
+ // ---------------------------------------------------------------------------
76
+ /** Extract the directory and filename from a path. */
77
+ export function parsePath(filePath) {
78
+ const normalized = filePath.replace(/^\.\//, '').replace(/\/$/, '');
79
+ const lastSlash = normalized.lastIndexOf('/');
80
+ if (lastSlash === -1) {
81
+ return { dir: '.', filename: normalized };
82
+ }
83
+ return {
84
+ dir: normalized.slice(0, lastSlash),
85
+ filename: normalized.slice(lastSlash + 1),
86
+ };
87
+ }
88
+ /**
89
+ * Check if two file paths overlap: exact match, directory containment,
90
+ * or glob pattern overlap.
91
+ */
92
+ export function pathsOverlap(pathA, pathB) {
93
+ // Normalize paths (remove trailing slashes, handle ./prefix)
94
+ const normA = pathA.replace(/^\.\//, '').replace(/\/$/, '');
95
+ const normB = pathB.replace(/^\.\//, '').replace(/\/$/, '');
96
+ // Exact match
97
+ if (normA === normB) {
98
+ return true;
99
+ }
100
+ // One is prefix of other (directory containment)
101
+ if (normA.startsWith(normB + '/') || normB.startsWith(normA + '/')) {
102
+ return true;
103
+ }
104
+ // Check for glob pattern overlaps
105
+ const hasGlobA = normA.includes('*');
106
+ const hasGlobB = normB.includes('*');
107
+ if (hasGlobA || hasGlobB) {
108
+ const baseA = normA.split('*')[0].replace(/\/$/, '');
109
+ const baseB = normB.split('*')[0].replace(/\/$/, '');
110
+ if (baseA === baseB || baseA.startsWith(baseB + '/') || baseB.startsWith(baseA + '/')) {
111
+ return true;
112
+ }
113
+ }
114
+ return false;
115
+ }
116
+ /**
117
+ * Check if two sets of file paths share directories above a threshold.
118
+ * Used for semantic conflict detection in wave scheduling.
119
+ */
120
+ export function directoriesOverlap(pathsA, pathsB, threshold = 0.3) {
121
+ const dirsA = new Set(pathsA.map(p => parsePath(p).dir));
122
+ const dirsB = new Set(pathsB.map(p => parsePath(p).dir));
123
+ if (dirsA.size === 0 || dirsB.size === 0)
124
+ return false;
125
+ let n = 0;
126
+ for (const d of dirsA) {
127
+ if (dirsB.has(d))
128
+ n++;
129
+ }
130
+ return (n / Math.min(dirsA.size, dirsB.size)) >= threshold;
131
+ }
132
+ // ---------------------------------------------------------------------------
133
+ // Conflict detection helpers
134
+ // ---------------------------------------------------------------------------
135
+ /** Check if a file is conflict-prone (index files, configs, etc.) */
136
+ export function isConflictProneFile(filePath) {
137
+ const { filename } = parsePath(filePath);
138
+ return CONFLICT_PRONE_FILENAMES.has(filename);
139
+ }
140
+ /** Check if a path is in a shared/common directory. */
141
+ export function isInSharedDirectory(filePath) {
142
+ return SHARED_DIRECTORY_PATTERNS.some(pattern => pattern.test(filePath));
143
+ }
144
+ /** Get all unique directories from a list of file paths, including parent hierarchy. */
145
+ export function getDirectories(files) {
146
+ const dirs = new Set();
147
+ for (const file of files) {
148
+ const { dir } = parsePath(file);
149
+ dirs.add(dir);
150
+ // Also add parent directories for hierarchical conflict detection
151
+ const parts = dir.split('/');
152
+ for (let i = 1; i < parts.length; i++) {
153
+ dirs.add(parts.slice(0, i).join('/'));
154
+ }
155
+ }
156
+ return dirs;
157
+ }
158
+ /**
159
+ * Check if two proposals have sibling files (different files in the same directory).
160
+ */
161
+ export function hasSiblingFiles(filesA, filesB) {
162
+ const dirsA = new Set(filesA.map(f => parsePath(f).dir));
163
+ const dirsB = new Set(filesB.map(f => parsePath(f).dir));
164
+ for (const dir of dirsA) {
165
+ if (dirsB.has(dir)) {
166
+ return true;
167
+ }
168
+ }
169
+ return false;
170
+ }
171
+ /**
172
+ * Check if either proposal touches conflict-prone files in overlapping directories.
173
+ */
174
+ export function hasConflictProneOverlap(filesA, filesB) {
175
+ const dirsA = new Set(filesA.map(f => parsePath(f).dir));
176
+ const dirsB = new Set(filesB.map(f => parsePath(f).dir));
177
+ for (const file of [...filesA, ...filesB]) {
178
+ if (isConflictProneFile(file)) {
179
+ const { dir } = parsePath(file);
180
+ if (dirsA.has(dir) && dirsB.has(dir)) {
181
+ return true;
182
+ }
183
+ }
184
+ }
185
+ return false;
186
+ }
187
+ /**
188
+ * Check if proposals share a common parent directory that might have
189
+ * configuration or index files affected by both changes.
190
+ */
191
+ export function hasSharedParentConflict(filesA, filesB) {
192
+ const dirsA = getDirectories(filesA);
193
+ const dirsB = getDirectories(filesB);
194
+ for (const dir of dirsA) {
195
+ if (dirsB.has(dir) && isInSharedDirectory(dir + '/')) {
196
+ return true;
197
+ }
198
+ }
199
+ return false;
200
+ }
201
+ /**
202
+ * Monorepo-aware: check if both proposals touch the same package.
203
+ * Common patterns: packages/*, apps/*, libs/*, modules/*
204
+ */
205
+ export function touchesSamePackage(filesA, filesB) {
206
+ const packagesA = new Set();
207
+ const packagesB = new Set();
208
+ for (const file of filesA) {
209
+ const match = file.match(PACKAGE_PATTERN);
210
+ if (match)
211
+ packagesA.add(match[0]);
212
+ }
213
+ for (const file of filesB) {
214
+ const match = file.match(PACKAGE_PATTERN);
215
+ if (match)
216
+ packagesB.add(match[0]);
217
+ }
218
+ for (const pkg of packagesA) {
219
+ if (packagesB.has(pkg))
220
+ return true;
221
+ }
222
+ return false;
223
+ }
224
+ // ---------------------------------------------------------------------------
225
+ // Main conflict detection
226
+ // ---------------------------------------------------------------------------
227
+ /**
228
+ * Check if two proposals have a potential conflict based on their file lists.
229
+ */
230
+ export function proposalsConflict(a, b, options = {}) {
231
+ const { sensitivity = 'normal' } = options;
232
+ // Always check: direct file path overlap (exact match or containment)
233
+ if (a.files.some(fA => b.files.some(fB => pathsOverlap(fA, fB)))) {
234
+ return true;
235
+ }
236
+ if (sensitivity === 'relaxed') {
237
+ return false;
238
+ }
239
+ // Normal and strict: check sibling files in same directory
240
+ if (hasSiblingFiles(a.files, b.files)) {
241
+ if (sensitivity === 'strict') {
242
+ return true;
243
+ }
244
+ // Normal: sibling + (conflict-prone OR same category)
245
+ if (hasConflictProneOverlap(a.files, b.files)) {
246
+ return true;
247
+ }
248
+ if (a.category && b.category && a.category === b.category) {
249
+ return true;
250
+ }
251
+ }
252
+ // Normal and strict: check directory overlap threshold
253
+ if (directoriesOverlap(a.files, b.files, sensitivity === 'strict' ? DIRECTORY_OVERLAP_STRICT : DIRECTORY_OVERLAP_NORMAL)) {
254
+ return true;
255
+ }
256
+ // Strict only: same package in monorepo
257
+ if (sensitivity === 'strict' && touchesSamePackage(a.files, b.files)) {
258
+ return true;
259
+ }
260
+ // Strict only: shared parent directory
261
+ if (sensitivity === 'strict' && hasSharedParentConflict(a.files, b.files)) {
262
+ return true;
263
+ }
264
+ return false;
265
+ }
266
+ // ---------------------------------------------------------------------------
267
+ // Wave partitioning
268
+ // ---------------------------------------------------------------------------
269
+ /**
270
+ * Partition proposals into conflict-free waves.
271
+ * Proposals with overlapping file paths go into separate waves
272
+ * so they run sequentially, avoiding merge conflicts.
273
+ *
274
+ * Uses a greedy first-fit bin-packing algorithm.
275
+ *
276
+ * @param proposals - List of proposals with file paths
277
+ * @param options - Conflict detection options
278
+ * @returns Array of waves, each containing non-conflicting proposals
279
+ */
280
+ export function partitionIntoWaves(proposals, options = {}) {
281
+ const waves = [];
282
+ for (const proposal of proposals) {
283
+ let placed = false;
284
+ for (const wave of waves) {
285
+ const conflicts = wave.some(existing => proposalsConflict(existing, proposal, options));
286
+ if (!conflicts) {
287
+ wave.push(proposal);
288
+ placed = true;
289
+ break;
290
+ }
291
+ }
292
+ if (!placed) {
293
+ waves.push([proposal]);
294
+ }
295
+ }
296
+ return waves;
297
+ }
298
+ // ---------------------------------------------------------------------------
299
+ // Scout escalation
300
+ // ---------------------------------------------------------------------------
301
+ /**
302
+ * Build escalation prompt text for scout retries.
303
+ * Suggests unexplored modules and fresh angles when previous attempts found nothing.
304
+ */
305
+ export function buildScoutEscalation(retryCount, scoutedDirs, codebaseIndex, sectorState) {
306
+ const parts = [
307
+ '## Previous Attempts Found Nothing — Fresh Approach Required',
308
+ '',
309
+ ];
310
+ if (scoutedDirs.length > 0) {
311
+ parts.push('### What Was Already Tried');
312
+ for (const dir of scoutedDirs) {
313
+ parts.push(`- Scouted \`${dir}\``);
314
+ }
315
+ parts.push('');
316
+ }
317
+ // Suggest unexplored modules from codebase index
318
+ const exploredSet = new Set(scoutedDirs.map(d => d.replace(/\/$/, '')));
319
+ const unexplored = [];
320
+ if (codebaseIndex) {
321
+ for (const mod of codebaseIndex.modules) {
322
+ if (!exploredSet.has(mod.path) && !exploredSet.has(mod.path + '/')) {
323
+ unexplored.push(mod.path);
324
+ }
325
+ }
326
+ }
327
+ // Sort unexplored by sector history when available
328
+ if (sectorState && unexplored.length > 0) {
329
+ const sectorByPath = new Map(sectorState.sectors.map(s => [s.path, s]));
330
+ unexplored.sort((a, b) => {
331
+ const sa = sectorByPath.get(a);
332
+ const sb = sectorByPath.get(b);
333
+ // Fewer scans first
334
+ const scanA = sa?.scanCount ?? 0;
335
+ const scanB = sb?.scanCount ?? 0;
336
+ if (scanA !== scanB)
337
+ return scanA - scanB;
338
+ // Higher yield first
339
+ const yieldA = sa?.proposalYield ?? 0;
340
+ const yieldB = sb?.proposalYield ?? 0;
341
+ return yieldB - yieldA;
342
+ });
343
+ }
344
+ parts.push('### What to Do Differently');
345
+ parts.push('');
346
+ parts.push('Knowing everything from the attempts above, take a completely different angle:');
347
+ parts.push('- Do NOT re-read the directories listed above.');
348
+ if (unexplored.length > 0) {
349
+ parts.push(`- Try unexplored areas: ${unexplored.slice(0, 8).map(d => `\`${d}\``).join(', ')}`);
350
+ }
351
+ parts.push('- Switch categories: if you looked for bugs, look for tests. If tests, try security.');
352
+ parts.push('- Read at least 15 NEW source files.');
353
+ parts.push('- If genuinely nothing to improve, explain your analysis across all attempts.');
354
+ return parts.join('\n');
355
+ }
356
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/waves/shared.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,126 @@
1
+ {
2
+ "name": "@promptwheel/core",
3
+ "version": "0.6.0",
4
+ "description": "Core business logic and database adapter interface for PromptWheel",
5
+ "author": "PromptWheel",
6
+ "homepage": "https://promptwheel.com",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/promptwheel-ai/promptwheel.git",
10
+ "directory": "packages/core"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/promptwheel-ai/promptwheel/issues"
14
+ },
15
+ "type": "module",
16
+ "main": "dist/index.js",
17
+ "types": "dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ },
23
+ "./db": {
24
+ "types": "./dist/db/index.d.ts",
25
+ "import": "./dist/db/index.js"
26
+ },
27
+ "./repos": {
28
+ "types": "./dist/repos/index.d.ts",
29
+ "import": "./dist/repos/index.js"
30
+ },
31
+ "./services": {
32
+ "types": "./dist/services/index.d.ts",
33
+ "import": "./dist/services/index.js"
34
+ },
35
+ "./scout": {
36
+ "types": "./dist/scout/index.d.ts",
37
+ "import": "./dist/scout/index.js"
38
+ },
39
+ "./utils": {
40
+ "types": "./dist/utils/index.d.ts",
41
+ "import": "./dist/utils/index.js"
42
+ },
43
+ "./codebase-index": {
44
+ "types": "./dist/codebase-index/index.d.ts",
45
+ "import": "./dist/codebase-index/index.js"
46
+ },
47
+ "./codebase-index/shared": {
48
+ "types": "./dist/codebase-index/shared.d.ts",
49
+ "import": "./dist/codebase-index/shared.js"
50
+ },
51
+ "./spindle/shared": {
52
+ "types": "./dist/spindle/shared.d.ts",
53
+ "import": "./dist/spindle/shared.js"
54
+ },
55
+ "./dedup/shared": {
56
+ "types": "./dist/dedup/shared.d.ts",
57
+ "import": "./dist/dedup/shared.js"
58
+ },
59
+ "./scope/shared": {
60
+ "types": "./dist/scope/shared.d.ts",
61
+ "import": "./dist/scope/shared.js"
62
+ },
63
+ "./guidelines/shared": {
64
+ "types": "./dist/guidelines/shared.d.ts",
65
+ "import": "./dist/guidelines/shared.js"
66
+ },
67
+ "./learnings/shared": {
68
+ "types": "./dist/learnings/shared.d.ts",
69
+ "import": "./dist/learnings/shared.js"
70
+ },
71
+ "./formulas/shared": {
72
+ "types": "./dist/formulas/shared.d.ts",
73
+ "import": "./dist/formulas/shared.js"
74
+ },
75
+ "./proposals/shared": {
76
+ "types": "./dist/proposals/shared.d.ts",
77
+ "import": "./dist/proposals/shared.js"
78
+ },
79
+ "./sectors/shared": {
80
+ "types": "./dist/sectors/shared.d.ts",
81
+ "import": "./dist/sectors/shared.js"
82
+ },
83
+ "./waves/shared": {
84
+ "types": "./dist/waves/shared.d.ts",
85
+ "import": "./dist/waves/shared.js"
86
+ },
87
+ "./critic/shared": {
88
+ "types": "./dist/critic/shared.d.ts",
89
+ "import": "./dist/critic/shared.js"
90
+ },
91
+ "./tools/shared": {
92
+ "types": "./dist/tools/shared.d.ts",
93
+ "import": "./dist/tools/shared.js"
94
+ },
95
+ "./trace/shared": {
96
+ "types": "./dist/trace/shared.d.ts",
97
+ "import": "./dist/trace/shared.js"
98
+ },
99
+ "./trajectory/shared": {
100
+ "types": "./dist/trajectory/shared.d.ts",
101
+ "import": "./dist/trajectory/shared.js"
102
+ }
103
+ },
104
+ "files": [
105
+ "dist"
106
+ ],
107
+ "scripts": {
108
+ "build": "npx tsc",
109
+ "clean": "rm -rf dist",
110
+ "typecheck": "tsc --noEmit",
111
+ "prepublishOnly": "npm run build"
112
+ },
113
+ "keywords": [
114
+ "promptwheel",
115
+ "core",
116
+ "database",
117
+ "adapter"
118
+ ],
119
+ "license": "Apache-2.0",
120
+ "dependencies": {
121
+ "@modelcontextprotocol/sdk": "^1.12.1"
122
+ },
123
+ "devDependencies": {
124
+ "typescript": "^5.7.3"
125
+ }
126
+ }