diff --git a/.github/docs/ci-hygiene-policy.md b/.github/docs/ci-hygiene-policy.md index 3ddfd427d..93757e2be 100644 --- a/.github/docs/ci-hygiene-policy.md +++ b/.github/docs/ci-hygiene-policy.md @@ -71,7 +71,7 @@ plugins, pricing, endpoints, UI pages) also updates the corresponding documentat |---|---|---| | `cli/cmd/commands/`, `cli/internal/commands/` | `cli/.github/wiki/commands/` or F02-COMMAND-INVENTORY.md | **CRITICAL** — blocks PR | | `.env.example`, `cli/internal/env/` | F09-ENV-VAR-INVENTORY.md or env-vars reference | **CRITICAL** — blocks PR | -| `plugins-pro/paid/*/plugin.json`, `plugins/free/*/plugin.json` | F03 or F04 PLUGIN-INVENTORY, bundle docs | **CRITICAL** — blocks PR | +| `bundles/paid/*/plugin.json`, `plugins/free/*/plugin.json` | F03 or F04 PLUGIN-INVENTORY, bundle docs | **CRITICAL** — blocks PR | | `web/org/src/` pricing pages | F07-PRICING-TIERS.md | **CRITICAL** — blocks PR | | Source files `**/*.ts`, `**/*.go`, `**/*.dart` | Any `.github/wiki/` or `.github/docs/` change in same PR | **MEDIUM** — warning | diff --git a/.github/wiki/Contributing.md b/.github/wiki/Contributing.md index 388f3779e..43dbc294e 100644 --- a/.github/wiki/Contributing.md +++ b/.github/wiki/Contributing.md @@ -148,7 +148,7 @@ Breaking changes: add `!` after type (`feat!:`) and document in the PR body. ## Plugin Development -The CLI loads plugins from `plugins/` (free) and `plugins-pro/` (paid). To add or modify a plugin: +The CLI loads plugins from `plugins/` (free) and `bundles/` (paid). To add or modify a plugin: 1. Read `.claude/docs/PLUGIN_SYSTEM_SPEC.md`, plugin manifest schema and loader pipeline. 2. Create or update the plugin directory with a valid `plugin.json` manifest. diff --git a/.github/wiki/Plugin-Catalog.md b/.github/wiki/Plugin-Catalog.md index ef9e55ce4..f0e3e933f 100644 --- a/.github/wiki/Plugin-Catalog.md +++ b/.github/wiki/Plugin-Catalog.md @@ -47,7 +47,7 @@ MIT licensed. No license key required. Source: `plugins/free/` in the `plugins` ## Pro plugins (62) -License-gated. Install with a valid `nself_pro_*` key. Source: `plugins-pro/paid/` in the `plugins-pro` repo. +License-gated. Install with a valid `nself_pro_*` key. Source: `bundles/paid/` in the `plugins-pro` repo. ### ɳClaw bundle ($0.99/mo) diff --git a/.github/wiki/api/versioning.md b/.github/wiki/api/versioning.md index 13705c6ec..bb0298324 100644 --- a/.github/wiki/api/versioning.md +++ b/.github/wiki/api/versioning.md @@ -29,7 +29,7 @@ GET https://ping.nself.org/api/deprecation-registry.json | **G8** | `GET /api/deprecation-registry.json` on ping.nself.org publishes the full registry | | **G9** | `nself api changelog ` shows the deprecation calendar for a plugin | | **G10** | Admin UI panel at `/api/versioning` shows all plugins with API status | -| **G11** | `plugins-pro/.github/workflows/api-compat.yml` gates PRs that add endpoints without a grace period | +| **G11** | `bundles/.github/workflows/api-compat.yml` gates PRs that add endpoints without a grace period | ## Versioning Policy diff --git a/.github/wiki/cmd-encryption.md b/.github/wiki/cmd-encryption.md index 78dce0887..da7008654 100644 --- a/.github/wiki/cmd-encryption.md +++ b/.github/wiki/cmd-encryption.md @@ -22,7 +22,7 @@ nself encryption key-events Until it is installed, `nself encryption ...` prints an install hint pointing here. Full documentation (flags, exit codes, examples) now lives with the -plugin: https://github.com/nself-org/plugins-pro/tree/main/paid/encryption +plugin: https://github.com/nself-org/bundles/tree/main/paid/encryption BYOK encryption requires an ɳSelf+ or Enterprise license (`NSELF_BYOK=true`); it has no effect on self-hosted Community deployments. diff --git a/.github/wiki/cmd-mail.md b/.github/wiki/cmd-mail.md index 3bbc245c6..394ab3d30 100644 --- a/.github/wiki/cmd-mail.md +++ b/.github/wiki/cmd-mail.md @@ -22,7 +22,7 @@ nself mail dkim verify --domain example.com Until it is installed, `nself mail ...` prints an install hint pointing here. Full documentation (flags, exit codes, examples) now lives with the -plugin: https://github.com/nself-org/plugins-pro/tree/main/paid/mail +plugin: https://github.com/nself-org/bundles/tree/main/paid/mail `mail` requires an ɳSelf+ or ɳClaw bundle license (the bundle that ships the Postmark plugin); without a configured key it exits 2, exactly as it did diff --git a/.github/wiki/cmd-pentest-kit.md b/.github/wiki/cmd-pentest-kit.md index 5ac23d893..f8e89d79a 100644 --- a/.github/wiki/cmd-pentest-kit.md +++ b/.github/wiki/cmd-pentest-kit.md @@ -25,7 +25,7 @@ nself pentest-kit status Until it is installed, `nself pentest-kit ...` prints an install hint pointing here. Full documentation (flags, exit codes, examples) now lives with the plugin: -https://github.com/nself-org/plugins-pro/tree/main/paid/pentest-kit +https://github.com/nself-org/bundles/tree/main/paid/pentest-kit ## See Also diff --git a/.github/wiki/commands/mcp-serve.md b/.github/wiki/commands/mcp-serve.md index c90294b1f..d47bdfc13 100644 --- a/.github/wiki/commands/mcp-serve.md +++ b/.github/wiki/commands/mcp-serve.md @@ -82,4 +82,4 @@ None — `nself mcp` is a core CLI command, no plugin or license required. - [MCP specification](https://modelcontextprotocol.io/specification/2025-03-26) - [[cmd-doctor]] -Note: `nself.org/plugins/mcp` documents an unrelated paid plugin (`plugins-pro/paid/mcp`, ɳClaw/ClawDE bundles, its own port and tool set), not this core `nself mcp` command. +Note: `nself.org/plugins/mcp` documents an unrelated paid plugin (`bundles/paid/mcp`, ɳClaw/ClawDE bundles, its own port and tool set), not this core `nself mcp` command. diff --git a/.github/wiki/operations/self-healing.md b/.github/wiki/operations/self-healing.md index 4c46bd31f..a9ac88bcc 100644 --- a/.github/wiki/operations/self-healing.md +++ b/.github/wiki/operations/self-healing.md @@ -62,7 +62,7 @@ OLLAMA_MODEL set? → use ollama/ 19 endpoints in the claw plugin specification were missing from the implementation, causing basic claw functionality to fail on clean installs. These are implemented as part of P94 S92. -See `plugins-pro/.github/docs/plugins/claw.md` for the full endpoint list. +See `bundles/.github/docs/plugins/claw.md` for the full endpoint list. --- @@ -70,5 +70,5 @@ See `plugins-pro/.github/docs/plugins/claw.md` for the full endpoint list. - `.env.secrets`, auto-populated on first boot (never tracked) - `.env.computed`, generated by `orchestration.sh`; reads from `.env.secrets` -- `plugins-pro/.github/docs/plugins/ai.md`, Ollama local default details +- `bundles/.github/docs/plugins/ai.md`, Ollama local default details - `web/docs/content/operations/self-healing.mdx`, web documentation diff --git a/.github/wiki/plugin-backup-pro.md b/.github/wiki/plugin-backup-pro.md index e81a92f3e..8f7d189b0 100644 --- a/.github/wiki/plugin-backup-pro.md +++ b/.github/wiki/plugin-backup-pro.md @@ -28,7 +28,7 @@ Schedules and runs `pg_dump` backups, then streams them directly to S3-compatibl | Restore tracking | Basic | Idempotent, resumable, tracked | | Retention policies | Fixed | Configurable | -The free plugin (`plugins/free/backup`, port 3050) handles standard scheduled dumps. This pro variant (`plugins-pro/paid/backup`, port 3210) adds scheduling controls, multi-target storage, encryption, and tracked restores. +The free plugin (`plugins/free/backup`, port 3050) handles standard scheduled dumps. This pro variant (`bundles/paid/backup`, port 3210) adds scheduling controls, multi-target storage, encryption, and tracked restores. ## Configuration @@ -74,7 +74,7 @@ GET /health — Liveness probe GET / — Plugin index / capability list ``` -Refer to the plugin's OpenAPI spec under `plugins-pro/paid/backup/` for the full route list. +Refer to the plugin's OpenAPI spec under `bundles/paid/backup/` for the full route list. --- diff --git a/.github/wiki/plugin-cdn.md b/.github/wiki/plugin-cdn.md index 13f2163a4..3f183413e 100644 --- a/.github/wiki/plugin-cdn.md +++ b/.github/wiki/plugin-cdn.md @@ -163,7 +163,7 @@ nself plugin cdn status ## Source -Source-available (license required to run): [`plugins-pro/paid/cdn/`](https://github.com/nself-org/plugins-pro/tree/main/paid/cdn) +Source-available (license required to run): [`bundles/paid/cdn/`](https://github.com/nself-org/bundles/tree/main/paid/cdn) Note: `plugins-pro` is a private repository. Source access is granted to ɳSelf+ subscribers and Enterprise customers. diff --git a/.github/wiki/plugin-claw-news.md b/.github/wiki/plugin-claw-news.md index eff97c402..117845655 100644 --- a/.github/wiki/plugin-claw-news.md +++ b/.github/wiki/plugin-claw-news.md @@ -93,7 +93,7 @@ curl -X POST http://localhost:3718/digest \ ## Source -Source-available (license required to run): [`plugins-pro/paid/claw-news/`](https://github.com/nself-org/plugins-pro/tree/main/paid/claw-news) +Source-available (license required to run): [`bundles/paid/claw-news/`](https://github.com/nself-org/bundles/tree/main/paid/claw-news) Note: `plugins-pro` is a private repository. Source access is granted to ɳSelf+ subscribers and Enterprise customers. diff --git a/.github/wiki/plugin-cloudflare.md b/.github/wiki/plugin-cloudflare.md index 39c608b30..4149fb6fb 100644 --- a/.github/wiki/plugin-cloudflare.md +++ b/.github/wiki/plugin-cloudflare.md @@ -125,7 +125,7 @@ curl -X POST -H 'Authorization: Bearer $TOKEN' \ ## Source code -Source-available (license required to run): [`plugins-pro/paid/cloudflare/`](https://github.com/nself-org/plugins-pro/tree/main/paid/cloudflare). The `plugins-pro` repository is private; source access is granted to ɳSelf+ subscribers and Enterprise customers. +Source-available (license required to run): [`bundles/paid/cloudflare/`](https://github.com/nself-org/bundles/tree/main/paid/cloudflare). The `plugins-pro` repository is private; source access is granted to ɳSelf+ subscribers and Enterprise customers. ## See Also diff --git a/.github/wiki/plugin-devices.md b/.github/wiki/plugin-devices.md index 550e27f8d..ca7e4094f 100644 --- a/.github/wiki/plugin-devices.md +++ b/.github/wiki/plugin-devices.md @@ -81,7 +81,7 @@ Devices is a Pro, license-gated plugin (`requires_license: true`). Under the Sec ## Source -Source-available (license required to run): [`plugins-pro/paid/devices/`](https://github.com/nself-org/plugins-pro/tree/main/paid/devices) +Source-available (license required to run): [`bundles/paid/devices/`](https://github.com/nself-org/bundles/tree/main/paid/devices) Note: `plugins-pro` is a private repository. Source access is granted to ɳSelf+ subscribers and Enterprise customers. diff --git a/.github/wiki/plugin-linkedin.md b/.github/wiki/plugin-linkedin.md index 0ea5ef5ec..47c99bb13 100644 --- a/.github/wiki/plugin-linkedin.md +++ b/.github/wiki/plugin-linkedin.md @@ -92,7 +92,7 @@ curl http://localhost:3722/posts ## Source -Source-available (license required to run): [`plugins-pro/paid/linkedin/`](https://github.com/nself-org/plugins-pro/tree/main/paid/linkedin) +Source-available (license required to run): [`bundles/paid/linkedin/`](https://github.com/nself-org/bundles/tree/main/paid/linkedin) Note: `plugins-pro` is a private repository. Source access is granted to ɳSelf+ subscribers and Enterprise customers. diff --git a/.github/wiki/plugin-paypal-pro.md b/.github/wiki/plugin-paypal-pro.md index 5e56944a4..26bf88aa9 100644 --- a/.github/wiki/plugin-paypal-pro.md +++ b/.github/wiki/plugin-paypal-pro.md @@ -106,7 +106,7 @@ query ActiveSubscriptions { ## Source -Source-available (license required to run): [`plugins-pro/paid/paypal/`](https://github.com/nself-org/plugins-pro/tree/main/paid/paypal) +Source-available (license required to run): [`bundles/paid/paypal/`](https://github.com/nself-org/bundles/tree/main/paid/paypal) Note: `plugins-pro` is a private repository. Source access is granted to ɳSelf+ subscribers and Enterprise customers. diff --git a/.github/wiki/plugin-shopify-pro.md b/.github/wiki/plugin-shopify-pro.md index 21eb11485..f8daff5a8 100644 --- a/.github/wiki/plugin-shopify-pro.md +++ b/.github/wiki/plugin-shopify-pro.md @@ -102,7 +102,7 @@ curl -X POST http://localhost/shopify/orders/12345/fulfillments \ ## Source -Source-available (license required to run): [`plugins-pro/paid/shopify/`](https://github.com/nself-org/plugins-pro/tree/main/paid/shopify) +Source-available (license required to run): [`bundles/paid/shopify/`](https://github.com/nself-org/bundles/tree/main/paid/shopify) Note: `plugins-pro` is a private repository. Source access is granted to ɳSelf+ subscribers and Enterprise customers. diff --git a/.github/wiki/plugin-stripe-pro.md b/.github/wiki/plugin-stripe-pro.md index 158e6616e..c7f597fa8 100644 --- a/.github/wiki/plugin-stripe-pro.md +++ b/.github/wiki/plugin-stripe-pro.md @@ -108,7 +108,7 @@ curl -X POST http://localhost/stripe/portal/session \ ## Source -Source-available (license required to run): [`plugins-pro/paid/stripe/`](https://github.com/nself-org/plugins-pro/tree/main/paid/stripe) +Source-available (license required to run): [`bundles/paid/stripe/`](https://github.com/nself-org/bundles/tree/main/paid/stripe) Note: `plugins-pro` is a private repository. Source access is granted to ɳSelf+ subscribers and Enterprise customers. diff --git a/.github/workflows/ci-green-rate.yml b/.github/workflows/ci-green-rate.yml index 90ceaf9fe..dc2c500db 100644 --- a/.github/workflows/ci-green-rate.yml +++ b/.github/workflows/ci-green-rate.yml @@ -34,7 +34,7 @@ jobs: "nself-org/nfamily" "nself-org/clawde" "nself-org/plugins" - "nself-org/plugins-pro" + "nself-org/bundles" "nself-org/web" ) diff --git a/internal/plugin/count/count_test.go b/internal/plugin/count/count_test.go index fe5882f94..eb97db30e 100644 --- a/internal/plugin/count/count_test.go +++ b/internal/plugin/count/count_test.go @@ -22,8 +22,8 @@ func TestLoad_ParsesEmbeddedArtifact(t *testing.T) { if a.Sources.Free.Repo != "nself-org/plugins" { t.Errorf("Sources.Free.Repo = %q, want nself-org/plugins", a.Sources.Free.Repo) } - if a.Sources.Pro.Repo != "nself-org/plugins-pro" { - t.Errorf("Sources.Pro.Repo = %q, want nself-org/plugins-pro", a.Sources.Pro.Repo) + if a.Sources.Pro.Repo != "nself-org/bundles" { + t.Errorf("Sources.Pro.Repo = %q, want nself-org/bundles", a.Sources.Pro.Repo) } } diff --git a/internal/plugin/count/counts.json b/internal/plugin/count/counts.json index bbfe3ada5..13de0eb57 100644 --- a/internal/plugin/count/counts.json +++ b/internal/plugin/count/counts.json @@ -1,15 +1,15 @@ { "_generated": "GENERATED BY plugins/scripts/plugin-counts.sh \u2014 DO NOT HAND EDIT", "schema_version": 1, - "generated_at": "2026-09-11T10:29:19Z", + "generated_at": "2026-09-17T11:08:11Z", "sources": { "free": { "repo": "nself-org/plugins", - "sha": "d5e472bc3462013e44263f4c426f2e79fee69bae" + "sha": "3029757af4b1980d2509ecd1044a1ad2e2c2b9cd" }, "pro": { - "repo": "nself-org/plugins-pro", - "sha": "01624292e61f115ca5da3ab57a60f61129859ba2" + "repo": "nself-org/bundles", + "sha": "cc1fe6df64fa9343f4343c368216c8f055fee17e" } }, "free": { diff --git a/internal/plugin/registry_test.go b/internal/plugin/registry_test.go index 7decdca46..f9babcb25 100644 --- a/internal/plugin/registry_test.go +++ b/internal/plugin/registry_test.go @@ -38,7 +38,7 @@ func TestParseRegistryJSON_ArrayFormat(t *testing.T) { "category": "messaging", "tier": "basic", "license": "source-available", - "repository": "https://github.com/nself-org/plugins-pro", + "repository": "https://github.com/nself-org/bundles", "checksum": "abc123" } ] @@ -467,35 +467,35 @@ func BenchmarkRegistryParse(b *testing.B) { const registryPayload = `{ "version": "1.0.0", "plugins": { - "ai": {"name": "ai", "version": "1.2.0", "description": "AI plugin", "category": "ai", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc001"}, - "claw": {"name": "claw", "version": "1.0.0", "description": "Claw memory plugin", "category": "ai", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc002"}, - "mux": {"name": "mux", "version": "1.1.0", "description": "Email routing plugin", "category": "messaging", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc003"}, - "notify": {"name": "notify", "version": "1.0.3", "description": "Push notifications", "category": "messaging", "tier": "basic", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc004"}, - "voice": {"name": "voice", "version": "1.0.1", "description": "Voice synthesis", "category": "ai", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc005"}, - "browser": {"name": "browser", "version": "1.0.0", "description": "Browser automation", "category": "tools", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc006"}, - "google": {"name": "google", "version": "1.2.1", "description": "Google Workspace integration", "category": "integration", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc007"}, - "cron": {"name": "cron", "version": "1.0.0", "description": "Scheduled tasks", "category": "automation", "tier": "basic", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc008"}, - "chat": {"name": "chat", "version": "1.1.0", "description": "Messaging plugin", "category": "messaging", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc009"}, - "livekit": {"name": "livekit", "version": "1.0.2", "description": "Live video/audio", "category": "media", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc010"}, - "recording": {"name": "recording", "version": "1.0.0", "description": "Call recording", "category": "media", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc011"}, - "moderation": {"name": "moderation", "version": "1.0.0", "description": "Content moderation", "category": "safety", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc012"}, - "media-processing": {"name": "media-processing", "version": "1.1.0", "description": "Media transcoding", "category": "media", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc013"}, - "streaming": {"name": "streaming", "version": "1.0.0", "description": "IPTV streaming", "category": "media", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc014"}, - "epg": {"name": "epg", "version": "1.0.0", "description": "Electronic program guide", "category": "media", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc015"}, - "social": {"name": "social", "version": "1.0.0", "description": "Social feed plugin", "category": "social", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc016"}, - "photos": {"name": "photos", "version": "1.0.0", "description": "Photo sharing", "category": "social", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc017"}, - "geolocation": {"name": "geolocation", "version": "1.0.0", "description": "Location services", "category": "tools", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc018"}, - "calendar": {"name": "calendar", "version": "1.0.0", "description": "Calendar integration", "category": "productivity", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc019"}, - "realtime": {"name": "realtime", "version": "1.1.0", "description": "WebSocket realtime", "category": "infrastructure", "tier": "basic", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc020"}, + "ai": {"name": "ai", "version": "1.2.0", "description": "AI plugin", "category": "ai", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc001"}, + "claw": {"name": "claw", "version": "1.0.0", "description": "Claw memory plugin", "category": "ai", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc002"}, + "mux": {"name": "mux", "version": "1.1.0", "description": "Email routing plugin", "category": "messaging", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc003"}, + "notify": {"name": "notify", "version": "1.0.3", "description": "Push notifications", "category": "messaging", "tier": "basic", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc004"}, + "voice": {"name": "voice", "version": "1.0.1", "description": "Voice synthesis", "category": "ai", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc005"}, + "browser": {"name": "browser", "version": "1.0.0", "description": "Browser automation", "category": "tools", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc006"}, + "google": {"name": "google", "version": "1.2.1", "description": "Google Workspace integration", "category": "integration", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc007"}, + "cron": {"name": "cron", "version": "1.0.0", "description": "Scheduled tasks", "category": "automation", "tier": "basic", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc008"}, + "chat": {"name": "chat", "version": "1.1.0", "description": "Messaging plugin", "category": "messaging", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc009"}, + "livekit": {"name": "livekit", "version": "1.0.2", "description": "Live video/audio", "category": "media", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc010"}, + "recording": {"name": "recording", "version": "1.0.0", "description": "Call recording", "category": "media", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc011"}, + "moderation": {"name": "moderation", "version": "1.0.0", "description": "Content moderation", "category": "safety", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc012"}, + "media-processing": {"name": "media-processing", "version": "1.1.0", "description": "Media transcoding", "category": "media", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc013"}, + "streaming": {"name": "streaming", "version": "1.0.0", "description": "IPTV streaming", "category": "media", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc014"}, + "epg": {"name": "epg", "version": "1.0.0", "description": "Electronic program guide", "category": "media", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc015"}, + "social": {"name": "social", "version": "1.0.0", "description": "Social feed plugin", "category": "social", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc016"}, + "photos": {"name": "photos", "version": "1.0.0", "description": "Photo sharing", "category": "social", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc017"}, + "geolocation": {"name": "geolocation", "version": "1.0.0", "description": "Location services", "category": "tools", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc018"}, + "calendar": {"name": "calendar", "version": "1.0.0", "description": "Calendar integration", "category": "productivity", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc019"}, + "realtime": {"name": "realtime", "version": "1.1.0", "description": "WebSocket realtime", "category": "infrastructure", "tier": "basic", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc020"}, "auth": {"name": "auth", "version": "2.0.0", "description": "Authentication", "category": "security", "tier": "free", "license": "MIT", "repository": "https://github.com/nself-org/plugins", "checksum": "abc021"}, "scan": {"name": "scan", "version": "1.0.0", "description": "Security scanning", "category": "security", "tier": "free", "license": "MIT", "repository": "https://github.com/nself-org/plugins", "checksum": "abc022"}, - "cms": {"name": "cms", "version": "1.0.0", "description": "Content management", "category": "content", "tier": "basic", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc023"}, - "stripe": {"name": "stripe", "version": "1.0.0", "description": "Stripe payments", "category": "commerce", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc024"}, - "sms": {"name": "sms", "version": "1.0.0", "description": "SMS messaging", "category": "messaging", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc025"}, - "image": {"name": "image", "version": "1.0.0", "description": "Image processing", "category": "media", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc026"}, - "pdf": {"name": "pdf", "version": "1.0.0", "description": "PDF generation", "category": "documents", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc027"}, - "knowledge-base": {"name": "knowledge-base", "version": "1.0.0", "description": "Vector knowledge base", "category": "ai", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc028"}, - "mcp": {"name": "mcp", "version": "1.0.0", "description": "Model Context Protocol", "category": "ai", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/plugins-pro", "checksum": "abc029"} + "cms": {"name": "cms", "version": "1.0.0", "description": "Content management", "category": "content", "tier": "basic", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc023"}, + "stripe": {"name": "stripe", "version": "1.0.0", "description": "Stripe payments", "category": "commerce", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc024"}, + "sms": {"name": "sms", "version": "1.0.0", "description": "SMS messaging", "category": "messaging", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc025"}, + "image": {"name": "image", "version": "1.0.0", "description": "Image processing", "category": "media", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc026"}, + "pdf": {"name": "pdf", "version": "1.0.0", "description": "PDF generation", "category": "documents", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc027"}, + "knowledge-base": {"name": "knowledge-base", "version": "1.0.0", "description": "Vector knowledge base", "category": "ai", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc028"}, + "mcp": {"name": "mcp", "version": "1.0.0", "description": "Model Context Protocol", "category": "ai", "tier": "pro", "license": "source-available", "repository": "https://github.com/nself-org/bundles", "checksum": "abc029"} } }` diff --git a/internal/plugin/verify/verify_sbom.go b/internal/plugin/verify/verify_sbom.go index 7510b3b2d..70ed21392 100644 --- a/internal/plugin/verify/verify_sbom.go +++ b/internal/plugin/verify/verify_sbom.go @@ -31,8 +31,8 @@ func VerifySBOM(ctx context.Context, pluginName, version string, opts SBOMCheckO artifactName := fmt.Sprintf("sbom-%s.cdx.json", version) // Download from GitHub Release assets. - // URL: https://github.com/nself-org/plugins-pro/releases/download/{version}/{artifactName} - url := fmt.Sprintf("https://github.com/nself-org/plugins-pro/releases/download/%s/%s", version, artifactName) + // URL: https://github.com/nself-org/bundles/releases/download/{version}/{artifactName} + url := fmt.Sprintf("https://github.com/nself-org/bundles/releases/download/%s/%s", version, artifactName) ctx, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() diff --git a/scripts/sync-badges.sh b/scripts/sync-badges.sh index aebb97fbf..007edae65 100755 --- a/scripts/sync-badges.sh +++ b/scripts/sync-badges.sh @@ -69,7 +69,7 @@ printf "Syncing README badges to %s across all nSelf repos...\n" "$TARGET_VERSIO # Repo list and GitHub org names (parallel arrays — Bash 3.2 compatible) # --------------------------------------------------------------------------- REPO_NAMES="cli admin nchat nclaw ntask ntv nfamily clawde plugins plugins-pro homebrew-nself" -GITHUB_REPOS="nself-org/cli nself-org/admin nself-org/nchat nself-org/nclaw nself-org/ntask nself-org/ntv nself-org/nfamily nself-org/clawde nself-org/plugins nself-org/plugins-pro nself-org/homebrew-nself" +GITHUB_REPOS="nself-org/cli nself-org/admin nself-org/nchat nself-org/nclaw nself-org/ntask nself-org/ntv nself-org/nfamily nself-org/clawde nself-org/plugins nself-org/bundles nself-org/homebrew-nself" # Build index function using positional parsing (Bash 3.2 safe) get_github_repo() { diff --git a/sdk/go/.github/workflows/ci.yml b/sdk/go/.github/workflows/ci.yml index f0f7e5d2b..048ec52a2 100644 --- a/sdk/go/.github/workflows/ci.yml +++ b/sdk/go/.github/workflows/ci.yml @@ -66,9 +66,12 @@ jobs: - name: Check for private import paths run: | - # Ensure no private plugins-pro import paths leak into the public SDK - if grep -r 'github\.com/nself-org/plugins-pro' --include="*.go" .; then - echo "ERROR: private plugins-pro import path found in SDK" + # Ensure no private licensed-plugin import paths leak into the + # public SDK. The repo was renamed plugins-pro -> bundles and the + # old module path still resolves through GitHub's redirect, so + # BOTH spellings have to stay blocked. + if grep -rE 'github\.com/nself-org/(bundles|plugins-pro)' --include="*.go" .; then + echo "ERROR: private licensed-plugin import path found in SDK" exit 1 fi echo "Security check passed: no private import paths found" diff --git a/sdk/go/METRICS.md b/sdk/go/METRICS.md index 2b1460c06..d5ccf2c15 100644 --- a/sdk/go/METRICS.md +++ b/sdk/go/METRICS.md @@ -87,7 +87,7 @@ nself_plugin_request_duration_seconds{quantile="0.99"} > 2s for 10m → warning ``` Plugin authors can override these by shipping their own rules file under -`plugins-pro/paid//monitoring/alerts.yml`. +`bundles/paid//monitoring/alerts.yml`. ## Verification