@zaofan/dsh-qqbot 1.10.48 → 1.11.0

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 (47) hide show
  1. package/README.md +40 -3
  2. package/client/qqbot-settings.js +487 -30
  3. package/dist/features/ext-capabilities.d.ts +2 -0
  4. package/dist/features/ext-capabilities.d.ts.map +1 -1
  5. package/dist/features/ext-capabilities.js +38 -0
  6. package/dist/features/ext-capabilities.js.map +1 -1
  7. package/dist/features/ext-reload.d.ts +2 -2
  8. package/dist/features/ext-reload.d.ts.map +1 -1
  9. package/dist/features/ext-reload.js +30 -8
  10. package/dist/features/ext-reload.js.map +1 -1
  11. package/dist/features/ext-ui-seed.d.ts +25 -0
  12. package/dist/features/ext-ui-seed.d.ts.map +1 -0
  13. package/dist/features/ext-ui-seed.js +187 -0
  14. package/dist/features/ext-ui-seed.js.map +1 -0
  15. package/dist/features/ext-ui.d.ts +3 -5
  16. package/dist/features/ext-ui.d.ts.map +1 -1
  17. package/dist/features/ext-ui.js +34 -12
  18. package/dist/features/ext-ui.js.map +1 -1
  19. package/dist/features/extension-store.d.ts.map +1 -1
  20. package/dist/features/extension-store.js +3 -0
  21. package/dist/features/extension-store.js.map +1 -1
  22. package/dist/gateway/bootstrap.d.ts.map +1 -1
  23. package/dist/gateway/bootstrap.js +18 -1
  24. package/dist/gateway/bootstrap.js.map +1 -1
  25. package/dist/gateway/middleware-setup.d.ts.map +1 -1
  26. package/dist/gateway/middleware-setup.js +11 -1
  27. package/dist/gateway/middleware-setup.js.map +1 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +131 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/session/session-manager.d.ts.map +1 -1
  32. package/dist/session/session-manager.js +2 -1
  33. package/dist/session/session-manager.js.map +1 -1
  34. package/docs/extension-contract.md +400 -255
  35. package/examples/ext-commands//346/211/251/345/261/225/347/244/272/344/276/213.mjs +84 -0
  36. package/examples/ext-hooks/demo-store.mjs +75 -0
  37. package/examples/ext-ui/demo/dock/card.css +55 -0
  38. package/examples/ext-ui/demo/dock/card.html +95 -0
  39. package/examples/ext-ui/demo/dock/card.js +261 -0
  40. package/examples/ext-ui/demo/settings/card.css +61 -0
  41. package/examples/ext-ui/demo/settings/card.html +38 -0
  42. package/examples/ext-ui/demo/settings/card.js +87 -0
  43. package/package.json +145 -144
  44. package/settings-host.js +6680 -6244
  45. package/examples/ext-ui/local-llm/card.css +0 -66
  46. package/examples/ext-ui/local-llm/card.html +0 -38
  47. package/examples/ext-ui/local-llm/card.js +0 -59
