@codeyam/codeyam-cli 0.1.25 → 0.1.26

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 (30) hide show
  1. package/analyzer-template/.build-info.json +6 -6
  2. package/analyzer-template/log.txt +3 -3
  3. package/codeyam-cli/src/commands/editor.js +31 -8
  4. package/codeyam-cli/src/commands/editor.js.map +1 -1
  5. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +10 -0
  6. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -1
  7. package/codeyam-cli/src/utils/__tests__/testRunner.test.js +0 -1
  8. package/codeyam-cli/src/utils/__tests__/testRunner.test.js.map +1 -1
  9. package/codeyam-cli/src/utils/editorAudit.js +22 -5
  10. package/codeyam-cli/src/utils/editorAudit.js.map +1 -1
  11. package/codeyam-cli/src/utils/testRunner.js +1 -7
  12. package/codeyam-cli/src/utils/testRunner.js.map +1 -1
  13. package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-CRxPi2BB.js +96 -0
  14. package/codeyam-cli/src/webserver/build/client/assets/globals-BsGHu8WX.css +1 -0
  15. package/codeyam-cli/src/webserver/build/client/assets/{manifest-7e749098.js → manifest-9032538f.js} +1 -1
  16. package/codeyam-cli/src/webserver/build/client/assets/{root-DGtly3mb.js → root-dKFRTYcy.js} +5 -5
  17. package/codeyam-cli/src/webserver/build/server/assets/{analysisRunner-CO8xocj3.js → analysisRunner-B6HnVI5u.js} +1 -1
  18. package/codeyam-cli/src/webserver/build/server/assets/{index-QKPqlUgg.js → index-rV_xLS1u.js} +1 -1
  19. package/codeyam-cli/src/webserver/build/server/assets/{init-DlspChIk.js → init-BdWDvetv.js} +1 -1
  20. package/codeyam-cli/src/webserver/build/server/assets/{server-build-ChzicV-B.js → server-build-B_jdq5dT.js} +120 -120
  21. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  22. package/codeyam-cli/src/webserver/build-info.json +5 -5
  23. package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +4 -5
  24. package/codeyam-cli/templates/expo-react-native/app/index.tsx +36 -0
  25. package/package.json +1 -1
  26. package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-DLM1-ZMt.js +0 -96
  27. package/codeyam-cli/src/webserver/build/client/assets/globals-9EkC9j9I.css +0 -1
  28. package/codeyam-cli/templates/expo-react-native/app/(tabs)/_layout.tsx +0 -33
  29. package/codeyam-cli/templates/expo-react-native/app/(tabs)/index.tsx +0 -12
  30. package/codeyam-cli/templates/expo-react-native/app/(tabs)/settings.tsx +0 -12
@@ -1,10 +1,10 @@
1
1
  {
2
- "buildTimestamp": "2026-03-27T13:51:55.725Z",
3
- "buildTime": 1774619515725,
4
- "gitCommit": "cefcc7c0aa462f7267e8912e66de352da511a931",
2
+ "buildTimestamp": "2026-03-27T20:00:52.922Z",
3
+ "buildTime": 1774641652922,
4
+ "gitCommit": "2a3a412834b1cc8d46883263d3695bd29b8157dc",
5
5
  "nodeVersion": "v20.20.1",
6
6
  "contentHash": "c92230c027acb71cab56d2a696876a6a52206bfadd59fbc31a512b00a7ee8826",
7
- "buildNumber": 1256,
8
- "semanticVersion": "0.1.1256",
9
- "version": "0.1.1256 (2026-03-27T13:51+c92230c)"
7
+ "buildNumber": 1262,
8
+ "semanticVersion": "0.1.1262",
9
+ "version": "0.1.1262 (2026-03-27T20:00+c92230c)"
10
10
  }
@@ -1,7 +1,7 @@
1
1
 
