空间即应用:站点发布

将工作空间中的静态页面或 HTTP 服务发布为独立站点

站点发布

站点发布用于把工作空间中的页面或服务发布为可访问的独立站点。发布后系统会自动生成站点地址,适合分享文档、Demo 页面、原型页面、预览服务或内部工具。

  • 静态 HTML:从工作空间文件系统读取 HTML、CSS、JS、图片等文件。
  • HTTP 服务:发布工作空间内正在运行的 Web 应用或接口服务。

站点默认仅空间成员可见,发布者也可以按需要调整为组织内可见。未发布、草稿或已下线站点不会对外访问。

适用场景

  • 将工作空间中的静态页面快速分享给团队成员查看。
  • 把正在开发的前端应用、后端服务或全栈 Demo 以站点形式对外预览。
  • 发布需要登录访问的内部工具,并明确告知访问者站点会读取哪些个人数据。
  • 在本地执行机或云端运行环境中调试 Web 服务访问效果。

静态 HTML

静态模式需要配置站点根目录和入口文件。根路径访问会返回入口文件,子路径会映射到站点根目录下的同名资源。

静态资源支持相对路径加载,例如 ./main.jsmain.jscss/style.css。HTML 中以 / 开头的绝对路径不会自动改写到站点路径下,建议静态站点使用相对路径。

文件读取统一通过工作空间文件适配器完成,因此云端 workspace 和本地执行机 workspace 都使用同一套访问规则。

HTTP 服务

HTTP 服务发布面向需要进程持续运行的 Web 应用,例如开发服务器、后端接口服务或全栈框架应用。

发布 HTTP 服务时,需要填写应用监听端口,并可补充服务启动说明、健康检查路径、基础路径等高级配置。服务启动说明用于帮助发布者或协作者在服务停止后快速恢复运行。

访问站点时,后端会根据工作空间当前执行模式解析目标:

  • 云端 sandbox:如果容器已停止,会自动唤起容器。
  • 本地执行机:如果本地执行机离线,会返回不可用状态,不会回退到云端 sandbox。

系统会记录服务恢复状态,便于发布者判断服务是否已恢复成功。

访问地址

站点优先使用自动生成的独立站点地址访问。独立地址可以让页面资源、接口请求、Cookie 和前端路由更接近真实部署方式。

发布者可以在创建站点时选填独立域名前缀;留空时系统自动生成。站点创建后也可以在编辑页修改前缀。系统会检查前缀格式和全局占用情况,避免不同站点使用同一个独立站点地址。修改前缀只改变访问地址,不会重新创建站点,也不会清除访问者已经对该站点完成的授权。

系统也保留平台内兼容访问入口,便于从工作空间设置、文件预览等位置跳转和调试。

系统管理员可以在平台管理后台按站点禁用独立站点域名访问。禁用后,站点不会被删除,发布配置仍然保留;访问该独立站点地址时会显示临时不可用提示,用于异常流量、故障排查或稳定性保护场景。

授权数据

发布站点时,发布者需要声明站点会读取哪些访问者数据。访问者首次打开站点时,会看到对应的授权确认页面;同意后,该授权只对当前站点生效,不会被其他站点复用。

当前产品界面按 API 能力分类声明授权,而不是按权限等级打包授权。发布者可以选择基础访问、个人信息、个人组织信息、组织管理信息、工作空间读取、工作空间写入、空间知识目录读取、空间知识目录写入、插件读取、插件写入、AI / Chat 调用、会话历史与元数据管理等分类。

涉及组织或工作空间的能力需要访问者选择资源范围。组织管理信息授权时只记录用户同意和组织范围;实际读取组织成员等管理员接口时,后端会再次校验访问者当前是否为组织管理员。工作空间写入用于创建或修改工作空间元信息,空间知识目录写入用于创建、更新或删除工作空间知识目录文件,二者需要分别授权。会话历史与元数据管理按工作空间范围统一授权,授权后站点可访问所选工作空间下的所有会话。任务写入是任务协作能力,访问者是工作空间 viewer 时也可以授权并通过站点 API 创建、修改或删除任务。站点授权 API 前缀和后台 PAT 调用规则见下方说明,通用平台接口详情见 常用 API

访问者授权后,可以在个人设置的“站点授权”中查看站点已获得的权限,并可以打开站点、调整授权范围或撤销授权。撤销后,再次访问该站点时需要重新确认授权。

能力模块

能力模块按站点可申请的业务能力划分。同一个工作空间资源范围下,工作空间元信息写入、知识库文件写入、插件操作和任务写入是不同概念,应按实际用途分别授权。

站点授权 API 统一使用 /.well-known/knodo-site-auth 前缀。站点页面或站点后台调用平台 API 时,在原平台 API 路径前加该前缀。例如 /api/v1/auth/me 对应 /.well-known/knodo-site-auth/api/v1/auth/me

后端会先校验 knodo_site_access,再判断目标接口是否开放给站点授权调用以及能力范围是否满足;没有开放或授权不足的接口不能调用。

模块风险资源范围说明
基础访问获取当前站点授权摘要
个人信息读取访问者姓名、头像等基础资料
个人组织信息组织读取访问者相关组织摘要
组织管理信息管理员组织读取组织成员列表、角色等管理员信息
工作空间读取工作空间读取工作空间元信息
工作空间写入可写工作空间创建或修改工作空间元信息,不等同于知识库文件写入
空间知识目录读取工作空间读取工作空间知识目录和文件内容
空间知识目录写入可写工作空间创建、更新、删除工作空间知识目录文件
AI / Chat 调用工作空间或 Bot发起 AI 调用或继续对话
会话历史与元数据管理工作空间读取所选工作空间下的所有会话历史,管理标签、标题、摘要等元数据
插件读取组织或工作空间读取可见插件、插件详情或工作空间绑定关系
插件写入组织或可写工作空间上传、修改插件或变更工作空间插件绑定
任务读取工作空间读取工作空间任务
任务写入有任务访问资格的工作空间创建、修改或删除工作空间任务;viewer 也可以授权和使用

