@agentlee5/agent-skills 1.0.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/.leeway/config.json +133 -0
- package/LICENSE +21 -0
- package/LeeWay-Standards/LICENSE +21 -0
- package/LeeWay-Standards/README.md +324 -0
- package/LeeWay-Standards/examples/NexusButton.tsx +90 -0
- package/LeeWay-Standards/examples/example-agent.js +89 -0
- package/LeeWay-Standards/package.json +61 -0
- package/LeeWay-Standards/schemas/leeway-config.schema.json +81 -0
- package/LeeWay-Standards/schemas/leeway-header.schema.json +63 -0
- package/LeeWay-Standards/src/agents/discovery/architecture-map-agent.js +134 -0
- package/LeeWay-Standards/src/agents/discovery/docs-agent.js +126 -0
- package/LeeWay-Standards/src/agents/discovery/explain-agent.js +95 -0
- package/LeeWay-Standards/src/agents/discovery/intent-registry-agent.js +119 -0
- package/LeeWay-Standards/src/agents/discovery/schema-agent.js +116 -0
- package/LeeWay-Standards/src/agents/discovery/sitemap-agent.js +88 -0
- package/LeeWay-Standards/src/agents/governance/align-agent.js +155 -0
- package/LeeWay-Standards/src/agents/governance/assess-agent.js +161 -0
- package/LeeWay-Standards/src/agents/governance/audit-agent.js +185 -0
- package/LeeWay-Standards/src/agents/integrity/circular-dependency-agent.js +88 -0
- package/LeeWay-Standards/src/agents/integrity/dependency-graph-agent.js +107 -0
- package/LeeWay-Standards/src/agents/integrity/duplicate-logic-agent.js +108 -0
- package/LeeWay-Standards/src/agents/integrity/import-agent.js +83 -0
- package/LeeWay-Standards/src/agents/integrity/module-policy-agent.js +94 -0
- package/LeeWay-Standards/src/agents/integrity/refactor-scan-agent.js +113 -0
- package/LeeWay-Standards/src/agents/integrity/syntax-agent.js +84 -0
- package/LeeWay-Standards/src/agents/mcp/endpoint-agent.js +106 -0
- package/LeeWay-Standards/src/agents/mcp/env-agent.js +111 -0
- package/LeeWay-Standards/src/agents/mcp/health-agent-lite.js +119 -0
- package/LeeWay-Standards/src/agents/mcp/manifest-agent.js +87 -0
- package/LeeWay-Standards/src/agents/mcp/port-agent.js +125 -0
- package/LeeWay-Standards/src/agents/mcp/process-agent.js +124 -0
- package/LeeWay-Standards/src/agents/mcp/runtime-agent.js +108 -0
- package/LeeWay-Standards/src/agents/mcp/transport-agent.js +78 -0
- package/LeeWay-Standards/src/agents/orchestration/doctor-agent.js +149 -0
- package/LeeWay-Standards/src/agents/orchestration/memory-agent-lite.js +125 -0
- package/LeeWay-Standards/src/agents/orchestration/router-agent.js +110 -0
- package/LeeWay-Standards/src/agents/security/permission-agent.js +98 -0
- package/LeeWay-Standards/src/agents/security/policy-agent.js +100 -0
- package/LeeWay-Standards/src/agents/security/privacy-agent.js +83 -0
- package/LeeWay-Standards/src/agents/security/prompt-security-agent.js +103 -0
- package/LeeWay-Standards/src/agents/security/secret-scan-agent.js +108 -0
- package/LeeWay-Standards/src/agents/security/tool-access-agent.js +105 -0
- package/LeeWay-Standards/src/agents/standards/authority-agent.js +114 -0
- package/LeeWay-Standards/src/agents/standards/discovery-pipeline-agent.js +91 -0
- package/LeeWay-Standards/src/agents/standards/header-agent.js +120 -0
- package/LeeWay-Standards/src/agents/standards/placement-agent.js +96 -0
- package/LeeWay-Standards/src/agents/standards/region-agent.js +99 -0
- package/LeeWay-Standards/src/agents/standards/registry-agent.js +153 -0
- package/LeeWay-Standards/src/agents/standards/tag-agent.js +111 -0
- package/LeeWay-Standards/src/cli/leeway.js +225 -0
- package/LeeWay-Standards/src/core/compliance-scorer.js +168 -0
- package/LeeWay-Standards/src/core/compliance-scorer.test.js +121 -0
- package/LeeWay-Standards/src/core/header-parser.js +207 -0
- package/LeeWay-Standards/src/core/header-parser.test.js +198 -0
- package/LeeWay-Standards/src/core/region-classifier.js +137 -0
- package/LeeWay-Standards/src/core/region-classifier.test.js +100 -0
- package/LeeWay-Standards/src/core/tag-validator.js +139 -0
- package/LeeWay-Standards/src/core/tag-validator.test.js +109 -0
- package/LeeWay-Standards/src/index.js +83 -0
- package/README.md +217 -0
- package/agent-config.yaml +456 -0
- package/agentbage.png.png +0 -0
- package/bin/leeway-skills-badge.js +52 -0
- package/bin/leeway-skills-mcp.js +48 -0
- package/bin/leeway-skills.js +160 -0
- package/bin/leeway-standards.js +49 -0
- package/config/.skillsignore +63 -0
- package/config/skills-config.json +70 -0
- package/documents/AGENT_LEARNING_REFERENCE.md +329 -0
- package/documents/AGENT_LEE_INTEGRATION.md +534 -0
- package/documents/COMPLETE_SYSTEM_OVERVIEW.md +502 -0
- package/documents/COMPREHENSIVE_SKILL_INTEGRATION_PLAN.md +644 -0
- package/documents/DIRECTORY_MAP.md +323 -0
- package/documents/EXTENDING.md +514 -0
- package/documents/FILE_DIRECTORY_GUIDE.md +427 -0
- package/documents/LEEWAY_BADGE_INTEGRATION.md +76 -0
- package/documents/LEEWAY_IMPLEMENTATION_SUMMARY.md +384 -0
- package/documents/LEEWAY_INTEGRATION_GUIDE.md +414 -0
- package/documents/LEEWAY_NPM_SDK.md +66 -0
- package/documents/LEEWAY_QUICK_START.md +288 -0
- package/documents/LEEWAY_SKILLS_BRANDING.md +375 -0
- package/documents/LEEWAY_SKILLS_MCP_SUMMARY.md +593 -0
- package/documents/LEEWAY_STANDARDS_COMPLIANCE.md +361 -0
- package/documents/LEEWAY_UNIFIED_ARCHITECTURE.md +473 -0
- package/documents/LEEWAY_WORKFLOWS_QUICK_REFERENCE.md +307 -0
- package/documents/LEEWAY_WORKFLOWS_STRATEGIC_PLAN.md +515 -0
- package/documents/LIFELONG_LEARNING_LAYER.md +478 -0
- package/documents/MCP_ARCHITECTURE.md +683 -0
- package/documents/QUICK_REFERENCE.md +301 -0
- package/documents/SETUP.md +325 -0
- package/documents/SETUP_SUMMARY.md +413 -0
- package/documents/SKILL_ACQUISITION_EXECUTIVE_SUMMARY.md +373 -0
- package/documents/SKILL_ACQUISITION_IMPLEMENTATION.md +692 -0
- package/documents/SKILL_ACQUISITION_MANIFEST.md +404 -0
- package/documents/SKILL_ACQUISITION_QUICK_REFERENCE.md +349 -0
- package/documents/SKILL_WORKFLOW_COMPOSITION_MATRIX.md +537 -0
- package/documents/STRUCTURE.md +382 -0
- package/documents/SYSTEM_TRANSFORMATION_SUMMARY.md +560 -0
- package/documents/USAGE.md +390 -0
- package/documents/WORKFLOW_ACQUISITION_MANIFEST.md +576 -0
- package/documents/aiskills.txt +460 -0
- package/mcp-server/README.md +697 -0
- package/mcp-server/dist/badge-proof.d.ts +66 -0
- package/mcp-server/dist/badge-proof.d.ts.map +1 -0
- package/mcp-server/dist/badge-proof.js +324 -0
- package/mcp-server/dist/badge-proof.js.map +1 -0
- package/mcp-server/dist/index.d.ts +64 -0
- package/mcp-server/dist/index.d.ts.map +1 -0
- package/mcp-server/dist/index.js +263 -0
- package/mcp-server/dist/index.js.map +1 -0
- package/mcp-server/dist/install-badge-proof.d.ts +3 -0
- package/mcp-server/dist/install-badge-proof.d.ts.map +1 -0
- package/mcp-server/dist/install-badge-proof.js +109 -0
- package/mcp-server/dist/install-badge-proof.js.map +1 -0
- package/mcp-server/package.json +43 -0
- package/mcp-server/src/badge-proof.ts +469 -0
- package/mcp-server/src/index.ts +355 -0
- package/mcp-server/src/install-badge-proof.ts +132 -0
- package/mcp-server/tsconfig.json +22 -0
- package/package.json +84 -0
- package/scripts/init-leeway.js +217 -0
- package/scripts/leeway-agents/compliance-monitor.js +374 -0
- package/scripts/leeway-agents/header-injector.js +321 -0
- package/scripts/skill-integration-toolkit.py +319 -0
- package/scripts/skills-registry.json +1117 -0
- package/scripts/sync-skills.ps1 +275 -0
- package/scripts/verify-leeway-setup.js +249 -0
- package/scripts/workflow-integration-toolkit.py +522 -0
- package/sdk/application-installer.js +92 -0
- package/sdk/index.js +43 -0
- package/sdk/paths.js +167 -0
- package/skills/agent-autonomy/autonomous-conductor/SKILL.md +206 -0
- package/skills/agent-autonomy/full-stack-delivery/SKILL.md +206 -0
- package/skills/agent-orchestration/multi-agent-orchestration/SKILL.md +68 -0
- package/skills/agent-patterns/agent-design-patterns/SKILL.md +70 -0
- package/skills/ai-ml/llm-prompting/SKILL.md +71 -0
- package/skills/ai-ml/ml-model-development/SKILL.md +67 -0
- package/skills/ai-ml/multimodal-systems/SKILL.md +71 -0
- package/skills/ai-ml/retrieval-generation-fine-tuning/SKILL.md +71 -0
- package/skills/architecture/system-design/SKILL.md +67 -0
- package/skills/code-analysis/refactoring/SKILL.md +64 -0
- package/skills/code-analysis/security-vulnerability-scanning/SKILL.md +71 -0
- package/skills/code-analysis/static-analysis/SKILL.md +64 -0
- package/skills/code-generation/full-stack-application/SKILL.md +70 -0
- package/skills/code-generation/microservices-architecture/SKILL.md +71 -0
- package/skills/code-generation/python-codegen/SKILL.md +64 -0
- package/skills/code-generation/typescript-codegen/SKILL.md +64 -0
- package/skills/data-analysis/advanced-analytics/SKILL.md +71 -0
- package/skills/data-analysis/pandas-analysis/SKILL.md +66 -0
- package/skills/database-design/database-design-optimization/SKILL.md +70 -0
- package/skills/debugging/javascript-debugging/SKILL.md +67 -0
- package/skills/debugging/python-debugging/SKILL.md +67 -0
- package/skills/devops/dockerfile-creation/SKILL.md +64 -0
- package/skills/devops/kubernetes-deployment/SKILL.md +65 -0
- package/skills/documentation/api-documentation/SKILL.md +67 -0
- package/skills/error-handling/resilience-patterns/SKILL.md +70 -0
- package/skills/git-workflow/git-collaboration/SKILL.md +67 -0
- package/skills/infrastructure/cicd-pipelines/SKILL.md +70 -0
- package/skills/infrastructure/infrastructure-as-code/SKILL.md +70 -0
- package/skills/observability/monitoring-and-observability/SKILL.md +70 -0
- package/skills/performance-optimization/performance-engineering/SKILL.md +70 -0
- package/skills/prompt-optimization/prompt-engineering-advanced/SKILL.md +70 -0
- package/skills/quality-assurance/deployment-validator/SKILL.md +382 -0
- package/skills/quality-assurance/web-security-sweep/SKILL.md +320 -0
- package/skills/rag-knowledge/rag-systems/SKILL.md +70 -0
- package/skills/research/knowledge-synthesis/SKILL.md +71 -0
- package/skills/security/authentication-authorization/SKILL.md +71 -0
- package/skills/security/code-security/SKILL.md +66 -0
- package/skills/security/secure-architecture/SKILL.md +71 -0
- package/skills/self-optimization/dev-loop-optimizer/SKILL.md +344 -0
- package/skills/self-optimization/memory-learning/SKILL.md +335 -0
- package/skills/self-optimization/runtime-self-profiling/SKILL.md +250 -0
- package/skills/testing/advanced-testing-strategies/SKILL.md +71 -0
- package/skills/testing/integration-testing/SKILL.md +66 -0
- package/skills/testing/load-testing-capacity/SKILL.md +71 -0
- package/skills/testing/unit-testing/SKILL.md +66 -0
- package/skills/tool-integration/custom-tool-creation/SKILL.md +70 -0
- package/skills/web-development/advanced-frontend-patterns/SKILL.md +71 -0
- package/skills/web-development/api-design/SKILL.md +71 -0
- package/skills/web-development/css-styling/SKILL.md +67 -0
- package/skills/web-development/react-development/SKILL.md +79 -0
- package/skills/workflow-composition/workflow-orchestration/SKILL.md +70 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
interface CreateProofOptions {
|
|
3
|
+
appName?: string;
|
|
4
|
+
appVersion?: string;
|
|
5
|
+
appUrl?: string;
|
|
6
|
+
integrationMethod?: string;
|
|
7
|
+
badgeLabel?: string;
|
|
8
|
+
badgeAssetPath?: string;
|
|
9
|
+
registryPath?: string;
|
|
10
|
+
skillsRoot?: string;
|
|
11
|
+
badgeSourcePath?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface InstallBadgeBundleOptions extends CreateProofOptions {
|
|
14
|
+
targetDir: string;
|
|
15
|
+
assetDirName?: string;
|
|
16
|
+
badgeFileName?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface LeewaySkillsProof {
|
|
19
|
+
proofVersion: string;
|
|
20
|
+
generatedAt: string;
|
|
21
|
+
app: {
|
|
22
|
+
name: string;
|
|
23
|
+
version?: string;
|
|
24
|
+
url?: string;
|
|
25
|
+
integrationMethod: string;
|
|
26
|
+
};
|
|
27
|
+
leewaySkills: {
|
|
28
|
+
registryVersion: string;
|
|
29
|
+
governanceFramework: string;
|
|
30
|
+
activeSkills: number;
|
|
31
|
+
activeCategories: number;
|
|
32
|
+
installedSkills: number;
|
|
33
|
+
installedCategories: number;
|
|
34
|
+
registryPath: string;
|
|
35
|
+
registrySha256: string;
|
|
36
|
+
mcpServerVersion: string;
|
|
37
|
+
syncStatus: "aligned" | "partial";
|
|
38
|
+
};
|
|
39
|
+
badge: {
|
|
40
|
+
label: string;
|
|
41
|
+
alt: string;
|
|
42
|
+
sourceFile: string;
|
|
43
|
+
assetPath: string;
|
|
44
|
+
badgeSha256: string;
|
|
45
|
+
};
|
|
46
|
+
verification: {
|
|
47
|
+
status: "verified";
|
|
48
|
+
statement: string;
|
|
49
|
+
warnings: string[];
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export interface BadgeBundleInstallResult {
|
|
53
|
+
targetDir: string;
|
|
54
|
+
files: {
|
|
55
|
+
proof: string;
|
|
56
|
+
script: string;
|
|
57
|
+
style: string;
|
|
58
|
+
snippet: string;
|
|
59
|
+
badge: string;
|
|
60
|
+
};
|
|
61
|
+
proof: LeewaySkillsProof;
|
|
62
|
+
}
|
|
63
|
+
export declare function createLeewaySkillsProof(options?: CreateProofOptions): Promise<LeewaySkillsProof>;
|
|
64
|
+
export declare function installLeewaySkillsBadgeBundle(options: InstallBadgeBundleOptions): Promise<BadgeBundleInstallResult>;
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=badge-proof.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge-proof.d.ts","sourceRoot":"","sources":["../src/badge-proof.ts"],"names":[],"mappings":";AAqFA,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,YAAY,EAAE;QACZ,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE,UAAU,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CA0E5B;AAED,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAmDnC"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/*
|
|
3
|
+
LEEWAY HEADER — DO NOT REMOVE
|
|
4
|
+
|
|
5
|
+
REGION: LEEWAY.SKILLS.BADGE
|
|
6
|
+
TAG: LEEWAY.SKILLS.BADGE.PROOF_BUNDLE
|
|
7
|
+
|
|
8
|
+
COLOR_ONION_HEX:
|
|
9
|
+
NEON=#39FF14
|
|
10
|
+
FLUO=#0DFF94
|
|
11
|
+
PASTEL=#C7FFD8
|
|
12
|
+
|
|
13
|
+
ICON_ASCII:
|
|
14
|
+
family=lucide
|
|
15
|
+
glyph=badge-check
|
|
16
|
+
|
|
17
|
+
5WH:
|
|
18
|
+
WHAT = Leeway Skills badge proof bundle generator
|
|
19
|
+
WHY = Allows other applications to visibly prove they are integrated with Leeway Skills
|
|
20
|
+
WHO = Leeway Industries (By Leonard Jerome Lee)
|
|
21
|
+
WHERE = mcp-server/src/badge-proof.ts
|
|
22
|
+
WHEN = 2026
|
|
23
|
+
HOW = Reads the Leeway registry, scans installed skills, copies the badge asset, and emits an embeddable proof bundle
|
|
24
|
+
|
|
25
|
+
AGENTS:
|
|
26
|
+
EXECUTE
|
|
27
|
+
INTROSPECT
|
|
28
|
+
|
|
29
|
+
LICENSE:
|
|
30
|
+
MIT
|
|
31
|
+
*/
|
|
32
|
+
import { createHash } from "crypto";
|
|
33
|
+
import fs from "fs/promises";
|
|
34
|
+
import path from "path";
|
|
35
|
+
import { fileURLToPath } from "url";
|
|
36
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
37
|
+
const __dirname = path.dirname(__filename);
|
|
38
|
+
const PACKAGE_ROOT = path.resolve(__dirname, "..");
|
|
39
|
+
const WORKSPACE_ROOT = path.resolve(PACKAGE_ROOT, "..");
|
|
40
|
+
const DEFAULT_REGISTRY_PATH = path.join(WORKSPACE_ROOT, "scripts", "skills-registry.json");
|
|
41
|
+
const DEFAULT_SKILLS_ROOT = path.join(WORKSPACE_ROOT, "skills");
|
|
42
|
+
const DEFAULT_BADGE_SOURCE_PATH = path.join(WORKSPACE_ROOT, "agentbage.png.png");
|
|
43
|
+
const DEFAULT_BADGE_FILE_NAME = "leeway-skills-agent-badge.png";
|
|
44
|
+
const DEFAULT_PROOF_FILE_NAME = "leeway-skills-proof.json";
|
|
45
|
+
const DEFAULT_SCRIPT_FILE_NAME = "leeway-skills-badge.js";
|
|
46
|
+
const DEFAULT_STYLE_FILE_NAME = "leeway-skills-badge.css";
|
|
47
|
+
const DEFAULT_SNIPPET_FILE_NAME = "leeway-skills-badge.html";
|
|
48
|
+
const DEFAULT_ASSET_DIR_NAME = "assets";
|
|
49
|
+
export async function createLeewaySkillsProof(options = {}) {
|
|
50
|
+
const registryPath = path.resolve(options.registryPath ?? DEFAULT_REGISTRY_PATH);
|
|
51
|
+
const skillsRoot = path.resolve(options.skillsRoot ?? DEFAULT_SKILLS_ROOT);
|
|
52
|
+
const badgeSourcePath = path.resolve(options.badgeSourcePath ?? DEFAULT_BADGE_SOURCE_PATH);
|
|
53
|
+
const [registryText, badgeBuffer, installedStats, packageVersion] = await Promise.all([
|
|
54
|
+
fs.readFile(registryPath, "utf-8"),
|
|
55
|
+
fs.readFile(badgeSourcePath),
|
|
56
|
+
scanInstalledSkills(skillsRoot),
|
|
57
|
+
loadPackageVersion(),
|
|
58
|
+
]);
|
|
59
|
+
const registry = JSON.parse(registryText);
|
|
60
|
+
const activeSkills = registry.totalSkills ?? 0;
|
|
61
|
+
const activeCategories = registry.totalCategories ?? registry.categories?.length ?? 0;
|
|
62
|
+
const registrySha256 = hashContent(registryText);
|
|
63
|
+
const badgeSha256 = hashContent(badgeBuffer);
|
|
64
|
+
const integrationMethod = options.integrationMethod ?? "mcp-server";
|
|
65
|
+
const appName = options.appName ?? "Connected Application";
|
|
66
|
+
const badgeLabel = options.badgeLabel ?? "Powered by Leeway Skills";
|
|
67
|
+
const syncStatus = installedStats.installedSkills === activeSkills &&
|
|
68
|
+
installedStats.installedCategories === activeCategories
|
|
69
|
+
? "aligned"
|
|
70
|
+
: "partial";
|
|
71
|
+
const warnings = syncStatus === "aligned"
|
|
72
|
+
? []
|
|
73
|
+
: [
|
|
74
|
+
`Registry exposes ${activeSkills} skills across ${activeCategories} categories while ${installedStats.installedSkills} skills across ${installedStats.installedCategories} categories are installed locally.`,
|
|
75
|
+
];
|
|
76
|
+
return {
|
|
77
|
+
proofVersion: "1.0.0",
|
|
78
|
+
generatedAt: new Date().toISOString(),
|
|
79
|
+
app: {
|
|
80
|
+
name: appName,
|
|
81
|
+
version: options.appVersion,
|
|
82
|
+
url: options.appUrl,
|
|
83
|
+
integrationMethod,
|
|
84
|
+
},
|
|
85
|
+
leewaySkills: {
|
|
86
|
+
registryVersion: registry.version ?? "unknown",
|
|
87
|
+
governanceFramework: registry.metadata?.governance?.framework ?? "Leeway Standards",
|
|
88
|
+
activeSkills,
|
|
89
|
+
activeCategories,
|
|
90
|
+
installedSkills: installedStats.installedSkills,
|
|
91
|
+
installedCategories: installedStats.installedCategories,
|
|
92
|
+
registryPath,
|
|
93
|
+
registrySha256,
|
|
94
|
+
mcpServerVersion: packageVersion,
|
|
95
|
+
syncStatus,
|
|
96
|
+
},
|
|
97
|
+
badge: {
|
|
98
|
+
label: badgeLabel,
|
|
99
|
+
alt: `${badgeLabel} badge`,
|
|
100
|
+
sourceFile: path.basename(badgeSourcePath),
|
|
101
|
+
assetPath: options.badgeAssetPath ??
|
|
102
|
+
`./${DEFAULT_ASSET_DIR_NAME}/${DEFAULT_BADGE_FILE_NAME}`,
|
|
103
|
+
badgeSha256,
|
|
104
|
+
},
|
|
105
|
+
verification: {
|
|
106
|
+
status: "verified",
|
|
107
|
+
statement: `${appName} is verified as using Leeway Skills through ${integrationMethod}.`,
|
|
108
|
+
warnings,
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export async function installLeewaySkillsBadgeBundle(options) {
|
|
113
|
+
const targetDir = path.resolve(options.targetDir);
|
|
114
|
+
const assetDirName = options.assetDirName ?? DEFAULT_ASSET_DIR_NAME;
|
|
115
|
+
const badgeFileName = options.badgeFileName ?? DEFAULT_BADGE_FILE_NAME;
|
|
116
|
+
const assetsDir = path.join(targetDir, assetDirName);
|
|
117
|
+
const badgeTargetPath = path.join(assetsDir, badgeFileName);
|
|
118
|
+
const proofPublicPath = `./${DEFAULT_PROOF_FILE_NAME}`;
|
|
119
|
+
const badgeAssetPath = `./${toPosixPath(assetDirName)}/${badgeFileName}`;
|
|
120
|
+
await fs.mkdir(assetsDir, { recursive: true });
|
|
121
|
+
await fs.copyFile(path.resolve(options.badgeSourcePath ?? DEFAULT_BADGE_SOURCE_PATH), badgeTargetPath);
|
|
122
|
+
const proof = await createLeewaySkillsProof({
|
|
123
|
+
...options,
|
|
124
|
+
badgeAssetPath,
|
|
125
|
+
});
|
|
126
|
+
const proofPath = path.join(targetDir, DEFAULT_PROOF_FILE_NAME);
|
|
127
|
+
const scriptPath = path.join(targetDir, DEFAULT_SCRIPT_FILE_NAME);
|
|
128
|
+
const stylePath = path.join(targetDir, DEFAULT_STYLE_FILE_NAME);
|
|
129
|
+
const snippetPath = path.join(targetDir, DEFAULT_SNIPPET_FILE_NAME);
|
|
130
|
+
await Promise.all([
|
|
131
|
+
fs.writeFile(proofPath, JSON.stringify(proof, null, 2), "utf-8"),
|
|
132
|
+
fs.writeFile(scriptPath, createBadgeRuntimeScript(), "utf-8"),
|
|
133
|
+
fs.writeFile(stylePath, createBadgeStyles(), "utf-8"),
|
|
134
|
+
fs.writeFile(snippetPath, createBadgeSnippet({
|
|
135
|
+
proofPublicPath,
|
|
136
|
+
scriptFileName: DEFAULT_SCRIPT_FILE_NAME,
|
|
137
|
+
styleFileName: DEFAULT_STYLE_FILE_NAME,
|
|
138
|
+
}), "utf-8"),
|
|
139
|
+
]);
|
|
140
|
+
return {
|
|
141
|
+
targetDir,
|
|
142
|
+
files: {
|
|
143
|
+
proof: proofPath,
|
|
144
|
+
script: scriptPath,
|
|
145
|
+
style: stylePath,
|
|
146
|
+
snippet: snippetPath,
|
|
147
|
+
badge: badgeTargetPath,
|
|
148
|
+
},
|
|
149
|
+
proof,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
async function scanInstalledSkills(skillsRoot) {
|
|
153
|
+
const categoryEntries = await fs.readdir(skillsRoot, { withFileTypes: true });
|
|
154
|
+
let installedSkills = 0;
|
|
155
|
+
let installedCategories = 0;
|
|
156
|
+
for (const category of categoryEntries) {
|
|
157
|
+
if (!category.isDirectory()) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
installedCategories += 1;
|
|
161
|
+
const categoryPath = path.join(skillsRoot, category.name);
|
|
162
|
+
const skillEntries = await fs.readdir(categoryPath, { withFileTypes: true });
|
|
163
|
+
for (const skill of skillEntries) {
|
|
164
|
+
if (!skill.isDirectory()) {
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
const skillMdPath = path.join(categoryPath, skill.name, "SKILL.md");
|
|
168
|
+
try {
|
|
169
|
+
await fs.access(skillMdPath);
|
|
170
|
+
installedSkills += 1;
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// Skip directories that are not actual skills.
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return { installedSkills, installedCategories };
|
|
178
|
+
}
|
|
179
|
+
async function loadPackageVersion() {
|
|
180
|
+
const packageJsonPath = path.join(PACKAGE_ROOT, "package.json");
|
|
181
|
+
const content = await fs.readFile(packageJsonPath, "utf-8");
|
|
182
|
+
const pkg = JSON.parse(content);
|
|
183
|
+
return pkg.version ?? "unknown";
|
|
184
|
+
}
|
|
185
|
+
function hashContent(content) {
|
|
186
|
+
return createHash("sha256").update(content).digest("hex");
|
|
187
|
+
}
|
|
188
|
+
function toPosixPath(value) {
|
|
189
|
+
return value.replace(/\\/g, "/").replace(/^\.\/+/, "");
|
|
190
|
+
}
|
|
191
|
+
function createBadgeStyles() {
|
|
192
|
+
return `:root {
|
|
193
|
+
--leeway-badge-bg: linear-gradient(135deg, #07111b 0%, #0f2538 55%, #133451 100%);
|
|
194
|
+
--leeway-badge-border: rgba(13, 255, 148, 0.35);
|
|
195
|
+
--leeway-badge-text: #f5fbff;
|
|
196
|
+
--leeway-badge-muted: #9dc4d1;
|
|
197
|
+
--leeway-badge-highlight: #39ff14;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.leeway-skills-badge {
|
|
201
|
+
display: inline-flex;
|
|
202
|
+
align-items: center;
|
|
203
|
+
gap: 14px;
|
|
204
|
+
min-width: 280px;
|
|
205
|
+
max-width: 560px;
|
|
206
|
+
padding: 12px 16px;
|
|
207
|
+
border: 1px solid var(--leeway-badge-border);
|
|
208
|
+
border-radius: 18px;
|
|
209
|
+
background: var(--leeway-badge-bg);
|
|
210
|
+
box-shadow: 0 18px 40px rgba(0, 0, 0, 0.28);
|
|
211
|
+
color: var(--leeway-badge-text);
|
|
212
|
+
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.leeway-skills-badge__image {
|
|
216
|
+
width: 64px;
|
|
217
|
+
height: 64px;
|
|
218
|
+
object-fit: cover;
|
|
219
|
+
border-radius: 14px;
|
|
220
|
+
flex: 0 0 auto;
|
|
221
|
+
box-shadow: 0 10px 24px rgba(0, 0, 0, 0.25);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.leeway-skills-badge__content {
|
|
225
|
+
display: flex;
|
|
226
|
+
flex-direction: column;
|
|
227
|
+
gap: 4px;
|
|
228
|
+
min-width: 0;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.leeway-skills-badge__title {
|
|
232
|
+
font-size: 0.98rem;
|
|
233
|
+
font-weight: 700;
|
|
234
|
+
letter-spacing: 0.01em;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.leeway-skills-badge__meta,
|
|
238
|
+
.leeway-skills-badge__proof,
|
|
239
|
+
.leeway-skills-badge__warning {
|
|
240
|
+
font-size: 0.82rem;
|
|
241
|
+
line-height: 1.35;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.leeway-skills-badge__meta {
|
|
245
|
+
color: var(--leeway-badge-muted);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
.leeway-skills-badge__proof {
|
|
249
|
+
color: var(--leeway-badge-highlight);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.leeway-skills-badge__warning {
|
|
253
|
+
color: #ffdca8;
|
|
254
|
+
}
|
|
255
|
+
`;
|
|
256
|
+
}
|
|
257
|
+
function createBadgeSnippet(options) {
|
|
258
|
+
return `<link rel="stylesheet" href="./${options.styleFileName}" />
|
|
259
|
+
<div data-leeway-skills-badge data-leeway-proof-url="${options.proofPublicPath}"></div>
|
|
260
|
+
<script type="module" src="./${options.scriptFileName}"></script>
|
|
261
|
+
`;
|
|
262
|
+
}
|
|
263
|
+
function createBadgeRuntimeScript() {
|
|
264
|
+
return `const containers = document.querySelectorAll("[data-leeway-skills-badge]");
|
|
265
|
+
|
|
266
|
+
function escapeHtml(value) {
|
|
267
|
+
return String(value)
|
|
268
|
+
.replace(/&/g, "&")
|
|
269
|
+
.replace(/</g, "<")
|
|
270
|
+
.replace(/>/g, ">")
|
|
271
|
+
.replace(/"/g, """)
|
|
272
|
+
.replace(/'/g, "'");
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function renderBadge(container, proof, proofUrl) {
|
|
276
|
+
const imageUrl = new URL(proof.badge.assetPath, new URL(proofUrl, window.location.href)).toString();
|
|
277
|
+
const activeSummary = proof.leewaySkills.activeSkills + " active skills across " + proof.leewaySkills.activeCategories + " categories";
|
|
278
|
+
const installedSummary = proof.leewaySkills.installedSkills + " installed in the local Leeway library";
|
|
279
|
+
const fingerprint = proof.leewaySkills.registrySha256.slice(0, 12);
|
|
280
|
+
const warning = proof.verification.warnings[0];
|
|
281
|
+
|
|
282
|
+
container.dataset.leewayProof = proof.verification.status;
|
|
283
|
+
container.dataset.leewaySkills = String(proof.leewaySkills.activeSkills);
|
|
284
|
+
|
|
285
|
+
container.innerHTML = \`
|
|
286
|
+
<div class="leeway-skills-badge" data-sync-status="\${escapeHtml(proof.leewaySkills.syncStatus)}">
|
|
287
|
+
<img class="leeway-skills-badge__image" src="\${escapeHtml(imageUrl)}" alt="\${escapeHtml(proof.badge.alt)}" />
|
|
288
|
+
<div class="leeway-skills-badge__content">
|
|
289
|
+
<div class="leeway-skills-badge__title">\${escapeHtml(proof.badge.label)}</div>
|
|
290
|
+
<div class="leeway-skills-badge__meta">\${escapeHtml(proof.app.name)} uses Leeway Skills through \${escapeHtml(proof.app.integrationMethod)}.</div>
|
|
291
|
+
<div class="leeway-skills-badge__proof">\${escapeHtml(activeSummary)} · \${escapeHtml(installedSummary)} · proof \${escapeHtml(fingerprint)}</div>
|
|
292
|
+
\${warning ? \`<div class="leeway-skills-badge__warning">\${escapeHtml(warning)}</div>\` : ""}
|
|
293
|
+
</div>
|
|
294
|
+
</div>
|
|
295
|
+
\`;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
async function mountBadge(container) {
|
|
299
|
+
const proofUrl = container.dataset.leewayProofUrl || "./leeway-skills-proof.json";
|
|
300
|
+
|
|
301
|
+
try {
|
|
302
|
+
const response = await fetch(proofUrl);
|
|
303
|
+
if (!response.ok) {
|
|
304
|
+
throw new Error("Unable to load Leeway Skills proof file");
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
const proof = await response.json();
|
|
308
|
+
if (!proof || proof.verification?.status !== "verified") {
|
|
309
|
+
throw new Error("Leeway Skills proof is missing or not verified");
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
renderBadge(container, proof, proofUrl);
|
|
313
|
+
} catch (error) {
|
|
314
|
+
container.dataset.leewayProof = "missing";
|
|
315
|
+
console.error("[Leeway Skills Badge]", error);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
containers.forEach((container) => {
|
|
320
|
+
void mountBadge(container);
|
|
321
|
+
});
|
|
322
|
+
`;
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=badge-proof.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge-proof.js","sourceRoot":"","sources":["../src/badge-proof.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* SkillsTool - Maps a Leeway Skill to an MCP Tool
|
|
4
|
+
*/
|
|
5
|
+
export interface SkillsTool {
|
|
6
|
+
name: string;
|
|
7
|
+
category: string;
|
|
8
|
+
description: string;
|
|
9
|
+
capabilities: string[];
|
|
10
|
+
tags: string[];
|
|
11
|
+
skillPath: string;
|
|
12
|
+
version: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SkillRegistryEntry {
|
|
15
|
+
name: string;
|
|
16
|
+
category: string;
|
|
17
|
+
path: string;
|
|
18
|
+
version?: string;
|
|
19
|
+
tags?: string[];
|
|
20
|
+
description: string;
|
|
21
|
+
capabilities?: string[];
|
|
22
|
+
enabled?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface SkillRegistry {
|
|
25
|
+
skills?: SkillRegistryEntry[];
|
|
26
|
+
}
|
|
27
|
+
export interface ToolCallArguments {
|
|
28
|
+
instruction: string;
|
|
29
|
+
context?: Record<string, unknown>;
|
|
30
|
+
options?: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* LeewaySkillsMCPServer - Main MCP server implementation
|
|
34
|
+
*
|
|
35
|
+
* Provides:
|
|
36
|
+
* - Tool listing (all available skills)
|
|
37
|
+
* - Tool invocation (execute skill logic)
|
|
38
|
+
* - Tool introspection (get skill metadata)
|
|
39
|
+
*/
|
|
40
|
+
export declare class LeewaySkillsMCPServer {
|
|
41
|
+
private server;
|
|
42
|
+
private skills;
|
|
43
|
+
private registryPath;
|
|
44
|
+
constructor();
|
|
45
|
+
/**
|
|
46
|
+
* Load all skills from the registry
|
|
47
|
+
*/
|
|
48
|
+
loadSkills(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Setup MCP handlers
|
|
51
|
+
*/
|
|
52
|
+
private setupHandlers;
|
|
53
|
+
/**
|
|
54
|
+
* Execute a skill with given parameters
|
|
55
|
+
*/
|
|
56
|
+
private executeSkill;
|
|
57
|
+
private normalizeToolArgs;
|
|
58
|
+
/**
|
|
59
|
+
* Start the MCP server
|
|
60
|
+
*/
|
|
61
|
+
start(): Promise<void>;
|
|
62
|
+
}
|
|
63
|
+
export declare function startLeewaySkillsMCPServer(): Promise<LeewaySkillsMCPServer>;
|
|
64
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAgDA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;;;;GAOG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,YAAY,CAAS;;IAuB7B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCjC;;OAEG;IACH,OAAO,CAAC,aAAa;IA0FrB;;OAEG;YACW,YAAY;IA0C1B,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAW7B;AAED,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAIjF"}
|