2
- [3/27/2026, 1:51:55 PM] > codeyam-combo@1.0.0 mergeDependencies
3
- [3/27/2026, 1:51:55 PM] > node ./scripts/mergePackageJsonFiles.cjs
2
+ [3/27/2026, 8:00:52 PM] > codeyam-combo@1.0.0 mergeDependencies
3
+ [3/27/2026, 8:00:52 PM] > node ./scripts/mergePackageJsonFiles.cjs
4
4
 
5
5
 
6
- [3/27/2026, 1:51:55 PM] Merged dependencies into root package.json
6
+ [3/27/2026, 8:00:52 PM] Merged dependencies into root package.json
7
7
 
@@ -305,6 +305,10 @@ function printAppScenarioInstructions(pageName, route) {
305
305
  console.log(chalk.dim(' Example: "Page - Full Data", "Page - Empty State", "Page - Error State"'));
306
306
  }
307
307
  console.log();
308
+ checkbox('Ensure every page file used in app scenarios has a glossary entry with its filePath:');
309
+ console.log(chalk.dim(' The register command validates pageFilePath against the glossary — add missing pages now.'));
310
+ console.log(chalk.dim(' Example: {"name":"CounterScreen","filePath":"app/(tabs)/index.tsx","type":"page","description":"Main counter page"}'));
311
+ console.log();
308
312
  checkbox('Register each scenario with type "application", the real page URL, and pageFilePath:');
309
313
  console.log(chalk.dim(` codeyam editor register '{"name":"${pageName || 'Page'} - Full Data",`));
310
314
  console.log(chalk.dim(` "type":"application","url":"${route || '/'}","pageFilePath":"src/path/to/Page.tsx",...}'`));
