botmux 2.88.1 → 2.90.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +3 -3
- package/README.md +3 -3
- package/dist/bot-registry.d.ts +2 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +4 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/dashboard-endpoint.d.ts.map +1 -1
- package/dist/cli/dashboard-endpoint.js +9 -3
- package/dist/cli/dashboard-endpoint.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +11 -3
- package/dist/cli.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +9 -1
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-command/groups.d.ts +20 -0
- package/dist/core/dashboard-command/groups.d.ts.map +1 -0
- package/dist/core/dashboard-command/groups.js +52 -0
- package/dist/core/dashboard-command/groups.js.map +1 -0
- package/dist/core/dashboard-command/index.d.ts +30 -0
- package/dist/core/dashboard-command/index.d.ts.map +1 -0
- package/dist/core/dashboard-command/index.js +81 -0
- package/dist/core/dashboard-command/index.js.map +1 -0
- package/dist/core/dashboard-command/overview.d.ts +29 -0
- package/dist/core/dashboard-command/overview.d.ts.map +1 -0
- package/dist/core/dashboard-command/overview.js +61 -0
- package/dist/core/dashboard-command/overview.js.map +1 -0
- package/dist/core/dashboard-command/owner-gate.d.ts +41 -0
- package/dist/core/dashboard-command/owner-gate.d.ts.map +1 -0
- package/dist/core/dashboard-command/owner-gate.js +40 -0
- package/dist/core/dashboard-command/owner-gate.js.map +1 -0
- package/dist/core/dashboard-command/schedules.d.ts +20 -0
- package/dist/core/dashboard-command/schedules.d.ts.map +1 -0
- package/dist/core/dashboard-command/schedules.js +47 -0
- package/dist/core/dashboard-command/schedules.js.map +1 -0
- package/dist/core/dashboard-command/sessions.d.ts +22 -0
- package/dist/core/dashboard-command/sessions.d.ts.map +1 -0
- package/dist/core/dashboard-command/sessions.js +43 -0
- package/dist/core/dashboard-command/sessions.js.map +1 -0
- package/dist/core/dashboard-command/settings.d.ts +21 -0
- package/dist/core/dashboard-command/settings.d.ts.map +1 -0
- package/dist/core/dashboard-command/settings.js +55 -0
- package/dist/core/dashboard-command/settings.js.map +1 -0
- package/dist/core/dashboard-command/stub.d.ts +16 -0
- package/dist/core/dashboard-command/stub.d.ts.map +1 -0
- package/dist/core/dashboard-command/stub.js +28 -0
- package/dist/core/dashboard-command/stub.js.map +1 -0
- package/dist/core/dashboard-command/workflows.d.ts +20 -0
- package/dist/core/dashboard-command/workflows.d.ts.map +1 -0
- package/dist/core/dashboard-command/workflows.js +45 -0
- package/dist/core/dashboard-command/workflows.js.map +1 -0
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +1 -1
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/skills/discovery.d.ts +16 -0
- package/dist/core/skills/discovery.d.ts.map +1 -1
- package/dist/core/skills/discovery.js +48 -2
- package/dist/core/skills/discovery.js.map +1 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +9 -2
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon-internal-client-wrapper.d.ts +41 -0
- package/dist/daemon-internal-client-wrapper.d.ts.map +1 -0
- package/dist/daemon-internal-client-wrapper.js +65 -0
- package/dist/daemon-internal-client-wrapper.js.map +1 -0
- package/dist/dashboard/aggregator.d.ts +12 -0
- package/dist/dashboard/aggregator.d.ts.map +1 -1
- package/dist/dashboard/aggregator.js +16 -0
- package/dist/dashboard/aggregator.js.map +1 -1
- package/dist/dashboard/auth.d.ts +7 -0
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +21 -0
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/card-model-types.d.ts +50 -0
- package/dist/dashboard/card-model-types.d.ts.map +1 -0
- package/dist/dashboard/card-model-types.js +9 -0
- package/dist/dashboard/card-model-types.js.map +1 -0
- package/dist/dashboard/daemon-internal-api.d.ts +90 -0
- package/dist/dashboard/daemon-internal-api.d.ts.map +1 -0
- package/dist/dashboard/daemon-internal-api.js +534 -0
- package/dist/dashboard/daemon-internal-api.js.map +1 -0
- package/dist/dashboard/daemon-internal-auth.d.ts +124 -0
- package/dist/dashboard/daemon-internal-auth.d.ts.map +1 -0
- package/dist/dashboard/daemon-internal-auth.js +188 -0
- package/dist/dashboard/daemon-internal-auth.js.map +1 -0
- package/dist/dashboard/daemon-internal-client.d.ts +67 -0
- package/dist/dashboard/daemon-internal-client.d.ts.map +1 -0
- package/dist/dashboard/daemon-internal-client.js +157 -0
- package/dist/dashboard/daemon-internal-client.js.map +1 -0
- package/dist/dashboard/dashboard-admins.d.ts +8 -0
- package/dist/dashboard/dashboard-admins.d.ts.map +1 -0
- package/dist/dashboard/dashboard-admins.js +15 -0
- package/dist/dashboard/dashboard-admins.js.map +1 -0
- package/dist/dashboard/federation-spoke-api.d.ts +3 -0
- package/dist/dashboard/federation-spoke-api.d.ts.map +1 -1
- package/dist/dashboard/federation-spoke-api.js +11 -8
- package/dist/dashboard/federation-spoke-api.js.map +1 -1
- package/dist/dashboard/groups-action-helpers.d.ts +69 -0
- package/dist/dashboard/groups-action-helpers.d.ts.map +1 -0
- package/dist/dashboard/groups-action-helpers.js +141 -0
- package/dist/dashboard/groups-action-helpers.js.map +1 -0
- package/dist/dashboard/groups-card-model.d.ts +120 -0
- package/dist/dashboard/groups-card-model.d.ts.map +1 -0
- package/dist/dashboard/groups-card-model.js +175 -0
- package/dist/dashboard/groups-card-model.js.map +1 -0
- package/dist/dashboard/schedule-card-model.d.ts +172 -0
- package/dist/dashboard/schedule-card-model.d.ts.map +1 -0
- package/dist/dashboard/schedule-card-model.js +290 -0
- package/dist/dashboard/schedule-card-model.js.map +1 -0
- package/dist/dashboard/session-card-model.d.ts +83 -0
- package/dist/dashboard/session-card-model.d.ts.map +1 -0
- package/dist/dashboard/session-card-model.js +196 -0
- package/dist/dashboard/session-card-model.js.map +1 -0
- package/dist/dashboard/settings-card-model.d.ts +73 -0
- package/dist/dashboard/settings-card-model.d.ts.map +1 -0
- package/dist/dashboard/settings-card-model.js +94 -0
- package/dist/dashboard/settings-card-model.js.map +1 -0
- package/dist/dashboard/settings-owner-resolver.d.ts +32 -0
- package/dist/dashboard/settings-owner-resolver.d.ts.map +1 -0
- package/dist/dashboard/settings-owner-resolver.js +43 -0
- package/dist/dashboard/settings-owner-resolver.js.map +1 -0
- package/dist/dashboard/settings-write-applier.d.ts +84 -0
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -0
- package/dist/dashboard/settings-write-applier.js +119 -0
- package/dist/dashboard/settings-write-applier.js.map +1 -0
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +60 -2
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/insights.d.ts.map +1 -1
- package/dist/dashboard/web/insights.js +514 -68
- package/dist/dashboard/web/insights.js.map +1 -1
- package/dist/dashboard/web/skills.d.ts.map +1 -1
- package/dist/dashboard/web/skills.js +1 -1
- package/dist/dashboard/web/skills.js.map +1 -1
- package/dist/dashboard/web/whiteboards.js +3 -3
- package/dist/dashboard/workflow-api.d.ts.map +1 -1
- package/dist/dashboard/workflow-api.js +38 -119
- package/dist/dashboard/workflow-api.js.map +1 -1
- package/dist/dashboard/workflow-card-model.d.ts +127 -0
- package/dist/dashboard/workflow-card-model.d.ts.map +1 -0
- package/dist/dashboard/workflow-card-model.js +186 -0
- package/dist/dashboard/workflow-card-model.js.map +1 -0
- package/dist/dashboard/workflows-action-helpers.d.ts +105 -0
- package/dist/dashboard/workflows-action-helpers.d.ts.map +1 -0
- package/dist/dashboard/workflows-action-helpers.js +196 -0
- package/dist/dashboard/workflows-action-helpers.js.map +1 -0
- package/dist/dashboard-web/app.js +883 -795
- package/dist/dashboard-web/style.css +105 -3
- package/dist/dashboard.js +196 -269
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +266 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +266 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +2 -0
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +2 -1
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +54 -2
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +127 -1
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +22 -0
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/groups-card.d.ts +90 -0
- package/dist/im/lark/groups-card.d.ts.map +1 -0
- package/dist/im/lark/groups-card.js +832 -0
- package/dist/im/lark/groups-card.js.map +1 -0
- package/dist/im/lark/overview-card.d.ts +101 -0
- package/dist/im/lark/overview-card.d.ts.map +1 -0
- package/dist/im/lark/overview-card.js +475 -0
- package/dist/im/lark/overview-card.js.map +1 -0
- package/dist/im/lark/schedules-card.d.ts +96 -0
- package/dist/im/lark/schedules-card.d.ts.map +1 -0
- package/dist/im/lark/schedules-card.js +892 -0
- package/dist/im/lark/schedules-card.js.map +1 -0
- package/dist/im/lark/sessions-card.d.ts +117 -0
- package/dist/im/lark/sessions-card.d.ts.map +1 -0
- package/dist/im/lark/sessions-card.js +870 -0
- package/dist/im/lark/sessions-card.js.map +1 -0
- package/dist/im/lark/settings-card.d.ts +125 -0
- package/dist/im/lark/settings-card.d.ts.map +1 -0
- package/dist/im/lark/settings-card.js +433 -0
- package/dist/im/lark/settings-card.js.map +1 -0
- package/dist/im/lark/workflows-card.d.ts +102 -0
- package/dist/im/lark/workflows-card.d.ts.map +1 -0
- package/dist/im/lark/workflows-card.js +737 -0
- package/dist/im/lark/workflows-card.js.map +1 -0
- package/dist/services/insight/classify.d.ts +2 -0
- package/dist/services/insight/classify.d.ts.map +1 -1
- package/dist/services/insight/classify.js +25 -0
- package/dist/services/insight/classify.js.map +1 -1
- package/dist/services/insight/claude-span-reader.d.ts.map +1 -1
- package/dist/services/insight/claude-span-reader.js +7 -4
- package/dist/services/insight/claude-span-reader.js.map +1 -1
- package/dist/services/insight/report.d.ts.map +1 -1
- package/dist/services/insight/report.js +102 -23
- package/dist/services/insight/report.js.map +1 -1
- package/dist/services/insight/subagent-reader.d.ts +19 -0
- package/dist/services/insight/subagent-reader.d.ts.map +1 -0
- package/dist/services/insight/subagent-reader.js +111 -0
- package/dist/services/insight/subagent-reader.js.map +1 -0
- package/dist/services/insight/types.d.ts +43 -0
- package/dist/services/insight/types.d.ts.map +1 -1
- package/dist/services/insight/types.js.map +1 -1
- package/dist/skills/definitions.d.ts +8 -0
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +8 -2
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/installer.d.ts +15 -0
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +39 -1
- package/dist/skills/installer.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/dashboard settings` sub-handler.
|
|
3
|
+
*
|
|
4
|
+
* The command-level admin gate has already passed. This handler fetches the
|
|
5
|
+
* live settings snapshot, projects it into a Feishu card, and DMs the invoking
|
|
6
|
+
* admin. The topic receives only a confirmation line. The card builder never
|
|
7
|
+
* receives sender union identity; `invokerOpenId` is the admin open_id used by
|
|
8
|
+
* callback invoker-lock.
|
|
9
|
+
*/
|
|
10
|
+
import { localeForBot, t } from '../../i18n/index.js';
|
|
11
|
+
import { composeSections } from '../../dashboard/settings-card-model.js';
|
|
12
|
+
import { buildSettingsCard } from '../../im/lark/settings-card.js';
|
|
13
|
+
import { createDaemonClientFor } from '../../daemon-internal-client-wrapper.js';
|
|
14
|
+
import { sendUserMessage as defaultSendUserMessage } from '../../im/lark/client.js';
|
|
15
|
+
export async function handleDashboardSettings(message, _args, rootId, _chatId, deps, larkAppId, adminOpenId, testDeps = {}) {
|
|
16
|
+
if (!larkAppId)
|
|
17
|
+
return;
|
|
18
|
+
const locale = testDeps.locale ?? localeForBot(larkAppId);
|
|
19
|
+
const client = (testDeps.createClient ?? createDaemonClientFor)(larkAppId);
|
|
20
|
+
let snap;
|
|
21
|
+
try {
|
|
22
|
+
snap = await client.request({ method: 'GET', path: '/__daemon/settings-snapshot' });
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
await deps.sessionReply(rootId, t('card.dashboard.settings.snapshot_failed', { reason: e?.message ?? String(e) }, locale), undefined, larkAppId);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (snap.status !== 200) {
|
|
29
|
+
await deps.sessionReply(rootId, t('card.dashboard.settings.snapshot_failed', { reason: `http_${snap.status}` }, locale), undefined, larkAppId);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const settings = snap.body?.settings;
|
|
33
|
+
if (!settings || typeof settings !== 'object') {
|
|
34
|
+
await deps.sessionReply(rootId, t('card.dashboard.settings.snapshot_failed', { reason: 'malformed_body' }, locale), undefined, larkAppId);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const dto = composeSections(settings, { canWrite: true });
|
|
38
|
+
// invokerOpenId doubles as the callback invoker-lock anchor.
|
|
39
|
+
const cardJson = buildSettingsCard(dto, {
|
|
40
|
+
invokerOpenId: adminOpenId,
|
|
41
|
+
locale,
|
|
42
|
+
canWrite: true,
|
|
43
|
+
});
|
|
44
|
+
// DM the card to the bot admin; the topic gets only a
|
|
45
|
+
// short confirmation. Matches `/card` (cmd.config.card_dmd) idiom.
|
|
46
|
+
const sendUserMessage = testDeps.sendUserMessage ?? defaultSendUserMessage;
|
|
47
|
+
try {
|
|
48
|
+
await sendUserMessage(larkAppId, adminOpenId, cardJson, 'interactive');
|
|
49
|
+
await deps.sessionReply(rootId, t('card.dashboard.settings.dm_sent', undefined, locale), undefined, larkAppId);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
await deps.sessionReply(rootId, t('card.dashboard.settings.dm_failed', { reason: e?.message ?? String(e) }, locale), undefined, larkAppId);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/core/dashboard-command/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,YAAY,EAAE,CAAC,EAAe,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,eAAe,IAAI,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAWpF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAoB,EACpB,KAAa,EACb,MAAc,EACd,OAAe,EACf,IAAwB,EACxB,SAA6B,EAC7B,WAAmB,EACnB,WAAyC,EAAE;IAE3C,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,MAAM,MAAM,GAAW,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,IAAI,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC,CAAC;IACtF,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,YAAY,CACrB,MAAM,EACN,CAAC,CAAC,yCAAyC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EACzF,SAAS,EAAE,SAAS,CACrB,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,YAAY,CACrB,MAAM,EACN,CAAC,CAAC,yCAAyC,EAAE,EAAE,MAAM,EAAE,QAAQ,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,EACvF,SAAS,EAAE,SAAS,CACrB,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAI,IAAI,CAAC,IAA+B,EAAE,QAAQ,CAAC;IACjE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,YAAY,CACrB,MAAM,EACN,CAAC,CAAC,yCAAyC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,MAAM,CAAC,EAClF,SAAS,EAAE,SAAS,CACrB,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,eAAe,CAAC,QAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,EAAE;QACtC,aAAa,EAAE,WAAW;QAC1B,MAAM;QACN,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,sDAAsD;IACtD,mEAAmE;IACnE,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe,IAAI,sBAAsB,CAAC;IAC3E,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACvE,MAAM,IAAI,CAAC,YAAY,CACrB,MAAM,EACN,CAAC,CAAC,iCAAiC,EAAE,SAAS,EAAE,MAAM,CAAC,EACvD,SAAS,EAAE,SAAS,CACrB,CAAC;IACJ,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,YAAY,CACrB,MAAM,EACN,CAAC,CAAC,mCAAmC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EACnF,SAAS,EAAE,SAAS,CACrB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/dashboard <module>` module registry, help text, and fallback replies.
|
|
3
|
+
*
|
|
4
|
+
* The concrete handlers live in sibling files. `buildStubText` remains as a
|
|
5
|
+
* defensive fallback for future modules or partial refactors.
|
|
6
|
+
*/
|
|
7
|
+
import { type Locale } from '../../i18n/index.js';
|
|
8
|
+
export type DashboardModule = 'overview' | 'sessions' | 'workflows' | 'groups' | 'schedules' | 'settings';
|
|
9
|
+
export declare const DASHBOARD_MODULES: ReadonlyArray<DashboardModule>;
|
|
10
|
+
/** Build the localised `not_implemented_yet` text for a given module. */
|
|
11
|
+
export declare function buildStubText(module: DashboardModule, locale: Locale): string;
|
|
12
|
+
/** Build the localised help text. */
|
|
13
|
+
export declare function buildHelpText(locale: Locale, opts?: {
|
|
14
|
+
unknownModule?: string;
|
|
15
|
+
}): string;
|
|
16
|
+
//# sourceMappingURL=stub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stub.d.ts","sourceRoot":"","sources":["../../../src/core/dashboard-command/stub.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAK,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,UAAU,GACV,WAAW,GACX,QAAQ,GACR,WAAW,GACX,UAAU,CAAC;AAEf,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,eAAe,CAO5D,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,qCAAqC;AACrC,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC,MAAM,CAMR"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/dashboard <module>` module registry, help text, and fallback replies.
|
|
3
|
+
*
|
|
4
|
+
* The concrete handlers live in sibling files. `buildStubText` remains as a
|
|
5
|
+
* defensive fallback for future modules or partial refactors.
|
|
6
|
+
*/
|
|
7
|
+
import { t } from '../../i18n/index.js';
|
|
8
|
+
export const DASHBOARD_MODULES = [
|
|
9
|
+
'overview',
|
|
10
|
+
'sessions',
|
|
11
|
+
'workflows',
|
|
12
|
+
'groups',
|
|
13
|
+
'schedules',
|
|
14
|
+
'settings',
|
|
15
|
+
];
|
|
16
|
+
/** Build the localised `not_implemented_yet` text for a given module. */
|
|
17
|
+
export function buildStubText(module, locale) {
|
|
18
|
+
return t(`card.dashboard.${module}.not_implemented_yet`, undefined, locale);
|
|
19
|
+
}
|
|
20
|
+
/** Build the localised help text. */
|
|
21
|
+
export function buildHelpText(locale, opts = {}) {
|
|
22
|
+
if (opts.unknownModule) {
|
|
23
|
+
return t('card.dashboard.help.unknown_module', { module: opts.unknownModule }, locale)
|
|
24
|
+
+ '\n\n' + t('card.dashboard.help.body', undefined, locale);
|
|
25
|
+
}
|
|
26
|
+
return t('card.dashboard.help.body', undefined, locale);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=stub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stub.js","sourceRoot":"","sources":["../../../src/core/dashboard-command/stub.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAe,MAAM,qBAAqB,CAAC;AAUrD,MAAM,CAAC,MAAM,iBAAiB,GAAmC;IAC/D,UAAU;IACV,UAAU;IACV,WAAW;IACX,QAAQ;IACR,WAAW;IACX,UAAU;CACX,CAAC;AAEF,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,MAAuB,EAAE,MAAc;IACnE,OAAO,CAAC,CAAC,kBAAkB,MAAM,sBAAsB,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,OAAmC,EAAE;IAErC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC,oCAAoC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC;cAClF,MAAM,GAAG,CAAC,CAAC,0BAA0B,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,CAAC,CAAC,0BAA0B,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/dashboard workflows` sub-handler.
|
|
3
|
+
*
|
|
4
|
+
* The command-level admin gate has already passed. This handler fetches the
|
|
5
|
+
* global workflow run list, builds the Feishu list card, and DMs the invoking
|
|
6
|
+
* admin. Per-run actions are handled by card callbacks from the detail view.
|
|
7
|
+
*/
|
|
8
|
+
import type { LarkMessage } from '../../types.js';
|
|
9
|
+
import { type Locale } from '../../i18n/index.js';
|
|
10
|
+
import type { DaemonClient } from '../../dashboard/daemon-internal-client.js';
|
|
11
|
+
import type { CommandHandlerDeps } from '../command-handler.js';
|
|
12
|
+
export interface DashboardWorkflowsCommandDeps {
|
|
13
|
+
createClient?: (larkAppId: string) => DaemonClient;
|
|
14
|
+
sendUserMessage?: (larkAppId: string, openId: string, content: string, msgType?: string) => Promise<string>;
|
|
15
|
+
locale?: Locale;
|
|
16
|
+
/** Override `Date.now()` so tests are deterministic. */
|
|
17
|
+
nowMs?: () => number;
|
|
18
|
+
}
|
|
19
|
+
export declare function handleDashboardWorkflows(_message: LarkMessage, _args: string, rootId: string, _chatId: string, deps: CommandHandlerDeps, larkAppId: string | undefined, adminOpenId: string, testDeps?: DashboardWorkflowsCommandDeps): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=workflows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../src/core/dashboard-command/workflows.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAInE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAE9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,WAAW,6BAA6B;IAC5C,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,YAAY,CAAC;IACnD,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB;AAED,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,kBAAkB,EACxB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,6BAAkC,GAC3C,OAAO,CAAC,IAAI,CAAC,CAqDf"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/dashboard workflows` sub-handler.
|
|
3
|
+
*
|
|
4
|
+
* The command-level admin gate has already passed. This handler fetches the
|
|
5
|
+
* global workflow run list, builds the Feishu list card, and DMs the invoking
|
|
6
|
+
* admin. Per-run actions are handled by card callbacks from the detail view.
|
|
7
|
+
*/
|
|
8
|
+
import { localeForBot, t } from '../../i18n/index.js';
|
|
9
|
+
import { buildWorkflowsCard } from '../../im/lark/workflows-card.js';
|
|
10
|
+
import { createDaemonClientFor } from '../../daemon-internal-client-wrapper.js';
|
|
11
|
+
import { sendUserMessage as defaultSendUserMessage } from '../../im/lark/client.js';
|
|
12
|
+
export async function handleDashboardWorkflows(_message, _args, rootId, _chatId, deps, larkAppId, adminOpenId, testDeps = {}) {
|
|
13
|
+
if (!larkAppId)
|
|
14
|
+
return;
|
|
15
|
+
const locale = testDeps.locale ?? localeForBot(larkAppId);
|
|
16
|
+
const client = (testDeps.createClient ?? createDaemonClientFor)(larkAppId);
|
|
17
|
+
let snap;
|
|
18
|
+
try {
|
|
19
|
+
// listRuns defaults to non-terminal runs. `all=1` is required so the
|
|
20
|
+
// completed/failed counters and history rows include terminal runs.
|
|
21
|
+
snap = await client.request({ method: 'GET', path: '/__daemon/workflows-runs-snapshot?all=1&scope=global' });
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
await deps.sessionReply(rootId, t('card.dashboard.workflows.list_failed', { reason: e?.message ?? String(e) }, locale), undefined, larkAppId);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (snap.status !== 200) {
|
|
28
|
+
const reason = String(snap.body?.error ?? `http_${snap.status}`);
|
|
29
|
+
await deps.sessionReply(rootId, t('card.dashboard.workflows.list_failed', { reason }, locale), undefined, larkAppId);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const rows = (snap.body?.runs) ?? [];
|
|
33
|
+
const nowMs = testDeps.nowMs ? testDeps.nowMs() : Date.now();
|
|
34
|
+
// invokerOpenId = adminOpenId so subsequent clicks still pass the invoker lock.
|
|
35
|
+
const cardJson = buildWorkflowsCard(rows, { invokerOpenId: adminOpenId, locale, page: 1, scope: 'global' }, nowMs);
|
|
36
|
+
const sendUserMessage = testDeps.sendUserMessage ?? defaultSendUserMessage;
|
|
37
|
+
try {
|
|
38
|
+
await sendUserMessage(larkAppId, adminOpenId, cardJson, 'interactive');
|
|
39
|
+
await deps.sessionReply(rootId, t('card.dashboard.workflows.dm_sent', undefined, locale), undefined, larkAppId);
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
await deps.sessionReply(rootId, t('card.dashboard.workflows.dm_failed', { reason: e?.message ?? String(e) }, locale), undefined, larkAppId);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=workflows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../../src/core/dashboard-command/workflows.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,CAAC,EAAe,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,eAAe,IAAI,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAapF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAAqB,EACrB,KAAa,EACb,MAAc,EACd,OAAe,EACf,IAAwB,EACxB,SAA6B,EAC7B,WAAmB,EACnB,WAA0C,EAAE;IAE5C,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,MAAM,MAAM,GAAW,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,IAAI,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,qEAAqE;QACrE,oEAAoE;QACpE,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,sDAAsD,EAAE,CAAC,CAAC;IAC/G,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,YAAY,CACrB,MAAM,EACN,CAAC,CAAC,sCAAsC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EACtF,SAAS,EAAE,SAAS,CACrB,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,CAAE,IAAI,CAAC,IAAY,EAAE,KAAK,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAI,CAAC,YAAY,CACrB,MAAM,EACN,CAAC,CAAC,sCAAsC,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAC7D,SAAS,EAAE,SAAS,CACrB,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,CAAE,IAAI,CAAC,IAAmD,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACrF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7D,gFAAgF;IAChF,MAAM,QAAQ,GAAG,kBAAkB,CACjC,IAAI,EACJ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAChE,KAAK,CACN,CAAC;IAEF,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe,IAAI,sBAAsB,CAAC;IAC3E,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACvE,MAAM,IAAI,CAAC,YAAY,CACrB,MAAM,EACN,CAAC,CAAC,kCAAkC,EAAE,SAAS,EAAE,MAAM,CAAC,EACxD,SAAS,EAAE,SAAS,CACrB,CAAC;IACJ,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,YAAY,CACrB,MAAM,EACN,CAAC,CAAC,oCAAoC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EACpF,SAAS,EAAE,SAAS,CACrB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passthrough-commands.d.ts","sourceRoot":"","sources":["../../src/core/passthrough-commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"passthrough-commands.d.ts","sourceRoot":"","sources":["../../src/core/passthrough-commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe,aAA8T,CAAC;AAE3V;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,aAO/B,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,QAA6B,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMvE;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAUjE"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* chat) rather than relayed to the CLI. Used both for routing and to reject
|
|
10
10
|
* `customPassthroughCommands` entries that would shadow a daemon command.
|
|
11
11
|
*/
|
|
12
|
-
export const DAEMON_COMMANDS = new Set(['/close', '/restart', '/status', '/help', '/cd', '/repo', '/schedule', '/role', '/botconfig', '/skills', '/pair', '/login', '/adopt', '/detach', '/disconnect', '/oncall', '/group', '/g', '/relay', '/card', '/term', '/list-slash-command', '/slash', '/land', '/subscribe-lark-doc', '/insight']);
|
|
12
|
+
export const DAEMON_COMMANDS = new Set(['/close', '/restart', '/status', '/help', '/cd', '/repo', '/schedule', '/role', '/botconfig', '/skills', '/pair', '/login', '/adopt', '/detach', '/disconnect', '/oncall', '/group', '/g', '/relay', '/card', '/term', '/list-slash-command', '/slash', '/land', '/subscribe-lark-doc', '/insight', '/dashboard']);
|
|
13
13
|
/**
|
|
14
14
|
* Slash commands that are forwarded verbatim to the underlying CLI (e.g.
|
|
15
15
|
* Claude Code's `/compact`, `/model`, `/usage`). The daemon does NOT handle
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passthrough-commands.js","sourceRoot":"","sources":["../../src/core/passthrough-commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"passthrough-commands.js","sourceRoot":"","sources":["../../src/core/passthrough-commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;AAE3V;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IAC1C,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IACnD,yBAAyB;IACzB,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IACpC,cAAc,EAAE,kBAAkB,EAAE,SAAS;IAC7C,8BAA8B;IAC9B,MAAM;CACP,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAY;IACtD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAW;IACrD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;QACpE,MAAM,IAAI,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -4,7 +4,23 @@ export interface NativeCliSkillGroup {
|
|
|
4
4
|
cliId: CliId;
|
|
5
5
|
rootDir: string;
|
|
6
6
|
skills: SkillPackage[];
|
|
7
|
+
/** Dashboard tab label. Absent → render `cliId` (a CLI's flat native skills
|
|
8
|
+
* tab). Set for Claude plugin / marketplace groups so they're distinguishable
|
|
9
|
+
* from — and from each other beside — the plain `claude` tab. */
|
|
10
|
+
label?: string;
|
|
7
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Discover skills that live inside Claude Code's plugin system — which the flat
|
|
14
|
+
* `<claudeDataDir>/skills` scan never reaches. Two sources, each surfaced as its
|
|
15
|
+
* own labelled group so the dashboard can show + register them like any other
|
|
16
|
+
* discovered skill:
|
|
17
|
+
* 1. Enabled plugins in `plugins/installed_plugins.json` → each install's
|
|
18
|
+
* `<installPath>/skills/<name>/SKILL.md` (e.g. the `frontend-design` plugin).
|
|
19
|
+
* 2. Marketplace skill collections at `plugins/marketplaces/<m>/skills/`
|
|
20
|
+
* (e.g. `anthropic-agent-skills`, the anthropics/skills repo).
|
|
21
|
+
* Plugins with no `skills/` dir (e.g. gopls-lsp) contribute nothing.
|
|
22
|
+
*/
|
|
23
|
+
export declare function discoverClaudePluginSkillGroups(claudeDataDir: string, cliId: CliId, seen?: Set<string>): NativeCliSkillGroup[];
|
|
8
24
|
export declare function discoverNativeCliSkillGroups(cliIds: readonly CliId[]): NativeCliSkillGroup[];
|
|
9
25
|
export declare function discoverProjectSkills(workingDir: string): SkillPackage[];
|
|
10
26
|
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/core/skills/discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/core/skills/discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB;;sEAEkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA+BD;;;;;;;;;;GAUG;AACH,wBAAgB,+BAA+B,CAC7C,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE,GAAG,CAAC,MAAM,CAAa,GAC5B,mBAAmB,EAAE,CA+BvB;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,mBAAmB,EAAE,CA8B5F;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE,CAgBxE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { existsSync, readdirSync } from 'node:fs';
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
3
|
+
import { basename, join } from 'node:path';
|
|
4
4
|
import { createCliAdapterSync } from '../../adapters/cli/registry.js';
|
|
5
5
|
import { loadSkillPackage } from './package.js';
|
|
6
6
|
function expandHome(path) {
|
|
@@ -34,6 +34,47 @@ function discoverSkillRoot(root) {
|
|
|
34
34
|
}
|
|
35
35
|
return out.sort((a, b) => a.name.localeCompare(b.name));
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Discover skills that live inside Claude Code's plugin system — which the flat
|
|
39
|
+
* `<claudeDataDir>/skills` scan never reaches. Two sources, each surfaced as its
|
|
40
|
+
* own labelled group so the dashboard can show + register them like any other
|
|
41
|
+
* discovered skill:
|
|
42
|
+
* 1. Enabled plugins in `plugins/installed_plugins.json` → each install's
|
|
43
|
+
* `<installPath>/skills/<name>/SKILL.md` (e.g. the `frontend-design` plugin).
|
|
44
|
+
* 2. Marketplace skill collections at `plugins/marketplaces/<m>/skills/`
|
|
45
|
+
* (e.g. `anthropic-agent-skills`, the anthropics/skills repo).
|
|
46
|
+
* Plugins with no `skills/` dir (e.g. gopls-lsp) contribute nothing.
|
|
47
|
+
*/
|
|
48
|
+
export function discoverClaudePluginSkillGroups(claudeDataDir, cliId, seen = new Set()) {
|
|
49
|
+
const pluginsRoot = join(claudeDataDir, 'plugins');
|
|
50
|
+
const out = [];
|
|
51
|
+
const addGroup = (skillsRoot, label) => {
|
|
52
|
+
if (seen.has(skillsRoot))
|
|
53
|
+
return;
|
|
54
|
+
const skills = discoverSkillRoot(skillsRoot);
|
|
55
|
+
if (skills.length === 0)
|
|
56
|
+
return; // no SKILL.md under here — nothing to show
|
|
57
|
+
seen.add(skillsRoot);
|
|
58
|
+
out.push({ cliId, rootDir: skillsRoot, label, skills });
|
|
59
|
+
};
|
|
60
|
+
// 1. Enabled plugins (installed_plugins.json → <installPath>/skills).
|
|
61
|
+
try {
|
|
62
|
+
const parsed = JSON.parse(readFileSync(join(pluginsRoot, 'installed_plugins.json'), 'utf-8'));
|
|
63
|
+
for (const [key, entries] of Object.entries(parsed.plugins ?? {})) {
|
|
64
|
+
const pluginName = key.split('@')[0]; // "frontend-design@marketplace" → "frontend-design"
|
|
65
|
+
for (const entry of entries ?? []) {
|
|
66
|
+
if (entry?.installPath)
|
|
67
|
+
addGroup(join(entry.installPath, 'skills'), `${pluginName} (plugin)`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch { /* no/unreadable installed_plugins.json — fine */ }
|
|
72
|
+
// 2. Marketplace-level skill collections (marketplaces/<m>/skills).
|
|
73
|
+
for (const marketplace of listSkillDirs(join(pluginsRoot, 'marketplaces'))) {
|
|
74
|
+
addGroup(join(marketplace, 'skills'), `${basename(marketplace)} (marketplace)`);
|
|
75
|
+
}
|
|
76
|
+
return out;
|
|
77
|
+
}
|
|
37
78
|
export function discoverNativeCliSkillGroups(cliIds) {
|
|
38
79
|
const out = [];
|
|
39
80
|
const seen = new Set();
|
|
@@ -61,6 +102,11 @@ export function discoverNativeCliSkillGroups(cliIds) {
|
|
|
61
102
|
seen.add(root);
|
|
62
103
|
out.push({ cliId, rootDir: root, skills: discoverSkillRoot(root) });
|
|
63
104
|
}
|
|
105
|
+
// Claude Code plugin system: skills bundled inside enabled plugins or
|
|
106
|
+
// marketplaces, which the flat native-skills scan above never reaches.
|
|
107
|
+
if (adapter.claudeDataDir) {
|
|
108
|
+
out.push(...discoverClaudePluginSkillGroups(expandHome(adapter.claudeDataDir), cliId, seen));
|
|
109
|
+
}
|
|
64
110
|
}
|
|
65
111
|
return out;
|
|
66
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/core/skills/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/core/skills/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-pool.d.ts","sourceRoot":"","sources":["../../src/core/worker-pool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAkB,KAAK,YAAY,EAAoB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-pool.d.ts","sourceRoot":"","sources":["../../src/core/worker-pool.ts"],"names":[],"mappings":"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"}
|
package/dist/core/worker-pool.js
CHANGED
|
@@ -8,7 +8,8 @@ import { homedir } from 'node:os';
|
|
|
8
8
|
import { readFileSync, readdirSync, mkdirSync, existsSync, realpathSync, unlinkSync } from 'node:fs';
|
|
9
9
|
import { atomicWriteFileSync } from '../utils/atomic-write.js';
|
|
10
10
|
import { fileURLToPath } from 'node:url';
|
|
11
|
-
import { ensureSkills, ensureAskSkill, ensurePluginSkills, removeGlobalBotmuxSkills } from '../skills/installer.js';
|
|
11
|
+
import { ensureSkills, ensureAskSkill, ensurePluginSkills, ensureWhiteboardSkill, removeGlobalBotmuxSkills } from '../skills/installer.js';
|
|
12
|
+
import { whiteboardEnabled } from '../services/whiteboard-store.js';
|
|
12
13
|
import { installHook } from '../adapters/hook-installer.js';
|
|
13
14
|
import { hookCommandFor } from '../adapters/hook-command.js';
|
|
14
15
|
import { randomBytes } from 'node:crypto';
|
|
@@ -691,9 +692,15 @@ const skillsInstalledCliIds = new Set();
|
|
|
691
692
|
* Synchronous and idempotent — runs once per CLI per daemon lifecycle.
|
|
692
693
|
*/
|
|
693
694
|
export function ensureCliSkills(cliId, cliPathOverride) {
|
|
695
|
+
const adapter = createCliAdapterSync(cliId, cliPathOverride);
|
|
696
|
+
// botmux-whiteboard skill 跟随白板能力开关,且**每次 spawn 都重新评估**(不进
|
|
697
|
+
// 下面 skillsInstalledCliIds 的一次性缓存)——这样运行时在 dashboard/CLI 切换白板
|
|
698
|
+
// 开关,下一个会话即生效,无需重启 daemon。skill 落点与其它内置 skill 同目录
|
|
699
|
+
// (plugin 模式下是 {pluginDir}/skills),spawn 时一并经 --plugin-dir 注入。
|
|
700
|
+
const wbSkillsDir = adapter.pluginDir ? join(adapter.pluginDir, 'skills') : adapter.skillsDir;
|
|
701
|
+
ensureWhiteboardSkill(cliId, wbSkillsDir, whiteboardEnabled());
|
|
694
702
|
if (skillsInstalledCliIds.has(cliId))
|
|
695
703
|
return;
|
|
696
|
-
const adapter = createCliAdapterSync(cliId, cliPathOverride);
|
|
697
704
|
if (adapter.pluginDir) {
|
|
698
705
|
// 动态注入:skill 写进插件目录,spawn 时用 --plugin-dir 注入,仅本次会话可见。
|
|
699
706
|
// 不再写全局 skillsDir。(全局 ~/.claude/skills 的历史残留清理改由
|