@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.
- package/dist/ai/prompts/codegen.prompt.d.ts +9 -0
- package/dist/ai/prompts/codegen.prompt.d.ts.map +1 -0
- package/dist/ai/prompts/codegen.prompt.js +53 -0
- package/dist/ai/prompts/codegen.prompt.js.map +1 -0
- package/dist/ai/prompts/examples/codegen.examples.d.ts +2 -0
- package/dist/ai/prompts/examples/codegen.examples.d.ts.map +1 -0
- package/dist/ai/prompts/examples/codegen.examples.js +81 -0
- package/dist/ai/prompts/examples/codegen.examples.js.map +1 -0
- package/dist/ai/prompts/examples/planner.examples.d.ts +2 -0
- package/dist/ai/prompts/examples/planner.examples.d.ts.map +1 -0
- package/dist/ai/prompts/examples/planner.examples.js +3 -0
- package/dist/ai/prompts/examples/planner.examples.js.map +1 -0
- package/dist/ai/prompts/helpers/promptParts.helper.d.ts +8 -0
- package/dist/ai/prompts/helpers/promptParts.helper.d.ts.map +1 -0
- package/dist/ai/prompts/helpers/promptParts.helper.js +37 -0
- package/dist/ai/prompts/helpers/promptParts.helper.js.map +1 -0
- package/dist/ai/prompts/planner.prompt.d.ts +10 -0
- package/dist/ai/prompts/planner.prompt.d.ts.map +1 -0
- package/dist/ai/prompts/planner.prompt.js +49 -0
- package/dist/ai/prompts/planner.prompt.js.map +1 -0
- package/dist/ai/prompts/prompts.d.ts +4 -0
- package/dist/ai/prompts/prompts.d.ts.map +1 -0
- package/dist/ai/prompts/prompts.js +4 -0
- package/dist/ai/prompts/prompts.js.map +1 -0
- package/dist/ai/prompts/validator.prompt.d.ts +15 -0
- package/dist/ai/prompts/validator.prompt.d.ts.map +1 -0
- package/dist/ai/prompts/validator.prompt.js +55 -0
- package/dist/ai/prompts/validator.prompt.js.map +1 -0
- package/dist/ai/tools/helpers/elementid.helpers.d.ts +4 -0
- package/dist/ai/tools/helpers/elementid.helpers.d.ts.map +1 -0
- package/dist/ai/tools/helpers/elementid.helpers.js +19 -0
- package/dist/ai/tools/helpers/elementid.helpers.js.map +1 -0
- package/dist/ai/tools/helpers/getImage.helper.d.ts +2 -0
- package/dist/ai/tools/helpers/getImage.helper.d.ts.map +1 -0
- package/dist/ai/tools/helpers/getImage.helper.js +2 -0
- package/dist/ai/tools/helpers/getImage.helper.js.map +1 -0
- package/dist/ai/tools/helpers/pageConfigJson.helpers.d.ts +15 -0
- package/dist/ai/tools/helpers/pageConfigJson.helpers.d.ts.map +1 -0
- package/dist/ai/tools/helpers/pageConfigJson.helpers.js +172 -0
- package/dist/ai/tools/helpers/pageConfigJson.helpers.js.map +1 -0
- package/dist/ai/tools/implementations/createNewRoute.impl.d.ts +5 -0
- package/dist/ai/tools/implementations/createNewRoute.impl.d.ts.map +1 -0
- package/dist/ai/tools/implementations/createNewRoute.impl.js +101 -0
- package/dist/ai/tools/implementations/createNewRoute.impl.js.map +1 -0
- package/dist/ai/tools/implementations/deleteElement.impl.d.ts +18 -0
- package/dist/ai/tools/implementations/deleteElement.impl.d.ts.map +1 -0
- package/dist/ai/tools/implementations/deleteElement.impl.js +60 -0
- package/dist/ai/tools/implementations/deleteElement.impl.js.map +1 -0
- package/dist/ai/tools/implementations/factories.d.ts +72 -0
- package/dist/ai/tools/implementations/factories.d.ts.map +1 -1
- package/dist/ai/tools/implementations/factories.js +20 -0
- package/dist/ai/tools/implementations/factories.js.map +1 -1
- package/dist/ai/tools/implementations/insertElement.impl.d.ts +14 -0
- package/dist/ai/tools/implementations/insertElement.impl.d.ts.map +1 -0
- package/dist/ai/tools/implementations/insertElement.impl.js +73 -0
- package/dist/ai/tools/implementations/insertElement.impl.js.map +1 -0
- package/dist/ai/tools/implementations/updateClassName.impl.d.ts +13 -0
- package/dist/ai/tools/implementations/updateClassName.impl.d.ts.map +1 -0
- package/dist/ai/tools/implementations/updateClassName.impl.js +61 -0
- package/dist/ai/tools/implementations/updateClassName.impl.js.map +1 -0
- package/dist/ai/tools/implementations/updateProps.impl.d.ts +33 -0
- package/dist/ai/tools/implementations/updateProps.impl.d.ts.map +1 -0
- package/dist/ai/tools/implementations/updateProps.impl.js +90 -0
- package/dist/ai/tools/implementations/updateProps.impl.js.map +1 -0
- package/dist/ai/tools/schemas/createNewRoute.schema.d.ts +20 -0
- package/dist/ai/tools/schemas/createNewRoute.schema.d.ts.map +1 -0
- package/dist/ai/tools/schemas/createNewRoute.schema.js +20 -0
- package/dist/ai/tools/schemas/createNewRoute.schema.js.map +1 -0
- package/dist/ai/tools/schemas/deleteElement.schema.d.ts +20 -0
- package/dist/ai/tools/schemas/deleteElement.schema.d.ts.map +1 -0
- package/dist/ai/tools/schemas/deleteElement.schema.js +20 -0
- package/dist/ai/tools/schemas/deleteElement.schema.js.map +1 -0
- package/dist/ai/tools/schemas/insertElement.schema.d.ts +23 -0
- package/dist/ai/tools/schemas/insertElement.schema.d.ts.map +1 -0
- package/dist/ai/tools/schemas/insertElement.schema.js +133 -0
- package/dist/ai/tools/schemas/insertElement.schema.js.map +1 -0
- package/dist/ai/tools/schemas/updateClassName.schema.d.ts +23 -0
- package/dist/ai/tools/schemas/updateClassName.schema.d.ts.map +1 -0
- package/dist/ai/tools/schemas/updateClassName.schema.js +21 -0
- package/dist/ai/tools/schemas/updateClassName.schema.js.map +1 -0
- package/dist/ai/tools/schemas/updateProps.schema.d.ts +91 -0
- package/dist/ai/tools/schemas/updateProps.schema.d.ts.map +1 -0
- package/dist/ai/tools/schemas/updateProps.schema.js +87 -0
- package/dist/ai/tools/schemas/updateProps.schema.js.map +1 -0
- package/dist/ai/tools/toolsets/codegenTools.d.ts.map +1 -1
- package/dist/ai/tools/toolsets/codegenTools.js +12 -4
- package/dist/ai/tools/toolsets/codegenTools.js.map +1 -1
- package/dist/core.d.ts +5 -1
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +9 -2
- package/dist/core.js.map +1 -1
- package/dist/image/unsplash.service.d.ts +22 -0
- package/dist/image/unsplash.service.d.ts.map +1 -0
- package/dist/image/unsplash.service.js +120 -0
- package/dist/image/unsplash.service.js.map +1 -0
- package/dist/indexer/codegenIndex.d.ts.map +1 -1
- package/dist/indexer/codegenIndex.js +2 -5
- package/dist/indexer/codegenIndex.js.map +1 -1
- package/dist/indexer/data/configs.constants.d.ts +32 -56
- package/dist/indexer/data/configs.constants.d.ts.map +1 -1
- package/dist/indexer/data/configs.constants.js +61 -88
- package/dist/indexer/data/configs.constants.js.map +1 -1
- package/dist/indexer/plannerIndex.d.ts.map +1 -1
- package/dist/indexer/plannerIndex.js +2 -7
- package/dist/indexer/plannerIndex.js.map +1 -1
- package/dist/indexer/validatorIndex.d.ts.map +1 -1
- package/dist/indexer/validatorIndex.js +1 -0
- package/dist/indexer/validatorIndex.js.map +1 -1
- package/dist/logging/genStatus.service.d.ts +2 -2
- package/dist/logging/genStatus.service.d.ts.map +1 -1
- package/dist/logging/genStatus.service.js +2 -2
- package/dist/logging/genStatus.service.js.map +1 -1
- package/dist/repository/genStatus.repository.d.ts +1 -1
- package/dist/repository/genStatus.repository.d.ts.map +1 -1
- package/dist/repository/genStatus.repository.js +2 -1
- package/dist/repository/genStatus.repository.js.map +1 -1
- package/dist/tests/createNewRoute.impl.test.d.ts +2 -0
- package/dist/tests/createNewRoute.impl.test.d.ts.map +1 -0
- package/dist/tests/createNewRoute.impl.test.js +72 -0
- package/dist/tests/createNewRoute.impl.test.js.map +1 -0
- package/dist/tests/deleteElement.impl.test.d.ts +2 -0
- package/dist/tests/deleteElement.impl.test.d.ts.map +1 -0
- package/dist/tests/deleteElement.impl.test.js +88 -0
- package/dist/tests/deleteElement.impl.test.js.map +1 -0
- package/dist/tests/insertUpdate.impl.test.d.ts +2 -0
- package/dist/tests/insertUpdate.impl.test.d.ts.map +1 -0
- package/dist/tests/insertUpdate.impl.test.js +68 -0
- package/dist/tests/insertUpdate.impl.test.js.map +1 -0
- package/dist/types/elements.d.ts +43 -0
- package/dist/types/elements.d.ts.map +1 -0
- package/dist/types/elements.js +13 -0
- package/dist/types/elements.js.map +1 -0
- package/dist/types/image.d.ts +19 -0
- package/dist/types/image.d.ts.map +1 -0
- package/dist/types/image.js +3 -0
- package/dist/types/image.js.map +1 -0
- package/dist/types/index/configs.types.d.ts +2 -3
- package/dist/types/index/configs.types.d.ts.map +1 -1
- package/dist/types/index/configs.types.js.map +1 -1
- package/dist/types/index/index.types.d.ts +4 -6
- package/dist/types/index/index.types.d.ts.map +1 -1
- package/dist/types/index/index.types.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Type } from "@google/genai";
|
|
2
|
+
export const UpdateClassNameSchema = {
|
|
3
|
+
name: "update_classname",
|
|
4
|
+
description: "Updates className (only tailwind classes allowed). Give complete className.",
|
|
5
|
+
parameters: {
|
|
6
|
+
type: Type.OBJECT,
|
|
7
|
+
properties: {
|
|
8
|
+
route: {
|
|
9
|
+
type: Type.STRING,
|
|
10
|
+
description: "The route to update the element at. Example. '/' or '/about' etc.",
|
|
11
|
+
},
|
|
12
|
+
element_id: {
|
|
13
|
+
type: Type.STRING,
|
|
14
|
+
description: "The id of the element to be updated.",
|
|
15
|
+
},
|
|
16
|
+
className: { type: Type.STRING },
|
|
17
|
+
},
|
|
18
|
+
required: ["route", "element_id", "className"],
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=updateClassName.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateClassName.schema.js","sourceRoot":"","sources":["../../../../src/ai/tools/schemas/updateClassName.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,6EAA6E;IAC/E,UAAU,EAAE;QACV,IAAI,EAAE,IAAI,CAAC,MAAM;QACjB,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EACT,mEAAmE;aACtE;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EAAE,sCAAsC;aACpD;YACD,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;SACjC;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC;KAC/C;CACF,CAAC","sourcesContent":["import { Type } from \"@google/genai\";\r\n\r\nexport const UpdateClassNameSchema = {\r\n name: \"update_classname\",\r\n description:\r\n \"Updates className (only tailwind classes allowed). Give complete className.\",\r\n parameters: {\r\n type: Type.OBJECT,\r\n properties: {\r\n route: {\r\n type: Type.STRING,\r\n description:\r\n \"The route to update the element at. Example. '/' or '/about' etc.\",\r\n },\r\n element_id: {\r\n type: Type.STRING,\r\n description: \"The id of the element to be updated.\",\r\n },\r\n className: { type: Type.STRING },\r\n },\r\n required: [\"route\", \"element_id\", \"className\"],\r\n },\r\n};\r\n"]}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Type } from "@google/genai";
|
|
2
|
+
export declare const UpdatePropsSchema: {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
parameters: {
|
|
6
|
+
type: Type;
|
|
7
|
+
properties: {
|
|
8
|
+
route: {
|
|
9
|
+
type: Type;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
element_id: {
|
|
13
|
+
type: Type;
|
|
14
|
+
description: string;
|
|
15
|
+
};
|
|
16
|
+
onClick: {
|
|
17
|
+
type: Type;
|
|
18
|
+
properties: {
|
|
19
|
+
kind: {
|
|
20
|
+
type: Type;
|
|
21
|
+
enum: string[];
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
href: {
|
|
25
|
+
type: Type;
|
|
26
|
+
description: string;
|
|
27
|
+
};
|
|
28
|
+
replace: {
|
|
29
|
+
type: Type;
|
|
30
|
+
description: string;
|
|
31
|
+
};
|
|
32
|
+
newTab: {
|
|
33
|
+
type: Type;
|
|
34
|
+
description: string;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
required: string[];
|
|
38
|
+
};
|
|
39
|
+
text: {
|
|
40
|
+
type: Type;
|
|
41
|
+
description: string;
|
|
42
|
+
};
|
|
43
|
+
href: {
|
|
44
|
+
type: Type;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
placeholder: {
|
|
48
|
+
type: Type;
|
|
49
|
+
description: string;
|
|
50
|
+
};
|
|
51
|
+
alt: {
|
|
52
|
+
type: Type;
|
|
53
|
+
description: string;
|
|
54
|
+
};
|
|
55
|
+
target: {
|
|
56
|
+
type: Type;
|
|
57
|
+
description: string;
|
|
58
|
+
};
|
|
59
|
+
rel: {
|
|
60
|
+
type: Type;
|
|
61
|
+
description: string;
|
|
62
|
+
};
|
|
63
|
+
value: {
|
|
64
|
+
type: Type;
|
|
65
|
+
description: string;
|
|
66
|
+
};
|
|
67
|
+
type: {
|
|
68
|
+
type: Type;
|
|
69
|
+
description: string;
|
|
70
|
+
};
|
|
71
|
+
name: {
|
|
72
|
+
type: Type;
|
|
73
|
+
description: string;
|
|
74
|
+
};
|
|
75
|
+
size: {
|
|
76
|
+
type: Type;
|
|
77
|
+
description: string;
|
|
78
|
+
};
|
|
79
|
+
color: {
|
|
80
|
+
type: Type;
|
|
81
|
+
description: string;
|
|
82
|
+
};
|
|
83
|
+
strokeWidth: {
|
|
84
|
+
type: Type;
|
|
85
|
+
description: string;
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
required: string[];
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=updateProps.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateProps.schema.d.ts","sourceRoot":"","sources":["../../../../src/ai/tools/schemas/updateProps.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AA4BrC,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmE7B,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Type } from "@google/genai";
|
|
2
|
+
const OnClickActionSchema = {
|
|
3
|
+
type: Type.OBJECT,
|
|
4
|
+
properties: {
|
|
5
|
+
kind: {
|
|
6
|
+
type: Type.STRING,
|
|
7
|
+
enum: ["route", "back", "reload", "external"],
|
|
8
|
+
description: "What happens when the element is clicked. 'route' navigates within the app, 'external' opens a URL, 'back' goes back, 'reload' refreshes.",
|
|
9
|
+
},
|
|
10
|
+
href: {
|
|
11
|
+
type: Type.STRING,
|
|
12
|
+
description: "URL to navigate to (used for kind='route' and kind='external').",
|
|
13
|
+
},
|
|
14
|
+
replace: {
|
|
15
|
+
type: Type.BOOLEAN,
|
|
16
|
+
description: "For kind='route': replace history instead of pushing.",
|
|
17
|
+
},
|
|
18
|
+
newTab: {
|
|
19
|
+
type: Type.BOOLEAN,
|
|
20
|
+
description: "For kind='external': open link in a new tab.",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
required: ["kind"],
|
|
24
|
+
};
|
|
25
|
+
export const UpdatePropsSchema = {
|
|
26
|
+
name: "update_element",
|
|
27
|
+
description: "Updates element code.",
|
|
28
|
+
parameters: {
|
|
29
|
+
type: Type.OBJECT,
|
|
30
|
+
properties: {
|
|
31
|
+
route: {
|
|
32
|
+
type: Type.STRING,
|
|
33
|
+
description: "The route to update the element at. Example. '/' or '/about' etc.",
|
|
34
|
+
},
|
|
35
|
+
element_id: {
|
|
36
|
+
type: Type.STRING,
|
|
37
|
+
description: "The id of the element to be updated.",
|
|
38
|
+
},
|
|
39
|
+
onClick: OnClickActionSchema,
|
|
40
|
+
text: {
|
|
41
|
+
type: Type.STRING,
|
|
42
|
+
description: "Text content used by 'text' (<p>), 'button' (label), and as a fallback for 'link' when it has no children.",
|
|
43
|
+
},
|
|
44
|
+
href: {
|
|
45
|
+
type: Type.STRING,
|
|
46
|
+
description: "For 'link': the href attribute (defaults to '#').",
|
|
47
|
+
},
|
|
48
|
+
placeholder: {
|
|
49
|
+
type: Type.STRING,
|
|
50
|
+
description: "For 'input' and 'textarea': placeholder shown when empty.",
|
|
51
|
+
},
|
|
52
|
+
alt: {
|
|
53
|
+
type: Type.STRING,
|
|
54
|
+
description: "For 'image': alt text for accessibility AND the query used to fetch a suitable Unsplash image (src is auto-resolved from alt).",
|
|
55
|
+
},
|
|
56
|
+
target: {
|
|
57
|
+
type: Type.STRING,
|
|
58
|
+
description: "For 'link': target attribute (e.g. '_blank').",
|
|
59
|
+
},
|
|
60
|
+
rel: {
|
|
61
|
+
type: Type.STRING,
|
|
62
|
+
description: "For 'link': rel attribute (e.g. 'noreferrer').",
|
|
63
|
+
},
|
|
64
|
+
value: {
|
|
65
|
+
type: Type.STRING,
|
|
66
|
+
description: "For 'input' and 'textarea': default value (maps to defaultValue).",
|
|
67
|
+
},
|
|
68
|
+
type: {
|
|
69
|
+
type: Type.STRING,
|
|
70
|
+
description: "For 'input': input type (e.g. 'text', 'email', 'password'). Defaults to 'text'.",
|
|
71
|
+
},
|
|
72
|
+
// icon
|
|
73
|
+
name: {
|
|
74
|
+
type: Type.STRING,
|
|
75
|
+
description: "For 'icon': Lucide icon name (e.g. 'ArrowRight', 'Menu').",
|
|
76
|
+
},
|
|
77
|
+
size: { type: Type.NUMBER, description: "For 'icon': size in px." },
|
|
78
|
+
color: { type: Type.STRING, description: "For 'icon': stroke color." },
|
|
79
|
+
strokeWidth: {
|
|
80
|
+
type: Type.NUMBER,
|
|
81
|
+
description: "For 'icon': stroke width.",
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
required: ["route", "element_id"],
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=updateProps.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateProps.schema.js","sourceRoot":"","sources":["../../../../src/ai/tools/schemas/updateProps.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,mBAAmB,GAAG;IAC1B,IAAI,EAAE,IAAI,CAAC,MAAM;IACjB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC;YAC7C,WAAW,EACT,2IAA2I;SAC9I;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,WAAW,EACT,iEAAiE;SACpE;QACD,OAAO,EAAE;YACP,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,WAAW,EAAE,uDAAuD;SACrE;QACD,MAAM,EAAE;YACN,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,WAAW,EAAE,8CAA8C;SAC5D;KACF;IACD,QAAQ,EAAE,CAAC,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,uBAAuB;IACpC,UAAU,EAAE;QACV,IAAI,EAAE,IAAI,CAAC,MAAM;QACjB,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EACT,mEAAmE;aACtE;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EAAE,sCAAsC;aACpD;YACD,OAAO,EAAE,mBAAmB;YAC5B,IAAI,EAAE;gBACJ,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EACT,4GAA4G;aAC/G;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EAAE,mDAAmD;aACjE;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EAAE,2DAA2D;aACzE;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EACT,gIAAgI;aACnI;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EAAE,+CAA+C;aAC7D;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EAAE,gDAAgD;aAC9D;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EACT,mEAAmE;aACtE;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EACT,iFAAiF;aACpF;YAED,OAAO;YACP,IAAI,EAAE;gBACJ,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EAAE,2DAA2D;aACzE;YACD,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,yBAAyB,EAAE;YACnE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,2BAA2B,EAAE;YACtE,WAAW,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,WAAW,EAAE,2BAA2B;aACzC;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;KAClC;CACF,CAAC","sourcesContent":["import { Type } from \"@google/genai\";\n\nconst OnClickActionSchema = {\n type: Type.OBJECT,\n properties: {\n kind: {\n type: Type.STRING,\n enum: [\"route\", \"back\", \"reload\", \"external\"],\n description:\n \"What happens when the element is clicked. 'route' navigates within the app, 'external' opens a URL, 'back' goes back, 'reload' refreshes.\",\n },\n href: {\n type: Type.STRING,\n description:\n \"URL to navigate to (used for kind='route' and kind='external').\",\n },\n replace: {\n type: Type.BOOLEAN,\n description: \"For kind='route': replace history instead of pushing.\",\n },\n newTab: {\n type: Type.BOOLEAN,\n description: \"For kind='external': open link in a new tab.\",\n },\n },\n required: [\"kind\"],\n};\n\nexport const UpdatePropsSchema = {\n name: \"update_element\",\n description: \"Updates element code.\",\n parameters: {\n type: Type.OBJECT,\n properties: {\n route: {\n type: Type.STRING,\n description:\n \"The route to update the element at. Example. '/' or '/about' etc.\",\n },\n element_id: {\n type: Type.STRING,\n description: \"The id of the element to be updated.\",\n },\n onClick: OnClickActionSchema,\n text: {\n type: Type.STRING,\n description:\n \"Text content used by 'text' (<p>), 'button' (label), and as a fallback for 'link' when it has no children.\",\n },\n href: {\n type: Type.STRING,\n description: \"For 'link': the href attribute (defaults to '#').\",\n },\n placeholder: {\n type: Type.STRING,\n description: \"For 'input' and 'textarea': placeholder shown when empty.\",\n },\n alt: {\n type: Type.STRING,\n description:\n \"For 'image': alt text for accessibility AND the query used to fetch a suitable Unsplash image (src is auto-resolved from alt).\",\n },\n target: {\n type: Type.STRING,\n description: \"For 'link': target attribute (e.g. '_blank').\",\n },\n rel: {\n type: Type.STRING,\n description: \"For 'link': rel attribute (e.g. 'noreferrer').\",\n },\n value: {\n type: Type.STRING,\n description:\n \"For 'input' and 'textarea': default value (maps to defaultValue).\",\n },\n type: {\n type: Type.STRING,\n description:\n \"For 'input': input type (e.g. 'text', 'email', 'password'). Defaults to 'text'.\",\n },\n\n // icon\n name: {\n type: Type.STRING,\n description: \"For 'icon': Lucide icon name (e.g. 'ArrowRight', 'Menu').\",\n },\n size: { type: Type.NUMBER, description: \"For 'icon': size in px.\" },\n color: { type: Type.STRING, description: \"For 'icon': stroke color.\" },\n strokeWidth: {\n type: Type.NUMBER,\n description: \"For 'icon': stroke width.\",\n },\n },\n required: [\"route\", \"element_id\"],\n },\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegenTools.d.ts","sourceRoot":"","sources":["../../../../src/ai/tools/toolsets/codegenTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"codegenTools.d.ts","sourceRoot":"","sources":["../../../../src/ai/tools/toolsets/codegenTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAUrC,eAAO,MAAM,YAAY,QAAO,IAAI,EAenC,CAAC"}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import { ReadFileSchema } from "../schemas/readFile.schema.js";
|
|
2
|
-
import { ApplyPatchSchema } from "../schemas/applyPatch.schema.js";
|
|
3
|
-
import { WriteFileSchema } from "../schemas/writeFile.schema.js";
|
|
4
2
|
import { SubmitCodegenDoneSchema } from "../schemas/submitCodegenDone.schema.js";
|
|
3
|
+
import { ListDirSchema } from "../schemas/listDir.schema.js";
|
|
4
|
+
import { CreateNewRouteSchema } from "../schemas/createNewRoute.schema.js";
|
|
5
|
+
import { DeleteElementSchema } from "../schemas/deleteElement.schema.js";
|
|
6
|
+
import { InsertElementSchema } from "../schemas/insertElement.schema.js";
|
|
7
|
+
import { UpdateClassNameSchema } from "../schemas/updateClassName.schema.js";
|
|
8
|
+
import { UpdatePropsSchema } from "../schemas/updateProps.schema.js";
|
|
5
9
|
export const codegenTools = () => {
|
|
6
10
|
return [
|
|
7
11
|
{
|
|
8
12
|
functionDeclarations: [
|
|
9
13
|
ReadFileSchema,
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
CreateNewRouteSchema,
|
|
15
|
+
InsertElementSchema,
|
|
16
|
+
DeleteElementSchema,
|
|
17
|
+
UpdateClassNameSchema,
|
|
18
|
+
UpdatePropsSchema,
|
|
19
|
+
ListDirSchema,
|
|
12
20
|
SubmitCodegenDoneSchema,
|
|
13
21
|
],
|
|
14
22
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegenTools.js","sourceRoot":"","sources":["../../../../src/ai/tools/toolsets/codegenTools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"codegenTools.js","sourceRoot":"","sources":["../../../../src/ai/tools/toolsets/codegenTools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,CAAC,MAAM,YAAY,GAAG,GAAW,EAAE;IACvC,OAAO;QACL;YACE,oBAAoB,EAAE;gBACpB,cAAc;gBACd,oBAAoB;gBACpB,mBAAmB;gBACnB,mBAAmB;gBACnB,qBAAqB;gBACrB,iBAAiB;gBACjB,aAAa;gBACb,uBAAuB;aACxB;SACF;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { Tool } from \"@google/genai\";\nimport { ReadFileSchema } from \"../schemas/readFile.schema.js\";\nimport { SubmitCodegenDoneSchema } from \"../schemas/submitCodegenDone.schema.js\";\nimport { ListDirSchema } from \"../schemas/listDir.schema.js\";\nimport { CreateNewRouteSchema } from \"../schemas/createNewRoute.schema.js\";\nimport { DeleteElementSchema } from \"../schemas/deleteElement.schema.js\";\nimport { InsertElementSchema } from \"../schemas/insertElement.schema.js\";\nimport { UpdateClassNameSchema } from \"../schemas/updateClassName.schema.js\";\nimport { UpdatePropsSchema } from \"../schemas/updateProps.schema.js\";\n\nexport const codegenTools = (): Tool[] => {\n return [\n {\n functionDeclarations: [\n ReadFileSchema,\n CreateNewRouteSchema,\n InsertElementSchema,\n DeleteElementSchema,\n UpdateClassNameSchema,\n UpdatePropsSchema,\n ListDirSchema,\n SubmitCodegenDoneSchema,\n ],\n },\n ];\n};\n"]}
|
package/dist/core.d.ts
CHANGED
|
@@ -17,6 +17,10 @@ export type QwintlyCoreOptions = {
|
|
|
17
17
|
url: string;
|
|
18
18
|
token: string;
|
|
19
19
|
};
|
|
20
|
+
unsplash: {
|
|
21
|
+
url: string;
|
|
22
|
+
accessKey: string;
|
|
23
|
+
};
|
|
20
24
|
gemini?: {
|
|
21
25
|
apiKey: string;
|
|
22
26
|
model?: string;
|
|
@@ -34,7 +38,7 @@ export declare class QwintlyCore {
|
|
|
34
38
|
private readonly redisStatusPublisher;
|
|
35
39
|
constructor(options: QwintlyCoreOptions);
|
|
36
40
|
runAiFlow(initialContents: any[], tools: Tool[], handlers: Record<string, ToolHandler>, maxSteps: number, terminalToolNames: string[]): Promise<ToolLoopResult>;
|
|
37
|
-
streamLog(message: string, eventType: EventType): Promise<void>;
|
|
41
|
+
streamLog(message: string, eventType: EventType, displayedSummary?: boolean): Promise<void>;
|
|
38
42
|
buildProjectInfoIdx(): Promise<ProjectInfo>;
|
|
39
43
|
private buildIndex;
|
|
40
44
|
buildPlannerIdx(): Promise<PlannerIndex>;
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,IAAI,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAGL,WAAW,EACX,cAAc,EACf,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,IAAI,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAGL,WAAW,EACX,cAAc,EACf,MAAM,iCAAiC,CAAC;AAUzC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGhE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C,CAAC;AAiBF,qBAAa,WAAW;IACtB,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,aAAa,EAAE,MAAM,CAAC;IACtC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,EAAE,OAAO,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAoB;gBAE7C,OAAO,EAAE,kBAAkB;IAkD1B,SAAS,CACpB,eAAe,EAAE,GAAG,EAAE,EACtB,KAAK,EAAE,IAAI,EAAE,EACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACrC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EAAE,GAC1B,OAAO,CAAC,cAAc,CAAC;IAwBb,SAAS,CACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,gBAAgB,GAAE,OAAe,GAChC,OAAO,CAAC,IAAI,CAAC;IA2BH,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;YAQ1C,UAAU;IAMX,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;IAIxC,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;IAIxC,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC;CAG1D"}
|
package/dist/core.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getClient } from "./ai/generate/generateClient.js";
|
|
2
2
|
import { runToolLoop, } from "./ai/toolLoop/toolLoopRunner.js";
|
|
3
|
+
import { initUnsplash } from "./image/unsplash.service.js";
|
|
3
4
|
import { buildCodegenIndex } from "./indexer/codegenIndex.js";
|
|
4
5
|
import { buildPlannerIndex } from "./indexer/plannerIndex.js";
|
|
5
6
|
import { computeProjectInfo } from "./indexer/projectInfoIndex.js";
|
|
@@ -25,6 +26,12 @@ export class QwintlyCore {
|
|
|
25
26
|
this.workspacePath = options.workspacePath;
|
|
26
27
|
this.source = options.source;
|
|
27
28
|
this.step = options.step;
|
|
29
|
+
if (options.unsplash?.url && options.unsplash?.accessKey) {
|
|
30
|
+
initUnsplash({
|
|
31
|
+
url: options.unsplash.url,
|
|
32
|
+
accessKey: options.unsplash.accessKey,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
28
35
|
if (options.gemini?.apiKey) {
|
|
29
36
|
this.aiClient = getClient("gemini", options.gemini.apiKey, options.gemini.model);
|
|
30
37
|
}
|
|
@@ -52,7 +59,7 @@ export class QwintlyCore {
|
|
|
52
59
|
const result = await runToolLoop(toolLoopOptions);
|
|
53
60
|
return result;
|
|
54
61
|
}
|
|
55
|
-
async streamLog(message, eventType) {
|
|
62
|
+
async streamLog(message, eventType, displayedSummary = false) {
|
|
56
63
|
try {
|
|
57
64
|
assertNonEmptyString(message, "message");
|
|
58
65
|
await statusService(this.chatId, this.sessionId, eventType, this.step, message, this.source, {
|
|
@@ -62,7 +69,7 @@ export class QwintlyCore {
|
|
|
62
69
|
publisher: {
|
|
63
70
|
publish: this.redisStatusPublisher.sendStatusToRedis.bind(this.redisStatusPublisher),
|
|
64
71
|
},
|
|
65
|
-
});
|
|
72
|
+
}, displayedSummary);
|
|
66
73
|
}
|
|
67
74
|
catch (error) {
|
|
68
75
|
console.error(error);
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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","sourcesContent":["import { FunctionCallingConfigMode, Tool } from \"@google/genai\";\nimport { getClient } from \"./ai/generate/generateClient.js\";\nimport {\n runToolLoop,\n RunToolLoopOptions,\n ToolHandler,\n ToolLoopResult,\n} from \"./ai/toolLoop/toolLoopRunner.js\";\nimport { buildCodegenIndex } from \"./indexer/codegenIndex.js\";\nimport { buildPlannerIndex } from \"./indexer/plannerIndex.js\";\nimport { computeProjectInfo } from \"./indexer/projectInfoIndex.js\";\nimport { buildValidatorIndex } from \"./indexer/validatorIndex.js\";\nimport { statusService } from \"./logging/genStatus.service.js\";\nimport { SendStatusToRedis } from \"./logging/redis.service.js\";\nimport { ContextRepository } from \"./repository/context.repository.js\";\nimport { GenStatusRepository } from \"./repository/genStatus.repository.js\";\nimport { EventType, GenStep } from \"./types/events.js\";\nimport {\n CodegenIndex,\n PlannerIndex,\n ValidatorIndex,\n} from \"./types/index/index.types.js\";\nimport type { ProjectInfo } from \"./types/projectInfo.types.js\";\nimport { assertNonEmptyString } from \"./utils/utils.js\";\n\nexport type QwintlyCoreOptions = {\n chatId: string;\n sessionId: string;\n workspacePath: string;\n source: string;\n step: GenStep;\n supabase: { endpoint: string; secret: string };\n upstash: { url: string; token: string };\n gemini?: { apiKey: string; model?: string };\n};\n\ntype AiResponseOptions = {\n tools?: Tool[];\n toolCallingMode?: FunctionCallingConfigMode;\n};\n\ntype AiClient = {\n aiResponse: (\n request: unknown,\n options?: AiResponseOptions,\n ) => Promise<{\n functionCalls?: any[];\n text?: string;\n }>;\n};\n\nexport class QwintlyCore {\n public readonly chatId: string;\n public readonly sessionId: string;\n public readonly workspacePath: string;\n public readonly source: string;\n public readonly step: GenStep;\n\n private readonly aiClient?: AiClient;\n private readonly statusRepo: GenStatusRepository;\n private readonly ctxRepo: ContextRepository;\n private readonly redisStatusPublisher: SendStatusToRedis;\n\n constructor(options: QwintlyCoreOptions) {\n assertNonEmptyString(options.chatId, \"chatId\");\n assertNonEmptyString(options.sessionId, \"sessionId\");\n assertNonEmptyString(options.workspacePath, \"workspacePath\");\n assertNonEmptyString(options.source, \"source\");\n assertNonEmptyString(options.step, \"step\");\n assertNonEmptyString(options.supabase?.endpoint, \"supabase.endpoint\");\n assertNonEmptyString(options.supabase?.secret, \"supabase.secret\");\n assertNonEmptyString(options.upstash?.url, \"upstash.url\");\n assertNonEmptyString(options.upstash?.token, \"upstash.token\");\n\n this.chatId = options.chatId;\n this.sessionId = options.sessionId;\n this.workspacePath = options.workspacePath;\n this.source = options.source;\n this.step = options.step;\n\n if (options.gemini?.apiKey) {\n this.aiClient = getClient(\n \"gemini\",\n options.gemini.apiKey,\n options.gemini.model,\n ) as AiClient;\n }\n\n this.statusRepo = new GenStatusRepository(\n options.supabase.endpoint,\n options.supabase.secret,\n );\n this.ctxRepo = new ContextRepository(\n options.supabase.endpoint,\n options.supabase.secret,\n );\n this.redisStatusPublisher = new SendStatusToRedis(\n options.upstash.url,\n options.upstash.token,\n );\n\n console.log(\n `QwintlyCore initialized (chatId=${this.chatId}, sessionId=${this.sessionId})`,\n );\n }\n\n public async runAiFlow(\n initialContents: any[],\n tools: Tool[],\n handlers: Record<string, ToolHandler>,\n maxSteps: number,\n terminalToolNames: string[],\n ): Promise<ToolLoopResult> {\n if (!this.aiClient) {\n throw new Error(\n \"AI client not initialized. Please provide 'gemini' config to use runAiFlow.\",\n );\n }\n const toolLoopOptions: RunToolLoopOptions = {\n initialContents: initialContents,\n tools: tools,\n handlers: handlers,\n maxSteps: maxSteps,\n terminalToolNames: terminalToolNames,\n aiCall: (request, options) =>\n this.aiClient!.aiResponse(request, {\n tools: options.tools,\n toolCallingMode: options.toolCallingMode,\n }),\n logger: this.streamLog.bind(this),\n };\n\n const result = await runToolLoop(toolLoopOptions);\n return result;\n }\n\n public async streamLog(message: string, eventType: EventType): Promise<void> {\n try {\n assertNonEmptyString(message, \"message\");\n await statusService(\n this.chatId,\n this.sessionId,\n eventType,\n this.step,\n message,\n this.source,\n {\n repository: {\n persist: this.statusRepo.persistStatusMessage.bind(this.statusRepo),\n },\n publisher: {\n publish: this.redisStatusPublisher.sendStatusToRedis.bind(\n this.redisStatusPublisher,\n ),\n },\n },\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n public async buildProjectInfoIdx(): Promise<ProjectInfo> {\n const projectInfo = await computeProjectInfo(this.workspacePath);\n\n await this.ctxRepo.updateProjectInfo(this.chatId, projectInfo);\n\n return projectInfo;\n }\n\n private async buildIndex<T>(\n builder: (path: string) => Promise<T>,\n ): Promise<T> {\n return builder(this.workspacePath);\n }\n\n public async buildPlannerIdx(): Promise<PlannerIndex> {\n return this.buildIndex(buildPlannerIndex);\n }\n\n public async buildCodegenIdx(): Promise<CodegenIndex> {\n return this.buildIndex(buildCodegenIndex);\n }\n\n public async buildValidatorIdx(): Promise<ValidatorIndex> {\n return this.buildIndex(buildValidatorIndex);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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","sourcesContent":["import { FunctionCallingConfigMode, Tool } from \"@google/genai\";\nimport { getClient } from \"./ai/generate/generateClient.js\";\nimport {\n runToolLoop,\n RunToolLoopOptions,\n ToolHandler,\n ToolLoopResult,\n} from \"./ai/toolLoop/toolLoopRunner.js\";\nimport { initUnsplash } from \"./image/unsplash.service.js\";\nimport { buildCodegenIndex } from \"./indexer/codegenIndex.js\";\nimport { buildPlannerIndex } from \"./indexer/plannerIndex.js\";\nimport { computeProjectInfo } from \"./indexer/projectInfoIndex.js\";\nimport { buildValidatorIndex } from \"./indexer/validatorIndex.js\";\nimport { statusService } from \"./logging/genStatus.service.js\";\nimport { SendStatusToRedis } from \"./logging/redis.service.js\";\nimport { ContextRepository } from \"./repository/context.repository.js\";\nimport { GenStatusRepository } from \"./repository/genStatus.repository.js\";\nimport { EventType, GenStep } from \"./types/events.js\";\nimport {\n CodegenIndex,\n PlannerIndex,\n ValidatorIndex,\n} from \"./types/index/index.types.js\";\nimport type { ProjectInfo } from \"./types/projectInfo.types.js\";\nimport { assertNonEmptyString } from \"./utils/utils.js\";\n\nexport type QwintlyCoreOptions = {\n chatId: string;\n sessionId: string;\n workspacePath: string;\n source: string;\n step: GenStep;\n supabase: { endpoint: string; secret: string };\n upstash: { url: string; token: string };\n unsplash: { url: string; accessKey: string };\n gemini?: { apiKey: string; model?: string };\n};\n\ntype AiResponseOptions = {\n tools?: Tool[];\n toolCallingMode?: FunctionCallingConfigMode;\n};\n\ntype AiClient = {\n aiResponse: (\n request: unknown,\n options?: AiResponseOptions,\n ) => Promise<{\n functionCalls?: any[];\n text?: string;\n }>;\n};\n\nexport class QwintlyCore {\n public readonly chatId: string;\n public readonly sessionId: string;\n public readonly workspacePath: string;\n public readonly source: string;\n public readonly step: GenStep;\n\n private readonly aiClient?: AiClient;\n private readonly statusRepo: GenStatusRepository;\n private readonly ctxRepo: ContextRepository;\n private readonly redisStatusPublisher: SendStatusToRedis;\n\n constructor(options: QwintlyCoreOptions) {\n assertNonEmptyString(options.chatId, \"chatId\");\n assertNonEmptyString(options.sessionId, \"sessionId\");\n assertNonEmptyString(options.workspacePath, \"workspacePath\");\n assertNonEmptyString(options.source, \"source\");\n assertNonEmptyString(options.step, \"step\");\n assertNonEmptyString(options.supabase?.endpoint, \"supabase.endpoint\");\n assertNonEmptyString(options.supabase?.secret, \"supabase.secret\");\n assertNonEmptyString(options.upstash?.url, \"upstash.url\");\n assertNonEmptyString(options.upstash?.token, \"upstash.token\");\n\n this.chatId = options.chatId;\n this.sessionId = options.sessionId;\n this.workspacePath = options.workspacePath;\n this.source = options.source;\n this.step = options.step;\n\n if (options.unsplash?.url && options.unsplash?.accessKey) {\n initUnsplash({\n url: options.unsplash.url,\n accessKey: options.unsplash.accessKey,\n });\n }\n\n if (options.gemini?.apiKey) {\n this.aiClient = getClient(\n \"gemini\",\n options.gemini.apiKey,\n options.gemini.model,\n ) as AiClient;\n }\n\n this.statusRepo = new GenStatusRepository(\n options.supabase.endpoint,\n options.supabase.secret,\n );\n this.ctxRepo = new ContextRepository(\n options.supabase.endpoint,\n options.supabase.secret,\n );\n this.redisStatusPublisher = new SendStatusToRedis(\n options.upstash.url,\n options.upstash.token,\n );\n\n console.log(\n `QwintlyCore initialized (chatId=${this.chatId}, sessionId=${this.sessionId})`,\n );\n }\n\n public async runAiFlow(\n initialContents: any[],\n tools: Tool[],\n handlers: Record<string, ToolHandler>,\n maxSteps: number,\n terminalToolNames: string[],\n ): Promise<ToolLoopResult> {\n if (!this.aiClient) {\n throw new Error(\n \"AI client not initialized. Please provide 'gemini' config to use runAiFlow.\",\n );\n }\n const toolLoopOptions: RunToolLoopOptions = {\n initialContents: initialContents,\n tools: tools,\n handlers: handlers,\n maxSteps: maxSteps,\n terminalToolNames: terminalToolNames,\n aiCall: (request, options) =>\n this.aiClient!.aiResponse(request, {\n tools: options.tools,\n toolCallingMode: options.toolCallingMode,\n }),\n logger: this.streamLog.bind(this),\n };\n\n const result = await runToolLoop(toolLoopOptions);\n return result;\n }\n\n public async streamLog(\n message: string,\n eventType: EventType,\n displayedSummary: boolean = false,\n ): Promise<void> {\n try {\n assertNonEmptyString(message, \"message\");\n await statusService(\n this.chatId,\n this.sessionId,\n eventType,\n this.step,\n message,\n this.source,\n {\n repository: {\n persist: this.statusRepo.persistStatusMessage.bind(this.statusRepo),\n },\n publisher: {\n publish: this.redisStatusPublisher.sendStatusToRedis.bind(\n this.redisStatusPublisher,\n ),\n },\n },\n displayedSummary,\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n public async buildProjectInfoIdx(): Promise<ProjectInfo> {\n const projectInfo = await computeProjectInfo(this.workspacePath);\n\n await this.ctxRepo.updateProjectInfo(this.chatId, projectInfo);\n\n return projectInfo;\n }\n\n private async buildIndex<T>(\n builder: (path: string) => Promise<T>,\n ): Promise<T> {\n return builder(this.workspacePath);\n }\n\n public async buildPlannerIdx(): Promise<PlannerIndex> {\n return this.buildIndex(buildPlannerIndex);\n }\n\n public async buildCodegenIdx(): Promise<CodegenIndex> {\n return this.buildIndex(buildCodegenIndex);\n }\n\n public async buildValidatorIdx(): Promise<ValidatorIndex> {\n return this.buildIndex(buildValidatorIndex);\n }\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BuilderElement } from "../types/elements.js";
|
|
2
|
+
export interface ResolvedImage {
|
|
3
|
+
id: string;
|
|
4
|
+
alt: string;
|
|
5
|
+
imageUrl: string;
|
|
6
|
+
thumbUrl: string;
|
|
7
|
+
photographer: string;
|
|
8
|
+
photographerUrl: string;
|
|
9
|
+
unsplashUrl: string;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
}
|
|
13
|
+
type UnsplashConfig = {
|
|
14
|
+
url: string;
|
|
15
|
+
accessKey: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function initUnsplash(config: Partial<UnsplashConfig> | null | undefined): void;
|
|
18
|
+
export declare function searchUnsplashImage(imgQuery: string): Promise<ResolvedImage | null>;
|
|
19
|
+
export declare const resolveUnsplashImageForElement: (el: BuilderElement, alt: string) => Promise<void>;
|
|
20
|
+
export declare const resolveUnsplashImagesDeep: (el: BuilderElement) => Promise<void>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=unsplash.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsplash.service.d.ts","sourceRoot":"","sources":["../../src/image/unsplash.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,cAAc,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAMF,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,GAAG,SAAS,QAcnD;AAoBD,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA4E/B;AAED,eAAO,MAAM,8BAA8B,GACzC,IAAI,cAAc,EAClB,KAAK,MAAM,KACV,OAAO,CAAC,IAAI,CAmBd,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,IAAI,cAAc,KACjB,OAAO,CAAC,IAAI,CAcd,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import crypto from "crypto";
|
|
2
|
+
let unsplashConfig = null;
|
|
3
|
+
const cache = new Map();
|
|
4
|
+
export function initUnsplash(config) {
|
|
5
|
+
const url = String(config?.url ?? "").trim();
|
|
6
|
+
const accessKey = String(config?.accessKey ?? "").trim();
|
|
7
|
+
if (!url || !accessKey) {
|
|
8
|
+
unsplashConfig = null;
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
unsplashConfig = {
|
|
12
|
+
url: url.replace(/\/+$/, ""),
|
|
13
|
+
accessKey,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function hashIntent(imgQuery) {
|
|
17
|
+
return crypto.createHash("sha256").update(imgQuery).digest("hex");
|
|
18
|
+
}
|
|
19
|
+
function scoreImage(photo) {
|
|
20
|
+
let score = 0;
|
|
21
|
+
score += (photo.likes || 0) * 0.3;
|
|
22
|
+
if (photo.width > photo.height) {
|
|
23
|
+
score += 50;
|
|
24
|
+
}
|
|
25
|
+
score += (photo.user.total_photos || 0) * 0.05;
|
|
26
|
+
return score;
|
|
27
|
+
}
|
|
28
|
+
export async function searchUnsplashImage(imgQuery) {
|
|
29
|
+
const cfg = unsplashConfig;
|
|
30
|
+
if (!cfg)
|
|
31
|
+
throw new Error("Unsplash not configured");
|
|
32
|
+
const cacheKey = hashIntent(imgQuery);
|
|
33
|
+
const cached = cache.get(cacheKey);
|
|
34
|
+
if (cached) {
|
|
35
|
+
return cached;
|
|
36
|
+
}
|
|
37
|
+
const params = new URLSearchParams({
|
|
38
|
+
imgQuery,
|
|
39
|
+
per_page: "10",
|
|
40
|
+
});
|
|
41
|
+
const response = await fetch(`${cfg.url}/search/photos?${params.toString()}`, {
|
|
42
|
+
headers: {
|
|
43
|
+
Authorization: `Client-ID ${cfg.accessKey}`,
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
throw new Error(`Unsplash API failed: ${response.status}`);
|
|
48
|
+
}
|
|
49
|
+
const data = await response.json();
|
|
50
|
+
const photos = data.results;
|
|
51
|
+
if (!photos.length) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
const ranked = [...photos].sort((a, b) => {
|
|
55
|
+
return scoreImage(b) - scoreImage(a);
|
|
56
|
+
});
|
|
57
|
+
const top3 = ranked.slice(0, 3);
|
|
58
|
+
const selected = top3[Math.floor(Math.random() * top3.length)];
|
|
59
|
+
// IMPORTANT:
|
|
60
|
+
// Required by Unsplash API terms
|
|
61
|
+
// Tracks image download usage
|
|
62
|
+
if (selected.links.download_location) {
|
|
63
|
+
await fetch(selected.links.download_location, {
|
|
64
|
+
headers: {
|
|
65
|
+
Authorization: `Client-ID ${cfg.accessKey}`,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const resolved = {
|
|
70
|
+
id: selected.id,
|
|
71
|
+
alt: imgQuery,
|
|
72
|
+
imageUrl: selected.urls.regular,
|
|
73
|
+
thumbUrl: selected.urls.small,
|
|
74
|
+
photographer: selected.user.name,
|
|
75
|
+
photographerUrl: selected.user.links.html,
|
|
76
|
+
unsplashUrl: selected.links.html,
|
|
77
|
+
width: selected.width,
|
|
78
|
+
height: selected.height,
|
|
79
|
+
};
|
|
80
|
+
cache.set(cacheKey, resolved);
|
|
81
|
+
return resolved;
|
|
82
|
+
}
|
|
83
|
+
export const resolveUnsplashImageForElement = async (el, alt) => {
|
|
84
|
+
if (!unsplashConfig)
|
|
85
|
+
return;
|
|
86
|
+
const query = String(alt ?? "").trim();
|
|
87
|
+
if (!query)
|
|
88
|
+
return;
|
|
89
|
+
if (el.props?.src) {
|
|
90
|
+
console.log("src already exists, skipping");
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const resolved = await searchUnsplashImage(query);
|
|
95
|
+
if (!resolved?.imageUrl)
|
|
96
|
+
return;
|
|
97
|
+
const anyEl = el;
|
|
98
|
+
if (!anyEl.props || typeof anyEl.props !== "object")
|
|
99
|
+
anyEl.props = {};
|
|
100
|
+
anyEl.props.src = resolved.imageUrl;
|
|
101
|
+
anyEl.props.alt = query;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Ignore Unsplash lookup errors and still allow prop updates.
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
export const resolveUnsplashImagesDeep = async (el) => {
|
|
108
|
+
const anyEl = el;
|
|
109
|
+
if (anyEl?.type === "image") {
|
|
110
|
+
const alt = String(anyEl?.props?.alt ?? "").trim();
|
|
111
|
+
resolveUnsplashImageForElement(el, alt);
|
|
112
|
+
}
|
|
113
|
+
const kids = anyEl?.children;
|
|
114
|
+
if (Array.isArray(kids)) {
|
|
115
|
+
for (const child of kids) {
|
|
116
|
+
await resolveUnsplashImagesDeep(child);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=unsplash.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsplash.service.js","sourceRoot":"","sources":["../../src/image/unsplash.service.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from \"crypto\";\r\nimport { BuilderElement } from \"../types/elements.js\";\r\n\r\nexport interface ResolvedImage {\r\n id: string;\r\n alt: string;\r\n imageUrl: string;\r\n thumbUrl: string;\r\n photographer: string;\r\n photographerUrl: string;\r\n unsplashUrl: string;\r\n width: number;\r\n height: number;\r\n}\r\n\r\ntype UnsplashConfig = {\r\n url: string;\r\n accessKey: string;\r\n};\r\n\r\nlet unsplashConfig: UnsplashConfig | null = null;\r\n\r\nconst cache = new Map<string, ResolvedImage>();\r\n\r\nexport function initUnsplash(\r\n config: Partial<UnsplashConfig> | null | undefined,\r\n) {\r\n const url = String(config?.url ?? \"\").trim();\r\n const accessKey = String(config?.accessKey ?? \"\").trim();\r\n\r\n if (!url || !accessKey) {\r\n unsplashConfig = null;\r\n return;\r\n }\r\n\r\n unsplashConfig = {\r\n url: url.replace(/\\/+$/, \"\"),\r\n accessKey,\r\n };\r\n}\r\n\r\nfunction hashIntent(imgQuery: string) {\r\n return crypto.createHash(\"sha256\").update(imgQuery).digest(\"hex\");\r\n}\r\n\r\nfunction scoreImage(photo: any) {\r\n let score = 0;\r\n\r\n score += (photo.likes || 0) * 0.3;\r\n\r\n if (photo.width > photo.height) {\r\n score += 50;\r\n }\r\n\r\n score += (photo.user.total_photos || 0) * 0.05;\r\n\r\n return score;\r\n}\r\n\r\nexport async function searchUnsplashImage(\r\n imgQuery: string,\r\n): Promise<ResolvedImage | null> {\r\n const cfg = unsplashConfig;\r\n if (!cfg) throw new Error(\"Unsplash not configured\");\r\n\r\n const cacheKey = hashIntent(imgQuery);\r\n\r\n const cached = cache.get(cacheKey);\r\n\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const params = new URLSearchParams({\r\n imgQuery,\r\n per_page: \"10\",\r\n });\r\n\r\n const response = await fetch(\r\n `${cfg.url}/search/photos?${params.toString()}`,\r\n {\r\n headers: {\r\n Authorization: `Client-ID ${cfg.accessKey}`,\r\n },\r\n },\r\n );\r\n\r\n if (!response.ok) {\r\n throw new Error(`Unsplash API failed: ${response.status}`);\r\n }\r\n\r\n const data = await response.json();\r\n\r\n const photos = data.results;\r\n\r\n if (!photos.length) {\r\n return null;\r\n }\r\n\r\n const ranked = [...photos].sort((a, b) => {\r\n return scoreImage(b) - scoreImage(a);\r\n });\r\n\r\n const top3 = ranked.slice(0, 3);\r\n\r\n const selected = top3[Math.floor(Math.random() * top3.length)];\r\n\r\n // IMPORTANT:\r\n // Required by Unsplash API terms\r\n // Tracks image download usage\r\n if (selected.links.download_location) {\r\n await fetch(selected.links.download_location, {\r\n headers: {\r\n Authorization: `Client-ID ${cfg.accessKey}`,\r\n },\r\n });\r\n }\r\n\r\n const resolved: ResolvedImage = {\r\n id: selected.id,\r\n alt: imgQuery,\r\n\r\n imageUrl: selected.urls.regular,\r\n thumbUrl: selected.urls.small,\r\n\r\n photographer: selected.user.name,\r\n photographerUrl: selected.user.links.html,\r\n\r\n unsplashUrl: selected.links.html,\r\n\r\n width: selected.width,\r\n height: selected.height,\r\n };\r\n\r\n cache.set(cacheKey, resolved);\r\n\r\n return resolved;\r\n}\r\n\r\nexport const resolveUnsplashImageForElement = async (\r\n el: BuilderElement,\r\n alt: string,\r\n): Promise<void> => {\r\n if (!unsplashConfig) return;\r\n const query = String(alt ?? \"\").trim();\r\n if (!query) return;\r\n if (el.props?.src) {\r\n console.log(\"src already exists, skipping\");\r\n return;\r\n }\r\n try {\r\n const resolved = await searchUnsplashImage(query);\r\n if (!resolved?.imageUrl) return;\r\n\r\n const anyEl = el as any;\r\n if (!anyEl.props || typeof anyEl.props !== \"object\") anyEl.props = {};\r\n anyEl.props.src = resolved.imageUrl;\r\n anyEl.props.alt = query;\r\n } catch {\r\n // Ignore Unsplash lookup errors and still allow prop updates.\r\n }\r\n};\r\n\r\nexport const resolveUnsplashImagesDeep = async (\r\n el: BuilderElement,\r\n): Promise<void> => {\r\n const anyEl = el as any;\r\n\r\n if (anyEl?.type === \"image\") {\r\n const alt = String(anyEl?.props?.alt ?? \"\").trim();\r\n resolveUnsplashImageForElement(el, alt);\r\n }\r\n\r\n const kids = anyEl?.children;\r\n if (Array.isArray(kids)) {\r\n for (const child of kids) {\r\n await resolveUnsplashImagesDeep(child);\r\n }\r\n }\r\n};\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegenIndex.d.ts","sourceRoot":"","sources":["../../src/indexer/codegenIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"codegenIndex.d.ts","sourceRoot":"","sources":["../../src/indexer/codegenIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAI7D,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,KACd,OAAO,CAAC,YAAY,CAWtB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { projectConfigs
|
|
1
|
+
import { projectConfigs } from "./data/configs.constants.js";
|
|
2
2
|
import { buildFolderTree } from "./helpers/buildFolderTree.js";
|
|
3
3
|
export const buildCodegenIndex = async (rootDir) => {
|
|
4
4
|
const folderTree = await buildFolderTree(rootDir);
|
|
@@ -7,10 +7,7 @@ export const buildCodegenIndex = async (rootDir) => {
|
|
|
7
7
|
projectConfigs: {
|
|
8
8
|
frameworkConfig: projectConfigs.frameworkConfig,
|
|
9
9
|
runtimeConfig: projectConfigs.runtimeConfig,
|
|
10
|
-
|
|
11
|
-
projectConventions: {
|
|
12
|
-
importsConventions: projectConventions.importsConventions,
|
|
13
|
-
uiArchitecture: projectConventions.uiArchitecture,
|
|
10
|
+
renderingConfig: projectConfigs.renderingConfig,
|
|
14
11
|
},
|
|
15
12
|
};
|
|
16
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegenIndex.js","sourceRoot":"","sources":["../../src/indexer/codegenIndex.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"codegenIndex.js","sourceRoot":"","sources":["../../src/indexer/codegenIndex.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,eAAe,EAAE,cAAc,CAAC,eAAe;SAChD;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { CodegenIndex } from \"../types/index/index.types.js\";\nimport { projectConfigs } from \"./data/configs.constants.js\";\nimport { buildFolderTree } from \"./helpers/buildFolderTree.js\";\n\nexport const buildCodegenIndex = async (\n rootDir: string,\n): Promise<CodegenIndex> => {\n const folderTree = await buildFolderTree(rootDir);\n\n return {\n folderTree,\n projectConfigs: {\n frameworkConfig: projectConfigs.frameworkConfig,\n runtimeConfig: projectConfigs.runtimeConfig,\n renderingConfig: projectConfigs.renderingConfig,\n },\n };\n};\n"]}
|