@coeiro-operator/mcp 1.4.6 → 1.4.8

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ7D;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,EACxB,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CAMvB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,CAalE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,MAAM,CAoCvG;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,eAAe,EACxB,oBAAoB,EAAE,oBAAoB,EAC1C,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CA4BxD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,MAAM,CAiC7F"}
package/dist/utils.js ADDED
@@ -0,0 +1,141 @@
1
+ /**
2
+ * MCP Server共通ユーティリティ関数
3
+ */
4
+ /**
5
+ * オペレータ入力のバリデーション
6
+ */
7
+ export function validateOperatorInput(operator) {
8
+ if (operator !== undefined && operator !== '' && operator !== null) {
9
+ if (/[\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FAF]/.test(operator)) {
10
+ throw new Error('オペレータ名は英語表記で指定してください(例: tsukuyomi, alma)。日本語は使用できません。');
11
+ }
12
+ }
13
+ }
14
+ /**
15
+ * オペレータのアサイン
16
+ */
17
+ export async function assignOperator(manager, operator, style) {
18
+ if (operator && operator !== '' && operator !== null) {
19
+ return await manager.assignSpecificOperator(operator, style);
20
+ }
21
+ else {
22
+ return await manager.assignRandomOperator(style);
23
+ }
24
+ }
25
+ /**
26
+ * キャラクターからスタイル情報を抽出
27
+ */
28
+ export function extractStyleInfo(character) {
29
+ // character.stylesはRecord<number, StyleConfig>形式
30
+ return Object.entries(character.styles || {})
31
+ .filter(([_, styleConfig]) => !styleConfig.disabled)
32
+ .map(([styleId, styleConfig]) => {
33
+ return {
34
+ id: styleId,
35
+ name: styleConfig.styleName,
36
+ personality: styleConfig.personality || character.personality,
37
+ speakingStyle: styleConfig.speakingStyle || character.speakingStyle,
38
+ morasPerSecond: styleConfig.morasPerSecond,
39
+ };
40
+ });
41
+ }
42
+ /**
43
+ * アサイン結果をフォーマット
44
+ */
45
+ export function formatAssignmentResult(assignResult, availableStyles) {
46
+ let resultText = `${assignResult.characterName} (${assignResult.characterId}) をアサインしました。\n\n`;
47
+ if (assignResult.currentStyle) {
48
+ resultText += `📍 現在のスタイル: ${assignResult.currentStyle.styleName}\n`;
49
+ resultText += ` 性格: ${assignResult.currentStyle.personality}\n`;
50
+ resultText += ` 話し方: ${assignResult.currentStyle.speakingStyle}\n`;
51
+ // 現在のスタイルの話速を取得
52
+ const currentStyleInfo = availableStyles.find(s => s.id === assignResult.currentStyle?.styleId);
53
+ if (currentStyleInfo?.morasPerSecond) {
54
+ resultText += ` 基準話速: ${currentStyleInfo.morasPerSecond} モーラ/秒\n`;
55
+ }
56
+ resultText += '\n';
57
+ }
58
+ if (availableStyles.length > 1) {
59
+ resultText += `🎭 利用可能なスタイル(切り替え可能):\n`;
60
+ availableStyles.forEach(style => {
61
+ const isCurrent = style.id === assignResult.currentStyle?.styleId;
62
+ const marker = isCurrent ? '→ ' : ' ';
63
+ resultText += `${marker}${style.id}: ${style.name}\n`;
64
+ resultText += ` 性格: ${style.personality}\n`;
65
+ resultText += ` 話し方: ${style.speakingStyle}\n`;
66
+ if (style.morasPerSecond) {
67
+ resultText += ` 基準話速: ${style.morasPerSecond} モーラ/秒\n`;
68
+ }
69
+ });
70
+ }
71
+ else {
72
+ resultText += `ℹ️ このキャラクターは1つのスタイルのみ利用可能です。\n`;
73
+ }
74
+ if (assignResult.greeting) {
75
+ resultText += `\n💬 "${assignResult.greeting}"\n`;
76
+ }
77
+ return resultText;
78
+ }
79
+ /**
80
+ * ターゲットキャラクターを取得
81
+ */
82
+ export async function getTargetCharacter(manager, characterInfoService, characterId) {
83
+ if (characterId) {
84
+ try {
85
+ const character = await characterInfoService.getCharacterInfo(characterId);
86
+ if (!character) {
87
+ throw new Error(`キャラクター '${characterId}' が見つかりません`);
88
+ }
89
+ return { character, characterId };
90
+ }
91
+ catch {
92
+ throw new Error(`キャラクター '${characterId}' が見つかりません`);
93
+ }
94
+ }
95
+ else {
96
+ const currentOperator = await manager.showCurrentOperator();
97
+ if (!currentOperator.characterId) {
98
+ throw new Error('現在オペレータが割り当てられていません。まず operator_assign を実行してください。');
99
+ }
100
+ const character = await characterInfoService.getCharacterInfo(currentOperator.characterId);
101
+ if (!character) {
102
+ throw new Error(`現在のオペレータ '${currentOperator.characterId}' のキャラクター情報が見つかりません`);
103
+ }
104
+ return { character, characterId: currentOperator.characterId };
105
+ }
106
+ }
107
+ /**
108
+ * スタイル結果をフォーマット
109
+ */
110
+ export function formatStylesResult(character, availableStyles) {
111
+ let resultText = `🎭 ${character.speakerName || character.characterId} のスタイル情報\n\n`;
112
+ resultText += `📋 基本情報:\n`;
113
+ resultText += ` 性格: ${character.personality}\n`;
114
+ resultText += ` 話し方: ${character.speakingStyle}\n`;
115
+ // defaultStyleIdからスタイル名を取得
116
+ const defaultStyleInfo = character.styles?.[character.defaultStyleId];
117
+ const defaultStyleName = defaultStyleInfo?.styleName || `ID:${character.defaultStyleId}`;
118
+ resultText += ` デフォルトスタイル: ${defaultStyleName}\n\n`;
119
+ if (availableStyles.length > 0) {
120
+ resultText += `🎨 利用可能なスタイル (${availableStyles.length}種類):\n`;
121
+ availableStyles.forEach(style => {
122
+ const isDefault = style.name === defaultStyleName;
123
+ const marker = isDefault ? '★ ' : ' ';
124
+ resultText += `${marker}${style.id}: ${style.name}\n`;
125
+ resultText += ` 性格: ${style.personality}\n`;
126
+ resultText += ` 話し方: ${style.speakingStyle}\n`;
127
+ if (style.morasPerSecond) {
128
+ resultText += ` 基準話速: ${style.morasPerSecond} モーラ/秒\n`;
129
+ }
130
+ if (isDefault) {
131
+ resultText += ` (デフォルトスタイル)\n`;
132
+ }
133
+ resultText += `\n`;
134
+ });
135
+ }
136
+ else {
137
+ resultText += `⚠️ 利用可能なスタイルがありません。\n`;
138
+ }
139
+ return resultText;
140
+ }
141
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coeiro-operator/mcp",
3
- "version": "1.4.6",
3
+ "version": "1.4.8",
4
4
  "description": "MCP server for COEIRO Operator",
5
5
  "type": "module",
6
6
  "main": "dist/server.js",
@@ -25,9 +25,9 @@
25
25
  "@modelcontextprotocol/sdk": "^1.17.0",
26
26
  "commander": "^14.0.1",
27
27
  "zod": "^3.24.1",
28
- "@coeiro-operator/audio": "1.2.6",
29
- "@coeiro-operator/common": "1.0.2",
30
- "@coeiro-operator/core": "1.3.0"
28
+ "@coeiro-operator/audio": "1.2.7",
29
+ "@coeiro-operator/core": "1.3.1",
30
+ "@coeiro-operator/common": "1.0.2"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@types/node": "^22.18.3",