NL2CGA 自主学习系统开发计划

让自然语言生成引擎随语法演进自动进化 — 2026 Q2~Q4 技术路线图

🚀 版本控制与网站修复发布流程

当前生产环境的所有代码均直接部署在 /www/wwwroot/ 下,本地 git 仓库没有配置 remote,也没有启用 CI/CD。因此每一次文件修改都会直接影响线上。下面的流程图与说明同时适用于“引擎发版”和“前端热修”两条独立流水线。

关键约定

  • 引擎(Engine)与前端站点分开发布:引擎更新需要编译、跑测试、替换 dist;前端 HTML/JS/CSS 修复直接改文件即可。
  • 先备份再动手:任何改动前先打包 /www/wwwroot/www.rulepackage.com/www/wwwroot/cgajs-api/etc/nginx/root/backups/
  • 本地提交但无推送:目前 repo 没有 remote,git commit 只保留本地历史;远程仓库与 CI/CD 需后续单独建立。
  • 回滚即还原备份:出问题时用备份 tar 包覆盖即可,无需复杂回滚脚本。

引擎发版流程(Engine Release)

Track A · 代码 → 测试 → 构建 → 生产
1编辑引擎源码
/www/wwwroot/cgajs-engine/src 中修改 TypeScript 代码、语法规则、编译器或运行时。
2本地测试
运行 npm test 确认全部用例通过;必要时补充新的 e2e / 单元测试。
3构建 dist
npm run build 生成新的 dist/。此步骤会短时占用 1–2 GB 内存与大量 CPU,建议在闲时执行。
4备份旧 dist
脚本自动打包当前 dist、前端文件、nginx 配置,并记录 EngineVersion 行号。
5发布到生产
复制 dist/www/wwwroot/cgajs-api/engine,重启 cgajs-api.service,更新数据库 EngineVersion 表。

前端/网站修复流程(Frontend Hotfix)

Track B · 备份 → 修改 → 验证 → 提交
1全站备份
tar czf /root/backups/www.rulepackage.com-YYYYMMDD-HHMMSS.tgz /www/wwwroot/www.rulepackage.com
2直接修改线上文件
编辑 /www/wwwroot/www.rulepackage.com/**/*.html*.js*.css。由于没有 staging,所有改动即时生效。
3浏览器验证
访问对应页面,检查 Console 无报错、交互正常、移动端布局未崩。
4本地 git 提交
git add -A && git commit -m "fix: 修复 XXX"。仅本地记录,不推送到远程。
5更新 updata.html
如果修复涉及用户可见功能或重要 Bug,在本文档“更新日志”中追加条目说明。

回滚方案

发现问题后的标准回滚

  1. 引擎回滚:找到最近一次备份 tar 包,解压 cgajs-api-*.tgz 中的旧 dist 覆盖 /www/wwwroot/cgajs-api/engine,重启服务;或把数据库 EngineVersion 改回上一版本号。
  2. 前端回滚tar xzf /root/backups/www.rulepackage.com-YYYYMMDD-HHMMSS.tgz -C /(tar 包内路径以 /www/wwwroot/www.rulepackage.com 开头),即可还原全部 HTML/JS/CSS。
  3. nginx 回滚:若改动了站点配置,使用 nginx-*.tgz 还原 /etc/nginx/sites-enabled/,执行 nginx -t && systemctl reload nginx

版本号与数据库记录

