@chocodrop/mcp 0.1.0-alpha.0 → 0.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +4 -5
- package/runtime/site/examples/sdk-test/README.md +16 -59
- package/runtime/site/examples/sdk-test/index.html +93 -0
- package/runtime/site/getting-started.html +6 -6
- package/runtime/site/public/CommandUI.js +4 -4
- package/runtime/site/public/bookmarklet.js +1 -1
- package/runtime/site/public/chocodrop-demo.umd.js +23 -24
- package/runtime/site/public/chocodrop-demo.umd.min.js +23 -24
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ Codex、Claude Code、AntigravityなどのMCPクライアントから、許可
|
|
|
5
5
|
このMCPは素材を生成しません。普段使っている生成MCPやCLIでファイルを作り、素材フォルダへ保存してから配置します。
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
pnpm dlx @chocodrop/mcp@0.1.0-alpha.
|
|
8
|
+
pnpm dlx @chocodrop/mcp@0.1.0-alpha.1 --assets-dir "$HOME/ChocoDropAssets"
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
通常は [`@chocodrop/setup`](https://www.npmjs.com/package/@chocodrop/setup) で利用中のCLIへ登録してください。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chocodrop/mcp",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.1",
|
|
4
4
|
"description": "Place local images, videos, and GLB files into a ChocoDrop browser scene through MCP.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -24,8 +24,7 @@
|
|
|
24
24
|
"antigravity"
|
|
25
25
|
],
|
|
26
26
|
"author": {
|
|
27
|
-
"name": "ChocoDrop Project"
|
|
28
|
-
"email": "chocodrop.dev@gmail.com"
|
|
27
|
+
"name": "ChocoDrop Project"
|
|
29
28
|
},
|
|
30
29
|
"license": "MIT",
|
|
31
30
|
"publishConfig": {
|
|
@@ -36,7 +35,7 @@
|
|
|
36
35
|
"node": ">=18.0.0"
|
|
37
36
|
},
|
|
38
37
|
"dependencies": {
|
|
39
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
40
|
-
"ws": "^8.
|
|
38
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
39
|
+
"ws": "^8.21.3"
|
|
41
40
|
}
|
|
42
41
|
}
|
|
@@ -1,70 +1,27 @@
|
|
|
1
|
-
# ChocoDrop SDK
|
|
1
|
+
# ChocoDrop SDK版テストページ
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`CommandUI.js`を使うSDK版の確認ページです。右下のチョコから、生成済みの画像・動画・GLBをImportできます。外部の生成サービスは必須ではありません。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 起動
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|------|-------------------|----------------|
|
|
9
|
-
| ファイル | `CommandUI.js` | `CommandUIDemo.js` |
|
|
10
|
-
| 生成機能 | ✅ あり | ❌ なし(インポートのみ) |
|
|
11
|
-
| サーバー | 必要(localhost:3011) | 不要 |
|
|
12
|
-
| 用途 | 開発・npm配布 | GitHub Pages配布 |
|
|
13
|
-
|
|
14
|
-
## 🚀 使い方
|
|
15
|
-
|
|
16
|
-
### 1. サーバーを起動
|
|
7
|
+
プロジェクトルートで、2つのターミナルを使います。
|
|
17
8
|
|
|
18
9
|
```bash
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
これで以下が起動します:
|
|
24
|
-
- SDK Test Page: http://localhost:8080/
|
|
25
|
-
- SDK Server: http://localhost:3011/
|
|
26
|
-
|
|
27
|
-
### 2. ブラウザで開く
|
|
28
|
-
|
|
29
|
-
http://localhost:8080/ にアクセス
|
|
30
|
-
|
|
31
|
-
### 3. ChocoDrop を起動
|
|
32
|
-
|
|
33
|
-
- `@` キーを押す
|
|
34
|
-
- または右下のボタンをクリック
|
|
35
|
-
|
|
36
|
-
### 4. 画像生成をテスト
|
|
10
|
+
# ターミナル1
|
|
11
|
+
node src/server/server.js --port 3011
|
|
37
12
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
## 🔧 開発時の注意
|
|
41
|
-
|
|
42
|
-
### ソースコードを修正したら必ずビルド
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
npm run build
|
|
13
|
+
# ターミナル2
|
|
14
|
+
python3 -m http.server 8080 --directory examples/sdk-test
|
|
46
15
|
```
|
|
47
16
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
### テストする順序
|
|
51
|
-
|
|
52
|
-
1. `src/client/CommandUI.js` を修正
|
|
53
|
-
2. `npm run build` でビルド
|
|
54
|
-
3. `npm run dev:sdk` でサーバー起動
|
|
55
|
-
4. http://localhost:8080/ でテスト
|
|
56
|
-
|
|
57
|
-
## ⚠️ トラブルシューティング
|
|
58
|
-
|
|
59
|
-
**UIが更新されない**
|
|
60
|
-
→ ブラウザのキャッシュをクリア(Cmd+Shift+R)
|
|
61
|
-
|
|
62
|
-
**生成機能が動かない**
|
|
63
|
-
→ SDK Serverが起動しているか確認(http://localhost:3011/health)
|
|
17
|
+
ブラウザで <http://localhost:8080/> を開き、「SDK版の準備完了」と右下のチョコが表示されることを確認します。
|
|
64
18
|
|
|
65
|
-
|
|
66
|
-
→ 他のプロセスを終了してから再起動
|
|
19
|
+
## デモ版との違い
|
|
67
20
|
|
|
68
|
-
|
|
21
|
+
| 項目 | SDK版 | デモ版 |
|
|
22
|
+
| --- | --- | --- |
|
|
23
|
+
| UI | `src/client/CommandUI.js` | `src/client/demo/CommandUIDemo.js` |
|
|
24
|
+
| 主な用途 | 自分のThree.jsシーンへの組み込み | GitHub Pages上の体験 |
|
|
25
|
+
| ローカルサーバー | 使用 | 手動Importだけなら不要 |
|
|
69
26
|
|
|
70
|
-
|
|
27
|
+
フォームUIを変更した場合は、SDK版と `http://localhost:8000/examples/basic/` のデモ版を両方確認します。
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="ja">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>ChocoDrop SDK版テスト</title>
|
|
7
|
+
<script type="importmap">
|
|
8
|
+
{
|
|
9
|
+
"imports": {
|
|
10
|
+
"three": "https://cdn.jsdelivr.net/npm/three@0.170.0/build/three.module.js",
|
|
11
|
+
"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.170.0/examples/jsm/"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
</script>
|
|
15
|
+
<style>
|
|
16
|
+
html, body { margin: 0; height: 100%; overflow: hidden; background: #17131f; color: #fff8ff; font-family: system-ui, sans-serif; }
|
|
17
|
+
canvas { display: block; }
|
|
18
|
+
#status { position: fixed; top: 18px; left: 18px; z-index: 10; max-width: 360px; padding: 13px 17px; border: 1px solid #ffffff2e; border-radius: 14px; background: #21182dde; backdrop-filter: blur(12px); font-size: 13px; line-height: 1.7; }
|
|
19
|
+
#status strong { display: block; color: #d9a8ff; }
|
|
20
|
+
</style>
|
|
21
|
+
</head>
|
|
22
|
+
<body>
|
|
23
|
+
<p id="status" role="status"><strong>SDK版を準備しています…</strong>右下のチョコから、生成済みの画像・動画・GLBをImportできます。</p>
|
|
24
|
+
<script type="module">
|
|
25
|
+
import * as THREE from 'three';
|
|
26
|
+
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
|
|
27
|
+
import { createChocoDrop } from './src/client/bootstrap.js';
|
|
28
|
+
|
|
29
|
+
const scene = new THREE.Scene();
|
|
30
|
+
scene.background = new THREE.Color(0x17131f);
|
|
31
|
+
|
|
32
|
+
const camera = new THREE.PerspectiveCamera(55, innerWidth / innerHeight, 0.1, 100);
|
|
33
|
+
camera.position.set(6, 4, 8);
|
|
34
|
+
|
|
35
|
+
const renderer = new THREE.WebGLRenderer({ antialias: true });
|
|
36
|
+
renderer.setPixelRatio(Math.min(devicePixelRatio, 2));
|
|
37
|
+
renderer.setSize(innerWidth, innerHeight);
|
|
38
|
+
renderer.shadowMap.enabled = true;
|
|
39
|
+
document.body.append(renderer.domElement);
|
|
40
|
+
|
|
41
|
+
scene.add(new THREE.HemisphereLight(0xf4dfff, 0x302840, 2.2));
|
|
42
|
+
const light = new THREE.DirectionalLight(0xffd8f1, 2.5);
|
|
43
|
+
light.position.set(4, 8, 5);
|
|
44
|
+
light.castShadow = true;
|
|
45
|
+
scene.add(light);
|
|
46
|
+
|
|
47
|
+
const world = new THREE.Group();
|
|
48
|
+
const colors = [0xd9a8ff, 0xf19dba, 0x9fded4, 0xf6d883];
|
|
49
|
+
for (let i = 0; i < 12; i += 1) {
|
|
50
|
+
const mesh = new THREE.Mesh(
|
|
51
|
+
new THREE.BoxGeometry(0.75, 0.75 + (i % 3) * 0.28, 0.75),
|
|
52
|
+
new THREE.MeshStandardMaterial({ color: colors[i % colors.length], roughness: 0.55 })
|
|
53
|
+
);
|
|
54
|
+
mesh.position.set((i % 4) * 1.25 - 1.9, mesh.geometry.parameters.height / 2, Math.floor(i / 4) * 1.25 - 1.3);
|
|
55
|
+
mesh.castShadow = true;
|
|
56
|
+
world.add(mesh);
|
|
57
|
+
}
|
|
58
|
+
scene.add(world);
|
|
59
|
+
|
|
60
|
+
const floor = new THREE.Mesh(
|
|
61
|
+
new THREE.CircleGeometry(6, 64),
|
|
62
|
+
new THREE.MeshStandardMaterial({ color: 0x40364c, roughness: 0.9 })
|
|
63
|
+
);
|
|
64
|
+
floor.rotation.x = -Math.PI / 2;
|
|
65
|
+
floor.receiveShadow = true;
|
|
66
|
+
scene.add(floor);
|
|
67
|
+
|
|
68
|
+
const controls = new OrbitControls(camera, renderer.domElement);
|
|
69
|
+
controls.enableDamping = true;
|
|
70
|
+
|
|
71
|
+
const integration = createChocoDrop(scene, {
|
|
72
|
+
camera,
|
|
73
|
+
renderer,
|
|
74
|
+
serverUrl: 'http://localhost:3011',
|
|
75
|
+
skipServiceDialog: true,
|
|
76
|
+
});
|
|
77
|
+
window.ChocoDrop = { ...integration, scene, camera, renderer };
|
|
78
|
+
document.getElementById('status').innerHTML = '<strong>SDK版の準備完了</strong>右下のチョコからImportを開けます。';
|
|
79
|
+
|
|
80
|
+
renderer.setAnimationLoop(() => {
|
|
81
|
+
controls.update();
|
|
82
|
+
world.rotation.y += 0.0015;
|
|
83
|
+
renderer.render(scene, camera);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
addEventListener('resize', () => {
|
|
87
|
+
camera.aspect = innerWidth / innerHeight;
|
|
88
|
+
camera.updateProjectionMatrix();
|
|
89
|
+
renderer.setSize(innerWidth, innerHeight);
|
|
90
|
+
});
|
|
91
|
+
</script>
|
|
92
|
+
</body>
|
|
93
|
+
</html>
|
|
@@ -51,7 +51,7 @@ npm run local -- --assets-dir /absolute/path/to/your/assets</code></pre>
|
|
|
51
51
|
<section aria-labelledby="bookmarklet">
|
|
52
52
|
<h2 id="bookmarklet">3. ブックマークから既存ページで使う</h2>
|
|
53
53
|
<p>GitHubをcloneせずに試す場合は、ローカルdaemonを起動し、ブックマークレットを登録します。</p>
|
|
54
|
-
<pre><code>
|
|
54
|
+
<pre><code>pnpm dlx @chocodrop/daemon@1.0.4-alpha.0</code></pre>
|
|
55
55
|
<p><a href="examples/bookmarklet-v2.html">ブックマークレット登録ページ</a>からボタンをブックマークバーへドラッグし、対応するThree.jsページで押します。</p>
|
|
56
56
|
<p class="muted">素材配置まで利用できるのは、ページの<code>scene</code>・<code>camera</code>・<code>renderer</code>を参照でき、ローカルスクリプトの読込が許可されている場合です。任意の3Dサイトで必ず動く機能ではありません。</p>
|
|
57
57
|
</section>
|
|
@@ -59,7 +59,7 @@ npm run local -- --assets-dir /absolute/path/to/your/assets</code></pre>
|
|
|
59
59
|
<section aria-labelledby="mcp">
|
|
60
60
|
<h2 id="mcp">4. Codex・Claude Code・Antigravityから配置する</h2>
|
|
61
61
|
<p>Node.js 22 LTSとnpmを用意し、次の1コマンドを実行します。インストール済みのCLIと登録内容を表示し、確認後にChocoDrop MCPをユーザー設定へ追加します。GitHubのcloneは不要です。</p>
|
|
62
|
-
<pre><code>pnpm dlx @chocodrop/setup@0.1.0-alpha.
|
|
62
|
+
<pre><code>pnpm dlx @chocodrop/setup@0.1.0-alpha.1</code></pre>
|
|
63
63
|
<p><code>~/ChocoDropAssets</code>が素材フォルダとして作成されます。特定のCLIだけに登録する場合は、たとえば<code>--client codex,claude</code>を付けます。変更せず内容だけ確認する場合は<code>--dry-run</code>を付けます。</p>
|
|
64
64
|
<p>ChocoDropのMCPは素材を生成しません。普段使っている生成MCPやCLIで画像・動画・GLBを素材フォルダへ保存し、そのファイルをChocoDropで配置します。</p>
|
|
65
65
|
<h3>登録後の使い方</h3>
|
|
@@ -69,15 +69,15 @@ npm run local -- --assets-dir /absolute/path/to/your/assets</code></pre>
|
|
|
69
69
|
<li>「ChocoDropのimport_assetで、素材フォルダ内のsample.pngを配置して」と依頼します。</li>
|
|
70
70
|
</ol>
|
|
71
71
|
<p>呼び出し例:<code>import_asset({"path":"/absolute/path/to/your/assets/sample.png"})</code>。ブラウザで配置が完了してから成功を返します。</p>
|
|
72
|
-
<p class="muted">各ツールがMCPプロセスを起動するため、<code>npm run local</code>の同時起動は不要です。MCPからはPNG/JPEG/WebP/MP4/WebM/GLBに対応し、1ファイル32MiBまでです。接続するデモは1タブにしてください。クラウド上のAIから利用者のPCへ直接接続する機能はありません。手動登録は<a href="docs/LOCAL_TOOLS.md">ローカルMCPガイド</a>にあります。</p>
|
|
73
|
-
<p>pnpmがない環境では<code>npx --yes @chocodrop/setup@0.1.0-alpha.
|
|
72
|
+
<p class="muted">各ツールがMCPプロセスを起動するため、<code>npm run local</code>の同時起動は不要です。MCPからはPNG/JPEG/WebP/MP4/WebM/GLBに対応し、1ファイル32MiBまでです。接続するデモは1タブにしてください。クラウド上のAIから利用者のPCへ直接接続する機能はありません。手動登録は<a href="https://github.com/nyukicorn/chocodrop/blob/main/docs/LOCAL_TOOLS.md">ローカルMCPガイド</a>にあります。</p>
|
|
73
|
+
<p>pnpmがない環境では<code>npx --yes @chocodrop/setup@0.1.0-alpha.1</code>も使用できます。</p>
|
|
74
74
|
<p>公式資料:<a href="https://developers.openai.com/codex/mcp">CodexのMCP設定</a> · <a href="https://code.claude.com/docs/en/mcp">Claude CodeのMCP設定</a> · <a href="https://codelabs.developers.google.com/getting-started-google-antigravity">AntigravityのMCP設定</a></p>
|
|
75
75
|
</section>
|
|
76
76
|
|
|
77
77
|
<section aria-labelledby="limits">
|
|
78
78
|
<h2 id="limits">できることと、今後の範囲</h2>
|
|
79
|
-
<p>GitHub Pagesでは手動のファイル配置、ローカル起動ではMCPによるファイル配置を使います。ChocoDrop
|
|
80
|
-
<p>Quest
|
|
79
|
+
<p>GitHub Pagesでは手動のファイル配置、ローカル起動ではMCPによるファイル配置を使います。ChocoDrop自体は素材を生成せず、手元にあるファイルを3D空間へ配置します。</p>
|
|
80
|
+
<p>Quest実機と全ギャラリーの動作確認は別途必要です。まずBasicデモで素材を置くところからお試しください。</p>
|
|
81
81
|
<a href="examples/basic/">Basicデモに戻る →</a>
|
|
82
82
|
</section>
|
|
83
83
|
</body>
|
|
@@ -794,7 +794,7 @@ export class CommandUI {
|
|
|
794
794
|
this.setServiceButtonsEnabled(true);
|
|
795
795
|
} catch (error) {
|
|
796
796
|
console.error('❌ Failed to initialize service selector:', error);
|
|
797
|
-
this.setServiceSelectorStatus('
|
|
797
|
+
this.setServiceSelectorStatus('外部の生成サービスを利用できません。生成済みの画像・動画・GLBはImportから配置できます。', 'info');
|
|
798
798
|
this.toggleServiceRetryButton(true);
|
|
799
799
|
this.setServiceButtonsEnabled(false);
|
|
800
800
|
} finally {
|
|
@@ -3607,8 +3607,8 @@ export class CommandUI {
|
|
|
3607
3607
|
this.serverHealthState.available = false;
|
|
3608
3608
|
this.serverHealthState.lastError = error;
|
|
3609
3609
|
this.showServerHealthModal(error);
|
|
3610
|
-
this.showInputFeedback('サーバーに接続できません。`npm run dev` でローカルサーバーを起動してください。', 'error');
|
|
3611
|
-
this.addOutput('📡 サーバーに接続できません。`npm run dev` でローカルサーバーを起動してください。', 'error');
|
|
3610
|
+
this.showInputFeedback('サーバーに接続できません。`npm run dev:server` でローカルサーバーを起動してください。', 'error');
|
|
3611
|
+
this.addOutput('📡 サーバーに接続できません。`npm run dev:server` でローカルサーバーを起動してください。', 'error');
|
|
3612
3612
|
} else if (error?.code === 'MCP_CONFIG_MISSING') {
|
|
3613
3613
|
this.showMcpConfigNotice(error);
|
|
3614
3614
|
} else {
|
|
@@ -3805,7 +3805,7 @@ export class CommandUI {
|
|
|
3805
3805
|
line-height: 1.6;
|
|
3806
3806
|
font-size: 14px;
|
|
3807
3807
|
`;
|
|
3808
|
-
message.textContent = 'ローカルで起動している ChocoDrop サーバー(Express)に接続できません。ターミナルで `npm run dev` を実行し、サーバーが起動していることを確認してください。';
|
|
3808
|
+
message.textContent = 'ローカルで起動している ChocoDrop サーバー(Express)に接続できません。ターミナルで `npm run dev:server` を実行し、サーバーが起動していることを確認してください。';
|
|
3809
3809
|
|
|
3810
3810
|
const detail = document.createElement('pre');
|
|
3811
3811
|
detail.style.cssText = `
|
|
@@ -161,7 +161,7 @@ export function createBookmarklet(value = DEFAULT_BASE, runtimeValue = DEFAULT_R
|
|
|
161
161
|
notice(
|
|
162
162
|
'ローカルdaemonを起動してください',
|
|
163
163
|
'ターミナルで起動した後、このブックマークをもう一度押してください。',
|
|
164
|
-
'
|
|
164
|
+
'pnpm dlx @chocodrop/daemon@1.0.4-alpha.0'
|
|
165
165
|
);
|
|
166
166
|
return;
|
|
167
167
|
}
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
*/
|
|
113
113
|
createConnectionError(context) {
|
|
114
114
|
const serverInfo = this.serverUrl ? `(接続先: ${this.serverUrl})` : '';
|
|
115
|
-
const hint = 'ChocoDrop ローカルサーバー(Express)が起動しているか確認してください(例: `npm run dev`)。';
|
|
115
|
+
const hint = 'ChocoDrop ローカルサーバー(Express)が起動しているか確認してください(例: `npm run dev:server`)。';
|
|
116
116
|
return new Error(`${context}\nサーバーへ接続できません。${hint}${serverInfo}`);
|
|
117
117
|
}
|
|
118
118
|
|
|
@@ -8180,12 +8180,11 @@
|
|
|
8180
8180
|
},
|
|
8181
8181
|
{
|
|
8182
8182
|
id: 'atmos-sculpt',
|
|
8183
|
-
label: '
|
|
8183
|
+
label: 'AI素材を持ち込む',
|
|
8184
8184
|
icon: { start: '#f472b6', end: '#facc15', rotation: 40, type: 'generate' },
|
|
8185
|
-
description: '
|
|
8186
|
-
prompt: '
|
|
8187
|
-
mode: '
|
|
8188
|
-
mediaType: 'video'
|
|
8185
|
+
description: '普段使っているAIやCLIで作った画像・動画・GLBを持ち込み、世界の一部として配置します。',
|
|
8186
|
+
prompt: '中央に大きく飾って',
|
|
8187
|
+
mode: 'import'
|
|
8189
8188
|
},
|
|
8190
8189
|
{
|
|
8191
8190
|
id: 'scene-capture',
|
|
@@ -8199,7 +8198,7 @@
|
|
|
8199
8198
|
|
|
8200
8199
|
this.steps = [
|
|
8201
8200
|
{ id: 'persona', title: 'ChocoDropへようこそ', type: 'choice', icon: '💡', tagline: '作りたいムードを選ぶと、あなたの世界づくりが最短距離になります。' },
|
|
8202
|
-
{ id: 'service', title: '
|
|
8201
|
+
{ id: 'service', title: '素材の準備を確認する', type: 'service', icon: '🔗', tagline: '配置したいファイルを手元に用意して、Importから選びましょう。' },
|
|
8203
8202
|
{ id: 'prompt', title: '言葉で世界をデザイン', type: 'prompt', icon: '🖋️', tagline: 'フォームに光を当てながら、シーンを導く言葉を仕上げます。' },
|
|
8204
8203
|
{ id: 'execute', title: 'シーンを動かす', type: 'execute', icon: '🎬', tagline: '準備が整ったら再生。サウンドと光がシーンに息を吹き込みます。' },
|
|
8205
8204
|
{ id: 'next', title: '次のステップ', type: 'next', icon: '🌈', tagline: 'これからもっと遊ぶためのヒントとショートカットをご案内。' }
|
|
@@ -10122,10 +10121,10 @@
|
|
|
10122
10121
|
meta.progressLabel = 'ムード選択';
|
|
10123
10122
|
break;
|
|
10124
10123
|
case 'service':
|
|
10125
|
-
meta.title = '
|
|
10126
|
-
meta.progressLabel = '
|
|
10124
|
+
meta.title = '素材の準備を確認する';
|
|
10125
|
+
meta.progressLabel = '素材チェック';
|
|
10127
10126
|
if (personaId === 'atmos-sculpt') {
|
|
10128
|
-
meta.tagline = '
|
|
10127
|
+
meta.tagline = '普段のAIやCLIで作ったファイルを、Importから選びましょう。';
|
|
10129
10128
|
}
|
|
10130
10129
|
break;
|
|
10131
10130
|
case 'prompt':
|
|
@@ -11469,7 +11468,7 @@
|
|
|
11469
11468
|
this.setServiceButtonsEnabled(true);
|
|
11470
11469
|
} catch (error) {
|
|
11471
11470
|
console.error('❌ Failed to initialize service selector:', error);
|
|
11472
|
-
this.setServiceSelectorStatus('
|
|
11471
|
+
this.setServiceSelectorStatus('外部の生成サービスを利用できません。生成済みの画像・動画・GLBはImportから配置できます。', 'info');
|
|
11473
11472
|
this.toggleServiceRetryButton(true);
|
|
11474
11473
|
this.setServiceButtonsEnabled(false);
|
|
11475
11474
|
} finally {
|
|
@@ -13408,8 +13407,8 @@
|
|
|
13408
13407
|
this.serverHealthState.available = false;
|
|
13409
13408
|
this.serverHealthState.lastError = error;
|
|
13410
13409
|
this.showServerHealthModal(error);
|
|
13411
|
-
this.showInputFeedback('サーバーに接続できません。`npm run dev` でローカルサーバーを起動してください。', 'error');
|
|
13412
|
-
this.addOutput('📡 サーバーに接続できません。`npm run dev` でローカルサーバーを起動してください。', 'error');
|
|
13410
|
+
this.showInputFeedback('サーバーに接続できません。`npm run dev:server` でローカルサーバーを起動してください。', 'error');
|
|
13411
|
+
this.addOutput('📡 サーバーに接続できません。`npm run dev:server` でローカルサーバーを起動してください。', 'error');
|
|
13413
13412
|
} else if (error?.code === 'MCP_CONFIG_MISSING') {
|
|
13414
13413
|
this.showMcpConfigNotice(error);
|
|
13415
13414
|
} else {
|
|
@@ -13589,7 +13588,7 @@
|
|
|
13589
13588
|
line-height: 1.6;
|
|
13590
13589
|
font-size: 14px;
|
|
13591
13590
|
`;
|
|
13592
|
-
message.textContent = 'ローカルで起動している ChocoDrop サーバー(Express)に接続できません。ターミナルで `npm run dev` を実行し、サーバーが起動していることを確認してください。';
|
|
13591
|
+
message.textContent = 'ローカルで起動している ChocoDrop サーバー(Express)に接続できません。ターミナルで `npm run dev:server` を実行し、サーバーが起動していることを確認してください。';
|
|
13593
13592
|
|
|
13594
13593
|
const detail = document.createElement('pre');
|
|
13595
13594
|
detail.style.cssText = `
|
|
@@ -13701,9 +13700,9 @@
|
|
|
13701
13700
|
}
|
|
13702
13701
|
this.mcpNoticeShown = true;
|
|
13703
13702
|
|
|
13704
|
-
const message = error?.message || '
|
|
13705
|
-
const guidance = '
|
|
13706
|
-
this.showInputFeedback('
|
|
13703
|
+
const message = error?.message || 'この生成操作に必要な外部サービスが設定されていません。';
|
|
13704
|
+
const guidance = '現在の公開手順ではChocoDrop内から素材を生成しません。画像・動画・GLBを用意し、Importから配置してください。';
|
|
13705
|
+
this.showInputFeedback('生成済みのファイルをImportから選んでください。', 'info');
|
|
13707
13706
|
this.addOutput(`${guidance}\nサーバーからのメッセージ: ${message}`, 'error');
|
|
13708
13707
|
}
|
|
13709
13708
|
|
|
@@ -18150,7 +18149,7 @@
|
|
|
18150
18149
|
this.setServiceButtonsEnabled(true);
|
|
18151
18150
|
} catch (error) {
|
|
18152
18151
|
console.error('❌ Failed to initialize service selector:', error);
|
|
18153
|
-
this.setServiceSelectorStatus('
|
|
18152
|
+
this.setServiceSelectorStatus('外部の生成サービスを利用できません。生成済みの画像・動画・GLBはImportから配置できます。', 'info');
|
|
18154
18153
|
this.toggleServiceRetryButton(true);
|
|
18155
18154
|
this.setServiceButtonsEnabled(false);
|
|
18156
18155
|
} finally {
|
|
@@ -20998,8 +20997,8 @@
|
|
|
20998
20997
|
this.serverHealthState.available = false;
|
|
20999
20998
|
this.serverHealthState.lastError = error;
|
|
21000
20999
|
this.showServerHealthModal(error);
|
|
21001
|
-
this.showInputFeedback('サーバーに接続できません。`npm run dev` でローカルサーバーを起動してください。', 'error');
|
|
21002
|
-
this.addOutput('📡 サーバーに接続できません。`npm run dev` でローカルサーバーを起動してください。', 'error');
|
|
21000
|
+
this.showInputFeedback('サーバーに接続できません。`npm run dev:server` でローカルサーバーを起動してください。', 'error');
|
|
21001
|
+
this.addOutput('📡 サーバーに接続できません。`npm run dev:server` でローカルサーバーを起動してください。', 'error');
|
|
21003
21002
|
} else if (error?.code === 'MCP_CONFIG_MISSING') {
|
|
21004
21003
|
this.showMcpConfigNotice(error);
|
|
21005
21004
|
} else {
|
|
@@ -21196,7 +21195,7 @@
|
|
|
21196
21195
|
line-height: 1.6;
|
|
21197
21196
|
font-size: 14px;
|
|
21198
21197
|
`;
|
|
21199
|
-
message.textContent = 'ローカルで起動している ChocoDrop サーバー(Express)に接続できません。ターミナルで `npm run dev` を実行し、サーバーが起動していることを確認してください。';
|
|
21198
|
+
message.textContent = 'ローカルで起動している ChocoDrop サーバー(Express)に接続できません。ターミナルで `npm run dev:server` を実行し、サーバーが起動していることを確認してください。';
|
|
21200
21199
|
|
|
21201
21200
|
const detail = document.createElement('pre');
|
|
21202
21201
|
detail.style.cssText = `
|
|
@@ -21308,9 +21307,9 @@
|
|
|
21308
21307
|
}
|
|
21309
21308
|
this.mcpNoticeShown = true;
|
|
21310
21309
|
|
|
21311
|
-
const message = error?.message || '
|
|
21312
|
-
const guidance = '
|
|
21313
|
-
this.showInputFeedback('
|
|
21310
|
+
const message = error?.message || 'この生成操作に必要な外部サービスが設定されていません。';
|
|
21311
|
+
const guidance = '現在の公開手順ではChocoDrop内から素材を生成しません。画像・動画・GLBを用意し、Importから配置してください。';
|
|
21312
|
+
this.showInputFeedback('生成済みのファイルをImportから選んでください。', 'info');
|
|
21314
21313
|
this.addOutput(`${guidance}\nサーバーからのメッセージ: ${message}`, 'error');
|
|
21315
21314
|
}
|
|
21316
21315
|
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
*/
|
|
113
113
|
createConnectionError(context) {
|
|
114
114
|
const serverInfo = this.serverUrl ? `(接続先: ${this.serverUrl})` : '';
|
|
115
|
-
const hint = 'ChocoDrop ローカルサーバー(Express)が起動しているか確認してください(例: `npm run dev`)。';
|
|
115
|
+
const hint = 'ChocoDrop ローカルサーバー(Express)が起動しているか確認してください(例: `npm run dev:server`)。';
|
|
116
116
|
return new Error(`${context}\nサーバーへ接続できません。${hint}${serverInfo}`);
|
|
117
117
|
}
|
|
118
118
|
|
|
@@ -8180,12 +8180,11 @@
|
|
|
8180
8180
|
},
|
|
8181
8181
|
{
|
|
8182
8182
|
id: 'atmos-sculpt',
|
|
8183
|
-
label: '
|
|
8183
|
+
label: 'AI素材を持ち込む',
|
|
8184
8184
|
icon: { start: '#f472b6', end: '#facc15', rotation: 40, type: 'generate' },
|
|
8185
|
-
description: '
|
|
8186
|
-
prompt: '
|
|
8187
|
-
mode: '
|
|
8188
|
-
mediaType: 'video'
|
|
8185
|
+
description: '普段使っているAIやCLIで作った画像・動画・GLBを持ち込み、世界の一部として配置します。',
|
|
8186
|
+
prompt: '中央に大きく飾って',
|
|
8187
|
+
mode: 'import'
|
|
8189
8188
|
},
|
|
8190
8189
|
{
|
|
8191
8190
|
id: 'scene-capture',
|
|
@@ -8199,7 +8198,7 @@
|
|
|
8199
8198
|
|
|
8200
8199
|
this.steps = [
|
|
8201
8200
|
{ id: 'persona', title: 'ChocoDropへようこそ', type: 'choice', icon: '💡', tagline: '作りたいムードを選ぶと、あなたの世界づくりが最短距離になります。' },
|
|
8202
|
-
{ id: 'service', title: '
|
|
8201
|
+
{ id: 'service', title: '素材の準備を確認する', type: 'service', icon: '🔗', tagline: '配置したいファイルを手元に用意して、Importから選びましょう。' },
|
|
8203
8202
|
{ id: 'prompt', title: '言葉で世界をデザイン', type: 'prompt', icon: '🖋️', tagline: 'フォームに光を当てながら、シーンを導く言葉を仕上げます。' },
|
|
8204
8203
|
{ id: 'execute', title: 'シーンを動かす', type: 'execute', icon: '🎬', tagline: '準備が整ったら再生。サウンドと光がシーンに息を吹き込みます。' },
|
|
8205
8204
|
{ id: 'next', title: '次のステップ', type: 'next', icon: '🌈', tagline: 'これからもっと遊ぶためのヒントとショートカットをご案内。' }
|
|
@@ -10122,10 +10121,10 @@
|
|
|
10122
10121
|
meta.progressLabel = 'ムード選択';
|
|
10123
10122
|
break;
|
|
10124
10123
|
case 'service':
|
|
10125
|
-
meta.title = '
|
|
10126
|
-
meta.progressLabel = '
|
|
10124
|
+
meta.title = '素材の準備を確認する';
|
|
10125
|
+
meta.progressLabel = '素材チェック';
|
|
10127
10126
|
if (personaId === 'atmos-sculpt') {
|
|
10128
|
-
meta.tagline = '
|
|
10127
|
+
meta.tagline = '普段のAIやCLIで作ったファイルを、Importから選びましょう。';
|
|
10129
10128
|
}
|
|
10130
10129
|
break;
|
|
10131
10130
|
case 'prompt':
|
|
@@ -11469,7 +11468,7 @@
|
|
|
11469
11468
|
this.setServiceButtonsEnabled(true);
|
|
11470
11469
|
} catch (error) {
|
|
11471
11470
|
console.error('❌ Failed to initialize service selector:', error);
|
|
11472
|
-
this.setServiceSelectorStatus('
|
|
11471
|
+
this.setServiceSelectorStatus('外部の生成サービスを利用できません。生成済みの画像・動画・GLBはImportから配置できます。', 'info');
|
|
11473
11472
|
this.toggleServiceRetryButton(true);
|
|
11474
11473
|
this.setServiceButtonsEnabled(false);
|
|
11475
11474
|
} finally {
|
|
@@ -13408,8 +13407,8 @@
|
|
|
13408
13407
|
this.serverHealthState.available = false;
|
|
13409
13408
|
this.serverHealthState.lastError = error;
|
|
13410
13409
|
this.showServerHealthModal(error);
|
|
13411
|
-
this.showInputFeedback('サーバーに接続できません。`npm run dev` でローカルサーバーを起動してください。', 'error');
|
|
13412
|
-
this.addOutput('📡 サーバーに接続できません。`npm run dev` でローカルサーバーを起動してください。', 'error');
|
|
13410
|
+
this.showInputFeedback('サーバーに接続できません。`npm run dev:server` でローカルサーバーを起動してください。', 'error');
|
|
13411
|
+
this.addOutput('📡 サーバーに接続できません。`npm run dev:server` でローカルサーバーを起動してください。', 'error');
|
|
13413
13412
|
} else if (error?.code === 'MCP_CONFIG_MISSING') {
|
|
13414
13413
|
this.showMcpConfigNotice(error);
|
|
13415
13414
|
} else {
|
|
@@ -13589,7 +13588,7 @@
|
|
|
13589
13588
|
line-height: 1.6;
|
|
13590
13589
|
font-size: 14px;
|
|
13591
13590
|
`;
|
|
13592
|
-
message.textContent = 'ローカルで起動している ChocoDrop サーバー(Express)に接続できません。ターミナルで `npm run dev` を実行し、サーバーが起動していることを確認してください。';
|
|
13591
|
+
message.textContent = 'ローカルで起動している ChocoDrop サーバー(Express)に接続できません。ターミナルで `npm run dev:server` を実行し、サーバーが起動していることを確認してください。';
|
|
13593
13592
|
|
|
13594
13593
|
const detail = document.createElement('pre');
|
|
13595
13594
|
detail.style.cssText = `
|
|
@@ -13701,9 +13700,9 @@
|
|
|
13701
13700
|
}
|
|
13702
13701
|
this.mcpNoticeShown = true;
|
|
13703
13702
|
|
|
13704
|
-
const message = error?.message || '
|
|
13705
|
-
const guidance = '
|
|
13706
|
-
this.showInputFeedback('
|
|
13703
|
+
const message = error?.message || 'この生成操作に必要な外部サービスが設定されていません。';
|
|
13704
|
+
const guidance = '現在の公開手順ではChocoDrop内から素材を生成しません。画像・動画・GLBを用意し、Importから配置してください。';
|
|
13705
|
+
this.showInputFeedback('生成済みのファイルをImportから選んでください。', 'info');
|
|
13707
13706
|
this.addOutput(`${guidance}\nサーバーからのメッセージ: ${message}`, 'error');
|
|
13708
13707
|
}
|
|
13709
13708
|
|
|
@@ -18150,7 +18149,7 @@
|
|
|
18150
18149
|
this.setServiceButtonsEnabled(true);
|
|
18151
18150
|
} catch (error) {
|
|
18152
18151
|
console.error('❌ Failed to initialize service selector:', error);
|
|
18153
|
-
this.setServiceSelectorStatus('
|
|
18152
|
+
this.setServiceSelectorStatus('外部の生成サービスを利用できません。生成済みの画像・動画・GLBはImportから配置できます。', 'info');
|
|
18154
18153
|
this.toggleServiceRetryButton(true);
|
|
18155
18154
|
this.setServiceButtonsEnabled(false);
|
|
18156
18155
|
} finally {
|
|
@@ -20998,8 +20997,8 @@
|
|
|
20998
20997
|
this.serverHealthState.available = false;
|
|
20999
20998
|
this.serverHealthState.lastError = error;
|
|
21000
20999
|
this.showServerHealthModal(error);
|
|
21001
|
-
this.showInputFeedback('サーバーに接続できません。`npm run dev` でローカルサーバーを起動してください。', 'error');
|
|
21002
|
-
this.addOutput('📡 サーバーに接続できません。`npm run dev` でローカルサーバーを起動してください。', 'error');
|
|
21000
|
+
this.showInputFeedback('サーバーに接続できません。`npm run dev:server` でローカルサーバーを起動してください。', 'error');
|
|
21001
|
+
this.addOutput('📡 サーバーに接続できません。`npm run dev:server` でローカルサーバーを起動してください。', 'error');
|
|
21003
21002
|
} else if (error?.code === 'MCP_CONFIG_MISSING') {
|
|
21004
21003
|
this.showMcpConfigNotice(error);
|
|
21005
21004
|
} else {
|
|
@@ -21196,7 +21195,7 @@
|
|
|
21196
21195
|
line-height: 1.6;
|
|
21197
21196
|
font-size: 14px;
|
|
21198
21197
|
`;
|
|
21199
|
-
message.textContent = 'ローカルで起動している ChocoDrop サーバー(Express)に接続できません。ターミナルで `npm run dev` を実行し、サーバーが起動していることを確認してください。';
|
|
21198
|
+
message.textContent = 'ローカルで起動している ChocoDrop サーバー(Express)に接続できません。ターミナルで `npm run dev:server` を実行し、サーバーが起動していることを確認してください。';
|
|
21200
21199
|
|
|
21201
21200
|
const detail = document.createElement('pre');
|
|
21202
21201
|
detail.style.cssText = `
|
|
@@ -21308,9 +21307,9 @@
|
|
|
21308
21307
|
}
|
|
21309
21308
|
this.mcpNoticeShown = true;
|
|
21310
21309
|
|
|
21311
|
-
const message = error?.message || '
|
|
21312
|
-
const guidance = '
|
|
21313
|
-
this.showInputFeedback('
|
|
21310
|
+
const message = error?.message || 'この生成操作に必要な外部サービスが設定されていません。';
|
|
21311
|
+
const guidance = '現在の公開手順ではChocoDrop内から素材を生成しません。画像・動画・GLBを用意し、Importから配置してください。';
|
|
21312
|
+
this.showInputFeedback('生成済みのファイルをImportから選んでください。', 'info');
|
|
21314
21313
|
this.addOutput(`${guidance}\nサーバーからのメッセージ: ${message}`, 'error');
|
|
21315
21314
|
}
|
|
21316
21315
|
|