@codeyam/codeyam-cli 0.1.4 → 0.1.6

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 (151) 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 +14 -14
  4. package/analyzer-template/packages/ai/package.json +1 -1
  5. package/analyzer-template/packages/ai/src/lib/completionCall.ts +102 -113
  6. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +232 -5
  7. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/stripNullableMarkers.ts +35 -0
  8. package/analyzer-template/packages/analyze/src/lib/asts/nodes/getNodeType.ts +1 -0
  9. package/analyzer-template/packages/aws/package.json +10 -10
  10. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
  11. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +6 -2
  12. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  13. package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +14 -2
  14. package/analyzer-template/project/constructMockCode.ts +32 -5
  15. package/analyzer-template/project/orchestrateCapture.ts +4 -1
  16. package/analyzer-template/project/writeScenarioComponents.ts +62 -12
  17. package/background/src/lib/virtualized/project/constructMockCode.js +28 -5
  18. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  19. package/background/src/lib/virtualized/project/orchestrateCapture.js +4 -1
  20. package/background/src/lib/virtualized/project/orchestrateCapture.js.map +1 -1
  21. package/background/src/lib/virtualized/project/writeScenarioComponents.js +46 -7
  22. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  23. package/codeyam-cli/src/cli.js +30 -25
  24. package/codeyam-cli/src/cli.js.map +1 -1
  25. package/codeyam-cli/src/commands/memory.js +3 -56
  26. package/codeyam-cli/src/commands/memory.js.map +1 -1
  27. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js +6 -0
  28. package/codeyam-cli/src/utils/__tests__/npmVersionCheck.test.js.map +1 -1
  29. package/codeyam-cli/src/utils/install-skills.js +4 -4
  30. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  31. package/codeyam-cli/src/utils/npmVersionCheck.js +2 -2
  32. package/codeyam-cli/src/utils/npmVersionCheck.js.map +1 -1
  33. package/codeyam-cli/src/utils/requireSimulations.js +1 -1
  34. package/codeyam-cli/src/utils/requireSimulations.js.map +1 -1
  35. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +5 -6
  36. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -1
  37. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +2 -5
  38. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -1
  39. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js +83 -0
  40. package/codeyam-cli/src/utils/rules/__tests__/parser.test.js.map +1 -0
  41. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js +118 -0
  42. package/codeyam-cli/src/utils/rules/__tests__/pathMatcher.test.js.map +1 -0
  43. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js +72 -0
  44. package/codeyam-cli/src/utils/rules/__tests__/rulePlacement.test.js.map +1 -0
  45. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js +76 -0
  46. package/codeyam-cli/src/utils/rules/__tests__/sourceFiles.test.js.map +1 -0
  47. package/codeyam-cli/src/utils/rules/index.js +1 -0
  48. package/codeyam-cli/src/utils/rules/index.js.map +1 -1
  49. package/codeyam-cli/src/utils/rules/parser.js +14 -4
  50. package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
  51. package/codeyam-cli/src/utils/rules/pathMatcher.js +34 -3
  52. package/codeyam-cli/src/utils/rules/pathMatcher.js.map +1 -1
  53. package/codeyam-cli/src/utils/rules/rulePlacement.js +65 -0
  54. package/codeyam-cli/src/utils/rules/rulePlacement.js.map +1 -0
  55. package/codeyam-cli/src/utils/rules/sourceFiles.js +43 -0
  56. package/codeyam-cli/src/utils/rules/sourceFiles.js.map +1 -0
  57. package/codeyam-cli/src/utils/simulationGateMiddleware.js +159 -0
  58. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -0
  59. package/codeyam-cli/src/utils/syncMocksMiddleware.js +5 -24
  60. package/codeyam-cli/src/utils/syncMocksMiddleware.js.map +1 -1
  61. package/codeyam-cli/src/utils/versionInfo.js +21 -0
  62. package/codeyam-cli/src/utils/versionInfo.js.map +1 -1
  63. package/codeyam-cli/src/webserver/app/routes/api.agent-transcripts.js +486 -0
  64. package/codeyam-cli/src/webserver/app/routes/api.agent-transcripts.js.map +1 -0
  65. package/codeyam-cli/src/webserver/backgroundServer.js +10 -0
  66. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  67. package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-jNYXRRNI.js → CopyButton-CtmbP4Gl.js} +1 -1
  68. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-bwuHPyTa.js → EntityItem-DlMph_Hm.js} +1 -1
  69. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-CvzqMxcu.js → EntityTypeBadge-B-0PjGOU.js} +1 -1
  70. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-BH0XDim7.js → EntityTypeIcon-DN9eiJAO.js} +1 -1
  71. package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-EhOseatT.js → InlineSpinner-C1rIyZdV.js} +1 -1
  72. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-yjIHlOGa.js → InteractivePreview-rE_fI2h2.js} +2 -2
  73. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-Cq5o8jL4.js → LibraryFunctionPreview-CnatsCw2.js} +1 -1
  74. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-BvMu2i-g.js → LoadingDots-CSP6DZrh.js} +1 -1
  75. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-kgBTLoJD.js → LogViewer-CMK8Q7yk.js} +1 -1
  76. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-BzPgx-xO.js → ReportIssueModal-TCV_HBjy.js} +1 -1
  77. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-CwZrv-Ok.js → SafeScreenshot-CG2uh31y.js} +1 -1
  78. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-BX2Ny2Qj.js → ScenarioViewer-CU_TDYd8.js} +1 -1
  79. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-CDpEprKa.js → TruncatedFilePath-D7IoaWUW.js} +1 -1
  80. package/codeyam-cli/src/webserver/build/client/assets/{_index-BRx8ZGZo.js → _index-B8z7mjR-.js} +1 -1
  81. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-4S4yPfFw.js → activity.(_tab)-DZu78RI1.js} +1 -1
  82. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DxCa1oBt.js +23 -0
  83. package/codeyam-cli/src/webserver/build/client/assets/api.rule-path-l0sNRNKZ.js +1 -0
  84. package/codeyam-cli/src/webserver/build/client/assets/{book-open-D4IPYH_y.js → book-open-Bp5FLkd4.js} +1 -1
  85. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-CG65viiV.js → chevron-down-DQJA9f4o.js} +1 -1
  86. package/codeyam-cli/src/webserver/build/client/assets/{chunk-JZWAC4HX-DB3aFuEO.js → chunk-JZWAC4HX-7VptmeIr.js} +1 -1
  87. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-igfMr5DY.js → circle-check-B6C4LY9o.js} +1 -1
  88. package/codeyam-cli/src/webserver/build/client/assets/{copy-Coc4o_8c.js → copy-6nzYCu0G.js} +1 -1
  89. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-D1zB-pYc.js → createLucideIcon-D-QUFOwe.js} +1 -1
  90. package/codeyam-cli/src/webserver/build/client/assets/{dev.empty-JTAjQ54M.js → dev.empty-DmzSmblj.js} +1 -1
  91. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-B0h9AqE6.js → entity._sha._--zvFJ4OH.js} +1 -1
  92. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-DjLxr2JB.js → entity._sha.scenarios._scenarioId.fullscreen-DVTcUnur.js} +1 -1
  93. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-CtYowLOt.js → entity._sha_.create-scenario-BVgNO76F.js} +1 -1
  94. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-PePWg17F.js → entity._sha_.edit._scenarioId-C7ysA4Jq.js} +1 -1
  95. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-I-Wo99C_.js → entry.client-CU6EUArK.js} +1 -1
  96. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-9sMMAiWJ.js → fileTableUtils-EWpfFU4X.js} +1 -1
  97. package/codeyam-cli/src/webserver/build/client/assets/{files-Co65J0s3.js → files-CrxAoWIL.js} +1 -1
  98. package/codeyam-cli/src/webserver/build/client/assets/{git-BdHOxVfg.js → git-BldHtKeW.js} +1 -1
  99. package/codeyam-cli/src/webserver/build/client/assets/globals-B4MPiL7S.css +1 -0
  100. package/codeyam-cli/src/webserver/build/client/assets/{index-CUM5iXwc.js → index-7-1FmlHo.js} +1 -1
  101. package/codeyam-cli/src/webserver/build/client/assets/{index-_417gcQW.js → index-DuYcwYp_.js} +1 -1
  102. package/codeyam-cli/src/webserver/build/client/assets/labs-CPPVOSWB.js +1 -0
  103. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-TzRHMVog.js → loader-circle-BnDcD54R.js} +1 -1
  104. package/codeyam-cli/src/webserver/build/client/assets/manifest-c1fc3656.js +1 -0
  105. package/codeyam-cli/src/webserver/build/client/assets/{memory-UIDVz141.js → memory-CfpYxpNu.js} +23 -22
  106. package/codeyam-cli/src/webserver/build/client/assets/{pause-hjzB7t2z.js → pause-DhQX2g22.js} +1 -1
  107. package/codeyam-cli/src/webserver/build/client/assets/root-CAAbm4U5.js +62 -0
  108. package/codeyam-cli/src/webserver/build/client/assets/{search-DcAwD_Ln.js → search-DborVoKD.js} +1 -1
  109. package/codeyam-cli/src/webserver/build/client/assets/{settings-CclxrcPK.js → settings-BpLDWmGh.js} +1 -1
  110. package/codeyam-cli/src/webserver/build/client/assets/{simulations-DVNJVQgD.js → simulations-BtrtCYJg.js} +1 -1
  111. package/codeyam-cli/src/webserver/build/client/assets/{terminal-DbEAHMbA.js → terminal-Bs4NC-VZ.js} +1 -1
  112. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-CAD5b1o_.js → triangle-alert-DTf3Jojp.js} +1 -1
  113. package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-BqgrAzs3.js → useCustomSizes-D_bDZyDU.js} +1 -1
  114. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-DAFqfEDH.js → useLastLogLine-DZp6rrQD.js} +1 -1
  115. package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-DZlYx2c4.js → useReportContext-BsQb6rFd.js} +1 -1
  116. package/codeyam-cli/src/webserver/build/client/assets/{useToast-ihdMtlf6.js → useToast-BOur3mUv.js} +1 -1
  117. package/codeyam-cli/src/webserver/build/server/assets/{index-B3dE0r28.js → index-B8A_aaGG.js} +1 -1
  118. package/codeyam-cli/src/webserver/build/server/assets/server-build-69rRZnZo.js +286 -0
  119. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  120. package/codeyam-cli/src/webserver/build-info.json +5 -5
  121. package/codeyam-cli/templates/codeyam-new-rule.md +0 -2
  122. package/codeyam-cli/templates/hooks/staleness-check.sh +43 -0
  123. package/codeyam-cli/templates/prompts/conversation-guidance.txt +32 -0
  124. package/codeyam-cli/templates/prompts/conversation-prompt.txt +28 -0
  125. package/codeyam-cli/templates/prompts/interruption-prompt.txt +31 -0
  126. package/codeyam-cli/templates/prompts/stale-rules-prompt.txt +24 -0
  127. package/codeyam-cli/templates/rules-instructions.md +33 -88
  128. package/package.json +5 -5
  129. package/packages/ai/src/lib/completionCall.js +0 -5
  130. package/packages/ai/src/lib/completionCall.js.map +1 -1
  131. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +213 -3
  132. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  133. package/packages/analyze/src/lib/asts/nodes/getNodeType.js +1 -0
  134. package/packages/analyze/src/lib/asts/nodes/getNodeType.js.map +1 -1
  135. package/packages/utils/src/lib/fs/rsyncCopy.js +6 -2
  136. package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  137. package/codeyam-cli/src/commands/detect-universal-mocks.js +0 -120
  138. package/codeyam-cli/src/commands/detect-universal-mocks.js.map +0 -1
  139. package/codeyam-cli/src/commands/list.js +0 -31
  140. package/codeyam-cli/src/commands/list.js.map +0 -1
  141. package/codeyam-cli/src/commands/webapp-info.js +0 -146
  142. package/codeyam-cli/src/commands/webapp-info.js.map +0 -1
  143. package/codeyam-cli/src/utils/universal-mocks.js +0 -152
  144. package/codeyam-cli/src/utils/universal-mocks.js.map +0 -1
  145. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-DHKuQSmR.js +0 -17
  146. package/codeyam-cli/src/webserver/build/client/assets/globals-BSZfYCkU.css +0 -1
  147. package/codeyam-cli/src/webserver/build/client/assets/labs-BK0C1H1T.js +0 -1
  148. package/codeyam-cli/src/webserver/build/client/assets/manifest-040dab1c.js +0 -1
  149. package/codeyam-cli/src/webserver/build/client/assets/root-D1WadSdf.js +0 -62
  150. package/codeyam-cli/src/webserver/build/server/assets/server-build-DYbfdxa3.js +0 -273
  151. package/codeyam-cli/templates/codeyam-stop-hook.sh +0 -284