对象当前位置 / 字段更新时机回滚依据
引擎版本数据库 EngineVersion 表;站点页脚显示的版本号执行构建脚本或 admin 面板“构建并发布到生产”后备份中的 dist + 数据库上一行记录
前端版本无显式版本号;以 git log 本地 commit 为准每次修改文件后/root/backups/ 下的 tar 包
nginx 配置/etc/nginx/sites-enabled/*.rulepackage.com域名、HTTPS、子站点调整时/root/backups/nginx-*.tgz
环境变量/etc/cgajs/cgajs-api.env调整 worker 数量、数据库连接、引擎池等备份文件或手动回写

当前状态与后续改进

🏗️ NL2CGA 与 Marketplace CGA 资产统一方案

本方案已实施 P0+P1。当前分散在 Python 代码、参数化模板文件和 Marketplace 数据库中的 CGA 资产,已统一进入可验证、可检索、可版本化的 cga_assets 数据层;Marketplace 中的失败示例已被标记,不会污染 NL2CGA。

一、现状

来源存储位置数量/规模当前问题
NL2CGA 预构建模板 nl2cga_service.py 中的 PREBUILT_CGA_LIBRARY 硬编码列表 ~20 个模板 修改需发版 API;无法热更新;无编译校验
NL2CGA 参数化模板 nl2cga/template_engine/template_library.py 以中国古建为主 与预构建模板分两套体系;DB 中无记录
Marketplace CGA 示例 cga_files 表 + 磁盘文件 1077 个文件 大量示例未通过编译校验;直接用于 NL2CGA 会污染生成结果
学习闭环 cga_success_cases / cga_failure_cases / learning_queue 持续写入 成功案例未与资产库打通;失败案例未阻止再次入库

二、核心原则

三、统一数据模型 cga_assets

CREATE TABLE cga_assets (
  id SERIAL PRIMARY KEY,
  asset_type VARCHAR(32),       -- prebuilt / parameterized_template / example / user_work
  source VARCHAR(32),           -- nl2cga_prebuilt / nl2cga_parameterized / marketplace / user_upload
  title VARCHAR(255),
  slug VARCHAR(128) UNIQUE,
  description TEXT,
  cga_code TEXT NOT NULL,

  -- 参数化模板专属
  params JSONB,                 -- { lot_width: {default, min, max, type, label}, ... }

  -- 检索与分类
  keywords TEXT[],              -- NL2CGA 意图关键词,如 ["住宅", "简单", "house"]
  nl2cga_tags TEXT[],           -- NL2CGA 类型标签,如 ["residential", "simple"]
  marketplace_tags TEXT[],      -- Marketplace 标签,如 ["建筑", "屋顶"]
  marketplace_category VARCHAR(64), -- 一级分类:建筑 / 植被 / 道路 / 城市 / 示例 / 组件

  -- 来源关联
  author_id INT,
  original_marketplace_id INT,  -- 关联 cga_files.id(可选)

  -- Marketplace 商业字段
  price FLOAT DEFAULT 0,
  is_public BOOLEAN DEFAULT TRUE,
  is_approved BOOLEAN DEFAULT FALSE,
  download_count INT DEFAULT 0,
  sales_count INT DEFAULT 0,

  -- 编译安全门
  compile_status VARCHAR(20),   -- pending / success / failed / timeout
  compile_error TEXT,
  verified_at TIMESTAMP,
  engine_version VARCHAR(32),
  nl2cga_ready BOOLEAN DEFAULT FALSE,
  quality_score FLOAT,          -- 可基于通过率、评分、使用次数计算

  metadata JSONB,               -- { thumbnail, lot_size, complexity, style, ... }
  created_at TIMESTAMP DEFAULT now(),
  updated_at TIMESTAMP DEFAULT now()
);

CREATE INDEX idx_cga_assets_nl2cga_ready ON cga_assets(nl2cga_ready, source);
CREATE INDEX idx_cga_assets_keywords ON cga_assets USING GIN(keywords);
CREATE INDEX idx_cga_assets_marketplace_category ON cga_assets(marketplace_category);
CREATE INDEX idx_cga_assets_compile_status ON cga_assets(compile_status, engine_version);

四、分类体系设计

不建议把 Marketplace 的“商品分类”直接作为 NL2CGA 的模板分类,二者用途不同。

维度用途示例
nl2cga_tags 自然语言意图匹配 residential, office, tower, apartment, chinese_classical, modern, simple
marketplace_category 商品浏览与筛选 建筑 / 植被 / 道路 / 城市 / 示例教程 / 组件库
keywords 模糊搜索、同义词召回 ["住宅", "房子", "house", "别墅", "villa"]

如果未来希望 Marketplace 分类也能被 NL2CGA 识别,可新增 cga_category_mappings 映射表,例如:

marketplace_category | nl2cga_tag
---------------------|------------
建筑/整体            | residential
建筑/结构            | structural
城市/街区            | urban_block

五、安全门:编译校验流程

1资产入库
写入 cga_assetscompile_status='pending'nl2cga_ready=FALSE
2编译校验
后台任务调用 /api/v1/compile(使用默认 footprint)测试每个资产。
3标记结果
成功:更新 compile_status='success'nl2cga_ready=TRUE
失败:记录 compile_error,禁止进入 NL2CGA。
4版本漂移检测
每次引擎发版后,重新校验所有 nl2cga_ready=TRUE 的资产;未再次通过则降级。

NL2CGA 查询必须带过滤

db.query(CgaAsset)
  .filter(CgaAsset.nl2cga_ready == True)
  .filter(CgaAsset.compile_status == 'success')
  .filter(CgaAsset.engine_version == CURRENT_ENGINE_VERSION)
  .filter(CgaAsset.source.in_(['nl2cga_prebuilt','nl2cga_parameterized','marketplace_verified']))

六、NL2CGA 改造点

  1. 替换 PREBUILT_CGA_LIBRARY:将硬编码模板迁移到 cga_assetsmatch_prebuilt_cga() 改为 SQL/向量检索。
  2. 参数化模板入库template_library.py 中的模板以 asset_type='parameterized_template' 写入 cga_assets,保留 params 字段。
  3. RAG 训练数据隔离:NL2CGA 的 few-shot 示例只能从 cga_assets.nl2cga_ready=TRUEcga_success_cases 中抽取。
  4. 失败案例反哺:编译失败的 Marketplace 资产进入 cga_failure_cases,用于提示 AI 避免同类错误,但不会被检索。

七、Marketplace 改造点

  1. 列表源切换/api/v1/marketplace 改为查询 cga_assetssource='marketplace'is_public=TRUE 的记录。
  2. 分类字段标准化:上传表单增加 marketplace_category,与前端 CATEGORY_MAP 对齐。
  3. 校验徽章:卡片显示“已通过引擎校验”或“未校验”标签,未校验示例不可用于 NL2CGA。
  4. 权限控制:付费资产可设置 nl2cga_ready=FALSE 或仅限购买者调用,避免免费 NL2CGA 直接挪用付费内容。

八、分阶段实施计划

阶段工作影响预计周期
P0 建表 创建 cga_assets、索引、cga_category_mappings 仅新增表,不影响线上 1 天
P1 迁移 NL2CGA PREBUILT_CGA_LIBRARY 和参数化模板写入 cga_assets,并校验 旧接口继续可用 2 天
P2 校验 Marketplace 批量编译 1077 个 Marketplace 文件,标记 nl2cga_ready 可能发现大量失败示例 2–3 天
P3 切换 NL2CGA match_prebuilt_cga 改为查库;移除硬编码列表 NL2CGA 开始受安全门保护 2 天
P4 切换 Marketplace 列表/详情/上传改为 cga_assets;旧 cga_files 作为兼容视图 Marketplace 与 NL2CGA 共用资产池 3 天
P5 持续校验 引擎发版后自动重跑校验;新增资产自动入队 长期质量保障 持续

九、风险与应对

十、决策结论

  1. 实施范围:已执行 P0+P1,NL2CGA 模板现在从 cga_assets 读取并受编译安全门保护。
  2. Marketplace 分类:已同步改造,cga_filescga_assets 均新增 marketplace_category,列表/Feed 支持分类筛选。
  3. 付费资产可见性:付费 Marketplace 资产对 NL2CGA 可见,但受 nl2cga_access_policy='purchase' 控制;调用时检查购买记录或扣减余额。
  4. 历史失败示例:已启动后台批量编译校验,失败示例仅标记 compile_status='failed'nl2cga_ready=FALSE,不下架、不删除,等待人工审阅。

结论

统一是可行且推荐的,但前提是必须先建立编译校验安全门。NL2CGA 的模板结构与 Marketplace 的示例分类不宜直接合并,而是共用 cga_assets 数据层、各自维护分类标签、通过 nl2cga_ready 控制是否可被自然语言生成系统使用。这样既能丰富 NL2CGA 的模板来源,又能避免 Marketplace 的失败示例污染解析与生成能力。

🗺️ 系统架构图

本站所有子站点与后端服务围绕 CGA.js 引擎构成的整体架构如下。图中清晰展示了 IDE、函数库、NL2CGA、Marketplace、插件生态、文档等入口如何汇聚到 Nginx / FastAPI,最终由引擎 Worker Pool 执行并输出三维结果。

CGA.js 系统架构图

子站点说明

  • IDE(ide.html / IDEA / IDEB / IDEC):在线 CGA 编辑器,集成 CodeMirror、实时预览、代码补全、Marketplace 联动、Console 输出。
  • 函数库(ku.html / ku/*):309+ CGA 函数/操作的签名、实现状态、文档示例与搜索。
  • NL2CGA(nl2cga.html / api.rulepackage.com/nl2cga/*):自然语言生成 CGA 规则;包含模板库、意图识别、参数化模板、错误修复与自主学习数据飞轮。
  • Marketplace(marketplace.rulepackage.com / plugin.html):CGA 模块、材质、场景、DCC 插件(Blender / SketchUp / Unity / Unreal / Maya / 3ds Max / Houdini / CityEngine)的交易与版本化 registry。
  • 文档 / 学习(study.html / updata.html / docs/*):架构设计、更新日志、开发指南与能力评估报告。

📋 更新日志

全线架构梳理:四服务器分工与近期修复汇总 2026-06-17
architecture infra cross-site

随着 git.cityengine.cn 作为统一远端 Git 仓库投入使用,以及各站点持续修复,现对当前四服务器架构进行梳理,并汇总近期跨站改动。

一、当前服务器矩阵

公网 IP 负责域名 角色定位 核心技术栈
8.216.94.109 cgajs.com / api.cgajs.com / marketplace.cgajs.com CGA 引擎大脑 + IDE + NL2CGA 生成 FastAPI / Gunicorn / PostgreSQL 18 / Redis / Nginx / TypeScript 引擎
123.56.81.100 rulepackage.com / marketplace.rulepackage.com CGA 资产与 Marketplace 交易中心 FastAPI / Gunicorn / PostgreSQL 18 / Nginx / 通过反向隧道共享 cgajs.com 的 shared-memory
101.200.194.172 cityvistion.cn CityVision SaaS(AI 生成 + 3D 预览 + 付费套餐) FastAPI / Uvicorn / PostgreSQL 14 / Redis / Nginx / Three.js 前端
101.200.241.141 git.cityengine.cn / www.cityengine.cn 统一远端 Git 仓库 + WordPress 社区/商店门户 Gitea + Nginx + PHP 8.1 FPM + MariaDB 10.6 / WordPress 多站点

二、跨站协作关系

  • Git 权威:Gitea 托管在 101.200.241.141git.cityengine.cn),包含 cgajs-apicgajs-enginecgajs-frontendcityvistionnl2cga-serviceshared-memory 等仓库。
  • 引擎分发cgajs.com 构建 cgajs-engine/dist-stable,通过共享目录 / 推送脚本同步给 rulepackage.comcityvistion.cn
  • 共享内存rulepackage.com 通过反向 SSH 隧道挂载 cgajs.com:/www/wwwroot/shared-memory,实现跨站共享资源。
  • NL2CGA 独立 Workercgajs.comcgajs-api.service(:8010)与 cgajs-api-nl2cga.service(:8011)分离,降低核心 API 内存占用。
  • 支付网关cityvistion.cnrulepackage.com 均接入原生微信支付 V2 与支付宝当面付,独立配置。

三、近期跨站修复与改进

  • cityvistion.cn
    • 3D 渲染改为摄像机环绕(turntable),提升场景亮度与参数极限可见性。
    • Inspector 支持字符串/枚举参数(如 roof_type)实时生效。
    • 新增 /admin.html 卡片式管理后台,支持站点 UI 设置(旋转速度、标题轮播、光照等)实时调整。
    • 公共生成/下载接口接入配额扣减,今日用量可实时同步。
    • 新增 /public/classify 智能判断“城市场景/单个建筑”,OSM 地理编码改用 Open-Meteo,不同城市返回真实数据;城市场景先渲染占位建筑再细化。
    • /static/dashboard.html 菜单改为卡片式。
  • rulepackage.com
    • /billing.html 微信支付与支付宝支付修复并验证,二维码生成从 QRCode.toCanvas 改为兼容的 new QRCode()
    • 公共生成接口携带 API Key 时扣减配额。
  • cgajs.com
    • NL2CGA 独立 Worker 部署完成,主 API 内存占用大幅下降。
    • IDE 引擎资源路径统一迁移到 /assets/cgajs-engine,修复浏览器模块加载失败问题。
  • git.cityengine.cn
    • 作为统一远端 Git 仓库正式纳入架构;近期完成 WordPress 站点迁移(/root/cityengine-migration/)。

四、当前风险与建议

  • 生产即开发机:多个站点仍直接修改 /www/wwwroot/ 线上文件,缺乏 staging/CI/CD。建议以 git.cityengine.cn 为 remote,推行“提交 → 构建 → 部署脚本”流程,紧急热修也须先 commit。
  • 环境文件与密钥散落在各服务器:微信支付、支付宝、OSS、数据库密码保存在各 /etc/xxx/*.env 中,建议汇总到统一的 secret 管理或至少同步一份加密清单。
  • 跨站版本对账缺失:建议每个站点维护 site-version.json,并在管理后台展示版本一致性。
  • 备份分散:各服务器自行备份到 /root/backups//www/backups/,建议统一备份命名与保留策略。
cityengine.cn 迁移到新服务器并恢复访问 2026-06-18
infra ops fix

47.83.7.37 服务器无法通过 SSH / RDP / 宝塔面板登录,且把 cityengine.cn 重定向到了 qajs.com,导致站点无法访问。已将项目迁移到 101.200.241.141

  • 101.200.241.141 解压迁移包 /root/cityengine-migration/wordpress.tar.gz/var/www/www.cityengine.cn
  • 启动 MariaDB,创建数据库 cn_cityengine_new 与用户,导入 db.sql
  • 启动 php8.1-fpm,配置 Nginx 监听 cityengine.cnwww.cityengine.cn
  • DNS A 记录更新为 101.200.241.141 后,成功申请并部署 Let's Encrypt SSL 证书。
  • 验证:https://www.cityengine.cn 返回 200,https://cityengine.cn 自动 302 到 www.cityengine.cn
修复 cgajs.com 管理后台大模型配置选择项缺失 2026-06-18
fix admin llm

https://cgajs.cityvistion.cn/admin.html 大模型配置页中“切换模型”选择项因前端逻辑隐藏、后端 allowlist 未包含 DeepSeek / SiliconFlow 配置键导致不可用/缺失,已修复并验证连接状态。

  • 后端 /www/wwwroot/cgajs-api/admin_routes.py:在 ALLOWED_CONFIG_KEYS 中补充 llm.deepseek.*llm.siliconflow.*,避免新增配置时 400。
  • 后端 llm.provider 配置描述更新为包含全部 6 个 Provider。
  • 前端 admin.html:将“切换模型”卡片改为始终显示,下拉框列出所有 Provider,未配置项置灰提示,避免选择项“消失”。
  • 验证 /api/v1/admin/llm-status:6 个 Provider 状态正常返回;/api/v1/admin/test-llm:首选 Provider(kimi_code)连接成功。
修复 rulepackage.com 管理后台大模型配置选择项 2026-06-18
fix admin llm

https://rulepackage.cityvistion.cn/admin.html 大模型配置页同样存在“切换模型”选择项被隐藏的问题,已同步修复并验证。

  • 更新 /www/wwwroot/www.rulepackage.com/admin.html:Provider 选择卡片始终显示,未配置项置灰提示。
  • 后端 allowlist 已包含 llm.deepseek.*llm.siliconflow.*;更新 llm.provider 配置描述为全部 6 个 Provider。
  • 验证 /api/v1/admin/llm-status/api/v1/admin/test-llm、首页、管理后台均 200 正常。
修复 cgajs.com / rulepackage.com 后台 LLM API Key 保存体验 2026-06-18
fix admin llm

之前把 API Key 输入框改成“空输入 + 占位符”的显示方式,导致用户误以为 key 丢失且无法选择当前模型。已回退为显示后端脱敏值,并保留空输入防误删。

  • 已恢复 cgajs.com 上误操作覆盖的 llm.kimi_code.api_key(从 2026-06-18 03:00 数据库备份还原)。
  • 更新两个站点的 admin.html:API Key 输入框显示后端返回的脱敏值(如 sk-k****SCvp),刷新页面后仍可见,证明已保存。
  • “切换模型”选择框始终显示所有 Provider;未配置 key 的 Provider 选项置灰,配置后即可选择。
  • 保存逻辑:输入新 key 并失焦后自动保存;空输入不会覆盖已有 key。
  • 验证 /api/v1/admin/llm-status:Kimi Code / Kimi / DeepSeek / SiliconFlow / Qwen 均 available;测试保存 dummy key 后刷新未丢失。
修复 cgajs.com / rulepackage.com 管理后台菜单数据为空 2026-06-18
fix admin security

管理后台之前用普通用户 token 也能进入管理界面,导致所有 admin-only 接口返回 403,各菜单显示为空。同时旧版 admin.html 可能被浏览器缓存,导致用户看到之前出错的脚本版本。

  • 更新两个站点的 admin.html:自动登录时调用 /api/v1/admin/configs 校验管理员权限,非管理员 token 不再进入后台。
  • 为系统配置、域名白名单、对象存储、站点资产等加载函数添加 try/catch,加载失败时显示具体错误信息而不是空白。
  • 添加全局 window.onerror,脚本异常时弹窗提示。
  • Nginx 增加缓存刷新:访问 /admin.html 会 302 重定向到 /admin.html?v=20250618,强制浏览器获取最新版本。
  • 验证两个站点的 /api/v1/admin/configs/domains/sites/llm-status/users/payments 均 200 正常。
运维三板斧:密钥清单、版本对账、统一备份 2026-06-18
infra ops security

针对环境文件散落、跨站版本不可见、备份策略不一致的问题,统一完成了以下改进:

  • 加密密钥清单:在 /root/.kimi-code/secrets/collect-secrets.sh 收集 4 台服务器的环境文件、nginx 配置、WordPress wp-config.php、Gitea app.ini,打包为 AES-256-CBC 加密的 secrets-inventory.enc,口令文件 .vault-pass 权限 600。
  • 站点版本对账:为每个站点生成 site-version.json(cgajs.com / rulepackage.com / cityvistion.cn / cityengine.cn),并在 https://www.cityvistion.cn/admin.html#admin-versions 管理后台新增“站点版本对账”面板,自动检测各站可达性与引擎版本一致性。
  • 统一备份策略:各服务器部署 /root/bin/site-backup.sh,备份统一存放到 /backups/unified/<站点>/,命名格式 <YYYY-MM-DD_HH-MM>-<站点>.tar.gz,每个站点保留最近 20 份,每日 03:17 自动执行。
NL2CGA 路由拆分为独立 FastAPI app 2026-06-17 14:24
infra nl2cga refactor
  • 将 NL2CGA 路由从 main.py 完全拆出:新建 nl2cga_routes.pynl2cga_main.py,NL2CGA 相关 Pydantic 模型与常量统一迁移到 schemas.py
  • 鉴权/额度检查逻辑抽离到 auth.pycheck_auth_and_quota(),供核心 API(compile/parse)与 NL2CGA 共用,避免重复代码。
  • cgajs-api-nl2cga.service 入口从 main:app 切换为 nl2cga_main:app,独立进程只加载 NL2CGA 依赖,不再重复启动 engine pool 与 scheduler。
  • cgajs-api.service 不再包含任何 /nl2cga/* 路由,进一步降低核心服务内存与启动负担。
  • 验证通过:/api/v1/compile/api/v1/status/api/v1/nl2cga/health/api/v1/nl2cga/polish/api/v1/nl2cga/styles/api/v1/nl2cga/validate-code 均返回 200;服务整体内存约 2.1 Gi。
  • 本次备份:/root/backups/cgajs_full_backup_20260617_141428.tgz;rulepackage 备份在远端 /root/backups/rulepackage_full_backup_20260617_141614.tgz
NL2CGA 独立 Worker 部署完成 2026-06-17 14:07
infra nl2cga scaling
  • 按用户要求执行 NL2CGA 独立 Worker 方案:新增 cgajs-api-nl2cga.service,监听 127.0.0.1:8011,运行 1 个 gunicorn worker,专门处理 /api/v1/nl2cga/*
  • cgajs-api.service 继续监听 127.0.0.1:8010,处理其余所有 API,保持 4 个 worker。
  • 更新 Nginx 路由:
    • api.cgajs.com/nl2cga/ → 8011
    • api.cgajs.com/api/v1/nl2cga/ → 8011
    • www.cgajs.com/api/v1/nl2cga/ → 8011
    • 其余 API 路径仍走 8010
  • 重启主 cgajs-api 服务后,内存从 5.3 Gi 降至 2.2 Gi;主 worker RSS 约 135 MB,NL2CGA worker RSS 约 135 MB。
  • 验证通过:/api/v1/status/api/v1/nl2cga/health/api/v1/nl2cga/polish 均返回 200。
  • 本次备份:/root/backups/cgajs_full_backup_20260617_135657.tgz、rulepackage 备份在远端 /root/backups/rulepackage_full_backup_20260617_135846.tgz
站点模板与 cgajs-api 同步 2026-06-16 00:13
session
  • 修复 admin.html 编码与站点管理面板
  • 新增站点脚本模板与 nginx 配置模板
  • 安全同步 rulepackage cgajs-api 到 cgajs 并验证稳定
IDE 脚本加载失败:根因定位并修复 Node.js 内置模块静态导入 2026-06-15 20:45
hotfix engine
  • 根据完整诊断日志,定位到真正失败点:DIAG import FAIL: /assets/cgajs-engine/index.js?v=31
  • 进一步排查发现 cgajs-engine/dist/engine-Q6UQinqA.js 顶部存在静态导入 import { readFile } from "node:fs/promises";,浏览器解析模块时会直接失败,导致整个引擎加载中断。
  • 修复:移除该静态导入,改为在 loadAssetGeometryUncached 函数内部动态 await import('node:fs/promises'),仅在 Node 环境实际调用时才加载。
  • 将引擎版本戳从 v=31 提升到 v=32,强制浏览器重新拉取修复后的文件。
  • 本次备份:/root/backups/www.cgajs.com-20260615-204504.tgz
IDE 脚本加载失败:引擎资源迁移到 /assets/ 并增强日志面板 2026-06-15 20:40
hotfix frontend
  • 用户反馈只能看到部分 fetch OK 诊断,缺少引擎文件与 import 诊断;怀疑 /cgajs-engine/dist/ 路径被浏览器/扩展/网络层拦截。
  • /cgajs-engine/dist 通过符号链接暴露到 /assets/cgajs-engine,所有 IDE 中的引擎引用改为 /assets/cgajs-engine/index.js?v=31,避免原路径被拦截。
  • 动态 import 诊断也改为绝对 URL,不再依赖 importmap。
  • 在页面顶部增加固定 <textarea id="ide-raw-logs"> 日志区,所有错误自动追加,便于一键复制完整输出。
  • 本次备份:/root/backups/www.cgajs.com-20260615-204131.tgz
IDE 脚本加载失败:动态导入 + ES Module Shims + 完整诊断 2026-06-15 20:10
hotfix frontend
  • 用户反馈 v=25/26/27 均报 Resource failed to load | inline-module,说明问题不在 ide-core.js 本身,而在其 ES Module 静态依赖加载。
  • 将内联模块从静态 import 改为异步 await import(),并用绝对 URL,彻底绕过 importmap 可能的解析问题。
  • 引入 es-module-shims.min.js 作为 importmap / 模块加载 polyfill,覆盖浏览器原生实现有缺陷的场景。
  • ide.html 增加两层诊断脚本:
    • fetch 诊断:直接请求每个依赖 URL,区分网络层失败还是模块层失败。
    • 动态 import 诊断:对每个依赖调用 import(),失败时输出具体错误和堆栈。
  • cgajs-engine/dist/index.js 的相对导入 ./engine-Q6UQinqA.js 追加 ?v=31,避免其历史缓存影响。
  • 本次备份:/root/backups/www.cgajs.com-20260615-201226.tgz
IDE 脚本加载失败:内联 ide-core.js + 依赖缓存刷新 + 增强错误信息 2026-06-15 20:05
hotfix frontend
  • 用户反馈 v=25/26/27 均报 Resource failed to load: https://cgajs.cityvistion.cn/assets/ide-core.js?v=27,说明单纯版本戳无法解决。
  • 服务端确认 ide-core.js 及其所有静态依赖(three、cgajs-engine、addons)HTTP 均为 200 + CORS 头,且文件内容完整无语法错误。
  • 彻底修复:将 ide-core.js 直接内联到 ide.html,消除该文件本身的网络请求/缓存/扩展拦截等失败可能。
  • importmap 中 threecgajs-engine 的版本戳分别刷新为 ?v=27?v=31,避免其缓存中可能存在的历史失败响应。
  • 增强前端错误捕获:资源失败时现在会输出 tag/type/src/inline-module/message/filename/lineno/colno 等完整字段,便于定位真实失败点。
  • 本次备份:/root/backups/www.cgajs.com-20260615-200404.tgz
IDE 脚本加载失败:强制跳转 + 缓存刷新 + CORS 2026-06-15 20:00
hotfix frontend nginx
  • 用户反馈通过 https://cgajs.cityvistion.cn/ide.html 访问时,调试面板仍报 Resource failed to load: https://cgajs.cityvistion.cn/assets/ide-core.js?v=26
  • 服务端验证该文件可正常返回 200,判断为浏览器端缓存/域名不一致导致。
  • ide-core.jscga-codemirror-mode.js 的版本戳从 v=26 提升到 v=27,强制浏览器重新拉取。
  • 在 Nginx 中为 js/css/引擎/字体/图片等静态资源统一添加 Access-Control-Allow-Origin: *,避免 crossorigin / ES Module 出现 CORS 偶发失败。
  • 在 HTTPS 层面对 cgajs.com 添加 301 跳转至 www.cgajs.com,统一规范域名,消除双域名缓存/跨域歧义。
  • 本次备份:/root/backups/www.cgajs.com-20260615-195951.tgz
IDE 核心脚本加载失败:尝试缓存刷新 2026-06-15 19:55
hotfix cache
  • 用户反馈调试面板显示 Resource failed to load: https://cgajs.cityvistion.cn/assets/ide-core.js?v=25
  • 服务端验证该文件 HTTPS 返回 200 + application/javascript,资源本身正常。
  • ide-core.jscga-codemirror-mode.js 的版本戳从 v=25 提升到 v=26,强制浏览器跳过可能存在的旧缓存/301 重定向缓存。
  • ide-core.js 模块脚本增加 crossorigin="anonymous",改善错误报告与跨域一致性。
  • 本次备份:/root/cgajs_full_backup_20260615_195557.tar.gz
IDE 初始化失败二次排查 2026-06-15 19:50
debug frontend
  • API、Marketplace、引擎资源 HTTP 返回均正常;服务端无异常日志。
  • 移除 .CodeMirror { height: 100% !important; } 中的 !important,避免 CodeMirror 内部 setSize 被覆盖。
  • ide.html 增加前端错误浮层,捕获 JS Error / 资源加载失败 / 未处理 Promise,方便用户直接反馈。
  • 等待用户按 Ctrl+Shift+R 强制刷新后,把页面底部红色调试信息贴回。
  • 本次备份:/root/cgajs_full_backup_20260615_195036.tar.gz
精简首页主导航为 5 个核心入口 2026-06-15 19:45
frontend ux
  • 修复 index.html 导航 HTML 因自动脚本导致的重复/错位标签。
  • 桌面端主导航仅保留 5 个核心入口:IDE、Marketplace、CGA Library、NL2CGA、Omega。
  • 其余页面统一收进「🧭 更多」下拉菜单;移动端菜单同步精简分组。
  • 本次备份:/root/cgajs_full_backup_20260615_194524.tar.gz
修复 IDE 布局/字体/初始化回退 2026-06-15 19:42
hotfix frontend
  • 恢复 .layout flex 列布局与 html { font-size: 14px; } 基准,解决字体变大问题。
  • 补全侧栏 .panel-tabs / .panel-tab / .panel-content 样式,修复 Inspector / AST / Diagnostics 等面板显示异常。
  • 补全 #viewer canvas 100% 填充与 .error-item 样式,恢复 3D 视图与诊断列表。
  • 将 IDE 初始化失败检测从单次 2.5s 改为 8s 轮询,并在初始化成功后自动移除提示,避免大模块加载时被误判。
  • 本次备份:/root/cgajs_full_backup_20260615_194229.tar.gz
建立会话结束自动化工作流 2026-06-15 19:23
workflow automation
  • 创建 backup-full.sh:每次修改前自动全站备份,保留最近 10 份。
  • 创建 update-project-dashboards.py:自动更新 updata.html 会话卡片、me.html 用户待办、首页导航菜单。
  • 创建 kimi-wrap-up.sh:一键执行备份 + 更新仪表盘 + 同步共享记忆库。
  • 本次已自动备份:/root/cgajs_full_backup_20260615_192208.tar.gz
评估rulepackage.com 架构解耦方案可行性结论 2026-06-15 16:30

https://rulepackage.cityvistion.cn/architecture-report.html 提出的“cgajs.com 专注引擎/AI,rulepackage.com 专注 CGA 资产与 Omega 测试”解耦方案进行了可行性评估。结论:架构方向合理、技术上可行,但落地风险集中在“服务器即开发机”的工作流和跨站 API 完整性。

一、方案优势(值得采纳)

  • 职责清晰:cgajs.com 作为“引擎大脑”负责 parser、geometry runtime、NL2CGA、auth/billing、IDE;rulepackage.com 作为“资产与标尺中心”负责 CGA 仓库、Marketplace、Omega golden case。避免两站同时维护同一份权威数据。
  • 单一权威:CGA 文件只在 rulepackage.com 编辑,引擎只在 cgajs.com 编辑,天然消除写入冲突。
  • API 优先:跨站调用走 REST API,不直接读对方数据库,符合分布式系统最佳实践。
  • 按需同步:引擎产物 rsync、语料 webhook + cron、Omega golden case API 拉取,三种同步策略与数据特性匹配。

二、当前落地差距(需要补齐)

差距项当前状态建议动作
rulepackage.com 侧 corpus API报告列出 /api/v1/cga-corpus/api/v1/cga-corpus/{slug}/download/api/v1/cga-corpus/{slug}/manifest,但 rulepackage.com 当前未实现在 rulepackage.com 新建 cga-corpus router,先从磁盘文件索引,再逐步接入 DB
cgajs.com 侧 corpus-updated webhook报告要求 /api/v1/webhook/corpus-updated,cgajs.com 当前只有 /api/v1/webhooks/rulepackage(资产上传事件)扩展为通用 corpus 更新回调,支持 asset/omega/marketplace 三类事件
跨站认证报告建议 cgajs.com JWT/API Key,但 IP 白名单 + 共享密钥方案尚未配置/etc/cgajs/cgajs-api.env 与 rulepackage.com 环境变量中同步 RULEPACKAGE_API_KEY
站点版本对账报告要求 site-version.json/api/v1/engine/version,当前 cgajs.com 有版本表但无统一 site-version 文件生成 site-version.json,部署脚本自动 bump,状态面板标红版本不一致
promote-to-prod 脚本报告要求 cgajs.com CI 通过后同步 dist-stable 到 rulepackage.com,当前无此脚本新增 scripts/promote-to-prod.sh,通过 SSH/RSYNC 推送 dist-stable 并 bump site-version
cgajs.com Marketplace 权威cgajs.com 当前仍有 marketplace_routescga_files 写入能力,需弱化Marketplace 写操作迁移到 rulepackage.com;cgajs.com 保留只读/推荐/下架能力

三、最大风险:服务器即开发机

  • 报告提出“直接在服务器上修改、提交、测试”。这在生产环境是高风险反模式:没有 PR review、没有 staging、没有回滚分支、一次误操作即可影响线上。
  • 建议改为:服务器上保留 git 工作区用于快速验证,但关键变更仍需走“本地/容器开发 → PR → CI → 部署脚本”流程;紧急热修也必须先 git commit 再改文件,便于事后追溯。
  • 当前已创建的 docker-compose.yml.github/workflows/ci.ymlscripts/deploy.sh 已经为 CI/CD 闭环打下基础,应继续完善而非回到纯服务器开发模式。

四、推荐实施节奏

阶段周期目标
P1 契约补齐1 周rulepackage.com 实现 cga-corpus/omega/marketplace API;cgajs.com 扩展 webhook;双方配置共享密钥
P2 权威迁移1–2 周CGA 文件/Marketplace 写入切到 rulepackage.com;cgajs.com 改为只读消费;Omega 上传入口统一
P3 同步自动化1 周promote-to-prod.sh、webhook、site-version.json、状态面板、CI 镜像发布全部跑通
P4 长期治理持续引擎发版后自动重跑 corpus 校验;Marketplace 资产质量门;Omega golden 作为发布硬门槛

五、立即可以执行的 3 件事

  1. 在 rulepackage.com 创建 /api/v1/cga-corpus/api/v1/omega/sync-to-cgajs,先把磁盘文件暴露为 API。
  2. 在 cgajs.com 扩展 /api/v1/webhooks/rulepackage,支持 asset.createdasset.updatedomega.batch_readymarketplace.approved 四种事件类型。
  3. 新增 scripts/promote-to-prod.sh:cgajs.com 引擎 CI 通过后,rsync dist-stable 到 rulepackage.com,并同步更新双方的 site-version.json

最终结论:该解耦方案可行且建议采纳,但不要采用“服务器即开发机”的原始工作流,而是把当前已搭建的 Docker/CI/GitHub Actions 能力接进去,形成真正可维护的双站协作体系。

架构rulepackage.com 与 cgajs.com 解耦分工方案 2026-06-15 12:45

为同时支撑“解析器完整能力”和“NL2CGA 未来进化”,提出不再把两个站点合并成一个网站,而是让 cgajs.com 专注 CGA 引擎/解析器/NL2CGA 生成,rulepackage.com 专注 CGA 文件仓库与 Omega 黄金测试体系,二者通过 API 互联。

一、角色定位

站点 核心职责 典型数据 / 服务
cgajs.com CGA 引擎云 parser、engine run、IDE、NL2CGA 生成、用户 auth、billing、admin
rulepackage.com CGA 资源与黄金测试中心 CGA 文件存储、Omega OBJ 上传、golden case 仓库、对比测试报告、NL2CGA 语料源

二、跨站 API 契约

cgajs.com 提供:

  • POST /api/v1/engine/run:输入 CGA 规则 + 初始 Shape,返回执行后的 geometry 与 metadata。
  • POST /api/v1/geometry/compare:输入 expected / actual + 对比策略,返回 pass/fail 与差异。
  • POST /api/v1/parse:已存在,保持不变。

rulepackage.com 新增 omega-api

  • POST /api/v1/omega/build-case:从 OBJ 生成标准 tests/golden/cases/<caseId>/ 目录结构。
  • POST /api/v1/omega/run-test:调用 cgajs.com engine/run + geometry/compare,写入报告。
  • GET /api/v1/omega/reports:获取 golden 测试报告。
  • POST /api/v1/omega/sync-to-cgajs:批量推送 golden cases 给 cgajs.com CI。

三、数据流向

rulepackage.com (Omega 上传 OBJ)
        ↓
生成 golden case → tests/golden/cases/<caseId>/
        ↓
调用 cgajs.com /api/v1/engine/run 执行 rule
        ↓
调用 cgajs.com /api/v1/geometry/compare 对比 expected
        ↓
生成报告 ← 反哺修复 engine ← CGA 文件/语料同步给 cgajs.com NL2CGA

四、实施阶段

  • Phase 1(1 周):定义 API 契约;cgajs.com 新增 engine/rungeometry/compare;rulepackage.com 新建 omega-api
  • Phase 2(1 周):统一 golden case 目录格式(rule.cga + initial-shape.json + expected.json),迁移已有 uploads。
  • Phase 3(1 周):Omega 前端打通“生成 case → 运行测试 → 查看报告”闭环。
  • Phase 4(1 周):rulepackage.com CGA 文件作为 NL2CGA 权威语料源,rsync/webhook 同步到 cgajs.com 重建向量 RAG 索引。
  • Phase 5(1–2 周):cgajs.com IDE 增加“提交到 Golden Test”按钮;admin 嵌入 rulepackage.com 报告看板。
  • Phase 6(持续):rulepackage.com 每日/触发式运行 npm run test:golden,作为 cgajs.com 引擎发布的硬门槛。

五、数据所有权

  • CGA 文件 / marketplace / library:权威在 rulepackage.com,消费方是 cgajs.com NL2CGA 与 IDE。
  • Golden cases / expected outputs:权威在 rulepackage.com,cgajs.com engine/CI 消费。
  • Parser / Engine / NL2CGA model:权威在 cgajs.com,rulepackage.com 测试调用。
  • 用户 / auth / billing / IDE:权威在 cgajs.com
  • Omega 上传工具 / 测试报告:权威在 rulepackage.com

目标:以 cgajs.com 的解析器和 NL2CGA 为躯干,以 rulepackage.com 的 Omega 黄金测试体系为“眼睛和标尺”,两边合并后通过持续 golden case 驱动 NL2CGA 自我进化,形成真正可用、可维护、可扩展的 CGA 智能生成平台。

规划远端 CGA 语料资产(534 文件)赋能解析器 / NL2CGA / Marketplace 方案 2026-06-15 17:30

实际扫描远端 8.216.94.109/www/wwwroot 全域,共发现 534.cga 文件(扫描覆盖 531 个)。这些文件不应只躺在磁盘里,而应被索引为解析器回归套件、NL2CGA 训练/检索语料、Marketplace 商品目录三类资产。

一、资产盘点

来源目录数量资产性质
marketplace.rulepackage.com/files380用户上传 / 交易市场原始文件(UUID 命名)
nl2cga-service/library/*99按风格分类的 NL2CGA 素材库(住宅/商业/交通/宗教/工业等)
cgajs-api/nl2cga/prebuilt20NL2CGA 预建标准模板(simple-house、villa、office…)
cgajs-api/nl2cga/template_engine/templates23参数化模板(含 $param 占位符)
cgajs-project/private-knowledge/rag-source9中式宫殿高复杂度私有知识库
www.cgajs.com/assets/examples-standard5官网标准示例
其它(OSM / engine golden / patterns)3散落的标准测试文件

元数据画像:总大小约 0.83 MB,平均每文件 1.6 KB;共提取到 2 262attr 声明、236@StartRule229 个文件含规则描述;前三大复用模块为 rooffacadematerial

二、解析器完善:把 534 文件变成“不会退化的标尺”

  • 回归套件:在 cgajs-engine/tests/cga-corpus/ 下按原目录结构软链接/复制全部 534 文件,CI 中批量跑 parseCGA(),当前 525/531 通过(98.9%)。
  • 失败专项:6 个失败全部集中在 private-knowledge/rag-source 中式宫殿文件,典型错误为 split(z)、顶层 constcomp 选择器混用、splitArea(z, noAdjust)。为每个错误建独立 issue,逐个补齐语法或做源码规范化。
  • AST 往返测试:对 marketplace 380 个 UUID 文件执行“解析 → AST → 代码生成 → 再解析”,保证 AST 稳定、无信息丢失。
  • 注解覆盖:23 个模板文件大量使用 @Group/@Range/@Color/@Enum/@Hidden,用它们验证 parser 对注解语法的完整支持。

三、NL2CGA 进化:从文件堆到可检索的语义库

  • RAG 语料 cga-corpus.jsonl:每条记录包含文件路径、风格标签、自然语言描述(提取 @RuleFileDescription、目录名、文件名)、参数 schema、StartRule、imports、关键规则片段。
  • 参数 schema 库:聚合 2 262 个 attr 的 @Group/@Range/@Enum/@Color 信息,生成 cga-parameter-schema.json,让 NL2CGA 生成时不再瞎造参数名。
  • Few-shot 样本库:从 20 个预建模板 + 23 个参数化模板 + 99 个 library 分类文件中,按风格挑选 canonical 示例,作为大模型 in-context learning 的 shot。
  • 评测基准:建立 NL2CGA eval benchmark,输入为自然语言描述,期望输出为对应 CGA 文件;评测指标 = 语义相似度 + parse 成功率 + engine 渲染成功率。
  • 风格专场:9 个中式宫殿文件用于训练“古建/宫殿”专属生成能力;marketplace 380 文件用于训练真实用户分布的风格分类器。

四、Marketplace 完善:从 UUID 文件到可售资产

  • 元数据补全:自动把 UUID 文件名替换为语义名(如 modern_villa.cga),依据 @RuleFileDescription、规则名、高频 attr 关键词;无描述时走 LLM 自动 caption。
  • 质量门:公开上架前必须通过 parse 成功、engine 渲染成功、无运行时错误;高价值 case 再跑 Omega golden diff。
  • 自动分类:按目录/内容关键词打上 Residential / Commercial / Industrial / Transportation / Religious / Public / ChineseArchitecture / Infrastructure 等标签。
  • 预览与参数面板:每个文件生成缩略图(engine 渲染 OBJ → 截图)、参数 UI JSON(从注解生成滑动条/颜色选择器/下拉枚举),前端支持搜索、预览、一键在 cgajs.com IDE 打开。
  • manifest 规范:每个资产增加 manifest.json(title、description、tags、author、license、parameters、preview、source)。

五、4 周落地路线

阶段目标产出
Week 1资产索引 + 解析回归cga-corpus/ 套件、CI parse report、6 个失败 issue
Week 2NL2CGA 语料与 schemacga-corpus.jsonl、参数 schema、few-shot bank、eval benchmark
Week 3Marketplace 元数据与质量门UUID 重命名、自动分类、manifest、预览渲染、质量门
Week 4跨站集成与流水线rulepackage.com 语料同步到 cgajs.com、CI golden case 联动、NL2CGA RAG 上线

六、立即可以开始的 3 个动作

  1. 远端执行 node /www/wwwroot/cgajs-engine/scripts/scan_cga_corpus.js,生成每日解析率报告。
  2. rulepackage.com 新增 /api/v1/cga-corpus:返回分类、参数 schema、下载链接,供 cgajs.com NL2CGA 消费。
  3. 为 marketplace UUID 文件跑一遍 engine 渲染,生成缩略图 + 失败清单,失败的文件先不入库。

目标:让这 534 个文件不再是“死文件”,而成为解析器不会退化的标尺、NL2CGA 不断进化的教材、Marketplace 持续增长的库存

完善cgajs.com 与 rulepackage.com 当前差距与继续完善方案 2026-06-15 18:00

在上一轮 CGA 语料方案基础上,再次对比两个站点当前实际代码状态,发现双方已经“各走各的”:cgajs.com 实现了更多几何操作但本地提交较旧;rulepackage.com 有更新的 parser/IDE 修复但缺少这些几何操作。需要一次双向合并 + 权威归属 + 自动化同步

一、现状快照

维度cgajs.com(远端)rulepackage.com(本地)
引擎代码提交8ed614d(较旧)c7e5f09(较新)
新增几何操作已含 insertinsetconvert、asset-loader、asset-collector缺少 inset / convert / asset-loader;insert 只有基础 58 行
E2E 测试45 个,覆盖 insert/inset/convert/setback-advanced/shape-luo/uv-split 等38 个,缺少上述专项测试
CGA 语料套件tests/cga-corpus/ 533 个 symlink + cga-corpus.test.ts无 corpus 目录与测试
CGA 资产 API/api/v1/cga-corpuscga_asset_service.py 含分类映射/quality_scoreCgaAsset 模型,但无 endpoint,服务文件较旧
Omega 同步/omega/sync-to-cgajs 已落地Omega 后端缺少 sync endpoint
站点版本管理site-version.json(engine 27)无 site-version;IDE 引用 engine v=24
Marketplace380 个 UUID 文件,无 manifest/预览380 个 UUID 文件,无 manifest/预览

二、关键差距

  1. 引擎“双向分叉”:cgajs.com 有 inset/convert/asset-loader 等实现但缺本地最新 parser/IDE 修复;rulepackage.com 有最新修复但缺这些几何操作。两边 dist-stable 版本不一致(v24 vs v27)。
  2. 语料权威在 rulepackage.com 但未落地:按架构方案,CGA 文件权威应在 rulepackage.com,但本地反而没有 corpus 目录和 API;远端已先一步实现。
  3. Omega golden case 未形成闭环:远端有 /omega/sync-to-cgajs,但 rulepackage.com(上传入口)没有,导致 golden case 无法从上传端主动推送给引擎端 CI。
  4. Marketplace 仍是 raw files:380 个 UUID 文件没有语义名、manifest、缩略图、质量门。
  5. 站点版本 / 缓存戳未统一:本地没有 site-version.json,IDE 引用的引擎版本落后,用户可能命中旧缓存。

三、继续完善方案

  • 1. 引擎双向合并(P0)
    • 把 cgajs.com 的 src/geometry/operations/create/insert.tsinset.tssrc/runtime/asset-loader.tsasset-collector.tsimport-resolver.ts 以及 convert() 实现合并到 rulepackage.com。
    • 把 rulepackage.com 的最新提交(autocomplete 313 项、primitiveSphere、block-body 解析、vector normalization、const annotations、function signatures)合并到 cgajs.com。
    • 统一 dist-stable 版本到同一 hash,并在两个站点同步 site-version.json(engine 升到同一版本)。
  • 2. 建立 CGA 语料权威(P1)
    • 在 rulepackage.com 新增 scripts/build_cga_corpus.py:扫描 /www/wwwroot 下 534 个 .cga,按原目录结构软链接进 cgajs-engine/tests/cga-corpus/
    • 新增 tests/parser/cga-corpus.test.ts/api/v1/cga-corpus endpoint,把解析结果写入 cga_assets 表。
    • cgajs.com 通过定时任务拉取 rulepackage.com 的 /api/v1/cga-corpus,重建本地 tests/cga-corpus/ 与 DB。
  • 3. Omega golden case 闭环(P1)
    • 在 rulepackage.com 的 omega_routes.py 补齐 /omega/sync-to-cgajs(直接复制远端实现)。
    • cgajs.com 新增 cron:每 30 分钟拉取 rulepackage.com 的 golden cases,导入 tests/golden/omega-imports/ 并跑 diff。
  • 4. Marketplace 资产化(P2)
    • scripts/enrich_marketplace.py:UUID → 语义 slug、自动 caption、参数 schema、标签分类、engine 渲染缩略图。
    • 质量门:parse 成功 + render 成功 + 无缺失 import 才写入 marketplace.rulepackage.com/assets/<slug>/manifest.json 并上架。
  • 5. 站点版本与缓存统一(P0-P1)
    • rulepackage.com 新增 site-version.jsonide.htmlnl2cga.htmlomega.html 都从此文件读取 engine/autocomplete/mode 版本戳。
    • 部署脚本 scripts/promote-to-prod.sh 在同步 dist-stable 后自动 bump site-version.json 并刷新 Nginx。
  • 6. CI / 同步流水线(P2-P3)
    • cgajs.com 引擎 CI 通过 → rsync dist-stable 到 rulepackage.com。
    • rulepackage.com 语料 / Marketplace 更新 → webhook 通知 cgajs.com 拉取。
    • 清理 dist-beta、bak 文件、未跟踪临时文件,避免仓库膨胀。
  • 7. 跨站状态面板(P3)
    • 新增 /status.html,实时展示两站 engine 版本、corpus 数量、parse 成功率、marketplace 已审核数、上次同步时间。

四、建议落地顺序

阶段目标产出
P0(3 天)引擎双向合并 + 站点版本统一双方 insert/inset/convert/asset-loader 一致;IDE engine v=27;site-version.json
P1(1 周)rulepackage.com 语料权威 + Omega 同步闭环tests/cga-corpus//api/v1/cga-corpus/omega/sync-to-cgajs、cgajs.com 定时拉取
P2(1 周)Marketplace 资产化与质量门380 文件 manifest + 缩略图;审核通过清单
P3(1 周)CI 同步流水线 + 状态面板夜间自动 sync、/status.html、dist-beta 清理

五、马上可执行的 3 件事

  1. 从 cgajs.com 把 src/geometry/operations/create/inset.tssrc/runtime/asset-loader.tstests/e2e/insert.test.tstests/e2e/convert.test.ts 等文件 rsync 到 rulepackage.com。
  2. 在 rulepackage.com 创建 scripts/build_cga_corpus.py,生成 cgajs-engine/tests/cga-corpus/ 并跑通 cga-corpus.test.ts
  3. 两端都新增 site-version.json,并把 IDE 中的 ?v=24 统一改为读取 site-version.jsonengine 字段。

目标:结束“双站分叉”,让 cgajs.com 专注引擎能力rulepackage.com 专注资产与测试,两边通过自动化同步保持完全一致,用户无论访问哪个站点都得到同一套最新引擎与同一批高质量 CGA 资产。

报告cgajs.com / rulepackage.com 解耦后职责、通信与功能砍留详细报告 2026-06-15 18:30

已输出一份独立的可视化报告,明确两个站点解耦后的权威职责、跨站 API 契约、数据流向、功能砍留清单,以及未来直接在服务器上开发的工作流。

  • cgajs.com 保留:引擎 / 解析器 / runtime、NL2CGA AI 生成、IDE、用户/鉴权/计费/管理后台、函数库文档、插件生态。
  • cgajs.com 砍掉/弱化:canonical CGA 文件仓库、Omega 上传与 golden case 存储、Marketplace 资产发布后台、多版本 dist 并存。
  • rulepackage.com 保留:CGA 文件仓库 / Marketplace 资产、Omega 黄金测试体系、NL2CGA 语料源、跨站测试报告 / 状态面板。
  • rulepackage.com 砍掉/弱化:引擎源码主开发、NL2CGA 生成服务、完整用户/计费/admin、独立 IDE 创作入口。
  • 通信方式:rulepackage.com 暴露 /api/v1/cga-corpus/api/v1/omega/sync-to-cgajs/api/v1/marketplace/assets;cgajs.com 暴露 /api/v1/engine/run/api/v1/geometry/compare/api/v1/nl2cga/generate;引擎产物用 rsync,语料用 webhook + cron。

完整报告:/architecture-report.html

工作流双机共享任务与记忆:cgajs.com / rulepackage.com 同步机制上线 2026-06-15 19:00

以后直接在服务器上开发,不再走“本地开发 → 部署”。为了让任意一台服务器的 Kimi 登录后都能读取和更新任务、记忆与更新日志, 建立了一套双机共享记忆仓库

一、共享仓库位置

  • 仓库/www/wwwroot/shared-memory.git(bare repo,位于 cgajs.com),两站均 clone 到 /www/wwwroot/shared-memory/
  • 共享文件
    • updata.htmlarchitecture-report.html:两站 web 根通过符号链接指向同一文件。
    • tasks.json:跨机任务清单,Kimi 会话优先读取。
    • memory.md:项目上下文、关键决策、当前焦点。
    • AGENTS.md:Kimi 双机开发指南。
    • sync.sh:一键 pull/push。

二、双机 SSH 与命令互通

  • rulepackage.com → cgajs.comssh root@8.216.94.109 ...(已配置 migrate_key 免密)。
  • cgajs.com → rulepackage.comssh -p 2222 root@localhost ...(通过 systemd 维护的反向 SSH tunnel,把 cgajs.com 的 2222 端口转发到 rulepackage.com 的 22 端口)。

三、使用流程

  1. 每次 Kimi 登录后先执行:
    /www/wwwroot/shared-memory/sync.sh pull
  2. 读取 /www/wwwroot/shared-memory/tasks.jsonmemory.md,了解当前任务与上下文。
  3. 开发完成后或修改共享文件后执行:
    /www/wwwroot/shared-memory/sync.sh push
  4. 需要操作另一台服务器时,直接通过上述 SSH 命令执行,无需切换终端。

四、自动兜底

  • systemd 服务 shared-tunnel.service 保证反向 tunnel 断线自动重连。
  • 两站均已把 updata.htmlarchitecture-report.html 替换为符号链接,任何一次 sync.sh push 都会同时更新两个站点。

五、纪律

  • 在 rulepackage.com 不再直接修改引擎源码(会被 cgajs.com 同步覆盖)。
  • 在 cgajs.com 不再直接修改 CGA 文件仓库(会被 rulepackage.com 同步覆盖)。
  • 所有跨站数据交换必须通过 API 或共享 git 仓库,禁止直接读写对方数据库。

目标:无论登录哪台服务器,Kimi 看到的任务、记忆、更新日志都是同一份,开发过程不再“断片”。

计划双机开发运维计划:角色、冲突、容灾与备份 2026-06-15 19:30

针对“哪台是主开发机、cgajs 同时改解析器是否冲突、能否在本机开发远端任务、宕机如何检测恢复、重启后如何恢复、记忆数据如何备份”等问题,输出了一份详细运维计划,待确认后开发

  • 角色:cgajs.com 是引擎主节点;rulepackage.com 是控制与资产主节点。没有唯一“主开发机”。
  • 冲突避免:引擎源码只在 cgajs.com 写;CGA 资产只在 rulepackage.com 写;shared-memory 先 pull 再改。
  • 远端开发:在本机通过 ssh -t root@8.216.94.109 'kimi -C' 直接开发 cgajs.com 任务。
  • 宕机检测:双机每分钟互相 ping HTTP/SSH,写入 shared-memory/health/;宕机时记录 incidents 并告警。
  • 重启恢复/root/kimi-recover.sh 重启 tunnel、拉取 shared-memory、备份并清理损坏的 Kimi wire。
  • 备份:shared-memory git 三副本;数据库/ golden cases / Marketplace 文件 nightly rsync;Kimi 日志异地备份,但实时 wire 不同步。

完整计划:/disaster-recovery-plan.html

分析Omega 黄金测试入口选型:rulepackage.com vs cgajs.com 2026-06-16 05:00

当前两个站点都保留了 /omega.html/omega-docs.html,但上传入口、golden case 存储与引擎对比的权威归属不同。以下是选型分析。

一、现状

维度rulepackage.comcgajs.com
上传入口✅ 主要入口,/api/v1/omega/convert 接收 OBJ 并生成 golden JSON⚠️ 保留页面与历史报告,但非权威上传端
golden case 存储✅ 权威存储:/www/wwwroot/cgajs-engine/tests/golden/omega-uploads/<batch>/⚠️ 仅有历史测试记录与本地缓存
批次完成通知✅ 已新增 /api/v1/omega/batch/close,可通知 cgajs.com❌ 作为被通知方
引擎对比能力⚠️ 需调用 cgajs.com /api/v1/engine/run/geometry/compare✅ 引擎运行与几何对比权威
站点角色CGA 资产与测试标尺中心CGA 引擎与 AI 生成大脑

二、推荐结论

Omega 测试的主入口应放在 rulepackage.com,cgajs.com 的 Omega 页面建议退化为“只读报告看板”或直接 301 跳转。

三、理由

  1. 单一权威:golden case 的生成、命名、版本化、报告都在 rulepackage.com,避免 cgajs.com 也产生重复或冲突的 golden 数据。
  2. 架构定义:architecture-report 明确 rulepackage.com 负责 Omega 黄金测试体系,cgajs.com 负责引擎运行与几何对比。
  3. 闭环最短:rulepackage.com 完成批次后可通过 webhook 通知 cgajs.com;cgajs.com 拉取 golden cases 进入 CI 回归,流程自然。
  4. 用户心智清晰:创作者去 cgajs.com IDE 写规则,QA/测试人员去 rulepackage.com Omega 上传 OBJ 并验证。
  5. 避免双写风险:若两边都支持上传,同一 batch_id 可能在两台服务器产生不同目录,状态面板无法对账。

四、建议的后续动作

  • cgajs.com /omega.html 移除上传 UI,改为只读报告/同步状态看板;或直接 301 到 https://rulepackage.cityvistion.cn/omega.html
  • cgajs.com 保留 /api/v1/omega/health/reports 用于监控,但关闭 /convert 写入能力(或仅内部调试使用)。
  • rulepackage.com Omega 后端在对比环节优先调用 cgajs.com engine/compare;对比报告回写到 rulepackage.com。

一句话:上传 golden case 去 rulepackage.com,跑引擎对比与回归在 cgajs.com。

完成Omega 测试权威归属修复:上传在 rulepackage.com,对比回归在 cgajs.com 2026-06-16 05:30

按“上传 golden case 去 rulepackage.com,跑引擎对比与回归在 cgajs.com”的架构建议,完成了双站 Omega 职责拆分与代码修复。

一、cgajs.com 侧调整

  • /omega.html 已改为跳转页,自动跳转到 https://rulepackage.cityvistion.cn/omega.html,移除上传入口。
  • /api/v1/omega/convert 写入端点已禁用:环境变量 OMEGA_UPLOAD_DISABLED=1 已写入 /etc/cgajs/cgajs-api.env,调用时返回 403 并提示前往 rulepackage.com。
  • 保留只读能力:/api/v1/omega/health/reports/report/<batchId>/sync-to-cgajs 以及 /run-test 引擎对比端点均正常可用。

二、rulepackage.com 侧增强

  • 新增 /api/v1/omega/run-test 代理端点,将前端对比请求透明转发到 cgajs.com /api/v1/omega/run-test
  • 新增 /api/v1/omega/batch/run-test 端点:读取本地 golden case,批量调用 cgajs.com 引擎执行 engine/run + geometry/compare,返回每个 case 的对比结果。
  • /omega.html 结果区新增“🔬 运行对比测试”按钮,点击即可对当前批次触发 cgajs.com 引擎对比。

三、验证结果

  • ✅ cgajs.com /api/v1/omega/convert 返回 403,提示使用 rulepackage.com。
  • ✅ rulepackage.com /api/v1/omega/convert 仍可正常上传 OBJ 并生成 golden JSON。
  • ✅ rulepackage.com /api/v1/omega/batch/run-test 成功调用 cgajs.com 引擎并返回对比结果。
完成建立自动化流程:备份、记忆库、me.html、导航同步 2026-06-16 04:30

根据最新约定,建立并落地以下工作流:每次修改先备份网站;每次对话与任务写入 updata.html;需要站主亲自处理的任务写入 me.html;新增页面/子站点自动加入首页菜单或导航下拉。

一、已落地的机制

机制实现方式
修改前备份修改前打包 /www/wwwroot/www.*cgajs-apishared-memory/root/*-premod-*.tgz
记忆库更新所有对话与任务在 /www/wwwroot/shared-memory/updata.html 追加卡片;通过 sync.sh 同步到双站
站主待办新增 /me.html(共享内存),按类别归档需站主亲自决策/确认/补充资料/付费/协调/创作的任务
导航同步双站首页与全局导航均新增 🧭 导航 下拉菜单,集中展示所有页面与子站点;新增页面/子站点时同步更新 site-nav.js 与首页内联菜单
缓存刷新site-nav.js 版本戳随内容变更升级(当前 v=3),避免浏览器缓存旧导航

二、me.html 已写入的待办任务

  • ME-20260615-01 NL2CGA 独立服务形态决策(方案 A/B)
  • ME-20260615-02 是否启动 Marketplace 元数据化改造
  • ME-20260615-03 cgajs.com Marketplace 写入权威是否迁移到 rulepackage.com
  • ME-20260615-04 确认 rulepackage.com → cgajs.com 实时同步的共享密钥
  • ME-20260615-05 确认 parser ambiguity 警告的治理优先级
  • ME-20260615-06 为 380 个 Marketplace UUID 文件提供/确认语义名与分类

三、导航菜单覆盖范围

  • rulepackage.com:Omega、Marketplace、状态、站主待办、架构报告、灾备计划、更新日志;子站点 apihand/marketplace/pic/osm;cgajs.com 引擎入口。
  • cgajs.com:IDE、CGA Library、NL2CGA、Omega、函数库、知识库、插件、文档、状态、架构报告、灾备计划、更新日志、站主待办、路线图;子站点 apihand/marketplace/pic(cgajs 与 rulepackage)。

访问地址:/me.html

完成双站全量检查、修复与备份 2026-06-16 04:00

对 cgajs.com 与 rulepackage.com 进行了全站 HTTP/API 健康检查、静态链接扫描、核心功能冒烟测试,修复了导航缺失问题,并完成整站备份。

一、检查范围

  • 双站首页、IDE、NL2CGA、函数库、插件、管理后台、Omega、状态页、共享报告等核心页面。
  • 关键 API:/api/v1/health/api/v1/status/api/v1/parse/api/v1/validate/api/v1/compile/api/v1/cga-corpus/api/v1/marketplace/api/v1/omega/*
  • 静态链接扫描:cgajs.com 394 个 URL,rulepackage.com 核心页面与归档跳转。

二、发现的问题

  • cgajs.com 全局导航缺失site-nav.js 与首页未链接共享的 /architecture-report.html/updata.html,用户难以找到架构报告与更新日志。
  • cgajs.com 23 个页面引用旧版 site-nav.js?v=1:修改导航后可能导致浏览器缓存旧导航。
  • cgajs.com /api/v1/marketplace/recent 端点不存在:但站点页面未引用该端点,不影响线上功能。

三、已执行的修复

  • cgajs.com assets/site-nav.js 增加“🏛️ 架构报告”和“📋 更新日志”入口。
  • cgajs.com index.html 顶部导航与页脚同步增加架构报告、更新日志链接。
  • 将 cgajs.com 全站 23 处 site-nav.js?v=1 统一升级为 v=2,避免缓存旧导航。
  • rulepackage.com Omega 批次完成后调用 /api/v1/omega/batch/close 异步通知 cgajs.com(已在上一轮落地)。

四、验证结果

  • ✅ cgajs.com 与 rulepackage.com 核心页面全部 200。
  • /api/v1/parse/api/v1/validate 对简单 CGA 返回 success: true
  • ✅ rulepackage.com /api/v1/omega/convert/api/v1/omega/batch/close 正常工作。
  • ✅ 双站 /api/v1/status 引擎版本一致(1.3.2)。
  • ✅ cgajs.com 首页与 site-nav.js 已出现“架构报告”“更新日志”链接。

五、备份清单

  • /root/rulepackage-www-postfix-20260615-191648.tgz(18 MB)
  • /root/rulepackage-api-postfix-20260615-191648.tgz(100 MB)
  • /root/shared-memory-postfix-20260615-191648.tgz(1.5 MB)
  • cgajs.com:/root/cgajs-www-postfix-20260615-191707.tgz(17 MB)、/root/cgajs-api-postfix-20260615-191707.tgz(405 MB)
  • 数据库:rulepackage.com 已执行 backup-db.sh,dump 文件已异地同步到 cgajs.com。
完成rulepackage.com 最终架构对齐:页面清理、菜单精简、功能聚焦 2026-06-16 03:30

cgajs.com 已完成 P0-P4 架构修复(引擎仓库干净、promote-to-prod、site-version 统一)。现在需要把 rulepackage.com 也精简到 architecture-report 定义的角色: CGA 资产与测试标尺中心。清理失去功能的菜单和页面,保留核心能力,确保稳定。

一、两站最终功能架构对比

功能域cgajs.comrulepackage.com
引擎 / 解析器 / Runtime权威源码、CI、dist-stable只读同步副本,仅用于测试
IDE / 在线编辑器权威入口移除,跳转 cgajs.com/ide.html
NL2CGA AI 生成权威服务移除,跳转 cgajs.com/nl2cga.html
函数库 / CGA 模板文档权威文档移除,跳转 cgajs.com/ku.html
用户 / 鉴权 / 计费 / Admin权威体系移除前端页面,API 保留但不再主动使用
CGA 文件仓库本地缓存(从 rulepackage.com 拉取)权威存储 + Marketplace 文件
Omega 黄金测试被调用方(engine/run/compare)权威上传入口 + golden case 存储
共享记忆 / 报告承载 bare repo,消费页面维护与展示 updata / architecture-report / disaster-recovery-plan
跨站状态 / 监控被监控方watchdog 发起方 + /status.html 仪表盘

二、需要清理的页面(归档到 /archive/,根目录放 301 跳转)

页面原因处理方式
ide.html / IDEA.html / IDEB.html / IDEC.htmlIDE 权威在 cgajs.com归档,根目录放跳转到 https://cgajs.cityvistion.cn/ide.html 的页面
nl2cga.htmlNL2CGA 权威在 cgajs.com归档,根目录跳转 https://cgajs.cityvistion.cn/nl2cga.html
ku.html / cga.html / cga-ku.html函数库/CGA模板文档权威在 cgajs.com归档,根目录跳转 https://cgajs.cityvistion.cn/ku.html
plugin.html插件生态权威在 cgajs.com归档,根目录跳转 https://cgajs.cityvistion.cn/plugin.html
auth.html / billing.html / profile.html / admin.html / admin-monitor.html用户/鉴权/计费/Admin 权威在 cgajs.com归档,根目录跳转 https://cgajs.cityvistion.cn/auth.html 或对应后台
help.html / study.html / timeline.html / roadmap.html / wenti.html / cityengine-ops.html过时或重复文档,角色不清归档,根目录跳转 /updata.html 或 /architecture-report.html

三、保留的核心页面

  • index.html:rulepackage.com 首页,说明自身角色(CGA 资产 / Omega 测试 / 跨站监控)。
  • omega.html / omega-docs.html:Omega 上传与文档。
  • status.html:跨站状态仪表盘。
  • architecture-report.html / disaster-recovery-plan.html / updata.html:共享记忆与报告。
  • 404.html:保留,用于归档后的旧链接友好提示。

四、菜单精简方案

统一后的顶部菜单(site-nav.js + index.html inline nav):

🏠 首页  |  📤 Omega测试  |  🏪 Marketplace  |  📊 状态  |  🏛️ 架构报告  |  🛡️ 容灾计划  |  📋 更新日志

五、首页 index.html 改造

  • 标题改为:rulepackage.com — CGA 资产与测试中心
  • 副标题说明:这里是 CGA 文件权威仓库、Omega 黄金测试入口、双机共享记忆与状态监控中心。
  • CTA 按钮:📤 上传 OBJ 测试(→ /omega.html)、🏛️ 架构报告📊 站点状态
  • 移除“打开 IDE”等指向 cgajs.com 功能的按钮,改为清晰的跳转说明。

六、Omega 与 cgajs.com 的进一步闭环

  • omega_routes.py 批次处理完成后,调用 cgajs.com /api/v1/webhooks/rulepackage/api/v1/omega/sync-to-cgajs,通知 cgajs.com 拉取 golden cases。
  • 在 omega.html 增加提示:“需要创作/编辑 CGA?前往 cgajs.com IDE”。

七、稳定性保障措施

  1. 先备份:执行前把 /www/wwwroot/www.rulepackage.com 打包到 /root/rulepackage-www-backup-<date>.tgz
  2. 先归档、后替换:旧页面移动到 /archive/,根目录放置 <meta http-equiv="refresh"> 跳转页,不直接删除,便于回滚。
  3. 保留 API:不删除 cgajs-api 中的任何路由,避免 cgajs.com 调用失败;仅移除前端 HTML/菜单。
  4. 不改引擎源码/www/wwwroot/cgajs-engine/src 保持只读。
  5. 验证清单:修改后 curl 检查 index/omega/status/architecture-report/updata 均 200;检查被清理页面返回 301/302 跳转。

八、实施顺序(建议)

阶段任务预计时间
S1备份 → 归档旧页面 → 根目录放跳转页 → 更新 site-nav.js 与 index.html 菜单2h
S2重写 index.html 首页文案与 CTA1h
S3status.html 接入 site-nav.js;Omega 批次完成 webhook2h
S4全站链接验证 + 回滚预案确认1h

九、已执行记录

  • 备份:已打包整站到 /root/rulepackage-www-backup-20260615-184616.tgz
  • 归档:ide/IDEA/IDEB/IDEC、nl2cga、ku/cga/cga-ku、plugin、auth/billing/profile/admin/admin-monitor、help/study/timeline/roadmap/wenti/cityengine-ops 已移至 /archive/
  • 跳转:上述页面在根目录保留 meta-refresh 跳转页;IDE/函数库/NL2CGA/插件/账户跳转 cgajs.com,其余跳转架构报告。
  • 导航site-nav.js 已精简为:首页 / Omega 测试 / Marketplace / 状态 / 架构报告 / 灾备计划 / 更新日志;index.html 与 status.html、omega.html、omega-docs.html 已同步引用 v=2。
  • 首页index.html 已重写为“CGA 资产与测试中心”,保留 Marketplace/Omega/状态/架构/灾备/更新日志入口。
  • Omega 闭环:新增 /api/v1/omega/batch/close,批次转换完成后异步通知 cgajs.com;cgajs-api 已重启生效。
  • 验证:核心页面全部 200;归档页面均含正确跳转目标;API 与 Omega 健康检查 200。
完成P0-P2 双机运维落地:别名、只读标记、watchdog、备份全部上线 2026-06-15 17:05

已按确认执行 P0-P2 全部任务,两站现在具备角色边界、冲突防护、故障检测与数据备份能力。

  • P0 完成:双机 SSH 别名(cga-ssh/cga-kimi/cga-testrpk-ssh/rpk-kimi/rpk-test);rulepackage.com 上 cgajs-engine/src 只读标记 + pre-commit hook;/root/kimi-recover.sh 双机部署;shared-tunnel.service 健康运行。
  • P1 完成watchdog.sh 每分钟互 ping HTTP/SSH,写入 shared-memory/health/*.json,连续 3 次失败写 incidents.jsonalerts.log,支持 webhook 告警配置。
  • P2 完成
    • backup-db.sh:每日 03:00 PostgreSQL dump,同步到对端。
    • backup-files.sh:每日 02:30 同步 Omega golden cases / Marketplace 文件 / NL2CGA library。
    • backup-kimi-logs.sh:每日 01:00 同步 Kimi CLI 日志到对端。

当前双机状态均为 overall_ok: true,备份目录已相互同步。下一步 P3:shared-memory 异地镜像 + 真实故障演练。

引擎cgajs.com 当前状态评估与修复方案 2026-06-15 17:15

对 cgajs.com 进行了全面扫描:引擎测试全过(68 文件 / 1285 测试),但仓库有 448 条未提交变更;API 与 NL2CGA 端点已就绪,但版本号不一致、webhook 未打通、Omega 未主动拉取。

  • P0:清理提交 cgajs-engine(删除备份目录、dist-beta,重建 dist-stable,分批 commit)。
  • P1:新增 scripts/promote-to-prod.sh,统一两站引擎版本与 site-version.json
  • P2:决策 NL2CGA 独立服务去留(压测内嵌端点后决定归档或启动)。
  • P3:配置 RULEPACKAGE_WEBHOOK_SECRET,让 rulepackage.com 实时推送资产/Omega 事件到 cgajs.com。
  • P4:CGA 语料自动索引,CgaAsset 表状态持续更新。
  • P5:parser ambiguity 统计与治理,禁止新增二义性。

完整方案在 architecture-report.html 第 8 节:/architecture-report.html#cgajs-assessment

引擎Omega 批量上传上线 + 引擎黄金标准修复 8 项计划完成 2026-06-14 20:30

完成 CGA.js 引擎黄金标准对比测试前提出的 8 项修复计划,并同步升级 /omega.html 为批量上传工具,服务端自动保存成功 case、生成失败报告,方便后续 AI 修复。

一、引擎修复 8 项计划(全部完成)

  • mirror / mirrorScope 负 scope 修复:翻转轴向并对尺寸取 Math.abs,消除负体积/负面积。
  • geometry.* 硬编码常量修复areavolumeisPlanarisRectangularisConcaveisClosedSurface 改为基于真实几何计算;hasTags 改为布尔语义。
  • primitive / extrude 轴向量同步修复:所有 primitive 与 extrude 操作后调用 updateAxisVectors(),避免缩放/旋转错位。
  • copy 真复制修复:由共享引用改为返回 [shape, cloneShape(shape)] 独立副本。
  • utility 函数 SPEC 与矩阵测试补齐:覆盖 colorsetprintconvertreportError 等。
  • boolean 函数 SPEC 与矩阵测试补齐:覆盖 unionsubtractintersectoffset 组合。
  • setback 函数 SPEC 与矩阵测试补齐:覆盖凹多边形、退台大于尺寸、多边形孔洞等边界。
  • SPEC / coverage-gap 文档同步更新:偏差与 TODO 已清理,并跑通全量测试。

二、Omega 工具 v3.2 升级

  • 批量上传:支持一次拖拽/选择多个 OBJ,前端顺序调用 /api/v1/omega/convert
  • 文件名自动解析function_param1_param2_inputshape.obj 自动识别函数、参数、输入形状。
  • 8 种 footprint 预设:正方形、长方形、L 形、U 形、凹多边形、带孔洞、极小、极大。
  • 服务端自动保存:成功 case 写入 /www/wwwroot/cgajs-engine/tests/golden/omega-uploads/<batch_id>/<case_id>/golden.json
  • 失败报告:同目录 report.json 记录失败文件名与错误,支持 /api/v1/omega/report/<batch_id> 读取。
  • 一键复制:结果区可直接复制“批次 ID”或“失败列表”给 AI,无需手动整理。
  • 精度保证:OBJ 顶点原样保留;默认对比策略 bbox+vertex + ε=1e-4,忽略 UV 与 Scope 旋转差异。

测试结果:全量 672 passed / 1 skipped;typecheck、build、signature 一致性检查全部通过。
文档omega-docs.html 已同步更新至 v3.2。

NL2CGA新增 CGA 模板在线编辑器(cga.html) 2026-06-14 02:00

/cga.html 上线 CGA 模板在线编辑器,所有 NL2CGA 模板以真实 .cga 文件形式展示,支持在线修改、自动编译校验、备份与回滚。

  • 全部模板文件化:20 个预建模板从 nl2cga_service.py 迁出到 nl2cga/prebuilt/*.cga,与 23 个参数化模板统一以文件为操作对象;PREBUILT_CGA_LIBRARY 改为从 manifest.json 加载。
  • 管理员写、公开读:新增 /api/v1/cga-library/* 接口,列出/读取/保存/回滚模板;写操作需要管理员权限并记录审计日志。
  • 保存即编译:保存前自动备份原文件,调用 cgajs-engine 编译;编译失败立即恢复原文件并返回错误,不会入库。
  • 修改可追踪:每次保存生成 backups/cga/<slug>/<timestamp>.cga,提供 diff、回滚、改动列表与全量校验功能。
  • 全量资产 43 个编译通过:运行 migrate_nl2cga_assets.py 后,20 预建 + 23 参数化模板全部 success
NL2CGACGA 编辑器接入架构图全量库并加密码保护 2026-06-14 02:20

/cga.html 现在支持浏览和编辑 NL2CGA CGA 架构图中的全部 CGA 文件,并增加页面级密码保护。

  • 密码浏览:访问 cga.html 需要输入密码 316891(仅前端校验,会话期内免重复输入)。
  • 接入架构图全量库:新增 nl2cga-service/library/**/*.cga 来源,共 92 个 library 文件,与原有 43 个 NL2CGA 模板合计 135 个可编辑 CGA 文件
  • Library 编译支持 import:保存 library 文件时自动把整个 library/ 目录作为 workspace 传入引擎,使 import "../../base/roof.cga" 等相对路径正确解析。
  • 多次修改与备份策略:同一文件可无限次保存,每次自动备份;每个 slug 仅保留最近 20 份备份,防止磁盘无限增长。
  • 全量校验通过/api/v1/cga-library/verify-all 对 135 个文件重新编译,全部 success
