@codyswann/lisa 2.121.0 → 2.122.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/.claude-plugin/marketplace.json +144 -0
- package/dist/agy/agents-md-installer.d.ts +6 -3
- package/dist/agy/agents-md-installer.d.ts.map +1 -1
- package/dist/agy/agents-md-installer.js +9 -4
- package/dist/agy/agents-md-installer.js.map +1 -1
- package/dist/agy/mcp-installer.d.ts +18 -0
- package/dist/agy/mcp-installer.d.ts.map +1 -1
- package/dist/agy/mcp-installer.js +21 -0
- package/dist/agy/mcp-installer.js.map +1 -1
- package/dist/agy/plugin-installer.d.ts +6 -4
- package/dist/agy/plugin-installer.d.ts.map +1 -1
- package/dist/agy/plugin-installer.js +13 -7
- package/dist/agy/plugin-installer.js.map +1 -1
- package/dist/codex/lisa-plugin-detection.d.ts +18 -19
- package/dist/codex/lisa-plugin-detection.d.ts.map +1 -1
- package/dist/codex/lisa-plugin-detection.js +26 -22
- package/dist/codex/lisa-plugin-detection.js.map +1 -1
- package/dist/copilot/plugin-installer.d.ts +6 -3
- package/dist/copilot/plugin-installer.d.ts.map +1 -1
- package/dist/copilot/plugin-installer.js +14 -7
- package/dist/copilot/plugin-installer.js.map +1 -1
- package/dist/core/config.d.ts +20 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +20 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/lisa.d.ts +16 -0
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +66 -19
- package/dist/core/lisa.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa/{.codex-plugin → hooks}/hooks.json +7 -7
- package/plugins/lisa-agy/plugin.json +1 -1
- 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 +11 -0
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +11 -0
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +11 -0
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- 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/.mcp.json +8 -0
- package/plugins/lisa-expo-agy/THIRD-PARTY-NOTICES.md +57 -0
- package/plugins/lisa-expo-agy/agents/ops-specialist.md +124 -0
- package/plugins/lisa-expo-agy/commands/e2e-coverage-gaps.md +7 -0
- package/plugins/lisa-expo-agy/commands/exploratory-qa.md +7 -0
- package/plugins/lisa-expo-agy/plugin.json +11 -0
- package/plugins/lisa-expo-agy/skills/add-app-clip/SKILL.md +280 -0
- package/plugins/lisa-expo-agy/skills/add-app-clip/references/native-module.md +96 -0
- package/plugins/lisa-expo-agy/skills/apollo-client/SKILL.md +238 -0
- package/plugins/lisa-expo-agy/skills/apollo-client/references/mutation-patterns.md +360 -0
- package/plugins/lisa-expo-agy/skills/atomic-design-gluestack/SKILL.md +360 -0
- package/plugins/lisa-expo-agy/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
- package/plugins/lisa-expo-agy/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
- package/plugins/lisa-expo-agy/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
- package/plugins/lisa-expo-agy/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +329 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/SKILL.md +321 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/animations.md +220 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/controls.md +272 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/form-sheet.md +253 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/gradients.md +106 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/icons.md +213 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/media.md +198 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/route-structure.md +229 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/search.md +248 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/storage.md +121 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/tabs.md +433 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/toolbar-and-headers.md +284 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/visual-effects.md +197 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/webgpu-three.md +605 -0
- package/plugins/lisa-expo-agy/skills/building-native-ui/references/zoom-transitions.md +158 -0
- package/plugins/lisa-expo-agy/skills/container-view-pattern/SKILL.md +299 -0
- package/plugins/lisa-expo-agy/skills/container-view-pattern/references/examples.md +749 -0
- package/plugins/lisa-expo-agy/skills/container-view-pattern/references/patterns.md +318 -0
- package/plugins/lisa-expo-agy/skills/container-view-pattern/scripts/create_component.py +200 -0
- package/plugins/lisa-expo-agy/skills/container-view-pattern/scripts/validate_component.py +209 -0
- package/plugins/lisa-expo-agy/skills/cross-platform-compatibility/SKILL.md +268 -0
- package/plugins/lisa-expo-agy/skills/cross-platform-compatibility/references/common-issues.md +619 -0
- package/plugins/lisa-expo-agy/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
- package/plugins/lisa-expo-agy/skills/cross-platform-compatibility/references/platform-api.md +276 -0
- package/plugins/lisa-expo-agy/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
- package/plugins/lisa-expo-agy/skills/directory-structure/SKILL.md +202 -0
- package/plugins/lisa-expo-agy/skills/directory-structure/scripts/validate_structure.py +445 -0
- package/plugins/lisa-expo-agy/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-expo-agy/skills/eas-update-insights/SKILL.md +228 -0
- package/plugins/lisa-expo-agy/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
- package/plugins/lisa-expo-agy/skills/eas-update-insights/references/update-insights-schema.md +69 -0
- package/plugins/lisa-expo-agy/skills/exploratory-qa/SKILL.md +145 -0
- package/plugins/lisa-expo-agy/skills/expo-api-routes/SKILL.md +369 -0
- package/plugins/lisa-expo-agy/skills/expo-brownfield/SKILL.md +54 -0
- package/plugins/lisa-expo-agy/skills/expo-brownfield/references/brownfield-integrated.md +526 -0
- package/plugins/lisa-expo-agy/skills/expo-brownfield/references/brownfield-isolated.md +402 -0
- package/plugins/lisa-expo-agy/skills/expo-brownfield/references/comparison.md +63 -0
- package/plugins/lisa-expo-agy/skills/expo-brownfield/references/troubleshooting.md +88 -0
- package/plugins/lisa-expo-agy/skills/expo-cicd-workflows/SKILL.md +92 -0
- package/plugins/lisa-expo-agy/skills/expo-cicd-workflows/scripts/fetch.js +113 -0
- package/plugins/lisa-expo-agy/skills/expo-cicd-workflows/scripts/package.json +11 -0
- package/plugins/lisa-expo-agy/skills/expo-cicd-workflows/scripts/validate.js +85 -0
- package/plugins/lisa-expo-agy/skills/expo-deployment/SKILL.md +190 -0
- package/plugins/lisa-expo-agy/skills/expo-deployment/references/app-store-metadata.md +479 -0
- package/plugins/lisa-expo-agy/skills/expo-deployment/references/ios-app-store.md +355 -0
- package/plugins/lisa-expo-agy/skills/expo-deployment/references/play-store.md +246 -0
- package/plugins/lisa-expo-agy/skills/expo-deployment/references/testflight.md +58 -0
- package/plugins/lisa-expo-agy/skills/expo-deployment/references/workflows.md +200 -0
- package/plugins/lisa-expo-agy/skills/expo-dev-client/SKILL.md +164 -0
- package/plugins/lisa-expo-agy/skills/expo-env-config/SKILL.md +309 -0
- package/plugins/lisa-expo-agy/skills/expo-env-config/references/validation-patterns.md +417 -0
- package/plugins/lisa-expo-agy/skills/expo-module/SKILL.md +141 -0
- package/plugins/lisa-expo-agy/skills/expo-module/references/config-plugin.md +90 -0
- package/plugins/lisa-expo-agy/skills/expo-module/references/create-expo-module.md +206 -0
- package/plugins/lisa-expo-agy/skills/expo-module/references/lifecycle.md +127 -0
- package/plugins/lisa-expo-agy/skills/expo-module/references/module-config.md +48 -0
- package/plugins/lisa-expo-agy/skills/expo-module/references/native-module.md +286 -0
- package/plugins/lisa-expo-agy/skills/expo-module/references/native-view.md +171 -0
- package/plugins/lisa-expo-agy/skills/expo-router-best-practices/SKILL.md +431 -0
- package/plugins/lisa-expo-agy/skills/expo-router-best-practices/references/official-docs.md +290 -0
- package/plugins/lisa-expo-agy/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
- package/plugins/lisa-expo-agy/skills/expo-tailwind-setup/SKILL.md +480 -0
- package/plugins/lisa-expo-agy/skills/expo-ui-jetpack-compose/SKILL.md +40 -0
- package/plugins/lisa-expo-agy/skills/expo-ui-swift-ui/SKILL.md +39 -0
- package/plugins/lisa-expo-agy/skills/gluestack-nativewind/SKILL.md +411 -0
- package/plugins/lisa-expo-agy/skills/gluestack-nativewind/references/color-tokens.md +343 -0
- package/plugins/lisa-expo-agy/skills/gluestack-nativewind/references/component-mapping.md +307 -0
- package/plugins/lisa-expo-agy/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
- package/plugins/lisa-expo-agy/skills/gluestack-nativewind/scripts/validate_styling.py +315 -0
- package/plugins/lisa-expo-agy/skills/jira-add-journey/SKILL.md +126 -0
- package/plugins/lisa-expo-agy/skills/jira-create/SKILL.md +161 -0
- package/plugins/lisa-expo-agy/skills/jira-evidence/SKILL.md +78 -0
- package/plugins/lisa-expo-agy/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-expo-agy/skills/jira-journey/SKILL.md +190 -0
- package/plugins/lisa-expo-agy/skills/jira-journey/scripts/generate-templates.py +281 -0
- package/plugins/lisa-expo-agy/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-expo-agy/skills/jira-verify/SKILL.md +27 -0
- package/plugins/lisa-expo-agy/skills/local-state/SKILL.md +362 -0
- package/plugins/lisa-expo-agy/skills/local-state/references/async-storage.md +505 -0
- package/plugins/lisa-expo-agy/skills/local-state/references/persistence-patterns.md +711 -0
- package/plugins/lisa-expo-agy/skills/local-state/references/reactive-variables.md +446 -0
- package/plugins/lisa-expo-agy/skills/native-data-fetching/SKILL.md +507 -0
- package/plugins/lisa-expo-agy/skills/native-data-fetching/references/expo-router-loaders.md +344 -0
- package/plugins/lisa-expo-agy/skills/ops-browser-uat/SKILL.md +124 -0
- package/plugins/lisa-expo-agy/skills/ops-check-logs/SKILL.md +211 -0
- package/plugins/lisa-expo-agy/skills/ops-db-ops/SKILL.md +119 -0
- package/plugins/lisa-expo-agy/skills/ops-deploy/SKILL.md +119 -0
- package/plugins/lisa-expo-agy/skills/ops-monitor-errors/SKILL.md +99 -0
- package/plugins/lisa-expo-agy/skills/ops-performance/SKILL.md +165 -0
- package/plugins/lisa-expo-agy/skills/ops-run-local/SKILL.md +166 -0
- package/plugins/lisa-expo-agy/skills/ops-verify-health/SKILL.md +101 -0
- package/plugins/lisa-expo-agy/skills/owasp-zap/SKILL.md +56 -0
- package/plugins/lisa-expo-agy/skills/playwright-ci-debugging/SKILL.md +140 -0
- package/plugins/lisa-expo-agy/skills/playwright-selectors/SKILL.md +455 -0
- package/plugins/lisa-expo-agy/skills/reduce-complexity/SKILL.md +251 -0
- package/plugins/lisa-expo-agy/skills/reduce-complexity/references/extraction-strategies.md +456 -0
- package/plugins/lisa-expo-agy/skills/reduce-complexity/references/refactoring-patterns.md +557 -0
- package/plugins/lisa-expo-agy/skills/testing-library/SKILL.md +314 -0
- package/plugins/lisa-expo-agy/skills/testing-library/references/async-patterns.md +420 -0
- package/plugins/lisa-expo-agy/skills/testing-library/references/expo-router-testing.md +556 -0
- package/plugins/lisa-expo-agy/skills/testing-library/references/mocking-patterns.md +590 -0
- package/plugins/lisa-expo-agy/skills/testing-library/references/query-priority.md +291 -0
- package/plugins/lisa-expo-agy/skills/upgrading-expo/SKILL.md +134 -0
- package/plugins/lisa-expo-agy/skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
- package/plugins/lisa-expo-agy/skills/upgrading-expo/references/expo-av-to-video.md +160 -0
- package/plugins/lisa-expo-agy/skills/upgrading-expo/references/native-tabs.md +124 -0
- package/plugins/lisa-expo-agy/skills/upgrading-expo/references/new-architecture.md +79 -0
- package/plugins/lisa-expo-agy/skills/upgrading-expo/references/react-19.md +79 -0
- package/plugins/lisa-expo-agy/skills/upgrading-expo/references/react-compiler.md +59 -0
- package/plugins/lisa-expo-agy/skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
- package/plugins/lisa-expo-agy/skills/use-dom/SKILL.md +417 -0
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +11 -0
- package/plugins/lisa-expo-copilot/.mcp.json +8 -0
- package/plugins/lisa-expo-copilot/THIRD-PARTY-NOTICES.md +57 -0
- package/plugins/lisa-expo-copilot/agents/ops-specialist.agent.md +124 -0
- package/plugins/lisa-expo-copilot/commands/e2e-coverage-gaps.md +7 -0
- package/plugins/lisa-expo-copilot/commands/exploratory-qa.md +7 -0
- package/plugins/lisa-expo-copilot/skills/add-app-clip/SKILL.md +280 -0
- package/plugins/lisa-expo-copilot/skills/add-app-clip/references/native-module.md +96 -0
- package/plugins/lisa-expo-copilot/skills/apollo-client/SKILL.md +238 -0
- package/plugins/lisa-expo-copilot/skills/apollo-client/references/mutation-patterns.md +360 -0
- package/plugins/lisa-expo-copilot/skills/atomic-design-gluestack/SKILL.md +360 -0
- package/plugins/lisa-expo-copilot/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
- package/plugins/lisa-expo-copilot/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
- package/plugins/lisa-expo-copilot/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
- package/plugins/lisa-expo-copilot/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +329 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/SKILL.md +321 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/animations.md +220 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/controls.md +272 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/form-sheet.md +253 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/gradients.md +106 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/icons.md +213 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/media.md +198 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/route-structure.md +229 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/search.md +248 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/storage.md +121 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/tabs.md +433 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/toolbar-and-headers.md +284 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/visual-effects.md +197 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/webgpu-three.md +605 -0
- package/plugins/lisa-expo-copilot/skills/building-native-ui/references/zoom-transitions.md +158 -0
- package/plugins/lisa-expo-copilot/skills/container-view-pattern/SKILL.md +299 -0
- package/plugins/lisa-expo-copilot/skills/container-view-pattern/references/examples.md +749 -0
- package/plugins/lisa-expo-copilot/skills/container-view-pattern/references/patterns.md +318 -0
- package/plugins/lisa-expo-copilot/skills/container-view-pattern/scripts/create_component.py +200 -0
- package/plugins/lisa-expo-copilot/skills/container-view-pattern/scripts/validate_component.py +209 -0
- package/plugins/lisa-expo-copilot/skills/cross-platform-compatibility/SKILL.md +268 -0
- package/plugins/lisa-expo-copilot/skills/cross-platform-compatibility/references/common-issues.md +619 -0
- package/plugins/lisa-expo-copilot/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
- package/plugins/lisa-expo-copilot/skills/cross-platform-compatibility/references/platform-api.md +276 -0
- package/plugins/lisa-expo-copilot/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
- package/plugins/lisa-expo-copilot/skills/directory-structure/SKILL.md +202 -0
- package/plugins/lisa-expo-copilot/skills/directory-structure/scripts/validate_structure.py +445 -0
- package/plugins/lisa-expo-copilot/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-expo-copilot/skills/eas-update-insights/SKILL.md +228 -0
- package/plugins/lisa-expo-copilot/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
- package/plugins/lisa-expo-copilot/skills/eas-update-insights/references/update-insights-schema.md +69 -0
- package/plugins/lisa-expo-copilot/skills/exploratory-qa/SKILL.md +145 -0
- package/plugins/lisa-expo-copilot/skills/expo-api-routes/SKILL.md +369 -0
- package/plugins/lisa-expo-copilot/skills/expo-brownfield/SKILL.md +54 -0
- package/plugins/lisa-expo-copilot/skills/expo-brownfield/references/brownfield-integrated.md +526 -0
- package/plugins/lisa-expo-copilot/skills/expo-brownfield/references/brownfield-isolated.md +402 -0
- package/plugins/lisa-expo-copilot/skills/expo-brownfield/references/comparison.md +63 -0
- package/plugins/lisa-expo-copilot/skills/expo-brownfield/references/troubleshooting.md +88 -0
- package/plugins/lisa-expo-copilot/skills/expo-cicd-workflows/SKILL.md +92 -0
- package/plugins/lisa-expo-copilot/skills/expo-cicd-workflows/scripts/fetch.js +113 -0
- package/plugins/lisa-expo-copilot/skills/expo-cicd-workflows/scripts/package.json +11 -0
- package/plugins/lisa-expo-copilot/skills/expo-cicd-workflows/scripts/validate.js +85 -0
- package/plugins/lisa-expo-copilot/skills/expo-deployment/SKILL.md +190 -0
- package/plugins/lisa-expo-copilot/skills/expo-deployment/references/app-store-metadata.md +479 -0
- package/plugins/lisa-expo-copilot/skills/expo-deployment/references/ios-app-store.md +355 -0
- package/plugins/lisa-expo-copilot/skills/expo-deployment/references/play-store.md +246 -0
- package/plugins/lisa-expo-copilot/skills/expo-deployment/references/testflight.md +58 -0
- package/plugins/lisa-expo-copilot/skills/expo-deployment/references/workflows.md +200 -0
- package/plugins/lisa-expo-copilot/skills/expo-dev-client/SKILL.md +164 -0
- package/plugins/lisa-expo-copilot/skills/expo-env-config/SKILL.md +309 -0
- package/plugins/lisa-expo-copilot/skills/expo-env-config/references/validation-patterns.md +417 -0
- package/plugins/lisa-expo-copilot/skills/expo-module/SKILL.md +141 -0
- package/plugins/lisa-expo-copilot/skills/expo-module/references/config-plugin.md +90 -0
- package/plugins/lisa-expo-copilot/skills/expo-module/references/create-expo-module.md +206 -0
- package/plugins/lisa-expo-copilot/skills/expo-module/references/lifecycle.md +127 -0
- package/plugins/lisa-expo-copilot/skills/expo-module/references/module-config.md +48 -0
- package/plugins/lisa-expo-copilot/skills/expo-module/references/native-module.md +286 -0
- package/plugins/lisa-expo-copilot/skills/expo-module/references/native-view.md +171 -0
- package/plugins/lisa-expo-copilot/skills/expo-router-best-practices/SKILL.md +431 -0
- package/plugins/lisa-expo-copilot/skills/expo-router-best-practices/references/official-docs.md +290 -0
- package/plugins/lisa-expo-copilot/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
- package/plugins/lisa-expo-copilot/skills/expo-tailwind-setup/SKILL.md +480 -0
- package/plugins/lisa-expo-copilot/skills/expo-ui-jetpack-compose/SKILL.md +40 -0
- package/plugins/lisa-expo-copilot/skills/expo-ui-swift-ui/SKILL.md +39 -0
- package/plugins/lisa-expo-copilot/skills/gluestack-nativewind/SKILL.md +411 -0
- package/plugins/lisa-expo-copilot/skills/gluestack-nativewind/references/color-tokens.md +343 -0
- package/plugins/lisa-expo-copilot/skills/gluestack-nativewind/references/component-mapping.md +307 -0
- package/plugins/lisa-expo-copilot/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
- package/plugins/lisa-expo-copilot/skills/gluestack-nativewind/scripts/validate_styling.py +315 -0
- package/plugins/lisa-expo-copilot/skills/jira-add-journey/SKILL.md +126 -0
- package/plugins/lisa-expo-copilot/skills/jira-create/SKILL.md +161 -0
- package/plugins/lisa-expo-copilot/skills/jira-evidence/SKILL.md +78 -0
- package/plugins/lisa-expo-copilot/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-expo-copilot/skills/jira-journey/SKILL.md +190 -0
- package/plugins/lisa-expo-copilot/skills/jira-journey/scripts/generate-templates.py +281 -0
- package/plugins/lisa-expo-copilot/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-expo-copilot/skills/jira-verify/SKILL.md +27 -0
- package/plugins/lisa-expo-copilot/skills/local-state/SKILL.md +362 -0
- package/plugins/lisa-expo-copilot/skills/local-state/references/async-storage.md +505 -0
- package/plugins/lisa-expo-copilot/skills/local-state/references/persistence-patterns.md +711 -0
- package/plugins/lisa-expo-copilot/skills/local-state/references/reactive-variables.md +446 -0
- package/plugins/lisa-expo-copilot/skills/native-data-fetching/SKILL.md +507 -0
- package/plugins/lisa-expo-copilot/skills/native-data-fetching/references/expo-router-loaders.md +344 -0
- package/plugins/lisa-expo-copilot/skills/ops-browser-uat/SKILL.md +124 -0
- package/plugins/lisa-expo-copilot/skills/ops-check-logs/SKILL.md +211 -0
- package/plugins/lisa-expo-copilot/skills/ops-db-ops/SKILL.md +119 -0
- package/plugins/lisa-expo-copilot/skills/ops-deploy/SKILL.md +119 -0
- package/plugins/lisa-expo-copilot/skills/ops-monitor-errors/SKILL.md +99 -0
- package/plugins/lisa-expo-copilot/skills/ops-performance/SKILL.md +165 -0
- package/plugins/lisa-expo-copilot/skills/ops-run-local/SKILL.md +166 -0
- package/plugins/lisa-expo-copilot/skills/ops-verify-health/SKILL.md +101 -0
- package/plugins/lisa-expo-copilot/skills/owasp-zap/SKILL.md +56 -0
- package/plugins/lisa-expo-copilot/skills/playwright-ci-debugging/SKILL.md +140 -0
- package/plugins/lisa-expo-copilot/skills/playwright-selectors/SKILL.md +455 -0
- package/plugins/lisa-expo-copilot/skills/reduce-complexity/SKILL.md +251 -0
- package/plugins/lisa-expo-copilot/skills/reduce-complexity/references/extraction-strategies.md +456 -0
- package/plugins/lisa-expo-copilot/skills/reduce-complexity/references/refactoring-patterns.md +557 -0
- package/plugins/lisa-expo-copilot/skills/testing-library/SKILL.md +314 -0
- package/plugins/lisa-expo-copilot/skills/testing-library/references/async-patterns.md +420 -0
- package/plugins/lisa-expo-copilot/skills/testing-library/references/expo-router-testing.md +556 -0
- package/plugins/lisa-expo-copilot/skills/testing-library/references/mocking-patterns.md +590 -0
- package/plugins/lisa-expo-copilot/skills/testing-library/references/query-priority.md +291 -0
- package/plugins/lisa-expo-copilot/skills/upgrading-expo/SKILL.md +134 -0
- package/plugins/lisa-expo-copilot/skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
- package/plugins/lisa-expo-copilot/skills/upgrading-expo/references/expo-av-to-video.md +160 -0
- package/plugins/lisa-expo-copilot/skills/upgrading-expo/references/native-tabs.md +124 -0
- package/plugins/lisa-expo-copilot/skills/upgrading-expo/references/new-architecture.md +79 -0
- package/plugins/lisa-expo-copilot/skills/upgrading-expo/references/react-19.md +79 -0
- package/plugins/lisa-expo-copilot/skills/upgrading-expo/references/react-compiler.md +59 -0
- package/plugins/lisa-expo-copilot/skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
- package/plugins/lisa-expo-copilot/skills/use-dom/SKILL.md +417 -0
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +11 -0
- package/plugins/lisa-expo-cursor/.mcp.json +8 -0
- package/plugins/lisa-expo-cursor/THIRD-PARTY-NOTICES.md +57 -0
- package/plugins/lisa-expo-cursor/agents/ops-specialist.md +124 -0
- package/plugins/lisa-expo-cursor/commands/e2e-coverage-gaps.md +7 -0
- package/plugins/lisa-expo-cursor/commands/exploratory-qa.md +7 -0
- package/plugins/lisa-expo-cursor/skills/add-app-clip/SKILL.md +280 -0
- package/plugins/lisa-expo-cursor/skills/add-app-clip/references/native-module.md +96 -0
- package/plugins/lisa-expo-cursor/skills/apollo-client/SKILL.md +238 -0
- package/plugins/lisa-expo-cursor/skills/apollo-client/references/mutation-patterns.md +360 -0
- package/plugins/lisa-expo-cursor/skills/atomic-design-gluestack/SKILL.md +360 -0
- package/plugins/lisa-expo-cursor/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
- package/plugins/lisa-expo-cursor/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
- package/plugins/lisa-expo-cursor/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
- package/plugins/lisa-expo-cursor/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +329 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/SKILL.md +321 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/animations.md +220 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/controls.md +272 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/form-sheet.md +253 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/gradients.md +106 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/icons.md +213 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/media.md +198 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/route-structure.md +229 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/search.md +248 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/storage.md +121 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/tabs.md +433 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/toolbar-and-headers.md +284 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/visual-effects.md +197 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/webgpu-three.md +605 -0
- package/plugins/lisa-expo-cursor/skills/building-native-ui/references/zoom-transitions.md +158 -0
- package/plugins/lisa-expo-cursor/skills/container-view-pattern/SKILL.md +299 -0
- package/plugins/lisa-expo-cursor/skills/container-view-pattern/references/examples.md +749 -0
- package/plugins/lisa-expo-cursor/skills/container-view-pattern/references/patterns.md +318 -0
- package/plugins/lisa-expo-cursor/skills/container-view-pattern/scripts/create_component.py +200 -0
- package/plugins/lisa-expo-cursor/skills/container-view-pattern/scripts/validate_component.py +209 -0
- package/plugins/lisa-expo-cursor/skills/cross-platform-compatibility/SKILL.md +268 -0
- package/plugins/lisa-expo-cursor/skills/cross-platform-compatibility/references/common-issues.md +619 -0
- package/plugins/lisa-expo-cursor/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
- package/plugins/lisa-expo-cursor/skills/cross-platform-compatibility/references/platform-api.md +276 -0
- package/plugins/lisa-expo-cursor/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
- package/plugins/lisa-expo-cursor/skills/directory-structure/SKILL.md +202 -0
- package/plugins/lisa-expo-cursor/skills/directory-structure/scripts/validate_structure.py +445 -0
- package/plugins/lisa-expo-cursor/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-expo-cursor/skills/eas-update-insights/SKILL.md +228 -0
- package/plugins/lisa-expo-cursor/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
- package/plugins/lisa-expo-cursor/skills/eas-update-insights/references/update-insights-schema.md +69 -0
- package/plugins/lisa-expo-cursor/skills/exploratory-qa/SKILL.md +145 -0
- package/plugins/lisa-expo-cursor/skills/expo-api-routes/SKILL.md +369 -0
- package/plugins/lisa-expo-cursor/skills/expo-brownfield/SKILL.md +54 -0
- package/plugins/lisa-expo-cursor/skills/expo-brownfield/references/brownfield-integrated.md +526 -0
- package/plugins/lisa-expo-cursor/skills/expo-brownfield/references/brownfield-isolated.md +402 -0
- package/plugins/lisa-expo-cursor/skills/expo-brownfield/references/comparison.md +63 -0
- package/plugins/lisa-expo-cursor/skills/expo-brownfield/references/troubleshooting.md +88 -0
- package/plugins/lisa-expo-cursor/skills/expo-cicd-workflows/SKILL.md +92 -0
- package/plugins/lisa-expo-cursor/skills/expo-cicd-workflows/scripts/fetch.js +113 -0
- package/plugins/lisa-expo-cursor/skills/expo-cicd-workflows/scripts/package.json +11 -0
- package/plugins/lisa-expo-cursor/skills/expo-cicd-workflows/scripts/validate.js +85 -0
- package/plugins/lisa-expo-cursor/skills/expo-deployment/SKILL.md +190 -0
- package/plugins/lisa-expo-cursor/skills/expo-deployment/references/app-store-metadata.md +479 -0
- package/plugins/lisa-expo-cursor/skills/expo-deployment/references/ios-app-store.md +355 -0
- package/plugins/lisa-expo-cursor/skills/expo-deployment/references/play-store.md +246 -0
- package/plugins/lisa-expo-cursor/skills/expo-deployment/references/testflight.md +58 -0
- package/plugins/lisa-expo-cursor/skills/expo-deployment/references/workflows.md +200 -0
- package/plugins/lisa-expo-cursor/skills/expo-dev-client/SKILL.md +164 -0
- package/plugins/lisa-expo-cursor/skills/expo-env-config/SKILL.md +309 -0
- package/plugins/lisa-expo-cursor/skills/expo-env-config/references/validation-patterns.md +417 -0
- package/plugins/lisa-expo-cursor/skills/expo-module/SKILL.md +141 -0
- package/plugins/lisa-expo-cursor/skills/expo-module/references/config-plugin.md +90 -0
- package/plugins/lisa-expo-cursor/skills/expo-module/references/create-expo-module.md +206 -0
- package/plugins/lisa-expo-cursor/skills/expo-module/references/lifecycle.md +127 -0
- package/plugins/lisa-expo-cursor/skills/expo-module/references/module-config.md +48 -0
- package/plugins/lisa-expo-cursor/skills/expo-module/references/native-module.md +286 -0
- package/plugins/lisa-expo-cursor/skills/expo-module/references/native-view.md +171 -0
- package/plugins/lisa-expo-cursor/skills/expo-router-best-practices/SKILL.md +431 -0
- package/plugins/lisa-expo-cursor/skills/expo-router-best-practices/references/official-docs.md +290 -0
- package/plugins/lisa-expo-cursor/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
- package/plugins/lisa-expo-cursor/skills/expo-tailwind-setup/SKILL.md +480 -0
- package/plugins/lisa-expo-cursor/skills/expo-ui-jetpack-compose/SKILL.md +40 -0
- package/plugins/lisa-expo-cursor/skills/expo-ui-swift-ui/SKILL.md +39 -0
- package/plugins/lisa-expo-cursor/skills/gluestack-nativewind/SKILL.md +411 -0
- package/plugins/lisa-expo-cursor/skills/gluestack-nativewind/references/color-tokens.md +343 -0
- package/plugins/lisa-expo-cursor/skills/gluestack-nativewind/references/component-mapping.md +307 -0
- package/plugins/lisa-expo-cursor/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
- package/plugins/lisa-expo-cursor/skills/gluestack-nativewind/scripts/validate_styling.py +315 -0
- package/plugins/lisa-expo-cursor/skills/jira-add-journey/SKILL.md +126 -0
- package/plugins/lisa-expo-cursor/skills/jira-create/SKILL.md +161 -0
- package/plugins/lisa-expo-cursor/skills/jira-evidence/SKILL.md +78 -0
- package/plugins/lisa-expo-cursor/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-expo-cursor/skills/jira-journey/SKILL.md +190 -0
- package/plugins/lisa-expo-cursor/skills/jira-journey/scripts/generate-templates.py +281 -0
- package/plugins/lisa-expo-cursor/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-expo-cursor/skills/jira-verify/SKILL.md +27 -0
- package/plugins/lisa-expo-cursor/skills/local-state/SKILL.md +362 -0
- package/plugins/lisa-expo-cursor/skills/local-state/references/async-storage.md +505 -0
- package/plugins/lisa-expo-cursor/skills/local-state/references/persistence-patterns.md +711 -0
- package/plugins/lisa-expo-cursor/skills/local-state/references/reactive-variables.md +446 -0
- package/plugins/lisa-expo-cursor/skills/native-data-fetching/SKILL.md +507 -0
- package/plugins/lisa-expo-cursor/skills/native-data-fetching/references/expo-router-loaders.md +344 -0
- package/plugins/lisa-expo-cursor/skills/ops-browser-uat/SKILL.md +124 -0
- package/plugins/lisa-expo-cursor/skills/ops-check-logs/SKILL.md +211 -0
- package/plugins/lisa-expo-cursor/skills/ops-db-ops/SKILL.md +119 -0
- package/plugins/lisa-expo-cursor/skills/ops-deploy/SKILL.md +119 -0
- package/plugins/lisa-expo-cursor/skills/ops-monitor-errors/SKILL.md +99 -0
- package/plugins/lisa-expo-cursor/skills/ops-performance/SKILL.md +165 -0
- package/plugins/lisa-expo-cursor/skills/ops-run-local/SKILL.md +166 -0
- package/plugins/lisa-expo-cursor/skills/ops-verify-health/SKILL.md +101 -0
- package/plugins/lisa-expo-cursor/skills/owasp-zap/SKILL.md +56 -0
- package/plugins/lisa-expo-cursor/skills/playwright-ci-debugging/SKILL.md +140 -0
- package/plugins/lisa-expo-cursor/skills/playwright-selectors/SKILL.md +455 -0
- package/plugins/lisa-expo-cursor/skills/reduce-complexity/SKILL.md +251 -0
- package/plugins/lisa-expo-cursor/skills/reduce-complexity/references/extraction-strategies.md +456 -0
- package/plugins/lisa-expo-cursor/skills/reduce-complexity/references/refactoring-patterns.md +557 -0
- package/plugins/lisa-expo-cursor/skills/testing-library/SKILL.md +314 -0
- package/plugins/lisa-expo-cursor/skills/testing-library/references/async-patterns.md +420 -0
- package/plugins/lisa-expo-cursor/skills/testing-library/references/expo-router-testing.md +556 -0
- package/plugins/lisa-expo-cursor/skills/testing-library/references/mocking-patterns.md +590 -0
- package/plugins/lisa-expo-cursor/skills/testing-library/references/query-priority.md +291 -0
- package/plugins/lisa-expo-cursor/skills/upgrading-expo/SKILL.md +134 -0
- package/plugins/lisa-expo-cursor/skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
- package/plugins/lisa-expo-cursor/skills/upgrading-expo/references/expo-av-to-video.md +160 -0
- package/plugins/lisa-expo-cursor/skills/upgrading-expo/references/native-tabs.md +124 -0
- package/plugins/lisa-expo-cursor/skills/upgrading-expo/references/new-architecture.md +79 -0
- package/plugins/lisa-expo-cursor/skills/upgrading-expo/references/react-19.md +79 -0
- package/plugins/lisa-expo-cursor/skills/upgrading-expo/references/react-compiler.md +59 -0
- package/plugins/lisa-expo-cursor/skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
- package/plugins/lisa-expo-cursor/skills/use-dom/SKILL.md +417 -0
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-harper-fabric/{.codex-plugin → hooks}/hooks.json +2 -2
- package/plugins/lisa-harper-fabric-agy/commands/e2e-coverage-gaps.md +7 -0
- package/plugins/lisa-harper-fabric-agy/commands/exploratory-qa.md +7 -0
- package/plugins/lisa-harper-fabric-agy/plugin.json +11 -0
- package/plugins/lisa-harper-fabric-agy/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-harper-fabric-agy/skills/exploratory-qa/SKILL.md +145 -0
- package/plugins/lisa-harper-fabric-agy/skills/harper-build-and-deploy/SKILL.md +101 -0
- package/plugins/lisa-harper-fabric-agy/skills/harper-component-model/SKILL.md +87 -0
- package/plugins/lisa-harper-fabric-agy/skills/harper-config-yaml/SKILL.md +107 -0
- package/plugins/lisa-harper-fabric-agy/skills/harper-resources/SKILL.md +106 -0
- package/plugins/lisa-harper-fabric-agy/skills/harper-schema-graphql/SKILL.md +72 -0
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +35 -0
- package/plugins/lisa-harper-fabric-copilot/commands/e2e-coverage-gaps.md +7 -0
- package/plugins/lisa-harper-fabric-copilot/commands/exploratory-qa.md +7 -0
- package/plugins/lisa-harper-fabric-copilot/rules/harper-fabric.md +51 -0
- package/plugins/lisa-harper-fabric-copilot/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-harper-fabric-copilot/skills/exploratory-qa/SKILL.md +145 -0
- package/plugins/lisa-harper-fabric-copilot/skills/harper-build-and-deploy/SKILL.md +101 -0
- package/plugins/lisa-harper-fabric-copilot/skills/harper-component-model/SKILL.md +87 -0
- package/plugins/lisa-harper-fabric-copilot/skills/harper-config-yaml/SKILL.md +107 -0
- package/plugins/lisa-harper-fabric-copilot/skills/harper-resources/SKILL.md +106 -0
- package/plugins/lisa-harper-fabric-copilot/skills/harper-schema-graphql/SKILL.md +72 -0
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +11 -0
- package/plugins/lisa-harper-fabric-cursor/commands/e2e-coverage-gaps.md +7 -0
- package/plugins/lisa-harper-fabric-cursor/commands/exploratory-qa.md +7 -0
- package/plugins/lisa-harper-fabric-cursor/rules/harper-fabric.md +51 -0
- package/plugins/lisa-harper-fabric-cursor/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-harper-fabric-cursor/skills/exploratory-qa/SKILL.md +145 -0
- package/plugins/lisa-harper-fabric-cursor/skills/harper-build-and-deploy/SKILL.md +101 -0
- package/plugins/lisa-harper-fabric-cursor/skills/harper-component-model/SKILL.md +87 -0
- package/plugins/lisa-harper-fabric-cursor/skills/harper-config-yaml/SKILL.md +107 -0
- package/plugins/lisa-harper-fabric-cursor/skills/harper-resources/SKILL.md +106 -0
- package/plugins/lisa-harper-fabric-cursor/skills/harper-schema-graphql/SKILL.md +72 -0
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-nestjs/{.codex-plugin → hooks}/hooks.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +11 -0
- package/plugins/lisa-nestjs-agy/skills/nestjs-graphql/SKILL.md +176 -0
- package/plugins/lisa-nestjs-agy/skills/nestjs-graphql/references/advanced-features.md +527 -0
- package/plugins/lisa-nestjs-agy/skills/nestjs-graphql/references/project-patterns.md +531 -0
- package/plugins/lisa-nestjs-agy/skills/nestjs-graphql/references/quick-start.md +257 -0
- package/plugins/lisa-nestjs-agy/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
- package/plugins/lisa-nestjs-agy/skills/nestjs-graphql/references/types-scalars.md +513 -0
- package/plugins/lisa-nestjs-agy/skills/nestjs-rules/SKILL.md +565 -0
- package/plugins/lisa-nestjs-agy/skills/typeorm-patterns/SKILL.md +275 -0
- package/plugins/lisa-nestjs-agy/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
- package/plugins/lisa-nestjs-agy/skills/typeorm-patterns/references/entity-patterns.md +450 -0
- package/plugins/lisa-nestjs-agy/skills/typeorm-patterns/references/observability-patterns.md +536 -0
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +24 -0
- package/plugins/lisa-nestjs-copilot/skills/nestjs-graphql/SKILL.md +176 -0
- package/plugins/lisa-nestjs-copilot/skills/nestjs-graphql/references/advanced-features.md +527 -0
- package/plugins/lisa-nestjs-copilot/skills/nestjs-graphql/references/project-patterns.md +531 -0
- package/plugins/lisa-nestjs-copilot/skills/nestjs-graphql/references/quick-start.md +257 -0
- package/plugins/lisa-nestjs-copilot/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
- package/plugins/lisa-nestjs-copilot/skills/nestjs-graphql/references/types-scalars.md +513 -0
- package/plugins/lisa-nestjs-copilot/skills/nestjs-rules/SKILL.md +565 -0
- package/plugins/lisa-nestjs-copilot/skills/typeorm-patterns/SKILL.md +275 -0
- package/plugins/lisa-nestjs-copilot/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
- package/plugins/lisa-nestjs-copilot/skills/typeorm-patterns/references/entity-patterns.md +450 -0
- package/plugins/lisa-nestjs-copilot/skills/typeorm-patterns/references/observability-patterns.md +536 -0
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +24 -0
- package/plugins/lisa-nestjs-cursor/hooks/block-migration-edits.sh +60 -0
- package/plugins/lisa-nestjs-cursor/skills/nestjs-graphql/SKILL.md +176 -0
- package/plugins/lisa-nestjs-cursor/skills/nestjs-graphql/references/advanced-features.md +527 -0
- package/plugins/lisa-nestjs-cursor/skills/nestjs-graphql/references/project-patterns.md +531 -0
- package/plugins/lisa-nestjs-cursor/skills/nestjs-graphql/references/quick-start.md +257 -0
- package/plugins/lisa-nestjs-cursor/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
- package/plugins/lisa-nestjs-cursor/skills/nestjs-graphql/references/types-scalars.md +513 -0
- package/plugins/lisa-nestjs-cursor/skills/nestjs-rules/SKILL.md +565 -0
- package/plugins/lisa-nestjs-cursor/skills/typeorm-patterns/SKILL.md +275 -0
- package/plugins/lisa-nestjs-cursor/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
- package/plugins/lisa-nestjs-cursor/skills/typeorm-patterns/references/entity-patterns.md +450 -0
- package/plugins/lisa-nestjs-cursor/skills/typeorm-patterns/references/observability-patterns.md +536 -0
- 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/commands/connect-repo-topic.md +7 -0
- package/plugins/lisa-openclaw-agy/commands/connect-staff-slack.md +7 -0
- package/plugins/lisa-openclaw-agy/commands/connect-staff-telegram.md +7 -0
- package/plugins/lisa-openclaw-agy/commands/setup-openclaw.md +7 -0
- package/plugins/lisa-openclaw-agy/plugin.json +8 -0
- package/plugins/lisa-openclaw-agy/skills/lisa-openclaw-connect-repo-topic/SKILL.md +137 -0
- package/plugins/lisa-openclaw-agy/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +109 -0
- package/plugins/lisa-openclaw-agy/skills/lisa-openclaw-connect-staff/SKILL.md +175 -0
- package/plugins/lisa-openclaw-agy/skills/lisa-openclaw-connect-staff/references/platform-routing.md +83 -0
- package/plugins/lisa-openclaw-agy/skills/lisa-openclaw-connect-staff/references/prompts.md +78 -0
- package/plugins/lisa-openclaw-agy/skills/lisa-openclaw-setup/SKILL.md +138 -0
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +8 -0
- package/plugins/lisa-openclaw-copilot/commands/connect-repo-topic.md +7 -0
- package/plugins/lisa-openclaw-copilot/commands/connect-staff-slack.md +7 -0
- package/plugins/lisa-openclaw-copilot/commands/connect-staff-telegram.md +7 -0
- package/plugins/lisa-openclaw-copilot/commands/setup-openclaw.md +7 -0
- package/plugins/lisa-openclaw-copilot/skills/lisa-openclaw-connect-repo-topic/SKILL.md +137 -0
- package/plugins/lisa-openclaw-copilot/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +109 -0
- package/plugins/lisa-openclaw-copilot/skills/lisa-openclaw-connect-staff/SKILL.md +175 -0
- package/plugins/lisa-openclaw-copilot/skills/lisa-openclaw-connect-staff/references/platform-routing.md +83 -0
- package/plugins/lisa-openclaw-copilot/skills/lisa-openclaw-connect-staff/references/prompts.md +78 -0
- package/plugins/lisa-openclaw-copilot/skills/lisa-openclaw-setup/SKILL.md +138 -0
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +8 -0
- package/plugins/lisa-openclaw-cursor/commands/connect-repo-topic.md +7 -0
- package/plugins/lisa-openclaw-cursor/commands/connect-staff-slack.md +7 -0
- package/plugins/lisa-openclaw-cursor/commands/connect-staff-telegram.md +7 -0
- package/plugins/lisa-openclaw-cursor/commands/setup-openclaw.md +7 -0
- package/plugins/lisa-openclaw-cursor/skills/lisa-openclaw-connect-repo-topic/SKILL.md +137 -0
- package/plugins/lisa-openclaw-cursor/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +109 -0
- package/plugins/lisa-openclaw-cursor/skills/lisa-openclaw-connect-staff/SKILL.md +175 -0
- package/plugins/lisa-openclaw-cursor/skills/lisa-openclaw-connect-staff/references/platform-routing.md +83 -0
- package/plugins/lisa-openclaw-cursor/skills/lisa-openclaw-connect-staff/references/prompts.md +78 -0
- package/plugins/lisa-openclaw-cursor/skills/lisa-openclaw-setup/SKILL.md +138 -0
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-rails/{.codex-plugin → hooks}/hooks.json +4 -4
- package/plugins/lisa-rails-agy/agents/ops-specialist.md +226 -0
- package/plugins/lisa-rails-agy/commands/e2e-coverage-gaps.md +7 -0
- package/plugins/lisa-rails-agy/commands/exploratory-qa.md +7 -0
- package/plugins/lisa-rails-agy/commands/fix/linter-error.md +7 -0
- package/plugins/lisa-rails-agy/commands/improve/code-complexity.md +6 -0
- package/plugins/lisa-rails-agy/commands/improve/max-lines-per-function.md +7 -0
- package/plugins/lisa-rails-agy/commands/improve/max-lines.md +7 -0
- package/plugins/lisa-rails-agy/commands/improve/test-coverage.md +7 -0
- package/plugins/lisa-rails-agy/plugin.json +11 -0
- package/plugins/lisa-rails-agy/skills/action-controller-best-practices/SKILL.md +374 -0
- package/plugins/lisa-rails-agy/skills/action-view-best-practices/SKILL.md +335 -0
- package/plugins/lisa-rails-agy/skills/active-record-model-best-practices/SKILL.md +166 -0
- package/plugins/lisa-rails-agy/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-rails-agy/skills/exploratory-qa/SKILL.md +145 -0
- package/plugins/lisa-rails-agy/skills/fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-rails-agy/skills/improve-code-complexity/SKILL.md +48 -0
- package/plugins/lisa-rails-agy/skills/improve-max-lines/SKILL.md +46 -0
- package/plugins/lisa-rails-agy/skills/improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-rails-agy/skills/improve-test-coverage/SKILL.md +45 -0
- package/plugins/lisa-rails-agy/skills/jira-add-journey/SKILL.md +65 -0
- package/plugins/lisa-rails-agy/skills/jira-create/SKILL.md +100 -0
- package/plugins/lisa-rails-agy/skills/jira-evidence/SKILL.md +70 -0
- package/plugins/lisa-rails-agy/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-rails-agy/skills/jira-journey/SKILL.md +64 -0
- package/plugins/lisa-rails-agy/skills/jira-verify/SKILL.md +26 -0
- package/plugins/lisa-rails-agy/skills/ops-check-logs/SKILL.md +191 -0
- package/plugins/lisa-rails-agy/skills/ops-deploy/SKILL.md +153 -0
- package/plugins/lisa-rails-agy/skills/ops-run-local/SKILL.md +169 -0
- package/plugins/lisa-rails-agy/skills/ops-verify-jobs/SKILL.md +157 -0
- package/plugins/lisa-rails-agy/skills/ops-verify-telemetry/SKILL.md +197 -0
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +50 -0
- package/plugins/lisa-rails-copilot/agents/ops-specialist.agent.md +226 -0
- package/plugins/lisa-rails-copilot/commands/e2e-coverage-gaps.md +7 -0
- package/plugins/lisa-rails-copilot/commands/exploratory-qa.md +7 -0
- package/plugins/lisa-rails-copilot/commands/fix/linter-error.md +7 -0
- package/plugins/lisa-rails-copilot/commands/improve/code-complexity.md +6 -0
- package/plugins/lisa-rails-copilot/commands/improve/max-lines-per-function.md +7 -0
- package/plugins/lisa-rails-copilot/commands/improve/max-lines.md +7 -0
- package/plugins/lisa-rails-copilot/commands/improve/test-coverage.md +7 -0
- package/plugins/lisa-rails-copilot/rules/rails-conventions.md +176 -0
- package/plugins/lisa-rails-copilot/skills/action-controller-best-practices/SKILL.md +374 -0
- package/plugins/lisa-rails-copilot/skills/action-view-best-practices/SKILL.md +335 -0
- package/plugins/lisa-rails-copilot/skills/active-record-model-best-practices/SKILL.md +166 -0
- package/plugins/lisa-rails-copilot/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-rails-copilot/skills/exploratory-qa/SKILL.md +145 -0
- package/plugins/lisa-rails-copilot/skills/fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-rails-copilot/skills/improve-code-complexity/SKILL.md +48 -0
- package/plugins/lisa-rails-copilot/skills/improve-max-lines/SKILL.md +46 -0
- package/plugins/lisa-rails-copilot/skills/improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-rails-copilot/skills/improve-test-coverage/SKILL.md +45 -0
- package/plugins/lisa-rails-copilot/skills/jira-add-journey/SKILL.md +65 -0
- package/plugins/lisa-rails-copilot/skills/jira-create/SKILL.md +100 -0
- package/plugins/lisa-rails-copilot/skills/jira-evidence/SKILL.md +70 -0
- package/plugins/lisa-rails-copilot/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-rails-copilot/skills/jira-journey/SKILL.md +64 -0
- package/plugins/lisa-rails-copilot/skills/jira-verify/SKILL.md +26 -0
- package/plugins/lisa-rails-copilot/skills/ops-check-logs/SKILL.md +191 -0
- package/plugins/lisa-rails-copilot/skills/ops-deploy/SKILL.md +153 -0
- package/plugins/lisa-rails-copilot/skills/ops-run-local/SKILL.md +169 -0
- package/plugins/lisa-rails-copilot/skills/ops-verify-jobs/SKILL.md +157 -0
- package/plugins/lisa-rails-copilot/skills/ops-verify-telemetry/SKILL.md +197 -0
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +28 -0
- package/plugins/lisa-rails-cursor/agents/ops-specialist.md +226 -0
- package/plugins/lisa-rails-cursor/commands/e2e-coverage-gaps.md +7 -0
- package/plugins/lisa-rails-cursor/commands/exploratory-qa.md +7 -0
- package/plugins/lisa-rails-cursor/commands/fix/linter-error.md +7 -0
- package/plugins/lisa-rails-cursor/commands/improve/code-complexity.md +6 -0
- package/plugins/lisa-rails-cursor/commands/improve/max-lines-per-function.md +7 -0
- package/plugins/lisa-rails-cursor/commands/improve/max-lines.md +7 -0
- package/plugins/lisa-rails-cursor/commands/improve/test-coverage.md +7 -0
- package/plugins/lisa-rails-cursor/hooks/rubocop-on-edit.sh +78 -0
- package/plugins/lisa-rails-cursor/hooks/sg-scan-on-edit.sh +74 -0
- package/plugins/lisa-rails-cursor/rules/rails-conventions.md +176 -0
- package/plugins/lisa-rails-cursor/skills/action-controller-best-practices/SKILL.md +374 -0
- package/plugins/lisa-rails-cursor/skills/action-view-best-practices/SKILL.md +335 -0
- package/plugins/lisa-rails-cursor/skills/active-record-model-best-practices/SKILL.md +166 -0
- package/plugins/lisa-rails-cursor/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-rails-cursor/skills/exploratory-qa/SKILL.md +145 -0
- package/plugins/lisa-rails-cursor/skills/fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-rails-cursor/skills/improve-code-complexity/SKILL.md +48 -0
- package/plugins/lisa-rails-cursor/skills/improve-max-lines/SKILL.md +46 -0
- package/plugins/lisa-rails-cursor/skills/improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-rails-cursor/skills/improve-test-coverage/SKILL.md +45 -0
- package/plugins/lisa-rails-cursor/skills/jira-add-journey/SKILL.md +65 -0
- package/plugins/lisa-rails-cursor/skills/jira-create/SKILL.md +100 -0
- package/plugins/lisa-rails-cursor/skills/jira-evidence/SKILL.md +70 -0
- package/plugins/lisa-rails-cursor/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-rails-cursor/skills/jira-journey/SKILL.md +64 -0
- package/plugins/lisa-rails-cursor/skills/jira-verify/SKILL.md +26 -0
- package/plugins/lisa-rails-cursor/skills/ops-check-logs/SKILL.md +191 -0
- package/plugins/lisa-rails-cursor/skills/ops-deploy/SKILL.md +153 -0
- package/plugins/lisa-rails-cursor/skills/ops-run-local/SKILL.md +169 -0
- package/plugins/lisa-rails-cursor/skills/ops-verify-jobs/SKILL.md +157 -0
- package/plugins/lisa-rails-cursor/skills/ops-verify-telemetry/SKILL.md +197 -0
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-typescript/{.codex-plugin → hooks}/hooks.json +4 -4
- package/plugins/lisa-typescript-agy/plugin.json +11 -0
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +43 -0
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +43 -0
- package/plugins/lisa-typescript-cursor/hooks/block-suppress-directives.sh +73 -0
- package/plugins/lisa-typescript-cursor/hooks/format-on-edit.sh +79 -0
- package/plugins/lisa-typescript-cursor/hooks/lint-on-edit.sh +134 -0
- package/plugins/lisa-typescript-cursor/hooks/sg-scan-on-edit.sh +71 -0
- 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/ci/lisa-wiki-validate.yml +33 -0
- package/plugins/lisa-wiki-agy/commands/add-ingest.md +6 -0
- package/plugins/lisa-wiki-agy/commands/add-role.md +6 -0
- package/plugins/lisa-wiki-agy/commands/doctor.md +6 -0
- package/plugins/lisa-wiki-agy/commands/ingest.md +6 -0
- package/plugins/lisa-wiki-agy/commands/lint.md +6 -0
- package/plugins/lisa-wiki-agy/commands/migrate.md +6 -0
- package/plugins/lisa-wiki-agy/commands/onboard-me.md +6 -0
- package/plugins/lisa-wiki-agy/commands/query.md +6 -0
- package/plugins/lisa-wiki-agy/commands/setup/wiki.md +6 -0
- package/plugins/lisa-wiki-agy/commands/setup-automations.md +6 -0
- package/plugins/lisa-wiki-agy/commands/setup.md +6 -0
- package/plugins/lisa-wiki-agy/commands/status.md +6 -0
- package/plugins/lisa-wiki-agy/commands/tear-down-automations.md +6 -0
- package/plugins/lisa-wiki-agy/plugin.json +8 -0
- package/plugins/lisa-wiki-agy/schema/lisa-wiki-config.schema.json +118 -0
- package/plugins/lisa-wiki-agy/schema/wiki-structure.schema.json +51 -0
- package/plugins/lisa-wiki-agy/scripts/_wiki-lib.mjs +185 -0
- package/plugins/lisa-wiki-agy/scripts/diff-guard.mjs +116 -0
- package/plugins/lisa-wiki-agy/scripts/ensure-gitignore.mjs +131 -0
- package/plugins/lisa-wiki-agy/scripts/ingest-git.mjs +189 -0
- package/plugins/lisa-wiki-agy/scripts/ingest-memory.mjs +130 -0
- package/plugins/lisa-wiki-agy/scripts/ingest-roles.mjs +85 -0
- package/plugins/lisa-wiki-agy/scripts/ingest_slack_channel.py +329 -0
- package/plugins/lisa-wiki-agy/scripts/lint-wiki.mjs +324 -0
- package/plugins/lisa-wiki-agy/scripts/mcp-doctor.mjs +72 -0
- package/plugins/lisa-wiki-agy/scripts/render-contract.mjs +107 -0
- package/plugins/lisa-wiki-agy/scripts/rewrite-refs.mjs +144 -0
- package/plugins/lisa-wiki-agy/scripts/slack_oauth_user.py +179 -0
- package/plugins/lisa-wiki-agy/scripts/validate-config.mjs +232 -0
- package/plugins/lisa-wiki-agy/scripts/verify-migration.mjs +199 -0
- package/plugins/lisa-wiki-agy/scripts/wiki-status.mjs +345 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-add-role/SKILL.md +30 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-connector-git/SKILL.md +25 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-connector-web/SKILL.md +23 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-doctor/SKILL.md +47 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-ingest/SKILL.md +72 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-lint/SKILL.md +32 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-migrate/SKILL.md +43 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-query/SKILL.md +30 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-setup/SKILL.md +75 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-setup-automations/SKILL.md +80 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-status/SKILL.md +47 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa-wiki-agy/skills/lisa-wiki-usage/SKILL.md +50 -0
- package/plugins/lisa-wiki-agy/templates/agents/role-agent.claude.md +16 -0
- package/plugins/lisa-wiki-agy/templates/agents/role-agent.codex.toml +15 -0
- package/plugins/lisa-wiki-agy/templates/index.md +17 -0
- package/plugins/lisa-wiki-agy/templates/llm-wiki-contract.md +72 -0
- package/plugins/lisa-wiki-agy/templates/log.md +8 -0
- package/plugins/lisa-wiki-agy/templates/page-types/architecture.md +18 -0
- package/plugins/lisa-wiki-agy/templates/page-types/concept.md +18 -0
- package/plugins/lisa-wiki-agy/templates/page-types/decision.md +18 -0
- package/plugins/lisa-wiki-agy/templates/page-types/entity.md +19 -0
- package/plugins/lisa-wiki-agy/templates/page-types/open-question.md +18 -0
- package/plugins/lisa-wiki-agy/templates/page-types/playbook.md +18 -0
- package/plugins/lisa-wiki-agy/templates/page-types/project.md +19 -0
- package/plugins/lisa-wiki-agy/templates/page-types/requirement.md +19 -0
- package/plugins/lisa-wiki-agy/templates/page-types/staff.md +26 -0
- package/plugins/lisa-wiki-agy/templates/start-here.md +24 -0
- package/plugins/lisa-wiki-agy/templates/state-readme.md +20 -0
- package/plugins/lisa-wiki-agy/templates/wrapper-gitignore.txt +19 -0
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +8 -0
- package/plugins/lisa-wiki-copilot/ci/lisa-wiki-validate.yml +33 -0
- package/plugins/lisa-wiki-copilot/commands/add-ingest.md +6 -0
- package/plugins/lisa-wiki-copilot/commands/add-role.md +6 -0
- package/plugins/lisa-wiki-copilot/commands/doctor.md +6 -0
- package/plugins/lisa-wiki-copilot/commands/ingest.md +6 -0
- package/plugins/lisa-wiki-copilot/commands/lint.md +6 -0
- package/plugins/lisa-wiki-copilot/commands/migrate.md +6 -0
- package/plugins/lisa-wiki-copilot/commands/onboard-me.md +6 -0
- package/plugins/lisa-wiki-copilot/commands/query.md +6 -0
- package/plugins/lisa-wiki-copilot/commands/setup/wiki.md +6 -0
- package/plugins/lisa-wiki-copilot/commands/setup-automations.md +6 -0
- package/plugins/lisa-wiki-copilot/commands/setup.md +6 -0
- package/plugins/lisa-wiki-copilot/commands/status.md +6 -0
- package/plugins/lisa-wiki-copilot/commands/tear-down-automations.md +6 -0
- package/plugins/lisa-wiki-copilot/schema/lisa-wiki-config.schema.json +118 -0
- package/plugins/lisa-wiki-copilot/schema/wiki-structure.schema.json +51 -0
- package/plugins/lisa-wiki-copilot/scripts/_wiki-lib.mjs +185 -0
- package/plugins/lisa-wiki-copilot/scripts/diff-guard.mjs +116 -0
- package/plugins/lisa-wiki-copilot/scripts/ensure-gitignore.mjs +131 -0
- package/plugins/lisa-wiki-copilot/scripts/ingest-git.mjs +189 -0
- package/plugins/lisa-wiki-copilot/scripts/ingest-memory.mjs +130 -0
- package/plugins/lisa-wiki-copilot/scripts/ingest-roles.mjs +85 -0
- package/plugins/lisa-wiki-copilot/scripts/ingest_slack_channel.py +329 -0
- package/plugins/lisa-wiki-copilot/scripts/lint-wiki.mjs +324 -0
- package/plugins/lisa-wiki-copilot/scripts/mcp-doctor.mjs +72 -0
- package/plugins/lisa-wiki-copilot/scripts/render-contract.mjs +107 -0
- package/plugins/lisa-wiki-copilot/scripts/rewrite-refs.mjs +144 -0
- package/plugins/lisa-wiki-copilot/scripts/slack_oauth_user.py +179 -0
- package/plugins/lisa-wiki-copilot/scripts/validate-config.mjs +232 -0
- package/plugins/lisa-wiki-copilot/scripts/verify-migration.mjs +199 -0
- package/plugins/lisa-wiki-copilot/scripts/wiki-status.mjs +345 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-add-role/SKILL.md +30 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-connector-git/SKILL.md +25 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-connector-web/SKILL.md +23 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-doctor/SKILL.md +47 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-ingest/SKILL.md +72 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-lint/SKILL.md +32 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-migrate/SKILL.md +43 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-query/SKILL.md +30 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-setup/SKILL.md +75 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-setup-automations/SKILL.md +80 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-status/SKILL.md +47 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa-wiki-copilot/skills/lisa-wiki-usage/SKILL.md +50 -0
- package/plugins/lisa-wiki-copilot/templates/agents/role-agent.claude.md +16 -0
- package/plugins/lisa-wiki-copilot/templates/agents/role-agent.codex.toml +15 -0
- package/plugins/lisa-wiki-copilot/templates/index.md +17 -0
- package/plugins/lisa-wiki-copilot/templates/llm-wiki-contract.md +72 -0
- package/plugins/lisa-wiki-copilot/templates/log.md +8 -0
- package/plugins/lisa-wiki-copilot/templates/page-types/architecture.md +18 -0
- package/plugins/lisa-wiki-copilot/templates/page-types/concept.md +18 -0
- package/plugins/lisa-wiki-copilot/templates/page-types/decision.md +18 -0
- package/plugins/lisa-wiki-copilot/templates/page-types/entity.md +19 -0
- package/plugins/lisa-wiki-copilot/templates/page-types/open-question.md +18 -0
- package/plugins/lisa-wiki-copilot/templates/page-types/playbook.md +18 -0
- package/plugins/lisa-wiki-copilot/templates/page-types/project.md +19 -0
- package/plugins/lisa-wiki-copilot/templates/page-types/requirement.md +19 -0
- package/plugins/lisa-wiki-copilot/templates/page-types/staff.md +26 -0
- package/plugins/lisa-wiki-copilot/templates/start-here.md +24 -0
- package/plugins/lisa-wiki-copilot/templates/state-readme.md +20 -0
- package/plugins/lisa-wiki-copilot/templates/wrapper-gitignore.txt +19 -0
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +8 -0
- package/plugins/lisa-wiki-cursor/ci/lisa-wiki-validate.yml +33 -0
- package/plugins/lisa-wiki-cursor/commands/add-ingest.md +6 -0
- package/plugins/lisa-wiki-cursor/commands/add-role.md +6 -0
- package/plugins/lisa-wiki-cursor/commands/doctor.md +6 -0
- package/plugins/lisa-wiki-cursor/commands/ingest.md +6 -0
- package/plugins/lisa-wiki-cursor/commands/lint.md +6 -0
- package/plugins/lisa-wiki-cursor/commands/migrate.md +6 -0
- package/plugins/lisa-wiki-cursor/commands/onboard-me.md +6 -0
- package/plugins/lisa-wiki-cursor/commands/query.md +6 -0
- package/plugins/lisa-wiki-cursor/commands/setup/wiki.md +6 -0
- package/plugins/lisa-wiki-cursor/commands/setup-automations.md +6 -0
- package/plugins/lisa-wiki-cursor/commands/setup.md +6 -0
- package/plugins/lisa-wiki-cursor/commands/status.md +6 -0
- package/plugins/lisa-wiki-cursor/commands/tear-down-automations.md +6 -0
- package/plugins/lisa-wiki-cursor/schema/lisa-wiki-config.schema.json +118 -0
- package/plugins/lisa-wiki-cursor/schema/wiki-structure.schema.json +51 -0
- package/plugins/lisa-wiki-cursor/scripts/_wiki-lib.mjs +185 -0
- package/plugins/lisa-wiki-cursor/scripts/diff-guard.mjs +116 -0
- package/plugins/lisa-wiki-cursor/scripts/ensure-gitignore.mjs +131 -0
- package/plugins/lisa-wiki-cursor/scripts/ingest-git.mjs +189 -0
- package/plugins/lisa-wiki-cursor/scripts/ingest-memory.mjs +130 -0
- package/plugins/lisa-wiki-cursor/scripts/ingest-roles.mjs +85 -0
- package/plugins/lisa-wiki-cursor/scripts/ingest_slack_channel.py +329 -0
- package/plugins/lisa-wiki-cursor/scripts/lint-wiki.mjs +324 -0
- package/plugins/lisa-wiki-cursor/scripts/mcp-doctor.mjs +72 -0
- package/plugins/lisa-wiki-cursor/scripts/render-contract.mjs +107 -0
- package/plugins/lisa-wiki-cursor/scripts/rewrite-refs.mjs +144 -0
- package/plugins/lisa-wiki-cursor/scripts/slack_oauth_user.py +179 -0
- package/plugins/lisa-wiki-cursor/scripts/validate-config.mjs +232 -0
- package/plugins/lisa-wiki-cursor/scripts/verify-migration.mjs +199 -0
- package/plugins/lisa-wiki-cursor/scripts/wiki-status.mjs +345 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-add-role/SKILL.md +30 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-connector-git/SKILL.md +25 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-connector-web/SKILL.md +23 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-doctor/SKILL.md +47 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-ingest/SKILL.md +72 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-lint/SKILL.md +32 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-migrate/SKILL.md +43 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-query/SKILL.md +30 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-setup/SKILL.md +75 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-setup-automations/SKILL.md +80 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-status/SKILL.md +47 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa-wiki-cursor/skills/lisa-wiki-usage/SKILL.md +50 -0
- package/plugins/lisa-wiki-cursor/templates/agents/role-agent.claude.md +16 -0
- package/plugins/lisa-wiki-cursor/templates/agents/role-agent.codex.toml +15 -0
- package/plugins/lisa-wiki-cursor/templates/index.md +17 -0
- package/plugins/lisa-wiki-cursor/templates/llm-wiki-contract.md +72 -0
- package/plugins/lisa-wiki-cursor/templates/log.md +8 -0
- package/plugins/lisa-wiki-cursor/templates/page-types/architecture.md +18 -0
- package/plugins/lisa-wiki-cursor/templates/page-types/concept.md +18 -0
- package/plugins/lisa-wiki-cursor/templates/page-types/decision.md +18 -0
- package/plugins/lisa-wiki-cursor/templates/page-types/entity.md +19 -0
- package/plugins/lisa-wiki-cursor/templates/page-types/open-question.md +18 -0
- package/plugins/lisa-wiki-cursor/templates/page-types/playbook.md +18 -0
- package/plugins/lisa-wiki-cursor/templates/page-types/project.md +19 -0
- package/plugins/lisa-wiki-cursor/templates/page-types/requirement.md +19 -0
- package/plugins/lisa-wiki-cursor/templates/page-types/staff.md +26 -0
- package/plugins/lisa-wiki-cursor/templates/start-here.md +24 -0
- package/plugins/lisa-wiki-cursor/templates/state-readme.md +20 -0
- package/plugins/lisa-wiki-cursor/templates/wrapper-gitignore.txt +19 -0
- package/scripts/build-plugins.sh +28 -11
- package/scripts/generate-codex-plugin-artifacts.mjs +28 -48
- package/scripts/generate-copilot-plugin-artifacts.mjs +5 -0
- package/scripts/generate-cursor-plugin-artifacts.mjs +4 -0
- package/scripts/internal-copilot-runtime-probe.json +10 -4
- package/plugins/lisa/.codex-plugin/hooks/block-no-verify.sh +0 -37
- package/plugins/lisa/.codex-plugin/hooks/inject-flow-context.sh +0 -12
- package/plugins/lisa/.codex-plugin/hooks/inject-rules.sh +0 -33
- package/plugins/lisa/.codex-plugin/hooks/install-pkgs.sh +0 -69
- package/plugins/lisa/.codex-plugin/hooks/notify-ntfy.sh +0 -183
- package/plugins/lisa/.codex-plugin/hooks/setup-jira-cli.sh +0 -51
- /package/plugins/{lisa-harper-fabric/.codex-plugin → lisa-harper-fabric-copilot}/hooks/inject-rules.sh +0 -0
- /package/plugins/{lisa-nestjs/.codex-plugin → lisa-nestjs-copilot}/hooks/block-migration-edits.sh +0 -0
- /package/plugins/{lisa-rails/.codex-plugin → lisa-rails-copilot}/hooks/inject-rules.sh +0 -0
- /package/plugins/{lisa-rails/.codex-plugin → lisa-rails-copilot}/hooks/rubocop-on-edit.sh +0 -0
- /package/plugins/{lisa-rails/.codex-plugin → lisa-rails-copilot}/hooks/sg-scan-on-edit.sh +0 -0
- /package/plugins/{lisa-typescript/.codex-plugin → lisa-typescript-copilot}/hooks/block-suppress-directives.sh +0 -0
- /package/plugins/{lisa-typescript/.codex-plugin → lisa-typescript-copilot}/hooks/format-on-edit.sh +0 -0
- /package/plugins/{lisa-typescript/.codex-plugin → lisa-typescript-copilot}/hooks/lint-on-edit.sh +0 -0
- /package/plugins/{lisa-typescript/.codex-plugin → lisa-typescript-copilot}/hooks/sg-scan-on-edit.sh +0 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-add-journey
|
|
3
|
+
description: "Add a Validation Journey section to an existing JIRA ticket by reading the ticket description, understanding the feature, and generating the journey steps and assertions."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Add Validation Journey to Existing JIRA Ticket
|
|
7
|
+
|
|
8
|
+
Read an existing JIRA ticket, understand the feature or fix it describes, analyze the codebase to determine the verification approach, and append a Validation Journey section to the ticket description.
|
|
9
|
+
|
|
10
|
+
## Arguments
|
|
11
|
+
|
|
12
|
+
`$ARGUMENTS`: `<TICKET_ID>`
|
|
13
|
+
|
|
14
|
+
- `TICKET_ID` (required): JIRA ticket key (e.g., `PROJ-123`)
|
|
15
|
+
|
|
16
|
+
## Prerequisites
|
|
17
|
+
|
|
18
|
+
- `JIRA_API_TOKEN` environment variable set
|
|
19
|
+
- `jira-cli` configured (`~/.config/.jira/.config.yml`)
|
|
20
|
+
|
|
21
|
+
## Workflow
|
|
22
|
+
|
|
23
|
+
### Step 1: Read the Ticket
|
|
24
|
+
|
|
25
|
+
Use the Atlassian MCP or jira-cli to read the full ticket details:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
jira issue view <TICKET_ID>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Extract: title, description, acceptance criteria, components, labels, linked tickets.
|
|
32
|
+
|
|
33
|
+
### Step 2: Check for Existing Journey
|
|
34
|
+
|
|
35
|
+
Run the parser to see if a Validation Journey already exists:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
python3 .claude/skills/jira-journey/scripts/parse-plan.py <TICKET_ID> 2>&1
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
If the parser succeeds and returns steps, the ticket already has a journey. Report this to the user and stop.
|
|
42
|
+
|
|
43
|
+
### Step 3: Analyze the Feature
|
|
44
|
+
|
|
45
|
+
Based on the ticket description and acceptance criteria, determine the appropriate verification approach. Stack-specific overrides provide the analysis logic.
|
|
46
|
+
|
|
47
|
+
### Step 4: Draft the Validation Journey
|
|
48
|
+
|
|
49
|
+
Compose the journey following the Validation Journey format with: Prerequisites, Steps (with evidence markers), and Assertions.
|
|
50
|
+
|
|
51
|
+
### Step 5: Present to User for Approval
|
|
52
|
+
|
|
53
|
+
Display the drafted Validation Journey to the user and ask for confirmation before appending it to the ticket.
|
|
54
|
+
|
|
55
|
+
### Step 6: Append to Ticket Description
|
|
56
|
+
|
|
57
|
+
After user approval, use the JIRA REST API to append the Validation Journey to the existing ticket description.
|
|
58
|
+
|
|
59
|
+
### Step 7: Verify
|
|
60
|
+
|
|
61
|
+
Run the parser again to confirm the journey was added correctly:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
python3 .claude/skills/jira-journey/scripts/parse-plan.py <TICKET_ID>
|
|
65
|
+
```
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-create
|
|
3
|
+
description: This skill should be used when creating JIRA epics, stories, and tasks from code files or descriptions. It analyzes the provided input, determines the appropriate issue hierarchy, and creates issues with comprehensive quality requirements including test-first development and documentation.
|
|
4
|
+
allowed-tools: ["Read", "Glob", "LS", "Skill", "mcp__atlassian__getVisibleJiraProjects", "mcp__atlassian__getJiraProjectIssueTypesMetadata", "mcp__atlassian__getAccessibleAtlassianResources"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Create JIRA Issues from $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Analyze the provided file(s) and plan a JIRA hierarchy. **This skill plans structure only — every individual ticket write is delegated to `lisa:jira-write-ticket`.** Do not call `mcp__atlassian__createJiraIssue` from this skill; the necessary write tools are intentionally not in `allowed-tools`.
|
|
10
|
+
|
|
11
|
+
## Process
|
|
12
|
+
|
|
13
|
+
1. **Analyze**: Read $ARGUMENTS to understand scope.
|
|
14
|
+
2. **Extract source artifacts**: invoke the `lisa:tracker-source-artifacts` skill, then enumerate every external URL, embed, attachment, or example payload and classify each by domain per its rules. Build the `artifacts` map. See "Source Artifacts" below.
|
|
15
|
+
3. **Walk the live product** (when applicable): if the work touches existing user-facing surfaces, invoke the `lisa:product-walkthrough` skill to capture current behavior, design-vs-product divergence, and reuse candidates. Skip only when the work is purely backend or affects a screen that does not yet exist. See "Live Product Walkthrough" below.
|
|
16
|
+
4. **Determine structure**:
|
|
17
|
+
- Epic needed if: multiple features, major changes, >3 related files
|
|
18
|
+
- Direct tasks if: bug fix, single file, minor change
|
|
19
|
+
5. **Plan hierarchy**:
|
|
20
|
+
```text
|
|
21
|
+
Epic → User Story → Tasks (test, implement, document, cleanup)
|
|
22
|
+
```
|
|
23
|
+
6. **Delegate every write to `lisa:jira-write-ticket`** in dependency order (epic first, then stories with the epic as parent, then sub-tasks with their story as parent). Pass the artifacts (filtered by domain per `lisa:tracker-source-artifacts` inheritance rules) and the walkthrough findings (under `## Current Product`). See "Delegation to jira-write-ticket" below.
|
|
24
|
+
7. **Run the artifact preservation gate** (`lisa:tracker-source-artifacts` §8): after all writes complete, build the preservation matrix and verify every extracted artifact is reachable from the created tickets. Fail loudly if anything was dropped.
|
|
25
|
+
|
|
26
|
+
## Mandatory for Every Code Issue
|
|
27
|
+
|
|
28
|
+
**Test-First**: Write tests before implementation
|
|
29
|
+
**Quality Gates**: All tests/checks must pass, no SonarCloud violations
|
|
30
|
+
**Documentation**: Check existing, update/create new, remove obsolete
|
|
31
|
+
**Feature Flags**: All features behind flags with lifecycle plan
|
|
32
|
+
**Cleanup**: Remove temporary code, scripts, dev configs
|
|
33
|
+
|
|
34
|
+
## Source Artifacts
|
|
35
|
+
|
|
36
|
+
If $ARGUMENTS includes (or references) any external artifact — PRD, design doc, Figma URL, Lovable prototype, Loom walkthrough, screenshot, example payload — those references MUST be preserved as remote links on the created tickets. Silent artifact loss is the single most common quality failure in this pipeline.
|
|
37
|
+
|
|
38
|
+
**Invoke the `lisa:tracker-source-artifacts` skill** for the canonical rules: domains, per-tool classification (Figma `/proto/` vs design, Lovable, Loom, screenshots), source precedence, conflict handling under `## Open Questions`, inheritance from epic → story → sub-task, and the existing-component reuse expectation. Do not restate the rules here.
|
|
39
|
+
|
|
40
|
+
Rails-specific note: the existing-component reuse rule applies to view partials and ViewComponents — the closest existing partial/component is usually the right answer over pixel-matching a mock from scratch.
|
|
41
|
+
|
|
42
|
+
When delegating writes to `lisa:jira-write-ticket`, pass the extracted artifact list so its Phase 4c step can attach them.
|
|
43
|
+
|
|
44
|
+
## Live Product Walkthrough
|
|
45
|
+
|
|
46
|
+
When the work touches existing user-facing surfaces, invoke the `lisa:product-walkthrough` skill before drafting tickets. Findings (current behavior, design-vs-product divergence, reuse candidates, behavioral surprises) become inputs to the ticket plan and surface under `## Current Product` on the resulting tickets. Skip only when the work is purely backend or affects a screen that does not yet exist.
|
|
47
|
+
|
|
48
|
+
## Issue Requirements
|
|
49
|
+
|
|
50
|
+
Each issue must clearly communicate to:
|
|
51
|
+
|
|
52
|
+
- **Coding Assistants**: Implementation requirements
|
|
53
|
+
- **Developers**: Technical approach
|
|
54
|
+
- **Stakeholders**: Business value
|
|
55
|
+
|
|
56
|
+
Default project: SE (override via arguments)
|
|
57
|
+
Exclude unless requested: migration plans, performance tests
|
|
58
|
+
|
|
59
|
+
## Delegation to jira-write-ticket
|
|
60
|
+
|
|
61
|
+
**Mandatory.** Every ticket created by this skill MUST go through `lisa:jira-write-ticket`. This skill never calls `mcp__atlassian__createJiraIssue` itself — that tool is intentionally excluded from `allowed-tools` so the gate cannot be bypassed.
|
|
62
|
+
|
|
63
|
+
`lisa:jira-write-ticket` enforces things this skill does not, and which determine ticket quality:
|
|
64
|
+
- 3-audience description (Context / Technical Approach / Acceptance Criteria)
|
|
65
|
+
- Gherkin acceptance criteria
|
|
66
|
+
- Epic parent validation (non-bug, non-epic types)
|
|
67
|
+
- Explicit link discovery (`blocks` / `is blocked by` / `relates to` / `duplicates` / `clones`)
|
|
68
|
+
- Remote links (PRs, Confluence, dashboards)
|
|
69
|
+
- Single-repo scope check for Bug / Task / Sub-task
|
|
70
|
+
- Sign-in account and target environment recorded in description
|
|
71
|
+
- Post-create verification
|
|
72
|
+
|
|
73
|
+
### Invocation order
|
|
74
|
+
|
|
75
|
+
Tickets must be created in parent-before-child order so each child can be passed its parent key:
|
|
76
|
+
|
|
77
|
+
1. Invoke `lisa:jira-write-ticket` for the epic. Capture the returned key.
|
|
78
|
+
2. For each story, invoke `lisa:jira-write-ticket` with the epic key as the epic parent. Capture each story key.
|
|
79
|
+
3. For each sub-task, invoke `lisa:jira-write-ticket` with the parent story key.
|
|
80
|
+
|
|
81
|
+
### What to pass to each invocation
|
|
82
|
+
|
|
83
|
+
For every delegated write, pass:
|
|
84
|
+
- The summary, issue type, project key, and priority you decided
|
|
85
|
+
- The 3-section description body you drafted (Context / Technical Approach / Acceptance Criteria)
|
|
86
|
+
- Gherkin acceptance criteria
|
|
87
|
+
- Parent key (epic key for stories; story key for sub-tasks)
|
|
88
|
+
- The artifact list extracted in "Source Artifacts", filtered by domain per the inheritance rules — `lisa:jira-write-ticket` Phase 4c attaches them as remote links
|
|
89
|
+
- For tickets that change runtime behavior: the Validation Journey draft, or instruct it to call `lisa:jira-add-journey` after create
|
|
90
|
+
|
|
91
|
+
### What this skill is responsible for
|
|
92
|
+
|
|
93
|
+
This skill owns:
|
|
94
|
+
- Deciding the *shape* of the hierarchy (what's an epic vs. story vs. sub-task)
|
|
95
|
+
- Drafting the description body and acceptance criteria from the input
|
|
96
|
+
- Extracting and classifying source artifacts
|
|
97
|
+
- Threading parent keys through subsequent writes
|
|
98
|
+
- Running the artifact preservation check after all writes complete
|
|
99
|
+
|
|
100
|
+
It does not own the actual JIRA write — that's `lisa:jira-write-ticket`'s job.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-evidence
|
|
3
|
+
description: "Upload evidence to GitHub pr-assets release, update PR description, upload attachments to JIRA, post comment, and move ticket to Code Review. Reusable by any skill that captures evidence and generates evidence/comment.txt + evidence/comment.md."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# JIRA Evidence Posting
|
|
7
|
+
|
|
8
|
+
Upload captured evidence and generated templates to GitHub PR description and JIRA ticket. This skill is the posting step — it assumes evidence files and comment templates already exist in the evidence directory.
|
|
9
|
+
|
|
10
|
+
## Arguments
|
|
11
|
+
|
|
12
|
+
`$ARGUMENTS`: `<TICKET_ID> <EVIDENCE_DIR> <PR_NUMBER>`
|
|
13
|
+
|
|
14
|
+
- `TICKET_ID` (required): JIRA ticket key (e.g., `PROJ-123`)
|
|
15
|
+
- `EVIDENCE_DIR` (required): Directory containing evidence and templates (e.g., `./evidence`)
|
|
16
|
+
- `PR_NUMBER` (required): GitHub PR number to update description
|
|
17
|
+
|
|
18
|
+
## Prerequisites
|
|
19
|
+
|
|
20
|
+
- `JIRA_API_TOKEN` environment variable set
|
|
21
|
+
- `jira-cli` configured (`~/.config/.jira/.config.yml`) — server and login are read from there
|
|
22
|
+
- `gh` CLI authenticated
|
|
23
|
+
- Evidence directory containing:
|
|
24
|
+
- Evidence files: `NN-name-viewport.png` (screenshots) and/or `NN-name.txt`/`NN-name.json` (text evidence)
|
|
25
|
+
- `comment.txt` — JIRA wiki markup (generated by `generate-templates.py`)
|
|
26
|
+
- `comment.md` — GitHub markdown (generated by `generate-templates.py`)
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
bash .claude/skills/jira-evidence/scripts/post-evidence.sh <TICKET_ID> <EVIDENCE_DIR> <PR_NUMBER>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Example
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
bash .claude/skills/jira-evidence/scripts/post-evidence.sh PROJ-123 ./evidence 42
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## What It Does
|
|
41
|
+
|
|
42
|
+
1. **Read JIRA config** — Reads `~/.config/.jira/.config.yml` to obtain `server` and `login` dynamically (no hardcoded values)
|
|
43
|
+
2. **Upload to GitHub `pr-assets` release** — Uploads evidence files via `gh release upload --clobber`, creating CDN URLs
|
|
44
|
+
3. **Update PR description** — Replaces or appends the `## Evidence` section in the PR body using `gh pr edit`
|
|
45
|
+
4. **Upload JIRA attachments** — Uploads image evidence via REST API v3 so `!filename.png!` wiki markup renders inline
|
|
46
|
+
5. **Post JIRA comment** — Posts `comment.txt` as a new comment via REST API v2 (wiki markup)
|
|
47
|
+
6. **Move ticket to Code Review** — Transitions the JIRA ticket via `jira issue move`
|
|
48
|
+
|
|
49
|
+
## Evidence Naming Conventions
|
|
50
|
+
|
|
51
|
+
- Image evidence: `NN-name-viewport.png` (e.g., `01-search-step-desktop.png`)
|
|
52
|
+
- Text evidence: `NN-name.txt` or `NN-name.json` (e.g., `01-health-check.json`)
|
|
53
|
+
|
|
54
|
+
## Troubleshooting
|
|
55
|
+
|
|
56
|
+
### Images not rendering in GitHub PR
|
|
57
|
+
|
|
58
|
+
Images must be in the `pr-assets` GitHub release. If the release does not exist, create it first:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
gh release create pr-assets --title "PR Assets" --notes "CDN for PR evidence"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### JIRA comment shows `!filename.png!` as text (not image)
|
|
65
|
+
|
|
66
|
+
The screenshot must be uploaded as a JIRA attachment before posting the comment. The script uploads attachments first then posts the comment.
|
|
67
|
+
|
|
68
|
+
### JIRA API returns 403 on attachment upload
|
|
69
|
+
|
|
70
|
+
Ensure `JIRA_API_TOKEN` is set and `login` in `~/.config/.jira/.config.yml` matches your Atlassian account email.
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# post-evidence.sh — Upload evidence and post to JIRA + GitHub PR description
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# bash post-evidence.sh <TICKET_ID> <EVIDENCE_DIR> <PR_NUMBER>
|
|
6
|
+
#
|
|
7
|
+
# Prerequisites:
|
|
8
|
+
# - JIRA_API_TOKEN env var set
|
|
9
|
+
# - jira-cli configured (~/.config/.jira/.config.yml)
|
|
10
|
+
# - gh CLI authenticated
|
|
11
|
+
#
|
|
12
|
+
# What it does:
|
|
13
|
+
# 1. Uploads evidence files to the 'pr-assets' GitHub release
|
|
14
|
+
# 2. Updates the GitHub PR description with evidence/comment.md
|
|
15
|
+
# 3. Uploads image evidence as JIRA attachments
|
|
16
|
+
# 4. Posts/updates the JIRA comment with evidence/comment.txt
|
|
17
|
+
# 5. Moves the JIRA ticket to "Code Review"
|
|
18
|
+
|
|
19
|
+
set -euo pipefail
|
|
20
|
+
|
|
21
|
+
TICKET_ID="${1:?Usage: post-evidence.sh <TICKET_ID> <EVIDENCE_DIR> <PR_NUMBER>}"
|
|
22
|
+
EVIDENCE_DIR="${2:?Usage: post-evidence.sh <TICKET_ID> <EVIDENCE_DIR> <PR_NUMBER>}"
|
|
23
|
+
PR_NUMBER="${3:?Usage: post-evidence.sh <TICKET_ID> <EVIDENCE_DIR> <PR_NUMBER>}"
|
|
24
|
+
|
|
25
|
+
JIRA_CONFIG="${HOME}/.config/.jira/.config.yml"
|
|
26
|
+
if [[ ! -f "$JIRA_CONFIG" ]]; then
|
|
27
|
+
echo "ERROR: jira-cli config not found at $JIRA_CONFIG — run 'jira init' first" >&2
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
JIRA_SERVER=$(grep '^server:' "$JIRA_CONFIG" | awk '{print $2}')
|
|
31
|
+
JIRA_USER=$(grep '^login:' "$JIRA_CONFIG" | awk '{print $2}')
|
|
32
|
+
GH_REPO=$(gh repo view --json nameWithOwner --jq '.nameWithOwner')
|
|
33
|
+
RELEASE_TAG="pr-assets"
|
|
34
|
+
|
|
35
|
+
if [[ -z "${JIRA_API_TOKEN:-}" ]]; then
|
|
36
|
+
echo "ERROR: JIRA_API_TOKEN environment variable is not set" >&2
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# Collect numbered evidence files (images + text)
|
|
41
|
+
SCREENSHOTS=()
|
|
42
|
+
while IFS= read -r -d '' f; do
|
|
43
|
+
SCREENSHOTS+=("$f")
|
|
44
|
+
done < <(find "$EVIDENCE_DIR" -maxdepth 1 -name '[0-9][0-9]-*.png' -print0 | sort -z)
|
|
45
|
+
|
|
46
|
+
TEXT_EVIDENCE=()
|
|
47
|
+
while IFS= read -r -d '' f; do
|
|
48
|
+
TEXT_EVIDENCE+=("$f")
|
|
49
|
+
done < <(find "$EVIDENCE_DIR" -maxdepth 1 \( -name '[0-9][0-9]-*.txt' -o -name '[0-9][0-9]-*.json' \) ! -name 'comment.txt' -print0 | sort -z)
|
|
50
|
+
|
|
51
|
+
ALL_EVIDENCE=("${SCREENSHOTS[@]}" "${TEXT_EVIDENCE[@]}")
|
|
52
|
+
|
|
53
|
+
if [[ ${#ALL_EVIDENCE[@]} -eq 0 ]]; then
|
|
54
|
+
echo "ERROR: No numbered evidence files found in $EVIDENCE_DIR (expected NN-*.png, NN-*.txt, or NN-*.json)" >&2
|
|
55
|
+
exit 1
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
echo "Found ${#SCREENSHOTS[@]} screenshots and ${#TEXT_EVIDENCE[@]} text evidence files to upload"
|
|
59
|
+
|
|
60
|
+
# Compute JIRA auth early (used in steps 3 and 4)
|
|
61
|
+
JIRA_AUTH=$(echo -n "$JIRA_USER:$JIRA_API_TOKEN" | base64)
|
|
62
|
+
|
|
63
|
+
# ── Step 1: Upload to GitHub pr-assets release ──────────────────────────────
|
|
64
|
+
echo ""
|
|
65
|
+
echo "==> Uploading to GitHub release '$RELEASE_TAG'..."
|
|
66
|
+
|
|
67
|
+
for FILE in "${ALL_EVIDENCE[@]}"; do
|
|
68
|
+
FILENAME=$(basename "$FILE")
|
|
69
|
+
echo " ↑ $FILENAME"
|
|
70
|
+
gh release upload "$RELEASE_TAG" "$FILE" --repo "$GH_REPO" --clobber
|
|
71
|
+
done
|
|
72
|
+
|
|
73
|
+
echo " ✓ GitHub release assets uploaded"
|
|
74
|
+
|
|
75
|
+
# ── Step 2: Update GitHub PR description with evidence ──────────────────────
|
|
76
|
+
COMMENT_MD="$EVIDENCE_DIR/comment.md"
|
|
77
|
+
if [[ ! -f "$COMMENT_MD" ]]; then
|
|
78
|
+
echo "ERROR: $COMMENT_MD not found — run generate-templates.py first" >&2
|
|
79
|
+
exit 1
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
echo ""
|
|
83
|
+
echo "==> Updating GitHub PR #$PR_NUMBER description..."
|
|
84
|
+
|
|
85
|
+
CURRENT_BODY=$(gh pr view "$PR_NUMBER" --json body --jq '.body')
|
|
86
|
+
|
|
87
|
+
# Replace or append the Evidence section
|
|
88
|
+
if echo "$CURRENT_BODY" | grep -q "^## Evidence"; then
|
|
89
|
+
# Replace from "## Evidence" to end of file
|
|
90
|
+
NEW_BODY=$(echo "$CURRENT_BODY" | sed '/^## Evidence/,$d')
|
|
91
|
+
EVIDENCE_SECTION=$(cat "$COMMENT_MD")
|
|
92
|
+
UPDATED_BODY="${NEW_BODY}
|
|
93
|
+
${EVIDENCE_SECTION}"
|
|
94
|
+
else
|
|
95
|
+
EVIDENCE_SECTION=$(cat "$COMMENT_MD")
|
|
96
|
+
UPDATED_BODY="${CURRENT_BODY}
|
|
97
|
+
|
|
98
|
+
${EVIDENCE_SECTION}"
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
gh pr edit "$PR_NUMBER" --body "$UPDATED_BODY"
|
|
102
|
+
echo " ✓ PR description updated with evidence"
|
|
103
|
+
|
|
104
|
+
# ── Step 3: Upload image evidence as JIRA attachments ───────────────────────
|
|
105
|
+
if [[ ${#SCREENSHOTS[@]} -gt 0 ]]; then
|
|
106
|
+
echo ""
|
|
107
|
+
echo "==> Uploading image attachments to JIRA $TICKET_ID..."
|
|
108
|
+
|
|
109
|
+
for IMG in "${SCREENSHOTS[@]}"; do
|
|
110
|
+
FILENAME=$(basename "$IMG")
|
|
111
|
+
echo " ↑ $FILENAME"
|
|
112
|
+
RESP=$(curl -s -w "\nHTTP_CODE:%{http_code}" \
|
|
113
|
+
-X POST \
|
|
114
|
+
-H "Authorization: Basic $JIRA_AUTH" \
|
|
115
|
+
-H "X-Atlassian-Token: no-check" \
|
|
116
|
+
-F "file=@$IMG" \
|
|
117
|
+
"$JIRA_SERVER/rest/api/3/issue/$TICKET_ID/attachments")
|
|
118
|
+
HTTP_CODE=$(echo "$RESP" | grep "HTTP_CODE:" | cut -d: -f2)
|
|
119
|
+
if [[ "$HTTP_CODE" != "200" ]]; then
|
|
120
|
+
echo " WARNING: Failed to upload $FILENAME (HTTP $HTTP_CODE)" >&2
|
|
121
|
+
fi
|
|
122
|
+
done
|
|
123
|
+
|
|
124
|
+
echo " ✓ JIRA attachments uploaded"
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
# ── Step 4: Post JIRA comment ────────────────────────────────────────────────
|
|
128
|
+
COMMENT_TXT="$EVIDENCE_DIR/comment.txt"
|
|
129
|
+
if [[ ! -f "$COMMENT_TXT" ]]; then
|
|
130
|
+
echo "ERROR: $COMMENT_TXT not found — run generate-templates.py first" >&2
|
|
131
|
+
exit 1
|
|
132
|
+
fi
|
|
133
|
+
|
|
134
|
+
echo ""
|
|
135
|
+
echo "==> Posting JIRA comment on $TICKET_ID..."
|
|
136
|
+
|
|
137
|
+
COMMENT_BODY=$(cat "$COMMENT_TXT")
|
|
138
|
+
COMMENT_JSON=$(python3 -c "import sys, json; print(json.dumps(sys.stdin.read()))" <<< "$COMMENT_BODY")
|
|
139
|
+
|
|
140
|
+
RESP=$(curl -s -w "\nHTTP_CODE:%{http_code}" \
|
|
141
|
+
-X POST \
|
|
142
|
+
-H "Authorization: Basic $JIRA_AUTH" \
|
|
143
|
+
-H "Content-Type: application/json" \
|
|
144
|
+
"$JIRA_SERVER/rest/api/2/issue/$TICKET_ID/comment" \
|
|
145
|
+
-d "{\"body\": $COMMENT_JSON}")
|
|
146
|
+
HTTP_CODE=$(echo "$RESP" | grep "HTTP_CODE:" | cut -d: -f2)
|
|
147
|
+
|
|
148
|
+
if [[ "$HTTP_CODE" == "201" ]]; then
|
|
149
|
+
echo " ✓ JIRA comment posted"
|
|
150
|
+
else
|
|
151
|
+
echo " WARNING: JIRA comment returned HTTP $HTTP_CODE" >&2
|
|
152
|
+
echo "$RESP" | grep -v "HTTP_CODE:" | head -3
|
|
153
|
+
fi
|
|
154
|
+
|
|
155
|
+
# ── Step 5: Move ticket to Code Review ──────────────────────────────────────
|
|
156
|
+
echo ""
|
|
157
|
+
echo "==> Moving $TICKET_ID to Code Review..."
|
|
158
|
+
jira issue move "$TICKET_ID" "Code Review" 2>&1 && echo " ✓ Ticket moved to Code Review" || echo " WARNING: Could not move ticket" >&2
|
|
159
|
+
|
|
160
|
+
echo ""
|
|
161
|
+
echo "==> Done!"
|
|
162
|
+
echo " JIRA: $JIRA_SERVER/browse/$TICKET_ID"
|
|
163
|
+
echo " GitHub: https://github.com/$GH_REPO/pull/$PR_NUMBER"
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-journey
|
|
3
|
+
description: "Parse a JIRA ticket's Validation Journey section, execute the verification steps, capture evidence, and post to JIRA + GitHub PR using the jira-evidence skill."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# JIRA Validation Journey
|
|
7
|
+
|
|
8
|
+
Parse a JIRA ticket's Validation Journey, execute the verification steps using the project's appropriate tools, capture evidence at each marker, and post to JIRA + GitHub PR.
|
|
9
|
+
|
|
10
|
+
## Arguments
|
|
11
|
+
|
|
12
|
+
`$ARGUMENTS`: `<TICKET_ID> [PR_NUMBER]`
|
|
13
|
+
|
|
14
|
+
- `TICKET_ID` (required): JIRA ticket key (e.g., `PROJ-123`)
|
|
15
|
+
- `PR_NUMBER` (optional): GitHub PR number to update description
|
|
16
|
+
|
|
17
|
+
## Prerequisites
|
|
18
|
+
|
|
19
|
+
- `JIRA_API_TOKEN` environment variable set
|
|
20
|
+
- `jira-cli` configured (`~/.config/.jira/.config.yml`)
|
|
21
|
+
- `gh` CLI authenticated
|
|
22
|
+
|
|
23
|
+
## Workflow
|
|
24
|
+
|
|
25
|
+
### Step 1: Parse the Validation Journey
|
|
26
|
+
|
|
27
|
+
Run the parser script to extract the Validation Journey from the JIRA ticket description:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
python3 .claude/skills/jira-journey/scripts/parse-plan.py <TICKET_ID>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The script outputs JSON with: `ticket`, `prerequisites`, `steps`, `viewports`, `assertions`.
|
|
34
|
+
|
|
35
|
+
### Step 2: Satisfy Prerequisites
|
|
36
|
+
|
|
37
|
+
Before starting the journey, verify each prerequisite listed in the parsed output.
|
|
38
|
+
|
|
39
|
+
### Step 3: Execute Steps
|
|
40
|
+
|
|
41
|
+
Execute each step sequentially. At each step with an evidence marker (`[SCREENSHOT: name]` or `[EVIDENCE: name]`), capture the appropriate evidence.
|
|
42
|
+
|
|
43
|
+
The execution method depends on the project type:
|
|
44
|
+
- **UI projects**: Use Playwright MCP browser tools, capture screenshots at each viewport
|
|
45
|
+
- **API projects**: Use curl or test commands, capture stdout/stderr
|
|
46
|
+
- **Library projects**: Run tests, capture output
|
|
47
|
+
|
|
48
|
+
Stack-specific overrides provide the actual execution implementation.
|
|
49
|
+
|
|
50
|
+
### Step 4: Generate Evidence Templates
|
|
51
|
+
|
|
52
|
+
After capturing all evidence, run the template generator to format evidence for JIRA and GitHub.
|
|
53
|
+
|
|
54
|
+
### Step 5: Post Evidence
|
|
55
|
+
|
|
56
|
+
Use the `/jira-evidence` skill to post everything:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
bash .claude/skills/jira-evidence/scripts/post-evidence.sh <TICKET_ID> ./evidence <PR_NUMBER>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Step 6: Verify
|
|
63
|
+
|
|
64
|
+
Confirm evidence renders at both the JIRA ticket and GitHub PR.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-verify
|
|
3
|
+
description: This skill should be used when verifying that a JIRA ticket meets organizational standards for epic relationships and description quality. It fetches the live ticket and delegates the gate checks to jira-validate-ticket so the bar matches what jira-write-ticket enforces pre-write.
|
|
4
|
+
allowed-tools: ["Skill", "mcp__atlassian__getJiraIssue", "mcp__atlassian__getAccessibleAtlassianResources"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Verify JIRA Ticket: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Verify that the existing JIRA ticket `$ARGUMENTS` meets organizational standards. This skill is a thin post-write wrapper around `lisa:jira-validate-ticket`: it fetches the live ticket and asks `lisa:jira-validate-ticket` to run the gates against the fetched state.
|
|
10
|
+
|
|
11
|
+
This indirection exists so the gate definitions live in exactly one place (`lisa:jira-validate-ticket`). When the bar changes, change it there — `lisa:jira-verify`, `lisa:jira-write-ticket` (Phase 5.5 pre-write), and `lisa:notion-to-tracker` (PRD dry-run) all pick it up.
|
|
12
|
+
|
|
13
|
+
## Process
|
|
14
|
+
|
|
15
|
+
1. Resolve cloud ID via `mcp__atlassian__getAccessibleAtlassianResources`.
|
|
16
|
+
2. Fetch the ticket via `mcp__atlassian__getJiraIssue` for `$ARGUMENTS`.
|
|
17
|
+
3. Invoke `lisa:jira-validate-ticket` and pass the ticket key. The validator runs every gate (Specification + Feasibility) against the live state.
|
|
18
|
+
4. Surface the validator's report verbatim.
|
|
19
|
+
|
|
20
|
+
## Output
|
|
21
|
+
|
|
22
|
+
Pass through `lisa:jira-validate-ticket`'s structured output unchanged. Downstream callers parse the gate lines.
|
|
23
|
+
|
|
24
|
+
## Notes
|
|
25
|
+
|
|
26
|
+
- This skill is read-only. It never edits the ticket, posts comments, or changes status.
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ops-check-logs
|
|
3
|
+
description: Check application logs from local Docker Compose or remote AWS CloudWatch for Rails applications. Supports log tailing, filtering, and error searching.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash
|
|
6
|
+
- Read
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Ops: Check Logs
|
|
10
|
+
|
|
11
|
+
View and search logs across local and remote environments.
|
|
12
|
+
|
|
13
|
+
**Argument**: `$ARGUMENTS` — target and optional filter (e.g., `local`, `local worker`, `staging errors`, `production 500`, `staging slow-queries`)
|
|
14
|
+
|
|
15
|
+
## Discovery
|
|
16
|
+
|
|
17
|
+
1. Read `config/deploy.yml` to discover the service name (used in CloudWatch log group naming)
|
|
18
|
+
2. Read `docker-compose.yml` to identify local service names for targeted log viewing
|
|
19
|
+
3. Discover the AWS region from deploy config or environment variables
|
|
20
|
+
|
|
21
|
+
## Local Logs (Docker Compose)
|
|
22
|
+
|
|
23
|
+
### All Services
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
docker compose logs --tail=100
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Follow Mode (tail)
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
docker compose logs -f --tail=50
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Specific Service
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Rails web server
|
|
39
|
+
docker compose logs --tail=100 web
|
|
40
|
+
|
|
41
|
+
# Solid Queue worker
|
|
42
|
+
docker compose logs --tail=100 worker
|
|
43
|
+
|
|
44
|
+
# PostgreSQL
|
|
45
|
+
docker compose logs --tail=100 postgres
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Filter for Errors
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
docker compose logs --tail=500 web 2>&1 | grep -iE "(error|exception|fatal|500)"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Rails Development Log (if running outside Docker)
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
tail -n 100 log/development.log
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Filter Rails Log for Slow Queries
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
grep -E "SLOW|ms\)" log/development.log | tail -20
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Remote Logs (Kamal)
|
|
67
|
+
|
|
68
|
+
### Tail Application Logs
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
kamal app logs -d {environment}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Follow Mode
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
kamal app logs -d {environment} -f
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Specific Role
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Web role
|
|
84
|
+
kamal app logs --roles=web -d {environment}
|
|
85
|
+
|
|
86
|
+
# Worker role (Solid Queue)
|
|
87
|
+
kamal app logs --roles=worker -d {environment}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Remote Logs (CloudWatch via AWS CLI)
|
|
91
|
+
|
|
92
|
+
For advanced filtering and historical log access, use the AWS CLI directly.
|
|
93
|
+
|
|
94
|
+
### Discover Log Groups
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
aws logs describe-log-groups \
|
|
98
|
+
--region {aws-region} \
|
|
99
|
+
--query 'logGroups[].logGroupName' \
|
|
100
|
+
--output text | tr '\t' '\n' | grep -i "{app_name}"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Filter for Errors (last 30 minutes)
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
aws logs filter-log-events \
|
|
107
|
+
--region {aws-region} \
|
|
108
|
+
--log-group-name "{log-group}" \
|
|
109
|
+
--start-time $(( ($(date +%s) - 1800) * 1000 )) \
|
|
110
|
+
--filter-pattern "ERROR" \
|
|
111
|
+
--query 'events[].message' \
|
|
112
|
+
--output text
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Filter for 500 Errors
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
aws logs filter-log-events \
|
|
119
|
+
--region {aws-region} \
|
|
120
|
+
--log-group-name "{log-group}" \
|
|
121
|
+
--start-time $(( ($(date +%s) - 1800) * 1000 )) \
|
|
122
|
+
--filter-pattern '"status=500"' \
|
|
123
|
+
--query 'events[].message' \
|
|
124
|
+
--output text
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Filter for Slow Requests (> 1 second)
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
aws logs filter-log-events \
|
|
131
|
+
--region {aws-region} \
|
|
132
|
+
--log-group-name "{log-group}" \
|
|
133
|
+
--start-time $(( ($(date +%s) - 3600) * 1000 )) \
|
|
134
|
+
--filter-pattern '"duration" "1000"' \
|
|
135
|
+
--query 'events[].message' \
|
|
136
|
+
--output text
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Tail Live Logs
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
aws logs tail "{log-group}" \
|
|
143
|
+
--region {aws-region} \
|
|
144
|
+
--follow \
|
|
145
|
+
--since 10m
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Specific Time Range
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
aws logs filter-log-events \
|
|
152
|
+
--region {aws-region} \
|
|
153
|
+
--log-group-name "{log-group}" \
|
|
154
|
+
--start-time $(date -d "{start-time}" +%s000) \
|
|
155
|
+
--end-time $(date -d "{end-time}" +%s000) \
|
|
156
|
+
--query 'events[].message' \
|
|
157
|
+
--output text
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## ECS Task Logs
|
|
161
|
+
|
|
162
|
+
For container-level logs (useful when the application fails to start):
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# List recent tasks
|
|
166
|
+
aws ecs list-tasks \
|
|
167
|
+
--cluster {cluster-name} \
|
|
168
|
+
--service-name {service-name} \
|
|
169
|
+
--region {aws-region} \
|
|
170
|
+
--query 'taskArns[]' --output text
|
|
171
|
+
|
|
172
|
+
# Describe a task to find the log stream
|
|
173
|
+
aws ecs describe-tasks \
|
|
174
|
+
--cluster {cluster-name} \
|
|
175
|
+
--tasks {task-arn} \
|
|
176
|
+
--region {aws-region} \
|
|
177
|
+
--query 'tasks[0].containers[].{Name:name,Status:lastStatus,ExitCode:exitCode}' \
|
|
178
|
+
--output table
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Output Format
|
|
182
|
+
|
|
183
|
+
Report log findings as:
|
|
184
|
+
|
|
185
|
+
| Source | Timestamp | Level | Context | Message |
|
|
186
|
+
|--------|-----------|-------|---------|---------|
|
|
187
|
+
| CloudWatch | 2026-03-18T10:30:00Z | ERROR | web | ActiveRecord::ConnectionTimeoutError |
|
|
188
|
+
| Docker | — | ERROR | worker | SolidQueue::ProcessMissingError |
|
|
189
|
+
| Rails log | — | WARN | N/A | DEPRECATION WARNING: ... |
|
|
190
|
+
|
|
191
|
+
Include a summary of findings: total errors, warnings, and any patterns observed.
|