ai_co_discuss 0.2.8 → 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.
@@ -160,13 +160,13 @@ Python 在一个只读事务快照中查询;D1 使用同一个 batch 事务读
160
160
 
161
161
  左右侧栏仅用朝向正文的柔和阴影分界,避免竖向描边与内侧高光线重复叠加。分栏拖柄覆盖接缝,层级高于主持简报、低于浮动预览,不占用布局宽度,仅在悬停、聚焦或拖动时显色。新建入口与导航选中项具有独立边界,右栏状态为轻浮起面板,焦点、参与者及耗时以留白和分隔线分组。消息、共识与主持面板使用较轻阴影,按钮使用短投影,菜单和抽屉使用浮层投影,搜索和表单使用内阴影;按下和禁用时降低或移除投影。输入区聚焦保留面板阴影并叠加焦点边界。材质调整保留三栏结构和阅读宽度。
162
162
 
163
- 浮层(菜单、预览、消息工具条、抽屉与弹窗)在深色频道使用毛玻璃:半透明上亮下暗渐变底配合 24px 背景模糊与增艳,边缘只用顶部内侧亮线、底部内侧暗线和向下投影,不加外侧白色辉光。浅色频道的控件本体保持不透明白色,只学习材质边界:蓝灰细描边、内侧顶部高光、内侧底部浅蓝灰暗边和蓝灰多层投影,按控件、面板、浮层三级加强。外观设置的「视觉效果」可切换为精简,写入根节点 `data-effects="reduced"` 并随布局偏好保存在浏览器;精简模式全局关闭背景模糊,深色浮层改为实色,深浅阴影各退为单层,用于保证低配设备的流畅度。
163
+ 浮层(菜单、预览、消息工具条、抽屉与弹窗)在深色频道使用毛玻璃:半透明上亮下暗渐变底配合 24px 背景模糊与增艳,边缘只用顶部内侧亮线、底部内侧暗线和向下投影,不加外侧白色辉光。浅色频道的控件本体保持不透明白色,只学习材质边界:蓝灰细描边、内侧顶部高光、内侧底部浅蓝灰暗边和蓝灰多层投影,按控件、面板、浮层三级加强。外观设置的「视觉效果」可切换为精简,写入根节点 `data-effects="reduced"` 并随布局偏好保存在浏览器;精简模式全局关闭背景模糊,深色浮层改为实色,深浅阴影各退为单层,用于保证低配设备的流畅度。浅色频道的发言快速导航放在贴合轮次内容的白色轻浮起底板上(控件级描边与阴影),刻度加长到 12px,非发言者半段使用中灰,轮次号与轮次分隔比辅助文字深一级;深色导航不加底板。
164
164
 
165
165
  选中状态用填色、文字和勾选表达,键盘焦点使用中性边缘,不增加蓝色外框;卡片、模型选择、强度滑杆、模式、时长及编辑区遵循同一规则。
166
166
 
167
167
  接入页分别交付本地成员的私有配置文件和不含 token 的参与说明,在线成员只给阅读说明;前端快照仅含成员接入方式与文件可用状态。手动创建、邀请、请回直接请求网站,自动成员才经本机启动器。创建与成员变更在请求前保存原编号和凭据,结果不明时沿用;复制说明不代表已送达或接入。项目、工作目录、讨论上限和错误按需展开。暂停后的本场软件连接修正使用独立卡片,页面不推断本机服务在线状态,选择模式或下载配置不会启动讨论。
168
168
 
169
- 消息区显示议题、原文和主持简报;议题卡的参与配置使用与头像一致的 20px 行高,姓名与主持 / CLI 标签保留字号层级并垂直居中。全自动执行期间,消息流末尾按有效执行显示等待状态:专家复用发言卡片的头像、姓名、轮次与样式,显示“正在唤醒…”或“正在准备回复…”;主持执行使用同宽、更矮、弱化底色和边框的“主持工作”卡,显示头像、姓名及右上角耗时,按交付与进入状态显示“正在唤醒主持人…”或“正在安排下一步…”,不推测内部操作。卡片类型按本次执行职责区分,主持人作为专家回答时仍使用专家等待卡;正式主持发言保留普通消息卡。安排待处理、手动接入、执行过期、暂停或归档不显示等待卡片。卡片不计入消息记录,没有消息编号、回复或引用操作;执行结束后移除,下一位专家实际交付后才显示其等待卡。搜索与提及筛选时隐藏,状态更新仅在用户原本位于底部时跟随滚动。简报收起时以局限在消息列内的底部渐隐阴影区分正文,不向侧栏溢出;展开后由浮层承接投影,避免叠加阴影或推动消息与输入区。已存档频道在独立弹窗管理,不改变当前频道和草稿。存档频道仍可阅读、恢复与导出;批量删除作用于当前搜索和筛选结果,执行前确认。
169
+ 消息区显示议题、原文和主持简报;议题卡的参与配置使用与头像一致的 20px 行高,姓名与主持 / CLI 标签保留字号层级并垂直居中。全自动执行期间,消息流末尾按有效执行显示等待状态:专家复用发言卡片的头像、姓名、轮次与样式,显示“正在唤醒…”或“正在准备回复…”;主持执行使用同宽、更矮、弱化底色和边框的“主持工作”卡,显示头像、姓名及右上角耗时,按交付与进入状态显示“正在唤醒主持人…”或“正在安排下一步…”,不推测内部操作。卡片类型按本次执行职责区分,主持人作为专家回答时仍使用专家等待卡;正式主持发言保留普通消息卡。安排待处理、手动接入、执行过期、暂停或归档不显示等待卡片。卡片不计入消息记录,没有消息编号、回复或引用操作;执行结束后移除,下一位专家实际交付后才显示其等待卡。搜索与提及筛选时隐藏,状态更新仅在用户原本位于底部时跟随滚动。标题栏、窄屏标签栏与主持简报合为同一块顶部面板,简报展开内容留在面板内,与收起状态共用背景、边线与投影,不再另起浮层。消息视图中该面板浮在消息列表之上,使用与深色浮层同款的毛玻璃(半透明渐变底、24px 背景模糊与增艳;浅色为白色半透明),滚动经过的卡片在其下模糊可见;消息列表顶部留白、导航与筛选条下移量、跳转与当前消息判定都按收起时的面板高度计算,展开简报只覆盖消息,不推动消息与输入区。其他视图中面板按普通流式布局排列。精简视觉效果下面板改为实色。已存档频道在独立弹窗管理,不改变当前频道和草稿。存档频道仍可阅读、恢复与导出;批量删除作用于当前搜索和筛选结果,执行前确认。
170
170
 
