agent-skills-standard 2.5.0 → 2.5.1

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 CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  **Sync 242 AI coding standards to any project in one command.** Works with Cursor, Claude Code, GitHub Copilot, Gemini, Windsurf, Trae, Kiro, and Roo.
7
7
 
8
- **Current release:** `v2.4.7` — workflow-end telemetry guidance, MCP session-cost helpers, and clearer runtime integration for SDLC handoff reporting.
8
+ **Current release:** `v2.5.1` — automated SkillSpector security scanning, pull request evaluation gates, and verified release tags.
9
9
 
10
10
  ```bash
11
11
  npx agent-skills-standard@latest init # detect your stack
package/dist/index.js CHANGED
@@ -43,7 +43,7 @@ let child_process = require("child_process");
43
43
  let fs = require("fs");
44
44
  var package_default = {
45
45
  name: "agent-skills-standard",
46
- version: "2.5.0",
46
+ version: "2.5.1",
47
47
  description: "A CLI to manage and sync AI agent skills standard for Cursor, Claude, Copilot, Windsurf, and more.",
48
48
  main: "dist/index.js",
49
49
  bin: {
@@ -342,6 +342,7 @@ var Framework = /* @__PURE__ */ function(Framework) {
342
342
  Framework["Android"] = "android";
343
343
  Framework["iOS"] = "ios";
344
344
  Framework["Laravel"] = "laravel";
345
+ Framework["Python"] = "python";
345
346
  return Framework;
346
347
  }({});
347
348
  //#endregion
@@ -672,7 +673,8 @@ var BACKEND_FRAMEWORKS = [
672
673
  Framework.NestJS,
673
674
  Framework.Golang,
674
675
  Framework.SpringBoot,
675
- Framework.Laravel
676
+ Framework.Laravel,
677
+ Framework.Python
676
678
  ];
677
679
  var FRONTEND_FRAMEWORKS = [
678
680
  Framework.React,
@@ -1007,6 +1009,20 @@ var getFrameworkDefinition = (id) => {
1007
1009
  javascript: ["resources/js", "vite.config.js"]
1008
1010
  }
1009
1011
  };
1012
+ case Framework.Python: return {
1013
+ id,
1014
+ name: "Python",
1015
+ languages: ["python"],
1016
+ detectionFiles: [
1017
+ "pyproject.toml",
1018
+ "requirements.txt",
1019
+ "setup.py",
1020
+ "setup.cfg",
1021
+ "Pipfile",
1022
+ "poetry.lock",
1023
+ "uv.lock"
1024
+ ]
1025
+ };
1010
1026
  }
1011
1027
  };
1012
1028
  var SUPPORTED_AGENTS = Object.values(Agent).map(getAgentDefinition);
@@ -4361,25 +4377,35 @@ var MarkdownUtils = class {
4361
4377
  * @param rootDir Project root directory
4362
4378
  * @param targets Array of target file names
4363
4379
  * @param indexContent The markdown content to inject
4380
+ * @returns Array of target files that were successfully updated/created
4364
4381
  */
4365
4382
  static async injectIndex(rootDir, targets, indexContent) {
4383
+ const updated = [];
4366
4384
  for (const target of targets) {
4367
4385
  const targetPath = path.default.join(rootDir, target);
4368
4386
  let content = "";
4387
+ const markerStart = "<!-- SKILLS_INDEX_START -->";
4388
+ const markerEnd = "<!-- SKILLS_INDEX_END -->";
4369
4389
  if (await fs_extra.default.pathExists(targetPath)) {
4370
4390
  content = await fs_extra.default.readFile(targetPath, "utf8");
4371
- const markerStart = "<!-- SKILLS_INDEX_START -->";
4372
- const markerEnd = "<!-- SKILLS_INDEX_END -->";
4373
4391
  const startIndex = content.indexOf(markerStart);
4374
4392
  const endIndex = content.indexOf(markerEnd);
4375
4393
  if (startIndex !== -1 && endIndex !== -1 && startIndex < endIndex) content = `${content.substring(0, startIndex + 27)}\n${indexContent}\n${content.substring(endIndex)}`;
4376
- else if (startIndex !== -1 || endIndex !== -1) {
4377
- content = content.replace(markerStart, "").replace(markerEnd, "");
4378
- content = content.trimEnd() + `\n\n${markerStart}\n${indexContent}\n${markerEnd}\n`;
4379
- } else content = content.trimEnd() + `\n\n${markerStart}\n${indexContent}\n${markerEnd}\n`;
4380
- } else content = `<!-- SKILLS_INDEX_START -->\n${indexContent}\n<!-- SKILLS_INDEX_END -->\n`;
4394
+ else continue;
4395
+ } else content = [
4396
+ "# Project Context for AI Agents",
4397
+ "",
4398
+ "This file provides context and instructions for AI agents working in this repository.",
4399
+ "",
4400
+ markerStart,
4401
+ indexContent,
4402
+ markerEnd,
4403
+ ""
4404
+ ].join("\n");
4381
4405
  await fs_extra.default.outputFile(targetPath, content);
4406
+ updated.push(target);
4382
4407
  }
4408
+ return updated;
4383
4409
  }
4384
4410
  };
4385
4411
  //#endregion
@@ -4475,13 +4501,11 @@ var SyncService = class {
4475
4501
  if (Object.keys(categoryIndices).length > 0) console.log(picocolors.default.green(` ✅ Generated _INDEX.md for ${Object.keys(categoryIndices).length} categories.`));
4476
4502
  const mcpEnabled = config.mcp?.enabled === true;
4477
4503
  const routerIndex = await generator.assembleRouterIndex(baseDir, allowedCategories, mcpEnabled);
4478
- await MarkdownUtils.injectIndex(process.cwd(), ["AGENTS.md"], routerIndex);
4479
- console.log(picocolors.default.green(" ✅ AGENTS.md router index updated."));
4504
+ if ((await MarkdownUtils.injectIndex(process.cwd(), ["AGENTS.md"], routerIndex)).length > 0) console.log(picocolors.default.green(" ✅ AGENTS.md router index updated."));
4505
+ else console.log(picocolors.default.yellow(" ⚠️ Skipped AGENTS.md update: index markers <!-- SKILLS_INDEX_START --> … <!-- SKILLS_INDEX_END --> are missing or out of order. Opt-in by adding these markers to your file."));
4480
4506
  const serverDir = path.default.join(process.cwd(), "server");
4481
- if (await fs_extra.default.pathExists(serverDir)) {
4482
- await MarkdownUtils.injectIndex(serverDir, ["AGENTS.md"], routerIndex);
4483
- console.log(picocolors.default.green(" ✅ server/AGENTS.md router index updated."));
4484
- }
4507
+ if (await fs_extra.default.pathExists(serverDir)) if ((await MarkdownUtils.injectIndex(serverDir, ["AGENTS.md"], routerIndex)).length > 0) console.log(picocolors.default.green(" ✅ server/AGENTS.md router index updated."));
4508
+ else console.log(picocolors.default.yellow(" ⚠️ Skipped server/AGENTS.md update: index markers <!-- SKILLS_INDEX_START --> … <!-- SKILLS_INDEX_END --> are missing or out of order in server/AGENTS.md. Opt-in via markers."));
4485
4509
  await new AgentBridgeService().bridge(process.cwd(), agents);
4486
4510
  } catch (error) {
4487
4511
  console.log(picocolors.default.yellow(` ⚠️ Failed to update index: ${error}`));