@codeyam/codeyam-cli 0.1.0-staging.6e699e5 → 0.1.0-staging.79ef713

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 (437) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +7 -7
  4. package/analyzer-template/packages/ai/index.ts +10 -2
  5. package/analyzer-template/packages/ai/package.json +2 -2
  6. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +86 -18
  7. package/analyzer-template/packages/ai/src/lib/astScopes/astScopeAnalyzer.ts +67 -9
  8. package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +41 -17
  9. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.ts +10 -17
  10. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +308 -50
  11. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +15 -6
  12. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +833 -243
  13. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +5 -1
  14. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.ts +16 -3
  15. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.ts +6 -4
  16. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +54 -3
  17. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +60 -15
  18. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.ts +70 -0
  19. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +80 -5
  20. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.ts +179 -0
  21. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.ts +40 -30
  22. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +393 -97
  23. package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +58 -3
  24. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +283 -1
  25. package/analyzer-template/packages/ai/src/lib/generateEntityScenarios.ts +9 -5
  26. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +11 -3
  27. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionalEffects.ts +1 -1
  28. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +297 -7
  29. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromJsxUsages.ts +1 -1
  30. package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +51 -3
  31. package/analyzer-template/packages/ai/src/lib/mergeStatements.ts +90 -96
  32. package/analyzer-template/packages/ai/src/lib/promptGenerators/gatherAttributesMap.ts +10 -7
  33. package/analyzer-template/packages/ai/src/lib/resolvePathToControllable.ts +25 -13
  34. package/analyzer-template/packages/ai/src/lib/worker/SerializableDataStructure.ts +4 -3
  35. package/analyzer-template/packages/ai/src/lib/worker/analyzeScopeWorker.ts +114 -2
  36. package/analyzer-template/packages/analyze/index.ts +2 -0
  37. package/analyzer-template/packages/analyze/src/lib/FileAnalyzer.ts +65 -59
  38. package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +113 -26
  39. package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.ts +19 -0
  40. package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllEntityNodes.ts +19 -0
  41. package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getAllExports.ts +11 -0
  42. package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getImportsAnalysis.ts +8 -0
  43. package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getResolvedModule.ts +49 -1
  44. package/analyzer-template/packages/analyze/src/lib/asts/sourceFiles/getSourceFilesForAllImports.ts +2 -1
  45. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +71 -9
  46. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +19 -4
  47. package/analyzer-template/packages/analyze/src/lib/files/analyze/dependencyResolver.ts +6 -0
  48. package/analyzer-template/packages/analyze/src/lib/files/analyze/gatherEntityMap.ts +4 -2
  49. package/analyzer-template/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.ts +0 -3
  50. package/analyzer-template/packages/analyze/src/lib/files/analyzeRemixRoute.ts +4 -5
  51. package/analyzer-template/packages/analyze/src/lib/files/getImportedExports.ts +14 -12
  52. package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +1315 -0
  53. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +61 -13
  54. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +37 -0
  55. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +229 -19
  56. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +117 -9
  57. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +459 -39
  58. package/analyzer-template/packages/analyze/src/lib/files/scenarios/propagateArrayItemSchemas.ts +474 -0
  59. package/analyzer-template/packages/analyze/src/lib/files/setImportedExports.ts +2 -1
  60. package/analyzer-template/packages/analyze/src/lib/index.ts +1 -0
  61. package/analyzer-template/packages/analyze/src/lib/utils/getFileByPath.ts +19 -0
  62. package/analyzer-template/packages/aws/package.json +1 -1
  63. package/analyzer-template/packages/database/package.json +1 -1
  64. package/analyzer-template/packages/database/src/lib/kysely/db.ts +8 -1
  65. package/analyzer-template/packages/database/src/lib/kysely/tables/commitsTable.ts +6 -0
  66. package/analyzer-template/packages/database/src/lib/loadAnalyses.ts +58 -1
  67. package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +13 -0
  68. package/analyzer-template/packages/database/src/lib/loadBranch.ts +16 -1
  69. package/analyzer-template/packages/database/src/lib/loadCommit.ts +11 -0
  70. package/analyzer-template/packages/database/src/lib/loadCommits.ts +28 -0
  71. package/analyzer-template/packages/database/src/lib/loadEntities.ts +26 -3
  72. package/analyzer-template/packages/database/src/lib/loadEntityBranches.ts +12 -0
  73. package/analyzer-template/packages/database/src/lib/updateCommitMetadata.ts +7 -14
  74. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
  75. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +8 -1
  76. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
  77. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.d.ts +1 -0
  78. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.d.ts.map +1 -1
  79. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.js +3 -0
  80. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/commitsTable.js.map +1 -1
  81. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts +2 -0
  82. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.d.ts.map +1 -1
  83. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js +45 -2
  84. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalyses.js.map +1 -1
  85. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.d.ts.map +1 -1
  86. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js +8 -0
  87. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.map +1 -1
  88. package/analyzer-template/packages/github/dist/database/src/lib/loadBranch.js +11 -1
  89. package/analyzer-template/packages/github/dist/database/src/lib/loadBranch.js.map +1 -1
  90. package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.d.ts.map +1 -1
  91. package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.js +7 -0
  92. package/analyzer-template/packages/github/dist/database/src/lib/loadCommit.js.map +1 -1
  93. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts +3 -1
  94. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.d.ts.map +1 -1
  95. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js +22 -1
  96. package/analyzer-template/packages/github/dist/database/src/lib/loadCommits.js.map +1 -1
  97. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts +3 -1
  98. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.d.ts.map +1 -1
  99. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js +23 -4
  100. package/analyzer-template/packages/github/dist/database/src/lib/loadEntities.js.map +1 -1
  101. package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.d.ts.map +1 -1
  102. package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.js +9 -0
  103. package/analyzer-template/packages/github/dist/database/src/lib/loadEntityBranches.js.map +1 -1
  104. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts +2 -2
  105. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.d.ts.map +1 -1
  106. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js +5 -4
  107. package/analyzer-template/packages/github/dist/database/src/lib/updateCommitMetadata.js.map +1 -1
  108. package/analyzer-template/packages/github/dist/types/src/types/Commit.d.ts +2 -0
  109. package/analyzer-template/packages/github/dist/types/src/types/Commit.d.ts.map +1 -1
  110. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +3 -0
  111. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  112. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts +5 -5
  113. package/analyzer-template/packages/github/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  114. package/analyzer-template/packages/github/dist/types/src/types/ScopeAnalysis.d.ts +6 -1
  115. package/analyzer-template/packages/github/dist/types/src/types/ScopeAnalysis.d.ts.map +1 -1
  116. package/analyzer-template/packages/github/package.json +1 -1
  117. package/analyzer-template/packages/types/src/types/Commit.ts +2 -0
  118. package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +1 -0
  119. package/analyzer-template/packages/types/src/types/ScenariosDataStructure.ts +6 -5
  120. package/analyzer-template/packages/types/src/types/ScopeAnalysis.ts +6 -1
  121. package/analyzer-template/packages/utils/dist/types/src/types/Commit.d.ts +2 -0
  122. package/analyzer-template/packages/utils/dist/types/src/types/Commit.d.ts.map +1 -1
  123. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +3 -0
  124. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  125. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts +5 -5
  126. package/analyzer-template/packages/utils/dist/types/src/types/ScenariosDataStructure.d.ts.map +1 -1
  127. package/analyzer-template/packages/utils/dist/types/src/types/ScopeAnalysis.d.ts +6 -1
  128. package/analyzer-template/packages/utils/dist/types/src/types/ScopeAnalysis.d.ts.map +1 -1
  129. package/analyzer-template/playwright/capture.ts +20 -8
  130. package/analyzer-template/playwright/captureStatic.ts +1 -1
  131. package/analyzer-template/project/analyzeBaselineCommit.ts +5 -0
  132. package/analyzer-template/project/analyzeRegularCommit.ts +5 -0
  133. package/analyzer-template/project/captureLibraryFunctionDirect.ts +29 -26
  134. package/analyzer-template/project/constructMockCode.ts +90 -10
  135. package/analyzer-template/project/createEntitiesAndSortFiles.ts +83 -0
  136. package/analyzer-template/project/loadReadyToBeCaptured.ts +65 -41
  137. package/analyzer-template/project/orchestrateCapture/AwsCaptureTaskRunner.ts +12 -4
  138. package/analyzer-template/project/orchestrateCapture/SequentialCaptureTaskRunner.ts +11 -6
  139. package/analyzer-template/project/orchestrateCapture/taskRunner.ts +4 -2
  140. package/analyzer-template/project/orchestrateCapture.ts +45 -6
  141. package/analyzer-template/project/start.ts +35 -11
  142. package/analyzer-template/project/writeMockDataTsx.ts +181 -8
  143. package/analyzer-template/project/writeScenarioComponents.ts +103 -12
  144. package/analyzer-template/project/writeSimpleRoot.ts +21 -11
  145. package/analyzer-template/scripts/comboWorkerLoop.cjs +98 -50
  146. package/background/src/lib/virtualized/project/analyzeBaselineCommit.js +5 -0
  147. package/background/src/lib/virtualized/project/analyzeBaselineCommit.js.map +1 -1
  148. package/background/src/lib/virtualized/project/analyzeRegularCommit.js +5 -0
  149. package/background/src/lib/virtualized/project/analyzeRegularCommit.js.map +1 -1
  150. package/background/src/lib/virtualized/project/captureLibraryFunctionDirect.js +3 -3
  151. package/background/src/lib/virtualized/project/captureLibraryFunctionDirect.js.map +1 -1
  152. package/background/src/lib/virtualized/project/constructMockCode.js +75 -4
  153. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  154. package/background/src/lib/virtualized/project/createEntitiesAndSortFiles.js +73 -1
  155. package/background/src/lib/virtualized/project/createEntitiesAndSortFiles.js.map +1 -1
  156. package/background/src/lib/virtualized/project/loadReadyToBeCaptured.js +19 -8
  157. package/background/src/lib/virtualized/project/loadReadyToBeCaptured.js.map +1 -1
  158. package/background/src/lib/virtualized/project/orchestrateCapture/AwsCaptureTaskRunner.js +2 -2
  159. package/background/src/lib/virtualized/project/orchestrateCapture/AwsCaptureTaskRunner.js.map +1 -1
  160. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js +4 -4
  161. package/background/src/lib/virtualized/project/orchestrateCapture/SequentialCaptureTaskRunner.js.map +1 -1
  162. package/background/src/lib/virtualized/project/orchestrateCapture.js +38 -6
  163. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  164. package/background/src/lib/virtualized/project/start.js +32 -11
  165. package/background/src/lib/virtualized/project/start.js.map +1 -1
  166. package/background/src/lib/virtualized/project/writeMockDataTsx.js +162 -4
  167. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  168. package/background/src/lib/virtualized/project/writeScenarioComponents.js +85 -15
  169. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  170. package/background/src/lib/virtualized/project/writeSimpleRoot.js +21 -11
  171. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  172. package/codeyam-cli/scripts/apply-setup.js +180 -0
  173. package/codeyam-cli/scripts/apply-setup.js.map +1 -1
  174. package/codeyam-cli/src/cli.js +2 -0
  175. package/codeyam-cli/src/cli.js.map +1 -1
  176. package/codeyam-cli/src/commands/debug.js +7 -5
  177. package/codeyam-cli/src/commands/debug.js.map +1 -1
  178. package/codeyam-cli/src/commands/memory.js +264 -0
  179. package/codeyam-cli/src/commands/memory.js.map +1 -0
  180. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +2 -2
  181. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  182. package/codeyam-cli/src/utils/analysisRunner.js +21 -2
  183. package/codeyam-cli/src/utils/analysisRunner.js.map +1 -1
  184. package/codeyam-cli/src/utils/backgroundServer.js +4 -0
  185. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  186. package/codeyam-cli/src/utils/install-skills.js +55 -10
  187. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  188. package/codeyam-cli/src/utils/queue/job.js +4 -0
  189. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  190. package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js +82 -0
  191. package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js.map +1 -0
  192. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +230 -0
  193. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -0
  194. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +67 -0
  195. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -0
  196. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js +105 -0
  197. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js.map +1 -0
  198. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js +34 -0
  199. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js.map +1 -0
  200. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js +162 -0
  201. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js.map +1 -0
  202. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +75 -0
  203. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -0
  204. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +285 -0
  205. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -0
  206. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +115 -0
  207. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -0
  208. package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js +127 -0
  209. package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js.map +1 -0
  210. package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js +50 -0
  211. package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js.map +1 -0
  212. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +116 -0
  213. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -0
  214. package/codeyam-cli/src/utils/ruleReflection/index.js +5 -0
  215. package/codeyam-cli/src/utils/ruleReflection/index.js.map +1 -0
  216. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js +44 -0
  217. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js.map +1 -0
  218. package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js +85 -0
  219. package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js.map +1 -0
  220. package/codeyam-cli/src/utils/ruleReflection/types.js +5 -0
  221. package/codeyam-cli/src/utils/ruleReflection/types.js.map +1 -0
  222. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +293 -0
  223. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -0
  224. package/codeyam-cli/src/utils/rules/index.js +6 -0
  225. package/codeyam-cli/src/utils/rules/index.js.map +1 -0
  226. package/codeyam-cli/src/utils/rules/parser.js +78 -0
  227. package/codeyam-cli/src/utils/rules/parser.js.map +1 -0
  228. package/codeyam-cli/src/utils/rules/pathMatcher.js +18 -0
  229. package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -0
  230. package/codeyam-cli/src/utils/rules/ruleState.js +150 -0
  231. package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -0
  232. package/codeyam-cli/src/utils/rules/staleness.js +137 -0
  233. package/codeyam-cli/src/utils/rules/staleness.js.map +1 -0
  234. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +1 -1
  235. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  236. package/codeyam-cli/src/webserver/app/lib/database.js +7 -3
  237. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  238. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CA3JxPb7.js +1 -0
  239. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-B86KKU7e.js +11 -0
  240. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-DLqD3qNt.js → EntityTypeBadge-B5ctlSYt.js} +1 -1
  241. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-Ba2JVPzP.js → EntityTypeIcon-BqY8gDAW.js} +1 -1
  242. package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-C8lyxW9k.js → InlineSpinner-ClaLpuOo.js} +1 -1
  243. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-aht4aafF.js → InteractivePreview-BDhPilK7.js} +2 -2
  244. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CVtiBnY5.js → LibraryFunctionPreview-VeqEBv9v.js} +1 -1
  245. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-B0GLXMsr.js → LoadingDots-Bs7Nn1Jr.js} +1 -1
  246. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-xgeCVgSM.js → LogViewer-Bm3PmcCz.js} +1 -1
  247. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-D4TZhLuw.js → ReportIssueModal-C6PKeMYR.js} +3 -13
  248. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-DuDvi0jm.js → SafeScreenshot-Gq3Ocjo6.js} +1 -1
  249. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DEx02QDa.js → ScenarioViewer-BNLaXBHR.js} +3 -3
  250. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-DyFZkK0l.js → TruncatedFilePath-CiwXDxLh.js} +1 -1
  251. package/codeyam-cli/src/webserver/build/client/assets/{_index-BwqWJOgH.js → _index-B3TDXxnk.js} +1 -1
  252. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-DoLIqZX2.js → activity.(_tab)-BtBFH820.js} +6 -16
  253. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DfKzxuoe.js +11 -0
  254. package/codeyam-cli/src/webserver/build/client/assets/api.memory-profile-l0sNRNKZ.js +1 -0
  255. package/codeyam-cli/src/webserver/build/client/assets/api.save-fixture-l0sNRNKZ.js +1 -0
  256. package/codeyam-cli/src/webserver/build/client/assets/book-open-PttOB2SF.js +6 -0
  257. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-Cx24_aWc.js → chevron-down-TJp6ofnp.js} +1 -1
  258. package/codeyam-cli/src/webserver/build/client/assets/{chunk-EPOLDU6W-CXRTFQ3F.js → chunk-JZWAC4HX-JE9ZIoBl.js} +12 -12
  259. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BOARzkeR.js → circle-check-CXhHQYrI.js} +1 -1
  260. package/codeyam-cli/src/webserver/build/client/assets/copy-6y9ALfGT.js +11 -0
  261. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-BdhJEx6B.js → createLucideIcon-Ca9fAY46.js} +1 -1
  262. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-C5lqplTC.js +1 -0
  263. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-C2N4Op8e.js → entity._sha._-n38keI1k.js} +10 -10
  264. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js → entity._sha.scenarios._scenarioId.fullscreen-CBoafmVs.js} +1 -1
  265. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-D1T4TGjf.js → entity._sha_.create-scenario-DGgZjdFg.js} +1 -1
  266. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CTBG2mmz.js → entity._sha_.edit._scenarioId-38yPijoD.js} +1 -1
  267. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CS2cb_eZ.js → entry.client-BSHEfydn.js} +1 -1
  268. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DMJ7zii9.js → fileTableUtils-DCPhhSMo.js} +1 -1
  269. package/codeyam-cli/src/webserver/build/client/assets/files-0N0YJQv7.js +1 -0
  270. package/codeyam-cli/src/webserver/build/client/assets/{git-B4RJRvYB.js → git-DXnyr8uP.js} +8 -8
  271. package/codeyam-cli/src/webserver/build/client/assets/globals-Bh6jH0cL.css +1 -0
  272. package/codeyam-cli/src/webserver/build/client/assets/{index-lzqtyFU8.js → index-CcsFv748.js} +1 -1
  273. package/codeyam-cli/src/webserver/build/client/assets/{index-B1h680n5.js → index-ChN9-fAY.js} +1 -1
  274. package/codeyam-cli/src/webserver/build/client/assets/labs-CdVUfvji.js +1 -0
  275. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-B7B9V-bu.js → loader-circle-CTqLEAGU.js} +1 -1
  276. package/codeyam-cli/src/webserver/build/client/assets/manifest-87319d0f.js +1 -0
  277. package/codeyam-cli/src/webserver/build/client/assets/memory-CPIDnDEj.js +76 -0
  278. package/codeyam-cli/src/webserver/build/client/assets/pause-D6vreykR.js +11 -0
  279. package/codeyam-cli/src/webserver/build/client/assets/root-D6oziHts.js +62 -0
  280. package/codeyam-cli/src/webserver/build/client/assets/{search-CxXUmBSd.js → search-B8VUL8nl.js} +1 -1
  281. package/codeyam-cli/src/webserver/build/client/assets/{settings-CS5f3WzT.js → settings-eBI36Yv5.js} +1 -1
  282. package/codeyam-cli/src/webserver/build/client/assets/{simulations-DwFIBT09.js → simulations-CPoAg7Zo.js} +1 -1
  283. package/codeyam-cli/src/webserver/build/client/assets/terminal-BrCP7uQo.js +11 -0
  284. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-B6LgvRJg.js → triangle-alert-BZz2NjYa.js} +1 -1
  285. package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-C1v1PQzo.js → useCustomSizes-DNwUduNu.js} +1 -1
  286. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-aSv48UbS.js → useLastLogLine-COky1GVF.js} +1 -1
  287. package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-DYxHZQuP.js → useReportContext-CpZgwliL.js} +1 -1
  288. package/codeyam-cli/src/webserver/build/client/assets/{useToast-mBRpZPiu.js → useToast-Bv9JFvUO.js} +1 -1
  289. package/codeyam-cli/src/webserver/build/server/assets/index-9ox9LcrG.js +1 -0
  290. package/codeyam-cli/src/webserver/build/server/assets/server-build-Cq5Vqcob.js +260 -0
  291. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  292. package/codeyam-cli/src/webserver/build-info.json +5 -5
  293. package/codeyam-cli/templates/{codeyam-power-rules-hook.sh → codeyam-memory-hook.sh} +12 -13
  294. package/codeyam-cli/templates/codeyam:diagnose.md +178 -25
  295. package/codeyam-cli/templates/codeyam:memory.md +404 -0
  296. package/codeyam-cli/templates/codeyam:new-rule.md +2 -2
  297. package/codeyam-cli/templates/rule-notification-hook.py +56 -0
  298. package/codeyam-cli/templates/rule-reflection-hook.py +590 -0
  299. package/codeyam-cli/templates/rules-instructions.md +123 -0
  300. package/package.json +8 -6
  301. package/packages/ai/index.js +3 -2
  302. package/packages/ai/index.js.map +1 -1
  303. package/packages/ai/src/lib/analyzeScope.js +68 -13
  304. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  305. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js +54 -8
  306. package/packages/ai/src/lib/astScopes/astScopeAnalyzer.js.map +1 -1
  307. package/packages/ai/src/lib/astScopes/methodSemantics.js +41 -17
  308. package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
  309. package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js +10 -14
  310. package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js.map +1 -1
  311. package/packages/ai/src/lib/astScopes/processExpression.js +239 -43
  312. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  313. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +650 -166
  314. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  315. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +5 -1
  316. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  317. package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js +13 -3
  318. package/packages/ai/src/lib/dataStructure/helpers/BatchSchemaProcessor.js.map +1 -1
  319. package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js +6 -4
  320. package/packages/ai/src/lib/dataStructure/helpers/ScopeTreeManager.js.map +1 -1
  321. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +52 -3
  322. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  323. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +55 -11
  324. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  325. package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js +63 -0
  326. package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js.map +1 -0
  327. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +73 -5
  328. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  329. package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js +173 -0
  330. package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js.map +1 -0
  331. package/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.js +37 -20
  332. package/packages/ai/src/lib/dataStructure/helpers/deduplicateFunctionSchemas.js.map +1 -1
  333. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +333 -86
  334. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  335. package/packages/ai/src/lib/generateEntityDataStructure.js +46 -2
  336. package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
  337. package/packages/ai/src/lib/generateEntityScenarioData.js +205 -1
  338. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  339. package/packages/ai/src/lib/generateEntityScenarios.js +7 -1
  340. package/packages/ai/src/lib/generateEntityScenarios.js.map +1 -1
  341. package/packages/ai/src/lib/generateExecutionFlows.js +10 -2
  342. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  343. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +209 -3
  344. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
  345. package/packages/ai/src/lib/isolateScopes.js +39 -3
  346. package/packages/ai/src/lib/isolateScopes.js.map +1 -1
  347. package/packages/ai/src/lib/mergeStatements.js +70 -51
  348. package/packages/ai/src/lib/mergeStatements.js.map +1 -1
  349. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js +10 -4
  350. package/packages/ai/src/lib/promptGenerators/gatherAttributesMap.js.map +1 -1
  351. package/packages/ai/src/lib/resolvePathToControllable.js +24 -14
  352. package/packages/ai/src/lib/resolvePathToControllable.js.map +1 -1
  353. package/packages/ai/src/lib/worker/SerializableDataStructure.js.map +1 -1
  354. package/packages/ai/src/lib/worker/analyzeScopeWorker.js +94 -1
  355. package/packages/ai/src/lib/worker/analyzeScopeWorker.js.map +1 -1
  356. package/packages/analyze/index.js +1 -0
  357. package/packages/analyze/index.js.map +1 -1
  358. package/packages/analyze/src/lib/FileAnalyzer.js +60 -36
  359. package/packages/analyze/src/lib/FileAnalyzer.js.map +1 -1
  360. package/packages/analyze/src/lib/ProjectAnalyzer.js +96 -26
  361. package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
  362. package/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.js +14 -0
  363. package/packages/analyze/src/lib/asts/sourceFiles/getAllDeclaredEntityNodes.js.map +1 -1
  364. package/packages/analyze/src/lib/asts/sourceFiles/getAllEntityNodes.js +14 -0
  365. package/packages/analyze/src/lib/asts/sourceFiles/getAllEntityNodes.js.map +1 -1
  366. package/packages/analyze/src/lib/asts/sourceFiles/getAllExports.js +6 -0
  367. package/packages/analyze/src/lib/asts/sourceFiles/getAllExports.js.map +1 -1
  368. package/packages/analyze/src/lib/asts/sourceFiles/getImportsAnalysis.js +6 -0
  369. package/packages/analyze/src/lib/asts/sourceFiles/getImportsAnalysis.js.map +1 -1
  370. package/packages/analyze/src/lib/asts/sourceFiles/getResolvedModule.js +39 -1
  371. package/packages/analyze/src/lib/asts/sourceFiles/getResolvedModule.js.map +1 -1
  372. package/packages/analyze/src/lib/asts/sourceFiles/getSourceFilesForAllImports.js +2 -1
  373. package/packages/analyze/src/lib/asts/sourceFiles/getSourceFilesForAllImports.js.map +1 -1
  374. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +54 -6
  375. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  376. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +17 -4
  377. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  378. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js +5 -0
  379. package/packages/analyze/src/lib/files/analyze/dependencyResolver.js.map +1 -1
  380. package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js +2 -1
  381. package/packages/analyze/src/lib/files/analyze/gatherEntityMap.js.map +1 -1
  382. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js +0 -3
  383. package/packages/analyze/src/lib/files/analyze/validateDependencyAnalyses.js.map +1 -1
  384. package/packages/analyze/src/lib/files/analyzeRemixRoute.js +3 -2
  385. package/packages/analyze/src/lib/files/analyzeRemixRoute.js.map +1 -1
  386. package/packages/analyze/src/lib/files/getImportedExports.js +11 -7
  387. package/packages/analyze/src/lib/files/getImportedExports.js.map +1 -1
  388. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +880 -0
  389. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -0
  390. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +56 -10
  391. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
  392. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +33 -8
  393. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  394. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +150 -17
  395. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  396. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +56 -8
  397. package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
  398. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +399 -31
  399. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  400. package/packages/analyze/src/lib/files/setImportedExports.js +2 -1
  401. package/packages/analyze/src/lib/files/setImportedExports.js.map +1 -1
  402. package/packages/analyze/src/lib/index.js +1 -0
  403. package/packages/analyze/src/lib/index.js.map +1 -1
  404. package/packages/analyze/src/lib/utils/getFileByPath.js +12 -0
  405. package/packages/analyze/src/lib/utils/getFileByPath.js.map +1 -0
  406. package/packages/database/src/lib/kysely/db.js +8 -1
  407. package/packages/database/src/lib/kysely/db.js.map +1 -1
  408. package/packages/database/src/lib/kysely/tables/commitsTable.js +3 -0
  409. package/packages/database/src/lib/kysely/tables/commitsTable.js.map +1 -1
  410. package/packages/database/src/lib/loadAnalyses.js +45 -2
  411. package/packages/database/src/lib/loadAnalyses.js.map +1 -1
  412. package/packages/database/src/lib/loadAnalysis.js +8 -0
  413. package/packages/database/src/lib/loadAnalysis.js.map +1 -1
  414. package/packages/database/src/lib/loadBranch.js +11 -1
  415. package/packages/database/src/lib/loadBranch.js.map +1 -1
  416. package/packages/database/src/lib/loadCommit.js +7 -0
  417. package/packages/database/src/lib/loadCommit.js.map +1 -1
  418. package/packages/database/src/lib/loadCommits.js +22 -1
  419. package/packages/database/src/lib/loadCommits.js.map +1 -1
  420. package/packages/database/src/lib/loadEntities.js +23 -4
  421. package/packages/database/src/lib/loadEntities.js.map +1 -1
  422. package/packages/database/src/lib/loadEntityBranches.js +9 -0
  423. package/packages/database/src/lib/loadEntityBranches.js.map +1 -1
  424. package/packages/database/src/lib/updateCommitMetadata.js +5 -4
  425. package/packages/database/src/lib/updateCommitMetadata.js.map +1 -1
  426. package/codeyam-cli/src/webserver/build/client/assets/EntityItem-BXhEawa3.js +0 -1
  427. package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BRb-0kQl.js +0 -1
  428. package/codeyam-cli/src/webserver/build/client/assets/files-Cs4MdYtv.js +0 -1
  429. package/codeyam-cli/src/webserver/build/client/assets/git-commit-horizontal-CysbcZxi.js +0 -6
  430. package/codeyam-cli/src/webserver/build/client/assets/globals-DMUaGAqV.css +0 -1
  431. package/codeyam-cli/src/webserver/build/client/assets/manifest-f874c610.js +0 -1
  432. package/codeyam-cli/src/webserver/build/client/assets/root-Bz5TunQg.js +0 -57
  433. package/codeyam-cli/src/webserver/build/client/assets/rules-hEkvVw2-.js +0 -97
  434. package/codeyam-cli/src/webserver/build/server/assets/index-967OuJoF.js +0 -1
  435. package/codeyam-cli/src/webserver/build/server/assets/server-build-DRTmerg9.js +0 -257
  436. package/codeyam-cli/templates/codeyam:power-rules.md +0 -447
  437. /package/codeyam-cli/src/webserver/build/client/assets/{api.rules-l0sNRNKZ.js → api.agent-transcripts-l0sNRNKZ.js} +0 -0
