@fredericboyer/dev-team 0.6.0 → 0.8.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 +12 -11
- package/dist/bin/dev-team.js +12 -12
- package/dist/bin/dev-team.js.map +1 -1
- package/dist/create-agent.js +6 -6
- package/dist/create-agent.js.map +1 -1
- package/dist/doctor.js +15 -16
- package/dist/doctor.js.map +1 -1
- package/dist/files.js +2 -0
- package/dist/files.js.map +1 -1
- package/dist/init.js +55 -44
- package/dist/init.js.map +1 -1
- package/dist/scan.js +9 -9
- package/dist/scan.js.map +1 -1
- package/dist/skill-recommendations.d.ts +57 -0
- package/dist/skill-recommendations.js +290 -0
- package/dist/skill-recommendations.js.map +1 -0
- package/dist/status.js +11 -11
- package/dist/status.js.map +1 -1
- package/dist/update.d.ts +1 -4
- package/dist/update.js +178 -59
- package/dist/update.js.map +1 -1
- package/package.json +3 -3
- package/templates/CLAUDE.md +9 -7
- package/templates/agents/dev-team-beck.md +14 -2
- package/templates/agents/dev-team-borges.md +4 -4
- package/templates/agents/dev-team-conway.md +15 -3
- package/templates/agents/dev-team-deming.md +20 -2
- package/templates/agents/dev-team-drucker.md +21 -7
- package/templates/agents/dev-team-hamilton.md +14 -2
- package/templates/agents/dev-team-mori.md +14 -2
- package/templates/agents/dev-team-tufte.md +14 -2
- package/templates/agents/dev-team-voss.md +14 -2
- package/templates/hooks/dev-team-post-change-review.js +1 -25
- package/templates/hooks/dev-team-pre-commit-gate.js +80 -47
- package/templates/hooks/dev-team-watch-list.js +3 -3
- package/templates/settings.json +6 -20
- package/templates/skill-recommendations.json +169 -0
- package/templates/skills/dev-team-assess/SKILL.md +167 -0
- package/templates/skills/dev-team-audit/SKILL.md +8 -3
- package/templates/skills/dev-team-merge/SKILL.md +95 -0
- package/templates/skills/dev-team-review/SKILL.md +11 -4
- package/templates/skills/dev-team-task/SKILL.md +34 -44
- package/dist/parallel.d.ts +0 -127
- package/dist/parallel.js +0 -323
- package/dist/parallel.js.map +0 -1
- package/templates/hooks/dev-team-parallel-loop.js +0 -188
- package/templates/hooks/dev-team-task-loop.js +0 -73
package/dist/scan.js
CHANGED
|
@@ -8,7 +8,7 @@ exports.formatScanReport = formatScanReport;
|
|
|
8
8
|
exports.parseCiScripts = parseCiScripts;
|
|
9
9
|
exports.parseHookCommands = parseHookCommands;
|
|
10
10
|
const path_1 = __importDefault(require("path"));
|
|
11
|
-
const
|
|
11
|
+
const files_js_1 = require("./files.js");
|
|
12
12
|
/**
|
|
13
13
|
* Scans a project directory for existing tooling and identifies gaps.
|
|
14
14
|
* Returns a list of findings with actionable recommendations.
|
|
@@ -29,7 +29,7 @@ function scanProject(targetDir) {
|
|
|
29
29
|
{ file: ".rubocop.yml", tool: "RuboCop" },
|
|
30
30
|
{ file: ".golangci.yml", tool: "golangci-lint" },
|
|
31
31
|
];
|
|
32
|
-
const foundLinter = linters.find((l) => (0,
|
|
32
|
+
const foundLinter = linters.find((l) => (0, files_js_1.fileExists)(path_1.default.join(targetDir, l.file)));
|
|
33
33
|
if (foundLinter) {
|
|
34
34
|
findings.push({
|
|
35
35
|
category: "linter",
|
|
@@ -40,7 +40,7 @@ function scanProject(targetDir) {
|
|
|
40
40
|
}
|
|
41
41
|
else {
|
|
42
42
|
// Check package.json for lint script
|
|
43
|
-
const pkg = (0,
|
|
43
|
+
const pkg = (0, files_js_1.readFile)(path_1.default.join(targetDir, "package.json"));
|
|
44
44
|
if (pkg && pkg.includes('"lint"')) {
|
|
45
45
|
findings.push({
|
|
46
46
|
category: "linter",
|
|
@@ -69,7 +69,7 @@ function scanProject(targetDir) {
|
|
|
69
69
|
{ file: "rustfmt.toml", tool: "rustfmt" },
|
|
70
70
|
{ file: ".clang-format", tool: "clang-format" },
|
|
71
71
|
];
|
|
72
|
-
const foundFormatter = formatters.find((f) => (0,
|
|
72
|
+
const foundFormatter = formatters.find((f) => (0, files_js_1.fileExists)(path_1.default.join(targetDir, f.file)));
|
|
73
73
|
if (foundFormatter) {
|
|
74
74
|
findings.push({
|
|
75
75
|
category: "formatter",
|
|
@@ -96,7 +96,7 @@ function scanProject(targetDir) {
|
|
|
96
96
|
{ file: ".bandit", tool: "Bandit" },
|
|
97
97
|
{ file: ".safety-policy.yml", tool: "Safety" },
|
|
98
98
|
];
|
|
99
|
-
const foundSast = sastConfigs.find((s) => (0,
|
|
99
|
+
const foundSast = sastConfigs.find((s) => (0, files_js_1.fileExists)(path_1.default.join(targetDir, s.file)));
|
|
100
100
|
if (foundSast) {
|
|
101
101
|
findings.push({
|
|
102
102
|
category: "sast",
|
|
@@ -125,7 +125,7 @@ function scanProject(targetDir) {
|
|
|
125
125
|
];
|
|
126
126
|
const foundCi = ciConfigs.find((c) => {
|
|
127
127
|
const fullPath = path_1.default.join(targetDir, c.path);
|
|
128
|
-
return (0,
|
|
128
|
+
return (0, files_js_1.fileExists)(fullPath) || (0, files_js_1.dirExists)(fullPath);
|
|
129
129
|
});
|
|
130
130
|
if (foundCi) {
|
|
131
131
|
findings.push({
|
|
@@ -153,7 +153,7 @@ function scanProject(targetDir) {
|
|
|
153
153
|
{ file: "Cargo.lock", tool: "cargo audit" },
|
|
154
154
|
{ file: "go.sum", tool: "govulncheck" },
|
|
155
155
|
];
|
|
156
|
-
const foundLock = lockFiles.find((l) => (0,
|
|
156
|
+
const foundLock = lockFiles.find((l) => (0, files_js_1.fileExists)(path_1.default.join(targetDir, l.file)));
|
|
157
157
|
if (foundLock) {
|
|
158
158
|
findings.push({
|
|
159
159
|
category: "dependency",
|
|
@@ -246,7 +246,7 @@ function formatScanReport(findings) {
|
|
|
246
246
|
*/
|
|
247
247
|
function parseCiScripts(targetDir) {
|
|
248
248
|
const ciRelevantScripts = ["lint", "format:check", "test", "typecheck", "build"];
|
|
249
|
-
const pkgContent = (0,
|
|
249
|
+
const pkgContent = (0, files_js_1.readFile)(path_1.default.join(targetDir, "package.json"));
|
|
250
250
|
if (!pkgContent)
|
|
251
251
|
return [];
|
|
252
252
|
try {
|
|
@@ -263,7 +263,7 @@ function parseCiScripts(targetDir) {
|
|
|
263
263
|
* Returns an array of command strings found across all hook events.
|
|
264
264
|
*/
|
|
265
265
|
function parseHookCommands(targetDir) {
|
|
266
|
-
const settingsContent = (0,
|
|
266
|
+
const settingsContent = (0, files_js_1.readFile)(path_1.default.join(targetDir, ".claude", "settings.json"));
|
|
267
267
|
if (!settingsContent)
|
|
268
268
|
return [];
|
|
269
269
|
try {
|
package/dist/scan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":";;;;;AAcA,kCA6NC;AAKD,4CA2BC;AAMD,wCAYC;AAMD,8CAyBC;AA5TD,gDAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export interface SkillRecommendation {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
source: string;
|
|
6
|
+
detectedBy: string;
|
|
7
|
+
}
|
|
8
|
+
interface SkillEntry {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
source: string;
|
|
13
|
+
detectDeps: string[];
|
|
14
|
+
detectFiles: string[];
|
|
15
|
+
ecosystem: string;
|
|
16
|
+
}
|
|
17
|
+
interface EcosystemEntry {
|
|
18
|
+
detectFiles: string[];
|
|
19
|
+
label: string;
|
|
20
|
+
}
|
|
21
|
+
interface SkillCatalog {
|
|
22
|
+
ecosystems: Record<string, EcosystemEntry>;
|
|
23
|
+
skills: SkillEntry[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Loads the skill recommendations catalog from templates/.
|
|
27
|
+
*/
|
|
28
|
+
export declare function loadCatalog(): SkillCatalog;
|
|
29
|
+
/**
|
|
30
|
+
* Detects which ecosystems are present in a project directory.
|
|
31
|
+
* Returns an array of ecosystem keys (e.g., ["node", "python"]).
|
|
32
|
+
*/
|
|
33
|
+
export declare function detectEcosystems(targetDir: string, catalog: SkillCatalog): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Parses dependencies from ecosystem-specific manifest files.
|
|
36
|
+
* Returns a set of dependency names found across all detected ecosystems.
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseDependencies(targetDir: string, ecosystems: string[]): Set<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Matches detected project state against the skill catalog.
|
|
41
|
+
* Returns recommended skills with the reason they were detected.
|
|
42
|
+
*/
|
|
43
|
+
export declare function matchSkills(targetDir: string, catalog: SkillCatalog, ecosystems: string[], dependencies: Set<string>): SkillRecommendation[];
|
|
44
|
+
/**
|
|
45
|
+
* Formats skill recommendations as a human-readable report.
|
|
46
|
+
*/
|
|
47
|
+
export declare function formatRecommendations(recommendations: SkillRecommendation[], ecosystems: string[], catalog: SkillCatalog): string;
|
|
48
|
+
/**
|
|
49
|
+
* Full scan: detect ecosystems, parse deps, match skills, return recommendations.
|
|
50
|
+
* This is the main entry point used by init.ts.
|
|
51
|
+
*/
|
|
52
|
+
export declare function scanSkillRecommendations(targetDir: string): {
|
|
53
|
+
recommendations: SkillRecommendation[];
|
|
54
|
+
ecosystems: string[];
|
|
55
|
+
catalog: SkillCatalog;
|
|
56
|
+
};
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadCatalog = loadCatalog;
|
|
7
|
+
exports.detectEcosystems = detectEcosystems;
|
|
8
|
+
exports.parseDependencies = parseDependencies;
|
|
9
|
+
exports.matchSkills = matchSkills;
|
|
10
|
+
exports.formatRecommendations = formatRecommendations;
|
|
11
|
+
exports.scanSkillRecommendations = scanSkillRecommendations;
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const files_js_1 = require("./files.js");
|
|
14
|
+
/**
|
|
15
|
+
* Loads the skill recommendations catalog from templates/.
|
|
16
|
+
*/
|
|
17
|
+
function loadCatalog() {
|
|
18
|
+
const catalogPath = path_1.default.join((0, files_js_1.templateDir)(), "skill-recommendations.json");
|
|
19
|
+
const content = (0, files_js_1.readFile)(catalogPath);
|
|
20
|
+
if (!content) {
|
|
21
|
+
throw new Error("Missing templates/skill-recommendations.json");
|
|
22
|
+
}
|
|
23
|
+
return JSON.parse(content);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Detects which ecosystems are present in a project directory.
|
|
27
|
+
* Returns an array of ecosystem keys (e.g., ["node", "python"]).
|
|
28
|
+
*/
|
|
29
|
+
function detectEcosystems(targetDir, catalog) {
|
|
30
|
+
const detected = [];
|
|
31
|
+
for (const [key, eco] of Object.entries(catalog.ecosystems)) {
|
|
32
|
+
const found = eco.detectFiles.some((f) => (0, files_js_1.fileExists)(path_1.default.join(targetDir, f)));
|
|
33
|
+
if (found) {
|
|
34
|
+
detected.push(key);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return detected;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Parses dependencies from ecosystem-specific manifest files.
|
|
41
|
+
* Returns a set of dependency names found across all detected ecosystems.
|
|
42
|
+
*/
|
|
43
|
+
function parseDependencies(targetDir, ecosystems) {
|
|
44
|
+
const deps = new Set();
|
|
45
|
+
if (ecosystems.includes("node")) {
|
|
46
|
+
parseNodeDeps(targetDir, deps);
|
|
47
|
+
}
|
|
48
|
+
if (ecosystems.includes("python")) {
|
|
49
|
+
parsePythonDeps(targetDir, deps);
|
|
50
|
+
}
|
|
51
|
+
if (ecosystems.includes("ruby")) {
|
|
52
|
+
parseRubyDeps(targetDir, deps);
|
|
53
|
+
}
|
|
54
|
+
if (ecosystems.includes("go")) {
|
|
55
|
+
parseGoDeps(targetDir, deps);
|
|
56
|
+
}
|
|
57
|
+
if (ecosystems.includes("rust")) {
|
|
58
|
+
parseRustDeps(targetDir, deps);
|
|
59
|
+
}
|
|
60
|
+
if (ecosystems.includes("java")) {
|
|
61
|
+
parseJavaDeps(targetDir, deps);
|
|
62
|
+
}
|
|
63
|
+
return deps;
|
|
64
|
+
}
|
|
65
|
+
function parseNodeDeps(targetDir, deps) {
|
|
66
|
+
const content = (0, files_js_1.readFile)(path_1.default.join(targetDir, "package.json"));
|
|
67
|
+
if (!content)
|
|
68
|
+
return;
|
|
69
|
+
try {
|
|
70
|
+
const pkg = JSON.parse(content);
|
|
71
|
+
for (const key of ["dependencies", "devDependencies", "peerDependencies"]) {
|
|
72
|
+
if (pkg[key]) {
|
|
73
|
+
for (const dep of Object.keys(pkg[key])) {
|
|
74
|
+
deps.add(dep);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Invalid JSON — skip
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function parsePythonDeps(targetDir, deps) {
|
|
84
|
+
// requirements.txt
|
|
85
|
+
const reqContent = (0, files_js_1.readFile)(path_1.default.join(targetDir, "requirements.txt"));
|
|
86
|
+
if (reqContent) {
|
|
87
|
+
for (const line of reqContent.split("\n")) {
|
|
88
|
+
const trimmed = line.trim();
|
|
89
|
+
if (trimmed && !trimmed.startsWith("#") && !trimmed.startsWith("-")) {
|
|
90
|
+
// Extract package name before version specifier
|
|
91
|
+
const match = trimmed.match(/^([a-zA-Z0-9_-]+)/);
|
|
92
|
+
if (match) {
|
|
93
|
+
deps.add(match[1].toLowerCase());
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// pyproject.toml — lightweight parsing for [project] dependencies
|
|
99
|
+
const pyprojectContent = (0, files_js_1.readFile)(path_1.default.join(targetDir, "pyproject.toml"));
|
|
100
|
+
if (pyprojectContent) {
|
|
101
|
+
// Match dependencies = ["django>=4.0", "fastapi", ...]
|
|
102
|
+
const depsMatch = pyprojectContent.match(/dependencies\s*=\s*\[([\s\S]*?)\]/);
|
|
103
|
+
if (depsMatch) {
|
|
104
|
+
const entries = depsMatch[1].match(/"([^"]+)"/g);
|
|
105
|
+
if (entries) {
|
|
106
|
+
for (const entry of entries) {
|
|
107
|
+
const name = entry.replace(/"/g, "").match(/^([a-zA-Z0-9_-]+)/);
|
|
108
|
+
if (name) {
|
|
109
|
+
deps.add(name[1].toLowerCase());
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Pipfile — lightweight parsing
|
|
116
|
+
const pipfileContent = (0, files_js_1.readFile)(path_1.default.join(targetDir, "Pipfile"));
|
|
117
|
+
if (pipfileContent) {
|
|
118
|
+
const lines = pipfileContent.split("\n");
|
|
119
|
+
let inPackages = false;
|
|
120
|
+
for (const line of lines) {
|
|
121
|
+
if (line.match(/^\[packages\]/) || line.match(/^\[dev-packages\]/)) {
|
|
122
|
+
inPackages = true;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (line.match(/^\[/) && inPackages) {
|
|
126
|
+
inPackages = false;
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
if (inPackages) {
|
|
130
|
+
const match = line.match(/^([a-zA-Z0-9_-]+)\s*=/);
|
|
131
|
+
if (match) {
|
|
132
|
+
deps.add(match[1].toLowerCase());
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function parseRubyDeps(targetDir, deps) {
|
|
139
|
+
const content = (0, files_js_1.readFile)(path_1.default.join(targetDir, "Gemfile"));
|
|
140
|
+
if (!content)
|
|
141
|
+
return;
|
|
142
|
+
for (const line of content.split("\n")) {
|
|
143
|
+
// Match: gem 'rails', '~> 7.0' or gem "rails"
|
|
144
|
+
const match = line.match(/^\s*gem\s+['"]([a-zA-Z0-9_-]+)['"]/);
|
|
145
|
+
if (match) {
|
|
146
|
+
deps.add(match[1]);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function parseGoDeps(targetDir, deps) {
|
|
151
|
+
const content = (0, files_js_1.readFile)(path_1.default.join(targetDir, "go.mod"));
|
|
152
|
+
if (!content)
|
|
153
|
+
return;
|
|
154
|
+
for (const line of content.split("\n")) {
|
|
155
|
+
const trimmed = line.trim();
|
|
156
|
+
// Match require lines: github.com/foo/bar v1.2.3
|
|
157
|
+
if (trimmed && !trimmed.startsWith("//") && !trimmed.startsWith("module")) {
|
|
158
|
+
const match = trimmed.match(/^([^\s]+)\s+v/);
|
|
159
|
+
if (match) {
|
|
160
|
+
deps.add(match[1]);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function parseRustDeps(targetDir, deps) {
|
|
166
|
+
const content = (0, files_js_1.readFile)(path_1.default.join(targetDir, "Cargo.toml"));
|
|
167
|
+
if (!content)
|
|
168
|
+
return;
|
|
169
|
+
const lines = content.split("\n");
|
|
170
|
+
let inDeps = false;
|
|
171
|
+
for (const line of lines) {
|
|
172
|
+
if (line.match(/^\[dependencies\]/) ||
|
|
173
|
+
line.match(/^\[dev-dependencies\]/) ||
|
|
174
|
+
line.match(/^\[build-dependencies\]/)) {
|
|
175
|
+
inDeps = true;
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (line.match(/^\[/) && inDeps) {
|
|
179
|
+
inDeps = false;
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (inDeps) {
|
|
183
|
+
const match = line.match(/^([a-zA-Z0-9_-]+)\s*=/);
|
|
184
|
+
if (match) {
|
|
185
|
+
deps.add(match[1]);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
function parseJavaDeps(targetDir, deps) {
|
|
191
|
+
// pom.xml — lightweight parsing for artifactId
|
|
192
|
+
const pomContent = (0, files_js_1.readFile)(path_1.default.join(targetDir, "pom.xml"));
|
|
193
|
+
if (pomContent) {
|
|
194
|
+
const matches = pomContent.match(/<artifactId>([^<]+)<\/artifactId>/g);
|
|
195
|
+
if (matches) {
|
|
196
|
+
for (const match of matches) {
|
|
197
|
+
const name = match.replace(/<\/?artifactId>/g, "");
|
|
198
|
+
deps.add(name);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// build.gradle — lightweight parsing for implementation/api deps
|
|
203
|
+
for (const gradleFile of ["build.gradle", "build.gradle.kts"]) {
|
|
204
|
+
const gradleContent = (0, files_js_1.readFile)(path_1.default.join(targetDir, gradleFile));
|
|
205
|
+
if (gradleContent) {
|
|
206
|
+
// Match: implementation 'group:artifact:version' or implementation("group:artifact:version")
|
|
207
|
+
const matches = gradleContent.match(/(?:implementation|api|compileOnly|testImplementation)\s*[("']+([^"')]+)/g);
|
|
208
|
+
if (matches) {
|
|
209
|
+
for (const match of matches) {
|
|
210
|
+
const depStr = match.replace(/(?:implementation|api|compileOnly|testImplementation)\s*[("']+/, "");
|
|
211
|
+
const parts = depStr.split(":");
|
|
212
|
+
if (parts.length >= 2) {
|
|
213
|
+
deps.add(parts[1]); // artifactId
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Matches detected project state against the skill catalog.
|
|
222
|
+
* Returns recommended skills with the reason they were detected.
|
|
223
|
+
*/
|
|
224
|
+
function matchSkills(targetDir, catalog, ecosystems, dependencies) {
|
|
225
|
+
const recommendations = [];
|
|
226
|
+
for (const skill of catalog.skills) {
|
|
227
|
+
// Skip if ecosystem doesn't match
|
|
228
|
+
if (!ecosystems.includes(skill.ecosystem)) {
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
// Check dependency matches
|
|
232
|
+
const depMatch = skill.detectDeps.find((dep) => dependencies.has(dep));
|
|
233
|
+
if (depMatch) {
|
|
234
|
+
recommendations.push({
|
|
235
|
+
id: skill.id,
|
|
236
|
+
name: skill.name,
|
|
237
|
+
description: skill.description,
|
|
238
|
+
source: skill.source,
|
|
239
|
+
detectedBy: `dependency: ${depMatch}`,
|
|
240
|
+
});
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
// Check file matches
|
|
244
|
+
const fileMatch = skill.detectFiles.find((f) => (0, files_js_1.fileExists)(path_1.default.join(targetDir, f)));
|
|
245
|
+
if (fileMatch) {
|
|
246
|
+
recommendations.push({
|
|
247
|
+
id: skill.id,
|
|
248
|
+
name: skill.name,
|
|
249
|
+
description: skill.description,
|
|
250
|
+
source: skill.source,
|
|
251
|
+
detectedBy: `file: ${fileMatch}`,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return recommendations;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Formats skill recommendations as a human-readable report.
|
|
259
|
+
*/
|
|
260
|
+
function formatRecommendations(recommendations, ecosystems, catalog) {
|
|
261
|
+
const lines = [];
|
|
262
|
+
lines.push("Skill recommendations\n");
|
|
263
|
+
if (ecosystems.length > 0) {
|
|
264
|
+
const ecoLabels = ecosystems.map((e) => catalog.ecosystems[e]?.label || e).join(", ");
|
|
265
|
+
lines.push(` Detected stack: ${ecoLabels}\n`);
|
|
266
|
+
}
|
|
267
|
+
if (recommendations.length === 0) {
|
|
268
|
+
lines.push(" No matching skills found for your project's dependencies.");
|
|
269
|
+
return lines.join("\n");
|
|
270
|
+
}
|
|
271
|
+
for (const rec of recommendations) {
|
|
272
|
+
lines.push(` [SKILL] ${rec.name}`);
|
|
273
|
+
lines.push(` ${rec.description}`);
|
|
274
|
+
lines.push(` Source: ${rec.source} | Detected via ${rec.detectedBy}`);
|
|
275
|
+
lines.push("");
|
|
276
|
+
}
|
|
277
|
+
return lines.join("\n");
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Full scan: detect ecosystems, parse deps, match skills, return recommendations.
|
|
281
|
+
* This is the main entry point used by init.ts.
|
|
282
|
+
*/
|
|
283
|
+
function scanSkillRecommendations(targetDir) {
|
|
284
|
+
const catalog = loadCatalog();
|
|
285
|
+
const ecosystems = detectEcosystems(targetDir, catalog);
|
|
286
|
+
const dependencies = parseDependencies(targetDir, ecosystems);
|
|
287
|
+
const recommendations = matchSkills(targetDir, catalog, ecosystems, dependencies);
|
|
288
|
+
return { recommendations, ecosystems, catalog };
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=skill-recommendations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-recommendations.js","sourceRoot":"","sources":["../src/skill-recommendations.ts"],"names":[],"mappings":"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"}
|
package/dist/status.js
CHANGED
|
@@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.status = status;
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
|
-
const
|
|
9
|
+
const files_js_1 = require("./files.js");
|
|
10
10
|
function status(targetDir) {
|
|
11
|
-
const
|
|
12
|
-
const prefsPath = path_1.default.join(
|
|
13
|
-
const prefsContent = (0,
|
|
11
|
+
const devTeamDir = path_1.default.join(targetDir, ".dev-team");
|
|
12
|
+
const prefsPath = path_1.default.join(devTeamDir, "config.json");
|
|
13
|
+
const prefsContent = (0, files_js_1.readFile)(prefsPath);
|
|
14
14
|
if (!prefsContent) {
|
|
15
15
|
console.error("Not a dev-team project. Run `npx dev-team init` first.");
|
|
16
16
|
process.exit(1);
|
|
@@ -20,7 +20,7 @@ function status(targetDir) {
|
|
|
20
20
|
prefs = JSON.parse(prefsContent);
|
|
21
21
|
}
|
|
22
22
|
catch {
|
|
23
|
-
console.error("
|
|
23
|
+
console.error("config.json is corrupted.");
|
|
24
24
|
process.exit(1);
|
|
25
25
|
}
|
|
26
26
|
console.log("\ndev-team status\n");
|
|
@@ -36,8 +36,8 @@ function status(targetDir) {
|
|
|
36
36
|
const hooks = prefs.hooks || [];
|
|
37
37
|
console.log(` Hooks: ${hooks.join(", ")} (${hooks.length})`);
|
|
38
38
|
// Skills (auto-discovered)
|
|
39
|
-
const skillsDir = path_1.default.join(
|
|
40
|
-
const skills = (0,
|
|
39
|
+
const skillsDir = path_1.default.join(devTeamDir, "skills");
|
|
40
|
+
const skills = (0, files_js_1.listSubdirectories)(skillsDir).map((s) => s.replace("dev-team-", ""));
|
|
41
41
|
console.log(` Skills: ${skills.length > 0 ? skills.join(", ") : "none"} (${skills.length})`);
|
|
42
42
|
// Workflow
|
|
43
43
|
if (prefs.issueTracker) {
|
|
@@ -48,11 +48,11 @@ function status(targetDir) {
|
|
|
48
48
|
}
|
|
49
49
|
// Memory status
|
|
50
50
|
console.log("\n Memory:");
|
|
51
|
-
const memoryDir = path_1.default.join(
|
|
51
|
+
const memoryDir = path_1.default.join(devTeamDir, "agent-memory");
|
|
52
52
|
for (const label of agents) {
|
|
53
53
|
const dirName = `dev-team-${label.toLowerCase()}`;
|
|
54
54
|
const memPath = path_1.default.join(memoryDir, dirName, "MEMORY.md");
|
|
55
|
-
if ((0,
|
|
55
|
+
if ((0, files_js_1.fileExists)(memPath)) {
|
|
56
56
|
try {
|
|
57
57
|
const stat = fs_1.default.statSync(memPath);
|
|
58
58
|
const hasContent = stat.size > 200; // Template is ~200 bytes
|
|
@@ -67,8 +67,8 @@ function status(targetDir) {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
// Shared learnings
|
|
70
|
-
const learningsPath = path_1.default.join(
|
|
71
|
-
if ((0,
|
|
70
|
+
const learningsPath = path_1.default.join(devTeamDir, "learnings.md");
|
|
71
|
+
if ((0, files_js_1.fileExists)(learningsPath)) {
|
|
72
72
|
try {
|
|
73
73
|
const stat = fs_1.default.statSync(learningsPath);
|
|
74
74
|
console.log(` Shared learnings: ${stat.size > 300 ? "has content" : "template only"}`);
|
package/dist/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":";;;;;AAIA,wBA8EC;AAlFD,gDAAwB;AACxB,4CAAoB;AACpB,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
|
package/dist/update.d.ts
CHANGED
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Update flow: upgrades installed agents, hooks, and skills to latest templates.
|
|
3
|
-
* Preserves user customizations in CLAUDE.md and agent memory files.
|
|
4
|
-
*/
|
|
1
|
+
export declare function compareSemver(a: string, b: string): number;
|
|
5
2
|
export declare function update(targetDir: string): Promise<void>;
|