@@ -1,66 +0,0 @@
1
- /* 卡片样式 —— 这份 CSS 只会作用在本卡片的 Shadow DOM 里。
2
- 就算这里写 button{...} 也碰不到外面的面板。
3
- 注意:Shadow DOM 的 :host 是那个承载容器,宽度由面板给(默认 220~320px)。 */
4
- :host {
5
- display: block;
6
- }
7
-
8
- .card {
9
- background: #fff;
10
- border: 1px solid #e6e8ec;
11
- border-radius: 12px;
12
- padding: 10px 12px;
13
- font: 13px -apple-system, 'PingFang SC', 'Microsoft YaHei', sans-serif;
14
- color: #1f2329;
15
- box-shadow: 0 1px 2px rgba(20, 30, 60, .05);
16
- }
17
-
18
- .hd {
19
- display: flex;
20
- align-items: center;
21
- gap: 6px;
22
- font-weight: 700;
23
- margin-bottom: 8px;
24
- }
25
-
26
- .dot {
27
- width: 7px;
28
- height: 7px;
29
- border-radius: 50%;
30
- background: #bbb;
31
- flex: none;
32
- }
33
- .dot.on { background: #16a34a; }
34
- .dot.off { background: #cbd5e1; }
35
- .dot.err { background: #dc2626; }
36
-
37
- .row {
38
- display: flex;
39
- align-items: center;
40
- gap: 6px;
41
- margin: 6px 0;
42
- font-size: 12px;
43
- }
44
-
45
- .lbl { color: #6b7280; flex: none; }
46
- .val { color: #1f2329; }
47
-
48
- .acts {
49
- display: flex;
50
- gap: 6px;
51
- margin-top: 10px;
52
- }
53
-
54
- .btn {
55
- font: inherit;
56
- font-size: 12px;
57
- padding: 5px 12px;
58
- border-radius: 8px;
59
- border: 1px solid #d9c6ff;
60
- background: #f1ecff;
61
- color: #4a3a9f;
62
- cursor: pointer;
63
- }
64
- .btn:hover { background: #e9e1ff; }
65
- .btn:disabled { opacity: .5; cursor: default; }
66
- .btn.ghost { background: #fff; border-color: #d0d5dd; color: #4b5563; }
@@ -1,38 +0,0 @@
1
- <!-- qqbot-ui: { "slot": "settings", "title": "本地代答", "order": 10 } -->
2
- <!--
3
- 扩展 UI 卡片示例 —— 抄这个就能用。
4
-
5
- 放置位置(任选其一):
6
- {dataRoot}/.qqbot-extensions/ui/local-llm/card.html
7
- {dataRoot}/extension-packs/<包名>/ui/local-llm/card.html
8
-
9
- 上面的注释是**元信息**,必须放在文件最前面(前 2KB 内):
10
- slot settings = 设置页底部卡片条 | dock = 悬浮台页签
11
- title 卡片标题(缺省用目录名)
12
- order 排序,小的靠前(缺省 100)
13
-
14
- 卡片跑在 Shadow DOM 里 ⇒ 这里写的 CSS 不会污染面板,面板的样式也进不来。
15
- card.js 会以 new Function('qqbotExt', 'shadowRoot', 源码) 执行,
16
- 所以两个变量可直接用:qqbotExt(API)、shadowRoot(自己这层影子根)。
17
- -->
18
- <div class="card">
19
- <div class="hd">
20
- <span class="dot" id="dot"></span>
21
- <span>⚡ 本地代答</span>
22
- </div>
23
-
24
- <label class="row">
25
- <input type="checkbox" id="on" />
26
- <span>启用</span>
27
- </label>
28
-
29
- <div class="row">
30
- <span class="lbl">状态</span>
31
- <span class="val" id="st">读取中…</span>
32
- </div>
33
-
34
- <div class="acts">
35
- <button class="btn" id="ping">测试连通</button>
36
- <button class="btn ghost" id="refresh">刷新</button>
37
- </div>
38
- </div>
@@ -1,59 +0,0 @@
1
- /* 卡片脚本 —— 以 new Function('qqbotExt', 'shadowRoot', 源码) 执行。
2
- 所以这两个变量可以直接用,不需要 import:
3
-
4
- qqbotExt { extId, api(path, opts), toast(msg) }
5
- shadowRoot 本卡片的 ShadowRoot(用 shadowRoot.getElementById 查节点)
6
-
7
- ⚠️ 不要用 document.getElementById —— 那查到的是外面的页面,不是这张卡。
8
- ⚠️ 脚本抛错只会让这张卡显示一行红字,不会影响设置页其他部分(外面有 try/catch)。
9
- */
10
- (function () {
11
- var $ = function (id) { return shadowRoot.getElementById(id) };
12
-
13
- var dot = $('dot');
14
- var st = $('st');
15
- var on = $('on');
16
-
17
- /** 更新状态显示 */
18
- function show(state, text) {
19
- if (dot) {
20
- dot.className = 'dot ' + (state === 'on' ? 'on' : state === 'err' ? 'err' : 'off');
21
- }
22
- if (st) st.textContent = text;
23
- }
24
-
25
- /** 调自己注册的接口:/api/ext/<extId>/xxx(本示例假定扩展自己注册了 status)
26
- * 没注册也没关系 —— 会拿到 null,然后显示"接口未实现" */
27
- function loadStatus() {
28
- show('off', '读取中…');
29
- qqbotExt.api('/status').then(function (j) {
30
- if (!j) return show('off', '接口未实现(这是示例卡片)');
31
- show(j.up ? 'on' : 'off', j.up ? '运行中' : '未运行');
32
- if (on && typeof j.enabled === 'boolean') on.checked = j.enabled;
33
- }).catch(function () {
34
- show('err', '接口调用失败');
35
- });
36
- }
37
-
38
- if (on) {
39
- on.addEventListener('change', function () {
40
- // 真实扩展这里应该 POST 自己的配置;示例只做个提示
41
- qqbotExt.toast('示例卡片:这里应保存「' + (on.checked ? '启用' : '停用') + '」');
42
- });
43
- }
44
-
45
- var ping = $('ping');
46
- if (ping) {
47
- ping.addEventListener('click', function () {
48
- ping.disabled = true;
49
- qqbotExt.api('/ping').then(function (j) {
50
- qqbotExt.toast(j ? '通了:' + JSON.stringify(j) : '扩展还没有 /ping 接口');
51
- }).finally(function () { ping.disabled = false; });
52
- });
53
- }
54
-
55
- var refresh = $('refresh');
56
- if (refresh) refresh.addEventListener('click', loadStatus);
57
-
58
- loadStatus();
59
- })();