@vedangiitb/qwintly-core 1.2.0 → 1.3.0

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 (143) hide show
  1. package/dist/ai/prompts/codegen.prompt.d.ts +9 -0
  2. package/dist/ai/prompts/codegen.prompt.d.ts.map +1 -0
  3. package/dist/ai/prompts/codegen.prompt.js +53 -0
  4. package/dist/ai/prompts/codegen.prompt.js.map +1 -0
  5. package/dist/ai/prompts/examples/codegen.examples.d.ts +2 -0
  6. package/dist/ai/prompts/examples/codegen.examples.d.ts.map +1 -0
  7. package/dist/ai/prompts/examples/codegen.examples.js +81 -0
  8. package/dist/ai/prompts/examples/codegen.examples.js.map +1 -0
  9. package/dist/ai/prompts/examples/planner.examples.d.ts +2 -0
  10. package/dist/ai/prompts/examples/planner.examples.d.ts.map +1 -0
  11. package/dist/ai/prompts/examples/planner.examples.js +3 -0
  12. package/dist/ai/prompts/examples/planner.examples.js.map +1 -0
  13. package/dist/ai/prompts/helpers/promptParts.helper.d.ts +8 -0
  14. package/dist/ai/prompts/helpers/promptParts.helper.d.ts.map +1 -0
  15. package/dist/ai/prompts/helpers/promptParts.helper.js +37 -0
  16. package/dist/ai/prompts/helpers/promptParts.helper.js.map +1 -0
  17. package/dist/ai/prompts/planner.prompt.d.ts +10 -0
  18. package/dist/ai/prompts/planner.prompt.d.ts.map +1 -0
  19. package/dist/ai/prompts/planner.prompt.js +49 -0
  20. package/dist/ai/prompts/planner.prompt.js.map +1 -0
  21. package/dist/ai/prompts/prompts.d.ts +4 -0
  22. package/dist/ai/prompts/prompts.d.ts.map +1 -0
  23. package/dist/ai/prompts/prompts.js +4 -0
  24. package/dist/ai/prompts/prompts.js.map +1 -0
  25. package/dist/ai/prompts/validator.prompt.d.ts +15 -0
  26. package/dist/ai/prompts/validator.prompt.d.ts.map +1 -0
  27. package/dist/ai/prompts/validator.prompt.js +55 -0
  28. package/dist/ai/prompts/validator.prompt.js.map +1 -0
  29. package/dist/ai/tools/helpers/elementid.helpers.d.ts +4 -0
  30. package/dist/ai/tools/helpers/elementid.helpers.d.ts.map +1 -0
  31. package/dist/ai/tools/helpers/elementid.helpers.js +19 -0
  32. package/dist/ai/tools/helpers/elementid.helpers.js.map +1 -0
  33. package/dist/ai/tools/helpers/getImage.helper.d.ts +2 -0
  34. package/dist/ai/tools/helpers/getImage.helper.d.ts.map +1 -0
  35. package/dist/ai/tools/helpers/getImage.helper.js +2 -0
  36. package/dist/ai/tools/helpers/getImage.helper.js.map +1 -0
  37. package/dist/ai/tools/helpers/pageConfigJson.helpers.d.ts +15 -0
  38. package/dist/ai/tools/helpers/pageConfigJson.helpers.d.ts.map +1 -0
  39. package/dist/ai/tools/helpers/pageConfigJson.helpers.js +172 -0
  40. package/dist/ai/tools/helpers/pageConfigJson.helpers.js.map +1 -0
  41. package/dist/ai/tools/implementations/createNewRoute.impl.d.ts +5 -0
  42. package/dist/ai/tools/implementations/createNewRoute.impl.d.ts.map +1 -0
  43. package/dist/ai/tools/implementations/createNewRoute.impl.js +101 -0
  44. package/dist/ai/tools/implementations/createNewRoute.impl.js.map +1 -0
  45. package/dist/ai/tools/implementations/deleteElement.impl.d.ts +18 -0
  46. package/dist/ai/tools/implementations/deleteElement.impl.d.ts.map +1 -0
  47. package/dist/ai/tools/implementations/deleteElement.impl.js +60 -0
  48. package/dist/ai/tools/implementations/deleteElement.impl.js.map +1 -0
  49. package/dist/ai/tools/implementations/factories.d.ts +72 -0
  50. package/dist/ai/tools/implementations/factories.d.ts.map +1 -1
  51. package/dist/ai/tools/implementations/factories.js +20 -0
  52. package/dist/ai/tools/implementations/factories.js.map +1 -1
  53. package/dist/ai/tools/implementations/insertElement.impl.d.ts +14 -0
  54. package/dist/ai/tools/implementations/insertElement.impl.d.ts.map +1 -0
  55. package/dist/ai/tools/implementations/insertElement.impl.js +73 -0
  56. package/dist/ai/tools/implementations/insertElement.impl.js.map +1 -0
  57. package/dist/ai/tools/implementations/updateClassName.impl.d.ts +13 -0
  58. package/dist/ai/tools/implementations/updateClassName.impl.d.ts.map +1 -0
  59. package/dist/ai/tools/implementations/updateClassName.impl.js +61 -0
  60. package/dist/ai/tools/implementations/updateClassName.impl.js.map +1 -0
  61. package/dist/ai/tools/implementations/updateProps.impl.d.ts +33 -0
  62. package/dist/ai/tools/implementations/updateProps.impl.d.ts.map +1 -0
  63. package/dist/ai/tools/implementations/updateProps.impl.js +90 -0
  64. package/dist/ai/tools/implementations/updateProps.impl.js.map +1 -0
  65. package/dist/ai/tools/schemas/createNewRoute.schema.d.ts +20 -0
  66. package/dist/ai/tools/schemas/createNewRoute.schema.d.ts.map +1 -0
  67. package/dist/ai/tools/schemas/createNewRoute.schema.js +20 -0
  68. package/dist/ai/tools/schemas/createNewRoute.schema.js.map +1 -0
  69. package/dist/ai/tools/schemas/deleteElement.schema.d.ts +20 -0
  70. package/dist/ai/tools/schemas/deleteElement.schema.d.ts.map +1 -0
  71. package/dist/ai/tools/schemas/deleteElement.schema.js +20 -0
  72. package/dist/ai/tools/schemas/deleteElement.schema.js.map +1 -0
  73. package/dist/ai/tools/schemas/insertElement.schema.d.ts +23 -0
  74. package/dist/ai/tools/schemas/insertElement.schema.d.ts.map +1 -0
  75. package/dist/ai/tools/schemas/insertElement.schema.js +133 -0
  76. package/dist/ai/tools/schemas/insertElement.schema.js.map +1 -0
  77. package/dist/ai/tools/schemas/updateClassName.schema.d.ts +23 -0
  78. package/dist/ai/tools/schemas/updateClassName.schema.d.ts.map +1 -0
  79. package/dist/ai/tools/schemas/updateClassName.schema.js +21 -0
  80. package/dist/ai/tools/schemas/updateClassName.schema.js.map +1 -0
  81. package/dist/ai/tools/schemas/updateProps.schema.d.ts +91 -0
  82. package/dist/ai/tools/schemas/updateProps.schema.d.ts.map +1 -0
  83. package/dist/ai/tools/schemas/updateProps.schema.js +87 -0
  84. package/dist/ai/tools/schemas/updateProps.schema.js.map +1 -0
  85. package/dist/ai/tools/toolsets/codegenTools.d.ts.map +1 -1
  86. package/dist/ai/tools/toolsets/codegenTools.js +12 -4
  87. package/dist/ai/tools/toolsets/codegenTools.js.map +1 -1
  88. package/dist/core.d.ts +5 -1
  89. package/dist/core.d.ts.map +1 -1
  90. package/dist/core.js +9 -2
  91. package/dist/core.js.map +1 -1
  92. package/dist/image/unsplash.service.d.ts +22 -0
  93. package/dist/image/unsplash.service.d.ts.map +1 -0
  94. package/dist/image/unsplash.service.js +120 -0
  95. package/dist/image/unsplash.service.js.map +1 -0
  96. package/dist/indexer/codegenIndex.d.ts.map +1 -1
  97. package/dist/indexer/codegenIndex.js +2 -5
  98. package/dist/indexer/codegenIndex.js.map +1 -1
  99. package/dist/indexer/data/configs.constants.d.ts +32 -56
  100. package/dist/indexer/data/configs.constants.d.ts.map +1 -1
  101. package/dist/indexer/data/configs.constants.js +61 -88
  102. package/dist/indexer/data/configs.constants.js.map +1 -1
  103. package/dist/indexer/plannerIndex.d.ts.map +1 -1
  104. package/dist/indexer/plannerIndex.js +2 -7
  105. package/dist/indexer/plannerIndex.js.map +1 -1
  106. package/dist/indexer/validatorIndex.d.ts.map +1 -1
  107. package/dist/indexer/validatorIndex.js +1 -0
  108. package/dist/indexer/validatorIndex.js.map +1 -1
  109. package/dist/logging/genStatus.service.d.ts +2 -2
  110. package/dist/logging/genStatus.service.d.ts.map +1 -1
  111. package/dist/logging/genStatus.service.js +2 -2
  112. package/dist/logging/genStatus.service.js.map +1 -1
  113. package/dist/repository/genStatus.repository.d.ts +1 -1
  114. package/dist/repository/genStatus.repository.d.ts.map +1 -1
  115. package/dist/repository/genStatus.repository.js +2 -1
  116. package/dist/repository/genStatus.repository.js.map +1 -1
  117. package/dist/tests/createNewRoute.impl.test.d.ts +2 -0
  118. package/dist/tests/createNewRoute.impl.test.d.ts.map +1 -0
  119. package/dist/tests/createNewRoute.impl.test.js +72 -0
  120. package/dist/tests/createNewRoute.impl.test.js.map +1 -0
  121. package/dist/tests/deleteElement.impl.test.d.ts +2 -0
  122. package/dist/tests/deleteElement.impl.test.d.ts.map +1 -0
  123. package/dist/tests/deleteElement.impl.test.js +88 -0
  124. package/dist/tests/deleteElement.impl.test.js.map +1 -0
  125. package/dist/tests/insertUpdate.impl.test.d.ts +2 -0
  126. package/dist/tests/insertUpdate.impl.test.d.ts.map +1 -0
  127. package/dist/tests/insertUpdate.impl.test.js +68 -0
  128. package/dist/tests/insertUpdate.impl.test.js.map +1 -0
  129. package/dist/types/elements.d.ts +43 -0
  130. package/dist/types/elements.d.ts.map +1 -0
  131. package/dist/types/elements.js +13 -0
  132. package/dist/types/elements.js.map +1 -0
  133. package/dist/types/image.d.ts +19 -0
  134. package/dist/types/image.d.ts.map +1 -0
  135. package/dist/types/image.js +3 -0
  136. package/dist/types/image.js.map +1 -0
  137. package/dist/types/index/configs.types.d.ts +2 -3
  138. package/dist/types/index/configs.types.d.ts.map +1 -1
  139. package/dist/types/index/configs.types.js.map +1 -1
  140. package/dist/types/index/index.types.d.ts +4 -6
  141. package/dist/types/index/index.types.d.ts.map +1 -1
  142. package/dist/types/index/index.types.js.map +1 -1
  143. package/package.json +2 -1
