@fredericboyer/dev-team 0.7.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/dist/init.js +19 -0
- package/dist/init.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/package.json +2 -2
- package/templates/CLAUDE.md +2 -1
- package/templates/agents/dev-team-beck.md +11 -6
- package/templates/agents/dev-team-conway.md +12 -7
- package/templates/agents/dev-team-deming.md +9 -4
- package/templates/agents/dev-team-drucker.md +9 -5
- package/templates/agents/dev-team-hamilton.md +8 -4
- package/templates/agents/dev-team-mori.md +8 -4
- package/templates/agents/dev-team-tufte.md +11 -6
- package/templates/agents/dev-team-voss.md +8 -4
- package/templates/hooks/dev-team-pre-commit-gate.js +42 -1
- package/templates/skill-recommendations.json +169 -0
- package/templates/skills/dev-team-review/SKILL.md +3 -1
- package/templates/skills/dev-team-task/SKILL.md +8 -5
package/dist/init.js
CHANGED
|
@@ -42,6 +42,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
42
42
|
const files_js_1 = require("./files.js");
|
|
43
43
|
const prompts = __importStar(require("./prompts.js"));
|
|
44
44
|
const scan_js_1 = require("./scan.js");
|
|
45
|
+
const skill_recommendations_js_1 = require("./skill-recommendations.js");
|
|
45
46
|
const ALL_AGENTS = [
|
|
46
47
|
{ label: "Voss", file: "dev-team-voss.md", description: "Backend Engineer" },
|
|
47
48
|
{
|
|
@@ -370,6 +371,24 @@ async function run(targetDir, flags = []) {
|
|
|
370
371
|
console.log((0, scan_js_1.formatScanReport)(findings));
|
|
371
372
|
console.log("");
|
|
372
373
|
}
|
|
374
|
+
// Step 13: Skill recommendations
|
|
375
|
+
let runSkillScan = isAll || !!preset;
|
|
376
|
+
if (!isAll && !preset) {
|
|
377
|
+
runSkillScan = await prompts.confirm("Scan for recommended Claude Code skills based on your project stack?", true);
|
|
378
|
+
}
|
|
379
|
+
if (runSkillScan) {
|
|
380
|
+
const { recommendations, ecosystems, catalog } = (0, skill_recommendations_js_1.scanSkillRecommendations)(targetDir);
|
|
381
|
+
if (recommendations.length > 0) {
|
|
382
|
+
console.log((0, skill_recommendations_js_1.formatRecommendations)(recommendations, ecosystems, catalog));
|
|
383
|
+
if (!isAll && !preset) {
|
|
384
|
+
console.log(" Install recommended skills from your Claude Code settings or MCP configuration.");
|
|
385
|
+
console.log(" These are suggestions only — skip any that don't apply.\n");
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
else if (ecosystems.length > 0) {
|
|
389
|
+
console.log("Skill scan: no matching skills found for your detected stack.\n");
|
|
390
|
+
}
|
|
391
|
+
}
|
|
373
392
|
console.log("Next steps:");
|
|
374
393
|
console.log(" 1. Review installed agents in .dev-team/agents/");
|
|
375
394
|
console.log(" 2. Customize agent personas and focus areas to fit your project");
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiKA,kBA6PC;AA9ZD,gDAAwB;AACxB,yCAWoB;AAEpB,sDAAwC;AACxC,uCAA0D;AAc1D,MAAM,UAAU,GAAsB;IACpC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE;IAC5E;QACE,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,yBAAyB;KACvC;IACD;QACE,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,sBAAsB;KACpC;IACD;QACE,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,kBAAkB;KAChC;IACD;QACE,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,iBAAiB;KAC/B;IACD,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE;IAC5E;QACE,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,wBAAwB;KACtC;IACD;QACE,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,wBAAwB;KACtC;IACD;QACE,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,WAAW;KACzB;IACD;QACE,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,iBAAiB;KAC/B;IACD;QACE,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,0BAA0B;KACxC;IACD;QACE,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,0CAA0C;KACxD;CACF,CAAC;AA0EgB,gCAAU;AAxE5B,MAAM,aAAa,GAAqB;IACtC;QACE,KAAK,EAAE,iBAAiB;QACxB,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,4CAA4C;KAC1D;IACD;QACE,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,+CAA+C;KAC7D;IACD;QACE,KAAK,EAAE,oBAAoB;QAC3B,IAAI,EAAE,gCAAgC;QACtC,WAAW,EAAE,6CAA6C;KAC3D;IACD;QACE,KAAK,EAAE,iBAAiB;QACxB,IAAI,EAAE,6BAA6B;QACnC,WAAW,EAAE,8DAA8D;KAC5E;IACD;QACE,KAAK,EAAE,iBAAiB;QACxB,IAAI,EAAE,6BAA6B;QACnC,WAAW,EAAE,4CAA4C;KAC1D;IACD;QACE,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,2DAA2D;KACzE;CACF,CAAC;AAyC4B,sCAAa;AAhC3C,MAAM,OAAO,GAAqC;IAChD,OAAO,EAAE;QACP,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,sDAAsD;QACnE,MAAM,EAAE;YACN,MAAM;YACN,UAAU;YACV,OAAO;YACP,OAAO;YACP,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,SAAS;YACT,QAAQ;SACT;QACD,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;KACzC;IACD,SAAS,EAAE;QACT,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,iDAAiD;QAC9D,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACtC,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;KACzC;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,qDAAqD;QAClE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;QAClF,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;KACzC;CACF,CAAC;AAEO,0BAAO;AAEhB;;GAEG;AACI,KAAK,UAAU,GAAG,CAAC,SAAiB,EAAE,QAAkB,EAAE;IAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/D,IAAI,UAA8B,CAAC;IACnC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,mBAAmB,UAAU,gBAAgB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,gCAAgC;IAChC,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAA,oBAAS,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CACT,gBAAgB,IAAA,qBAAU,EAAC,YAAY,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,iBAAiB,EAAE,CACvF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,0BAA0B;IAC1B,IAAI,cAAwB,CAAC;IAC7B,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,MAAM,OAAO,CAAC,QAAQ,CACrC,yCAAyC,EACzC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;YAC/B,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,IAAI,aAAuB,CAAC;IAC5B,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,MAAM,OAAO,CAAC,QAAQ,CACpC,6CAA6C,EAC7C,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,IAAI,YAAoB,CAAC;IACzB,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,YAAY,GAAG,eAAe,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,iCAAiC,EAAE;YACrE,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,+BAA+B,EAAE;YACxE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE;YAChD,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;YACxD,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE;YACxD,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,+BAA+B,EAAE;SAChE,CAAC,CAAC;IACL,CAAC;IAED,mCAAmC;IACnC,IAAI,gBAAwB,CAAC;IAC7B,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,gBAAgB,GAAG,sBAAsB,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,gBAAgB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE;YACnE;gBACE,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EAAE,wDAAwD;aACtE;YACD;gBACE,KAAK,EAAE,kBAAkB;gBACzB,WAAW,EAAE,6DAA6D;aAC3E;YACD,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,8BAA8B,EAAE;SAC/D,CAAC,CAAC;IACL,CAAC;IAED,iEAAiE;IACjE,MAAM,SAAS,GAAG,IAAA,sBAAW,GAAE,CAAC;IAChC,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,SAAS;QAEpD,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,IAAA,qBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,6BAA6B,EAAE,KAAK,CAAC,CAAC;YAC7F,IAAI,CAAC,SAAS;gBAAE,SAAS;QAC3B,CAAC;QAED,IAAA,mBAAQ,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpB,UAAU,EAAE,CAAC;IACf,CAAC;IAED,0CAA0C;IAC1C,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,SAAS;QAEpD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAEhE,IAAI,CAAC,IAAA,qBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,IAAA,mBAAQ,EAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAA,qBAAU,EAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,IAAA,mBAAQ,EAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACxC,CAAC;IAED,qBAAqB;IACrB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QAElD,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,IAAA,qBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,6BAA6B,EAAE,KAAK,CAAC,CAAC;YAC5F,IAAI,CAAC,SAAS;gBAAE,SAAS;QAC3B,CAAC;QAED,IAAA,mBAAQ,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpB,SAAS,EAAE,CAAC;IACd,CAAC;IAED,8BAA8B;IAC9B,MAAM,eAAe,GAAG,IAAA,mBAAQ,EAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,gBAAgB,GAAiB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAEnE,iDAAiD;IACjD,MAAM,gBAAgB,GAAiB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACrD,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CACxF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACd,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,eAAe,GAAkB,OAAO;aAC3C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,GAAG,KAAK;YACR,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACtC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAClE;SACF,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE7C,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC;QAClD,CAAC;IACH,CAAC;IAED,IAAA,wBAAa,EAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAE9C,+DAA+D;IAC/D,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAA,6BAAkB,EAAC,YAAY,CAAC,CAAC;IACnD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,IAAA,qBAAU,EAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YAC/B,IAAA,mBAAQ,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,gBAAgB,GAAG,IAAA,mBAAQ,EAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,YAAY,GAAG,IAAA,wBAAa,EAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAEnE,mBAAmB;IACnB,MAAM,KAAK,GAA4B;QACrC,OAAO,EAAE,IAAA,4BAAiB,GAAE;QAC5B,MAAM,EAAE,cAAc;QACtB,KAAK,EAAE,aAAa;QACpB,YAAY;QACZ,gBAAgB;KACjB,CAAC;IACF,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;IAC9B,CAAC;IACD,IAAA,oBAAS,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAE5D,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU,SAAS,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,gBAAgB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,SAAS,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,gBAAgB,cAAc,CAAC,MAAM,oCAAoC,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CACT,gBAAgB,YAAY,GAAG,gBAAgB,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACtG,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,wCAAwC;IACxC,IAAI,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAC7B,kEAAkE,EAClE,IAAI,CACL,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,IAAA,0BAAgB,EAAC,QAAQ,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACjF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fredericboyer/dev-team",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Adversarial AI agent team for any project — installs Claude Code agents, hooks, and skills that enforce quality through productive friction",
|
|
5
5
|
"main": "dist/init.js",
|
|
6
6
|
"types": "dist/init.d.ts",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"scripts": {
|
|
16
16
|
"build": "tsc",
|
|
17
17
|
"pretest": "npm run build",
|
|
18
|
-
"test": "node --test tests/unit/files.test.js tests/unit/hooks.test.js tests/unit/scan.test.js tests/unit/create-agent.test.js tests/unit/cli.test.js tests/integration/fresh-project.test.js tests/integration/idempotency.test.js tests/integration/update.test.js tests/scenarios/node-project.test.js tests/scenarios/python-project.test.js tests/scenarios/upgrade-path.test.js",
|
|
18
|
+
"test": "node --test tests/unit/files.test.js tests/unit/hooks.test.js tests/unit/scan.test.js tests/unit/skill-recommendations.test.js tests/unit/create-agent.test.js tests/unit/cli.test.js tests/integration/fresh-project.test.js tests/integration/idempotency.test.js tests/integration/update.test.js tests/scenarios/node-project.test.js tests/scenarios/python-project.test.js tests/scenarios/upgrade-path.test.js",
|
|
19
19
|
"test:unit": "node --test tests/unit/files.test.js tests/unit/hooks.test.js",
|
|
20
20
|
"test:integration": "node --test tests/integration/fresh-project.test.js tests/integration/idempotency.test.js",
|
|
21
21
|
"test:scenarios": "node --test tests/scenarios/node-project.test.js tests/scenarios/python-project.test.js tests/scenarios/upgrade-path.test.js",
|
package/templates/CLAUDE.md
CHANGED
|
@@ -68,6 +68,7 @@ Do NOT skip this. Do NOT treat hook output as optional. If you believe a review
|
|
|
68
68
|
- `/dev-team:review` — orchestrated multi-agent parallel review of changes
|
|
69
69
|
- `/dev-team:audit` — full codebase security + quality + tooling audit
|
|
70
70
|
- `/dev-team:merge` — merge a PR with Copilot review handling, auto-merge, CI monitoring, and post-merge actions
|
|
71
|
+
- `/dev-team:security-status` — check code scanning, Dependabot, and secret scanning alerts
|
|
71
72
|
- `/dev-team:assess` — audit knowledge base health (learnings, agent memory, CLAUDE.md)
|
|
72
73
|
|
|
73
74
|
### Learnings — where to write what
|
|
@@ -81,6 +82,6 @@ All project and process learnings MUST go to in-repo files, NOT to machine-local
|
|
|
81
82
|
| Formal architecture decisions | `docs/adr/` | ADR format, not learnings |
|
|
82
83
|
| User-specific preferences only | Machine-local memory | Personal style, name, role — things that vary per person, not per project |
|
|
83
84
|
|
|
84
|
-
When the human gives feedback about process, coding style, or tool behavior: write it to
|
|
85
|
+
When the human gives feedback about process, coding style, or tool behavior: write it to `.dev-team/learnings.md`. Only use machine-local memory for things that are truly personal and would not apply to another developer on the same project.
|
|
85
86
|
|
|
86
87
|
<!-- dev-team:end -->
|
|
@@ -16,8 +16,9 @@ Your philosophy: "Red, green, refactor — in that order, every time."
|
|
|
16
16
|
|
|
17
17
|
Before writing tests:
|
|
18
18
|
1. Spawn Explore subagents in parallel to understand existing test patterns, frameworks, and conventions in the project.
|
|
19
|
-
2.
|
|
20
|
-
3.
|
|
19
|
+
2. **Research current practices** when choosing test frameworks, assertion libraries, or testing patterns. Check current documentation for the test runner and libraries in use — APIs change between versions, new matchers get added, and best practices evolve. Prefer codebase consistency over newer approaches; flag newer alternatives as `[SUGGESTION]` when they do not fit the existing conventions.
|
|
20
|
+
3. If @dev-team-knuth has produced findings, use them as your starting point — they identify the gaps, you fill them.
|
|
21
|
+
4. Return concise summaries to the main thread, not raw exploration output.
|
|
21
22
|
|
|
22
23
|
After completing tests:
|
|
23
24
|
1. Run the tests and report results.
|
|
@@ -69,7 +70,11 @@ After completing work, write key learnings to your MEMORY.md:
|
|
|
69
70
|
|
|
70
71
|
## Learnings Output (mandatory)
|
|
71
72
|
|
|
72
|
-
After completing work, you MUST
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
-
|
|
73
|
+
After completing work, you MUST:
|
|
74
|
+
1. **Write to your MEMORY.md** (`.dev-team/agent-memory/dev-team-beck/MEMORY.md`) with key learnings from this task. The file must contain substantive content — not just headers or boilerplate. Include specific patterns, conventions, calibration notes, or decisions.
|
|
75
|
+
2. **Output a "Learnings" section** in your response summarizing what was written:
|
|
76
|
+
- What was surprising or non-obvious about this task?
|
|
77
|
+
- What should be calibrated for next time? (e.g., assumptions that were wrong, patterns that worked well)
|
|
78
|
+
- Where was this recorded? (`agent memory` for agent-specific calibration / `team learnings` for shared process rules / `ADR` for architectural decisions)
|
|
79
|
+
|
|
80
|
+
If you skip the MEMORY.md write, the pre-commit gate will block the commit and Borges will flag a [DEFECT].
|
|
@@ -16,9 +16,10 @@ Your philosophy: "A release without a changelog is a surprise. A surprise in pro
|
|
|
16
16
|
|
|
17
17
|
Before making release decisions:
|
|
18
18
|
1. Spawn Explore subagents in parallel to inventory changes since the last release — commits, PRs merged, breaking changes, dependency updates.
|
|
19
|
-
2.
|
|
20
|
-
3.
|
|
21
|
-
4.
|
|
19
|
+
2. **Research current practices** when evaluating versioning strategies, changelog formats, or release tooling. Check current documentation for the release tools and package registries in use — publishing APIs, changelog conventions, and CI release workflows evolve. Prefer codebase consistency over newer approaches; flag newer alternatives as `[SUGGESTION]` when they do not fit the existing conventions.
|
|
20
|
+
3. Read package.json/pyproject.toml/Cargo.toml (or equivalent) for the current version.
|
|
21
|
+
4. Check for existing changelogs, release notes, and tagging conventions.
|
|
22
|
+
5. Return concise findings to the main thread.
|
|
22
23
|
|
|
23
24
|
After completing release work:
|
|
24
25
|
1. Verify all prerequisites are met before tagging.
|
|
@@ -68,7 +69,11 @@ After completing work, write key learnings to your MEMORY.md:
|
|
|
68
69
|
|
|
69
70
|
## Learnings Output (mandatory)
|
|
70
71
|
|
|
71
|
-
After completing work, you MUST
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
-
|
|
72
|
+
After completing work, you MUST:
|
|
73
|
+
1. **Write to your MEMORY.md** (`.dev-team/agent-memory/dev-team-conway/MEMORY.md`) with key learnings from this task. The file must contain substantive content — not just headers or boilerplate. Include specific patterns, conventions, calibration notes, or decisions.
|
|
74
|
+
2. **Output a "Learnings" section** in your response summarizing what was written:
|
|
75
|
+
- What was surprising or non-obvious about this task?
|
|
76
|
+
- What should be calibrated for next time? (e.g., assumptions that were wrong, patterns that worked well)
|
|
77
|
+
- Where was this recorded? (`agent memory` for agent-specific calibration / `team learnings` for shared process rules / `ADR` for architectural decisions)
|
|
78
|
+
|
|
79
|
+
If you skip the MEMORY.md write, the pre-commit gate will block the commit and Borges will flag a [DEFECT].
|
|
@@ -41,6 +41,7 @@ You always check for:
|
|
|
41
41
|
- **Onboarding friction**: How fast can a new developer go from clone to productive? Are there undocumented setup steps or missing scripts?
|
|
42
42
|
- **Toolchain bloat**: Is every tool earning its keep? Remove tools that add more cognitive load than they remove.
|
|
43
43
|
- **Portability**: Cross-platform CI coverage, platform-specific behavior detection, and environment portability. A build that only passes on the author's machine is not a build.
|
|
44
|
+
- **Skill recommendations**: Has the project stack changed since the last scan? Detect new frameworks or tools added to dependencies and suggest relevant Claude Code skills from the curated allowlist (`templates/skill-recommendations.json`). Only recommend skills from trusted sources (Anthropic, Vercel, Microsoft, Expo, Prisma, Supabase, and official framework maintainers). Flag skills that were previously recommended but are no longer relevant (e.g., a framework was removed from dependencies).
|
|
44
45
|
|
|
45
46
|
## Challenge style
|
|
46
47
|
|
|
@@ -89,7 +90,11 @@ After completing work, write key learnings to your MEMORY.md:
|
|
|
89
90
|
|
|
90
91
|
## Learnings Output (mandatory)
|
|
91
92
|
|
|
92
|
-
After completing work, you MUST
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
-
|
|
93
|
+
After completing work, you MUST:
|
|
94
|
+
1. **Write to your MEMORY.md** (`.dev-team/agent-memory/dev-team-deming/MEMORY.md`) with key learnings from this task. The file must contain substantive content — not just headers or boilerplate. Include specific patterns, conventions, calibration notes, or decisions.
|
|
95
|
+
2. **Output a "Learnings" section** in your response summarizing what was written:
|
|
96
|
+
- What was surprising or non-obvious about this task?
|
|
97
|
+
- What should be calibrated for next time? (e.g., assumptions that were wrong, patterns that worked well)
|
|
98
|
+
- Where was this recorded? (`agent memory` for agent-specific calibration / `team learnings` for shared process rules / `ADR` for architectural decisions)
|
|
99
|
+
|
|
100
|
+
If you skip the MEMORY.md write, the pre-commit gate will block the commit and Borges will flag a [DEFECT].
|
|
@@ -90,11 +90,15 @@ If the implementing agent disagrees with a reviewer:
|
|
|
90
90
|
### 6. Complete
|
|
91
91
|
|
|
92
92
|
When no `[DEFECT]` findings remain:
|
|
93
|
-
1.
|
|
94
|
-
2.
|
|
95
|
-
3.
|
|
96
|
-
4.
|
|
97
|
-
5.
|
|
93
|
+
1. **Create PR and merge**: If changes are on a feature branch with no PR yet, create the PR (body must include `Closes #<issue>`). Then invoke `/dev-team:merge` to set auto-merge, monitor CI, handle Copilot review comments, and verify the merge completes. Work is NOT done until the PR is merged.
|
|
94
|
+
2. **Clean up worktree**: If the work was done in a worktree, clean it up after the branch is pushed and the PR is created. Do not wait for merge to clean the worktree.
|
|
95
|
+
3. Spawn **@dev-team-borges** (Librarian) to review memory freshness, cross-agent coherence, and system improvement opportunities. This is mandatory — Borges runs at the end of every task.
|
|
96
|
+
4. Summarize what was implemented and what was reviewed.
|
|
97
|
+
5. Report any remaining `[RISK]` or `[SUGGESTION]` items, including Borges's recommendations.
|
|
98
|
+
6. List which agents reviewed and their verdicts.
|
|
99
|
+
7. Write learnings to agent memory files.
|
|
100
|
+
|
|
101
|
+
**Task is complete only when the PR is merged.** If merge fails (CI failures, merge conflicts, branch protection), report the blocker to the human rather than leaving the PR unattended.
|
|
98
102
|
|
|
99
103
|
### Parallel orchestration
|
|
100
104
|
|
|
@@ -71,7 +71,11 @@ After completing work, write key learnings to your MEMORY.md:
|
|
|
71
71
|
|
|
72
72
|
## Learnings Output (mandatory)
|
|
73
73
|
|
|
74
|
-
After completing work, you MUST
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
-
|
|
74
|
+
After completing work, you MUST:
|
|
75
|
+
1. **Write to your MEMORY.md** (`.dev-team/agent-memory/dev-team-hamilton/MEMORY.md`) with key learnings from this task. The file must contain substantive content — not just headers or boilerplate. Include specific patterns, conventions, calibration notes, or decisions.
|
|
76
|
+
2. **Output a "Learnings" section** in your response summarizing what was written:
|
|
77
|
+
- What was surprising or non-obvious about this task?
|
|
78
|
+
- What should be calibrated for next time? (e.g., assumptions that were wrong, patterns that worked well)
|
|
79
|
+
- Where was this recorded? (`agent memory` for agent-specific calibration / `team learnings` for shared process rules / `ADR` for architectural decisions)
|
|
80
|
+
|
|
81
|
+
If you skip the MEMORY.md write, the pre-commit gate will block the commit and Borges will flag a [DEFECT].
|
|
@@ -69,7 +69,11 @@ After completing work, write key learnings to your MEMORY.md:
|
|
|
69
69
|
|
|
70
70
|
## Learnings Output (mandatory)
|
|
71
71
|
|
|
72
|
-
After completing work, you MUST
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
-
|
|
72
|
+
After completing work, you MUST:
|
|
73
|
+
1. **Write to your MEMORY.md** (`.dev-team/agent-memory/dev-team-mori/MEMORY.md`) with key learnings from this task. The file must contain substantive content — not just headers or boilerplate. Include specific patterns, conventions, calibration notes, or decisions.
|
|
74
|
+
2. **Output a "Learnings" section** in your response summarizing what was written:
|
|
75
|
+
- What was surprising or non-obvious about this task?
|
|
76
|
+
- What should be calibrated for next time? (e.g., assumptions that were wrong, patterns that worked well)
|
|
77
|
+
- Where was this recorded? (`agent memory` for agent-specific calibration / `team learnings` for shared process rules / `ADR` for architectural decisions)
|
|
78
|
+
|
|
79
|
+
If you skip the MEMORY.md write, the pre-commit gate will block the commit and Borges will flag a [DEFECT].
|
|
@@ -16,8 +16,9 @@ Your philosophy: "If the docs say one thing and the code does another, both are
|
|
|
16
16
|
|
|
17
17
|
Before reviewing or writing documentation:
|
|
18
18
|
1. Spawn Explore subagents in parallel to map the actual behavior — read the implementation, trace the call graph, run the code if needed.
|
|
19
|
-
2.
|
|
20
|
-
3.
|
|
19
|
+
2. **Research current practices** when recommending documentation tooling, formats, or patterns. Check current documentation standards and toolchain versions — static site generators, API doc generators, and markup formats evolve. Prefer codebase consistency over newer approaches; flag newer alternatives as `[SUGGESTION]` when they do not fit the existing conventions.
|
|
20
|
+
3. Compare actual behavior against existing documentation. Every claim in the docs must be verifiable in the code.
|
|
21
|
+
4. Return concise findings to the main thread with specific file and line references.
|
|
21
22
|
|
|
22
23
|
After completing documentation work:
|
|
23
24
|
1. Report any code behavior that surprised you — if it surprised you, the docs were probably wrong.
|
|
@@ -83,7 +84,11 @@ After completing work, write key learnings to your MEMORY.md:
|
|
|
83
84
|
|
|
84
85
|
## Learnings Output (mandatory)
|
|
85
86
|
|
|
86
|
-
After completing work, you MUST
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
-
|
|
87
|
+
After completing work, you MUST:
|
|
88
|
+
1. **Write to your MEMORY.md** (`.dev-team/agent-memory/dev-team-tufte/MEMORY.md`) with key learnings from this task. The file must contain substantive content — not just headers or boilerplate. Include specific patterns, conventions, calibration notes, or decisions.
|
|
89
|
+
2. **Output a "Learnings" section** in your response summarizing what was written:
|
|
90
|
+
- What was surprising or non-obvious about this task?
|
|
91
|
+
- What should be calibrated for next time? (e.g., assumptions that were wrong, patterns that worked well)
|
|
92
|
+
- Where was this recorded? (`agent memory` for agent-specific calibration / `team learnings` for shared process rules / `ADR` for architectural decisions)
|
|
93
|
+
|
|
94
|
+
If you skip the MEMORY.md write, the pre-commit gate will block the commit and Borges will flag a [DEFECT].
|
|
@@ -69,7 +69,11 @@ After completing work, write key learnings to your MEMORY.md:
|
|
|
69
69
|
|
|
70
70
|
## Learnings Output (mandatory)
|
|
71
71
|
|
|
72
|
-
After completing work, you MUST
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
-
|
|
72
|
+
After completing work, you MUST:
|
|
73
|
+
1. **Write to your MEMORY.md** (`.dev-team/agent-memory/dev-team-voss/MEMORY.md`) with key learnings from this task. The file must contain substantive content — not just headers or boilerplate. Include specific patterns, conventions, calibration notes, or decisions.
|
|
74
|
+
2. **Output a "Learnings" section** in your response summarizing what was written:
|
|
75
|
+
- What was surprising or non-obvious about this task?
|
|
76
|
+
- What should be calibrated for next time? (e.g., assumptions that were wrong, patterns that worked well)
|
|
77
|
+
- Where was this recorded? (`agent memory` for agent-specific calibration / `team learnings` for shared process rules / `ADR` for architectural decisions)
|
|
78
|
+
|
|
79
|
+
If you skip the MEMORY.md write, the pre-commit gate will block the commit and Borges will flag a [DEFECT].
|
|
@@ -88,10 +88,51 @@ const hasImplFiles = files.some(
|
|
|
88
88
|
(f) => /\.(js|ts|jsx|tsx|py|rb|go|java|rs)$/.test(f) && !/\.(test|spec)\./.test(f),
|
|
89
89
|
);
|
|
90
90
|
|
|
91
|
-
const
|
|
91
|
+
const memoryFiles = files.filter(
|
|
92
92
|
(f) => f.endsWith("learnings.md") || /agent-memory\/.*MEMORY\.md$/.test(f),
|
|
93
93
|
);
|
|
94
94
|
|
|
95
|
+
const hasMemoryUpdates = memoryFiles.length > 0;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Check whether a memory file has substantive content beyond boilerplate.
|
|
99
|
+
* Returns true if the file contains at least one non-empty, non-header,
|
|
100
|
+
* non-boilerplate line.
|
|
101
|
+
*/
|
|
102
|
+
function hasSubstantiveContent(filePath) {
|
|
103
|
+
try {
|
|
104
|
+
const absPath = path.join(process.cwd(), filePath);
|
|
105
|
+
// Reject symlinks to avoid reading unintended files
|
|
106
|
+
const stat = fs.lstatSync(absPath);
|
|
107
|
+
if (stat.isSymbolicLink()) return false;
|
|
108
|
+
|
|
109
|
+
const content = fs.readFileSync(absPath, "utf-8");
|
|
110
|
+
const lines = content.split("\n");
|
|
111
|
+
const substantiveLines = lines.filter((line) => {
|
|
112
|
+
const trimmed = line.trim();
|
|
113
|
+
if (!trimmed) return false; // empty line
|
|
114
|
+
if (/^#+\s/.test(trimmed)) return false; // markdown header
|
|
115
|
+
if (trimmed === "---") return false; // horizontal rule / frontmatter delimiter
|
|
116
|
+
return true;
|
|
117
|
+
});
|
|
118
|
+
return substantiveLines.length > 0;
|
|
119
|
+
} catch {
|
|
120
|
+
return false; // file doesn't exist or can't be read — not substantive
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// If memory files are staged, verify they have substantive content
|
|
125
|
+
if (hasMemoryUpdates) {
|
|
126
|
+
const allSubstantive = memoryFiles.every((f) => hasSubstantiveContent(f));
|
|
127
|
+
if (!allSubstantive) {
|
|
128
|
+
console.error(
|
|
129
|
+
"[dev-team pre-commit] BLOCKED: Memory files were staged but contain only boilerplate (headers, empty lines). " +
|
|
130
|
+
"Add substantive content — patterns, conventions, calibration notes, or decisions learned from this work.",
|
|
131
|
+
);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
95
136
|
if (hasImplFiles && !hasMemoryUpdates) {
|
|
96
137
|
// Check for .memory-reviewed override marker
|
|
97
138
|
const markerPath = path.join(process.cwd(), ".dev-team", ".memory-reviewed");
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"description": "Curated allowlist of trusted Claude Code skill sources. Only official framework and tool maintainer skills are included.",
|
|
4
|
+
"trustedSources": [
|
|
5
|
+
"anthropic",
|
|
6
|
+
"vercel",
|
|
7
|
+
"microsoft",
|
|
8
|
+
"expo",
|
|
9
|
+
"prisma",
|
|
10
|
+
"supabase",
|
|
11
|
+
"playwright",
|
|
12
|
+
"vuejs",
|
|
13
|
+
"rust-lang"
|
|
14
|
+
],
|
|
15
|
+
"ecosystems": {
|
|
16
|
+
"node": {
|
|
17
|
+
"detectFiles": ["package.json"],
|
|
18
|
+
"label": "Node.js / JavaScript / TypeScript"
|
|
19
|
+
},
|
|
20
|
+
"python": {
|
|
21
|
+
"detectFiles": ["requirements.txt", "pyproject.toml", "setup.py", "Pipfile", "setup.cfg"],
|
|
22
|
+
"label": "Python"
|
|
23
|
+
},
|
|
24
|
+
"ruby": {
|
|
25
|
+
"detectFiles": ["Gemfile"],
|
|
26
|
+
"label": "Ruby"
|
|
27
|
+
},
|
|
28
|
+
"go": {
|
|
29
|
+
"detectFiles": ["go.mod"],
|
|
30
|
+
"label": "Go"
|
|
31
|
+
},
|
|
32
|
+
"rust": {
|
|
33
|
+
"detectFiles": ["Cargo.toml"],
|
|
34
|
+
"label": "Rust"
|
|
35
|
+
},
|
|
36
|
+
"java": {
|
|
37
|
+
"detectFiles": ["pom.xml", "build.gradle", "build.gradle.kts"],
|
|
38
|
+
"label": "Java / Kotlin"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"skills": [
|
|
42
|
+
{
|
|
43
|
+
"id": "react",
|
|
44
|
+
"name": "React Documentation Lookup",
|
|
45
|
+
"description": "Search React documentation for components, hooks, and patterns",
|
|
46
|
+
"source": "vercel",
|
|
47
|
+
"detectDeps": ["react", "react-dom"],
|
|
48
|
+
"detectFiles": [],
|
|
49
|
+
"ecosystem": "node"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "nextjs",
|
|
53
|
+
"name": "Next.js Documentation Lookup",
|
|
54
|
+
"description": "Search Next.js docs for routing, data fetching, and deployment",
|
|
55
|
+
"source": "vercel",
|
|
56
|
+
"detectDeps": ["next"],
|
|
57
|
+
"detectFiles": ["next.config.js", "next.config.mjs", "next.config.ts"],
|
|
58
|
+
"ecosystem": "node"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "vue",
|
|
62
|
+
"name": "Vue.js Documentation Lookup",
|
|
63
|
+
"description": "Search Vue.js docs for components, composition API, and reactivity",
|
|
64
|
+
"source": "vuejs",
|
|
65
|
+
"detectDeps": ["vue"],
|
|
66
|
+
"detectFiles": ["vue.config.js", "vite.config.ts"],
|
|
67
|
+
"ecosystem": "node"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "expo",
|
|
71
|
+
"name": "Expo Documentation Lookup",
|
|
72
|
+
"description": "Search Expo docs for React Native, EAS Build, and native modules",
|
|
73
|
+
"source": "expo",
|
|
74
|
+
"detectDeps": ["expo"],
|
|
75
|
+
"detectFiles": ["app.json", "app.config.js", "app.config.ts"],
|
|
76
|
+
"ecosystem": "node"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "prisma",
|
|
80
|
+
"name": "Prisma Documentation Lookup",
|
|
81
|
+
"description": "Search Prisma docs for schema modeling, migrations, and client usage",
|
|
82
|
+
"source": "prisma",
|
|
83
|
+
"detectDeps": ["prisma", "@prisma/client"],
|
|
84
|
+
"detectFiles": ["prisma/schema.prisma"],
|
|
85
|
+
"ecosystem": "node"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "supabase",
|
|
89
|
+
"name": "Supabase Documentation Lookup",
|
|
90
|
+
"description": "Search Supabase docs for auth, database, storage, and edge functions",
|
|
91
|
+
"source": "supabase",
|
|
92
|
+
"detectDeps": ["@supabase/supabase-js"],
|
|
93
|
+
"detectFiles": ["supabase/config.toml"],
|
|
94
|
+
"ecosystem": "node"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "playwright",
|
|
98
|
+
"name": "Playwright Test Runner",
|
|
99
|
+
"description": "Search Playwright docs for browser automation, selectors, and test patterns",
|
|
100
|
+
"source": "microsoft",
|
|
101
|
+
"detectDeps": ["@playwright/test", "playwright"],
|
|
102
|
+
"detectFiles": ["playwright.config.ts", "playwright.config.js"],
|
|
103
|
+
"ecosystem": "node"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "angular",
|
|
107
|
+
"name": "Angular Documentation Lookup",
|
|
108
|
+
"description": "Search Angular docs for components, services, and dependency injection",
|
|
109
|
+
"source": "microsoft",
|
|
110
|
+
"detectDeps": ["@angular/core"],
|
|
111
|
+
"detectFiles": ["angular.json"],
|
|
112
|
+
"ecosystem": "node"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "django",
|
|
116
|
+
"name": "Django Documentation Lookup",
|
|
117
|
+
"description": "Search Django docs for models, views, templates, and ORM",
|
|
118
|
+
"source": "anthropic",
|
|
119
|
+
"detectDeps": ["django", "Django"],
|
|
120
|
+
"detectFiles": ["manage.py"],
|
|
121
|
+
"ecosystem": "python"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "fastapi",
|
|
125
|
+
"name": "FastAPI Documentation Lookup",
|
|
126
|
+
"description": "Search FastAPI docs for endpoints, dependency injection, and async patterns",
|
|
127
|
+
"source": "anthropic",
|
|
128
|
+
"detectDeps": ["fastapi"],
|
|
129
|
+
"detectFiles": [],
|
|
130
|
+
"ecosystem": "python"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "flask",
|
|
134
|
+
"name": "Flask Documentation Lookup",
|
|
135
|
+
"description": "Search Flask docs for routing, blueprints, and extensions",
|
|
136
|
+
"source": "anthropic",
|
|
137
|
+
"detectDeps": ["flask", "Flask"],
|
|
138
|
+
"detectFiles": [],
|
|
139
|
+
"ecosystem": "python"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"id": "rails",
|
|
143
|
+
"name": "Ruby on Rails Documentation Lookup",
|
|
144
|
+
"description": "Search Rails docs for ActiveRecord, controllers, and migrations",
|
|
145
|
+
"source": "anthropic",
|
|
146
|
+
"detectDeps": ["rails"],
|
|
147
|
+
"detectFiles": ["config/routes.rb", "bin/rails"],
|
|
148
|
+
"ecosystem": "ruby"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": "rust-analyzer",
|
|
152
|
+
"name": "Rust Documentation Lookup",
|
|
153
|
+
"description": "Search Rust docs for ownership, traits, async, and crate APIs",
|
|
154
|
+
"source": "rust-lang",
|
|
155
|
+
"detectDeps": [],
|
|
156
|
+
"detectFiles": ["Cargo.toml"],
|
|
157
|
+
"ecosystem": "rust"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"id": "spring-boot",
|
|
161
|
+
"name": "Spring Boot Documentation Lookup",
|
|
162
|
+
"description": "Search Spring Boot docs for auto-configuration, REST APIs, and data access",
|
|
163
|
+
"source": "anthropic",
|
|
164
|
+
"detectDeps": ["spring-boot-starter"],
|
|
165
|
+
"detectFiles": [],
|
|
166
|
+
"ecosystem": "java"
|
|
167
|
+
}
|
|
168
|
+
]
|
|
169
|
+
}
|
|
@@ -76,4 +76,6 @@ Before starting the review, check for open security alerts: run `/dev-team:secur
|
|
|
76
76
|
After the review report is delivered:
|
|
77
77
|
1. You MUST spawn **@dev-team-borges** (Librarian) as the final step to review memory freshness and capture any learnings from the review findings. Do NOT skip this.
|
|
78
78
|
2. If Borges was not spawned, the review is INCOMPLETE.
|
|
79
|
-
3.
|
|
79
|
+
3. **Borges memory gate**: If Borges reports that any participating agent's MEMORY.md is empty or contains only boilerplate, this is a **[DEFECT]** that blocks review completion. The agent must write substantive learnings before the review can be marked done.
|
|
80
|
+
4. Include Borges's recommendations in the final report.
|
|
81
|
+
5. **If the verdict is Approve** and this review is for a PR that is ready to merge, invoke `/dev-team:merge` to set auto-merge, monitor CI, and verify the merge completes. The PR lifecycle does not end at approval -- it ends at merge.
|
|
@@ -82,8 +82,11 @@ Before starting work, check for open security alerts: run `/dev-team:security-st
|
|
|
82
82
|
## Completion
|
|
83
83
|
|
|
84
84
|
When the loop exits:
|
|
85
|
-
1.
|
|
86
|
-
2. If
|
|
87
|
-
3.
|
|
88
|
-
4.
|
|
89
|
-
5.
|
|
85
|
+
1. **Create PR and merge**: If changes are on a feature branch, create the PR (body must include `Closes #<issue>`) and invoke `/dev-team:merge` to set auto-merge, monitor CI, handle Copilot review comments, and verify the merge completes. Work is NOT done until the PR is merged. If merge fails (CI failures, merge conflicts, branch protection), report the blocker to the human rather than leaving the PR unattended.
|
|
86
|
+
2. **Clean up worktree**: If the work was done in a worktree, clean it up after the branch is pushed and the PR is created. Do not wait for merge to clean the worktree.
|
|
87
|
+
3. You MUST spawn **@dev-team-borges** (Librarian) as the final step to review memory freshness, cross-agent coherence, and system improvement opportunities. Do NOT skip this.
|
|
88
|
+
4. If Borges was not spawned, the task is INCOMPLETE.
|
|
89
|
+
5. **Borges memory gate**: If Borges reports that any implementing agent's MEMORY.md is empty or contains only boilerplate after a task, this is a **[DEFECT]** that blocks task completion. The implementing agent must write substantive learnings before the task can be marked done. Empty agent memory after a task means the enforcement pipeline failed.
|
|
90
|
+
6. Summarize what was accomplished across all iterations.
|
|
91
|
+
7. Report any remaining `[RISK]` or `[SUGGESTION]` items, including Borges's recommendations.
|
|
92
|
+
8. Write key learnings to agent MEMORY.md files.
|