@grvmithas/create-aies-kit 1.0.0 → 1.3.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.
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Client-safe kit helpers — no node:fs, safe for Next.js client components.
3
+ *
4
+ * Layout contract:
5
+ * - IDE root (.cursor / .github / .claude / …) = prompts + skills + agents (+ IDE rules/MCP config)
6
+ * - Repo root shared dirs = cookbook, guides, mcps, templates, policy (never nest these under .github)
7
+ */
8
+ import { SITE_URL } from './options.js';
9
+
10
+ /** Shared repo-root paths — identical for every IDE. */
11
+ const SHARED = {
12
+ cookbookBase: 'cookbook',
13
+ guidesDir: 'guides',
14
+ mcpsDir: 'mcps',
15
+ templatesDir: 'templates',
16
+ policyFile: 'MODEL_POLICY.md',
17
+ hooksFile: 'aies-hooks.json',
18
+ };
19
+
20
+ /**
21
+ * @param {string} ide
22
+ * @param {{ cookbookId?: string | null }} [opts]
23
+ */
24
+ export function layoutFor(ide, opts = {}) {
25
+ const cookbookId = opts.cookbookId ?? null;
26
+ const cookbookDir = cookbookId ? `${SHARED.cookbookBase}/${cookbookId}` : SHARED.cookbookBase;
27
+
28
+ switch (ide) {
29
+ case 'cursor':
30
+ return {
31
+ ide,
32
+ ...SHARED,
33
+ cookbookDir,
34
+ root: '.cursor',
35
+ rulesFile: '.cursor/rules/aies.mdc',
36
+ skillsDir: '.cursor/skills',
37
+ skillStyle: 'cursor-skill',
38
+ promptsDir: '.cursor/prompts',
39
+ agentsDir: '.cursor/agents',
40
+ mcpFile: '.cursor/mcp.json',
41
+ hooksFile: '.cursor/aies-hooks.json',
42
+ };
43
+ case 'copilot':
44
+ return {
45
+ ide,
46
+ ...SHARED,
47
+ cookbookDir,
48
+ root: '.github',
49
+ rulesFile: '.github/copilot-instructions.md',
50
+ skillsDir: '.github/skills',
51
+ skillStyle: 'flat',
52
+ promptsDir: '.github/prompts',
53
+ agentsDir: '.github/agents',
54
+ // Copilot discovery only under .github — MCP config at repo root
55
+ mcpFile: '.mcp.json',
56
+ };
57
+ case 'claude-code':
58
+ return {
59
+ ide,
60
+ ...SHARED,
61
+ cookbookDir,
62
+ root: '.claude',
63
+ rulesFile: 'CLAUDE.md',
64
+ skillsDir: '.claude/skills',
65
+ skillStyle: 'cursor-skill',
66
+ promptsDir: '.claude/prompts',
67
+ agentsDir: '.claude/agents',
68
+ mcpFile: '.mcp.json',
69
+ };
70
+ case 'vscode':
71
+ return {
72
+ ide,
73
+ ...SHARED,
74
+ cookbookDir,
75
+ root: '.vscode',
76
+ rulesFile: '.vscode/aies-instructions.md',
77
+ skillsDir: '.vscode/skills',
78
+ skillStyle: 'flat',
79
+ promptsDir: '.vscode/prompts',
80
+ agentsDir: '.vscode/agents',
81
+ mcpFile: '.vscode/mcp.json',
82
+ };
83
+ case 'windsurf':
84
+ return {
85
+ ide,
86
+ ...SHARED,
87
+ cookbookDir,
88
+ root: '.windsurf',
89
+ rulesFile: '.windsurfrules',
90
+ skillsDir: '.windsurf/skills',
91
+ skillStyle: 'flat',
92
+ promptsDir: '.windsurf/prompts',
93
+ agentsDir: '.windsurf/agents',
94
+ mcpFile: '.windsurf/mcp.json',
95
+ };
96
+ case 'continue':
97
+ return {
98
+ ide,
99
+ ...SHARED,
100
+ cookbookDir,
101
+ root: '.continue',
102
+ rulesFile: '.continue/aies-context.md',
103
+ skillsDir: '.continue/skills',
104
+ skillStyle: 'flat',
105
+ promptsDir: '.continue/prompts',
106
+ agentsDir: '.continue/agents',
107
+ mcpFile: '.continue/mcp.json',
108
+ };
109
+ default:
110
+ return layoutFor('vscode', opts);
111
+ }
112
+ }
113
+
114
+ export function describeInstallLayout(ide, opts = {}) {
115
+ const L = layoutFor(ide, opts);
116
+ return {
117
+ rootFiles: [
118
+ 'AIES.md',
119
+ 'implementation_plan.md',
120
+ 'CLAUDE.md',
121
+ 'AGENTS.md',
122
+ 'copilot-instructions.md',
123
+ 'MODEL_POLICY.md',
124
+ 'aies-hooks.json',
125
+ ],
126
+ ideRoot: L.root,
127
+ ideOnly: [L.promptsDir, L.skillsDir, L.agentsDir],
128
+ sharedRoot: [L.cookbookDir, L.guidesDir, L.mcpsDir, L.templatesDir],
129
+ rulesFile: L.rulesFile,
130
+ skillsDir: L.skillsDir,
131
+ promptsDir: L.promptsDir,
132
+ cookbookDir: L.cookbookDir,
133
+ guidesDir: L.guidesDir,
134
+ agentsDir: L.agentsDir,
135
+ mcpsDir: L.mcpsDir,
136
+ templatesDir: L.templatesDir,
137
+ mcpFile: L.mcpFile,
138
+ policyFile: L.policyFile,
139
+ hooksFile: L.hooksFile,
140
+ };
141
+ }
142
+
143
+ export function buildInstallQuery(profile) {
144
+ return new URLSearchParams({
145
+ stack: profile.stack,
146
+ ide: profile.ide,
147
+ role: profile.role,
148
+ maturity: profile.maturity,
149
+ goal: profile.goal,
150
+ model: profile.model ?? 'undecided',
151
+ dataClass: profile.dataClass ?? 'internal',
152
+ }).toString();
153
+ }
154
+
155
+ export function getInstallCommands(profile) {
156
+ const q = buildInstallQuery(profile);
157
+ const flags = [
158
+ `--stack ${profile.stack}`,
159
+ `--ide ${profile.ide}`,
160
+ `--role ${profile.role}`,
161
+ `--maturity ${profile.maturity}`,
162
+ `--goal ${profile.goal}`,
163
+ `--model ${profile.model ?? 'undecided'}`,
164
+ `--data-class ${profile.dataClass ?? 'internal'}`,
165
+ '--yes',
166
+ ].join(' ');
167
+ return {
168
+ npx: `npx @grvmithas/create-aies-kit ${flags}`,
169
+ enhance: 'npx @grvmithas/create-aies-kit enhance',
170
+ powershell: `irm "${SITE_URL}/api/kit?${q}&shell=ps1" | iex`,
171
+ bash: `curl -fsSL "${SITE_URL}/api/kit?${q}&shell=bash" | bash`,
172
+ };
173
+ }
@@ -0,0 +1,170 @@
1
+ /**
2
+ * MCP recommendations for kit install + enhance.
3
+ * Specs live under content/mcps/; configs here are enable-ready stubs (secrets via env).
4
+ */
5
+ import path from 'node:path';
6
+
7
+ export const MCP_SPECS = [
8
+ { id: 'github', category: 'version-control', file: 'version-control/github.mcp.md', label: 'GitHub' },
9
+ { id: 'gitlab', category: 'version-control', file: 'version-control/gitlab.mcp.md', label: 'GitLab' },
10
+ { id: 'azure-devops', category: 'version-control', file: 'version-control/azure-devops.mcp.md', label: 'Azure DevOps' },
11
+ { id: 'bitbucket-cloud', category: 'version-control', file: 'version-control/bitbucket-cloud.mcp.md', label: 'Bitbucket Cloud' },
12
+ { id: 'filesystem', category: 'infrastructure-data', file: 'infrastructure-data/filesystem.mcp.md', label: 'Filesystem' },
13
+ { id: 'docker', category: 'infrastructure-data', file: 'infrastructure-data/docker.mcp.md', label: 'Docker' },
14
+ { id: 'kubernetes', category: 'infrastructure-data', file: 'infrastructure-data/kubernetes.mcp.md', label: 'Kubernetes' },
15
+ { id: 'postgresql', category: 'infrastructure-data', file: 'infrastructure-data/postgresql.mcp.md', label: 'PostgreSQL' },
16
+ { id: 'redis', category: 'infrastructure-data', file: 'infrastructure-data/redis.mcp.md', label: 'Redis' },
17
+ { id: 'supabase', category: 'infrastructure-data', file: 'infrastructure-data/supabase.mcp.md', label: 'Supabase' },
18
+ { id: 'playwright', category: 'browser-testing', file: 'browser-testing/playwright.mcp.md', label: 'Playwright' },
19
+ { id: 'chrome-devtools', category: 'browser-testing', file: 'browser-testing/chrome-devtools.mcp.md', label: 'Chrome DevTools' },
20
+ { id: 'sentry', category: 'observability', file: 'observability/sentry.mcp.md', label: 'Sentry' },
21
+ { id: 'datadog', category: 'observability', file: 'observability/datadog.mcp.md', label: 'Datadog' },
22
+ { id: 'grafana', category: 'observability', file: 'observability/grafana.mcp.md', label: 'Grafana' },
23
+ { id: 'opentelemetry', category: 'observability', file: 'observability/opentelemetry.mcp.md', label: 'OpenTelemetry' },
24
+ { id: 'jira', category: 'project-management', file: 'project-management/jira.mcp.md', label: 'Jira' },
25
+ { id: 'linear', category: 'project-management', file: 'project-management/linear.mcp.md', label: 'Linear' },
26
+ { id: 'notion', category: 'project-management', file: 'project-management/notion.mcp.md', label: 'Notion' },
27
+ { id: 'asana', category: 'project-management', file: 'project-management/asana.mcp.md', label: 'Asana' },
28
+ { id: 'monday', category: 'project-management', file: 'project-management/monday.mcp.md', label: 'Monday' },
29
+ { id: 'slack', category: 'communication', file: 'communication/slack.mcp.md', label: 'Slack' },
30
+ { id: 'microsoft-teams', category: 'communication', file: 'communication/microsoft-teams.mcp.md', label: 'Microsoft Teams' },
31
+ { id: 'discord', category: 'communication', file: 'communication/discord.mcp.md', label: 'Discord' },
32
+ ];
33
+
34
+ /** Runnable stubs — copy into mcpServers only after human approval + secrets. */
35
+ export const MCP_SERVER_STUBS = {
36
+ github: {
37
+ command: 'npx',
38
+ args: ['-y', '@modelcontextprotocol/server-github'],
39
+ env: { GITHUB_PERSONAL_ACCESS_TOKEN: '${GITHUB_TOKEN}' },
40
+ },
41
+ filesystem: {
42
+ command: 'npx',
43
+ args: ['-y', '@modelcontextprotocol/server-filesystem', '${WORKSPACE_ROOT}'],
44
+ },
45
+ docker: {
46
+ command: 'npx',
47
+ args: ['-y', '@modelcontextprotocol/server-docker'],
48
+ },
49
+ postgresql: {
50
+ command: 'npx',
51
+ args: ['-y', '@modelcontextprotocol/server-postgres'],
52
+ env: { POSTGRES_CONNECTION_STRING: '${DATABASE_URL}' },
53
+ },
54
+ redis: {
55
+ command: 'npx',
56
+ args: ['-y', '@modelcontextprotocol/server-redis'],
57
+ env: { REDIS_URL: '${REDIS_URL}' },
58
+ },
59
+ playwright: {
60
+ command: 'npx',
61
+ args: ['-y', '@playwright/mcp@latest'],
62
+ },
63
+ sentry: {
64
+ command: 'npx',
65
+ args: ['-y', '@sentry/mcp-server'],
66
+ env: { SENTRY_AUTH_TOKEN: '${SENTRY_AUTH_TOKEN}' },
67
+ },
68
+ linear: {
69
+ command: 'npx',
70
+ args: ['-y', 'mcp-linear'],
71
+ env: { LINEAR_API_KEY: '${LINEAR_API_KEY}' },
72
+ },
73
+ slack: {
74
+ command: 'npx',
75
+ args: ['-y', '@modelcontextprotocol/server-slack'],
76
+ env: { SLACK_BOT_TOKEN: '${SLACK_BOT_TOKEN}' },
77
+ },
78
+ };
79
+
80
+ export function stackMcpIds(stackId) {
81
+ const base = ['github', 'filesystem'];
82
+ switch (stackId) {
83
+ case 'react':
84
+ case 'nextjs':
85
+ case 'react-native':
86
+ return [...base, 'playwright', 'chrome-devtools', 'sentry'];
87
+ case 'nodejs':
88
+ case 'nestjs':
89
+ return [...base, 'docker', 'postgresql', 'redis', 'playwright', 'sentry'];
90
+ case 'python':
91
+ case 'fastapi':
92
+ return [...base, 'docker', 'postgresql', 'redis', 'sentry'];
93
+ case 'java':
94
+ case 'dotnet':
95
+ return [...base, 'docker', 'postgresql', 'kubernetes', 'sentry'];
96
+ default:
97
+ return base;
98
+ }
99
+ }
100
+
101
+ /**
102
+ * Heuristic scan of a product repo (enhance mode).
103
+ * @param {string} cwd
104
+ * @param {{ existsSync: Function, readFileSync: Function }} fs
105
+ */
106
+ export function detectRepoSignals(cwd, fs) {
107
+ const exists = rel => fs.existsSync(path.join(cwd, rel));
108
+ const read = rel => {
109
+ try {
110
+ return fs.readFileSync(path.join(cwd, rel), 'utf8');
111
+ } catch {
112
+ return '';
113
+ }
114
+ };
115
+
116
+ const signals = {
117
+ packageJson: exists('package.json'),
118
+ pyproject: exists('pyproject.toml') || exists('requirements.txt'),
119
+ dockerfile: exists('Dockerfile') || exists('docker-compose.yml') || exists('compose.yml'),
120
+ kubernetes: exists('k8s') || exists('kubernetes') || exists('helm') || exists('Chart.yaml'),
121
+ githubActions: exists('.github/workflows'),
122
+ playwright: false,
123
+ sentry: false,
124
+ prisma: false,
125
+ next: false,
126
+ nest: false,
127
+ fastapi: false,
128
+ redis: false,
129
+ postgres: false,
130
+ };
131
+
132
+ const pkg = read('package.json');
133
+ if (pkg) {
134
+ signals.playwright = /playwright/i.test(pkg);
135
+ signals.sentry = /sentry/i.test(pkg);
136
+ signals.prisma = /prisma/i.test(pkg);
137
+ signals.next = /"next"/i.test(pkg);
138
+ signals.nest = /@nestjs/i.test(pkg);
139
+ signals.redis = /ioredis|"redis"/i.test(pkg);
140
+ signals.postgres = /pg\b|postgres|prisma/i.test(pkg);
141
+ }
142
+ const py = read('requirements.txt') + read('pyproject.toml');
143
+ if (py) {
144
+ signals.fastapi = /fastapi/i.test(py);
145
+ signals.sentry = signals.sentry || /sentry/i.test(py);
146
+ signals.redis = signals.redis || /redis/i.test(py);
147
+ signals.postgres = signals.postgres || /psycopg|sqlalchemy|asyncpg/i.test(py);
148
+ }
149
+
150
+ const ids = new Set(['github', 'filesystem']);
151
+ if (signals.dockerfile) ids.add('docker');
152
+ if (signals.kubernetes) ids.add('kubernetes');
153
+ if (signals.playwright || signals.next) ids.add('playwright');
154
+ if (signals.next || signals.playwright) ids.add('chrome-devtools');
155
+ if (signals.sentry) ids.add('sentry');
156
+ if (signals.postgres || signals.prisma) ids.add('postgresql');
157
+ if (signals.redis) ids.add('redis');
158
+ if (signals.githubActions) ids.add('github');
159
+
160
+ return { signals, recommendedMcpIds: [...ids] };
161
+ }
162
+
163
+ export function buildRecommendedMcpConfig(ids) {
164
+ /** @type {Record<string, object>} */
165
+ const recommended = {};
166
+ for (const id of ids) {
167
+ if (MCP_SERVER_STUBS[id]) recommended[id] = MCP_SERVER_STUBS[id];
168
+ }
169
+ return recommended;
170
+ }
@@ -1,4 +1,4 @@
1
- export const SITE_URL = 'https://open-ai-engineering-standards.vercel.app';
1
+ export const SITE_URL = 'https://www.ai-standards.dev';
2
2
 
