Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
19 changes: 19 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Validate catalog

on:
pull_request:
push:
branches: [main]

jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm run validate
- run: npm test
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules/
49 changes: 44 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,29 @@
## PR checklist

- [ ] Entry added to `catalog/index.json` with unique `id`
- [ ] `manifest.json` in pack/plugin folder matches schema
- [ ] `bundle.json` validates as a GodMode portable bundle (version 1)
- [ ] Local `manifest.json` id, kind, and version match the catalog entry
- [ ] Clone entry has a version-1 `kind: "bundle"` `bundle.json` at `bundlePath`
- [ ] Every bundle child is a version-1 `kind: "record"` envelope whose only data member is `record`
- [ ] Every Record has `id`, `objectType`, and `data`; Record `data.id`, Record `id`, and child `sourceId` match
- [ ] Records use current kernel value shapes, not legacy table/envelope shapes or retired mutation routes
- [ ] Parent/dependency Records precede children that reference them
- [ ] Plugin source contains a valid `godmode.plugin.json`; executable Bridge/web plugins declare `kernelApiVersion: 1` and use `api.kernel`
- [ ] Plugin catalog, local manifest, and source `godmode.plugin.json` versions are coordinated
- [ ] No secrets, API keys, or operator-specific content
- [ ] Title and description are clear for OSS users
- [ ] Tags help browse/filter (e.g. `work`, `agents`, `skills`)

The `manifest.json` beside a pack or plugin in this repository is catalog
metadata, not the plugin runtime manifest. Runtime fields such as
`kernelApiVersion`, `bridge`, `web`, `objectTypes`, and `records` belong in the
referenced source repository's `godmode.plugin.json`.

## Catalog entry fields

| Field | Required | Description |
|-------|----------|-------------|
| `id` | yes | Stable slug (kebab-case) |
| `kind` | yes | `bundle`, `skill`, `rule`, `agent`, `department`, `plugin`, etc. |
| `kind` | yes | `bundle` or `plugin` |
| `installType` | yes | `clone` (portable bundle) or `plugin` (GitHub repo) |
| `title` | yes | Display name |
| `description` | yes | Short summary |
Expand All @@ -27,7 +38,35 @@

## Install types

- **clone**: GodMode downloads `bundle.json` and imports via portability API.
- **plugin**: GodMode clones the plugin repo (or uses release tarball), adds to `GODMODE_PLUGIN_PATH`, and runs tenant install. Bridge restart may be required.
- **clone**: GodMode resolves and fetches `bundlePath`, then passes the
version-1 portable bundle to its importer. Bundle children are imported in
array order, so order dependencies explicitly.
- **plugin**: GodMode clones the requested `pluginRef` (or updates an existing
checkout), builds a missing Bridge entry, validates and loads
`godmode.plugin.json`, persists the discovery path, and installs the plugin
for the current tenant. The install path returns `restartRequired: false`.
ObjectTypes register before Record seeds and the target plugin's
`tenant:install` hook; plugin knowledge is synchronized afterward.

Manifest-only plugins may declare `objectTypes` and deterministic-id `records`
without `bridge.entry`. Executable Bridge/web plugins receive versioned kernel
clients through `api.kernel`; both currently report `apiVersion: 1`. Declare
`kernelApiVersion: 1` in `godmode.plugin.json`. A different declared version is
rejected during host manifest validation.

## Validation

Use Node 22 and run `npm ci`, `npm run validate`, and `npm test` before opening
a PR. The catalog validator checks local JSON schemas and cross-file identity,
version, bundle, Record-id, and retired-route invariants. Tests cover the exact
published pack set and current Record value shapes.

The marketplace checks do **not** fetch `pluginRepo`, validate its
`godmode.plugin.json`, execute a clone bundle import, or run a plugin's
build/install lifecycle. Test clone packs with a host importer that supports
`kind: "record"` children. For plugin entries, also test the source repository
against the coordinated GodMode host version, including manifest validation,
ObjectType/Record registration, tenant install, uninstall/reinstall, and tenant
isolation.

Live access to another user's instance is **Shared**, not Marketplace.
51 changes: 49 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,60 @@ Private plugins stay on your GitHub account and are added in GodMode under **Mar

```
catalog/index.json Official listing index
packs/<id>/ Portable bundles (clone install)
plugins/<id>/ Plugin catalog entries (repo pointers)
packs/<id>/ Catalog manifest + portable Record bundle
plugins/<id>/ Catalog manifest (source-repository pointer)
schemas/ JSON Schema for CI validation
```

Pack `manifest.json` files mirror catalog identity and version metadata. Their
`bundle.json` install payload is a version-1 `kind: "bundle"` envelope whose
`data.children` are version-1 `kind: "record"` envelopes. Each child contains
only `data.record`, with:

- a stable `id`;
- an `objectType` currently accepted by this catalog (`StructureNode`, `Agent`,
or `Skill`); and
- Record `data` whose `id` matches both the Record id and child `sourceId`.

Keep dependency-sensitive children in import order (for example, a parent
`StructureNode` before its descendants). Clone installation fetches the
catalog entry's `bundlePath` and submits that portable bundle to GodMode's
importer, which processes bundle children in order. These migrated packs
therefore require a coordinated host whose portability importer supports
`kind: "record"` children.

Plugin `manifest.json` files in this repository are also catalog mirrors; they
are not the executable plugin manifest. The referenced plugin repository must
contain a valid `godmode.plugin.json`. Bridge/web plugin code should declare
`kernelApiVersion: 1` there and use the versioned `api.kernel` client
(`api.kernel.apiVersion === 1`). The host rejects a declared unsupported future
kernel API version instead of guessing compatibility. Keep the catalog entry,
this repository's manifest, and the source plugin version coordinated.

