Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions .github/workflows/update-contributors.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Update Contributors Data
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing explicit permissions; declare permissions: contents: write to ensure push can succeed and follow least-privilege.

Prompt for AI agents
Address the following comment on .github/workflows/update-contributors.yml at line 1:

<comment>Missing explicit permissions; declare permissions: contents: write to ensure push can succeed and follow least-privilege.</comment>

<file context>
@@ -0,0 +1,65 @@
+name: Update Contributors Data
+
+on:
</file context>


on:
schedule:
# Run every day at 6 AM UTC
- cron: '0 6 * * *'
workflow_dispatch: # Allow manual triggering
push:
branches: [ main ]
paths:
- 'scripts/fetch-contributors.js'

jobs:
update-contributors:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prefer current LTS Node.js (e.g., 20) instead of 18 to stay on a supported, secure runtime.

Prompt for AI agents
Address the following comment on .github/workflows/update-contributors.yml at line 26:

<comment>Prefer current LTS Node.js (e.g., 20) instead of 18 to stay on a supported, secure runtime.</comment>

<file context>
@@ -0,0 +1,65 @@
+    - name: Setup Node.js
+      uses: actions/setup-node@v4
+      with:
+        node-version: &#39;18&#39;
+        cache: &#39;npm&#39;
+        
</file context>

cache: 'npm'

- name: Install dependencies
run: npm ci

- name: Fetch contributors data
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "🚀 Starting contributor data fetch..."
npm run fetch-contributors
echo "✅ Contributor data fetch completed"
- name: Check if contributors data changed
id: verify-changed-files
run: |
if [ -n "$(git status --porcelain)" ]; then
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change detection is too broad; restrict to src/data/contributors.json to avoid false positives and commit failures.

Prompt for AI agents
Address the following comment on .github/workflows/update-contributors.yml at line 43:

<comment>Change detection is too broad; restrict to src/data/contributors.json to avoid false positives and commit failures.</comment>

<file context>
@@ -0,0 +1,65 @@
+    - name: Check if contributors data changed
+      id: verify-changed-files
+      run: |
+        if [ -n &quot;$(git status --porcelain)&quot; ]; then
+          echo &quot;changed=true&quot; &gt;&gt; $GITHUB_OUTPUT
+        else
</file context>

echo "changed=true" >> $GITHUB_OUTPUT
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quote $GITHUB_OUTPUT when appending to avoid potential path parsing issues.

Prompt for AI agents
Address the following comment on .github/workflows/update-contributors.yml at line 44:

<comment>Quote $GITHUB_OUTPUT when appending to avoid potential path parsing issues.</comment>

<file context>
@@ -0,0 +1,65 @@
+      id: verify-changed-files
+      run: |
+        if [ -n &quot;$(git status --porcelain)&quot; ]; then
+          echo &quot;changed=true&quot; &gt;&gt; $GITHUB_OUTPUT
+        else
+          echo &quot;changed=false&quot; &gt;&gt; $GITHUB_OUTPUT
</file context>
Suggested change
echo "changed=true" >> $GITHUB_OUTPUT
echo "changed=true" >> "$GITHUB_OUTPUT"

else
echo "changed=false" >> $GITHUB_OUTPUT
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quote $GITHUB_OUTPUT when appending to avoid potential path parsing issues.

Prompt for AI agents
Address the following comment on .github/workflows/update-contributors.yml at line 46:

<comment>Quote $GITHUB_OUTPUT when appending to avoid potential path parsing issues.</comment>

<file context>
@@ -0,0 +1,65 @@
+        if [ -n &quot;$(git status --porcelain)&quot; ]; then
+          echo &quot;changed=true&quot; &gt;&gt; $GITHUB_OUTPUT
+        else
+          echo &quot;changed=false&quot; &gt;&gt; $GITHUB_OUTPUT
+        fi
+        
</file context>
Suggested change
echo "changed=false" >> $GITHUB_OUTPUT
echo "changed=false" >> "$GITHUB_OUTPUT"

