应用包结构(必须有什么)
读者:要从零手工搭一个可运行工作区应用的人。
来源 sdk/appsdk/应用包结构.md
读者:要从零手工搭一个可运行工作区应用的人。 运行时根目录:{RUNTIME_DIR}/workspaces/{workspaceId}/apps/{appSlug}/
1. 完整目录一览
{appSlug}/
├── app.json # 界面与数据模型(作者主改)
├── manifest.json # 清单(平台写入:显示名、程序集、intents…)
├── data/
│ └── app.db # 业务 SQLite(平台按 entities 建表)
├── schema/
│ └── 001_init.sql # 由 entities 生成的 DDL
├── logic/
│ ├── handlers.py # 自定义动作入口(有 script 动作时必须可执行)
│ └── *.py # 可选:业务辅助模块(如 generate_profile.py)
├── scripts/ # 可选:组装/工具脚本(invoke 时拷入沙箱)
├── assets/ # 可选:HTML 模板、静态资源
├── references/ # 可选:pipeline.json、field-mapping.json 等
└── skills/
└── SKILL.md # 供智能体对话调用的说明(常由平台生成)
2. 必选 vs 可选
2.1 最小可用应用(仅本地登记 + 列表)
例如「记事本」:只有 form + list,走内置 CRUD。
| 项 | 是否必须 | 说明 |
|---|---|---|
app.json | 必须 | ≥1 实体、≥1 视图 |
manifest.json | 必须 | 正常经平台「创建应用」写入;勿手改错 app_id |
data/app.db | 必须 | 首次初始化/迁移时生成 |
schema/*.sql | 必须 | 与实体对齐;改实体后由平台迁移补列 |
logic/handlers.py | 磁盘上通常有桩 | 无自定义 actions 时可不实现业务;有 impl=script 则必须实现 handle |
actions | 不需要 | 仅 CRUD 时可省略 |
scripts/ assets/ references/ | 不需要 |
2.2 带「一键办事」的应用(动作 + 可选取数)
例如「员工画像」:action_form + 历史列表 + 脚本取数出 HTML。
| 项 | 是否必须 | 说明 |
|---|---|---|
| 上表最小集 | 必须 | |
app.json → actions + action_form | 必须 | 动作 id 与视图 action 一致 |
logic/handlers.py 中对应分支 | 必须 | 见 动作与handlers |
logic 内其它 .py | 按需 | 建议拆分,避免单文件过大 |
references/pipeline.json | 建议 | 多步取数时用声明式步骤 |
scripts/ + assets/ | 按需 | 要生成报告/HTML 时需要 |
references/field-mapping.json | 按需 | 模板填槽 |
| 工作区 数据连接 与预定义查询 | 按需 | pipeline 里的 query_id 必须在连接中存在且用户有权 |
3. 调用时哪些目录会进沙箱
执行自定义动作时,平台把下列目录拷到临时工作目录(不会把整个应用目录原样挂载):
logic/(必须有handlers.py)scripts/assets/references/
不拷贝:data/、schema/、skills/、app.json、manifest.json。 业务库路径通过环境/ctx["app_db"] 注入。
因此:业务脚本要用的模板、流水线、辅助 py,必须放在上述四个目录之一。
4.1 产品内「应用包」面板
打开轻量应用后,顶栏「应用包」可浏览上述目录中的文本文件,并对白名单路径编辑保存(与应用开发助手可写范围一致)。app.json / manifest.json 为只读预览。详见 取数与流水线 §8。
5. 各文件职责(速查)
| 文件 | 谁维护 | 职责 |
|---|---|---|
app.json | 作者 / 应用开发助手 | 实体、视图、动作 → 决定界面长什么样、有哪些按钮 |
logic/handlers.py | 作者 | handle(action, params, ctx) 分发;写库、调平台桥 |
logic/*.py | 作者 | 取数编排、领域逻辑 |
references/pipeline.json | 作者 | 取数步骤清单(query_id、参数模板) |
scripts/*.py | 作者 | 纯转换(如 HTML 组装),尽量无副作用 |
assets/* | 作者 | 结果版式模板 |
data/app.db | 运行时 | 历史记录等应用私有数据 |
skills/SKILL.md | 常自动生成 | 对话里如何调用本应用的动作 |
6. 与「界面增加功能」的对应关系
| 你在界面想增加… | 改哪里 |
|---|---|
| 多一列表格列 / 表单输入 | app.json 实体字段 + 视图 columns/fields 或动作 params |
| 多一个「办事」按钮区 | actions[] + action_form + handlers.py 新分支 |
| 办事时要查 HR/业务库 | handlers 内调 ctx["platform"].query_run;建议配 pipeline.json |
| 办事后生成可打开的报告 | 组装 HTML → platform.save_upload → 返回 upload_id;列表实体含 upload_id |
| 只增删本地记录 | form/list + 内置 CRUD,可不写脚本逻辑 |
详细步骤:动作与handlers · 取数与流水线 · 手工搭建指南。