站点 API 调用

站点前端使用站点域名下的授权 API 前缀,统一前缀为 /.well-known/knodo-site-auth。浏览器会自动携带 knodo_site_access Cookie,避免跨域,也不需要在前端保存 Token。

const response = await fetch("/.well-known/knodo-site-auth/api/v1/auth/me"); const auth = await response.json();

站点后台也可以转发 knodo_site_access 调用同一前缀下的 API:

curl "https://<site-domain>/.well-known/knodo-site-auth/api/v1/auth/me" \ -H "Cookie: knodo_site_access=jvs_site_xxx"

如果站点后台要调用通用平台 API,应使用 Knodo 平台域名下的 /api/v1/...,并通过 PAT 认证。PAT 的认证方式和常用接口详情见 常用 API

已开放给站点授权前缀的接口如下。调用时把“平台 API”前面加上 /.well-known/knodo-site-auth 即可。

模块方法平台 API
基础访问GET/api/v1/auth/me
工作空间读取GET/api/v1/workspaces
工作空间读取GET/api/v1/workspaces/{id}
工作空间写入POST/api/v1/workspaces
工作空间写入PATCH/api/v1/workspaces/{id}
空间知识目录读取GET/api/v1/workspaces/{workspaceId}/files
空间知识目录读取GET/api/v1/workspaces/{workspaceId}/files/tree
空间知识目录读取GET/api/v1/workspaces/{workspaceId}/files/content
空间知识目录写入POST/api/v1/workspaces/{workspaceId}/files/upload
空间知识目录写入PUT/api/v1/workspaces/{workspaceId}/files/text-file
空间知识目录写入DELETE/api/v1/workspaces/{workspaceId}/files/delete
插件读取GET/api/v1/plugins
插件读取GET/api/v1/plugins/{id}
插件读取GET/api/v1/workspaces/{workspaceId}/plugins
插件读取GET/api/v1/workspaces/{workspaceId}/plugins/available
插件写入POST/api/v1/plugins/upload
插件写入PUT/api/v1/plugins/{id}/reupload
插件写入PATCH/api/v1/plugins/{id}/status
插件写入POST/api/v1/workspaces/{workspaceId}/plugins
插件写入DELETE/api/v1/workspaces/{workspaceId}/plugins/{pluginId}
任务读取GET/api/v1/workspaces/{workspaceId}/task-items
任务读取GET/api/v1/workspaces/{workspaceId}/task-items/{taskId}
任务写入POST/api/v1/workspaces/{workspaceId}/task-items
任务写入PATCH/api/v1/workspaces/{workspaceId}/task-items/{taskId}
任务写入DELETE/api/v1/workspaces/{workspaceId}/task-items/{taskId}
AI / Chat 调用POST/api/v1/workspaces/{workspaceId}/chat/submit
AI / Chat 调用POST/api/v1/bots/{botId}/chat/completions
会话历史与元数据管理GET/api/v1/workspaces/{workspaceId}/chat/conversations
会话历史与元数据管理GET/api/v1/workspaces/{workspaceId}/chat/conversations/{conversationId}/messages
会话历史与元数据管理GET/api/v1/workspaces/{workspaceId}/chat/conversations/{conversationId}/status
会话历史与元数据管理PATCH/api/v1/workspaces/{workspaceId}/chat/conversations/{conversationId}
会话历史与元数据管理DELETE/api/v1/workspaces/{workspaceId}/chat/conversations/{conversationId}

限制说明:站点授权前缀目前不开放 GET /api/v1/workspaces/{workspaceId}/chat/conversations/{conversationId}/stream 这类 SSE 流式接口;Bot Chat 的 stream=true 也不通过站点授权前缀开放。需要流式能力时,建议由独立站点后台使用 PAT 调用平台 API,再按站点自身协议返回给前端。

修改工作空间基本信息使用 PATCH /api/v1/workspaces/{id}。请求体里缺失的 key 不会修改对应字段;只有显式传入的字段才会更新。

权限

站点权限分为两层:站点可见性控制“谁可以打开站点”,授权数据控制“站点打开后可以代表访问者读取或写入哪些数据”。

站点可见性支持:

  • 组织内可见:同组织登录用户可访问。
  • 空间成员可见:仅工作空间成员可访问。

授权数据按能力模块控制:

  • 基础访问、个人信息等无资源范围的能力,只确认能力本身。
  • 组织管理信息授权时不要求访问者是组织管理员;调用组织成员等管理员接口时才校验当前管理员身份。
  • 工作空间读取、空间知识目录读取、空间知识目录写入、AI / Chat 调用等能力需要选择具体工作空间范围;其中空间知识目录写入需要工作空间 admin/editor。
  • 任务写入按任务协作权限处理,工作空间 viewer 也可以授权和使用,不按知识库或插件写入的 admin/editor 规则处理。
  • 会话历史与元数据管理需要选择工作空间范围;授权会话即授权所选工作空间下的所有会话。
  • 插件读取、插件写入、任务读取、任务写入属于站点声明的高阶业务能力,需要按组织或工作空间范围单独授权。

两层权限互不替代:即使用户可以打开站点,站点读取个人资料、访问工作空间内容或写入知识库前,仍需要用户确认对应能力和资源范围。用户撤销站点授权后,站点可见性不变,但站点不能再调用已撤销的授权数据。