ai_co_discuss 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,7 @@
8
8
 
9
9
  所有新房间在同一事务中登记房主及成员凭据。创建者先保存凭据再提交,同一建房编号的重试必须沿用原配置及全部凭据;服务端不返回明文凭据。浏览器在本地保存本房间的私有接入资料,下载成员文件时只导出该成员的 `site`、`room`、`token`。本机启动器另保存自己的私有配置;CLI 建房要求指定私有文件。不要提交这些文件到 Git、上传到房间或把 token 复制进指令。没有凭据登记的历史房间只读,本次不提供自动认领或迁移。
10
10
 
11
- 能访问站点的人仍可以读取房间、列表、附件和原文备份;备份不含凭据或哈希。新建房间和站点级文件夹操作也没有账号鉴权,房间写入保护不是整站访问控制。公开站点不得存放敏感材料;需要私有使用时在服务外配置身份与网络访问控制,并实际验证 CLI 和阅读入口的访问行为。
11
+ 能访问站点的人仍可以读取房间、列表、附件和原文备份;备份不含凭据或哈希。新建房间、站点级文件夹操作,以及频道排序和归入文件夹,也没有账号鉴权,房间写入保护不是整站访问控制。公开站点不得存放敏感材料;需要私有使用时在服务外配置身份与网络访问控制,并实际验证 CLI 和阅读入口的访问行为。
12
12
 
13
13
  Python 服务默认绑定回环地址;Cloudflare 部署通常对公网可见。根配置为示例资源 ID,部署者负责云账号、HTTPS、访问限制和备份。项目未经过独立安全审计。
14
14
 
@@ -200,7 +200,7 @@ def authorize_write(connection, room_id, token, operation, payload):
200
200
  if member and (not run or run["mode"] == "manual"):
201
201
  authorize_participant(connection, room_id, member, operation, payload)
202
202
  return
203
- if not run:
203
+ if not run or not hashed:
204
204
  raise PermissionError("需要房主或本成员的有效凭据;没有凭据只能阅读")
205
205
  actor = write_actor(operation, payload)
206
206
  work_seconds = execution_seconds(connection, room_id)
package/backend/server.py CHANGED
@@ -36,6 +36,8 @@ MAX_ATTACHMENT_BYTES = 20 * 1024 * 1024
36
36
  MAX_MESSAGE_ATTACHMENTS = 10
37
37
  MAX_FILENAME_LENGTH = 255
38
38
  LOCAL_LAUNCH_TIMEOUT = 60
39
+ # Ordering and filing a channel only rearrange the shared directory, like folder edits, so they need no room credential.
40
+ DIRECTORY_OPERATIONS = ("move", "folder")
39
41
  DIRECTORY_PICKER_TIMEOUT = 600 # the folder dialog waits for the person at the computer
40
42
  MAX_TEXT_LENGTH = 32000
41
43
  MAX_STATE_LENGTH = 4000
@@ -1535,7 +1537,9 @@ class DiscussionHandler(BaseHTTPRequestHandler):
1535
1537
  raise ValueError("自由房间不使用讨论运行控制")
1536
1538
  return self.handle_runtime_api(connection, parts, params, method)
1537
1539
  free_actor = None
1538
- if method == "POST" and free:
1540
+ if method == "POST" and len(parts) == 4 and parts[3] in DIRECTORY_OPERATIONS:
1541
+ pass
1542
+ elif method == "POST" and free:
1539
1543
  free_actor = authorize_free_write(connection, room_id, token, parts[3] if len(parts) > 3 else "", self.read_payload())
1540
1544
  elif method == "POST":
1541
1545
  authorize_write(connection, room_id, token, parts[3] if len(parts) > 3 else "", self.read_payload())
@@ -218,7 +218,7 @@ running 状态即使只有 pending 事件,也必须先暂停才能重新启动
218
218
 
219
219
  自由房间(`room_modes.mode='free'`)与讨论房间共用房间、成员登记、消息、附件与目录,没有发言权、安排、阶段推进和轮次。没有控制凭据登记的旧房间只供阅读,不支持通过首次运行配置认领;本次不迁移历史房间。
220
220
 
221
- - **凭据**:建房时由客户端提供房间控制凭据和每位成员的成员凭证,服务端只存哈希。用户身份的所有写入(发言、附件、目录整理、存档、删除、打断)都须控制凭据;无凭据、错误凭据、成员凭证或他房凭据一律只读。成员凭证只能以该成员身份发言或上传附件。声明字段(`author`、`source`、localhost)不代替凭据。
221
+ - **凭据**:建房时由客户端提供房间控制凭据和每位成员的成员凭证,服务端只存哈希。用户身份的房间写入(发言、附件、存档、恢复、删除、打断)都须控制凭据;频道排序和归入文件夹只改共享目录,与站点级文件夹操作一样不需要凭据;无凭据、错误凭据、成员凭证或他房凭据一律只读。成员凭证只能以该成员身份发言或上传附件。声明字段(`author`、`source`、localhost)不代替凭据。
222
222
  - **成员**:`room_members` 以 `id` 为稳定主键,`access` 为 `runner`(接入程序投递)、`manual`(成员自行读写)或 `online`(只读、原文代发),`session_mode` 标记是否借用用户正在使用的会话。房主用控制凭据 `POST members` 运行中加入成员,`POST members/ID {action}` 让成员离开(`away`,作废其进行中执行与未投递请求)、请回(`active`,必须提供不同于原凭证的新凭证,旧凭证副本不再有效)或移除(`remove`,保留历史发言)。同一成员凭证不能复用于其他成员或房主;相同凭证与配置的邀请、请回重试返回已有结果。会话续接由本机接入程序负责,服务端不保存会话绑定。
223
223
  - **请求**:用户消息按结构化接收者 `to`(成员名)为每位成员生成一条请求;省略且仅有一位在场成员时默认点名该成员,多位成员时不点名只作留言,不广播。网页从点名按钮和正文中代码与引用之外的 `@成员` 生成 `to`。请求状态为 `pending`(待投递)→ `delivering`(处理中)→ `completed` / `cancelled` / `failed`。
224
224
  - **执行**:`member_executions` 每位成员最多一个 `dispatched/started`(部分唯一索引),不同成员可并行。接入程序用控制凭据 `GET inbox`、`POST executions {member_id, client_id}`(同一 `client_id` 返回同一执行)把成员的全部待投递请求打包;`POST executions/ID {action}` 支持 `renew`(租约 120 秒,不超过单次执行时限,默认 20 分钟)、`fail`(请求标记失败)和 `release`(仅确认未送达时退回队列)。租约过期的执行在下次读取或领取时标记失败,不自动重发。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai_co_discuss",
3
- "version": "0.2.6",
3
+ "version": "0.2.7",
4
4
  "bin": {
5
5
  "codiscuss": "runner/codiscuss.mjs"
6
6
  },