@@ -1,10 +1,10 @@
1
1
  {
2
- "buildTimestamp": "2026-01-27T18:35:02.170Z",
3
- "buildTime": 1769538902170,
4
- "gitCommit": "6e699e56ee4e2c0efa0086ccf7268b040394c2c2",
2
+ "buildTimestamp": "2026-02-09T23:40:32.703Z",
3
+ "buildTime": 1770680432703,
4
+ "gitCommit": "79ef713db8aedbd08bf0e42c7aa8b6f99117bbdb",
5
5
  "nodeVersion": "v20.20.0",
6
- "contentHash": "cce7c765a7074dbbc87cc66ff68e4de45336dce2e768af7373c978f5db3afe4d",
7
- "buildNumber": 522,
8
- "semanticVersion": "0.1.522",
9
- "version": "0.1.522 (2026-01-27T18:35+cce7c76)"
6
+ "contentHash": "aaa0ef29735f956b90bfc57d268b877db2ba758456e586a28cc3af7e44ea35f1",
7
+ "buildNumber": 598,
8
+ "semanticVersion": "0.1.598",
9
+ "version": "0.1.598 (2026-02-09T23:40+aaa0ef2)"
10
10
  }
@@ -1,7 +1,7 @@
1
1
 
2
- [1/27/2026, 6:35:02 PM] > codeyam-combo@1.0.0 mergeDependencies
3
- [1/27/2026, 6:35:02 PM] > node ./scripts/mergePackageJsonFiles.cjs
2
+ [2/9/2026, 11:40:32 PM] > codeyam-combo@1.0.0 mergeDependencies
3
+ [2/9/2026, 11:40:32 PM] > node ./scripts/mergePackageJsonFiles.cjs
4
4
 