@@ -3,13 +3,11 @@ export declare const projectConfigs: {
3
3
  readonly name: "Next.js";
4
4
  readonly router: "App Router";
5
5
  readonly language: "TypeScript";
6
+ readonly icons: "lucide-react icons";
6
7
  readonly styling: "Tailwind CSS";
7
- readonly ui: "shadcn/ui";
8
- readonly stateManagement: "React Context + local state";
9
8
  };
10
9
  readonly runtimeConfig: {
11
10
  readonly target: "frontend-only";
12
- readonly rendering: "server-components-by-default (use 'use client' only when needed)";
13
11
  readonly serverActions: "disabled";
14
12
  readonly apiRoutes: "disabled";
15
13
  readonly dataFetching: "client-side (fetch or mocked)";
@@ -21,6 +19,37 @@ export declare const projectConfigs: {
21
19
  readonly typecheck: "tsc --noEmit";
22
20
  readonly testing: "none";
23
21
  };
22
+ readonly renderingConfig: {
23
+ readonly approach: "config-driven UI rendering";
24
+ readonly routeConventions: {
25
+ readonly model: "Every route is driven by a colocated JSON config file.";
26
+ readonly filesPerRoute: readonly ["page.tsx", "pageConfig.json"];
27
+ readonly sourceOfTruth: "pageConfig.json (edit this; page.tsx is a fixed renderer)";
28
+ readonly configShape: {
29
+ readonly file: "pageConfig.json";
30
+ readonly root: {
31
+ readonly elements: "BuilderElement[]";
32
+ };
33
+ readonly note: "The page renders config.elements (array of BuilderElement).";
34
+ };
35
+ };
36
+ readonly pageRenderer: {
37
+ readonly fileName: "page.tsx";
38
+ readonly behavior: readonly ["Imports pageConfig from ./pageConfig.json", "Casts config to { elements: BuilderElement[] }", "Renders: config.elements.map(el => <RenderElement key={el.id} el={el} />)"];
39
+ readonly canonicalSource: "import { RenderElement } from \"@/lib/renderer/RenderElement\";\nimport pageConfig from \"./pageConfig.json\";\nimport type { BuilderElement } from \"@/types/elements\";\n\nexport default function Page() {\n const config = pageConfig as { elements: BuilderElement[] };\n return config.elements.map((el) => <RenderElement key={el.id} el={el} />);\n}";
40
+ };
41
+ readonly elements: {
42
+ readonly typeName: "BuilderElement";
43
+ readonly supportedTypes: readonly ["fragment", "div", "text", "image", "button", "input", "textarea", "link", "icon"];
44
+ readonly rendering: {
45
+ readonly notes: readonly ["Unknown element types are warned and rendered as an error box.", "Elements support Tailwind-only styling via className.", "Elements may have children: BuilderElement[]."];
46
+ };
47
+ };
48
+ readonly generatorGuidance: {
49
+ readonly do: readonly ["UI changes can happen only by editing the route's pageConfig.json elements tree.", "Use Tailwind in className; prefer composition via nested children."];
50
+ readonly dont: readonly ["Do not change page.tsx structure for routes (it is a fixed renderer).", "Do not generate React components for layout; encode structure in JSON elements."];
51
+ };
52
+ };
24
53
  };
