@codeyam/codeyam-cli 0.1.22 → 0.1.24

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 (102) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/packages/ai/src/lib/astScopes/methodSemantics.ts +135 -0
  4. package/analyzer-template/packages/ai/src/lib/astScopes/nodeToSource.ts +19 -0
  5. package/analyzer-template/packages/ai/src/lib/astScopes/paths.ts +11 -4
  6. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +5 -1
  7. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +1632 -1554
  8. package/analyzer-template/packages/database/src/lib/loadAnalysis.ts +7 -1
  9. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.d.ts.map +1 -1
  10. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js +7 -1
  11. package/analyzer-template/packages/github/dist/database/src/lib/loadAnalysis.js.map +1 -1
  12. package/analyzer-template/project/runMultiScenarioServer.ts +26 -3
  13. package/background/src/lib/virtualized/project/runMultiScenarioServer.js +23 -3
  14. package/background/src/lib/virtualized/project/runMultiScenarioServer.js.map +1 -1
  15. package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js +47 -0
  16. package/codeyam-cli/src/commands/__tests__/editor.analyzeImportsArgs.test.js.map +1 -0
  17. package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js +17 -9
  18. package/codeyam-cli/src/commands/__tests__/editor.auditNoAutoAnalysis.test.js.map +1 -1
  19. package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js +30 -0
  20. package/codeyam-cli/src/commands/__tests__/editor.designSystem.test.js.map +1 -0
  21. package/codeyam-cli/src/commands/editor.js +207 -41
  22. package/codeyam-cli/src/commands/editor.js.map +1 -1
  23. package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js +23 -0
  24. package/codeyam-cli/src/commands/editorAnalyzeImportsArgs.js.map +1 -0
  25. package/codeyam-cli/src/data/designSystems.js +27 -0
  26. package/codeyam-cli/src/data/designSystems.js.map +1 -0
  27. package/codeyam-cli/src/utils/__tests__/editorApi.test.js +44 -0
  28. package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -1
  29. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +103 -1
  30. package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -1
  31. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +140 -1
  32. package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -1
  33. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +50 -1
  34. package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -1
  35. package/codeyam-cli/src/utils/editorApi.js +16 -0
  36. package/codeyam-cli/src/utils/editorApi.js.map +1 -1
  37. package/codeyam-cli/src/utils/editorAudit.js +38 -2
  38. package/codeyam-cli/src/utils/editorAudit.js.map +1 -1
  39. package/codeyam-cli/src/utils/editorScenarios.js +60 -0
  40. package/codeyam-cli/src/utils/editorScenarios.js.map +1 -1
  41. package/codeyam-cli/src/utils/editorSeedAdapter.js +42 -2
  42. package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -1
  43. package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js +159 -0
  44. package/codeyam-cli/src/utils/queue/__tests__/job.interactiveStart.test.js.map +1 -0
  45. package/codeyam-cli/src/utils/queue/job.js +9 -1
  46. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  47. package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js +98 -0
  48. package/codeyam-cli/src/webserver/__tests__/api.interactive-switch-scenario.test.js.map +1 -0
  49. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +30 -11
  50. package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -1
  51. package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.js +34 -0
  52. package/codeyam-cli/src/webserver/app/routes/api.interactive-switch-scenario.js.map +1 -0
  53. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-CKeQT5Ty.js → InteractivePreview-DtYTSPL2.js} +1 -1
  54. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DUMfcNVK.js → ScenarioViewer-CefgqbCr.js} +1 -1
  55. package/codeyam-cli/src/webserver/build/client/assets/Spinner-Bc8BG-Lw.js +34 -0
  56. package/codeyam-cli/src/webserver/build/client/assets/{_index-BAWd-Xjf.js → _index-C1YkzTAV.js} +1 -1
  57. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BOARiB-g.js → activity.(_tab)-yH46LLUz.js} +1 -1
  58. package/codeyam-cli/src/webserver/build/client/assets/api.editor-verify-routes-l0sNRNKZ.js +1 -0
  59. package/codeyam-cli/src/webserver/build/client/assets/api.interactive-switch-scenario-l0sNRNKZ.js +1 -0
  60. package/codeyam-cli/src/webserver/build/client/assets/{dev.empty-C8y4mmyv.js → dev.empty-CRepiabR.js} +1 -1
  61. package/codeyam-cli/src/webserver/build/client/assets/{editor.entity.(_sha)-aIHKLB-m.js → editor.entity.(_sha)-oBrbke_R.js} +19 -19
  62. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-ByHz6rAQ.js → entity._sha._-DYJRGiDI.js} +1 -1
  63. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.dev-CmLO432x.js → entity._sha.scenarios._scenarioId.dev-wdiwx5-Z.js} +1 -1
  64. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-Bz9sCUF_.js → entity._sha.scenarios._scenarioId.fullscreen-BrkN-40Y.js} +1 -1
  65. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-DQM8E7L4.js → entity._sha_.create-scenario-DxfhekTZ.js} +1 -1
  66. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CAoXLsQr.js → entity._sha_.edit._scenarioId-CRXJWmpB.js} +1 -1
  67. package/codeyam-cli/src/webserver/build/client/assets/manifest-694b698a.js +1 -0
  68. package/codeyam-cli/src/webserver/build/client/assets/{root-D2_tktnk.js → root-DXjFYOxD.js} +1 -1
  69. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-D9QZKaLJ.js +2 -0
  70. package/codeyam-cli/src/webserver/build/server/assets/{analysisRunner-DjF-soOH.js → analysisRunner-zEYtiv0T.js} +1 -1
  71. package/codeyam-cli/src/webserver/build/server/assets/{index-nAvHGWbz.js → index-CcHPEbhi.js} +1 -1
  72. package/codeyam-cli/src/webserver/build/server/assets/{init-XhpIt-OT.js → init-D68IyWbU.js} +1 -1
  73. package/codeyam-cli/src/webserver/build/server/assets/{server-build-DVwiibFu.js → server-build-Cxzo0Zp2.js} +192 -148
  74. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  75. package/codeyam-cli/src/webserver/build-info.json +5 -5
  76. package/codeyam-cli/src/webserver/editorProxy.js +55 -3
  77. package/codeyam-cli/src/webserver/editorProxy.js.map +1 -1
  78. package/codeyam-cli/src/webserver/terminalServer.js +1 -2
  79. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
  80. package/codeyam-cli/templates/codeyam-editor-reference.md +8 -6
  81. package/codeyam-cli/templates/design-systems/clean-dashboard-design-system.md +255 -0
  82. package/codeyam-cli/templates/design-systems/editorial-design-system.md +267 -0
  83. package/codeyam-cli/templates/design-systems/mono-brutalist-design-system.md +256 -0
  84. package/codeyam-cli/templates/design-systems/neo-brutalist-design-system.md +294 -0
  85. package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +47 -34
  86. package/codeyam-cli/templates/seed-adapters/supabase.ts +14 -5
  87. package/package.json +1 -1
  88. package/packages/ai/src/lib/astScopes/methodSemantics.js +99 -0
  89. package/packages/ai/src/lib/astScopes/methodSemantics.js.map +1 -1
  90. package/packages/ai/src/lib/astScopes/nodeToSource.js +16 -0
  91. package/packages/ai/src/lib/astScopes/nodeToSource.js.map +1 -1
  92. package/packages/ai/src/lib/astScopes/paths.js +12 -3
  93. package/packages/ai/src/lib/astScopes/paths.js.map +1 -1
  94. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +5 -1
  95. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  96. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +1330 -1270
  97. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  98. package/packages/database/src/lib/loadAnalysis.js +7 -1
  99. package/packages/database/src/lib/loadAnalysis.js.map +1 -1
  100. package/codeyam-cli/src/webserver/build/client/assets/Spinner-D0LgAaSa.js +0 -34
  101. package/codeyam-cli/src/webserver/build/client/assets/manifest-bcbb3d49.js +0 -1
  102. package/codeyam-cli/src/webserver/build/client/assets/useLastLogLine-BNd5hYuW.js +0 -2
