@wendongfly/myhi 1.3.201 → 1.3.202

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/dist/admin.html CHANGED
@@ -473,18 +473,20 @@ async function refresh() {
473
473
  } catch {}
474
474
  }
475
475
 
476
- // 使用模式:有成员 = 多用户,没有 = 单用户(默认)
476
+ // 使用模式:0~1 个登录账号 = 单用户(那个账号就是主人,全部权限);≥2 个 = 多用户(账号变成成员,权限受限)
477
477
  let _users = [];
478
478
  function renderUsers(users, exclusive) {
479
479
  _users = users;
480
- const multi = users.length > 0;
480
+ const multi = users.length >= 2;
481
481
  document.getElementById('mode-status').innerHTML = multi
482
482
  ? `<b>当前:多用户模式 · ${users.length} 个成员</b><small>成员用各自密码登录,可以升级 / 重启,不能改全局设置;你用管理密码或二维码登录,权限不变。</small>`
483
+ : users.length === 1
484
+ ? `<b>当前:单用户模式 · 登录账号「${esc(users[0].name)}」</b><small>只有一个账号时它就是主人,用自己的密码登录、所有功能都能用,不需要来这里管理。再添加一个成员才进入多用户模式。</small>`
483
485
  : `<b>当前:单用户模式</b><small>只有你在用,所有功能都能用。需要给别人用时再添加成员。</small>`;
484
- document.getElementById('add-open').textContent = multi ? '+ 添加成员' : '+ 添加成员,开启多用户模式';
486
+ document.getElementById('add-open').textContent = multi ? '+ 添加成员' : users.length === 1 ? '+ 添加成员,开启多用户模式' : '+ 添加登录账号';
485
487
  document.getElementById('excl-row').style.display = multi ? '' : 'none';
486
488
  document.getElementById('excl-toggle').checked = !!exclusive;
487
- document.getElementById('mode-foot').textContent = multi ? '删除全部成员即回到单用户模式。删除成员或重置密码后,他当前的登录会立即失效。' : '';
489
+ document.getElementById('mode-foot').textContent = multi ? '删到只剩一个账号即回到单用户模式(剩下的那个拥有全部权限)。删除成员或重置密码后,他当前的登录会立即失效。' : '';
488
490
  const el = document.getElementById('user-list');
489
491
  el.innerHTML = users.map(u => `
490
492
  <div class="row">
@@ -545,13 +547,13 @@ async function addUser() {
545
547
  const dir = document.getElementById('u-dir').value.trim();
546
548
  const msg = document.getElementById('u-msg');
547
549
  if (!name || !pwd) { msg.className = 'msg msg-err'; msg.textContent = '成员名称和登录密码必填'; return; }
548
- // 第一个成员 = 从单用户切到多用户:先讲清楚会发生什么
549
- if (!_users.length && !confirm(
550
- '添加第一个成员后,myhi 进入「多用户模式」:\n\n' +
551
- '· 成员用各自的密码登录' + (dir ? ',只能在绑定的目录里建任务' : '') + ';\n' +
550
+ // 第二个账号 = 从单用户切到多用户:先讲清楚会发生什么(尤其原来那个账号会降为成员)
551
+ if (_users.length === 1 && !confirm(
552
+ '添加后共 2 个账号,myhi 进入「多用户模式」:\n\n' +
553
+ `· 原来的账号「${_users[0].name}」和新成员都变成「成员」,各用自己的密码登录` + (dir ? ',新成员只能在绑定的目录里建任务' : '') + ';\n' +
552
554
  '· 成员可以升级、重启,但不能改全局设置(本机显示名、语音、用户、网关等);\n' +
553
555
  '· 你(管理员)照常用管理密码或二维码登录,权限不变。\n\n' +
554
- '以后删除全部成员即回到单用户模式。确定添加?')) return;
556
+ '以后删到只剩一个账号即回到单用户模式。确定添加?')) return;
555
557
  try {
556
558
  const r = await fetch('/api/admin/user', { method: 'POST', headers: H(), body: JSON.stringify({ password: pwd, name, dir }) });
557
559
  const d = await r.json();
@@ -575,7 +577,7 @@ async function editUserPwd(name) {
575
577
  }
576
578
 
577
579
  async function delUser(name) {
578
- if (!confirm(`确定删除成员「${name}」?他当前的登录会立即失效。` + (_users.length === 1 ? '\n\n这是最后一个成员,删除后回到单用户模式。' : ''))) return;
580
+ if (!confirm(`确定删除「${name}」?他当前的登录会立即失效。` + (_users.length === 2 ? `\n\n删除后只剩「${_users.find(u => u.name !== name)?.name}」一个账号,回到单用户模式,它将拥有全部权限。` : _users.length === 1 ? '\n\n这是最后一个登录账号,删除后只能用管理密码登录。' : ''))) return;
579
581
  try {
580
582
  const r = await fetch('/api/admin/user', { method: 'DELETE', headers: H(), body: JSON.stringify({ name }) });
581
583
  const d = await r.json();
package/dist/index.html CHANGED
@@ -857,7 +857,7 @@
857
857
  </div>
858
858
  <ol class="hs-steps">
859
859
  <li><span class="hs-num">1</span><div><b>建一个任务</b><p>点右下角 <kbd>+</kbd>,选「默认」预设、起个名字,点创建。</p></div></li>
860
- <li><span class="hs-num">2</span><div><b>像发微信一样说需求</b><p>进入任务就是对话界面,AI 会自己读文件、改代码、跑命令。</p></div></li>
860
+ <li><span class="hs-num">2</span><div><b>像发微信一样说需求</b><p>进入任务就是对话界面,说出你的需求,AI 会理解您说的话,自己读文件、写文件、执行命令。</p></div></li>
861
861
  <li><span class="hs-num">3</span><div><b>用 <kbd>@</kbd> 引用文件</b><p>消息里打 @ 弹出文件搜索,选中即插入路径,不用手打文件名。</p></div></li>
862
862
  </ol>
863
863
  <div class="hs-label">常用功能</div>
@@ -1112,13 +1112,14 @@
1112
1112
  // 成员用户(users.json 登录)才显示自助改密入口;管理员改密码在 /admin
1113
1113
  // 改全局配置只给管理员(后端同样拦):成员的「服务」组没有管理后台入口,本机显示名与语音只读
1114
1114
  _isAdmin = (data.role || 'admin') === 'admin';
1115
- document.getElementById('set-mode').innerHTML = !data.hasUsers ? '👤 单用户模式 · 所有功能都可用'
1115
+ // 0~1 个登录账号是单用户(hibox 默认建的那个账号就是主人),≥2 个才是多用户
1116
+ document.getElementById('set-mode').innerHTML = !data.multiUser ? '👤 单用户模式 · 所有功能都可用'
1116
1117
  : _isAdmin ? '👥 多用户模式 · 你是管理员 · <a href="/admin#mode">管理成员 →</a>'
1117
1118
  : `👥 多用户模式 · 你是成员「${esc(data.name || '')}」· 本机显示名、语音等全局设置需管理员修改`;
1118
1119
  if (!_isAdmin) document.querySelectorAll('#set-svc .admin-only').forEach(el => el.remove());
1119
1120
  checkAiEngine();
1120
1121
  checkHomeVersion();
1121
- if (data.hasUsers && data.role === 'operator') { document.getElementById('passwd-btn').style.display = ''; document.getElementById('ws-menu-pw').style.display = ''; }
1122
+ if (data.hasUsers && data.member) { document.getElementById('passwd-btn').style.display = ''; document.getElementById('ws-menu-pw').style.display = ''; }
1122
1123
  // 单用户模式没有「登录账号」可退:⚙ 菜单不显示账户段
1123
1124
  if (!(data.exclusive || data.hasUsers)) document.getElementById('ws-menu-acct').style.display = 'none';
1124
1125
  if (data.dir) {