ai_co_discuss 0.2.7 → 0.2.9
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/README.md +1 -1
- package/docs/architecture.md +3 -1
- package/docs/runner.md +1 -1
- package/package.json +1 -1
- package/web/app.js +30 -3
- package/web/modern.css +1 -1
- package/web/modern.js +1348 -1265
package/README.md
CHANGED
|
@@ -64,7 +64,7 @@ codiscuss setup
|
|
|
64
64
|
1. 安装完成后进入自动打开的网站;以后运行 `codiscuss local open` 打开或复用本机网站,默认地址为 `http://127.0.0.1:8765`。
|
|
65
65
|
2. 点击“新建讨论”,填写**话题名称**和**用户原文**。把问题、背景与顾虑写在原文中,讨论目标、背景和边界由 AI 主持人据此补全。
|
|
66
66
|
3. 房间用法选择“头脑风暴”,接入方式默认“程序唤醒”,从卡片下方的“添加”行加入本场专家,点卡片上的皇冠指定 AI 主持人,点击“移出”调整名单。自动 CLI 卡片背面从真实软件目录下拉选择模型,并按模型支持的档位设置思考强度;留空使用 CLI 默认值,App 在原软件设置。项目文件只读 / 可写也在每张自动 CLI 卡片上分别设置(默认只读),在线专家始终只读;软件路径缺失时卡片背面直接提示填写。分别设置轮次和时长上限,点击数值展开滚轮或直接输入。新建默认 **3 轮 / 不限时长**,按轮次上限或手动停止结束;单次 AI 执行也默认不限时,可按需设置 1–60 分钟上限。
|
|
67
|
-
4. “创建后立即启动 AI
|
|
67
|
+
4. “创建后立即启动 AI”默认已勾选。需要一起查看项目时填写项目目录,可直接输入完整路径,也可点输入框右侧的文件夹图标在本机弹窗选取。复用已有会话等高级覆盖在建房后的“接入”页设置。
|
|
68
68
|
5. 点击“创建并启动讨论”。程序完成建房、登记与首次任务交付;在进度看板核对 AI 是否实际进入,并查看保存的发言。
|
|
69
69
|
|
|
70
70
|
只想让 AI 干活时,在第 3 步将房间用法改为“自由协作”,只需填写话题名称,任务在对话中随时补充:选择一位或多位本地 AI,默认由你主持,也可指定 AI 主持人;使用“程序唤醒”时点击“创建并连接”,之后在频道里直接发消息。多位时点名或在正文中 `@` 它们,处理中可随时停止。运行中可在右侧成员栏邀请、请离或请回 AI,指定主持人,或发起关联的头脑风暴。详见 [自由协作房间](docs/workflow.md#自由协作房间)。
|
package/docs/architecture.md
CHANGED
|
@@ -160,11 +160,13 @@ Python 在一个只读事务快照中查询;D1 使用同一个 batch 事务读
|
|
|
160
160
|
|
|
161
161
|
左右侧栏仅用朝向正文的柔和阴影分界,避免竖向描边与内侧高光线重复叠加。分栏拖柄覆盖接缝,层级高于主持简报、低于浮动预览,不占用布局宽度,仅在悬停、聚焦或拖动时显色。新建入口与导航选中项具有独立边界,右栏状态为轻浮起面板,焦点、参与者及耗时以留白和分隔线分组。消息、共识与主持面板使用较轻阴影,按钮使用短投影,菜单和抽屉使用浮层投影,搜索和表单使用内阴影;按下和禁用时降低或移除投影。输入区聚焦保留面板阴影并叠加焦点边界。材质调整保留三栏结构和阅读宽度。
|
|
162
162
|
|
|
163
|
+
浮层(菜单、预览、消息工具条、抽屉与弹窗)在深色频道使用毛玻璃:半透明上亮下暗渐变底配合 24px 背景模糊与增艳,边缘只用顶部内侧亮线、底部内侧暗线和向下投影,不加外侧白色辉光。浅色频道的控件本体保持不透明白色,只学习材质边界:蓝灰细描边、内侧顶部高光、内侧底部浅蓝灰暗边和蓝灰多层投影,按控件、面板、浮层三级加强。外观设置的「视觉效果」可切换为精简,写入根节点 `data-effects="reduced"` 并随布局偏好保存在浏览器;精简模式全局关闭背景模糊,深色浮层改为实色,深浅阴影各退为单层,用于保证低配设备的流畅度。浅色频道的发言快速导航放在贴合轮次内容的白色轻浮起底板上(控件级描边与阴影),刻度加长到 12px,非发言者半段使用中灰,轮次号与轮次分隔比辅助文字深一级;深色导航不加底板。
|
|
164
|
+
|
|
163
165
|
选中状态用填色、文字和勾选表达,键盘焦点使用中性边缘,不增加蓝色外框;卡片、模型选择、强度滑杆、模式、时长及编辑区遵循同一规则。
|
|
164
166
|
|
|
165
167
|
接入页分别交付本地成员的私有配置文件和不含 token 的参与说明,在线成员只给阅读说明;前端快照仅含成员接入方式与文件可用状态。手动创建、邀请、请回直接请求网站,自动成员才经本机启动器。创建与成员变更在请求前保存原编号和凭据,结果不明时沿用;复制说明不代表已送达或接入。项目、工作目录、讨论上限和错误按需展开。暂停后的本场软件连接修正使用独立卡片,页面不推断本机服务在线状态,选择模式或下载配置不会启动讨论。
|
|
166
168
|
|
|
167
|
-
消息区显示议题、原文和主持简报;议题卡的参与配置使用与头像一致的 20px 行高,姓名与主持 / CLI
|
|
169
|
+
消息区显示议题、原文和主持简报;议题卡的参与配置使用与头像一致的 20px 行高,姓名与主持 / CLI 标签保留字号层级并垂直居中。全自动执行期间,消息流末尾按有效执行显示等待状态:专家复用发言卡片的头像、姓名、轮次与样式,显示“正在唤醒…”或“正在准备回复…”;主持执行使用同宽、更矮、弱化底色和边框的“主持工作”卡,显示头像、姓名及右上角耗时,按交付与进入状态显示“正在唤醒主持人…”或“正在安排下一步…”,不推测内部操作。卡片类型按本次执行职责区分,主持人作为专家回答时仍使用专家等待卡;正式主持发言保留普通消息卡。安排待处理、手动接入、执行过期、暂停或归档不显示等待卡片。卡片不计入消息记录,没有消息编号、回复或引用操作;执行结束后移除,下一位专家实际交付后才显示其等待卡。搜索与提及筛选时隐藏,状态更新仅在用户原本位于底部时跟随滚动。标题栏、窄屏标签栏与主持简报合为同一块顶部面板,简报展开内容留在面板内,与收起状态共用背景、边线与投影,不再另起浮层。消息视图中该面板浮在消息列表之上,使用与深色浮层同款的毛玻璃(半透明渐变底、24px 背景模糊与增艳;浅色为白色半透明),滚动经过的卡片在其下模糊可见;消息列表顶部留白、导航与筛选条下移量、跳转与当前消息判定都按收起时的面板高度计算,展开简报只覆盖消息,不推动消息与输入区。其他视图中面板按普通流式布局排列。精简视觉效果下面板改为实色。已存档频道在独立弹窗管理,不改变当前频道和草稿。存档频道仍可阅读、恢复与导出;批量删除作用于当前搜索和筛选结果,执行前确认。
|
|
168
170
|
|
|
169
171
|
所有发言卡片右上角显示耗时。等待卡片使用同一执行的 `runtime.timings` 唤醒与执行秒数之和,从交付唤醒起累计,不计之前排队;本地每秒更新,服务器计时变化时校准,状态结束或切换房间后停止。正式发言的 `elapsed_seconds` 在保存消息的同一事务内按有效执行凭据与原作者关联计算,保存在 `message_timings`,此后翻页、重试和运行结束均不改变。主持发言同样计到各自保存时刻;不接受客户端提供的耗时。用户留言、手动或代发内容及缺少记录的旧消息显示“耗时 —”。升级仅为有精确 `message:ID` 完成结果与计时记录的历史专家发言回填,不按时间邻近推测关联,不覆盖已有耗时。
|
|
170
172
|
|
package/docs/runner.md
CHANGED
|
@@ -69,7 +69,7 @@ Windows 的 MSIX 应用(如 Claude 桌面版)可能把派生进程对 AppDat
|
|
|
69
69
|
python server.py --host 127.0.0.1 --local-launch
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
需要 Node.js 24+ 与已安装、已登录的 AI 客户端;讨论所需的最小工具权限按 [单次执行权限](#单次执行权限) 提供。新建时分别选择房间用法与“程序唤醒”,从卡片下方的“添加”行加入本地参与实例,点卡片上的皇冠指定主持人;自由协作默认用户主持,头脑风暴须选择本地 AI 主持。参与区只显示已加入的实例,用独立“移出”按钮调整名单。自动 CLI 卡片翻到背面后通过真实软件目录下拉选择模型,并按该模型支持的档位显示强度滑杆;首档使用 CLI 默认,agy 的强度包含在模型 ID 中。恢复默认只清除该实例的模型与强度覆盖,App、网页和手动会话在原软件设置。配置入口不依赖勾选立即启动,移出后重新加入保留本次填写。接入方式默认“程序唤醒”,“创建后立即启动 AI”默认勾选;本机服务未连接时只建房。项目文件权限在各自动 CLI
|
|
72
|
+
需要 Node.js 24+ 与已安装、已登录的 AI 客户端;讨论所需的最小工具权限按 [单次执行权限](#单次执行权限) 提供。新建时分别选择房间用法与“程序唤醒”,从卡片下方的“添加”行加入本地参与实例,点卡片上的皇冠指定主持人;自由协作默认用户主持,头脑风暴须选择本地 AI 主持。参与区只显示已加入的实例,用独立“移出”按钮调整名单。自动 CLI 卡片翻到背面后通过真实软件目录下拉选择模型,并按该模型支持的档位显示强度滑杆;首档使用 CLI 默认,agy 的强度包含在模型 ID 中。恢复默认只清除该实例的模型与强度覆盖,App、网页和手动会话在原软件设置。配置入口不依赖勾选立即启动,移出后重新加入保留本次填写。接入方式默认“程序唤醒”,“创建后立即启动 AI”默认勾选;本机服务未连接时只建房。项目文件权限在各自动 CLI 卡片上按专家设置(默认只读,在线专家固定只读),卡片背面“取消”或 Esc 恢复翻面前的设置,“完成”保留修改;卡片只在缺少软件路径、Sidecar IPC 目录或 Codex App 来源聊天时显示对应输入。项目目录可直接输入,也可点输入框右侧的文件夹图标经 `POST /api/local/pick-directory` 在运行本机服务的电脑上弹出系统目录选择窗口(Windows 用 PowerShell WinForms,macOS 用 osascript,Linux 用 zenity),取消时不返回路径,窗口最长等待 10 分钟。再点击“创建并启动讨论”;不勾选则只建房,之后在“接入”页启动。自由协作的“创建并连接”登记自动成员,后续点名产生任务时才唤醒。复用会话、单个 AI 的工作目录与项目等高级覆盖,以及“保存为本机软件默认配置”,在建房后的“接入”页设置,保存本身不启动任何 AI。卡片输入沿用当前页面的启动草稿,不随只建房请求保存到网站。正常首次自动接入无需下载 JSON、手动登记房间或另执行 `run start`。
|
|
73
73
|
|
|
74
74
|
网页在发送前把完整已提交输入、原提交号和控制凭据保存在当前站点的浏览器本地存储。服务启动失败或响应丢失后,刷新仍会显示“继续未完成的启动”;点击“继续本次启动”沿用原请求和本机已固定配置,无需重新填写,也不随新的默认配置变化。刷新只恢复界面,不自动运行;已暂停、结束、过期或在启动期间改变的房间不会因此重新开始。部分失败明确显示已核实的阶段,已建房不等于回滚;结果不明时保留原请求待核对。
|
|
75
75
|
|
package/package.json
CHANGED
package/web/app.js
CHANGED
|
@@ -820,8 +820,24 @@ async function copy_online_notice(name) {
|
|
|
820
820
|
state.free_notice = `已复制给 ${name} 的阅读通知;复制不代表已送达。拿到回答后,在输入框选择“代发 ${name}”粘贴原文。`;
|
|
821
821
|
}
|
|
822
822
|
|
|
823
|
+
/** Start every new form from defaults: room use, delivery, text, roster, host, limits and software overrides. */
|
|
824
|
+
function reset_create_form() {
|
|
825
|
+
element("room-form").reset();
|
|
826
|
+
reset_creation_mode();
|
|
827
|
+
render_expert_inputs("new-expert-modes", default_experts());
|
|
828
|
+
render_host_options("new-room-host", [], "");
|
|
829
|
+
state.create_parent = null;
|
|
830
|
+
state.launch.create = true;
|
|
831
|
+
state.launch.workspace = {};
|
|
832
|
+
state.launch.profiles = JSON.parse(JSON.stringify(state.launch.saved_profiles || {}));
|
|
833
|
+
state.launch.notice = "";
|
|
834
|
+
render_launch_settings();
|
|
835
|
+
publish_view();
|
|
836
|
+
}
|
|
837
|
+
|
|
823
838
|
/** Prepare the creation form for a brainstorm room that remembers this free room. */
|
|
824
839
|
function prepare_brainstorm() {
|
|
840
|
+
reset_create_form();
|
|
825
841
|
const room = state.room;
|
|
826
842
|
const members = (room.free?.members || []).filter(member => member.status === "active");
|
|
827
843
|
const host = members.find(member => member.role === "host" && member.access !== "online") || members.find(member => member.access !== "online");
|
|
@@ -1524,6 +1540,8 @@ async function load_launch_settings() {
|
|
|
1524
1540
|
if (local_connection) state.launch.connect_command = `codiscuss local connect "${location.origin}"`;
|
|
1525
1541
|
if (!local_connection && !local) return;
|
|
1526
1542
|
const settings = await local_launch_request("settings");
|
|
1543
|
+
// Keep the saved machine defaults so every new form can start from them again.
|
|
1544
|
+
state.launch.saved_profiles = JSON.parse(JSON.stringify(settings.participants || {}));
|
|
1527
1545
|
Object.assign(state.launch, { available: true, profiles: settings.participants, error: "",
|
|
1528
1546
|
notice: local_connection ? "已连接本机服务,讨论保存在当前网站" : "" });
|
|
1529
1547
|
load_room_models();
|
|
@@ -1633,6 +1651,13 @@ function write_launch_field(name, field, value) {
|
|
|
1633
1651
|
publish_view();
|
|
1634
1652
|
}
|
|
1635
1653
|
|
|
1654
|
+
/** Put one instance's draft back exactly as it was, including fields that were never set. */
|
|
1655
|
+
function restore_launch_profile(name, profile) {
|
|
1656
|
+
state.launch.profiles[name] = JSON.parse(JSON.stringify(profile));
|
|
1657
|
+
render_launch_settings();
|
|
1658
|
+
publish_view();
|
|
1659
|
+
}
|
|
1660
|
+
|
|
1636
1661
|
/** Capture local overrides before asynchronous work or navigation can change the draft. */
|
|
1637
1662
|
function launch_options() {
|
|
1638
1663
|
return JSON.parse(JSON.stringify({ participants: state.launch.profiles, ...state.launch.workspace, entry: "web" }));
|
|
@@ -1717,6 +1742,7 @@ async function save_launch_defaults() {
|
|
|
1717
1742
|
}));
|
|
1718
1743
|
try {
|
|
1719
1744
|
await local_launch_request("settings", { participants });
|
|
1745
|
+
state.launch.saved_profiles = { ...state.launch.saved_profiles, ...JSON.parse(JSON.stringify(participants)) };
|
|
1720
1746
|
state.launch.notice = "已保存本机软件配置,后续讨论可复用";
|
|
1721
1747
|
state.launch.error = "";
|
|
1722
1748
|
} catch (error) { state.launch.error = error.message; }
|
|
@@ -2499,7 +2525,8 @@ function finish_directory_drag(event) {
|
|
|
2499
2525
|
/** Bind forms, filters, and explicit read/write actions. */
|
|
2500
2526
|
function bind_controls() {
|
|
2501
2527
|
document.addEventListener("input", () => { state.navigation_version++; });
|
|
2502
|
-
const
|
|
2528
|
+
const open_create = () => { reset_create_form(); element("room-dialog").showModal(); };
|
|
2529
|
+
const actions = { "new-room": open_create, "empty-create": open_create,
|
|
2503
2530
|
"close-room-dialog": () => element("room-dialog").close(), "close-message-dialog": () => element("message-dialog").close(),
|
|
2504
2531
|
"refresh": refresh_room, "cancel-reply": cancel_reply, "go-context": () => select_tab("context"),
|
|
2505
2532
|
"copy-reading": () => copy_text(`${location.origin}/r/${state.room.id}`),
|
|
@@ -2776,7 +2803,7 @@ async function execute_view_action(name, value) {
|
|
|
2776
2803
|
choose_runtime, export_runtime, download_member_access, copy_member_join, pause_runtime, check_limits, pause_discussion, restart_discussion, force_close, conclude_discussion,
|
|
2777
2804
|
save_launch_defaults, launch_current_room, resume_launch, discard_launch, retry_launch_connection: load_launch_settings,
|
|
2778
2805
|
load_room_configuration, save_room_configuration, interrupt_member, toggle_recipient, change_member, invite_member, interrupt_free, set_proxy, copy_online_notice,
|
|
2779
|
-
prepare_brainstorm, return_conclusion,
|
|
2806
|
+
prepare_brainstorm, return_conclusion,
|
|
2780
2807
|
copy_reading: () => copy_text(`${location.origin}/r/${state.room.id}`), copy: copy_text };
|
|
2781
2808
|
try {
|
|
2782
2809
|
await actions[name](value);
|
|
@@ -2796,7 +2823,7 @@ function change_view_theme(theme) {
|
|
|
2796
2823
|
|
|
2797
2824
|
window.discuss_view = { snapshot: view_snapshot, write_field: write_view_field,
|
|
2798
2825
|
write_launch: write_launch_field, write_room_connection, write_room_adapter, launch_clients: LAUNCH_CLIENTS,
|
|
2799
|
-
launch_model_state, load_launch_models, write_launch_model, launch_summary, pick_launch_directory, empty_discussion_message,
|
|
2826
|
+
launch_model_state, load_launch_models, write_launch_model, launch_summary, pick_launch_directory, restore_launch_profile, reset_create_form, empty_discussion_message,
|
|
2800
2827
|
start_drag: start_directory_drag,
|
|
2801
2828
|
attachment_markup, attachment_size, attachment_file_icon, drop_attachments, paste_attachments,
|
|
2802
2829
|
write_expert: write_view_expert, add_instance: add_view_instance, platform_of, execute: execute_view_action, theme: change_view_theme,
|