next2d-development-mcp 1.0.2 → 1.1.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.
- 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/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
|
@@ -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"}
|
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":"AACA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,SAAS,aAAa,CAAC,QAAgB;IACnC,wCAAwC;IACxC,sEAAsE;IACtE,yGAAyG;IACzG,oGAAoG;IACpG,iFAAiF;IACjF,gHAAgH;IAChH,2GAA2G;IAC3G,6DAA6D;IAC7D,MAAM,UAAU,GAAG;QACf,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC;QAClD,IAAI,CAAC,IAAI,CACL,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,8BAA8B,EAC9B,QAAQ,EACR,8BAA8B,EAC9B,YAAY,EACZ,QAAQ,CACX;QACD,IAAI,CAAC,IAAI,CACL,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,8BAA8B,EAC9B,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,QAAQ,CACX;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC;QAC7E,IAAI,CAAC,IAAI,CACL,OAAO,CAAC,GAAG,EAAE,EACb,8BAA8B,EAC9B,QAAQ,EACR,8BAA8B,EAC9B,YAAY,EACZ,QAAQ,CACX;QACD,IAAI,CAAC,IAAI,CACL,OAAO,CAAC,GAAG,EAAE,EACb,8BAA8B,EAC9B,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,QAAQ,CACX;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC;KACxE,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACjC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAED,OAAO,mBAAmB,QAAQ,0BAA0B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IAC/C,MAAM,CAAC,gBAAgB,CACnB,cAAc,EACd,uBAAuB,EACvB;QACI,aAAa,EACT,oFAAoF;YACpF,gFAAgF;YAChF,4CAA4C;QAChD,UAAU,EAAE,eAAe;KAC9B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACT,UAAU,EAAE;YACR;gBACI,KAAK,EAAE,uBAAuB;gBAC9B,UAAU,EAAE,eAAe;gBAC3B,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC;aAC3C;SACJ;KACJ,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACnB,iBAAiB,EACjB,0BAA0B,EAC1B;QACI,aAAa,EACT,mEAAmE;YACnE,uEAAuE;YACvE,sFAAsF;QAC1F,UAAU,EAAE,eAAe;KAC9B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACT,UAAU,EAAE;YACR;gBACI,KAAK,EAAE,0BAA0B;gBACjC,UAAU,EAAE,eAAe;gBAC3B,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC;aAC9C;SACJ;KACJ,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACnB,eAAe,EACf,wBAAwB,EACxB;QACI,aAAa,EACT,4EAA4E;YAC5E,qEAAqE;YACrE,uFAAuF;QAC3F,UAAU,EAAE,eAAe;KAC9B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACT,UAAU,EAAE;YACR;gBACI,KAAK,EAAE,wBAAwB;gBAC/B,UAAU,EAAE,eAAe;gBAC3B,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC;aAC5C;SACJ;KACJ,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACnB,uBAAuB,EACvB,uBAAuB,EACvB;QACI,aAAa,EACT,0EAA0E;YAC1E,2CAA2C;QAC/C,UAAU,EAAE,eAAe;KAC9B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACT,UAAU,EAAE;YACR;gBACI,KAAK,EAAE,uBAAuB;gBAC9B,UAAU,EAAE,eAAe;gBAC3B,MAAM,EAAE,qBAAqB;aAChC;SACJ;KACJ,CAAC,CACL,CAAC;AACN,CAAC;AAED,MAAM,qBAAqB,GAAG
|
|
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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
function walkDir(dir, suffix, results = []) {
|
|
5
|
+
if (!fs.existsSync(dir)) {
|
|
6
|
+
return results;
|
|
7
|
+
}
|
|
8
|
+
for (const entry of fs.readdirSync(dir, { "withFileTypes": true })) {
|
|
9
|
+
const full = path.join(dir, entry.name);
|
|
10
|
+
if (entry.isDirectory()) {
|
|
11
|
+
walkDir(full, suffix, results);
|
|
12
|
+
}
|
|
13
|
+
else if (entry.isFile() && entry.name.endsWith(suffix)) {
|
|
14
|
+
results.push(full);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return results;
|
|
18
|
+
}
|
|
19
|
+
export function registerAnalyzeProject(server) {
|
|
20
|
+
server.registerTool("analyze_project", {
|
|
21
|
+
"description": "Analyze the current Next2D project state. " +
|
|
22
|
+
"Reads routing.json, scans View/ViewModel/UseCase/Repository files, " +
|
|
23
|
+
"and reports what is implemented vs. missing. " +
|
|
24
|
+
"Use this before planning new features to understand the current state.",
|
|
25
|
+
"inputSchema": {
|
|
26
|
+
"projectPath": z.string().optional().default(".").describe("Path to the project root directory (default: current directory)")
|
|
27
|
+
}
|
|
28
|
+
}, async ({ projectPath }) => {
|
|
29
|
+
const base = path.resolve(projectPath);
|
|
30
|
+
const lines = [
|
|
31
|
+
"## Next2D Project Analysis",
|
|
32
|
+
"",
|
|
33
|
+
`**Project root:** \`${base}\``,
|
|
34
|
+
""
|
|
35
|
+
];
|
|
36
|
+
// --- routing.json ---
|
|
37
|
+
const routingPath = path.join(base, "src/config/routing.json");
|
|
38
|
+
const routes = [];
|
|
39
|
+
const missingViews = [];
|
|
40
|
+
if (fs.existsSync(routingPath)) {
|
|
41
|
+
try {
|
|
42
|
+
const routing = JSON.parse(fs.readFileSync(routingPath, "utf-8"));
|
|
43
|
+
const clusters = Object.keys(routing).filter((k) => k.startsWith("@"));
|
|
44
|
+
const screenRoutes = Object.keys(routing).filter((k) => !k.startsWith("@"));
|
|
45
|
+
lines.push(`### Screens (${screenRoutes.length} routes, ${clusters.length} clusters)`);
|
|
46
|
+
for (const route of screenRoutes) {
|
|
47
|
+
routes.push(route);
|
|
48
|
+
const screenDir = route.includes("/")
|
|
49
|
+
? route.split("/")[0].toLowerCase()
|
|
50
|
+
: route.toLowerCase();
|
|
51
|
+
const pascal = route
|
|
52
|
+
.split("/")
|
|
53
|
+
.map((s) => s.charAt(0).toUpperCase() + s.slice(1))
|
|
54
|
+
.join("");
|
|
55
|
+
const viewFile = path.join(base, `src/view/${screenDir}/${pascal}View.ts`);
|
|
56
|
+
const vmFile = path.join(base, `src/view/${screenDir}/${pascal}ViewModel.ts`);
|
|
57
|
+
const hasView = fs.existsSync(viewFile);
|
|
58
|
+
const hasVM = fs.existsSync(vmFile);
|
|
59
|
+
const entry = routing[route];
|
|
60
|
+
const reqs = Array.isArray(entry.requests)
|
|
61
|
+
? entry.requests
|
|
62
|
+
: [];
|
|
63
|
+
const hasApi = reqs.some((r) => r.type === "json" || r.type === "custom");
|
|
64
|
+
const hasContent = reqs.some((r) => r.type === "content");
|
|
65
|
+
const isPrivate = entry.private === true;
|
|
66
|
+
const tags = [
|
|
67
|
+
hasApi ? "[API]" : "",
|
|
68
|
+
hasContent ? "[Content]" : "",
|
|
69
|
+
isPrivate ? "[private]" : ""
|
|
70
|
+
].filter(Boolean).join(" ");
|
|
71
|
+
const missing = [];
|
|
72
|
+
if (!hasView) {
|
|
73
|
+
missing.push("View");
|
|
74
|
+
}
|
|
75
|
+
if (!hasVM) {
|
|
76
|
+
missing.push("ViewModel");
|
|
77
|
+
}
|
|
78
|
+
const icon = missing.length === 0 ? "✅" : "⚠️";
|
|
79
|
+
const missingNote = missing.length > 0 ? ` ← missing: ${missing.join(", ")}` : "";
|
|
80
|
+
lines.push(`- ${icon} \`${route}\` → ${pascal} ${tags}${missingNote}`);
|
|
81
|
+
if (missing.length > 0) {
|
|
82
|
+
missingViews.push(route);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
lines.push("");
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
lines.push("❌ routing.json is not valid JSON", "");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
lines.push("❌ `src/config/routing.json` not found", "");
|
|
93
|
+
}
|
|
94
|
+
// --- UseCases ---
|
|
95
|
+
const usecaseBase = path.join(base, "src/model/application");
|
|
96
|
+
const usecaseFiles = walkDir(usecaseBase, "UseCase.ts");
|
|
97
|
+
lines.push(`### UseCases (${usecaseFiles.length})`);
|
|
98
|
+
if (usecaseFiles.length === 0) {
|
|
99
|
+
lines.push("- (none)");
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
for (const f of usecaseFiles) {
|
|
103
|
+
lines.push(`- \`${path.relative(base, f)}\``);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
lines.push("");
|
|
107
|
+
// --- Repositories ---
|
|
108
|
+
const repoBase = path.join(base, "src/model/infrastructure/repository");
|
|
109
|
+
const repoFiles = walkDir(repoBase, "Repository.ts");
|
|
110
|
+
lines.push(`### Repositories (${repoFiles.length})`);
|
|
111
|
+
if (repoFiles.length === 0) {
|
|
112
|
+
lines.push("- (none)");
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
for (const f of repoFiles) {
|
|
116
|
+
lines.push(`- \`${path.relative(base, f)}\``);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
lines.push("");
|
|
120
|
+
// --- UI Components ---
|
|
121
|
+
const atomFiles = walkDir(path.join(base, "src/ui/component/atom"), ".ts");
|
|
122
|
+
const moleculeFiles = walkDir(path.join(base, "src/ui/component/molecule"), ".ts");
|
|
123
|
+
const pageFiles = walkDir(path.join(base, "src/ui/component/page"), ".ts");
|
|
124
|
+
const contentFiles = walkDir(path.join(base, "src/ui/content"), ".ts");
|
|
125
|
+
lines.push("### UI Components");
|
|
126
|
+
lines.push(`- Atoms: ${atomFiles.length}`);
|
|
127
|
+
lines.push(`- Molecules: ${moleculeFiles.length}`);
|
|
128
|
+
lines.push(`- Pages: ${pageFiles.length}`);
|
|
129
|
+
lines.push(`- Contents: ${contentFiles.length}`);
|
|
130
|
+
lines.push("");
|
|
131
|
+
// --- Summary & next actions ---
|
|
132
|
+
lines.push("### Summary");
|
|
133
|
+
if (missingViews.length === 0 && routes.length > 0) {
|
|
134
|
+
lines.push("✅ All routes have corresponding View/ViewModel implementations.");
|
|
135
|
+
}
|
|
136
|
+
else if (missingViews.length > 0) {
|
|
137
|
+
lines.push(`⚠️ ${missingViews.length} route(s) missing View/ViewModel:`);
|
|
138
|
+
for (const r of missingViews) {
|
|
139
|
+
lines.push(` - \`${r}\` → run \`npm run generate\` or use \`create_view\` tool`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
lines.push("");
|
|
143
|
+
lines.push("### Suggested Next Steps");
|
|
144
|
+
lines.push("- Use `plan_feature` tool to generate an ordered implementation plan for a new screen");
|
|
145
|
+
lines.push("- Use `validate_architecture` tool for a full structural check");
|
|
146
|
+
if (missingViews.length > 0) {
|
|
147
|
+
lines.push("- Run `npm run generate` to auto-create missing View/ViewModel pairs");
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
"content": [
|
|
151
|
+
{
|
|
152
|
+
"type": "text",
|
|
153
|
+
"text": lines.join("\n")
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
};
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=analyzeProject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzeProject.js","sourceRoot":"","sources":["../../src/tools/analyzeProject.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,OAAO,EAAE,CAAC,EAAE,CAAC;AAEb,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAcrD"}
|
package/dist/tools/index.js
CHANGED
|
@@ -9,6 +9,9 @@ import { registerValidateArchitecture } from "./validateArchitecture.js";
|
|
|
9
9
|
import { registerCreateAnimation } from "./createAnimation.js";
|
|
10
10
|
import { registerCreateDomainService } from "./createDomainService.js";
|
|
11
11
|
import { registerCreateLoading } from "./createLoading.js";
|
|
12
|
+
import { registerAnalyzeProject } from "./analyzeProject.js";
|
|
13
|
+
import { registerPlanFeature } from "./planFeature.js";
|
|
14
|
+
import { registerInspectScreen } from "./inspectScreen.js";
|
|
12
15
|
export { z };
|
|
13
16
|
export function registerTools(server) {
|
|
14
17
|
registerCreateView(server);
|
|
@@ -21,5 +24,8 @@ export function registerTools(server) {
|
|
|
21
24
|
registerCreateAnimation(server);
|
|
22
25
|
registerCreateDomainService(server);
|
|
23
26
|
registerCreateLoading(server);
|
|
27
|
+
registerAnalyzeProject(server);
|
|
28
|
+
registerPlanFeature(server);
|
|
29
|
+
registerInspectScreen(server);
|
|
24
30
|
}
|
|
25
31
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,CAAC,EAAE,CAAC;AAEb,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC3C,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,CAAC,EAAE,CAAC;AAEb,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC3C,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectScreen.d.ts","sourceRoot":"","sources":["../../src/tools/inspectScreen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsCzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwM7D"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
function toPascal(name) {
|
|
5
|
+
return name
|
|
6
|
+
.split(/[/\-_]/)
|
|
7
|
+
.map((s) => s.charAt(0).toUpperCase() + s.slice(1))
|
|
8
|
+
.join("");
|
|
9
|
+
}
|
|
10
|
+
function walkDir(dir, suffix, results = []) {
|
|
11
|
+
if (!fs.existsSync(dir)) {
|
|
12
|
+
return results;
|
|
13
|
+
}
|
|
14
|
+
for (const entry of fs.readdirSync(dir, { "withFileTypes": true })) {
|
|
15
|
+
const full = path.join(dir, entry.name);
|
|
16
|
+
if (entry.isDirectory()) {
|
|
17
|
+
walkDir(full, suffix, results);
|
|
18
|
+
}
|
|
19
|
+
else if (entry.isFile() && entry.name.endsWith(suffix)) {
|
|
20
|
+
results.push(full);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return results;
|
|
24
|
+
}
|
|
25
|
+
function fileStatus(base, relativePath) {
|
|
26
|
+
const full = path.join(base, relativePath);
|
|
27
|
+
if (!fs.existsSync(full)) {
|
|
28
|
+
return { "exists": false, "lines": 0, "path": relativePath };
|
|
29
|
+
}
|
|
30
|
+
const content = fs.readFileSync(full, "utf-8");
|
|
31
|
+
const lines = content.split("\n").length;
|
|
32
|
+
return { "exists": true, lines, "path": relativePath };
|
|
33
|
+
}
|
|
34
|
+
export function registerInspectScreen(server) {
|
|
35
|
+
server.registerTool("inspect_screen", {
|
|
36
|
+
"description": "Inspect all implementation files for a specific Next2D screen. " +
|
|
37
|
+
"Lists View, ViewModel, Page, UseCases, Repositories, Animations, and Content " +
|
|
38
|
+
"related to the given screen path. Shows file existence, line counts, and " +
|
|
39
|
+
"routing.json configuration. Use this before modifying an existing screen " +
|
|
40
|
+
"to understand what is already implemented.",
|
|
41
|
+
"inputSchema": {
|
|
42
|
+
"screenPath": z.string().describe("Screen path matching routing.json key (e.g. 'quest/list', 'home', 'settings')"),
|
|
43
|
+
"projectPath": z.string().optional().default(".").describe("Path to the project root directory (default: current directory)")
|
|
44
|
+
}
|
|
45
|
+
}, async ({ screenPath, projectPath }) => {
|
|
46
|
+
const base = path.resolve(projectPath);
|
|
47
|
+
const pascal = toPascal(screenPath);
|
|
48
|
+
const screenDir = screenPath.includes("/")
|
|
49
|
+
? screenPath.split("/")[0].toLowerCase()
|
|
50
|
+
: screenPath.toLowerCase();
|
|
51
|
+
const lines = [
|
|
52
|
+
`## Screen Inspection: \`${screenPath}\``,
|
|
53
|
+
"",
|
|
54
|
+
"| Item | Value |",
|
|
55
|
+
"|------|-------|",
|
|
56
|
+
`| Screen path | \`${screenPath}\` |`,
|
|
57
|
+
`| Class prefix | \`${pascal}\` |`,
|
|
58
|
+
`| Screen directory | \`src/view/${screenDir}/\` |`,
|
|
59
|
+
""
|
|
60
|
+
];
|
|
61
|
+
// --- routing.json entry ---
|
|
62
|
+
lines.push("### routing.json Configuration");
|
|
63
|
+
const routingPath = path.join(base, "src/config/routing.json");
|
|
64
|
+
if (fs.existsSync(routingPath)) {
|
|
65
|
+
try {
|
|
66
|
+
const routing = JSON.parse(fs.readFileSync(routingPath, "utf-8"));
|
|
67
|
+
if (screenPath in routing) {
|
|
68
|
+
lines.push("```json");
|
|
69
|
+
lines.push(JSON.stringify({ [screenPath]: routing[screenPath] }, null, 4));
|
|
70
|
+
lines.push("```");
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
lines.push(`⚠️ Route \`${screenPath}\` not found in routing.json`);
|
|
74
|
+
lines.push("→ Add route first with `add_route` tool or `npm run generate`");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
lines.push("❌ routing.json parse error");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
lines.push("❌ routing.json not found");
|
|
83
|
+
}
|
|
84
|
+
lines.push("");
|
|
85
|
+
// --- Core MVVM files ---
|
|
86
|
+
lines.push("### MVVM Files");
|
|
87
|
+
const coreFiles = [
|
|
88
|
+
{ "label": "View", "rel": `src/view/${screenDir}/${pascal}View.ts` },
|
|
89
|
+
{ "label": "ViewModel", "rel": `src/view/${screenDir}/${pascal}ViewModel.ts` }
|
|
90
|
+
];
|
|
91
|
+
for (const f of coreFiles) {
|
|
92
|
+
const s = fileStatus(base, f.rel);
|
|
93
|
+
const icon = s.exists ? "✅" : "❌";
|
|
94
|
+
const detail = s.exists ? `(${s.lines} lines)` : "← missing";
|
|
95
|
+
lines.push(`- ${icon} **${f.label}**: \`${f.rel}\` ${detail}`);
|
|
96
|
+
}
|
|
97
|
+
lines.push("");
|
|
98
|
+
// --- Page component ---
|
|
99
|
+
lines.push("### Page Component");
|
|
100
|
+
const pageStat = fileStatus(base, `src/ui/component/page/${screenDir}/${pascal}Page.ts`);
|
|
101
|
+
const pageIcon = pageStat.exists ? "✅" : "❌";
|
|
102
|
+
const pageDetail = pageStat.exists ? `(${pageStat.lines} lines)` : "← missing";
|
|
103
|
+
lines.push(`- ${pageIcon} **Page**: \`${pageStat.path}\` ${pageDetail}`);
|
|
104
|
+
lines.push("");
|
|
105
|
+
// --- UseCases ---
|
|
106
|
+
lines.push("### UseCases");
|
|
107
|
+
const usecaseDir = path.join(base, `src/model/application/${screenDir}/usecase`);
|
|
108
|
+
const usecaseFiles = walkDir(usecaseDir, ".ts");
|
|
109
|
+
if (usecaseFiles.length === 0) {
|
|
110
|
+
lines.push("- ❌ No UseCases found");
|
|
111
|
+
lines.push(` → Expected in: \`src/model/application/${screenDir}/usecase/\``);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
for (const f of usecaseFiles) {
|
|
115
|
+
const rel = path.relative(base, f);
|
|
116
|
+
const content = fs.readFileSync(f, "utf-8");
|
|
117
|
+
const lc = content.split("\n").length;
|
|
118
|
+
lines.push(`- ✅ \`${rel}\` (${lc} lines)`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
lines.push("");
|
|
122
|
+
// --- Repositories ---
|
|
123
|
+
lines.push("### Repositories");
|
|
124
|
+
const repoDir = path.join(base, "src/model/infrastructure/repository");
|
|
125
|
+
const allRepos = walkDir(repoDir, "Repository.ts");
|
|
126
|
+
// Match repositories whose name starts with the pascal prefix
|
|
127
|
+
const screenRepos = allRepos.filter((f) => path.basename(f).startsWith(pascal));
|
|
128
|
+
if (screenRepos.length === 0) {
|
|
129
|
+
lines.push("- (none matching this screen)");
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
for (const f of screenRepos) {
|
|
133
|
+
const rel = path.relative(base, f);
|
|
134
|
+
const content = fs.readFileSync(f, "utf-8");
|
|
135
|
+
const lc = content.split("\n").length;
|
|
136
|
+
lines.push(`- ✅ \`${rel}\` (${lc} lines)`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
lines.push("");
|
|
140
|
+
// --- Animations ---
|
|
141
|
+
lines.push("### Animations");
|
|
142
|
+
const animDir = path.join(base, `src/ui/animation/${screenDir}`);
|
|
143
|
+
const animFiles = walkDir(animDir, "Animation.ts");
|
|
144
|
+
if (animFiles.length === 0) {
|
|
145
|
+
lines.push("- (none)");
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
for (const f of animFiles) {
|
|
149
|
+
const rel = path.relative(base, f);
|
|
150
|
+
lines.push(`- ✅ \`${rel}\``);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
lines.push("");
|
|
154
|
+
// --- Content ---
|
|
155
|
+
lines.push("### Animation Tool Content");
|
|
156
|
+
const contentStat = fileStatus(base, `src/ui/content/${pascal}Content.ts`);
|
|
157
|
+
if (contentStat.exists) {
|
|
158
|
+
lines.push(`- ✅ \`${contentStat.path}\` (${contentStat.lines} lines)`);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
lines.push("- (none)");
|
|
162
|
+
}
|
|
163
|
+
lines.push("");
|
|
164
|
+
// --- Interfaces ---
|
|
165
|
+
lines.push("### Interfaces");
|
|
166
|
+
const interfaceDir = path.join(base, "src/interface");
|
|
167
|
+
const allInterfaces = walkDir(interfaceDir, ".ts");
|
|
168
|
+
// Match interfaces whose name contains the pascal prefix
|
|
169
|
+
const screenInterfaces = allInterfaces.filter((f) => {
|
|
170
|
+
const name = path.basename(f, ".ts");
|
|
171
|
+
return name.includes(pascal) || name.startsWith(`I${pascal}`);
|
|
172
|
+
});
|
|
173
|
+
if (screenInterfaces.length === 0) {
|
|
174
|
+
lines.push("- (none matching this screen)");
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
for (const f of screenInterfaces) {
|
|
178
|
+
const rel = path.relative(base, f);
|
|
179
|
+
lines.push(`- ✅ \`${rel}\``);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
lines.push("");
|
|
183
|
+
// --- Summary ---
|
|
184
|
+
const missing = [];
|
|
185
|
+
if (!coreFiles[0] || !fileStatus(base, coreFiles[0].rel).exists) {
|
|
186
|
+
missing.push("View");
|
|
187
|
+
}
|
|
188
|
+
if (!coreFiles[1] || !fileStatus(base, coreFiles[1].rel).exists) {
|
|
189
|
+
missing.push("ViewModel");
|
|
190
|
+
}
|
|
191
|
+
if (!pageStat.exists) {
|
|
192
|
+
missing.push("Page");
|
|
193
|
+
}
|
|
194
|
+
if (usecaseFiles.length === 0) {
|
|
195
|
+
missing.push("UseCase");
|
|
196
|
+
}
|
|
197
|
+
lines.push("### Summary");
|
|
198
|
+
if (missing.length === 0) {
|
|
199
|
+
lines.push("✅ All core files are implemented.");
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
lines.push(`⚠️ Missing: ${missing.join(", ")}`);
|
|
203
|
+
}
|
|
204
|
+
lines.push("");
|
|
205
|
+
lines.push("### Next Steps for Modification");
|
|
206
|
+
lines.push("Read the files listed above with the **Read** tool to understand the current implementation.");
|
|
207
|
+
lines.push("Then plan your changes:");
|
|
208
|
+
lines.push("- **Add UseCase**: `create_usecase` tool");
|
|
209
|
+
lines.push("- **Add Repository**: `create_repository` tool");
|
|
210
|
+
lines.push("- **Add UI component**: `create_ui_component` tool");
|
|
211
|
+
lines.push("- **Add Animation**: `create_animation` tool");
|
|
212
|
+
lines.push("- **Modify existing file**: Read → plan changes → Edit");
|
|
213
|
+
return {
|
|
214
|
+
"content": [
|
|
215
|
+
{
|
|
216
|
+
"type": "text",
|
|
217
|
+
"text": lines.join("\n")
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
};
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=inspectScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectScreen.js","sourceRoot":"","sources":["../../src/tools/inspectScreen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planFeature.d.ts","sourceRoot":"","sources":["../../src/tools/planFeature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsR3D"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
function toPascal(name) {
|
|
5
|
+
return name
|
|
6
|
+
.split(/[/\-_]/)
|
|
7
|
+
.map((s) => s.charAt(0).toUpperCase() + s.slice(1))
|
|
8
|
+
.join("");
|
|
9
|
+
}
|
|
10
|
+
export function registerPlanFeature(server) {
|
|
11
|
+
server.registerTool("plan_feature", {
|
|
12
|
+
"description": "Generate a systematic, ordered implementation plan for a new Next2D screen or feature. " +
|
|
13
|
+
"Checks what already exists in the project and produces step-by-step instructions " +
|
|
14
|
+
"with specific MCP tool calls to execute. " +
|
|
15
|
+
"Run analyze_project first to understand current state.",
|
|
16
|
+
"inputSchema": {
|
|
17
|
+
"screenPath": z.string().describe("Screen path matching routing.json key (e.g. 'quest/list', 'home', 'settings')"),
|
|
18
|
+
"hasApi": z.boolean().optional().default(false).describe("Does this screen fetch data from an external API?"),
|
|
19
|
+
"hasContent": z.boolean().optional().default(false).describe("Does this screen use Animation Tool (.n2d) content?"),
|
|
20
|
+
"projectPath": z.string().optional().default(".").describe("Path to project root directory (default: current directory)")
|
|
21
|
+
}
|
|
22
|
+
}, async ({ screenPath, hasApi, hasContent, projectPath }) => {
|
|
23
|
+
const base = path.resolve(projectPath);
|
|
24
|
+
const pascal = toPascal(screenPath);
|
|
25
|
+
const screenDir = screenPath.includes("/")
|
|
26
|
+
? screenPath.split("/")[0].toLowerCase()
|
|
27
|
+
: screenPath.toLowerCase();
|
|
28
|
+
// --- Detect what already exists ---
|
|
29
|
+
const routingPath = path.join(base, "src/config/routing.json");
|
|
30
|
+
let routeExists = false;
|
|
31
|
+
if (fs.existsSync(routingPath)) {
|
|
32
|
+
try {
|
|
33
|
+
const routing = JSON.parse(fs.readFileSync(routingPath, "utf-8"));
|
|
34
|
+
routeExists = screenPath in routing;
|
|
35
|
+
}
|
|
36
|
+
catch { /* ignore */ }
|
|
37
|
+
}
|
|
38
|
+
const viewExists = fs.existsSync(path.join(base, `src/view/${screenDir}/${pascal}View.ts`));
|
|
39
|
+
const vmExists = fs.existsSync(path.join(base, `src/view/${screenDir}/${pascal}ViewModel.ts`));
|
|
40
|
+
const repoExists = fs.existsSync(path.join(base, `src/model/infrastructure/repository/${pascal}Repository.ts`));
|
|
41
|
+
const pageExists = fs.existsSync(path.join(base, `src/ui/component/page/${screenDir}/${pascal}Page.ts`));
|
|
42
|
+
const contentExists = fs.existsSync(path.join(base, `src/ui/content/${pascal}Content.ts`));
|
|
43
|
+
const lines = [
|
|
44
|
+
`## Implementation Plan: \`${screenPath}\``,
|
|
45
|
+
"",
|
|
46
|
+
"| Item | Value |",
|
|
47
|
+
"|------|-------|",
|
|
48
|
+
`| Screen path | \`${screenPath}\` |`,
|
|
49
|
+
`| Class prefix | \`${pascal}\` |`,
|
|
50
|
+
`| View directory | \`src/view/${screenDir}/\` |`,
|
|
51
|
+
`| Features | ${[hasApi ? "API data" : "", hasContent ? "Animation Tool content" : ""].filter(Boolean).join(", ") || "Basic screen"} |`,
|
|
52
|
+
"",
|
|
53
|
+
"---",
|
|
54
|
+
""
|
|
55
|
+
];
|
|
56
|
+
let step = 1;
|
|
57
|
+
// ── Step: Route ──────────────────────────────────────────────
|
|
58
|
+
if (routeExists) {
|
|
59
|
+
lines.push(`### ✅ Route \`${screenPath}\` already defined in routing.json`);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
lines.push(`### Step ${step}: Add Route`);
|
|
63
|
+
lines.push("**Tool:** `add_route`");
|
|
64
|
+
lines.push("```json");
|
|
65
|
+
lines.push("{");
|
|
66
|
+
lines.push(` "path": "${screenPath}",`);
|
|
67
|
+
lines.push(" \"requests\": [");
|
|
68
|
+
if (hasContent) {
|
|
69
|
+
lines.push(` { "type": "content", "path": "{{ content.endPoint }}content/${screenPath}.json", "name": "${pascal}Content", "cache": true }${hasApi ? "," : ""}`);
|
|
70
|
+
}
|
|
71
|
+
if (hasApi) {
|
|
72
|
+
lines.push(` { "type": "json", "path": "{{ api.endPoint }}api/${screenPath}.json", "name": "${pascal}Data" }`);
|
|
73
|
+
}
|
|
74
|
+
lines.push(" ]");
|
|
75
|
+
lines.push("}");
|
|
76
|
+
lines.push("```");
|
|
77
|
+
step++;
|
|
78
|
+
}
|
|
79
|
+
lines.push("");
|
|
80
|
+
// ── Step: Interface (API response type) ──────────────────────
|
|
81
|
+
if (hasApi) {
|
|
82
|
+
lines.push(`### Step ${step}: Define API Response Interface`);
|
|
83
|
+
lines.push("**Tool:** `create_interface`");
|
|
84
|
+
lines.push("```");
|
|
85
|
+
lines.push("create_interface({");
|
|
86
|
+
lines.push(` name: "${pascal}Response",`);
|
|
87
|
+
lines.push(" properties: [{ name: \"id\", type: \"string\" }, { name: \"name\", type: \"string\" }]");
|
|
88
|
+
lines.push("})");
|
|
89
|
+
lines.push("```");
|
|
90
|
+
lines.push(`**Output:** \`src/interface/I${pascal}Response.ts\``);
|
|
91
|
+
lines.push("**Note:** Define only the properties you actually use (minimal interface rule)");
|
|
92
|
+
lines.push("");
|
|
93
|
+
step++;
|
|
94
|
+
// ── Step: Repository ─────────────────────────────────────
|
|
95
|
+
if (repoExists) {
|
|
96
|
+
lines.push(`### ✅ ${pascal}Repository already exists`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
lines.push(`### Step ${step}: Create Repository`);
|
|
100
|
+
lines.push("**Tool:** `create_repository`");
|
|
101
|
+
lines.push("```");
|
|
102
|
+
lines.push(`create_repository({ name: "${pascal}", method: "get" })`);
|
|
103
|
+
lines.push("```");
|
|
104
|
+
lines.push(`**Output:** \`src/model/infrastructure/repository/${pascal}Repository.ts\``);
|
|
105
|
+
lines.push("**Implement:**");
|
|
106
|
+
lines.push(`- Endpoint: \`\${config.api.endPoint}api/${screenPath}.json\``);
|
|
107
|
+
lines.push(`- Return type: \`Promise<I${pascal}Response>\``);
|
|
108
|
+
lines.push("- Wrap in try-catch (required)");
|
|
109
|
+
step++;
|
|
110
|
+
}
|
|
111
|
+
lines.push("");
|
|
112
|
+
// ── Step: Fetch UseCase ──────────────────────────────────
|
|
113
|
+
lines.push(`### Step ${step}: Create Fetch UseCase`);
|
|
114
|
+
lines.push("**Tool:** `create_usecase`");
|
|
115
|
+
lines.push("```");
|
|
116
|
+
lines.push(`create_usecase({ name: "Fetch${pascal}Data", screen: "${screenDir}" })`);
|
|
117
|
+
lines.push("```");
|
|
118
|
+
lines.push(`**Output:** \`src/model/application/${screenDir}/usecase/Fetch${pascal}DataUseCase.ts\``);
|
|
119
|
+
lines.push("**Implement:** Call Repository, return typed data");
|
|
120
|
+
lines.push("");
|
|
121
|
+
step++;
|
|
122
|
+
}
|
|
123
|
+
// ── Step: Navigation UseCase ─────────────────────────────────
|
|
124
|
+
lines.push(`### Step ${step}: Create Navigation UseCase`);
|
|
125
|
+
lines.push("**Tool:** `create_usecase`");
|
|
126
|
+
lines.push("```");
|
|
127
|
+
lines.push(`create_usecase({ name: "NavigateToView", screen: "${screenDir}" })`);
|
|
128
|
+
lines.push("```");
|
|
129
|
+
lines.push(`**Output:** \`src/model/application/${screenDir}/usecase/NavigateToViewUseCase.ts\``);
|
|
130
|
+
lines.push("**Implement:** `await app.gotoView(viewName)` inside execute()");
|
|
131
|
+
lines.push("");
|
|
132
|
+
step++;
|
|
133
|
+
// ── Step: View / ViewModel ───────────────────────────────────
|
|
134
|
+
if (viewExists && vmExists) {
|
|
135
|
+
lines.push(`### ✅ ${pascal}View and ${pascal}ViewModel already exist`);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
lines.push(`### Step ${step}: Generate View & ViewModel`);
|
|
139
|
+
lines.push("**Preferred:** `npm run generate` (auto-generates from routing.json)");
|
|
140
|
+
lines.push("**Or Tool:** `create_view`");
|
|
141
|
+
lines.push("```");
|
|
142
|
+
lines.push(`create_view({ name: "${screenPath}" })`);
|
|
143
|
+
lines.push("```");
|
|
144
|
+
lines.push("**Output:**");
|
|
145
|
+
lines.push(`- \`src/view/${screenDir}/${pascal}View.ts\``);
|
|
146
|
+
lines.push(`- \`src/view/${screenDir}/${pascal}ViewModel.ts\``);
|
|
147
|
+
lines.push("**After creation:**");
|
|
148
|
+
lines.push(`- Register in \`src/Packages.ts\` (import ${pascal}View, ${pascal}ViewModel)`);
|
|
149
|
+
lines.push(`- Add \`"${screenPath}"\` to \`src/interface/IViewName.ts\` union type`);
|
|
150
|
+
step++;
|
|
151
|
+
}
|
|
152
|
+
lines.push("");
|
|
153
|
+
// ── Step: Page Component ─────────────────────────────────────
|
|
154
|
+
if (pageExists) {
|
|
155
|
+
lines.push(`### ✅ ${pascal}Page already exists`);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
lines.push(`### Step ${step}: Create Page Component`);
|
|
159
|
+
lines.push("**Tool:** `create_ui_component`");
|
|
160
|
+
lines.push("```");
|
|
161
|
+
lines.push(`create_ui_component({ name: "${pascal}Page", level: "page", screen: "${screenDir}" })`);
|
|
162
|
+
lines.push("```");
|
|
163
|
+
lines.push(`**Output:** \`src/ui/component/page/${screenDir}/${pascal}Page.ts\``);
|
|
164
|
+
lines.push("**Implement:**");
|
|
165
|
+
lines.push("- `initialize(vm)`: Create Atom/Molecule components, register event listeners");
|
|
166
|
+
lines.push("- `onEnter()`: Start entry animations");
|
|
167
|
+
lines.push("- Events must delegate to ViewModel methods (no logic in Page)");
|
|
168
|
+
step++;
|
|
169
|
+
}
|
|
170
|
+
lines.push("");
|
|
171
|
+
// ── Step: Content (if needed) ────────────────────────────────
|
|
172
|
+
if (hasContent) {
|
|
173
|
+
if (contentExists) {
|
|
174
|
+
lines.push(`### ✅ ${pascal}Content already exists`);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
lines.push(`### Step ${step}: Create Animation Tool Content Wrapper`);
|
|
178
|
+
lines.push("**Tool:** `create_ui_component`");
|
|
179
|
+
lines.push("```");
|
|
180
|
+
lines.push(`create_ui_component({ name: "${pascal}Content", level: "content" })`);
|
|
181
|
+
lines.push("```");
|
|
182
|
+
lines.push(`**Output:** \`src/ui/content/${pascal}Content.ts\``);
|
|
183
|
+
lines.push("**Remember:** Set `namespace` to match the Animation Tool symbol name exactly");
|
|
184
|
+
step++;
|
|
185
|
+
}
|
|
186
|
+
lines.push("");
|
|
187
|
+
}
|
|
188
|
+
// ── Step: Animation ──────────────────────────────────────────
|
|
189
|
+
lines.push(`### Step ${step}: Create Entry Animation (recommended)`);
|
|
190
|
+
lines.push("**Tool:** `create_animation`");
|
|
191
|
+
lines.push("```");
|
|
192
|
+
lines.push(`create_animation({ component: "${pascal}Page", action: "Show", screen: "${screenDir}" })`);
|
|
193
|
+
lines.push("```");
|
|
194
|
+
lines.push(`**Output:** \`src/ui/animation/${screenDir}/${pascal}PageShowAnimation.ts\``);
|
|
195
|
+
lines.push("**Implement:** Use `Tween.add()` with `Easing.*`. Call `job.start()` in `onEnter()`");
|
|
196
|
+
lines.push("");
|
|
197
|
+
step++;
|
|
198
|
+
// ── Step: Validate ───────────────────────────────────────────
|
|
199
|
+
lines.push(`### Step ${step}: Validate Architecture`);
|
|
200
|
+
lines.push("**Tool:** `validate_architecture`");
|
|
201
|
+
lines.push("Confirm all required files exist and the project structure is consistent.");
|
|
202
|
+
lines.push("");
|
|
203
|
+
// ── Implementation Notes ─────────────────────────────────────
|
|
204
|
+
lines.push("---");
|
|
205
|
+
lines.push("");
|
|
206
|
+
lines.push("## Key Implementation Rules");
|
|
207
|
+
lines.push("");
|
|
208
|
+
lines.push("### View Pattern");
|
|
209
|
+
lines.push("```typescript");
|
|
210
|
+
lines.push(`export class ${pascal}View extends View<${pascal}ViewModel> {`);
|
|
211
|
+
lines.push(` private readonly _${screenDir}Page: ${pascal}Page;`);
|
|
212
|
+
lines.push(` constructor(vm: ${pascal}ViewModel) {`);
|
|
213
|
+
lines.push(" super(vm);");
|
|
214
|
+
lines.push(` this._${screenDir}Page = new ${pascal}Page();`);
|
|
215
|
+
lines.push(` this.addChild(this._${screenDir}Page);`);
|
|
216
|
+
lines.push(" }");
|
|
217
|
+
lines.push(` async initialize(): Promise<void> { this._${screenDir}Page.initialize(this.vm); }`);
|
|
218
|
+
lines.push(` async onEnter(): Promise<void> { await this._${screenDir}Page.onEnter(); }`);
|
|
219
|
+
lines.push(" async onExit(): Promise<void> { return void 0; }");
|
|
220
|
+
lines.push("}");
|
|
221
|
+
lines.push("```");
|
|
222
|
+
lines.push("");
|
|
223
|
+
lines.push("### ViewModel Pattern");
|
|
224
|
+
if (hasApi) {
|
|
225
|
+
lines.push("```typescript");
|
|
226
|
+
lines.push("async initialize(): Promise<void> {");
|
|
227
|
+
lines.push(" const response = app.getResponse();");
|
|
228
|
+
lines.push(` if (response.has("${pascal}Data")) {`);
|
|
229
|
+
lines.push(` this.data = response.get("${pascal}Data") as I${pascal}Response;`);
|
|
230
|
+
lines.push(" }");
|
|
231
|
+
lines.push("}");
|
|
232
|
+
lines.push("```");
|
|
233
|
+
}
|
|
234
|
+
lines.push("");
|
|
235
|
+
lines.push("### Button Double-Press Prevention");
|
|
236
|
+
lines.push("```typescript");
|
|
237
|
+
lines.push("// In Page.initialize(vm):");
|
|
238
|
+
lines.push("btn.addEventListener(PointerEvent.POINTER_UP, async (): Promise<void> => {");
|
|
239
|
+
lines.push(" btn.disable();");
|
|
240
|
+
lines.push(" await vm.onClickButton();");
|
|
241
|
+
lines.push(" btn.enable(); // omit if navigating away");
|
|
242
|
+
lines.push("});");
|
|
243
|
+
lines.push("```");
|
|
244
|
+
return {
|
|
245
|
+
"content": [
|
|
246
|
+
{
|
|
247
|
+
"type": "text",
|
|
248
|
+
"text": lines.join("\n")
|
|
249
|
+
}
|
|
250
|
+
]
|
|
251
|
+
};
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=planFeature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planFeature.js","sourceRoot":"","sources":["../../src/tools/planFeature.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/tools.test.js
CHANGED
|
@@ -8,6 +8,9 @@ import { registerAddRoute } from "./addRoute.js";
|
|
|
8
8
|
import { registerCreateInterface } from "./createInterface.js";
|
|
9
9
|
import { registerCreateAnimation } from "./createAnimation.js";
|
|
10
10
|
import { registerCreateDomainService } from "./createDomainService.js";
|
|
11
|
+
import { registerAnalyzeProject } from "./analyzeProject.js";
|
|
12
|
+
import { registerPlanFeature } from "./planFeature.js";
|
|
13
|
+
import { registerInspectScreen } from "./inspectScreen.js";
|
|
11
14
|
import { registerTools } from "./index.js";
|
|
12
15
|
describe("Tool registration", () => {
|
|
13
16
|
let server;
|
|
@@ -38,10 +41,19 @@ describe("Tool registration", () => {
|
|
|
38
41
|
it("registerCreateDomainService registers without error", () => {
|
|
39
42
|
expect(() => registerCreateDomainService(server)).not.toThrow();
|
|
40
43
|
});
|
|
41
|
-
it("
|
|
44
|
+
it("registerAnalyzeProject registers without error", () => {
|
|
45
|
+
expect(() => registerAnalyzeProject(server)).not.toThrow();
|
|
46
|
+
});
|
|
47
|
+
it("registerPlanFeature registers without error", () => {
|
|
48
|
+
expect(() => registerPlanFeature(server)).not.toThrow();
|
|
49
|
+
});
|
|
50
|
+
it("registerInspectScreen registers without error", () => {
|
|
51
|
+
expect(() => registerInspectScreen(server)).not.toThrow();
|
|
52
|
+
});
|
|
53
|
+
it("registerTools registers all 13 tools", () => {
|
|
42
54
|
const spy = vi.spyOn(server, "registerTool");
|
|
43
55
|
registerTools(server);
|
|
44
|
-
expect(spy).toHaveBeenCalledTimes(
|
|
56
|
+
expect(spy).toHaveBeenCalledTimes(13);
|
|
45
57
|
const toolNames = spy.mock.calls.map((call) => call[0]);
|
|
46
58
|
expect(toolNames).toContain("create_view");
|
|
47
59
|
expect(toolNames).toContain("create_usecase");
|
|
@@ -53,6 +65,9 @@ describe("Tool registration", () => {
|
|
|
53
65
|
expect(toolNames).toContain("create_animation");
|
|
54
66
|
expect(toolNames).toContain("create_domain_service");
|
|
55
67
|
expect(toolNames).toContain("create_loading");
|
|
68
|
+
expect(toolNames).toContain("analyze_project");
|
|
69
|
+
expect(toolNames).toContain("plan_feature");
|
|
70
|
+
expect(toolNames).toContain("inspect_screen");
|
|
56
71
|
});
|
|
57
72
|
});
|
|
58
73
|
//# sourceMappingURL=tools.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../src/tools/tools.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../src/tools/tools.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "next2d-development-mcp",
|
|
3
3
|
"displayName": "Next2D Development MCP",
|
|
4
|
-
"version": "1.0
|
|
4
|
+
"version": "1.1.0",
|
|
5
5
|
"description": "MCP server for Next2D application development assistance",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"author": "Toshiyuki Ienaga <ienaga@next2d.app>",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@eslint/js": "^10.0.1",
|
|
55
|
-
"@types/node": "^25.3.
|
|
55
|
+
"@types/node": "^25.3.1",
|
|
56
56
|
"@types/vscode": "^1.109.0",
|
|
57
57
|
"@typescript-eslint/eslint-plugin": "^8.56.1",
|
|
58
58
|
"@typescript-eslint/parser": "^8.56.1",
|