kiro-kit 0.2.2 → 0.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.
- package/README.md +35 -0
- package/dist/index.js +771 -116
- package/dist/index.js.map +1 -1
- package/dist/presets/backend/hooks/api-schema-validate.js +75 -0
- package/dist/presets/backend/hooks/endpoint-test-coverage.js +77 -0
- package/dist/presets/backend/hooks/migration-safety-check.js +68 -0
- package/dist/presets/backend/manifest.json +48 -35
- package/dist/presets/backend/powers.json +40 -0
- package/dist/presets/backend/skills/kiro/references/autonomy-modes.md +26 -0
- package/dist/presets/backend/skills/kiro/references/best-practices.md +48 -0
- package/dist/presets/backend/skills/kiro/references/commands.md +61 -0
- package/dist/presets/backend/skills/kiro/references/configuration.md +41 -0
- package/dist/presets/backend/skills/kiro/references/getting-started.md +45 -0
- package/dist/presets/backend/skills/kiro/references/hooks.md +99 -0
- package/dist/presets/backend/skills/kiro/references/mcp-integration.md +53 -0
- package/dist/presets/backend/skills/kiro/references/skills.md +55 -0
- package/dist/presets/backend/skills/kiro/references/specs-workflow.md +62 -0
- package/dist/presets/backend/skills/kiro/references/steering-files.md +84 -0
- package/dist/presets/backend/skills/kiro/references/troubleshooting.md +42 -0
- package/dist/presets/backend/skills/kiro/skill.md +194 -0
- package/dist/presets/data-ai/hooks/data-drift-check.js +77 -0
- package/dist/presets/data-ai/hooks/experiment-log.js +87 -0
- package/dist/presets/data-ai/hooks/model-card-update.js +99 -0
- package/dist/presets/data-ai/manifest.json +48 -35
- package/dist/presets/data-ai/powers.json +34 -0
- package/dist/presets/data-ai/skills/kiro/references/autonomy-modes.md +26 -0
- package/dist/presets/data-ai/skills/kiro/references/best-practices.md +48 -0
- package/dist/presets/data-ai/skills/kiro/references/commands.md +61 -0
- package/dist/presets/data-ai/skills/kiro/references/configuration.md +41 -0
- package/dist/presets/data-ai/skills/kiro/references/getting-started.md +45 -0
- package/dist/presets/data-ai/skills/kiro/references/hooks.md +99 -0
- package/dist/presets/data-ai/skills/kiro/references/mcp-integration.md +53 -0
- package/dist/presets/data-ai/skills/kiro/references/skills.md +55 -0
- package/dist/presets/data-ai/skills/kiro/references/specs-workflow.md +62 -0
- package/dist/presets/data-ai/skills/kiro/references/steering-files.md +84 -0
- package/dist/presets/data-ai/skills/kiro/references/troubleshooting.md +42 -0
- package/dist/presets/data-ai/skills/kiro/skill.md +194 -0
- package/dist/presets/devops/hooks/container-scan.js +73 -0
- package/dist/presets/devops/hooks/cost-estimation.js +69 -0
- package/dist/presets/devops/hooks/terraform-plan-review.js +67 -0
- package/dist/presets/devops/manifest.json +48 -35
- package/dist/presets/devops/powers.json +40 -0
- package/dist/presets/devops/skills/kiro/references/autonomy-modes.md +26 -0
- package/dist/presets/devops/skills/kiro/references/best-practices.md +48 -0
- package/dist/presets/devops/skills/kiro/references/commands.md +61 -0
- package/dist/presets/devops/skills/kiro/references/configuration.md +41 -0
- package/dist/presets/devops/skills/kiro/references/getting-started.md +45 -0
- package/dist/presets/devops/skills/kiro/references/hooks.md +99 -0
- package/dist/presets/devops/skills/kiro/references/mcp-integration.md +53 -0
- package/dist/presets/devops/skills/kiro/references/skills.md +55 -0
- package/dist/presets/devops/skills/kiro/references/specs-workflow.md +62 -0
- package/dist/presets/devops/skills/kiro/references/steering-files.md +84 -0
- package/dist/presets/devops/skills/kiro/references/troubleshooting.md +42 -0
- package/dist/presets/devops/skills/kiro/skill.md +194 -0
- package/dist/presets/frontend/commands/test.md +1 -1
- package/dist/presets/frontend/hooks/accessibility-check.js +76 -0
- package/dist/presets/frontend/hooks/bundle-size-guard.js +71 -0
- package/dist/presets/frontend/hooks/component-test-reminder.js +71 -0
- package/dist/presets/frontend/manifest.json +48 -35
- package/dist/presets/frontend/powers.json +34 -0
- package/dist/presets/frontend/skills/kiro/references/autonomy-modes.md +26 -0
- package/dist/presets/frontend/skills/kiro/references/best-practices.md +48 -0
- package/dist/presets/frontend/skills/kiro/references/commands.md +61 -0
- package/dist/presets/frontend/skills/kiro/references/configuration.md +41 -0
- package/dist/presets/frontend/skills/kiro/references/getting-started.md +45 -0
- package/dist/presets/frontend/skills/kiro/references/hooks.md +99 -0
- package/dist/presets/frontend/skills/kiro/references/mcp-integration.md +53 -0
- package/dist/presets/frontend/skills/kiro/references/skills.md +55 -0
- package/dist/presets/frontend/skills/kiro/references/specs-workflow.md +62 -0
- package/dist/presets/frontend/skills/kiro/references/steering-files.md +84 -0
- package/dist/presets/frontend/skills/kiro/references/troubleshooting.md +42 -0
- package/dist/presets/frontend/skills/kiro/skill.md +194 -0
- package/dist/presets/fullstack/hooks/api-client-gen.js +69 -0
- package/dist/presets/fullstack/hooks/deployment-readiness.js +73 -0
- package/dist/presets/fullstack/hooks/type-sync-check.js +69 -0
- package/dist/presets/fullstack/manifest.json +48 -35
- package/dist/presets/fullstack/powers.json +46 -0
- package/dist/presets/fullstack/skills/kiro/references/autonomy-modes.md +26 -0
- package/dist/presets/fullstack/skills/kiro/references/best-practices.md +48 -0
- package/dist/presets/fullstack/skills/kiro/references/commands.md +61 -0
- package/dist/presets/fullstack/skills/kiro/references/configuration.md +41 -0
- package/dist/presets/fullstack/skills/kiro/references/getting-started.md +45 -0
- package/dist/presets/fullstack/skills/kiro/references/hooks.md +99 -0
- package/dist/presets/fullstack/skills/kiro/references/mcp-integration.md +53 -0
- package/dist/presets/fullstack/skills/kiro/references/skills.md +55 -0
- package/dist/presets/fullstack/skills/kiro/references/specs-workflow.md +62 -0
- package/dist/presets/fullstack/skills/kiro/references/steering-files.md +84 -0
- package/dist/presets/fullstack/skills/kiro/references/troubleshooting.md +42 -0
- package/dist/presets/fullstack/skills/kiro/skill.md +194 -0
- package/dist/presets/mobile/hooks/asset-optimization.js +58 -0
- package/dist/presets/mobile/hooks/platform-parity-check.js +73 -0
- package/dist/presets/mobile/hooks/release-checklist.js +83 -0
- package/dist/presets/mobile/manifest.json +48 -35
- package/dist/presets/mobile/powers.json +34 -0
- package/dist/presets/mobile/skills/kiro/references/autonomy-modes.md +26 -0
- package/dist/presets/mobile/skills/kiro/references/best-practices.md +48 -0
- package/dist/presets/mobile/skills/kiro/references/commands.md +61 -0
- package/dist/presets/mobile/skills/kiro/references/configuration.md +41 -0
- package/dist/presets/mobile/skills/kiro/references/getting-started.md +45 -0
- package/dist/presets/mobile/skills/kiro/references/hooks.md +99 -0
- package/dist/presets/mobile/skills/kiro/references/mcp-integration.md +53 -0
- package/dist/presets/mobile/skills/kiro/references/skills.md +55 -0
- package/dist/presets/mobile/skills/kiro/references/specs-workflow.md +62 -0
- package/dist/presets/mobile/skills/kiro/references/steering-files.md +84 -0
- package/dist/presets/mobile/skills/kiro/references/troubleshooting.md +42 -0
- package/dist/presets/mobile/skills/kiro/skill.md +194 -0
- package/package.json +1 -1
- package/dist/presets/backend/skills/claude-code/references/advanced-features.md +0 -399
- package/dist/presets/backend/skills/claude-code/references/agent-skills.md +0 -399
- package/dist/presets/backend/skills/claude-code/references/api-reference.md +0 -498
- package/dist/presets/backend/skills/claude-code/references/best-practices.md +0 -447
- package/dist/presets/backend/skills/claude-code/references/cicd-integration.md +0 -428
- package/dist/presets/backend/skills/claude-code/references/configuration.md +0 -480
- package/dist/presets/backend/skills/claude-code/references/enterprise-features.md +0 -472
- package/dist/presets/backend/skills/claude-code/references/getting-started.md +0 -252
- package/dist/presets/backend/skills/claude-code/references/hooks-and-plugins.md +0 -441
- package/dist/presets/backend/skills/claude-code/references/ide-integration.md +0 -316
- package/dist/presets/backend/skills/claude-code/references/mcp-integration.md +0 -386
- package/dist/presets/backend/skills/claude-code/references/slash-commands.md +0 -489
- package/dist/presets/backend/skills/claude-code/references/troubleshooting.md +0 -456
- package/dist/presets/backend/skills/claude-code/skill.md +0 -194
- package/dist/presets/data-ai/skills/claude-code/references/advanced-features.md +0 -399
- package/dist/presets/data-ai/skills/claude-code/references/agent-skills.md +0 -399
- package/dist/presets/data-ai/skills/claude-code/references/api-reference.md +0 -498
- package/dist/presets/data-ai/skills/claude-code/references/best-practices.md +0 -447
- package/dist/presets/data-ai/skills/claude-code/references/cicd-integration.md +0 -428
- package/dist/presets/data-ai/skills/claude-code/references/configuration.md +0 -480
- package/dist/presets/data-ai/skills/claude-code/references/enterprise-features.md +0 -472
- package/dist/presets/data-ai/skills/claude-code/references/getting-started.md +0 -252
- package/dist/presets/data-ai/skills/claude-code/references/hooks-and-plugins.md +0 -441
- package/dist/presets/data-ai/skills/claude-code/references/ide-integration.md +0 -316
- package/dist/presets/data-ai/skills/claude-code/references/mcp-integration.md +0 -386
- package/dist/presets/data-ai/skills/claude-code/references/slash-commands.md +0 -489
- package/dist/presets/data-ai/skills/claude-code/references/troubleshooting.md +0 -456
- package/dist/presets/data-ai/skills/claude-code/skill.md +0 -194
- package/dist/presets/devops/skills/claude-code/references/advanced-features.md +0 -399
- package/dist/presets/devops/skills/claude-code/references/agent-skills.md +0 -399
- package/dist/presets/devops/skills/claude-code/references/api-reference.md +0 -498
- package/dist/presets/devops/skills/claude-code/references/best-practices.md +0 -447
- package/dist/presets/devops/skills/claude-code/references/cicd-integration.md +0 -428
- package/dist/presets/devops/skills/claude-code/references/configuration.md +0 -480
- package/dist/presets/devops/skills/claude-code/references/enterprise-features.md +0 -472
- package/dist/presets/devops/skills/claude-code/references/getting-started.md +0 -252
- package/dist/presets/devops/skills/claude-code/references/hooks-and-plugins.md +0 -441
- package/dist/presets/devops/skills/claude-code/references/ide-integration.md +0 -316
- package/dist/presets/devops/skills/claude-code/references/mcp-integration.md +0 -386
- package/dist/presets/devops/skills/claude-code/references/slash-commands.md +0 -489
- package/dist/presets/devops/skills/claude-code/references/troubleshooting.md +0 -456
- package/dist/presets/devops/skills/claude-code/skill.md +0 -194
- package/dist/presets/frontend/skills/claude-code/references/advanced-features.md +0 -399
- package/dist/presets/frontend/skills/claude-code/references/agent-skills.md +0 -399
- package/dist/presets/frontend/skills/claude-code/references/api-reference.md +0 -498
- package/dist/presets/frontend/skills/claude-code/references/best-practices.md +0 -447
- package/dist/presets/frontend/skills/claude-code/references/cicd-integration.md +0 -428
- package/dist/presets/frontend/skills/claude-code/references/configuration.md +0 -480
- package/dist/presets/frontend/skills/claude-code/references/enterprise-features.md +0 -472
- package/dist/presets/frontend/skills/claude-code/references/getting-started.md +0 -252
- package/dist/presets/frontend/skills/claude-code/references/hooks-and-plugins.md +0 -441
- package/dist/presets/frontend/skills/claude-code/references/ide-integration.md +0 -316
- package/dist/presets/frontend/skills/claude-code/references/mcp-integration.md +0 -386
- package/dist/presets/frontend/skills/claude-code/references/slash-commands.md +0 -489
- package/dist/presets/frontend/skills/claude-code/references/troubleshooting.md +0 -456
- package/dist/presets/frontend/skills/claude-code/skill.md +0 -194
- package/dist/presets/fullstack/skills/claude-code/references/advanced-features.md +0 -399
- package/dist/presets/fullstack/skills/claude-code/references/agent-skills.md +0 -399
- package/dist/presets/fullstack/skills/claude-code/references/api-reference.md +0 -498
- package/dist/presets/fullstack/skills/claude-code/references/best-practices.md +0 -447
- package/dist/presets/fullstack/skills/claude-code/references/cicd-integration.md +0 -428
- package/dist/presets/fullstack/skills/claude-code/references/configuration.md +0 -480
- package/dist/presets/fullstack/skills/claude-code/references/enterprise-features.md +0 -472
- package/dist/presets/fullstack/skills/claude-code/references/getting-started.md +0 -252
- package/dist/presets/fullstack/skills/claude-code/references/hooks-and-plugins.md +0 -441
- package/dist/presets/fullstack/skills/claude-code/references/ide-integration.md +0 -316
- package/dist/presets/fullstack/skills/claude-code/references/mcp-integration.md +0 -386
- package/dist/presets/fullstack/skills/claude-code/references/slash-commands.md +0 -489
- package/dist/presets/fullstack/skills/claude-code/references/troubleshooting.md +0 -456
- package/dist/presets/fullstack/skills/claude-code/skill.md +0 -194
- package/dist/presets/mobile/skills/claude-code/references/advanced-features.md +0 -399
- package/dist/presets/mobile/skills/claude-code/references/agent-skills.md +0 -399
- package/dist/presets/mobile/skills/claude-code/references/api-reference.md +0 -498
- package/dist/presets/mobile/skills/claude-code/references/best-practices.md +0 -447
- package/dist/presets/mobile/skills/claude-code/references/cicd-integration.md +0 -428
- package/dist/presets/mobile/skills/claude-code/references/configuration.md +0 -480
- package/dist/presets/mobile/skills/claude-code/references/enterprise-features.md +0 -472
- package/dist/presets/mobile/skills/claude-code/references/getting-started.md +0 -252
- package/dist/presets/mobile/skills/claude-code/references/hooks-and-plugins.md +0 -441
- package/dist/presets/mobile/skills/claude-code/references/ide-integration.md +0 -316
- package/dist/presets/mobile/skills/claude-code/references/mcp-integration.md +0 -386
- package/dist/presets/mobile/skills/claude-code/references/slash-commands.md +0 -489
- package/dist/presets/mobile/skills/claude-code/references/troubleshooting.md +0 -456
- package/dist/presets/mobile/skills/claude-code/skill.md +0 -194
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Validates that route handler files export proper HTTP method handlers
|
|
4
|
+
* and use input validation (checks for zod/joi imports in route files).
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
|
|
10
|
+
const ROUTE_DIRS = ['src/app/api', 'src/routes', 'routes', 'api'];
|
|
11
|
+
const ROUTE_FILES = ['route.ts', 'route.js', 'index.ts', 'index.js'];
|
|
12
|
+
const VALIDATION_PATTERNS = [/from\s+['"]zod['"]/, /from\s+['"]joi['"]/, /require\(['"]zod['"]\)/, /require\(['"]joi['"]\)/];
|
|
13
|
+
const HTTP_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];
|
|
14
|
+
|
|
15
|
+
const cwd = process.cwd();
|
|
16
|
+
const issues = [];
|
|
17
|
+
|
|
18
|
+
function findRouteFiles(dir) {
|
|
19
|
+
const results = [];
|
|
20
|
+
if (!fs.existsSync(dir)) return results;
|
|
21
|
+
try {
|
|
22
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
23
|
+
for (const entry of entries) {
|
|
24
|
+
const full = path.join(dir, entry.name);
|
|
25
|
+
if (entry.isDirectory()) {
|
|
26
|
+
results.push(...findRouteFiles(full));
|
|
27
|
+
} else if (ROUTE_FILES.includes(entry.name)) {
|
|
28
|
+
results.push(full);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
} catch (e) { /* skip */ }
|
|
32
|
+
return results;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let routeFiles = [];
|
|
36
|
+
for (const dir of ROUTE_DIRS) {
|
|
37
|
+
routeFiles.push(...findRouteFiles(path.resolve(cwd, dir)));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (routeFiles.length === 0) {
|
|
41
|
+
process.exit(0);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
for (const file of routeFiles) {
|
|
45
|
+
const content = fs.readFileSync(file, 'utf8');
|
|
46
|
+
const rel = path.relative(cwd, file);
|
|
47
|
+
|
|
48
|
+
// Check for exported HTTP method handlers
|
|
49
|
+
const hasMethod = HTTP_METHODS.some((m) =>
|
|
50
|
+
new RegExp(`export\\s+(async\\s+)?function\\s+${m}\\b`).test(content)
|
|
51
|
+
);
|
|
52
|
+
if (!hasMethod) {
|
|
53
|
+
issues.push(`${rel}: No exported HTTP method handler found (GET, POST, etc.)`);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Check for input validation on POST/PUT/PATCH handlers
|
|
58
|
+
const hasMutation = ['POST', 'PUT', 'PATCH'].some((m) =>
|
|
59
|
+
new RegExp(`export\\s+(async\\s+)?function\\s+${m}\\b`).test(content)
|
|
60
|
+
);
|
|
61
|
+
if (hasMutation) {
|
|
62
|
+
const hasValidation = VALIDATION_PATTERNS.some((p) => p.test(content));
|
|
63
|
+
if (!hasValidation) {
|
|
64
|
+
issues.push(`${rel}: Mutation handler without input validation (zod/joi not imported)`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (issues.length > 0) {
|
|
70
|
+
process.stdout.write('[api-schema-validate] Issues found:\n');
|
|
71
|
+
issues.forEach((i) => process.stdout.write(` - ${i}\n`));
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
process.exit(0);
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Checks that API route files in src/app/api/ or routes/ have corresponding test files.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
|
|
9
|
+
const ROUTE_DIRS = ['src/app/api', 'src/routes', 'routes'];
|
|
10
|
+
const TEST_DIRS = ['__tests__', 'tests', 'test'];
|
|
11
|
+
const ROUTE_FILES = ['route.ts', 'route.js', 'index.ts', 'index.js'];
|
|
12
|
+
|
|
13
|
+
const cwd = process.cwd();
|
|
14
|
+
|
|
15
|
+
function findRoutes(dir) {
|
|
16
|
+
const results = [];
|
|
17
|
+
if (!fs.existsSync(dir)) return results;
|
|
18
|
+
try {
|
|
19
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
20
|
+
for (const entry of entries) {
|
|
21
|
+
const full = path.join(dir, entry.name);
|
|
22
|
+
if (entry.isDirectory()) {
|
|
23
|
+
results.push(...findRoutes(full));
|
|
24
|
+
} else if (ROUTE_FILES.includes(entry.name)) {
|
|
25
|
+
results.push({ file: full, dir: path.dirname(full) });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
} catch (e) { /* skip */ }
|
|
29
|
+
return results;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
let routes = [];
|
|
33
|
+
for (const dir of ROUTE_DIRS) {
|
|
34
|
+
routes.push(...findRoutes(path.resolve(cwd, dir)));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (routes.length === 0) {
|
|
38
|
+
process.exit(0);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const missing = [];
|
|
42
|
+
|
|
43
|
+
for (const route of routes) {
|
|
44
|
+
const routeDir = route.dir;
|
|
45
|
+
const routeRel = path.relative(cwd, routeDir);
|
|
46
|
+
const routeName = path.basename(routeDir);
|
|
47
|
+
|
|
48
|
+
// Look for test files in various locations
|
|
49
|
+
const testPatterns = [
|
|
50
|
+
path.join(routeDir, `route.test.ts`),
|
|
51
|
+
path.join(routeDir, `route.test.js`),
|
|
52
|
+
path.join(routeDir, `${routeName}.test.ts`),
|
|
53
|
+
path.join(routeDir, `${routeName}.test.js`),
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
// Also check parent __tests__ directories
|
|
57
|
+
for (const testDir of TEST_DIRS) {
|
|
58
|
+
testPatterns.push(path.join(routeDir, '..', testDir, `${routeName}.test.ts`));
|
|
59
|
+
testPatterns.push(path.join(routeDir, '..', testDir, `${routeName}.test.js`));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const hasTest = testPatterns.some((t) => fs.existsSync(t));
|
|
63
|
+
if (!hasTest) {
|
|
64
|
+
missing.push(routeRel);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (missing.length > 0) {
|
|
69
|
+
process.stdout.write(`[endpoint-test-coverage] ${missing.length} API route(s) without tests:\n`);
|
|
70
|
+
missing.slice(0, 10).forEach((m) => process.stdout.write(` - ${m}\n`));
|
|
71
|
+
if (missing.length > 10) {
|
|
72
|
+
process.stdout.write(` ... and ${missing.length - 10} more\n`);
|
|
73
|
+
}
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
process.exit(0);
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Scans migration files for dangerous operations (DROP TABLE, DROP COLUMN, TRUNCATE)
|
|
4
|
+
* and warns before execution.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
|
|
10
|
+
const MIGRATION_DIRS = ['prisma/migrations', 'drizzle', 'migrations', 'db/migrations', 'src/db/migrations'];
|
|
11
|
+
const DANGEROUS_PATTERNS = [
|
|
12
|
+
{ pattern: /DROP\s+TABLE/gi, label: 'DROP TABLE' },
|
|
13
|
+
{ pattern: /DROP\s+COLUMN/gi, label: 'DROP COLUMN' },
|
|
14
|
+
{ pattern: /ALTER\s+TABLE\s+\S+\s+DROP/gi, label: 'ALTER TABLE DROP' },
|
|
15
|
+
{ pattern: /TRUNCATE/gi, label: 'TRUNCATE' },
|
|
16
|
+
{ pattern: /DELETE\s+FROM\s+\S+\s*;/gi, label: 'DELETE without WHERE' },
|
|
17
|
+
];
|
|
18
|
+
const SQL_EXTENSIONS = ['.sql', '.ts', '.js'];
|
|
19
|
+
|
|
20
|
+
const cwd = process.cwd();
|
|
21
|
+
const warnings = [];
|
|
22
|
+
|
|
23
|
+
function findMigrationFiles(dir) {
|
|
24
|
+
const results = [];
|
|
25
|
+
if (!fs.existsSync(dir)) return results;
|
|
26
|
+
try {
|
|
27
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
28
|
+
for (const entry of entries) {
|
|
29
|
+
const full = path.join(dir, entry.name);
|
|
30
|
+
if (entry.isDirectory()) {
|
|
31
|
+
results.push(...findMigrationFiles(full));
|
|
32
|
+
} else if (SQL_EXTENSIONS.includes(path.extname(entry.name).toLowerCase())) {
|
|
33
|
+
results.push(full);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
} catch (e) { /* skip */ }
|
|
37
|
+
return results;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let migrationFiles = [];
|
|
41
|
+
for (const dir of MIGRATION_DIRS) {
|
|
42
|
+
migrationFiles.push(...findMigrationFiles(path.resolve(cwd, dir)));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (migrationFiles.length === 0) {
|
|
46
|
+
process.exit(0);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
for (const file of migrationFiles) {
|
|
50
|
+
const content = fs.readFileSync(file, 'utf8');
|
|
51
|
+
const rel = path.relative(cwd, file);
|
|
52
|
+
|
|
53
|
+
for (const { pattern, label } of DANGEROUS_PATTERNS) {
|
|
54
|
+
const matches = content.match(pattern);
|
|
55
|
+
if (matches) {
|
|
56
|
+
warnings.push(`${rel}: Contains ${label} (${matches.length} occurrence(s))`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (warnings.length > 0) {
|
|
62
|
+
process.stdout.write('[migration-safety-check] Dangerous operations detected:\n');
|
|
63
|
+
warnings.forEach((w) => process.stdout.write(` - ${w}\n`));
|
|
64
|
+
process.stdout.write(' Review these changes carefully before applying.\n');
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
process.exit(0);
|
|
@@ -523,6 +523,29 @@
|
|
|
523
523
|
"type": "hook",
|
|
524
524
|
"executable": true
|
|
525
525
|
},
|
|
526
|
+
{
|
|
527
|
+
"source": "hooks/api-schema-validate.js",
|
|
528
|
+
"target": ".kiro/hooks/api-schema-validate.js",
|
|
529
|
+
"type": "hook",
|
|
530
|
+
"executable": true
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
"source": "hooks/migration-safety-check.js",
|
|
534
|
+
"target": ".kiro/hooks/migration-safety-check.js",
|
|
535
|
+
"type": "hook",
|
|
536
|
+
"executable": true
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
"source": "hooks/endpoint-test-coverage.js",
|
|
540
|
+
"target": ".kiro/hooks/endpoint-test-coverage.js",
|
|
541
|
+
"type": "hook",
|
|
542
|
+
"executable": true
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
"source": "powers.json",
|
|
546
|
+
"target": ".kiro/powers.json",
|
|
547
|
+
"type": "powers"
|
|
548
|
+
},
|
|
526
549
|
{
|
|
527
550
|
"source": "metadata.json",
|
|
528
551
|
"target": ".kiro/metadata.json",
|
|
@@ -864,73 +887,63 @@
|
|
|
864
887
|
"type": "other"
|
|
865
888
|
},
|
|
866
889
|
{
|
|
867
|
-
"source": "skills/
|
|
868
|
-
"target": ".kiro/skills/
|
|
869
|
-
"type": "
|
|
870
|
-
},
|
|
871
|
-
{
|
|
872
|
-
"source": "skills/claude-code/references/agent-skills.md",
|
|
873
|
-
"target": ".kiro/skills/claude-code/references/agent-skills.md",
|
|
874
|
-
"type": "doc"
|
|
875
|
-
},
|
|
876
|
-
{
|
|
877
|
-
"source": "skills/claude-code/references/api-reference.md",
|
|
878
|
-
"target": ".kiro/skills/claude-code/references/api-reference.md",
|
|
879
|
-
"type": "doc"
|
|
890
|
+
"source": "skills/kiro/skill.md",
|
|
891
|
+
"target": ".kiro/skills/kiro/skill.md",
|
|
892
|
+
"type": "skill"
|
|
880
893
|
},
|
|
881
894
|
{
|
|
882
|
-
"source": "skills/
|
|
883
|
-
"target": ".kiro/skills/
|
|
895
|
+
"source": "skills/kiro/references/autonomy-modes.md",
|
|
896
|
+
"target": ".kiro/skills/kiro/references/autonomy-modes.md",
|
|
884
897
|
"type": "doc"
|
|
885
898
|
},
|
|
886
899
|
{
|
|
887
|
-
"source": "skills/
|
|
888
|
-
"target": ".kiro/skills/
|
|
900
|
+
"source": "skills/kiro/references/best-practices.md",
|
|
901
|
+
"target": ".kiro/skills/kiro/references/best-practices.md",
|
|
889
902
|
"type": "doc"
|
|
890
903
|
},
|
|
891
904
|
{
|
|
892
|
-
"source": "skills/
|
|
893
|
-
"target": ".kiro/skills/
|
|
905
|
+
"source": "skills/kiro/references/commands.md",
|
|
906
|
+
"target": ".kiro/skills/kiro/references/commands.md",
|
|
894
907
|
"type": "doc"
|
|
895
908
|
},
|
|
896
909
|
{
|
|
897
|
-
"source": "skills/
|
|
898
|
-
"target": ".kiro/skills/
|
|
910
|
+
"source": "skills/kiro/references/configuration.md",
|
|
911
|
+
"target": ".kiro/skills/kiro/references/configuration.md",
|
|
899
912
|
"type": "doc"
|
|
900
913
|
},
|
|
901
914
|
{
|
|
902
|
-
"source": "skills/
|
|
903
|
-
"target": ".kiro/skills/
|
|
915
|
+
"source": "skills/kiro/references/getting-started.md",
|
|
916
|
+
"target": ".kiro/skills/kiro/references/getting-started.md",
|
|
904
917
|
"type": "doc"
|
|
905
918
|
},
|
|
906
919
|
{
|
|
907
|
-
"source": "skills/
|
|
908
|
-
"target": ".kiro/skills/
|
|
920
|
+
"source": "skills/kiro/references/hooks.md",
|
|
921
|
+
"target": ".kiro/skills/kiro/references/hooks.md",
|
|
909
922
|
"type": "doc"
|
|
910
923
|
},
|
|
911
924
|
{
|
|
912
|
-
"source": "skills/
|
|
913
|
-
"target": ".kiro/skills/
|
|
925
|
+
"source": "skills/kiro/references/mcp-integration.md",
|
|
926
|
+
"target": ".kiro/skills/kiro/references/mcp-integration.md",
|
|
914
927
|
"type": "doc"
|
|
915
928
|
},
|
|
916
929
|
{
|
|
917
|
-
"source": "skills/
|
|
918
|
-
"target": ".kiro/skills/
|
|
930
|
+
"source": "skills/kiro/references/skills.md",
|
|
931
|
+
"target": ".kiro/skills/kiro/references/skills.md",
|
|
919
932
|
"type": "doc"
|
|
920
933
|
},
|
|
921
934
|
{
|
|
922
|
-
"source": "skills/
|
|
923
|
-
"target": ".kiro/skills/
|
|
935
|
+
"source": "skills/kiro/references/specs-workflow.md",
|
|
936
|
+
"target": ".kiro/skills/kiro/references/specs-workflow.md",
|
|
924
937
|
"type": "doc"
|
|
925
938
|
},
|
|
926
939
|
{
|
|
927
|
-
"source": "skills/
|
|
928
|
-
"target": ".kiro/skills/
|
|
940
|
+
"source": "skills/kiro/references/steering-files.md",
|
|
941
|
+
"target": ".kiro/skills/kiro/references/steering-files.md",
|
|
929
942
|
"type": "doc"
|
|
930
943
|
},
|
|
931
944
|
{
|
|
932
|
-
"source": "skills/
|
|
933
|
-
"target": ".kiro/skills/
|
|
945
|
+
"source": "skills/kiro/references/troubleshooting.md",
|
|
946
|
+
"target": ".kiro/skills/kiro/references/troubleshooting.md",
|
|
934
947
|
"type": "doc"
|
|
935
948
|
},
|
|
936
949
|
{
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"powers": [
|
|
3
|
+
{
|
|
4
|
+
"name": "Supabase",
|
|
5
|
+
"url": "https://kiro.dev/powers/supabase",
|
|
6
|
+
"description": "Backend-as-a-service with Postgres, auth, and real-time subscriptions",
|
|
7
|
+
"tier": "essential"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"name": "Neon",
|
|
11
|
+
"url": "https://kiro.dev/powers/neon",
|
|
12
|
+
"description": "Serverless Postgres with branching and autoscaling",
|
|
13
|
+
"tier": "recommended"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "Postman",
|
|
17
|
+
"url": "https://kiro.dev/powers/postman",
|
|
18
|
+
"description": "API testing and collection management",
|
|
19
|
+
"tier": "recommended"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "Context7",
|
|
23
|
+
"url": "https://kiro.dev/powers/context7",
|
|
24
|
+
"description": "Up-to-date documentation lookup for libraries and frameworks",
|
|
25
|
+
"tier": "recommended"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "Stripe",
|
|
29
|
+
"url": "https://kiro.dev/powers/stripe",
|
|
30
|
+
"description": "Payment processing, subscriptions, and billing integration",
|
|
31
|
+
"tier": "optional"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "Snyk",
|
|
35
|
+
"url": "https://kiro.dev/powers/snyk",
|
|
36
|
+
"description": "Security scanning and vulnerability detection for dependencies",
|
|
37
|
+
"tier": "optional"
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Autonomy Modes
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Kiro offers two modes for how the AI agent interacts with your workspace.
|
|
6
|
+
|
|
7
|
+
## Autopilot Mode
|
|
8
|
+
|
|
9
|
+
- Agent modifies files autonomously within the workspace
|
|
10
|
+
- Best for: routine tasks, well-defined changes, trusted workflows
|
|
11
|
+
- Changes are applied immediately
|
|
12
|
+
- Use when you trust the agent's judgment for the task
|
|
13
|
+
|
|
14
|
+
## Supervised Mode
|
|
15
|
+
|
|
16
|
+
- User has opportunity to review and revert changes after application
|
|
17
|
+
- Best for: complex refactors, unfamiliar codebases, learning
|
|
18
|
+
- Changes can be inspected before accepting
|
|
19
|
+
- Use when you want more control over modifications
|
|
20
|
+
|
|
21
|
+
## Choosing a Mode
|
|
22
|
+
|
|
23
|
+
- Start with Supervised for new projects or unfamiliar tasks
|
|
24
|
+
- Switch to Autopilot for repetitive, well-understood operations
|
|
25
|
+
- Use Supervised for security-sensitive changes
|
|
26
|
+
- Autopilot works well for spec task execution
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Best Practices
|
|
2
|
+
|
|
3
|
+
## Project Organization
|
|
4
|
+
|
|
5
|
+
- Keep `.kiro/` directory in version control
|
|
6
|
+
- Use consistent naming (kebab-case for directories)
|
|
7
|
+
- Document custom skills and commands in project README
|
|
8
|
+
- Share steering files across team via git
|
|
9
|
+
|
|
10
|
+
## Steering Conventions
|
|
11
|
+
|
|
12
|
+
- One topic per steering file
|
|
13
|
+
- Use "always" only for critical, universal rules
|
|
14
|
+
- Use "fileMatch" for language/framework-specific guidance
|
|
15
|
+
- Keep files concise (under 100 lines ideally)
|
|
16
|
+
- Include examples in steering content
|
|
17
|
+
|
|
18
|
+
## Skill Design
|
|
19
|
+
|
|
20
|
+
- Focus each skill on one domain
|
|
21
|
+
- Write clear activation descriptions
|
|
22
|
+
- Use references for detailed content
|
|
23
|
+
- Keep main skill.md as an overview/router
|
|
24
|
+
- Test activation with various phrasings
|
|
25
|
+
|
|
26
|
+
## Hook Patterns
|
|
27
|
+
|
|
28
|
+
- Use file hooks for linting and formatting
|
|
29
|
+
- Use postTaskExecution for test validation
|
|
30
|
+
- Use preToolUse for access control
|
|
31
|
+
- Keep hook commands fast (under 30 seconds)
|
|
32
|
+
- Log hook failures for debugging
|
|
33
|
+
|
|
34
|
+
## Team Workflows
|
|
35
|
+
|
|
36
|
+
- Standardize steering files across projects
|
|
37
|
+
- Share skills via presets or git submodules
|
|
38
|
+
- Document MCP server requirements in README
|
|
39
|
+
- Use specs for all non-trivial features
|
|
40
|
+
- Review spec documents before task execution
|
|
41
|
+
|
|
42
|
+
## Cost Management
|
|
43
|
+
|
|
44
|
+
- Use steering to keep responses focused
|
|
45
|
+
- Avoid overly broad "always" steering
|
|
46
|
+
- Disable unused MCP servers
|
|
47
|
+
- Use Supervised mode for exploratory work
|
|
48
|
+
- Keep skill references concise
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Commands
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Commands are user-defined operations in `.kiro/commands/` that expand to prompts. They provide shortcuts for common workflows.
|
|
6
|
+
|
|
7
|
+
## File Format
|
|
8
|
+
|
|
9
|
+
```markdown
|
|
10
|
+
---
|
|
11
|
+
description: Brief description of what this command does
|
|
12
|
+
inclusion: manual
|
|
13
|
+
argument-hint: "[pattern]"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Arguments
|
|
17
|
+
PATTERN: $1 (default: all)
|
|
18
|
+
|
|
19
|
+
## Workflow
|
|
20
|
+
1. Step one
|
|
21
|
+
2. Step two
|
|
22
|
+
3. Step three
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Front-Matter
|
|
26
|
+
|
|
27
|
+
Required fields:
|
|
28
|
+
- `description`: What the command does
|
|
29
|
+
|
|
30
|
+
Optional fields:
|
|
31
|
+
- `inclusion`: "manual" (default)
|
|
32
|
+
- `argument-hint`: Hint for arguments shown to user
|
|
33
|
+
|
|
34
|
+
## Arguments
|
|
35
|
+
|
|
36
|
+
Use `$1`, `$2`, etc. for positional arguments passed by the user.
|
|
37
|
+
|
|
38
|
+
## Nested Commands
|
|
39
|
+
|
|
40
|
+
Commands can be organized in subdirectories:
|
|
41
|
+
```
|
|
42
|
+
.kiro/commands/
|
|
43
|
+
test.md
|
|
44
|
+
fix/
|
|
45
|
+
types.md
|
|
46
|
+
test.md
|
|
47
|
+
fast.md
|
|
48
|
+
git/
|
|
49
|
+
cm.md
|
|
50
|
+
cp.md
|
|
51
|
+
pr.md
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Access nested commands with colon notation: `/fix:types`, `/git:cm`
|
|
55
|
+
|
|
56
|
+
## Best Practices
|
|
57
|
+
|
|
58
|
+
- Keep commands focused on one workflow
|
|
59
|
+
- Include clear step-by-step instructions
|
|
60
|
+
- Use argument hints to guide users
|
|
61
|
+
- Document default behavior when no arguments provided
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
## Settings Hierarchy
|
|
4
|
+
|
|
5
|
+
Settings are merged with precedence:
|
|
6
|
+
1. User-level: `~/.kiro/settings/mcp.json` (global)
|
|
7
|
+
2. Workspace-level: `.kiro/settings/mcp.json` (per project)
|
|
8
|
+
|
|
9
|
+
Workspace settings override user settings.
|
|
10
|
+
|
|
11
|
+
## MCP Configuration
|
|
12
|
+
|
|
13
|
+
File: `.kiro/settings/mcp.json`
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"mcpServers": {
|
|
18
|
+
"server-name": {
|
|
19
|
+
"command": "uvx",
|
|
20
|
+
"args": ["package-name@latest"],
|
|
21
|
+
"env": {
|
|
22
|
+
"API_KEY": "your-key"
|
|
23
|
+
},
|
|
24
|
+
"disabled": false,
|
|
25
|
+
"autoApprove": ["tool-name"]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Key Settings
|
|
32
|
+
|
|
33
|
+
- `command`: Executable to run the MCP server
|
|
34
|
+
- `args`: Command-line arguments
|
|
35
|
+
- `env`: Environment variables passed to the server
|
|
36
|
+
- `disabled`: Enable/disable without removing config
|
|
37
|
+
- `autoApprove`: Tools that don't require user confirmation
|
|
38
|
+
|
|
39
|
+
## Multi-Root Workspaces
|
|
40
|
+
|
|
41
|
+
Each workspace folder can have its own `.kiro/settings/mcp.json`. Configs merge with later folders taking precedence.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Getting Started with Kiro
|
|
2
|
+
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
- Supported OS: Windows, macOS, Linux
|
|
6
|
+
- Internet connection for AI features
|
|
7
|
+
|
|
8
|
+
## Installation
|
|
9
|
+
|
|
10
|
+
Download Kiro from https://kiro.dev and install for your platform.
|
|
11
|
+
|
|
12
|
+
## First Run
|
|
13
|
+
|
|
14
|
+
1. Open Kiro
|
|
15
|
+
2. Open or create a workspace folder
|
|
16
|
+
3. Start chatting with the AI agent in the chat panel
|
|
17
|
+
|
|
18
|
+
## Workspace Setup
|
|
19
|
+
|
|
20
|
+
Kiro stores configuration in `.kiro/` at the workspace root:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
.kiro/
|
|
24
|
+
settings/
|
|
25
|
+
mcp.json # MCP server configuration
|
|
26
|
+
steering/ # Steering files (conventions, rules)
|
|
27
|
+
skills/ # Custom skills
|
|
28
|
+
commands/ # Custom commands
|
|
29
|
+
hooks/ # Agent hooks
|
|
30
|
+
specs/ # Feature specs
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Authentication
|
|
34
|
+
|
|
35
|
+
- Sign in with your AWS account or supported identity provider
|
|
36
|
+
- API keys are managed automatically by the IDE
|
|
37
|
+
|
|
38
|
+
## Key Concepts
|
|
39
|
+
|
|
40
|
+
- **Chat**: Interact with the AI agent directly
|
|
41
|
+
- **Specs**: Structured feature development (requirements -> design -> tasks)
|
|
42
|
+
- **Steering**: Project-level instructions that guide the AI
|
|
43
|
+
- **Skills**: Modular capabilities activated by context
|
|
44
|
+
- **Hooks**: Automated actions on IDE events
|
|
45
|
+
- **MCP**: External tool integrations
|