ui-chan-mcp 0.7.0 → 0.8.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.
Files changed (157) hide show
  1. package/README.md +13 -0
  2. package/context/VOCABULARY.md +26 -1
  3. package/cue.schema.json +7 -19
  4. package/cues/emo_antic_lo.json +11 -2
  5. package/cues/emo_disgust.json +2 -2
  6. package/cues/emo_disgust_hi.json +2 -2
  7. package/cues/emo_disgust_lo.json +10 -2
  8. package/cues/emo_fear_lo.json +2 -2
  9. package/cues/emo_joy.json +2 -2
  10. package/cues/emo_sad_hi.json +2 -2
  11. package/cues/emo_sad_lo.json +1 -1
  12. package/cues/emo_surprise.json +7 -1
  13. package/cues/emo_surprise_hi.json +7 -1
  14. package/cues/emo_surprise_lo.json +7 -1
  15. package/cues/emo_trust.json +2 -2
  16. package/cues/emo_trust_lo.json +9 -2
  17. package/cues/mix_anger_antic.json +1 -1
  18. package/cues/mix_antic_joy.json +2 -2
  19. package/cues/mix_disgust_anger.json +1 -2
  20. package/cues/mix_sad_disgust.json +7 -1
  21. package/cues/mix_surprise_sad.json +2 -2
  22. package/cues/mix_surprise_sad_hi.json +7 -1
  23. package/cues/mix_trust_fear.json +2 -2
  24. package/cues/pose_arms_crossed.json +7 -1
  25. package/cues/pose_smug_arms.json +7 -1
  26. package/cues/pose_smug_hips.json +7 -1
  27. package/cues/pose_think.json +7 -1
  28. package/cues/pose_umbrella.json +6 -1
  29. package/cues/self_pride.json +7 -1
  30. package/cues/self_shame.json +1 -1
  31. package/cues/sys_address.json +7 -1
  32. package/cues/sys_blank.json +6 -1
  33. package/cues/sys_confused.json +7 -1
  34. package/cues/sys_dazed.json +7 -1
  35. package/cues/sys_neutral.json +6 -1
  36. package/cues/sys_present.json +7 -1
  37. package/cues/sys_sleepy.json +7 -1
  38. package/cues/sys_smirk.json +8 -1
  39. package/cues/sys_think.json +7 -1
  40. package/dist/app/cues.js +0 -25
  41. package/dist/app/editor-main.js +97 -17
  42. package/dist/app/editor-preload.js +7 -2
  43. package/dist/app/main.js +40 -5
  44. package/dist/app/persona.js +2 -2
  45. package/dist/app/prosody.js +471 -0
  46. package/dist/app/sequences.js +264 -0
  47. package/dist/app/state.js +118 -74
  48. package/dist/app/tts.js +133 -17
  49. package/dist/app/watch.js +56 -0
  50. package/dist/mcp-server.js +3 -2
  51. package/dist/renderer/bundle.js +5 -5
  52. package/dist/renderer/editor.html +220 -57
  53. package/dist/renderer/editor.js +1424 -431
  54. package/dist/shared/paths.js +4 -0
  55. package/dist/shared/set-cue-schema.js +14 -25
  56. package/docs/ARCHITECTURE.md +894 -0
  57. package/docs/CLIENTS.md +2 -2
  58. package/docs/CUE_AUTHORING.md +52 -9
  59. package/docs/DEVELOPMENT.md +5 -5
  60. package/docs/PERSONA.md +1 -1
  61. package/docs/PSD_LAYERS.md +6 -9
  62. package/docs/README.md +3 -1
  63. package/docs/STYLE.md +1 -1
  64. package/docs/TOOLS.md +1 -1
  65. package/docs/TROUBLESHOOTING.md +5 -5
  66. package/docs/TTS.md +7 -2
  67. package/docs/design/CUE_CATALOG.md +3 -4
  68. package/docs/design/PROSODY.md +383 -0
  69. package/hooks/lib/mascot.js +4 -4
  70. package/hooks/notify.js +2 -2
  71. package/hooks/reaction.js +1 -1
  72. package/package.json +4 -2
  73. package/persona/ui-chan.md +21 -1
  74. package/plugins/hermes/ui-chan/__init__.py +1 -1
  75. package/plugins/opencode/ui-chan.mjs +2 -2
  76. package/sequence.schema.json +115 -0
  77. package/sequences/event/agent_back/agent_back_done.json +21 -0
  78. package/sequences/event/agent_back/agent_back_oh.json +24 -0
  79. package/sequences/event/agent_back/agent_back_welcome.json +21 -0
  80. package/sequences/event/agent_out/agent_out_called.json +21 -0
  81. package/sequences/event/agent_out/agent_out_threw.json +23 -0
  82. package/sequences/event/agent_out/agent_out_wait.json +21 -0
  83. package/sequences/event/compact/compact_long.json +20 -0
  84. package/sequences/event/compact/compact_memory.json +21 -0
  85. package/sequences/event/idle_wait/idle_bored.json +22 -0
  86. package/sequences/event/idle_wait/idle_left_behind.json +27 -0
  87. package/sequences/event/idle_wait/idle_where.json +20 -0
  88. package/sequences/event/permission/permission_call.json +21 -0
  89. package/sequences/event/permission/permission_jito.json +24 -0
  90. package/sequences/event/permission/permission_soft.json +19 -0
  91. package/sequences/event/tool_failure/fail_again.json +24 -0
  92. package/sequences/event/tool_failure/fail_koketa.json +28 -0
  93. package/sequences/event/tool_failure/fail_ouch.json +23 -0
  94. package/sequences/event/tool_failure/fail_red.json +26 -0
  95. package/sequences/event/tool_failure/fail_shrug.json +23 -0
  96. package/sequences/event/turn_done/done_ask.json +21 -0
  97. package/sequences/event/turn_done/done_break.json +23 -0
  98. package/sequences/event/turn_done/done_handoff.json +21 -0
  99. package/sequences/event/turn_done/done_rest.json +21 -0
  100. package/sequences/event/turn_done/done_watching.json +21 -0
  101. package/sequences/fidget/poke/poke_cold.json +24 -0
  102. package/sequences/fidget/poke/poke_cold_glare.json +26 -0
  103. package/sequences/fidget/poke/poke_cold_line.json +24 -0
  104. package/sequences/fidget/poke/poke_dere.json +26 -0
  105. package/sequences/fidget/poke/poke_normal.json +26 -0
  106. package/sequences/fidget/poke/poke_normal_annoyed.json +25 -0
  107. package/sequences/fidget/poke/poke_shy.json +24 -0
  108. package/sequences/fidget/poke/poke_surprise.json +30 -0
  109. package/sequences/fidget/poke/poke_ticklish.json +24 -0
  110. package/sequences/fidget/spam/spam_glare_cold.json +26 -0
  111. package/sequences/fidget/spam/spam_pout_dere.json +24 -0
  112. package/sequences/fidget/spam/spam_stop_cold.json +22 -0
  113. package/sequences/fidget/spam/spam_stop_normal.json +25 -0
  114. package/sequences/idling/annoyed.json +23 -0
  115. package/sequences/idling/bored.json +38 -0
  116. package/sequences/idling/bored_chat.json +23 -0
  117. package/sequences/idling/call.json +33 -0
  118. package/sequences/idling/dere.json +26 -0
  119. package/sequences/idling/doya.json +42 -0
  120. package/sequences/idling/doze.json +32 -0
  121. package/sequences/idling/evening.json +27 -0
  122. package/sequences/idling/forgotten.json +26 -0
  123. package/sequences/idling/giggle.json +23 -0
  124. package/sequences/idling/here_for_you.json +21 -0
  125. package/sequences/idling/lookaround.json +35 -0
  126. package/sequences/idling/morning.json +24 -0
  127. package/sequences/idling/night_owl.json +22 -0
  128. package/sequences/idling/night_sleepy.json +25 -0
  129. package/sequences/idling/ponder.json +14 -0
  130. package/sequences/idling/rain_wait.json +22 -0
  131. package/sequences/idling/rest_reminder.json +25 -0
  132. package/sequences/idling/salty.json +24 -0
  133. package/sequences/idling/shoulder_rub.json +25 -0
  134. package/sequences/idling/sigh.json +27 -0
  135. package/sequences/idling/sleep_cold.json +28 -0
  136. package/sequences/idling/sleep_nudge_warm.json +30 -0
  137. package/sequences/idling/sleepy.json +21 -0
  138. package/sequences/idling/thinking.json +51 -0
  139. package/sequences/idling/umbrella.json +66 -0
  140. package/sequences/idling/yawn.json +38 -0
  141. package/sequences/presence/away.json +47 -0
  142. package/sequences/presence/wake.json +46 -0
  143. package/ui-chan.config.json +26 -854
  144. package/cues/idling_doze_1.json +0 -9
  145. package/cues/idling_doze_2.json +0 -9
  146. package/cues/idling_doze_3.json +0 -9
  147. package/cues/idling_giggle_1.json +0 -9
  148. package/cues/idling_giggle_2.json +0 -9
  149. package/cues/idling_lookaround_1.json +0 -10
  150. package/cues/idling_lookaround_2.json +0 -10
  151. package/cues/idling_lookaround_3.json +0 -10
  152. package/cues/idling_ponder.json +0 -9
  153. package/cues/idling_sigh_1.json +0 -11
  154. package/cues/idling_sigh_2.json +0 -11
  155. package/cues/idling_yawn_1.json +0 -9
  156. package/cues/idling_yawn_2.json +0 -12
  157. package/cues/idling_yawn_3.json +0 -12
