@modelzen/feishu-codex-bridge 0.3.12-test.1 → 0.3.12-test.2

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.
Files changed (2) hide show
  1. package/dist/cli.js +59 -71
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -11889,6 +11889,7 @@ function createAdminService(deps = {}) {
11889
11889
  return readRecentLogs({ maxBytes: opts?.maxBytes ?? 64 * 1024 });
11890
11890
  },
11891
11891
  registerBot(input2) {
11892
+ if (deps.readonlyPreview) throw new NotWiredYetError("\u2795 \u6DFB\u52A0\u673A\u5668\u4EBA");
11892
11893
  return registerBotFromCredentials({
11893
11894
  appId: input2.appId,
11894
11895
  appSecret: input2.appSecret,
@@ -11957,6 +11958,7 @@ function createAdminService(deps = {}) {
11957
11958
  };
11958
11959
  },
11959
11960
  async registerBotByQr(opts) {
11961
+ if (deps.readonlyPreview) throw new NotWiredYetError("\u2795 \u6DFB\u52A0\u673A\u5668\u4EBA");
11960
11962
  let creds;
11961
11963
  try {
11962
11964
  creds = await startRegistration({ signal: opts.signal, onQr: opts.onQr, onStatus: opts.onStatus });
@@ -12186,7 +12188,7 @@ async function probeAllBackends() {
12186
12188
  );
12187
12189
  }
12188
12190
  function createReadonlyAdminService(deps = {}) {
12189
- return createAdminService({ startDaemon: deps.startDaemon });
12191
+ return createAdminService({ startDaemon: deps.startDaemon, applyUpdate: deps.applyUpdate, readonlyPreview: true });
12190
12192
  }
12191
12193
  function isAlive(pid) {
12192
12194
  try {
@@ -13400,7 +13402,7 @@ ${UI_PURE_JS}
13400
13402
  bots.forEach(function (b) {
13401
13403
  nav.appendChild(navItem({ icon: 'bot', label: botTitle(b), on: r.tab === 'bot' && r.botId === b.appId, dot: !!b.running, onClick: function () { go({ tab: 'bot', botId: b.appId }); } }));
13402
13404
  });
13403
- nav.appendChild(navItem({ icon: 'add', label: '\u6DFB\u52A0\u673A\u5668\u4EBA', add: true, onClick: function () { openWizard(); } }));
13405
+ nav.appendChild(navItem({ icon: 'add', label: '\u6DFB\u52A0\u673A\u5668\u4EBA', add: true, onClick: function () { tryAddBot(); } }));
13404
13406
  nav.appendChild(el('div', 'nav-sec', '\u914D\u7F6E'));
13405
13407
  nav.appendChild(navItem({ icon: 'backend', label: '\u540E\u7AEF Agent', on: r.tab === 'backends', onClick: function () { go({ tab: 'backends' }); } }));
13406
13408
  nav.appendChild(navItem({ icon: 'doctor', label: '\u5BBF\u4E3B\u673A\u4F53\u68C0', on: r.tab === 'doctor', onClick: function () { go({ tab: 'doctor' }); } }));
@@ -13428,7 +13430,7 @@ ${UI_PURE_JS}
13428
13430
  act.textContent = '';
13429
13431
  if (r.tab === 'overview' || r.tab === 'bot') {
13430
13432
  var add = el('button', 'btn primary sm', '\u2795 \u6DFB\u52A0\u673A\u5668\u4EBA');
13431
- add.onclick = function () { openWizard(); };
13433
+ add.onclick = function () { tryAddBot(); };
13432
13434
  act.appendChild(add);
13433
13435
  }
13434
13436
  }
@@ -13502,7 +13504,7 @@ ${UI_PURE_JS}
13502
13504
  hero.appendChild(el('div', 'home-sub', '\u628A\u98DE\u4E66\u63A5\u5230\u672C\u673A\u7684 Codex / Claude \u2014\u2014 \u4E00\u4E2A\u7FA4\u4E00\u4E2A\u9879\u76EE\uFF0C@\u4E00\u53E5\u8BDD\u5C31\u5F00\u5E72\u3002\u591A\u673A\u5668\u4EBA\u3001\u591A\u540E\u7AEF\uFF0C\u5168\u7A0B\u8DD1\u5728\u4F60\u8FD9\u53F0\u673A\u5668\u4E0A\uFF0C\u79C1\u6709\u53EF\u63A7\u3002'));
13503
13505
  var ctaRow = el('div', 'home-cta-row');
13504
13506
  var primary = el('button', 'btn primary home-cta', hasBots ? '\u8FDB\u5165\u63A7\u5236\u53F0' : '\u2795 \u626B\u7801\u521B\u5EFA\u7B2C\u4E00\u4E2A\u673A\u5668\u4EBA');
13505
- primary.onclick = function () { if (hasBots) go({ tab: 'overview' }); else openWizard(); };
13507
+ primary.onclick = function () { if (hasBots) go({ tab: 'overview' }); else tryAddBot(); };
13506
13508
  ctaRow.appendChild(primary);
13507
13509
  if (hasBots) {
13508
13510
  var sec = el('button', 'btn home-cta', '\u540E\u7AEF\u7BA1\u7406');
@@ -13953,6 +13955,10 @@ ${UI_PURE_JS}
13953
13955
  } else {
13954
13956
  var pb = el('button', 'btn sm primary', '\u25B6\uFE0F \u542F\u52A8'); pb.onclick = askStart; acts.appendChild(pb);
13955
13957
  }
13958
+ // \u68C0\u67E5\u66F4\u65B0\u5165\u53E3\uFF1A\u59CB\u7EC8\u5728\uFF08\u4E0D\u7BA1\u8DD1\u6CA1\u8DD1\uFF09\u3002\u6CA1\u542F\u52A8\u65F6\u80FD\u505A\u7684\u5C31\u662F\u300C\u542F\u52A8\u300D+\u300C\u66F4\u65B0\u300D\u3002
13959
+ var ub = el('button', 'btn sm', '\u{1F504} \u68C0\u67E5\u66F4\u65B0'); ub.style.marginLeft = '6px';
13960
+ ub.onclick = function () { var bx = $('updateBody'); if (bx) { bx.textContent = '\u7248\u672C\u68C0\u67E5\u4E2D\u2026'; loadUpdate(bx); } toast('\u{1F504} \u6B63\u5728\u68C0\u67E5\u66F4\u65B0\u2026'); };
13961
+ acts.appendChild(ub);
13956
13962
  }
13957
13963
  var line = el('div', 'statline');
13958
13964
  if (d.running) line.appendChild(el('span', 'tag green', '\u2705 \u8FD0\u884C\u4E2D' + (d.pid ? ' \xB7 pid ' + d.pid : '')));
@@ -14066,7 +14072,7 @@ ${UI_PURE_JS}
14066
14072
  hero.appendChild(el('div', 'fr-title', '\u6B22\u8FCE\uFF01\u8FD8\u5DEE\u6700\u540E\u4E00\u6B65\uFF1A\u521B\u5EFA\u4F60\u7684\u7B2C\u4E00\u4E2A\u98DE\u4E66\u673A\u5668\u4EBA'));
14067
14073
  hero.appendChild(el('div', 'fr-sub', '\u70B9\u4E0B\u9762\u7684\u6309\u94AE\uFF0C\u7528\u98DE\u4E66\u626B\u7801\u5373\u53EF\u521B\u5EFA\u5E76\u6388\u6743\u2014\u2014\u5168\u7A0B\u5728\u8FD9\u4E2A\u7F51\u9875\u91CC\u5B8C\u6210\uFF0C\u4E0D\u7528\u78B0\u7EC8\u7AEF\u3002'));
14068
14074
  var cta = el('button', 'btn primary fr-cta', '\u2795 \u626B\u7801\u521B\u5EFA\u7B2C\u4E00\u4E2A\u673A\u5668\u4EBA');
14069
- cta.onclick = function () { openWizard(); };
14075
+ cta.onclick = function () { tryAddBot(); };
14070
14076
  hero.appendChild(cta);
14071
14077
  box.appendChild(hero);
14072
14078
  if (countEl) countEl.textContent = '';
@@ -14579,6 +14585,21 @@ ${UI_PURE_JS}
14579
14585
  var wizAutoEnabled = false; // \u65B0 bot \u662F\u5426\u5DF2\u81EA\u52A8\u52A0\u5165\u6D3B\u8DC3\u96C6\uFF08\u4E00\u6B21\u6027\uFF09
14580
14586
  var wizRestartPrompted = false; // \u5B8C\u6210\u6B65\u662F\u5426\u5DF2\u5F39\u8FC7\u300C\u91CD\u542F\u62C9\u8D77\u300D\u786E\u8BA4\uFF08\u4E00\u6B21\u6027\uFF09
14581
14587
 
14588
+ // \u6DFB\u52A0\u673A\u5668\u4EBA\u662F\u5199\u64CD\u4F5C\uFF1AFeishu Bridge \u6CA1\u5728\u8DD1\u65F6\u63A7\u5236\u53F0\u4E3A\u53EA\u8BFB\uFF0C\u4E0D\u80FD\u52A0\uFF08\u4E0E\u300C\u6CA1\u542F\u52A8\u53EA\u8BFB\u300D\u4E00\u81F4\uFF09\u3002
14589
+ // \u6CA1\u5728\u8DD1\u5C31\u5F15\u5BFC\u5148\u542F\u52A8\uFF0C\u800C\u4E0D\u662F\u6253\u5F00\u5411\u5BFC\u8BA9\u7528\u6237\u767D\u586B\u4E00\u901A\u518D\u88AB 501 \u6321\u56DE\u3002
14590
+ function tryAddBot() {
14591
+ if (daemon && daemon.running) { openWizard(); return; }
14592
+ confirmDialog({
14593
+ title: '\u9700\u8981\u5148\u542F\u52A8 Feishu Bridge',
14594
+ lines: [
14595
+ 'Feishu Bridge \u672A\u5728\u8FD0\u884C\u65F6\u63A7\u5236\u53F0\u4E3A\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u6DFB\u52A0\u673A\u5668\u4EBA\u3002',
14596
+ '\u5148\u542F\u52A8 Feishu Bridge\uFF0C\u518D\u56DE\u6765\u6DFB\u52A0\u3002',
14597
+ ],
14598
+ confirmLabel: '\u7ACB\u5373\u542F\u52A8',
14599
+ onConfirm: function () { postAction('/api/daemon/start', '\u542F\u52A8'); },
14600
+ });
14601
+ }
14602
+
14582
14603
  function openWizard() {
14583
14604
  wizStep = 1; wizBotId = null; wizSetup = null; wizManualOpen = false;
14584
14605
  wizAutoEnabled = false; wizRestartPrompted = false;
@@ -14631,6 +14652,11 @@ ${UI_PURE_JS}
14631
14652
  qrWrap.appendChild(el('div', 'note', '\u6B63\u5728\u751F\u6210\u4E8C\u7EF4\u7801\u2026'));
14632
14653
  w.appendChild(qrWrap);
14633
14654
 
14655
+ var steps = el('div', 'note');
14656
+ steps.style.cssText = 'margin-top:6px;line-height:1.7';
14657
+ steps.textContent = '\u2460 \u7528\u98DE\u4E66 App \u626B\u7801 \u2192 \u2461 \u5728\u98DE\u4E66\u91CC\u70B9\u300C\u521B\u5EFA\u5E76\u6388\u6743\u300D \u2192 \u2462 \u56DE\u5230\u672C\u9875\uFF08\u65E0\u9700\u624B\u52A8\u5237\u65B0\uFF09\uFF0C\u521B\u5EFA\u6210\u529F\u4F1A\u81EA\u52A8\u8FDB\u5165\u7B2C\u2461\u6B65\u300C\u63A5\u5165\u68C0\u6D4B\u300D\u3002';
14658
+ w.appendChild(steps);
14659
+
14634
14660
  var statusLine = el('div', 'note'); statusLine.id = 'wizScanStatus';
14635
14661
  statusLine.style.textAlign = 'center';
14636
14662
  w.appendChild(statusLine);
@@ -14862,16 +14888,8 @@ ${UI_PURE_JS}
14862
14888
  w.appendChild(checkItem('\u26A0\uFE0F', '\u7F3A ' + miss.length + ' \u9879\u5FC5\u9700\u6743\u9650', miss.join('\u3001'), grant));
14863
14889
  }
14864
14890
  }
14865
- var conn = s.connection || {};
14866
- if (conn.running && conn.connection === 'connected') {
14867
- w.appendChild(checkItem('\u2705', '\u957F\u8FDE\u63A5\u5728\u7EBF', 'bridge \u5DF2\u8FDE\u4E0A\u98DE\u4E66\uFF0C\u53EF\u5B9E\u65F6\u6536\u53D1'));
14868
- } else if (conn.running) {
14869
- w.appendChild(checkItem('spin', 'bridge \u8FD0\u884C\u4E2D', '\u957F\u8FDE\u63A5' + (conn.connection ? '\uFF08' + conn.connection + '\uFF09' : '\u5EFA\u7ACB\u4E2D\u2026')));
14870
- } else {
14871
- // \u65B0 bot \u5DF2\u81EA\u52A8\u52A0\u5165\u6D3B\u8DC3\u96C6\uFF08\u89C1 pollWizSetup\uFF09\uFF1B\u4E0D\u518D\u8BA9\u7528\u6237\u70B9\u6309\u94AE / \u590D\u5236\u547D\u4EE4\u3002\u771F\u6B63\u62C9\u8D77
14872
- // \u4E0A\u7EBF\u9760\u6700\u540E\u4E00\u6B65\u300C\u5B8C\u6210\u300D\u65F6\u5F39\u7A97\u786E\u8BA4\u91CD\u542F Feishu Bridge\u3002
14873
- w.appendChild(checkItem('spin', '\u5F85\u62C9\u8D77\u4E0A\u7EBF', '\u5DF2\u81EA\u52A8\u52A0\u5165\u6D3B\u8DC3\u96C6 \xB7 \u70B9\u300C\u4E0B\u4E00\u6B65\u300D\u5230\u5B8C\u6210\u9875\uFF0C\u786E\u8BA4\u91CD\u542F Feishu Bridge \u5373\u4E0A\u7EBF\u3002'));
14874
- }
14891
+ // \u300C\u52A0\u5165\u6D3B\u8DC3\u96C6 + \u62C9\u8D77\u4E0A\u7EBF\u300D\u5168\u7A0B\u9759\u9ED8\uFF1A\u65B0 bot \u5DF2\u5728 pollWizSetup \u81EA\u52A8\u52A0\u5165\u6D3B\u8DC3\u96C6\uFF0C\u771F\u6B63\u62C9\u8D77
14892
+ // \u9760\u6700\u540E\u4E00\u6B65\u300C\u5B8C\u6210\u300D\u5F39\u7A97\u786E\u8BA4\u91CD\u542F\u2014\u2014\u8FD9\u91CC\u4E0D\u518D\u663E\u793A\u300C\u5F85\u62C9\u8D77\u4E0A\u7EBF\u300D\u4E4B\u7C7B\u7684\u4E2D\u95F4\u6001\u9879\u3002
14875
14893
  // \u4E8B\u4EF6\u8BA2\u9605\uFF1A\u7CFB\u7EDF\u65E0\u6CD5\u53EF\u9760\u68C0\u6D4B\uFF08\u957F\u8FDE\u63A5\u8BA2\u9605\u5728\u5DF2\u53D1\u5E03\u7248\u672C\u91CC\u7684\u4F53\u73B0\u4E0D\u7A33\u5B9A\uFF09\uFF0C\u6545\u53EA\u505A\u63D0\u9192\u3001\u4E0D\u4E0B\u7ED3\u8BBA\u3001
14876
14894
  // \u4E0D\u963B\u585E\u300C\u4E0B\u4E00\u6B65\u300D\u3002\u7528\u6237\u81EA\u884C\u53BB\u540E\u53F0\u6838\u5BF9\u3002
14877
14895
  var evHint = el('div');
@@ -14895,33 +14913,6 @@ ${UI_PURE_JS}
14895
14913
  return actions;
14896
14914
  }
14897
14915
 
14898
- // \u5B8C\u6210\u6B65\uFF1A\u65B0 bot \u5DF2\u81EA\u52A8\u52A0\u5165\u6D3B\u8DC3\u96C6\uFF0C\u4F46\u8981\u91CD\u542F Feishu Bridge \u624D\u771F\u6B63\u62C9\u8D77\u4E0A\u7EBF\u3002\u5F39\u7A97\u786E\u8BA4
14899
- // \uFF08\u91CD\u542F\u4F1A\u77ED\u6682\u5F71\u54CD\u5176\u5B83\u5728\u7EBF bot\uFF0C\u6240\u4EE5\u4E0D\u9759\u9ED8\u91CD\u542F\uFF09\uFF1Bdaemon \u6CA1\u5728\u8DD1\u5C31\u6539\u4E3A\u300C\u542F\u52A8\u300D\u3002\u4E00\u6B21\u6027\u3002
14900
- function maybePromptRestartAtDone() {
14901
- if (wizRestartPrompted) return;
14902
- var conn = (wizSetup && wizSetup.connection) || {};
14903
- if (conn.running && conn.connection === 'connected') return; // \u5DF2\u7ECF\u5728\u7EBF\uFF0C\u65E0\u9700\u91CD\u542F
14904
- wizRestartPrompted = true;
14905
- if (daemon && daemon.running) {
14906
- confirmDialog({
14907
- title: '\u{1F504} \u7ACB\u5373\u91CD\u542F Feishu Bridge \u8BA9\u65B0\u673A\u5668\u4EBA\u4E0A\u7EBF\uFF1F',
14908
- lines: [
14909
- '\u65B0\u673A\u5668\u4EBA\u5DF2\u52A0\u5165\u6D3B\u8DC3\u96C6\uFF0C\u91CD\u542F Feishu Bridge \u540E\u5373\u53EF\u4E0A\u7EBF\u3002',
14910
- '\u91CD\u542F\u7EA6\u6570\u79D2\uFF0C\u671F\u95F4\u6240\u6709\u5728\u7EBF\u673A\u5668\u4EBA\u7684\u957F\u8FDE\u63A5\u4F1A\u77ED\u6682\u65AD\u5F00\u5E76\u81EA\u52A8\u91CD\u8FDE\u3002',
14911
- ],
14912
- confirmLabel: '\u7ACB\u5373\u91CD\u542F',
14913
- onConfirm: function () { postAction('/api/daemon/restart', '\u91CD\u542F'); },
14914
- });
14915
- } else {
14916
- confirmDialog({
14917
- title: '\u{1F680} \u7ACB\u5373\u542F\u52A8 Feishu Bridge \u8BA9\u673A\u5668\u4EBA\u4E0A\u7EBF\uFF1F',
14918
- lines: ['Feishu Bridge \u5F53\u524D\u672A\u5728\u8FD0\u884C\uFF0C\u542F\u52A8\u540E\u65B0\u673A\u5668\u4EBA\u5373\u53EF\u4E0A\u7EBF\u3002'],
14919
- confirmLabel: '\u7ACB\u5373\u542F\u52A8',
14920
- onConfirm: function () { postAction('/api/daemon/start', '\u542F\u52A8'); },
14921
- });
14922
- }
14923
- }
14924
-
14925
14916
  function copyRow(text) {
14926
14917
  var row = el('div', 'copybox');
14927
14918
  row.appendChild(el('code', null, text));
@@ -14942,35 +14933,20 @@ ${UI_PURE_JS}
14942
14933
  w.textContent = '';
14943
14934
  w.appendChild(el('h3', null, '\u{1F389} \u63A5\u5165\u5B8C\u6210'));
14944
14935
  w.appendChild(wizStepBar(3));
14945
- w.appendChild(el('div', 'note', '\u673A\u5668\u4EBA\u300C' + ((wizSetup && wizSetup.botName) || wizBotId || '') + '\u300D\u5DF2\u52A0\u5165\u6D3B\u8DC3\u96C6\u3002'));
14946
- // \u8FDB\u5165\u5B8C\u6210\u9875\u5373\u5F39\u7A97\u786E\u8BA4\u91CD\u542F Feishu Bridge \u628A\u65B0 bot \u62C9\u8D77\u4E0A\u7EBF\uFF08\u4E00\u6B21\u6027\uFF1B\u5DF2\u5728\u7EBF\u5219\u4E0D\u5F39\uFF09\u3002
14947
- maybePromptRestartAtDone();
14948
- var ul = el('div'); ul.style.margin = '12px 0';
14949
- [
14950
- '\u2460 \u5728\u98DE\u4E66\u91CC\u79C1\u804A\u8FD9\u4E2A\u673A\u5668\u4EBA\uFF0C\u70B9\u300C\u2795 \u65B0\u5EFA\u9879\u76EE\u300D\u628A\u4E00\u4E2A\u76EE\u5F55\u7ED1\u6210\u9879\u76EE\u7FA4\uFF1B',
14951
- '\u2461 \u6216\u628A\u673A\u5668\u4EBA\u62C9\u8FDB\u4E00\u4E2A\u5DF2\u6709\u7FA4\uFF08\u9700\u5F00\u300C\u52A0\u5165\u5B58\u91CF\u7FA4\u300D\u76F8\u5173\u6743\u9650\uFF09\u81EA\u52A8\u7ED1\u5B9A\uFF1B',
14952
- '\u2462 \u7136\u540E\u5728\u7FA4\u91CC @\u673A\u5668\u4EBA \u63D0\u9700\u6C42\uFF0C\u5B83\u5C31\u5728\u7ED1\u5B9A\u7684\u76EE\u5F55\u91CC\u5E72\u6D3B\u3002',
14953
- ].forEach(function (line) {
14954
- var d = el('div'); d.style.padding = '4px 0'; d.textContent = line;
14955
- ul.appendChild(d);
14956
- });
14957
- w.appendChild(ul);
14958
- w.appendChild(el('div', 'note', '\u63D0\u793A\uFF1A\u79C1\u804A\u673A\u5668\u4EBA\u53D1\u4EFB\u610F\u6D88\u606F\u5373\u53EF\u5524\u51FA\u79C1\u804A\u7BA1\u7406\u53F0\uFF1BWeb \u63A7\u5236\u53F0\u4E0E\u79C1\u804A\u5361\u7247\u5171\u4EAB\u540C\u4E00\u5957\u8BBE\u7F6E\uFF0C\u53CC\u7AEF\u5B9E\u65F6\u4E00\u81F4\u3002'));
14959
- // \u65B0\u5EFA\u7684\u673A\u5668\u4EBA\u8981\u7B49 daemon \u91CD\u542F\u3001\u88AB supervisor \u63A5\u7BA1\u540E\u624D\u771F\u6B63\u4E0A\u7EBF\uFF08\u5C24\u5176\u300C\u5F15\u5BFC\u63A7\u5236\u53F0\u300D\u662F
14960
- // \u96F6 bot \u8D77\u7684\uFF0C\u5F97\u91CD\u542F\u624D\u4F1A\u8FDE\u4E0A\u8FD9\u4E2A\u65B0 bot\uFF09\u3002\u7ED9\u4E00\u6761\u9192\u76EE\u63D0\u793A + \u4E00\u952E\u91CD\u542F\uFF08\u786E\u8BA4\u5F39\u7A97\u91CC\u4F1A\u8BF4\u660E
14961
- // \u91CD\u542F\u4F1A\u77ED\u6682\u6253\u65AD\u5176\u5B83\u5728\u8DD1\u7684\u673A\u5668\u4EBA\uFF09\u3002
14962
- var liveTip = el('div', 'note');
14963
- liveTip.style.cssText = 'margin-top:10px;padding:10px 12px;background:var(--blue-tint);border-radius:8px;color:var(--text-2)';
14964
- liveTip.textContent = '\u26A1 \u8BA9\u5B83\u4E0A\u7EBF\uFF1A\u65B0\u673A\u5668\u4EBA\u9700\u91CD\u542F Feishu Bridge \u540E\u7531\u540E\u53F0\u63A5\u7BA1\u3002\u70B9\u4E0B\u9762\u300C\u91CD\u542F\u4F7F\u5176\u4E0A\u7EBF\u300D\u5373\u53EF\uFF08\u9996\u6B21\u521B\u5EFA\u65F6\u91CD\u542F\u5F88\u5B89\u5168\uFF0C\u4E0D\u5F71\u54CD\u522B\u7684\u673A\u5668\u4EBA\uFF09\u3002';
14965
- w.appendChild(liveTip);
14936
+ var who = (wizSetup && wizSetup.botName) || wizBotId || '';
14937
+ // \u5230\u8FD9\u4E00\u6B65\u53EA\u5269\u4E00\u4EF6\u4E8B\uFF1A\u91CD\u542F Feishu Bridge \u8BA9\u65B0 bot \u4E0A\u7EBF\u3002\u4E0D\u518D\u5806\u300C\u65B0\u5EFA\u9879\u76EE/\u62C9\u7FA4/@\u300D\u90A3\u5957
14938
+ // \u5F15\u5BFC\uFF08\u90A3\u4F1A\u8BA9\u4EBA\u4EE5\u4E3A\u5F97\u5148\u505A\u5B8C\u624D\u80FD\u7EE7\u7EED\uFF09\u3002\u91CD\u542F\u5165\u53E3**\u53EA\u6B64\u4E00\u5904**\uFF1A\u4E3B\u6309\u94AE\u300C\u91CD\u542F\u4F7F\u5176\u4E0A\u7EBF\u300D\uFF1B
14939
+ // \u60F3\u665A\u70B9\u518D\u8BF4\u5C31\u70B9\u300C\u7A0D\u540E\u518D\u91CD\u542F\u300D\u3002
14940
+ w.appendChild(el('div', 'note', '\u673A\u5668\u4EBA\u300C' + who + '\u300D\u5DF2\u52A0\u5165\u6D3B\u8DC3\u96C6\u3002\u6700\u540E\u4E00\u6B65\uFF1A\u91CD\u542F Feishu Bridge \u8BA9\u5B83\u4E0A\u7EBF\uFF08\u7EA6\u6570\u79D2\uFF0C\u5176\u5B83\u5728\u7EBF\u673A\u5668\u4EBA\u4F1A\u77ED\u6682\u65AD\u8FDE\u540E\u81EA\u52A8\u91CD\u8FDE\uFF09\u3002'));
14941
+ var gotoBot = function () { var id = wizBotId; closeWizard(); if (id) go({ tab: 'bot', botId: id }); };
14966
14942
  var actions = el('div', 'actions');
14967
- var restart = el('button', 'btn', '\u{1F501} \u91CD\u542F\u4F7F\u5176\u4E0A\u7EBF');
14968
- restart.onclick = askRestart;
14969
- actions.appendChild(restart);
14943
+ var later = el('button', 'btn', '\u7A0D\u540E\u518D\u91CD\u542F');
14944
+ later.onclick = gotoBot;
14945
+ actions.appendChild(later);
14970
14946
  actions.appendChild(el('div', 'grow'));
14971
- var done = el('button', 'btn primary', '\u5B8C\u6210\u5E76\u8FDB\u5165\u8BE5\u673A\u5668\u4EBA \u2192');
14972
- done.onclick = function () { var id = wizBotId; closeWizard(); if (id) go({ tab: 'bot', botId: id }); };
14973
- actions.appendChild(done);
14947
+ var restart = el('button', 'btn primary', '\u{1F501} \u91CD\u542F\u4F7F\u5176\u4E0A\u7EBF');
14948
+ restart.onclick = function () { postAction('/api/daemon/restart', '\u91CD\u542F'); gotoBot(); };
14949
+ actions.appendChild(restart);
14974
14950
  w.appendChild(actions);
14975
14951
  }
14976
14952
 
@@ -15374,7 +15350,16 @@ function createWebServer(opts) {
15374
15350
  const appSecret = typeof body.appSecret === "string" ? body.appSecret : "";
15375
15351
  const tenant = body.tenant === "lark" ? "lark" : "feishu";
15376
15352
  const desiredName = typeof body.name === "string" && body.name.trim() ? body.name.trim() : void 0;
15377
- const result = await opts.service.registerBot({ appId, appSecret, tenant, desiredName });
15353
+ let result;
15354
+ try {
15355
+ result = await opts.service.registerBot({ appId, appSecret, tenant, desiredName });
15356
+ } catch (err) {
15357
+ if (err instanceof NotWiredYetError) {
15358
+ sendJson(res, 501, { error: "not_wired_yet", message: err.message });
15359
+ return;
15360
+ }
15361
+ throw err;
15362
+ }
15378
15363
  if (result.ok) {
15379
15364
  sendJson(res, 201, {
15380
15365
  ok: true,
@@ -16493,7 +16478,10 @@ async function runWeb(opts = {}) {
16493
16478
  process.exitCode = 1;
16494
16479
  return;
16495
16480
  }
16496
- const service = createReadonlyAdminService({ startDaemon: () => spawnDaemonControl("start") });
16481
+ const service = createReadonlyAdminService({
16482
+ startDaemon: () => spawnDaemonControl("start"),
16483
+ applyUpdate: () => spawnDaemonControl("update")
16484
+ });
16497
16485
  const web = createWebServer({ service, token: stableWebConsoleToken(), liveConsole: () => readWebConsole() });
16498
16486
  let url;
16499
16487
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modelzen/feishu-codex-bridge",
3
- "version": "0.3.12-test.1",
3
+ "version": "0.3.12-test.2",
4
4
  "description": "Bridge Feishu/Lark messenger with local Codex via app-server (project=group, thread=session)",
5
5
  "type": "module",
6
6
  "bin": {