25
54
  export declare const indexing: {
26
55
  readonly includeExtensions: readonly [".ts", ".tsx", ".js", ".jsx", ".json", ".md", ".mdx", ".css", ".scss", ".sass"];
@@ -29,57 +58,4 @@ export declare const indexing: {
29
58
  readonly chunkSize: 900;
30
59
  readonly chunkOverlap: 150;
31
60
  };
32
- export declare const projectConventions: {
33
- readonly shadcn: {
34
- readonly installed: readonly ["avatar", "badge", "button", "card", "dialog", "dropdown-menu", "input", "sheet", "table", "tabs", "tooltip"];
35
- readonly location: "components/ui/{component}.tsx";
36
- readonly notes: "TooltipProvider is wired in app/layout.tsx";
37
- };
38
- readonly folderConventions: {
39
- readonly "app/": "routes, layouts, metadata, globals.css";
40
- readonly "app/{route}/": "Each route defines UI via page.config.ts and renders via page.tsx (no JSX UI in page.tsx).";
41
- readonly "components/": "UI sections + shared components";
42
- readonly "components/ui/": "shadcn/ui primitives";
43
- readonly "lib/": "shared config + utilities (cn, site config, etc.)";
44
- readonly "public/": "static assets";
45
- readonly "hooks/": "optional (add when you introduce reusable client hooks)";
46
- readonly "services/": "optional (client-side wrappers for fetch / browser APIs)";
47
- readonly "utils/": "optional (pure helpers if they outgrow lib/utils.ts)";
48
- };
49
- readonly importsConventions: {
50
- readonly alias: "@/* -> repo root (tsconfig paths)";
51
- readonly order: readonly ["next/react", "third-party", "@/*", "relative", "styles"];
52
- };
53
- readonly routingConventions: {
54
- readonly required: readonly ["app/layout.tsx", "app/page.tsx", "app/page.config.ts", "app/not-found.tsx", "app/globals.css"];
55
- readonly requiredPerRoute: readonly ["app/{route}/page.tsx", "app/{route}/page.config.ts"];
56
- readonly optionalPerRoute: readonly ["app/{route}/layout.tsx", "app/{route}/loading.tsx", "app/{route}/error.tsx"];
57
- readonly routeGroups: "app/(group)/... (optional)";
58
- readonly dynamicSegments: "app/{route}/[param] (optional)";
59
- };
60
- readonly namingConventions: {
61
- readonly components: "PascalCase";
62
- readonly folders: "kebab-case";
63
- readonly hooks: "useCamelCase";
64
- };
65
- readonly uiArchitecture: {
66
- readonly pattern: "config-driven UI";
67
- readonly rule: readonly ["UI MUST be defined in page.config.ts using BuilderElement[]", "page.tsx MUST only render config via the shared renderer (no hardcoded JSX UI)", "Use only supported ElementType values; do not invent new types"];
68
- readonly configStructure: {
69
- readonly root: "export const config = { elements: BuilderElement[] }";
70
- readonly elementTypes: {
71
- readonly fragment: "{ id, type: 'fragment', children: BuilderElement[] }";
72
- readonly div: "{ id, type: 'div', className?, children?: BuilderElement[] }";
73
- readonly text: "{ id, type: 'text', props: { text: string } }";
74
- readonly image: "{ id, type: 'image', props: { src: string, alt? } }";
75
- readonly button: "{ id, type: 'button', props?: { text? }, children?: BuilderElement[] }";
76
- readonly input: "{ id, type: 'input', props?: { placeholder?, value?, type? }, className? }";
77
- readonly textarea: "{ id, type: 'textarea', props?: { placeholder?, value? }, className? }";
78
- readonly link: "{ id, type: 'link', props?: { href?, text?, target?, rel? }, children?: BuilderElement[] }";
79
- readonly icon: "{ id, type: 'icon', props?: { name?, size?, color?, strokeWidth? }, meta?: { name? }, className? }";
80
- };
81
- readonly rules: readonly ["Elements MUST follow the BuilderElement schema (id, type, optional props/children/className/meta/visible).", "The top-level element SHOULD be { id: 'root', type: 'div', children: [...] }.", "Text content MUST be in props.text (not a top-level 'text' field).", "Use className for Tailwind-only styling (no inline styles).", "IDs must be unique per page."];
82
- };
83
- };
84
- };
85
61
  //# sourceMappingURL=configs.constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"configs.constants.d.ts","sourceRoot":"","sources":["../../../src/indexer/data/configs.constants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;CAwBc,CAAC;AAE1C,eAAO,MAAM,QAAQ;;;;;;CAyBc,CAAC;AAEpC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Fc,CAAC"}
1
+ {"version":3,"file":"configs.constants.d.ts","sourceRoot":"","sources":["../../../src/indexer/data/configs.constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFc,CAAC;AAE1C,eAAO,MAAM,QAAQ;;;;;;CAyBc,CAAC"}
@@ -3,13 +3,11 @@ export const projectConfigs = {
3
3
  name: "Next.js",
4
4
  router: "App Router",
5
5
  language: "TypeScript",
6
+ icons: "lucide-react icons",
6
7
  styling: "Tailwind CSS",
7
- ui: "shadcn/ui",
8
- stateManagement: "React Context + local state",
9
8
  },
10
9
  runtimeConfig: {
11
10
  target: "frontend-only",
12
- rendering: "server-components-by-default (use 'use client' only when needed)",
13
11
  serverActions: "disabled",
14
12
  apiRoutes: "disabled",
15
13
  dataFetching: "client-side (fetch or mocked)",
@@ -21,6 +19,66 @@ export const projectConfigs = {
21
19
  typecheck: "tsc --noEmit",
22
20
  testing: "none",
23
21
  },
22
+ renderingConfig: {
23
+ approach: "config-driven UI rendering",
24
+ routeConventions: {
25
+ model: "Every route is driven by a colocated JSON config file.",
26
+ filesPerRoute: ["page.tsx", "pageConfig.json"],
27
+ sourceOfTruth: "pageConfig.json (edit this; page.tsx is a fixed renderer)",
28
+ configShape: {
29
+ file: "pageConfig.json",
30
+ root: { elements: "BuilderElement[]" },
31
+ note: "The page renders config.elements (array of BuilderElement).",
32
+ },
33
+ },
34
+ pageRenderer: {
35
+ fileName: "page.tsx",
36
+ behavior: [
37
+ "Imports pageConfig from ./pageConfig.json",
38
+ "Casts config to { elements: BuilderElement[] }",
39
+ "Renders: config.elements.map(el => <RenderElement key={el.id} el={el} />)",
40
+ ],
41
+ canonicalSource: `import { RenderElement } from "@/lib/renderer/RenderElement";
42
+ import pageConfig from "./pageConfig.json";
43
+ import type { BuilderElement } from "@/types/elements";
44
+
45
+ export default function Page() {
46
+ const config = pageConfig as { elements: BuilderElement[] };
47
+ return config.elements.map((el) => <RenderElement key={el.id} el={el} />);
48
+ }`,
49
+ },
50
+ elements: {
51
+ typeName: "BuilderElement",
52
+ supportedTypes: [
53
+ "fragment",
54
+ "div",
55
+ "text",
56
+ "image",
57
+ "button",
58
+ "input",
59
+ "textarea",
60
+ "link",
61
+ "icon",
62
+ ],
63
+ rendering: {
64
+ notes: [
65
+ "Unknown element types are warned and rendered as an error box.",
66
+ "Elements support Tailwind-only styling via className.",
67
+ "Elements may have children: BuilderElement[].",
68
+ ],
69
+ },
70
+ },
71
+ generatorGuidance: {
72
+ do: [
73
+ "UI changes can happen only by editing the route's pageConfig.json elements tree.",
74
+ "Use Tailwind in className; prefer composition via nested children.",
75
+ ],
76
+ dont: [
77
+ "Do not change page.tsx structure for routes (it is a fixed renderer).",
78
+ "Do not generate React components for layout; encode structure in JSON elements.",
79
+ ],
80
+ },
81
+ },
24
82
  };
25
83
  export const indexing = {
26
84
  includeExtensions: [
@@ -48,89 +106,4 @@ export const indexing = {
48
106
  chunkSize: 900,
49
107
  chunkOverlap: 150,
50
108
  };
51
- export const projectConventions = {
52
- shadcn: {
53
- installed: [
54
- "avatar",
55
- "badge",
56
- "button",
57
- "card",
58
- "dialog",
59
- "dropdown-menu",
60
- "input",
61
- "sheet",
62
- "table",
63
- "tabs",
64
- "tooltip",
65
- ],
66
- location: "components/ui/{component}.tsx",
67
- notes: "TooltipProvider is wired in app/layout.tsx",
68
- },
69
- folderConventions: {
70
- "app/": "routes, layouts, metadata, globals.css",
71
- "app/{route}/": "Each route defines UI via page.config.ts and renders via page.tsx (no JSX UI in page.tsx).",
72
- "components/": "UI sections + shared components",
73
- "components/ui/": "shadcn/ui primitives",
74
- "lib/": "shared config + utilities (cn, site config, etc.)",
75
- "public/": "static assets",
76
- "hooks/": "optional (add when you introduce reusable client hooks)",
77
- "services/": "optional (client-side wrappers for fetch / browser APIs)",
78
- "utils/": "optional (pure helpers if they outgrow lib/utils.ts)",
79
- },
80
- importsConventions: {
81
- alias: "@/* -> repo root (tsconfig paths)",
82
- order: ["next/react", "third-party", "@/*", "relative", "styles"],
83
- },
84
- routingConventions: {
85
- required: [
86
- "app/layout.tsx",
87
- "app/page.tsx",
88
- "app/page.config.ts",
89
- "app/not-found.tsx",
90
- "app/globals.css",
91
- ],
92
- requiredPerRoute: ["app/{route}/page.tsx", "app/{route}/page.config.ts"],
93
- optionalPerRoute: [
94
- "app/{route}/layout.tsx",
95
- "app/{route}/loading.tsx",
96
- "app/{route}/error.tsx",
97
- ],
98
- routeGroups: "app/(group)/... (optional)",
99
- dynamicSegments: "app/{route}/[param] (optional)",
100
- },
101
- namingConventions: {
102
- components: "PascalCase",
103
- folders: "kebab-case",
104
- hooks: "useCamelCase",
105
- },
106
- uiArchitecture: {
107
- pattern: "config-driven UI",
108
- rule: [
109
- "UI MUST be defined in page.config.ts using BuilderElement[]",
110
- "page.tsx MUST only render config via the shared renderer (no hardcoded JSX UI)",
111
- "Use only supported ElementType values; do not invent new types",
112
- ],
113
- configStructure: {
114
- root: "export const config = { elements: BuilderElement[] }",
115
- elementTypes: {
116
- fragment: "{ id, type: 'fragment', children: BuilderElement[] }",
117
- div: "{ id, type: 'div', className?, children?: BuilderElement[] }",
118
- text: "{ id, type: 'text', props: { text: string } }",
119
- image: "{ id, type: 'image', props: { src: string, alt? } }",
120
- button: "{ id, type: 'button', props?: { text? }, children?: BuilderElement[] }",
121
- input: "{ id, type: 'input', props?: { placeholder?, value?, type? }, className? }",
122
- textarea: "{ id, type: 'textarea', props?: { placeholder?, value? }, className? }",
123
- link: "{ id, type: 'link', props?: { href?, text?, target?, rel? }, children?: BuilderElement[] }",
124
- icon: "{ id, type: 'icon', props?: { name?, size?, color?, strokeWidth? }, meta?: { name? }, className? }",
125
- },
126
- rules: [
127
- "Elements MUST follow the BuilderElement schema (id, type, optional props/children/className/meta/visible).",
128
- "The top-level element SHOULD be { id: 'root', type: 'div', children: [...] }.",
129
- "Text content MUST be in props.text (not a top-level 'text' field).",
130
- "Use className for Tailwind-only styling (no inline styles).",
131
- "IDs must be unique per page.",
132
- ],
133
- },
134
- },
135
- };
136
109
  //# sourceMappingURL=configs.constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configs.constants.js","sourceRoot":"","sources":["../../../src/indexer/data/configs.constants.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe,EAAE;QACf,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,cAAc;QACvB,EAAE,EAAE,WAAW;QACf,eAAe,EAAE,6BAA6B;KAC/C;IACD,aAAa,EAAE;QACb,MAAM,EAAE,eAAe;QACvB,SAAS,EACP,kEAAkE;QACpE,aAAa,EAAE,UAAU;QACzB,SAAS,EAAE,UAAU;QACrB,YAAY,EAAE,+BAA+B;KAC9C;IACD,aAAa,EAAE;QACb,cAAc,EAAE,KAAK;QACrB,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,cAAc;QACzB,OAAO,EAAE,MAAM;KAChB;CACsC,CAAC;AAE1C,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,iBAAiB,EAAE;QACjB,KAAK;QACL,MAAM;QACN,KAAK;QACL,MAAM;QACN,OAAO;QACP,KAAK;QACL,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;KACR;IACD,kBAAkB,EAAE;QAClB,cAAc;QACd,OAAO;QACP,MAAM;QACN,OAAO;QACP,KAAK;QACL,UAAU;QACV,MAAM;KACP;IACD,YAAY,EAAE,MAAO;IACrB,SAAS,EAAE,GAAG;IACd,YAAY,EAAE,GAAG;CACgB,CAAC;AAEpC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE;QACN,SAAS,EAAE;YACT,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,MAAM;YACN,QAAQ;YACR,eAAe;YACf,OAAO;YACP,OAAO;YACP,OAAO;YACP,MAAM;YACN,SAAS;SACV;QACD,QAAQ,EAAE,+BAA+B;QACzC,KAAK,EAAE,4CAA4C;KACpD;IACD,iBAAiB,EAAE;QACjB,MAAM,EAAE,wCAAwC;QAChD,cAAc,EACZ,4FAA4F;QAC9F,aAAa,EAAE,iCAAiC;QAChD,gBAAgB,EAAE,sBAAsB;QACxC,MAAM,EAAE,mDAAmD;QAC3D,SAAS,EAAE,eAAe;QAC1B,QAAQ,EAAE,yDAAyD;QACnE,WAAW,EAAE,0DAA0D;QACvE,QAAQ,EAAE,sDAAsD;KACjE;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,mCAAmC;QAC1C,KAAK,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC;KAClE;IACD,kBAAkB,EAAE;QAClB,QAAQ,EAAE;YACR,gBAAgB;YAChB,cAAc;YACd,oBAAoB;YACpB,mBAAmB;YACnB,iBAAiB;SAClB;QACD,gBAAgB,EAAE,CAAC,sBAAsB,EAAE,4BAA4B,CAAC;QACxE,gBAAgB,EAAE;YAChB,wBAAwB;YACxB,yBAAyB;YACzB,uBAAuB;SACxB;QACD,WAAW,EAAE,4BAA4B;QACzC,eAAe,EAAE,gCAAgC;KAClD;IACD,iBAAiB,EAAE;QACjB,UAAU,EAAE,YAAY;QACxB,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,cAAc;KACtB;IACD,cAAc,EAAE;QACd,OAAO,EAAE,kBAAkB;QAE3B,IAAI,EAAE;YACJ,6DAA6D;YAC7D,gFAAgF;YAChF,gEAAgE;SACjE;QAED,eAAe,EAAE;YACf,IAAI,EAAE,sDAAsD;YAE5D,YAAY,EAAE;gBACZ,QAAQ,EAAE,sDAAsD;gBAChE,GAAG,EAAE,8DAA8D;gBACnE,IAAI,EAAE,+CAA+C;gBACrD,KAAK,EAAE,qDAAqD;gBAC5D,MAAM,EACJ,wEAAwE;gBAC1E,KAAK,EACH,4EAA4E;gBAC9E,QAAQ,EACN,wEAAwE;gBAC1E,IAAI,EAAE,4FAA4F;gBAClG,IAAI,EAAE,oGAAoG;aAC3G;YAED,KAAK,EAAE;gBACL,4GAA4G;gBAC5G,+EAA+E;gBAC/E,oEAAoE;gBACpE,6DAA6D;gBAC7D,8BAA8B;aAC/B;SACF;KACF;CAC0C,CAAC","sourcesContent":["import { ProjectConfigsConfig } from \"../../types/index/configs.types.js\";\nimport { ProjectConventionsConfig } from \"../../types/index/conventions.types.js\";\nimport { IndexingConfig } from \"../../types/index/indexing.types.js\";\n\nexport const projectConfigs = {\n frameworkConfig: {\n name: \"Next.js\",\n router: \"App Router\",\n language: \"TypeScript\",\n styling: \"Tailwind CSS\",\n ui: \"shadcn/ui\",\n stateManagement: \"React Context + local state\",\n },\n runtimeConfig: {\n target: \"frontend-only\",\n rendering:\n \"server-components-by-default (use 'use client' only when needed)\",\n serverActions: \"disabled\",\n apiRoutes: \"disabled\",\n dataFetching: \"client-side (fetch or mocked)\",\n },\n toolingConfig: {\n packageManager: \"npm\",\n linting: \"eslint\",\n formatting: \"prettier\",\n typecheck: \"tsc --noEmit\",\n testing: \"none\",\n },\n} as const satisfies ProjectConfigsConfig;\n\nexport const indexing = {\n includeExtensions: [\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".json\",\n \".md\",\n \".mdx\",\n \".css\",\n \".scss\",\n \".sass\",\n ],\n excludeDirectories: [\n \"node_modules\",\n \".next\",\n \"dist\",\n \"build\",\n \"out\",\n \"coverage\",\n \".git\",\n ],\n maxFileBytes: 200_000,\n chunkSize: 900,\n chunkOverlap: 150,\n} as const satisfies IndexingConfig;\n\nexport const projectConventions = {\n shadcn: {\n installed: [\n \"avatar\",\n \"badge\",\n \"button\",\n \"card\",\n \"dialog\",\n \"dropdown-menu\",\n \"input\",\n \"sheet\",\n \"table\",\n \"tabs\",\n \"tooltip\",\n ],\n location: \"components/ui/{component}.tsx\",\n notes: \"TooltipProvider is wired in app/layout.tsx\",\n },\n folderConventions: {\n \"app/\": \"routes, layouts, metadata, globals.css\",\n \"app/{route}/\":\n \"Each route defines UI via page.config.ts and renders via page.tsx (no JSX UI in page.tsx).\",\n \"components/\": \"UI sections + shared components\",\n \"components/ui/\": \"shadcn/ui primitives\",\n \"lib/\": \"shared config + utilities (cn, site config, etc.)\",\n \"public/\": \"static assets\",\n \"hooks/\": \"optional (add when you introduce reusable client hooks)\",\n \"services/\": \"optional (client-side wrappers for fetch / browser APIs)\",\n \"utils/\": \"optional (pure helpers if they outgrow lib/utils.ts)\",\n },\n importsConventions: {\n alias: \"@/* -> repo root (tsconfig paths)\",\n order: [\"next/react\", \"third-party\", \"@/*\", \"relative\", \"styles\"],\n },\n routingConventions: {\n required: [\n \"app/layout.tsx\",\n \"app/page.tsx\",\n \"app/page.config.ts\",\n \"app/not-found.tsx\",\n \"app/globals.css\",\n ],\n requiredPerRoute: [\"app/{route}/page.tsx\", \"app/{route}/page.config.ts\"],\n optionalPerRoute: [\n \"app/{route}/layout.tsx\",\n \"app/{route}/loading.tsx\",\n \"app/{route}/error.tsx\",\n ],\n routeGroups: \"app/(group)/... (optional)\",\n dynamicSegments: \"app/{route}/[param] (optional)\",\n },\n namingConventions: {\n components: \"PascalCase\",\n folders: \"kebab-case\",\n hooks: \"useCamelCase\",\n },\n uiArchitecture: {\n pattern: \"config-driven UI\",\n\n rule: [\n \"UI MUST be defined in page.config.ts using BuilderElement[]\",\n \"page.tsx MUST only render config via the shared renderer (no hardcoded JSX UI)\",\n \"Use only supported ElementType values; do not invent new types\",\n ],\n\n configStructure: {\n root: \"export const config = { elements: BuilderElement[] }\",\n\n elementTypes: {\n fragment: \"{ id, type: 'fragment', children: BuilderElement[] }\",\n div: \"{ id, type: 'div', className?, children?: BuilderElement[] }\",\n text: \"{ id, type: 'text', props: { text: string } }\",\n image: \"{ id, type: 'image', props: { src: string, alt? } }\",\n button:\n \"{ id, type: 'button', props?: { text? }, children?: BuilderElement[] }\",\n input:\n \"{ id, type: 'input', props?: { placeholder?, value?, type? }, className? }\",\n textarea:\n \"{ id, type: 'textarea', props?: { placeholder?, value? }, className? }\",\n link: \"{ id, type: 'link', props?: { href?, text?, target?, rel? }, children?: BuilderElement[] }\",\n icon: \"{ id, type: 'icon', props?: { name?, size?, color?, strokeWidth? }, meta?: { name? }, className? }\",\n },\n\n rules: [\n \"Elements MUST follow the BuilderElement schema (id, type, optional props/children/className/meta/visible).\",\n \"The top-level element SHOULD be { id: 'root', type: 'div', children: [...] }.\",\n \"Text content MUST be in props.text (not a top-level 'text' field).\",\n \"Use className for Tailwind-only styling (no inline styles).\",\n \"IDs must be unique per page.\",\n ],\n },\n },\n} as const satisfies ProjectConventionsConfig;\n"]}
1
+ {"version":3,"file":"configs.constants.js","sourceRoot":"","sources":["../../../src/indexer/data/configs.constants.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe,EAAE;QACf,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,cAAc;KACxB;IACD,aAAa,EAAE;QACb,MAAM,EAAE,eAAe;QACvB,aAAa,EAAE,UAAU;QACzB,SAAS,EAAE,UAAU;QACrB,YAAY,EAAE,+BAA+B;KAC9C;IACD,aAAa,EAAE;QACb,cAAc,EAAE,KAAK;QACrB,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,cAAc;QACzB,OAAO,EAAE,MAAM;KAChB;IACD,eAAe,EAAE;QACf,QAAQ,EAAE,4BAA4B;QACtC,gBAAgB,EAAE;YAChB,KAAK,EAAE,wDAAwD;YAC/D,aAAa,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC;YAC9C,aAAa,EACX,2DAA2D;YAC7D,WAAW,EAAE;gBACX,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE;gBACtC,IAAI,EAAE,6DAA6D;aACpE;SACF;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE;gBACR,2CAA2C;gBAC3C,gDAAgD;gBAChD,2EAA2E;aAC5E;YACD,eAAe,EAAE;;;;;;;EAOrB;SACG;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,gBAAgB;YAC1B,cAAc,EAAE;gBACd,UAAU;gBACV,KAAK;gBACL,MAAM;gBACN,OAAO;gBACP,QAAQ;gBACR,OAAO;gBACP,UAAU;gBACV,MAAM;gBACN,MAAM;aACP;YACD,SAAS,EAAE;gBACT,KAAK,EAAE;oBACL,gEAAgE;oBAChE,uDAAuD;oBACvD,+CAA+C;iBAChD;aACF;SACF;QACD,iBAAiB,EAAE;YACjB,EAAE,EAAE;gBACF,kFAAkF;gBAClF,oEAAoE;aACrE;YACD,IAAI,EAAE;gBACJ,uEAAuE;gBACvE,iFAAiF;aAClF;SACF;KACF;CACsC,CAAC;AAE1C,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,iBAAiB,EAAE;QACjB,KAAK;QACL,MAAM;QACN,KAAK;QACL,MAAM;QACN,OAAO;QACP,KAAK;QACL,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;KACR;IACD,kBAAkB,EAAE;QAClB,cAAc;QACd,OAAO;QACP,MAAM;QACN,OAAO;QACP,KAAK;QACL,UAAU;QACV,MAAM;KACP;IACD,YAAY,EAAE,MAAO;IACrB,SAAS,EAAE,GAAG;IACd,YAAY,EAAE,GAAG;CACgB,CAAC","sourcesContent":["import { ProjectConfigsConfig } from \"../../types/index/configs.types.js\";\nimport { IndexingConfig } from \"../../types/index/indexing.types.js\";\n\nexport const projectConfigs = {\n frameworkConfig: {\n name: \"Next.js\",\n router: \"App Router\",\n language: \"TypeScript\",\n icons: \"lucide-react icons\",\n styling: \"Tailwind CSS\",\n },\n runtimeConfig: {\n target: \"frontend-only\",\n serverActions: \"disabled\",\n apiRoutes: \"disabled\",\n dataFetching: \"client-side (fetch or mocked)\",\n },\n toolingConfig: {\n packageManager: \"npm\",\n linting: \"eslint\",\n formatting: \"prettier\",\n typecheck: \"tsc --noEmit\",\n testing: \"none\",\n },\n renderingConfig: {\n approach: \"config-driven UI rendering\",\n routeConventions: {\n model: \"Every route is driven by a colocated JSON config file.\",\n filesPerRoute: [\"page.tsx\", \"pageConfig.json\"],\n sourceOfTruth:\n \"pageConfig.json (edit this; page.tsx is a fixed renderer)\",\n configShape: {\n file: \"pageConfig.json\",\n root: { elements: \"BuilderElement[]\" },\n note: \"The page renders config.elements (array of BuilderElement).\",\n },\n },\n pageRenderer: {\n fileName: \"page.tsx\",\n behavior: [\n \"Imports pageConfig from ./pageConfig.json\",\n \"Casts config to { elements: BuilderElement[] }\",\n \"Renders: config.elements.map(el => <RenderElement key={el.id} el={el} />)\",\n ],\n canonicalSource: `import { RenderElement } from \"@/lib/renderer/RenderElement\";\nimport pageConfig from \"./pageConfig.json\";\nimport type { BuilderElement } from \"@/types/elements\";\n\nexport default function Page() {\n const config = pageConfig as { elements: BuilderElement[] };\n return config.elements.map((el) => <RenderElement key={el.id} el={el} />);\n}`,\n },\n elements: {\n typeName: \"BuilderElement\",\n supportedTypes: [\n \"fragment\",\n \"div\",\n \"text\",\n \"image\",\n \"button\",\n \"input\",\n \"textarea\",\n \"link\",\n \"icon\",\n ],\n rendering: {\n notes: [\n \"Unknown element types are warned and rendered as an error box.\",\n \"Elements support Tailwind-only styling via className.\",\n \"Elements may have children: BuilderElement[].\",\n ],\n },\n },\n generatorGuidance: {\n do: [\n \"UI changes can happen only by editing the route's pageConfig.json elements tree.\",\n \"Use Tailwind in className; prefer composition via nested children.\",\n ],\n dont: [\n \"Do not change page.tsx structure for routes (it is a fixed renderer).\",\n \"Do not generate React components for layout; encode structure in JSON elements.\",\n ],\n },\n },\n} as const satisfies ProjectConfigsConfig;\n\nexport const indexing = {\n includeExtensions: [\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".json\",\n \".md\",\n \".mdx\",\n \".css\",\n \".scss\",\n \".sass\",\n ],\n excludeDirectories: [\n \"node_modules\",\n \".next\",\n \"dist\",\n \"build\",\n \"out\",\n \"coverage\",\n \".git\",\n ],\n maxFileBytes: 200_000,\n chunkSize: 900,\n chunkOverlap: 150,\n} as const satisfies IndexingConfig;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"plannerIndex.d.ts","sourceRoot":"","sources":["../../src/indexer/plannerIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAO7D,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,KACd,OAAO,CAAC,YAAY,CAiBtB,CAAC"}
1
+ {"version":3,"file":"plannerIndex.d.ts","sourceRoot":"","sources":["../../src/indexer/plannerIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAI7D,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,KACd,OAAO,CAAC,YAAY,CAYtB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { projectConfigs, projectConventions, } from "./data/configs.constants.js";
1
+ import { projectConfigs } from "./data/configs.constants.js";
2
2
  import { buildFolderTree } from "./helpers/buildFolderTree.js";
3
3
  export const buildPlannerIndex = async (rootDir) => {
4
4
  const folderTree = await buildFolderTree(rootDir);
@@ -8,12 +8,7 @@ export const buildPlannerIndex = async (rootDir) => {
8
8
  frameworkConfig: projectConfigs.frameworkConfig,
9
9
  runtimeConfig: projectConfigs.runtimeConfig,
10
10
  toolingConfig: projectConfigs.toolingConfig,
11
- },
12
- projectConventions: {
13
- folderConventions: projectConventions.folderConventions,
14
- importsConventions: projectConventions.importsConventions,
15
- routingConventions: projectConventions.routingConventions,
16
- namingConventions: projectConventions.namingConventions,
11
+ renderingConfig: projectConfigs.renderingConfig,
17
12
  },
18
13
  };
19
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"plannerIndex.js","sourceRoot":"","sources":["../../src/indexer/plannerIndex.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,OAAe,EACQ,EAAE;IACzB,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAElD,OAAO;QACL,UAAU;QACV,cAAc,EAAE;YACd,eAAe,EAAE,cAAc,CAAC,eAAe;YAC/C,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,aAAa,EAAE,cAAc,CAAC,aAAa;SAC5C;QACD,kBAAkB,EAAE;YAClB,iBAAiB,EAAE,kBAAkB,CAAC,iBAAiB;YACvD,kBAAkB,EAAE,kBAAkB,CAAC,kBAAkB;YACzD,kBAAkB,EAAE,kBAAkB,CAAC,kBAAkB;YACzD,iBAAiB,EAAE,kBAAkB,CAAC,iBAAiB;SACxD;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { PlannerIndex } from \"../types/index/index.types.js\";\nimport {\n projectConfigs,\n projectConventions,\n} from \"./data/configs.constants.js\";\nimport { buildFolderTree } from \"./helpers/buildFolderTree.js\";\n\nexport const buildPlannerIndex = async (\n rootDir: string,\n): Promise<PlannerIndex> => {\n const folderTree = await buildFolderTree(rootDir);\n\n return {\n folderTree,\n projectConfigs: {\n frameworkConfig: projectConfigs.frameworkConfig,\n runtimeConfig: projectConfigs.runtimeConfig,\n toolingConfig: projectConfigs.toolingConfig,\n },\n projectConventions: {\n folderConventions: projectConventions.folderConventions,\n importsConventions: projectConventions.importsConventions,\n routingConventions: projectConventions.routingConventions,\n namingConventions: projectConventions.namingConventions,\n },\n };\n};\n"]}
1
+ {"version":3,"file":"plannerIndex.js","sourceRoot":"","sources":["../../src/indexer/plannerIndex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,OAAe,EACQ,EAAE;IACzB,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAElD,OAAO;QACL,UAAU;QACV,cAAc,EAAE;YACd,eAAe,EAAE,cAAc,CAAC,eAAe;YAC/C,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,eAAe,EAAE,cAAc,CAAC,eAAe;SAChD;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { PlannerIndex } from \"../types/index/index.types.js\";\nimport { projectConfigs } from \"./data/configs.constants.js\";\nimport { buildFolderTree } from \"./helpers/buildFolderTree.js\";\n\nexport const buildPlannerIndex = async (\n rootDir: string,\n): Promise<PlannerIndex> => {\n const folderTree = await buildFolderTree(rootDir);\n\n return {\n folderTree,\n projectConfigs: {\n frameworkConfig: projectConfigs.frameworkConfig,\n runtimeConfig: projectConfigs.runtimeConfig,\n toolingConfig: projectConfigs.toolingConfig,\n renderingConfig: projectConfigs.renderingConfig,\n },\n };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validatorIndex.d.ts","sourceRoot":"","sources":["../../src/indexer/validatorIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAI/D,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,KACd,OAAO,CAAC,cAAc,CAWxB,CAAC"}
1
+ {"version":3,"file":"validatorIndex.d.ts","sourceRoot":"","sources":["../../src/indexer/validatorIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAI/D,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,KACd,OAAO,CAAC,cAAc,CAYxB,CAAC"}
@@ -8,6 +8,7 @@ export const buildValidatorIndex = async (rootDir) => {
8
8
  frameworkConfig: projectConfigs.frameworkConfig,
9
9
  runtimeConfig: projectConfigs.runtimeConfig,
10
10
  toolingConfig: projectConfigs.toolingConfig,
11
+ renderingConfig: projectConfigs.renderingConfig,
11
12
  },
12
13
  };
13
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"validatorIndex.js","sourceRoot":"","sources":["../../src/indexer/validatorIndex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,OAAe,EACU,EAAE;IAC3B,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAElD,OAAO;QACL,UAAU;QACV,cAAc,EAAE;YACd,eAAe,EAAE,cAAc,CAAC,eAAe;YAC/C,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,aAAa,EAAE,cAAc,CAAC,aAAa;SAC5C;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { ValidatorIndex } from \"../types/index/index.types.js\";\nimport { projectConfigs } from \"./data/configs.constants.js\";\nimport { buildFolderTree } from \"./helpers/buildFolderTree.js\";\n\nexport const buildValidatorIndex = async (\n rootDir: string,\n): Promise<ValidatorIndex> => {\n const folderTree = await buildFolderTree(rootDir);\n\n return {\n folderTree,\n projectConfigs: {\n frameworkConfig: projectConfigs.frameworkConfig,\n runtimeConfig: projectConfigs.runtimeConfig,\n toolingConfig: projectConfigs.toolingConfig,\n },\n };\n};\n"]}
1
+ {"version":3,"file":"validatorIndex.js","sourceRoot":"","sources":["../../src/indexer/validatorIndex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,OAAe,EACU,EAAE;IAC3B,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAElD,OAAO;QACL,UAAU;QACV,cAAc,EAAE;YACd,eAAe,EAAE,cAAc,CAAC,eAAe;YAC/C,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,eAAe,EAAE,cAAc,CAAC,eAAe;SAChD;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { ValidatorIndex } from \"../types/index/index.types.js\";\nimport { projectConfigs } from \"./data/configs.constants.js\";\nimport { buildFolderTree } from \"./helpers/buildFolderTree.js\";\n\nexport const buildValidatorIndex = async (\n rootDir: string,\n): Promise<ValidatorIndex> => {\n const folderTree = await buildFolderTree(rootDir);\n\n return {\n folderTree,\n projectConfigs: {\n frameworkConfig: projectConfigs.frameworkConfig,\n runtimeConfig: projectConfigs.runtimeConfig,\n toolingConfig: projectConfigs.toolingConfig,\n renderingConfig: projectConfigs.renderingConfig,\n },\n };\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  import { PersistedStatusEvent } from "../repository/genStatus.repository.js";
2
2
  import { EventType, GenStep } from "../types/events.js";
3
3
  export interface StatusRepository {
4
- persist(chatId: string, sessionId: string, eventType: EventType, step: GenStep, message: string, source: string): Promise<PersistedStatusEvent>;
4
+ persist(chatId: string, sessionId: string, eventType: EventType, step: GenStep, message: string, source: string, displayedSummary: boolean): Promise<PersistedStatusEvent>;
5
5
  }
6
6
  export interface StatusPublisher {
7
7
  publish(chatId: string, genId: string, event: PersistedStatusEvent): Promise<void>;
@@ -10,5 +10,5 @@ export interface StatusServiceDeps {
10
10
  repository: StatusRepository;
11
11
  publisher: StatusPublisher;
12
12
  }
13
- export declare const statusService: (chatId: string, sessionId: string, eventType: EventType, step: GenStep, message: string, source: string, deps: StatusServiceDeps) => Promise<PersistedStatusEvent>;
13
+ export declare const statusService: (chatId: string, sessionId: string, eventType: EventType, step: GenStep, message: string, source: string, deps: StatusServiceDeps, displayedSummary: boolean) => Promise<PersistedStatusEvent>;
14
14
  //# sourceMappingURL=genStatus.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"genStatus.service.d.ts","sourceRoot":"","sources":["../../src/logging/genStatus.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGxD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CACL,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CACL,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED,eAAO,MAAM,aAAa,GACxB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,WAAW,SAAS,EACpB,MAAM,OAAO,EACb,SAAS,MAAM,EACf,QAAQ,MAAM,EACd,MAAM,iBAAiB,KACtB,OAAO,CAAC,oBAAoB,CAmD9B,CAAC"}
1
+ {"version":3,"file":"genStatus.service.d.ts","sourceRoot":"","sources":["../../src/logging/genStatus.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGxD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CACL,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CACL,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED,eAAO,MAAM,aAAa,GACxB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,WAAW,SAAS,EACpB,MAAM,OAAO,EACb,SAAS,MAAM,EACf,QAAQ,MAAM,EACd,MAAM,iBAAiB,EACvB,kBAAkB,OAAO,KACxB,OAAO,CAAC,oBAAoB,CAoD9B,CAAC"}
@@ -1,12 +1,12 @@
1
1
  import { assertNonEmpty, StatusServiceError } from "./logging.utils.js";
2
- export const statusService = async (chatId, sessionId, eventType, step, message, source, deps) => {
2
+ export const statusService = async (chatId, sessionId, eventType, step, message, source, deps, displayedSummary) => {
3
3
  const { repository, publisher } = deps;
4
4
  assertNonEmpty(chatId, "chatId");
5
5
  assertNonEmpty(message, "message");
6
6
  assertNonEmpty(source, "source");
7
7
  let persistedEvent;
8
8
  try {
9
- persistedEvent = await repository.persist(chatId, sessionId, eventType, step, message, source);
9
+ persistedEvent = await repository.persist(chatId, sessionId, eventType, step, message, source, displayedSummary);
10
10
  }
11
11
  catch (error) {
12
12
  throw new StatusServiceError("PERSISTENCE_FAILED", "Failed to persist status event", {
@@ -1 +1 @@
1
- {"version":3,"file":"genStatus.service.js","sourceRoot":"","sources":["../../src/logging/genStatus.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA0BxE,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,MAAc,EACd,SAAiB,EACjB,SAAoB,EACpB,IAAa,EACb,OAAe,EACf,MAAc,EACd,IAAuB,EACQ,EAAE;IACjC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAEvC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACnC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEjC,IAAI,cAAoC,CAAC;IAEzC,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CACvC,MAAM,EACN,SAAS,EACT,SAAS,EACT,IAAI,EACJ,OAAO,EACP,MAAM,CACP,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,kBAAkB,CAC1B,oBAAoB,EACpB,gCAAgC,EAChC;YACE,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;SAC7C,CACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QAC3D,OAAO,cAAc,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE;YACvD,MAAM;YACN,OAAO,EAAE,cAAc,CAAC,OAAO;YAC/B,KAAK;SACN,CAAC,CAAC;QAEH,MAAM,IAAI,kBAAkB,CAC1B,sBAAsB,EACtB,uDAAuD,EACvD;YACE,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE;gBACP,MAAM;gBACN,cAAc;aACf;SACF,CACF,CAAC;IACJ,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { PersistedStatusEvent } from \"../repository/genStatus.repository.js\";\nimport { EventType, GenStep } from \"../types/events.js\";\nimport { assertNonEmpty, StatusServiceError } from \"./logging.utils.js\";\n\nexport interface StatusRepository {\n persist(\n chatId: string,\n sessionId: string,\n eventType: EventType,\n step: GenStep,\n message: string,\n source: string,\n ): Promise<PersistedStatusEvent>;\n}\n\nexport interface StatusPublisher {\n publish(\n chatId: string,\n genId: string,\n event: PersistedStatusEvent,\n ): Promise<void>;\n}\n\nexport interface StatusServiceDeps {\n repository: StatusRepository;\n publisher: StatusPublisher;\n}\n\nexport const statusService = async (\n chatId: string,\n sessionId: string,\n eventType: EventType,\n step: GenStep,\n message: string,\n source: string,\n deps: StatusServiceDeps,\n): Promise<PersistedStatusEvent> => {\n const { repository, publisher } = deps;\n\n assertNonEmpty(chatId, \"chatId\");\n assertNonEmpty(message, \"message\");\n assertNonEmpty(source, \"source\");\n\n let persistedEvent: PersistedStatusEvent;\n\n try {\n persistedEvent = await repository.persist(\n chatId,\n sessionId,\n eventType,\n step,\n message,\n source,\n );\n } catch (error) {\n throw new StatusServiceError(\n \"PERSISTENCE_FAILED\",\n \"Failed to persist status event\",\n {\n cause: error,\n context: { chatId, eventType, step, source },\n },\n );\n }\n\n try {\n await publisher.publish(chatId, sessionId, persistedEvent);\n return persistedEvent;\n } catch (error) {\n console.error(\"Failed publishing status event to Redis\", {\n chatId,\n seq_num: persistedEvent.seq_num,\n error,\n });\n\n throw new StatusServiceError(\n \"REDIS_PUBLISH_FAILED\",\n \"Status event persisted but failed to publish to Redis\",\n {\n cause: error,\n context: {\n chatId,\n persistedEvent,\n },\n },\n );\n }\n};\n"]}
1
+ {"version":3,"file":"genStatus.service.js","sourceRoot":"","sources":["../../src/logging/genStatus.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA2BxE,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,MAAc,EACd,SAAiB,EACjB,SAAoB,EACpB,IAAa,EACb,OAAe,EACf,MAAc,EACd,IAAuB,EACvB,gBAAyB,EACM,EAAE;IACjC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAEvC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACnC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEjC,IAAI,cAAoC,CAAC;IAEzC,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CACvC,MAAM,EACN,SAAS,EACT,SAAS,EACT,IAAI,EACJ,OAAO,EACP,MAAM,EACN,gBAAgB,CACjB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,kBAAkB,CAC1B,oBAAoB,EACpB,gCAAgC,EAChC;YACE,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;SAC7C,CACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QAC3D,OAAO,cAAc,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE;YACvD,MAAM;YACN,OAAO,EAAE,cAAc,CAAC,OAAO;YAC/B,KAAK;SACN,CAAC,CAAC;QAEH,MAAM,IAAI,kBAAkB,CAC1B,sBAAsB,EACtB,uDAAuD,EACvD;YACE,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE;gBACP,MAAM;gBACN,cAAc;aACf;SACF,CACF,CAAC;IACJ,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { PersistedStatusEvent } from \"../repository/genStatus.repository.js\";\nimport { EventType, GenStep } from \"../types/events.js\";\nimport { assertNonEmpty, StatusServiceError } from \"./logging.utils.js\";\n\nexport interface StatusRepository {\n persist(\n chatId: string,\n sessionId: string,\n eventType: EventType,\n step: GenStep,\n message: string,\n source: string,\n displayedSummary: boolean,\n ): Promise<PersistedStatusEvent>;\n}\n\nexport interface StatusPublisher {\n publish(\n chatId: string,\n genId: string,\n event: PersistedStatusEvent,\n ): Promise<void>;\n}\n\nexport interface StatusServiceDeps {\n repository: StatusRepository;\n publisher: StatusPublisher;\n}\n\nexport const statusService = async (\n chatId: string,\n sessionId: string,\n eventType: EventType,\n step: GenStep,\n message: string,\n source: string,\n deps: StatusServiceDeps,\n displayedSummary: boolean,\n): Promise<PersistedStatusEvent> => {\n const { repository, publisher } = deps;\n\n assertNonEmpty(chatId, \"chatId\");\n assertNonEmpty(message, \"message\");\n assertNonEmpty(source, \"source\");\n\n let persistedEvent: PersistedStatusEvent;\n\n try {\n persistedEvent = await repository.persist(\n chatId,\n sessionId,\n eventType,\n step,\n message,\n source,\n displayedSummary,\n );\n } catch (error) {\n throw new StatusServiceError(\n \"PERSISTENCE_FAILED\",\n \"Failed to persist status event\",\n {\n cause: error,\n context: { chatId, eventType, step, source },\n },\n );\n }\n\n try {\n await publisher.publish(chatId, sessionId, persistedEvent);\n return persistedEvent;\n } catch (error) {\n console.error(\"Failed publishing status event to Redis\", {\n chatId,\n seq_num: persistedEvent.seq_num,\n error,\n });\n\n throw new StatusServiceError(\n \"REDIS_PUBLISH_FAILED\",\n \"Status event persisted but failed to publish to Redis\",\n {\n cause: error,\n context: {\n chatId,\n persistedEvent,\n },\n },\n );\n }\n};\n"]}
@@ -8,6 +8,6 @@ export type PersistedStatusEvent = {
8
8
  seq_num: number;
9
9
  };
10
10
  export declare class GenStatusRepository extends DBRepository {
11
- persistStatusMessage(chatId: string, sessionId: string, eventType: EventType, step: GenStep, message: string, source: string): Promise<PersistedStatusEvent>;
11
+ persistStatusMessage(chatId: string, sessionId: string, eventType: EventType, step: GenStep, message: string, source: string, displayedSummary: boolean): Promise<PersistedStatusEvent>;
12
12
  }
13
13
  //# sourceMappingURL=genStatus.repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"genStatus.repository.d.ts","sourceRoot":"","sources":["../../src/repository/genStatus.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,mBAAoB,SAAQ,YAAY;IAC7C,oBAAoB,CACxB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC;CAqBjC"}
1
+ {"version":3,"file":"genStatus.repository.d.ts","sourceRoot":"","sources":["../../src/repository/genStatus.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,mBAAoB,SAAQ,YAAY;IAC7C,oBAAoB,CACxB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,oBAAoB,CAAC;CAmBjC"}
@@ -1,6 +1,6 @@
1
1
  import { DBRepository } from "./repository.js";
2
2
  export class GenStatusRepository extends DBRepository {
3
- async persistStatusMessage(chatId, sessionId, eventType, step, message, source) {
3
+ async persistStatusMessage(chatId, sessionId, eventType, step, message, source, displayedSummary) {
4
4
  const { data, error } = await this.client.rpc("persist_generation_event", {
5
5
  p_conv_id: chatId,
6
6
  p_gen_id: sessionId,
@@ -8,6 +8,7 @@ export class GenStatusRepository extends DBRepository {
8
8
  p_step: step,
9
9
  p_message: message,
10
10
  p_source: source,
11
+ p_displayed_summary: displayedSummary,
11
12
  });
12
13
  if (error) {
13
14
  throw new Error(`Failed calling persist_generation_event RPC: ${error.message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"genStatus.repository.js","sourceRoot":"","sources":["../../src/repository/genStatus.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAU/C,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD,KAAK,CAAC,oBAAoB,CACxB,MAAc,EACd,SAAiB,EACjB,SAAoB,EACpB,IAAa,EACb,OAAe,EACf,MAAc;QAEd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAC3C,0BAA0B,EAC1B;YACE,SAAS,EAAE,MAAM;YACjB,QAAQ,EAAE,SAAS;YACnB,YAAY,EAAE,SAAS;YACvB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,OAAO;YAClB,QAAQ,EAAE,MAAM;SACjB,CACF,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,gDAAgD,KAAK,CAAC,OAAO,EAAE,CAChE,CAAC;QACJ,CAAC;QAED,OAAO,IAA4B,CAAC;IACtC,CAAC;CACF","sourcesContent":["import { EventType, GenStep } from \"../types/events.js\";\nimport { DBRepository } from \"./repository.js\";\n\nexport type PersistedStatusEvent = {\n event_type: string;\n step?: string | null;\n message?: string | null;\n source?: string | null;\n seq_num: number;\n};\n\nexport class GenStatusRepository extends DBRepository {\n async persistStatusMessage(\n chatId: string,\n sessionId: string,\n eventType: EventType,\n step: GenStep,\n message: string,\n source: string\n ): Promise<PersistedStatusEvent> {\n const { data, error } = await this.client.rpc(\n \"persist_generation_event\",\n {\n p_conv_id: chatId,\n p_gen_id: sessionId,\n p_event_type: eventType,\n p_step: step,\n p_message: message,\n p_source: source,\n }\n );\n\n if (error) {\n throw new Error(\n `Failed calling persist_generation_event RPC: ${error.message}`\n );\n }\n\n return data as PersistedStatusEvent;\n }\n}"]}
1
+ {"version":3,"file":"genStatus.repository.js","sourceRoot":"","sources":["../../src/repository/genStatus.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAU/C,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD,KAAK,CAAC,oBAAoB,CACxB,MAAc,EACd,SAAiB,EACjB,SAAoB,EACpB,IAAa,EACb,OAAe,EACf,MAAc,EACd,gBAAyB;QAEzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,EAAE;YACxE,SAAS,EAAE,MAAM;YACjB,QAAQ,EAAE,SAAS;YACnB,YAAY,EAAE,SAAS;YACvB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,OAAO;YAClB,QAAQ,EAAE,MAAM;YAChB,mBAAmB,EAAE,gBAAgB;SACtC,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,gDAAgD,KAAK,CAAC,OAAO,EAAE,CAChE,CAAC;QACJ,CAAC;QAED,OAAO,IAA4B,CAAC;IACtC,CAAC;CACF","sourcesContent":["import { EventType, GenStep } from \"../types/events.js\";\nimport { DBRepository } from \"./repository.js\";\n\nexport type PersistedStatusEvent = {\n event_type: string;\n step?: string | null;\n message?: string | null;\n source?: string | null;\n seq_num: number;\n};\n\nexport class GenStatusRepository extends DBRepository {\n async persistStatusMessage(\n chatId: string,\n sessionId: string,\n eventType: EventType,\n step: GenStep,\n message: string,\n source: string,\n displayedSummary: boolean,\n ): Promise<PersistedStatusEvent> {\n const { data, error } = await this.client.rpc(\"persist_generation_event\", {\n p_conv_id: chatId,\n p_gen_id: sessionId,\n p_event_type: eventType,\n p_step: step,\n p_message: message,\n p_source: source,\n p_displayed_summary: displayedSummary,\n });\n\n if (error) {\n throw new Error(\n `Failed calling persist_generation_event RPC: ${error.message}`,\n );\n }\n\n return data as PersistedStatusEvent;\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=createNewRoute.impl.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNewRoute.impl.test.d.ts","sourceRoot":"","sources":["../../src/tests/createNewRoute.impl.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import path from "node:path";
4
+ import os from "node:os";
5
+ import fs from "node:fs/promises";
6
+ import { createCreateNewRouteImpl, DEFAULT_PAGE_CONFIG_JSON, PAGE_TSX_TEMPLATE_STRING, } from "../ai/tools/implementations/createNewRoute.impl.js";
7
+ const makeRealFs = (overrides) => {
8
+ return {
9
+ readFile: async (absolutePath) => fs.readFile(absolutePath, "utf-8"),
10
+ writeFile: async (absolutePath, content) => fs.writeFile(absolutePath, content ?? "", "utf-8"),
11
+ mkdirp: async (absoluteDir) => {
12
+ await fs.mkdir(absoluteDir, { recursive: true });
13
+ },
14
+ rmFile: async (absolutePath) => fs.rm(absolutePath, { force: true }),
15
+ stat: async (absolutePath) => fs.stat(absolutePath),
16
+ safeReadDir: async (absoluteDir) => fs.readdir(absoluteDir, { withFileTypes: true }),
17
+ ...(overrides ?? {}),
18
+ };
19
+ };
20
+ test("create_new_route: creates page.tsx and pageConfig.json under /app", async () => {
21
+ const workspaceRoot = await fs.mkdtemp(path.join(os.tmpdir(), "qwintly-core-"));
22
+ try {
23
+ await fs.mkdir(path.join(workspaceRoot, "app", "dashboard"), { recursive: true });
24
+ const impl = createCreateNewRouteImpl({ workspaceRoot, fs: makeRealFs() });
25
+ const res = await impl("/dashboard", "settings");
26
+ assert.equal(res, `created page.tsx successfully and content of pageConfig.json at route \"/dashboard/settings\":\n${DEFAULT_PAGE_CONFIG_JSON}`);
27
+ const pageTsx = await fs.readFile(path.join(workspaceRoot, "app", "dashboard", "settings", "page.tsx"), "utf-8");
28
+ const pageConfig = await fs.readFile(path.join(workspaceRoot, "app", "dashboard", "settings", "pageConfig.json"), "utf-8");
29
+ assert.equal(pageTsx, PAGE_TSX_TEMPLATE_STRING);
30
+ assert.equal(pageConfig, DEFAULT_PAGE_CONFIG_JSON);
31
+ }
32
+ finally {
33
+ await fs.rm(workspaceRoot, { recursive: true, force: true });
34
+ }
35
+ });
36
+ test("create_new_route: atomic rollback on write failure", async () => {
37
+ const workspaceRoot = await fs.mkdtemp(path.join(os.tmpdir(), "qwintly-core-"));
38
+ try {
39
+ const parentDir = path.join(workspaceRoot, "app", "dashboard");
40
+ await fs.mkdir(parentDir, { recursive: true });
41
+ const failingFs = makeRealFs({
42
+ writeFile: async (absolutePath, content) => {
43
+ if (absolutePath.replace(/\\/g, "/").endsWith("/pageConfig.json")) {
44
+ throw new Error("simulated write failure");
45
+ }
46
+ await fs.writeFile(absolutePath, content ?? "", "utf-8");
47
+ },
48
+ });
49
+ const impl = createCreateNewRouteImpl({ workspaceRoot, fs: failingFs });
50
+ const res = await impl("/dashboard", "settings");
51
+ assert.equal(res, "failed to create");
52
+ const entries = await fs.readdir(parentDir);
53
+ assert.ok(!entries.includes("settings"), "final route dir should not exist");
54
+ assert.ok(entries.every((e) => !e.startsWith(".qwintly_route_tmp_settings_")), "temp dir should be cleaned up");
55
+ }
56
+ finally {
57
+ await fs.rm(workspaceRoot, { recursive: true, force: true });
58
+ }
59
+ });
60
+ test("create_new_route: fails when parent route folder does not exist", async () => {
61
+ const workspaceRoot = await fs.mkdtemp(path.join(os.tmpdir(), "qwintly-core-"));
62
+ try {
63
+ await fs.mkdir(path.join(workspaceRoot, "app"), { recursive: true });
64
+ const impl = createCreateNewRouteImpl({ workspaceRoot, fs: makeRealFs() });
65
+ const res = await impl("/does-not-exist", "settings");
66
+ assert.equal(res, "failed to create");
67
+ }
68
+ finally {
69
+ await fs.rm(workspaceRoot, { recursive: true, force: true });
70
+ }
71
+ });
72
+ //# sourceMappingURL=createNewRoute.impl.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNewRoute.impl.test.js","sourceRoot":"","sources":["../../src/tests/createNewRoute.impl.test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"node:assert/strict\";\nimport test from \"node:test\";\nimport path from \"node:path\";\nimport os from \"node:os\";\nimport fs from \"node:fs/promises\";\nimport {\n createCreateNewRouteImpl,\n DEFAULT_PAGE_CONFIG_JSON,\n PAGE_TSX_TEMPLATE_STRING,\n} from \"../ai/tools/implementations/createNewRoute.impl.js\";\n\ntype CoreFs = Parameters<typeof createCreateNewRouteImpl>[0][\"fs\"];\n\nconst makeRealFs = (overrides?: Partial<CoreFs>): CoreFs => {\n return {\n readFile: async (absolutePath) => fs.readFile(absolutePath, \"utf-8\"),\n writeFile: async (absolutePath, content) =>\n fs.writeFile(absolutePath, content ?? \"\", \"utf-8\"),\n mkdirp: async (absoluteDir) => {\n await fs.mkdir(absoluteDir, { recursive: true });\n },\n rmFile: async (absolutePath) => fs.rm(absolutePath, { force: true }),\n stat: async (absolutePath) => fs.stat(absolutePath),\n safeReadDir: async (absoluteDir) =>\n fs.readdir(absoluteDir, { withFileTypes: true }),\n ...(overrides ?? {}),\n };\n};\n\ntest(\"create_new_route: creates page.tsx and pageConfig.json under /app\", async () => {\n const workspaceRoot = await fs.mkdtemp(path.join(os.tmpdir(), \"qwintly-core-\"));\n try {\n await fs.mkdir(path.join(workspaceRoot, \"app\", \"dashboard\"), { recursive: true });\n\n const impl = createCreateNewRouteImpl({ workspaceRoot, fs: makeRealFs() } as any);\n const res = await impl(\"/dashboard\", \"settings\");\n assert.equal(\n res,\n `created page.tsx successfully and content of pageConfig.json at route \\\"/dashboard/settings\\\":\\n${DEFAULT_PAGE_CONFIG_JSON}`,\n );\n\n const pageTsx = await fs.readFile(\n path.join(workspaceRoot, \"app\", \"dashboard\", \"settings\", \"page.tsx\"),\n \"utf-8\",\n );\n const pageConfig = await fs.readFile(\n path.join(workspaceRoot, \"app\", \"dashboard\", \"settings\", \"pageConfig.json\"),\n \"utf-8\",\n );\n\n assert.equal(pageTsx, PAGE_TSX_TEMPLATE_STRING);\n assert.equal(pageConfig, DEFAULT_PAGE_CONFIG_JSON);\n } finally {\n await fs.rm(workspaceRoot, { recursive: true, force: true });\n }\n});\n\ntest(\"create_new_route: atomic rollback on write failure\", async () => {\n const workspaceRoot = await fs.mkdtemp(path.join(os.tmpdir(), \"qwintly-core-\"));\n try {\n const parentDir = path.join(workspaceRoot, \"app\", \"dashboard\");\n await fs.mkdir(parentDir, { recursive: true });\n\n const failingFs = makeRealFs({\n writeFile: async (absolutePath, content) => {\n if (absolutePath.replace(/\\\\/g, \"/\").endsWith(\"/pageConfig.json\")) {\n throw new Error(\"simulated write failure\");\n }\n await fs.writeFile(absolutePath, content ?? \"\", \"utf-8\");\n },\n });\n\n const impl = createCreateNewRouteImpl({ workspaceRoot, fs: failingFs } as any);\n const res = await impl(\"/dashboard\", \"settings\");\n assert.equal(res, \"failed to create\");\n\n const entries = await fs.readdir(parentDir);\n assert.ok(!entries.includes(\"settings\"), \"final route dir should not exist\");\n assert.ok(\n entries.every((e) => !e.startsWith(\".qwintly_route_tmp_settings_\")),\n \"temp dir should be cleaned up\",\n );\n } finally {\n await fs.rm(workspaceRoot, { recursive: true, force: true });\n }\n});\n\ntest(\"create_new_route: fails when parent route folder does not exist\", async () => {\n const workspaceRoot = await fs.mkdtemp(path.join(os.tmpdir(), \"qwintly-core-\"));\n try {\n await fs.mkdir(path.join(workspaceRoot, \"app\"), { recursive: true });\n const impl = createCreateNewRouteImpl({ workspaceRoot, fs: makeRealFs() } as any);\n const res = await impl(\"/does-not-exist\", \"settings\");\n assert.equal(res, \"failed to create\");\n } finally {\n await fs.rm(workspaceRoot, { recursive: true, force: true });\n }\n});\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deleteElement.impl.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteElement.impl.test.d.ts","sourceRoot":"","sources":["../../src/tests/deleteElement.impl.test.ts"],"names":[],"mappings":""}