package/README.md CHANGED
@@ -164,6 +164,19 @@ VoiSona Talk が起きてないか、REST API が有効になってないか、
164
164
  | 新しい表情を作りたい | [docs/CUE_AUTHORING.md](docs/CUE_AUTHORING.md) |
165
165
  | わたしの性格を変えたい | [docs/PERSONA.md](docs/PERSONA.md) |
166
166
  | **中のコードを直したい** | [docs/](docs/README.md) — 開発者向けの資料はこっちに全部ある |
167
+ | なぜこの設計なのか知りたい | [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) — 設計判断と、そう決めた理由 |
168
+
169
+ > [!NOTE]
170
+ > **AI エージェントへ。** このリポジトリに `CLAUDE.md` / `AGENTS.md` は**ありません**。
171
+ > 公開リポジトリなので、それらは手元固有のメモ(アカウントの使い分け、認証、個人の
172
+ > 作業手順)専用として `.gitignore` してあります。**自動で読まれるファイルが無い**ので、
173
+ > コードに触る前に自分で **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)** を開いて
174
+ > ください。二つの Electron プロセスの分担、Cue の仕組み、意図的に却下した設計まで
175
+ > 全部そこにあります——読まずに書くと、たいてい却下済みの案を再発明します。
176
+ >
177
+ > 用語(Idling / Cue / EventCue …)は [VISION.md](VISION.md)、準備とコマンドは
178
+ > [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md)。手元のメモを残すなら `CLAUDE.md` に
179
+ > 書けば、コミットに混ざりません。
167
180
  | 手伝ってくれるなら | [CONTRIBUTING.md](CONTRIBUTING.md) — 歓迎するもの/お断りするもの |
