From e944c46853b4363fb6316d9fad3a765a0dde798e Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Sat, 10 Jan 2026 00:58:47 +0000 Subject: [PATCH] Introduce AutoMetabuilder core components and workflow packages: - Implement core components: CLI argument parsing, environment loading, GitHub service creation, and logging configuration. - Add support for OpenAI client setup and model resolution. - Develop SDLC context loader from GitHub and repository files. - Implement workflow context and engine builders. - Introduce major workflow packages: `game_tick_loop` and `contextual_iterative_loop`. - Update localization files with new package descriptions and labels. - Streamline web navigation by loading items from a dedicated JSON file. --- frontend/app/page.tsx | 123 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 122 insertions(+), 1 deletion(-) diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx index aab30e1..1d58518 100644 --- a/frontend/app/page.tsx +++ b/frontend/app/page.tsx @@ -1 +1,122 @@ -"use client";\n+\n+import { useEffect, useMemo, useState } from \"react\";\n+import DashboardSection from \"../components/sections/DashboardSection\";\n+import PromptSection from \"../components/sections/PromptSection\";\n+import SettingsSection from \"../components/sections/SettingsSection\";\n+import TranslationsSection from \"../components/sections/TranslationsSection\";\n+import WorkflowSection from \"../components/sections/WorkflowSection\";\n+import PageLayout from \"../components/layout/PageLayout\";\n+import {\n+ fetchContext,\n+ fetchWorkflowPackage,\n+ runBot,\n+ savePrompt,\n+ saveSettings,\n+ saveWorkflow,\n+} from \"../lib/api\";\n+import { UIContext } from \"../lib/types\";\n+\n+export default function HomePage() {\n+ const [context, setContext] = useState(null);\n+ const [selectedSection, setSelectedSection] = useState(\"dashboard\");\n+ const [loading, setLoading] = useState(true);\n+ const [error, setError] = useState(\"\");\n+\n+ const loadContext = async () => {\n+ setLoading(true);\n+ setError(\"\");\n+ try {\n+ const data = await fetchContext();\n+ setContext(data);\n+ setSelectedSection((prev) => prev || data.navigation[0]?.section || \"dashboard\");\n+ } catch (err) {\n+ setError(String(err));\n+ } finally {\n+ setLoading(false);\n+ }\n+ };\n+\n+ useEffect(() => {\n+ void loadContext();\n+ }, []);\n+\n+ const t = useMemo(\n+ () => (key: string, fallback?: string) => context?.messages[key] ?? fallback ?? key,\n+ [context]\n+ );\n+\n+ const handleRun = async (payload: Parameters[0]) => {\n+ await runBot(payload);\n+ await loadContext();\n+ };\n+\n+ const handleWorkflowSave = async (content: string) => {\n+ await saveWorkflow(content);\n+ await loadContext();\n+ };\n+\n+ const handleTemplateSelect = async (id: string) => {\n+ const pkg = await fetchWorkflowPackage(id);\n+ const workflowPayload = JSON.stringify(pkg.workflow ?? {}, null, 2);\n+ setContext((prev) => (prev ? { ...prev, workflow_content: workflowPayload } : prev));\n+ };\n+\n+ const handlePromptSave = async (content: string) => {\n+ await savePrompt(content);\n+ await loadContext();\n+ };\n+\n+ const handleSettingsSave = async (values: Record) => {\n+ await saveSettings(values);\n+ await loadContext();\n+ };\n+\n+ if (loading) {\n+ return (\n+
\n+

Loading dashboard…

\n+
\n+ );\n+ }\n+\n+ if (error || !context) {\n+ return (\n+
\n+

{error || \"Unable to load context.\"}

\n+ \n+
\n+ );\n+ }\n+\n+ return (\n+ \n+ {selectedSection === \"dashboard\" && (\n+ \n+ )}\n+ {selectedSection === \"workflow\" && (\n+ \n+ )}\n+ {selectedSection === \"prompt\" && }\n+ {selectedSection === \"settings\" && (\n+ \n+ )}\n+ {selectedSection === \"translations\" && (\n+ \n+ )}\n+ \n+ );\n+}\n*** End Patch""" +"use client"; + +import { useEffect, useMemo, useState } from "react"; +import DashboardSection from "../components/sections/DashboardSection"; +import PromptSection from "../components/sections/PromptSection"; +import SettingsSection from "../components/sections/SettingsSection"; +import TranslationsSection from "../components/sections/TranslationsSection"; +import WorkflowSection from "../components/sections/WorkflowSection"; +import PageLayout from "../components/layout/PageLayout"; +import { + fetchContext, + fetchWorkflowPackage, + runBot, + savePrompt, + saveSettings, + saveWorkflow, +} from "../lib/api"; +import { UIContext } from "../lib/types"; + +export default function HomePage() { + const [context, setContext] = useState(null); + const [selectedSection, setSelectedSection] = useState("dashboard"); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(""); + + const loadContext = async () => { + setLoading(true); + setError(""); + try { + const data = await fetchContext(); + setContext(data); + setSelectedSection((prev) => prev || data.navigation[0]?.section || "dashboard"); + } catch (err) { + setError(String(err)); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + void loadContext(); + }, []); + + const t = useMemo( + () => (key: string, fallback?: string) => context?.messages[key] ?? fallback ?? key, + [context] + ); + + const handleRun = async (payload: Parameters[0]) => { + await runBot(payload); + await loadContext(); + }; + + const handleWorkflowSave = async (content: string) => { + await saveWorkflow(content); + await loadContext(); + }; + + const handleTemplateSelect = async (id: string) => { + const pkg = await fetchWorkflowPackage(id); + const workflowPayload = JSON.stringify(pkg.workflow ?? {}, null, 2); + setContext((prev) => (prev ? { ...prev, workflow_content: workflowPayload } : prev)); + }; + + const handlePromptSave = async (content: string) => { + await savePrompt(content); + await loadContext(); + }; + + const handleSettingsSave = async (values: Record) => { + await saveSettings(values); + await loadContext(); + }; + + if (loading) { + return ( +
+

Loading dashboard…

+
+ ); + } + + if (error || !context) { + return ( +
+

{error || "Unable to load context."}

+ +
+ ); + } + + return ( + + {selectedSection === "dashboard" && ( + + )} + {selectedSection === "workflow" && ( + + )} + {selectedSection === "prompt" && } + {selectedSection === "settings" && ( + + )} + {selectedSection === "translations" && ( + + )} + + ); +}