@@ -11,15 +11,15 @@
11
11
  "author": "",
12
12
  "license": "ISC",
13
13
  "dependencies": {
14
- "@aws-sdk/client-codebuild": "^3.948.0",
15
- "@aws-sdk/client-cloudwatch-logs": "^3.980.0",
16
- "@aws-sdk/client-dynamodb": "^3.956.0",
17
- "@aws-sdk/client-ecr": "^3.948.0",
18
- "@aws-sdk/client-ecs": "^3.956.0",
19
- "@aws-sdk/client-s3": "^3.940.0",
20
- "@aws-sdk/client-sqs": "^3.956.0",
21
- "@aws-sdk/lib-storage": "^3.975.0",
22
- "@aws-sdk/s3-request-presigner": "^3.940.0",
23
- "@aws-sdk/util-dynamodb": "^3.971.0"
14
+ "@aws-sdk/client-codebuild": "^3.995.0",
15
+ "@aws-sdk/client-cloudwatch-logs": "^3.990.0",
16
+ "@aws-sdk/client-dynamodb": "^3.990.0",
17
+ "@aws-sdk/client-ecr": "^3.990.0",
18
+ "@aws-sdk/client-ecs": "^3.990.0",
19
+ "@aws-sdk/client-s3": "^3.990.0",
20
+ "@aws-sdk/client-sqs": "^3.990.0",
21
+ "@aws-sdk/lib-storage": "^3.990.0",
22
+ "@aws-sdk/s3-request-presigner": "^3.990.0",
23
+ "@aws-sdk/util-dynamodb": "^3.990.0"
24
24
  }
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rsyncCopy.d.ts","sourceRoot":"","sources":["../../../../../src/lib/fs/rsyncCopy.ts"],"names":[],"mappings":"AAqFA,wBAA8B,SAAS,CAAC,EACtC,UAAU,EACV,eAAe,EACf,QAAa,EACb,YAAoB,EACpB,MAAc,EACd,SAAc,GACf,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsEhB"}
1
+ {"version":3,"file":"rsyncCopy.d.ts","sourceRoot":"","sources":["../../../../../src/lib/fs/rsyncCopy.ts"],"names":[],"mappings":"AAqFA,wBAA8B,SAAS,CAAC,EACtC,UAAU,EACV,eAAe,EACf,QAAa,EACb,YAAoB,EACpB,MAAc,EACd,SAAc,GACf,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFhB"}
@@ -1,4 +1,4 @@
1
- import { spawn, execSync } from 'child_process';
1
+ import { execSync, spawn } from 'child_process';
2
2
  import { existsSync, readdirSync, rmSync } from 'fs';