168
181
 
169
182
  ---
@@ -87,6 +87,31 @@
87
87
  - 困り:「うーん…」「あちゃー」「むむむ」
88
88
  - タメ口で通す(丁寧になりすぎたら崩す)
89
89
 
90
+ ## 音になる書き方
91
+
92
+ **書いたとおりに読まれる。** 記号は飾りではなく、そのまま喋り方になる。
93
+
94
+ | 書き方 | 音 |
95
+ |---|---|
96
+ | `、` `…` | そこで一拍おく |
97
+ | `〜` `ー` | 直前の母音が伸びる(「ふ〜ん」「はーい」) |
98
+ | `っ`(語末) | 詰まって短くなる(「えっ」「わっ」) |
99
+ | `?` | 語尾が上がる。`。` なら上がらない |
100
+ | `**語**` | その語を立てる。**1行に1〜2語まで** |
101
+
102
+ 公式の口癖の「~」は**本当に伸びる**(「はい、どうも~」「ふ~ん」「やだよ~ん」)。
103
+ 崩した表記はそのままの音になるので、崩したまま書く。
104
+
105
+ 同じ語でも、書き分けで別の意味になる:
106
+
107
+ - `へえ?`(鋭い聞き返し) / `へえ〜?`(引っかかってる)
108
+ - `えっ?`(虚をつかれた) / `え?`(聞き直した)
109
+ - `はい。`(ふつうの返事) / `はーい。`(気の抜けた返事)
110
+ - `ねえ〜。`(呼びかけ) / `〜だよねぇ?`(同意を求める)
111
+
112
+ `text` に英字や数字が混ざる行では `reading` のほうが読み上げられるので、
113
+ **そのときは `reading` 側にも同じ記号を書く**。
114
+
90
115
  ## 技術用語の扱い