3
3
  export const GOALS = [
4
4
  { id: 'new-product', label: 'Build a new product' },
@@ -37,16 +37,31 @@ export const IDES = [
37
37
  { id: 'continue', label: 'Continue' },
38
38
  ];
39
39
 
40
+ export const MODELS = [
41
+ { id: 'claude', label: 'Claude (Anthropic)' },
42
+ { id: 'gpt', label: 'GPT (OpenAI)' },
43
+ { id: 'gemini', label: 'Gemini (Google)' },
44
+ { id: 'multi', label: 'Multi-model / gateway' },
45
+ { id: 'local', label: 'Local / open-weight' },
46
+ { id: 'undecided', label: 'Undecided' },
47
+ ];
48
+
49
+ export const DATA_CLASSES = [
50
+ { id: 'public', label: 'Public' },
51
+ { id: 'internal', label: 'Internal' },
52
+ { id: 'confidential', label: 'Confidential / regulated' },
53
+ ];
54
+
40
55
  export const STACKS = [
41
- { id: 'react', label: 'React' },
42
- { id: 'nextjs', label: 'Next.js' },
43
- { id: 'react-native', label: 'React Native' },
44
- { id: 'nodejs', label: 'Node.js' },
45
- { id: 'nestjs', label: 'NestJS' },
46
- { id: 'python', label: 'Python' },
47
- { id: 'fastapi', label: 'FastAPI' },
48
- { id: 'java', label: 'Java' },
49
- { id: 'dotnet', label: '.NET' },
56
+ { id: 'react', label: 'React', skillKey: 'skills/react.skill.md', cookbook: 'react' },
57
+ { id: 'nextjs', label: 'Next.js', skillKey: 'skills/nextjs.skill.md', cookbook: 'nextjs' },
58
+ { id: 'react-native', label: 'React Native', skillKey: 'skills/react-native.skill.md', cookbook: 'react-native' },
59
+ { id: 'nodejs', label: 'Node.js', skillKey: 'skills/node.skill.md', cookbook: 'node' },
60
+ { id: 'nestjs', label: 'NestJS', skillKey: 'skills/node.skill.md', cookbook: 'node' },
61
+ { id: 'python', label: 'Python', skillKey: 'skills/python.skill.md', cookbook: 'python' },
62
+ { id: 'fastapi', label: 'FastAPI', skillKey: 'skills/python.skill.md', cookbook: 'python' },
63
+ { id: 'java', label: 'Java', skillKey: 'skills/java.skill.md', cookbook: 'java' },
64
+ { id: 'dotnet', label: '.NET', skillKey: 'skills/dotnet.skill.md', cookbook: 'dotnet' },
50
65
  ];
51
66
 
52
67
  export const STACK_LABELS = Object.fromEntries(STACKS.map(s => [s.id, s.label]));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@grvmithas/create-aies-kit",
3
- "version": "1.0.0",
4
- "description": "Scaffold an AIES (AI Engineering Standard) starter kit into your project — prompts, skills, MCP stubs, and IDE rules.",
3
+ "version": "1.3.0",
4
+ "description": "Scaffold a complete AIES (AI Engineering Standard) harness into IDE-native paths — prompts, skills, cookbook, agents, MCP stubs, AGENTS.md.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "bin": {
@@ -13,6 +13,11 @@
13
13
  "README.md",
14
14
  "LICENSE"
15
15
  ],
16
+ "scripts": {
17
+ "vendor": "node ../kit-core/scripts/embed-corpus.mjs && node ./scripts/vendor-kit-core.mjs",
18
+ "prepublishOnly": "npm run vendor",
19
+ "prepack": "npm run vendor"
20
+ },
16
21
  "engines": {
17
22
  "node": ">=18"
18
23
  },
@@ -25,14 +30,15 @@
25
30
  "copilot",
26
31
  "mcp",
27
32
  "aidlc",
28
- "create-aies-kit"
33
+ "create-aies-kit",
34
+ "agents.md"
29
35
  ],
30
36
  "repository": {
31
37
  "type": "git",
32
38
  "url": "git+https://github.com/grvmithas/open-ai-engineering-standards.git",
33
39
  "directory": "packages/create-aies-kit"
34
40
  },
35
- "homepage": "https://open-ai-engineering-standards.vercel.app/quickstart",
41
+ "homepage": "https://www.ai-standards.dev/quickstart",
36
42
  "bugs": {
37
43
  "url": "https://github.com/grvmithas/open-ai-engineering-standards/issues"
38
44
  },