171
171
  所有发言卡片右上角显示耗时。等待卡片使用同一执行的 `runtime.timings` 唤醒与执行秒数之和,从交付唤醒起累计,不计之前排队;本地每秒更新,服务器计时变化时校准,状态结束或切换房间后停止。正式发言的 `elapsed_seconds` 在保存消息的同一事务内按有效执行凭据与原作者关联计算,保存在 `message_timings`,此后翻页、重试和运行结束均不改变。主持发言同样计到各自保存时刻;不接受客户端提供的耗时。用户留言、手动或代发内容及缺少记录的旧消息显示“耗时 —”。升级仅为有精确 `message:ID` 完成结果与计时记录的历史专家发言回填,不按时间邻近推测关联,不覆盖已有耗时。
172
172
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai_co_discuss",
3
- "version": "0.2.8",
3
+ "version": "0.2.9",
4
4
  "bin": {
5
5
  "codiscuss": "runner/codiscuss.mjs"
6
6
  },
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();
@@ -1724,6 +1742,7 @@ async function save_launch_defaults() {
1724
1742
  }));
1725
1743
  try {
1726
1744
  await local_launch_request("settings", { participants });
1745
+ state.launch.saved_profiles = { ...state.launch.saved_profiles, ...JSON.parse(JSON.stringify(participants)) };
1727
1746
  state.launch.notice = "已保存本机软件配置,后续讨论可复用";
1728
1747
  state.launch.error = "";
1729
1748
  } catch (error) { state.launch.error = error.message; }
@@ -2506,7 +2525,8 @@ function finish_directory_drag(event) {
2506
2525
  /** Bind forms, filters, and explicit read/write actions. */
2507
2526
  function bind_controls() {
2508
2527
  document.addEventListener("input", () => { state.navigation_version++; });
2509
- const actions = { "new-room": () => element("room-dialog").showModal(), "empty-create": () => element("room-dialog").showModal(),
2528
+ const open_create = () => { reset_create_form(); element("room-dialog").showModal(); };
2529
+ const actions = { "new-room": open_create, "empty-create": open_create,
2510
2530
  "close-room-dialog": () => element("room-dialog").close(), "close-message-dialog": () => element("message-dialog").close(),
2511
2531
  "refresh": refresh_room, "cancel-reply": cancel_reply, "go-context": () => select_tab("context"),
2512
2532
  "copy-reading": () => copy_text(`${location.origin}/r/${state.room.id}`),
@@ -2783,7 +2803,7 @@ async function execute_view_action(name, value) {
2783
2803
  choose_runtime, export_runtime, download_member_access, copy_member_join, pause_runtime, check_limits, pause_discussion, restart_discussion, force_close, conclude_discussion,
2784
2804
  save_launch_defaults, launch_current_room, resume_launch, discard_launch, retry_launch_connection: load_launch_settings,
2785
2805
  load_room_configuration, save_room_configuration, interrupt_member, toggle_recipient, change_member, invite_member, interrupt_free, set_proxy, copy_online_notice,
2786
- prepare_brainstorm, return_conclusion, clear_create_parent: () => { state.create_parent = null; },
2806
+ prepare_brainstorm, return_conclusion,
2787
2807
  copy_reading: () => copy_text(`${location.origin}/r/${state.room.id}`), copy: copy_text };
2788
2808
  try {
2789
2809
  await actions[name](value);
@@ -2803,7 +2823,7 @@ function change_view_theme(theme) {
2803
2823
 
2804
2824
  window.discuss_view = { snapshot: view_snapshot, write_field: write_view_field,
2805
2825
  write_launch: write_launch_field, write_room_connection, write_room_adapter, launch_clients: LAUNCH_CLIENTS,
2806
- launch_model_state, load_launch_models, write_launch_model, launch_summary, pick_launch_directory, restore_launch_profile, 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,
2807
2827
  start_drag: start_directory_drag,
2808
2828
  attachment_markup, attachment_size, attachment_file_icon, drop_attachments, paste_attachments,
2809
2829
  write_expert: write_view_expert, add_instance: add_view_instance, platform_of, execute: execute_view_action, theme: change_view_theme,