91
116
 
92
117
  - 技術用語はそのまま使ってよい(ビルド、コミット、デプロイ等)
@@ -104,4 +129,4 @@
104
129
  persona の「`text` と `reading` の書き分け」が正。ここはういの口癖まわりだけ:
105
130
 
106
131
  - 伸ばし棒や崩した表記(「やめてよー」「むりぃ…」「え〜ん」)は、崩したまま `reading` にも書く(口癖の「間」がそこにある)
107
- - 「!」「?」「…」はそのまま残してよい(間として使われる)
132
+ - 「!」「?」「…」はそのまま残す(→「音になる書き方」)
package/cue.schema.json CHANGED
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "internal": {
20
20
  "type": "boolean",
21
- "description": "trueなら、このCueはAI向けのCue一覧(persona プロンプトが生成するset_cue用カタログ)から除外される。set_cueで直接指定すれば動作はする(実行を禁止するフラグではない)が、単体で場面に当てる想定ではなく、IdlingCue(ui-chan.config.jsonのidle.idlingCues/idle.chatter)が複数ステップの一部として内部的に参照するためだけのCueであることを示す。ファイル名のprefix等の暗黙の命名規則ではなく、この明示的なフラグで判定する。省略時はfalse扱い。",
21
+ "description": "trueなら、このCueはAI向けのCue一覧(persona プロンプトが生成するset_cue用カタログ)から除外される。set_cueで直接指定すれば動作はする(実行を禁止するフラグではない)。エージェントに直接選ばせたくないCueに付ける。固定セリフ(sequences/)の見た目はシーケンスのステップ側が自前で持つので、そのための部品Cueは作らない。ファイル名のprefix等の暗黙の命名規則ではなく、この明示的なフラグで判定する。省略時はfalse扱い。",
22
22
  "default": false
23
23
  },
24
24
  "select": {
@@ -56,34 +56,20 @@
56
56
  },
