botmux 3.12.0 → 3.12.1

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 (229) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/adapters/backend/riff-backend.d.ts +18 -0
  3. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  4. package/dist/adapters/backend/riff-backend.js +143 -0
  5. package/dist/adapters/backend/riff-backend.js.map +1 -1
  6. package/dist/adapters/cli/kimi.d.ts.map +1 -1
  7. package/dist/adapters/cli/kimi.js +22 -8
  8. package/dist/adapters/cli/kimi.js.map +1 -1
  9. package/dist/adapters/cli/pi.d.ts.map +1 -1
  10. package/dist/adapters/cli/pi.js +3 -1
  11. package/dist/adapters/cli/pi.js.map +1 -1
  12. package/dist/bot-registry.d.ts.map +1 -1
  13. package/dist/bot-registry.js +4 -1
  14. package/dist/bot-registry.js.map +1 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +65 -27
  17. package/dist/cli.js.map +1 -1
  18. package/dist/core/command-handler.d.ts.map +1 -1
  19. package/dist/core/command-handler.js +16 -2
  20. package/dist/core/command-handler.js.map +1 -1
  21. package/dist/core/dashboard-ipc-server.js +1 -1
  22. package/dist/core/dashboard-ipc-server.js.map +1 -1
  23. package/dist/core/dashboard-rows.d.ts +17 -1
  24. package/dist/core/dashboard-rows.d.ts.map +1 -1
  25. package/dist/core/dashboard-rows.js +13 -1
  26. package/dist/core/dashboard-rows.js.map +1 -1
  27. package/dist/core/maintenance.d.ts.map +1 -1
  28. package/dist/core/maintenance.js +5 -0
  29. package/dist/core/maintenance.js.map +1 -1
  30. package/dist/core/skills/cli-admin-command.d.ts.map +1 -1
  31. package/dist/core/skills/cli-admin-command.js +142 -3
  32. package/dist/core/skills/cli-admin-command.js.map +1 -1
  33. package/dist/core/skills/frontmatter.d.ts.map +1 -1
  34. package/dist/core/skills/frontmatter.js +44 -7
  35. package/dist/core/skills/frontmatter.js.map +1 -1
  36. package/dist/core/skills/im-command.d.ts +6 -0
  37. package/dist/core/skills/im-command.d.ts.map +1 -1
  38. package/dist/core/skills/im-command.js +34 -7
  39. package/dist/core/skills/im-command.js.map +1 -1
  40. package/dist/core/skills/install-command.d.ts +4 -0
  41. package/dist/core/skills/install-command.d.ts.map +1 -0
  42. package/dist/core/skills/install-command.js +89 -0
  43. package/dist/core/skills/install-command.js.map +1 -0
  44. package/dist/core/skills/package.d.ts.map +1 -1
  45. package/dist/core/skills/package.js +10 -3
  46. package/dist/core/skills/package.js.map +1 -1
  47. package/dist/core/skills/policy.d.ts +5 -1
  48. package/dist/core/skills/policy.d.ts.map +1 -1
  49. package/dist/core/skills/policy.js +66 -3
  50. package/dist/core/skills/policy.js.map +1 -1
  51. package/dist/core/skills/references.d.ts +9 -1
  52. package/dist/core/skills/references.d.ts.map +1 -1
  53. package/dist/core/skills/references.js +35 -2
  54. package/dist/core/skills/references.js.map +1 -1
  55. package/dist/core/skills/registry-paths.d.ts +1 -0
  56. package/dist/core/skills/registry-paths.d.ts.map +1 -1
  57. package/dist/core/skills/registry-paths.js +3 -0
  58. package/dist/core/skills/registry-paths.js.map +1 -1
  59. package/dist/core/skills/session-resolver.d.ts +2 -1
  60. package/dist/core/skills/session-resolver.d.ts.map +1 -1
  61. package/dist/core/skills/session-resolver.js +1 -0
  62. package/dist/core/skills/session-resolver.js.map +1 -1
  63. package/dist/core/skills/session-runtime.d.ts.map +1 -1
  64. package/dist/core/skills/session-runtime.js +2 -0
  65. package/dist/core/skills/session-runtime.js.map +1 -1
  66. package/dist/core/skills/sources.d.ts +23 -0
  67. package/dist/core/skills/sources.d.ts.map +1 -1
  68. package/dist/core/skills/sources.js +128 -12
  69. package/dist/core/skills/sources.js.map +1 -1
  70. package/dist/core/skills/types.d.ts +22 -1
  71. package/dist/core/skills/types.d.ts.map +1 -1
  72. package/dist/core/types.d.ts +2 -0
  73. package/dist/core/types.d.ts.map +1 -1
  74. package/dist/core/types.js.map +1 -1
  75. package/dist/core/worker-pool.d.ts.map +1 -1
  76. package/dist/core/worker-pool.js +52 -1
  77. package/dist/core/worker-pool.js.map +1 -1
  78. package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
  79. package/dist/dashboard/bot-onboarding.js +2 -114
  80. package/dist/dashboard/bot-onboarding.js.map +1 -1
  81. package/dist/dashboard/connector-api.d.ts.map +1 -1
  82. package/dist/dashboard/connector-api.js +66 -6
  83. package/dist/dashboard/connector-api.js.map +1 -1
  84. package/dist/dashboard/public-redact.d.ts.map +1 -1
  85. package/dist/dashboard/public-redact.js +3 -0
  86. package/dist/dashboard/public-redact.js.map +1 -1
  87. package/dist/dashboard/skill-install-request.js +10 -11
  88. package/dist/dashboard/skill-install-request.js.map +1 -1
  89. package/dist/dashboard/skill-pack-response.d.ts +15 -0
  90. package/dist/dashboard/skill-pack-response.d.ts.map +1 -0
  91. package/dist/dashboard/skill-pack-response.js +32 -0
  92. package/dist/dashboard/skill-pack-response.js.map +1 -0
  93. package/dist/dashboard/web/connectors-page.d.ts +69 -0
  94. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  95. package/dist/dashboard/web/connectors-page.js +47 -7
  96. package/dist/dashboard/web/connectors-page.js.map +1 -1
  97. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  98. package/dist/dashboard/web/i18n.js +301 -26
  99. package/dist/dashboard/web/i18n.js.map +1 -1
  100. package/dist/dashboard/web/preferences.d.ts +4 -2
  101. package/dist/dashboard/web/preferences.d.ts.map +1 -1
  102. package/dist/dashboard/web/preferences.js +14 -6
  103. package/dist/dashboard/web/preferences.js.map +1 -1
  104. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  105. package/dist/dashboard/web/sessions-page.js +99 -3
  106. package/dist/dashboard/web/sessions-page.js.map +1 -1
  107. package/dist/dashboard/web/sessions.d.ts +3 -1
  108. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  109. package/dist/dashboard/web/sessions.js +13 -6
  110. package/dist/dashboard/web/sessions.js.map +1 -1
  111. package/dist/dashboard/web/skills/bot-assignments-tab.d.ts +27 -0
  112. package/dist/dashboard/web/skills/bot-assignments-tab.d.ts.map +1 -0
  113. package/dist/dashboard/web/skills/bot-assignments-tab.js +257 -0
  114. package/dist/dashboard/web/skills/bot-assignments-tab.js.map +1 -0
  115. package/dist/dashboard/web/skills/delivery-settings-tab.d.ts +25 -0
  116. package/dist/dashboard/web/skills/delivery-settings-tab.d.ts.map +1 -0
  117. package/dist/dashboard/web/skills/delivery-settings-tab.js +20 -0
  118. package/dist/dashboard/web/skills/delivery-settings-tab.js.map +1 -0
  119. package/dist/dashboard/web/skills/shared.d.ts +86 -0
  120. package/dist/dashboard/web/skills/shared.d.ts.map +1 -0
  121. package/dist/dashboard/web/skills/shared.js +178 -0
  122. package/dist/dashboard/web/skills/shared.js.map +1 -0
  123. package/dist/dashboard/web/skills/skill-library-tab.d.ts +75 -0
  124. package/dist/dashboard/web/skills/skill-library-tab.d.ts.map +1 -0
  125. package/dist/dashboard/web/skills/skill-library-tab.js +108 -0
  126. package/dist/dashboard/web/skills/skill-library-tab.js.map +1 -0
  127. package/dist/dashboard/web/skills/skill-packs-tab.d.ts +21 -0
  128. package/dist/dashboard/web/skills/skill-packs-tab.d.ts.map +1 -0
  129. package/dist/dashboard/web/skills/skill-packs-tab.js +185 -0
  130. package/dist/dashboard/web/skills/skill-packs-tab.js.map +1 -0
  131. package/dist/dashboard/web/skills/types.d.ts +95 -0
  132. package/dist/dashboard/web/skills/types.d.ts.map +1 -0
  133. package/dist/dashboard/web/skills/types.js +2 -0
  134. package/dist/dashboard/web/skills/types.js.map +1 -0
  135. package/dist/dashboard/web/skills/use-skills-data.d.ts +31 -0
  136. package/dist/dashboard/web/skills/use-skills-data.d.ts.map +1 -0
  137. package/dist/dashboard/web/skills/use-skills-data.js +86 -0
  138. package/dist/dashboard/web/skills/use-skills-data.js.map +1 -0
  139. package/dist/dashboard/web/skills-page.d.ts +34 -31
  140. package/dist/dashboard/web/skills-page.d.ts.map +1 -1
  141. package/dist/dashboard/web/skills-page.js +321 -176
  142. package/dist/dashboard/web/skills-page.js.map +1 -1
  143. package/dist/dashboard/webhook-routes.d.ts +18 -0
  144. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  145. package/dist/dashboard/webhook-routes.js +35 -1
  146. package/dist/dashboard/webhook-routes.js.map +1 -1
  147. package/dist/dashboard-web/app.js +1 -1
  148. package/dist/dashboard-web/chunks/{bot-defaults-page-USC6EZXP.js → bot-defaults-page-HL655CNR.js} +1 -1
  149. package/dist/dashboard-web/chunks/{chunk-KOPISPHN.js → chunk-5PAYQ3KT.js} +1 -1
  150. package/dist/dashboard-web/chunks/{chunk-RXRJB5SO.js → chunk-5ZL7NLR5.js} +1 -1
  151. package/dist/dashboard-web/chunks/{chunk-A7VC4BXR.js → chunk-BFUTTYVK.js} +1 -1
  152. package/dist/dashboard-web/chunks/chunk-ELL53D62.js +55 -0
  153. package/dist/dashboard-web/chunks/connectors-page-3QQACF23.js +1 -0
  154. package/dist/dashboard-web/chunks/{groups-page-C6NSDTIN.js → groups-page-SDZMJ7UV.js} +1 -1
  155. package/dist/dashboard-web/chunks/{insights-page-UTOVYLLY.js → insights-page-ZZ3JEJ6L.js} +1 -1
  156. package/dist/dashboard-web/chunks/{monitor-room-UKTJYTA2.js → monitor-room-ROJ5GZ4N.js} +1 -1
  157. package/dist/dashboard-web/chunks/{monitoring-page-Q3CEZIVX.js → monitoring-page-IATV7KJF.js} +1 -1
  158. package/dist/dashboard-web/chunks/{office-page-GYCZOOVJ.js → office-page-TYO5OIIT.js} +1 -1
  159. package/dist/dashboard-web/chunks/{overview-page-W2VBJ6OH.js → overview-page-VJUULZF2.js} +1 -1
  160. package/dist/dashboard-web/chunks/{roles-page-U4SHER4K.js → roles-page-7RJJKZGK.js} +1 -1
  161. package/dist/dashboard-web/chunks/{schedules-page-TNPW3N3Q.js → schedules-page-JTEJ5IXW.js} +1 -1
  162. package/dist/dashboard-web/chunks/sessions-page-KD7HDT3U.js +8 -0
  163. package/dist/dashboard-web/chunks/{settings-page-VKW5ZK5K.js → settings-page-7CTTFBRS.js} +1 -1
  164. package/dist/dashboard-web/chunks/skills-page-57NZECJ3.js +4 -0
  165. package/dist/dashboard-web/chunks/{team-federation-page-OMFGGBT2.js → team-federation-page-6YYIMJG3.js} +1 -1
  166. package/dist/dashboard-web/chunks/{v3-page-PLXWK4KO.js → v3-page-ZGKBSBK3.js} +1 -1
  167. package/dist/dashboard-web/chunks/{whiteboards-page-NJQOEO2P.js → whiteboards-page-AACJF6DB.js} +1 -1
  168. package/dist/dashboard-web/style.css +1623 -160
  169. package/dist/dashboard.js +200 -16
  170. package/dist/dashboard.js.map +1 -1
  171. package/dist/i18n/en.d.ts.map +1 -1
  172. package/dist/i18n/en.js +2 -0
  173. package/dist/i18n/en.js.map +1 -1
  174. package/dist/i18n/zh.d.ts.map +1 -1
  175. package/dist/i18n/zh.js +2 -0
  176. package/dist/i18n/zh.js.map +1 -1
  177. package/dist/index-daemon.js +6 -1
  178. package/dist/index-daemon.js.map +1 -1
  179. package/dist/services/connector-store.d.ts +14 -1
  180. package/dist/services/connector-store.d.ts.map +1 -1
  181. package/dist/services/connector-store.js.map +1 -1
  182. package/dist/services/connector-topic-template.d.ts +7 -0
  183. package/dist/services/connector-topic-template.d.ts.map +1 -0
  184. package/dist/services/connector-topic-template.js +210 -0
  185. package/dist/services/connector-topic-template.js.map +1 -0
  186. package/dist/services/project-scanner.d.ts +33 -0
  187. package/dist/services/project-scanner.d.ts.map +1 -1
  188. package/dist/services/project-scanner.js +40 -1
  189. package/dist/services/project-scanner.js.map +1 -1
  190. package/dist/services/skill-pack-store.d.ts +50 -0
  191. package/dist/services/skill-pack-store.d.ts.map +1 -0
  192. package/dist/services/skill-pack-store.js +270 -0
  193. package/dist/services/skill-pack-store.js.map +1 -0
  194. package/dist/services/skill-registry-store.d.ts +8 -0
  195. package/dist/services/skill-registry-store.d.ts.map +1 -1
  196. package/dist/services/skill-registry-store.js +100 -68
  197. package/dist/services/skill-registry-store.js.map +1 -1
  198. package/dist/services/todo-state.d.ts +74 -0
  199. package/dist/services/todo-state.d.ts.map +1 -0
  200. package/dist/services/todo-state.js +351 -0
  201. package/dist/services/todo-state.js.map +1 -0
  202. package/dist/setup/agent-preset.d.ts.map +1 -1
  203. package/dist/setup/agent-preset.js +2 -0
  204. package/dist/setup/agent-preset.js.map +1 -1
  205. package/dist/setup/owner-identity.d.ts +47 -0
  206. package/dist/setup/owner-identity.d.ts.map +1 -0
  207. package/dist/setup/owner-identity.js +196 -0
  208. package/dist/setup/owner-identity.js.map +1 -0
  209. package/dist/setup/register-app.d.ts +4 -3
  210. package/dist/setup/register-app.d.ts.map +1 -1
  211. package/dist/setup/register-app.js.map +1 -1
  212. package/dist/setup/setup-args.d.ts +1 -1
  213. package/dist/setup/setup-args.d.ts.map +1 -1
  214. package/dist/setup/setup-args.js +7 -3
  215. package/dist/setup/setup-args.js.map +1 -1
  216. package/dist/types.d.ts +11 -0
  217. package/dist/types.d.ts.map +1 -1
  218. package/dist/utils/child-env.d.ts +25 -0
  219. package/dist/utils/child-env.d.ts.map +1 -1
  220. package/dist/utils/child-env.js +47 -0
  221. package/dist/utils/child-env.js.map +1 -1
  222. package/dist/worker.js +55 -16
  223. package/dist/worker.js.map +1 -1
  224. package/dist/workflows/definition.d.ts +44 -44
  225. package/package.json +1 -1
  226. package/dist/dashboard-web/chunks/chunk-M6BHWQFO.js +0 -51
  227. package/dist/dashboard-web/chunks/connectors-page-4Z76HWRH.js +0 -1
  228. package/dist/dashboard-web/chunks/sessions-page-YWWDDV57.js +0 -6
  229. package/dist/dashboard-web/chunks/skills-page-ZCEDFGZZ.js +0 -4
