@codyswann/lisa 2.176.11 → 2.177.0
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/codex/scripts/setup-jira-cli.sh +34 -0
- package/dist/opencode/plugin-templates/lisa-session-bootstrap.ts +34 -4
- 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/hooks/setup-jira-cli.sh +36 -2
- package/plugins/lisa/rules/eager/integration-access-layer.md +10 -0
- package/plugins/lisa/rules/reference/integration-access-layer.md +56 -0
- package/plugins/lisa/skills/jam-access/SKILL.md +51 -0
- package/plugins/lisa/skills/jam-access/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-access/SKILL.md +90 -0
- package/plugins/lisa/skills/linear-access/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/posthog-access/SKILL.md +60 -0
- package/plugins/lisa/skills/posthog-access/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/sentry-access/SKILL.md +56 -0
- package/plugins/lisa/skills/sentry-access/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/sonarcloud-access/SKILL.md +71 -0
- package/plugins/lisa/skills/sonarcloud-access/agents/openai.yaml +4 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/jam-access/SKILL.md +51 -0
- package/plugins/lisa-agy/skills/linear-access/SKILL.md +90 -0
- package/plugins/lisa-agy/skills/posthog-access/SKILL.md +60 -0
- package/plugins/lisa-agy/skills/sentry-access/SKILL.md +56 -0
- package/plugins/lisa-agy/skills/sonarcloud-access/SKILL.md +71 -0
- 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/hooks/setup-jira-cli.sh +36 -2
- package/plugins/lisa-copilot/rules/eager/integration-access-layer.md +10 -0
- package/plugins/lisa-copilot/rules/reference/integration-access-layer.md +56 -0
- package/plugins/lisa-copilot/skills/jam-access/SKILL.md +51 -0
- package/plugins/lisa-copilot/skills/linear-access/SKILL.md +90 -0
- package/plugins/lisa-copilot/skills/posthog-access/SKILL.md +60 -0
- package/plugins/lisa-copilot/skills/sentry-access/SKILL.md +56 -0
- package/plugins/lisa-copilot/skills/sonarcloud-access/SKILL.md +71 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/setup-jira-cli.sh +36 -2
- package/plugins/lisa-cursor/rules/integration-access-layer-reference.mdc +61 -0
- package/plugins/lisa-cursor/rules/integration-access-layer.mdc +15 -0
- package/plugins/lisa-cursor/skills/jam-access/SKILL.md +51 -0
- package/plugins/lisa-cursor/skills/linear-access/SKILL.md +90 -0
- package/plugins/lisa-cursor/skills/posthog-access/SKILL.md +60 -0
- package/plugins/lisa-cursor/skills/sentry-access/SKILL.md +56 -0
- package/plugins/lisa-cursor/skills/sonarcloud-access/SKILL.md +71 -0
- 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/hooks/setup-jira-cli.sh +36 -2
- package/plugins/src/base/rules/eager/integration-access-layer.md +10 -0
- package/plugins/src/base/rules/reference/integration-access-layer.md +56 -0
- package/plugins/src/base/skills/jam-access/SKILL.md +51 -0
- package/plugins/src/base/skills/linear-access/SKILL.md +90 -0
- package/plugins/src/base/skills/posthog-access/SKILL.md +60 -0
- package/plugins/src/base/skills/sentry-access/SKILL.md +56 -0
- package/plugins/src/base/skills/sonarcloud-access/SKILL.md +71 -0
- package/scripts/generate-codex-plugin-artifacts.mjs +28 -7
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sentry-access
|
|
3
|
+
description: "Vendor-neutral access layer for Sentry. Sentry-oriented skills MUST delegate through this skill rather than calling Sentry MCP tools, sentry-cli, or REST directly. Resolves Sentry MCP/CLI first when available, then falls back to SENTRY_AUTH_TOKEN + Sentry REST API."
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Sentry Access: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Single chokepoint for Sentry operations. Caller skills MUST NOT call
|
|
10
|
+
`mcp__sentry__*`, `sentry-cli`, or `https://sentry.io/api/` directly.
|
|
11
|
+
|
|
12
|
+
## Invocation Contract
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
operation: list-issues org:<ORG> project:<PROJECT> query:<QUERY> [environment:<ENV>]
|
|
16
|
+
operation: get-issue issue_id:<ID>
|
|
17
|
+
operation: events org:<ORG> project:<PROJECT> query:<QUERY>
|
|
18
|
+
operation: releases org:<ORG> project:<PROJECT>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Return parsed JSON in a `<result>` block.
|
|
22
|
+
|
|
23
|
+
## Substrate Selection
|
|
24
|
+
|
|
25
|
+
Probe in order:
|
|
26
|
+
|
|
27
|
+
1. Sentry MCP, if available and authenticated.
|
|
28
|
+
2. `sentry-cli`, if installed and authenticated to the requested org/project.
|
|
29
|
+
3. `SENTRY_AUTH_TOKEN` bearer token against Sentry REST.
|
|
30
|
+
|
|
31
|
+
Sentry documents API auth tokens for REST API calls. The headless REST tier uses:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
sentry_api() {
|
|
35
|
+
local path="$1"
|
|
36
|
+
[ -n "$SENTRY_AUTH_TOKEN" ] || {
|
|
37
|
+
echo "Error: SENTRY_AUTH_TOKEN is not set." >&2
|
|
38
|
+
return 1
|
|
39
|
+
}
|
|
40
|
+
curl -sS "https://sentry.io/api/0${path}" \
|
|
41
|
+
-H "Authorization: Bearer $SENTRY_AUTH_TOKEN"
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If neither tier works, fail with:
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
Error: no Sentry access substrate available. Authenticate Sentry MCP/CLI or set SENTRY_AUTH_TOKEN.
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Invariants
|
|
52
|
+
|
|
53
|
+
- Fallback is gated on `SENTRY_AUTH_TOKEN`.
|
|
54
|
+
- Org/project come from `.sentryclirc`, `.lisa.config.json`, or explicit
|
|
55
|
+
operation args; never infer by searching all accessible orgs.
|
|
56
|
+
- Consumer skills do not embed Sentry REST paths.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sonarcloud-access
|
|
3
|
+
description: "Vendor-neutral access layer for SonarCloud/SonarQube Cloud. Sonar triage skills MUST delegate through this skill rather than calling Sonar MCP tools or REST directly. Resolves Sonar MCP first when available, then falls back to SONAR_TOKEN + SonarCloud Web API."
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SonarCloud Access: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Single chokepoint for SonarCloud operations. Caller skills MUST NOT call
|
|
10
|
+
`mcp__sonarqube__*` tools directly or curl `https://sonarcloud.io/api/`
|
|
11
|
+
themselves.
|
|
12
|
+
|
|
13
|
+
## Invocation Contract
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
operation: gate-status project_key:<KEY> [branch:<BRANCH>] [pull_request:<N>]
|
|
17
|
+
operation: issues project_key:<KEY> [branch:<BRANCH>] [pull_request:<N>] [types:<csv>] [severities:<csv>]
|
|
18
|
+
operation: hotspots project_key:<KEY> [branch:<BRANCH>] [pull_request:<N>]
|
|
19
|
+
operation: rule-detail key:<RULE_KEY>
|
|
20
|
+
operation: source-snippet component:<COMPONENT_KEY> from:<N> to:<N>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Return parsed JSON in a `<result>` block.
|
|
24
|
+
|
|
25
|
+
## Substrate Selection
|
|
26
|
+
|
|
27
|
+
Probe in order:
|
|
28
|
+
|
|
29
|
+
1. Sonar MCP, if available and authenticated.
|
|
30
|
+
2. `SONAR_TOKEN` against the SonarCloud Web API.
|
|
31
|
+
|
|
32
|
+
SonarCloud documents bearer-token authentication for the Web API. Use:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
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
|
+
```
|
|
45
|
+
|
|
46
|
+
If a host still requires the legacy token-as-basic-auth form, make that an
|
|
47
|
+
explicit adapter branch in this skill; consumers do not choose auth style.
|
|
48
|
+
|
|
49
|
+
If neither tier works, fail with:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
Error: no SonarCloud access substrate available. Authenticate the Sonar MCP or set SONAR_TOKEN.
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## REST Dispatch
|
|
56
|
+
|
|
57
|
+
| Operation | REST path |
|
|
58
|
+
|---|---|
|
|
59
|
+
| `gate-status` | `/qualitygates/project_status?projectKey=<KEY>[&branch=<BRANCH>][&pullRequest=<N>]` |
|
|
60
|
+
| `issues` | `/issues/search?componentKeys=<KEY>[&branch=<BRANCH>][&pullRequest=<N>]...` |
|
|
61
|
+
| `hotspots` | `/hotspots/search?projectKey=<KEY>[&branch=<BRANCH>][&pullRequest=<N>]` |
|
|
62
|
+
| `rule-detail` | `/rules/show?key=<RULE_KEY>` |
|
|
63
|
+
| `source-snippet` | `/sources/lines?key=<COMPONENT_KEY>&from=<N>&to=<N>` |
|
|
64
|
+
|
|
65
|
+
## Invariants
|
|
66
|
+
|
|
67
|
+
- Fallback is gated on `SONAR_TOKEN`.
|
|
68
|
+
- SonarCloud host access requires `sonarcloud.io` in any custom remote network
|
|
69
|
+
allowlist.
|
|
70
|
+
- Consumers ask for analysis data by operation name; this skill owns the Web API
|
|
71
|
+
path shape.
|
|
@@ -191,12 +191,28 @@ const ACRONYMS = new Set([
|
|
|
191
191
|
"llm",
|
|
192
192
|
]);
|
|
193
193
|
|
|
194
|
+
/**
|
|
195
|
+
* Brand names whose mixed-case capitalization cannot be reproduced by the
|
|
196
|
+
* simple title-case or all-upper-case rules above.
|
|
197
|
+
*
|
|
198
|
+
* Keys are lower-cased token forms (as they appear split from a kebab skill
|
|
199
|
+
* name). Values are the canonical display spellings. Entries here take
|
|
200
|
+
* precedence over both {@link ACRONYMS} and the default title-case path so
|
|
201
|
+
* that `posthog-access` -> "PostHog Access" rather than "Posthog Access".
|
|
202
|
+
*/
|
|
203
|
+
const BRAND_NAMES = new Map([
|
|
204
|
+
["posthog", "PostHog"],
|
|
205
|
+
["sonarcloud", "SonarCloud"],
|
|
206
|
+
]);
|
|
207
|
+
|
|
194
208
|
/**
|
|
195
209
|
* Humanize a kebab/snake/space-delimited token into a Title-Cased display name.
|
|
196
210
|
*
|
|
197
211
|
* Splits on `-`, `_`, and runs of whitespace, then title-cases each word —
|
|
198
|
-
* except tokens in {@link ACRONYMS}, which are upper-cased
|
|
199
|
-
*
|
|
212
|
+
* except tokens in {@link ACRONYMS}, which are upper-cased, and tokens in
|
|
213
|
+
* {@link BRAND_NAMES}, which are emitted with their canonical spelling.
|
|
214
|
+
* This is the rule the PRD (#521) specifies for `display_name`:
|
|
215
|
+
* `exploratory-qa` -> "Exploratory QA".
|
|
200
216
|
* Pure: same input always yields the same output.
|
|
201
217
|
*
|
|
202
218
|
* @param {string} raw The raw skill/frontmatter name token.
|
|
@@ -206,11 +222,16 @@ function humanizeName(raw) {
|
|
|
206
222
|
return raw
|
|
207
223
|
.split(/[-_\s]+/)
|
|
208
224
|
.filter(word => word.length > 0)
|
|
209
|
-
.map(word =>
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
225
|
+
.map(word => {
|
|
226
|
+
const lower = word.toLowerCase();
|
|
227
|
+
if (BRAND_NAMES.has(lower)) {
|
|
228
|
+
return BRAND_NAMES.get(lower);
|
|
229
|
+
}
|
|
230
|
+
if (ACRONYMS.has(lower)) {
|
|
231
|
+
return word.toUpperCase();
|
|
232
|
+
}
|
|
233
|
+
return word.charAt(0).toUpperCase() + word.slice(1);
|
|
234
|
+
})
|
|
214
235
|
.join(" ");
|
|
215
236
|
}
|
|
216
237
|
|