57
57
  "voice": {
58
58
  "type": "object",
59
- "description": "このCue固有の声色。VoiSona Talk REST APIの speech_synthesis_global_parameters のうち、Cueに焼き込む値(baked)だけを持つ。pitch/speed/volume/intonationはここに含めない — それらはset_cue呼び出し時のアドリブ引数(1行のセリフごとの演技)であり、このスキーマの対象外。",
59
+ "description": "このCue固有の声色。**感情スタイルの重みだけ**を持つ。声質を直に歪めるパラメータ(alp/huskiness)と、1行ごとの数値(pitch/speed/volume/intonation)は意図的に持たない——手で数値を書く設計をやめ、読み方はセリフの記法(**強調**・…・〜・?)とCueの delivery からアプリが導出する。→ src/app/prosody.ts",
60
60
  "additionalProperties": false,
61
61
  "properties": {
62
62
  "style_weights": {
63
63
  "type": "object",
64
- "description": "スタイル名 → 重み。例 {\"Happy\": 0.7, \"Bashful\": 0.3}。実行時にボイスの style_names 順の配列へ変換して送信する(ブレンド計算はしない、素通し)。スタイル名は使用するVoiSonaボイスに依存するため、GET /api/talk/v1/voices/{voice_name}/{voice_version} の style_names で実在を確認すること。",
64
+ "description": "スタイル名 → 重み。例 {\"Happy\": 0.6, \"Bashful\": 0.4}。実行時にボイスの style_names 順の配列へ変換して送信する。**エンジンは重みを正規化するので、効くのは比率だけ。合計値には意味がない**(実測:{\"Sad\":0.3} と {\"Sad\":2.0} はバイト単位で同一の音声になる)。したがって {\"Sad\":0.3} は「控えめな悲しみ」ではなく {\"Sad\":1} と同じ。弱めたいときは他のスタイルとの比率で書く(例 {\"Sad\":0.3,\"Normal\":0.7})。**合計は1に揃えて書くこと**——音は変わらないが、読む人の誤解を防ぐため。スタイル名は使用するVoiSonaボイスに依存するため、GET /api/talk/v1/voices/{voice_name}/{voice_version} の style_names で実在を確認すること。",
65
65
  "additionalProperties": {
66
66
  "type": "number",
67
67
  "minimum": 0,
68
- "description": "個々のスタイルの重み。上限・正規化要否はVoiSonaのバージョン/ボイスに依存するため、実装時に talk_api.yaml で要確認。"
68
+ "description": "個々のスタイルの重み(比率)。合計1で書く。"
69
69
  },
70
70
  "propertyNames": {
71
71
  "minLength": 1
72
72
  }
73
- },
74
- "alp": {
75
- "type": "number",
76
- "minimum": -1,
77
- "maximum": 1,
78
- "default": 0,
79
- "description": "声質パラメータ。VoiSona global_parameters.alp をそのまま焼き込む。"
80
- },
81
- "huskiness": {
82
- "type": "number",
83
- "minimum": -20,
84
- "maximum": 20,
85
- "default": 0,
86
- "description": "かすれ具合。VoiSona global_parameters.huskiness をそのまま焼き込む。"
87
73
  }
88
74
  }
89
75
  }
@@ -100,7 +86,9 @@
100
86
  "hide": [],
101
87
  "blink": false,
102
88
  "voice": {
103
- "style_weights": { "Happy": 1.0 },
89
+ "style_weights": {
90
+ "Happy": 1.0
91
+ },
104
92
  "alp": 0,
105
93
  "huskiness": 0
106
94
  }
@@ -1,6 +1,15 @@
1
1
  {
2
2
  "label": "関心・興味",
3
3
  "description": "関心・興味(ちょっと気になる。期待 emo_antic より手前の軽い興味)",
4
- "select": ["!眉/*上がり", "!目/*上向き1", "!口/*お"],
5
- "voice": { "style_weights": { "Normal": 0.4, "Happy": 0.3 } }
4
+ "select": [
5
+ "!眉/*上がり",
6
+ "!目/*上向き1",
7
+ "!口/*お"
8
+ ],
9
+ "voice": {
10
+ "style_weights": {
11
+ "Normal": 0.571,
12
+ "Happy": 0.429
13
+ }
14
+ }
6
15
  }
@@ -12,8 +12,8 @@
12
12
  ],
13
13
  "voice": {
14
14
  "style_weights": {
15
- "Angry": 0.3,
16
- "Sad": 0.2
15
+ "Angry": 0.6,
16
+ "Sad": 0.4
17
17
  }
18
18
  }
19
19
  }
@@ -13,8 +13,8 @@
13
13
  ],
14
14
  "voice": {
15
15
  "style_weights": {
16
- "Angry": 0.4,
17
- "Sad": 0.3
16
+ "Angry": 0.571,
17
+ "Sad": 0.429
18
18
  }
19
19
  }
20
20
  }
@@ -1,6 +1,14 @@
1
1
  {
2
2
  "label": "軽い嫌悪・うんざり",
3
3
  "description": "軽い嫌悪・うんざり(少し顔をしかめ受け流す。嫌悪 emo_disgust より弱い)",
4
- "select": ["!眉/*困り", "!目/*基本目セット/*目そらし1", "!口/*む"],
5
- "voice": { "style_weights": { "Sad": 0.3 } }
4
+ "select": [
5
+ "!眉/*困り",
6
+ "!目/*基本目セット/*目そらし1",
7
+ "!口/*む"
8
+ ],
9
+ "voice": {
10
+ "style_weights": {
11
+ "Sad": 1.0
12
+ }
13
+ }
6
14
  }
@@ -12,8 +12,8 @@
12
12
  ],
