From 22805820a68cdaa8ec5d4e3a2b8558a19524e469 Mon Sep 17 00:00:00 2001 From: Steve Calvert Date: Mon, 10 Aug 2026 16:35:39 -0700 Subject: [PATCH] feat: migrate plugin sources to pluginpack 0.11 --- .github/workflows/publish.yml | 4 +- .gitignore | 2 +- README.md | 65 +++++----- RELEASE.md | 4 +- .../glean}/hooks/auto-approve-run-tool.mjs | 0 .../claude/glean}/hooks/hooks.json | 0 .../codex/glean-dev-docs}/README.md | 0 .../codex/glean-dev-docs}/assets/avatar.png | Bin .../codex => overrides/codex/glean}/LICENSE | 0 .../codex => overrides/codex/glean}/README.md | 0 .../codex/glean}/assets/avatar.png | Bin .../codex/glean/mcp/config.json | 2 +- .../skills/skill-creation-guide}/SKILL.md | 0 .../cursor/glean}/README.md | 0 overrides/cursor/glean/assets/avatar.png | Bin 0 -> 2481 bytes .../cursor/glean}/assets/avatar.svg | 0 .../glean}/rules/glean-result-vetting.mdc | 0 .../glean}/rules/glean-tool-selection.mdc | 0 package-lock.json | 19 ++- package.json | 10 +- pluginpack.config.ts | 75 ++++++----- .../dev-docs => repositories/claude}/LICENSE | 7 +- {roots => repositories}/claude/README.md | 0 repositories/codex/LICENSE | 21 +++ {roots => repositories}/codex/README.md | 0 repositories/cursor/LICENSE | 21 +++ {roots => repositories}/cursor/README.md | 0 scripts/check-no-shell-scripts.mjs | 9 +- scripts/sync-changelog.mjs | 22 ---- scripts/sync-release-metadata.mjs | 40 ++++++ .../glean-dev-docs}/CHANGELOG.md | 0 .../claude => shared/glean-dev-docs}/LICENSE | 0 .../glean-dev-docs}/README.md | 0 .../skills/dev-docs-guide/SKILL.md | 0 {sources/codex => shared/glean}/CHANGELOG.md | 0 {sources/cursor => shared/glean}/LICENSE | 0 {sources/claude => shared/glean}/README.md | 0 .../glean}/agents/activity-analyzer.md | 0 .../glean}/agents/codebase-navigator.md | 0 .../glean}/agents/doc-reader.md | 0 .../glean}/agents/enterprise-searcher.md | 0 .../glean}/agents/meeting-analyzer.md | 0 .../glean}/agents/people-finder.md | 0 .../glean}/agents/plan-prep-researcher.md | 0 .../glean}/agents/project-synthesizer.md | 0 .../glean}/agents/skill-generator.md | 0 .../glean}/agents/work-pattern-analyzer.md | 0 .../local-mcp => shared/glean/mcp}/build.mjs | 4 +- .../.mcp.json => shared/glean/mcp/config.json | 2 +- .../glean/mcp}/package.json | 1 + shared/glean/mcp/pluginpack.json | 8 ++ .../glean/mcp}/skills/glean_run/SKILL.md | 0 .../glean/mcp}/src/auth-callback-server.ts | 0 .../glean/mcp}/src/auth-provider.ts | 0 .../glean/mcp}/src/config-search.ts | 0 .../glean/mcp}/src/index.ts | 3 +- .../glean/mcp}/src/remote-client.ts | 3 +- .../mcp}/src/remote-tools-cache-store.ts | 0 .../glean/mcp}/src/session-id.ts | 0 .../glean/mcp}/src/skill-writer.ts | 0 .../glean/mcp}/src/token-store.ts | 0 .../glean/mcp}/src/tools/approval-args.ts | 0 .../glean/mcp}/src/tools/find-skills.ts | 0 .../mcp}/src/tools/remote-passthrough.ts | 0 .../glean/mcp}/src/tools/run-tool.ts | 0 .../glean/mcp}/src/types.ts | 0 .../glean/mcp}/src/url-config-store.ts | 0 shared/glean/mcp/src/version.ts | 9 ++ .../local-mcp => shared/glean/mcp}/start.mjs | 0 .../mcp}/tests/auth-callback-server.test.ts | 0 .../glean/mcp}/tests/auth-provider.test.ts | 0 .../mcp}/tests/auto-approve-hook.test.ts | 2 +- .../glean/mcp}/tests/config-search.test.ts | 0 .../glean/mcp}/tests/find-skills.test.ts | 0 .../glean/mcp}/tests/open-browser.test.ts | 0 .../glean/mcp}/tests/remote-client.test.ts | 0 .../mcp}/tests/remote-passthrough.test.ts | 0 .../tests/remote-tools-cache-store.test.ts | 0 .../glean/mcp}/tests/run-tool.test.ts | 0 .../glean/mcp}/tests/session-id.test.ts | 0 .../glean/mcp}/tests/skill-writer.test.ts | 0 .../glean/mcp}/tests/token-store.test.ts | 0 .../glean/mcp}/tests/url-config-store.test.ts | 0 shared/glean/mcp/tests/version.test.ts | 120 ++++++++++++++++++ .../glean/mcp}/tsconfig.json | 0 .../glean/skills}/catch-up/SKILL.md | 0 .../glean/skills}/code-owners/SKILL.md | 0 .../glean/skills}/codebase-context/SKILL.md | 0 .../glean/skills}/connect-glean/SKILL.md | 0 .../glean/skills}/find-examples/SKILL.md | 0 .../glean/skills}/find-expert/SKILL.md | 0 .../glean/skills}/meeting-prep/SKILL.md | 0 .../glean/skills}/onboarding/SKILL.md | 0 .../glean/skills}/plan-prep/SKILL.md | 0 .../glean/skills}/project-awareness/SKILL.md | 0 .../glean/skills}/project-handoff/SKILL.md | 0 .../glean/skills}/search/SKILL.md | 0 .../glean/skills}/similar-code/SKILL.md | 0 .../skills}/skill-creation-guide/SKILL.md | 0 .../glean/skills}/stakeholders/SKILL.md | 0 .../glean/skills}/using-glean-code/SKILL.md | 0 .../using-glean-code/reference/exploration.md | 0 .../using-glean-code/reference/plan-prep.md | 0 .../skills}/using-glean-productivity/SKILL.md | 0 .../reference/activity.md | 0 .../reference/priorities.md | 0 .../glean/skills}/using-glean/SKILL.md | 0 .../using-glean/reference/agents-as-tools.md | 0 .../skills}/using-glean/reference/chat.md | 0 .../using-glean/reference/code-search.md | 0 .../using-glean/reference/employee-search.md | 0 .../using-glean/reference/gmail-search.md | 0 .../using-glean/reference/knowledge-graph.md | 0 .../using-glean/reference/meeting-lookup.md | 0 .../skills}/using-glean/reference/memory.md | 0 .../using-glean/reference/outlook-search.md | 0 .../using-glean/reference/read-document.md | 0 .../skills}/using-glean/reference/search.md | 0 .../using-glean/reference/synthesis.md | 0 .../using-glean/reference/user-activity.md | 0 .../skills}/using-glean/reference/vetting.md | 0 .../glean/skills}/verify-rfc/SKILL.md | 0 sources/claude/plugin.pluginpack.json | 3 - sources/codex/plugin.pluginpack.json | 3 - sources/cursor/CHANGELOG.md | 39 ------ sources/dev-docs/CHANGELOG.md | 39 ------ sources/local-mcp/plugin.pluginpack.json | 8 -- 127 files changed, 341 insertions(+), 204 deletions(-) rename {sources/local-mcp => overrides/claude/glean}/hooks/auto-approve-run-tool.mjs (100%) rename {sources/local-mcp => overrides/claude/glean}/hooks/hooks.json (100%) rename {sources/dev-docs/targets/codex => overrides/codex/glean-dev-docs}/README.md (100%) rename {sources/codex-assets => overrides/codex/glean-dev-docs}/assets/avatar.png (100%) rename {sources/codex => overrides/codex/glean}/LICENSE (100%) rename {sources/codex => overrides/codex/glean}/README.md (100%) rename {sources/cursor => overrides/codex/glean}/assets/avatar.png (100%) rename sources/local-mcp/targets/codex/.mcp.json => overrides/codex/glean/mcp/config.json (84%) rename {skills/skill-creation-guide/targets/codex => overrides/codex/glean/skills/skill-creation-guide}/SKILL.md (100%) rename {sources/cursor => overrides/cursor/glean}/README.md (100%) create mode 100644 overrides/cursor/glean/assets/avatar.png rename {sources/cursor => overrides/cursor/glean}/assets/avatar.svg (100%) rename {sources/cursor => overrides/cursor/glean}/rules/glean-result-vetting.mdc (100%) rename {sources/cursor => overrides/cursor/glean}/rules/glean-tool-selection.mdc (100%) rename {sources/dev-docs => repositories/claude}/LICENSE (93%) rename {roots => repositories}/claude/README.md (100%) create mode 100644 repositories/codex/LICENSE rename {roots => repositories}/codex/README.md (100%) create mode 100644 repositories/cursor/LICENSE rename {roots => repositories}/cursor/README.md (100%) delete mode 100644 scripts/sync-changelog.mjs create mode 100644 scripts/sync-release-metadata.mjs rename {sources/claude => shared/glean-dev-docs}/CHANGELOG.md (100%) rename {sources/claude => shared/glean-dev-docs}/LICENSE (100%) rename {sources/dev-docs => shared/glean-dev-docs}/README.md (100%) rename {sources/dev-docs => shared/glean-dev-docs}/skills/dev-docs-guide/SKILL.md (100%) rename {sources/codex => shared/glean}/CHANGELOG.md (100%) rename {sources/cursor => shared/glean}/LICENSE (100%) rename {sources/claude => shared/glean}/README.md (100%) rename {sources/shared => shared/glean}/agents/activity-analyzer.md (100%) rename {sources/shared => shared/glean}/agents/codebase-navigator.md (100%) rename {sources/shared => shared/glean}/agents/doc-reader.md (100%) rename {sources/shared => shared/glean}/agents/enterprise-searcher.md (100%) rename {sources/shared => shared/glean}/agents/meeting-analyzer.md (100%) rename {sources/shared => shared/glean}/agents/people-finder.md (100%) rename {sources/shared => shared/glean}/agents/plan-prep-researcher.md (100%) rename {sources/shared => shared/glean}/agents/project-synthesizer.md (100%) rename {sources/shared => shared/glean}/agents/skill-generator.md (100%) rename {sources/shared => shared/glean}/agents/work-pattern-analyzer.md (100%) rename {sources/local-mcp => shared/glean/mcp}/build.mjs (96%) rename sources/local-mcp/.mcp.json => shared/glean/mcp/config.json (75%) rename {sources/local-mcp => shared/glean/mcp}/package.json (93%) create mode 100644 shared/glean/mcp/pluginpack.json rename {sources/local-mcp => shared/glean/mcp}/skills/glean_run/SKILL.md (100%) rename {sources/local-mcp => shared/glean/mcp}/src/auth-callback-server.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/src/auth-provider.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/src/config-search.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/src/index.ts (99%) rename {sources/local-mcp => shared/glean/mcp}/src/remote-client.ts (98%) rename {sources/local-mcp => shared/glean/mcp}/src/remote-tools-cache-store.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/src/session-id.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/src/skill-writer.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/src/token-store.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/src/tools/approval-args.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/src/tools/find-skills.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/src/tools/remote-passthrough.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/src/tools/run-tool.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/src/types.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/src/url-config-store.ts (100%) create mode 100644 shared/glean/mcp/src/version.ts rename {sources/local-mcp => shared/glean/mcp}/start.mjs (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/auth-callback-server.test.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/auth-provider.test.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/auto-approve-hook.test.ts (98%) rename {sources/local-mcp => shared/glean/mcp}/tests/config-search.test.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/find-skills.test.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/open-browser.test.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/remote-client.test.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/remote-passthrough.test.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/remote-tools-cache-store.test.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/run-tool.test.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/session-id.test.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/skill-writer.test.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/token-store.test.ts (100%) rename {sources/local-mcp => shared/glean/mcp}/tests/url-config-store.test.ts (100%) create mode 100644 shared/glean/mcp/tests/version.test.ts rename {sources/local-mcp => shared/glean/mcp}/tsconfig.json (100%) rename {skills => shared/glean/skills}/catch-up/SKILL.md (100%) rename {skills => shared/glean/skills}/code-owners/SKILL.md (100%) rename {skills => shared/glean/skills}/codebase-context/SKILL.md (100%) rename {skills => shared/glean/skills}/connect-glean/SKILL.md (100%) rename {skills => shared/glean/skills}/find-examples/SKILL.md (100%) rename {skills => shared/glean/skills}/find-expert/SKILL.md (100%) rename {skills => shared/glean/skills}/meeting-prep/SKILL.md (100%) rename {skills => shared/glean/skills}/onboarding/SKILL.md (100%) rename {skills => shared/glean/skills}/plan-prep/SKILL.md (100%) rename {skills => shared/glean/skills}/project-awareness/SKILL.md (100%) rename {skills => shared/glean/skills}/project-handoff/SKILL.md (100%) rename {skills => shared/glean/skills}/search/SKILL.md (100%) rename {skills => shared/glean/skills}/similar-code/SKILL.md (100%) rename {skills => shared/glean/skills}/skill-creation-guide/SKILL.md (100%) rename {skills => shared/glean/skills}/stakeholders/SKILL.md (100%) rename {skills => shared/glean/skills}/using-glean-code/SKILL.md (100%) rename {skills => shared/glean/skills}/using-glean-code/reference/exploration.md (100%) rename {skills => shared/glean/skills}/using-glean-code/reference/plan-prep.md (100%) rename {skills => shared/glean/skills}/using-glean-productivity/SKILL.md (100%) rename {skills => shared/glean/skills}/using-glean-productivity/reference/activity.md (100%) rename {skills => shared/glean/skills}/using-glean-productivity/reference/priorities.md (100%) rename {skills => shared/glean/skills}/using-glean/SKILL.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/agents-as-tools.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/chat.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/code-search.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/employee-search.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/gmail-search.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/knowledge-graph.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/meeting-lookup.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/memory.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/outlook-search.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/read-document.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/search.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/synthesis.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/user-activity.md (100%) rename {skills => shared/glean/skills}/using-glean/reference/vetting.md (100%) rename {skills => shared/glean/skills}/verify-rfc/SKILL.md (100%) delete mode 100644 sources/claude/plugin.pluginpack.json delete mode 100644 sources/codex/plugin.pluginpack.json delete mode 100644 sources/cursor/CHANGELOG.md delete mode 100644 sources/dev-docs/CHANGELOG.md delete mode 100644 sources/local-mcp/plugin.pluginpack.json diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index de090cd..d063682 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -72,8 +72,8 @@ jobs: - name: PrePluginPack # The pluginpack-action runs `npx pluginpack diff/build` directly (not # `npm run build`), so the repo's prebuild esbuild step never fires. - # sources/local-mcp/dist/index.js is gitignored, so build it here or - # pluginpack's additionalFiles source read fails for every target. + # shared/glean/mcp/dist/index.js is gitignored, so build it here or + # pluginpack's MCP shipping-file source read fails for every target. run: npm run build:bundle - name: Resolve pinned pluginpack version diff --git a/.gitignore b/.gitignore index 91b36b9..c91c0b6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ node_modules/ # Generated build output (published to the target repos by CI) dist/ # local-mcp runtime MCP server bundle (regenerated by build:bundle / prebuild) -sources/local-mcp/dist/ +shared/glean/mcp/dist/ # Claude Code runtime cache (local-mcp skills cache written during local runs) .claude/tmp/ diff --git a/README.md b/README.md index bd671c7..34add7a 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,22 @@ # Glean Agent Plugins The source-of-truth repository for Glean's official plugins for AI coding -assistants. One portable library of skills, agents, rules, commands, and hooks -is authored here once, and [`pluginpack`](https://github.com/gleanwork/pluginpack) +assistants. Each plugin is authored once under `shared/`, and +[`pluginpack`](https://github.com/gleanwork/pluginpack) compiles it into the native plugin layout each host expects — today **Claude -Code**, **Cursor**, and **Codex**. Most skills share one base source; target -overrides handle the few host-specific setup and capability differences. +Code**, **Cursor**, and **Codex**. Target overrides handle the few host-specific +setup and capability differences. ## Layout -| Path | What it is | -|------|------------| -| `skills/` | The portable skill library — one `SKILL.md` (plus optional `references/`) per capability, with host-specific files only under `targets//`. **The source of truth.** | -| `sources/shared/` | Components shared by targets that support them (subagents). | -| `sources/claude/` | Claude-only components (slash-commands, hooks). | -| `sources/codex/` | Codex-only plugin documentation and static files. | -| `sources/cursor/` | Cursor-only components (rules, commands, assets). | -| `sources/dev-docs/` | Source for the separate `glean-dev-docs` plugin. | -| `pluginpack.config.ts` | Build config — which sources compose into which plugin, per target. | -| `plugins/`, `glean/`, `glean-dev-docs/`, `.agents/`, `.codex-plugin/`, `.claude-plugin/`, `.cursor-plugin/` | **Generated** output. Don't edit by hand — it's rebuilt from source. | +| Path | What it is | +| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `shared/glean/` | Canonical Glean plugin: skills, agents, static files, and the local MCP implementation. | +| `shared/glean-dev-docs/` | Canonical source for the separate developer-docs plugin. | +| `overrides///` | Target-specific additions and replacements applied after the shared source. | +| `repositories//` | Files emitted at the root of each generated marketplace repository. | +| `pluginpack.config.ts` | Build config — which shared source, overrides, and content kinds each target includes. | +| `dist//` | **Generated** marketplace repositories. Don't edit them by hand — they're rebuilt from `shared/`, `overrides/`, and `repositories/`. | ## Plugins produced @@ -28,13 +26,17 @@ Each target gets two single-purpose plugins: code exploration, people and experts, meetings, onboarding, and personal productivity. Skills auto-trigger by task; there's no per-skill install. - **`glean-dev-docs`** — searches the public Glean developer documentation - (separate MCP server, for people *building with* Glean). + (separate MCP server, for people _building with_ Glean). ## How it works `pluginpack` reads `pluginpack.config.ts`, collects the configured skills and components, and emits each host's native format: +Nothing under `shared/` ships implicitly. Each emitted plugin names its shared +`source`, optional target `overrides`, and any `include` or `exclude` selection in +`pluginpack.config.ts`. + - **Claude Code** — a marketplace + plugin manifest with convention-discovered skills, commands, and hooks. - **Cursor** — a marketplace + `plugin.json` referencing skills, agents, rules, @@ -44,42 +46,43 @@ components, and emits each host's native format: Skills use the open Agent Skills format — `SKILL.md` with `name`/`description` frontmatter and optional `references/` loaded on demand — which Claude Code, -Codex, Cursor, Gemini CLI, and Copilot all support. Base skills ship everywhere; -target overrides handle the few host-specific differences. +Codex, Cursor, Gemini CLI, and Copilot all support. Shared skills ship to each +target that includes them; target overrides handle host-specific differences. -> The plugins don't bundle a Glean MCP server — users connect one themselves -> (your host's Glean MCP setup guides that). The skills then use whatever Glean MCP -> tools are available in the host. +The Claude and Codex `glean` plugins bundle the local Glean MCP adapter under +`shared/glean/mcp/`. Cursor excludes that capability and uses a separately +connected Glean MCP server. MCP configuration lives in `mcp/config.json`, while +`mcp/pluginpack.json` lists the implementation files that ship. ## Develop Requires Node >= 24. Install once with `npm install`. -| Command | What it does | -|---------|--------------| -| `npm run build` | Compile all targets into the generated plugin output. | -| `npm run validate` | Validate each target's generated output. | -| `npm test` | Build every target, then validate each generated output. | -| `npm run prune` | Remove stale generated files. | -| `npm run clean` | Remove all generated output. | +| Command | What it does | +| ------------------ | -------------------------------------------------------- | +| `npm run build` | Compile all targets into the generated plugin output. | +| `npm run validate` | Validate each target's generated output. | +| `npm test` | Build every target, then validate each generated output. | +| `npm run prune` | Remove stale generated files. | +| `npm run clean` | Remove all generated output. | ### Add or change a skill -1. Edit or create `skills//SKILL.md` (add `references/*.md` for deep, +1. Edit or create `shared/glean/skills//SKILL.md` (add `references/*.md` for deep, load-on-demand detail). 2. `npm run build` to regenerate the plugins. 3. `npm test` to confirm every target builds and validates cleanly. Base skill changes reach every target that includes them. When one host needs different instructions, add a full replacement at -`skills//targets//SKILL.md`; other targets keep the base file. +`overrides//glean/skills//SKILL.md`; other targets keep the shared file. ### Commit conventions Releases and the changelog are driven by [Conventional Commits](https://www.conventionalcommits.org/). -In this repo the skill markdown *is* the shipped product, so: +In this repo the skill markdown _is_ the shipped product, so: -- Use `feat:` / `fix:` for any change to `skills/` or `sources/` content — +- Use `feat:` / `fix:` for any change to `shared/` or `overrides/` content — it alters what users install, even when the change is "just docs". - Reserve `docs:` for repo-level documentation that doesn't ship (README, contributing notes, etc.). diff --git a/RELEASE.md b/RELEASE.md index b1af8fb..5617ba3 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -58,8 +58,8 @@ release is what triggers the actual plugin distribution (below). 1. Determine the next version from commits since the last tag (`feat` → minor, `fix` → patch, a `BREAKING CHANGE` footer → major). 2. Regenerate `CHANGELOG.md`. Its `after:bump` hook then runs `npm run - build`, which syncs that changelog into `sources/claude`, - `sources/codex`, `sources/cursor`, `sources/dev-docs`, and rebuilds the + build`, which syncs that changelog into `shared/glean` and + `shared/glean-dev-docs`, then rebuilds the generated plugin output — all of which is included in the release commit. 3. Commit as `chore: release v${version}`, tag `v${version}`, and push both diff --git a/sources/local-mcp/hooks/auto-approve-run-tool.mjs b/overrides/claude/glean/hooks/auto-approve-run-tool.mjs similarity index 100% rename from sources/local-mcp/hooks/auto-approve-run-tool.mjs rename to overrides/claude/glean/hooks/auto-approve-run-tool.mjs diff --git a/sources/local-mcp/hooks/hooks.json b/overrides/claude/glean/hooks/hooks.json similarity index 100% rename from sources/local-mcp/hooks/hooks.json rename to overrides/claude/glean/hooks/hooks.json diff --git a/sources/dev-docs/targets/codex/README.md b/overrides/codex/glean-dev-docs/README.md similarity index 100% rename from sources/dev-docs/targets/codex/README.md rename to overrides/codex/glean-dev-docs/README.md diff --git a/sources/codex-assets/assets/avatar.png b/overrides/codex/glean-dev-docs/assets/avatar.png similarity index 100% rename from sources/codex-assets/assets/avatar.png rename to overrides/codex/glean-dev-docs/assets/avatar.png diff --git a/sources/codex/LICENSE b/overrides/codex/glean/LICENSE similarity index 100% rename from sources/codex/LICENSE rename to overrides/codex/glean/LICENSE diff --git a/sources/codex/README.md b/overrides/codex/glean/README.md similarity index 100% rename from sources/codex/README.md rename to overrides/codex/glean/README.md diff --git a/sources/cursor/assets/avatar.png b/overrides/codex/glean/assets/avatar.png similarity index 100% rename from sources/cursor/assets/avatar.png rename to overrides/codex/glean/assets/avatar.png diff --git a/sources/local-mcp/targets/codex/.mcp.json b/overrides/codex/glean/mcp/config.json similarity index 84% rename from sources/local-mcp/targets/codex/.mcp.json rename to overrides/codex/glean/mcp/config.json index d7bd1d2..d3dabb0 100644 --- a/sources/local-mcp/targets/codex/.mcp.json +++ b/overrides/codex/glean/mcp/config.json @@ -2,7 +2,7 @@ "mcpServers": { "glean_plugin": { "command": "node", - "args": ["./start.mjs"], + "args": ["./mcp/start.mjs"], "cwd": ".", "env": { "ENABLE_HITL": "true", diff --git a/skills/skill-creation-guide/targets/codex/SKILL.md b/overrides/codex/glean/skills/skill-creation-guide/SKILL.md similarity index 100% rename from skills/skill-creation-guide/targets/codex/SKILL.md rename to overrides/codex/glean/skills/skill-creation-guide/SKILL.md diff --git a/sources/cursor/README.md b/overrides/cursor/glean/README.md similarity index 100% rename from sources/cursor/README.md rename to overrides/cursor/glean/README.md diff --git a/overrides/cursor/glean/assets/avatar.png b/overrides/cursor/glean/assets/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..14e232fae59dbd6b4f55236db116b9d77014ee2a GIT binary patch literal 2481 zcmai$=|9wqAH}~jX2u|E#xl0aTDIsa$~p{ViLzvij4iU22sg_NBaEF}CRt)|uMi?N zWEo2+W#8AqwPmt~af#dg2Y$Z?=e*C;^Lg-j9nwt;EGIjX9RL7M6Jw0kFB1L}9QMoG zbzFM@fGx}fgSH6+ea|z$Zez#a)h7Z|WRFRbm(MEb=tIDiYP+7&?~| zx|to0C$+L!c59x7_tmfDhUXiWkIx)pM`hPpYOGn6dIDq&5V$4(p5C!h#UHw#J@YG> zsRv}geUsfUZb1?gW-l`fAHP{$cQY^3eL1z`b||GJf`2!jUVEV~?+g;RlyuKm7n9zG zt%z`s$g9>IOfrjP=G4h)jyNigYM&#7v&t7j8}o;^(fyGCYh4aj1yj7du~ zQB^P;I6fI@FNxHNjh=}vGE)JcC$1b20doJ?RCSwqX(})68lC!na+6%Nt|vA_?UhqD zwnl)6p6^C)9=%(NpUXUSnHw6qV%|5dwiiK?l}*}Md6>(jMwz#`a2@CLkdbTjdBNgq z6;Ob<`K|O3OLeHGuboh%C{KIGq9Ib)xgg^WSUbnjX*)7^cWn1)i5l`#Vu4WiVYhF` z46TZL0C7s7E$+PMX@5QcJF-uZjr;HA{=4(1NBdg}4JsODqBt18vRSpd%h_&+n2eE!dJ>(LLXyZN@Rarw9c(-~gMIF|y7C+<& za1?|}U{<2iuLaCyg`73j)NC8!GL7cjYQOBm=9K<|y>s-mJx?}~{dlX1l_M2kFFX-T z&FNM#LV#mK6W2`i%76_nb*$shu&ou?T}kXbHqZY!wl=efT4+5pR0u5v54r&r&F4F@ zkkng(UA$**(YVu^BHBG;qkZG6)j+t9q(OXCRwdWR+xM|W-PkUdhHWA|K|$k6oGC9L z{&e+Q{PyNd)t3noPaH#@BB^3t2x{HG7?TrL?=sQBf!T7{e0y|RaU4n&^D2Sk=4Q8U z%Nz$yPeomzbMTfA=E-z8OW#<&)xOpcfuew z>+7RCpw-qWE2B&-Ok*sG0nW8xA#u>wC%D-oTE0Mfy6wZZJujIKkApK-?C{&vDa%f2{dB% zW961F*S0kxP~FfaX8?QYy5mH2z4#rF&4b%$6C1$t^Xp4&Q%CCV5FQEnV%zpkW%OO{ zQhf^e`SUXp{Y^u%2gXmRGK~6JDuM4ho0`Qt6N@rNP@V!LaSMVaGtSB-wLRM zlB#tt5InTa7Jv-oQHFsC-|O1Nh8OUf$AXxQUtex`JX%v# zIvSK*vJ560glxvZtssCp>Y;6%0u8rpnh3m}p`_$F-DUYFLlO`=-QUt8(JkhKG5z8} zG4P4z=8MSbo_tB%URqAMYis=@uR9v(Hocp27CGgCy8^>6Az4a2j!mJ5uO(90gU0U(^sAK;OkJg zZuyP%iXiL8K+b%I#B)zgd7}oPUn_9;u{DDvF71A-3_I0rc(izORVCsS=;IC4BRRAN zQo+Kw^{x~*i;~JOsmP+v7E0S`+P_coNw$XrIC`Um<;I0*t3+ZQ(@>&%JRY>2;`pgG=Jix&N3^p z%5w~n416Xa(#$SMk}+daq}DOC3fP_nv+um=pHO$dpF8>GFn#@DHG)89l6;ZzEe`xM zZO`PVOFbfJw!p^GlRTfP9g#MH8Os1>Vh2~Ic1bMAKwYiaRyrk9Xp3<#i|g?RC>h--y#WS7{B?(uvtA2)8Z1<(<{B`be`rHPp?ouIS8^h>E?Dbi&v zw)rK%w33S}MJ-dB(+m`L;$m3+t%~dGoBE5m5W;iX@LADqDrW*t4q)P+y-;{F^T9#; zPqM)To8GgLv{iAtNh)%dm>}a@n)({75I=#QA#AzSc{Aj0FY2o*xL;HX_OW+CY1LH6Fe{RL z#?kF|Dxg@?B1g;`9xeXIS~smJul7?j2KJipRbuI#)*~YAWAIl8Nrf9QrE2fB_eNvO zRX0F~(^-Na-`34BAS2v 0) { `Found ${offenders.length} shell script(s):\n${rel}\n\n` + `The plugin runs on end-user machines including Windows, where POSIX shell\n` + `is unavailable. Use a cross-platform Node.js script instead:\n\n` + - ` - Write it as a .mjs file (see sources/local-mcp/start.mjs).\n` + + ` - Write it as a .mjs file (see shared/glean/mcp/start.mjs).\n` + ` - Use Node built-ins (node:fs, node:path, node:child_process) instead of\n` + ` shell utilities, and avoid shell-only syntax.\n` + ` - Invoke it with "node