@@ -1,10 +1,10 @@
1
1
  {
2
- "buildTimestamp": "2026-03-24T14:27:03.288Z",
3
- "buildTime": 1774362423288,
4
- "gitCommit": "af072353c0de778f2916c445dec0ca98b1ee7180",
2
+ "buildTimestamp": "2026-03-26T12:55:43.726Z",
3
+ "buildTime": 1774529743726,
4
+ "gitCommit": "2c142d4185f95cc4ef22693e7f0cad3a09f021d4",
5
5
  "nodeVersion": "v20.20.1",
6
- "contentHash": "2352c3294573a7af51e18b678f86299d7a1fe24cbf8427cdfcd4472c2f613df6",
7
- "buildNumber": 1216,
8
- "semanticVersion": "0.1.1216",
9
- "version": "0.1.1216 (2026-03-24T14:27+2352c32)"
6
+ "contentHash": "c92230c027acb71cab56d2a696876a6a52206bfadd59fbc31a512b00a7ee8826",
7
+ "buildNumber": 1241,
8
+ "semanticVersion": "0.1.1241",
9
+ "version": "0.1.1241 (2026-03-26T12:55+c92230c)"
10
10
  }
@@ -1,7 +1,7 @@
1
1
 
2
- [3/24/2026, 2:27:03 PM] > codeyam-combo@1.0.0 mergeDependencies
3
- [3/24/2026, 2:27:03 PM] > node ./scripts/mergePackageJsonFiles.cjs
2
+ [3/26/2026, 12:55:43 PM] > codeyam-combo@1.0.0 mergeDependencies
3
+ [3/26/2026, 12:55:43 PM] > node ./scripts/mergePackageJsonFiles.cjs
4
4
 