13
13
  "voice": {
14
14
  "style_weights": {
15
- "Angry": 0.2,
16
- "Sad": 0.2
15
+ "Angry": 0.5,
16
+ "Sad": 0.5
17
17
  }
18
18
  }
19
19
  }
package/cues/emo_joy.json CHANGED
@@ -10,8 +10,8 @@
10
10
  "blink": false,
11
11
  "voice": {
12
12
  "style_weights": {
13
- "Normal": 1,
14
- "Happy": 1
13
+ "Normal": 0.5,
14
+ "Happy": 0.5
15
15
  }
16
16
  }
17
17
  }
@@ -11,8 +11,8 @@
11
11
  ],
12
12
  "voice": {
13
13
  "style_weights": {
14
- "Angry": 1,
15
- "Sad": 1
14
+ "Angry": 0.5,
15
+ "Sad": 0.5
16
16
  }
17
17
  }
18
18
  }
@@ -8,7 +8,7 @@
8
8
  ],
9
9
  "voice": {
10
10
  "style_weights": {
11
- "Sad": 0.5
11
+ "Sad": 1.0
12
12
  }
13
13
  }
14
14
  }
@@ -11,5 +11,11 @@
11
11
  ],
12
12
  "show": [
13
13
  "!汗・涙/汗1"
14
- ]
14
+ ],
15
+ "voice": {
16
+ "style_weights": {
17
+ "Happy": 0.5,
18
+ "Normal": 0.5
19
+ }
20
+ }
15
21
  }
@@ -10,5 +10,11 @@
10
10
  ],
11
11
  "show": [
12
12
  "!汗・涙/汗1"
13
- ]
13
+ ],
14
+ "voice": {
15
+ "style_weights": {
16
+ "Happy": 0.8,
17
+ "Normal": 0.2
18
+ }
19
+ }
14
20
  }
@@ -7,5 +7,11 @@
7
7
  "!目/*○○",
8
8
  "!口/*お"
9
9
  ],
10
- "blink": true
10
+ "blink": true,
11
+ "voice": {
12
+ "style_weights": {
13
+ "Normal": 0.8,
14
+ "Bashful": 0.2
15
+ }
16
+ }
11
17
  }
@@ -9,8 +9,8 @@
9
9
  "blink": false,
10
10
  "voice": {
11
11
  "style_weights": {
12
- "Normal": 0.5,
13
- "Bashful": 0.3
12
+ "Normal": 0.625,
13
+ "Bashful": 0.375
14
14
  }
15
15
  }
16
16
  }
@@ -1,6 +1,13 @@
1
1
  {
2
2
  "label": "容認・受け入れ",
3
3
  "description": "軽い信頼・容認(穏やかに受け入れる。信頼 emo_trust より手前)",
4
- "select": ["!目/*にっこり1", "!口/*ほほえみ"],
5
- "voice": { "style_weights": { "Normal": 0.6 } }
4
+ "select": [
5
+ "!目/*にっこり1",
6
+ "!口/*ほほえみ"
7
+ ],
8
+ "voice": {
9
+ "style_weights": {
10
+ "Normal": 1.0
11
+ }
12
+ }
6
13
  }
@@ -10,7 +10,7 @@
10
10
  ],
11
11
  "voice": {
12
12
  "style_weights": {
13
- "Angry": 0.7
13
+ "Angry": 1.0
14
14
  }
15
15
  }
16
16
  }
@@ -9,8 +9,8 @@
9
9
  ],
10
10
  "voice": {
11
11
  "style_weights": {
12
- "Happy": 0.5,
13
- "Normal": 0.3
12
+ "Happy": 0.625,
13
+ "Normal": 0.375
14
14
  }
15
15
  }
16
16
  }
@@ -10,8 +10,7 @@
10
10
  ],
11
11
  "voice": {
12
12
  "style_weights": {
13
- "Angry": 0.5,
14
- "Sad": 0.5
13
+ "Angry": 1
15
14
  }
16
15
  }
17
16
  }
@@ -8,5 +8,11 @@
8
8
  ],