3
3
  import { join } from 'path';
4
4
  /**
@@ -97,7 +97,8 @@ export default async function rsyncCopy({ sourcePath, destinationPath, excludes
97
97
  const dest = destinationPath.endsWith('/')
98
98
  ? destinationPath
99
99
  : `${destinationPath}/`;
100
- const rsyncArgs = ['-a'];
100
+ // -a includes --specials which tries to copy sockets/FIFOs and can fail
101
+ const rsyncArgs = ['-a', '--no-specials'];
101
102
  if (!keepExisting) {
102
103
  rsyncArgs.push('--delete', '--force');
103
104
  }
@@ -118,6 +119,9 @@ export default async function rsyncCopy({ sourcePath, destinationPath, excludes
118
119
  resolve();
119
120
  }
120
121
  else {
122
+ console.error(`CodeYam Error: rsync failed with code: ${code}`, JSON.stringify({
123
+ rsyncArgs,
124
+ }, null, 2));
121
125
  reject(new Error(`rsync failed with exit code ${code}`));
122
126
  }
123
127
  });
@@ -1 +1 @@
1
- {"version":3,"file":"rsyncCopy.js","sourceRoot":"","sources":["../../../../../src/lib/fs/rsyncCopy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rsyncCopy.js","sourceRoot":"","sources":["../../../../../src/lib/fs/rsyncCopy.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { spawn, execSync } from 'child_process';
1
+ import { execSync, spawn } from 'child_process';
2
2
  import { existsSync, readdirSync, rmSync } from 'fs';
3
3
  import { join } from 'path';
4
4
 
@@ -128,7 +128,8 @@ export default async function rsyncCopy({
128
128
  ? destinationPath
129
129
  : `${destinationPath}/`;
130
130
 
131
- const rsyncArgs = ['-a'];
131
+ // -a includes --specials which tries to copy sockets/FIFOs and can fail
132
+ const rsyncArgs = ['-a', '--no-specials'];
132
133
 
133
134
  if (!keepExisting) {
134
135
  rsyncArgs.push('--delete', '--force');
@@ -156,6 +157,17 @@ export default async function rsyncCopy({
156
157
  }
157
158
  resolve();
158
159
  } else {
160
+ console.error(
161
+ `CodeYam Error: rsync failed with code: ${code}`,
162
+ JSON.stringify(
163
+ {
164
+ rsyncArgs,
165
+ },
166
+ null,
167
+ 2,
168
+ ),
169
+ );
170
+
159
171
  reject(new Error(`rsync failed with exit code ${code}`));
160
172
  }
161
173
  });
@@ -2288,6 +2288,23 @@ export default function constructMockCode(
2288
2288
  }
2289
2289
  }
2290
2290
 
2291
+ // Post-processing: When the root functionCallReturnValue is typed as "function" but the
2292
+ // return value also has nested properties (methods like .from(), .auth, etc.), it's actually
2293
+ // an object, not a function to be called. Clear returnsFunctionArgs to prevent double-wrapping
2294
+ // (adding an extra () => { return { ... } } wrapper and ["()"] data paths).
2295
+ // This handles cases like Supabase's createClient() which returns an object with methods.
2296
+ // Only applied to the root level - nested parts that are functions with methods (like
2297
+ // useSearchParams()[1] which is a setter function with .set() and .delete()) should keep
2298
+ // their returnsFunctionArgs since they genuinely ARE functions.
2299
+ if (
2300
+ returnValueParts.returnsFunctionArgs &&
2301
+ returnValueParts.returnsFunctionArgs.length === 0 &&
2302
+ returnValueParts.nested &&
2303
+ returnValueParts.nested.length > 0
2304
+ ) {
2305
+ returnValueParts.returnsFunctionArgs = undefined;
2306
+ }
2307
+
2291
2308
  const contents = constructReturnValueString(returnValueParts);
2292
2309
 
2293
2310
  if (mockNameParts.length > 1) {
@@ -2360,16 +2377,26 @@ export default function constructMockCode(
2360
2377
  const nameAssignment = isErrorSubclass
2361
2378
  ? `this.name = '${baseMockName}';`
2362
2379
  : '';
2363
- // Use the safe function name for the class definition
2364
- const className = mockNameIsCallSignature
2365
- ? derivedFunctionName
2366
- : baseMockName;
2380
+ // Use the base class name for the class definition, not the call-signature-derived name.
2381
+ // When mockName is "StatsCalculator(supabase)", baseMockName is "StatsCalculator"
2382
+ // and derivedFunctionName would be "StatsCalculator_supabase" which is wrong.
2383
+ // Classes are instantiated with `new ClassName(args)` so the name must match the original.
2384
+ const className = baseMockName;
2385
+
2386
+ // Use the already-generated contents (which has proper function wrappers for methods)
2387
+ // instead of raw scenarios().data() which would create non-callable string-keyed properties.
2388
+ // For classes with methods like calculateStats(), the contents will have:
2389
+ // { calculateStats: (...args) => scenarios().data()?.["key"]?.["calculateStats(...)"], ... }
2390
+ // which makes methods callable on the instance.
2391
+ const classContents = enhancedContents.trim().startsWith('{')
2392
+ ? enhancedContents
2393
+ : `scenarios().data()?.${quotePropertyKey(dataKey)} || {}`;
2367
2394
 
2368
2395
  return `class ${className}${isErrorSubclass ? ' extends Error' : ''} {
2369
2396
  constructor(message) {
2370
2397
  ${superCall}
2371
2398
  ${nameAssignment}
2372
- Object.assign(this, scenarios().data()?.${quotePropertyKey(dataKey)} || {});
2399
+ Object.assign(this, ${classContents});
2373
2400
  }
2374
2401
  }`;
2375
2402
  }
@@ -32,7 +32,10 @@ import type {
32
32
  } from './orchestrateCapture/taskRunner';
33
33
  import KyselyAnalysisLoader from './orchestrateCapture/KyselyAnalysisLoader';
34
34
 
35
- const MAX_BATCH_SIZE = 6;
35
+ // Temporarily set to 1 (effectively disabling batching) to work around reliability
36
+ // issues where multi-analysis batches cause cascading failures. Revisit once we
37
+ // reassess the SQS protocol and worker error handling.
38
+ const MAX_BATCH_SIZE = 1;
36
39
  const POLLING_INTERVAL = 30 * 1000; // 30 seconds
37
40
  const TASK_HEALTH_CHECK_INTERVAL = 60 * 1000; // 1 minute
38
41
  const ANALYSIS_TIMEOUT = 20 * 60 * 1000;
@@ -2020,20 +2020,25 @@ export default async function writeScenarioComponents({
2020
2020
  // that stubbing would break (e.g., Zod schemas with .superRefine())
2021
2021
  const isDataEntity = entityType === 'data' || entityType === 'type';
2022
2022
 
2023
- // Heuristic: Zod schemas are often misclassified as 'library' but should be preserved
2024
- // Detect by: name starts with Z + uppercase letter, AND has Zod method calls
2025
- const looksLikeZodSchema =
2026
- entityType === 'library' &&
2027
- /^Z[A-Z]/.test(importedExport.name) &&
2028
- importedExport.calls?.some((call: string) =>
2029
- /\.(superRefine|refine|transform|default|optional|nullable|array|object|string|number|boolean|parse|safeParse)\s*\(/.test(
2030
- call,
2031
- ),
2032
- );
2023
+ // If calls data shows the entity is only accessed via properties/methods
2024
+ // (e.g., formValidator.validate(), schema.superRefine()) and never directly
2025
+ // invoked (e.g., getInitialProps()), it's used as an object and should be
2026
+ // preserved rather than replaced with a Proxy stub.
2027
+ const onlyPropertyAccessed =
2028
+ importedExport.calls?.length > 0 &&
2029
+ !importedExport.calls.some((call: string) => {
2030
+ const afterName = call.slice(importedExport.name.length);
2031
+ return afterName.startsWith('(') || afterName.startsWith('<');
2032
+ });
2033
2033
 
2034
- // Callable entities can be safely stubbed (but not Zod schemas)
2034
+ // Callable entities can be safely stubbed. Entities that are only
2035
+ // property-accessed should be preserved (their methods need to work).
2036
+ // 'other' entities are unknown types — safer to preserve than stub.
2035
2037
  const isCallable =
2036
- !isDataEntity && !looksLikeZodSchema && entityType !== undefined;
2038
+ !isDataEntity &&
2039
+ !onlyPropertyAccessed &&
2040
+ entityType !== undefined &&
2041
+ entityType !== 'other';
2037
2042
 
2038
2043
  // Determine what action to take
2039
2044
  const shouldStripAndReplace = hasMock;
@@ -3021,6 +3026,51 @@ ${exportKeyword}const ${functionName} = new Proxy(() => scenarios().data()?.["${
3021
3026
  }
3022
3027
  }
3023
3028
 
3029
+ // For route components (page.tsx, layout.tsx), the component IS the Next.js page.
3030
+ // There's no wrapper page to inject argumentsData as props (unlike non-route components
3031
+ // which get a scenarioComponent wrapper). We need to wrap the default export so that
3032
+ // the scenario's argumentsData is passed as props to the component.
3033
+ if (
3034
+ isFrameworkRoute(file, entity, framework, file === rootFile) &&
3035
+ rootAnalysis.metadata?.scenariosDataStructure?.arguments?.length > 0
3036
+ ) {
3037
+ const positionalArguments =
3038
+ rootAnalysis.metadata.scenariosDataStructure.arguments;
3039
+ const hasNamedArgs =
3040
+ positionalArguments.length === 1 &&
3041
+ typeof positionalArguments[0] === 'object';
3042
+
3043
+ if (hasNamedArgs) {
3044
+ // Match: export default function Name(
3045
+ // Also: export default async function Name(
3046
+ const defaultExportMatch = fileContent.match(
3047
+ /export\s+default\s+(async\s+)?function\s+(\w+)\s*\(/,
3048
+ );
3049
+
3050
+ if (defaultExportMatch) {
3051
+ const funcName = defaultExportMatch[2];
3052
+
3053
+ // Remove "export default" from the original function declaration
3054
+ fileContent = fileContent.replace(
3055
+ /export\s+default\s+(async\s+)?function\s+(\w+)\s*\(/,
3056
+ '$1function $2(',
3057
+ );
3058
+
3059
+ // Ensure scenarios import is present
3060
+ const mockDataPath = `${relativeMocksDir}/MockData_${safeFileName(scenario.name)}`;
3061
+ if (fileContent.indexOf('import { scenarios } from') === -1) {
3062
+ fileContent = `import { scenarios } from "${mockDataPath}";\n\n${fileContent}`;
3063
+ }
3064
+
3065
+ // Add wrapper default export that injects argumentsData as props
3066
+ fileContent += `\n\nexport default function _CYRouteWrapper(props: any) {
3067
+ const _cyArgs = scenarios().data()?.['arguments']?.[0] ?? {};
3068
+ return <${funcName} {...props} {..._cyArgs} />;
3069
+ }\n`;
3070
+ }
3071
+ }
3072
+ }
3073
+
3024
3074
  // Use the directive that was extracted at the beginning of processing
3025
3075
  // This ensures it stays at the very top even after imports are prepended
3026
3076
  // NOTE: We only preserve "use client" directives, NOT "use server" directives.
@@ -1917,6 +1917,20 @@ options) {
1917
1917
  returnValueSection = relevantPart;
1918
1918
  }
1919
1919
  }
1920
+ // Post-processing: When the root functionCallReturnValue is typed as "function" but the
1921
+ // return value also has nested properties (methods like .from(), .auth, etc.), it's actually
1922
+ // an object, not a function to be called. Clear returnsFunctionArgs to prevent double-wrapping
1923
+ // (adding an extra () => { return { ... } } wrapper and ["()"] data paths).
1924
+ // This handles cases like Supabase's createClient() which returns an object with methods.
1925
+ // Only applied to the root level - nested parts that are functions with methods (like
1926
+ // useSearchParams()[1] which is a setter function with .set() and .delete()) should keep
1927
+ // their returnsFunctionArgs since they genuinely ARE functions.
1928
+ if (returnValueParts.returnsFunctionArgs &&
1929
+ returnValueParts.returnsFunctionArgs.length === 0 &&
1930
+ returnValueParts.nested &&
1931
+ returnValueParts.nested.length > 0) {
1932
+ returnValueParts.returnsFunctionArgs = undefined;
1933
+ }
1920
1934
  const contents = constructReturnValueString(returnValueParts);
1921
1935
  if (mockNameParts.length > 1) {
1922
1936
  const originalLib = `${mockNameParts[0]}__cyOriginal`;
@@ -1978,15 +1992,24 @@ options) {
1978
1992
  const nameAssignment = isErrorSubclass
1979
1993
  ? `this.name = '${baseMockName}';`
1980
1994
  : '';
1981
- // Use the safe function name for the class definition
1982
- const className = mockNameIsCallSignature
1983
- ? derivedFunctionName
1984
- : baseMockName;
1995
+ // Use the base class name for the class definition, not the call-signature-derived name.
1996
+ // When mockName is "StatsCalculator(supabase)", baseMockName is "StatsCalculator"
1997
+ // and derivedFunctionName would be "StatsCalculator_supabase" which is wrong.
1998
+ // Classes are instantiated with `new ClassName(args)` so the name must match the original.
1999
+ const className = baseMockName;
2000
+ // Use the already-generated contents (which has proper function wrappers for methods)
2001
+ // instead of raw scenarios().data() which would create non-callable string-keyed properties.
2002
+ // For classes with methods like calculateStats(), the contents will have:
2003
+ // { calculateStats: (...args) => scenarios().data()?.["key"]?.["calculateStats(...)"], ... }
2004
+ // which makes methods callable on the instance.
2005
+ const classContents = enhancedContents.trim().startsWith('{')
2006
+ ? enhancedContents
2007
+ : `scenarios().data()?.${quotePropertyKey(dataKey)} || {}`;
1985
2008
  return `class ${className}${isErrorSubclass ? ' extends Error' : ''} {
1986
2009
  constructor(message) {
1987
2010
  ${superCall}
1988
2011
  ${nameAssignment}
1989
- Object.assign(this, scenarios().data()?.${quotePropertyKey(dataKey)} || {});
2012
+ Object.assign(this, ${classContents});
1990
2013
  }
1991
2014
  }`;
1992
2015
  }