@@ -402,9 +406,15 @@ function printExtractionPlanInstructions() {
402
406
  function printComponentCaptureInstructions(root) {
403
407
  const ctx = root ? getTechStackContext(root) : undefined;
404
408
  const isExpo = ctx?.isExpo ?? false;
405
- checkbox('Create isolation route dirs: `codeyam editor isolate ComponentA ComponentB ...`');
406
- console.log(chalk.dim(` This creates app/isolated-components/layout.tsx (with production ${isExpo ? '__DEV__' : 'notFound()'} guard) and`));
407
- console.log(chalk.dim(' a directory per component. List ALL components that need isolation routes.'));
409
+ checkbox('Set up isolation routes: `codeyam editor isolate ComponentA ComponentB ...`');
410
+ if (isExpo) {
411
+ console.log(chalk.dim(' This creates app/isolated-components/_layout.tsx (with __DEV__ guard).'));
412
+ console.log(chalk.dim(' You then create a flat .tsx file per component (NOT subdirectories — Expo Router uses flat files).'));
413
+ }
414
+ else {
415
+ console.log(chalk.dim(` This creates app/isolated-components/layout.tsx (with notFound() guard) and`));
416
+ console.log(chalk.dim(' a directory per component. List ALL components that need isolation routes.'));
417
+ }
408
418
  checkbox('For each visual component:');
409
419
  console.log(chalk.dim(' 1. Read the source AND find where it is used in the app to understand:'));
410
420
  console.log(chalk.dim(' — Props/interface'));
@@ -805,8 +815,8 @@ function printSetup(root) {
805
815
  console.log(chalk.bold('Tech Stack Selection:'));
806
816
  console.log(chalk.dim(' Based on the selected formats, present ONLY the matching tech stacks.'));
807
817
  console.log(chalk.dim(' A stack matches if ANY of the user\'s selected formats appears in its "Supports" list.'));
808
- console.log(chalk.dim(' Show ALL matching stacks even if there is only one. Mark the recommended option.'));
809
- console.log(chalk.dim(' Use AskUserQuestion to let the user pick one.'));
818
+ console.log(chalk.dim(' If only ONE stack matches, confirm it directly (e.g. "Expo + React Native is the only stack for mobile apps — using that.").'));
819
+ console.log(chalk.dim(' If MULTIPLE stacks match, use AskUserQuestion to let the user pick one.'));
810
820
  console.log();
811
821
  console.log(chalk.bold(' Available Tech Stacks:'));
812
822
  for (const stack of TECH_STACKS) {
@@ -1409,6 +1419,7 @@ function printStep7(root, feature) {
1409
1419
  console.log(chalk.dim(' Cover: typical inputs, edge cases, empty/null inputs, error conditions'));
1410
1420
  console.log(chalk.dim(' Aim for 3-8 test cases per function depending on complexity'));
1411
1421
  console.log(chalk.dim(' Hooks count as functions — useDrinks, useAuth, etc. all need test files'));
1422
+ console.log(chalk.dim(' Wrap all tests in a describe("FunctionName", ...) block — the audit matches on this name'));
1412
1423
  if (ctx.isExpo) {
1413
1424
  checkbox('Place test files next to source but OUTSIDE `app/` (Expo Router treats all files in app/ as routes): `lib/storage.ts` → `lib/storage.test.ts`, `app/hooks/useCounter.ts` → `__tests__/hooks/useCounter.test.ts`');
1414
1425
  }
@@ -2884,8 +2895,13 @@ function handleIsolate(componentNames) {
2884
2895
  process.exit(1);
2885
2896
  }
2886
2897
  const isolateDir = path.join(root, 'app', 'isolated-components');
2887
- // Create layout.tsx with production guard if missing
2898
+ // Create the framework-appropriate layout guard if missing.
2899
+ // Clean up wrong-framework layout from a previous CLI version.
2888
2900
  const layoutPath = path.join(isolateDir, ctx.isExpo ? '_layout.tsx' : 'layout.tsx');
2901
+ const wrongLayoutPath = path.join(isolateDir, ctx.isExpo ? 'layout.tsx' : '_layout.tsx');
2902
+ if (fs.existsSync(wrongLayoutPath)) {
2903
+ fs.unlinkSync(wrongLayoutPath);
2904
+ }
2889
2905
  if (!fs.existsSync(layoutPath)) {
2890
2906
  fs.mkdirSync(isolateDir, { recursive: true });
2891
2907
  if (ctx.isExpo) {
@@ -2938,7 +2954,13 @@ function handleIsolate(componentNames) {
2938
2954
  }
2939
2955
  }
2940
2956
  if (created.length > 0) {
2941
- console.log(chalk.green(`Created ${created.length} isolation route(s): ${created.join(', ')}`));
2957
+ if (ctx.isExpo) {
2958
+ console.log(chalk.green(`Ready for ${created.length} isolation route(s): ${created.map((n) => `app/isolated-components/${n}.tsx`).join(', ')}`));
2959
+ console.log(chalk.dim(' Create each file with useLocalSearchParams, a scenarios map, and nativeID="codeyam-capture"'));
2960
+ }
2961
+ else {
2962
+ console.log(chalk.green(`Created ${created.length} isolation route dir(s): ${created.join(', ')}`));
2963
+ }
2942
2964
  }
2943
2965
  if (existed.length > 0) {
2944
2966
  console.log(chalk.dim(`Already existed: ${existed.join(', ')}`));
@@ -3954,7 +3976,8 @@ async function handleAudit(options) {
3954
3976
  if (f.errorMessage) {
3955
3977
  detail += `\n ${chalk.red(f.errorMessage)}`;
3956
3978
  detail += `\n ${chalk.yellow('Note: This is NOT a test failure — the test runner itself could not execute.')}`;
3957
- detail += `\n ${chalk.yellow('Try running the test manually: npx vitest run ' + f.testFile)}`;
3979
+ const ctx = getTechStackContext(process.cwd());
3980
+ detail += `\n ${chalk.yellow('Try running the test manually: ' + ctx.testRunCommand + ' ' + f.testFile)}`;
3958
3981
  }
3959
3982
  break;
3960
3983
  case 'failing':