9
9
  "show": [
10
10
  "!頬・顔色/かげり"
11
- ]
11
+ ],
12
+ "voice": {
13
+ "style_weights": {
14
+ "Sad": 0.8,
15
+ "Angry": 0.2
16
+ }
17
+ }
12
18
  }
@@ -14,8 +14,8 @@
14
14
  ],
15
15
  "voice": {
16
16
  "style_weights": {
17
- "Angry": 0.7,
18
- "Sad": 0.7
17
+ "Angry": 0.5,
18
+ "Sad": 0.5
19
19
  }
20
20
  }
21
21
  }
@@ -10,5 +10,11 @@
10
10
  ],
11
11
  "show": [
12
12
  "!汗・涙/汗1"
13
- ]
13
+ ],
14
+ "voice": {
15
+ "style_weights": {
16
+ "Sad": 0.6,
17
+ "Normal": 0.4
18
+ }
19
+ }
14
20
  }
@@ -11,8 +11,8 @@
11
11
  ],
12
12
  "voice": {
13
13
  "style_weights": {
14
- "Bashful": 0.3,
15
- "Sad": 0.4
14
+ "Bashful": 0.429,
15
+ "Sad": 0.571
16
16
  }
17
17
  }
18
18
  }
@@ -5,5 +5,11 @@
5
5
  "!奥の腕/*(非表示)",
6
6
  "!手前の腕/*腕組み(奥の腕は非表示)"
7
7
  ],
8
- "blink": true
8
+ "blink": true,
9
+ "voice": {
10
+ "style_weights": {
11
+ "Normal": 0.7,
12
+ "Sad": 0.3
13
+ }
14
+ }
9
15
  }
@@ -7,5 +7,11 @@
7
7
  "!口/*あはー",
8
8
  "!目/*細目",
9
9
  "!眉/*上がり"
10
- ]
10
+ ],
11
+ "voice": {
12
+ "style_weights": {
13
+ "Happy": 0.5,
14
+ "Normal": 0.5
15
+ }
16
+ }
11
17
  }
@@ -7,5 +7,11 @@
7
7
  "!口/*あはー",
8
8
  "!目/*基本目セット/*縮小",
9
9
  "!眉/*困り"
10
- ]
10
+ ],
11
+ "voice": {
12
+ "style_weights": {
13
+ "Happy": 0.6,
14
+ "Normal": 0.4
15
+ }
16
+ }
11
17
  }
@@ -4,5 +4,11 @@
4
4
  "select": [
5
5
  "!手前の腕/*考える",
6
6
  "!目/*上向き1"
7
- ]
7
+ ],
8
+ "voice": {
9
+ "style_weights": {
10
+ "Normal": 0.7,
11
+ "Sad": 0.3
12
+ }
13
+ }
8
14
  }
@@ -5,5 +5,10 @@
5
5
  "!奥の腕/*傘",
6
6
  "!手前の腕/*基本"
7
7
  ],
8
- "blink": true
8
+ "blink": true,
9
+ "voice": {
10
+ "style_weights": {
11
+ "Normal": 1
12
+ }
13
+ }
9
14
  }
@@ -6,5 +6,11 @@
6
6
  "!手前の腕/*腰",
7
7
  "!口/*にし",
8
8
  "!目/*細目"
9
- ]
9
+ ],
10
+ "voice": {
11
+ "style_weights": {
12
+ "Happy": 0.6,
13
+ "Normal": 0.4
14
+ }
15
+ }
10
16
  }
@@ -13,7 +13,7 @@
13
13
  "blink": false,
14
14
  "voice": {
15
15
  "style_weights": {
16
- "Bashful": 0.8
16
+ "Bashful": 1.0
17
17
  }
18
18
  }
19
19
  }
@@ -5,5 +5,11 @@
5
5
  "!奥の腕/*呼びかけ",
6
6
  "!手前の腕/*呼びかけ",
7
7
  "!口/*あ"
8
- ]
8
+ ],
9
+ "voice": {
10
+ "style_weights": {
11
+ "Normal": 0.7,
12
+ "Happy": 0.3
13
+ }
14
+ }
9
15
  }
@@ -7,5 +7,10 @@
7
7
  "!目/*ーー",
8
8
  "!口/*ん"
9
9
  ],
