koishi-plugin-media-luna 0.0.31 → 0.0.33

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 (50) hide show
  1. package/client/components/ConfigRenderer.vue +119 -1
  2. package/dist/index.js +2 -2
  3. package/dist/style.css +1 -1
  4. package/lib/core/api/setup-api.d.ts.map +1 -1
  5. package/lib/core/api/setup-api.js +22 -0
  6. package/lib/core/api/setup-api.js.map +1 -1
  7. package/lib/core/medialuna.service.d.ts +20 -0
  8. package/lib/core/medialuna.service.d.ts.map +1 -1
  9. package/lib/core/medialuna.service.js +58 -8
  10. package/lib/core/medialuna.service.js.map +1 -1
  11. package/lib/core/plugin-loader.d.ts +5 -1
  12. package/lib/core/plugin-loader.d.ts.map +1 -1
  13. package/lib/core/plugin-loader.js +49 -2
  14. package/lib/core/plugin-loader.js.map +1 -1
  15. package/lib/core/types.d.ts +2 -0
  16. package/lib/core/types.d.ts.map +1 -1
  17. package/lib/core/types.js.map +1 -1
  18. package/lib/index.d.ts.map +1 -1
  19. package/lib/index.js +17 -5
  20. package/lib/index.js.map +1 -1
  21. package/lib/plugins/connector-chatluna/api.d.ts +6 -0
  22. package/lib/plugins/connector-chatluna/api.d.ts.map +1 -0
  23. package/lib/plugins/connector-chatluna/api.js +161 -0
  24. package/lib/plugins/connector-chatluna/api.js.map +1 -0
  25. package/lib/plugins/connector-chatluna/config.d.ts +41 -0
  26. package/lib/plugins/connector-chatluna/config.d.ts.map +1 -0
  27. package/lib/plugins/connector-chatluna/config.js +142 -0
  28. package/lib/plugins/connector-chatluna/config.js.map +1 -0
  29. package/lib/plugins/connector-chatluna/connector.d.ts +4 -0
  30. package/lib/plugins/connector-chatluna/connector.d.ts.map +1 -0
  31. package/lib/plugins/connector-chatluna/connector.js +114 -0
  32. package/lib/plugins/connector-chatluna/connector.js.map +1 -0
  33. package/lib/plugins/connector-chatluna/index.d.ts +5 -0
  34. package/lib/plugins/connector-chatluna/index.d.ts.map +1 -0
  35. package/lib/plugins/connector-chatluna/index.js +53 -0
  36. package/lib/plugins/connector-chatluna/index.js.map +1 -0
  37. package/lib/plugins/connector-chatluna/tools.d.ts +11 -0
  38. package/lib/plugins/connector-chatluna/tools.d.ts.map +1 -0
  39. package/lib/plugins/connector-chatluna/tools.js +353 -0
  40. package/lib/plugins/connector-chatluna/tools.js.map +1 -0
  41. package/lib/plugins/index.d.ts +3 -1
  42. package/lib/plugins/index.d.ts.map +1 -1
  43. package/lib/plugins/index.js +5 -2
  44. package/lib/plugins/index.js.map +1 -1
  45. package/lib/plugins/koishi-commands/index.d.ts.map +1 -1
  46. package/lib/plugins/koishi-commands/index.js +202 -230
  47. package/lib/plugins/koishi-commands/index.js.map +1 -1
  48. package/lib/types/index.d.ts +2 -0
  49. package/lib/types/index.d.ts.map +1 -1
  50. package/package.json +1 -1
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ // ChatLuna 模型列表 API 及远程选项 API
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.registerChatLunaApi = registerChatLunaApi;
5
+ // ModelType 枚举值(从 chatluna 复制,避免直接依赖)
6
+ const ModelType = {
7
+ all: 0,
8
+ llm: 1,
9
+ embeddings: 2
10
+ };
11
+ /**
12
+ * 注册 ChatLuna 相关 API
13
+ */
14
+ function registerChatLunaApi(ctx, logger) {
15
+ const koishiConsole = ctx.console;
16
+ if (!koishiConsole?.addListener) {
17
+ logger.warn('Console service not available, skipping API registration');
18
+ return;
19
+ }
20
+ const chatluna = ctx.chatluna;
21
+ const mediaLuna = ctx.mediaLuna;
22
+ // ============ ChatLuna 模型 API ============
23
+ // 获取所有平台(适配器)列表
24
+ koishiConsole.addListener('media-luna/chatluna/platforms', async () => {
25
+ try {
26
+ if (!chatluna) {
27
+ return { success: false, error: 'ChatLuna service not available' };
28
+ }
29
+ const allModels = chatluna.platform.listAllModels(ModelType.llm);
30
+ const platforms = new Set();
31
+ for (const model of allModels.value || []) {
32
+ if (model.platform) {
33
+ platforms.add(model.platform);
34
+ }
35
+ }
36
+ const options = Array.from(platforms).sort().map(p => ({
37
+ label: p,
38
+ value: p
39
+ }));
40
+ return { success: true, data: options };
41
+ }
42
+ catch (error) {
43
+ logger.error('Failed to get platforms:', error);
44
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
45
+ }
46
+ });
47
+ // 获取指定平台下的模型列表
48
+ koishiConsole.addListener('media-luna/chatluna/models', async ({ platform }) => {
49
+ try {
50
+ if (!chatluna) {
51
+ return { success: false, error: 'ChatLuna service not available' };
52
+ }
53
+ const allModels = chatluna.platform.listAllModels(ModelType.llm);
54
+ let models = allModels.value || [];
55
+ // 如果指定了平台,过滤
56
+ if (platform) {
57
+ models = models.filter((m) => m.platform === platform);
58
+ }
59
+ const options = models.map((m) => ({
60
+ label: m.toModelName ? m.toModelName() : `${m.platform}/${m.name}`,
61
+ value: m.toModelName ? m.toModelName() : `${m.platform}/${m.name}`
62
+ }));
63
+ return { success: true, data: options };
64
+ }
65
+ catch (error) {
66
+ logger.error('Failed to get models:', error);
67
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
68
+ }
69
+ });
70
+ // 获取所有模型(平台/模型名格式)
71
+ koishiConsole.addListener('media-luna/chatluna/all-models', async () => {
72
+ try {
73
+ if (!chatluna) {
74
+ return { success: false, error: 'ChatLuna service not available' };
75
+ }
76
+ const allModels = chatluna.platform.listAllModels(ModelType.llm);
77
+ const models = allModels.value || [];
78
+ const options = models.map((m) => ({
79
+ label: m.toModelName ? m.toModelName() : `${m.platform}/${m.name}`,
80
+ value: m.toModelName ? m.toModelName() : `${m.platform}/${m.name}`
81
+ }));
82
+ return { success: true, data: options };
83
+ }
84
+ catch (error) {
85
+ logger.error('Failed to get all models:', error);
86
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
87
+ }
88
+ });
89
+ // ============ Media Luna 渠道/预设 API(用于工具配置下拉选项) ============
90
+ // 获取渠道选项列表
91
+ koishiConsole.addListener('media-luna/chatluna/channel-options', async () => {
92
+ try {
93
+ if (!mediaLuna) {
94
+ return { success: false, error: 'MediaLuna service not available' };
95
+ }
96
+ const channelService = mediaLuna.channelService;
97
+ if (!channelService) {
98
+ return { success: true, data: [] };
99
+ }
100
+ const channels = await channelService.list();
101
+ const options = channels
102
+ .filter((c) => c.enabled)
103
+ .map((c) => ({
104
+ label: c.name,
105
+ value: c.name
106
+ }));
107
+ return { success: true, data: options };
108
+ }
109
+ catch (error) {
110
+ logger.error('Failed to get channel options:', error);
111
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
112
+ }
113
+ });
114
+ // 获取预设选项列表
115
+ koishiConsole.addListener('media-luna/chatluna/preset-options', async () => {
116
+ try {
117
+ if (!mediaLuna) {
118
+ return { success: false, error: 'MediaLuna service not available' };
119
+ }
120
+ const presetService = mediaLuna.presetService;
121
+ if (!presetService) {
122
+ return { success: true, data: [] };
123
+ }
124
+ const presets = await presetService.list({ enabledOnly: true });
125
+ const options = presets.map((p) => ({
126
+ label: p.name,
127
+ value: p.name
128
+ }));
129
+ return { success: true, data: options };
130
+ }
131
+ catch (error) {
132
+ logger.error('Failed to get preset options:', error);
133
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
134
+ }
135
+ });
136
+ // 获取所有预设(包含描述,用于预设查看工具)
137
+ koishiConsole.addListener('media-luna/chatluna/preset-list', async () => {
138
+ try {
139
+ if (!mediaLuna) {
140
+ return { success: false, error: 'MediaLuna service not available' };
141
+ }
142
+ const presetService = mediaLuna.presetService;
143
+ if (!presetService) {
144
+ return { success: true, data: [] };
145
+ }
146
+ const presets = await presetService.list({ enabledOnly: true });
147
+ const data = presets.map((p) => ({
148
+ name: p.name,
149
+ description: p.description || '',
150
+ tags: p.tags || []
151
+ }));
152
+ return { success: true, data };
153
+ }
154
+ catch (error) {
155
+ logger.error('Failed to get preset list:', error);
156
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
157
+ }
158
+ });
159
+ logger.info('ChatLuna API registered');
160
+ }
161
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/plugins/connector-chatluna/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { ConfigField, CardField } from '../../core/types';
2
+ /** 返回模式 */
3
+ export type ReturnMode = 'sync' | 'async';
4
+ /** 工具配置 */
5
+ export interface ToolConfig {
6
+ /** 工具名称(英文,无空格) */
7
+ name: string;
8
+ /** 工具描述(供 AI 理解用途) */
9
+ description: string;
10
+ /** 是否启用 */
11
+ enabled: boolean;
12
+ /** 返回模式:sync=等待生成完成后返回,async=立即返回并在后台生成 */
13
+ returnMode: ReturnMode;
14
+ /** 内置渠道名(如果设置,AI 无法选择渠道) */
15
+ builtinChannel?: string;
16
+ /** 内置预设名(如果设置,AI 无法选择预设) */
17
+ builtinPreset?: string;
18
+ }
19
+ /** 预设工具配置 */
20
+ export interface PresetToolConfig {
21
+ /** 是否启用预设查看工具 */
22
+ enabled: boolean;
23
+ /** 工具名称 */
24
+ name: string;
25
+ /** 工具描述(支持 {presets} 变量) */
26
+ description: string;
27
+ }
28
+ /** 插件配置 */
29
+ export interface ChatLunaPluginConfig {
30
+ /** 是否启用工具注册 */
31
+ enableTools: boolean;
32
+ /** 工具列表 */
33
+ tools: ToolConfig[];
34
+ /** 预设查看工具配置 */
35
+ presetTool: PresetToolConfig;
36
+ }
37
+ export declare const connectorFields: ConfigField[];
38
+ export declare const connectorCardFields: CardField[];
39
+ export declare const chatlunaConfigFields: ConfigField[];
40
+ export declare const defaultConfig: ChatLunaPluginConfig;
41
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/plugins/connector-chatluna/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAI9D,WAAW;AACX,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,CAAA;AAEzC,WAAW;AACX,MAAM,WAAW,UAAU;IACzB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,2CAA2C;IAC3C,UAAU,EAAE,UAAU,CAAA;IACtB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,4BAA4B;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,aAAa;AACb,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,WAAW;AACX,MAAM,WAAW,oBAAoB;IACnC,eAAe;IACf,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW;IACX,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,eAAe;IACf,UAAU,EAAE,gBAAgB,CAAA;CAC7B;AAID,eAAO,MAAM,eAAe,EAAE,WAAW,EA2BxC,CAAA;AAID,eAAO,MAAM,mBAAmB,EAAE,SAAS,EAE1C,CAAA;AAID,eAAO,MAAM,oBAAoB,EAAE,WAAW,EA4F7C,CAAA;AAID,eAAO,MAAM,aAAa,EAAE,oBAQ3B,CAAA"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ // ChatLuna 插件配置
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.defaultConfig = exports.chatlunaConfigFields = exports.connectorCardFields = exports.connectorFields = void 0;
5
+ // ============ 连接器配置字段(渠道级) ============
6
+ exports.connectorFields = [
7
+ {
8
+ key: 'platform',
9
+ label: '适配器',
10
+ type: 'select-remote',
11
+ required: false,
12
+ optionsSource: 'media-luna/chatluna/platforms',
13
+ placeholder: '可选,用于筛选模型',
14
+ description: '选择 ChatLuna 适配器来筛选模型列表'
15
+ },
16
+ {
17
+ key: 'model',
18
+ label: '模型',
19
+ type: 'select-remote',
20
+ required: true,
21
+ optionsSource: 'media-luna/chatluna/models',
22
+ dependsOn: 'platform',
23
+ placeholder: '选择模型',
24
+ description: '选择 ChatLuna 模型(格式: 适配器/模型名)'
25
+ },
26
+ {
27
+ key: 'timeout',
28
+ label: '超时时间(秒)',
29
+ type: 'number',
30
+ default: 300,
31
+ description: 'API 调用超时时间'
32
+ }
33
+ ];
34
+ // ============ 卡片展示字段 ============
35
+ exports.connectorCardFields = [
36
+ { source: 'connectorConfig', key: 'model', label: '模型' }
37
+ ];
38
+ // ============ 插件配置字段(显示在插件配置面板) ============
39
+ exports.chatlunaConfigFields = [
40
+ {
41
+ key: 'enableTools',
42
+ label: '启用工具注册',
43
+ type: 'boolean',
44
+ default: false,
45
+ description: '在 ChatLuna 中注册 Media Luna 工具(供 AI 调用画图)'
46
+ },
47
+ {
48
+ key: 'presetTool.enabled',
49
+ label: '启用预设查看工具',
50
+ type: 'boolean',
51
+ default: true,
52
+ description: '注册预设查看工具,让 AI 可以查看可用预设列表',
53
+ showWhen: { field: 'enableTools', value: true }
54
+ },
55
+ {
56
+ key: 'presetTool.name',
57
+ label: '预设工具名称',
58
+ type: 'text',
59
+ default: 'list_presets',
60
+ placeholder: 'list_presets',
61
+ description: '预设查看工具的名称',
62
+ showWhen: { field: 'enableTools', value: true }
63
+ },
64
+ {
65
+ key: 'presetTool.description',
66
+ label: '预设工具描述',
67
+ type: 'textarea',
68
+ default: 'List available presets for image generation. Available presets: {presets}',
69
+ placeholder: '支持 {presets} 变量',
70
+ description: '工具描述,{presets} 会被替换为所有预设名',
71
+ showWhen: { field: 'enableTools', value: true }
72
+ },
73
+ {
74
+ key: 'tools',
75
+ label: '画图工具列表',
76
+ type: 'table',
77
+ default: [],
78
+ description: '注册到 ChatLuna 的画图工具列表',
79
+ showWhen: { field: 'enableTools', value: true },
80
+ columns: [
81
+ {
82
+ key: 'enabled',
83
+ label: '启用',
84
+ type: 'boolean',
85
+ width: '60px'
86
+ },
87
+ {
88
+ key: 'name',
89
+ label: '工具名称',
90
+ type: 'text',
91
+ required: true,
92
+ placeholder: 'draw_image',
93
+ width: '120px'
94
+ },
95
+ {
96
+ key: 'description',
97
+ label: '描述',
98
+ type: 'text',
99
+ required: true,
100
+ placeholder: '供 AI 理解工具用途'
101
+ },
102
+ {
103
+ key: 'returnMode',
104
+ label: '返回模式',
105
+ type: 'select',
106
+ options: [
107
+ { label: '同步(等待完成)', value: 'sync' },
108
+ { label: '异步(立即返回)', value: 'async' }
109
+ ],
110
+ width: '140px'
111
+ },
112
+ {
113
+ key: 'builtinChannel',
114
+ label: '内置渠道',
115
+ type: 'text',
116
+ placeholder: '留空=AI选择',
117
+ width: '120px'
118
+ },
119
+ {
120
+ key: 'builtinPreset',
121
+ label: '内置预设',
122
+ type: 'text',
123
+ placeholder: '留空=AI选择',
124
+ width: '120px'
125
+ }
126
+ ],
127
+ tableConfig: {
128
+ maxRows: 20
129
+ }
130
+ }
131
+ ];
132
+ // ============ 默认配置 ============
133
+ exports.defaultConfig = {
134
+ enableTools: false,
135
+ tools: [],
136
+ presetTool: {
137
+ enabled: true,
138
+ name: 'list_presets',
139
+ description: 'List available presets for image generation. Available presets: {presets}'
140
+ }
141
+ };
142
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/plugins/connector-chatluna/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ConnectorDefinition } from '../../core/types';
2
+ /** ChatLuna 连接器定义 */
3
+ export declare const ChatLunaConnector: ConnectorDefinition;
4
+ //# sourceMappingURL=connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../../src/plugins/connector-chatluna/connector.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAA8C,MAAM,kBAAkB,CAAA;AAsHvG,qBAAqB;AACrB,eAAO,MAAM,iBAAiB,EAAE,mBAgB/B,CAAA"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ // ChatLuna 连接器
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ChatLunaConnector = void 0;
5
+ const config_1 = require("./config");
6
+ const messages_1 = require("@langchain/core/messages");
7
+ /** ChatLuna 生成函数 */
8
+ async function generate(ctx, config, files, prompt) {
9
+ const { model } = config;
10
+ const logger = ctx.logger('media-luna-chatluna');
11
+ // 使用 any 绕过类型检查,因为 chatluna 的类型在其自己的包中声明
12
+ const chatluna = ctx.chatluna;
13
+ // 检查 chatluna 服务
14
+ if (!chatluna) {
15
+ throw new Error('ChatLuna service not available');
16
+ }
17
+ // 检查模型是否存在
18
+ const modelRef = chatluna.platform.findModel(model);
19
+ if (!modelRef.value) {
20
+ throw new Error(`模型不存在或未配置: ${model}`);
21
+ }
22
+ logger.info(`[ChatLuna] 使用模型: ${model}`);
23
+ logger.info(`[ChatLuna] 图片数量: ${files.length}`);
24
+ // 构建消息内容
25
+ const messageContent = [];
26
+ // 添加文字
27
+ if (prompt) {
28
+ messageContent.push({
29
+ type: 'text',
30
+ text: prompt
31
+ });
32
+ }
33
+ // 添加图片
34
+ for (const file of files) {
35
+ const base64 = Buffer.from(file.data).toString('base64');
36
+ messageContent.push({
37
+ type: 'image_url',
38
+ image_url: {
39
+ url: `data:${file.mime};base64,${base64}`
40
+ }
41
+ });
42
+ }
43
+ // 创建 HumanMessage
44
+ const humanMessage = new messages_1.HumanMessage({
45
+ content: messageContent
46
+ });
47
+ // 创建模型
48
+ const llmRef = await chatluna.createChatModel(model);
49
+ if (!llmRef.value) {
50
+ throw new Error(`无法创建模型: ${model}`);
51
+ }
52
+ const llm = llmRef.value;
53
+ // 调用模型
54
+ logger.info(`[ChatLuna] 开始调用模型...`);
55
+ const result = await llm.invoke([humanMessage]);
56
+ logger.info(`[ChatLuna] 返回内容类型: ${typeof result.content}`);
57
+ // 渲染结果
58
+ const mdRenderer = await chatluna.renderer.getRenderer('text');
59
+ const rendered = await mdRenderer.render({ content: result.content }, { type: 'text' });
60
+ // 提取图片 URL
61
+ const elementStr = String(rendered.element);
62
+ const imageUrls = [];
63
+ // 提取 <img src="..."/> 或 <image url="..."/>
64
+ const imgSrcMatches = elementStr.match(/<img[^>]+src=["']([^"']+)["']/gi);
65
+ if (imgSrcMatches) {
66
+ for (const match of imgSrcMatches) {
67
+ const urlMatch = match.match(/src=["']([^"']+)["']/);
68
+ if (urlMatch?.[1]) {
69
+ imageUrls.push(urlMatch[1]);
70
+ }
71
+ }
72
+ }
73
+ const imageUrlMatches = elementStr.match(/<image[^>]+url=["']([^"']+)["']/gi);
74
+ if (imageUrlMatches) {
75
+ for (const match of imageUrlMatches) {
76
+ const urlMatch = match.match(/url=["']([^"']+)["']/);
77
+ if (urlMatch?.[1]) {
78
+ imageUrls.push(urlMatch[1]);
79
+ }
80
+ }
81
+ }
82
+ if (imageUrls.length > 0) {
83
+ logger.info(`[ChatLuna] 提取到 ${imageUrls.length} 个图片`);
84
+ return imageUrls.map(url => ({
85
+ kind: 'image',
86
+ url,
87
+ mime: 'image/png'
88
+ }));
89
+ }
90
+ // 如果没有图片,返回文本内容
91
+ logger.warn(`[ChatLuna] 未找到图片,返回文本`);
92
+ return [{
93
+ kind: 'text',
94
+ content: elementStr
95
+ }];
96
+ }
97
+ /** ChatLuna 连接器定义 */
98
+ exports.ChatLunaConnector = {
99
+ id: 'chatluna',
100
+ name: 'ChatLuna',
101
+ supportedTypes: ['image'],
102
+ fields: config_1.connectorFields,
103
+ cardFields: config_1.connectorCardFields,
104
+ generate,
105
+ /** 获取请求日志 */
106
+ getRequestLog(config, files, prompt) {
107
+ return {
108
+ model: config.model,
109
+ prompt,
110
+ fileCount: files.length
111
+ };
112
+ }
113
+ };
114
+ //# sourceMappingURL=connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector.js","sourceRoot":"","sources":["../../../src/plugins/connector-chatluna/connector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ declare const _default: import("../../core").PluginDefinition;
2
+ export default _default;
3
+ export type { ChatLunaPluginConfig } from './config';
4
+ export { ChatLunaConnector } from './connector';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/connector-chatluna/index.ts"],"names":[],"mappings":";AAWA,wBAgDE;AAGF,YAAY,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ // ChatLuna 连接器插件
3
+ // 使用 ChatLuna 的模型进行图像生成
4
+ // 注意:需要 ChatLuna 服务可用,否则连接器不会注册
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ChatLunaConnector = void 0;
7
+ const core_1 = require("../../core");
8
+ const connector_1 = require("./connector");
9
+ const api_1 = require("./api");
10
+ const tools_1 = require("./tools");
11
+ const config_1 = require("./config");
12
+ exports.default = (0, core_1.definePlugin)({
13
+ id: 'connector-chatluna',
14
+ name: 'ChatLuna',
15
+ description: 'ChatLuna 集成:使用 ChatLuna 模型生成图像,支持工具注册',
16
+ version: '1.0.0',
17
+ // 声明式连接器注册
18
+ connector: connector_1.ChatLunaConnector,
19
+ // 配置字段
20
+ configFields: config_1.chatlunaConfigFields,
21
+ configDefaults: config_1.defaultConfig,
22
+ async onLoad(ctx) {
23
+ const koishiCtx = ctx.ctx;
24
+ const logger = ctx.logger;
25
+ // 使用 inject 安全访问 chatluna 和 mediaLuna 服务
26
+ // 这样 Koishi 不会警告访问未注册的属性
27
+ koishiCtx.inject(['chatluna', 'mediaLuna'], (injectedCtx) => {
28
+ logger.info('ChatLuna service detected via inject');
29
+ // 注册 API(用于前端获取模型列表)
30
+ (0, api_1.registerChatLunaApi)(injectedCtx, logger);
31
+ // 工具注册函数
32
+ const registerTools = () => {
33
+ const config = ctx.getConfig();
34
+ if (config.enableTools) {
35
+ logger.info('Registering ChatLuna tools...');
36
+ (0, tools_1.registerChatLunaTools)(injectedCtx, config.tools, config.presetTool, logger);
37
+ }
38
+ };
39
+ // 延迟注册工具(等待 ChatLuna 完全初始化)
40
+ injectedCtx.setTimeout(() => {
41
+ registerTools();
42
+ }, 2000);
43
+ // 注册 dispose 回调
44
+ ctx.onDispose(() => {
45
+ (0, tools_1.unregisterChatLunaTools)();
46
+ });
47
+ });
48
+ logger.info('ChatLuna connector plugin loaded');
49
+ }
50
+ });
51
+ var connector_2 = require("./connector");
52
+ Object.defineProperty(exports, "ChatLunaConnector", { enumerable: true, get: function () { return connector_2.ChatLunaConnector; } });
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/connector-chatluna/index.ts"],"names":[],"mappings":";AAAA,iBAAiB;AACjB,wBAAwB;AACxB,gCAAgC;;;AAEhC,qCAAyC;AAEzC,2CAA+C;AAC/C,+BAA2C;AAC3C,mCAAwE;AACxE,qCAAyF;AAEzF,kBAAe,IAAA,mBAAY,EAAC;IAC1B,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,uCAAuC;IACpD,OAAO,EAAE,OAAO;IAEhB,WAAW;IACX,SAAS,EAAE,6BAAiB;IAE5B,OAAO;IACP,YAAY,EAAE,6BAAoB;IAClC,cAAc,EAAE,sBAAa;IAE7B,KAAK,CAAC,MAAM,CAAC,GAAkB;QAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAA;QACzB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;QAEzB,yCAAyC;QACzC,yBAAyB;QACzB,SAAS,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;YAC1D,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;YAEnD,qBAAqB;YACrB,IAAA,yBAAmB,EAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YAExC,SAAS;YACT,MAAM,aAAa,GAAG,GAAG,EAAE;gBACzB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAwB,CAAA;gBAEpD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;oBAC5C,IAAA,6BAAqB,EAAC,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;gBAC7E,CAAC;YACH,CAAC,CAAA;YAED,4BAA4B;YAC5B,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE;gBAC1B,aAAa,EAAE,CAAA;YACjB,CAAC,EAAE,IAAI,CAAC,CAAA;YAER,gBAAgB;YAChB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,IAAA,+BAAuB,GAAE,CAAA;YAC3B,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IACjD,CAAC;CACF,CAAC,CAAA;AAIF,yCAA+C;AAAtC,8GAAA,iBAAiB,OAAA"}
@@ -0,0 +1,11 @@
1
+ import { Context } from 'koishi';
2
+ import type { ToolConfig, PresetToolConfig } from './config';
3
+ /**
4
+ * 注册 Media Luna 工具到 ChatLuna
5
+ */
6
+ export declare function registerChatLunaTools(ctx: Context, tools: ToolConfig[], presetToolConfig: PresetToolConfig, logger: any): void;
7
+ /**
8
+ * 注销所有已注册的工具
9
+ */
10
+ export declare function unregisterChatLunaTools(): void;
11
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/plugins/connector-chatluna/tools.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAW,MAAM,QAAQ,CAAA;AAIzC,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAK5D;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,UAAU,EAAE,EACnB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,GAAG,QAwCZ;AAED;;GAEG;AACH,wBAAgB,uBAAuB,SAStC"}