@devmunna/agent-skillkit 0.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/LICENSE +21 -0
- package/README.md +147 -0
- package/bin/ai-skills.js +5 -0
- package/dist/cli/commands/add.d.ts +2 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +66 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +33 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.d.ts +10 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +145 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/list.d.ts +5 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +55 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/update.d.ts +2 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +49 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +2 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +22 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +49 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/prompts/agent-selector.d.ts +3 -0
- package/dist/cli/prompts/agent-selector.d.ts.map +1 -0
- package/dist/cli/prompts/agent-selector.js +23 -0
- package/dist/cli/prompts/agent-selector.js.map +1 -0
- package/dist/cli/prompts/stack-selector.d.ts +3 -0
- package/dist/cli/prompts/stack-selector.d.ts.map +1 -0
- package/dist/cli/prompts/stack-selector.js +60 -0
- package/dist/cli/prompts/stack-selector.js.map +1 -0
- package/dist/core/config-manager.d.ts +20 -0
- package/dist/core/config-manager.d.ts.map +1 -0
- package/dist/core/config-manager.js +107 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/detector.d.ts +3 -0
- package/dist/core/detector.d.ts.map +1 -0
- package/dist/core/detector.js +50 -0
- package/dist/core/detector.js.map +1 -0
- package/dist/core/doctor.d.ts +12 -0
- package/dist/core/doctor.d.ts.map +1 -0
- package/dist/core/doctor.js +102 -0
- package/dist/core/doctor.js.map +1 -0
- package/dist/core/skill-registry.d.ts +11 -0
- package/dist/core/skill-registry.d.ts.map +1 -0
- package/dist/core/skill-registry.js +174 -0
- package/dist/core/skill-registry.js.map +1 -0
- package/dist/core/skill-resolver.d.ts +3 -0
- package/dist/core/skill-resolver.d.ts.map +1 -0
- package/dist/core/skill-resolver.js +36 -0
- package/dist/core/skill-resolver.js.map +1 -0
- package/dist/core/validator.d.ts +13 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +99 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/generators/agent-installer.d.ts +5 -0
- package/dist/generators/agent-installer.d.ts.map +1 -0
- package/dist/generators/agent-installer.js +20 -0
- package/dist/generators/agent-installer.js.map +1 -0
- package/dist/generators/agents-md.d.ts +3 -0
- package/dist/generators/agents-md.d.ts.map +1 -0
- package/dist/generators/agents-md.js +70 -0
- package/dist/generators/agents-md.js.map +1 -0
- package/dist/generators/claude-md.d.ts +3 -0
- package/dist/generators/claude-md.d.ts.map +1 -0
- package/dist/generators/claude-md.js +47 -0
- package/dist/generators/claude-md.js.map +1 -0
- package/dist/generators/skill-generator.d.ts +5 -0
- package/dist/generators/skill-generator.d.ts.map +1 -0
- package/dist/generators/skill-generator.js +34 -0
- package/dist/generators/skill-generator.js.map +1 -0
- package/dist/generators/workflows.d.ts +3 -0
- package/dist/generators/workflows.d.ts.map +1 -0
- package/dist/generators/workflows.js +57 -0
- package/dist/generators/workflows.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +55 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/file-utils.d.ts +12 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +39 -0
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +11 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +73 -0
- package/skills/clean-architecture/SKILL.md +324 -0
- package/skills/express-mvc-prisma/SKILL.md +168 -0
- package/skills/express-mvc-prisma/references/auth.md +190 -0
- package/skills/express-mvc-prisma/references/boilerplate.md +196 -0
- package/skills/express-mvc-prisma/references/error-handling.md +121 -0
- package/skills/express-mvc-prisma/references/module-scaffold.md +253 -0
- package/skills/express-mvc-prisma/references/prisma-setup.md +97 -0
- package/skills/express-mvc-prisma/references/response-helpers.md +157 -0
- package/skills/express-mvc-prisma/references/zod-validation.md +157 -0
- package/skills/fastify-rest/SKILL.md +287 -0
- package/skills/mongoose-odm/SKILL.md +281 -0
- package/skills/nextjs-fullstack/SKILL.md +328 -0
- package/skills/nextjs-fullstack/references/auth.md +270 -0
- package/skills/nextjs-fullstack/references/caching.md +157 -0
- package/skills/nextjs-fullstack/references/route-handlers.md +194 -0
- package/skills/nextjs-fullstack/references/server-actions.md +214 -0
- package/skills/nextjs-fullstack/references/server-components.md +190 -0
- package/skills/node-base/SKILL.md +139 -0
- package/skills/prisma-orm/SKILL.md +334 -0
- package/skills/react-feature-arch/SKILL.md +208 -0
- package/skills/react-feature-arch/references/api-layer.md +110 -0
- package/skills/react-feature-arch/references/components.md +192 -0
- package/skills/react-feature-arch/references/data-fetching.md +198 -0
- package/skills/react-feature-arch/references/forms.md +194 -0
- package/skills/react-feature-arch/references/routing.md +148 -0
- package/skills/react-feature-arch/references/state-management.md +107 -0
- package/skills/tailwind-css/SKILL.md +236 -0
- package/skills/tailwind-css/references/components.md +340 -0
- package/skills/tailwind-css/references/design-tokens.md +230 -0
- package/skills/tailwind-css/references/patterns.md +375 -0
- package/skills/tailwind-css/references/setup.md +165 -0
- package/skills/zod-validation/SKILL.md +267 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAE7C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,CAAC;IAEf,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,iBAAiB,MAAM,CAAC,QAAQ,cAAc,CAAC,CAAC;QACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,QAAQ,cAAc,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { initCommand } from './commands/init.js';
|
|
3
|
+
import { addCommand } from './commands/add.js';
|
|
4
|
+
import { listCommand } from './commands/list.js';
|
|
5
|
+
import { updateCommand } from './commands/update.js';
|
|
6
|
+
import { validateCommand } from './commands/validate.js';
|
|
7
|
+
import { doctorCommand } from './commands/doctor.js';
|
|
8
|
+
const program = new Command();
|
|
9
|
+
program
|
|
10
|
+
.name('ai-skills')
|
|
11
|
+
.description('Install and manage AI agent development skills for your Node.js project')
|
|
12
|
+
.version('0.1.0');
|
|
13
|
+
program
|
|
14
|
+
.command('init')
|
|
15
|
+
.description('Initialize ai-skills and install skills for your stack')
|
|
16
|
+
.option('-a, --agent <agent>', 'AI agent target: claude or codex', collectOption, [])
|
|
17
|
+
.option('-s, --stack <stack>', 'Stack item to map to skills, such as express or react', collectOption, [])
|
|
18
|
+
.option('--skill <skill>', 'Skill name to install directly', collectOption, [])
|
|
19
|
+
.option('-p, --profile <profile>', 'Skill profile to install')
|
|
20
|
+
.option('-y, --yes', 'Skip confirmation prompts')
|
|
21
|
+
.option('--agents-md', 'Generate AGENTS.md even when Codex is not selected')
|
|
22
|
+
.action((opts) => initCommand(opts));
|
|
23
|
+
program
|
|
24
|
+
.command('add [skills...]')
|
|
25
|
+
.description('Add one or more skills by name, or select interactively')
|
|
26
|
+
.action((skills) => addCommand(skills));
|
|
27
|
+
program
|
|
28
|
+
.command('list')
|
|
29
|
+
.description('List installed skills')
|
|
30
|
+
.option('-a, --available', 'Show all available skills in the registry')
|
|
31
|
+
.option('-p, --profiles', 'Show available skill profiles')
|
|
32
|
+
.action((opts) => listCommand(opts));
|
|
33
|
+
program
|
|
34
|
+
.command('update')
|
|
35
|
+
.description('Refresh installed skills from the current package version')
|
|
36
|
+
.action(() => updateCommand());
|
|
37
|
+
program
|
|
38
|
+
.command('validate')
|
|
39
|
+
.description('Validate the bundled skill catalog and skill files')
|
|
40
|
+
.action(() => validateCommand());
|
|
41
|
+
program
|
|
42
|
+
.command('doctor')
|
|
43
|
+
.description('Inspect the current project ai-skills installation')
|
|
44
|
+
.action(() => doctorCommand());
|
|
45
|
+
program.parse();
|
|
46
|
+
function collectOption(value, previous) {
|
|
47
|
+
return [...previous, ...value.split(',').map((item) => item.trim()).filter(Boolean)];
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,yEAAyE,CAAC;KACtF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,qBAAqB,EAAE,kCAAkC,EAAE,aAAa,EAAE,EAAE,CAAC;KACpF,MAAM,CAAC,qBAAqB,EAAE,uDAAuD,EAAE,aAAa,EAAE,EAAE,CAAC;KACzG,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,EAAE,aAAa,EAAE,EAAE,CAAC;KAC9E,MAAM,CAAC,yBAAyB,EAAE,0BAA0B,CAAC;KAC7D,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;KAChD,MAAM,CAAC,aAAa,EAAE,oDAAoD,CAAC;KAC3E,MAAM,CAAC,CAAC,IAAoB,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvD,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,CAAC,MAAgB,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpD,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,iBAAiB,EAAE,2CAA2C,CAAC;KACtE,MAAM,CAAC,gBAAgB,EAAE,+BAA+B,CAAC;KACzD,MAAM,CAAC,CAAC,IAAiD,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAEpF,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2DAA2D,CAAC;KACxE,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;AAEjC,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;AAEnC,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;AAEjC,OAAO,CAAC,KAAK,EAAE,CAAC;AAWhB,SAAS,aAAa,CAAC,KAAa,EAAE,QAAkB;IACtD,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-selector.d.ts","sourceRoot":"","sources":["../../../src/cli/prompts/agent-selector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAoB9D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as clack from '@clack/prompts';
|
|
2
|
+
export async function selectAgents() {
|
|
3
|
+
const selected = await clack.multiselect({
|
|
4
|
+
message: 'Which AI agent should these skills be installed for?',
|
|
5
|
+
options: [
|
|
6
|
+
{
|
|
7
|
+
value: 'claude',
|
|
8
|
+
label: 'Claude Code',
|
|
9
|
+
hint: 'Installs to .ai-skills/skills and updates CLAUDE.md',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
value: 'codex',
|
|
13
|
+
label: 'Codex',
|
|
14
|
+
hint: 'Installs to .agents/skills for repo-local skill discovery',
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
required: true,
|
|
18
|
+
});
|
|
19
|
+
if (clack.isCancel(selected))
|
|
20
|
+
return null;
|
|
21
|
+
return selected;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=agent-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-selector.js","sourceRoot":"","sources":["../../../src/cli/prompts/agent-selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAGxC,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;QACvC,OAAO,EAAE,sDAAsD;QAC/D,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,aAAa;gBACpB,IAAI,EAAE,qDAAqD;aAC5D;YACD;gBACE,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,2DAA2D;aAClE;SACF;QACD,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,QAAqB,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-selector.d.ts","sourceRoot":"","sources":["../../../src/cli/prompts/stack-selector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,wBAAsB,YAAY,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAyDnE"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as clack from '@clack/prompts';
|
|
2
|
+
export async function selectStacks() {
|
|
3
|
+
const backend = await clack.multiselect({
|
|
4
|
+
message: 'Backend framework',
|
|
5
|
+
options: [
|
|
6
|
+
{ value: 'express', label: 'Express.js', hint: 'MVC + REST API (recommended)' },
|
|
7
|
+
{ value: 'fastify', label: 'Fastify', hint: 'High-performance REST API' },
|
|
8
|
+
{ value: 'node', label: 'Node.js only', hint: 'No framework, raw Node' },
|
|
9
|
+
],
|
|
10
|
+
required: false,
|
|
11
|
+
});
|
|
12
|
+
if (clack.isCancel(backend))
|
|
13
|
+
return null;
|
|
14
|
+
const frontend = await clack.multiselect({
|
|
15
|
+
message: 'Frontend framework',
|
|
16
|
+
options: [
|
|
17
|
+
{ value: 'react', label: 'React', hint: 'Feature-based SPA architecture' },
|
|
18
|
+
{ value: 'nextjs', label: 'Next.js 14+', hint: 'App Router + Server Components' },
|
|
19
|
+
],
|
|
20
|
+
required: false,
|
|
21
|
+
});
|
|
22
|
+
if (clack.isCancel(frontend))
|
|
23
|
+
return null;
|
|
24
|
+
const database = await clack.multiselect({
|
|
25
|
+
message: 'Database / ORM',
|
|
26
|
+
options: [
|
|
27
|
+
{ value: 'prisma', label: 'Prisma', hint: 'PostgreSQL / MySQL / SQLite ORM' },
|
|
28
|
+
{ value: 'mongoose', label: 'Mongoose', hint: 'MongoDB ODM' },
|
|
29
|
+
],
|
|
30
|
+
required: false,
|
|
31
|
+
});
|
|
32
|
+
if (clack.isCancel(database))
|
|
33
|
+
return null;
|
|
34
|
+
const architecture = await clack.multiselect({
|
|
35
|
+
message: 'Architecture patterns',
|
|
36
|
+
options: [
|
|
37
|
+
{ value: 'clean', label: 'Clean Architecture', hint: 'Use cases, entities, adapters' },
|
|
38
|
+
],
|
|
39
|
+
required: false,
|
|
40
|
+
});
|
|
41
|
+
if (clack.isCancel(architecture))
|
|
42
|
+
return null;
|
|
43
|
+
const validation = await clack.multiselect({
|
|
44
|
+
message: 'Validation library',
|
|
45
|
+
options: [
|
|
46
|
+
{ value: 'zod', label: 'Zod', hint: 'TypeScript-first schema validation' },
|
|
47
|
+
],
|
|
48
|
+
required: false,
|
|
49
|
+
});
|
|
50
|
+
if (clack.isCancel(validation))
|
|
51
|
+
return null;
|
|
52
|
+
return {
|
|
53
|
+
backend: backend,
|
|
54
|
+
frontend: frontend,
|
|
55
|
+
database: database,
|
|
56
|
+
architecture: architecture,
|
|
57
|
+
validation: validation,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=stack-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-selector.js","sourceRoot":"","sources":["../../../src/cli/prompts/stack-selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAGxC,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;QACtC,OAAO,EAAE,mBAAmB;QAC5B,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE;YAC/E,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,2BAA2B,EAAE;YACzE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,wBAAwB,EAAE;SACzE;QACD,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;QACvC,OAAO,EAAE,oBAAoB;QAC7B,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,gCAAgC,EAAE;YAC1E,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,gCAAgC,EAAE;SAClF;QACD,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;QACvC,OAAO,EAAE,gBAAgB;QACzB,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,iCAAiC,EAAE;YAC7E,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE;SAC9D;QACD,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;QAC3C,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,+BAA+B,EAAE;SACvF;QACD,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9C,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;QACzC,OAAO,EAAE,oBAAoB;QAC7B,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,oCAAoC,EAAE;SAC3E;QACD,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,OAAO;QACL,OAAO,EAAE,OAAmB;QAC5B,QAAQ,EAAE,QAAoB;QAC9B,QAAQ,EAAE,QAAoB;QAC9B,YAAY,EAAE,YAAwB;QACtC,UAAU,EAAE,UAAsB;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AiAgent, AgentInstallTarget, ProjectConfig } from '../types/index.js';
|
|
2
|
+
export declare class ConfigManager {
|
|
3
|
+
private projectRoot;
|
|
4
|
+
private configDir;
|
|
5
|
+
private configPath;
|
|
6
|
+
constructor(projectRoot?: string);
|
|
7
|
+
exists(): Promise<boolean>;
|
|
8
|
+
read(): Promise<ProjectConfig | null>;
|
|
9
|
+
write(config: ProjectConfig): Promise<void>;
|
|
10
|
+
init(outputDir?: string, agents?: AiAgent[]): Promise<ProjectConfig>;
|
|
11
|
+
addSkill(name: string, version: string): Promise<void>;
|
|
12
|
+
removeSkill(name: string): Promise<void>;
|
|
13
|
+
get skillsOutputDir(): string;
|
|
14
|
+
get agentTargets(): AgentInstallTarget[];
|
|
15
|
+
getInstallTargets(agents: AiAgent[]): AgentInstallTarget[];
|
|
16
|
+
agentTarget(agent: AiAgent): AgentInstallTarget;
|
|
17
|
+
get configDirectory(): string;
|
|
18
|
+
private normalize;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=config-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/core/config-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAkB,MAAM,mBAAmB,CAAC;AAQpG,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;gBAEf,WAAW,GAAE,MAAsB;IAMzC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1B,IAAI,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAMrC,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,IAAI,CAAC,SAAS,GAAE,MAAmB,EAAE,MAAM,GAAE,OAAO,EAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAchG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBtD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,YAAY,IAAI,kBAAkB,EAAE,CAYvC;IAED,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,EAAE;IAK1D,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB;IAM/C,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,OAAO,CAAC,SAAS;CAalB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { readJson, writeJson, pathExists, ensureDir } from '../utils/file-utils.js';
|
|
3
|
+
const CONFIG_DIR = '.ai-skills';
|
|
4
|
+
const CONFIG_FILE = 'config.json';
|
|
5
|
+
const PACKAGE_VERSION = '0.1.0';
|
|
6
|
+
const DEFAULT_AGENTS = ['claude'];
|
|
7
|
+
export class ConfigManager {
|
|
8
|
+
projectRoot;
|
|
9
|
+
configDir;
|
|
10
|
+
configPath;
|
|
11
|
+
constructor(projectRoot = process.cwd()) {
|
|
12
|
+
this.projectRoot = projectRoot;
|
|
13
|
+
this.configDir = path.join(projectRoot, CONFIG_DIR);
|
|
14
|
+
this.configPath = path.join(this.configDir, CONFIG_FILE);
|
|
15
|
+
}
|
|
16
|
+
async exists() {
|
|
17
|
+
return pathExists(this.configPath);
|
|
18
|
+
}
|
|
19
|
+
async read() {
|
|
20
|
+
if (!(await this.exists()))
|
|
21
|
+
return null;
|
|
22
|
+
const config = await readJson(this.configPath);
|
|
23
|
+
return this.normalize(config);
|
|
24
|
+
}
|
|
25
|
+
async write(config) {
|
|
26
|
+
await ensureDir(this.configDir);
|
|
27
|
+
await writeJson(this.configPath, config);
|
|
28
|
+
}
|
|
29
|
+
async init(outputDir = CONFIG_DIR, agents = DEFAULT_AGENTS) {
|
|
30
|
+
const config = {
|
|
31
|
+
version: PACKAGE_VERSION,
|
|
32
|
+
installedSkills: [],
|
|
33
|
+
outputDir,
|
|
34
|
+
claudeMd: agents.includes('claude'),
|
|
35
|
+
agents: [...new Set(agents)],
|
|
36
|
+
createdAt: new Date().toISOString(),
|
|
37
|
+
updatedAt: new Date().toISOString(),
|
|
38
|
+
};
|
|
39
|
+
await this.write(config);
|
|
40
|
+
return config;
|
|
41
|
+
}
|
|
42
|
+
async addSkill(name, version) {
|
|
43
|
+
const config = await this.read();
|
|
44
|
+
if (!config)
|
|
45
|
+
throw new Error('No ai-skills config found. Run `ai-skills init` first.');
|
|
46
|
+
const existing = config.installedSkills.findIndex((s) => s.name === name);
|
|
47
|
+
const entry = { name, version, installedAt: new Date().toISOString() };
|
|
48
|
+
if (existing >= 0) {
|
|
49
|
+
config.installedSkills[existing] = entry;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
config.installedSkills.push(entry);
|
|
53
|
+
}
|
|
54
|
+
config.updatedAt = new Date().toISOString();
|
|
55
|
+
await this.write(config);
|
|
56
|
+
}
|
|
57
|
+
async removeSkill(name) {
|
|
58
|
+
const config = await this.read();
|
|
59
|
+
if (!config)
|
|
60
|
+
return;
|
|
61
|
+
config.installedSkills = config.installedSkills.filter((s) => s.name !== name);
|
|
62
|
+
config.updatedAt = new Date().toISOString();
|
|
63
|
+
await this.write(config);
|
|
64
|
+
}
|
|
65
|
+
get skillsOutputDir() {
|
|
66
|
+
return this.agentTarget('claude').skillsDir;
|
|
67
|
+
}
|
|
68
|
+
get agentTargets() {
|
|
69
|
+
return [
|
|
70
|
+
{
|
|
71
|
+
agent: 'claude',
|
|
72
|
+
skillsDir: path.join(this.projectRoot, CONFIG_DIR, 'skills'),
|
|
73
|
+
contextFile: path.join(this.projectRoot, 'CLAUDE.md'),
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
agent: 'codex',
|
|
77
|
+
skillsDir: path.join(this.projectRoot, '.agents', 'skills'),
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
getInstallTargets(agents) {
|
|
82
|
+
const selected = new Set(agents);
|
|
83
|
+
return this.agentTargets.filter((target) => selected.has(target.agent));
|
|
84
|
+
}
|
|
85
|
+
agentTarget(agent) {
|
|
86
|
+
const target = this.agentTargets.find((item) => item.agent === agent);
|
|
87
|
+
if (!target)
|
|
88
|
+
throw new Error(`Unsupported AI agent: ${agent}`);
|
|
89
|
+
return target;
|
|
90
|
+
}
|
|
91
|
+
get configDirectory() {
|
|
92
|
+
return this.configDir;
|
|
93
|
+
}
|
|
94
|
+
normalize(config) {
|
|
95
|
+
const agents = config.agents?.length
|
|
96
|
+
? [...new Set(config.agents)]
|
|
97
|
+
: config.claudeMd === false
|
|
98
|
+
? []
|
|
99
|
+
: DEFAULT_AGENTS;
|
|
100
|
+
return {
|
|
101
|
+
...config,
|
|
102
|
+
agents,
|
|
103
|
+
claudeMd: agents.includes('claude'),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/core/config-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAmBvD,wBAAsB,WAAW,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,aAAa,CAAC,CAiC7F"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import { mapStackToSkills } from './skill-registry.js';
|
|
4
|
+
const PACKAGE_STACK_MAP = {
|
|
5
|
+
express: ['express'],
|
|
6
|
+
fastify: ['fastify'],
|
|
7
|
+
'@prisma/client': ['prisma'],
|
|
8
|
+
mongoose: ['mongoose'],
|
|
9
|
+
zod: ['zod'],
|
|
10
|
+
react: ['react'],
|
|
11
|
+
'react-dom': ['react'],
|
|
12
|
+
next: ['nextjs'],
|
|
13
|
+
'next-auth': ['nextjs'],
|
|
14
|
+
'@tanstack/react-query': ['react'],
|
|
15
|
+
'@trpc/server': ['node'],
|
|
16
|
+
'@trpc/client': ['react'],
|
|
17
|
+
hono: ['node'],
|
|
18
|
+
};
|
|
19
|
+
export async function detectStack(projectRoot = process.cwd()) {
|
|
20
|
+
const pkgPath = path.join(projectRoot, 'package.json');
|
|
21
|
+
const detectedStacks = [];
|
|
22
|
+
const confidence = {};
|
|
23
|
+
try {
|
|
24
|
+
const pkg = await fs.readJson(pkgPath);
|
|
25
|
+
const deps = {
|
|
26
|
+
...(pkg['dependencies'] ?? {}),
|
|
27
|
+
...(pkg['devDependencies'] ?? {}),
|
|
28
|
+
...(pkg['peerDependencies'] ?? {}),
|
|
29
|
+
};
|
|
30
|
+
for (const [pkgName, stacks] of Object.entries(PACKAGE_STACK_MAP)) {
|
|
31
|
+
if (deps[pkgName]) {
|
|
32
|
+
stacks.forEach((stack) => {
|
|
33
|
+
detectedStacks.push(stack);
|
|
34
|
+
confidence[stack] = (confidence[stack] ?? 0) + 1;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// No package.json or unreadable — silently skip
|
|
41
|
+
}
|
|
42
|
+
const unique = [...new Set(detectedStacks)];
|
|
43
|
+
const suggestedSkills = mapStackToSkills(unique);
|
|
44
|
+
return {
|
|
45
|
+
packages: unique,
|
|
46
|
+
suggestedSkills,
|
|
47
|
+
confidence,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,iBAAiB,GAA6B;IAClD,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,gBAAgB,EAAE,CAAC,QAAQ,CAAC;IAC5B,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,GAAG,EAAE,CAAC,KAAK,CAAC;IACZ,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,WAAW,EAAE,CAAC,OAAO,CAAC;IACtB,IAAI,EAAE,CAAC,QAAQ,CAAC;IAChB,WAAW,EAAE,CAAC,QAAQ,CAAC;IACvB,uBAAuB,EAAE,CAAC,OAAO,CAAC;IAClC,cAAc,EAAE,CAAC,MAAM,CAAC;IACxB,cAAc,EAAE,CAAC,OAAO,CAAC;IACzB,IAAI,EAAE,CAAC,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvD,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,UAAU,GAA2B,EAAE,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAA4B,CAAC;QAClE,MAAM,IAAI,GAA2B;YACnC,GAAG,CAAC,GAAG,CAAC,cAAc,CAA2B,IAAI,EAAE,CAAC;YACxD,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAA2B,IAAI,EAAE,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAA2B,IAAI,EAAE,CAAC;SAC7D,CAAC;QAEF,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAClE,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBACvB,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC3B,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEjD,OAAO;QACL,QAAQ,EAAE,MAAM;QAChB,eAAe;QACf,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type DoctorLevel = 'ok' | 'warning' | 'error' | 'info';
|
|
2
|
+
export interface DoctorFinding {
|
|
3
|
+
level: DoctorLevel;
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
export interface DoctorResult {
|
|
7
|
+
findings: DoctorFinding[];
|
|
8
|
+
errors: number;
|
|
9
|
+
warnings: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function inspectProject(projectRoot?: string): Promise<DoctorResult>;
|
|
12
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/core/doctor.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,cAAc,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6E/F"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import { ConfigManager } from './config-manager.js';
|
|
4
|
+
import { detectStack } from './detector.js';
|
|
5
|
+
import { getSkillMeta } from './skill-registry.js';
|
|
6
|
+
import { workflowNames } from '../generators/workflows.js';
|
|
7
|
+
export async function inspectProject(projectRoot = process.cwd()) {
|
|
8
|
+
const findings = [];
|
|
9
|
+
const configManager = new ConfigManager(projectRoot);
|
|
10
|
+
const config = await configManager.read();
|
|
11
|
+
if (!config) {
|
|
12
|
+
findings.push({ level: 'error', message: 'No ai-skills config found. Run `ai-skills init`.' });
|
|
13
|
+
return summarize(findings);
|
|
14
|
+
}
|
|
15
|
+
findings.push({
|
|
16
|
+
level: 'ok',
|
|
17
|
+
message: `Configured agents: ${config.agents.length ? config.agents.join(', ') : 'none'}`,
|
|
18
|
+
});
|
|
19
|
+
for (const target of configManager.getInstallTargets(config.agents)) {
|
|
20
|
+
if (await fs.pathExists(target.skillsDir)) {
|
|
21
|
+
findings.push({ level: 'ok', message: `${target.agent} skills directory exists: ${relative(projectRoot, target.skillsDir)}` });
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
findings.push({ level: 'error', message: `${target.agent} skills directory missing: ${relative(projectRoot, target.skillsDir)}` });
|
|
25
|
+
}
|
|
26
|
+
for (const skill of config.installedSkills) {
|
|
27
|
+
const skillPath = path.join(target.skillsDir, skill.name, 'SKILL.md');
|
|
28
|
+
if (!(await fs.pathExists(skillPath))) {
|
|
29
|
+
findings.push({
|
|
30
|
+
level: 'error',
|
|
31
|
+
message: `${target.agent} is missing installed skill "${skill.name}" at ${relative(projectRoot, skillPath)}`,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (config.claudeMd && !(await fs.pathExists(path.join(projectRoot, 'CLAUDE.md')))) {
|
|
37
|
+
findings.push({ level: 'warning', message: 'Claude is configured, but CLAUDE.md is missing.' });
|
|
38
|
+
}
|
|
39
|
+
if (config.agents.includes('codex') && !(await fs.pathExists(path.join(projectRoot, 'AGENTS.md')))) {
|
|
40
|
+
findings.push({ level: 'warning', message: 'Codex is configured, but AGENTS.md is missing.' });
|
|
41
|
+
}
|
|
42
|
+
for (const workflow of workflowNames()) {
|
|
43
|
+
const workflowPath = path.join(projectRoot, '.ai-skills', 'workflows', workflow);
|
|
44
|
+
if (!(await fs.pathExists(workflowPath))) {
|
|
45
|
+
findings.push({ level: 'warning', message: `Workflow is missing: ${relative(projectRoot, workflowPath)}` });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const detected = await detectStack(projectRoot);
|
|
49
|
+
if (detected.packages.length > 0) {
|
|
50
|
+
findings.push({ level: 'info', message: `Detected stack: ${detected.packages.join(', ')}` });
|
|
51
|
+
}
|
|
52
|
+
const installed = new Set(config.installedSkills.map((skill) => skill.name));
|
|
53
|
+
const missingSuggested = detected.suggestedSkills.filter((skill) => !installed.has(skill));
|
|
54
|
+
if (missingSuggested.length > 0) {
|
|
55
|
+
findings.push({
|
|
56
|
+
level: 'warning',
|
|
57
|
+
message: `Recommended skills not installed: ${missingSuggested.join(', ')}`,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
for (const skill of config.installedSkills) {
|
|
61
|
+
const meta = getSkillMeta(skill.name);
|
|
62
|
+
if (!meta) {
|
|
63
|
+
findings.push({ level: 'warning', message: `Installed skill is no longer in the package catalog: ${skill.name}` });
|
|
64
|
+
}
|
|
65
|
+
else if (meta.version !== skill.version) {
|
|
66
|
+
findings.push({
|
|
67
|
+
level: 'warning',
|
|
68
|
+
message: `Installed skill "${skill.name}" is v${skill.version}; package has v${meta.version}. Run ai-skills update.`,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
await inspectPackageScripts(projectRoot, findings);
|
|
73
|
+
return summarize(findings);
|
|
74
|
+
}
|
|
75
|
+
async function inspectPackageScripts(projectRoot, findings) {
|
|
76
|
+
const pkgPath = path.join(projectRoot, 'package.json');
|
|
77
|
+
if (!(await fs.pathExists(pkgPath)))
|
|
78
|
+
return;
|
|
79
|
+
const pkg = await fs.readJson(pkgPath);
|
|
80
|
+
const scripts = pkg.scripts ?? {};
|
|
81
|
+
const useful = ['typecheck', 'test', 'lint'].filter((script) => scripts[script]);
|
|
82
|
+
if (useful.length === 0) {
|
|
83
|
+
findings.push({
|
|
84
|
+
level: 'warning',
|
|
85
|
+
message: 'No typecheck/test/lint scripts found. Agents work better with cheap verification commands.',
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
findings.push({ level: 'ok', message: `Verification scripts available: ${useful.join(', ')}` });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function summarize(findings) {
|
|
93
|
+
return {
|
|
94
|
+
findings,
|
|
95
|
+
errors: findings.filter((finding) => finding.level === 'error').length,
|
|
96
|
+
warnings: findings.filter((finding) => finding.level === 'warning').length,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function relative(from, to) {
|
|
100
|
+
return path.relative(from, to) || '.';
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/core/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SkillMeta, SkillCategory, SkillProfile } from '../types/index.js';
|
|
2
|
+
export declare const SKILL_CATALOG: Record<string, SkillMeta>;
|
|
3
|
+
export declare const STACK_SKILL_MAP: Record<string, string[]>;
|
|
4
|
+
export declare const SKILL_PROFILES: Record<string, SkillProfile>;
|
|
5
|
+
export declare function getSkillMeta(name: string): SkillMeta | undefined;
|
|
6
|
+
export declare function getAllSkills(): SkillMeta[];
|
|
7
|
+
export declare function getSkillsByCategory(category: SkillCategory): SkillMeta[];
|
|
8
|
+
export declare function getSkillProfile(name: string): SkillProfile | undefined;
|
|
9
|
+
export declare function getAllProfiles(): SkillProfile[];
|
|
10
|
+
export declare function mapStackToSkills(stackItems: string[]): string[];
|
|
11
|
+
//# sourceMappingURL=skill-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-registry.d.ts","sourceRoot":"","sources":["../../src/core/skill-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEhF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA2FnD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAkBpD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAqCvD,CAAC;AAEF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEhE;AAED,wBAAgB,YAAY,IAAI,SAAS,EAAE,CAE1C;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,SAAS,EAAE,CAExE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEtE;AAED,wBAAgB,cAAc,IAAI,YAAY,EAAE,CAE/C;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAO/D"}
|