@grvmithas/create-aies-kit 1.0.0 → 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.
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Client-safe kit helpers — no node:fs, safe for Next.js client components.
3
+ */
4
+ import { SITE_URL } from './options.js';
5
+
6
+ /** IDE-native roots — never writes `.aies/`. */
7
+ export function layoutFor(ide) {
8
+ switch (ide) {
9
+ case 'cursor':
10
+ return {
11
+ ide,
12
+ root: '.cursor',
13
+ rulesFile: '.cursor/rules/aies.mdc',
14
+ skillsDir: '.cursor/skills',
15
+ skillStyle: 'cursor-skill',
16
+ promptsDir: '.cursor/prompts',
17
+ cookbookDir: '.cursor/cookbook',
18
+ guidesDir: '.cursor/guides',
19
+ agentsDir: '.cursor/agents',
20
+ mcpsDir: '.cursor/mcps',
21
+ templatesDir: '.cursor/templates',
22
+ mcpFile: '.cursor/mcp.json',
23
+ hooksFile: '.cursor/aies-hooks.json',
24
+ policyFile: '.cursor/MODEL_POLICY.md',
25
+ };
26
+ case 'copilot':
27
+ return {
28
+ ide,
29
+ root: '.github',
30
+ rulesFile: '.github/copilot-instructions.md',
31
+ skillsDir: '.github/skills',
32
+ skillStyle: 'flat',
33
+ promptsDir: '.github/prompts',
34
+ cookbookDir: '.github/cookbook',
35
+ guidesDir: '.github/guides',
36
+ agentsDir: '.github/agents',
37
+ mcpsDir: '.github/mcps',
38
+ templatesDir: '.github/templates',
39
+ mcpFile: '.github/mcp.json',
40
+ hooksFile: '.github/aies-hooks.json',
41
+ policyFile: '.github/MODEL_POLICY.md',
42
+ };
43
+ case 'claude-code':
44
+ return {
45
+ ide,
46
+ root: '.claude',
47
+ rulesFile: 'CLAUDE.md',
48
+ skillsDir: '.claude/skills',
49
+ skillStyle: 'cursor-skill',
50
+ promptsDir: '.claude/prompts',
51
+ cookbookDir: '.claude/cookbook',
52
+ guidesDir: '.claude/guides',
53
+ agentsDir: '.claude/agents',
54
+ mcpsDir: '.claude/mcps',
55
+ templatesDir: '.claude/templates',
56
+ mcpFile: '.mcp.json',
57
+ hooksFile: '.claude/aies-hooks.json',
58
+ policyFile: '.claude/MODEL_POLICY.md',
59
+ };
60
+ case 'vscode':
61
+ return {
62
+ ide,
63
+ root: '.vscode',
64
+ rulesFile: '.vscode/aies-instructions.md',
65
+ skillsDir: '.vscode/skills',
66
+ skillStyle: 'flat',
67
+ promptsDir: '.vscode/prompts',
68
+ cookbookDir: '.vscode/cookbook',
69
+ guidesDir: '.vscode/guides',
70
+ agentsDir: '.vscode/agents',
71
+ mcpsDir: '.vscode/mcps',
72
+ templatesDir: '.vscode/templates',
73
+ mcpFile: '.vscode/mcp.json',
74
+ hooksFile: '.vscode/aies-hooks.json',
75
+ policyFile: '.vscode/MODEL_POLICY.md',
76
+ };
77
+ case 'windsurf':
78
+ return {
79
+ ide,
80
+ root: '.windsurf',
81
+ rulesFile: '.windsurfrules',
82
+ skillsDir: '.windsurf/skills',
83
+ skillStyle: 'flat',
84
+ promptsDir: '.windsurf/prompts',
85
+ cookbookDir: '.windsurf/cookbook',
86
+ guidesDir: '.windsurf/guides',
87
+ agentsDir: '.windsurf/agents',
88
+ mcpsDir: '.windsurf/mcps',
89
+ templatesDir: '.windsurf/templates',
90
+ mcpFile: '.windsurf/mcp.json',
91
+ hooksFile: '.windsurf/aies-hooks.json',
92
+ policyFile: '.windsurf/MODEL_POLICY.md',
93
+ };
94
+ case 'continue':
95
+ return {
96
+ ide,
97
+ root: '.continue',
98
+ rulesFile: '.continue/aies-context.md',
99
+ skillsDir: '.continue/skills',
100
+ skillStyle: 'flat',
101
+ promptsDir: '.continue/prompts',
102
+ cookbookDir: '.continue/cookbook',
103
+ guidesDir: '.continue/guides',
104
+ agentsDir: '.continue/agents',
105
+ mcpsDir: '.continue/mcps',
106
+ templatesDir: '.continue/templates',
107
+ mcpFile: '.continue/mcp.json',
108
+ hooksFile: '.continue/aies-hooks.json',
109
+ policyFile: '.continue/MODEL_POLICY.md',
110
+ };
111
+ default:
112
+ return layoutFor('vscode');
113
+ }
114
+ }
115
+
116
+ export function describeInstallLayout(ide) {
117
+ const L = layoutFor(ide);
118
+ return {
119
+ rootFiles: ['AIES.md', 'implementation_plan.md', 'CLAUDE.md', 'AGENTS.md', 'copilot-instructions.md'],
120
+ ideRoot: L.root,
121
+ rulesFile: L.rulesFile,
122
+ skillsDir: L.skillsDir,
123
+ promptsDir: L.promptsDir,
124
+ cookbookDir: L.cookbookDir,
125
+ guidesDir: L.guidesDir,
126
+ agentsDir: L.agentsDir,
127
+ mcpsDir: L.mcpsDir,
128
+ mcpFile: L.mcpFile,
129
+ policyFile: L.policyFile,
130
+ };
131
+ }
132
+
133
+ export function buildInstallQuery(profile) {
134
+ return new URLSearchParams({
135
+ stack: profile.stack,
136
+ ide: profile.ide,
137
+ role: profile.role,
138
+ maturity: profile.maturity,
139
+ goal: profile.goal,
140
+ model: profile.model ?? 'undecided',
141
+ dataClass: profile.dataClass ?? 'internal',
142
+ }).toString();
143
+ }
144
+
145
+ export function getInstallCommands(profile) {
146
+ const q = buildInstallQuery(profile);
147
+ const flags = [
148
+ `--stack ${profile.stack}`,
149
+ `--ide ${profile.ide}`,
150
+ `--role ${profile.role}`,
151
+ `--maturity ${profile.maturity}`,
152
+ `--goal ${profile.goal}`,
153
+ `--model ${profile.model ?? 'undecided'}`,
154
+ `--data-class ${profile.dataClass ?? 'internal'}`,
155
+ '--yes',
156
+ ].join(' ');
157
+ return {
158
+ npx: `npx @grvmithas/create-aies-kit ${flags}`,
159
+ enhance: 'npx @grvmithas/create-aies-kit enhance',
160
+ powershell: `irm "${SITE_URL}/api/kit?${q}&shell=ps1" | iex`,
161
+ bash: `curl -fsSL "${SITE_URL}/api/kit?${q}&shell=bash" | bash`,
162
+ };
163
+ }
@@ -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.1.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
  },