10
- "blink": true
10
+ "blink": true,
11
+ "voice": {
12
+ "style_weights": {
13
+ "Normal": 1
14
+ }
15
+ }
11
16
  }
@@ -8,5 +8,11 @@
8
8
  ],
9
9
  "show": [
10
10
  "!汗・涙/汗2"
11
- ]
11
+ ],
12
+ "voice": {
13
+ "style_weights": {
14
+ "Bashful": 0.5,
15
+ "Normal": 0.5
16
+ }
17
+ }
12
18
  }
@@ -6,5 +6,11 @@
6
6
  "!手前の腕/*基本",
7
7
  "!口/*ほあー"
8
8
  ],
9
- "blink": true
9
+ "blink": true,
10
+ "voice": {
11
+ "style_weights": {
12
+ "Normal": 0.7,
13
+ "Sad": 0.3
14
+ }
15
+ }
10
16
  }
@@ -1,5 +1,10 @@
1
1
  {
2
2
  "label": "素・相槌",
3
3
  "description": "通常・素の相槌",
4
- "blink": true
4
+ "blink": true,
5
+ "voice": {
6
+ "style_weights": {
7
+ "Normal": 1
8
+ }
9
+ }
5
10
  }
@@ -5,5 +5,11 @@
5
5
  "!奥の腕/*指さし横",
6
6
  "!手前の腕/*基本"
7
7
  ],
8
- "blink": true
8
+ "blink": true,
9
+ "voice": {
10
+ "style_weights": {
11
+ "Normal": 0.7,
12
+ "Happy": 0.3
13
+ }
14
+ }
9
15
  }
@@ -4,5 +4,11 @@
4
4
  "select": [
5
5
  "!目/*ーー",
6
6
  "!口/*ん"
7
- ]
7
+ ],
8
+ "voice": {
9
+ "style_weights": {
10
+ "Sad": 0.4,
11
+ "Normal": 0.6
12
+ }
13
+ }
8
14
  }
@@ -6,5 +6,12 @@
6
6
  "!奥の腕/*口元",
7
7
  "!手前の腕/*基本",
8
8
  "!口/*むふ"
9
- ]
9
+ ],
10
+ "voice": {
11
+ "style_weights": {
12
+ "Happy": 0.4,
13
+ "Bashful": 0.2,
14
+ "Normal": 0.4
15
+ }
16
+ }
10
17
  }
@@ -5,5 +5,11 @@
5
5
  "!手前の腕/*考える",
6
6
  "!口/*んー",
7
7
  "!目/*上向き1"
8
- ]
8
+ ],
9
+ "voice": {
10
+ "style_weights": {
11
+ "Normal": 0.7,
12
+ "Sad": 0.3
13
+ }
14
+ }
9
15
  }
package/dist/app/cues.js CHANGED
@@ -38,8 +38,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.loadCues = loadCues;
40
40
  exports.validateCueObject = validateCueObject;
41
- exports.watchCues = watchCues;
42
- exports.extractCueVoice = extractCueVoice;
43
41
  const fs = __importStar(require("node:fs"));
44
42
  const path = __importStar(require("node:path"));
45
43
  const _2020_js_1 = __importDefault(require("ajv/dist/2020.js"));
@@ -105,26 +103,3 @@ function validateCueObject(obj, schemaPath) {
105
103
  return null;
106
104
  return (validate.errors ?? []).map((e) => `${e.instancePath || '/'} ${e.message}`).join('; ');
107
105
  }
108
- function watchCues(dirs, onChange) {
109
- let timer = null;
110
- const fire = () => {
111
- if (timer)
112
- clearTimeout(timer);
113
- timer = setTimeout(() => {
114
- timer = null;
115
- onChange();
116
- }, 300);
117
- };
118
- for (const dir of Array.isArray(dirs) ? dirs : [dirs]) {
119
- if (fs.existsSync(dir))
120
- fs.watch(dir, fire);
121
- }
122
- }
123
- function extractCueVoice(set) {
124
- const out = {};
125
- for (const [name, cue] of Object.entries(set.cues)) {
126
- if (cue.voice)
127
- out[name] = cue.voice;
128
- }
129
- return out;
130
- }