chore: initial commit of ai site platform

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
whm
2026-07-31 10:31:17 +08:00
commit 4ca82fb58a
203 changed files with 45745 additions and 0 deletions

View File

@@ -0,0 +1,483 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://local.dev/schemas/app-blueprint/v1.json",
"title": "AppBlueprint",
"description": "AI 生成 → 用户确认 → 中台执行的唯一契约v1",
"type": "object",
"additionalProperties": false,
"required": [
"version",
"meta",
"storage",
"entities",
"apis",
"pages",
"security"
],
"properties": {
"version": {
"type": "string",
"const": "1.0"
},
"meta": {
"type": "object",
"additionalProperties": false,
"required": ["name", "slug", "locale"],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "应用显示名"
},
"slug": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{1,47}$",
"description": "应用标识,用于路径与资源前缀"
},
"description": {
"type": "string",
"maxLength": 500
},
"locale": {
"type": "string",
"default": "zh-CN"
},
"source": {
"type": "object",
"additionalProperties": true,
"properties": {
"prompt": { "type": "string" },
"image_refs": {
"type": "array",
"items": { "type": "string" },
"maxItems": 10
},
"excel_ref": { "type": "string" },
"layout_refs": {
"type": "array",
"items": { "type": "string" }
},
"screenshot_faithful": { "type": "boolean" },
"vision_summary": { "type": "string" },
"layout_summary": { "type": "string" },
"llm_provider": { "type": "string" },
"llm_model": { "type": "string" },
"data_format": { "type": "string" },
"row_count": { "type": "number" }
}
},
"ui_preset": {
"type": "string",
"enum": ["default", "screenshot_faithful", "ops_monitor"]
},
"platform_title": { "type": "string", "maxLength": 64 },
"project_context": { "type": "string", "maxLength": 120 },
"ui": {
"type": "object",
"additionalProperties": true
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "AI 整体置信度,低于阈值应强制人工确认"
}
}
},
"storage": {
"type": "object",
"additionalProperties": false,
"required": ["mode", "engine"],
"properties": {
"mode": {
"type": "string",
"enum": ["schema_per_app", "database_per_app"],
"description": "schema_per_app=共享实例独立 schemadatabase_per_app=独立库(更高隔离)"
},
"engine": {
"type": "string",
"enum": ["postgres", "mysql"]
},
"schema_name": {
"type": "string",
"pattern": "^app_[a-z0-9_]{1,48}$",
"description": "由平台生成或校验;禁止用户/AI 指定任意库名"
}
}
},
"entities": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"items": { "$ref": "#/$defs/entity" }
},
"apis": {
"type": "object",
"additionalProperties": false,
"required": ["base_path", "resources"],
"properties": {
"base_path": {
"type": "string",
"pattern": "^/api/v1/apps/[a-z][a-z0-9_]{1,47}$"
},
"resources": {
"type": "array",
"minItems": 1,
"items": { "$ref": "#/$defs/apiResource" }
}
}
},
"pages": {
"type": "array",
"minItems": 1,
"items": { "$ref": "#/$defs/page" }
},
"security": {
"type": "object",
"additionalProperties": false,
"required": ["visibility", "roles", "row_policies"],
"properties": {
"visibility": {
"type": "string",
"enum": ["private", "org", "public_readonly"]
},
"roles": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["name", "permissions"],
"properties": {
"name": {
"type": "string",
"enum": ["owner", "editor", "viewer"]
},
"permissions": {
"type": "array",
"items": {
"type": "string",
"enum": [
"app.read",
"app.write",
"app.admin",
"row.create",
"row.read",
"row.update",
"row.delete",
"row.export",
"row.import"
]
}
}
}
}
},
"row_policies": {
"type": "array",
"description": "行级规则,中台强制注入,不可被前端绕过",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["entity", "rule"],
"properties": {
"entity": { "type": "string" },
"rule": {
"type": "string",
"enum": ["tenant_isolated", "owner_only", "org_shared"]
}
}
}
}
}
},
"seed": {
"type": "object",
"additionalProperties": false,
"properties": {
"import_excel": {
"type": "boolean",
"default": true
},
"max_rows": {
"type": "integer",
"minimum": 1,
"maximum": 100000,
"default": 5000
}
}
}
},
"$defs": {
"entity": {
"type": "object",
"additionalProperties": false,
"required": ["name", "table", "label", "fields", "primary_key"],
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{1,47}$",
"description": "逻辑实体名"
},
"table": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{1,47}$",
"description": "物理表名(不含 schema 前缀)"
},
"label": { "type": "string", "maxLength": 64 },
"primary_key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{1,47}$"
},
"fields": {
"type": "array",
"minItems": 1,
"maxItems": 80,
"items": { "$ref": "#/$defs/field" }
},
"indexes": {
"type": "array",
"maxItems": 20,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["name", "columns"],
"properties": {
"name": {
"type": "string",
"pattern": "^idx_[a-z0-9_]{1,48}$"
},
"columns": {
"type": "array",
"minItems": 1,
"maxItems": 5,
"items": { "type": "string" }
},
"unique": { "type": "boolean", "default": false }
}
}
}
}
},
"field": {
"type": "object",
"additionalProperties": false,
"required": ["name", "type", "label"],
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{1,47}$"
},
"label": { "type": "string", "maxLength": 64 },
"type": {
"type": "string",
"enum": [
"string",
"text",
"int",
"bigint",
"decimal",
"boolean",
"date",
"datetime",
"enum",
"json",
"file_ref"
]
},
"nullable": { "type": "boolean", "default": true },
"unique": { "type": "boolean", "default": false },
"default": {},
"max_length": {
"type": "integer",
"minimum": 1,
"maximum": 4000
},
"precision": { "type": "integer", "minimum": 1, "maximum": 38 },
"scale": { "type": "integer", "minimum": 0, "maximum": 10 },
"enum_values": {
"type": "array",
"items": { "type": "string" },
"maxItems": 50
},
"ui": {
"type": "object",
"additionalProperties": false,
"properties": {
"widget": {
"type": "string",
"enum": [
"input",
"textarea",
"number",
"select",
"switch",
"datepicker",
"upload",
"hidden"
]
},
"listable": { "type": "boolean", "default": true },
"filterable": { "type": "boolean", "default": false },
"sortable": { "type": "boolean", "default": false },
"width": {
"type": "string",
"enum": ["sm", "md", "lg"]
}
}
},
"from_excel": {
"type": "object",
"additionalProperties": false,
"properties": {
"column": { "type": "string" },
"sample_values": {
"type": "array",
"items": { "type": "string" },
"maxItems": 5
}
}
}
}
},
"apiResource": {
"type": "object",
"additionalProperties": false,
"required": ["entity", "path", "operations"],
"properties": {
"entity": { "type": "string" },
"path": {
"type": "string",
"pattern": "^/[a-z][a-z0-9_]{1,47}$"
},
"operations": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"enum": ["list", "get", "create", "update", "delete", "import", "export"]
}
},
"list": {
"type": "object",
"additionalProperties": false,
"properties": {
"default_page_size": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 20
},
"max_page_size": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 100
},
"allowed_filters": {
"type": "array",
"items": { "type": "string" }
},
"allowed_sorts": {
"type": "array",
"items": { "type": "string" }
}
}
}
}
},
"page": {
"type": "object",
"additionalProperties": false,
"required": ["id", "title", "route", "type", "entity"],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{1,47}$"
},
"title": { "type": "string", "maxLength": 64 },
"route": {
"type": "string",
"pattern": "^/[a-z0-9\\-_/:]{1,64}$",
"description": "支持 :id 这类路径参数"
},
"type": {
"type": "string",
"enum": ["list", "detail", "form_create", "form_edit", "dashboard"]
},
"entity": { "type": "string" },
"layout": {
"type": "object",
"additionalProperties": false,
"properties": {
"preset": {
"type": "string",
"enum": ["default", "screenshot_faithful", "ops_monitor"]
},
"action_labels": {
"type": "object",
"additionalProperties": { "type": "string" }
},
"filter_style": { "type": "string" },
"columns": {
"type": "array",
"description": "list 页展示列(字段名)",
"items": { "type": "string" }
},
"filters": {
"type": "array",
"items": { "type": "string" }
},
"actions": {
"type": "array",
"items": {
"type": "string",
"enum": ["create", "edit", "delete", "export", "import", "refresh"]
}
},
"form_fields": {
"type": "array",
"items": { "type": "string" }
},
"widgets": {
"type": "array",
"description": "dashboard 组件",
"items": {
"type": "object",
"additionalProperties": true,
"required": ["type", "title"],
"properties": {
"type": {
"type": "string",
"enum": ["kpi", "bar_chart", "line_chart", "pie_chart", "table", "status_strip"]
},
"title": { "type": "string" },
"metric": { "type": "string" },
"metrics": {
"type": "array",
"items": { "type": "string" }
},
"group_by": { "type": "string" },
"x_field": { "type": "string" },
"y_unit": { "type": "string" },
"entity": { "type": "string" },
"columns": {
"type": "array",
"items": { "type": "string" }
},
"label_field": { "type": "string" },
"value_field": { "type": "string" },
"warn_field": { "type": "string" },
"filter_field": { "type": "string" },
"filter_op": { "type": "string" },
"filter_value": {}
}
}
}
}
}
}
}
}
}