NL2CGANL2CGA 商业化落地路线图与 Phase 1 启动 2026-06-14 00:45

确定“模板优先 + 本地小模型兜底”的九个月商业化路线,并完成本周当务之急:修复 NL2CGA 管道 bug、建立模板自动编译流水线、扩展 20 个预建模板、建立基准报告、评估本地 Ollama 可行性。

  • 修复 nl2cga_service.pyknowledge_context 在模板引擎匹配失败分支使用前未定义,已提前初始化并保留模板引擎错误上下文供 LLM 参考。
  • 模板自动编译校验流水线:新增 scripts/verify_nl2cga_assets.py,对 cga_assets 中所有 NL2CGA 资产批量编译并更新 compile_status/nl2cga_readyscripts/migrate_nl2cga_assets.py 现在失败时返回非零退出码。
  • 扩展 20 个 Tier 1 预建模板:新增 Mosque、Gothic Church、Modern Museum、Library、Gymnasium、Hospital、Hotel、Gas Station、Bus Stop;cga_assets 现有 29 个 NL2CGA 资产全部编译通过。
  • 建立基准报告:新增 training/baseline_report.py,对 50 条 benchmark 跑模板匹配基线;当前模板覆盖率 16%(8/50),模板编译成功率 100%,报告保存为 training/report-v1.json
  • 本地 AI 可行性评估:确认 E5-2670V2 + 32G 内存可运行 Qwen2.5-Coder-7B(Q4_K_M 约 4.7 GB);新增 docs/local-ai-setup.mdscripts/setup_local_ollama.sh
