ai_co_discuss 0.3.24 → 0.3.25
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.
- package/.agents/skills/discuss-host/references/discussion.md +1 -1
- package/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/backend/identity.py +31 -31
- package/backend/schema.sql +19 -0
- package/backend/server.py +2423 -2421
- package/docs/architecture.md +6 -5
- package/docs/deployment.md +13 -16
- package/docs/en/architecture.md +5 -4
- package/docs/en/deployment.md +13 -16
- package/docs/en/runner.md +3 -7
- package/docs/en/workflow.md +2 -2
- package/docs/runner.md +8 -8
- package/docs/workflow.md +2 -2
- package/package.json +1 -1
- package/runner/adapters/profiles.mjs +3 -3
- package/runner/discuss.py +6 -6
- package/runner/discussion_api.mjs +1 -1
- package/runner/discussion_launch.mjs +77 -5
- package/runner/discussion_service.mjs +74 -3
- package/runner/discussion_setup.mjs +5 -5
- package/runner/expert_prompts.mjs +2 -2
- package/runner/remote_launch.mjs +233 -233
- package/runner/tts.mjs +100 -0
- package/web/app.js +107 -54
- package/web/backup.js +1 -1
- package/web/markdown.js +1 -1
- package/web/modern.css +1 -1
- package/web/modern.js +3312 -2736
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
|
|
40
40
|
```json
|
|
41
41
|
[{"expert": "Claude", "question": "两种建议似乎采用了不同的失败容忍度。请判断这是否解释了分歧;若不是,指出决定选择的证据。"},
|
|
42
|
-
{"expert": "
|
|
42
|
+
{"expert": "Antigravity", "question": "先读取最新回答,再对 Claude 的判断给出你的看法。"}]
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
- 安排须带本次读取的 `revision`;整轮计划还须包含 `waiting` 中的每位专家。`unregistered` 中尚未注册的手动专家不能排入,它注册后会自动加入本轮队列。名单变化后 `revision` 失效需重取,缺人或未带 `revision` 都会被拒绝;本轮不需要某人时先让其暂离。
|
package/README.md
CHANGED
|
@@ -109,7 +109,7 @@ Details: [Architecture](docs/en/architecture.md) · [Setup](docs/en/runner.md)
|
|
|
109
109
|
|
|
110
110
|
## Deployment
|
|
111
111
|
|
|
112
|
-
The site can be self-hosted on **Cloudflare Pages + D1** or **Docker**; agents and the runner still run on your own machine
|
|
112
|
+
The site can be self-hosted on **Cloudflare Pages + D1** or **Docker**; agents and the runner still run on your own machine. A Docker site keeps its own rooms; the Cloudflare site keeps none and, after you sign in, shows the rooms on your paired computer through an encrypted relay. See [Deployment](docs/en/deployment.md).
|
|
113
113
|
|
|
114
114
|
> [!WARNING]
|
|
115
115
|
> The site does not yet provide user login or read-access isolation. Anyone who can reach the site can read its rooms. Read the [security policy](.github/SECURITY.md) before exposing it publicly.
|
package/README.zh-CN.md
CHANGED
|
@@ -106,7 +106,7 @@ flowchart LR
|
|
|
106
106
|
|
|
107
107
|
## 部署
|
|
108
108
|
|
|
109
|
-
网站支持自托管于 **Cloudflare Pages + D1** 或 **Docker**;AI
|
|
109
|
+
网站支持自托管于 **Cloudflare Pages + D1** 或 **Docker**;AI 与接入服务仍在你的电脑运行。Docker 站点自己保存房间;Cloudflare 站点不保存房间,登录管理员后经加密中转显示已配对电脑上的房间。见 [部署指南](docs/deployment.md)。
|
|
110
110
|
|
|
111
111
|
> [!WARNING]
|
|
112
112
|
> 网站暂无用户登录与读取权限隔离,能访问站点的人即可阅读其中的房间。公开部署前请阅读 [安全说明](.github/SECURITY.md)。
|
package/backend/identity.py
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
"""Participant identities: an AI platform is a type, a room participant is one named instance of it.
|
|
2
|
-
|
|
3
|
-
`Claude` and `Claude
|
|
4
|
-
own session, model and thinking effort. Platform names alone keep their historical meaning.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import re
|
|
8
|
-
|
|
9
|
-
USER = "用户"
|
|
10
|
-
AI_PLATFORMS = ("Codex", "Claude", "
|
|
11
|
-
PARTICIPANTS = [USER, *AI_PLATFORMS]
|
|
12
|
-
MAX_INSTANCE_SUFFIX = 16
|
|
13
|
-
# AI instances one room may hold, across platforms.
|
|
14
|
-
MAX_ROOM_AGENTS = 12
|
|
15
|
-
INSTANCE_PATTERN = re.compile(rf"({'|'.join(AI_PLATFORMS)})(?:-[0-9A-Za-z_
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def is_ai(name):
|
|
19
|
-
"""Whether a name is an AI platform or a named instance of one."""
|
|
20
|
-
return isinstance(name, str) and INSTANCE_PATTERN.fullmatch(name) is not None
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
def is_participant(name):
|
|
24
|
-
"""Whether a name may author, submit or be scheduled: the user or any AI instance."""
|
|
25
|
-
return name == USER or is_ai(name)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def platform_of(name):
|
|
29
|
-
"""Return the platform an AI instance belongs to, or None for the user and invalid names."""
|
|
30
|
-
match = INSTANCE_PATTERN.fullmatch(name) if isinstance(name, str) else None
|
|
31
|
-
return match.group(1) if match else None
|
|
1
|
+
"""Participant identities: an AI platform is a type, a room participant is one named instance of it.
|
|
2
|
+
|
|
3
|
+
`Claude` and `Claude-review` are two instances of the Claude platform in the same room; each keeps its
|
|
4
|
+
own session, model and thinking effort. Platform names alone keep their historical meaning.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import re
|
|
8
|
+
|
|
9
|
+
USER = "用户"
|
|
10
|
+
AI_PLATFORMS = ("Codex", "Claude", "Antigravity", "DeepSeek", "Qwen", "Grok")
|
|
11
|
+
PARTICIPANTS = [USER, *AI_PLATFORMS]
|
|
12
|
+
MAX_INSTANCE_SUFFIX = 16
|
|
13
|
+
# AI instances one room may hold, across platforms.
|
|
14
|
+
MAX_ROOM_AGENTS = 12
|
|
15
|
+
INSTANCE_PATTERN = re.compile(rf"({'|'.join(AI_PLATFORMS)})(?:-[0-9A-Za-z_]{{1,{MAX_INSTANCE_SUFFIX}}})?")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def is_ai(name):
|
|
19
|
+
"""Whether a name is an AI platform or a named instance of one."""
|
|
20
|
+
return isinstance(name, str) and INSTANCE_PATTERN.fullmatch(name) is not None
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def is_participant(name):
|
|
24
|
+
"""Whether a name may author, submit or be scheduled: the user or any AI instance."""
|
|
25
|
+
return name == USER or is_ai(name)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def platform_of(name):
|
|
29
|
+
"""Return the platform an AI instance belongs to, or None for the user and invalid names."""
|
|
30
|
+
match = INSTANCE_PATTERN.fullmatch(name) if isinstance(name, str) else None
|
|
31
|
+
return match.group(1) if match else None
|
package/backend/schema.sql
CHANGED
|
@@ -1304,3 +1304,22 @@ BEGIN
|
|
|
1304
1304
|
INSERT INTO room_revisions (room_id,revision) SELECT '',(SELECT COALESCE(MAX(revision),0)+1 FROM room_revisions)
|
|
1305
1305
|
WHERE NOT EXISTS (SELECT 1 FROM room_revisions WHERE room_id='');
|
|
1306
1306
|
END;
|
|
1307
|
+
-- The platform once called Gemini is identified as Antigravity (the software); screens still show the nickname Gemini.
|
|
1308
|
+
-- Member names move to the new ID, with any instance suffix (Gemini-2 → Antigravity-2); names inside stored JSON follow.
|
|
1309
|
+
-- Message text keeps what was written. Each statement only touches rows still holding the old ID, so reruns change nothing.
|
|
1310
|
+
UPDATE room_members SET name='Antigravity'||substr(name,7) WHERE name='Gemini' OR name GLOB 'Gemini-*';
|
|
1311
|
+
UPDATE messages SET author='Antigravity'||substr(author,7) WHERE author='Gemini' OR author GLOB 'Gemini-*';
|
|
1312
|
+
UPDATE message_summaries SET author='Antigravity'||substr(author,7) WHERE author='Gemini' OR author GLOB 'Gemini-*';
|
|
1313
|
+
UPDATE message_details SET submitted_by='Antigravity'||substr(submitted_by,7) WHERE submitted_by='Gemini' OR submitted_by GLOB 'Gemini-*';
|
|
1314
|
+
UPDATE attachments SET actor='Antigravity'||substr(actor,7) WHERE actor='Gemini' OR actor GLOB 'Gemini-*';
|
|
1315
|
+
UPDATE topic_settings SET host='Antigravity'||substr(host,7) WHERE host='Gemini' OR host GLOB 'Gemini-*';
|
|
1316
|
+
UPDATE member_descriptions SET name='Antigravity'||substr(name,7) WHERE name='Gemini' OR name GLOB 'Gemini-*';
|
|
1317
|
+
UPDATE member_labels SET name='Antigravity'||substr(name,7) WHERE name='Gemini' OR name GLOB 'Gemini-*';
|
|
1318
|
+
UPDATE scheduler_feedback SET should_be='Antigravity'||substr(should_be,7) WHERE should_be='Gemini' OR should_be GLOB 'Gemini-*';
|
|
1319
|
+
UPDATE scheduler_feedback_cases SET should_be='Antigravity'||substr(should_be,7) WHERE should_be='Gemini' OR should_be GLOB 'Gemini-*';
|
|
1320
|
+
UPDATE review_plans SET reviewer_name='Antigravity'||substr(reviewer_name,7) WHERE reviewer_name='Gemini' OR reviewer_name GLOB 'Gemini-*';
|
|
1321
|
+
UPDATE topic_settings SET experts=replace(replace(experts,'"Gemini"','"Antigravity"'),'"Gemini-','"Antigravity-') WHERE experts LIKE '%"Gemini%';
|
|
1322
|
+
UPDATE free_chain_holds SET names=replace(replace(names,'"Gemini"','"Antigravity"'),'"Gemini-','"Antigravity-') WHERE names LIKE '%"Gemini%';
|
|
1323
|
+
UPDATE room_creations SET request_text=replace(replace(request_text,'"Gemini"','"Antigravity"'),'"Gemini-','"Antigravity-') WHERE request_text LIKE '%"Gemini%';
|
|
1324
|
+
UPDATE session_start_submissions SET request_json=replace(replace(request_json,'"Gemini"','"Antigravity"'),'"Gemini-','"Antigravity-') WHERE request_json LIKE '%"Gemini%';
|
|
1325
|
+
UPDATE scheduler_decision_inputs SET input=replace(replace(input,'"Gemini"','"Antigravity"'),'"Gemini-','"Antigravity-') WHERE input LIKE '%"Gemini%';
|