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.
- package/dist/.runtime-build-id +1 -1
- package/dist/adapters/backend/riff-backend.d.ts +18 -0
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +143 -0
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/cli/kimi.d.ts.map +1 -1
- package/dist/adapters/cli/kimi.js +22 -8
- package/dist/adapters/cli/kimi.js.map +1 -1
- package/dist/adapters/cli/pi.d.ts.map +1 -1
- package/dist/adapters/cli/pi.js +3 -1
- package/dist/adapters/cli/pi.js.map +1 -1
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +4 -1
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +65 -27
- package/dist/cli.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +16 -2
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.js +1 -1
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +17 -1
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +13 -1
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/maintenance.d.ts.map +1 -1
- package/dist/core/maintenance.js +5 -0
- package/dist/core/maintenance.js.map +1 -1
- package/dist/core/skills/cli-admin-command.d.ts.map +1 -1
- package/dist/core/skills/cli-admin-command.js +142 -3
- package/dist/core/skills/cli-admin-command.js.map +1 -1
- package/dist/core/skills/frontmatter.d.ts.map +1 -1
- package/dist/core/skills/frontmatter.js +44 -7
- package/dist/core/skills/frontmatter.js.map +1 -1
- package/dist/core/skills/im-command.d.ts +6 -0
- package/dist/core/skills/im-command.d.ts.map +1 -1
- package/dist/core/skills/im-command.js +34 -7
- package/dist/core/skills/im-command.js.map +1 -1
- package/dist/core/skills/install-command.d.ts +4 -0
- package/dist/core/skills/install-command.d.ts.map +1 -0
- package/dist/core/skills/install-command.js +89 -0
- package/dist/core/skills/install-command.js.map +1 -0
- package/dist/core/skills/package.d.ts.map +1 -1
- package/dist/core/skills/package.js +10 -3
- package/dist/core/skills/package.js.map +1 -1
- package/dist/core/skills/policy.d.ts +5 -1
- package/dist/core/skills/policy.d.ts.map +1 -1
- package/dist/core/skills/policy.js +66 -3
- package/dist/core/skills/policy.js.map +1 -1
- package/dist/core/skills/references.d.ts +9 -1
- package/dist/core/skills/references.d.ts.map +1 -1
- package/dist/core/skills/references.js +35 -2
- package/dist/core/skills/references.js.map +1 -1
- package/dist/core/skills/registry-paths.d.ts +1 -0
- package/dist/core/skills/registry-paths.d.ts.map +1 -1
- package/dist/core/skills/registry-paths.js +3 -0
- package/dist/core/skills/registry-paths.js.map +1 -1
- package/dist/core/skills/session-resolver.d.ts +2 -1
- package/dist/core/skills/session-resolver.d.ts.map +1 -1
- package/dist/core/skills/session-resolver.js +1 -0
- package/dist/core/skills/session-resolver.js.map +1 -1
- package/dist/core/skills/session-runtime.d.ts.map +1 -1
- package/dist/core/skills/session-runtime.js +2 -0
- package/dist/core/skills/session-runtime.js.map +1 -1
- package/dist/core/skills/sources.d.ts +23 -0
- package/dist/core/skills/sources.d.ts.map +1 -1
- package/dist/core/skills/sources.js +128 -12
- package/dist/core/skills/sources.js.map +1 -1
- package/dist/core/skills/types.d.ts +22 -1
- package/dist/core/skills/types.d.ts.map +1 -1
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +52 -1
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/bot-onboarding.js +2 -114
- package/dist/dashboard/bot-onboarding.js.map +1 -1
- package/dist/dashboard/connector-api.d.ts.map +1 -1
- package/dist/dashboard/connector-api.js +66 -6
- package/dist/dashboard/connector-api.js.map +1 -1
- package/dist/dashboard/public-redact.d.ts.map +1 -1
- package/dist/dashboard/public-redact.js +3 -0
- package/dist/dashboard/public-redact.js.map +1 -1
- package/dist/dashboard/skill-install-request.js +10 -11
- package/dist/dashboard/skill-install-request.js.map +1 -1
- package/dist/dashboard/skill-pack-response.d.ts +15 -0
- package/dist/dashboard/skill-pack-response.d.ts.map +1 -0
- package/dist/dashboard/skill-pack-response.js +32 -0
- package/dist/dashboard/skill-pack-response.js.map +1 -0
- package/dist/dashboard/web/connectors-page.d.ts +69 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +47 -7
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +301 -26
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/preferences.d.ts +4 -2
- package/dist/dashboard/web/preferences.d.ts.map +1 -1
- package/dist/dashboard/web/preferences.js +14 -6
- package/dist/dashboard/web/preferences.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +99 -3
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts +3 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +13 -6
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/skills/bot-assignments-tab.d.ts +27 -0
- package/dist/dashboard/web/skills/bot-assignments-tab.d.ts.map +1 -0
- package/dist/dashboard/web/skills/bot-assignments-tab.js +257 -0
- package/dist/dashboard/web/skills/bot-assignments-tab.js.map +1 -0
- package/dist/dashboard/web/skills/delivery-settings-tab.d.ts +25 -0
- package/dist/dashboard/web/skills/delivery-settings-tab.d.ts.map +1 -0
- package/dist/dashboard/web/skills/delivery-settings-tab.js +20 -0
- package/dist/dashboard/web/skills/delivery-settings-tab.js.map +1 -0
- package/dist/dashboard/web/skills/shared.d.ts +86 -0
- package/dist/dashboard/web/skills/shared.d.ts.map +1 -0
- package/dist/dashboard/web/skills/shared.js +178 -0
- package/dist/dashboard/web/skills/shared.js.map +1 -0
- package/dist/dashboard/web/skills/skill-library-tab.d.ts +75 -0
- package/dist/dashboard/web/skills/skill-library-tab.d.ts.map +1 -0
- package/dist/dashboard/web/skills/skill-library-tab.js +108 -0
- package/dist/dashboard/web/skills/skill-library-tab.js.map +1 -0
- package/dist/dashboard/web/skills/skill-packs-tab.d.ts +21 -0
- package/dist/dashboard/web/skills/skill-packs-tab.d.ts.map +1 -0
- package/dist/dashboard/web/skills/skill-packs-tab.js +185 -0
- package/dist/dashboard/web/skills/skill-packs-tab.js.map +1 -0
- package/dist/dashboard/web/skills/types.d.ts +95 -0
- package/dist/dashboard/web/skills/types.d.ts.map +1 -0
- package/dist/dashboard/web/skills/types.js +2 -0
- package/dist/dashboard/web/skills/types.js.map +1 -0
- package/dist/dashboard/web/skills/use-skills-data.d.ts +31 -0
- package/dist/dashboard/web/skills/use-skills-data.d.ts.map +1 -0
- package/dist/dashboard/web/skills/use-skills-data.js +86 -0
- package/dist/dashboard/web/skills/use-skills-data.js.map +1 -0
- package/dist/dashboard/web/skills-page.d.ts +34 -31
- package/dist/dashboard/web/skills-page.d.ts.map +1 -1
- package/dist/dashboard/web/skills-page.js +321 -176
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/webhook-routes.d.ts +18 -0
- package/dist/dashboard/webhook-routes.d.ts.map +1 -1
- package/dist/dashboard/webhook-routes.js +35 -1
- package/dist/dashboard/webhook-routes.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/{bot-defaults-page-USC6EZXP.js → bot-defaults-page-HL655CNR.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-KOPISPHN.js → chunk-5PAYQ3KT.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-RXRJB5SO.js → chunk-5ZL7NLR5.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-A7VC4BXR.js → chunk-BFUTTYVK.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-ELL53D62.js +55 -0
- package/dist/dashboard-web/chunks/connectors-page-3QQACF23.js +1 -0
- package/dist/dashboard-web/chunks/{groups-page-C6NSDTIN.js → groups-page-SDZMJ7UV.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-UTOVYLLY.js → insights-page-ZZ3JEJ6L.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-UKTJYTA2.js → monitor-room-ROJ5GZ4N.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-Q3CEZIVX.js → monitoring-page-IATV7KJF.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-GYCZOOVJ.js → office-page-TYO5OIIT.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-W2VBJ6OH.js → overview-page-VJUULZF2.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-U4SHER4K.js → roles-page-7RJJKZGK.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-TNPW3N3Q.js → schedules-page-JTEJ5IXW.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-KD7HDT3U.js +8 -0
- package/dist/dashboard-web/chunks/{settings-page-VKW5ZK5K.js → settings-page-7CTTFBRS.js} +1 -1
- package/dist/dashboard-web/chunks/skills-page-57NZECJ3.js +4 -0
- package/dist/dashboard-web/chunks/{team-federation-page-OMFGGBT2.js → team-federation-page-6YYIMJG3.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-PLXWK4KO.js → v3-page-ZGKBSBK3.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-NJQOEO2P.js → whiteboards-page-AACJF6DB.js} +1 -1
- package/dist/dashboard-web/style.css +1623 -160
- package/dist/dashboard.js +200 -16
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +2 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +2 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/index-daemon.js +6 -1
- package/dist/index-daemon.js.map +1 -1
- package/dist/services/connector-store.d.ts +14 -1
- package/dist/services/connector-store.d.ts.map +1 -1
- package/dist/services/connector-store.js.map +1 -1
- package/dist/services/connector-topic-template.d.ts +7 -0
- package/dist/services/connector-topic-template.d.ts.map +1 -0
- package/dist/services/connector-topic-template.js +210 -0
- package/dist/services/connector-topic-template.js.map +1 -0
- package/dist/services/project-scanner.d.ts +33 -0
- package/dist/services/project-scanner.d.ts.map +1 -1
- package/dist/services/project-scanner.js +40 -1
- package/dist/services/project-scanner.js.map +1 -1
- package/dist/services/skill-pack-store.d.ts +50 -0
- package/dist/services/skill-pack-store.d.ts.map +1 -0
- package/dist/services/skill-pack-store.js +270 -0
- package/dist/services/skill-pack-store.js.map +1 -0
- package/dist/services/skill-registry-store.d.ts +8 -0
- package/dist/services/skill-registry-store.d.ts.map +1 -1
- package/dist/services/skill-registry-store.js +100 -68
- package/dist/services/skill-registry-store.js.map +1 -1
- package/dist/services/todo-state.d.ts +74 -0
- package/dist/services/todo-state.d.ts.map +1 -0
- package/dist/services/todo-state.js +351 -0
- package/dist/services/todo-state.js.map +1 -0
- package/dist/setup/agent-preset.d.ts.map +1 -1
- package/dist/setup/agent-preset.js +2 -0
- package/dist/setup/agent-preset.js.map +1 -1
- package/dist/setup/owner-identity.d.ts +47 -0
- package/dist/setup/owner-identity.d.ts.map +1 -0
- package/dist/setup/owner-identity.js +196 -0
- package/dist/setup/owner-identity.js.map +1 -0
- package/dist/setup/register-app.d.ts +4 -3
- package/dist/setup/register-app.d.ts.map +1 -1
- package/dist/setup/register-app.js.map +1 -1
- package/dist/setup/setup-args.d.ts +1 -1
- package/dist/setup/setup-args.d.ts.map +1 -1
- package/dist/setup/setup-args.js +7 -3
- package/dist/setup/setup-args.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/child-env.d.ts +25 -0
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +47 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/worker.js +55 -16
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +44 -44
- package/package.json +1 -1
- package/dist/dashboard-web/chunks/chunk-M6BHWQFO.js +0 -51
- package/dist/dashboard-web/chunks/connectors-page-4Z76HWRH.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-YWWDDV57.js +0 -6
- 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":"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"}
|
|
@@ -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 @@
|
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"skills-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/skills-page.tsx"],"names":[],"mappings":"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"}
|