mvc-kit 2.13.1 → 2.13.2
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/agent-config/claude-code/agents/mvc-kit-architect.md +2 -2
- package/agent-config/claude-code/skills/{guide → mvc-kit}/SKILL.md +1 -1
- package/agent-config/lib/install-claude.mjs +39 -116
- package/package.json +1 -1
- /package/agent-config/claude-code/skills/{guide → mvc-kit}/anti-patterns.md +0 -0
- /package/agent-config/claude-code/skills/{guide → mvc-kit}/api-reference.md +0 -0
- /package/agent-config/claude-code/skills/{guide → mvc-kit}/patterns.md +0 -0
- /package/agent-config/claude-code/skills/{guide → mvc-kit}/recipes.md +0 -0
- /package/agent-config/claude-code/skills/{guide → mvc-kit}/testing.md +0 -0
- /package/agent-config/claude-code/skills/{review → mvc-kit-review}/SKILL.md +0 -0
- /package/agent-config/claude-code/skills/{review → mvc-kit-review}/checklist.md +0 -0
- /package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/SKILL.md +0 -0
- /package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/channel.md +0 -0
- /package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/collection.md +0 -0
- /package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/controller.md +0 -0
- /package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/eventbus.md +0 -0
- /package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/model.md +0 -0
- /package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/page-component.md +0 -0
- /package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/persistent-collection.md +0 -0
- /package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/resource.md +0 -0
- /package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/service.md +0 -0
- /package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/viewmodel.md +0 -0
|
@@ -6,14 +6,14 @@ tools: Read, Grep, Glob, Bash
|
|
|
6
6
|
memory: project
|
|
7
7
|
color: blue
|
|
8
8
|
skills:
|
|
9
|
-
- mvc-kit
|
|
9
|
+
- mvc-kit
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
You are an architecture planning agent for applications built with **mvc-kit**, a TypeScript-first reactive state management library for React. You help developers plan features by deciding which classes to create, designing state shapes, and selecting sharing patterns.
|
|
13
13
|
|
|
14
14
|
## Documentation
|
|
15
15
|
|
|
16
|
-
The mvc-kit framework reference skill is preloaded into this agent's context. For deeper reference, read the supporting files in the mvc-kit skill directory (search for `.claude/skills/mvc-kit/` or `node_modules/mvc-kit/agent-config/claude-code/skills/
|
|
16
|
+
The mvc-kit framework reference skill is preloaded into this agent's context. For deeper reference, read the supporting files in the mvc-kit skill directory (search for `.claude/skills/mvc-kit/` or `node_modules/mvc-kit/agent-config/claude-code/skills/mvc-kit/`):
|
|
17
17
|
|
|
18
18
|
- `api-reference.md` — Full API reference for all classes and hooks
|
|
19
19
|
- `patterns.md` — Prescribed patterns with code examples
|
|
@@ -1,37 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { join, dirname } from 'node:path';
|
|
1
|
+
import { cpSync, mkdirSync, readdirSync, statSync } from 'node:fs';
|
|
2
|
+
import { join, dirname, relative } from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
|
|
5
5
|
const __filename = fileURLToPath(import.meta.url);
|
|
6
6
|
const __dirname = dirname(__filename);
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
function
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return AUTO_HEADER + '\n\n' + content;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function ensureDir(dir) {
|
|
27
|
-
if (!existsSync(dir)) {
|
|
28
|
-
mkdirSync(dir, { recursive: true });
|
|
7
|
+
const SOURCE_DIR = join(__dirname, '..', 'claude-code');
|
|
8
|
+
|
|
9
|
+
const SKILL_NAMES = ['mvc-kit', 'mvc-kit-review', 'mvc-kit-scaffold'];
|
|
10
|
+
const AGENT_FILES = ['mvc-kit-architect.md'];
|
|
11
|
+
|
|
12
|
+
function listFilesRecursive(dir) {
|
|
13
|
+
const out = [];
|
|
14
|
+
for (const entry of readdirSync(dir)) {
|
|
15
|
+
const full = join(dir, entry);
|
|
16
|
+
if (statSync(full).isDirectory()) {
|
|
17
|
+
for (const nested of listFilesRecursive(full)) {
|
|
18
|
+
out.push(join(entry, nested));
|
|
19
|
+
}
|
|
20
|
+
} else {
|
|
21
|
+
out.push(entry);
|
|
22
|
+
}
|
|
29
23
|
}
|
|
24
|
+
return out;
|
|
30
25
|
}
|
|
31
26
|
|
|
32
27
|
/**
|
|
33
28
|
* Install Claude Code integration files into a project's .claude/ directory.
|
|
34
29
|
*
|
|
30
|
+
* Source directories under `agent-config/claude-code/` are copied verbatim —
|
|
31
|
+
* no frontmatter rewriting, no header injection. Source files are authored
|
|
32
|
+
* in their final installed form.
|
|
33
|
+
*
|
|
35
34
|
* Creates:
|
|
36
35
|
* .claude/skills/mvc-kit/ — Framework reference skill + supporting docs
|
|
37
36
|
* .claude/skills/mvc-kit-review/ — Code review skill + checklist
|
|
@@ -39,109 +38,33 @@ function ensureDir(dir) {
|
|
|
39
38
|
* .claude/agents/mvc-kit-architect.md — Architecture planning agent
|
|
40
39
|
*
|
|
41
40
|
* @param {string} projectRoot — Absolute path to the consuming project's root
|
|
42
|
-
* @returns {{ files: string[] }} — List of
|
|
41
|
+
* @returns {{ files: string[] }} — List of installed file paths (relative to projectRoot)
|
|
43
42
|
*/
|
|
44
43
|
export function installClaude(projectRoot) {
|
|
45
44
|
const claudeDir = join(projectRoot, '.claude');
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
const scaffoldDir = join(claudeDir, 'skills', 'mvc-kit-scaffold');
|
|
49
|
-
const templatesDir = join(scaffoldDir, 'templates');
|
|
50
|
-
const agentsDir = join(claudeDir, 'agents');
|
|
45
|
+
const skillsDest = join(claudeDir, 'skills');
|
|
46
|
+
const agentsDest = join(claudeDir, 'agents');
|
|
51
47
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
ensureDir(scaffoldDir);
|
|
55
|
-
ensureDir(templatesDir);
|
|
56
|
-
ensureDir(agentsDir);
|
|
48
|
+
mkdirSync(skillsDest, { recursive: true });
|
|
49
|
+
mkdirSync(agentsDest, { recursive: true });
|
|
57
50
|
|
|
58
51
|
const files = [];
|
|
59
52
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const GUIDE_FRONTMATTER = `---
|
|
68
|
-
name: mvc-kit
|
|
69
|
-
description: "mvc-kit framework reference — class roles, architecture rules, React hooks, and decision framework. Loaded on-demand when working with mvc-kit code."
|
|
70
|
-
user-invocable: false
|
|
71
|
-
---`;
|
|
72
|
-
|
|
73
|
-
const skillContent = GUIDE_FRONTMATTER + '\n\n' + AUTO_HEADER + '\n\n' + guideBody + `
|
|
74
|
-
|
|
75
|
-
## Supporting Files
|
|
76
|
-
|
|
77
|
-
- [api-reference.md](api-reference.md) — Full API reference for all classes and hooks
|
|
78
|
-
- [patterns.md](patterns.md) — Prescribed patterns with code examples
|
|
79
|
-
- [anti-patterns.md](anti-patterns.md) — Anti-patterns to reject with fixes
|
|
80
|
-
- [recipes.md](recipes.md) — Composition recipes for real-world features
|
|
81
|
-
- [testing.md](testing.md) — Testing patterns (teardownAll, async assertions, memoization verification)
|
|
82
|
-
|
|
83
|
-
### Per-Class Documentation (in \`node_modules/mvc-kit/src/\`)
|
|
84
|
-
|
|
85
|
-
For deep dives on any specific class or hook, search for the \`.md\` file by name:
|
|
86
|
-
|
|
87
|
-
- **Core:** \`ViewModel.md\`, \`Model.md\`, \`Collection.md\`, \`PersistentCollection.md\`, \`Resource.md\`, \`Service.md\`, \`EventBus.md\`, \`Channel.md\`, \`Controller.md\`, \`Trackable.md\`, \`singleton.md\`
|
|
88
|
-
- **Helpers:** \`Sorting.md\`, \`Pagination.md\`, \`Selection.md\`, \`Feed.md\`, \`Pending.md\`, \`produceDraft.md\`
|
|
89
|
-
- **React hooks:** \`react/use-local.md\`, \`react/use-instance.md\`, \`react/use-singleton.md\`, \`react/use-model.md\`, \`react/use-event-bus.md\`, \`react/use-teardown.md\`
|
|
90
|
-
- **Components:** \`react/components/DataTable.md\`, \`react/components/CardList.md\`, \`react/components/InfiniteScroll.md\`
|
|
91
|
-
`;
|
|
92
|
-
|
|
93
|
-
writeFileSync(join(guideDir, 'SKILL.md'), skillContent, 'utf-8');
|
|
94
|
-
files.push('.claude/skills/mvc-kit/SKILL.md');
|
|
95
|
-
|
|
96
|
-
// Copy supporting files alongside SKILL.md
|
|
97
|
-
const guideSupportFiles = ['api-reference.md', 'patterns.md', 'anti-patterns.md', 'recipes.md', 'testing.md'];
|
|
98
|
-
for (const file of guideSupportFiles) {
|
|
99
|
-
const src = join(SKILLS_DIR, 'guide', file);
|
|
100
|
-
if (existsSync(src)) {
|
|
101
|
-
copyFileSync(src, join(guideDir, file));
|
|
102
|
-
files.push(`.claude/skills/mvc-kit/${file}`);
|
|
53
|
+
for (const skill of SKILL_NAMES) {
|
|
54
|
+
const src = join(SOURCE_DIR, 'skills', skill);
|
|
55
|
+
const dest = join(skillsDest, skill);
|
|
56
|
+
cpSync(src, dest, { recursive: true, force: true });
|
|
57
|
+
for (const rel of listFilesRecursive(src)) {
|
|
58
|
+
files.push(`.claude/skills/${skill}/${rel}`);
|
|
103
59
|
}
|
|
104
60
|
}
|
|
105
61
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
copyFileSync(
|
|
113
|
-
join(SKILLS_DIR, 'review', 'checklist.md'),
|
|
114
|
-
join(reviewDir, 'checklist.md'),
|
|
115
|
-
);
|
|
116
|
-
files.push('.claude/skills/mvc-kit-review/checklist.md');
|
|
117
|
-
|
|
118
|
-
// ─── 3. Scaffold skill — code generation with templates ────────────────────
|
|
119
|
-
|
|
120
|
-
const scaffoldSkill = readFileSync(join(SKILLS_DIR, 'scaffold', 'SKILL.md'), 'utf-8');
|
|
121
|
-
writeFileSync(join(scaffoldDir, 'SKILL.md'), addHeader(scaffoldSkill), 'utf-8');
|
|
122
|
-
files.push('.claude/skills/mvc-kit-scaffold/SKILL.md');
|
|
123
|
-
|
|
124
|
-
const templatesSrc = join(SKILLS_DIR, 'scaffold', 'templates');
|
|
125
|
-
if (existsSync(templatesSrc)) {
|
|
126
|
-
for (const file of readdirSync(templatesSrc)) {
|
|
127
|
-
if (file.endsWith('.md')) {
|
|
128
|
-
copyFileSync(join(templatesSrc, file), join(templatesDir, file));
|
|
129
|
-
files.push(`.claude/skills/mvc-kit-scaffold/templates/${file}`);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
62
|
+
for (const agent of AGENT_FILES) {
|
|
63
|
+
const src = join(SOURCE_DIR, 'agents', agent);
|
|
64
|
+
const dest = join(agentsDest, agent);
|
|
65
|
+
cpSync(src, dest, { force: true });
|
|
66
|
+
files.push(`.claude/agents/${agent}`);
|
|
132
67
|
}
|
|
133
68
|
|
|
134
|
-
// ─── 4. Architect agent ────────────────────────────────────────────────────
|
|
135
|
-
|
|
136
|
-
let architectAgent = readFileSync(join(AGENTS_DIR, 'mvc-kit-architect.md'), 'utf-8');
|
|
137
|
-
// The source agent preloads "mvc-kit-guide" (the source skill name).
|
|
138
|
-
// In the installed context the guide skill is named "mvc-kit", so fix the reference.
|
|
139
|
-
architectAgent = architectAgent.replace(
|
|
140
|
-
/^(\s*- )mvc-kit-guide$/m,
|
|
141
|
-
'$1mvc-kit',
|
|
142
|
-
);
|
|
143
|
-
writeFileSync(join(agentsDir, 'mvc-kit-architect.md'), addHeader(architectAgent), 'utf-8');
|
|
144
|
-
files.push('.claude/agents/mvc-kit-architect.md');
|
|
145
|
-
|
|
146
69
|
return { files };
|
|
147
70
|
}
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/collection.md
RENAMED
|
File without changes
|
/package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/controller.md
RENAMED
|
File without changes
|
/package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/eventbus.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/page-component.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/resource.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/agent-config/claude-code/skills/{scaffold → mvc-kit-scaffold}/templates/viewmodel.md
RENAMED
|
File without changes
|