@codyswann/lisa 2.195.4 → 2.195.7
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/README.md +17 -3
- package/all/copy-contents/gitignore +10 -4
- package/dist/cli/print-update-warning.d.ts +1 -1
- package/dist/cli/print-update-warning.js +2 -2
- package/dist/cli/print-update-warning.js.map +1 -1
- package/dist/cli/update-check.d.ts +6 -0
- package/dist/cli/update-check.d.ts.map +1 -1
- package/dist/cli/update-check.js +3 -3
- package/dist/cli/update-check.js.map +1 -1
- package/dist/cli/update-cmd.d.ts +1 -1
- package/dist/cli/update-cmd.d.ts.map +1 -1
- package/dist/cli/update-cmd.js +8 -7
- package/dist/cli/update-cmd.js.map +1 -1
- package/dist/codex/hooks-installer.d.ts +4 -1
- package/dist/codex/hooks-installer.d.ts.map +1 -1
- package/dist/codex/hooks-installer.js +109 -30
- package/dist/codex/hooks-installer.js.map +1 -1
- package/dist/codex/mcp-installer.d.ts +22 -0
- package/dist/codex/mcp-installer.d.ts.map +1 -0
- package/dist/codex/mcp-installer.js +135 -0
- package/dist/codex/mcp-installer.js.map +1 -0
- package/dist/codex/plugin-marketplace-installer.d.ts +19 -13
- package/dist/codex/plugin-marketplace-installer.d.ts.map +1 -1
- package/dist/codex/plugin-marketplace-installer.js +69 -72
- package/dist/codex/plugin-marketplace-installer.js.map +1 -1
- package/dist/codex/project-hooks-cleanup.d.ts +12 -0
- package/dist/codex/project-hooks-cleanup.d.ts.map +1 -0
- package/dist/codex/project-hooks-cleanup.js +31 -0
- package/dist/codex/project-hooks-cleanup.js.map +1 -0
- package/dist/codex/project-overlay.d.ts +23 -0
- package/dist/codex/project-overlay.d.ts.map +1 -0
- package/dist/codex/project-overlay.js +64 -0
- package/dist/codex/project-overlay.js.map +1 -0
- package/dist/codex/scripts/inject-rules.sh +4 -0
- package/dist/codex/scripts/install-pkgs.sh +4 -0
- package/dist/codex/scripts/setup-jira-cli.sh +5 -1
- package/dist/codex/settings-installer.d.ts.map +1 -1
- package/dist/codex/settings-installer.js +16 -3
- package/dist/codex/settings-installer.js.map +1 -1
- package/dist/codex/skills-installer.d.ts +15 -19
- package/dist/codex/skills-installer.d.ts.map +1 -1
- package/dist/codex/skills-installer.js +47 -140
- package/dist/codex/skills-installer.js.map +1 -1
- package/dist/core/lisa-plugin-selection.d.ts +16 -0
- package/dist/core/lisa-plugin-selection.d.ts.map +1 -0
- package/dist/core/lisa-plugin-selection.js +59 -0
- package/dist/core/lisa-plugin-selection.js.map +1 -0
- package/dist/core/lisa-rules-mirror.d.ts +2 -1
- package/dist/core/lisa-rules-mirror.d.ts.map +1 -1
- package/dist/core/lisa-rules-mirror.js +19 -3
- package/dist/core/lisa-rules-mirror.js.map +1 -1
- package/dist/core/lisa-skill-sources.d.ts.map +1 -1
- package/dist/core/lisa-skill-sources.js +16 -1
- package/dist/core/lisa-skill-sources.js.map +1 -1
- package/dist/core/lisa.d.ts +4 -6
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +12 -38
- package/dist/core/lisa.js.map +1 -1
- package/dist/migrations/ensure-lisa-postinstall.d.ts.map +1 -1
- package/dist/migrations/ensure-lisa-postinstall.js +4 -3
- package/dist/migrations/ensure-lisa-postinstall.js.map +1 -1
- package/dist/opencode/plugin-templates/lisa-session-bootstrap.ts +2 -3
- package/expo/create-only/.github/workflows/deploy.yml +6 -6
- package/npm-package/create-only/.github/workflows/publish-to-npm.yml +2 -1
- package/package.json +2 -3
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-acceptance-criteria/SKILL.md +71 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-acceptance-criteria/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-agent-design-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-analyze-claude-remote/SKILL.md +429 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-analyze-claude-remote/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/SKILL.md +361 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/scripts/markdown-to-adf.mjs +214 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/SKILL.md +111 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-bug-triage/SKILL.md +23 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-bug-triage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-codebase-research/SKILL.md +87 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-codebase-research/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-codify-verification/SKILL.md +162 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-codify-verification/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-prd-intake/SKILL.md +417 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-prd-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/SKILL.md +356 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-write-prd/SKILL.md +109 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-cross-pollinate/SKILL.md +175 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-cross-pollinate/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-debrief/SKILL.md +94 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-debrief/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-debrief-apply/SKILL.md +63 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-debrief-apply/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +336 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-doctor/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +179 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-epic-triage/SKILL.md +28 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-epic-triage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +91 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-fix-linter-error/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-generate-claude-remote-build-script/SKILL.md +224 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-generate-claude-remote-build-script/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-commit/SKILL.md +48 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-commit/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-prune/SKILL.md +35 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-prune/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-submit-pr/SKILL.md +113 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-submit-pr/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-add-journey/SKILL.md +115 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +446 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-create/SKILL.md +101 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-create/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-evidence/SKILL.md +110 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/SKILL.md +121 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-prd-intake/SKILL.md +432 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-prd-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-project-v2/SKILL.md +227 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-project-v2/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-read-issue/SKILL.md +248 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-read-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/SKILL.md +132 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/SKILL.md +339 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +330 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-verify/SKILL.md +29 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/SKILL.md +339 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-prd/SKILL.md +157 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +202 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-implement/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-code-complexity/SKILL.md +44 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-code-complexity/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines/SKILL.md +45 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines-per-function/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-test-coverage/SKILL.md +44 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-test-coverage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-tests/SKILL.md +47 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-tests/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +133 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake-explain/SKILL.md +279 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake-explain/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jam-access/SKILL.md +52 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jam-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/SKILL.md +121 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +368 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/SKILL.md +154 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/SKILL.md +90 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/scripts/post-evidence.sh +180 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/SKILL.md +127 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/SKILL.md +198 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/scripts/download-attachment.sh +110 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-sync/SKILL.md +108 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +317 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-verify/SKILL.md +30 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/SKILL.md +267 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jsdoc-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/SKILL.md +90 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/SKILL.md +105 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +346 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/SKILL.md +146 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-evidence/SKILL.md +103 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/SKILL.md +134 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-prd-intake/SKILL.md +383 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-prd-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-read-issue/SKILL.md +200 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-read-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-sync/SKILL.md +127 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/SKILL.md +339 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +314 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-verify/SKILL.md +51 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +292 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-prd/SKILL.md +96 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +69 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-monitor/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-add-test-coverage/SKILL.md +40 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-add-test-coverage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-improve-tests/SKILL.md +29 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-improve-tests/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-lower-code-complexity/SKILL.md +28 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-lower-code-complexity/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-access/SKILL.md +226 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-prd-intake/SKILL.md +360 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-prd-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/SKILL.md +353 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-write-prd/SKILL.md +109 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-review/SKILL.md +83 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-review/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-simplifier/SKILL.md +76 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-simplifier/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-coderabbit/SKILL.md +77 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-coderabbit/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/SKILL.md +144 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-sdk-setup/SKILL.md +211 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-sdk-setup/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-seer/SKILL.md +135 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-seer/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-skill-creator/SKILL.md +151 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-skill-creator/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-performance-review/SKILL.md +94 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-performance-review/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-plan/SKILL.md +60 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-plan/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-plugin-sync-explain/SKILL.md +53 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-plugin-sync-explain/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-posthog-access/SKILL.md +60 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-posthog-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-backlink/SKILL.md +265 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-backlink/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-source-write/SKILL.md +101 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-source-write/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/SKILL.md +170 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-product-walkthrough/SKILL.md +104 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-product-walkthrough/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/SKILL.md +315 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/evidence-card-format.md +21 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/host-project-only.md +22 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +57 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/public-external-inspiration.md +22 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/unavailable-data-rejection.md +22 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-pull-request-review/SKILL.md +84 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-pull-request-review/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-quality-review/SKILL.md +54 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-quality-review/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-queue-status/SKILL.md +133 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-queue-status/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +1030 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-reproduce-bug/SKILL.md +96 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-reproduce-bug/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-research/SKILL.md +68 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-research/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-implementation/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-local/SKILL.md +88 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-local/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-root-cause-analysis/SKILL.md +155 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-root-cause-analysis/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-security-review/SKILL.md +57 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-security-review/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-security-zap-scan/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sentry-access/SKILL.md +56 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sentry-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-atlassian/SKILL.md +347 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-atlassian/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +103 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-confluence/SKILL.md +254 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-confluence/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-github/SKILL.md +268 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-github/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-jira/SKILL.md +198 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-jira/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/SKILL.md +251 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-notion/SKILL.md +316 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-notion/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/SKILL.md +71 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-spec-conformance/SKILL.md +159 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-spec-conformance/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sync-down/SKILL.md +171 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sync-down/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-task-decomposition/SKILL.md +127 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-task-decomposition/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-task-triage/SKILL.md +23 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-task-triage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tdd-implementation/SKILL.md +86 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tdd-implementation/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-test-strategy/SKILL.md +63 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-test-strategy/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-ticket-triage/SKILL.md +186 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-ticket-triage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-build-intake/SKILL.md +86 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-build-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-create/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-create/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/SKILL.md +53 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-journey/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-read/SKILL.md +28 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-read/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-source-artifacts/SKILL.md +107 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-source-artifacts/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/SKILL.md +65 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-validate/SKILL.md +37 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-validate/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-verify/SKILL.md +29 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-write/SKILL.md +54 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-write/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-usage-accounting/SKILL.md +170 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-usage-accounting/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-use-the-product/SKILL.md +86 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-use-the-product/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-validate-tracker-mapping/SKILL.md +195 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-validate-tracker-mapping/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +365 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verify/SKILL.md +52 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verify-prd/SKILL.md +392 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verify-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-wiki-install/SKILL.md +101 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-wiki-install/agents/openai.yaml +4 -0
- package/plugins/lisa/hooks/inject-rules.sh +3 -2
- package/plugins/lisa/hooks/install-pkgs.sh +4 -45
- package/plugins/lisa/hooks/setup-jira-cli.sh +4 -12
- package/plugins/lisa/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-setup-linear/SKILL.md +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 +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/hooks/inject-rules.sh +3 -2
- package/plugins/lisa-copilot/hooks/install-pkgs.sh +4 -45
- package/plugins/lisa-copilot/hooks/setup-jira-cli.sh +4 -12
- package/plugins/lisa-copilot/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/install-pkgs.sh +4 -45
- package/plugins/lisa-cursor/hooks/setup-jira-cli.sh +4 -12
- package/plugins/lisa-cursor/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/SKILL.md +280 -0
- package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/references/native-module.md +96 -0
- package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/SKILL.md +238 -0
- package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/references/mutation-patterns.md +360 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/SKILL.md +367 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +438 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/SKILL.md +321 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/animations.md +220 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/controls.md +272 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/form-sheet.md +253 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/gradients.md +106 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/icons.md +213 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/media.md +198 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/route-structure.md +229 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/search.md +248 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/storage.md +121 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/tabs.md +433 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/toolbar-and-headers.md +284 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/visual-effects.md +197 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/webgpu-three.md +605 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/zoom-transitions.md +158 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/SKILL.md +299 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/references/examples.md +749 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/references/patterns.md +318 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/scripts/create_component.py +200 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/scripts/validate_component.py +209 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/SKILL.md +268 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/references/common-issues.md +619 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/references/platform-api.md +276 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
- package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/SKILL.md +214 -0
- package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/scripts/validate_structure.py +454 -0
- package/plugins/lisa-expo/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-expo/.codex-plugin/skills/e2e-coverage-gaps/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/SKILL.md +228 -0
- package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
- package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/references/update-insights-schema.md +69 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-api-routes/SKILL.md +369 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-api-routes/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/SKILL.md +54 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/brownfield-integrated.md +526 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/brownfield-isolated.md +402 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/comparison.md +63 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/troubleshooting.md +88 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/SKILL.md +92 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/scripts/fetch.js +113 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/scripts/package.json +11 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/scripts/validate.js +85 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/SKILL.md +193 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/app-store-metadata.md +479 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/ios-app-store.md +355 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/play-store.md +264 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/testflight.md +58 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/workflows.md +200 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-dev-client/SKILL.md +164 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-dev-client/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/SKILL.md +309 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/references/validation-patterns.md +417 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/SKILL.md +141 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/config-plugin.md +90 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/create-expo-module.md +206 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/lifecycle.md +127 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/module-config.md +48 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/native-module.md +286 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/native-view.md +171 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/SKILL.md +431 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/references/official-docs.md +290 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-tailwind-setup/SKILL.md +480 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-tailwind-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-jetpack-compose/SKILL.md +40 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-jetpack-compose/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-swift-ui/SKILL.md +39 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-swift-ui/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/SKILL.md +419 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/references/color-tokens.md +343 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/references/component-mapping.md +307 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/scripts/validate_styling.py +424 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-add-journey/SKILL.md +126 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-create/SKILL.md +161 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-create/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/SKILL.md +78 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/scripts/post-evidence.sh +180 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/SKILL.md +190 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/scripts/generate-templates.py +281 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-verify/SKILL.md +27 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-verify/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +13 -0
- package/plugins/lisa-expo/.codex-plugin/skills/lisa-e2e-coverage-gaps/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/local-state/SKILL.md +362 -0
- package/plugins/lisa-expo/.codex-plugin/skills/local-state/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/local-state/references/async-storage.md +505 -0
- package/plugins/lisa-expo/.codex-plugin/skills/local-state/references/persistence-patterns.md +711 -0
- package/plugins/lisa-expo/.codex-plugin/skills/local-state/references/reactive-variables.md +446 -0
- package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/SKILL.md +507 -0
- package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/references/expo-router-loaders.md +344 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-browser-uat/SKILL.md +124 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-browser-uat/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-check-logs/SKILL.md +217 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-check-logs/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-db-ops/SKILL.md +123 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-db-ops/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-deploy/SKILL.md +123 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-deploy/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-monitor-errors/SKILL.md +99 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-monitor-errors/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-performance/SKILL.md +165 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-performance/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-run-local/SKILL.md +169 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-run-local/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-verify-health/SKILL.md +101 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-verify-health/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/owasp-zap/SKILL.md +61 -0
- package/plugins/lisa-expo/.codex-plugin/skills/owasp-zap/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/play-store-access/SKILL.md +226 -0
- package/plugins/lisa-expo/.codex-plugin/skills/play-store-access/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/playwright-ci-debugging/SKILL.md +140 -0
- package/plugins/lisa-expo/.codex-plugin/skills/playwright-ci-debugging/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/playwright-selectors/SKILL.md +455 -0
- package/plugins/lisa-expo/.codex-plugin/skills/playwright-selectors/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/SKILL.md +251 -0
- package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/references/extraction-strategies.md +456 -0
- package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/references/refactoring-patterns.md +557 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/SKILL.md +314 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/async-patterns.md +420 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/expo-router-testing.md +556 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/mocking-patterns.md +590 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/query-priority.md +291 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/SKILL.md +134 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/expo-av-to-video.md +160 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/native-tabs.md +124 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/new-architecture.md +79 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/react-19.md +79 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/react-compiler.md +59 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
- package/plugins/lisa-expo/.codex-plugin/skills/use-dom/SKILL.md +417 -0
- package/plugins/lisa-expo/.codex-plugin/skills/use-dom/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/building-native-ui/SKILL.md +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-agy/skills/building-native-ui/SKILL.md +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/skills/building-native-ui/SKILL.md +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/skills/building-native-ui/SKILL.md +1 -1
- 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/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/e2e-coverage-gaps/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-auth/SKILL.md +368 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-auth/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-build-and-deploy/SKILL.md +198 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-build-and-deploy/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-caching/SKILL.md +265 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-caching/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-component-model/SKILL.md +87 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-component-model/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-config-yaml/SKILL.md +283 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-config-yaml/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-operations/SKILL.md +239 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-operations/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-realtime/SKILL.md +187 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-realtime/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-resources/SKILL.md +142 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-resources/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-rest-queries/SKILL.md +403 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-rest-queries/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-schema-graphql/SKILL.md +123 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-schema-graphql/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-testing/SKILL.md +254 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-testing/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +13 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/lisa-e2e-coverage-gaps/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/hooks/block-generated-artifact-edits.sh +42 -24
- package/plugins/lisa-harper-fabric/hooks/enforce-config-extensions.mjs +12 -14
- package/plugins/lisa-harper-fabric/hooks/enforce-config-extensions.sh +30 -3
- package/plugins/lisa-harper-fabric/hooks/inject-rules.sh +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/hooks/block-generated-artifact-edits.sh +42 -24
- package/plugins/lisa-harper-fabric-copilot/hooks/enforce-config-extensions.mjs +12 -14
- package/plugins/lisa-harper-fabric-copilot/hooks/enforce-config-extensions.sh +30 -3
- package/plugins/lisa-harper-fabric-copilot/hooks/inject-rules.sh +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/hooks/block-generated-artifact-edits.sh +42 -24
- package/plugins/lisa-harper-fabric-cursor/hooks/enforce-config-extensions.mjs +12 -14
- package/plugins/lisa-harper-fabric-cursor/hooks/enforce-config-extensions.sh +30 -3
- 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/skills/nestjs-graphql/SKILL.md +176 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/agents/openai.yaml +4 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/advanced-features.md +527 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/project-patterns.md +531 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/quick-start.md +257 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/types-scalars.md +513 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-rules/SKILL.md +565 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-rules/agents/openai.yaml +4 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/SKILL.md +275 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/agents/openai.yaml +4 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/references/entity-patterns.md +450 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/references/observability-patterns.md +536 -0
- package/plugins/lisa-nestjs/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-repo-topic/SKILL.md +13 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-repo-topic/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-slack/SKILL.md +13 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-slack/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-telegram/SKILL.md +13 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-telegram/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/SKILL.md +163 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +185 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/SKILL.md +175 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/references/platform-routing.md +123 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/references/prompts.md +78 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-setup/SKILL.md +141 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-setup-openclaw/SKILL.md +13 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-setup-openclaw/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-accessibility/SKILL.md +135 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-accessibility/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-pipeline/SKILL.md +222 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-pipeline/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-sourcing/SKILL.md +151 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-sourcing/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-build-deploy/SKILL.md +153 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-build-deploy/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-i18n/SKILL.md +122 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-i18n/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-project-structure/SKILL.md +89 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-project-structure/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-services/SKILL.md +208 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-services/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-testing/SKILL.md +192 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-testing/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/hooks/inject-rules.sh +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/hooks/inject-rules.sh +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-rails/.codex-plugin/skills/action-controller-best-practices/SKILL.md +374 -0
- package/plugins/lisa-rails/.codex-plugin/skills/action-controller-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/action-view-best-practices/SKILL.md +335 -0
- package/plugins/lisa-rails/.codex-plugin/skills/action-view-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/active-record-model-best-practices/SKILL.md +166 -0
- package/plugins/lisa-rails/.codex-plugin/skills/active-record-model-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-rails/.codex-plugin/skills/e2e-coverage-gaps/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-rails/.codex-plugin/skills/fix-linter-error/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-code-complexity/SKILL.md +48 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-code-complexity/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines/SKILL.md +46 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines-per-function/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-test-coverage/SKILL.md +45 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-test-coverage/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-add-journey/SKILL.md +65 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-create/SKILL.md +100 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-create/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/SKILL.md +70 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/scripts/post-evidence.sh +180 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-journey/SKILL.md +64 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-journey/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-verify/SKILL.md +26 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-verify/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +13 -0
- package/plugins/lisa-rails/.codex-plugin/skills/lisa-e2e-coverage-gaps/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-check-logs/SKILL.md +191 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-check-logs/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-deploy/SKILL.md +153 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-deploy/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-run-local/SKILL.md +169 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-run-local/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-jobs/SKILL.md +157 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-jobs/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-telemetry/SKILL.md +197 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-telemetry/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/hooks/inject-rules.sh +2 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/hooks/inject-rules.sh +2 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-ingest/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-ingest/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-role/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-role/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-ingest/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-ingest/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-lint/SKILL.md +11 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-lint/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-migrate/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-migrate/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-onboard-me/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-onboard-me/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-query/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-query/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup-wiki/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup-wiki/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-status/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-status/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-ingest/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-role/SKILL.md +30 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-role/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-confluence/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-docs/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-git/SKILL.md +25 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-git/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-jira/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-memory/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-notion/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-roles/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-slack/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-web/SKILL.md +23 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-web/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-doctor/SKILL.md +47 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-doctor/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-ingest/SKILL.md +99 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-ingest/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-lint/SKILL.md +32 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-lint/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-migrate/SKILL.md +43 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-migrate/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-onboard-me/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-query/SKILL.md +36 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-query/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup/SKILL.md +75 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup-automations/SKILL.md +83 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup-automations/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-status/SKILL.md +47 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-status/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-tear-down-automations/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-usage/SKILL.md +50 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-usage/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/hooks/inject-rules.sh +3 -2
- package/plugins/src/base/hooks/install-pkgs.sh +4 -45
- package/plugins/src/base/hooks/setup-jira-cli.sh +4 -12
- package/plugins/src/base/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/src/expo/skills/building-native-ui/SKILL.md +1 -1
- package/plugins/src/harper-fabric/hooks/block-generated-artifact-edits.sh +42 -24
- package/plugins/src/harper-fabric/hooks/enforce-config-extensions.mjs +12 -14
- package/plugins/src/harper-fabric/hooks/enforce-config-extensions.sh +30 -3
- package/plugins/src/harper-fabric/hooks/inject-rules.sh +1 -1
- package/plugins/src/nestjs/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
- package/plugins/src/phaser/hooks/inject-rules.sh +1 -1
- package/plugins/src/rails/hooks/inject-rules.sh +2 -1
- package/scripts/clean-dist.mjs +7 -0
- package/scripts/generate-codex-plugin-artifacts.mjs +311 -20
- package/scripts/install-claude-plugins.sh +53 -40
- package/typescript/package-lisa/package.lisa.json +1 -1
- package/.agents/plugins/marketplace.json +0 -128
- package/dist/codex/lisa-plugin-detection.d.ts +0 -68
- package/dist/codex/lisa-plugin-detection.d.ts.map +0 -1
- package/dist/codex/lisa-plugin-detection.js +0 -139
- package/dist/codex/lisa-plugin-detection.js.map +0 -1
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: harper-caching
|
|
3
|
+
description: "implementing Harper…"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Harper Caching
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Harper can use a local table as a durable cache for an external source. The table
|
|
11
|
+
stores records, enforces schema/index behavior, exposes normal REST/GraphQL
|
|
12
|
+
routes, and calls the source Resource only when a record is missing, expired, or
|
|
13
|
+
explicitly invalidated.
|
|
14
|
+
|
|
15
|
+
Use a caching table when the cached data should survive process restarts,
|
|
16
|
+
participate in Harper queries, or stay coherent across Fabric nodes. Do not keep
|
|
17
|
+
API responses in a module-level `Map` unless the data is deliberately
|
|
18
|
+
process-local, disposable, and not part of the application data model.
|
|
19
|
+
|
|
20
|
+
Cross-check the table declaration in [[harper-schema-graphql]] and the Resource
|
|
21
|
+
method conventions in [[harper-resources]] before editing. If cached records are
|
|
22
|
+
queried by filters, sort keys, or relationships, also align indexes and query
|
|
23
|
+
shape with [[harper-rest-queries]].
|
|
24
|
+
|
|
25
|
+
## Declare the cache table
|
|
26
|
+
|
|
27
|
+
Declare a normal `@table` and expose it with `@export` when callers should reach
|
|
28
|
+
the cache over REST or GraphQL. Use the `expiration` argument on `@table` for the
|
|
29
|
+
default time-to-live, in seconds:
|
|
30
|
+
|
|
31
|
+
```graphql
|
|
32
|
+
type WeatherSnapshot @table(expiration: 300) @export(name: "weather") {
|
|
33
|
+
locationId: String @primaryKey
|
|
34
|
+
city: String @indexed
|
|
35
|
+
temperatureF: Float
|
|
36
|
+
conditions: String
|
|
37
|
+
sourceUpdatedAt: Long
|
|
38
|
+
fetchedAt: Long
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Guidance:
|
|
43
|
+
|
|
44
|
+
- Keep the primary key stable and derived from the upstream identity. For an
|
|
45
|
+
external REST API, a normalized URL slug, vendor id, or compound key string is
|
|
46
|
+
usually better than an auto-generated id.
|
|
47
|
+
- Index attributes used by cache reads (`city`, `tenantId`, `category`, `status`)
|
|
48
|
+
so callers do not fetch broad collections and filter in JavaScript.
|
|
49
|
+
- Store upstream freshness metadata such as `sourceUpdatedAt`, `etag`, or
|
|
50
|
+
`fetchedAt` when verification, debugging, or conditional revalidation needs it.
|
|
51
|
+
- Keep TTL at the table level unless the upstream response controls freshness per
|
|
52
|
+
record. Per-record expiration belongs in the source Resource context.
|
|
53
|
+
|
|
54
|
+
## Wire `sourcedFrom`
|
|
55
|
+
|
|
56
|
+
Implement a source Resource that fetches the upstream record, then attach it to
|
|
57
|
+
the table with `sourcedFrom`. In Lisa template projects, write TypeScript under
|
|
58
|
+
`src/` and rebuild the generated Harper assets; do not edit `resources.js` by
|
|
59
|
+
hand.
|
|
60
|
+
|
|
61
|
+
```javascript
|
|
62
|
+
export class WeatherApiSource extends Resource {
|
|
63
|
+
static loadAsInstance = false;
|
|
64
|
+
|
|
65
|
+
async get(target) {
|
|
66
|
+
const id = target.id;
|
|
67
|
+
const response = await fetch(
|
|
68
|
+
`https://api.example.com/weather/${encodeURIComponent(id)}`,
|
|
69
|
+
{
|
|
70
|
+
headers: { Accept: 'application/json' },
|
|
71
|
+
},
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
if (response.status === 404) {
|
|
75
|
+
const error = new Error(`Weather location not found: ${id}`);
|
|
76
|
+
error.statusCode = 404;
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (!response.ok) {
|
|
81
|
+
const error = new Error(`Weather upstream failed: ${response.status}`);
|
|
82
|
+
error.statusCode = 502;
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const data = await response.json();
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
locationId: id,
|
|
90
|
+
city: data.city,
|
|
91
|
+
temperatureF: data.temperatureF,
|
|
92
|
+
conditions: data.conditions,
|
|
93
|
+
sourceUpdatedAt: Date.parse(data.updatedAt),
|
|
94
|
+
fetchedAt: Date.now(),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
tables.WeatherSnapshot.sourcedFrom(WeatherApiSource);
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
When a requested record is missing or stale, Harper calls the source `get()` and
|
|
103
|
+
caches the returned record in the local table. Concurrent requests for the same
|
|
104
|
+
missing or stale record share the same upstream load, which avoids a cache
|
|
105
|
+
stampede for a single key.
|
|
106
|
+
|
|
107
|
+
## TTL and eviction
|
|
108
|
+
|
|
109
|
+
Use `expiration` for the TTL: after that many seconds, the cached entry is stale
|
|
110
|
+
and the next read reloads it from the source. If a project cannot express the
|
|
111
|
+
default in schema, `sourcedFrom` can also receive options:
|
|
112
|
+
|
|
113
|
+
```javascript
|
|
114
|
+
tables.WeatherSnapshot.sourcedFrom(WeatherApiSource, {
|
|
115
|
+
expiration: 300,
|
|
116
|
+
eviction: 3600,
|
|
117
|
+
scanInterval: 60,
|
|
118
|
+
});
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Option meanings:
|
|
122
|
+
|
|
123
|
+
| Option | Use |
|
|
124
|
+
| --- | --- |
|
|
125
|
+
| `expiration` | Default TTL in seconds before the cached record is stale. |
|
|
126
|
+
| `eviction` | Seconds after expiration before Harper may physically remove the record. |
|
|
127
|
+
| `scanInterval` | Seconds between scans for expired records. |
|
|
128
|
+
|
|
129
|
+
Prefer schema directives for stable application behavior because the data model
|
|
130
|
+
and default freshness policy stay together. Use `sourcedFrom` options when the
|
|
131
|
+
cache attachment is intentionally dynamic or the downstream Harper version lacks
|
|
132
|
+
the needed schema directive.
|
|
133
|
+
|
|
134
|
+
## Conditional revalidation
|
|
135
|
+
|
|
136
|
+
When the upstream provides `ETag`, `Last-Modified`, or `Cache-Control`, pass that
|
|
137
|
+
freshness model through the source Resource instead of overwriting good cached
|
|
138
|
+
data with every revalidation.
|
|
139
|
+
|
|
140
|
+
```javascript
|
|
141
|
+
export class WeatherApiSource extends Resource {
|
|
142
|
+
static loadAsInstance = false;
|
|
143
|
+
|
|
144
|
+
async get(target) {
|
|
145
|
+
const context = this.getContext();
|
|
146
|
+
const headers = new Headers({ Accept: 'application/json' });
|
|
147
|
+
|
|
148
|
+
if (context.replacingVersion) {
|
|
149
|
+
headers.set(
|
|
150
|
+
'If-Modified-Since',
|
|
151
|
+
new Date(context.replacingVersion).toUTCString(),
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const response = await fetch(
|
|
156
|
+
`https://api.example.com/weather/${encodeURIComponent(target.id)}`,
|
|
157
|
+
{ headers },
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
if (response.status === 304) {
|
|
161
|
+
return context.replacingRecord;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const maxAge = response.headers
|
|
165
|
+
.get('Cache-Control')
|
|
166
|
+
?.match(/max-age=(\d+)/)?.[1];
|
|
167
|
+
|
|
168
|
+
if (maxAge) {
|
|
169
|
+
context.expiresAt = Date.now() + Number(maxAge) * 1000;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
context.lastModified = response.headers.get('Last-Modified');
|
|
173
|
+
return response.json();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Use `allowStaleWhileRevalidate(entry, id)` on the cached table when stale data is
|
|
179
|
+
acceptable during refresh:
|
|
180
|
+
|
|
181
|
+
```javascript
|
|
182
|
+
export class WeatherSnapshot extends tables.WeatherSnapshot {
|
|
183
|
+
static loadAsInstance = false;
|
|
184
|
+
|
|
185
|
+
allowStaleWhileRevalidate(entry, id) {
|
|
186
|
+
return Date.now() - entry.expiresAt < 60_000;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Return `false` or omit the method when callers must wait for a fresh value.
|
|
192
|
+
|
|
193
|
+
## Explicit invalidation
|
|
194
|
+
|
|
195
|
+
Use invalidation when an admin action, webhook, scheduled refresh, or upstream
|
|
196
|
+
write makes the cached record stale before its TTL.
|
|
197
|
+
|
|
198
|
+
```javascript
|
|
199
|
+
await tables.WeatherSnapshot.invalidate('nyc');
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
The next `get()` for that id reloads from the source. If the project Harper
|
|
203
|
+
version or resource shape does not expose `invalidate()`, use an explicit delete
|
|
204
|
+
or overwrite path and document the behavior:
|
|
205
|
+
|
|
206
|
+
```javascript
|
|
207
|
+
await tables.WeatherSnapshot.delete('nyc');
|
|
208
|
+
await tables.WeatherSnapshot.get('nyc');
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
For write-through caches, implement `put`, `patch`, or `delete` on the source
|
|
212
|
+
Resource only when those operations should update the upstream system. Otherwise,
|
|
213
|
+
reject writes or keep cache mutation behind an operator-only Resource so clients
|
|
214
|
+
do not accidentally diverge from the source of truth.
|
|
215
|
+
|
|
216
|
+
## Fabric coherence
|
|
217
|
+
|
|
218
|
+
In a Fabric deployment, treat every node as capable of serving a read while cache
|
|
219
|
+
state is replicating:
|
|
220
|
+
|
|
221
|
+
- Keep `get()` deterministic and idempotent. A second node may reload the same
|
|
222
|
+
stale key.
|
|
223
|
+
- Do not store request-local data, credentials, or tenant state in module-level
|
|
224
|
+
variables. Read identity from Resource context and pass context through when
|
|
225
|
+
calling other resources.
|
|
226
|
+
- Pick TTLs that tolerate replication delay. Very short TTLs can turn a cache
|
|
227
|
+
into repeated upstream traffic across nodes.
|
|
228
|
+
- After invalidation, verify from the route or node that matters for the caller.
|
|
229
|
+
Cross-node visibility may lag until replication catches up.
|
|
230
|
+
- Use Harper storage reclamation settings for disk-pressure eviction tuning, not
|
|
231
|
+
as a substitute for application freshness rules.
|
|
232
|
+
|
|
233
|
+
## Local verification recipe
|
|
234
|
+
|
|
235
|
+
Prove both cache fill and cache hit behavior against a running Harper app:
|
|
236
|
+
|
|
237
|
+
1. Add a temporary upstream counter, fixture server log, or test-only header that
|
|
238
|
+
shows how many times the source Resource fetched the upstream id.
|
|
239
|
+
2. Build and boot the app (`bun run build`, then the project Harper dev command).
|
|
240
|
+
3. Request the same id twice:
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
curl -sS http://localhost:9926/weather/nyc | jq .
|
|
244
|
+
curl -sS http://localhost:9926/weather/nyc | jq .
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
4. Confirm the upstream was called once, the second response came from the table,
|
|
248
|
+
and the record contains `fetchedAt` or equivalent freshness evidence.
|
|
249
|
+
5. Invalidate or delete the id, request it again, and confirm the upstream count
|
|
250
|
+
increments:
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
curl -sS -X DELETE http://localhost:9926/weather/nyc
|
|
254
|
+
curl -sS http://localhost:9926/weather/nyc | jq .
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
6. If TTL behavior matters, lower `expiration` in a local-only test fixture,
|
|
258
|
+
wait past the TTL, and verify either blocking refresh or stale-while-revalidate
|
|
259
|
+
behavior matches the Resource implementation.
|
|
260
|
+
|
|
261
|
+
## Sources
|
|
262
|
+
|
|
263
|
+
- [Harper v4 Resource API](https://docs.harperdb.io/reference/v4/resources/resource-api)
|
|
264
|
+
- [Harper v5 Resources overview](https://docs.harperdb.io/reference/v5/resources/overview)
|
|
265
|
+
- [Harper storage tuning](https://docs.harperdb.io/reference/v5/database/storage-tuning)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: harper-component-model
|
|
3
|
+
description: "reasoning about how a Harper…"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Harper Component Model
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Harper (formerly HarperDB; the product and company now at harper.fast) is an
|
|
11
|
+
open-source Node.js platform that fuses **database, cache, application logic, and
|
|
12
|
+
messaging into a single in-memory process**. **Fabric** is Harper's distributed
|
|
13
|
+
deploy network: you develop locally, then deploy the same component to Fabric.
|
|
14
|
+
|
|
15
|
+
Everything you build is a **component**. Understanding the component hierarchy is
|
|
16
|
+
the prerequisite for every other Harper decision — config, resources, schema, and
|
|
17
|
+
deploy all hang off it.
|
|
18
|
+
|
|
19
|
+
## The three tiers
|
|
20
|
+
|
|
21
|
+
Harper organizes functionality into three tiers, top to bottom:
|
|
22
|
+
|
|
23
|
+
1. **Applications** — the user-facing product. An application *is* a type of
|
|
24
|
+
component. It implements business logic (REST/GraphQL endpoints, web UI,
|
|
25
|
+
real-time) by depending on extensions/plugins. This is what this project is.
|
|
26
|
+
2. **Plugins** (v5) / **Extensions** (deprecated) — the building blocks an
|
|
27
|
+
application depends on. A plugin exports a single `handleApplication(scope)`
|
|
28
|
+
method and always runs on worker threads. The deprecated Extension API used
|
|
29
|
+
`start`, `handleFile`, `handleDirectory`, and `setupDirectory` instead.
|
|
30
|
+
`handleApplication()` cannot coexist with Extension API methods — defining
|
|
31
|
+
both throws. Prefer the Plugin API for any custom building block.
|
|
32
|
+
3. **Core services** — the high-performance database, networking middleware, and
|
|
33
|
+
the component manager. You configure these; you don't reimplement them.
|
|
34
|
+
|
|
35
|
+
> An *application* is the component you ship. *Extensions/plugins* are the
|
|
36
|
+
> capabilities it consumes. Built-in extensions (`graphqlSchema`, `jsResource`,
|
|
37
|
+
> `rest`, `static`, …) are provided by core; you only *enable* them in
|
|
38
|
+
> `config.yaml`. See [[harper-config-yaml]].
|
|
39
|
+
|
|
40
|
+
## Built-in extensions an application typically uses
|
|
41
|
+
|
|
42
|
+
These ship with Harper and are enabled (not installed) via `config.yaml`:
|
|
43
|
+
|
|
44
|
+
- `graphqlSchema` — define database tables/types from GraphQL schema files. See [[harper-schema-graphql]].
|
|
45
|
+
- `jsResource` — load custom JavaScript resources (`resources.js`). See [[harper-resources]].
|
|
46
|
+
- `rest` — auto-generate REST endpoints for exported resources/tables.
|
|
47
|
+
- `static` — serve static files (the `web/**` directory) over HTTP.
|
|
48
|
+
- `roles` — role-based access control from `roles.yaml`.
|
|
49
|
+
- `loadEnv` — load environment variables from `.env`.
|
|
50
|
+
- `dataLoader` — seed Harper tables from JSON/YAML.
|
|
51
|
+
- `fastifyRoutes` — custom Fastify route handlers.
|
|
52
|
+
|
|
53
|
+
## Where things live in this project
|
|
54
|
+
|
|
55
|
+
This project wraps Harper's native model with a fixed layout under `harper-app/`:
|
|
56
|
+
|
|
57
|
+
| Path | Role | Source or generated |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| `harper-app/config.yaml` | Component config — which extensions are active | **Source** |
|
|
60
|
+
| `harper-app/schema.graphql` | Table/type definitions | **Source** |
|
|
61
|
+
| `src/**` (TypeScript) | Resources, browser modules, shared libs, scripts | **Source** |
|
|
62
|
+
| `harper-app/resources.js` | Loaded by `jsResource` | **Generated** — never edit; build from TS |
|
|
63
|
+
| `harper-app/web/**` | Served by `static` | **Generated** — never edit; build from TS |
|
|
64
|
+
|
|
65
|
+
The TypeScript under `src/` is the source of truth. `resources.js` and `web/**`
|
|
66
|
+
are deploy artifacts produced by `bun run build`. Never hand-edit them — change
|
|
67
|
+
the matching TypeScript and rebuild. See [[harper-build-and-deploy]].
|
|
68
|
+
|
|
69
|
+
## Decision guide
|
|
70
|
+
|
|
71
|
+
- **Adding a backend behavior?** It's almost always a *resource* (custom logic) or
|
|
72
|
+
a *schema* change (new table/field), enabled through `config.yaml`. Don't ship a
|
|
73
|
+
client-side workaround for missing backend behavior — make the Harper change.
|
|
74
|
+
- **Adding a reusable building block / npm-publishable capability?** That's a
|
|
75
|
+
*plugin* (`pluginModule`), not application code.
|
|
76
|
+
- **Adding static UI?** It belongs in `web/**` (generated from `src/` UI code), served
|
|
77
|
+
by the `static` extension.
|
|
78
|
+
- **Not sure if it deploys?** A deployable Harper app must keep `config.yaml`,
|
|
79
|
+
`schema.graphql`, `resources.js`, and `web/**` at the component root that Fabric
|
|
80
|
+
packages. If your change touches that surface, build before packaging.
|
|
81
|
+
|
|
82
|
+
## Sources
|
|
83
|
+
|
|
84
|
+
- [Components overview](https://docs.harperdb.io/reference/v5/components/overview)
|
|
85
|
+
- [Plugin API](https://docs.harperdb.io/reference/v5/components/plugin-api)
|
|
86
|
+
- [Applications](https://docs.harperdb.io/docs/developers/applications)
|
|
87
|
+
- [Harper platform](https://www.harper.fast/)
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: harper-config-yaml
|
|
3
|
+
description: "creating or editing a Harper…"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Harper config.yaml
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
A Harper component is configured by a single `config.yaml` at the component root
|
|
11
|
+
(`harper-app/config.yaml` in this project). It declares **which extensions are
|
|
12
|
+
active** and which files each extension reads. Extensions are *enabled* here, not
|
|
13
|
+
installed — the built-ins ship with Harper.
|
|
14
|
+
|
|
15
|
+
The structure is a map of extension name to its options:
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
extensionName:
|
|
19
|
+
option-1: value
|
|
20
|
+
option-2: value
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## ⚠️ The no-merge footgun
|
|
24
|
+
|
|
25
|
+
If a component has **no** `config.yaml`, Harper applies this default automatically:
|
|
26
|
+
|
|
27
|
+
```yaml
|
|
28
|
+
rest: true
|
|
29
|
+
graphqlSchema:
|
|
30
|
+
files: '*.graphql'
|
|
31
|
+
roles:
|
|
32
|
+
files: 'roles.yaml'
|
|
33
|
+
jsResource:
|
|
34
|
+
files: 'resources.js'
|
|
35
|
+
fastifyRoutes:
|
|
36
|
+
files: 'routes/*.js'
|
|
37
|
+
urlPath: '.'
|
|
38
|
+
static:
|
|
39
|
+
files: 'web/**'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The moment you add a **custom `config.yaml`, it replaces this default entirely —
|
|
43
|
+
Harper does not merge your file with the defaults.** If you write a `config.yaml`
|
|
44
|
+
that only enables `static`, you have silently turned off `rest`, `graphqlSchema`,
|
|
45
|
+
`jsResource`, and `roles`. This is the most common Harper config mistake.
|
|
46
|
+
|
|
47
|
+
**Rule:** when you add or edit `config.yaml`, re-declare every extension the app
|
|
48
|
+
actually needs — start from the default block above and add to it. Do not assume
|
|
49
|
+
unmentioned extensions stay on.
|
|
50
|
+
|
|
51
|
+
## Built-in extensions
|
|
52
|
+
|
|
53
|
+
| Key | Purpose | Common options |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| `rest` | Auto REST endpoints and resource WebSocket subscriptions | `true`, or an object with options such as `webSocket` |
|
|
56
|
+
| `graphqlSchema` | Define tables/types from GraphQL files | `files: '*.graphql'` — see [[harper-schema-graphql]] |
|
|
57
|
+
| `jsResource` | Load custom JS resources | `files: 'resources.js'` — see [[harper-resources]] |
|
|
58
|
+
| `static` | Serve static files over HTTP | `files: 'web/**'`, `urlPath` |
|
|
59
|
+
| `roles` | Role-based access control | `files: 'roles.yaml'` |
|
|
60
|
+
| `loadEnv` | Load env vars from `.env` | `files` |
|
|
61
|
+
| `dataLoader` | Seed tables from JSON/YAML | `files` |
|
|
62
|
+
| `fastifyRoutes` | Custom Fastify routes | `files: 'routes/*.js'`, `urlPath` |
|
|
63
|
+
|
|
64
|
+
For real-time work, component `config.yaml` keeps `rest`, `graphqlSchema`, and
|
|
65
|
+
`jsResource` enabled so exported resources can be addressed by HTTP/WebSocket and
|
|
66
|
+
MQTT topic paths. Broker ports and MQTT authentication live in the root
|
|
67
|
+
`harper-config.yaml`, not the component file. See [[harper-realtime]].
|
|
68
|
+
|
|
69
|
+
## `dataLoader`: seed data
|
|
70
|
+
|
|
71
|
+
Use `dataLoader` for versioned seed/reference records that should exist whenever
|
|
72
|
+
the component is deployed. Define table shape first with `graphqlSchema`, then
|
|
73
|
+
point `dataLoader.files` at one or more JSON/YAML files:
|
|
74
|
+
|
|
75
|
+
```yaml
|
|
76
|
+
graphqlSchema:
|
|
77
|
+
files: 'schema.graphql'
|
|
78
|
+
dataLoader:
|
|
79
|
+
files:
|
|
80
|
+
- 'data/roles.yaml'
|
|
81
|
+
- 'data/reference/*.json'
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Each data file targets exactly one table and has `database`, `table`, and
|
|
85
|
+
`records` keys:
|
|
86
|
+
|
|
87
|
+
```yaml
|
|
88
|
+
database: app
|
|
89
|
+
table: Role
|
|
90
|
+
records:
|
|
91
|
+
- id: admin
|
|
92
|
+
name: Administrator
|
|
93
|
+
permissions:
|
|
94
|
+
- users:read
|
|
95
|
+
- users:write
|
|
96
|
+
- id: viewer
|
|
97
|
+
name: Viewer
|
|
98
|
+
permissions:
|
|
99
|
+
- users:read
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Harper runs the loader on full system starts and component deployments. It is
|
|
103
|
+
safe to re-run when files are idempotent: new records are inserted, unchanged
|
|
104
|
+
records are skipped, and records are updated from the file only when the tracked
|
|
105
|
+
file content changed. User-created records and user edits made after an initial
|
|
106
|
+
load are preserved; changed data-loaded records are patched instead of blindly
|
|
107
|
+
replaced.
|
|
108
|
+
|
|
109
|
+
Choose `dataLoader` for small, source-controlled reference/configuration data
|
|
110
|
+
that should ship with the component. Use a REST/Operations API script or job for
|
|
111
|
+
large imports, environment-specific backfills, or one-off migrations where retry
|
|
112
|
+
scope and operator approval matter.
|
|
113
|
+
|
|
114
|
+
Verify locally:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
harper dev harper-app
|
|
118
|
+
curl -s http://localhost:9926/app/Role/admin
|
|
119
|
+
harper dev harper-app # restart/redeploy and confirm the seed did not duplicate
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## `fastifyRoutes`: custom HTTP routes
|
|
123
|
+
|
|
124
|
+
Prefer `jsResource` plus `rest` for normal CRUD/action APIs. Use `fastifyRoutes`
|
|
125
|
+
only when the route shape does not fit the Resource model: webhooks, custom
|
|
126
|
+
serialization, unusual path matching, or a compatibility endpoint.
|
|
127
|
+
|
|
128
|
+
```yaml
|
|
129
|
+
rest: true
|
|
130
|
+
graphqlSchema:
|
|
131
|
+
files: 'schema.graphql'
|
|
132
|
+
jsResource:
|
|
133
|
+
files: 'resources.js'
|
|
134
|
+
fastifyRoutes:
|
|
135
|
+
files: 'routes/*.js'
|
|
136
|
+
urlPath: 'hooks'
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Route modules default-export an async function that receives the Fastify server
|
|
140
|
+
and Harper helpers:
|
|
141
|
+
|
|
142
|
+
```js
|
|
143
|
+
export default async (server, { hdbCore, logger }) => {
|
|
144
|
+
server.route({
|
|
145
|
+
method: 'POST',
|
|
146
|
+
url: '/payment/:provider',
|
|
147
|
+
preValidation: hdbCore.preValidation,
|
|
148
|
+
handler: async (request, reply) => {
|
|
149
|
+
logger.debug(`payment webhook ${request.params.provider}`);
|
|
150
|
+
request.body = {
|
|
151
|
+
operation: 'insert',
|
|
152
|
+
schema: 'app',
|
|
153
|
+
table: 'WebhookEvent',
|
|
154
|
+
records: [
|
|
155
|
+
{
|
|
156
|
+
id: request.headers['x-event-id'],
|
|
157
|
+
provider: request.params.provider,
|
|
158
|
+
payload: request.body,
|
|
159
|
+
},
|
|
160
|
+
],
|
|
161
|
+
};
|
|
162
|
+
const result = await hdbCore.request(request);
|
|
163
|
+
return { ok: true, result };
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Use Fastify's `request.params`, `request.query`, `request.body`, and `request.headers`
|
|
170
|
+
for route inputs. Keep auth explicit: `hdbCore.request` should be paired with
|
|
171
|
+
`hdbCore.preValidation` so Harper authenticates the request. Avoid
|
|
172
|
+
`requestWithoutAuthentication` unless the route has its own signature/JWT check
|
|
173
|
+
and all user-provided values are bound or escaped; never build SQL strings by
|
|
174
|
+
interpolating params/body values.
|
|
175
|
+
|
|
176
|
+
Verify locally:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
harper dev harper-app
|
|
180
|
+
curl -i -X POST http://localhost:9926/app/hooks/payment/stripe \
|
|
181
|
+
-H 'Authorization: Basic ...' \
|
|
182
|
+
-H 'Content-Type: application/json' \
|
|
183
|
+
-H 'x-event-id: evt_123' \
|
|
184
|
+
--data '{"status":"paid"}'
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## `static`: serve web assets and SPAs
|
|
188
|
+
|
|
189
|
+
Use `static` to serve generated browser output or other immutable assets from
|
|
190
|
+
the component. In Lisa Harper Fabric projects, `harper-app/web/**` is generated
|
|
191
|
+
by the project build; edit the source UI under `src/`, not the deployed files.
|
|
192
|
+
|
|
193
|
+
```yaml
|
|
194
|
+
static:
|
|
195
|
+
files: 'web/**'
|
|
196
|
+
urlPath: '.'
|
|
197
|
+
index: true
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
`files` selects what is served. `urlPath` mounts those files under a URL prefix:
|
|
201
|
+
`urlPath: 'app'` makes `web/index.html` available at `/app/index.html`; the
|
|
202
|
+
default application path still includes the Harper project/component prefix. Use
|
|
203
|
+
`index: true` to serve `index.html` for directory requests, and `extensions:
|
|
204
|
+
['html']` when clean URLs should resolve to `.html` files.
|
|
205
|
+
|
|
206
|
+
For client-side-routed SPAs, return the app shell for unmatched asset paths:
|
|
207
|
+
|
|
208
|
+
```yaml
|
|
209
|
+
static:
|
|
210
|
+
files: 'web/**'
|
|
211
|
+
urlPath: '.'
|
|
212
|
+
index: true
|
|
213
|
+
fallthrough: false
|
|
214
|
+
notFound:
|
|
215
|
+
file: 'web/index.html'
|
|
216
|
+
statusCode: 200
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
That fallback is for browser routes such as `/reports/weekly`; it should not hide
|
|
220
|
+
missing API endpoints or broken asset names. Keep API routes under a clear
|
|
221
|
+
prefix, and check that hashed JS/CSS assets still return their actual files.
|
|
222
|
+
|
|
223
|
+
Harper's documented `static` config controls path matching and not-found
|
|
224
|
+
behavior, not custom cache policy. Treat MIME type and cache headers as runtime
|
|
225
|
+
behavior to verify with `curl -I`; if the app needs precise cache headers,
|
|
226
|
+
front it with an edge/proxy policy or a custom route designed for that asset
|
|
227
|
+
surface.
|
|
228
|
+
|
|
229
|
+
Verify locally:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
harper dev harper-app
|
|
233
|
+
curl -I http://localhost:9926/app/
|
|
234
|
+
curl -I http://localhost:9926/app/assets/index.js
|
|
235
|
+
curl -I http://localhost:9926/app/client-side-route
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## External components and custom plugins
|
|
239
|
+
|
|
240
|
+
A component you depend on from npm needs a `package:` directive matching a
|
|
241
|
+
`package.json` dependency:
|
|
242
|
+
|
|
243
|
+
```yaml
|
|
244
|
+
'@harperdb/nextjs':
|
|
245
|
+
package: '@harperdb/nextjs'
|
|
246
|
+
files: './'
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
A custom plugin you author is wired with `pluginModule` (point at the built JS, not
|
|
250
|
+
TypeScript source):
|
|
251
|
+
|
|
252
|
+
```yaml
|
|
253
|
+
pluginModule: ./dist/index.js
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
The deprecated Extension API used `extensionModule` instead. Prefer `pluginModule`.
|
|
257
|
+
See [[harper-component-model]] for the plugin-vs-extension distinction.
|
|
258
|
+
|
|
259
|
+
## Project conventions
|
|
260
|
+
|
|
261
|
+
- `config.yaml` is **source** and lives at `harper-app/config.yaml`. It is part of
|
|
262
|
+
the deployable surface Fabric packages — keep it at the component root.
|
|
263
|
+
- The files `config.yaml` points to (`resources.js`, `web/**`) are **generated** by
|
|
264
|
+
`bun run build` from TypeScript under `src/`. Editing `config.yaml` to point at a
|
|
265
|
+
new file means the build must produce that file. See [[harper-build-and-deploy]].
|
|
266
|
+
- A `config.yaml` change is a deploy-shape change: update the matching project doc
|
|
267
|
+
(the Fabric runbook) in the same change, and re-run the smoke command.
|
|
268
|
+
- Keep secrets out of `config.yaml`. Use `loadEnv` / environment variables and
|
|
269
|
+
document *where* secrets live without recording their values.
|
|
270
|
+
|
|
271
|
+
## Verification
|
|
272
|
+
|
|
273
|
+
After editing `config.yaml`, confirm the app still boots and the expected surface
|
|
274
|
+
is live: run `harper dev harper-app` (or the project's run command) and check that
|
|
275
|
+
the REST/GraphQL/static endpoints you rely on respond. A config that silently
|
|
276
|
+
dropped an extension often fails only at runtime, not at build time.
|
|
277
|
+
|
|
278
|
+
## Sources
|
|
279
|
+
|
|
280
|
+
- [Components overview](https://docs.harperdb.io/reference/v5/components/overview)
|
|
281
|
+
- [Data Loader](https://docs.harperdb.io/reference/v5/database/data-loader)
|
|
282
|
+
- [Fastify Routes](https://docs.harperdb.io/reference/v5/fastify-routes/overview)
|
|
283
|
+
- [Static Files](https://docs.harperdb.io/reference/v5/static-files/overview)
|