@@ -0,0 +1,185 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useRef, useState } from 'react';
3
+ import { useT } from '../react-hooks.js';
4
+ import { SectionHeader } from '../dashboard-components.js';
5
+ function healthStatus(pack) {
6
+ if ((pack.missingSkills?.length ?? 0) > 0)
7
+ return 'missing';
8
+ if ((pack.references?.length ?? 0) === 0)
9
+ return 'unassigned';
10
+ return 'complete';
11
+ }
12
+ export function SkillPacksTab(props) {
13
+ const tr = useT();
14
+ // Defensive: page-level store may not have loaded packs yet (or tests may
15
+ // omit the prop). Fall back to an empty array so length/map never throw.
16
+ const packs = props.packs ?? [];
17
+ const skills = props.skills ?? [];
18
+ const [editorOpen, setEditorOpen] = useState(false);
19
+ const [editing, setEditing] = useState(null);
20
+ const [status, setStatus] = useState(null);
21
+ const [deleteConfirm, setDeleteConfirm] = useState(null);
22
+ const [deleteBusy, setDeleteBusy] = useState(false);
23
+ const openCreate = () => { setEditing(null); setEditorOpen(true); };
24
+ const openEdit = (pack) => { setEditing(pack); setEditorOpen(true); };
25
+ // Cross-tab arrival: a single focused pack (chip click) opens its editor; a
26
+ // focus set (overview badge / multi-pack skill) highlights the cards. Either
27
+ // way the intent is consumed once; highlights live in local state.
28
+ const [highlightPacks, setHighlightPacks] = useState(() => new Set());
29
+ const { focusPackId, focusPackIds, onFocusConsumed } = props;
30
+ useEffect(() => {
31
+ if (!focusPackId && (focusPackIds?.length ?? 0) === 0)
32
+ return;
33
+ if (focusPackId) {
34
+ const pack = packs.find(row => row.id === focusPackId);
35
+ if (pack) {
36
+ setEditing(pack);
37
+ setEditorOpen(true);
38
+ }
39
+ setHighlightPacks(new Set([focusPackId]));
40
+ }
41
+ else if (focusPackIds) {
42
+ setHighlightPacks(new Set(focusPackIds));
43
+ }
44
+ onFocusConsumed?.();
45
+ // eslint-disable-next-line react-hooks/exhaustive-deps
46
+ }, [focusPackId, focusPackIds]);
47
+ const handleSaved = () => {
48
+ setEditorOpen(false);
49
+ setEditing(null);
50
+ setStatus({ text: tr('skills.saved'), ok: true });
51
+ props.onRefresh();
52
+ };
53
+ const handleDelete = async (pack) => {
54
+ // First attempt WITHOUT force: lets the backend enforce the in-use guard.
55
+ // If the pack is referenced by bots, the backend returns 409 IN_USE with the
56
+ // list of affected bots — we then surface an explicit confirmation before
57
+ // retrying with force=1. Never silently force-delete.
58
+ try {
59
+ const res = await fetch(`/api/skill-packs/${encodeURIComponent(pack.id)}`, { method: 'DELETE' });
60
+ const body = await res.json().catch(() => ({}));
61
+ if (res.ok) {
62
+ setStatus({ text: tr('skills.packDeleted', { name: pack.name }), ok: true });
63
+ props.onRefresh();
64
+ return;
65
+ }
66
+ if (res.status === 409 && body?.error === 'SKILL_PACK_IN_USE') {
67
+ const references = Array.isArray(body?.references) ? body.references : (pack.references ?? []);
68
+ setDeleteConfirm({ pack, references });
69
+ return;
70
+ }
71
+ throw new Error(body?.error ?? `HTTP ${res.status}`);
72
+ }
73
+ catch (err) {
74
+ setStatus({ text: `${tr('skills.failed')}: ${err?.message ?? err}`, ok: false });
75
+ }
76
+ };
77
+ const confirmForceDelete = async () => {
78
+ if (!deleteConfirm)
79
+ return;
80
+ setDeleteBusy(true);
81
+ try {
82
+ const res = await fetch(`/api/skill-packs/${encodeURIComponent(deleteConfirm.pack.id)}?force=1`, { method: 'DELETE' });
83
+ const body = await res.json().catch(() => ({}));
84
+ if (!res.ok)
85
+ throw new Error(body?.error ?? `HTTP ${res.status}`);
86
+ setStatus({ text: tr('skills.packDeleted', { name: deleteConfirm.pack.name }), ok: true });
87
+ setDeleteConfirm(null);
88
+ props.onRefresh();
89
+ }
90
+ catch (err) {
91
+ setStatus({ text: `${tr('skills.failed')}: ${err?.message ?? err}`, ok: false });
92
+ }
93
+ finally {
94
+ setDeleteBusy(false);
95
+ }
96
+ };
97
+ return (_jsxs("section", { className: "skills-config-block", children: [_jsx(SectionHeader, { title: tr('skills.packs'), count: props.packsKnown === false ? '—' : tr('skills.packCount', { count: packs.length }), hint: tr('skills.packsHelp') }), status && _jsx("p", { className: `hint-${status.ok ? 'ok' : 'warn'}`, children: status.text }), (_jsx("div", { className: "bd-card skills-config-card", children: props.packsKnown === false && packs.length === 0 ? (_jsxs("div", { className: "skills-empty-state", "data-packs-unknown": true, children: [_jsx("p", { className: "hint-warn", children: tr('skills.packsUnknown') }), _jsx("button", { className: "bd-button", onClick: () => props.onRefresh(), children: tr('skills.refresh') })] })) : packs.length === 0 ? (_jsxs("div", { className: "skills-empty-state", children: [_jsx("p", { children: tr('skills.packsEmpty') }), _jsx("button", { className: "bd-button primary", onClick: openCreate, children: tr('skills.packCreate') })] })) : (_jsxs("div", { className: "skills-pack-grid", children: [_jsxs("button", { className: "skills-pack-create-tile", onClick: openCreate, children: [_jsx("span", { className: "skills-pack-create-plus", children: "+" }), _jsx("span", { children: tr('skills.packCreate') })] }), packs.map(pack => {
98
+ const health = healthStatus(pack);
99
+ return (_jsxs("div", { className: `skills-pack-card${highlightPacks.has(pack.id) ? ' skills-pack-card-focus' : ''}`, children: [_jsxs("div", { className: "skills-pack-card-head", children: [_jsxs("div", { className: "skills-pack-title", children: [_jsx("strong", { children: pack.name }), _jsx("code", { className: "skills-pack-id", children: pack.id })] }), _jsx("span", { className: `skills-pack-health skills-pack-health-${health}`, children: health === 'complete' ? '✓' :
100
+ health === 'missing' ? '!' : '○' })] }), pack.description && _jsx("p", { className: "skills-pack-desc", children: pack.description }), _jsxs("div", { className: "skills-pack-meta", children: [_jsx("span", { className: "skills-pack-meta-item", children: tr('skills.skillCount', { count: pack.include.length }) }), _jsx("span", { className: "skills-pack-meta-item", children: tr('skills.packRefCount', { count: pack.references?.length ?? 0 }) })] }), pack.tags && pack.tags.length > 0 && (_jsx("div", { className: "skills-pack-tags", children: pack.tags.map(tag => _jsx("span", { className: "skills-pack-tag", children: tag }, tag)) })), (pack.references?.length ?? 0) > 0 && (_jsx("div", { className: "skills-pack-refs", children: pack.references.map(r => (_jsx("button", { type: "button", className: "skills-pack-ref-chip", "data-action": "open-pack-bot", disabled: !props.onOpenBot, onClick: () => props.onOpenBot?.(r.larkAppId), children: r.botName }, r.larkAppId))) })), (pack.missingSkills?.length ?? 0) > 0 && (_jsxs("div", { className: "skills-pack-missing", children: [tr('skills.packMissing'), ":", ' ', pack.missingSkills.map(name => (_jsx("button", { type: "button", className: "skills-missing-skill-chip", "data-action": "install-missing-skill", title: tr('skills.installMissingHint', { skill: name }), disabled: !props.onInstallMissingSkill, onClick: () => props.onInstallMissingSkill?.(name), children: name }, name)))] })), _jsxs("div", { className: "skills-pack-actions", children: [_jsx("button", { className: "bd-button small", onClick: () => openEdit(pack), children: tr('skills.packEdit') }), _jsx("button", { className: "bd-button small danger", onClick: () => void handleDelete(pack), children: tr('skills.remove') })] })] }, pack.id));
101
+ })] })) })), editorOpen && (_jsx(SkillPackEditor, { pack: editing, skills: skills, onClose: () => { setEditorOpen(false); setEditing(null); }, onSaved: handleSaved })), deleteConfirm && (_jsx("dialog", { className: "bd-dialog skills-pack-delete-confirm", open: true, onClose: () => !deleteBusy && setDeleteConfirm(null), children: _jsxs("form", { method: "dialog", onSubmit: e => { e.preventDefault(); void confirmForceDelete(); }, children: [_jsx("h3", { children: tr('skills.packDeleteConfirmTitle') }), _jsx("p", { children: tr('skills.packDeleteConfirmBody', { name: deleteConfirm.pack.name }) }), deleteConfirm.references.length > 0 && (_jsxs("div", { className: "skills-pack-delete-refs", children: [_jsx("p", { children: _jsxs("strong", { children: [tr('skills.packDeleteAffectedBots'), ":"] }) }), _jsx("ul", { children: deleteConfirm.references.map(ref => (_jsx("li", { children: ref.botName }, ref.larkAppId))) })] })), _jsx("p", { className: "hint-warn", children: tr('skills.packDeleteForceWarning') }), _jsxs("div", { className: "skills-dialog-actions", children: [_jsx("button", { type: "button", className: "bd-button", onClick: () => setDeleteConfirm(null), disabled: deleteBusy, children: tr('skills.cancel') }), _jsx("button", { type: "submit", className: "bd-button danger", disabled: deleteBusy, children: deleteBusy ? tr('skills.removing') : tr('skills.removeAnyway') })] })] }) }))] }));
102
+ }
103
+ function SkillPackEditor(props) {
104
+ const tr = useT();
105
+ const skills = props.skills ?? [];
106
+ const [id, setId] = useState(props.pack?.id ?? '');
107
+ const [name, setName] = useState(props.pack?.name ?? '');
108
+ const [description, setDescription] = useState(props.pack?.description ?? '');
109
+ const [tags, setTags] = useState((props.pack?.tags ?? []).join(', '));
110
+ const [selected, setSelected] = useState(() => new Set(props.pack?.include.map(s => s.replace('skill:', '')) ?? []));
111
+ const [busy, setBusy] = useState(false);
112
+ const [error, setError] = useState(null);
113
+ const [skillQuery, setSkillQuery] = useState('');
114
+ const dialogRef = useRef(null);
115
+ const installedSkillNames = useMemo(() => new Set(skills.map(skill => skill.name)), [skills]);
116
+ const missingSelected = useMemo(() => [...selected].filter(skillName => !installedSkillNames.has(skillName)).sort(), [installedSkillNames, selected]);
117
+ useEffect(() => {
118
+ const dlg = dialogRef.current;
119
+ if (dlg && !dlg.open)
120
+ dlg.showModal();
121
+ }, []);
122
+ const filteredSkills = useMemo(() => {
123
+ const q = skillQuery.trim().toLowerCase();
124
+ if (!q)
125
+ return skills;
126
+ return skills.filter(s => `${s.name} ${s.description ?? ''}`.toLowerCase().includes(q));
127
+ }, [skills, skillQuery]);
128
+ const allFilteredSelected = filteredSkills.length > 0 && filteredSkills.every(s => selected.has(s.name));
129
+ const toggleSkill = (skillName) => {
130
+ setSelected(prev => {
131
+ const next = new Set(prev);
132
+ if (next.has(skillName))
133
+ next.delete(skillName);
134
+ else
135
+ next.add(skillName);
136
+ return next;
137
+ });
138
+ };
139
+ const toggleAllFiltered = () => {
140
+ setSelected(prev => {
141
+ const next = new Set(prev);
142
+ if (allFilteredSelected) {
143
+ for (const s of filteredSkills)
144
+ next.delete(s.name);
145
+ }
146
+ else {
147
+ for (const s of filteredSkills)
148
+ next.add(s.name);
149
+ }
150
+ return next;
151
+ });
152
+ };
153
+ const save = async () => {
154
+ setBusy(true);
155
+ setError(null);
156
+ try {
157
+ const payload = {
158
+ id,
159
+ name,
160
+ description: description || undefined,
161
+ tags: tags.split(',').map(t => t.trim()).filter(Boolean),
162
+ include: [...selected].map(s => `skill:${s}`),
163
+ ...(props.pack ? { expectedRevision: props.pack.revision } : {}),
164
+ };
165
+ const url = props.pack ? `/api/skill-packs/${encodeURIComponent(props.pack.id)}` : '/api/skill-packs';
166
+ const res = await fetch(url, {
167
+ method: props.pack ? 'PUT' : 'POST',
168
+ headers: { 'content-type': 'application/json' },
169
+ body: JSON.stringify(payload),
170
+ });
171
+ const body = await res.json().catch(() => ({}));
172
+ if (!res.ok)
173
+ throw new Error(body?.error ?? body?.reason ?? `HTTP ${res.status}`);
174
+ props.onSaved();
175
+ }
176
+ catch (err) {
177
+ setError(err?.message ?? String(err));
178
+ }
179
+ finally {
180
+ setBusy(false);
181
+ }
182
+ };
183
+ return (_jsx("dialog", { className: "bd-dialog skills-pack-editor", ref: dialogRef, onClose: props.onClose, children: _jsxs("form", { method: "dialog", onSubmit: (e) => { e.preventDefault(); void save(); }, children: [_jsx("h3", { children: props.pack ? tr('skills.packEdit') : tr('skills.packCreate') }), error && _jsx("p", { className: "hint-warn", children: error }), _jsxs("div", { className: "skills-control-block", children: [_jsx("label", { children: tr('skills.packId') }), _jsx("input", { value: id, onChange: e => setId(e.target.value), disabled: !!props.pack, placeholder: tr('skills.packIdPlaceholder') })] }), _jsxs("div", { className: "skills-control-block", children: [_jsx("label", { children: tr('skills.packName') }), _jsx("input", { value: name, onChange: e => setName(e.target.value) })] }), _jsxs("div", { className: "skills-control-block", children: [_jsx("label", { children: tr('skills.packDescription') }), _jsx("textarea", { value: description, onChange: e => setDescription(e.target.value), rows: 2 })] }), _jsxs("div", { className: "skills-control-block", children: [_jsx("label", { children: tr('skills.packTags') }), _jsx("input", { value: tags, onChange: e => setTags(e.target.value), placeholder: tr('skills.packTagsPlaceholder') })] }), _jsxs("div", { className: "skills-control-block", children: [_jsxs("div", { className: "skills-pack-include-head", children: [_jsxs("label", { children: [tr('skills.packInclude'), " (", selected.size, "/", skills.length + missingSelected.length, ")"] }), _jsx("input", { className: "skills-pack-skill-search", type: "text", placeholder: tr('skills.searchPlaceholder'), value: skillQuery, onChange: e => setSkillQuery(e.target.value) })] }), filteredSkills.length > 0 && (_jsxs("label", { className: "skills-pack-select-all", children: [_jsx("input", { type: "checkbox", checked: allFilteredSelected, onChange: toggleAllFiltered }), allFilteredSelected ? tr('skills.deselectAll') : tr('skills.selectAll')] })), missingSelected.length > 0 && (_jsxs("div", { className: "skills-pack-missing-editor", children: [_jsx("small", { className: "muted", children: tr('skills.packMissing') }), missingSelected.map(skillName => (_jsxs("label", { className: "skills-pack-skill-item skills-pack-skill-missing", "data-missing-skill": skillName, children: [_jsx("input", { type: "checkbox", checked: true, onChange: () => toggleSkill(skillName) }), _jsx("span", { className: "skills-pack-skill-name", children: skillName }), _jsx("small", { className: "skills-pack-skill-desc", children: tr('skills.packMissing') })] }, skillName)))] })), _jsxs("div", { className: "skills-pack-skill-list", children: [filteredSkills.map(skill => (_jsxs("label", { className: "skills-pack-skill-item", children: [_jsx("input", { type: "checkbox", checked: selected.has(skill.name), onChange: () => toggleSkill(skill.name) }), _jsx("span", { className: "skills-pack-skill-name", children: skill.name }), skill.description && _jsx("small", { className: "skills-pack-skill-desc", children: skill.description })] }, skill.name))), filteredSkills.length === 0 && _jsx("p", { className: "muted", children: tr('skills.noResults') })] })] }), _jsxs("div", { className: "skills-dialog-actions", children: [_jsx("button", { type: "button", className: "bd-button", onClick: props.onClose, children: tr('skills.cancel') }), _jsx("button", { type: "submit", className: "bd-button primary", disabled: busy || selected.size === 0 || !name.trim(), children: busy ? tr('skills.saving') : tr('skills.saveSelection') })] })] }) }));
184
+ }
185
+ //# sourceMappingURL=skill-packs-tab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-packs-tab.js","sourceRoot":"","sources":["../../../../src/dashboard/web/skills/skill-packs-tab.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAuB3D,SAAS,YAAY,CAAC,IAAkB;IACtC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5D,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IAC9D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;IAClB,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IAClC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAA2F,IAAI,CAAC,CAAC;IACnJ,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,CAAC,IAAkB,EAAE,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF,4EAA4E;IAC5E,6EAA6E;IAC7E,mEAAmE;IACnE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAc,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACnF,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAC7D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO;QAC9D,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;YACvD,IAAI,IAAI,EAAE,CAAC;gBACT,UAAU,CAAC,IAAI,CAAC,CAAC;gBACjB,aAAa,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YACD,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,iBAAiB,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,eAAe,EAAE,EAAE,CAAC;QACpB,uDAAuD;IACzD,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAEhC,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,EAAE,IAAkB,EAAE,EAAE;QAChD,0EAA0E;QAC1E,6EAA6E;QAC7E,0EAA0E;QAC1E,sDAAsD;QACtD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACjG,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7E,KAAK,CAAC,SAAS,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,KAAK,KAAK,mBAAmB,EAAE,CAAC;gBAC9D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;gBAC/F,gBAAgB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;QACpC,IAAI,CAAC,aAAa;YAAE,OAAO;QAC3B,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAClE,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3F,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACnF,CAAC;gBAAS,CAAC;YACT,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,mBAAS,SAAS,EAAC,qBAAqB,aACtC,KAAC,aAAa,IACZ,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,EACzB,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EACzF,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAC5B,EACD,MAAM,IAAI,YAAG,SAAS,EAAE,QAAQ,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,YAAG,MAAM,CAAC,IAAI,GAAK,EAC9E,CACC,cAAK,SAAS,EAAC,4BAA4B,YACxC,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAClD,eAAK,SAAS,EAAC,oBAAoB,yCACjC,YAAG,SAAS,EAAC,WAAW,YAAE,EAAE,CAAC,qBAAqB,CAAC,GAAK,EACxD,iBAAQ,SAAS,EAAC,WAAW,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,YAAG,EAAE,CAAC,gBAAgB,CAAC,GAAU,IAC3F,CACP,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACvB,eAAK,SAAS,EAAC,oBAAoB,aACjC,sBAAI,EAAE,CAAC,mBAAmB,CAAC,GAAK,EAChC,iBAAQ,SAAS,EAAC,mBAAmB,EAAC,OAAO,EAAE,UAAU,YAAG,EAAE,CAAC,mBAAmB,CAAC,GAAU,IACzF,CACP,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,kBAAkB,aAC/B,kBAAQ,SAAS,EAAC,yBAAyB,EAAC,OAAO,EAAE,UAAU,aAC7D,eAAM,SAAS,EAAC,yBAAyB,kBAAS,EAClD,yBAAO,EAAE,CAAC,mBAAmB,CAAC,GAAQ,IAC/B,EACR,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;4BAChB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;4BAClC,OAAO,CACL,eAAK,SAAS,EAAE,mBAAmB,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,aAC/F,eAAK,SAAS,EAAC,uBAAuB,aACpC,eAAK,SAAS,EAAC,mBAAmB,aAChC,2BAAS,IAAI,CAAC,IAAI,GAAU,EAC5B,eAAM,SAAS,EAAC,gBAAgB,YAAE,IAAI,CAAC,EAAE,GAAQ,IAC7C,EACN,eAAM,SAAS,EAAE,yCAAyC,MAAM,EAAE,YAC/D,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oDAC7B,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAC5B,IACH,EACL,IAAI,CAAC,WAAW,IAAI,YAAG,SAAS,EAAC,kBAAkB,YAAE,IAAI,CAAC,WAAW,GAAK,EAC3E,eAAK,SAAS,EAAC,kBAAkB,aAC/B,eAAM,SAAS,EAAC,uBAAuB,YAAE,EAAE,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAQ,EACxG,eAAM,SAAS,EAAC,uBAAuB,YAAE,EAAE,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,GAAQ,IAC/G,EACL,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CACpC,cAAK,SAAS,EAAC,kBAAkB,YAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,eAAgB,SAAS,EAAC,iBAAiB,YAAE,GAAG,IAArC,GAAG,CAA0C,CAAC,GAC3E,CACP,EACA,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CACrC,cAAK,SAAS,EAAC,kBAAkB,YAC9B,IAAI,CAAC,UAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACzB,iBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,sBAAsB,iBACpB,eAAe,EAC3B,QAAQ,EAAE,CAAC,KAAK,CAAC,SAAS,EAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,YAC7C,CAAC,CAAC,OAAO,IANJ,CAAC,CAAC,SAAS,CAMG,CACtB,CAAC,GACE,CACP,EACA,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CACxC,eAAK,SAAS,EAAC,qBAAqB,aACjC,EAAE,CAAC,oBAAoB,CAAC,OAAG,GAAG,EAC9B,IAAI,CAAC,aAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAC/B,iBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,2BAA2B,iBACzB,uBAAuB,EACnC,KAAK,EAAE,EAAE,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACvD,QAAQ,EAAE,CAAC,KAAK,CAAC,qBAAqB,EACtC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,YAClD,IAAI,IAPC,IAAI,CAOK,CACjB,CAAC,IACE,CACP,EACD,eAAK,SAAS,EAAC,qBAAqB,aAClC,iBAAQ,SAAS,EAAC,iBAAiB,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAG,EAAE,CAAC,iBAAiB,CAAC,GAAU,EACnG,iBAAQ,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,YAAG,EAAE,CAAC,eAAe,CAAC,GAAU,IAC7G,KAtDgG,IAAI,CAAC,EAAE,CAuDzG,CACP,CAAC;wBACJ,CAAC,CAAC,IACE,CACP,GACG,CACP,EACA,UAAU,IAAI,CACb,KAAC,eAAe,IACd,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC1D,OAAO,EAAE,WAAW,GACpB,CACH,EACA,aAAa,IAAI,CAChB,iBAAQ,SAAS,EAAC,sCAAsC,EAAC,IAAI,QAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,IAAI,gBAAgB,CAAC,IAAI,CAAC,YAChH,gBAAM,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,kBAAkB,EAAE,CAAC,CAAC,CAAC,aACrF,uBAAK,EAAE,CAAC,+BAA+B,CAAC,GAAM,EAC9C,sBAAI,EAAE,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAK,EAC7E,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CACtC,eAAK,SAAS,EAAC,yBAAyB,aACtC,sBAAG,6BAAS,EAAE,CAAC,+BAA+B,CAAC,SAAW,GAAI,EAC9D,uBACG,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CACnC,uBAAyB,GAAG,CAAC,OAAO,IAA3B,GAAG,CAAC,SAAS,CAAoB,CAC3C,CAAC,GACC,IACD,CACP,EACD,YAAG,SAAS,EAAC,WAAW,YAAE,EAAE,CAAC,+BAA+B,CAAC,GAAK,EAClE,eAAK,SAAS,EAAC,uBAAuB,aACpC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,WAAW,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,YACpG,EAAE,CAAC,eAAe,CAAC,GACb,EACT,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,kBAAkB,EAAC,QAAQ,EAAE,UAAU,YACpE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,GACxD,IACL,IACD,GACA,CACV,IACO,CACX,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAKxB;IACC,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IAClC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IAC9E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAc,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAClI,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACzD,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9F,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,EACnF,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAChC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC;QAC9B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,GAAG,CAAC,SAAS,EAAE,CAAC;IACxC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC;QACtB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEzB,MAAM,mBAAmB,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEzG,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,EAAE;QACxC,WAAW,CAAC,IAAI,CAAC,EAAE;YACjB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;;gBAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,WAAW,CAAC,IAAI,CAAC,EAAE;YACjB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,mBAAmB,EAAE,CAAC;gBACxB,KAAK,MAAM,CAAC,IAAI,cAAc;oBAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,CAAC,IAAI,cAAc;oBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG;gBACd,EAAE;gBACF,IAAI;gBACJ,WAAW,EAAE,WAAW,IAAI,SAAS;gBACrC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBACxD,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjE,CAAC;YACF,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC;YACtG,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC3B,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;gBACnC,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAC9B,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,MAAM,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAClF,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,QAAQ,CAAC,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,iBAAQ,SAAS,EAAC,8BAA8B,EAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,YACrF,gBAAM,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,aACzE,uBAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,GAAM,EACtE,KAAK,IAAI,YAAG,SAAS,EAAC,WAAW,YAAE,KAAK,GAAK,EAC9C,eAAK,SAAS,EAAC,sBAAsB,aACnC,0BAAQ,EAAE,CAAC,eAAe,CAAC,GAAS,EACpC,gBAAO,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,0BAA0B,CAAC,GAAI,IAC3H,EACN,eAAK,SAAS,EAAC,sBAAsB,aACnC,0BAAQ,EAAE,CAAC,iBAAiB,CAAC,GAAS,EACtC,gBAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAI,IAC1D,EACN,eAAK,SAAS,EAAC,sBAAsB,aACnC,0BAAQ,EAAE,CAAC,wBAAwB,CAAC,GAAS,EAC7C,mBAAU,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,GAAI,IACpF,EACN,eAAK,SAAS,EAAC,sBAAsB,aACnC,0BAAQ,EAAE,CAAC,iBAAiB,CAAC,GAAS,EACtC,gBAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,4BAA4B,CAAC,GAAI,IACzG,EACN,eAAK,SAAS,EAAC,sBAAsB,aACnC,eAAK,SAAS,EAAC,0BAA0B,aACvC,4BAAQ,EAAE,CAAC,oBAAoB,CAAC,QAAI,QAAQ,CAAC,IAAI,OAAG,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,SAAU,EACpG,gBACE,SAAS,EAAC,0BAA0B,EACpC,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,EAAE,CAAC,0BAA0B,CAAC,EAC3C,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAC5C,IACE,EACL,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAC5B,iBAAO,SAAS,EAAC,wBAAwB,aACvC,gBAAO,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,GAAI,EACnF,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAClE,CACT,EACA,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,CAC7B,eAAK,SAAS,EAAC,4BAA4B,aACzC,gBAAO,SAAS,EAAC,OAAO,YAAE,EAAE,CAAC,oBAAoB,CAAC,GAAS,EAC1D,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAChC,iBAAuB,SAAS,EAAC,kDAAkD,wBAAqB,SAAS,aAC/G,gBAAO,IAAI,EAAC,UAAU,EAAC,OAAO,QAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,GAAI,EACzE,eAAM,SAAS,EAAC,wBAAwB,YAAE,SAAS,GAAQ,EAC3D,gBAAO,SAAS,EAAC,wBAAwB,YAAE,EAAE,CAAC,oBAAoB,CAAC,GAAS,KAHlE,SAAS,CAIb,CACT,CAAC,IACE,CACP,EACD,eAAK,SAAS,EAAC,wBAAwB,aACpC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAC3B,iBAAwB,SAAS,EAAC,wBAAwB,aACxD,gBACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EACjC,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GACvC,EACF,eAAM,SAAS,EAAC,wBAAwB,YAAE,KAAK,CAAC,IAAI,GAAQ,EAC3D,KAAK,CAAC,WAAW,IAAI,gBAAO,SAAS,EAAC,wBAAwB,YAAE,KAAK,CAAC,WAAW,GAAS,KAPjF,KAAK,CAAC,IAAI,CAQd,CACT,CAAC,EACD,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,YAAG,SAAS,EAAC,OAAO,YAAE,EAAE,CAAC,kBAAkB,CAAC,GAAK,IAC7E,IACF,EACN,eAAK,SAAS,EAAC,uBAAuB,aACpC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,WAAW,EAAC,OAAO,EAAE,KAAK,CAAC,OAAO,YAAG,EAAE,CAAC,eAAe,CAAC,GAAU,EAClG,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,mBAAmB,EAAC,QAAQ,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YACtG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,sBAAsB,CAAC,GACjD,IACL,IACD,GACA,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,95 @@
1
+ export interface SkillRow {
2
+ name: string;
3
+ displayName?: string;
4
+ description?: string;
5
+ tags?: string[];
6
+ source?: Record<string, any>;
7
+ rootDir?: string;
8
+ }
9
+ export interface NativeSkillGroup {
10
+ cliId: string;
11
+ rootDir: string;
12
+ skills: SkillRow[];
13
+ label?: string;
14
+ }
15
+ export interface BotRow {
16
+ larkAppId: string;
17
+ botName?: string;
18
+ online?: boolean;
19
+ error?: string;
20
+ skills?: SkillPolicy | null;
21
+ cliId?: string;
22
+ skillInjection?: 'global' | 'prompt' | 'off' | null;
23
+ skillInjectionDefault?: 'global' | 'prompt' | 'off' | null;
24
+ skillInjectionSupport?: 'dynamic' | 'global' | 'none' | null;
25
+ }
26
+ export interface SkillPolicy {
27
+ include?: string[];
28
+ }
29
+ export interface DashboardRequestError extends Error {
30
+ status?: number;
31
+ body?: any;
32
+ }
33
+ export interface SkillJob {
34
+ id: string;
35
+ status: 'running' | 'succeeded' | 'failed';
36
+ error?: string;
37
+ skill?: SkillRow;
38
+ skills?: SkillRow[];
39
+ }
40
+ export interface InstallSkillCandidate {
41
+ name: string;
42
+ path: string;
43
+ description?: string;
44
+ }
45
+ export type StatusMessage = {
46
+ text: string;
47
+ ok: boolean;
48
+ } | null;
49
+ export type DeliveryMode = 'auto' | 'prompt' | 'native';
50
+ export type ProjectTrustMode = 'off' | 'all';
51
+ export interface SkillRemovalReference {
52
+ name: string;
53
+ bots: string[];
54
+ packs: string[];
55
+ }
56
+ /** Cross-tab navigation intent: which tab to activate and what context to
57
+ * carry over (search prefill, focused entity, install target). Consumed once
58
+ * by the target tab. Missing skills only ever *prefill* the install entry —
59
+ * never trigger an install. */
60
+ export interface SkillsNavIntent {
61
+ tab: 'library' | 'packs' | 'bots';
62
+ /** prefill the installed-library search box */
63
+ librarySearch?: string;
64
+ /** library tab: restrict the list to this exact name set (clearable chip) */
65
+ libraryFilterSkills?: string[];
66
+ /** open the install wizard (library tab) */
67
+ openInstallWizard?: boolean;
68
+ /** preselect this skill among discovered install candidates */
69
+ installTargetSkill?: string;
70
+ /** packs tab: open this pack's editor */
71
+ focusPackId?: string;
72
+ /** packs tab: highlight these pack cards (no editor) */
73
+ focusPackIds?: string[];
74
+ /** bots tab: highlight these bots' rows */
75
+ focusBotIds?: string[];
76
+ /** bots tab: prefill palette search / highlight bots resolving this skill */
77
+ focusSkill?: string;
78
+ }
79
+ export interface SkillPackRow {
80
+ id: string;
81
+ name: string;
82
+ description?: string;
83
+ tags?: string[];
84
+ include: string[];
85
+ revision: number;
86
+ createdAt: string;
87
+ updatedAt: string;
88
+ resolvedSkills?: SkillRow[];
89
+ missingSkills?: string[];
90
+ references?: Array<{
91
+ larkAppId: string;
92
+ botName: string;
93
+ }>;
94
+ }
95
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/dashboard/web/skills/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/dashboard/web/skills/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import type { BotRow, DeliveryMode, NativeSkillGroup, ProjectTrustMode, SkillPackRow, SkillRow } from './types.js';
2
+ export interface SkillsData {
3
+ skills: SkillRow[];
4
+ nativeSkillGroups: NativeSkillGroup[];
5
+ bots: BotRow[];
6
+ /** full pack rows from /api/skill-packs — the single source for pack state */
7
+ packs: SkillPackRow[];
8
+ trustProjectSkills: ProjectTrustMode;
9
+ delivery: DeliveryMode;
10
+ loading: boolean;
11
+ loadError: string | null;
12
+ /** non-404 failure loading /api/skill-packs — previous pack data is kept */
13
+ packsError: string | null;
14
+ /** true once /api/skill-packs has answered definitively (2xx or 404).
15
+ * While false, pack-derived health is UNKNOWN: consumers must not render
16
+ * pack_missing (nor "healthy") from a never-loaded empty array. */
17
+ packsKnown: boolean;
18
+ refresh: () => Promise<void>;
19
+ /** targeted mutators for optimistic local updates after PUT/DELETE responses */
20
+ setSkills: React.Dispatch<React.SetStateAction<SkillRow[]>>;
21
+ setBots: React.Dispatch<React.SetStateAction<BotRow[]>>;
22
+ setTrustProjectSkills: React.Dispatch<React.SetStateAction<ProjectTrustMode>>;
23
+ setDelivery: React.Dispatch<React.SetStateAction<DeliveryMode>>;
24
+ }
25
+ /** Single fetch + refresh cycle for the whole skills page. All four tabs read
26
+ * from this state; no tab issues its own list fetch, so there is exactly one
27
+ * copy of skills/packs/bots and one refresh() that keeps them consistent. */
28
+ export declare function useSkillsData(options: {
29
+ apiUnavailableText: string;
30
+ }): SkillsData;
31
+ //# sourceMappingURL=use-skills-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-skills-data.d.ts","sourceRoot":"","sources":["../../../../src/dashboard/web/skills/use-skills-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,8EAA8E;IAC9E,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,4EAA4E;IAC5E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;uEAEmE;IACnE,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,gFAAgF;IAChF,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5D,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxD,qBAAqB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC9E,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;CACjE;AAED;;6EAE6E;AAC7E,wBAAgB,aAAa,CAAC,OAAO,EAAE;IAAE,kBAAkB,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CA2EjF"}
@@ -0,0 +1,86 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ /** Single fetch + refresh cycle for the whole skills page. All four tabs read
3
+ * from this state; no tab issues its own list fetch, so there is exactly one
4
+ * copy of skills/packs/bots and one refresh() that keeps them consistent. */
5
+ export function useSkillsData(options) {
6
+ const mountedRef = useRef(true);
7
+ const [skills, setSkills] = useState([]);
8
+ const [nativeSkillGroups, setNativeSkillGroups] = useState([]);
9
+ const [bots, setBots] = useState([]);
10
+ const [packs, setPacks] = useState([]);
11
+ const [trustProjectSkills, setTrustProjectSkills] = useState('off');
12
+ const [delivery, setDelivery] = useState('auto');
13
+ const [loading, setLoading] = useState(true);
14
+ const [loadError, setLoadError] = useState(null);
15
+ const [packsError, setPacksError] = useState(null);
16
+ const [packsKnown, setPacksKnown] = useState(false);
17
+ const apiUnavailableTextRef = useRef(options.apiUnavailableText);
18
+ apiUnavailableTextRef.current = options.apiUnavailableText;
19
+ const refresh = useCallback(async () => {
20
+ setLoading(true);
21
+ try {
22
+ const [skillsRes, botsRes, packsRes] = await Promise.all([
23
+ fetch('/api/skills'),
24
+ fetch('/api/bots'),
25
+ // Older daemons may not expose skill packs; treat that as "no packs".
26
+ fetch('/api/skill-packs').catch(() => null),
27
+ ]);
28
+ const skillsBody = await skillsRes.json().catch(() => ({}));
29
+ const botsBody = await botsRes.json().catch(() => ({}));
30
+ const packsBody = packsRes ? await packsRes.json().catch(() => ({})) : {};
31
+ if (!skillsRes.ok) {
32
+ const error = skillsBody?.error ?? `skills HTTP ${skillsRes.status}`;
33
+ throw new Error(error === 'not_found_yet' || error === 'not_found' ? apiUnavailableTextRef.current : error);
34
+ }
35
+ if (!botsRes.ok)
36
+ throw new Error(botsBody?.error ?? `bots HTTP ${botsRes.status}`);
37
+ if (!mountedRef.current)
38
+ return;
39
+ setSkills(Array.isArray(skillsBody.skills) ? skillsBody.skills : []);
40
+ setNativeSkillGroups(Array.isArray(skillsBody.nativeSkillGroups) ? skillsBody.nativeSkillGroups : []);
41
+ setBots(Array.isArray(botsBody.bots) ? botsBody.bots : []);
42
+ // Pack failure semantics: only an explicit 404 (older daemon without the
43
+ // pack API) means "no packs". Any other failure (network, 401/403, 5xx)
44
+ // keeps the previous pack data and surfaces packsError — otherwise the
45
+ // graph would misreport every `pack:` reference as pack_missing.
46
+ if (packsRes?.ok && Array.isArray(packsBody.packs)) {
47
+ setPacks(packsBody.packs);
48
+ setPacksError(null);
49
+ setPacksKnown(true);
50
+ }
51
+ else if (packsRes?.status === 404) {
52
+ setPacks([]);
53
+ setPacksError(null);
54
+ setPacksKnown(true);
55
+ }
56
+ else {
57
+ // packsKnown deliberately untouched: false if packs never loaded (first
58
+ // request failed → health must read "unknown"), true if a refresh
59
+ // failed after a successful load (previous data stays authoritative).
60
+ setPacksError(packsRes ? (packsBody?.error ?? `HTTP ${packsRes.status}`) : 'network_error');
61
+ }
62
+ setTrustProjectSkills(skillsBody.trustProjectSkills === 'all' ? 'all' : 'off');
63
+ setDelivery(skillsBody.delivery === 'prompt' || skillsBody.delivery === 'native' ? skillsBody.delivery : 'auto');
64
+ setLoadError(null);
65
+ }
66
+ catch (err) {
67
+ if (mountedRef.current)
68
+ setLoadError(err?.message ?? String(err));
69
+ }
70
+ finally {
71
+ if (mountedRef.current)
72
+ setLoading(false);
73
+ }
74
+ }, []);
75
+ useEffect(() => {
76
+ mountedRef.current = true;
77
+ void refresh();
78
+ return () => { mountedRef.current = false; };
79
+ }, [refresh]);
80
+ return {
81
+ skills, nativeSkillGroups, bots, packs, trustProjectSkills, delivery,
82
+ loading, loadError, packsError, packsKnown, refresh,
83
+ setSkills, setBots, setTrustProjectSkills, setDelivery,
84
+ };
85
+ }
86
+ //# sourceMappingURL=use-skills-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-skills-data.js","sourceRoot":"","sources":["../../../../src/dashboard/web/skills/use-skills-data.ts"],"names":[],"mappings":"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"}
@@ -1,41 +1,24 @@
1
1
  import type React from 'react';
