@codeyam/codeyam-cli 0.1.0-staging.2a88920 → 0.1.0-staging.4813bf3

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 (357) 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 +3 -3
  4. package/analyzer-template/packages/ai/index.ts +1 -0
  5. package/analyzer-template/packages/ai/package.json +2 -2
  6. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +23 -1
  7. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.ts +10 -17
  8. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +101 -0
  9. package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
  10. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +6 -0
  11. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +330 -9
  12. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +5 -1
  13. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +11 -2
  14. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +2 -2
  15. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.ts +70 -0
  16. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +126 -11
  17. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.ts +20 -1
  18. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +84 -19
  19. package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +33 -15
  20. package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +58 -3
  21. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +299 -5
  22. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +38 -2
  23. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +359 -142
  24. package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +51 -3
  25. package/analyzer-template/packages/ai/src/lib/mergeJsonTypeDefinitions.ts +5 -0
  26. package/analyzer-template/packages/ai/src/lib/promptGenerators/collapseNullableObjects.ts +118 -0
  27. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +24 -4
  28. package/analyzer-template/packages/analyze/index.ts +2 -0
  29. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +69 -3
  30. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +5 -0
  31. package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +1315 -0
  32. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +4 -0
  33. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +9 -1
  34. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +194 -15
  35. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +260 -22
  36. package/analyzer-template/packages/analyze/src/lib/index.ts +1 -0
  37. package/analyzer-template/packages/database/package.json +1 -1
  38. package/analyzer-template/packages/database/src/lib/analysisBranchToDb.ts +1 -1
  39. package/analyzer-template/packages/database/src/lib/analysisToDb.ts +1 -1
  40. package/analyzer-template/packages/database/src/lib/branchToDb.ts +1 -1
  41. package/analyzer-template/packages/database/src/lib/commitBranchToDb.ts +1 -1
  42. package/analyzer-template/packages/database/src/lib/commitToDb.ts +1 -1
  43. package/analyzer-template/packages/database/src/lib/fileToDb.ts +1 -1
  44. package/analyzer-template/packages/database/src/lib/kysely/db.ts +6 -0
  45. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
  46. package/analyzer-template/packages/database/src/lib/kysely/tables/labsRequestsTable.ts +52 -0
  47. package/analyzer-template/packages/database/src/lib/projectToDb.ts +1 -1
  48. package/analyzer-template/packages/database/src/lib/saveFiles.ts +1 -1
  49. package/analyzer-template/packages/database/src/lib/scenarioToDb.ts +1 -1
  50. package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
  51. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js +1 -1
  52. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js.map +1 -1
  53. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js +1 -1
  54. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js.map +1 -1
  55. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js +1 -1
  56. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js.map +1 -1
  57. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js +1 -1
  58. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js.map +1 -1
  59. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js +1 -1
  60. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js.map +1 -1
  61. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js +1 -1
  62. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js.map +1 -1
  63. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
  64. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
  65. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +3 -0
  66. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
  67. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +1 -1
  68. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts +23 -0
  69. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts.map +1 -0
  70. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
  71. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
  72. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js +1 -1
  73. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js.map +1 -1
  74. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js +1 -1
  75. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js.map +1 -1
  76. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js +1 -1
  77. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js.map +1 -1
  78. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +7 -0
  79. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  80. package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +7 -0
  81. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +7 -0
  82. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  83. package/analyzer-template/project/constructMockCode.ts +36 -1
  84. package/analyzer-template/project/writeMockDataTsx.ts +174 -12
  85. package/analyzer-template/project/writeScenarioComponents.ts +60 -12
  86. package/analyzer-template/project/writeSimpleRoot.ts +21 -11
  87. package/background/src/lib/local/createLocalAnalyzer.js +1 -1
  88. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  89. package/background/src/lib/virtualized/project/constructMockCode.js +30 -1
  90. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  91. package/background/src/lib/virtualized/project/writeMockDataTsx.js +156 -8
  92. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  93. package/background/src/lib/virtualized/project/writeScenarioComponents.js +60 -15
  94. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  95. package/background/src/lib/virtualized/project/writeSimpleRoot.js +21 -11
  96. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  97. package/codeyam-cli/scripts/apply-setup.js +180 -0
  98. package/codeyam-cli/scripts/apply-setup.js.map +1 -1
  99. package/codeyam-cli/src/cli.js +2 -0
  100. package/codeyam-cli/src/cli.js.map +1 -1
  101. package/codeyam-cli/src/codeyam-cli.js +18 -2
  102. package/codeyam-cli/src/codeyam-cli.js.map +1 -1
  103. package/codeyam-cli/src/commands/analyze.js +4 -2
  104. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  105. package/codeyam-cli/src/commands/baseline.js +2 -0
  106. package/codeyam-cli/src/commands/baseline.js.map +1 -1
  107. package/codeyam-cli/src/commands/debug.js +2 -0
  108. package/codeyam-cli/src/commands/debug.js.map +1 -1
  109. package/codeyam-cli/src/commands/default.js +31 -20
  110. package/codeyam-cli/src/commands/default.js.map +1 -1
  111. package/codeyam-cli/src/commands/detect-universal-mocks.js +2 -0
  112. package/codeyam-cli/src/commands/detect-universal-mocks.js.map +1 -1
  113. package/codeyam-cli/src/commands/init.js +49 -257
  114. package/codeyam-cli/src/commands/init.js.map +1 -1
  115. package/codeyam-cli/src/commands/memory.js +17 -26
  116. package/codeyam-cli/src/commands/memory.js.map +1 -1
  117. package/codeyam-cli/src/commands/recapture.js +2 -0
  118. package/codeyam-cli/src/commands/recapture.js.map +1 -1
  119. package/codeyam-cli/src/commands/setup-sandbox.js +2 -0
  120. package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -1
  121. package/codeyam-cli/src/commands/setup-simulations.js +284 -0
  122. package/codeyam-cli/src/commands/setup-simulations.js.map +1 -0
  123. package/codeyam-cli/src/commands/test-startup.js +2 -0
  124. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  125. package/codeyam-cli/src/commands/verify.js +14 -2
  126. package/codeyam-cli/src/commands/verify.js.map +1 -1
  127. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +128 -86
  128. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  129. package/codeyam-cli/src/utils/analyzer.js +7 -0
  130. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  131. package/codeyam-cli/src/utils/backgroundServer.js +5 -0
  132. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  133. package/codeyam-cli/src/utils/generateReport.js +2 -2
  134. package/codeyam-cli/src/utils/install-skills.js +57 -54
  135. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  136. package/codeyam-cli/src/utils/labsAutoCheck.js +19 -0
  137. package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -0
  138. package/codeyam-cli/src/utils/progress.js +7 -0
  139. package/codeyam-cli/src/utils/progress.js.map +1 -1
  140. package/codeyam-cli/src/utils/queue/job.js +4 -0
  141. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  142. package/codeyam-cli/src/utils/requireSimulations.js +10 -0
  143. package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
  144. package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js +82 -0
  145. package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js.map +1 -0
  146. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +230 -0
  147. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -0
  148. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +67 -0
  149. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -0
  150. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js +105 -0
  151. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js.map +1 -0
  152. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js +34 -0
  153. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js.map +1 -0
  154. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js +162 -0
  155. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js.map +1 -0
  156. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +75 -0
  157. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -0
  158. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +378 -0
  159. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -0
  160. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +115 -0
  161. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -0
  162. package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js +127 -0
  163. package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js.map +1 -0
  164. package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js +50 -0
  165. package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js.map +1 -0
  166. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +116 -0
  167. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -0
  168. package/codeyam-cli/src/utils/ruleReflection/index.js +5 -0
  169. package/codeyam-cli/src/utils/ruleReflection/index.js.map +1 -0
  170. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js +44 -0
  171. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js.map +1 -0
  172. package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js +85 -0
  173. package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js.map +1 -0
  174. package/codeyam-cli/src/utils/ruleReflection/types.js +5 -0
  175. package/codeyam-cli/src/utils/ruleReflection/types.js.map +1 -0
  176. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +293 -0
  177. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -0
  178. package/codeyam-cli/src/utils/rules/index.js +1 -0
  179. package/codeyam-cli/src/utils/rules/index.js.map +1 -1
  180. package/codeyam-cli/src/utils/rules/parser.js +2 -25
  181. package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
  182. package/codeyam-cli/src/utils/rules/ruleState.js +150 -0
  183. package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -0
  184. package/codeyam-cli/src/utils/rules/staleness.js +16 -11
  185. package/codeyam-cli/src/utils/rules/staleness.js.map +1 -1
  186. package/codeyam-cli/src/utils/serverState.js +37 -10
  187. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  188. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +21 -44
  189. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  190. package/codeyam-cli/src/webserver/app/lib/database.js +15 -3
  191. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  192. package/codeyam-cli/src/webserver/backgroundServer.js +24 -0
  193. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  194. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CA3JxPb7.js +1 -0
  195. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-DsN1wKrm.js → EntityItem-B86KKU7e.js} +1 -1
  196. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-DLqD3qNt.js → EntityTypeBadge-B5ctlSYt.js} +1 -1
  197. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-Ba2JVPzP.js → EntityTypeIcon-BqY8gDAW.js} +1 -1
  198. package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-C8lyxW9k.js → InlineSpinner-ClaLpuOo.js} +1 -1
  199. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-aht4aafF.js → InteractivePreview-BDhPilK7.js} +2 -2
  200. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CVtiBnY5.js → LibraryFunctionPreview-VeqEBv9v.js} +1 -1
  201. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-B0GLXMsr.js → LoadingDots-Bs7Nn1Jr.js} +1 -1
  202. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-xgeCVgSM.js → LogViewer-Bm3PmcCz.js} +1 -1
  203. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-OApQuNyq.js → ReportIssueModal-CgMEzchJ.js} +3 -8
  204. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-DuDvi0jm.js → SafeScreenshot-Gq3Ocjo6.js} +1 -1
  205. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DzccYyI8.js → ScenarioViewer-CBui0id_.js} +2 -2
  206. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-DyFZkK0l.js → TruncatedFilePath-CiwXDxLh.js} +1 -1
  207. package/codeyam-cli/src/webserver/build/client/assets/{_index-BwqWJOgH.js → _index-B3TDXxnk.js} +1 -1
  208. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BwavGCpm.js → activity.(_tab)-BtBFH820.js} +6 -11
  209. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-CN61MOMa.js +11 -0
  210. package/codeyam-cli/src/webserver/build/client/assets/api.agent-transcripts-l0sNRNKZ.js +1 -0
  211. package/codeyam-cli/src/webserver/build/client/assets/api.labs-unlock-l0sNRNKZ.js +1 -0
  212. package/codeyam-cli/src/webserver/build/client/assets/api.save-fixture-l0sNRNKZ.js +1 -0
  213. package/codeyam-cli/src/webserver/build/client/assets/book-open-PttOB2SF.js +6 -0
  214. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-Cx24_aWc.js → chevron-down-TJp6ofnp.js} +1 -1
  215. package/codeyam-cli/src/webserver/build/client/assets/{chunk-EPOLDU6W-CXRTFQ3F.js → chunk-JZWAC4HX-JE9ZIoBl.js} +12 -12
  216. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BOARzkeR.js → circle-check-CXhHQYrI.js} +1 -1
  217. package/codeyam-cli/src/webserver/build/client/assets/copy-6y9ALfGT.js +11 -0
  218. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-BdhJEx6B.js → createLucideIcon-Ca9fAY46.js} +1 -1
  219. package/codeyam-cli/src/webserver/build/client/assets/{dev.empty-BBnGWYga.js → dev.empty-C0epRiVn.js} +1 -1
  220. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-BJUiQqZF.js → entity._sha._-BVnB8a9L.js} +10 -10
  221. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js → entity._sha.scenarios._scenarioId.fullscreen-CBoafmVs.js} +1 -1
  222. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-D1T4TGjf.js → entity._sha_.create-scenario-DGgZjdFg.js} +1 -1
  223. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CTBG2mmz.js → entity._sha_.edit._scenarioId-38yPijoD.js} +1 -1
  224. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CS2cb_eZ.js → entry.client-BSHEfydn.js} +1 -1
  225. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DMJ7zii9.js → fileTableUtils-DCPhhSMo.js} +1 -1
  226. package/codeyam-cli/src/webserver/build/client/assets/{files-CJ6lTdTA.js → files-0N0YJQv7.js} +1 -1
  227. package/codeyam-cli/src/webserver/build/client/assets/{git-CPTZZ-JZ.js → git-DXnyr8uP.js} +1 -1
  228. package/codeyam-cli/src/webserver/build/client/assets/globals-CKT08Djd.css +1 -0
  229. package/codeyam-cli/src/webserver/build/client/assets/{index-lzqtyFU8.js → index-CcsFv748.js} +1 -1
  230. package/codeyam-cli/src/webserver/build/client/assets/{index-B1h680n5.js → index-ChN9-fAY.js} +1 -1
  231. package/codeyam-cli/src/webserver/build/client/assets/labs-BLJ7HxOC.js +1 -0
  232. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-B7B9V-bu.js → loader-circle-CTqLEAGU.js} +1 -1
  233. package/codeyam-cli/src/webserver/build/client/assets/manifest-b171b9d3.js +1 -0
  234. package/codeyam-cli/src/webserver/build/client/assets/memory-CCQd4aZA.js +78 -0
  235. package/codeyam-cli/src/webserver/build/client/assets/pause-D6vreykR.js +11 -0
  236. package/codeyam-cli/src/webserver/build/client/assets/root-CHhiHoo_.js +62 -0
  237. package/codeyam-cli/src/webserver/build/client/assets/{search-CxXUmBSd.js → search-B8VUL8nl.js} +1 -1
  238. package/codeyam-cli/src/webserver/build/client/assets/settings-BejnUJ6R.js +1 -0
  239. package/codeyam-cli/src/webserver/build/client/assets/{simulations-DwFIBT09.js → simulations-CPoAg7Zo.js} +1 -1
  240. package/codeyam-cli/src/webserver/build/client/assets/terminal-BrCP7uQo.js +11 -0
  241. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-B6LgvRJg.js → triangle-alert-BZz2NjYa.js} +1 -1
  242. package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-C1v1PQzo.js → useCustomSizes-DNwUduNu.js} +1 -1
  243. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-aSv48UbS.js → useLastLogLine-COky1GVF.js} +1 -1
  244. package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-DYxHZQuP.js → useReportContext-CpZgwliL.js} +1 -1
  245. package/codeyam-cli/src/webserver/build/client/assets/{useToast-mBRpZPiu.js → useToast-Bv9JFvUO.js} +1 -1
  246. package/codeyam-cli/src/webserver/build/server/assets/{index-BM6TDT1Y.js → index-8Fv-lH1-.js} +1 -1
  247. package/codeyam-cli/src/webserver/build/server/assets/server-build-Akn3iYFP.js +257 -0
  248. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  249. package/codeyam-cli/src/webserver/build-info.json +5 -5
  250. package/codeyam-cli/templates/{codeyam:debug.md → codeyam-debug.md} +1 -1
  251. package/codeyam-cli/templates/codeyam-diagnose.md +481 -0
  252. package/codeyam-cli/templates/codeyam-memory-hook.sh +19 -20
  253. package/codeyam-cli/templates/codeyam-memory.md +392 -0
  254. package/codeyam-cli/templates/{codeyam:new-rule.md → codeyam-new-rule.md} +2 -2
  255. package/codeyam-cli/templates/{codeyam:setup.md → codeyam-setup.md} +13 -1
  256. package/codeyam-cli/templates/{codeyam:sim.md → codeyam-sim.md} +1 -1
  257. package/codeyam-cli/templates/{codeyam:test.md → codeyam-test.md} +1 -1
  258. package/codeyam-cli/templates/{codeyam:verify.md → codeyam-verify.md} +1 -1
  259. package/codeyam-cli/templates/rule-notification-hook.py +56 -0
  260. package/codeyam-cli/templates/rule-reflection-hook.py +554 -87
  261. package/codeyam-cli/templates/rules-instructions.md +63 -24
  262. package/package.json +2 -2
  263. package/packages/ai/index.js +1 -1
  264. package/packages/ai/index.js.map +1 -1
  265. package/packages/ai/src/lib/analyzeScope.js +21 -1
  266. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  267. package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js +10 -14
  268. package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js.map +1 -1
  269. package/packages/ai/src/lib/astScopes/processExpression.js +78 -1
  270. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  271. package/packages/ai/src/lib/astScopes/sharedPatterns.js +25 -0
  272. package/packages/ai/src/lib/astScopes/sharedPatterns.js.map +1 -1
  273. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +262 -8
  274. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  275. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +5 -1
  276. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  277. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +11 -2
  278. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  279. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +2 -2
  280. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  281. package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js +63 -0
  282. package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js.map +1 -0
  283. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +113 -11
  284. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  285. package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js +15 -1
  286. package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js.map +1 -1
  287. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +78 -17
  288. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  289. package/packages/ai/src/lib/dataStructureChunking.js +26 -11
  290. package/packages/ai/src/lib/dataStructureChunking.js.map +1 -1
  291. package/packages/ai/src/lib/generateEntityDataStructure.js +46 -2
  292. package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
  293. package/packages/ai/src/lib/generateEntityScenarioData.js +212 -3
  294. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  295. package/packages/ai/src/lib/generateExecutionFlows.js +16 -2
  296. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  297. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +242 -81
  298. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
  299. package/packages/ai/src/lib/isolateScopes.js +39 -3
  300. package/packages/ai/src/lib/isolateScopes.js.map +1 -1
  301. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js +5 -0
  302. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js.map +1 -1
  303. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js +97 -0
  304. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js.map +1 -0
  305. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +17 -2
  306. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  307. package/packages/analyze/index.js +1 -0
  308. package/packages/analyze/index.js.map +1 -1
  309. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +52 -2
  310. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  311. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +3 -0
  312. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  313. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +880 -0
  314. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -0
  315. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +5 -1
  316. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
  317. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +9 -1
  318. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  319. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +116 -13
  320. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  321. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +231 -22
  322. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  323. package/packages/analyze/src/lib/index.js +1 -0
  324. package/packages/analyze/src/lib/index.js.map +1 -1
  325. package/packages/database/src/lib/analysisBranchToDb.js +1 -1
  326. package/packages/database/src/lib/analysisBranchToDb.js.map +1 -1
  327. package/packages/database/src/lib/analysisToDb.js +1 -1
  328. package/packages/database/src/lib/analysisToDb.js.map +1 -1
  329. package/packages/database/src/lib/branchToDb.js +1 -1
  330. package/packages/database/src/lib/branchToDb.js.map +1 -1
  331. package/packages/database/src/lib/commitBranchToDb.js +1 -1
  332. package/packages/database/src/lib/commitBranchToDb.js.map +1 -1
  333. package/packages/database/src/lib/commitToDb.js +1 -1
  334. package/packages/database/src/lib/commitToDb.js.map +1 -1
  335. package/packages/database/src/lib/fileToDb.js +1 -1
  336. package/packages/database/src/lib/fileToDb.js.map +1 -1
  337. package/packages/database/src/lib/kysely/db.js +3 -0
  338. package/packages/database/src/lib/kysely/db.js.map +1 -1
  339. package/packages/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
  340. package/packages/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
  341. package/packages/database/src/lib/projectToDb.js +1 -1
  342. package/packages/database/src/lib/projectToDb.js.map +1 -1
  343. package/packages/database/src/lib/saveFiles.js +1 -1
  344. package/packages/database/src/lib/saveFiles.js.map +1 -1
  345. package/packages/database/src/lib/scenarioToDb.js +1 -1
  346. package/packages/database/src/lib/scenarioToDb.js.map +1 -1
  347. package/scripts/finalize-analyzer.cjs +8 -76
  348. package/codeyam-cli/src/webserver/build/client/assets/copy-Bb-80kDT.js +0 -6
  349. package/codeyam-cli/src/webserver/build/client/assets/file-code-Dhef1kWN.js +0 -6
  350. package/codeyam-cli/src/webserver/build/client/assets/globals-D3yhhV8x.css +0 -1
  351. package/codeyam-cli/src/webserver/build/client/assets/manifest-a78b90a2.js +0 -1
  352. package/codeyam-cli/src/webserver/build/client/assets/memory--GCbFsBE.js +0 -92
  353. package/codeyam-cli/src/webserver/build/client/assets/root-eVAaavTS.js +0 -62
  354. package/codeyam-cli/src/webserver/build/client/assets/settings-CS5f3WzT.js +0 -1
  355. package/codeyam-cli/src/webserver/build/server/assets/server-build-dYC34MHw.js +0 -257
  356. package/codeyam-cli/templates/codeyam:diagnose.md +0 -803
  357. package/codeyam-cli/templates/codeyam:memory.md +0 -341