5
5
 
6
- [1/27/2026, 6:35:02 PM] Merged dependencies into root package.json
6
+ [2/9/2026, 11:40:32 PM] Merged dependencies into root package.json
7
7
 
@@ -7,7 +7,7 @@
7
7
  "build": "tsc && node ./scripts/postbuild.cjs"
8
8
  },
9
9
  "dependencies": {
10
- "@aws-sdk/client-cloudwatch-logs": "^3.966.0",
10
+ "@aws-sdk/client-cloudwatch-logs": "^3.980.0",
11
11
  "@aws-sdk/client-cloudfront": "^3.966.0",
12
12
  "@aws-sdk/client-codebuild": "^3.948.0",
13
13
  "@aws-sdk/client-dynamodb": "^3.956.0",
@@ -30,25 +30,25 @@
30
30
  "jest": "^30.2.0",
31
31
  "jsdom": "^27.4.0",
32
32
  "jsonc-parser": "^3.2.1",
33
- "lru-cache": "^11.2.4",
33
+ "lru-cache": "^11.2.5",
34
34
  "openai": "^6.16.0",
35
35
  "p-queue": "^8.1.0",
36
36
  "p-retry": "^7.1.1",
37
37
  "piscina": "^5.1.4",
38
38
  "pixelmatch": "^5.3.0",
39
- "playwright": "^1.56.1",
39
+ "playwright": "1.58.0",
40
40
  "sharp": "^0.34.5",
41
41
  "simple-git": "^3.28.0",
42
- "undici": "^7.16.0",
42
+ "undici": "^7.18.2",
43
43
  "uuid": "^11.1.0",
44
44
  "pluralize": "^8.0.0",
45
45
  "yargs": "^18.0.0",
46
46
  "json5": "^2.2.3",
47
- "@anthropic-ai/sdk": "^0.71.0",
47
+ "@anthropic-ai/sdk": "^0.74.0",
48
48
  "@aws-sdk/s3-request-presigner": "^3.940.0",
49
49
  "better-sqlite3": "^12.4.1",
50
50
  "fetch-retry": "^6.0.0",
51
- "kysely": "^0.28.5",
51
+ "kysely": "^0.28.11",
52
52
  "pg": "^8.16.3",
53
53
  "@octokit/request": "^10.0.3",
54
54
  "lucide-react": "^0.556.0",
@@ -64,7 +64,7 @@
64
64
  "@types/jest": "^30.0.0",
65
65
  "@types/pg": "^8.15.5",
66
66
  "@types/ws": "^8.18.1",
67
- "@octokit/types": "^15.0.0",
67
+ "@octokit/types": "^16.0.0",
68
68
  "@types/react": "^19.2.7",
69
69
  "@types/react-dom": "^19.2.3",
70
70
  "@types/react-resizable": "^3.0.7",
@@ -40,7 +40,10 @@ export { default as describeCodeChange } from './src/lib/describeCodeChange';
40
40
  export { default as validateTypeStructure } from './src/lib/validateTypeStructure';
41
41
  export { default as validateDataStructure } from './src/lib/validateDataStructure';
42
42
  export { default as isolateScopes } from './src/lib/isolateScopes';
43
- export { default as analyzeScope } from './src/lib/analyzeScope';
43
+ export {
44
+ default as analyzeScope,
45
+ destroyWorkerPool,
46
+ } from './src/lib/analyzeScope';
44
47
  export { default as logOrderedMap } from './src/lib/logOrderedMap';
45
48
  export {
46
49
  default as splitOutsideParentheses,
@@ -54,8 +57,13 @@ export {
54
57
  removeDuplicateFunctionCalls,
55
58
  } from './src/lib/dataStructure/helpers/cleanNonObjectFunctions';
56
59
  export { default as convertDotNotation } from './src/lib/dataStructure/helpers/convertDotNotation';
60
+ export { default as convertTypeAnnotationsToValues } from './src/lib/dataStructure/helpers/convertTypeAnnotationsToValues';
57
61
  export { default as cleanOutBoundary } from './src/lib/cleanOutBoundary';
58
- export { fillInDirectSchemaGapsAndUnknowns } from './src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns';
62
+ export {
63
+ fillInDirectSchemaGapsAndUnknowns,
64
+ buildSchemaIndexes,
65
+ type SchemaIndexes,
66
+ } from './src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns';
59
67
  export { default as deduplicateFunctionSchemas } from './src/lib/dataStructure/helpers/deduplicateFunctionSchemas';
60
68
  export { default as getConditionalUsagesFromCode } from './src/lib/getConditionalUsagesFromCode';
61
69
  export type {
@@ -9,12 +9,12 @@
9
9
  "author": "",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
- "@anthropic-ai/sdk": "^0.71.0",
12
+ "@anthropic-ai/sdk": "^0.74.0",
13
13
  "jsdom": "^27.4.0",
14
14
  "p-queue": "^8.1.0",
15
15
  "p-retry": "^7.1.1",
16
16
  "piscina": "^5.1.4",
17
- "lru-cache": "^11.2.4"
17
+ "lru-cache": "^11.2.5"
18
18
  },
19
19
  "devDependencies": {
20
20
  "@types/jsdom": "^27.0.0"
@@ -49,6 +49,7 @@ let workerPool: Piscina<
49
49
  AnalyzeScopeWorkerInput,
50
50
  AnalyzeScopeWorkerOutput
51
51
  > | null = null;
52
+ let workerPoolDestroyed = false;
52
53
 
53
54
  /**
54
55
  * Check if we're in Node.js main thread
@@ -65,11 +66,48 @@ function getIsMainThread(): boolean {
65
66
  return isMainThread;
66
67
  }
67
68
 
69
+ /**
70
+ * Destroy the worker pool, freeing its ~2GB heap.
71
+ * Called after data structure preparation completes (the producing phase transition).
72
+ * The worker is not needed after this point — subsequent calls to ensureWorkerPool() will throw.
73
+ */
74
+ export async function destroyWorkerPool() {
75
+ if (workerPool) {
76
+ const memBefore = process.memoryUsage();
77
+ console.log('CodeYam: Destroying worker pool...', {
78
+ rssBefore: `${Math.round(memBefore.rss / 1024 / 1024)}MB`,
79
+ heapBefore: `${Math.round(memBefore.heapUsed / 1024 / 1024)}MB`,
80
+ });
81
+
82
+ await workerPool.destroy();
83
+ workerPool = null;
84
+
85
+ // Force GC if available to reclaim worker memory faster
86
+ if (global.gc) {
87
+ global.gc();
88
+ }
89
+
90
+ const memAfter = process.memoryUsage();
91
+ console.log('CodeYam: Worker pool destroyed', {
92
+ rssAfter: `${Math.round(memAfter.rss / 1024 / 1024)}MB`,
93
+ heapAfter: `${Math.round(memAfter.heapUsed / 1024 / 1024)}MB`,
94
+ rssDelta: `${Math.round((memAfter.rss - memBefore.rss) / 1024 / 1024)}MB`,
95
+ });
96
+ }
97
+ workerPoolDestroyed = true;
98
+ }
99
+
68
100
  /**
69
101
  * Lazy initialization of worker pool.
70
102
  * Called on first use to ensure environment variables are set.
71
103
  */
72
104
  function ensureWorkerPool() {
105
+ if (workerPoolDestroyed) {
106
+ throw new Error(
107
+ 'CodeYam: Worker pool was destroyed (post-producing phase). ' +
108
+ 'analyzeScope should not be called after data structure preparation completes.',
109
+ );
110
+ }
73
111
  if (workerPool !== null) return;
74
112
 
75
113
  // Only initialize worker pool in Node.js environment
@@ -85,10 +123,17 @@ function ensureWorkerPool() {
85
123
  // Note: WORKER_PATH is null when __mocks__/analyzeScope.ts is active
86
124
  const { WORKER_PATH } = analyzeScopeWorkerPaths();
87
125
 
126
+ // Disable workers when tracing is enabled - we need access to ScopeDataStructure
127
+ // instance in the main thread to capture pre-serialization state
128
+ const tracingEnabled =
129
+ process.env.CODEYAM_TRACE_TRANSFORMS === '1' ||
130
+ process.env.CODEYAM_TRACE_TRANSFORMS === 'true';
131
+
88
132
  if (
89
133
  process.env.USE_WORKER_THREADS &&
90
134
  WORKER_PATH &&
91
- fs.existsSync(WORKER_PATH)
135
+ fs.existsSync(WORKER_PATH) &&
136
+ !tracingEnabled
92
137
  ) {
93
138
  console.log('CodeYam: Using worker threads for analyzeScope', {
94
139
  WORKER_PATH,
@@ -121,6 +166,7 @@ function ensureWorkerPool() {
121
166
  WORKER_PATH,
122
167
  workerExists: WORKER_PATH ? fs.existsSync(WORKER_PATH) : false,
123
168
  USE_WORKER_THREADS: process.env.USE_WORKER_THREADS,
169
+ tracingEnabled,
124
170
  });
125
171
  workerPool = null; // Explicitly set to indicate "no workers"
126
172
  }
@@ -334,7 +380,7 @@ export async function analyzeScopeLocal({
334
380
  }
335
381
 
336
382
  for (const mapping of [structure, equivalentVariables]) {
337
- for (let [key, value] of Object.entries(mapping)) {
383
+ for (let [key, rawValue] of Object.entries(mapping)) {
338
384
  for (const [childScopeId, childScope] of sortedEntries) {
339
385
  const scopeText = fileAnalyzer.sourceFile.text.slice(
340
386
  childScope.start,
@@ -354,27 +400,49 @@ export async function analyzeScopeLocal({
354
400
  return text;
355
401
  };
356
402
 
357
- if (value.includes(scopeText)) {
358
- // DEBUG: Log when replacement happens
359
- if (key.includes('Fetcher') || key.includes('fetcher')) {
360
- console.log(
361
- 'CodeYam DEBUG value replacement:',
362
- JSON.stringify({
363
- key,
364
- oldValue: value,
365
- childScopeId,
366
- scopeTextPreview: scopeText.slice(0, 50),
367
- }),
368
- );
403
+ // Handle both string and string[] values (for OR expressions)
404
+ const processValue = (value: string): string => {
405
+ if (value.includes(scopeText)) {
406
+ // DEBUG: Log when replacement happens
407
+ if (key.includes('Fetcher') || key.includes('fetcher')) {
408
+ console.log(
409
+ 'CodeYam DEBUG value replacement:',
410
+ JSON.stringify({
411
+ key,
412
+ oldValue: value,
413
+ childScopeId,
414
+ scopeTextPreview: scopeText.slice(0, 50),
415
+ }),
416
+ );
417
+ }
418
+ return replaceChildScopeId(value);
419
+ }
420
+ return value;
421
+ };
422
+
423
+ if (Array.isArray(rawValue)) {
424
+ const newValues = rawValue.map(processValue);
425
+ (mapping as Record<string, string | string[]>)[key] =
426
+ newValues;
427
+ rawValue = newValues;
428
+ } else if (typeof rawValue === 'string') {
429
+ const newValue = processValue(rawValue);
430
+ if (newValue !== rawValue) {
431
+ (mapping as Record<string, string | string[]>)[key] =
432
+ newValue;
433
+ rawValue = newValue;
369
434
  }
370
- value = replaceChildScopeId(value);
371
- mapping[key] = value;
372
435
  }
436
+
373
437
  if (key.includes(scopeText)) {
374
438
  const oldKey = key;
375
439
  key = replaceChildScopeId(key);
376
- mapping[key] = mapping[oldKey];
377
- delete mapping[oldKey];
440
+ (mapping as Record<string, string | string[]>)[key] = (
441
+ mapping as Record<string, string | string[]>
442
+ )[oldKey];
443
+ delete (mapping as Record<string, string | string[]>)[
444
+ oldKey
445
+ ];
378
446
  }
379
447
  }
380
448
  }
@@ -102,7 +102,7 @@ import { ThrowStatementHandler } from './patterns/throwStatementHandler';
102
102
  */
103
103
  export class ASTScopeAnalyzer {
104
104
  private structure: Record<string, string> = {};
105
- private equivalentVariables: Record<string, string> = {};
105
+ private equivalentVariables: Record<string, string | string[]> = {};
106
106
  private environmentVariables: string[] = [];
107
107
  private conditionalUsages: Record<string, ConditionalUsage[]> = {};
108
108
  private compoundConditionals: CompoundConditional[] = [];
@@ -235,6 +235,8 @@ export class ASTScopeAnalyzer {
235
235
  typeChecker: this.fileAnalyzer.typeChecker,
236
236
  addEquivalence: (leftSide, rightSide) =>
237
237
  this.addEquivalence(leftSide, rightSide),
238
+ addMultipleEquivalencies: (leftSide, rightSides) =>
239
+ this.addMultipleEquivalencies(leftSide, rightSides),
238
240
  addType: (path, type) => this.addType(path, type),
239
241
  addEnvironmentVariable: (variablePath) =>
240
242
  this.addEnvironmentVariable(variablePath),
@@ -592,7 +594,9 @@ export class ASTScopeAnalyzer {
592
594
  }
593
595
 
594
596
  /**
595
- * Adds an equivalence relationship between two variable paths
597
+ * Adds an equivalence relationship between two variable paths.
598
+ * Uses overwrite semantics - if an equivalence already exists, the new value replaces it
599
+ * (unless the new value is 'undefined' or 'null').
596
600
  */
597
601
  private addEquivalence(
598
602
  leftSide: StructuredPath,
@@ -622,6 +626,44 @@ export class ASTScopeAnalyzer {
622
626
  }
623
627
  }
624
628
 
629
+ /**
630
+ * Adds multiple equivalence relationships for a single variable path.
631
+ * Used for OR expressions like `x = a || b` where x is equivalent to both a and b.
632
+ * The values are stored as an array to track all possible sources.
633
+ */
634
+ private addMultipleEquivalencies(
635
+ leftSide: StructuredPath,
636
+ rightSides: StructuredPath[],
637
+ ): void {
638
+ if (leftSide?.isLiteral()) {
639
+ return;
640
+ }
641
+
642
+ const leftSideStr = leftSide?.toLeftHandSideString();
643
+ if (!leftSideStr) return;
644
+
645
+ // Filter out invalid paths and convert to strings
646
+ const validRightSides = rightSides
647
+ .map((r) => r?.toRightHandSideString())
648
+ .filter((r): r is string => !!r && r !== leftSideStr);
649
+
650
+ // Remove duplicates while preserving order
651
+ const uniqueRightSides = [...new Set(validRightSides)];
652
+
653
+ // Filter out 'undefined' and 'null' unless they're the only values
654
+ const meaningfulValues = uniqueRightSides.filter(
655
+ (v) => v !== 'undefined' && v !== 'null',
656
+ );
657
+ const finalValues =
658
+ meaningfulValues.length > 0 ? meaningfulValues : uniqueRightSides;
659
+
660
+ if (finalValues.length === 0) return;
661
+
662
+ // Store as single value if only one, otherwise as array
663
+ this.equivalentVariables[leftSideStr] =
664
+ finalValues.length === 1 ? finalValues[0] : finalValues;
665
+ }
666
+
625
667
  /**
626
668
  * Adds a type for a variable path
627
669
  */
@@ -785,22 +827,38 @@ export class ASTScopeAnalyzer {
785
827
  // Update the type for the given path
786
828
  this.structure[pathStr] = newType;
787
829
 
788
- // Also update the type for any equivalent path
830
+ // Also update the type for any equivalent path(s)
789
831
  // e.g., if "state" -> "signature[0]", update "signature[0]" as well
790
- const equivalentPath = this.equivalentVariables[pathStr];
791
- if (equivalentPath) {
792
- this.structure[equivalentPath] = newType;
832
+ const rawEquivalentPath = this.equivalentVariables[pathStr];
833
+ const equivalentPaths = Array.isArray(rawEquivalentPath)
834
+ ? rawEquivalentPath
835
+ : rawEquivalentPath
836
+ ? [rawEquivalentPath]
837
+ : [];
838
+ for (const equivalentPath of equivalentPaths) {
839
+ if (typeof equivalentPath === 'string') {
840
+ this.structure[equivalentPath] = newType;
841
+ }
793
842
  }
794
843
 
795
844
  // For property paths like "data.status", check if the base has an equivalence
796
845
  // e.g., if "data" -> "signature[0]", transform "data.status" to "signature[0].status"
797
- for (const [varPath, equivalence] of Object.entries(
846
+ for (const [varPath, rawEquivalence] of Object.entries(
798
847
  this.equivalentVariables,
799
848
  )) {
800
849
  if (pathStr.startsWith(varPath + '.')) {
850
+ const equivalences = Array.isArray(rawEquivalence)
851
+ ? rawEquivalence
852
+ : rawEquivalence
853
+ ? [rawEquivalence]
854
+ : [];
801
855
  const suffix = pathStr.slice(varPath.length);
802
- const transformedPath = equivalence + suffix;
803
- this.structure[transformedPath] = newType;
856
+ for (const equivalence of equivalences) {
857
+ if (typeof equivalence === 'string') {
858
+ const transformedPath = equivalence + suffix;
859
+ this.structure[transformedPath] = newType;
860
+ }
861
+ }
804
862
  }
805
863
  }
806
864
  }
@@ -329,11 +329,17 @@ export class ArrayReduceSemantics implements MethodSemantics {
329
329
  /**
330
330
  * Array concat method semantics
331
331
  *
332
- * concat() returns a new array combining the original array and additional items
332
+ * concat() returns a new array/string combining the original and additional items
333
+ *
334
+ * NOTE: We intentionally do NOT type the source as 'array' here because
335
+ * .concat() exists on both arrays AND strings. Typing the source prematurely
336
+ * causes type contamination when the source is equivalent to other paths
337
+ * via ?? chains. Type inference happens later in checkIfKnownType() based
338
+ * on accumulated evidence from all methods called on a path.
333
339
  */
334
340
  export class ArrayConcatSemantics implements MethodSemantics {
335
341
  getReturnType(): string {
336
- return 'array';
342
+ return 'unknown'; // Could be array or string depending on source
337
343
  }
338
344
 
339
345
  addEquivalences(
@@ -341,23 +347,24 @@ export class ArrayConcatSemantics implements MethodSemantics {
341
347
  sourcePath: StructuredPath,
342
348
  context: AnalysisContext,
343
349
  ): void {
344
- // Mark source as array
345
- context.addType(sourcePath, 'array');
350
+ // NOTE: We use 'unknown' instead of 'array' for the source because .concat()
351
+ // exists on both arrays AND strings. Using 'array' causes type contamination
352
+ // when the source is equivalent to other paths via ?? chains.
353
+ context.addType(sourcePath, 'unknown');
346
354
 
347
- // Any arguments are also added to the array
355
+ // Any arguments are also added to the result
348
356
  const functionCallSegment = methodCallPath.getLastFunctionCallSegment();
349
357
 
350
358
  if (functionCallSegment) {
351
359
  // Each argument could be an array or single element
352
360
  functionCallSegment.args.forEach((argPath) => {
353
361
  // No need to guess the type - we'll discover it through normal processing
354
- // But we can indicate that these elements will be in the result array
362
+ // But we can indicate that these elements will be in the result
355
363
  context.addEquivalence(methodCallPath, argPath);
356
364
  });
357
365
  }
358
366
 
359
- // The original array elements are also in the result
360
- context.addType(methodCallPath, 'array');
367
+ // The original elements are also in the result
361
368
  context.addEquivalence(methodCallPath, sourcePath.withElement('*'));
362
369
  }
363
370
 
@@ -369,11 +376,17 @@ export class ArrayConcatSemantics implements MethodSemantics {
369
376
  /**
370
377
  * Array slice method semantics
371
378
  *
372
- * slice() returns a shallow copy of a portion of an array
379
+ * slice() returns a shallow copy of a portion of an array (or string)
380
+ *
381
+ * NOTE: We intentionally do NOT type the source as 'array' here because
382
+ * .slice() exists on both arrays AND strings. Typing the source prematurely
383
+ * causes type contamination when the source is equivalent to other paths
384
+ * via ?? chains. Type inference happens later in checkIfKnownType() based
385
+ * on accumulated evidence from all methods called on a path.
373
386
  */
374
387
  export class ArraySliceSemantics implements MethodSemantics {
375
388
  getReturnType(): string {
376
- return 'array';
389
+ return 'unknown'; // Could be array or string depending on source
377
390
  }
378
391
 
379
392
  addEquivalences(
@@ -381,12 +394,15 @@ export class ArraySliceSemantics implements MethodSemantics {
381
394
  sourcePath: StructuredPath,
382
395
  context: AnalysisContext,
383
396
  ): void {
384
- // Mark source as array
385
- context.addType(sourcePath, 'array');
397
+ // NOTE: We use 'unknown' instead of 'array' for the source because .slice()
398
+ // exists on both arrays AND strings. Using 'array' causes type contamination
399
+ // when the source is equivalent to other paths via ?? chains.
400
+ // Type inference happens later in checkIfKnownType() based on accumulated evidence.
401
+ context.addType(sourcePath, 'unknown');
386
402
 
387
- // The elements in the result are the same type as the source array
403
+ // Still track the return value type for data structure tracking
388
404
  const methodCallPathWithReturnValues = methodCallPath.withReturnValues();
389
- context.addType(methodCallPathWithReturnValues, 'array');
405
+ context.addType(methodCallPathWithReturnValues, 'unknown');
390
406
  }
391
407
 
392
408
  isComplete(): boolean {
@@ -608,6 +624,12 @@ export class ArrayFlatMapSemantics implements MethodSemantics {
608
624
  * Array at method semantics
609
625
  *
610
626
  * at() returns the element at the given index, supporting negative indices
627
+ *
628
+ * NOTE: We intentionally do NOT type the source as 'array' here because
629
+ * .at() exists on both arrays AND strings. Typing the source prematurely
630
+ * causes type contamination when the source is equivalent to other paths
631
+ * via ?? chains. Type inference happens later in checkIfKnownType() based
632
+ * on accumulated evidence from all methods called on a path.
611
633
  */
612
634
  export class ArrayAtSemantics implements MethodSemantics {
613
635
  getReturnType(): string {
@@ -619,10 +641,12 @@ export class ArrayAtSemantics implements MethodSemantics {
619
641
  sourcePath: StructuredPath,
620
642
  context: AnalysisContext,
621
643
  ): void {
622
- // Mark source as array
623
- context.addType(sourcePath, 'array');
644
+ // NOTE: We use 'unknown' instead of 'array' for the source because .at()
645
+ // exists on both arrays AND strings. Using 'array' causes type contamination
646
+ // when the source is equivalent to other paths via ?? chains.
647
+ context.addType(sourcePath, 'unknown');
624
648
 
625
- // The return value is equivalent to an array element
649
+ // The return value is equivalent to an element
626
650
  context.addEquivalence(
627
651
  methodCallPath.withReturnValues(),
628
652
  sourcePath.withElement('*'),
@@ -22,11 +22,8 @@ export class ForInStatementHandler implements PatternHandler {
22
22
  // Process the expression being iterated over first (e.g., object)
23
23
  context.processExpression(node.expression);
24
24
 
25
- // Get the path of the object being iterated
26
- const expressionPath = context.getStructuralPath(node.expression);
27
-
28
- // If the initializer is a variable declaration with an identifier, establish equivalence
29
- // to indicate it's iterating over the keys of the expression
25
+ // If the initializer is a variable declaration with an identifier,
26
+ // type it as 'string' since for-in keys are always strings
30
27
  if (ts.isVariableDeclarationList(node.initializer)) {
31
28
  const declarations = node.initializer.declarations;
32
29
  if (
@@ -36,25 +33,21 @@ export class ForInStatementHandler implements PatternHandler {
36
33
  ) {
37
34
  const variableName = StructuredPath.fromBase(declarations[0].name.text);
38
35
 
39
- // Add type for the key variable (string for object keys)
36
+ // Type the key variable as 'string' for-in keys are always strings.
37
+ // Note: We intentionally do NOT equivalence the key variable to
38
+ // expressionPath[*key*]. The key variable is the KEY (a string),
39
+ // while [*key*] in the schema represents the VALUE at a dynamic key.
40
+ // Creating that equivalence would cause the 'string' type to propagate
41
+ // to the value path. The value access (e.g., obj[key]) is handled
42
+ // correctly by the element access handler in processExpression.
40
43
  context.addType(variableName, 'string');
41
-
42
- if (expressionPath) {
43
- // For for...in loops, the variable is equivalent to the keys of the object
44
- // We represent this with a *key* suffix to indicate it's a key, not a value
45
- context.addEquivalence(variableName, expressionPath.withKey('key'));
46
- }
47
44
  }
48
45
  } else if (ts.isIdentifier(node.initializer)) {
49
46
  // If the initializer is directly an identifier (rare but possible)
50
47
  const variableName = StructuredPath.fromBase(node.initializer.text);
51
48
 
52
- // Add type for the key variable
49
+ // See comment above — type as string but don't equivalence to value path
53
50
  context.addType(variableName, 'string');
54
-
55
- if (expressionPath) {
56
- context.addEquivalence(variableName, expressionPath.withKey('key'));
57
- }
58
51
  } else {
59
52
  context.processExpression(node.initializer);
60
53
  }