## Catalog URL

Default official URL (override with `MARKETPLACE_OFFICIAL_URL` in Bridge):

`https://raw.githubusercontent.com/ReBoticsAI/GodMode-Marketplace/main/catalog/index.json`

## Validate the catalog

Use Node 22 (the CI version), then run:

```
npm ci
npm run validate
npm test
```

`npm run validate` checks the catalog and portable-bundle schemas, unique
catalog ids, catalog/local-manifest id-kind-version agreement, bundle
`sourceId`, Record/child id agreement, and retired mutation route strings. The
tests assert the published pack versions and the current `StructureNode`,
`Agent`, and `Skill` Record value shapes.

These repository checks do not execute a host import, clone plugin repositories,
or validate their `godmode.plugin.json`, build, registrations, migrations,
hooks, or `kernelApiVersion`. Test clone installation and plugin submissions
against the coordinated GodMode host version; validate plugin runtime behavior
in the source repository as well.
8 changes: 4 additions & 4 deletions catalog/index.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"version": 1,
"version": 2,
"repoBase": "https://raw.githubusercontent.com/ReBoticsAI/GodMode-Marketplace/main",
"updatedAt": "2026-07-14T00:00:00.000Z",
"entries": [
Expand All @@ -9,7 +9,7 @@
"installType": "clone",
"title": "Research Agent Pack",
"description": "A Research Agent subagent plus a research workflow skill for Intelligence.",
"version": "1.0.0",
"version": "1.1.0",
"author": "GodMode",
"tags": ["agents", "research", "skills"],
"bundlePath": "packs/research-agent-pack/bundle.json"
Expand All @@ -20,7 +20,7 @@
"installType": "clone",
"title": "Work Starter Department",
"description": "Work department with Projects division and a sample project page.",
"version": "1.0.0",
"version": "1.1.0",
"author": "GodMode",
"tags": ["structure", "work"],
"bundlePath": "packs/work-starter-pack/bundle.json"
Expand All @@ -31,7 +31,7 @@
"installType": "clone",
"title": "Productivity Skills",
"description": "Weekly review and meeting prep skills for Intelligence.",
"version": "1.0.0",
"version": "1.1.0",
"author": "GodMode",
"tags": ["skills", "productivity"],
"bundlePath": "packs/productivity-skills-pack/bundle.json"
Expand Down
92 changes: 92 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "godmode-marketplace",
"version": "1.0.0",
"private": true,
"type": "module",
"scripts": {
"validate": "node scripts/validate-catalog.mjs",
"test": "node --test tests/*.test.mjs"
},
"devDependencies": {
"ajv": "^8.20.0",
"ajv-formats": "^3.0.1"
}
}
57 changes: 34 additions & 23 deletions packs/productivity-skills-pack/bundle.json
Original file line number Diff line number Diff line change
@@ -1,48 +1,59 @@
{
"version": 1,
"kind": "bundle",
"exportedAt": "2026-07-04T00:00:00.000Z",
"exportedAt": "2026-07-14T00:00:00.000Z",
"sourceId": "productivity-skills-pack",
"title": "Productivity Skills",
"data": {
"children": [
{
"version": 1,
"kind": "skill",
"exportedAt": "2026-07-04T00:00:00.000Z",
"kind": "record",
"exportedAt": "2026-07-14T00:00:00.000Z",
"sourceId": "weekly-review",
"title": "Weekly Review",
"data": {
"skill": {
"record": {
"id": "weekly-review",
"agent_id": "intelligence",
"name": "weekly-review",
"description": "End-of-week review across tasks, calendar, and wiki",
"body": "1. List open tasks from the kanban.\n2. Summarize calendar events this week.\n3. Note wiki updates.\n4. Propose next-week priorities.",
"tools_json": "[\"list_project_cards\",\"list_calendar_events\"]",
"departments_json": "[]",
"enabled": 1,
"status": "active"
"objectType": "Skill",
"data": {
"id": "weekly-review",
"agent_id": "intelligence",
"name": "weekly-review",
"description": "End-of-week review across tasks, calendar, and wiki",
"body": "1. List open tasks from the kanban.\n2. Summarize calendar events this week.\n3. Note wiki updates.\n4. Propose next-week priorities.",
"tools_json": [
"list_project_cards",
"list_calendar_events"
],
"departments_json": [],
"enabled": true,
"status": "active"
}
}
}
},
{
"version": 1,
"kind": "skill",
"exportedAt": "2026-07-04T00:00:00.000Z",
"kind": "record",
"exportedAt": "2026-07-14T00:00:00.000Z",
"sourceId": "meeting-prep",
"title": "Meeting Prep",
"data": {
"skill": {
"record": {
"id": "meeting-prep",
"agent_id": "intelligence",
"name": "meeting-prep",
"description": "Prepare agenda and context before a meeting",
"body": "1. Ask for meeting title and attendees.\n2. Pull related wiki pages and open tasks.\n3. Draft a short agenda and talking points.",
"tools_json": "[]",
"departments_json": "[]",
"enabled": 1,
"status": "active"
"objectType": "Skill",
"data": {
"id": "meeting-prep",
"agent_id": "intelligence",
"name": "meeting-prep",
"description": "Prepare agenda and context before a meeting",
"body": "1. Ask for meeting title and attendees.\n2. Pull related wiki pages and open tasks.\n3. Draft a short agenda and talking points.",
"tools_json": [],
"departments_json": [],
"enabled": true,
"status": "active"
}
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion packs/productivity-skills-pack/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
"kind": "bundle",
"title": "Productivity Skills",
"description": "Weekly review and meeting prep skills.",
"version": "1.0.0",
"version": "1.1.0",
"author": "GodMode"
}
Loading
Loading