引擎修复 roofHip 屋顶与地块轮廓不匹配 2026-06-13 22:48

旧版 roofHip 直接使用 footprint 的轴对齐包围盒生成矩形屋顶,导致非矩形地块(如五边形、L 形)屋顶与墙体错位。现已改为基于真实 footprint 生成屋顶。

  • 矩形地块:自动检测实际四角,按真实长宽方向生成四坡屋顶,支持旋转矩形。
  • 非矩形凸多边形:使用轮廓外扩(overhang)+ 中心尖顶生成贴合地块的金字塔式屋顶。
  • 凹多边形 / 退化情况:回退到基于真实轮廓的金字塔屋顶,避免再生成错误的外接矩形。
  • 全量引擎测试通过(440 passed),cgajs-engine 重新构建并重启 cgajs-api 服务。
架构NL2CGA / Marketplace CGA 资产统一 P0+P1 上线 2026-06-13 23:15

按决策实施 P0+P1:建立 cga_assets 统一数据层,迁移并编译校验 NL2CGA 模板,改造服务优先读库;同步支持 Marketplace 分类字段与付费资产授权设计。

  • P0 建表:新增 cga_assetscga_category_mappings 模型与迁移;cga_files 增加 marketplace_categorycga_purchases 增加 cga_asset_id
  • P1 迁移 NL2CGA 资产:20 个预构建 + 参数化模板全部写入 cga_assets,经引擎编译校验,全部 nl2cga_ready=TRUE
  • 服务读库改造match_prebuilt_cga() 与参数化模板引擎优先查询 cga_assets,失败时回退内存库,不影响旧接口。
  • Marketplace 分类同步:上传/发布接口新增 category 字段;列表/Feed 支持 ?category= 筛选;新上传文件自动镜像到 cga_assets
  • 付费资产 NL2CGA 授权:新增 nl2cga_access_policy(free/purchase/subscription)与 nl2cga_purchase_price;实现余额扣费 + cga_purchases 记录的检查函数。
  • 历史失败示例标记:后台任务正在批量编译 1077 个 Marketplace 文件,失败示例仅标记 compile_status='failed',不下架、不删除,便于人工审阅。
OSM新增 OSM → CGA 城市建筑实验室 2026-06-13 22:15

上线子站点 osm.rulepackage.com,用于验证 OpenStreetMap 属性通过 JSON 导入 CGA 后批量生成建筑模型。

  • 提供 50 栋示例建筑数据(含 footprint、height、levels、building、wallColor)。
  • CGA 编辑器升级为一体式 CodeMirror,支持行号、语法高亮、自动补全(与 IDE 同款能力)。
  • 内置 Leaflet 地图:搜索城市、框选区域、范围 100m~1000m,通过 Overpass API 下载真实 OSM 建筑数据并自动执行 CGA 生成。
  • 默认 CGA 使用 import "building.json" as b 读取外部 JSON,支持 attr height = b.height 等字段绑定。
  • 批量生成并发限制为 2,避免 2H8G 服务器过载;支持“仅测 5 栋”快速验证。
  • 引擎 CLI / Worker 增加 workspace 解析支持,使 JSON 导入在 API 调用中可用。
  • API 域名白名单支持通配符 *.rulepackage.com,CORS 同时放行所有 rulepackage.com 子域。
规划NL2CGA 与 Marketplace CGA 资产统一方案 2026-06-13 22:40

updata.html 新增“NL2CGA 与 Marketplace CGA 资产统一方案”章节,提出建立 cga_assets 统一数据层 + 编译安全门的详细实施计划,待决策后执行。

  • 统一 NL2CGA 预构建模板、参数化模板、Marketplace 示例三类资产。
  • 通过 nl2cga_ready 与编译校验隔离失败示例,防止污染 NL2CGA 解析与自然语言生成。
  • 建议 NL2CGA 标签与 Marketplace 分类解耦,通过映射表关联。
  • 给出 P0~P5 分阶段实施计划、风险应对与待决策事项。
流程新增版本控制与网站修复发布流程 2026-06-13 21:14

updata.html 中新增“版本控制与网站修复发布流程”章节,明确引擎发版、前端热修、回滚方案、版本号记录与后续改进方向。

  • 补充“引擎发版流程”与“前端/网站修复流程”两条可视化流水线。
  • 明确当前生产环境无 CI/CD、无 git remote、无 staging,所有修改直接生效的风险与备份策略。
  • 列出 EngineVersion、前端 git commit、nginx 配置、环境变量四类版本/配置的回滚依据。
巡检全站站点/菜单/死链/逻辑问题检查报告 2026-06-13 23:30

本次对 www.rulepackage.commarketplace.cgajs.comapihand.cgajs.com 及引擎/NL2CGA 服务进行了静态扫描 + 人工抽查,共覆盖 376 个 HTML 文件。以下是详细检查报告与修复建议。

