@codyswann/lisa 2.296.1 → 2.297.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/doctor-sonar.d.ts +15 -0
- package/dist/cli/doctor-sonar.d.ts.map +1 -0
- package/dist/cli/doctor-sonar.js +28 -0
- package/dist/cli/doctor-sonar.js.map +1 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +4 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/core/lisa.d.ts +13 -0
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +44 -0
- package/dist/core/lisa.js.map +1 -1
- package/dist/core/project-config-kane.d.ts +9 -0
- package/dist/core/project-config-kane.d.ts.map +1 -1
- package/dist/core/project-config-kane.js +35 -3
- package/dist/core/project-config-kane.js.map +1 -1
- package/dist/core/sonar-integration.d.ts +30 -0
- package/dist/core/sonar-integration.d.ts.map +1 -0
- package/dist/core/sonar-integration.js +55 -0
- package/dist/core/sonar-integration.js.map +1 -0
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +25 -4
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/sonar/sonar-installer.d.ts +19 -0
- package/dist/sonar/sonar-installer.d.ts.map +1 -0
- package/dist/sonar/sonar-installer.js +69 -0
- package/dist/sonar/sonar-installer.js.map +1 -0
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-analyze-claude-remote/SKILL.md +6 -6
- package/plugins/lisa/.codex-plugin/skills/lisa-generate-claude-remote-build-script/SKILL.md +14 -6
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-sonar/SKILL.md +108 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-sonar/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/SKILL.md +58 -46
- package/plugins/lisa/commands/setup/sonar.md +7 -0
- package/plugins/lisa/rules/reference/integration-access-layer.md +10 -2
- package/plugins/lisa/skills/lisa-analyze-claude-remote/SKILL.md +6 -6
- package/plugins/lisa/skills/lisa-generate-claude-remote-build-script/SKILL.md +14 -6
- package/plugins/lisa/skills/lisa-setup-sonar/SKILL.md +108 -0
- package/plugins/lisa/skills/lisa-setup-sonar/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-sonarcloud-access/SKILL.md +59 -47
- package/plugins/lisa/skills/lisa-sonarcloud-access/agents/openai.yaml +2 -2
- package/plugins/lisa-agy/commands/lisa/setup/sonar.md +7 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-analyze-claude-remote/SKILL.md +6 -6
- package/plugins/lisa-agy/skills/lisa-generate-claude-remote-build-script/SKILL.md +14 -6
- package/plugins/lisa-agy/skills/lisa-setup-sonar/SKILL.md +108 -0
- package/plugins/lisa-agy/skills/lisa-sonarcloud-access/SKILL.md +59 -47
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/commands/lisa/setup/sonar.md +7 -0
- package/plugins/lisa-copilot/rules/reference/integration-access-layer.md +10 -2
- package/plugins/lisa-copilot/skills/lisa-analyze-claude-remote/SKILL.md +6 -6
- package/plugins/lisa-copilot/skills/lisa-generate-claude-remote-build-script/SKILL.md +14 -6
- package/plugins/lisa-copilot/skills/lisa-setup-sonar/SKILL.md +108 -0
- package/plugins/lisa-copilot/skills/lisa-sonarcloud-access/SKILL.md +59 -47
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/commands/lisa/setup/sonar.md +7 -0
- package/plugins/lisa-cursor/rules/integration-access-layer-reference.mdc +10 -2
- package/plugins/lisa-cursor/skills/lisa-analyze-claude-remote/SKILL.md +6 -6
- package/plugins/lisa-cursor/skills/lisa-generate-claude-remote-build-script/SKILL.md +14 -6
- package/plugins/lisa-cursor/skills/lisa-setup-sonar/SKILL.md +108 -0
- package/plugins/lisa-cursor/skills/lisa-sonarcloud-access/SKILL.md +59 -47
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/commands/setup/sonar.md +7 -0
- package/plugins/src/base/rules/reference/integration-access-layer.md +10 -2
- package/plugins/src/base/skills/lisa-analyze-claude-remote/SKILL.md +6 -6
- package/plugins/src/base/skills/lisa-generate-claude-remote-build-script/SKILL.md +14 -6
- package/plugins/src/base/skills/lisa-setup-sonar/SKILL.md +108 -0
- package/plugins/src/base/skills/lisa-sonarcloud-access/SKILL.md +59 -47
|
@@ -1,71 +1,83 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lisa-sonarcloud-access
|
|
3
|
-
description: "Vendor-neutral access layer for
|
|
3
|
+
description: "Vendor-neutral access layer for SonarQube Cloud/Server. Sonar triage skills MUST delegate through this skill rather than calling the SonarQube MCP tools directly. Single substrate: the official SonarQube MCP server (mcp__sonarqube__*), authenticated headlessly from SONARQUBE_CLI_TOKEN (+ SONARQUBE_CLI_ORG for Cloud, SONARQUBE_CLI_SERVER for Server)."
|
|
4
4
|
allowed-tools: ["Bash", "Read", "Skill"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# SonarCloud Access: $ARGUMENTS
|
|
8
8
|
|
|
9
|
-
Single chokepoint for
|
|
10
|
-
`mcp__sonarqube__*` tools directly
|
|
11
|
-
|
|
9
|
+
Single chokepoint for Sonar quality and security data. Caller skills MUST NOT
|
|
10
|
+
invoke `mcp__sonarqube__*` tools directly; they ask for data by operation name and
|
|
11
|
+
this skill owns the tool selection.
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Substrate
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
operation: rule-detail key:<RULE_KEY>
|
|
20
|
-
operation: source-snippet component:<COMPONENT_KEY> from:<N> to:<N>
|
|
21
|
-
```
|
|
15
|
+
There is exactly one substrate: the **official SonarQube MCP server**, provided by
|
|
16
|
+
the `sonarqube` plugin and launched by the `sonar` CLI (`sonar run mcp`). It
|
|
17
|
+
authenticates headlessly from environment variables — no browser, no OS keychain —
|
|
18
|
+
so it is the same substrate on a developer machine and in a headless cloud routine:
|
|
22
19
|
|
|
23
|
-
|
|
20
|
+
- `SONARQUBE_CLI_TOKEN` — required (Sonar user/analysis token).
|
|
21
|
+
- `SONARQUBE_CLI_ORG` — required for SonarQube Cloud.
|
|
22
|
+
- `SONARQUBE_CLI_SERVER` — required for a self-hosted SonarQube Server.
|
|
24
23
|
|
|
25
|
-
|
|
24
|
+
These are the **SonarQube CLI** variable names (`SONARQUBE_CLI_*`), which the
|
|
25
|
+
`sonar run mcp` wrapper forwards into the MCP container — verified against a live
|
|
26
|
+
SonarQube Cloud org. Do **not** substitute the raw MCP-image names
|
|
27
|
+
(`SONARQUBE_TOKEN`/`SONARQUBE_ORG`/`SONARQUBE_URL`): those are read only when
|
|
28
|
+
running the Docker image directly, and the `sonar` CLI ignores them (auth exits
|
|
29
|
+
non-zero). The CI scan gate's `SONAR_TOKEN` is a third, separate name.
|
|
26
30
|
|
|
27
|
-
|
|
31
|
+
Wiring is performed once by `/lisa:setup:sonar` (which drives `sonar integrate
|
|
32
|
+
<agent>`); this access layer assumes the MCP is already wired. This is distinct
|
|
33
|
+
from the CI `SONAR_TOKEN` secret that authenticates the SonarCloud scan job in
|
|
34
|
+
`quality.yml` — that gate is separate and unchanged.
|
|
28
35
|
|
|
29
|
-
|
|
30
|
-
2. `SONAR_TOKEN` against the SonarCloud Web API.
|
|
36
|
+
## Probe (tool-access-gate)
|
|
31
37
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
sonar_api() {
|
|
36
|
-
local path="$1"
|
|
37
|
-
[ -n "$SONAR_TOKEN" ] || {
|
|
38
|
-
echo "Error: SONAR_TOKEN is not set." >&2
|
|
39
|
-
return 1
|
|
40
|
-
}
|
|
41
|
-
curl -sS "https://sonarcloud.io/api${path}" \
|
|
42
|
-
-H "Authorization: Bearer $SONAR_TOKEN"
|
|
43
|
-
}
|
|
44
|
-
```
|
|
38
|
+
Prove access with a cheap read-only MCP call before relying on it — the `sonar` CLI
|
|
39
|
+
being on PATH is not access. Probe by searching projects (the `projects` toolset is
|
|
40
|
+
always enabled):
|
|
45
41
|
|
|
46
|
-
If a
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
If neither tier works, fail with:
|
|
42
|
+
- If a `mcp__sonarqube__*` project-search tool returns, access is proven.
|
|
43
|
+
- If no `mcp__sonarqube__*` tool is present, or the call fails authentication, fail
|
|
44
|
+
loudly and do not improvise a substitute:
|
|
50
45
|
|
|
51
46
|
```text
|
|
52
|
-
Error: no
|
|
47
|
+
Error: no SonarQube access. Run /lisa:setup:sonar (or `sonar integrate <agent>`), and set SONARQUBE_CLI_TOKEN (+ SONARQUBE_CLI_ORG for Cloud / SONARQUBE_CLI_SERVER for Server).
|
|
53
48
|
```
|
|
54
49
|
|
|
55
|
-
|
|
50
|
+
There is no hand-rolled REST fallback: the official MCP is headless-capable via the
|
|
51
|
+
token env vars, so it is the only sanctioned substrate. A missing MCP is a
|
|
52
|
+
tool-access-gate failure to surface, not a reason to curl the Web API.
|
|
53
|
+
|
|
54
|
+
## Operation → toolset map
|
|
55
|
+
|
|
56
|
+
Consumers pass a coarse, vendor-native operation; resolve it with the matching
|
|
57
|
+
`mcp__sonarqube__*` tool from the named toolset and return parsed JSON in a
|
|
58
|
+
`<result>` block.
|
|
56
59
|
|
|
57
|
-
| Operation |
|
|
60
|
+
| Operation | SonarQube MCP toolset |
|
|
58
61
|
|---|---|
|
|
59
|
-
| `gate-status` |
|
|
60
|
-
| `issues` |
|
|
61
|
-
| `hotspots` |
|
|
62
|
-
| `rule-detail` |
|
|
63
|
-
| `source-snippet` |
|
|
62
|
+
| `gate-status` | `quality-gates` |
|
|
63
|
+
| `issues` | `issues` |
|
|
64
|
+
| `hotspots` | `security-hotspots` |
|
|
65
|
+
| `rule-detail` | `rules` |
|
|
66
|
+
| `source-snippet` | `cag` (context augmentation) / component source |
|
|
67
|
+
| `coverage` | `coverage` |
|
|
68
|
+
| `duplication` | `duplications` |
|
|
69
|
+
| `dependency-risks` | `dependency-risks` |
|
|
70
|
+
| `projects` | `projects` |
|
|
71
|
+
|
|
72
|
+
Pass the project key through the tool's `projectKey` argument (or rely on a
|
|
73
|
+
server-configured `SONARQUBE_PROJECT_KEY`); pass `branch` / `pullRequest` where the
|
|
74
|
+
tool accepts them.
|
|
64
75
|
|
|
65
76
|
## Invariants
|
|
66
77
|
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
|
|
70
|
-
-
|
|
71
|
-
|
|
78
|
+
- The official SonarQube MCP is the only substrate; there is no REST fallback.
|
|
79
|
+
- Auth is env-var only (`SONARQUBE_CLI_TOKEN` [+ `SONARQUBE_CLI_ORG` | `SONARQUBE_CLI_SERVER`]);
|
|
80
|
+
never the interactive `sonar auth login` keychain flow inside a factory.
|
|
81
|
+
- Sonar host access requires the host (`sonarcloud.io`, `sonarqube.us`, or the
|
|
82
|
+
Server URL) in any custom remote-network allowlist.
|
|
83
|
+
- Consumers ask for data by operation name; this skill owns tool selection.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.297.1",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.297.1",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.297.1",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.297.1",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.297.1",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Wire the official SonarQube plugin + MCP into this project across every supported coding agent. Installs/updates the SonarQube CLI, authenticates (browser login on a dev machine, or SONARQUBE_CLI_TOKEN headless), selects the Test Manager target, runs `sonar integrate <agent>` for each supported agent, and writes only non-secret policy to `.lisa.config.json`. Does not touch the separate CI SonarCloud scan gate."
|
|
3
|
+
allowed-tools: ["Skill"]
|
|
4
|
+
argument-hint: "[--org=<org-key>] [--server-url=<url>] [--global]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Use the /lisa-setup-sonar skill to wire the official SonarQube MCP for this project across every supported agent. $ARGUMENTS
|
|
@@ -15,6 +15,14 @@ Do not blind-retry a failed or absent MCP. Fall back only after checking the
|
|
|
15
15
|
documented env var for that vendor, and never silently no-op when neither tier is
|
|
16
16
|
available.
|
|
17
17
|
|
|
18
|
+
Some MCPs authenticate headlessly from an env token and need no separate REST
|
|
19
|
+
tier — the MCP **is** the headless substrate on both developer machines and cloud
|
|
20
|
+
routines. The official SonarQube MCP is one such case (`SONARQUBE_CLI_TOKEN`
|
|
21
|
+
[+ `SONARQUBE_CLI_ORG`/`SONARQUBE_CLI_SERVER`]): `lisa-sonarcloud-access` resolves it as a
|
|
22
|
+
single substrate with no hand-rolled REST fallback. Reserve the two-tier
|
|
23
|
+
MCP-then-REST shape for vendors whose MCP is browser-OAuth or keychain-bound and
|
|
24
|
+
therefore dead headless.
|
|
25
|
+
|
|
18
26
|
## Access Skills
|
|
19
27
|
|
|
20
28
|
| Vendor | Access skill | Headless env var | REST/token substrate |
|
|
@@ -23,7 +31,7 @@ available.
|
|
|
23
31
|
| Notion | `lisa-notion-access` | `NOTION_API_TOKEN` | Notion REST |
|
|
24
32
|
| Linear | `lisa-linear-access` | `LINEAR_API_KEY` | Linear GraphQL |
|
|
25
33
|
| Jam | `lisa-jam-access` | `JAM_PAT` | Jam CLI |
|
|
26
|
-
| SonarCloud | `lisa-sonarcloud-access` | `
|
|
34
|
+
| SonarCloud | `lisa-sonarcloud-access` | `SONARQUBE_CLI_TOKEN` (+ `SONARQUBE_CLI_ORG`/`SONARQUBE_CLI_SERVER`) | Official SonarQube MCP (headless via token) |
|
|
27
35
|
| Sentry | `lisa-sentry-access` | `SENTRY_AUTH_TOKEN` | Sentry REST API |
|
|
28
36
|
| PostHog | `lisa-posthog-access` | `POSTHOG_PERSONAL_API_KEY` | PostHog REST API |
|
|
29
37
|
| Google Play | `lisa-expo:play-store-access` | `GOOGLE_PLAY_SERVICE_ACCOUNT_JSON` or `GOOGLE_PLAY_SERVICE_ACCOUNT_KEY_BASE64` | Google Play Developer API |
|
|
@@ -39,7 +47,7 @@ Source audit date: 2026-06-23. Scope: `plugins/src/**/skills/**` and
|
|
|
39
47
|
| Notion | setup-only references | `notion-access` | Done. |
|
|
40
48
|
| Linear | Multiple base queue/read/write/verify skills | Raw Linear MCP | Access layer added; consumers still need migration to `linear-access`. |
|
|
41
49
|
| Jam | None in `plugins/src` at audit time | No access layer | Access layer added for host rules that include Jam triage. |
|
|
42
|
-
| SonarCloud |
|
|
50
|
+
| SonarCloud | Routed through `sonarcloud-access` | Official SonarQube MCP (single substrate) | Migrated to the official token-authed SonarQube MCP; bespoke REST dispatch removed. |
|
|
43
51
|
| Sentry | No Sentry MCP references in `plugins/src`; CLI/REST mentions only | CLI/REST scattered in observability docs | Access layer added for future MCP-backed consumers. |
|
|
44
52
|
| PostHog | No PostHog MCP references in `plugins/src`; observability docs mention PostHog detection | No access layer | Access layer added for future MCP-backed consumers. |
|
|
45
53
|
| Google Play | No MCP surface; EAS submit docs only | `play-store-access` for Expo post-submit release visibility | Done for Expo stack. |
|
|
@@ -195,7 +195,7 @@ Group the findings as:
|
|
|
195
195
|
| Match | Substrate | Env | Setup / wiring | Domains |
|
|
196
196
|
|---|---|---|---|---|
|
|
197
197
|
| `mcp.jam.dev`, `jam`, or Jam MCP entries | Jam CLI (`jam`) authenticated by PAT | `JAM_PAT` | install with `curl -fsSL https://native.jam.dev/install | bash`; export `~/.local/bin`; run `printf '%s' "$JAM_PAT" | jam auth login --token`; optionally `jam skills install` | `native.jam.dev`, `api.jam.dev` |
|
|
198
|
-
| `mcp/sonarqube`, `sonarqube`, or SonarCloud
|
|
198
|
+
| `mcp/sonarqube`, `sonarqube`, or SonarQube/SonarCloud MCP entries | Official SonarQube MCP (`sonar run mcp`), token-authed — runs headless as-is, no REST substitute | `SONARQUBE_CLI_TOKEN` (+ `SONARQUBE_CLI_ORG` for Cloud / `SONARQUBE_CLI_SERVER` for Server) | install the SonarQube CLI (`curl -o- https://raw.githubusercontent.com/SonarSource/sonarqube-cli/refs/heads/master/user-scripts/install.sh \| bash`) and `sonar integrate <agent>`; pre-pull the MCP container image in the setup script so it fits the cache budget; the MCP authenticates from the env token — never `sonar auth login` | `sonarcloud.io`, `sonarqube.us` (or the Server URL) |
|
|
199
199
|
|
|
200
200
|
For PAT-bearer MCP substrates that really use the same MCP transport, include `mcpHeaders` in
|
|
201
201
|
the inventory with a snippet such as `headers: { "Authorization": "Bearer ${VAR}" }` so the
|
|
@@ -353,17 +353,17 @@ so the generator can render acquisition comments into its template:
|
|
|
353
353
|
"setupSnippet": "curl -fsSL https://native.jam.dev/install | bash; export PATH=\"$HOME/.local/bin:$PATH\"; printf '%s' \"$JAM_PAT\" | jam auth login --token; jam skills install"
|
|
354
354
|
},
|
|
355
355
|
{
|
|
356
|
-
"name": "
|
|
357
|
-
"reason": "
|
|
358
|
-
"headlessSubstrate": "
|
|
356
|
+
"name": "SONARQUBE_CLI_TOKEN", "required": false, "secret": true, "integration": "sonarcloud",
|
|
357
|
+
"reason": "authenticates the official SonarQube MCP headlessly; the MCP runs as-is in a cloud routine (Docker is preinstalled), so no REST substitute is needed",
|
|
358
|
+
"headlessSubstrate": "Official SonarQube MCP (token-authed)",
|
|
359
359
|
"acquireUrl": "https://docs.sonarsource.com/sonarqube-cloud/managing-your-account/managing-tokens",
|
|
360
|
-
"accessScope": "token must be able to read the target
|
|
360
|
+
"accessScope": "token must be able to read the target Sonar organization/project quality gate, issues, hotspots, rules, coverage, duplications, and dependency risks; add SONARQUBE_CLI_ORG (Cloud) or SONARQUBE_CLI_SERVER (Server)"
|
|
361
361
|
}
|
|
362
362
|
],
|
|
363
363
|
"mcp": [
|
|
364
364
|
{ "name": "linear-server", "transport": "http", "auth": "oauth", "headlessUsable": false, "replacedBy": "LINEAR_API_KEY + Linear GraphQL", "dormant": true },
|
|
365
365
|
{ "name": "jam", "transport": "http", "auth": "oauth", "headlessUsable": true, "replacedBy": "jam CLI + JAM_PAT", "dormant": true },
|
|
366
|
-
{ "name": "sonarqube", "transport": "stdio", "auth": "
|
|
366
|
+
{ "name": "sonarqube", "transport": "stdio", "auth": "env-token", "headlessUsable": true, "replacedBy": null, "dormant": true }
|
|
367
367
|
],
|
|
368
368
|
"awsProfiles": [
|
|
369
369
|
{
|