next2d-development-mcp 1.0.2 → 1.1.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 +45 -7
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +171 -13
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/prompts.test.js +3 -2
- package/dist/prompts/prompts.test.js.map +1 -1
- package/dist/references/player-specs.md +36 -0
- package/dist/resources/index.js +23 -4
- package/dist/resources/index.js.map +1 -1
- package/dist/tools/analyzeProject.d.ts +3 -0
- package/dist/tools/analyzeProject.d.ts.map +1 -0
- package/dist/tools/analyzeProject.js +159 -0
- package/dist/tools/analyzeProject.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inspectScreen.d.ts +3 -0
- package/dist/tools/inspectScreen.d.ts.map +1 -0
- package/dist/tools/inspectScreen.js +223 -0
- package/dist/tools/inspectScreen.js.map +1 -0
- package/dist/tools/planFeature.d.ts +3 -0
- package/dist/tools/planFeature.d.ts.map +1 -0
- package/dist/tools/planFeature.js +254 -0
- package/dist/tools/planFeature.js.map +1 -0
- package/dist/tools/tools.test.js +17 -2
- package/dist/tools/tools.test.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
# next2d-development-mcp
|
|
2
2
|
|
|
3
|
-
<div align="center">
|
|
4
|
-
<img src="https://github.com/Next2D/next2d-development-mcp/raw/main/icon.png" width="180" alt="Next2D">
|
|
5
|
-
</div>
|
|
6
|
-
|
|
7
3
|
[](https://github.com/Next2D/next2d-development-mcp/actions/workflows/integration.yml)
|
|
8
4
|
[](https://github.com/Next2D/next2d-development-mcp/actions/workflows/github-code-scanning/codeql)
|
|
9
5
|
[](https://github.com/Next2D/next2d-development-mcp/actions/workflows/lint.yml)
|
|
@@ -27,6 +23,7 @@ Provides code generation, architecture validation, and API reference following *
|
|
|
27
23
|
- [Resources / リソース](#resources--リソース)
|
|
28
24
|
- [Prompts / プロンプト](#prompts--プロンプト)
|
|
29
25
|
- [サポートするアーキテクチャ / Supported Architecture](#サポートするアーキテクチャ--supported-architecture)
|
|
26
|
+
- [関連リンク / Related Links](#関連リンク--related-links)
|
|
30
27
|
- [License](#license)
|
|
31
28
|
|
|
32
29
|
---
|
|
@@ -43,11 +40,15 @@ This MCP server provides the following capabilities to AI agents:
|
|
|
43
40
|
|
|
44
41
|
| 機能 / Feature | 説明 / Description |
|
|
45
42
|
|---|---|
|
|
46
|
-
| **コード生成** | View/ViewModel, UseCase, Repository, UI コンポーネント, Interface のスキャフォールディング |
|
|
43
|
+
| **コード生成** | View/ViewModel, UseCase, Repository, UI コンポーネント, Interface, Animation, Domain Service のスキャフォールディング |
|
|
47
44
|
| **ルーティング設定** | routing.json へのルートエントリ生成 |
|
|
48
45
|
| **アーキテクチャ検証** | プロジェクト構造の Clean Architecture 準拠チェック |
|
|
46
|
+
| **プロジェクト分析** | 実装済みファイルのスキャンと未実装箇所のレポート |
|
|
47
|
+
| **画面インスペクション** | 特定画面の全関連ファイルの一覧と実装状況の確認 |
|
|
48
|
+
| **実装計画生成** | 既存ファイルをスキップしつつ新規画面の順序付き実装ステップを生成 |
|
|
49
49
|
| **API リファレンス** | Player API, Framework 仕様, 開発テンプレート仕様の提供 |
|
|
50
50
|
| **開発ガイド** | 画面追加手順, コーディング規約, デバッグガイドの提供 |
|
|
51
|
+
| **オーケストレーター** | 新規画面作成・既存画面修正をフェーズ別に自律実行 |
|
|
51
52
|
|
|
52
53
|
---
|
|
53
54
|
|
|
@@ -256,14 +257,32 @@ args: -y next2d-development-mcp
|
|
|
256
257
|
|
|
257
258
|
## Tools / ツール
|
|
258
259
|
|
|
260
|
+
### オーケストレーション系 / Orchestration
|
|
261
|
+
|
|
262
|
+
| Tool | Description |
|
|
263
|
+
|---|---|
|
|
264
|
+
| `analyze_project` | routing.json をスキャンし、View/ViewModel/UseCase/Repository の実装状況を一覧表示。新機能追加前の現状把握に使用 |
|
|
265
|
+
| `inspect_screen` | 特定画面の全関連ファイル (View, ViewModel, Page, UseCase, Repository, Animation, Content) をファイル行数付きで一覧表示。既存画面修正前に使用 |
|
|
266
|
+
| `plan_feature` | 新規画面の実装ステップを順序付きで生成。既存ファイルは ✅ としてスキップ。`analyze_project` 実行後に使用 |
|
|
267
|
+
|
|
268
|
+
### コード生成系 / Code Generation
|
|
269
|
+
|
|
259
270
|
| Tool | Description |
|
|
260
271
|
|---|---|
|
|
261
272
|
| `create_view` | View/ViewModel ペアを生成 (MVVM パターン)。`name` にルートパスを指定 (例: `home`, `quest/list`) |
|
|
262
273
|
| `create_usecase` | UseCase クラスを生成 (Application 層)。1 アクション = 1 UseCase、`execute()` がエントリーポイント |
|
|
263
274
|
| `create_repository` | Repository クラスを生成 (Infrastructure 層)。try-catch 必須、config からエンドポイント取得 |
|
|
264
275
|
| `create_ui_component` | Atomic Design UI コンポーネント生成 (`atom` / `molecule` / `organism` / `page` / `content`) |
|
|
276
|
+
| `create_animation` | UI トランジション用 Animation クラスを生成。`@next2d/ui` の Tween/Easing/Job を使用。`src/ui/animation/{screen}/` に配置 |
|
|
277
|
+
| `create_domain_service` | Domain 層クラス (Service または Callback) を生成。Service はコアビジネスロジック、Callback は gotoView 完了後に実行 |
|
|
278
|
+
| `create_loading` | ローディング画面クラスを生成。`start()` / `end()` メソッドを持ち、config.json の `loading.callback` で登録 |
|
|
265
279
|
| `add_route` | routing.json へのルートエントリ生成。リクエスト設定 (`json` / `content` / `custom` / `cluster`) に対応 |
|
|
266
280
|
| `create_interface` | TypeScript インターフェースファイル生成 (`I` プレフィックス規約に準拠) |
|
|
281
|
+
|
|
282
|
+
### アーキテクチャ検証 / Architecture Validation
|
|
283
|
+
|
|
284
|
+
| Tool | Description |
|
|
285
|
+
|---|---|
|
|
267
286
|
| `validate_architecture` | プロジェクト構造の検証。ディレクトリ構成、設定ファイル、routing.json ↔ View の整合性をチェック |
|
|
268
287
|
|
|
269
288
|
### ツール使用例 / Tool Usage Example
|
|
@@ -275,7 +294,7 @@ Next2Dプロジェクトに「quest/list」画面を追加して。
|
|
|
275
294
|
APIからクエスト一覧を取得して表示するようにして。
|
|
276
295
|
```
|
|
277
296
|
|
|
278
|
-
|
|
297
|
+
オーケストレーターモードでは `analyze_project` → `plan_feature` → `add_route` → `create_view` → `create_usecase` → `create_repository` → `create_interface` → `create_ui_component` → `create_animation` → `validate_architecture` を自律的に実行し、必要なファイルをすべて生成します。
|
|
279
298
|
|
|
280
299
|
---
|
|
281
300
|
|
|
@@ -294,10 +313,24 @@ APIからクエスト一覧を取得して表示するようにして。
|
|
|
294
313
|
|
|
295
314
|
| Prompt | Parameters | Description |
|
|
296
315
|
|---|---|---|
|
|
316
|
+
| `orchestrate` | `task`, `screenPath`, `mode` | オーケストレーターモードを起動。`mode: "create"` で新規画面作成、`mode: "modify"` で既存画面修正のフェーズ別ワークフローを実行 |
|
|
297
317
|
| `new-screen` | `screenName`, `hasApi?`, `hasAnimation?` | 新しい画面追加のステップバイステップガイド |
|
|
298
318
|
| `architecture-guide` | — | アーキテクチャルールとコーディング規約のリファレンス |
|
|
299
319
|
| `debug-help` | `issue` | よくある問題のデバッグのヒントとトラブルシューティング |
|
|
300
320
|
|
|
321
|
+
### orchestrate プロンプトの使用例 / Orchestrate Prompt Example
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
# 新規画面作成
|
|
325
|
+
orchestrate(task="クエスト一覧画面を追加", screenPath="quest/list", mode="create")
|
|
326
|
+
|
|
327
|
+
# 既存画面修正
|
|
328
|
+
orchestrate(task="ホーム画面に検索機能を追加", screenPath="home", mode="modify")
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
`create` モードでは `analyze_project` → `plan_feature` → 実装 → `validate_architecture` の順に実行します。
|
|
332
|
+
`modify` モードでは `inspect_screen` → 対象ファイル Read → 最小変更 → `validate_architecture` の順に実行します。
|
|
333
|
+
|
|
301
334
|
---
|
|
302
335
|
|
|
303
336
|
## サポートするアーキテクチャ / Supported Architecture
|
|
@@ -308,9 +341,14 @@ src/
|
|
|
308
341
|
├── interface/ # インターフェース定義 (I プレフィックス)
|
|
309
342
|
├── model/
|
|
310
343
|
│ ├── application/ # UseCase (ビジネスロジック)
|
|
311
|
-
│ ├── domain/
|
|
344
|
+
│ ├── domain/
|
|
345
|
+
│ │ └── callback/ # gotoView Callback / Loading クラス
|
|
346
|
+
│ │ └── {name}/
|
|
347
|
+
│ │ └── service/ # Domain Service (純粋ビジネスロジック)
|
|
312
348
|
│ └── infrastructure/ # Repository (データアクセス)
|
|
313
349
|
├── ui/
|
|
350
|
+
│ ├── animation/ # UI トランジション Animation クラス
|
|
351
|
+
│ │ └── {screen}/ # 画面別ディレクトリ
|
|
314
352
|
│ ├── component/
|
|
315
353
|
│ │ ├── atom/ # 最小コンポーネント
|
|
316
354
|
│ │ ├── molecule/ # 複合コンポーネント
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8MvD"}
|
package/dist/prompts/index.js
CHANGED
|
@@ -55,6 +55,26 @@ export function registerPrompts(server) {
|
|
|
55
55
|
}
|
|
56
56
|
]
|
|
57
57
|
}));
|
|
58
|
+
server.registerPrompt("orchestrate", {
|
|
59
|
+
"description": "Activate orchestrator mode for systematic Next2D development. " +
|
|
60
|
+
"Handles both NEW screen creation and EXISTING screen modification. " +
|
|
61
|
+
"Claude will inspect the screen state, plan changes, execute MCP tools, and validate.",
|
|
62
|
+
"argsSchema": {
|
|
63
|
+
"task": z.string().describe("What you want to build or change (e.g. 'add search to quest/list', 'implement home screen')"),
|
|
64
|
+
"screenPath": z.string().describe("Target screen path matching routing.json key (e.g. 'quest/list', 'home')"),
|
|
65
|
+
"mode": z.enum(["create", "modify"]).optional().default("create").describe("'create' for a new screen, 'modify' to change an existing screen")
|
|
66
|
+
}
|
|
67
|
+
}, async ({ task, screenPath, mode }) => ({
|
|
68
|
+
"messages": [
|
|
69
|
+
{
|
|
70
|
+
"role": "user",
|
|
71
|
+
"content": {
|
|
72
|
+
"type": "text",
|
|
73
|
+
"text": ORCHESTRATE_GUIDE(task, screenPath, mode ?? "create")
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}));
|
|
58
78
|
server.registerPrompt("debug-help", {
|
|
59
79
|
"description": "Common Next2D debugging tips and troubleshooting guide",
|
|
60
80
|
"argsSchema": {
|
|
@@ -109,6 +129,116 @@ export function registerPrompts(server) {
|
|
|
109
129
|
]
|
|
110
130
|
}));
|
|
111
131
|
}
|
|
132
|
+
function ORCHESTRATE_GUIDE(task, screenPath, mode) {
|
|
133
|
+
const isModify = mode === "modify";
|
|
134
|
+
const createWorkflow = `
|
|
135
|
+
## Phase 1: Analyze Current State
|
|
136
|
+
Call **\`analyze_project\`** to understand the overall project state.
|
|
137
|
+
|
|
138
|
+
## Phase 2: Generate Implementation Plan
|
|
139
|
+
Call **\`plan_feature\`** with:
|
|
140
|
+
- \`screenPath\`: \`"${screenPath}"\`
|
|
141
|
+
- \`hasApi\`: \`true\` if API data is needed
|
|
142
|
+
- \`hasContent\`: \`true\` if Animation Tool (.n2d) assets are needed
|
|
143
|
+
|
|
144
|
+
The tool returns an ordered step list. Steps marked ✅ are already implemented — skip them.
|
|
145
|
+
|
|
146
|
+
## Phase 3: Execute the Plan
|
|
147
|
+
For each step in the plan:
|
|
148
|
+
1. Call the specified MCP tool to generate the code
|
|
149
|
+
2. Write the file to the exact path shown
|
|
150
|
+
3. Implement business logic as described in the step notes
|
|
151
|
+
4. Run \`npm run generate\` after updating routing.json
|
|
152
|
+
|
|
153
|
+
## Phase 4: Validate
|
|
154
|
+
Call **\`validate_architecture\`** to confirm all files exist and the structure is consistent.
|
|
155
|
+
|
|
156
|
+
**Start now:** call \`analyze_project\`.
|
|
157
|
+
`;
|
|
158
|
+
const modifyWorkflow = `
|
|
159
|
+
## Phase 1: Inspect the Target Screen
|
|
160
|
+
Call **\`inspect_screen\`** with \`screenPath: "${screenPath}"\`.
|
|
161
|
+
|
|
162
|
+
This returns:
|
|
163
|
+
- routing.json configuration for this screen
|
|
164
|
+
- All related file paths (View, ViewModel, Page, UseCases, Repositories, Animations, Content)
|
|
165
|
+
- File line counts so you know how much is already implemented
|
|
166
|
+
- Missing files flagged with ❌
|
|
167
|
+
|
|
168
|
+
## Phase 2: Read the Relevant Files
|
|
169
|
+
Using the **Read** tool, read the files that are related to the change:
|
|
170
|
+
- If changing UI → read the Page component
|
|
171
|
+
- If changing data flow → read ViewModel + UseCase
|
|
172
|
+
- If changing API → read Repository + Interface
|
|
173
|
+
- If changing navigation → read UseCase that calls \`app.gotoView()\`
|
|
174
|
+
|
|
175
|
+
**Read only what you need** — targeted modification, not full rewrites.
|
|
176
|
+
|
|
177
|
+
## Phase 3: Plan and Execute Changes
|
|
178
|
+
Based on what you read, decide the minimal set of changes:
|
|
179
|
+
|
|
180
|
+
| Need to... | Action |
|
|
181
|
+
|---|---|
|
|
182
|
+
| Add a new action | Create UseCase with \`create_usecase\` tool |
|
|
183
|
+
| Add API access | Create Repository with \`create_repository\` tool |
|
|
184
|
+
| Add a UI element | Create component with \`create_ui_component\` tool |
|
|
185
|
+
| Add animation | Create animation with \`create_animation\` tool |
|
|
186
|
+
| Modify existing logic | Edit the specific file directly |
|
|
187
|
+
|
|
188
|
+
**Modification rules:**
|
|
189
|
+
- Change **only** what the task requires — no unrelated refactoring
|
|
190
|
+
- Keep single responsibility: one UseCase per action
|
|
191
|
+
- If modifying ViewModel, make sure View still delegates (no logic added to View)
|
|
192
|
+
- Buttons added/modified must use \`ButtonAtom.disable()\`/\`enable()\`
|
|
193
|
+
|
|
194
|
+
## Phase 4: Validate
|
|
195
|
+
Call **\`validate_architecture\`** to confirm the screen structure remains consistent.
|
|
196
|
+
|
|
197
|
+
**Start now:** call \`inspect_screen\` with \`screenPath: "${screenPath}"\`.
|
|
198
|
+
`;
|
|
199
|
+
return `# Next2D Development Orchestrator
|
|
200
|
+
|
|
201
|
+
## Task
|
|
202
|
+
${task}
|
|
203
|
+
|
|
204
|
+
| Item | Value |
|
|
205
|
+
|------|-------|
|
|
206
|
+
| Target screen | \`${screenPath}\` |
|
|
207
|
+
| Mode | **${isModify ? "Modify existing screen" : "Create new screen"}** |
|
|
208
|
+
|
|
209
|
+
## Your Role
|
|
210
|
+
You are a systematic development orchestrator for Next2D projects.
|
|
211
|
+
Follow the workflow below **in order**. Do not skip phases.
|
|
212
|
+
${isModify ? modifyWorkflow : createWorkflow}
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Architecture Rules (always apply)
|
|
216
|
+
- **View** → extends \`View<ViewModel>\`, delegates to Page: \`page.initialize(this.vm)\`
|
|
217
|
+
- **ViewModel** → holds UseCases, no direct UI, fetches data in \`initialize()\`
|
|
218
|
+
- **UseCase** → one action = one class, single \`execute()\` entry point
|
|
219
|
+
- **Repository** → try-catch required, endpoint from \`config.api.endPoint\`, no \`any\` type
|
|
220
|
+
- **Buttons** → \`ButtonAtom.disable()\` on press, \`enable()\` after action or in \`Job.COMPLETE\`
|
|
221
|
+
- **Interfaces** → \`I\` prefix, minimal properties only
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Tool Reference
|
|
226
|
+
|
|
227
|
+
| Tool | When to use |
|
|
228
|
+
|------|-------------|
|
|
229
|
+
| \`inspect_screen\` | Before modifying — understand what exists |
|
|
230
|
+
| \`analyze_project\` | Before creating — see overall project state |
|
|
231
|
+
| \`plan_feature\` | Generate ordered creation steps |
|
|
232
|
+
| \`create_usecase\` | Add a new action/behavior |
|
|
233
|
+
| \`create_repository\` | Add new API/data access |
|
|
234
|
+
| \`create_interface\` | Define a new response/DTO type |
|
|
235
|
+
| \`create_ui_component\` | Add Page/Molecule/Atom/Content |
|
|
236
|
+
| \`create_animation\` | Add Tween animation |
|
|
237
|
+
| \`create_view\` | Generate View + ViewModel pair |
|
|
238
|
+
| \`add_route\` | Register new route in routing.json |
|
|
239
|
+
| \`validate_architecture\` | Final consistency check |
|
|
240
|
+
`;
|
|
241
|
+
}
|
|
112
242
|
const ARCHITECTURE_GUIDE = `# Next2D Architecture & Coding Conventions
|
|
113
243
|
|
|
114
244
|
## MVVM + Clean Architecture
|
|
@@ -138,11 +268,11 @@ const ARCHITECTURE_GUIDE = `# Next2D Architecture & Coding Conventions
|
|
|
138
268
|
- All public methods must have JSDoc comments
|
|
139
269
|
|
|
140
270
|
### View Rules
|
|
141
|
-
- Extends \`
|
|
271
|
+
- Extends \`View<ViewModel>\` generic class from framework
|
|
142
272
|
- **No business logic** - only display structure
|
|
143
|
-
- Constructor receives ViewModel
|
|
144
|
-
- \`initialize()\`: Delegates to
|
|
145
|
-
- \`onEnter()\`: Delegates to
|
|
273
|
+
- Constructor receives ViewModel, calls \`super(vm)\`, creates Page component and \`addChild()\`
|
|
274
|
+
- \`initialize()\`: Delegates to \`this._xxxPage.initialize(this.vm)\`
|
|
275
|
+
- \`onEnter()\`: Delegates to \`await this._xxxPage.onEnter()\`
|
|
146
276
|
- \`onExit()\`: Cleanup when view is hidden
|
|
147
277
|
|
|
148
278
|
### ViewModel Rules
|
|
@@ -191,21 +321,49 @@ content.addEventListener(PointerEvent.POINTER_DOWN, (event: PointerEvent): void
|
|
|
191
321
|
\`\`\`typescript
|
|
192
322
|
// ButtonAtom provides disable()/enable() for mouseEnabled/mouseChildren control
|
|
193
323
|
|
|
194
|
-
//
|
|
324
|
+
// Pattern 1: Normal button (re-enable on POINTER_UP)
|
|
195
325
|
button.addEventListener(PointerEvent.POINTER_UP, async (): Promise<void> => {
|
|
196
326
|
button.disable(); // Immediately disable to prevent double-press
|
|
197
327
|
await vm.onClickButton();
|
|
198
328
|
button.enable(); // Re-enable after processing (skip if navigating away)
|
|
199
329
|
});
|
|
200
330
|
|
|
201
|
-
//
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
331
|
+
// Pattern 2: Tween animation (re-enable in Job.COMPLETE callback)
|
|
332
|
+
button.addEventListener(PointerEvent.POINTER_UP, (): void => {
|
|
333
|
+
button.disable();
|
|
334
|
+
new ButtonPointerUpAnimation(button, () => { button.enable(); }).start();
|
|
335
|
+
});
|
|
336
|
+
\`\`\`
|
|
337
|
+
|
|
338
|
+
### Display Object Hierarchy
|
|
339
|
+
\`\`\`
|
|
340
|
+
DisplayObject (base)
|
|
341
|
+
├── InteractiveObject
|
|
342
|
+
│ ├── DisplayObjectContainer
|
|
343
|
+
│ │ └── Sprite
|
|
344
|
+
│ │ └── MovieClip ← addChild() allowed, timeline animation
|
|
345
|
+
│ └── TextField ← addChild() NOT allowed, text display/input
|
|
346
|
+
├── Shape ← addChild() NOT allowed, lightweight vector drawing
|
|
347
|
+
└── Video ← addChild() NOT allowed, video playback
|
|
348
|
+
\`\`\`
|
|
349
|
+
**Key type constraints:**
|
|
350
|
+
- \`Shape\` does NOT extend \`DisplayObjectContainer\` → \`addChild()\` unavailable
|
|
351
|
+
- \`Shape\` cannot be directly cast to \`Sprite\` → use \`as unknown as Sprite\` two-step assertion
|
|
352
|
+
- \`hitArea\` property type is \`Sprite | null\` → type assertion required when passing \`Shape\`
|
|
353
|
+
|
|
354
|
+
### Content Security Policy (CSP)
|
|
355
|
+
Required directives for Next2D Player (WebGL/WebGPU, Web Workers, Blob URLs):
|
|
356
|
+
\`\`\`
|
|
357
|
+
default-src 'self' data: blob: ← Blob URL/Data URI used internally
|
|
358
|
+
style-src 'self' 'unsafe-inline' ← Dynamic style injection by Player
|
|
359
|
+
worker-src 'self' blob: data: ← Web Worker via Blob/Data URI
|
|
360
|
+
\`\`\`
|
|
361
|
+
**NEVER add \`frame-ancestors 'none'\`** — it will break the application.
|
|
362
|
+
|
|
363
|
+
### E2E Testing Recommendation
|
|
364
|
+
After screen transitions or UI behavior changes, verify with Playwright:
|
|
365
|
+
\`\`\`bash
|
|
366
|
+
npx playwright test
|
|
209
367
|
\`\`\`
|
|
210
368
|
`;
|
|
211
369
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,10 +6,10 @@ describe("Prompt registration", () => {
|
|
|
6
6
|
beforeEach(() => {
|
|
7
7
|
server = new McpServer({ name: "test", version: "0.0.1" });
|
|
8
8
|
});
|
|
9
|
-
it("registers
|
|
9
|
+
it("registers 4 prompts without error", () => {
|
|
10
10
|
const spy = vi.spyOn(server, "registerPrompt");
|
|
11
11
|
registerPrompts(server);
|
|
12
|
-
expect(spy).toHaveBeenCalledTimes(
|
|
12
|
+
expect(spy).toHaveBeenCalledTimes(4);
|
|
13
13
|
});
|
|
14
14
|
it("registers expected prompt names", () => {
|
|
15
15
|
const spy = vi.spyOn(server, "registerPrompt");
|
|
@@ -18,6 +18,7 @@ describe("Prompt registration", () => {
|
|
|
18
18
|
expect(names).toContain("new-screen");
|
|
19
19
|
expect(names).toContain("architecture-guide");
|
|
20
20
|
expect(names).toContain("debug-help");
|
|
21
|
+
expect(names).toContain("orchestrate");
|
|
21
22
|
});
|
|
22
23
|
});
|
|
23
24
|
//# sourceMappingURL=prompts.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.test.js","sourceRoot":"","sources":["../../src/prompts/prompts.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACjC,IAAI,MAAiB,CAAC;IAEtB,UAAU,CAAC,GAAG,EAAE;QACZ,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC/C,eAAe,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC/C,eAAe,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.test.js","sourceRoot":"","sources":["../../src/prompts/prompts.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACjC,IAAI,MAAiB,CAAC;IAEtB,UAAU,CAAC,GAAG,EAAE;QACZ,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC/C,eAAe,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC/C,eAAe,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -2241,6 +2241,42 @@ textField.replaceText("Next2D", 6, 11);
|
|
|
2241
2241
|
stage.addChild(textField);
|
|
2242
2242
|
```
|
|
2243
2243
|
|
|
2244
|
+
### RPGゲーム風台詞アニメーション(stopIndex)
|
|
2245
|
+
|
|
2246
|
+
`stopIndex` を使うと、テキストを先頭から順番に表示するタイプライター効果を実現できます。
|
|
2247
|
+
RPGゲームの台詞ウィンドウのような演出に適しています。
|
|
2248
|
+
`stopIndex` のデフォルト値は `-1`(全文字を表示)で、`0` にすると文字が非表示になります。
|
|
2249
|
+
|
|
2250
|
+
```typescript
|
|
2251
|
+
const { TextField } = next2d.text;
|
|
2252
|
+
const { Tween, Job } = next2d.ui;
|
|
2253
|
+
|
|
2254
|
+
const textField = new TextField();
|
|
2255
|
+
textField.width = 300;
|
|
2256
|
+
textField.height = 80;
|
|
2257
|
+
textField.multiline = true;
|
|
2258
|
+
textField.wordWrap = true;
|
|
2259
|
+
textField.text = "勇者よ、魔王を倒してくれ!世界の命運はそなたにかかっている。";
|
|
2260
|
+
|
|
2261
|
+
stage.addChild(textField);
|
|
2262
|
+
|
|
2263
|
+
// stopIndex を 0 → text.length まで 5秒かけてアニメーション(0.5秒の遅延あり)
|
|
2264
|
+
const job = Tween.add(
|
|
2265
|
+
textField,
|
|
2266
|
+
{ stopIndex: 0 },
|
|
2267
|
+
{ stopIndex: textField.text.length },
|
|
2268
|
+
0.5,
|
|
2269
|
+
5
|
|
2270
|
+
);
|
|
2271
|
+
|
|
2272
|
+
// 表示完了後のコールバック
|
|
2273
|
+
job.addEventListener(Job.COMPLETE, () => {
|
|
2274
|
+
console.log("台詞表示完了");
|
|
2275
|
+
});
|
|
2276
|
+
|
|
2277
|
+
job.start();
|
|
2278
|
+
```
|
|
2279
|
+
|
|
2244
2280
|
## イベント
|
|
2245
2281
|
|
|
2246
2282
|
| イベント | 説明 |
|
package/dist/resources/index.js
CHANGED
|
@@ -109,9 +109,9 @@ Application Layer (model/application/)
|
|
|
109
109
|
\`\`\`
|
|
110
110
|
|
|
111
111
|
### View Layer (src/view/, src/ui/)
|
|
112
|
-
- **View**: Extends
|
|
113
|
-
- **ViewModel**: Bridge between View and Model. Holds UseCases.
|
|
114
|
-
- **UI Components**: Atomic Design hierarchy (Atom → Molecule → Organism → Page)
|
|
112
|
+
- **View**: Extends \`View<ViewModel>\` generic class. No business logic. Constructor calls \`super(vm)\`, creates Page component.
|
|
113
|
+
- **ViewModel**: Bridge between View and Model. Holds UseCases. Initialized before View.
|
|
114
|
+
- **UI Components**: Atomic Design hierarchy (Atom → Molecule → Organism → Page). View delegates to Page for UI setup.
|
|
115
115
|
|
|
116
116
|
### Interface Layer (src/interface/)
|
|
117
117
|
- TypeScript interfaces with \`I\` prefix
|
|
@@ -158,9 +158,26 @@ URL-to-View mapping with request configurations.
|
|
|
158
158
|
\`\`\`
|
|
159
159
|
ViewModel.constructor → ViewModel.initialize() → View.constructor(vm) → View.initialize() → View.onEnter() → (interaction) → View.onExit()
|
|
160
160
|
\`\`\`
|
|
161
|
+
**Note:** View delegates to Page component: \`initialize()\` calls \`page.initialize(this.vm)\`, \`onEnter()\` calls \`await page.onEnter()\`.
|
|
162
|
+
|
|
163
|
+
## Display Object Hierarchy
|
|
164
|
+
\`\`\`
|
|
165
|
+
DisplayObject (base)
|
|
166
|
+
├── InteractiveObject
|
|
167
|
+
│ ├── DisplayObjectContainer
|
|
168
|
+
│ │ └── Sprite
|
|
169
|
+
│ │ └── MovieClip ← addChild() allowed, timeline animation
|
|
170
|
+
│ └── TextField ← addChild() NOT allowed, text display/input
|
|
171
|
+
├── Shape ← addChild() NOT allowed, lightweight vector drawing
|
|
172
|
+
└── Video ← addChild() NOT allowed, video playback
|
|
173
|
+
\`\`\`
|
|
174
|
+
**Key constraints:**
|
|
175
|
+
- \`Shape\` has no \`addChild()\` — use \`Sprite\` or \`MovieClip\` as container
|
|
176
|
+
- Casting \`Shape\` to \`Sprite\`: requires \`as unknown as Sprite\` two-step assertion
|
|
177
|
+
- \`hitArea\` is \`Sprite | null\` — type assertion required for \`Shape\`
|
|
161
178
|
|
|
162
179
|
## Key Rules
|
|
163
|
-
1. View: Display only. Delegate events to ViewModel.
|
|
180
|
+
1. View: Display only. Delegate events to ViewModel. Use \`View<ViewModel>\` generic.
|
|
164
181
|
2. ViewModel: Hold UseCases. Depend on interfaces. Get data via \`app.getResponse()\`.
|
|
165
182
|
3. UseCase: Single responsibility. \`execute()\` entry point. Can call Repository, Domain, framework APIs.
|
|
166
183
|
4. Repository: try-catch required. Config for endpoints. Return typed interfaces.
|
|
@@ -168,6 +185,8 @@ ViewModel.constructor → ViewModel.initialize() → View.constructor(vm) → Vi
|
|
|
168
185
|
6. No \`any\` type. Explicit types always.
|
|
169
186
|
7. Domain: No external API/DB dependencies (Next2D display APIs allowed). Pure business logic.
|
|
170
187
|
8. Animation: Separate from components. Use Tween/Easing/Job.
|
|
188
|
+
9. CSP: \`default-src 'self' data: blob:\`, \`worker-src 'self' blob: data:\`, \`style-src 'self' 'unsafe-inline'\` required. NEVER add \`frame-ancestors 'none'\`.
|
|
189
|
+
10. E2E: After UI/screen changes, run \`npx playwright test\` to verify behavior.
|
|
171
190
|
|
|
172
191
|
## DisplayObject Centering Pattern
|
|
173
192
|
\`\`\`typescript
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzeProject.d.ts","sourceRoot":"","sources":["../../src/tools/analyzeProject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2J9D"}
|