@codyswann/lisa 2.176.11 → 2.176.12

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.
Files changed (57) hide show
  1. package/dist/codex/scripts/setup-jira-cli.sh +34 -0
  2. package/dist/opencode/plugin-templates/lisa-session-bootstrap.ts +34 -4
  3. package/package.json +1 -1
  4. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  5. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  6. package/plugins/lisa/hooks/setup-jira-cli.sh +36 -2
  7. package/plugins/lisa-agy/plugin.json +1 -1
  8. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  9. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  10. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  11. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  13. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa-copilot/hooks/setup-jira-cli.sh +36 -2
  15. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-cursor/hooks/setup-jira-cli.sh +36 -2
  17. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa-expo-agy/plugin.json +1 -1
  20. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  24. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  25. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  29. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  30. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  34. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  35. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  39. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  40. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  44. package/plugins/lisa-rails-agy/plugin.json +1 -1
  45. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  49. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  50. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  55. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  57. package/plugins/src/base/hooks/setup-jira-cli.sh +36 -2
@@ -3,6 +3,40 @@
3
3
  # Writes jira-cli configuration from environment variables when available.
4
4
  set -euo pipefail
5
5
 
6
+ read_lisa_config() {
7
+ local query="$1"
8
+ local value=""
9
+
10
+ if ! command -v jq &>/dev/null; then
11
+ return 0
12
+ fi
13
+
14
+ if [[ -f ".lisa.config.local.json" ]]; then
15
+ value=$(jq -r "${query} // empty" .lisa.config.local.json 2>/dev/null || true)
16
+ fi
17
+
18
+ if [[ -z "${value}" && -f ".lisa.config.json" ]]; then
19
+ value=$(jq -r "${query} // empty" .lisa.config.json 2>/dev/null || true)
20
+ fi
21
+
22
+ printf '%s' "${value}"
23
+ }
24
+
25
+ if [[ -z "${JIRA_SERVER:-}" ]]; then
26
+ ATLASSIAN_SITE="$(read_lisa_config '.atlassian.site')"
27
+ if [[ -n "${ATLASSIAN_SITE}" ]]; then
28
+ if [[ "${ATLASSIAN_SITE}" == http://* || "${ATLASSIAN_SITE}" == https://* ]]; then
29
+ JIRA_SERVER="${ATLASSIAN_SITE}"
30
+ else
31
+ JIRA_SERVER="https://${ATLASSIAN_SITE}"
32
+ fi
33
+ fi
34
+ fi
35
+
36
+ if [[ -z "${JIRA_PROJECT:-}" ]]; then
37
+ JIRA_PROJECT="$(read_lisa_config '.jira.project')"
38
+ fi
39
+
6
40
  if [[ -z "${JIRA_SERVER:-}" || -z "${JIRA_LOGIN:-}" ]]; then
7
41
  exit 0
8
42
  fi
@@ -23,7 +23,8 @@ export const LisaSessionBootstrap = async ({
23
23
  worktree: string;
24
24
  }) => {
25
25
  const root = worktree;
26
- const { existsSync, mkdirSync, writeFileSync } = await import("node:fs");
26
+ const { existsSync, mkdirSync, readFileSync, writeFileSync } =
27
+ await import("node:fs");
27
28
 
28
29
  // install-pkgs: bootstrap dependencies when they're missing.
29
30
  try {
@@ -46,9 +47,38 @@ export const LisaSessionBootstrap = async ({
46
47
  // fail open — never block startup on a dependency-install error
47
48
  }
48
49
 
49
- // setup-jira-cli: write jira-cli config from environment variables.
50
+ // setup-jira-cli: write jira-cli config from environment variables and non-secret Lisa config.
50
51
  try {
51
- const server = process.env.JIRA_SERVER;
52
+ const readLisaConfig = (path: string[]) => {
53
+ for (const file of [".lisa.config.local.json", ".lisa.config.json"]) {
54
+ const configPath = `${root}/${file}`;
55
+ if (!existsSync(configPath)) continue;
56
+ try {
57
+ let value: unknown = JSON.parse(readFileSync(configPath, "utf8"));
58
+ for (const key of path) {
59
+ if (!value || typeof value !== "object" || !(key in value)) {
60
+ value = undefined;
61
+ break;
62
+ }
63
+ value = (value as Record<string, unknown>)[key];
64
+ }
65
+ if (typeof value === "string" && value) return value;
66
+ } catch {
67
+ // ignore malformed local config and keep fail-open behavior
68
+ }
69
+ }
70
+ return undefined;
71
+ };
72
+ const atlassianSite = readLisaConfig(["atlassian", "site"]);
73
+ const server =
74
+ process.env.JIRA_SERVER ??
75
+ (/^https?:\/\//.test(atlassianSite ?? "")
76
+ ? atlassianSite
77
+ : atlassianSite
78
+ ? `https://${atlassianSite}`
79
+ : undefined);
80
+ const project =
81
+ process.env.JIRA_PROJECT ?? readLisaConfig(["jira", "project"]) ?? "";
52
82
  const login = process.env.JIRA_LOGIN;
53
83
  const home = process.env.HOME;
54
84
  if (server && login && home) {
@@ -58,7 +88,7 @@ export const LisaSessionBootstrap = async ({
58
88
  `installation: ${process.env.JIRA_INSTALLATION ?? "cloud"}`,
59
89
  `server: ${server}`,
60
90
  `login: ${login}`,
61
- `project: ${process.env.JIRA_PROJECT ?? ""}`,
91
+ `project: ${project}`,
62
92
  `board: "${process.env.JIRA_BOARD ?? ""}"`,
63
93
  "auth_type: basic",
64
94
  "epic:",
package/package.json CHANGED
@@ -91,7 +91,7 @@
91
91
  "ws": ">=8.20.1"
92
92
  },
93
93
  "name": "@codyswann/lisa",
94
- "version": "2.176.11",
94
+ "version": "2.176.12",
95
95
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
96
96
  "main": "dist/index.js",
97
97
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -5,9 +5,9 @@
5
5
  #
6
6
  # Required env vars (must be created in your Claude Code Web environment):
7
7
  # JIRA_INSTALLATION - cloud or local
8
- # JIRA_SERVER - Atlassian instance URL
8
+ # JIRA_SERVER - Atlassian instance URL (falls back to .lisa.config*.json atlassian.site)
9
9
  # JIRA_LOGIN - login email
10
- # JIRA_PROJECT - default project key
10
+ # JIRA_PROJECT - default project key (falls back to .lisa.config*.json jira.project)
11
11
  # JIRA_API_TOKEN - already expected by jira-cli natively
12
12
  #
13
13
  # Optional env vars:
@@ -31,6 +31,40 @@ fi
31
31
  CONFIG_DIR="${HOME}/.config/.jira"
32
32
  CONFIG_FILE="${CONFIG_DIR}/.config.yml"
33
33
 
34
+ read_lisa_config() {
35
+ local query="$1"
36
+ local value=""
37
+
38
+ if ! command -v jq &>/dev/null; then
39
+ return 0
40
+ fi
41
+
42
+ if [[ -f ".lisa.config.local.json" ]]; then
43
+ value=$(jq -r "${query} // empty" .lisa.config.local.json 2>/dev/null || true)
44
+ fi
45
+
46
+ if [[ -z "${value}" && -f ".lisa.config.json" ]]; then
47
+ value=$(jq -r "${query} // empty" .lisa.config.json 2>/dev/null || true)
48
+ fi
49
+
50
+ printf '%s' "${value}"
51
+ }
52
+
53
+ if [[ -z "${JIRA_SERVER:-}" ]]; then
54
+ ATLASSIAN_SITE="$(read_lisa_config '.atlassian.site')"
55
+ if [[ -n "${ATLASSIAN_SITE}" ]]; then
56
+ if [[ "${ATLASSIAN_SITE}" == http://* || "${ATLASSIAN_SITE}" == https://* ]]; then
57
+ JIRA_SERVER="${ATLASSIAN_SITE}"
58
+ else
59
+ JIRA_SERVER="https://${ATLASSIAN_SITE}"
60
+ fi
61
+ fi
62
+ fi
63
+
64
+ if [[ -z "${JIRA_PROJECT:-}" ]]; then
65
+ JIRA_PROJECT="$(read_lisa_config '.jira.project')"
66
+ fi
67
+
34
68
  # Skip config write if required vars are missing
35
69
  if [[ -z "${JIRA_SERVER:-}" || -z "${JIRA_LOGIN:-}" ]]; then
36
70
  exit 0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -5,9 +5,9 @@
5
5
  #
6
6
  # Required env vars (must be created in your Claude Code Web environment):
7
7
  # JIRA_INSTALLATION - cloud or local
8
- # JIRA_SERVER - Atlassian instance URL
8
+ # JIRA_SERVER - Atlassian instance URL (falls back to .lisa.config*.json atlassian.site)
9
9
  # JIRA_LOGIN - login email
10
- # JIRA_PROJECT - default project key
10
+ # JIRA_PROJECT - default project key (falls back to .lisa.config*.json jira.project)
11
11
  # JIRA_API_TOKEN - already expected by jira-cli natively
12
12
  #
13
13
  # Optional env vars:
@@ -31,6 +31,40 @@ fi
31
31
  CONFIG_DIR="${HOME}/.config/.jira"
32
32
  CONFIG_FILE="${CONFIG_DIR}/.config.yml"
33
33
 
34
+ read_lisa_config() {
35
+ local query="$1"
36
+ local value=""
37
+
38
+ if ! command -v jq &>/dev/null; then
39
+ return 0
40
+ fi
41
+
42
+ if [[ -f ".lisa.config.local.json" ]]; then
43
+ value=$(jq -r "${query} // empty" .lisa.config.local.json 2>/dev/null || true)
44
+ fi
45
+
46
+ if [[ -z "${value}" && -f ".lisa.config.json" ]]; then
47
+ value=$(jq -r "${query} // empty" .lisa.config.json 2>/dev/null || true)
48
+ fi
49
+
50
+ printf '%s' "${value}"
51
+ }
52
+
53
+ if [[ -z "${JIRA_SERVER:-}" ]]; then
54
+ ATLASSIAN_SITE="$(read_lisa_config '.atlassian.site')"
55
+ if [[ -n "${ATLASSIAN_SITE}" ]]; then
56
+ if [[ "${ATLASSIAN_SITE}" == http://* || "${ATLASSIAN_SITE}" == https://* ]]; then
57
+ JIRA_SERVER="${ATLASSIAN_SITE}"
58
+ else
59
+ JIRA_SERVER="https://${ATLASSIAN_SITE}"
60
+ fi
61
+ fi
62
+ fi
63
+
64
+ if [[ -z "${JIRA_PROJECT:-}" ]]; then
65
+ JIRA_PROJECT="$(read_lisa_config '.jira.project')"
66
+ fi
67
+
34
68
  # Skip config write if required vars are missing
35
69
  if [[ -z "${JIRA_SERVER:-}" || -z "${JIRA_LOGIN:-}" ]]; then
36
70
  exit 0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -5,9 +5,9 @@
5
5
  #
6
6
  # Required env vars (must be created in your Claude Code Web environment):
7
7
  # JIRA_INSTALLATION - cloud or local
8
- # JIRA_SERVER - Atlassian instance URL
8
+ # JIRA_SERVER - Atlassian instance URL (falls back to .lisa.config*.json atlassian.site)
9
9
  # JIRA_LOGIN - login email
10
- # JIRA_PROJECT - default project key
10
+ # JIRA_PROJECT - default project key (falls back to .lisa.config*.json jira.project)
11
11
  # JIRA_API_TOKEN - already expected by jira-cli natively
12
12
  #
13
13
  # Optional env vars:
@@ -31,6 +31,40 @@ fi
31
31
  CONFIG_DIR="${HOME}/.config/.jira"
32
32
  CONFIG_FILE="${CONFIG_DIR}/.config.yml"
33
33
 
34
+ read_lisa_config() {
35
+ local query="$1"
36
+ local value=""
37
+
38
+ if ! command -v jq &>/dev/null; then
39
+ return 0
40
+ fi
41
+
42
+ if [[ -f ".lisa.config.local.json" ]]; then
43
+ value=$(jq -r "${query} // empty" .lisa.config.local.json 2>/dev/null || true)
44
+ fi
45
+
46
+ if [[ -z "${value}" && -f ".lisa.config.json" ]]; then
47
+ value=$(jq -r "${query} // empty" .lisa.config.json 2>/dev/null || true)
48
+ fi
49
+
50
+ printf '%s' "${value}"
51
+ }
52
+
53
+ if [[ -z "${JIRA_SERVER:-}" ]]; then
54
+ ATLASSIAN_SITE="$(read_lisa_config '.atlassian.site')"
55
+ if [[ -n "${ATLASSIAN_SITE}" ]]; then
56
+ if [[ "${ATLASSIAN_SITE}" == http://* || "${ATLASSIAN_SITE}" == https://* ]]; then
57
+ JIRA_SERVER="${ATLASSIAN_SITE}"
58
+ else
59
+ JIRA_SERVER="https://${ATLASSIAN_SITE}"
60
+ fi
61
+ fi
62
+ fi
63
+
64
+ if [[ -z "${JIRA_PROJECT:-}" ]]; then
65
+ JIRA_PROJECT="$(read_lisa_config '.jira.project')"
66
+ fi
67
+
34
68
  # Skip config write if required vars are missing
35
69
  if [[ -z "${JIRA_SERVER:-}" || -z "${JIRA_LOGIN:-}" ]]; then
36
70
  exit 0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
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.176.11",
3
+ "version": "2.176.12",
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.176.11",
3
+ "version": "2.176.12",
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.176.11",
3
+ "version": "2.176.12",
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.176.11",
3
+ "version": "2.176.12",
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-phaser",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.176.11",
3
+ "version": "2.176.12",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -5,9 +5,9 @@
5
5
  #
6
6
  # Required env vars (must be created in your Claude Code Web environment):
7
7
  # JIRA_INSTALLATION - cloud or local
8
- # JIRA_SERVER - Atlassian instance URL
8
+ # JIRA_SERVER - Atlassian instance URL (falls back to .lisa.config*.json atlassian.site)
9
9
  # JIRA_LOGIN - login email
10
- # JIRA_PROJECT - default project key
10
+ # JIRA_PROJECT - default project key (falls back to .lisa.config*.json jira.project)
11
11
  # JIRA_API_TOKEN - already expected by jira-cli natively
12
12
  #
13
13
  # Optional env vars:
@@ -31,6 +31,40 @@ fi
31
31
  CONFIG_DIR="${HOME}/.config/.jira"
32
32
  CONFIG_FILE="${CONFIG_DIR}/.config.yml"
33
33
 
34
+ read_lisa_config() {
35
+ local query="$1"
36
+ local value=""
37
+
38
+ if ! command -v jq &>/dev/null; then
39
+ return 0
40
+ fi
41
+
42
+ if [[ -f ".lisa.config.local.json" ]]; then
43
+ value=$(jq -r "${query} // empty" .lisa.config.local.json 2>/dev/null || true)
44
+ fi
45
+
46
+ if [[ -z "${value}" && -f ".lisa.config.json" ]]; then
47
+ value=$(jq -r "${query} // empty" .lisa.config.json 2>/dev/null || true)
48
+ fi
49
+
50
+ printf '%s' "${value}"
51
+ }
52
+
53
+ if [[ -z "${JIRA_SERVER:-}" ]]; then
54
+ ATLASSIAN_SITE="$(read_lisa_config '.atlassian.site')"
55
+ if [[ -n "${ATLASSIAN_SITE}" ]]; then
56
+ if [[ "${ATLASSIAN_SITE}" == http://* || "${ATLASSIAN_SITE}" == https://* ]]; then
57
+ JIRA_SERVER="${ATLASSIAN_SITE}"
58
+ else
59
+ JIRA_SERVER="https://${ATLASSIAN_SITE}"
60
+ fi
61
+ fi
62
+ fi
63
+
64
+ if [[ -z "${JIRA_PROJECT:-}" ]]; then
65
+ JIRA_PROJECT="$(read_lisa_config '.jira.project')"
66
+ fi
67
+
34
68
  # Skip config write if required vars are missing
35
69
  if [[ -z "${JIRA_SERVER:-}" || -z "${JIRA_LOGIN:-}" ]]; then
36
70
  exit 0