5
5
 
6
- [3/24/2026, 2:27:03 PM] Merged dependencies into root package.json
6
+ [3/26/2026, 12:55:43 PM] Merged dependencies into root package.json
7
7
 
@@ -895,6 +895,132 @@ export class UseStateSemantics implements MethodSemantics {
895
895
  }
896
896
  }
897
897
 
898
+ // ─── Set/Map method semantics ──────────────────────────────────────────
899
+ //
900
+ // Set/Map membership operations (.has, .delete, .add, .get, .set, .clear)
901
+ // don't create data flow equivalencies — they're membership checks or
902
+ // mutations, not transformations that propagate schema structure.
903
+ // Without these semantics, code like `filterRatings.has(articleId)` creates
904
+ // spurious equivalencies (332 entries in the Margo LibraryPage case).
905
+
906
+ /**
907
+ * Set.has() / Map.has() — membership check, returns boolean
908
+ */
909
+ export class CollectionHasSemantics implements MethodSemantics {
910
+ getReturnType(): string {
911
+ return 'boolean';
912
+ }
913
+
914
+ addEquivalences(
915
+ methodCallPath: StructuredPath,
916
+ _sourcePath: StructuredPath,
917
+ context: AnalysisContext,
918
+ ): void {
919
+ context.addType(methodCallPath, 'boolean');
920
+ }
921
+
922
+ isComplete(): boolean {
923
+ return true;
924
+ }
925
+ }
926
+
927
+ /**
928
+ * Set.delete() / Map.delete() — removal, returns boolean
929
+ */
930
+ export class CollectionDeleteSemantics implements MethodSemantics {
931
+ getReturnType(): string {
932
+ return 'boolean';
933
+ }
934
+
935
+ addEquivalences(
936
+ methodCallPath: StructuredPath,
937
+ _sourcePath: StructuredPath,
938
+ context: AnalysisContext,
939
+ ): void {
940
+ context.addType(methodCallPath, 'boolean');
941
+ }
942
+
943
+ isComplete(): boolean {
944
+ return true;
945
+ }
946
+ }
947
+
948
+ /**
949
+ * Set.add() — adds an element, returns the Set (for chaining)
950
+ */
951
+ export class SetAddSemantics implements MethodSemantics {
952
+ getReturnType(): string {
953
+ return 'object'; // Returns the Set itself
954
+ }
955
+
956
+ addEquivalences(
957
+ _methodCallPath: StructuredPath,
958
+ _sourcePath: StructuredPath,
959
+ _context: AnalysisContext,
960
+ ): void {
961
+ // No equivalencies — add() doesn't create data flow
962
+ }
963
+
964
+ isComplete(): boolean {
965
+ return true;
966
+ }
967
+ }
968
+
969
+ /**
970
+ * Set.clear() / Map.clear() — removes all elements, returns void
971
+ */
972
+ export class CollectionClearSemantics implements MethodSemantics {
973
+ getReturnType(): string {
974
+ return 'void';
975
+ }
976
+
977
+ addEquivalences(): void {
978
+ // No equivalencies
979
+ }
980
+
981
+ isComplete(): boolean {
982
+ return true;
983
+ }
984
+ }
985
+
986
+ /**
987
+ * Map.get() — retrieves a value by key, returns unknown (value type)
988
+ */
989
+ export class MapGetSemantics implements MethodSemantics {
990
+ getReturnType(): string {
991
+ return 'unknown';
992
+ }
993
+
994
+ addEquivalences(
995
+ _methodCallPath: StructuredPath,
996
+ _sourcePath: StructuredPath,
997
+ _context: AnalysisContext,
998
+ ): void {
999
+ // No equivalencies — the return value type depends on the map contents
1000
+ }
1001
+
1002
+ isComplete(): boolean {
1003
+ return true;
1004
+ }
1005
+ }
1006
+
1007
+ /**
1008
+ * Map.set() — sets a key-value pair, returns the Map (for chaining)
1009
+ */
1010
+ export class MapSetSemantics implements MethodSemantics {
1011
+ getReturnType(): string {
1012
+ return 'object'; // Returns the Map itself
1013
+ }
1014
+
1015
+ addEquivalences(): void {
1016
+ // No equivalencies
1017
+ }
1018
+
1019
+ isComplete(): boolean {
1020
+ return true;
1021
+ }
1022
+ }
1023
+
898
1024
  /**
899
1025
  * Create and populate the registry with method semantics
900
1026
  */
