diff --git a/.gitignore b/.gitignore index 9a92f72..ac778fa 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ backend/.env *.pyc __pycache__/ .vite/ +*.tsbuildinfo +frontend/vite.config.d.ts +frontend/vite.config.js diff --git a/README.md b/README.md index 6224a87..1f30a34 100644 --- a/README.md +++ b/README.md @@ -292,7 +292,7 @@ The figures below were generated entirely by PlotCraft — natural language in, ## License -This repository does not currently declare an open-source license. Until a LICENSE file is added, all rights are reserved by the author by default. You may refer to the code for reference, but please contact the author for permission before redistribution, derivative work, or commercial use. +This project is licensed under the MIT License — see the [LICENSE](./LICENSE) file for details. You are free to use, modify, and distribute this software, provided the copyright notice and license text are included. --- diff --git a/README.zh-CN.md b/README.zh-CN.md index 0fb467c..bdc67f1 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -291,7 +291,7 @@ npm run dev ## 许可证 -本仓库当前未声明开源许可证。在添加 LICENSE 文件之前,默认适用作者保留全部版权的隐式条款——可参考使用,但二次分发 / 衍生 / 商用前请联系作者授权。 +本项目基于 MIT 许可证开源——详见 [LICENSE](./LICENSE) 文件。您可以自由使用、修改和分发本软件,但需保留版权声明与许可文本。 --- diff --git a/README.zh-TW.md b/README.zh-TW.md index b9d95e9..7226a53 100644 --- a/README.zh-TW.md +++ b/README.zh-TW.md @@ -291,7 +291,7 @@ npm run dev ## 授權條款 -本倉庫當前未宣告開源授權條款。在新增 LICENSE 檔案之前,預設適用作者保留全部版權的隱式條款——可參考使用,但再散布 / 衍生 / 商用前請聯絡作者授權。 +本專案基於 MIT 授權條款開源——詳見 [LICENSE](./LICENSE) 檔案。您可以自由使用、修改和散布本軟體,但需保留版權聲明與授權文字。 --- diff --git a/backend/app/providers/factory.py b/backend/app/providers/factory.py index c12f310..59f62f1 100644 --- a/backend/app/providers/factory.py +++ b/backend/app/providers/factory.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json from typing import Any from .base import Provider @@ -19,15 +18,3 @@ def make_provider(provider: str, model_name: str, api_key: str, base_url: str = # 预留:未来接入 Replicate / FAL 物理化位图生成模型 raise NotImplementedError("replicate provider 接口已预留,首版未实现。") raise ValueError(f"未知 provider: {provider}") - - -def from_db_row(row) -> Provider: - """从 SQLite row 构造带解密 key 的 Provider。""" - from ..crypto import decrypt - return make_provider( - provider=row["provider"], - model_name=row["model_name"], - api_key=decrypt(row["api_key_enc"]), - base_url=row["base_url"], - extra=json.loads(row["extra"] or "{}"), - ) diff --git a/backend/app/routes/templates.py b/backend/app/routes/templates.py index df91a95..765ff8c 100644 --- a/backend/app/routes/templates.py +++ b/backend/app/routes/templates.py @@ -1,6 +1,7 @@ from __future__ import annotations import json +import logging from pathlib import Path from fastapi import APIRouter, HTTPException @@ -118,6 +119,6 @@ async def seed_templates_if_empty() -> int: ) n += 1 except Exception as exc: - print(f"[seed] 跳过 {fp.name}: {exc}") + logging.warning("跳过模板种子 %s: %s", fp.name, exc) await db.commit() return n diff --git a/backend/requirements.txt b/backend/requirements.txt index 638632a..383487c 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -4,5 +4,6 @@ aiofiles>=24.1.0 fastapi>=0.115.0 uvicorn[standard]>=0.32.0 python-dotenv>=1.0.1 +pydantic-settings>=2.5.0 openai>=1.55.0 google-genai>=0.3.0 diff --git a/frontend/src/components/SetupBanner.tsx b/frontend/src/components/SetupBanner.tsx deleted file mode 100644 index 640bae3..0000000 --- a/frontend/src/components/SetupBanner.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { useState } from "react"; - -const DEFAULT_MSG = `尚未初始化后端 .env 中的 ONE_ENCRYPT_KEY — 模型 API Key 无法加密保存。请在 backend 目录执行:\n\n python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"\n\n把输出的 44 字符密钥写到 backend/.env 的 ONE_ENCRYPT_KEY= 后面。`; - -export default function SetupBanner() { - const [dismissed, setDismissed] = useState(false); - if (dismissed) return null; - return ( -
- {DEFAULT_MSG} - -
- ); -} diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index 1176420..5120c34 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -101,6 +101,7 @@ export const api = { }), listHistory: (limit = 50) => req(`/api/history?limit=${limit}`), + getHistorySvg: (id: number) => req<{ svg: string }>(`/api/history/${id}/svg`), clearHistory: () => req("/api/history", { method: "DELETE" }), deleteHistory: (id: number) => req(`/api/history/${id}`, { method: "DELETE" }), }; diff --git a/frontend/src/pages/Generate.tsx b/frontend/src/pages/Generate.tsx index ea0e9ed..3c391a5 100644 --- a/frontend/src/pages/Generate.tsx +++ b/frontend/src/pages/Generate.tsx @@ -22,6 +22,7 @@ export default function GeneratePage() { const [code, setCode] = useState(""); const [originalCode, setOriginalCode] = useState(""); const [showDiff, setShowDiff] = useState(false); + const [tplSystemPrompt, setTplSystemPrompt] = useState(""); const svgRef = useRef(null); const abortRef = useRef(null); @@ -52,15 +53,15 @@ export default function GeneratePage() { if (tpl?.user_template && !userPrompt) { setUserPrompt(tpl.user_template); } - if (tpl?.system_prompt) setSystemOverride(tpl.system_prompt); + // 仅当用户未自定义 system prompt(内容为空或仍为上一个模板的默认值)时才跟随模板 + const newDefault = tpl?.system_prompt || ""; + if (systemOverride === "" || systemOverride === tplSystemPrompt) { + setSystemOverride(newDefault); + } + setTplSystemPrompt(newDefault); // eslint-disable-next-line react-hooks/exhaustive-deps }, [templateId]); - // 模板切换时刷新 systemOverride(当用户没自定义时跟模板走) - useEffect(() => { - if (tpl) setSystemOverride(tpl.system_prompt || ""); - }, [tpl]); - async function run() { if (!modelId) { setErr("请先在「模型」页配置 AI 模型"); diff --git a/frontend/src/pages/History.tsx b/frontend/src/pages/History.tsx index d134186..7c06918 100644 --- a/frontend/src/pages/History.tsx +++ b/frontend/src/pages/History.tsx @@ -8,6 +8,7 @@ import { vscodeDark } from "@uiw/codemirror-theme-vscode"; export default function HistoryPage() { const [items, setItems] = useState([]); const [active, setActive] = useState(null); + const [svg, setSvg] = useState(null); const [msg, setMsg] = useState(""); async function load() { @@ -21,6 +22,19 @@ export default function HistoryPage() { load(); }, []); + async function selectRecord(r: GenerationRecord) { + setActive(r); + setSvg(null); + if (r.status === "success") { + try { + const res = await api.getHistorySvg(r.id); + setSvg(res.svg); + } catch { + // SVG 可能不存在(如旧记录),静默处理 + } + } + } + async function clearAll() { if (!confirm("清空全部历史?")) return; await api.clearHistory(); @@ -52,7 +66,7 @@ export default function HistoryPage() { items.map((r) => (
  • setActive(r)} + onClick={() => selectRecord(r)} className={`p-3 border rounded cursor-pointer text-sm ${ active?.id === r.id ? "bg-slate-100 border-slate-400" : "hover:bg-slate-50" }`} @@ -104,6 +118,22 @@ export default function HistoryPage() { editable={false} /> + {active.status === "success" && ( +
    +
    SVG 预览
    +
    + {svg ? ( +
    + ) : ( +
    加载中…
    + )} +
    +
    + )}
    ) : (
    点击左侧查看详情。
    diff --git a/frontend/src/pages/ModelConfig.tsx b/frontend/src/pages/ModelConfig.tsx index 338c5e6..5a48e0e 100644 --- a/frontend/src/pages/ModelConfig.tsx +++ b/frontend/src/pages/ModelConfig.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import type { ModelConfig, ModelConfigInput } from "../lib/api"; import { api } from "../lib/api"; @@ -37,7 +37,10 @@ export default function ModelConfigPage() { } // 第一次进入时加载 - if (loading === false && models.length === 0 && !msg) load(); + useEffect(() => { + load(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); function reset() { setEditing({ ...empty }); diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/tsconfig.node.tsbuildinfo b/frontend/tsconfig.node.tsbuildinfo deleted file mode 100644 index 6bb3f9a..0000000 --- a/frontend/tsconfig.node.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"version":"7.0.2","root":[135],"packageJsons":["./node_modules/@oxc-project/types/package.json","./node_modules/@rolldown/pluginutils/package.json","./node_modules/@tailwindcss/vite/package.json","./node_modules/@vitejs/plugin-react/package.json","./node_modules/jiti/package.json","./node_modules/lightningcss/package.json","./node_modules/postcss/package.json","./node_modules/rolldown/package.json","./node_modules/source-map-js/package.json","./node_modules/vite/package.json","./package.json"],"missingPackageJsons":["./node_modules/@rolldown/plugin-babel/package.json","./node_modules/@rolldown/pluginutils/dist/filter/package.json","./node_modules/@rolldown/pluginutils/dist/package.json","./node_modules/@tailwindcss/vite/dist/package.json","./node_modules/@types/babel-plugin-react-compiler/package.json","./node_modules/@types/esbuild/package.json","./node_modules/@types/less/package.json","./node_modules/@types/node/package.json","./node_modules/@types/rolldown__plugin-babel/package.json","./node_modules/@types/sass-embedded/package.json","./node_modules/@types/sass/package.json","./node_modules/@types/stylus/package.json","./node_modules/@types/terser/package.json","./node_modules/@vitejs/devtools/package.json","./node_modules/@vitejs/plugin-react/dist/package.json","./node_modules/@vitejs/plugin-react/types/package.json","./node_modules/babel-plugin-react-compiler/package.json","./node_modules/esbuild/package.json","./node_modules/less/package.json","./node_modules/lightningcss/node/package.json","./node_modules/node/package.json","./node_modules/postcss/lib/package.json","./node_modules/rolldown/dist/package.json","./node_modules/rolldown/dist/shared/package.json","./node_modules/rolldown/filter/package.json","./node_modules/rolldown/parseAst/package.json","./node_modules/rolldown/plugins/package.json","./node_modules/rolldown/utils/package.json","./node_modules/sass-embedded/package.json","./node_modules/sass/package.json","./node_modules/stylus/package.json","./node_modules/sugarss/package.json","./node_modules/terser/package.json","./node_modules/tsx/package.json","./node_modules/vite/dist/node/chunks/package.json","./node_modules/vite/dist/node/package.json","./node_modules/vite/dist/package.json","./node_modules/vite/types/internal/package.json","./node_modules/vite/types/package.json","./node_modules/yaml/package.json"],"fileNames":["lib.es5.d.ts","lib.es2015.d.ts","lib.es2016.d.ts","lib.es2017.d.ts","lib.es2018.d.ts","lib.es2019.d.ts","lib.es2020.d.ts","lib.es2021.d.ts","lib.es2022.d.ts","lib.es2023.d.ts","lib.es2024.d.ts","lib.es2025.d.ts","lib.dom.d.ts","lib.dom.iterable.d.ts","lib.dom.asynciterable.d.ts","lib.webworker.importscripts.d.ts","lib.scripthost.d.ts","lib.es2015.core.d.ts","lib.es2015.collection.d.ts","lib.es2015.generator.d.ts","lib.es2015.iterable.d.ts","lib.es2015.promise.d.ts","lib.es2015.proxy.d.ts","lib.es2015.reflect.d.ts","lib.es2015.symbol.d.ts","lib.es2015.symbol.wellknown.d.ts","lib.es2016.array.include.d.ts","lib.es2016.intl.d.ts","lib.es2017.arraybuffer.d.ts","lib.es2017.date.d.ts","lib.es2017.object.d.ts","lib.es2017.sharedmemory.d.ts","lib.es2017.string.d.ts","lib.es2017.intl.d.ts","lib.es2017.typedarrays.d.ts","lib.es2018.asyncgenerator.d.ts","lib.es2018.asynciterable.d.ts","lib.es2018.intl.d.ts","lib.es2018.promise.d.ts","lib.es2018.regexp.d.ts","lib.es2019.array.d.ts","lib.es2019.object.d.ts","lib.es2019.string.d.ts","lib.es2019.symbol.d.ts","lib.es2019.intl.d.ts","lib.es2020.bigint.d.ts","lib.es2020.date.d.ts","lib.es2020.promise.d.ts","lib.es2020.sharedmemory.d.ts","lib.es2020.string.d.ts","lib.es2020.symbol.wellknown.d.ts","lib.es2020.intl.d.ts","lib.es2020.number.d.ts","lib.es2021.promise.d.ts","lib.es2021.string.d.ts","lib.es2021.weakref.d.ts","lib.es2021.intl.d.ts","lib.es2022.array.d.ts","lib.es2022.error.d.ts","lib.es2022.intl.d.ts","lib.es2022.object.d.ts","lib.es2022.string.d.ts","lib.es2022.regexp.d.ts","lib.es2023.array.d.ts","lib.es2023.collection.d.ts","lib.es2023.intl.d.ts","lib.es2024.arraybuffer.d.ts","lib.es2024.collection.d.ts","lib.es2024.object.d.ts","lib.es2024.promise.d.ts","lib.es2024.regexp.d.ts","lib.es2024.sharedmemory.d.ts","lib.es2024.string.d.ts","lib.es2025.collection.d.ts","lib.es2025.float16.d.ts","lib.es2025.intl.d.ts","lib.es2025.iterator.d.ts","lib.es2025.promise.d.ts","lib.es2025.regexp.d.ts","lib.decorators.d.ts","lib.decorators.legacy.d.ts","lib.es2025.full.d.ts","./node_modules/vite/types/hmrpayload.d.ts","./node_modules/vite/dist/node/chunks/modulerunnertransport.d.ts","./node_modules/vite/types/customevent.d.ts","./node_modules/rolldown/dist/shared/logging-bsnejils.d.mts","./node_modules/@oxc-project/types/types.d.ts","./node_modules/rolldown/dist/shared/binding-d26qphwg.d.mts","./node_modules/@rolldown/pluginutils/dist/filter/index.d.mts","./node_modules/@rolldown/pluginutils/dist/index.d.mts","./node_modules/rolldown/dist/shared/define-config-bhj90aev.d.mts","./node_modules/rolldown/dist/index.d.mts","./node_modules/rolldown/dist/parse-ast-index.d.mts","./node_modules/vite/types/internal/rolluptypecompat.d.ts","./node_modules/rolldown/dist/shared/constructors-bbwpse2x.d.mts","./node_modules/rolldown/dist/plugins-index.d.mts","./node_modules/rolldown/dist/shared/transform-bpruvqez.d.mts","./node_modules/rolldown/dist/utils-index.d.mts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/vite/types/internal/esbuildoptions.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/types/internal/terseroptions.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/lightningcss/node/ast.d.ts","./node_modules/lightningcss/node/targets.d.ts","./node_modules/lightningcss/node/index.d.ts","./node_modules/vite/types/internal/lightningcssoptions.d.ts","./node_modules/vite/types/internal/csspreprocessoroptions.d.ts","./node_modules/rolldown/dist/filter-index.d.mts","./node_modules/vite/types/importglob.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@vitejs/plugin-react/types/optionaltypes.d.ts","./node_modules/@vitejs/plugin-react/dist/index.d.ts","./node_modules/@tailwindcss/vite/dist/index.d.mts","./vite.config.ts"],"fileInfos":[{"version":"16934abaab7026ac114da441aabea1a0","affectsGlobalScope":true,"impliedNodeFormat":1},"d4306fb2e47f74835e8674ffac07d76f","e437c5c1302869326c3bb93da85bbbcf","e4324975a566567b21d350615f1fc6ac","333b1b9a2a9ac3b8497dba5c63b5ba50","6cffacd662b6eb5fa7a36aa2ea366bfa","b4c34f9c23304dbef2d23698637ed638","e5cb86a5fc491796ecd1d2dd348d208f","feb6c6fb19cdb246a5d8acb36a6901c7","9443a7f109277ffaa79d893ed2549995","793cee405385076e27c24f409659dccd","09f69c6610266eaee1ac9e3e30df2c71",{"version":"aae8996e8b5684814785a42cbbefcd79","affectsGlobalScope":true,"impliedNodeFormat":1},"abad6dd56cc8caf095c165df8124d237","abad6dd56cc8caf095c165df8124d237",{"version":"2a9941db0809c9ad0e8837ed629b1dcc","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d051b93324f36bcc68d152a5ca0988cd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"926204c28cd3d073865348473ae28d2e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f25e42c801b2cb3cf2b39792006a9beb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6344b55f26a4e81d9608777dbfb877dd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3c0ed28e53d3695b363e256ec1c023fd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4c2761daba7f17141c25baa0821ac5da","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b87656acabd63e69379ff6ffcfe52fc7","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"597469522da047a5af5222cc6989f405","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1708ea4d34dc37fadadc63ca01127e80","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"55d97a8c6fbf34a30450a7b1e5f7a298","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0ee05eb59426d33e374226d8dcfa708b","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e347c14030993906efcfbb88915b6a05","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b0231263857c9b6a03641acdc9280ceb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3b15c4a83b598cacb4067676e6f0abed","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b417d97b7934cef63b1889abec0bbfbf","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"09a6cf4032ebba60ce22a501e663f881","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2b056277dd138e8f5650fc04e20eaa8d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e22cc07e3f3cc242ba52fa3f8ea1fc58","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c45da767a1bfbb220848df1bc4029e4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b44c3e0fbaf2130cdcf6ac38b120ffa1","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b612fb5cf8e5d964b92063a75207632a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02705151a5e1551b9162a9ed8ab763f7","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"41025e398be9215d32e4337335da8f0b","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"52684c2b1f353a5538e4f275182a54cd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6dedb6a4f90d1df3a6fbe5693e44886c","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ca3f36fe3562c07e0f0d71c2bebd3f6d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"409974d6129befbb8226ddd1c6558568","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4d9cfde2a1ae1b4925f1f9bc10848e5d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7e1daecc66dd564144e3bb1a0266b5fd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a8e1d9bb35fd0637f2f9fd2b2a54f2ec","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4f168501772a6543182765bfd5f2fbfe","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a19c80aad1b2162103496f5ba293a732","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b69afa63cd5d059851c78adb2856ee09","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ae2fc5d954e9b0f5feee3d481b953c27","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1cfd3091a071d8b6feec15277643bafe","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1da2c1f258970fd3cc91184f69e91a9d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a0d87491913d843139e0c993650a3235","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4ef72aa378127e7b7abba915b0110b1e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3ec74c6a7d4463f0254db3a74cf75646","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"84c2bdfa470d075526cce6322d81b0b6","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0b3844c2b8c73e4e1ab91431411cad11","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4fc71cf4a15b8d99675a31df77f26e07","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d1b49564ddaeca3df5b6dbae925d2242","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6a25be566d60ccfc2d6e8b7bfdeefa83","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8a20e27646985dfd58c57ca6566553dd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9969f02ad3cdcbf4f709405cda44167f","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c9be4792a7a4f42c15ae7360bf28779","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8cf777fe00349b71ee9c4b6f3fe7fd19","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"74f96bc192530c9723f572bfff3d3078","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1df91c56b25955c56387426f378173c5","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"38856f70edcd2115c355d96ec77cc09e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"de8700156c1275465bcd473c28b359aa","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d47cfdb6ede40518357bb5a4cd7cd9fb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6e5773860cd9e5b15e683113f642ab47","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"30ff5fe1682f7fcd629880476ca3c2e0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"bf23d7d1b40b9015b694ddc2f011752f","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2cc585d42e2c548f9f24a30a1989fd33","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"713906ce9d332d2242b7f05ed9304be3","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0219894bfe5042c7e1aa2d22e4a91ed0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6009ffff7e43c93318804d2d28e37fe3","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"03be89b227587594fbb50509fc1c2e45","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b30df52dc24740c0bad7c55c3511df7d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ab8d3c9b5ed5c2ab8f383607eef439f0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f64453cbf9671f28158677fa5c43967a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"33f317af5428801f944a478d2c1e38e5","affectsGlobalScope":true,"impliedNodeFormat":1},"fa32c7ce71ec8f289361748a5aae54e3",{"version":"c5156ca866ebe97e9684210705e65b18","impliedNodeFormat":99},{"version":"3d553ca0b8e36d0e9f05a6b80fb3492d","impliedNodeFormat":99},{"version":"fbf663846b7dde503a3b7f73ff7bcfaf","impliedNodeFormat":99},{"version":"70736090e47d06e39a47151da86649e6","impliedNodeFormat":99},{"version":"f51a4b1a8ce8a7c4bb8caa49c9d6bf85","impliedNodeFormat":99},{"version":"20552ed9a291176107e089d26063f4f5","impliedNodeFormat":99},{"version":"c7c81757112b2e14e18f46fea467737c","impliedNodeFormat":99},{"version":"2c185a70d24c71be1ca00db56244fffa","impliedNodeFormat":99},{"version":"f90f2a203339db6ea8b456f650840746","impliedNodeFormat":99},{"version":"e4686561bfa10fa05355ebd1b8b41c7c","impliedNodeFormat":99},{"version":"97807d2ad11bbdcaa3dd425df0a5e849","impliedNodeFormat":99},{"version":"0ce7a5ca2953e59ab5b36276b5ef5c6f","impliedNodeFormat":99},{"version":"779b6eb877a755af4d8c2894890834e6","impliedNodeFormat":99},{"version":"480381fa6791e119edad1598e5699a7d","impliedNodeFormat":99},{"version":"0a5c6e14f78d7107f94e619f35c7ce5a","impliedNodeFormat":99},{"version":"9517e2a1b3a960610a1ea9f680705f5d","impliedNodeFormat":99},{"version":"4aeb817c2b1122f77bdaeb4e884e9479","impliedNodeFormat":99},{"version":"31fca6603097de04dde1774dd2a14d9e","impliedNodeFormat":99},{"version":"c0baf3c013fac054093b82b6e6b0119d","impliedNodeFormat":99},{"version":"e3e2e7f1604b33a14e5fa307c6ce1b66","impliedNodeFormat":99},{"version":"980817302a5ec1196f07b91a7a9f426f","impliedNodeFormat":99},"07e14c037c571c6a65227f6028ba71bb","2db12d6b2f63775f9d81cf84e892d546","45d63fb8c396dc6c00afbb10701bfecd","00bd2083b15c16819de54ef8ac00b5ce","944a04f04959347f2e7bce3056aa2e75","a4e012a80d7cbf31ab47f7414b9d5ae3","93560bdaac133522c0b67330b05b478c","bc895a5015f48c32aa76d8392e6b7f44","13a7c35f2ac575e7df53b738c45ba30b","830857b2b53ea4bb41fcb5cd89c9a278","c6ff6ad4a92bfabbd0a356c908d63dbc","d71000ae0d453d65244d10c346da73cf","c3a96b81945368370cc912e54587f9a1","22c6d044369eba710f2be66138ca050d","9b6007b669bc68f577f656e90d3cf07f","9c7e04c49400ef8937848f6251bfb9e4","13a190261afbec6e4f56fea0313dc00e","a4c51ad6ea7b592e986056fef122852a","a6ccb5d656b21fe70760bc2f849c86d2",{"version":"c1a1a61c9a11e644e0b25a5ec786fb34","impliedNodeFormat":99},"8732a969452ed1c5d9dd401daad1804f","6302706de0fd1ac9210684ed96358acf","54fa7cdc24d093da530e4baf9df22434",{"version":"a87df8b2cf14df372c046eeec97b3bd8","impliedNodeFormat":99},{"version":"7ab823c2a97a85ce0318b98926d0bc15","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"57f8e550d027611c6a8ebf732f524654","impliedNodeFormat":99},{"version":"96c6682f9fb9e0e7829a93fac6a6bb7c","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7e9088d7254871d98b7b5571c2878661","impliedNodeFormat":99},{"version":"e82c10169fca2d698ebe98f8c43bec3c","impliedNodeFormat":99},{"version":"e902518979c01b06848929d38f63b991","impliedNodeFormat":99},{"version":"410f86c725d4b5456d48af185e27293d","impliedNodeFormat":99},{"version":"6849d4d4d7361eab0cdabc7f8555b15a","signature":"9280ac14f5d826078a674753c3546571","impliedNodeFormat":1}],"fileIdsList":[[89],[131],[131,132],[124,125],[119],[117,119],[108,116,117,118,120,122],[106],[109,114,119,122],[105,122],[109,110,113,114,115,122],[109,110,111,113,114,122],[106,107,108,109,110,114,115,116,118,119,120,122],[122],[104,106,107,108,109,110,111,113,114,115,116,117,118,119,120,121],[104,122],[109,111,112,114,115,122],[113,122],[114,115,119,122],[107,117],[91],[86,88,91],[87,88],[88,91,95],[87],[88,91],[86,87,88,90],[86,88],[87,88,97],[83],[83,84,85,92,93,94,96,98,100,101,102,103,123,127,128,129,130],[83,84,85,99],[85],[126],[92,102,131],[92,131],[131,133,134]],"options":{"composite":true,"module":99,"skipLibCheck":true,"allowSyntheticDefaultImports":true},"referencedMap":[[90,1],[134,2],[133,3],[126,4],[120,5],[118,6],[119,7],[107,8],[108,6],[115,9],[106,10],[111,11],[112,12],[117,13],[123,14],[122,15],[105,16],[113,17],[114,18],[109,19],[116,5],[110,20],[129,21],[92,22],[93,23],[96,24],[88,25],[95,26],[91,27],[97,28],[98,29],[84,30],[131,31],[100,32],[85,30],[99,33],[127,34],[94,35],[102,36],[135,37]],"latestChangedDtsFile":"./vite.config.d.ts"} \ No newline at end of file diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo deleted file mode 100644 index 50b3753..0000000 --- a/frontend/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"version":"7.0.2","root":["./src/app.tsx","./src/main.tsx","./src/components/setupbanner.tsx","./src/lib/api.ts","./src/pages/generate.tsx","./src/pages/history.tsx","./src/pages/modelconfig.tsx","./src/pages/templates.tsx"],"packageJsons":["./node_modules/@babel/runtime/package.json","./node_modules/@codemirror/autocomplete/package.json","./node_modules/@codemirror/commands/package.json","./node_modules/@codemirror/lang-python/package.json","./node_modules/@codemirror/language/package.json","./node_modules/@codemirror/lint/package.json","./node_modules/@codemirror/search/package.json","./node_modules/@codemirror/state/package.json","./node_modules/@codemirror/theme-one-dark/package.json","./node_modules/@codemirror/view/package.json","./node_modules/@lezer/common/package.json","./node_modules/@lezer/highlight/package.json","./node_modules/@lezer/lr/package.json","./node_modules/@types/react-dom/package.json","./node_modules/@types/react/package.json","./node_modules/@uiw/codemirror-extensions-basic-setup/esm/package.json","./node_modules/@uiw/codemirror-extensions-basic-setup/package.json","./node_modules/@uiw/codemirror-theme-vscode/esm/package.json","./node_modules/@uiw/codemirror-theme-vscode/package.json","./node_modules/@uiw/codemirror-themes/esm/package.json","./node_modules/@uiw/codemirror-themes/package.json","./node_modules/@uiw/react-codemirror/esm/package.json","./node_modules/@uiw/react-codemirror/package.json","./node_modules/codemirror/package.json","./node_modules/cookie/package.json","./node_modules/csstype/package.json","./node_modules/diff/libesm/package.json","./node_modules/diff/package.json","./node_modules/react-dom/package.json","./node_modules/react-router-dom/package.json","./node_modules/react-router/package.json","./node_modules/react/package.json","./node_modules/style-mod/package.json","./package.json"],"missingPackageJsons":["./node_modules/@codemirror/autocomplete/dist/package.json","./node_modules/@codemirror/lang-python/dist/package.json","./node_modules/@codemirror/language/dist/package.json","./node_modules/@codemirror/state/dist/package.json","./node_modules/@codemirror/theme-one-dark/dist/package.json","./node_modules/@codemirror/view/dist/package.json","./node_modules/@lezer/common/dist/package.json","./node_modules/@lezer/highlight/dist/package.json","./node_modules/@lezer/lr/dist/package.json","./node_modules/@types/react-dom/client/package.json","./node_modules/@types/react/jsx-runtime/package.json","./node_modules/@uiw/react-codemirror/esm/theme/package.json","./node_modules/cookie/dist/package.json","./node_modules/diff/libesm/convert/package.json","./node_modules/diff/libesm/diff/package.json","./node_modules/diff/libesm/patch/package.json","./node_modules/react-dom/client/package.json","./node_modules/react-router-dom/dist/package.json","./node_modules/react-router/dist/development/package.json","./node_modules/react-router/dist/package.json","./node_modules/react-router/dom/package.json","./node_modules/react/jsx-runtime/package.json","./node_modules/style-mod/src/package.json"],"semanticErrors":true} \ No newline at end of file diff --git a/frontend/vite.config.d.ts b/frontend/vite.config.d.ts deleted file mode 100644 index 340562a..0000000 --- a/frontend/vite.config.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: import("vite").UserConfig; -export default _default; diff --git a/frontend/vite.config.js b/frontend/vite.config.js deleted file mode 100644 index 09d19e9..0000000 --- a/frontend/vite.config.js +++ /dev/null @@ -1,11 +0,0 @@ -import { defineConfig } from "vite"; -import react from "@vitejs/plugin-react"; -import tailwindcss from "@tailwindcss/vite"; -export default defineConfig({ - plugins: [react(), tailwindcss()], - server: { - proxy: { - "/api": "http://127.0.0.1:8000", - }, - }, -});