@@ -743,6 +743,48 @@ function processScope({
743
743
  };
744
744
  }
745
745
 
746
+ /**
747
+ * Check if a code string contains only type declarations (type aliases, interfaces, etc.)
748
+ * that don't contribute to runtime behavior. This is used to determine if the root scope
749
+ * should be considered "empty" for scope extraction purposes.
750
+ */
751
+ function containsOnlyTypeDeclarations(code: string): boolean {
752
+ try {
753
+ const sourceFile = ts.createSourceFile(
754
+ 'temp.ts',
755
+ code,
756
+ ts.ScriptTarget.Latest,
757
+ true,
758
+ ts.ScriptKind.TS,
759
+ );
760
+
761
+ // Check each statement - if any is NOT a type-only declaration, return false
762
+ for (const statement of sourceFile.statements) {
763
+ if (
764
+ ts.isTypeAliasDeclaration(statement) ||
765
+ ts.isInterfaceDeclaration(statement) ||
766
+ ts.isEnumDeclaration(statement) ||
767
+ // Import declarations that are type-only
768
+ (ts.isImportDeclaration(statement) &&
769
+ statement.importClause?.isTypeOnly) ||
770
+ // Export declarations that are type-only
771
+ (ts.isExportDeclaration(statement) && statement.isTypeOnly)
772
+ ) {
773
+ // This is a type-only declaration, continue checking
774
+ continue;
775
+ }
776
+ // Found a non-type statement
777
+ return false;
778
+ }
779
+
780
+ // All statements are type-only (or there are no statements)
781
+ return sourceFile.statements.length > 0;
782
+ } catch {
783
+ // If parsing fails, assume it's not type-only
784
+ return false;
785
+ }
786
+ }
787
+
746
788
  /**
747
789
  * Main entry point.
748
790
  *
@@ -792,9 +834,15 @@ export default function isolateScopes(
792
834
  const jsxLimit = options?.jsxLimit ?? 10;
793
835
  processJSXForScope(isolatedScopes, generateSyntheticName, jsxLimit);
794
836
 
795
- // If the root scope text is empty and there's only one child scope,
796
- // return that child scope as the root scope
797
- if (isolatedScopes.text.trim().length === 0) {
837
+ // If the root scope text is empty (or only contains type declarations) and there's
838
+ // only one child scope, return that child scope as the root scope.
839
+ // Type declarations (type aliases, interfaces) don't contribute to runtime behavior,
840
+ // so we treat them as "empty" for scope extraction purposes.
841
+ const rootTextIsEffectivelyEmpty =
842
+ isolatedScopes.text.trim().length === 0 ||
843
+ containsOnlyTypeDeclarations(isolatedScopes.text);
844
+
845
+ if (rootTextIsEffectivelyEmpty) {
798
846
  const childScopeArray = Object.values(isolatedScopes.childScopes);
799
847
  if (childScopeArray.length === 1) {
800
848
  return childScopeArray[0];
@@ -11,6 +11,11 @@ export default function mergeJsonTypeDefinitions(
11
11
  if (!typeDef) continue;
12
12
  if (typeof typeDef === 'string') continue;
13
13
  for (const [key, value] of Object.entries(typeDef)) {
14
+ // Preserve _nullable boolean markers set by convertDotNotation
15
+ if (key === '_nullable' && typeof value === 'boolean') {
16
+ mergedDef[key] = value;
17
+ continue;
18
+ }
14
19
  if (typeof value === 'string') {
15
20
  if (!mergedDef[key]) {
16
21
  mergedDef[key] = value;
@@ -0,0 +1,118 @@
1
+ import { JsonTypeDefinition } from '~codeyam/types';
2
+
3
+ /**
4
+ * Check whether all non-`_nullable` children of an object are simple strings.
5
+ * "Leaf-like" nullable objects (all-string children) get collapsed to
6
+ * `"object | null"` so the LLM knows the field can be null.
7
+ * Objects with nested structure (object/array children) keep their shape
8
+ * so the LLM can still generate proper data when the field is truthy.
9
+ */
10
+ function isLeafLikeObject(obj: Record<string, any>): boolean {
11
+ for (const key of Object.keys(obj)) {
12
+ if (key === '_nullable') continue;
13
+ const value = obj[key];
14
+ if (typeof value !== 'string') return false;
15
+ }
16
+ return true;
17
+ }
18
+
19
+ /**
20
+ * Collapse *leaf-like* nullable objects/arrays in the data structure to type strings.
21
+ *
22
+ * When convertDotNotation marks an object or array as `_nullable: true`
23
+ * (meaning the schema had `object | undefined`, `object | null`, etc.),
24
+ * we decide whether to collapse it:
25
+ *
26
+ * - **Leaf-like** (all children are simple strings): collapse to `"object | null"`.
27
+ * Example: `{ _nullable: true, type: "string", path: "string" }` → `"object | null"`
28
+ *
29
+ * - **Rich** (has object/array children): strip `_nullable` and keep the structure
30
+ * so the LLM can generate proper nested data when the field is truthy.
31
+ * Example: `{ _nullable: true, items: [...], name: "string" }` → `{ items: [...], name: "string" }`
32
+ *
33
+ * Non-nullable objects are recursively processed but left as nested structures.
34
+ */
35
+ export default function collapseNullableObjects(
36
+ data: JsonTypeDefinition,
37
+ ): JsonTypeDefinition {
38
+ if (typeof data !== 'object' || data === null) {
39
+ return data;
40
+ }
41
+
42
+ if (Array.isArray(data)) {
43
+ return data.map((item: any) =>
44
+ typeof item === 'object' && item !== null
45
+ ? collapseNullableObjects(item as JsonTypeDefinition)
46
+ : item,
47
+ ) as any as JsonTypeDefinition;
48
+ }
49
+
50
+ const result: JsonTypeDefinition = {};
51
+
52
+ for (const key of Object.keys(data)) {
53
+ // Skip the _nullable marker itself (shouldn't appear at top level, but be safe)
54
+ if (key === '_nullable') continue;
55
+
56
+ const value = data[key];
57
+
58
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
59
+ const hasNullable = (value as any)._nullable === true;
60
+ if (hasNullable && isLeafLikeObject(value as Record<string, any>)) {
61
+ // Leaf-like nullable object → collapse to type string
62
+ const childKeys = Object.keys(value as any).filter(
63
+ (k) => k !== '_nullable',
64
+ );
65
+ console.log(
66
+ `[collapseNullableObjects] collapsed "${key}" → "object | null" (leaf-like, children: [${childKeys.join(', ')}])`,
67
+ );
68
+ result[key] = 'object | null';
69
+ } else if (hasNullable) {
70
+ // Rich nullable object → strip _nullable, keep structure
71
+ const childKeys = Object.keys(value as any).filter(
72
+ (k) => k !== '_nullable',
73
+ );
74
+ console.log(
75
+ `[collapseNullableObjects] kept structure for nullable "${key}" (rich, children: [${childKeys.join(', ')}])`,
76
+ );
77
+ result[key] = collapseNullableObjects(value as JsonTypeDefinition);
78
+ } else {
79
+ // Non-nullable → recurse
80
+ result[key] = collapseNullableObjects(value as JsonTypeDefinition);
81
+ }
82
+ } else if (Array.isArray(value)) {
83
+ const hasNullable = (value as any)._nullable === true;
84
+ if (
85
+ hasNullable &&
86
+ value.length <= 1 &&
87
+ value.every((v) => typeof v === 'string')
88
+ ) {
89
+ // Leaf-like nullable array → collapse to type string
90
+ console.log(
91
+ `[collapseNullableObjects] collapsed "${key}" → "array | null" (leaf-like)`,
92
+ );
93
+ result[key] = 'array | null';
94
+ } else if (hasNullable) {
95
+ // Rich nullable array → strip _nullable, keep structure
96
+ console.log(
97
+ `[collapseNullableObjects] kept structure for nullable array "${key}" (${value.length} elements)`,
98
+ );
99
+ result[key] = value.map((item) =>
100
+ typeof item === 'object' && item !== null
101
+ ? collapseNullableObjects(item as JsonTypeDefinition)
102
+ : item,
103
+ ) as JsonTypeDefinition[];
104
+ } else {
105
+ // Non-nullable → recurse elements
106
+ result[key] = value.map((item) =>
107
+ typeof item === 'object' && item !== null
108
+ ? collapseNullableObjects(item as JsonTypeDefinition)
109
+ : item,
110
+ ) as JsonTypeDefinition[];
111
+ }
112
+ } else {
113
+ result[key] = value;
114
+ }
115
+ }
116
+
117
+ return result;
118
+ }
@@ -7,6 +7,7 @@ import {
7
7
  } from '~codeyam/types';
