@aiyiran/myclaw 1.1.177 → 1.1.178

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.
Binary file
@@ -30,7 +30,7 @@
30
30
  var stopping = false; // 正在等待最终识别结果(stopVoice 的 2 秒窗口)
31
31
  var suppressNextClipboardCopy = false;
32
32
 
33
- // ═══ 1. 右下角升级按钮 ═══
33
+ // ═══ 1. 右下角版本入口(打开快捷命令) ═══
34
34
  function createVersionBar() {
35
35
  if (document.querySelector("#myclaw-version-bar")) return;
36
36
 
@@ -56,55 +56,23 @@
56
56
  "border: 1px solid rgba(120, 120, 120, 0.25)",
57
57
  ].join(";");
58
58
  bar.textContent = "🐾 v" + MYCLAW_VERSION;
59
- bar.title = "点击升级 myclaw 到最新版本";
59
+ bar.title = "打开快捷命令";
60
60
 
61
61
  bar.onmouseenter = function () { bar.style.background = "rgba(37, 99, 235, 1)"; bar.style.color = "#fff"; bar.style.transform = "scale(1.05)"; };
62
62
  bar.onmouseleave = function () { bar.style.background = "rgba(59, 130, 246, 0.85)"; bar.style.color = "#fff"; bar.style.transform = "scale(1)"; };
63
63
  bar.onclick = function (e) {
64
64
  e.stopPropagation();
65
- runCommand("mc up");
66
- setTimeout(function () {
67
- window.location.reload();
68
- }, 10000);
65
+ if (commandOpen) {
66
+ closeCommandModal();
67
+ } else {
68
+ openCommandModal();
69
+ }
69
70
  };
70
71
 
71
72
  document.body.appendChild(bar);
72
73
  }
73
74
 
74
- // ═══ 1.1 右下角文档按钮 ═══
75
- function createDocButton() {
76
- if (document.querySelector("#myclaw-doc-btn")) return;
77
-
78
- var btn = document.createElement("div");
79
- btn.id = "myclaw-doc-btn";
80
- btn.style.cssText = [
81
- "position: fixed",
82
- "bottom: 8px",
83
- "right: 260px",
84
- "padding: 2px 8px",
85
- "background: none",
86
- "color: rgba(150, 150, 150, 0.4)",
87
- "font-size: 10px",
88
- "font-family: monospace",
89
- "z-index: 99999",
90
- "user-select: none",
91
- "cursor: pointer",
92
- "transition: color 0.2s",
93
- ].join(";");
94
- btn.textContent = "\uD83D\uDCD6 \u6587\u6863";
95
- btn.title = "\u6253\u5F00\u5E2E\u52A9\u6587\u6863";
96
-
97
- btn.onmouseenter = function () { btn.style.color = "rgba(150, 150, 150, 0.8)"; };
98
- btn.onmouseleave = function () { btn.style.color = "rgba(150, 150, 150, 0.4)"; };
99
- btn.onclick = function (e) {
100
- e.stopPropagation();
101
- window.open("https://www.yiranlaoshi.com/blog-posts/2026-04-08-10-00-00_%E7%AC%AC1%E8%AF%BE%E6%99%BA%E8%83%BD%E4%BD%93%E5%85%A5%E9%97%A8%E9%97%AF%E5%85%B3%E5%8D%A1/index.html", "_blank");
102
- };
103
-
104
- document.body.appendChild(btn);
105
- }
106
-
107
- // ═══ 1.2 右下角 CMD 按钮(弹框 iframe) ═══
75
+ // ═══ 1.1 右下角 CMD 按钮(弹框 iframe) ═══
108
76
  var cmdOpen = false;
109
77
 
110
78
  function createCmdButton() {
@@ -1411,6 +1379,109 @@ btn.addEventListener("click", function () {
1411
1379
  });
1412
1380
  }
1413
1381
 