一、扫描统计

  • 扫描 HTML 文件:376 个(含 309 个函数详情页 ku/*.html)。
  • 确认死链 / 可疑链接:17 条(详见下文清单)。
  • 同页重复 ID:1 处(billing.htmlqrcode-img)。
  • JS 引用缺失 DOM ID:3 处(均为 billing.html 动态创建的 pay-jump-btn,静态分析误报,但逻辑上需警惕)。
  • 未设置 viewport 的页面:350 个(主要是 ku/*.htmldocs/*.html,移动端体验差)。
  • 表单缺少 action:2 处(auth.html 登录/注册表单,实际由 JS 拦截,可接受但建议保留 action="javascript:void(0)" 兜底)。

二、菜单与导航不一致(P0)

全站没有统一的导航组件,导致每个页面入口不同,用户容易迷路。

  • IDE 四件套菜单不统一
    • ide.html / IDEA.html / IDEB.html:首页 / 🏪 CGA市场 / 🐛 报告问题。
    • IDEC.html:首页 / 标准 IDE / 帮助。
    • IDEA 有 AI 切换按钮,IDEB 没有;IDEC 缺少用户下拉与发布入口。
  • 公开页菜单互相“漏页”
    • index.html 链接到 /docs//plugin.html/roadmap.html,但 ku.htmlnl2cga.htmlstudy.html 都没同时覆盖这些入口。
    • ku.html 使用 /timeline.html,而 index.html 使用 /roadmap.html;两页内容高度重复。
    • nl2cga.html 的市场链接写成 /marketplace.rulepackage.com/(相对路径 404),且缺少函数库、学习文档入口。
    • study.html 顶部导航只有 IDE / NL2CGA / Admin / GitHub;侧边栏才出现 Ku、Home。
    • roadmap.html 的市场链接同样是 /marketplace.rulepackage.com/,且缺少 Updata。
    • timeline.html 有 Updata,但缺少 Study / Marketplace / Plugin。
  • 用户中心/后台菜单断裂
    • admin.html 没有返回首页或监控页链接;监控看板卡片存在却不能跳转。
    • admin-monitor.html 只有 3 个入口(总览/监控/账单),账单还指向用户端 /billing.html
    • profile.html / billing.html 只互相链接 + IDE,缺少函数库/文档。
    • auth.html 没有任何站点导航。
  • 子站点无统一导航
    • marketplace.cgajs.com/index.html 导航只有 IDE / Profile / Login,且依赖 nginx 重定向回 www.rulepackage.com
    • apihand.cgajs.com/index.html 完全没有跨站导航。

三、死链与路径错误(P0)

  • index.html:底部“文档”链接到 /docs/,但该目录无 index.html,会 404 或暴露目录列表。
  • nl2cga.htmlroadmap.html/marketplace.rulepackage.com/ 是相对路径,应改为 https://store.cityvistion.cn/
  • plugin.html/pricing 不存在,出现在 Pro 版购买与激活教程两处。
  • marketplace.cgajs.com/index.html/profile.html 在子域名文件系统不存在,生产靠 nginx 跳转,但代码应显式写完整 URL。
  • study.html:函数库速查表多处链接到不存在的 /ku/scope.html/ku/geometry.top.html/ku/setTag.html(实际文件名为 scope.*.htmlgeometry.top.html 不存在、tag.html)。
  • omega-docs.html:链接到 /docs 同样无 index.html;正文还误写本地绝对路径 /www/wwwroot/www.cgajs.com/omega-docs.html
  • index.html:GitHub 链接仍是占位 https://github.com/yourname/cgajs-engine
  • cityengine-ops.html:页脚引用旧域名 createurban.com

四、JS 与交互逻辑问题(P1)

  • IDE / 编辑器
    • enhance.js 仍按 CodeMirror 6 的 .cm-content 取值,但页面使用 CodeMirror 5,导致自动同步 inspector/API 导出失效。
    • IDEA.htmlIDEB.html 调用 cm.getSearchCursor(),但未加载 CodeMirror searchcursor addon,会抛异常。
    • IDEC.html 调用未暴露的 window.__setWireframeModewindow.__ideEditor,相关按钮无响应。
    • IDEA.html 存在两个 aiAutoFix 定义,后者覆盖前者,导致侧边栏“自动修复当前代码”只是把错误复制到聊天框。
    • 功能诊断弹窗 #fd-modal-overlay 及相关函数在所有 IDE 中均为死代码,无入口触发。
  • 后台 / 权限admin.html):
    • loadReleaseKanban() 被定义两次,第二次覆盖第一次。
    • renderReleaseCard() 调用未定义的 promoteProd()rollbackVersion()
    • adminLogin() 把 admin token 同时写入 cgajs_token,污染用户 token 存储。
    • logout() 只清 cgajs_admin_token,不清共享 cookie 与用户 token。
    • 多处深属性访问无空值保护(u.balance.toFixedsys.load.joinstatus.production.version)。
    • renderReleaseCard() 把版本号/备份路径直接拼入 onclick,若含单引号会破化事件处理器。
  • 监控页admin-monitor.html):
    • 未登录时只更新状态栏,不跳 /auth.html
    • renderEndpointStats() / renderAlerts() 未转义输出,存在 XSS 风险。
    • updateGauge() 未对百分比做 0–100 截断。
  • 充值页billing.html):
    • 同页存在两个 id="qrcode-img"(初始 img 与后续 innerHTML 插入)。
    • data.pay_url 无效时直接 return,导致支付状态文案与轮询未初始化。
    • me.balance.toFixed(2) 在 balance 缺失时会抛异常。
  • 其它
    • omega.html:复制按钮在转换失败时也会显示“已复制”;大小写校验导致 .OBJ 被拒绝;失败分支假设后端返回 JSON。
    • help.html:侧边栏全部使用 href="#",前进/后退与 hash 定位体验差。
    • apihand.cgajs.com/index.htmlshowPage(id) 依赖内联事件的全局 event,不标准。

五、样式与移动端问题(P1)

  • ku/*.html(309 个函数页)与 docs/*.html 全部缺少 <meta name="viewport">,手机端无法阅读。
  • docs/*.html 使用浅色独立模板,与全站深色 GitHub 风格不统一,且无返回导航。
  • ku/*.html 页面间 CSS 变量与版式不一致(如 --accentmax-width),说明非统一模板生成。
  • nl2cga.html 使用未定义 CSS 变量:--border-hover--red--yellow--blue--green--text-secondary
  • study.html 内联样式引用 --fg-dim,但 :root 只定义了 --fg-muted
  • study.htmlmarketplace.cgajs.com/index.htmlapihand.cgajs.com/index.html 缺少 <link rel="icon">

六、内容重复与数据不一致(P1)

  • roadmap.htmltimeline.html 内容高度重复,都包含 NL2CGA 开发计划时间线。
  • nl2cga.htmlstudy.html 在架构、能力、路线图上大量重叠。
  • study.html 的“高频函数速查表”与 ku.html 职能重复。
  • nl2cga.html:架构统计“83 文件 / 3,811 行”与列出的“92 文件 / ~3,656 行”不一致;目录名 religious/agricultural/ 与实际 religious_monumental/agricultural_rural/ 不一致。
  • study.html:仍写“Beta 测试站已下线”,却又描述 Beta 构建流程;部署表写前端目录为 /www/wwwroot/www.cgajs.com/,实际为 /www/wwwroot/www.rulepackage.com/;Grammar 工作流步骤 8/9 重复 npm run build
  • apihand.cgajs.com/index.html 使用 Three.js r128 CDN,与引擎文档声明的 three@0.164.1 不一致。

七、子站点与域名问题(P1)

  • marketplace.cgajs.com/index.html 实际通过 nginx 部署在 marketplace.rulepackage.com,文件路径与域名不一致。
  • apihand.cgajs.com/index.html 同理部署在 apihand.rulepackage.com
  • Marketplace SPA 没有自己的 auth/profile 路由,完全依赖 nginx 重定向,SEO 与直接访问体验差。

八、修复建议(按优先级)

  1. 统一导航组件:抽取一个 site-nav.js / 共用 header 片段,注入到所有页面;确保核心入口(IDE、函数库、NL2CGA、Marketplace、插件、文档、更新日志、管理后台)在每个页面都可到达。
  2. 修死链
    • /docs/ 下补 index.html(聚合 docs/*.html 与 Markdown),或把首页“文档”改为 /study.html
    • 所有 Marketplace 链接改为 https://store.cityvistion.cn/
    • 修正 study.html 函数库速查表中的错误文件名。
    • plugin.html/pricing 改为 /billing.html 或创建 pricing 页。
    • 修正 GitHub 占位链接。
  3. 修复 IDE JS 兼容性问题:让 enhance.js 同时支持 CodeMirror 5;补齐 CodeMirror searchcursor addon;清理 IDEC 中无效的全局调用;合并/移除 aiAutoFix 重复定义。
  4. 修复 admin 逻辑缺陷:移除重复函数定义、补充缺失的 promoteProd/rollbackVersion、隔离 admin/user token、logout 清理共享 cookie、对后端字段做空值保护。
  5. 修复充值/监控页:去重 qrcode-img ID、处理 pay_url 无效分支、修复 admin-monitor 的 XSS 与未登录跳转。
  6. 统一模板与 viewport:为 ku/*.htmldocs/*.html 统一生成模板并补 viewport;统一 docs 主题色;清理未定义 CSS 变量。
  7. 内容去重:合并 roadmap.html / timeline.html;让 study.html 专注于架构与开发指南,函数详情引流到 ku.html;修正 nl2cga.html 的统计数字与目录名。
  8. 清理废弃页面cga-ku.html 可被 301 到 /ku.htmlomega.html / omega-docs.html 如已废弃建议加 deprecation banner 或下线。

九、附录:按页面问题速查

页面主要问题
ide.html / IDEA / IDEB / IDEC菜单不统一、CM5/CM6 混用、无效全局调用、死代码弹窗
index.html/docs/ 死链、GitHub 占位、菜单与其它页不一致
ku.html / ku/*无统一 header、ku 页无 viewport、CSS 变量不一致
nl2cga.html市场链接错误、缺失入口、数据不一致、未定义 CSS 变量
study.html死链、--fg-dim 未定义、内容重复、路径错误
updata.html导航仅覆盖自身锚点,缺少主要站点入口
plugin.html/pricing 死链、/ku.html 重复、菜单缺失
roadmap.html / timeline.html内容重复、市场链接错误、菜单不一致
admin.html重复函数定义、未定义按钮回调、token 污染、logout 不彻底
admin-monitor.html未登录不跳转、XSS、gauge 越界、菜单断裂
billing.html重复 ID、pay_url 无效分支、balance 空值风险
profile.html / auth.html导航缺失、auth cookie 在 HTTP 环境无法写入
marketplace.cgajs.com依赖 nginx 重定向、无自身 auth/profile 路由
apihand.cgajs.com无跨站导航、showPage 依赖全局 event
omega.html / omega-docs.html体验/文案 bug、疑似废弃
修复block-body 解析歧义修复 + IDE 完整函数补全 2026-06-13 17:24
  • 问题:官方 CGA 示例中大量 setbacksplitAreasplitAndSetbackPerimeteroffsetshapeL/U/Omodifyunion/subtract/intersect 的块语法(如 { front : A }{ '0.2 : ColorMe })被解析为 StochasticBody,导致分支被忽略、失败用例增多。
  • 根因:grammar 中 blockBody'{' ruleBody '}' 放在 '{' paramBlockBranch ... '}' 之前,ANTLR 在歧义时优先选择 stochastic 解释,AST 生成器因此产生 StochasticBody 而非 ParamBlockBody。
  • 修复:在 evaluator.ts 中新增 normalizeBlockBody(),把 StochasticBody 转换为通用的 parameter-block 分支格式(2 段 selector:body 或 3 段 length:depth:body),并在所有相关 block 操作中统一使用;splitArea / splitAndSetbackPerimeter 的 repeat 模式因此正确执行。
  • IDE 补全增强:把 cgaHint 的列表项改为直接显示完整函数签名(如 extrude(distance, [world.y])),并支持对签名内容模糊过滤;重新生成 cga-autocomplete.js,升级 cga-codemirror-mode.js?v=21 / cga-autocomplete.js?v=15 缓存戳,覆盖 ide.html / IDEA.html / IDEB.html / IDEC.html。
  • 验证npm test 440/441 通过(1 skipped),其中 split-areasplit-and-setback-perimeter 两个重点失败用例已修复;npm run build 零错误;dist-stable 已重新同步。
交付Phase 1~5 落地答疑 — CSG/Top5/import/LOD 2026-06-10 17:24
  • 1. git commit / deploy / 修改 dist-stable 的影响
    • git commit:仅把当前修改记录到本地仓库,不会直接影响线上;可随时 git revert 或切分支回滚,是最安全的操作。
    • npm run build:生成 dist/,这是最新构建产物,但生产环境默认加载的是 dist-stable/,所以只改 dist/ 不会立即影响用户。
    • ./scripts/deploy.sh prod / 管理后台“发布到生产”:会把 dist/ 同步到 dist-stable/,同时同步前端文件(ide.html / enhance.js / ku.html 等),并可能触发 API worker 重启。这是真正影响线上用户的一步
    • 修改 dist-stable/ 的风险:如果构建产物有隐藏 bug,所有通过 importmap 加载引擎的页面(IDE、Marketplace 预览、API)都会受影响,可能导致编译大面积失败。建议发布前确保 npm test 通过(当前仅剩 2 个已知旧基线失败),并做好全站备份。
  • 2. 失败用例是否需要用新基线?
    • 当前失败的 split-areasplit-and-setback-perimeter旧有实现缺陷,不是本次改动引入的回归。
    • 不建议直接改成新基线:如果把它们标记为“通过”或从 CI 中移除,会掩盖真实几何算法缺口,后续 splitArea 的 repeat 分发、perimeter split 的 segment 索引等 bug 就不会再被监控。
    • 影响:保持失败会阻止“零失败才能部署”的严格 CI 策略;建议的正确做法是继续修复底层算法,而不是降低测试标准。若短期内必须发布,可在部署脚本中明确列出这 2 个已知豁免项,而不是修改测试断言。
  • 3. 为什么代码编辑器没有了自动补全功能?
    • 根因assets/cga-codemirror-mode.js 里的静态补全数组被清空,并计划从 /cga-autocomplete.js 提供的 window.CGA_COMPLETIONS 读取;但 mode 文件实际仍使用自己的空数组,没有引用 window.CGA_COMPLETIONS
    • 叠加问题:mode 文件在 HTML 的 <head> 中较早加载,而 cga-autocomplete.js 在页面底部加载,即使引用全局变量,mode 初始化时也拿不到数据。
    • 修复:在 cgaHint 里改为动态读取 window.CGA_COMPLETIONS || [],不再依赖加载顺序;并把 cga-codemirror-mode.js 缓存戳从 v=19 升到 v=20(ide.html / IDEA.html / IDEB.html / IDEC.html 全部更新)。
    • 效果:542 条 CGA 函数/操作/关键字/注解补全恢复,支持带说明和参数占位符的 snippet 插入。
  • 4. JSON 数据绑定 import 的具体用法与影响
    • 语法
      import "https://api.example.com/building/123.json" as data
      // 或
      import data: "./params.json"
    • 解析与绑定:引擎通过 importResolver 或全局 fetch 拉取 JSON,解析成功后把整个对象写入初始 shape 的 attributes,键名为 alias(上例即 data)。
    • 在 CGA 中使用
      attr height = data.height
      attr wallColor = data.materials.wall
      case data.zone == "commercial" : CommercialFacade
      else : ResidentialFacade
    • 典型场景
      • 从 GIS/ CityJSON / GeoJSON 批量读取地块属性驱动生成;
      • 前端表单把用户参数 POST 到临时 JSON URL,再交给引擎编译;
      • 风格库、材质配置、LOD 阈值等外部化,规则文件只保留逻辑。
    • 影响:彻底把“数据”和“规则”解耦;规则可以通用化,同一份 CGA 加载不同 JSON 就能生成不同城市/地块/风格;也为 NL2CGA 从知识库注入参数打通了最后一段。
  • 5. 远程/版本化 import(pkg:)的具体作用与表现
    • 语法
      import "pkg:facade@v2.1" as facade
      import "pkg:roof-kit@latest/lib/roof.cga" as roofs
    • 解析规则pkg:id@version/path 会被映射到 {baseUrl}/api/pkg/{id}/{version}/{path};若省略 path 则默认 index.cga;未指定 version 则默认 latest
    • 递归加载:被 import 的 CGA 内部还可以继续 import 其他模块,引擎会递归解析并合并到同一张 AST;同时支持 alias 命名空间(facade.Main)和原始名称兼容调用。
    • 市场表现
      • Marketplace 不再只是“示例仓库”,而变成可版本化的模块 registry;
      • 用户可以发布 屋顶库 v1.0立面库 v2.1,其他规则按版本引用,避免“改一个库所有规则崩掉”;
      • 企业/团队可搭建私有 registry,baseUrl 指向内网地址,实现代码复用与权限隔离。
    • 与 JSON import 结合
      import "pkg:building-config@v1" as cfg
      import "https://data.city/osm/parcel-42.json" as parcel
      
      Init -->
        extrude(parcel.height)
        color(cfg.wallColor)
        comp(f) { top: cfg.roofRule }
    • 影响:CGA.js 从“单文件脚本”升级到“模块化、版本化、数据驱动的规则生态”,与 CityEngine 桌面版相比形成 web 原生优势。
前端修复 IDE 自动补全失效(根因版) 2026-06-10 17:24
  • 根因assets/cga-codemirror-mode.js 里把静态补全数组清空后,cgaHint 实际仍在使用自己的空数组,没有读取 /cga-autocomplete.js 注入的 window.CGA_COMPLETIONS;同时 mode 文件在 <head> 中早于 autocomplete 文件加载,即便引用全局变量也拿不到数据。
  • 修复:把 cgaHint 改为运行时动态读取 window.CGA_COMPLETIONS || [],不再依赖脚本加载顺序;542 条唯一补全项(函数/操作/关键字/注解)恢复,带说明与参数占位符。
  • 缓存戳cga-codemirror-mode.js?v=19 → v=20(ide.html / IDEA.html / IDEB.html / IDEC.html 全部同步),cga-autocomplete.js?v=14 保持不变。
后端Kimi Code 后台连接测试超时修复 2026-06-13 00:10
  • LlmClient.chat() 增加超时/网络、HTTP 5xx、限流以及“System is too busy”类错误的指数退避重试机制(最多 3 次),提升“连接测试”在高延迟或被限流场景下的成功率
  • 增强响应体错误解析:对返回 200 但 body 含 error/code/message 的异常响应进行识别,并将访问被拒绝类错误归类为 LlmAuthError
  • Kimi Code API 要求请求方必须是受认可的 Coding Agent(Kimi CLI、Claude Code、Roo Code 等),因此保留 User-Agent: KimiCLI/1.5 身份标识
  • Kimi Code 当前模型只接受 temperature=1.0,代码已自动对 kimi_code provider 强制使用该温度值
  • 统一使用 requests.Session,改善连接复用
  • 说明:Kimi Code 官方模型 ID 固定为 kimi-for-coding,后端会自动映射到最新版本(当前为 2.7),客户端无需修改 model 名称即可使用最新模型
引擎函数库补全、文档补齐、测试补充与冗余文件清理 2026-06-12 23:30
  • 清理冗余文件:删除网站根目录下的 *.bak.**.bak.latest 备份文件;保留 IDEA/IDEB/IDEC.html(help.html 仍引用这些 AI 方案入口)
  • 补齐函数文档:为缺失的 52 个函数/操作自动生成 /ku/*.html 详情页(如 geometry.*primitivePyramidcopyinstancescattersetbacktag 等)
  • 补全签名库:在 src/functions/signatures.ts 中新增 57 条签名,覆盖 evaluator 已实现但此前缺失的操作与函数(如 NILconvexifysetbackgeometry.*lenprint 等)
  • 补充冒烟测试:新增 tests/e2e/operation-smoke.test.ts,覆盖 35 个此前缺少测试的操作(Transform 别名、几何清理、offset、setback、shapeL/U/O、copy、repeat、scatter 等)
  • 重新生成知识库grammar-knowledge.json 已同步最新签名;引擎已重新构建并更新缓存戳至 v=21
  • 测试全绿407 passed | 1 skipped
引擎Shape Recomposition 文档落地 + print 日志可视化 + Marketplace IDE 联动修复 2026-06-12 18:32
  • CityEngine Shape Recomposition 文档学习:完整学习官方 “Shape Recomposition: Essential Knowledge” 页面,提取 13 个 CGA 示例并全部通过回归测试
  • 新增回归测试tests/e2e/shape-recomposition.test.ts 覆盖 inline(recompose)modifycleanupGeometryroofHip、布尔运算等全部文档示例
  • 函数库分类重构
    • 新增 recomposition 分类:将 modifycleanupGeometry 归入形状重组类别
    • inlineunionsubtractintersect 统一归入 boolean 分类(Rule Inlining and Boolean 3D)
    • cleanupGeometry 补全签名描述与示例
  • 文档自动生成:重新运行 scripts/extract-grammar-docs.mjsgrammar-knowledge.json 已同步最新分类与签名
  • Marketplace 示例发布:13 个 CityEngine 形状重组示例已发布到 Marketplace(ID #1098 ~ #1110),标签 recomposition,inline,modify,cityengine-doc
  • print / report 输出可视化:CGA 中的 print(...)report(...) 输出现在会被收集并返回给 IDE,在 HUD 右下角新增 Console 面板实时显示
  • Marketplace → IDE 联动修复
    • ide.html 现在自动读取 ?cga_id= 参数并加载对应 CGA
    • Marketplace “在 IDE 中打开”链接修正为 https://rulepackage.cityvistion.cn/ide.html?cga_id=...
  • 缓存戳升级:引擎 importmap v=18ide-core.js?v=22enhance.js?v=prod-1.3.4
引擎CGA.js 函数库全面升级 — 294/309 完成 / 15 部分 / 0 未实现 2026-06-11 22:50
  • 函数实现度全景统计:ku.html 新增顶部统计面板,实时显示 294 已完成 / 15 部分完成 / 0 未实现,支持按状态筛选
  • 新增数学函数log(x) 自然对数、round(x) 四舍五入
  • 新增字符串函数search(string, substring) 查找子串位置、strcasecmp(a, b) 不区分大小写比较
  • 新增数组/转换函数array(...) 数组构造函数
  • 新增颜色函数hsb(h, s, b) HSB 转 RGB、rgb(r, g, b) RGB 构造函数、colorConvert(color, from, to) 颜色空间转换(支持 rgb↔hsb)
  • 新增 Asset 函数assetType(path) 返回资源类型(image/model/unknown)、assetWidth/Height/Depth(path) 返回资源尺寸
  • 新增文件函数filePath(path) 返回文件路径
  • 新增拓扑查询函数topology.averageNormal(shape) 返回平均法向量、topology.connectedFaces(shape) 返回连通面组数
  • 新增常量PI (3.14159...)、E (2.71828...),可在表达式中直接使用
  • 新增 Operationsrepeat(n) 重复形状 n 次、copy() 复制当前形状、instance(name) 创建命名实例
  • Scope 属性全面支持scope.sx/sy/sz/tx/ty/tz/rx/ry/rz 已可在表达式中访问
  • 语法关键字状态修正attr/const/start/extension/style/import/version/case/else/conditional/stochastic/with-params 标记为已实现(解析器层面支持)
  • 注解状态修正@Group/@Order/@Range/@Color/@Enum/@Hidden/@Locked/@Description/@Deprecated 标记为已实现(解析器层面支持)
  • 部分实现函数状态更新convert 标记为已实现(基础坐标转换)
  • ku.html 重构:从静态 HTML 改为从 ku-data.json 动态加载,支持按完成状态筛选,顶部新增统计面板
  • ku-data.json 数据更新:309 个函数全部录入,294 个已实现,15 个部分实现,0 个未实现
架构NL2CGA CGA 文件架构图 — 83个文件 / 3,811行 / 五层设计 2026-06-11 11:15
  • 目录结构总览/www/wwwroot/nl2cga-service/library/ 下共 83 个 .cga 文件,总计 3,811 行,平均 46 行/文件
  • 第一层:总调度入口main.cga(250行)— 解析 buildingType + buildingStyle 双维度路由,通过 case 分支调用对应分类的 Generate() 规则
  • 第二层:全局配置层config/ 目录含 3 个文件 — global_params.cga(全局参数/属性默认值)、lod_settings.cga(Lod0~Lod3 分级阈值)、style_mapping.cga(风格编码 → CGA 分类映射表,112行)
  • 第三层:基础组件层base/ 目录含 6 个文件 — roof.cga(5种屋顶+LOD分级,45行)、facade.cga(窗框/门廊+LOD分级,48行)、material.cga(PBR材质/纹理映射,44行)、structure.cga(柱网/梁架,35行)、decoration.cga(雕花/瓦片,35行)、utils.cga(工具函数,21行)
  • 第四层:分类建筑层:8 大分类共 73 个文件 — residential 居住(33个) / commercial 商业(8个) / industrial 工业(7个) / public 公共(6个) / religious_monumental 宗教纪念(8个) / transportation 交通(7个) / agricultural_rural 农业乡村(4个) / special 特殊(4个)。每个分类暴露统一接口 Generate(floorCount, lod)
  • 第五层:示例与扩展examples/(3个场景:中式村落/欧洲城市/现代街区)+ custom/(2个用户自定义风格预留接口)
  • 数据流:用户输入 → 意图识别 → main.cga 调度 → import config + base → 分类 Generate() → 调用 roof/facade/material/structure/decoration → 引擎编译器 → Three.js BufferGeometry → GLB/OBJ/JSON 输出
  • 架构设计原则:分层解耦 / 统一接口 / LOD 分级 / import 链完整 / 风格映射 / 用户扩展隔离
  • 现状与改进:平均 46 行/文件偏薄(框架代码为主),计划提升至 100+ 行(补充 LOD L2 细部);base 层计划新增 lighting.cga(光照系统)和 terrain.cga(地形适配);config 层计划新增 climate_config.cga(气候带)和 era_config.cga(时代配置)
  • 详细文档/www/wwwroot/www.rulepackage.com/docs/NL2CGA-CGA-LIBRARY-ARCHITECTURE.md(20KB,含完整目录树、层次图、数据流图、行数统计表)
架构引擎函数库 + NL2CGA 生成能力 — 深度诊断与三年路线图 2026-06-11 10:55
  • 引擎函数库深度诊断:基于 CityEngine 2025.1 官方文档与当前代码库(177+ 内置函数 / 80+ 几何操作)全面对比,识别出 8 个 P0 必须实现10 个 P1 重要缺失6 个 P2 中期增强 函数/操作
  • P0 核心缺失inset(多边形内偏移)、setPivotMatrix(矩阵级 pivot 控制)、writeTextFile/writeFloatTable/writeStringTable(文件写出)、geometry.angle/du/dv/uMin/uMax/vMin/vMax(修复硬编码返回值)等
  • P1 重要缺失trim(当前 no-op)、convexify(仅 2D)、alignScopeToGeometry(归零简化)、insert/i(仅 stub)、asset*Sort*(伪排序)、convert(no-op)等
  • 解析器改进:补齐 StyleDecl / ExtensionDef / ImportDecl 的 AST→Evaluator 链路;增加 strictMode 错误恢复;修复多维索引 ragged array 支持;Lexer 增加 \n/\t/\uXXXX 转义
  • 测试覆盖补强:当前仅 ~28 个函数有测试,~140+ 个无测试。计划分五阶段补测:Math/String/Array/Color(2周)→ Geometry Query(2周)→ File I/O(1周)→ Context(1周)→ Roof 家族(1周)
  • NL2CGA 诊断:Tier 1 预建模板 11 个(无参数化)、Tier 2 参数化模板仅 9 个(全部中国古建)、知识库实体仅 8 个(全部中国宫殿)、CGA 资产库 60+ 文件但平均仅 30 行、意图识别纯关键词匹配无语义
  • NL2CGA 六阶段提升方案
    • Phase 1:参数化模板从 9→50+,覆盖全球主要建筑风格(中国/伊斯兰/哥特/巴洛克/现代/装饰艺术/日式/印度/非洲/基础设施/景观)
    • Phase 2:Tier 1 预建模板增强参数化,新增清真寺/哥特教堂/现代文化馆
    • Phase 3:知识库实体从 8→50+,覆盖全球标志性建筑
    • Phase 4:意图识别升级 Embedding 语义匹配(BGE / text-embedding-3-small)
    • Phase 5:修复规则从 10→30+,覆盖语义错误(roof 参数、comp 选择器、case 穷尽性等)
    • Phase 6:AST 直接生成(绕过文本 parse,零语法错误)
  • 关键 KPI:引擎测试覆盖率 15%→85%;NL2CGA Tier 3 首次编译成功率 40-60%→70-85%;修复后成功率 60-75%→85-95%;引擎与 CityEngine 兼容度 25%→55%
  • 详细报告/www/wwwroot/www.rulepackage.com/docs/CGAJS-ENGINE-NL2CGA-ROADMAP.md(19KB 完整方案)
运维全站备份 — 636MB 完整快照 2026-06-11 04:31
  • 备份目录/root/backups/cgajs_prod_20260611_043125
  • 备份大小:636 MB,共 29,435 个文件
  • 备份内容
    • 前端 www.rulepackage.com(IDE、首页、文档、管理后台等全部静态文件)
    • API 后端 cgajs-api(FastAPI 路由、模型、服务、配置、训练数据)
    • 引擎 cgajs-engine(TypeScript 源码、dist/dist-stable 构建产物、测试)
    • 子站点(Marketplace / 图床 pic / API文档 apihand / NL2CGA服务 / cgajs-project)
    • Nginx 配置(sites-enabled / conf.d / nginx.conf)
    • SSL 证书(Let's Encrypt + panel 证书)
    • systemd 服务配置(cgajs-api.service 等)
  • 备份习惯:每次重大修改前执行全站备份,保留历史快照,支持随时回滚
路线图CGA.js 3D 世界生成发展规划 — 五阶段时间表 2026-06-11 04:30
  • 愿景:让程序化的力量重塑三维世界 —— 从单体建筑到完整城市,从静态模型到动态生态系统,成为生成式 3D 时代的核心基础设施
  • Phase 1 — 引擎夯实期(2026 Q3,7~9月)
    • Boolean CSG 替换:引入 three-bvh-csgmanifold 实现真正的网格布尔运算(开窗、阳台切割不再出错)
    • Split 非 Box 裁剪完善:实现基于几何包围盒的局部坐标裁剪,旋转/复杂网格的 split 结果精确
    • Instance 实例化实现:scene-builder 中检测同材质+同几何,使用 THREE.InstancedMesh 降低 Draw Call
    • 模板引擎扩展至 50 个:覆盖全球主要建筑风格(哥特式/巴洛克/日式/伊斯兰/现代主义等)
    • AST 直接组装:跳过文本 parse 阶段,Python 层直接组装 AST 节点调用引擎,速度提升 10 倍
    • 构件库建立:柱/梁/窗/门/屋顶/栏杆等标准构件,支持组合式生成
    • Import 跨文件支持:引擎层实现 import 加载器,模块化 CGA 开发
    • IDE 实时预览requestAnimationFrame 循环 + Stats.js + OrbitControls 相机控制
    • 目标:编译成功率 >95%,模板生成延迟 <500ms
  • Phase 2 — 城市级生成(2026 Q4,10~12月)
    • LOD 四级系统:Lod0~Lod3 在 CGA 层和渲染层同时实现,根据相机距离自动切换
    • 道路网络生成:L-System 道路生长算法,主干道/次干道/支路三级网络
    • 地块划分:Voronoi 图 + 用地类型(住宅/商业/工业/绿化/公共服务)
    • 建筑批量生成:根据用地类型自动选择 CGA 规则模板,批量参数化生成
    • 植被填充:Scatter 操作 + 气候带植被库(热带/温带/寒带/沙漠)
    • 地形适配:Perlin Noise 地形生成,建筑自动贴合地形坡度
    • 水体系统:河流/湖泊/海洋生成,支持水面反射和波浪动画
    • 材质图集:自动打包纹理为图集,Draw Call 从数百降至个位数
    • 目标:场景规模从单体建筑扩展至 城市街区(~500万三角面)
  • Phase 3 — 智能模拟(2027 Q1,1~3月)
    • 多智能体城市模拟:居民 Agent(行为树驱动工作/居住/购物/娱乐)、车辆 Agent(A*路径规划+流量模拟)、建筑 Agent(能耗/寿命/维护状态)
    • 时间系统:昼夜循环(光照/阴影/建筑灯光自动开关)、四季变化(植被/天气/人群)
    • 天气系统:晴/雨/雪/雾,影响光照、材质、交通流量
    • 事件系统:自然灾害(地震/洪水)、政策变化( zoning 调整)、经济波动
    • 城市演化:建筑老化→拆除→重建,城市形态随时间自然演变
    • 资产管道完善:OBJ/GLB/FBX 导入,外部模型与 CGA 生成几何融合
    • PBR 材质库:200+ 预设材质,支持自定义导入和实时编辑
    • 目标:场景规模 完整城市(~1000万三角面),支持实时模拟
  • Phase 4 — AI 深度融合(2027 Q2,4~6月)
    • NeRF 照片重建:用户上传建筑照片 → NeRF 重建 3D 模型 → 自动提取 CGA 规则参数
    • 风格迁移:将实景建筑照片风格迁移到 CGA 生成模型,一键统一城市风格
    • 虚实融合:NeRF 实景背景 + CGA 程序化前景,数字孪生基础
    • 自进化引擎:LLM 根据需求描述自动生成缺失的 CGA 函数实现,语法自动扩展
    • 自动性能优化:编译结果自动分析瓶颈 → 生成优化建议 → 自动应用
    • 训练数据自动化:每日自动从成功案例导出训练数据,触发增量 LoRA 微调
    • 目标:NL2CGA 编译成功率 >98%,无人干预的引擎自动进化
  • Phase 5 — 元宇宙(2027 Q3~Q4,7~12月)
    • WebXR 支持:VR/AR 模式下沉浸式浏览生成场景,手柄交互编辑
    • WebGPU 渲染:从 WebGL 迁移至 WebGPU,性能提升 3~5 倍,支持 ~5000万三角面
    • 实时协作:多用户同时编辑同一场景,WebSocket 同步,冲突自动合并
    • 数字孪生:对接 IoT 传感器数据(温度/人流/能耗),实时更新建筑状态
    • 区块链资产:CGA 规则作为 NFT,交易市场支持版权追踪和收益分配
    • 云端渲染:复杂场景云端光追渲染,前端流式传输
    • UGC 生态:用户创作 CGA 规则 → Marketplace 交易 → 游戏/影视/城市规划使用
    • 目标:构建完整的 程序化 3D 元宇宙 生态
  • 关键技术指标演进
    指标当前Phase 1Phase 2Phase 3Phase 5
    编译成功率~85%>95%>95%>95%>98%
    生成延迟3~5s<500ms<1s<1s<500ms
    场景规模单体建筑单体建筑城市街区完整城市元宇宙城市
    三角面数~50万~100万~500万~1000万~5000万
    FPS~30~60~30~30~60 (WebGPU)
    自动化人工驱动半自动自动智能自治
  • 详细报告:完整架构分析 + 发展规划已保存至 /www/wwwroot/www.rulepackage.com/docs/CGAJS-ARCHITECTURE-REPORT.md
前端IDE 界面清理 — 失效菜单移除 + CGA 市场模态化 2026-06-11 04:07
  • 顶部导航清理:移除失效的「函数库」和「知识库」导航链接,当前仅保留「首页」「CGA 市场」「报告问题」三个入口
  • CGA 市场从下拉改为模态窗口:点击「🏪 CGA 市场」按钮后弹出居中模态窗口(而非顶部下拉面板),含搜索框 + 结果列表 + 前往 Marketplace 链接,点击外部或 × 关闭
  • 编辑器/AI/市场三独立:编辑器保持中间左侧、AI 生成保持右侧边栏、CGA 市场为独立弹窗,三者不再挤在同一个标签面板内
  • 检查器移除 LotSize:Inspector 面板去掉「地块尺寸 (Lot Size)」区块(含 X/Z 滑块和 10m/50m/100m 预设按钮),该功能已由 @LotSize 自声明机制替代
  • 缓存清除inspector-enhance.js 版本号从 v=prod-1.3.2 升级到 v=prod-1.3.3,强制浏览器加载最新版本
  • 备份:ide.html / enhance.js / inspector-enhance.js 均已备份(时间戳 1781122073)
架构CGA 全球建筑代码资产库 — 92 个 .cga 文件骨架完成 2026-06-10 17:15
  • 8 大建筑分类,92 个 .cga 文件
    • base/ 6 个 — 屋顶/立面/结构/材质/装饰/工具(LOD 集中控制层)
    • config/ 3 个 — 全局参数 / LOD 设置 / 风格映射常量表(共 60+ 常量)
    • residential/ 33 个 — 亚洲传统(5) + 欧洲传统(10) + 美洲传统(8) + 现代当代(10)
    • public/ 6 个 — 教育/医疗/文化/体育/会展/行政
    • commercial/ 8 个 — 零售(3) + 酒店度假(2) + 餐饮/金融/服务
    • industrial/ 7 个 — 重工业/轻工业/高新技术/仓库/物流/堆场/能源
    • transportation/ 7 个 — 公路/铁路/地铁/停车/桥梁/港口/机场
    • religious_monumental/ 8 个 — 基督教/伊斯兰教/佛教/道教/印度教/犹太教/锡克教/纪念性
    • agricultural_rural/ 4 个 — 种植/养殖/加工/乡村公共
    • special/ 4 个 — 军事/娱乐/应急/市政
    • custom/ 2 个 — 用户自定义风格占位
    • examples/ 3 个 — 中式村落/欧洲街区/现代商务区
  • main.cga 总调度入口(248 行):按 buildingType + buildingStyle 自动路由到对应分类规则,统一对外接口 Generate(floorCount, lod)
  • LOD 集中控制设计:L0/L1/L2 三级精度仅在 base/roof.cgabase/facade.cga 中实现,上层分类规则只覆盖风格参数(roofAngle / wallColor / windowWidth),不写 LOD 逻辑
  • 风格参数化:每个 .cga 文件顶部定义 attr 风格参数,支持前端 UI 动态调整或 GIS 批量导入
  • 关键发现:引擎 evaluator 当前不支持 import 跨文件规则调用(parser 已解析 import 声明,但 evaluator 未加载被 import 的文件)。短期通过 NL2CGA Python 层内联组装解决,中期需在引擎层实现 import 加载器
  • 代码位置/www/wwwroot/nl2cga-service/library/
模板引擎Phase 1:参数化模板引擎 — 系统主导生成 2026-06-10 01:05
  • 三层生成架构
    • Layer 1 模板引擎:常见建筑直接匹配模板,AST 组装生成,0轮LLM调用,精度100%
    • Layer 2 结构化组装(未来):从构件库组合,跳过文本parse阶段
    • Layer 3 LLM辅助:创意建筑兜底,Prompt注入白名单函数约束
  • 5个参数化模板
    • 太和殿(重檐庑殿顶)— 11个参数:面阔/进深/坡度/柱网/颜色
    • 天安门(重檐歇山顶)— 6个参数
    • 六角亭(攒尖顶)— 5个参数
    • 牌坊(牌楼)— 5个参数
    • 城墙 — 4个参数
  • 编译验证闭环:生成 → 编译 → 错误 → 自动修复 → 再验证,最多3轮
  • NL2CGA 集成:用户说"生成太和殿" → 模板引擎匹配 → 0ms生成 → 编译通过 → 输出代码,不经过LLM
  • 速度对比:模板引擎 100ms vs LLM 3-5s,快30-50倍
  • 代码位置/www/wwwroot/cgajs-api/nl2cga/template_engine/
智能地块@LotSize 自动地块判读 — 无需手动调节 2026-06-10 00:40
  • 去掉手动调节:移除 Inspector 地块尺寸滑块,用户不再需要手动猜地块大小
  • CGA 自声明机制:代码第一行添加 # @LotSize(宽, 深),IDE 编译前自动解析并设置初始 shape
  • 示例已更新:所有标准示例均加入 @LotSize 声明
    • 柱子/柱础 → @LotSize(2, 2)
    • 斗拱 → @LotSize(3, 3)
    • 庑殿顶/歇山顶 → @LotSize(17, 13)
    • 太和殿 → @LotSize(64, 37)
  • NL2CGA 自动生成:Prompt 已更新,LLM 生成时会根据建筑实体库的 recommended_lot 自动加入 @LotSize
  • 向后兼容:没有 @LotSize 的代码仍使用默认 10×10m 地块
布尔运算3D Boolean CSG 优化 + 5个标准古建示例 2026-06-10 00:30
  • union 去重优化:合并几何时启用顶点焊接(tolerance=0.001),消除重复顶点,减少面数
  • subtract 精确化:从重心测试升级为顶点级包围盒测试(全部在内→剔除/全部在外→保留/部分重叠→保留),大幅减少误删
  • intersect 保持:Sutherland-Hodgman 多边形裁剪,精度中等,已满足基本需求
  • inline 支持:append(默认)/ unify / recompose 三种合并策略
  • 5个标准古建示例已发布到 CGA 市场
  • 示例代码位置/www/wwwroot/www.cgajs.com/assets/examples-standard/(01-column.cga ~ 05-gable-roof-double.cga)
  • 稳定性:npm test 19/19 文件通过,374/374 测试通过
大尺度支持地块尺寸控制 + 太和殿体量适配 2026-06-09 23:35
  • 地块尺寸控制面板:IDE Inspector 面板新增"地块尺寸(Lot Size)"区域,含 X/Z 方向滑块(5-200m)和 10m/50m/100m 一键预设按钮。调节后自动触发重新编译
  • 默认地块扩展:原 createScope(0,0,0,0,0,0,10,1,10)(10×10m)改为通过 window.__lotSize 全局变量控制,支持任意尺寸地块
  • 太和殿地块适配:CGA 代码中加入 scale_factor = min(scope.sx/64, scope.sz/37, 1.0) 自动缩放,小地块也能生成比例正确的太和殿(但会提示"效果会失真")
  • 建筑实体库地块要求:8个实体均加入 min_lot_sizerecommended_lot。太和殿:最小 50m×30m,推荐 64m×37m
  • NL2CGA Prompt 注入地块警告:知识检索器现在输出 "⚠ 重要:太和殿需要至少 50m × 30m 的地块,否则柱网比例会失真",大模型生成时会被告知地块要求
  • 文件位置
    • 完整LOD版:https://rulepackage.cityvistion.cn/assets/private-examples/taihe-palace-lod.cga
    • 简化适配版:https://rulepackage.cityvistion.cn/assets/private-examples/taihe-palace-lod-minimal.cga(294行,含LOD+地块缩放)
性能架构LOD自动精度控制 + FPS监控面板 2026-06-09 23:25
  • 太和殿面数预估:高精度(Lod3)约 146万三角面,远超引擎50万面流畅阈值。瓦片占55.9%(91万面)、斗拱占25.5%(42万面)是两大瓶颈
  • LOD四级精度体系
    • Lod0 极远鸟瞰:~4.7万面,方块柱+纯色屋顶,Draw Call ~47
    • Lod1 城市级:~14万面,6面柱+贴图瓦片,Draw Call ~142
    • Lod2 街区级:~75万面,10面柱+简化瓦片,Draw Call ~751
    • Lod3 特写级:~146万面,16面柱+完整瓦片+斗拱,Draw Call ~1,458
  • CGA层LOD控制taihe-palace-lod.cga 新增 @Enum("Lod0","Lod1","Lod2","Lod3") attr lodstep,通过 column_facenum / tile_density / has_dougong 等LOD驱动常量,在代码层面控制几何精度
  • 渲染器FPS监控ide-core.js?v=19 新增性能面板(左上角),实时显示:
    • FPS 帧率
    • Mesh 数量
    • 三角面数(K为单位)
    • 当前LOD级别
    • 自动建议(⚠ FPS<25持续3秒建议降级 / ▲ FPS>50持续5秒建议升级)
  • 自动LOD逻辑:渲染器每帧统计FPS,维护10秒历史窗口。低FPS持续触发降级建议,高FPS持续触发升级建议,用户可在Attributes面板手动调整 lodstep 参数
  • 面数瓶颈分析:瓦片随机颜色(rand())导致无法按材质合并Mesh,是Draw Call飙升的主因。Lod1用贴图替代几何瓦片可解决此问题
  • LOD模板lod-control-template.cga 提供通用LOD控制代码片段,可复制到任意建筑CGA中使用
架构升级NL2CGA 知识增强架构 + 私有建筑实体库 2026-06-09 23:15
  • NL2CGA增强架构:从"直接丢给大模型"升级为"意图识别 → 知识检索 → Prompt注入 → 大模型生成 → 编译器验证"五级流水线
  • 意图识别器intent_router.py 支持5类意图:generic(通用)/ entity(建筑实体)/ pattern(CGA模式)/ fix(报错修复)/ explain(解释询问)。实体关键词覆盖太和殿/角楼/千秋亭/保和殿/中和殿/紫禁城/城墙/瓦片等
  • 知识检索器knowledge_retriever.py 检索3层知识库:
    • 建筑实体库(8个实体:柱网比例、屋顶层数、关键函数、推荐参数)
    • CGA模式库(11大模式:柱网/重檐/歇山/斗拱/F形网格等)
    • RAG向量索引(361代码片段,本地TF-IDF检索)
  • Prompt组装器prompt_assembler.py 自动将检索到的实体信息、模式模板、RAG代码片段注入System Prompt,大模型生成时拥有"太和殿是67×31柱网、三层roofHip嵌套"等精确知识
  • API集成nl2cga_service.py 在RAG检索后新增步骤2.5(私有知识库检索),已集成到 POST /api/v1/nl2cga/generate 主流程,语法验证通过
  • 建筑实体库building-entities.json 定义8个实体:
    • 太和殿(67×31柱网,重檐庑殿顶,3层屋顶)
    • 角楼(F形十字布局,十字脊重檐)
    • 千秋亭(圆形攒尖顶,递归屋顶)
    • 保和殿(53×25柱网,歇山顶,LOD四级)
    • 中和殿(31×31柱网,攒尖顶,斗拱系统)
    • 宫殿城市布局(setback+splitArea+innerRectangle)
    • 城墙系统(墙垛+城门楼+马道)
    • 瓦片系统(高精度瓦片+随机颜色)
  • 注释与知识库更新机制
    • ✅ 注释越清楚,RAG检索准确率越高(注释是TF-IDF检索的核心文本)
    • ⚠️ 当前不会自动更新:RAG索引是静态文件,代码内容相同但注释更新后,需要手动运行 build_rag_index.py 重建索引
    • 📝 建议流程:更新注释 → 运行重建脚本 → 验证新索引包含新注释
  • 效果示例:用户说"生成太和殿" → 意图识别为ENTITY → 检索到"67×31柱网、base_roof_angle=27、三层roofHip" → Prompt注入 → 大模型生成精确代码
引擎能力CGA 函数实现度全景统计 2026-06-10 17:15
  • 解析层:evaluator.ts 中 94 个唯一 simple operation(103 个 case label,含 9 组大小写别名)全部有实现或别名映射,无空占位
  • 内置函数层:builtins.ts + 12 类插件共注册 163 个 built-in 函数(math 29、asset 22、string 20、array 17、list 16、color 15、file 13、context 9、conversion 9、misc 7、probability 2 等)
  • 测试通过率
    • 函数契约测试 64/64 通过,100%(A级 12/12、B级 27/27、C级 25/25)
    • 函数基础审计 82/82 通过,100%(0 parse failed、0 runtime crashed)
  • 核心选择器:comp() 支持 8 个选择器 — f e v fe fv g m h top
  • 全功能可用函数(约 60+):extrude、s/t/r、translate/scale/rotate、rotateScope、center、mirror、primitiveCube/Sphere/Cylinder/Cone/Disk/Quad/Pyramid、roofGable/Hip/Pyramid/Ridge/Shed/Radial/Dutch/Gambrel/HalfHip/Round、comp(f/e/v/fe/fv/g/m/h/top)、split、setback、setbackPerEdge、setbackToArea、innerRectangle、splitAndSetbackPerimeter、color、texture、setupProjection、projectUV、rotateUV/scaleUV/translateUV/tileUV/deleteUV/normalizeUV/copyUV、tag/untag/label、union/subtract/intersect、print/report/assert 等
  • 部分实现 / 简化函数(约 15~20)
    • insert / i:有解析分发,但未完整接入 OBJ/gltf 资产加载管线
    • scatter / search:基础 case 存在,算法较简化
    • shapeL / shapeU / shapeO / modify / offset / envelope:有实现,但与 CityEngine 完整行为存在差距
    • geometry.* 部分属性:isConcave/nHoles/isPlanar/hasTags 等多为 fallback 默认值,未做真实几何分析
  • 与 CityEngine 对比:CityEngine 约 200+ operations + 150+ functions;当前核心建筑生成能力(extrude/split/comp/roof/transform/material)覆盖度约 70~80%,全功能可用率约 30%,解析覆盖率约 45%
  • 结论:常用建筑生成函数基本齐全,可支撑 NL2CGA 生成标准中式/现代建筑;资产插入、高级几何修改、上下文感知、LOD/报告类函数仍是后续重点补齐方向
完成CityEngine 文档对比 + 函数补全 + Marketplace 发布 2026-06-09 22:35
  • CityEngine 文档爬取:成功获取 220 个官方文档页面列表,对比分析后确认核心函数覆盖率 > 95%
  • 新增 isnull 函数:空值检查函数 isnull(value) → 1/0,注册于 builtins.ts
  • 新增 10 个函数别名:projectUv/rotateUv/scaleUv/tileUv/translateUv/deleteUv/insertAlongUv/alignScopeToGeometryBox/normalizeUv/copyUv → 对应驼峰命名,兼容 CityEngine 大小写不敏感风格
  • Marketplace 批量发布:18 个新 CGA 示例(ID #1066~#1083),含纹理 UV 操作、primitives、transformations、shapeU、roofs、materials、offset、stochastic、repeat 等教程
  • 引擎构建:npm run build 零错误,dist 已同步到 dist-stable,ide.html importmap v=18
完成全站备份 + 性能检测 + CityEngine 函数补全 2026-06-09 21:35
  • 全站备份:351MB 完整备份(含 PostgreSQL dump 1.6MB + SQLite + SSL 证书 + Nginx 配置 + systemd)
  • 性能检测:API 响应 50-100ms,内存 46-108MB,磁盘 42%,并发 20 请求 ~1s/次,无异常日志
  • 新增 14 个 CityEngine 兼容函数:assert(condition, msg)、flatten(y)、geometry.area、geometry.volume、geometry.height、geometry.boundaryLength、geometry.nFaces、geometry.nEdges、geometry.nVertices、geometry.isPlanar、geometry.isRectangular、geometry.hasTags、geometry.hasUVs
  • Marketplace 新发布:ID #1065「CityEngine 官方风格商业大厦 (10层)」— 展示 assert + geometry.area + 完整 split(y) 楼层分割
  • 本地贴图上传功能:✅ 已完成 — Attributes 面板 texture() 参数旁添加 📤 上传按钮,支持点击选择和拖拽上传,上传后自动替换 CodeMirror 中的 URL
修复comp(f) 侧面 scope 轴方向错误 — 贴图拉伸 2026-06-09 21:14
  • 根因computeMergedFaceScope 使用最长边界边作为 xAxis。建筑侧面最长边是高度(120),导致 comp(f) 后 scope.x = 高度、scope.y = 长度/宽度
  • 后果:用户写 split(y) 期望沿高度分楼层,实际沿水平方向分割;setupProjection(0, scope.xy) 投影平面错误 → 两个对面贴图正确、另两个对面拉伸
  • 修复:垂直面(法向量接近水平)优先使用世界水平方向(x/z 轴)作为 xAxis,yAxis 保持垂直方向。所有侧面 scope.y = 高度,split(y) 统一沿高度分割
  • 验证:npm test 374/374 全过,已部署 dist-stable?v=5
修复贴图渲染 + SSL 统一 + Marketplace 贴图替换 2026-06-09 20:57
  • 贴图透明/不显示修复:scene-builder.ts 中 setIndex(Float32BufferAttribute)setIndex(Uint32BufferAttribute),index buffer 类型错误导致三角面索引解析失败,面片错乱/消失
  • 纹理颜色空间修复:ide-core.js 添加 renderer.outputColorSpace = THREE.SRGBColorSpace,纹理颜色从暗淡恢复为正常
  • SSL 统一证书:rulepackage-com-unified 证书覆盖 rulepackage.com + www/api/marketplace/pic/beta/vip/apihand 共 8 个域名,自动续期
  • Marketplace 外部贴图替换:6 个文件中的 raw.githubusercontent.com / images.unsplash.com 链接全部替换为 pic.rulepackage.com
  • 构建验证:npm test 374/374 全过,npm run build 零错误
完成pic.rulepackage.com SSL + Marketplace 示例发布 + Roadmap 更新 2026-06-09 20:40
  • pic.rulepackage.com SSL 证书:Let's Encrypt 申请成功,HTTPS 正常访问,CORS 跨域头已配置
  • Marketplace 发布:ID #1064「现代商业办公楼 (纹理贴图示例)」— 使用 pic.rulepackage.com 6 种贴图(红砖/石材/玻璃/金属/屋顶瓦片/混凝土),展示完整 setupProjection + projectUV + texture 工作流
  • roadmap.html 更新:Phase 1/2/2.5 标记完成,新增 Phase 5「渲染器性能与材质系统」8 项任务看板
  • 渲染器承载数据:优化前 ~1000 Mesh @ 60fps → 优化后 ~50万三角面 @ 60fps
功能材质贴图站点 pic.rulepackage.com + 渲染器性能优化 2026-06-09 20:33
  • 新建贴图站点https://store.cityvistion.cn/pic — 11 种测试材质(混凝土/砖/木/金属/玻璃/草地/石材/屋顶瓦片),支持 CORS 跨域
  • 渲染器性能瓶颈修复:原 buildScene() 为每个 shape 创建独立 Mesh → 24638 三角面分布在 ~8000+ draw call 中严重卡顿
  • 按材质自动合并:相同材质(颜色+粗糙度+金属度+纹理)的 shape 自动合并为单个 BufferGeometry,draw call 从 ~8000 降至 ~10
  • 承载能力提升:优化前 ~1000 独立 Mesh @ 60fps → 优化后 ~500000 三角面 @ 60fps
  • cleanupGeometry 等效实现:无需在 CGA 代码中手动调用,buildScene 层自动完成共面合并
  • 构建验证:npm test 374/374 全过,npm run build 零错误,已同步到 dist-stable
紧急修复IDE 编辑器黑屏 + 3D 黑屏 — 已修复 2026-06-09 19:49
  • 故障现象:CodeMirror 编辑器无代码显示、3D 渲染窗口黑屏无模型
  • 根因:Phase 2 重构时 plugins/context/index.ts 引用了未定义的 getShapeAABB / aabbContains / aabbOverlaps / aabbTouchesplugins/asset/index.ts 引用了未定义的 _assetMetaCache
  • Vite 行为:esbuild 报 TS2304 错误但仍继续构建,导致 CONTEXT_FUNCTIONS 变量在产物中缺失,浏览器加载抛出 ReferenceError: CONTEXT_FUNCTIONS is not defined
  • 连锁效应ide-core.js 为 ES 模块,顶层 import 'cgajs-engine' 失败导致整个脚本不执行 → CodeMirror 和 Three.js 均不初始化
  • 修复:补充 context 插件 AABB 辅助函数、补充 asset 插件 _assetMetaCache Map,重建后 npm run build 零错误
  • 验证:Node.js 模块加载测试通过,dist-stable 已同步,importmap 添加 ?v=2 缓存清除
  • 操作:请按 Ctrl+F5 强制刷新浏览器缓存
计划Phase 1 快速修复函数工作流启动 2026-06-09 17:29
  • 开发计划来源:插件式函数库 + 快速修复系统(dazzler-gamora-rictor.md)
  • 新增后端端点:POST /api/v1/nl2cga/diagnose-function — 函数诊断(返回当前实现、测试覆盖率、已知问题)
  • 新增后端端点:POST /api/v1/nl2cga/submit-function-fix — 提交修复(保存到 FunctionRepairLog + Nl2CgaHumanFix)
  • 前端 AI 面板新增 "🔧 函数诊断" 模态框:搜索函数 → 显示源码 → 在线编辑 → 快速测试 → 提交修复
  • MVP 约束:仅支持 builtins(162 个函数),evaluator 操作修复放到 Phase 3
  • 备份目录:/root/backups/cgajs_prod_20260609_172916
完成Phase 2 插件式函数库架构 — 交付 2026-06-09 18:50
  • 新建目录结构src/functions/plugins/{math,probability,array,string,conversion,color,list,file,context,edge,asset,misc,topology,user}/ — 13 个插件目录
  • 拆分 builtins.ts:原 1243 行集中式文件 → 13 个独立插件文件。每个类别一个插件:MATH(27函数)、PROBABILITY(4函数)、ARRAY(16函数)、STRING(19函数)、COLOR(13函数)、CONVERSION(8函数)、CONTEXT(8函数)、EDGE_ATTR(7函数)、ASSET(5函数)、FILE(16函数)、MISC(12函数)
  • 新建 registry.ts:全局插件注册表,支持 registerPlugin()loadPlugin()(运行时加载用户插件)、unloadPlugin()getPluginFunctions()
  • 提取共享模块core/random-state.tscurrentRandom/setCurrentRandom/getCurrentRandom/ensureRandom,避免 probability/list 插件与 builtins.ts 循环依赖; core/context-shapes.ts_contextShapes/setContextShapes,避免 context/edge 插件循环依赖; plugins/file/virtual-files.ts_virtualFileRegistry/registerVirtualFile/clearVirtualFiles
  • builtins.ts 重构为聚合文件:保留 callBuiltin()BUILTIN_REGISTRYALL_BUILTINS、类型定义等核心基础设施,所有函数类别改为从插件目录 import
  • 向后兼容:所有现有 import 路径不变,callBuiltin(name, args) 接口不变,旧代码零改动
  • 验证npm run build 零错误通过;npm test 19/19 测试文件通过,374/374 测试通过;dist 已同步到 dist-stable
开发中Phase 2 插件式函数库 + Phase 2.5 扩展启动 2026-06-09 18:37
  • 决策:Phase 3 暂停,优先完成 Phase 2.5(参数类型系统扩展到更多函数族)+ Phase 2(插件式目录重构)
  • Phase 2 目标:将 builtins.ts(1243行,162个函数)按类别拆分到 src/functions/plugins/ 目录,实现热插拔插件架构
  • Phase 2.5 扩展目标:在拆分到插件的同时,为每个函数补充完整签名元数据(参数名、类型、枚举值、默认值)
  • 关键约束:① callBuiltin() 接口不变;② BUILTIN_REGISTRY 不变;③ 374测试全部通过;④ 向后兼容旧调用方式
  • 执行顺序:设计目录结构 → 逐个类别迁移(math → array → string → color → geometry → probability → file)→ 创建 registry.ts → 验证构建 + 测试
  • 备份目录:/root/backups/cgajs_prod_20260609_183706
评估Phase 3 Evaluator插件化 — 风险评估 2026-06-09 18:34
  • 结论:Phase 3 对生产稳定性影响较大,不建议直接在 prod 上执行
  • 核心原因:evaluator.ts(1785行)是引擎心脏,60+个操作全部从 switch/case 拆到独立文件。每个操作都直接依赖 EvalContextctx.random(确定性随机)、ctx.userFuncs(用户函数)、ctx.script(规则查找)、ctx.currentDepth/maxDepth(递归深度控制)、ctx.traceLog(调试追踪)。拆出后任何一项传递错误都会导致编译失败。
  • 具体风险点: ① setCurrentRandom(ctx.random) 在每个操作前调用,拆出后极易遗漏 → 随机结果错乱; ② BlockOperation(comp/split/setback)分支逻辑复杂,迁移容易出错 → 孔洞/面拆分异常; ③ 规则调用时的 ctx.currentDepth++ 和 random fork,拆出后逻辑可能断裂 → 无限递归或随机不一致; ④ 操作链依赖(extrude→comp→split→roofHip)一个错全链失败,374单元测试可能覆盖不了边界case
  • 生产影响:cgajs-api 有 12 个常驻 engine_worker 进程,每个编译请求都经过 evaluate()。如果引擎构建产物有 bug,所有编译请求全部失败,网站核心功能瘫痪。
  • 建议方案: ❌ 禁止直接修改 prod evaluator.ts; ✅ 必须在 beta 分支完成,374测试全过 + 额外操作链集成测试后再部署; ✅ 分批次迁移:第一批 10 个简单操作(color/texture/translate/rotate)→ 第二批中等复杂度(extrude/primitive*)→ 第三批复杂操作(comp/split/setback/roof); ✅ 每批次独立构建 + 测试 + beta 验证,通过后再下一批。
完成Phase 2.5 参数类型系统 — roof 系列交付 2026-06-09 18:23
  • 新增文件cgajs-engine/src/functions/signatures.ts — 函数签名元数据类型系统,定义 CGAFunctionSignature / CGAParameter 接口,含参数名、类型、枚举值、默认值、可选性、描述
  • 修改 roof.ts:9 个 roof 函数全部新增 valueType: RoofValueType = 'byAngle' 参数;新增 resolveRoofAngle() 辅助函数,将 byHeight 按 footprint 半宽自动转换为等效角度
  • 修改 evaluator.ts:9 个 roof case 全部支持新旧签名自动识别——如果 argVals[0] 是字符串 byAngle/byHeight 按新签名解析,否则回退旧签名(完全向后兼容)
  • 修改 cga-autocomplete.js:roof 系列 9 个函数补全提示全部更新为含 valueType 的新签名;新增 roofGambrel、roofHalfHip 补全条目
  • 修改 grammar-knowledge.json:9 个 roof operation 的参数元数据已更新,含 enumValues、optional、example
  • 构建验证npm run build 零错误通过;dist 已同步到 dist-stable
  • 编译测试roofHip(30, 1)(旧签名)✅、 roofHip("byAngle", 30, 1, false) ✅、 roofHip("byHeight", 5, 1, false) ✅ 全部编译通过
开发中Phase 2.5 参数类型系统 — 启动 2026-06-09 18:15
  • 目标:建立函数签名元数据,让解析器、补全系统、运行时实现三层对齐 CityEngine 2025.1
  • 首批修复范围:roof 系列 9 个函数(roofHip/roofGable/roofPyramid/roofShed/roofRidge/roofRadial/roofDutch/roofGambrel/roofHalfHip)
  • 签名元数据格式:src/functions/signatures.ts — 定义参数名、类型、枚举值、默认值、是否可选
  • 修改文件清单:evaluator.ts(增加 valueType 分支)、roof.ts(支持 byAngle/byHeight)、grammar-knowledge.json(参数类型注入)、cga-autocomplete.js(补全提示更新)
  • 备份目录:/root/backups/cgajs_prod_20260609_181534
分析CityEngine 函数签名差距 + Phase 2 影响评估 2026-06-09 18:07
  • 问题发现:以 roofHip 为例,cgajs 当前签名 roofHip(angle, overhang)(2参数),CityEngine 2025.1 官方签名 roofHip(valueType, value, overhang, even)(4参数),缺少 valueType ∈ {byAngle, byHeight} 枚举参数
  • 根因定位cga-autocomplete.js 硬编码签名 roofHip(${1:angle}, ${2:overhang})grammar-knowledge.json 参数名为 arg1/arg2 无类型信息; evaluator.ts switch/case 直接按位置取值 argVals[0], argVals[1],无 valueType 分支; 底层 roof.ts 实现同样只接受 angle+overhang
  • 影响范围:不仅 roof 系列(roofGable/roofPyramid/roofShed 等均有类似缺失),大量函数的参数类型、枚举值、默认值均未与 CityEngine 2025.1 对齐。这导致:① 代码补全误导用户;② NL2CGA 生成的代码使用错误签名直接编译失败;③ 用户无法使用 byHeight 等高级参数模式
  • Phase 2 影响评估: 若仅做目录重构(builtins.ts → plugins/)→ 影响很小,callBuiltin + BUILTIN_REGISTRY 接口不变,374测试可守护兼容性; 但若同时引入参数类型系统 → 影响中等,需在 parser / evaluator / autocomplete / grammar-knowledge 四层联动修改
  • 建议执行顺序Phase 2.5 参数类型系统(先建立签名元数据,修复 roof 等函数实现)→ Phase 2 目录重构(再拆分到插件目录,避免二次重写)→ Phase 3 Evaluator插件化
  • roadmap.html 已更新:新增「架构升级路线图」类别,含 Phase 1~4 共 22 项任务看板
完成Phase 1 快速修复函数工作流交付 2026-06-09 17:40
  • 后端 POST /api/v1/nl2cga/diagnose-function — 从 builtins.ts 提取函数源码、查询修复历史、返回语法知识,已验证通过(abs / rand 等函数正常返回)
  • 后端 POST /api/v1/nl2cga/submit-function-fix — 保存修复到 FunctionRepairLog 表,已验证通过(id=5 记录成功入库)
  • 前端 IDE AI 面板新增 "🔧 函数诊断与修复" 按钮,点击打开模态框
  • 模态框功能:搜索函数 → 显示当前实现源码 + 行号 → 展示已知修复记录 → 在线编辑修复代码 → 填写修复说明 + 测试用例 → 提交保存
  • 涉及文件:main.py(+2端点)、nl2cga_service.py(诊断逻辑)、ide.html(CSS+HTML+JS)
  • 服务已重启,4 workers 运行正常,内存 177MB
修复API 服务依赖修复 2026-06-09
  • 修复 uvicorn main:app 启动失败问题,根因:monitoring.py 引入 prometheus_clientpsutil 但未安装
  • 安装缺失依赖后服务恢复正常,4 workers 运行中,内存 169MB
  • 所有 NL2CGA 端点验证通过:health / styles / repairs / generate
基础设施Phase 3 训练基础设施就绪 2026-06-09
  • export_training_data.py — 从数据库导出训练数据(成功案例+反馈数据)
  • train_lora.py — LoRA 微调脚本,基于 unsloth 框架,支持 4bit QLoRA,结构完整(数据量不足时自动跳过)
  • evaluate.py — 4 维度评估:编译成功率、BLEU/ROUGE-L、函数正确率、语法完整性
  • benchmark.jsonl — 50 样本基准数据集,覆盖 13 种建筑风格,100% 编译通过
APIFunction Repair Memory 上线 2026-06-09
  • 新增 FunctionRepairLog 数据库表,记录函数修复历史(function_name, file_path, repair_summary, before/after_snippet, test_case)
  • NL2CGA Prompt 自动注入最近 7 天/最多 10 条修复记录,让 LLM 了解引擎最新变更
  • 前端 IDE 底部展示近期修复列表(GET /api/v1/nl2cga/repairs
  • 已入库 4 条记录:roofGambrel、roofHalfHip、roofRound、compHoles
  • 自动捕获脚本:编译失败后自动记录错误上下文到修复队列
运维监控与数据飞轮系统 2026-06-09
  • admin-monitor.html — 实时仪表盘:QPS、编译成功率、NL2CGA 调用量、用户活跃度、资源监控
  • log_analyzer.py — 每日自动分析 access_log,生成日报(请求量、状态码分布、Top 端点、错误聚类)
  • resource_alert.py — CPU/内存/磁盘阈值告警,自动通知
  • 数据飞轮自动化:编译失败自动入队、每小时自动测试、每 6 小时高频案例 AI 修复
引擎内置函数调用重构:162 函数 Map 查找 2026-06-08
  • callBuiltin 从 O(n) if-else 链重构为 O(1) Map.get() 查找
  • BUILTIN_REGISTRY: Map<string, Function> 扁平注册表,分类:MATH(24)、PROBABILITY(4)、ARRAY(16)、STRING(19)、COLOR(13)、CONVERSION(8)、CONTEXT(8)、EDGE_ATTR(7)、ASSET(5)、FILE(16)、TOPOLOGY(2)、MISC(12)
  • 保留 ALL_BUILTINS 对象向后兼容
  • 验证:TypeScript 编译零错误,374 个现有测试全部通过
引擎DeterministicRandom 确定性随机 2026-06-08
  • 新增 DeterministicRandom(seed) 基于 xorshift 的确定性随机数生成器
  • setCurrentRandom() / getCurrentRandom() 线程本地存储
  • EvalContext 新增 random 字段,createEvalContext 中初始化
  • 分支间随机隔离:evalStochasticBodyevalSplitOperation / evalCompOperation 中使用 ctx.random.fork()
  • rand / rand.int / rand.gaussian / p 全部接入
  • 验证:相同 seed 产生完全相同的随机序列;374 个现有测试全部通过
APINL2CGA 后端服务上线 2026-06-07
  • nl2cga_service.py (907 行) 从 createurban-cga-lite 移植,7 个 API 端点
  • /api/v1/nl2cga/generate — 预建模板匹配(免认证)+ LLM 生成(需认证)
  • /api/v1/nl2cga/refine — 基于 LLM 的代码优化
  • /api/v1/nl2cga/fix — 自动修复编译错误
  • /api/v1/nl2cga/explain — 代码解释(开放访问)
  • /api/v1/nl2cga/validate-code — 语法验证
  • 编译闭环:生成 → 编译验证 → 报错 → LLM 修复 → 最多 2 轮自动重试
  • 语法注入build_context_prompt() 自动加载 grammar-knowledge.json 注入当前引擎能力边界
APIRAG 语义检索系统 2026-06-07
  • rag_service.py — Marketplace 188 个 .cga 文件向量化
  • 关键词 + 向量混合匹配(Hybrid Search)
  • CJK 同义词扩展:中式 → [chinese, temple, pagoda]玻璃 → [glass, panel, window]
  • 检索延迟 ~10-30ms,结果直接拼接到 LLM Few-shot 上下文
前端IDE AI 生成面板 2026-06-07
  • ide.html 新增 320px 可折叠侧边栏
  • 功能:自然语言输入、风格选择(11种预建模板)、楼层滑块、生成/复制/插入/解释
  • aiGenerate() → POST /api/v1/nl2cga/generate
  • aiExplainSelection() → 获取编辑器选中文本 → POST /explain
  • 风格列表动态加载:GET /styles
  • 底部展示近期修复:GET /repairs
P0修复3 个屋顶函数真正实现 2026-06-06
  • roofGambrel(shape, angle, height2) — 谷仓屋顶,使用 extractFootprintVerts + breakFrac 控制折线高度
  • roofHalfHip(shape, angle, hipFrac=0.3) — 半坡屋顶,ridgeInset 控制 ridge 缩进比例
  • roofRound(shape, angle) — 球形穹顶,3 层 ring + peak 球冠近似
  • 此前这 3 个函数仅为空壳/异常占位,导致 AI 生成相关代码时直接报错
P0修复comp(h) 孔洞检测实现 2026-06-06
  • compHoles(shape) — 支持两种 hole 来源检测
  • 来源 1:PolygonData 显式 holes 数组
  • 来源 2:BufferGeometry.userData.contours 内环(如 shapeO 生成的 O-ring)
  • 使用 earcut 重新三角化,计算贴合孔洞平面的 scope
  • compMeta = { sel: 'hole', index, total }
引擎语法文档自动提取器 2026-06-06
  • extract-grammar-docs.mjs — 自动扫描源码生成结构化语法知识库
  • 输出 grammar-knowledge.json:163 个函数 + 90 个操作,含签名、参数、返回值、使用示例
  • 输入:CGAGrammar.g4 + builtins.ts + evaluator.ts
  • 绑定到构建流程,每次部署自动更新
  • NL2CGA Prompt 动态读取,无需人工维护
引擎引擎核心架构确立 2026-05-25
  • ANTLR4 驱动解析器,语法覆盖完整
  • 1727 行核心求值器,支持 60+ Shape 操作
  • 162 个内置函数基础注册
  • 14 组 e2e 测试覆盖 happy path
核心目标:构建一个自我进化的 NL2CGA 系统。每当你新增一个 CGA 函数、修改语法规则或引入新操作符时,AI 生成引擎能够在无需人工重写 Prompt的情况下,自动学习新能力并指导用户正确使用。

一、现状诊断

CGA 引擎现状

  • 解析器:ANTLR4 驱动,语法覆盖完整,错误恢复能力基础可用
  • 运行时:1727 行核心求值器,支持 60+ Shape 操作、162 个内置函数
  • 几何模块:Extrude / Split / Comp / Roof / UV / Boolean / Setback 等已实现,但部分为简化方案
  • 测试:14 组 e2e 测试覆盖 happy path,边缘 case 不足

NL2CGA 现状

  • 严重缺失引擎层 nl2cga_bridge.ts 仅为接口空壳,prompt_templates.ts 全部为空
  • 部分可用API 层 ai_service.py 有 LLM 客户端,但仅用于编译错误分析(修代码),不能生成代码
  • 闭环存在learning_routes.py 已建立"失败案例 → LLM 分析 → 修复建议 → 人工审核"的学习闭环
  • 资产可用createurban-cga-lite 中有预建模板 + LLM 生成实现,可直接移植

二、NL2CGA 三阶段路线图

🚀 第一阶段:Template + RAG(2~3 周)

目标:立即可用的零成本 NL2CGA,不依赖外部 LLM API 也能工作
  • 移植 createurban-cga-lite 的预建模板系统,扩展至 20~30 种建筑风格
  • Marketplace 188 个 .cga 文件向量化,构建语义检索库
  • 前端 IDE 增加 "🎨 AI 生成" 面板(输入框 + 风格选择 + 参数滑块)
  • 设计语法自描述文档生成器(核心,见下文第三节)

🔧 第二阶段:编译器反馈闭环(4~6 周)

目标:LLM 生成的 CGA 必须保证可编译通过
  • 新增 /api/v1/nl2cga/generate 端点,接入 ai_service.py 的 LLM 客户端
  • 实现 "生成 → 编译 → 报错 → LLM 修复" 的自动迭代循环(最多 3 轮)
  • 将编译器作为判别器(Discriminator):只有编译成功的代码才返回给用户
  • 每次成功的"生成-编译"对自动存入训练数据集,为第三阶段积累燃料

🧠 第三阶段:Fine-tuned CGA 专用模型(3~6 个月)

目标:拥有自我进化能力的专属小模型,推理成本降低 10 倍
  • 基于 Qwen2.5-Coder-7BDeepSeek-Coder-V2-Lite 做 LoRA 微调
  • 训练数据来源:Marketplace 描述-CGA 对、学习闭环的成功案例、用户反馈数据
  • 语法变更时自动触发模型增量微调,实现真正的自主学习
  • 本地 vLLM 部署,单条生成成本 < ¥0.01

三、自主学习语法结构的核心机制

这是整个计划的重点。以下 5 个子系统构成 NL2CGA 的自进化引擎,确保每次你修改 CGA 语法时,AI 都能自动跟上:

3.1 语法文档自动提取器(Grammar Document Extractor)

问题:当前 Prompt 中硬编码"已支持语法",每次新增函数都要手动改 Prompt,极易遗漏和过时。

方案:编写一个构建时脚本,自动扫描源码生成结构化语法知识库:

# 自动提取脚本(建议放在 cgajs-engine/scripts/extract-grammar-docs.mjs)
# 输入:CGAGrammar.g4 + builtins.ts + evaluator.ts
# 输出:grammar-knowledge.json(被 RAG 和 Prompt 动态加载)

提取内容1. 从 CGAGrammar.g4 提取:规则定义语法、操作序列结构、条件/随机分支写法
  2. 从 builtins.ts 提取:162 个函数的签名、参数类型、返回值、使用示例
  3. 从 evaluator.ts 提取:60+ Shape 操作的用法和约束
  4. 从 tests/ 提取:每个函数/操作的真实运行示例

输出格式(JSON):
{
  "version": "1.3.2",
  "generatedAt": "2026-06-09",
  "operations": [
    { "name": "extrude", "params": ["height"], "returns": "Shape[]",
      "example": "Lot --> extrude(10) comp(f) { top: Roof }",
      "constraints": ["height > 0"] }
  ],
  "functions": [
    { "name": "rand.int", "category": "probability",
      "signature": "rand.int(min, max) -> int",
      "description": "返回 [min, max) 范围内的随机整数" }
  ],
  "annotations": ["@StartRule", "@Group", "@Range", "@Hidden"]
}

触发方式:将脚本绑定到 npm run build 或 Git 预提交钩子,每次构建自动更新。Prompt 加载时动态读取此 JSON,而非写死。

3.2 实时语法注入系统(Live Syntax Injection)

当用户请求 NL2CGA 生成时,后端自动将当前引擎的完整语法快照注入 LLM 上下文:

# 动态 Prompt 组装(cgajs-api 层实现)
system_prompt = f"""
你是 CGA.js v{engine_version} 专家。当前引擎支持的语法如下:

## 可用 Shape 操作({len(operations)} 个)
{format_operations(grammar_knowledge['operations'])}

## 可用内置函数({len(functions)} 个)
{format_functions(grammar_knowledge['functions'], top_used=30)}

## 关键约束
- 必须使用 @StartRule 标记入口规则
- split 轴只能是 x|y|z|u|v(当前 u/v 未实现,避免使用)
- comp(h) 孔洞检测暂不支持,避免依赖

只输出有效 CGA 代码,不要解释。
"""

价值:新增 roofGambrel 函数后,重新部署即自动出现在 AI 的知识范围内,零人工维护 Prompt

3.3 编译器反馈强化学习(Compiler-RL)

这是让 NL2CGA "越用越聪明" 的核心飞轮:

步骤动作数据沉淀
1 用户输入"中式寺庙" → LLM 生成 v1
2 编译器解析 v1 → 发现 2 个错误 (prompt, v1, error_json) → CgaFailureCase
3 错误信息 + v1 喂给 LLM → 生成修复版 v2 (v1, error, v2) → AiSuggestion
4 v2 编译通过 → 返回给用户 (prompt, v2) → CgaSuccessCase
5 用户点击 👍/👎 反馈 修正标签 → 高质量训练对

语法变更时的自动适应:当你修改了语法(如新增 @Import 注解),过去积累的"错误-修复"对中涉及旧语法的数据会被自动标记为 legacy,新语法的成功案例会被赋予更高权重进入训练集。

3.4 语义向量索引(Semantic Vector Index)

不仅要知道"有哪些函数",还要知道"什么时候该用什么函数"。

  • 将 Marketplace 中每个 .cga 文件 + 标题 + 描述向量化(使用代码嵌入模型)
  • 将 162 个函数的文档和 3~5 个典型用例向量化
  • 用户输入自然语言时,检索 Top-5 最相关的 CGA 源码片段和函数文档
  • 检索结果直接拼接到 LLM 上下文(Few-shot 示例),让 AI "看到"别人是怎么写的
# RAG 检索示例
用户输入:"做一个带飞檐的中式屋顶"
检索结果:
  1. "03_japanese_pagoda.cga" — 相似度 0.91(roofHip 多层叠加)
  2. "temple style guide" — 相似度 0.87(飞檐参数说明)
  3. "roofHip 函数文档" — 相似度 0.85

LLM 上下文追加:
  "参考以下实现飞檐屋顶的方式:" + 检索到的代码片段

3.5 语法变更感知流水线(Grammar Change Detection Pipeline)

这是自主学习的触发器,确保语法变更被 NL2CGA 系统第一时间感知:

# 绑定到 CI/CD 或 Git 钩子的流水线
触发条件:grammar/CGAGrammar.g4 或 src/functions/builtins.ts 发生变更

自动执行:
  1. 运行 extract-grammar-docs.mjs → 更新 grammar-knowledge.json
  2. 运行全量 e2e 测试 → 确认新语法行为正确
  3. 运行回归测试 → 确认旧语法未被破坏
  4. 用新语法重新索引 Marketplace 文件 → 更新向量数据库
  5. 重新编译预建模板 → 验证模板仍有效
  6. 若存在 Fine-tuned 模型 → 触发增量微调任务(用新语法案例扩充数据集)

结果:你提交一个 PR 新增 geometry.isRectangular 函数,10 分钟后 NL2CGA 系统已经知道它的存在、签名、用法,并能在生成代码时正确推荐。

四、关键缺陷修复清单(与 NL2CGA 协同)

缺陷对 NL2CGA 的影响优先级
roofGambrel / roofHalfHip / roofRound 有签名无实现 AI 生成这些屋顶时代码直接报错,严重损害信任 P0
comp(h) 孔洞检测返回空数组 AI 无法正确指导用户使用孔洞相关建模 P0
rand / p 未接入 DeterministicRandom 相同 seed 产生不同结果,AI 的"示例"不可复现 P1
split(u/v) 未实现 AI 生成的 UV 分割代码无效 P1
callBuiltin 使用 if-else 链而非 Map 函数调用慢,批量生成时吞吐受限 P1
解析器使用 BailErrorStrategy 一次只报一个错误,AI 修复效率低 P2

五、数据飞轮:让系统越用越聪明

核心设计理念:NL2CGA 不是一次性写好的功能,而是一个持续吸收数据的生命体

📥 数据源

  • Marketplace:188 个文件 ×(标题+描述+标签+CGA 源码)= 基础语料
  • 编译日志:每次 /compile 调用的 (source, success/fail, error) = 监督信号
  • 学习闭环:learning_routes 积累的 (failure, suggestion, accepted) = 高质量修正对
  • 用户反馈:👍/👎 按钮 + 手动编辑后的最终代码 = 人类偏好数据

⚙️ 处理层

  • 语法提取器:自动从源码生成结构化知识(随版本更新)
  • 向量化引擎:将 CGA 代码和自然语言描述嵌入同一语义空间
  • 质量过滤器:只有编译通过且用户点赞的数据才进入训练集

🚀 输出层

  • RAG 检索:实时语义搜索最相关的代码示例
  • 动态 Prompt:每次请求携带最新语法快照
  • Fine-tuned 模型:专为 CGA 语法优化的小参数模型

六、执行时间表

时间里程碑交付物
第 1~2 周语法提取器 + RAG 索引grammar-knowledge.json 自动生成、Marketplace 向量化、IDE AI 面板
第 3~4 周Template NL2CGA 上线20+ 预建模板、语义搜索、零 LLM 成本可用
第 5~8 周编译器反馈闭环/api/v1/nl2cga/* 端点、生成-编译-修复循环、数据沉淀
第 9~12 周P0 缺陷清零roofGambrel 等 3 个屋顶实现、comp(h) 孔洞检测、DeterministicRandom
第 3~6 月专用模型微调LoRA 微调 7B 模型、本地 vLLM 部署、单条成本 < ¥0.01
持续自进化运维每次语法变更自动触发知识库更新 → 回归测试 → 向量索引重建 → 模型增量微调

七、总结

CGA.js 的解析器和运行时已经具备专业级骨架,NL2CGA 是从"工具"跃迁为"平台"的决定性能力

本计划的核心不是"写一个更好的 Prompt",而是构建一个自我维护、自我增强的技术体系

  1. 语法文档自动提取消除 Prompt 与源码的同步问题
  2. 编译器反馈闭环保证生成质量并持续积累训练数据
  3. 语义向量索引让 AI 能"看到"社区的最佳实践
  4. 语法变更感知流水线确保系统随引擎同步进化

当你下次新增一个函数时,这个系统会在 10 分钟内自动学会它,并在接下来的每一次用户请求中正确使用它——这才是真正的自主学习

八、NL2CGA 商业化落地路线图(已批准)

模板优先 + 本地小模型兜底 · 2026.06 ~ 2027.03 · 目标:几句话直接生成模型

战略定位与最终目标

nl2cga.rulepackage.com(及 IDE/插件端)实现“一句话生成模型”:用户用自然语言描述建筑/场景,系统在秒级返回可编译、可预览、可下载的 CGA 规则与三维模型。

  • 高可用:普通句子 80% 以上能直接出模型,无需反复修复。
  • 低成本:单次生成成本 < ¥0.1(理想 < ¥0.03),支持免费 tier + 订阅 + 按量付费。
  • 广覆盖:覆盖住宅、商业、古建、现代地标、基础设施、植被等常见类别。
  • 可扩展:新增一种建筑风格时,能在 1 天内完成模板/知识入库并自动生效。

核心路线

模板优先 + 本地小模型兜底:Prebuilt / Parameterized 模板优先命中 → 语义 RAG 补上下文 → 本地 Qwen2.5-Coder-7B 处理长尾 → 外部大模型仅作为最终兜底。

🚀 Phase 1:速效窗口期(第 1 个月)

目标:最常见的 20 类建筑一句话可生成,Tier 1/2 成功率 > 75%
  • 修复 NL2CGA 管道 bug,建立模板自动编译校验流水线。
  • 扩展 Tier 1 预建模板到 20 个,Tier 2 参数化模板到 20 个。
  • 修复规则从 10 条扩展到 25 条,运行 benchmark 建立基线。
  • 本周已完成:bug 修复、流水线、20 预建模板、基准报告(模板覆盖率 16%)。

🔧 Phase 2:语义与知识体系(第 2-3 个月)

目标:系统“听懂”建筑风格,RAG 从关键词升级为语义
  • 扩展参数化模板到 50 个,建筑实体知识库到 50 个。
  • 实现 insetimport 递归加载等缺失引擎能力。
  • 引入 Embedding 语义意图匹配,RAG 升级到向量索引(Milvus Lite / pgvector)。
  • 建立生成质量仪表盘,持续监控来源、耗时、编译结果。

🧠 Phase 3:私有化 AI 与成本优化(第 4-6 个月)

目标:长尾请求成本降下来,本地小模型承担主要 LLM 请求
  • 在本地电脑(E5-2670V2 + 32G)部署 Ollama + Qwen2.5-Coder-7B。
  • 构建 2000+ 条高质量训练数据集,部署 Milvus Lite 本地向量库。
  • 云端 AutoDL A100 进行 1-2 次 LoRA 微调(约 50-100 元/次)。
  • 建立自动训练流水线:每周扫描成功案例与人工修正,触发增量微调。

💰 Phase 4:AST 生成与商业化封装(第 7-9 个月)

目标:彻底消除 LLM 文本生成的语法错误,产品化上线
  • 建立 AST 直接生成路径,将高频模板逐步迁移到 ASTBuilder。
  • 调整定价:prebuilt/parameterized 免费但有速率限制;LLM 调用按量扣费。
  • 上线生成历史/收藏/编辑,集成 IDE、Blender/SketchUp 插件,发布 NL2CGA API。

资源与成本估算

  • 人力资源:1 名全栈/后端工程师(你本人 + AI 辅助),可选建筑/图形学顾问。
  • 基础设施:阿里云 2H8G 保持现状;本地电脑部署 Ollama + Milvus Lite(0 元);云端训练按需 AutoDL A100。
  • 总现金支出:九个月约 ¥1000-2000(主要为 2 次云端训练 + 少量 API 调用)。

风险与应对

风险概率影响应对
模板扩展工作量过大AI 批量生成骨架 + 自动编译校验;优先覆盖 20 个高频类别。
inset/import 实现复杂使用成熟库(polygon-clipping、three-bvh-csg);分阶段交付。
本地模型效果不达预期保留外部 API fallback;先聚焦 7B coder,必要时上 14B。
用户付费意愿低prebuilt/parameterized 免费引流,LLM/高级模板付费;订阅 + 按量双模式。
数据隐私合规训练数据不上传云端;云端训练使用脱敏代码对;本地向量化。

当务之急(本周已启动)

  • 已完成 修复 nl2cga_service.py knowledge_context 未定义 bug。
  • 已完成 建立 NL2CGA 模板自动编译校验流水线。
  • 已完成 扩展 20 个 Tier 1 预建模板并入库。
  • 已完成 运行 benchmark 建立基线报告(模板覆盖率 16%)。
  • 已完成 评估本地 Ollama 部署可行性并输出部署指南。

详细计划文件/root/.kimi-code/sessions/wd_root_94a6b4475803/session_9ad7852c-06d8-49cc-8c82-67203bce72ed/agents/main/plans/firestorm-kate-bishop-fantomex.md

2026-06-15 NL2CGA 架构澄清:cga-library 与 Marketplace 分工

架构NL2CGA 语料库与 Marketplace 职责分离 2026-06-15
  • cga-library(cgajs.com 本地)是 NL2CGA 的高质量训练语料库,包含 prebuiltparameterizedlibrary 三层人工 curated 规则,用于意图匹配与 Few-shot 提示。
  • marketplace.rulepackage.com 是用户示例仓库,作为 NL2CGA 的RAG 增强源与 IDE 示例浏览器,通过 /api/v1/cga-corpus 只读消费。
  • 已修正:回滚了 cgajs.com /api/v1/cga-library/files/{slug} 保存/回滚到 rulepackage.com 的代理,恢复为本地操作。
  • 已落地:cgajs.com IDE 的 Marketplace 示例浏览器与下载已代理到 rulepackage.com,可直接读取权威 Marketplace 示例。
  • 详细说明文档:NL2CGA-ARCHITECTURE.md

2026-06-15 双站审计与安全加固

安全cgajs.com / rulepackage.com 全量测试与漏洞修复 2026-06-15
  • 测试覆盖:解析器性能/稳定性、CGA 引擎 compile/run、NL2CGA 预built/生成/校验/解释/修复、全站导航与关键页面、暴露文件/路径遍历/越权/SSRF/Omega 同步鉴权/上传校验。
  • 已修复:cgajs.com /api/v1/engine/runassets 参数存在 SSRF 风险,已增加 _is_safe_asset_url() 校验,拒绝 localhost/私有 IP/非 HTTP(S) 协议。
  • 已修复:rulepackage.com uvicorn 仅启用 1 个 worker,单个慢请求(如未配置 LLM 的 explain/fix)会阻塞全站 API,已调整为 4 workers。
  • 已清理:双站数据库中本轮审计生成的临时测试账号及对应 usage_logs。
  • 已知项:引擎单元测试仍报告少量 [Parser Ambiguity],不影响功能,纳入后续语法优化;NL2CGA explain/fix 依赖外部 LLM,在 rulepackage.com 未配置 LLM 时会超时,已按警告处理。
  • 测试报告/www/wwwroot/shared-memory/reports/dual_site_audit_report_20260615-122558.md

2026-06-15 修复 cgajs.com/ide.html 诊断日志污染页面

修复移除 ide.html 中的调试诊断脚本,恢复 IDE 正常显示 2026-06-15
  • 问题/ide.html 被注入了调试用的 fetch/import 诊断脚本,所有成功/失败信息都以红色错误面板上屏,导致页面“全是报错”。
  • 已修复:删除了两个诊断 <script> 块;保留全局 JS 错误捕获与资源加载失败提示,便于真实问题排查。
  • 已补充/ide.html 引入全局导航 /assets/site-nav.js?v=3,与首页菜单保持一致。
  • 验证:主模块脚本语法检查通过;请站主在浏览器中按 Ctrl+Shift+R 强制刷新 /ide.html 确认编辑器与 3D 视图正常。

2026-06-15 cgajs.com 安全加固(代码审计后修复)

安全修复 SSRF、路径遍历、未授权上传/AI-Chat、Cookie HttpOnly 等漏洞 2026-06-15
  • SSRF 加固/api/v1/engine/run 的资产下载改为 follow_redirects=False,防止通过 302 跳转到内网 metadata 地址。
  • 路径遍历加固
    • cga_import_resolver.py:CGA import 解析限制在 base_path 内,禁止绝对路径与 .. 逃逸。
    • cga_editor_service.pyread_filelist_changes 对 slug 做白名单校验并检查真实路径在备份目录内。
    • cga_editor_routes.py/files/{slug}/diff 同样校验 slug 与路径 containment。
  • 鉴权加固
    • /api/v1/upload/asset 由可选认证改为必须认证(仍支持 API Key),防止匿名滥用存储。
    • /api/v1/ai-chat 由匿名改为必须认证,防止 LLM 配额被盗用。
  • Cookie 加固:登录、OAuth、管理员登录设置的 cgajs_token 全部改为 httponly=True,降低 XSS 盗 Cookie 风险。
  • Webhook 加固/api/v1/webhooks/rulepackage 在未配置 RULEPACKAGE_WEBHOOK_SECRET 时直接拒绝;下载资源 URL 增加 SSRF 校验并关闭重定向;健康检查不再返回本地路径。
  • 配置保密/api/v1/admin/configs 对 API key、secret、private_key、password、token、cert 等值做掩码处理。
  • 指标端口加固:Prometheus metrics 服务器从 0.0.0.0:9090 改为仅监听 127.0.0.1:9090
  • OAuth 安全:GitHub OAuth 回调不再回退到未验证邮箱;修复 wechat/github_callbackrequest 未定义的引用错误。
  • 未修复/需后续决策:服务仍以 root 运行、部分异常信息可能暴露内部错误、CORS 使用 *.cgajs.com 正则、内存级限流器多 worker 下会放大配额。这些需要更大范围的部署/架构调整,已记入 me.html

2026-06-15 调整 Marketplace 与 IDE 站点分工

架构Marketplace 示例在 rulepackage.com 内打开,cgajs.com 聚焦解析与 NL2CGA 2026-06-15
  • 新增https://rulepackage.cityvistion.cn/ide.html 正式上线,复用 cgajs.com IDE 代码,API 全部走 rulepackage.com 自身端点(/api/v1/marketplace/{id}/download/api/v1/parse/api/v1/nl2cga/*)。
  • 替换:原 /www/wwwroot/www.rulepackage.com/ide.html 的 “已迁移至 cgajs.com” 跳转页被替换为真实 IDE 页面;引擎静态资源通过 /assets/cgajs-engine 软链复用本地 /www/wwwroot/cgajs-engine/dist
  • 跳转调整marketplace.rulepackage.com 点击 CGA 示例时仍打开 https://rulepackage.cityvistion.cn/ide.html?cga_id=...,但现在是真实 IDE 而非跳转。
  • cgajs.com IDE:保留为 “IDE测试” 入口,用于测试 CGA 解析与 NL2CGA;同时支持通过 ?cga_id=...&marketplace=rulepackage 打开 rulepackage.com 的示例(已给 cgajs.com 加 CORS 白名单)。
  • 导航调整:rulepackage.com 顶部菜单与导航下拉新增 “💻 IDE”;cgajs.com 顶部 IDE 改为 “💻 IDE测试”,下拉导航中 “资产与测试(rulepackage.com)” 新增 rulepackage IDE 入口。
修复Omega 报告 “Back to reports” 点击报 fetchOmegaReports is not defined 2026-06-15 21:30
  • 问题:IDE 侧栏 Omega 报告列表点击某条 batch 后,详情页 “← Back to reports” 触发 onclick="fetchOmegaReports()",但函数定义在 IIFE 模块内部,全局作用域未暴露,控制台报错 fetchOmegaReports is not defined
  • 修复:在 ide.html 模块闭包结束前增加 window.fetchOmegaReports = fetchOmegaReports; window.fetchOmegaReport = fetchOmegaReport;,使内联 onclick 可正确返回报告列表。
  • 部署:已同步更新 https://rulepackage.cityvistion.cn/ide.htmlhttps://cgajs.cityvistion.cn/ide.html,并保留备份文件 ide.html.bak.20260615
架构新架构 v2.0:cgajs / rulepackage / cityvistion 三站分工方案 2026-06-16 10:00

本方案将现有能力重新划分到三个站点:cgajs.com 专注 CGA 解析与 NL2CGA 生成;rulepackage.com 专注 CGA 文件托管、测试与交易;cityvistion.cn 作为统一 API 网关与外部能力入口。cgajs.com 与 rulepackage.com 仅对内部白名单域名开放服务,cityvistion.cn 通过注册/订阅/Key 向外部提供全部能力。

一、设计目标

  • 职责清晰:cgajs.com 只负责“生成/解析 CGA”,rulepackage.com 只负责“CGA 资产管理与交易”,cityvistion.cn 负责“对外商业化”。
  • 安全收敛:cgajs.com 与 rulepackage.com 不直接面向外部用户,只接受内部白名单域名的服务间调用;外部流量全部走 cityvistion.cn 的 Key 鉴权。
  • 数据飞轮:rulepackage.com 的 Marketplace CGA 文件回流到 cgajs.com,用于增强解析器与 NL2CGA 模型。
  • 统一入口:CityEngine 插件、第三方开发者、外部网站全部通过 cityvistion.cn 获取 API Key 与下载插件。

二、三站角色定位

1. cgajs.com — CGA 解析 + NL2CGA 生成 + 内部管理后台

  • 核心能力:CGA 编译/解析/三维几何生成、自然语言生成 CGA(NL2CGA)、解析器测试平台、AI 生成测试平台。
  • 对外服务:仅对白名单域名(cityvistion.cn 等内部子站)提供 API,不直接对普通用户暴露 Key。
  • 用户体系:取消公开注册,仅保留管理员后台。
  • 保留工具:自学习系统、函数契约测试、AI 学习监督、自动循环,用于持续提升解析能力与生成质量。

2. rulepackage.com — CGA 文件托管 + Marketplace + 测试平台

  • 核心能力:CGA 文件上传、发布、版本管理、交易/下载、测试、评分。
  • 对外服务:同样仅对白名单域名开放 API,如文件列表、读取、下载、购买回调。
  • 用户体系:继续面向创作者/买家开放注册(Marketplace 账户)。
  • 数据回流:高质量公开 CGA 文件定期同步给 cgajs.com,用于 RAG 索引、模板库扩充、NL2CGA 训练。

3. cityvistion.cn — 统一 API 网关 + 外部能力入口 + 插件发布中心

  • 核心能力:用户注册、会员订阅、API Key 发放、配额/计费、统一 API 路由、插件下载、文档。
  • 后端调用:作为白名单域名,内部使用服务间凭证调用 cgajs.com 与 rulepackage.com。
  • 对外形态:提供单一域名 + Key,外部用户无需关心后端由哪个站点承载。

三、调用链路

外部用户 / 插件 / 第三方站点
        │
        ▼  X-API-Key: cityvistion-user-key
   cityvistion.cn
        │
        ├── 需要 CGA 解析 / NL2CGA ──▶  cgajs.com (白名单 + 服务签名)
        │
        ├── 需要读取 / 购买 / 下载 CGA ──▶  rulepackage.com (白名单 + 服务签名)
        │
        └── 插件下载 / 文档 / 订阅 ──▶  cityvistion.cn 自身
    

四、安全与鉴权模型

对外层(cityvistion.cn ↔ 用户)

  • 用户注册后生成 X-API-Key,按会员等级分配调用额度。
  • cityvistion.cn 维护 userssubscriptionsapi_keysusage_logs 表。
  • 支持按能力计费:CGA 解析次数、NL2CGA 生成次数、Marketplace 下载/购买次数。

内部层(cityvistion.cn ↔ cgajs.com / rulepackage.com)

  • 域名白名单:cgajs.com 与 rulepackage.com 的 CORS/请求域名白名单加入 cityvistion.cn 及其子域。
  • 服务签名:cityvistion.cn 调用后端时附加 X-Service-Key + HMAC-SHA256 签名或 JWT,防止仅依赖 Origin 被伪造。
  • IP 白名单(可选):将 cityvistion.cn 服务器 IP(123.56.81.100)加入 cgajs.com / rulepackage.com 的防火墙/API 允许列表。

五、数据与训练飞轮

  • 素材来源:rulepackage.com Marketplace 中标记为公开、编译通过、质量评分高的 CGA 文件。
  • 同步机制:cityvistion.cn 或 rulepackage.com 定时将新增/更新的 CGA 文件推送给 cgajs.com( webhook / 共享存储 / rsync )。
  • 训练用途
    • 更新 rag_index.json,增强 RAG 检索。
    • 扩充 nl2cga/prebuilt/template_engine/templates/ 模板库。
    • 进入自学习系统,发现新语法模式并补充解析器。
    • 作为 NL2CGA 成功样本,用于模型微调。

六、管理员后台职能调整建议

功能模块建议归属理由
自学习系统(语法自动学习)保留在 cgajs.com 后台直接提升 CGA 解析器能力
函数契约测试保留在 cgajs.com 后台保障解析器函数正确性
AI 学习监督 / 自动循环保留在 cgajs.com 后台直接优化 NL2CGA 生成质量
训练数据集管理 / 样本标注rulepackage.com 后台新增Marketplace 文件是数据源,便于运营人员筛选优质样本
用户注册 / Key 发放 / 订阅计费迁移到 cityvistion.cncgajs.com 不再对外提供用户服务
域名白名单 / 服务凭证管理保留在 cgajs.com / rulepackage.com 后台内部安全策略由各自站点管理员控制

七、技术实现方案

1. 基础设施

  • DNScityvistion.cn 已解析到 123.56.81.100,在该服务器上部署 Nginx + 后端服务。
  • 服务栈建议:cityvistion.cn 可用 FastAPI/Node.js + PostgreSQL + Redis(配额计数)+ Nginx。
  • SSL:为 cityvistion.cn 申请证书,配置 HTTPS。

2. cgajs.com / rulepackage.com 改造

  • main.py 的鉴权中间件中区分“服务间调用”与“用户调用”:
    • X-Service-Key + 有效 HMAC → 服务间调用,跳过用户登录与额度扣减。
    • 仅含 X-API-Key → 拒绝(未来只有 cityvistion.cn 能直接调用,普通用户 Key 不再被 cgajs/rulepackage 接受)。
  • 域名白名单增加 cityvistion.cn 及其子域,同时支持 IP 白名单 123.56.81.100
  • 关闭 cgajs.com 的公开注册入口,仅保留管理员账户。

3. cityvistion.cn API 网关

统一 API 前缀建议:

POST /api/v1/cga/parse          -> 代理到 cgajs.com/api/v1/parse
POST /api/v1/cga/validate       -> 代理到 cgajs.com/api/v1/validate
POST /api/v1/nl2cga/generate    -> 代理到 cgajs.com/api/v1/nl2cga/generate
POST /api/v1/nl2cga/polish      -> 代理到 cgajs.com/api/v1/nl2cga/polish
GET  /api/v1/marketplace/list   -> 代理到 rulepackage.com/api/v1/marketplace/...
GET  /api/v1/marketplace/download/{id} -> 代理到 rulepackage.com/...
POST /api/v1/marketplace/purchase      -> 代理到 rulepackage.com/...
GET  /api/v1/plugin/download    -> cityvistion.cn 本地下载
    

网关职责:

  • 校验 X-API-Key 与会员额度。
  • 记录用量到 usage_logs
  • 向 cgajs.com / rulepackage.com 发起带服务签名的内部请求。
  • 统一错误码、限流、缓存热点响应。

4. 用户与订阅模型

  • 免费层:少量 CGA 解析 + NL2CGA 调用,用于试用。
  • 会员层:按月/年订阅,提升额度,解锁 Marketplace 下载折扣。
  • 企业层:自定义额度、专属支持、SLA。
  • 调用配额维度:parse 次数、generate 次数、marketplace 下载次数、并发 QPS。

5. 插件发布

  • CityEngine 插件代码在本地开发,打包后上传到 cityvistion.cn 的 /plugins 目录。
  • 插件默认调用 https://cityvistion.cn/api/v1/...,用户填入自己的 API Key。
  • cityvistion.cn 后台提供插件版本管理、下载统计、更新推送。

八、实施阶段建议

阶段内容预计周期
Phase 1cityvistion.cn 服务器初始化、Nginx、SSL、数据库、基础用户注册/登录/Key 生成1–2 天
Phase 2cgajs.com / rulepackage.com 鉴权改造:服务签名、白名单、关闭公开注册2–3 天
Phase 3cityvistion.cn API 网关与代理:配额、计费、用量日志、错误统一3–5 天
Phase 4数据飞轮:rulepackage → cgajs 自动同步、RAG 索引更新、训练样本沉淀3–5 天
Phase 5插件下载中心、文档、订阅支付、管理员后台收尾5–7 天

九、风险与应对

  • 白名单伪造风险:仅靠 Origin/Referer 不够,必须启用 X-Service-Key + HMAC 或 JWT 服务签名。
  • 单点故障:cityvistion.cn 成为唯一外部入口,需做限流、熔断、多实例部署。
  • 计费准确性:后端返回前 cityvistion.cn 必须可靠记录用量,建议使用 Redis 计数 + 异步落库。
  • 数据一致性:rulepackage.com 文件删除/下架后,cgajs.com 的 RAG 索引需同步失效,建议用文件状态字段控制。
  • CityEngine 插件分发:插件更新需通知用户,建议提供版本检查接口。

十、结论

该方案可行,且与现有代码结构兼容度高。核心改造点集中在:

  1. cgajs.com / rulepackage.com 的鉴权层(区分服务间调用与普通用户)。
  2. cityvistion.cn 作为独立站点,承担用户、Key、订阅、网关。
  3. 建立 rulepackage → cgajs 的数据回流通道。

建议先立项并启动 Phase 1(cityvistion.cn 基础设施),同时并行评估现有管理员后台中哪些功能需要迁移或精简。

NL2CGANL2CGA 五层生成架构完善指南 2026-06-16 02:30

当前 nl2cga_generate() 的决策顺序为: Prebuilt 模板匹配 → Code Assembler → Template Engine → RAG 向量检索 → LLM 兜底。 只要第 1 层命中,后续层都不会执行。下文说明每一层的作用、触发条件、构成要素与快速完善方法。

1. Prebuilt 模板匹配

作用:最快速度返回一个完整的、预先写好的 CGA 文件,适合住宅、别墅、办公楼、教堂、城堡等通用建筑类型。

触发条件match_prebuilt_cga(description, db) 对描述做关键词匹配,得分最高且达到 min_score=3 的模板被选中。

匹配源(两层)

  • 数据库 cga_assets:通过 https://cgajs.cityvistion.cn/cga.html 后台管理。
  • 磁盘预置模板/www/wwwroot/cgajs-api/nl2cga/prebuilt/ 下的 .cga 文件 + manifest.json

决定使用它的影响因素:描述里出现模板 keywords 中的词,命中关键词越长/越多得分越高。

构成的对象要素

  • manifest.json:slug、文件名、名称、描述、keywords、tags、complexity、category。
  • .cga 文件:实际 CGA 代码。
  • PrebuiltCGA 数据类:keywords、name、description、code、tags、complexity。

如何快速填充/完善

  • cga.html 后台新增/编辑 CGA 资产:设置 asset_type=prebuiltnl2cga_ready=true、填写 keywords
  • 直接修改磁盘模板:编辑 nl2cga/prebuilt/xx.cga,并在 manifest.json 中补充更细的关键词。
  • 把一个模板拆成多个尺寸版本(如 small-house.cgalarge-villa.cga),避免通用词被单一模板垄断。

2. Code Assembler 快速骨架

作用:用规则化代码直接拼接 CGA 骨架,不调用 LLM,毫秒级返回。依据 Polish 引擎输出的 size_classgeometry_strategy 决定几何构造方式。

触发条件:Prebuilt 未命中,且 Polish 引擎成功返回 PolishResult

当前策略对照

尺寸级geometry_strategyCGA 写法
tiny / smallcubes(length, height, width) primitiveCube()
medium / largequad_extrudes(length, 1, width) primitiveQuad() extrude(height)
monumental / 可缩放建筑scoped_quad_extrudeprimitiveQuad(scope.sx, scope.sz) extrude(scope.sy)

构成的对象要素

  • nl2cga/geometry_strategy.pySIZE_CLASSESGEOMETRY_STRATEGIES
  • nl2cga/code_assembler.pybuild_skeleton()build_attr_block()inject_attrs()ensure_start_rule()
  • polish_engine.PolishResult 中的 paramsattrs

如何快速填充/完善

  • geometry_strategy.py 中新增策略:cylinder、cone、arch、L_shape、U_shape 等。
  • build_skeleton() 中按 style 参数扩展立面/屋顶规则模板。
  • 添加“强制 Assembler”开关,让通用词也走规则化生成。

3. Parameterized Template Engine 参数化模板引擎

作用:针对地标/古建/复杂建筑(太和殿、天安门、牌坊、城墙、现代办公楼等),用预定义模板 + 参数填充生成 CGA,并通过本地 CGA 编译器自动验证和修复。

触发条件:Prebuilt 与 Assembler 都未命中/失败,且 generate_from_query() 能在 TEMPLATE_LIBRARY 中匹配到模板,且编译验证通过。

决定使用它的影响因素:描述里出现 template_library.py 中模板的 keywords;匹配得分 >= max(2, min_match_score);编译验证必须通过。

构成的对象要素

  • nl2cga/template_engine/template_library.py:模板元数据、keywordsparamslot_sizetemplate_code
  • nl2cga/template_engine/templates/*.cga:实际模板代码,使用 $param 占位符。
  • nl2cga/template_engine/engine.pyfill_template()compile_verify()auto_fix_code()generate_with_verification()
  • nl2cga/template_engine/error_fix_rules.json:自动修复规则库。

如何快速填充/完善

  • templates/ 下新增 .cga 文件,使用 $lot_width$lot_depth$height 等占位符。
  • template_library.py 中注册模板,填写 keywordsparams
  • error_fix_rules.json 中补充常见错误模式,增强自我修复能力。
  • 统一模板参数命名,减少 nl2cga_service.py 中的 length→lot_width 映射。

4. RAG 向量检索

作用:从 Marketplace 的 CGA 文件中检索最相关的代码片段,作为 LLM 的 few-shot 示例。只有前面三层都未命中/失败时才会启用。

触发条件:Prebuilt、Assembler、Template Engine 全部未返回有效代码,且 rag_service.get_relevant_cga_examples() 能检索到相关片段。

决定使用它的影响因素:查询词与 rag_index.json 中条目的关键词、标题、描述、tags、代码片段的匹配度;DOMAIN_SYNONYMS 同义词扩展;长度因子(关键词越多权重越高)。

构成的对象要素

  • rag_index.json:检索索引,由构建脚本生成。
  • rag_service.py:搜索入口 search_index()get_relevant_cga_examples()
  • scripts/build_rag_index.py:索引构建脚本。
  • 源数据:/www/wwwroot/marketplace.rulepackage.com/files 与根目录。

如何快速填充/完善

  • 上传更多优质 CGA 到 Marketplace;每个建筑风格/类型建议 3–5 个不同变体。
  • 文件头部写清楚注释说明,便于构建脚本提取标题和关键词。
  • 上传后重建索引:python scripts/build_rag_index.py --mode local
  • 扩展 DOMAIN_SYNONYMS 同义词表(如四合院、天井、骑楼、Art Deco、Brutalist)。
  • 配置 EMBEDDING_API_URL/KEY/MODEL 后使用 --mode api,升级为语义检索。

5. LLM 兜底

作用:当前面四层都无法生成有效代码时调用大模型生成;同时用于 refine(优化代码)和 fix(修复报错)。

触发条件:前面四层全部失败或未命中;RAG 片段、私有知识库、Polish 参数与几何策略作为上下文注入。

决定使用它的影响因素:是否有可用的 LLM API Key(Kimi / DeepSeek / SiliconFlow / Qwen / OpenAI);llm.provider 决定首选模型;提示词中注入的上下文质量。

构成的对象要素

  • ai_service.py:多模型客户端与自动切换链。
  • nl2cga_service.pySYSTEM_PROMPTbuild_context_prompt()build_generate_prompt()geometry_strategy_hint()
  • nl2cga/prompt_assembler.py:实体/模式/RAG 片段格式化。
  • nl2cga/intent_router.py:意图识别与实体/模式映射。
  • nl2cga/knowledge_retriever.py:私有知识库检索。
  • 配置表 system_configsllm.provider、各 provider API Key。

如何快速填充/完善

  • 在后台 SystemConfig 中配置至少两个 LLM provider 的 Key,保证自动切换。
  • 扩充私有知识库:/www/wwwroot/cgajs-project/private-knowledge/cga-patterns/building-entities.jsonchinese-palace-patterns.jsonrag-index-private.json
  • 优化 SYSTEM_PROMPT,强化必须声明 attr、使用注解、禁止随机 scope.sy 表达式。
  • 利用 CgaSuccessCase 中的成功样本做后续 SFT/RLHF 微调。

综合建议:如何让 AI 生成更智能、更高效

优先级行动预期效果投入成本
P0让 Prebuilt 模板尊重 Polish 尺寸解决大房子用 scope.sy 的问题
P0把通用建筑模板拆细避免通用词被单一模板垄断
P1提升 Assembler 优先级或加开关简单描述走规则化生成
P1扩充 Marketplace 优质 CGARAG 召回率与 LLM 质量提升
P1扩展 Template Engine 模板库覆盖更多地标与常见建筑
P2启用 Embedding API 语义 RAG从关键词匹配升级到语义匹配
P2建立成功样本反馈闭环用于模型微调或规则优化
P2引入用户评价/编辑回写用户修改后的代码回流到知识库

关于“大房子平屋顶”的具体说明

输入 "生成一个大房子平屋顶" 时,Polish 引擎已正确识别 size_class=largegeometry_strategy=quad_extrude 以及具体尺寸/屋顶类型;但 nl2cga_generate() 在第 1 层 Prebuilt 匹配中命中了 02-modern-villa.cga(其 manifest.jsonkeywords 包含 "大房子"),因此直接返回该固定模板,跳过了 Assembler。

后续可考虑的四个方向:

  • A:修改 02-modern-villa.cga,把 extrude(scope.sy*1.5+rand(0.5)) 改成按 attr length/width/height 生成。
  • B:新增 large-flat-roof.cga 模板,keywords 包含 "大房子 平屋顶",得分更高。
  • C:调整 nl2cga_service.py 优先级,把 Assembler 调到 Prebuilt 之前。
  • D:在前端增加“强制规则化生成”开关。