From f29a6467327b5b704456f6bc30c93b14a5a8d58d Mon Sep 17 00:00:00 2001 From: weed33834 Date: Sat, 8 Aug 2026 12:26:00 +0000 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=A4=B1=E8=B4=A5=E4=B8=8E=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=A4=B1=E8=B4=A5=EF=BC=8C=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20README=20=E8=AE=B8=E5=8F=AF=E8=AF=81=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - backend/requirements.txt: 补充缺失的 pydantic-settings 依赖 (config.py 依赖 BaseSettings,但该包未被 fastapi/pydantic 传递依赖) - frontend/src/vite-env.d.ts: 新增 Vite 类型声明文件,修复 tsc 报错 TS2882(side-effect import of './index.css') - frontend/src/pages/ModelConfig.tsx: 将渲染体内直接调用 load() 改为 useEffect,消除 React 反模式(渲染期 setState) - README.md / README.zh-CN.md / README.zh-TW.md: 修正 License 段 描述,与实际 MIT LICENSE 文件保持一致 --- README.md | 2 +- README.zh-CN.md | 2 +- README.zh-TW.md | 2 +- backend/requirements.txt | 1 + frontend/src/pages/ModelConfig.tsx | 7 +++++-- frontend/src/vite-env.d.ts | 1 + 6 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 frontend/src/vite-env.d.ts 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/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/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 @@ +/// From 1b3e292a14d25fd6b33e8c02fdd7692b61b0f31a Mon Sep 17 00:00:00 2001 From: weed33834 Date: Sat, 8 Aug 2026 15:08:39 +0000 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E6=A8=A1=E6=9D=BF=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E4=BF=9D=E7=95=99=E7=94=A8=E6=88=B7=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=20system=20prompt=20+=20History=20=E9=A1=B5=E9=9D=A2=20SVG=20?= =?UTF-8?q?=E9=A2=84=E8=A7=88=20+=20=E6=AD=BB=E4=BB=A3=E7=A0=81=E6=B8=85?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue #15: Generate.tsx 两个 useEffect 在模板切换时无条件覆盖 systemOverride,用户手改的 system prompt 被清空。改为仅在内容 为空或仍为模板默认值时才跟随模板,用户自定义后不再被覆盖。 Issue #14: History 页面只展示代码不渲染 SVG 预览。后端 /api/history/{id}/svg 已实现,前端 api.ts/History.tsx 未对接。 新增 getHistorySvg API,点击记录时加载 SVG 并在右侧展示。 其他清理: - 删除从未被引用的 SetupBanner.tsx 组件 - 删除从未被调用的 factory.from_db_row 函数 - templates.py 种子日志从 print 改为 logging.warning - .gitignore 补充 *.tsbuildinfo / vite.config.d.ts / vite.config.js - git rm --cached 清理已提交的构建产物 --- .gitignore | 3 +++ backend/app/providers/factory.py | 13 ---------- backend/app/routes/templates.py | 3 ++- frontend/src/components/SetupBanner.tsx | 16 ------------- frontend/src/lib/api.ts | 1 + frontend/src/pages/Generate.tsx | 13 +++++----- frontend/src/pages/History.tsx | 32 ++++++++++++++++++++++++- frontend/tsconfig.node.tsbuildinfo | 1 - frontend/tsconfig.tsbuildinfo | 1 - frontend/vite.config.d.ts | 2 -- frontend/vite.config.js | 11 --------- 11 files changed, 44 insertions(+), 52 deletions(-) delete mode 100644 frontend/src/components/SetupBanner.tsx delete mode 100644 frontend/tsconfig.node.tsbuildinfo delete mode 100644 frontend/tsconfig.tsbuildinfo delete mode 100644 frontend/vite.config.d.ts delete mode 100644 frontend/vite.config.js 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/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/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/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", - }, - }, -});