1382
+ // 弹出命令输入小弹框
1383
+ function promptAndRun(title, placeholder, hint, cmdTemplate, btnColor, defaultValue, allowAnyName) {
1384
+ var mask = document.createElement("div");
1385
+ mask.style.cssText = [
1386
+ "position:fixed",
1387
+ "top:0;left:0;width:100vw;height:100vh",
1388
+ "background:rgba(0,0,0,0.3)",
1389
+ "z-index:999999",
1390
+ "display:flex",
1391
+ "align-items:center",
1392
+ "justify-content:center",
1393
+ "animation:myclaw-fade-in 0.15s ease",
1394
+ ].join(";");
1395
+
1396
+ var box = document.createElement("div");
1397
+ box.style.cssText = [
1398
+ "width:360px",
1399
+ "background:#1e1e2e",
1400
+ "border-radius:8px",
1401
+ "overflow:hidden",
1402
+ "box-shadow:0 8px 32px rgba(0,0,0,0.5)",
1403
+ ].join(";");
1404
+
1405
+ var h = document.createElement("div");
1406
+ h.style.cssText = "padding:10px 14px;background:#2d2d3f;color:#cdd6f4;font-size:13px;display:flex;justify-content:space-between;align-items:center;";
1407
+ h.innerHTML = '<span>' + title + '</span>';
1408
+ var x = document.createElement("span");
1409
+ x.textContent = "\u2715";
1410
+ x.style.cssText = "cursor:pointer;padding:2px 6px;border-radius:3px;transition:background 0.15s;";
1411
+ x.onmouseenter = function () { x.style.background = "rgba(255,255,255,0.1)"; };
1412
+ x.onmouseleave = function () { x.style.background = "none"; };
1413
+ x.onclick = function () { mask.remove(); };
1414
+ h.appendChild(x);
1415
+
1416
+ var body = document.createElement("div");
1417
+ body.style.cssText = "padding:16px;display:flex;flex-direction:column;gap:10px;";
1418
+
1419
+ var desc = document.createElement("div");
1420
+ desc.textContent = hint;
1421
+ desc.style.cssText = "font-size:11px;color:#888;";
1422
+ body.appendChild(desc);
1423
+
1424
+ var input = document.createElement("input");
1425
+ input.type = "text";
1426
+ input.placeholder = placeholder;
1427
+ input.value = defaultValue || '';
1428
+ input.style.cssText = "padding:8px 10px;background:#252536;border:1px solid #3d3d5c;border-radius:4px;color:#cdd6f4;font-size:13px;font-family:monospace;outline:none;";
1429
+ input.onfocus = function () { input.style.borderColor = btnColor; };
1430
+ input.onblur = function () { input.style.borderColor = "#3d3d5c"; };
1431
+ body.appendChild(input);
1432
+
1433
+ var submitBtn = document.createElement("button");
1434
+ submitBtn.textContent = title;
1435
+ submitBtn.style.cssText = "padding:8px 16px;background:" + btnColor + ";border:none;border-radius:4px;color:#fff;font-size:12px;font-family:monospace;cursor:pointer;transition:opacity 0.15s;";
1436
+ submitBtn.onmouseenter = function () { submitBtn.style.opacity = "0.8"; };
1437
+ submitBtn.onmouseleave = function () { submitBtn.style.opacity = "1"; };
1438
+
1439
+ function doSubmit() {
1440
+ var val = input.value.trim();
1441
+ if (!val) {
1442
+ input.style.borderColor = "#ff4444";
1443
+ input.focus();
1444
+ return;
1445
+ }
1446
+ // allowAnyName=true(如「新伙伴」):允许中文,后端 mc new 会自动生成 ascii id 并把中文存为显示名。
1447
+ // 否则(如「添加对话」):仍要求 ascii,因为它需要的是真实 agent id。
1448
+ if (!allowAnyName && !/^[a-zA-Z0-9\-]+$/.test(val)) {
1449
+ input.style.borderColor = "#ff4444";
1450
+ input.focus();
1451
+ return;
1452
+ }
1453
+ submitBtn.disabled = true;
1454
+ submitBtn.textContent = "\u6267\u884C\u4E2D...";
1455
+ var safeName = allowAnyName ? '"' + val.replace(/"/g, '') + '"' : val;
1456
+ var cmd = cmdTemplate.replace("{name}", safeName);
1457
+ runCommand(cmd);
1458
+ setTimeout(function () { mask.remove(); }, 1000);
1459
+ }
1460
+
1461
+ submitBtn.onclick = doSubmit;
1462
+ input.onkeydown = function (e) { if (e.key === "Enter") doSubmit(); };
1463
+ body.appendChild(submitBtn);
1464
+
1465
+ box.appendChild(h);
1466
+ box.appendChild(body);
1467
+ mask.appendChild(box);
1468
+ mask.onclick = function (e) { if (e.target === mask) mask.remove(); };
1469
+ document.body.appendChild(mask);
1470
+ setTimeout(function () { input.focus(); }, 100);
1471
+ }
1472
+
1473
+ function openNewAgentPrompt() {
1474
+ promptAndRun(
1475
+ "\u65B0\u5EFA\u4F19\u4F34",
1476
+ "\u8F93\u5165\u65B0\u4F19\u4F34\u540D\u79F0\uFF0C\u5982 my-cat",
1477
+ "\u7ED9\u4F60\u7684\u65B0 AI \u4F19\u4F34\u8D77\u4E2A\u540D\u5B57\uFF08\u4E2D\u6587 / \u82F1\u6587\u5747\u53EF\uFF09\uFF0C\u70B9\u51FB\u540E\u4F1A\u81EA\u52A8\u521B\u5EFA",
1478
+ "mc new {name}",
1479
+ "#3b82f6",
1480
+ "",
1481
+ true
1482
+ );
1483
+ }
1484
+
1414
1485
  // ═══ 7.5 右下角"新会话"按钮(支持中文命名) ═══
1415
1486
  //
1416
1487
  // 实现思路(复用原生机制,避免重写会话切换逻辑):
@@ -1543,6 +1614,41 @@ btn.addEventListener("click", function () {
1543
1614
  document.body.appendChild(btn);
1544
1615
  }
1545
1616
 
1617
+ function createNewAgentButton() {
1618
+ if (document.querySelector("#myclaw-newagent-btn")) return;
1619
+
1620
+ var btn = document.createElement("div");
1621
+ btn.id = "myclaw-newagent-btn";
1622
+ btn.style.cssText = [
1623
+ "position: fixed",
1624
+ "bottom: 8px",
1625
+ "right: 430px",
1626
+ "padding: 3px 10px",
1627
+ "background: rgba(59, 130, 246, 0.85)",
1628
+ "color: #fff",
1629
+ "font-size: 11px",
1630
+ "font-weight: bold",
1631
+ "font-family: monospace",
1632
+ "border-radius: 4px",
1633
+ "z-index: 99999",
1634
+ "user-select: none",
1635
+ "cursor: pointer",
1636
+ "transition: all 0.2s",
1637
+ "letter-spacing: 0.5px",
1638
+ ].join(";");
1639
+ btn.textContent = "🤝 新伙伴";
1640
+ btn.title = "创建一个新的 AI 伙伴";
1641
+
1642
+ btn.onmouseenter = function () { btn.style.background = "rgba(37, 99, 235, 1)"; btn.style.transform = "scale(1.05)"; };
1643
+ btn.onmouseleave = function () { btn.style.background = "rgba(59, 130, 246, 0.85)"; btn.style.transform = "scale(1)"; };
1644
+ btn.onclick = function (e) {
1645
+ e.stopPropagation();
1646
+ openNewAgentPrompt();
1647
+ };
1648
+
1649
+ document.body.appendChild(btn);
1650
+ }
1651
+
1546
1652
  function closeNewSessionModal() {
1547
1653
  newSessionOpen = false;
1548
1654
  var m = document.querySelector("#myclaw-newsession-modal");
@@ -1616,56 +1722,14 @@ btn.addEventListener("click", function () {
1616
1722
  setTimeout(function () { input.focus(); }, 100);
1617
1723
  }
1618
1724
 
1619
- // ═══ 8. 右下角"命令"按钮 ═══
1725
+ // ═══ 8. 快捷命令弹框 ═══
1620
1726
 
1621
1727
  var commandOpen = false;
1622
1728
 
1623
- function createCommandButton() {
1624
- if (document.querySelector("#myclaw-command-btn")) return;
1625
-
1626
- var btn = document.createElement("div");
1627
- btn.id = "myclaw-command-btn";
1628
- btn.style.cssText = [
1629
- "position: fixed",
1630
- "bottom: 8px",
1631
- "right: 190px",
1632
- "padding: 3px 10px",
1633
- "background: rgba(16, 185, 129, 0.85)",
1634
- "color: #fff",
1635
- "font-size: 11px",
1636
- "font-weight: bold",
1637
- "font-family: monospace",
1638
- "border-radius: 4px",
1639
- "z-index: 99999",
1640
- "user-select: none",
1641
- "cursor: pointer",
1642
- "transition: all 0.2s",
1643
- "letter-spacing: 0.5px",
1644
- ].join(";");
1645
- btn.textContent = "\u2795 \u547D\u4EE4";
1646
- btn.title = "\u5FEB\u6377\u547D\u4EE4";
1647
-
1648
- btn.onmouseenter = function () { btn.style.background = "rgba(5, 150, 105, 1)"; btn.style.transform = "scale(1.05)"; };
1649
- btn.onmouseleave = function () { if (!commandOpen) { btn.style.background = "rgba(16, 185, 129, 0.85)"; } btn.style.transform = "scale(1)"; };
1650
- btn.onclick = function (e) {
1651
- e.stopPropagation();
1652
- if (commandOpen) {
1653
- closeCommandModal();
1654
- } else {
1655
- openCommandModal();
1656
- }
1657
- };
1658
-
1659
- document.body.appendChild(btn);
1660
- }
1661
-
1662
1729
  function openCommandModal() {
1663
1730
  if (document.querySelector("#myclaw-command-modal")) return;
1664
1731
  commandOpen = true;
1665
1732
 
1666
- var btn = document.querySelector("#myclaw-command-btn");
1667
- if (btn) btn.style.background = "rgba(5, 150, 105, 1)";
1668
-
1669
1733
  // 遮罩
1670
1734
  var overlay = document.createElement("div");
1671
1735
  overlay.id = "myclaw-command-modal";
@@ -1735,100 +1799,6 @@ btn.addEventListener("click", function () {
1735
1799
  return '';
1736
1800
  }
1737
1801
 
1738
- // 弹出 input 小弹框
1739
- function promptAndRun(title, placeholder, hint, cmdTemplate, btnColor, defaultValue, allowAnyName) {
1740
- var mask = document.createElement("div");
1741
- mask.style.cssText = [
1742
- "position:fixed",
1743
- "top:0;left:0;width:100vw;height:100vh",
1744
- "background:rgba(0,0,0,0.3)",
1745
- "z-index:999999",
1746
- "display:flex",
1747
- "align-items:center",
1748
- "justify-content:center",
1749
- "animation:myclaw-fade-in 0.15s ease",
1750
- ].join(";");
1751
-
1752
- var box = document.createElement("div");
1753
- box.style.cssText = [
1754
- "width:360px",
1755
- "background:#1e1e2e",
1756
- "border-radius:8px",
1757
- "overflow:hidden",
1758
- "box-shadow:0 8px 32px rgba(0,0,0,0.5)",
1759
- ].join(";");
1760
-
1761
- // 标题
1762
- var h = document.createElement("div");
1763
- h.style.cssText = "padding:10px 14px;background:#2d2d3f;color:#cdd6f4;font-size:13px;display:flex;justify-content:space-between;align-items:center;";
1764
- h.innerHTML = '<span>' + title + '</span>';
1765
- var x = document.createElement("span");
1766
- x.textContent = "\u2715";
1767
- x.style.cssText = "cursor:pointer;padding:2px 6px;border-radius:3px;transition:background 0.15s;";
1768
- x.onmouseenter = function () { x.style.background = "rgba(255,255,255,0.1)"; };
1769
- x.onmouseleave = function () { x.style.background = "none"; };
1770
- x.onclick = function () { mask.remove(); };
1771
- h.appendChild(x);
1772
-
1773
- // body
1774
- var body = document.createElement("div");
1775
- body.style.cssText = "padding:16px;display:flex;flex-direction:column;gap:10px;";
1776
-
1777
- var desc = document.createElement("div");
1778
- desc.textContent = hint;
1779
- desc.style.cssText = "font-size:11px;color:#888;";
1780
- body.appendChild(desc);
1781
-
1782
- var input = document.createElement("input");
1783
- input.type = "text";
1784
- input.placeholder = placeholder;
1785
- input.value = defaultValue || '';
1786
- input.style.cssText = "padding:8px 10px;background:#252536;border:1px solid #3d3d5c;border-radius:4px;color:#cdd6f4;font-size:13px;font-family:monospace;outline:none;";
1787
- input.onfocus = function () { input.style.borderColor = btnColor; };
1788
- input.onblur = function () { input.style.borderColor = "#3d3d5c"; };
1789
- body.appendChild(input);
1790
-
1791
- var submitBtn = document.createElement("button");
1792
- submitBtn.textContent = title;
1793
- submitBtn.style.cssText = "padding:8px 16px;background:" + btnColor + ";border:none;border-radius:4px;color:#fff;font-size:12px;font-family:monospace;cursor:pointer;transition:opacity 0.15s;";
1794
- submitBtn.onmouseenter = function () { submitBtn.style.opacity = "0.8"; };
1795
- submitBtn.onmouseleave = function () { submitBtn.style.opacity = "1"; };
1796
-
1797
- function doSubmit() {
1798
- var val = input.value.trim();
1799
- if (!val) {
1800
- input.style.borderColor = "#ff4444";
1801
- input.focus();
1802
- return;
1803
- }
1804
- // allowAnyName=true\uFF08\u5982\u300C\u65B0\u4F19\u4F34\u300D\uFF09\uFF1A\u5141\u8BB8\u4E2D\u6587\uFF0C\u540E\u7AEF mc new \u4F1A\u81EA\u52A8\u751F\u6210 ascii id \u5E76\u628A\u4E2D\u6587\u5B58\u4E3A\u663E\u793A\u540D\u3002
1805
- // \u5426\u5219\uFF08\u5982\u300C\u6DFB\u52A0\u5BF9\u8BDD\u300D\uFF09\uFF1A\u4ECD\u8981\u6C42 ascii\uFF0C\u56E0\u4E3A\u5B83\u9700\u8981\u7684\u662F\u771F\u5B9E agent id\u3002
1806
- if (!allowAnyName && !/^[a-zA-Z0-9\-]+$/.test(val)) {
1807
- input.style.borderColor = "#ff4444";
1808
- input.focus();
1809
- return;
1810
- }
1811
- submitBtn.disabled = true;
1812
- submitBtn.textContent = "\u6267\u884C\u4E2D...";
1813
- // \u5141\u8BB8\u4EFB\u610F\u540D\u65F6\uFF0Cname \u53EF\u80FD\u542B\u4E2D\u6587/\u7A7A\u683C\uFF0C\u52A0\u53CC\u5F15\u53F7\u9632\u6B62 shell \u62C6\u8BCD
1814
- var safeName = allowAnyName ? '"' + val.replace(/"/g, '') + '"' : val;
1815
- var cmd = cmdTemplate.replace("{name}", safeName);
1816
- runCommand(cmd);
1817
- setTimeout(function () { mask.remove(); }, 1000);
1818
- }
1819
-
1820
- submitBtn.onclick = doSubmit;
1821
- input.onkeydown = function (e) { if (e.key === "Enter") doSubmit(); };
1822
- body.appendChild(submitBtn);
1823
-
1824
- box.appendChild(h);
1825
- box.appendChild(body);
1826
- mask.appendChild(box);
1827
- mask.onclick = function (e) { if (e.target === mask) mask.remove(); };
1828
- document.body.appendChild(mask);
1829
- setTimeout(function () { input.focus(); }, 100);
1830
- }
1831
-
1832
1802
  // ── 按钮列表 ──
1833
1803
  var btns = [
1834
1804
  { label: "\uD83E\uDD1D \u65B0\u4F19\u4F34", desc: "\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684 AI \u4F19\u4F34", hasInput: true, inputTitle: "\u65B0\u5EFA\u4F19\u4F34", placeholder: "\u8F93\u5165\u65B0\u4F19\u4F34\u540D\u79F0\uFF0C\u5982 my-cat", hint: "\u7ED9\u4F60\u7684\u65B0 AI \u4F19\u4F34\u8D77\u4E2A\u540D\u5B57\uFF08\u4E2D\u6587 / \u82F1\u6587\u5747\u53EF\uFF09\uFF0C\u70B9\u51FB\u540E\u4F1A\u81EA\u52A8\u521B\u5EFA", cmd: "mc new {name}", color: "#3b82f6", allowAnyName: true },
@@ -2391,18 +2361,14 @@ btn.addEventListener("click", function () {
2391
2361
  var modal = document.querySelector("#myclaw-command-modal");
2392
2362
  if (modal) modal.remove();
2393
2363
  commandOpen = false;
2394
-
2395
- var btn = document.querySelector("#myclaw-command-btn");
2396
- if (btn) btn.style.background = "rgba(16, 185, 129, 0.85)";
2397
2364
  }
2398
2365
 
2399
2366
  // ═══ 启动 ═══
2400
2367
  function init() {
2401
2368
  createVersionBar();
2402
- createDocButton();
2403
2369
  createCmdButton();
2404
- createCommandButton();
2405
2370
  createNewSessionButton();
2371
+ createNewAgentButton();
2406
2372
  injectStyles();
2407
2373
 
2408
2374
  // 初始化 VoiceInput SDK
package/create_agent.js CHANGED
@@ -85,33 +85,41 @@ function validateAgentId(agentId) {
85
85
  }
86
86
 
87
87
  // ── 中文/非法输入时的兜底 key 生成 ──────────────────────────────
88
- // 格式:MMDD_<三个随机英文单词>_MMSS (北京时间),如 0630_brave-lunar-otter_1207
89
- // 全小写 + 连字符 + 下划线,天然满足 validateAgentId;带日期/分秒 + 随机词,几乎不可能撞名。
90
- const FALLBACK_WORDS = [
91
- 'brave', 'lunar', 'otter', 'maple', 'pixel', 'comet', 'river', 'ember',
92
- 'tiger', 'cloud', 'quartz', 'mango', 'panda', 'fox', 'willow', 'cedar',
93
- 'orbit', 'frost', 'sunny', 'cocoa', 'pearl', 'raven', 'lotus', 'noble',
94
- 'jade', 'amber', 'breeze', 'crisp', 'dawn', 'echo', 'flint', 'glow',
95
- ];
96
-
88
+ // 格式:z{NNN}-{MD},如 z999-73(7月3日第一个)、z998-73(第二个)
89
+ // NNN 999 开始全局倒计,新的 counter 更小 字母升序下排在上面
90
+ // MD 为北京时间月+日(不补零),仅供人类识别,排序靠 NNN
97
91
  function pad2(n) { return String(n).padStart(2, '0'); }
98
92
 
99
- function generateFallbackKey() {
100
- const pick = () => FALLBACK_WORDS[Math.floor(Math.random() * FALLBACK_WORDS.length)];
101
- return pick() + '-' + pick() + '-' + pick();
93
+ function generateFallbackKey(existingIds) {
94
+ const bj = new Date(Date.now() + 8 * 60 * 60 * 1000);
95
+ const MD = String(bj.getUTCMonth() + 1) + String(bj.getUTCDate());
96
+
97
+ const pattern = /^z(\d{3})-/;
98
+ let minCounter = null;
99
+ if (existingIds) {
100
+ for (const id of existingIds) {
101
+ const m = String(id).match(pattern);
102
+ if (m) {
103
+ const n = parseInt(m[1], 10);
104
+ if (minCounter === null || n < minCounter) minCounter = n;
105
+ }
106
+ }
107
+ }
108
+ const counter = minCounter === null ? 999 : minCounter - 1;
109
+ return 'z' + String(counter).padStart(3, '0') + '-' + MD;
102
110
  }
103
111
 
104
112
  // ── 命名决策:判断输入是否「天生满足」key 格式 ───────────────────
105
113
  // 天生满足(标准化后与原输入完全一致)→ 直接用作 id,不另设显示名。
106
114
  // 不满足(含中文/空格/大写等)→ 生成兜底 key,原始输入作为 identity.name(中文显示)。
107
- function resolveAgentNaming(rawName) {
115
+ function resolveAgentNaming(rawName, existingIds) {
108
116
  const trimmed = (rawName == null ? '' : String(rawName)).trim();
109
117
  const normalized = normalizeAgentId(trimmed);
110
118
  const isNative = !!normalized && normalized === trimmed;
111
119
  if (isNative) {
112
120
  return { agentId: normalized, displayName: null, isNative: true };
113
121
  }
114
- return { agentId: generateFallbackKey(), displayName: trimmed, isNative: false };
122
+ return { agentId: generateFallbackKey(existingIds), displayName: trimmed, isNative: false };
115
123
  }
116
124
 
117
125
  /**
package/index.js CHANGED
@@ -349,9 +349,21 @@ function runNew() {
349
349
 
350
350
  function doCreate(input) {
351
351
  const { resolveAgentNaming } = require('./create_agent');
352
+ const fs = require('fs');
353
+ const path = require('path');
354
+ const os = require('os');
355
+ const configPath = path.join(os.homedir(), '.openclaw', 'openclaw.json');
352
356
 
353
- // 命名决策:天生满足 key 格式 → 直接用作 id;否则生成 ascii key + 中文显示名
354
- var naming = resolveAgentNaming(input);
357
+ // 先读配置,获取已有 id(generateFallbackKey 需要计算下一个 counter)
358
+ var existingIds = new Set();
359
+ try {
360
+ var configData = JSON.parse(fs.readFileSync(configPath, 'utf8'));
361
+ var list = (configData.agents && configData.agents.list) || [];
362
+ existingIds = new Set(list.filter(function(a) { return a && a.id; }).map(function(a) { return a.id; }));
363
+ } catch (e) {}
364
+
365
+ // 命名决策:天生满足 key 格式 → 直接用作 id;否则生成 z{NNN}-{MD} + 中文显示名
366
+ var naming = resolveAgentNaming(input, existingIds);
355
367
  var agentId = naming.agentId;
356
368
  var displayName = naming.displayName;
357
369
 
@@ -364,29 +376,19 @@ function runNew() {
364
376
  }
365
377
 
366
378
  // 重名检查(不依赖 createAgent,避免它内部 process.exit)
367
- const fs = require('fs');
368
- const path = require('path');
369
- const os = require('os');
370
- const configPath = path.join(os.homedir(), '.openclaw', 'openclaw.json');
371
- try {
372
- var configData = JSON.parse(fs.readFileSync(configPath, 'utf8'));
373
- var list = (configData.agents && configData.agents.list) || [];
374
- if (list.some(function (a) { return a && a.id === agentId; })) {
375
- if (naming.isNative) {
376
- // 用户直接输入的 ascii 名撞了 → 友好提示并重试
377
- console.log(R + 'Agent "' + agentId + '" 已存在,请换一个名字。' + NC);
378
- console.log('');
379
- if (rawName) { process.exit(1); return; }
380
- askName();
381
- return;
382
- }
383
- // 生成的兜底 key 撞名(极罕见)→ 重新生成一次
384
- naming = resolveAgentNaming(input);
385
- agentId = naming.agentId;
386
- displayName = naming.displayName;
379
+ if (existingIds.has(agentId)) {
380
+ if (naming.isNative) {
381
+ // 用户直接输入的 ascii 名撞了 → 友好提示并重试
382
+ console.log(R + 'Agent "' + agentId + '" 已存在,请换一个名字。' + NC);
383
+ console.log('');
384
+ if (rawName) { process.exit(1); return; }
385
+ askName();
386
+ return;
387
387
  }
388
- } catch (e) {
389
- // 配置文件读不到就算了,交给 createAgent 处理
388
+ // 生成的 counter key 不应撞名(counter 已基于现有 id 计算),保险提示
389
+ console.log(R + '生成 ID 冲突,请重试。' + NC);
390
+ process.exit(1);
391
+ return;
390
392
  }
391
393
 
392
394
  // 校验通过,开始创建
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiyiran/myclaw",
3
- "version": "1.1.177",
3
+ "version": "1.1.178",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -0,0 +1,392 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>OpenClaw AI创作课设备测试</title>
7
+ <style>
8
+ * {
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ body {
13
+ margin: 0;
14
+ min-height: 100vh;
15
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
16
+ background: #f5f7ff;
17
+ color: #1f2937;
18
+ padding: 18px;
19
+ }
20
+
21
+ .card {
22
+ max-width: 520px;
23
+ margin: 0 auto;
24
+ background: #ffffff;
25
+ border-radius: 24px;
26
+ padding: 26px 22px;
27
+ box-shadow: 0 14px 36px rgba(31, 41, 55, 0.10);
28
+ }
29
+
30
+ h1 {
31
+ margin: 0 0 8px;
32
+ text-align: center;
33
+ font-size: 30px;
34
+ line-height: 1.2;
35
+ }
36
+
37
+ .sub {
38
+ margin: 0 0 24px;
39
+ text-align: center;
40
+ color: #6b7280;
41
+ font-size: 16px;
42
+ line-height: 1.6;
43
+ }
44
+
45
+ .field {
46
+ margin-top: 18px;
47
+ }
48
+
49
+ label {
50
+ display: block;
51
+ margin-bottom: 8px;
52
+ font-size: 18px;
53
+ font-weight: 800;
54
+ }
55
+
56
+ input, select, textarea {
57
+ width: 100%;
58
+ border: 2px solid #e5e7eb;
59
+ border-radius: 16px;
60
+ padding: 14px;
61
+ font-size: 18px;
62
+ outline: none;
63
+ background: #fff;
64
+ }
65
+
66
+ input:focus, select:focus, textarea:focus {
67
+ border-color: #2563eb;
68
+ box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.12);
69
+ }
70
+
71
+ textarea {
72
+ min-height: 120px;
73
+ line-height: 1.7;
74
+ resize: vertical;
75
+ }
76
+
77
+ textarea.voice-active {
78
+ border-color: #ef4444;
79
+ box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.12);
80
+ }
81
+
82
+ .sentence {
83
+ margin-top: 10px;
84
+ padding: 16px;
85
+ border-radius: 18px;
86
+ background: #fff7df;
87
+ color: #7c4a00;
88
+ font-size: 19px;
89
+ font-weight: 800;
90
+ line-height: 1.8;
91
+ }
92
+
93
+ button {
94
+ width: 100%;
95
+ border: none;
96
+ border-radius: 18px;
97
+ padding: 16px;
98
+ font-size: 18px;
99
+ font-weight: 900;
100
+ cursor: pointer;
101
+ }
102
+
103
+ #speakBtn {
104
+ margin-top: 14px;
105
+ background: #111827;
106
+ color: white;
107
+ transition: background 0.15s;
108
+ }
109
+
110
+ #speakBtn:disabled {
111
+ background: #6b7280;
112
+ cursor: not-allowed;
113
+ }
114
+
115
+ #submitBtn {
116
+ margin-top: 20px;
117
+ background: #2563eb;
118
+ color: white;
119
+ }
120
+
121
+ #clearBtn {
122
+ margin-top: 10px;
123
+ background: #f3f4f6;
124
+ color: #374151;
125
+ border: 1px solid #e5e7eb;
126
+ }
127
+
128
+ .status {
129
+ margin-top: 10px;
130
+ min-height: 24px;
131
+ color: #6b7280;
132
+ font-size: 15px;
133
+ line-height: 1.5;
134
+ }
135
+
136
+ .ok {
137
+ color: #047857;
138
+ font-weight: 700;
139
+ }
140
+
141
+ .error {
142
+ color: #dc2626;
143
+ font-weight: 700;
144
+ }
145
+
146
+ .listening {
147
+ color: #2563eb;
148
+ font-weight: 800;
149
+ }
150
+
151
+ .success {
152
+ display: none;
153
+ margin-top: 20px;
154
+ padding: 16px;
155
+ border-radius: 18px;
156
+ background: #ecfdf5;
157
+ color: #047857;
158
+ font-size: 18px;
159
+ font-weight: 800;
160
+ line-height: 1.6;
161
+ text-align: center;
162
+ }
163
+
164
+
165
+ .mic-guide {
166
+ margin-top: 14px;
167
+ }
168
+ .mic-guide-tip {
169
+ margin: 0 0 4px;
170
+ font-size: 14px;
171
+ color: #6b7280;
172
+ }
173
+
174
+ @media (max-width: 520px) {
175
+ body {
176
+ padding: 12px;
177
+ }
178
+
179
+ .card {
180
+ padding: 24px 18px;
181
+ }
182
+
183
+ h1 {
184
+ font-size: 28px;
185
+ }
186
+ }
187
+ </style>
188
+ </head>
189
+ <body>
190
+ <main class="card">
191
+ <h1>OpenClaw AI创作课</h1>
192
+ <p class="sub">检测麦克风与语音识别(不用在意准确率)</p>
193
+
194
+ <div class="field">
195
+ <label for="name">1. 你的名字</label>
196
+ <input id="name" placeholder="请输入名字" />
197
+ </div>
198
+
199
+ <div class="field">
200
+ <label for="grade">2. 你的年级</label>
201
+ <select id="grade">
202
+ <option value="">请选择年级</option>
203
+ <option>一年级</option>
204
+ <option>二年级</option>
205
+ <option>三年级</option>
206
+ <option>四年级</option>
207
+ <option>五年级</option>
208
+ <option>六年级</option>
209
+ <option>初一</option>
210
+ </select>
211
+ </div>
212
+
213
+ <div class="field">
214
+ <label>3. 麦克风测试</label>
215
+ <div class="sentence">我喜欢 ______ ,我希望今天可以做一个和它有关的小作品。</div>
216
+ <button id="speakBtn" type="button">🎤 点击说话</button>
217
+ <div id="voiceResult" style="display:none;margin-top:12px;padding:14px;background:#f0fdf4;border:2px solid #86efac;border-radius:16px;font-size:17px;line-height:1.7;color:#166534;word-break:break-all;"></div>
218
+ <div class="mic-guide">
219
+ <p class="mic-guide-tip">👆 如果弹出授权窗口,点「允许」即可</p>
220
+ <img src="data:image/png;base64,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" alt="麦克风授权示意" style="width:100%;border-radius:12px;margin-top:8px;" />
221
+ </div>
222
+ <div id="status" class="status">不用等待完整句子,任何识别内容都可以提交完成测试。</div>
223
+ </div>
224
+
225
+
226
+ <button id="submitBtn" type="button">提交</button>
227
+
228
+ <div id="success" class="success">收到啦!可以等待上课了。</div>
229
+ </main>
230
+
231
+ <script src="./voice-input/voice-input.js"></script>
232
+ <script>
233
+ const $ = (id) => document.getElementById(id);
234
+
235
+ const nameEl = $("name");
236
+ const gradeEl = $("grade");
237
+ const speakBtn = $("speakBtn");
238
+ const submitBtn = $("submitBtn");
239
+ const statusEl = $("status");
240
+ const successEl = $("success");
241
+ const voiceResult = $("voiceResult");
242
+
243
+ const STORAGE_KEY = "ai_trial_precheck_records";
244
+
245
+ function setStatus(text, type) {
246
+ statusEl.textContent = text;
247
+ statusEl.className = "status" + (type ? " " + type : "");
248
+ }
249
+
250
+ function getRecords() {
251
+ try { return JSON.parse(localStorage.getItem(STORAGE_KEY) || "[]"); }
252
+ catch { return []; }
253
+ }
254
+
255
+ function saveRecord(record) {
256
+ const records = getRecords();
257
+ records.push(record);
258
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(records));
259
+ }
260
+
261
+ // ── 讯飞语音输入 ──────────────────────────────────────────────
262
+ if (typeof window.VoiceInput === "undefined") {
263
+ setStatus("语音不可用,请直接打字。", "error");
264
+ speakBtn.disabled = true;
265
+ } else {
266
+ var voice = null;
267
+ var recording = false;
268
+ var stopping = false;
269
+ var committedText = "";
270
+ var stopTimer = null;
271
+
272
+ function initVoice() {
273
+ voice = new window.VoiceInput({
274
+ onResult: function (text) {
275
+ if (!recording && !stopping) return;
276
+ var txt = committedText + text;
277
+ voiceResult.textContent = txt;
278
+ voiceResult.style.display = txt ? 'block' : 'none';
279
+ },
280
+ onStatusChange: function (oldStatus, newStatus) {
281
+ if (newStatus === "recording") {
282
+ setStatus("正在听,请开始说。", "listening");
283
+ }
284
+ // 讯飞 60s 超时自动重连
285
+ if (newStatus === "idle" && recording && !stopping) {
286
+ committedText = voiceResult.textContent || '';
287
+ setTimeout(function () {
288
+ if (recording && voice) voice.start();
289
+ }, 300);
290
+ }
291
+ },
292
+ onError: function (err) {
293
+ var msg = String(err).toLowerCase();
294
+ var isPerm = msg.indexOf("permission") !== -1 || msg.indexOf("not allowed") !== -1;
295
+ if (isPerm) {
296
+ setStatus("麦克风权限被拒绝,请允许后刷新重试。", "error");
297
+ recording = false;
298
+ stopping = false;
299
+ updateBtn();
300
+ return;
301
+ }
302
+ if (recording) {
303
+ setTimeout(function () {
304
+ if (recording && voice) voice.start();
305
+ }, 1000);
306
+ }
307
+ },
308
+ });
309
+ }
310
+
311
+ function updateBtn() {
312
+ if (recording) {
313
+ speakBtn.textContent = "⏹ 点击停止";
314
+ speakBtn.disabled = false;
315
+
316
+ } else if (stopping) {
317
+ speakBtn.textContent = "⏳ 处理中…";
318
+ speakBtn.disabled = true;
319
+
320
+ } else {
321
+ speakBtn.textContent = "🎤 点击说话";
322
+ speakBtn.disabled = false;
323
+
324
+ }
325
+ }
326
+
327
+ function startVoice() {
328
+ if (!voice) initVoice();
329
+ committedText = voiceResult.textContent || '';
330
+ recording = true;
331
+ stopping = false;
332
+ updateBtn();
333
+ setStatus("连接中…", "listening");
334
+ voice.start();
335
+ }
336
+
337
+ function stopVoice() {
338
+ if (!recording) return;
339
+ recording = false;
340
+ stopping = true;
341
+ updateBtn();
342
+ setStatus("处理剩余音频(约 2 秒)…");
343
+ if (stopTimer) clearTimeout(stopTimer);
344
+ stopTimer = setTimeout(function () {
345
+ stopTimer = null;
346
+ stopping = false;
347
+ committedText = voiceResult.textContent || '';
348
+ if (voice) voice.stop();
349
+ updateBtn();
350
+ setStatus("完成,可以改一下文字。", "ok");
351
+ }, 2000);
352
+ }
353
+
354
+ speakBtn.addEventListener("click", function () {
355
+ if (recording) {
356
+ stopVoice();
357
+ } else {
358
+ successEl.style.display = "none";
359
+ startVoice();
360
+ }
361
+ });
362
+ }
363
+
364
+ // ── 提交 ──────────────────────────────────────────────────────
365
+ submitBtn.addEventListener("click", function () {
366
+ const name = nameEl.value.trim();
367
+ const grade = gradeEl.value;
368
+
369
+ if (!name) { alert("请填写名字。"); nameEl.focus(); return; }
370
+ if (!grade) { alert("请选择年级。"); gradeEl.focus(); return; }
371
+
372
+ const voiceText = voiceResult ? (voiceResult.textContent || '') : '';
373
+ saveRecord({ name, grade, voiceText, createdAt: new Date().toISOString() });
374
+
375
+ successEl.style.display = "block";
376
+ setStatus("提交成功。", "ok");
377
+ submitBtn.textContent = "已提交";
378
+ });
379
+
380
+ // ── 重置 ──────────────────────────────────────────────────────
381
+ clearBtn.addEventListener("click", function () {
382
+ nameEl.value = "";
383
+ gradeEl.value = "";
384
+ ideaEl.value = "";
385
+ successEl.style.display = "none";
386
+ submitBtn.textContent = "提交";
387
+ setStatus("也可以直接打字。");
388
+ nameEl.focus();
389
+ });
390
+ </script>
391
+ </body>
392
+ </html>