npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@cybersailor/linktool

v0.1.0

Published

DevKit for Remote-skills Connectors

Downloads

117

Readme

LinkTool

DevKit for developing RemoteTask connectors locally with fixed OAuth callback URLs.

Prerequisites

  1. Deploy Tunnel Worker: Deploy the edge worker to Cloudflare Workers.

    cd ../../edge-worker
    npm install
    npm run deploy

    Configure your domain tun.dev.notelogic.app to point to the deployed worker.

  2. Configuration: Create a .config.yml file in your connector project with OAuth Client ID/Secret:

    vars:
      CLIENT_ID: your_oauth_client_id
    secrets:
      CLIENT_SECRET: your_oauth_client_secret

    Important: Configuration must be in .config.yml format with explicit vars and secrets sections. This ensures developers understand that:

    • Variables are accessed via bundle.vars.KEY (not process.env.KEY)
    • Secrets are accessed via bundle.secrets.KEY (not process.env.KEY)

Key Features

🔒 Fixed Callback URL

Your OAuth callback URL is predictable and fixed, based on your package name:

https://tun.dev.notelogic.app/{package-name}/callback

Example:

  • Package: @myorg/github-connector
  • Callback: https://tun.dev.notelogic.app/myorg-github-connector/callback

This means you configure OAuth once in the provider's developer portal, not every debug session.

Usage

All commands automatically derive the package name from your package.json.

1. Authentication (OAuth)

Starts a tunnel, opens the OAuth flow, captures the callback, and saves credentials.

npx linktool auth

Output:

📋 Configure this Callback URL in your OAuth App:
   https://tun.dev.notelogic.app/my-connector/callback

Opening browser...
✓ Received callback!
✓ Token exchanged successfully!
Credentials saved to .linktool/connection.json

2. Configure Tool

Interactive configuration for a tool with dynamic field support.

npx linktool config <tool-key>

Example:

npx linktool config list_issues

This will:

  • Load dynamic fields (e.g., fetch repositories from API)
  • Show dropdown choices for enum fields
  • Save configuration to .linktool/config.json

3. List Tools

List all tools in the connector.

npx linktool list

4. Run Tool

Execute a tool locally using saved credentials and configuration.

npx linktool run <tool-key>

Options:

  • --input <json-or-file>: Override input data (JSON string or file path)
  • --async: Enable webhook waiting mode

Example:

# Simple run (uses saved config)
npx linktool run list_issues

# Override specific fields
npx linktool run list_issues --input '{"filter": "created"}'

# With async webhook
npx linktool run create_issue_webhook --async

5. Tunnel Mode

Manually start a tunnel to inspect incoming webhooks.

npx linktool tunnel

How It Works

  1. Package Name Derivation:

    • Reads package.json name field
    • Sanitizes for URL safety (@myorg/connectormyorg-connector)
    • Falls back to directory name if no package.json
  2. Durable Objects:

    • Each package name maps to a unique Cloudflare DO instance
    • WebSocket from CLI connects to your DO
    • HTTP webhooks route to the same DO
    • DO forwards requests to your CLI via WebSocket
  3. OAuth Flow:

    CLI → Opens Browser → OAuth Provider → Redirects to Tunnel
    Tunnel (DO) → WebSocket → CLI → Exchanges Token → Saves .linktool/connection.json
  4. Configuration Storage:

    • .linktool/connection.json - Authentication credentials
    • .linktool/config.json - Tool configurations (all tools)

Complete Workflow Example

cd my-connector

# 1. Authenticate once
npx linktool auth

# 2. Configure a tool interactively
npx linktool config create_issue
# → Prompts for dynamic repo selection
# → Prompts for title, body, labels, etc.

# 3. Run (uses saved auth + config)
npx linktool run create_issue

# 4. Override specific fields
npx linktool run create_issue --input '{"title": "New bug"}'

Troubleshooting

Q: Tunnel not connecting?
A: Verify the worker is deployed and tun.dev.notelogic.app points to it.

Q: OAuth callback fails?
A: Ensure the callback URL in your OAuth app settings exactly matches:
https://tun.dev.notelogic.app/{your-package-name}/callback

Q: Package name collision?
A: Use scoped packages (@yourname/connector) or unique names in package.json.

Q: npx linktool not working? A: Make sure you're in the connector directory and run npm install first, or use npx tsx src/index.ts directly for development.