8
8
  import noErrorAttributes from './noErrorAttributes';
9
9
  import simplifyKeysForLLM from './simplifyKeysForLLM';
10
+ import collapseNullableObjects from './collapseNullableObjects';
10
11
 
11
12
  /**
12
13
  * Sort object keys by the size of their JSON-stringified values (smallest first).
@@ -99,11 +100,17 @@ ${JSON.stringify(defaultScenarioData.data, null, 2)}
99
100
  // while the reconcileMockDataKeys function will still match the simplified response back to original keys.
100
101
  // Then sort keys by size (smallest first) so small keys appear before large keys,
101
102
  // increasing the chance the LLM generates all keys for large schemas.
102
- const cleanedDataForMocks = structure.dataForMocks
103
- ? simplifyKeysForLLM(
104
- noErrorAttributes(structure.dataForMocks) as JsonTypeDefinition,
105
- )
103
+
104
+ const afterNoError = structure.dataForMocks
105
+ ? (noErrorAttributes(structure.dataForMocks) as JsonTypeDefinition)
106
+ : null;
107
+
108
+ const afterSimplify = afterNoError ? simplifyKeysForLLM(afterNoError) : null;
109
+
110
+ const cleanedDataForMocks = afterSimplify
111
+ ? collapseNullableObjects(afterSimplify)
106
112
  : null;
113
+
107
114
  const sortedDataForMocks =
108
115
  cleanedDataForMocks &&
109
116
  typeof cleanedDataForMocks === 'object' &&
@@ -111,6 +118,19 @@ ${JSON.stringify(defaultScenarioData.data, null, 2)}
111
118
  ? sortKeysBySize(cleanedDataForMocks as Record<string, any>)
112
119
  : cleanedDataForMocks;
113
120
 
121
+ // Log nullable-related content in final prompt JSON
122
+ if (sortedDataForMocks) {
123
+ const finalJson = JSON.stringify(sortedDataForMocks, null, 2);
124
+ const hasNullableMarker = finalJson.includes('_nullable');
125
+ const nullCollapsed = (finalJson.match(/"object \| null"/g) || []).length;
126
+ const arrayCollapsed = (finalJson.match(/"array \| null"/g) || []).length;
127
+ if (hasNullableMarker || nullCollapsed > 0 || arrayCollapsed > 0) {
128
+ console.log(
129
+ `[generateEntityScenarioDataGenerator] final prompt: ${nullCollapsed} "object | null", ${arrayCollapsed} "array | null"${hasNullableMarker ? ', WARNING: _nullable still present!' : ''}`,
130
+ );
131
+ }
132
+ }
133
+
114
134
  // When mockData has already been generated via chunks, skip it in the main call
115
135
  const mockDataSection = options?.mockDataAlreadyGenerated
116
136
  ? '## mockData Structure\nmockData has been pre-generated—return `{}` for mockData.'
@@ -41,6 +41,8 @@ export { default as mergeValidatedDataStructures } from './src/lib/files/scenari
41
41
 
42
42
  export { discoverDirectDependencies } from './src/lib/files/analyze/dependencyResolver';
43
43
 
44
+ export { transformationTracer } from './src/lib/files/scenarios/TransformationTracer';
45
+
44
46
  export { default as getAnalysisError } from './src/lib/utils/getAnalysisError';
45
47
  export { default as measureAndReportExecutionTime } from './src/lib/utils/measureAndReportExecutionTime';
46
48
 
@@ -18,6 +18,7 @@ import {
18
18
  getCompoundConditionals,
19
19
  getChildBoundaryGatingConditions,
20
20
  getJsxRenderingUsages,
21
+ skipWorkerPool,
21
22
  } from '~codeyam/ai';
22
23
  import type { AnalysisOptions } from '../analyzeEntities';
23
24
 
@@ -271,6 +272,23 @@ export default async function prepareEntityDataStructures(
271
272
  };
272
273
 
273
274
  const entities = Array.from(allEntities);
275
+
276
+ // The worker thread creates its own ProjectAnalyzer (ts.Program) on first use,
277
+ // which takes 50-70s. For small entity counts the overhead far exceeds the actual
278
+ // processing time (<2s). Skip the worker and run on the main thread instead,
279
+ // reusing the existing ProjectAnalyzer.
280
+ const entitiesNeedingGeneration = entities.filter(
281
+ (e) =>
282
+ !e.metadata?.isolatedDataStructure || options.force || options.forceAll,
283
+ ).length;
284
+ const WORKER_ENTITY_THRESHOLD = 500;
285
+ if (entitiesNeedingGeneration < WORKER_ENTITY_THRESHOLD) {
286
+ console.log(
287
+ `CodeYam: Skipping worker thread for DS prep (${entitiesNeedingGeneration} entities < ${WORKER_ENTITY_THRESHOLD} threshold)`,
288
+ );
289
+ skipWorkerPool();
290
+ }
291
+
274
292
  const sequential =
275
293
  DEBUG_SEQUENTIAL_EXECUTION || options.sequentialDataStructurePrep;
276
294
 
@@ -555,6 +573,42 @@ async function getEntityDataStructureAndFunctionCalls({
555
573
  },
556
574
  );
557
575
 
576
+ // Add same-file child components to dependencySchemas.
577
+ // Same-file components (e.g., AgentCard defined in the same file as AgentTranscriptsPage)
578
+ // appear in externalFunctionCalls and functionResults but NOT in importedExports or
579
+ // nodeModuleImports. Without this, their signatures are missing from dependencySchemas
580
+ // and enrichArrayTypesFromChildSignatures can't find child component field accesses.
581
+ const allDependencyNames = new Set(allDependencies.map((d) => d.name));
582
+
583
+ for (const efc of dataStructure.externalFunctionCalls) {
584
+ // Skip if already covered by importedExports or nodeModuleImports
585
+ if (allDependencyNames.has(efc.name)) continue;
586
+
587
+ const signatureSchema = getFunctionSignature(dataStructure, {
588
+ functionName: efc.name,
589
+ });
590
+
591
+ const returnValueSchema = getReturnValue(dataStructure, {
592
+ functionName: efc.name,
593
+ });
594
+
595
+ // Only add if we have signature or return value data
596
+ if (!signatureSchema && !returnValueSchema) continue;
597
+
598
+ const clonedSignatureSchema = { ...(signatureSchema ?? {}) };
599
+ const clonedReturnValueSchema = { ...(returnValueSchema ?? {}) };
600
+
601
+ const entityFilePath = entity.filePath;
602
+ dependencySchemas[entityFilePath] ||= {};
603
+ dependencySchemas[entityFilePath][efc.name] = {
604
+ signatureSchema: deduplicateFunctionSchemas(clonedSignatureSchema),
605
+ returnValueSchema: deduplicateFunctionSchemas(clonedReturnValueSchema),
606
+ usageEquivalencies: getUsageEquivalencies(dataStructure, efc.name) ?? {},
607
+ sourceEquivalencies:
608
+ getSourceEquivalencies(dataStructure, efc.name) ?? {},
609
+ };
610
+ }
611
+
558
612
  const rawReturnValue =
559
613
  getReturnValue(dataStructure, { fillInUnknowns: false }) ?? {};
560
614
 
@@ -870,9 +924,21 @@ export function determineMockedDependencies(entity: Entity) {
870
924
  // A schema with only "EntityName(): function" just indicates the entity is callable,
871
925
  // it doesn't mean there's actual return data to mock
872
926
  const hasReturnValue = hasActualReturnValueData(entityReturnValueSchema);
873
- const complexReturnValue = Object.values(
874
- entityReturnValueSchema ?? {},
875
- ).some((value) => value === 'object' || value === 'array');
927
+ // Check for complex return types (object/array), accounting for nullable types
928
+ // e.g., 'object', 'object | null', 'array | undefined' should all count as complex.
929
+ // Also detect when functionCallReturnValue has nested child properties — this
930
+ // proves it's a structured type even if its declared type is still 'unknown'.
931
+ const returnValueKeys = Object.keys(entityReturnValueSchema ?? {});
932
+ const complexReturnValue =
933
+ Object.values(entityReturnValueSchema ?? {}).some((value) => {
934
+ const baseType = value?.split(' | ')[0];
935
+ return baseType === 'object' || baseType === 'array';
936
+ }) ||
937
+ returnValueKeys.some(
938
+ (key) =>
939
+ key.includes('functionCallReturnValue.') ||
940
+ key.includes('functionCallReturnValue['),
941
+ );
876
942
 
877
943
  // Check if this is a validation function that should always be mocked
878
944
  const isValidationFn = isValidationFunction(entityName);
@@ -5,6 +5,7 @@ import {
5
5
  measureAndReportExecutionTime,
6
6
  ProjectAnalyzer,
7
7
  } from '~codeyam/analyze';
8
+ import { transformationTracer } from '../scenarios/TransformationTracer';
8
9
  import { getFileByPathSafe } from '../../utils/getFileByPath';
9
10
  import trackEntityCircularDependencies from './trackEntityCircularDependencies';
10
11
  import validateDependencyAnalyses from './validateDependencyAnalyses';
@@ -307,6 +308,10 @@ export default async function analyzeEntities({
307
308
  awsLog(
308
309
  `CodeYam: analyzeEntities: Analysis completed with ${analyses.length} analyses`,
309
310
  );
311
+
312
+ // Flush transformation trace if tracing is enabled
313
+ transformationTracer.flush();
314
+
310
315
  return analyses;
311
316
 
312
317
  // PHASE 3: Pure graph traversal