mirror of
https://github.com/johndoe6345789/AutoMetabuilder.git
synced 2026-04-24 13:54:59 +00:00
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.
This commit is contained in:
@@ -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<UIContext | null>(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<typeof runBot>[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<string, string>) => {\n+ await saveSettings(values);\n+ await loadContext();\n+ };\n+\n+ if (loading) {\n+ return (\n+ <main className=\"app-loading\">\n+ <p>Loading dashboard…</p>\n+ </main>\n+ );\n+ }\n+\n+ if (error || !context) {\n+ return (\n+ <main className=\"app-loading\">\n+ <p>{error || \"Unable to load context.\"}</p>\n+ <button type=\"button\" onClick={loadContext}>\n+ Retry\n+ </button>\n+ </main>\n+ );\n+ }\n+\n+ return (\n+ <PageLayout\n+ navItems={context.navigation}\n+ section={selectedSection}\n+ onSectionChange={setSelectedSection}\n+ t={t}\n+ >\n+ {selectedSection === \"dashboard\" && (\n+ <DashboardSection logs={context.logs} status={context.status} onRun={handleRun} t={t} />\n+ )}\n+ {selectedSection === \"workflow\" && (\n+ <WorkflowSection\n+ content={context.workflow_content}\n+ packages={context.workflow_packages}\n+ onSave={handleWorkflowSave}\n+ onTemplateSelect={handleTemplateSelect}\n+ t={t}\n+ />\n+ )}\n+ {selectedSection === \"prompt\" && <PromptSection content={context.prompt_content} onSave={handlePromptSave} t={t} />}\n+ {selectedSection === \"settings\" && (\n+ <SettingsSection envVars={context.env_vars} onSave={handleSettingsSave} t={t} />\n+ )}\n+ {selectedSection === \"translations\" && (\n+ <TranslationsSection languages={context.translations} onRefresh={loadContext} t={t} />\n+ )}\n+ </PageLayout>\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<UIContext | null>(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<typeof runBot>[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<string, string>) => {
|
||||
await saveSettings(values);
|
||||
await loadContext();
|
||||
};
|
||||
|
||||
if (loading) {
|
||||
return (
|
||||
<main className="app-loading">
|
||||
<p>Loading dashboard…</p>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
||||
if (error || !context) {
|
||||
return (
|
||||
<main className="app-loading">
|
||||
<p>{error || "Unable to load context."}</p>
|
||||
<button type="button" onClick={loadContext}>
|
||||
Retry
|
||||
</button>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<PageLayout
|
||||
navItems={context.navigation}
|
||||
section={selectedSection}
|
||||
onSectionChange={setSelectedSection}
|
||||
t={t}
|
||||
>
|
||||
{selectedSection === "dashboard" && (
|
||||
<DashboardSection logs={context.logs} status={context.status} onRun={handleRun} t={t} />
|
||||
)}
|
||||
{selectedSection === "workflow" && (
|
||||
<WorkflowSection
|
||||
content={context.workflow_content}
|
||||
packages={context.workflow_packages}
|
||||
onSave={handleWorkflowSave}
|
||||
onTemplateSelect={handleTemplateSelect}
|
||||
t={t}
|
||||
/>
|
||||
)}
|
||||
{selectedSection === "prompt" && <PromptSection content={context.prompt_content} onSave={handlePromptSave} t={t} />}
|
||||
{selectedSection === "settings" && (
|
||||
<SettingsSection envVars={context.env_vars} onSave={handleSettingsSave} t={t} />
|
||||
)}
|
||||
{selectedSection === "translations" && (
|
||||
<TranslationsSection languages={context.translations} onRefresh={loadContext} t={t} />
|
||||
)}
|
||||
</PageLayout>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user