@@ -930,6 +1056,15 @@ export function createMethodRegistry(): MethodSemanticsRegistry {
930
1056
  registry.register('useState', new UseStateSemantics(), 'React');
931
1057
  registry.register('useMemo', new UseMemoSemantics(), 'React');
932
1058
 
1059
+ // Register Set/Map collection methods.
1060
+ // Only .has() and .delete() are safe to register by method name — they always
1061
+ // return boolean regardless of the collection type (Set, Map, WeakSet, WeakMap,
1062
+ // FormData, URLSearchParams, etc.).
1063
+ // .add(), .clear(), .get(), .set() are too ambiguous across different types
1064
+ // and can't be registered until the lookup code supports class-aware resolution.
1065
+ registry.register('has', new CollectionHasSemantics());
1066
+ registry.register('delete', new CollectionDeleteSemantics());
1067
+
933
1068
  return registry;
934
1069
  }
935
1070
 
@@ -54,6 +54,25 @@ export function nodeToSource(
54
54
  // return serializeBindingElement(node, sourceFile, options);
55
55
  // }
56
56
 
57
+ // Object/array/function literals should be marked as literal paths.
58
+ // This prevents them from creating sourceEquivalencies when used as
59
+ // function call arguments (e.g., setUndoEntry({ label: '...', undo: ... })).
60
+ // Without this, the full source text of the literal (300-500 chars for complex
61
+ // objects) gets embedded in path strings, creating expensive-to-parse
62
+ // equivalency entries that don't contribute useful schema information.
63
+ if (ts.isObjectLiteralExpression(node)) {
64
+ return StructuredPath.createLiteralPath(node.getText(sourceFile), 'object');
65
+ }
66
+ if (ts.isArrayLiteralExpression(node)) {
67
+ return StructuredPath.createLiteralPath(node.getText(sourceFile), 'array');
68
+ }
69
+ if (ts.isArrowFunction(node) || ts.isFunctionExpression(node)) {
70
+ return StructuredPath.createLiteralPath(
71
+ node.getText(sourceFile),
72
+ 'function',
73
+ );
74
+ }
75
+
57
76
  // Fallback for unsupported node types
58
77
  return StructuredPath.fromBase(node.getText(sourceFile));
59
78
  }
@@ -406,11 +406,18 @@ export class StructuredPath {
406
406
  } else {
407
407
  // Convert each argument to its string representation
408
408
  const argsStr = funcSegment.args
409
- .map((arg) =>
410
- arg.toStringWithSegments(arg.base, arg.segments, {
409
+ .map((arg) => {
410
+ // For literal arguments (object/array/function literals),
411
+ // use a compact placeholder instead of the full source text.
412
+ // This prevents 300-500 char inline objects from being embedded
413
+ // in call signature paths, which creates expensive equivalencies.
414
+ if (arg.isLiteral()) {
415
+ return `{...}`;
416
+ }
417
+ return arg.toStringWithSegments(arg.base, arg.segments, {
411
418
  withReturnValues: doRenderNestedFunctionCallReturnValue,
412
- }),
413
- )
419
+ });
420
+ })
414
421
  .join(', ');
415
422
  result += `(${argsStr})`;
416
423
  }
@@ -538,9 +538,10 @@ export default function generateDataStructure({
538
538
  dependencySchemas: isolatedDataStructure?.dependencySchemas || {},
539
539
  });
540
540
 
541
+ const mergeTimedOut = !!(mergedDataStructure as any).timedOut;
541
542
  awsLogDebugLevel(
542
543
  1,
543
- `mergeInDependentDataStructure complete for ${entity.name}: ` +
544
+ `mergeInDependentDataStructure ${mergeTimedOut ? 'PARTIAL' : 'complete'} for ${entity.name}: ` +
544
545
  `${Object.keys(mergedDataStructure.signatureSchema).length} sig, ` +
545
546
  `${Object.keys(mergedDataStructure.returnValueSchema).length} ret, ${Date.now() - mergeStart}ms`,
546
547
  );
@@ -921,6 +922,9 @@ export default function generateDataStructure({
921
922
 
922
923
  analysis.metadata ||= {};
923
924
  analysis.metadata.mergedDataStructure = mergedDataStructure;
925
+ if (mergeTimedOut) {
926
+ (analysis.metadata as any).mergeTimedOut = true;
927
+ }
924
928
 
925
929
  const checkGenDeadline = (phase: string) => {
926
930
  if (Date.now() > genDeadline) {