2
+ import { type ReactNode } from 'react';
2
3
  import { type PageDisposer } from './react-mount.js';
3
- interface SkillRow {
4
- name: string;
5
- displayName?: string;
6
- description?: string;
7
- tags?: string[];
8
- source?: Record<string, any>;
9
- rootDir?: string;
10
- }
11
- interface BotRow {
12
- larkAppId: string;
13
- botName?: string;
14
- online?: boolean;
15
- error?: string;
16
- skills?: SkillPolicy | null;
17
- }
18
- interface SkillPolicy {
19
- include?: string[];
20
- }
21
- interface InstallSkillCandidate {
22
- name: string;
23
- path: string;
24
- description?: string;
25
- }
26
- type StatusMessage = {
27
- text: string;
28
- ok: boolean;
29
- } | null;
30
- interface SkillRemovalReference {
31
- name: string;
32
- bots: string[];
33
- }
4
+ import type { BotRow, InstallSkillCandidate, SkillRemovalReference, SkillRow, StatusMessage } from './skills/types.js';
5
+ export declare function SkillSegmented<T extends string>(props: {
6
+ value: T;
7
+ options: Array<{
8
+ value: T;
9
+ label: ReactNode;
10
+ help?: ReactNode;
11
+ }>;
12
+ disabled?: boolean;
13
+ onChange(value: T): void;
14
+ }): React.JSX.Element;
34
15
  interface SkillsInstallPanelProps {
35
16
  showTitle?: boolean;
36
17
  installSource: string;
37
18
  installPath: string;
38
19
  installRef: string;
20
+ installFullDepth: boolean;
21
+ installTargetSkill?: string | null;
39
22
  installStatus: StatusMessage;
40
23
  installBusy: boolean;
41
24
  installDiscovering?: boolean;
@@ -45,6 +28,8 @@ interface SkillsInstallPanelProps {
45
28
  onInstallSourceChange: (value: string) => void;
46
29
  onInstallPathChange: (value: string) => void;
47
30
  onInstallRefChange: (value: string) => void;
31
+ onInstallFullDepthChange: (value: boolean) => void;
32
+ onClearInstallTarget?: () => void;
48
33
  onToggleInstallSkill?: (name: string) => void;
49
34
  onSelectAllInstallSkills?: (selected: boolean) => void;
50
35
  onConfirmInstallSelection?: () => void;
@@ -60,6 +45,21 @@ export declare function InstalledSkillsLibrary(props: {
60
45
  status: StatusMessage;
61
46
  onUpdate(name: string): void;
62
47
  onRequestRemove(names: string[]): void;
48
+ /** search prefill arriving from a cross-tab navigation */
49
+ externalQuery?: string | null;
50
+ /** exact-name filter arriving from a cross-tab navigation (clearable) */
51
+ externalFilterNames?: string[] | null;
52
+ /** false = pack data never loaded; pack usage counts are unknown, not 0 */
53
+ packsKnown?: boolean;
54
+ /** open the install wizard prefilled for a filtered-but-missing skill */
55
+ onInstallMissing?: (name: string) => void;
56
+ graph?: import('./skills/shared.js').SkillGraph;
57
+ packNames?: Array<{
58
+ id: string;
59
+ name: string;
60
+ }>;
61
+ onShowSkillPacks?: (name: string) => void;
62
+ onShowSkillBots?: (name: string) => void;
63
63
  }): React.JSX.Element;
64
64
  export declare function RemoveSkillsDialog(props: {
65
65
  names: string[] | null;
@@ -69,6 +69,9 @@ export declare function RemoveSkillsDialog(props: {
69
69
  onCancel(): void;
70
70
  onConfirm(force: boolean): void;
71
71
  }): React.JSX.Element;
72
+ /** Exported for tests (cross-tab navigation integration). Mounted in the app
73
+ * via renderSkillsPage below. */
74
+ export declare function SkillsPage(): React.JSX.Element;
72
75
  export declare function SkillMultiPicker(props: {
73
76
  botId: string;
74
77
  names: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"skills-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/skills-page.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/skills-page.tsx"],"names":[],"mappings":"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"}