fi
- name: Commit and push changes
if: steps.verify-changed-files.outputs.changed == 'true'
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add src/data/contributors.json
git commit -m "chore: update contributors data $(date +'%Y-%m-%d')"
git push
echo "✅ Contributors data updated and pushed to repository"
- name: Workflow Summary
run: |
if [[ "${{ steps.verify-changed-files.outputs.changed }}" == "true" ]]; then
echo "📊 Contributors data was updated and the site will be redeployed automatically"
else
echo "ℹ️ Contributors data unchanged - no updates needed"
fi
7 changes: 6 additions & 1 deletion about/about-us.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ We believe in the power of open source collaboration. This project thrives on co

## Contributors

The UTCP project is made possible by the dedication and contributions of our amazing community. For a complete and up-to-date list of all contributors with their activity rankings, visit our [**Hall of Fame**](/hall-of-fame) page.

### UTCP Admin
- Razvan-Ion Radulescu ([Bevel Software](https://www.bevel.software), razvan.radulescu@bevel.software)
- Andrei-Stefan Ghiurtu ([LinkedIn](https://www.linkedin.com/in/andrei-stefan-ghiurtu/))
Expand All @@ -30,11 +32,14 @@ We believe in the power of open source collaboration. This project thrives on co
### Go Port Maintainer
- Kamil Mościszko ([LinkedIn](https://www.linkedin.com/in/kamilm97/), kmosc@protonmail.com)

### Contributors
### LangChain UTCP Adapters Maintainers
- Luca Perrozzi ([LinkedIn](https://www.linkedin.com/in/luca-perrozzi/))
- Roberto Catalano ([LinkedIn](https://www.linkedin.com/in/roberto-catalano-5b7793123/), [GitHub](https://github.com/Robobc))

### Contributors
- Tiago Prelato ([LinkedIn](https://www.linkedin.com/in/tiago-prelato-257787210/), [X](https://x.com/SneyX_))
- Bruce Miao
- Lochy W

## Join Us

Expand Down
4 changes: 4 additions & 0 deletions docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,10 @@ const config: Config = {
label: 'About Us',
to: '/about/about-us',
},
{
label: 'Hall of Fame',
to: '/hall-of-fame',
},
{
label: 'RFC',
to: '/about/RFC',
Expand Down
185 changes: 185 additions & 0 deletions hall-of-fame-docs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
# Contributors Data

This project automatically fetches and displays real contributors from the entire `universal-tool-calling-protocol` GitHub organization.

## How it Works

1. **Data Fetching**: The `scripts/fetch-contributors.js` script queries the GitHub API to:
- Get all repositories in the `universal-tool-calling-protocol` organization
- Fetch contributors for each repository
- **Collect detailed activity metrics**: PRs, reviews, recent commits, last activity dates
- Aggregate contribution counts across all repositories
- Enhance data with user profiles from GitHub
- Calculate hybrid impact scores for each contributor
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Documentation claims hybrid scoring while the implementation uses simplified scoring; update wording to prevent confusion.

Prompt for AI agents
Address the following comment on hall-of-fame-docs.md at line 13:

<comment>Documentation claims hybrid scoring while the implementation uses simplified scoring; update wording to prevent confusion.</comment>

<file context>
@@ -0,0 +1,185 @@
+   - **Collect detailed activity metrics**: PRs, reviews, recent commits, last activity dates
+   - Aggregate contribution counts across all repositories
+   - Enhance data with user profiles from GitHub
+   - Calculate hybrid impact scores for each contributor
+
+2. **Data Processing**: The script transforms GitHub API data into a format suitable for the contributors page, including:
</file context>
Suggested change
- Calculate hybrid impact scores for each contributor
- Calculate simplified impact scores for each contributor


2. **Data Processing**: The script transforms GitHub API data into a format suitable for the contributors page, including:
- Automatic role detection based on repository names (TypeScript SDK, Python SDK, etc.)
- **Hybrid impact scoring** combining recent activity, overall contributions, code quality, and multi-project involvement
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This description overstates inputs (code quality, overall contributions); the current implementation uses simplified recent-activity scoring.

Prompt for AI agents
Address the following comment on hall-of-fame-docs.md at line 17:

<comment>This description overstates inputs (code quality, overall contributions); the current implementation uses simplified recent-activity scoring.</comment>

<file context>
@@ -0,0 +1,185 @@
+
+2. **Data Processing**: The script transforms GitHub API data into a format suitable for the contributors page, including:
+   - Automatic role detection based on repository names (TypeScript SDK, Python SDK, etc.)
+   - **Hybrid impact scoring** combining recent activity, overall contributions, code quality, and multi-project involvement
+   - Status determination based on impact scores and activity recency
+   - Real GitHub profile images with emoji fallbacks for errors
</file context>
Suggested change
- **Hybrid impact scoring** combining recent activity, overall contributions, code quality, and multi-project involvement
- **Simplified impact scoring** based on recent activity (last 6 months)

- Status determination based on impact scores and activity recency
- Real GitHub profile images with emoji fallbacks for errors
- Badge assignment for notable contributors based on multiple metrics
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claims badges are assigned based on multiple metrics, but only a single impact-score-based badge is implemented.

Prompt for AI agents
Address the following comment on hall-of-fame-docs.md at line 20:

<comment>Claims badges are assigned based on multiple metrics, but only a single impact-score-based badge is implemented.</comment>

<file context>
@@ -0,0 +1,185 @@
+   - **Hybrid impact scoring** combining recent activity, overall contributions, code quality, and multi-project involvement
+   - Status determination based on impact scores and activity recency
+   - Real GitHub profile images with emoji fallbacks for errors
+   - Badge assignment for notable contributors based on multiple metrics
+
+3. **Automatic Updates**: GitHub Actions automatically updates the contributors data:
</file context>


3. **Automatic Updates**: GitHub Actions automatically updates the contributors data:
- **Daily**: Runs at 6 AM UTC every day
- **Manual**: Can be triggered via workflow_dispatch
- **On Changes**: Runs when the fetch script is updated

## Setup

### Environment Variables

For local development, you can set a GitHub token to avoid rate limiting:

```bash
export GITHUB_TOKEN=your_github_token_here
npm run fetch-contributors
```

### Running Locally

```bash
# Fetch contributors data
npm run fetch-contributors

# Build site with fresh data
npm run build

# Build without fetching data (faster)
npm run build:fast
```

### Manual Setup

If you need to run the script manually:

```bash
node scripts/fetch-contributors.js
```

## Data Structure

The generated `src/data/contributors.json` file contains:

```json
{
"generated_at": "2024-01-01T12:00:00.000Z",
"total_contributors": 25,
"total_contributions": 1500,
"total_impact_score": 3250,
"total_recent_activity": 145,
"scoring_method": "hybrid_impact_score",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JSON example uses an outdated scoring_method; align with actual output key used by the script.

Prompt for AI agents
Address the following comment on hall-of-fame-docs.md at line 70:

<comment>JSON example uses an outdated scoring_method; align with actual output key used by the script.</comment>

<file context>
@@ -0,0 +1,185 @@
+  &quot;total_contributions&quot;: 1500,
+  &quot;total_impact_score&quot;: 3250,
+  &quot;total_recent_activity&quot;: 145,
+  &quot;scoring_method&quot;: &quot;hybrid_impact_score&quot;,
+  &quot;contributors&quot;: [
+    {
</file context>
Suggested change
"scoring_method": "hybrid_impact_score",
"scoring_method": "simplified_recent_activity",

"contributors": [
{
"id": 123456,
"login": "username",
"name": "Real Name",
"avatar_url": "https://github.com/avatar",
"html_url": "https://github.com/username",
"bio": "Developer bio",
"company": "Company Name",
"location": "City, Country",
"blog": "https://blog.com",
"hireable": true,
"public_repos": 50,
"followers": 100,
"following": 80,
"created_at": "2020-01-01T00:00:00Z",
"contributions": 150,
"repositories": ["repo1", "repo2"],
"repo_count": 2,
"impact_score": 185,
"total_prs": 15,
"total_merged_prs": 12,
"total_recent_commits": 23,
"total_reviews": 8,
"last_activity": "2024-01-15T14:30:00Z",
"pr_success_rate": 80
}
]
}
```

## Contributor Display Logic

### Simplified Impact Scoring System

Contributors are ranked using a **simplified impact score** based only on recent activity across all repositories:

#### Scoring Formula
```
Impact Score = Recent Activity × Recency Factor
```

Where Recent Activity is the sum of commits across all repositories in the last 6 months.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Activity window (last 6 months) conflicts with recency bullets including last year/older; clarify either the window or the weighting to match the algorithm.

Prompt for AI agents
Address the following comment on hall-of-fame-docs.md at line 113:

<comment>Activity window (last 6 months) conflicts with recency bullets including last year/older; clarify either the window or the weighting to match the algorithm.</comment>

<file context>
@@ -0,0 +1,185 @@
+Impact Score = Recent Activity × Recency Factor
+```
+
+Where Recent Activity is the sum of commits across all repositories in the last 6 months.
+
+#### Recency Weighting
</file context>


#### Recency Weighting
Recent activity receives higher weight to prioritize active contributors:
- **Last 30 days**: 100% weight (1.0x multiplier)
- **Last 3 months**: 80% weight (0.8x multiplier)
- **Last 6 months**: 50% weight (0.5x multiplier)
- **Last year**: 30% weight (0.3x multiplier)
- **Older**: 10% weight (0.1x multiplier)

### Roles
Roles are automatically determined based on repository patterns:
- `typescript|js-sdk` → "TypeScript/JavaScript SDK"
- `python|py-sdk` → "Python SDK"
- `go-sdk|golang` → "Go SDK"
- `rust-sdk` → "Rust SDK"
- `java-sdk` → "Java SDK"
- `csharp|dotnet` → "C# SDK"
- `specification|docs` → "Specification & Docs"
- Multiple repos → "Multi-language SDK"

### Status Levels (Impact Score Based)
- **Core contributor**: 100+ impact score + recent activity
- **Core contributor (inactive)**: 100+ impact score but no recent activity
- **Active contributor**: 50+ impact score + recent activity
- **Regular contributor**: 20+ impact score or inactive but previously active
- **New contributor**: <20 impact score

### Enhanced Badge System
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Badge section suggests several badges exist, but only ⭐ High Contributor is implemented; note planned status to avoid misleading readers.

Prompt for AI agents
Address the following comment on hall-of-fame-docs.md at line 141:

<comment>Badge section suggests several badges exist, but only ⭐ High Contributor is implemented; note planned status to avoid misleading readers.</comment>

<file context>
@@ -0,0 +1,185 @@
+- **Regular contributor**: 20+ impact score or inactive but previously active
+- **New contributor**: &lt;20 impact score
+
+### Enhanced Badge System
+- 🏆 **Top Impact Contributor**: 200+ impact score
+- ⭐ **High Impact Contributor**: 100+ impact score
</file context>

- 🏆 **Top Impact Contributor**: 200+ impact score
-**High Impact Contributor**: 100+ impact score
- 🔥 **Multi-project Contributor**: 3+ repositories
- 🚀 **Recently Active**: 10+ commits in last 6 months
-**Quality Contributor**: 80%+ PR merge rate with 5+ PRs

### Data Collection & Metrics
For each contributor, the system collects:
- **Pull Requests**: Total PRs created and merge success rate
- **Code Reviews**: Participation in reviewing others' code
- **Recent Activity**: Commits in the last 6 months
- **Cross-project Work**: Contributions across multiple repositories
- **Last Activity Date**: Most recent contribution timestamp

### Hiring Status
Contributors with `hireable: true` in their GitHub profile show an "Open to work" badge.

## Advantages of Simplified Scoring

The simplified impact scoring system provides several benefits:

1. **Recency Focus**: Active contributors rank higher than inactive ones
2. **Cross-project Aggregation**: Recent commits are summed across all repositories
3. **Simple and Fair**: Transparent calculation based purely on recent activity
4. **Prevents Gaming**: Cannot be inflated through historical contributions or metadata manipulation

## Troubleshooting

### Rate Limiting
The enhanced scoring system makes significantly more API calls (PRs, commits, reviews per contributor per repo). Without authentication, GitHub API limits to 60 requests/hour. The script includes delays to avoid hitting limits, but **using `GITHUB_TOKEN` is highly recommended** for reasonable execution times.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Term "enhanced scoring system" is misleading; it’s the data collection that increases API calls, not the simplified scoring algorithm.

Prompt for AI agents
Address the following comment on hall-of-fame-docs.md at line 171:

<comment>Term &quot;enhanced scoring system&quot; is misleading; it’s the data collection that increases API calls, not the simplified scoring algorithm.</comment>

<file context>
@@ -0,0 +1,185 @@
+## Troubleshooting
+
+### Rate Limiting
+The enhanced scoring system makes significantly more API calls (PRs, commits, reviews per contributor per repo). Without authentication, GitHub API limits to 60 requests/hour. The script includes delays to avoid hitting limits, but **using `GITHUB_TOKEN` is highly recommended** for reasonable execution times.
+
+**Expected Runtime**: 
</file context>
Suggested change
The enhanced scoring system makes significantly more API calls (PRs, commits, reviews per contributor per repo). Without authentication, GitHub API limits to 60 requests/hour. The script includes delays to avoid hitting limits, but **using `GITHUB_TOKEN` is highly recommended** for reasonable execution times.
The data collection process makes significantly more API calls (PRs, commits, reviews per contributor per repo). Without authentication, GitHub API limits to 60 requests/hour. The script includes delays to avoid hitting limits, but **using `GITHUB_TOKEN` is highly recommended** for reasonable execution times.


**Expected Runtime**:
- Without token: 15-30+ minutes (depending on contributor count)
- With token: 2-5 minutes (much faster due to higher rate limits)

### Missing Data
If the contributors page shows "Contributors data unavailable":
1. Run `npm run fetch-contributors` locally
2. Check if `src/data/contributors.json` was created
3. Ensure the GitHub API is accessible
4. Check console for error messages

### Build Integration
The build process automatically fetches fresh data. For faster builds during development, use `npm run build:fast` to skip the data fetch.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Build instructions are inaccurate: local builds do not auto-fetch, and build:fast is identical to build; clarify CI vs local behavior.

Prompt for AI agents
Address the following comment on hall-of-fame-docs.md at line 185:

<comment>Build instructions are inaccurate: local builds do not auto-fetch, and build:fast is identical to build; clarify CI vs local behavior.</comment>

<file context>
@@ -0,0 +1,185 @@
+4. Check console for error messages
+
+### Build Integration
+The build process automatically fetches fresh data. For faster builds during development, use `npm run build:fast` to skip the data fetch.
</file context>
Suggested change
The build process automatically fetches fresh data. For faster builds during development, use `npm run build:fast` to skip the data fetch.
In CI, contributors data is updated before the site build; locally, builds use existing data. For faster builds during development, `npm run build:fast` is equivalent to `npm run build`.

4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"build:fast": "docusaurus build",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Script name suggests a faster build but runs the same command as build, which can mislead contributors and CI.

Prompt for AI agents
Address the following comment on package.json at line 9:

<comment>Script name suggests a faster build but runs the same command as build, which can mislead contributors and CI.</comment>

<file context>
@@ -6,13 +6,15 @@
     &quot;docusaurus&quot;: &quot;docusaurus&quot;,
     &quot;start&quot;: &quot;docusaurus start&quot;,
     &quot;build&quot;: &quot;docusaurus build&quot;,
+    &quot;build:fast&quot;: &quot;docusaurus build&quot;,
     &quot;swizzle&quot;: &quot;docusaurus swizzle&quot;,
     &quot;deploy&quot;: &quot;docusaurus deploy&quot;,
</file context>

"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc"
"typecheck": "tsc",
"fetch-contributors": "node scripts/fetch-contributors.js"
},
"dependencies": {
"@docusaurus/core": "3.8.1",
Expand Down
Loading
Loading