@codyswann/lisa 2.19.0 → 2.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/.agents/plugins/marketplace.json +12 -0
  2. package/dist/codex/hooks-installer.js +23 -11
  3. package/dist/codex/hooks-installer.js.map +1 -1
  4. package/dist/codex/plugin-marketplace-installer.d.ts.map +1 -1
  5. package/dist/codex/plugin-marketplace-installer.js +2 -0
  6. package/dist/codex/plugin-marketplace-installer.js.map +1 -1
  7. package/dist/codex/scripts/block-migration-edits.sh +78 -0
  8. package/dist/codex/scripts/block-no-verify.sh +26 -0
  9. package/dist/codex/scripts/format-on-edit.sh +35 -0
  10. package/dist/codex/scripts/inject-rules.sh +31 -0
  11. package/dist/codex/scripts/install-pkgs.sh +26 -0
  12. package/dist/codex/scripts/lint-on-edit.sh +32 -0
  13. package/dist/codex/scripts/notify-ntfy.sh +18 -0
  14. package/dist/codex/scripts/rubocop-on-edit.sh +32 -0
  15. package/dist/codex/scripts/setup-jira-cli.sh +24 -0
  16. package/dist/codex/scripts/sg-scan-on-edit.sh +34 -0
  17. package/dist/configs/eslint/harper-fabric.d.ts +28 -0
  18. package/dist/configs/eslint/harper-fabric.d.ts.map +1 -0
  19. package/dist/configs/eslint/harper-fabric.js +59 -0
  20. package/dist/configs/eslint/harper-fabric.js.map +1 -0
  21. package/dist/configs/eslint/index.d.ts +2 -0
  22. package/dist/configs/eslint/index.d.ts.map +1 -1
  23. package/dist/configs/eslint/index.js +2 -0
  24. package/dist/configs/eslint/index.js.map +1 -1
  25. package/dist/configs/vitest/harper-fabric.d.ts +26 -0
  26. package/dist/configs/vitest/harper-fabric.d.ts.map +1 -0
  27. package/dist/configs/vitest/harper-fabric.js +30 -0
  28. package/dist/configs/vitest/harper-fabric.js.map +1 -0
  29. package/dist/configs/vitest/index.d.ts +2 -1
  30. package/dist/configs/vitest/index.d.ts.map +1 -1
  31. package/dist/configs/vitest/index.js +2 -1
  32. package/dist/configs/vitest/index.js.map +1 -1
  33. package/dist/core/config.d.ts +1 -1
  34. package/dist/core/config.d.ts.map +1 -1
  35. package/dist/core/config.js +2 -0
  36. package/dist/core/config.js.map +1 -1
  37. package/dist/core/lisa.d.ts.map +1 -1
  38. package/dist/core/lisa.js +10 -0
  39. package/dist/core/lisa.js.map +1 -1
  40. package/dist/detection/detectors/harper-fabric.d.ts +18 -0
  41. package/dist/detection/detectors/harper-fabric.d.ts.map +1 -0
  42. package/dist/detection/detectors/harper-fabric.js +56 -0
  43. package/dist/detection/detectors/harper-fabric.js.map +1 -0
  44. package/dist/detection/index.d.ts.map +1 -1
  45. package/dist/detection/index.js +2 -0
  46. package/dist/detection/index.js.map +1 -1
  47. package/dist/strategies/copy-contents.d.ts +12 -2
  48. package/dist/strategies/copy-contents.d.ts.map +1 -1
  49. package/dist/strategies/copy-contents.js +28 -7
  50. package/dist/strategies/copy-contents.js.map +1 -1
  51. package/dist/strategies/package-lisa.d.ts +11 -1
  52. package/dist/strategies/package-lisa.d.ts.map +1 -1
  53. package/dist/strategies/package-lisa.js +30 -1
  54. package/dist/strategies/package-lisa.js.map +1 -1
  55. package/harper-fabric/copy-overwrite/.github/workflows/ci.yml +23 -0
  56. package/harper-fabric/copy-overwrite/eslint.config.ts +41 -0
  57. package/harper-fabric/copy-overwrite/knip.json +24 -0
  58. package/harper-fabric/copy-overwrite/tsconfig.eslint.json +25 -0
  59. package/harper-fabric/copy-overwrite/tsconfig.json +7 -0
  60. package/harper-fabric/copy-overwrite/vitest.config.ts +30 -0
  61. package/harper-fabric/merge/.claude/settings.json +34 -0
  62. package/harper-fabric/merge/.oxlintrc.json +16 -0
  63. package/harper-fabric/package-lisa/package.lisa.json +94 -0
  64. package/oxlint/harper-fabric.json +11 -0
  65. package/package.json +9 -4
  66. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  68. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  70. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  72. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +35 -0
  73. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +32 -0
  74. package/plugins/lisa-harper-fabric/hooks/inject-rules.sh +16 -0
  75. package/plugins/lisa-harper-fabric/rules/harper-fabric.md +51 -0
  76. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  78. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  80. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  82. package/plugins/src/harper-fabric/.claude-plugin/plugin.json +15 -0
  83. package/plugins/src/harper-fabric/hooks/inject-rules.sh +16 -0
  84. package/plugins/src/harper-fabric/rules/harper-fabric.md +51 -0
  85. package/rails/copy-overwrite/lefthook.yml +5 -1
  86. package/scripts/build-plugins.sh +1 -1
  87. package/scripts/copy-codex-scripts.mjs +28 -0
  88. package/scripts/generate-codex-plugin-artifacts.mjs +15 -0
  89. package/scripts/install-claude-plugins.sh +5 -5
  90. package/tsconfig/harper-fabric.json +20 -0
@@ -0,0 +1,51 @@
1
+ # Harper/Fabric Project Rules
2
+
3
+ These rules apply to Harper/Fabric component apps managed by Lisa.
4
+
5
+ ## Build The Real Thing
6
+
7
+ - Do not ship client-side workarounds for missing backend behavior. If a change needs a Harper resource, schema update, seed path, or deploy script change, make that change.
8
+ - Do not silently downgrade a feature to a stub, mock, or partial path. Only use a stop-gap when the user explicitly asks for one.
9
+ - Treat deployed Fabric behavior as part of the product. A change is unfinished until the local build and the relevant deployed or smoke path agree.
10
+
11
+ ## TypeScript Is Source
12
+
13
+ - TypeScript under `src/` is the source of truth for Harper resources, browser modules, shared libraries, and operational scripts.
14
+ - `harper-app/config.yaml`, `harper-app/schema.graphql`, HTML, CSS, docs, and research fixtures are source assets.
15
+ - `harper-app/resources.js` and `harper-app/web/**/*.js` are generated deploy artifacts. Never edit them directly; change the matching TypeScript and run `bun run build`.
16
+ - Deployment, bootstrap, smoke, seed, verify, preview, token, crawl, ingest, and extraction commands must run from compiled JavaScript or generated Harper assets, not stale checked-in JavaScript.
17
+
18
+ ## Harper/Fabric Deploy Surface
19
+
20
+ - A deployable Harper app must keep `config.yaml`, `schema.graphql`, `resources.js`, and `web/**` at the component root that Fabric packages.
21
+ - Build before symlinking, packaging, or deploying `harper-app/`.
22
+ - Keep runtime secrets out of tracked files. Prefer environment variables or OS keychain helpers; document secret locations without recording secret values.
23
+ - When discovering a Harper/Fabric limitation or workaround, document the symptom, root cause, fix, and tempting broken alternatives in the project runbook.
24
+
25
+ ## Documentation Sync
26
+
27
+ - Project docs are operational contracts. When commands, schema, deploy shape, data model, seeded-data summary, crawler behavior, credential handling, or UI components change, update the matching project doc in the same change.
28
+ - Harper schema changes must update the conceptual schema docs and any verify paths that assert joins or row counts.
29
+ - Deploy topology, credential rotation, generated-artifact layout, and Fabric workarounds belong in the Fabric runbook.
30
+ - UI component, token, variant, or design-system changes must update the design-system catalog.
31
+
32
+ ## UI Work
33
+
34
+ - Browser UI must be composed from the project design system. Search the existing design-system catalog and components before adding markup.
35
+ - Add or extend the design-system component first, then consume it from pages.
36
+ - Pages should import UI components through the design-system barrel, not deep component paths.
37
+ - Do not introduce raw colors or ad hoc spacing in UI styles. Use design tokens and update the token docs when adding tokens.
38
+ - Every UI change needs Playwright verification that checks DOM behavior and captures screenshots. Type checks and unit tests are not enough for visual changes.
39
+
40
+ ## Immutable Code
41
+
42
+ - Prefer immutable data flow: `readonly` types, pure transformations, object/array copies, and explicit returned values.
43
+ - Do not mutate parameters, imported singletons, fixture objects, records, arrays, DOM-derived state, or config objects unless an API requires mutation and the exception is documented locally.
44
+ - Avoid `let`; use `const` and small pure helper functions instead.
45
+ - Avoid `any`, broad casts, and `ts-ignore`. If an external API forces an escape hatch, isolate it behind a typed adapter.
46
+
47
+ ## Verification
48
+
49
+ - Run `bun run build`, `bun run typecheck`, and the smallest relevant test command before reporting completion.
50
+ - For deploy-affecting changes, also run the project smoke command against the local or deployed Harper endpoint.
51
+ - If a verification command cannot run, report the exact command and blocker.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.19.0",
3
+ "version": "2.20.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.19.0",
3
+ "version": "2.20.0",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.19.0",
3
+ "version": "2.20.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.19.0",
3
+ "version": "2.20.0",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.19.0",
3
+ "version": "2.20.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.19.0",
3
+ "version": "2.20.0",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "lisa-harper-fabric",
3
+ "version": "1.0.0",
4
+ "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
+ "author": { "name": "Cody Swann" },
6
+ "dependencies": ["lisa-typescript"],
7
+ "hooks": {
8
+ "SessionStart": [
9
+ { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/inject-rules.sh" }] }
10
+ ],
11
+ "SubagentStart": [
12
+ { "matcher": "", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/inject-rules.sh" }] }
13
+ ]
14
+ }
15
+ }
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env bash
2
+ # Reads all .md files from the plugin's rules/ directory and injects them
3
+ # into Claude context at session/subagent start.
4
+ set -euo pipefail
5
+
6
+ ROOT="${CLAUDE_PLUGIN_ROOT:-${CODEX_PLUGIN_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}}"
7
+ RULES_DIR="$ROOT/rules"
8
+
9
+ [ -d "$RULES_DIR" ] || exit 0
10
+
11
+ for rule in "$RULES_DIR"/*.md; do
12
+ [ -f "$rule" ] || continue
13
+ printf '\n<lisa-harper-fabric-rule path="%s">\n' "$rule"
14
+ cat "$rule"
15
+ printf '\n</lisa-harper-fabric-rule>\n'
16
+ done
@@ -0,0 +1,51 @@
1
+ # Harper/Fabric Project Rules
2
+
3
+ These rules apply to Harper/Fabric component apps managed by Lisa.
4
+
5
+ ## Build The Real Thing
6
+
7
+ - Do not ship client-side workarounds for missing backend behavior. If a change needs a Harper resource, schema update, seed path, or deploy script change, make that change.
8
+ - Do not silently downgrade a feature to a stub, mock, or partial path. Only use a stop-gap when the user explicitly asks for one.
9
+ - Treat deployed Fabric behavior as part of the product. A change is unfinished until the local build and the relevant deployed or smoke path agree.
10
+
11
+ ## TypeScript Is Source
12
+
13
+ - TypeScript under `src/` is the source of truth for Harper resources, browser modules, shared libraries, and operational scripts.
14
+ - `harper-app/config.yaml`, `harper-app/schema.graphql`, HTML, CSS, docs, and research fixtures are source assets.
15
+ - `harper-app/resources.js` and `harper-app/web/**/*.js` are generated deploy artifacts. Never edit them directly; change the matching TypeScript and run `bun run build`.
16
+ - Deployment, bootstrap, smoke, seed, verify, preview, token, crawl, ingest, and extraction commands must run from compiled JavaScript or generated Harper assets, not stale checked-in JavaScript.
17
+
18
+ ## Harper/Fabric Deploy Surface
19
+
20
+ - A deployable Harper app must keep `config.yaml`, `schema.graphql`, `resources.js`, and `web/**` at the component root that Fabric packages.
21
+ - Build before symlinking, packaging, or deploying `harper-app/`.
22
+ - Keep runtime secrets out of tracked files. Prefer environment variables or OS keychain helpers; document secret locations without recording secret values.
23
+ - When discovering a Harper/Fabric limitation or workaround, document the symptom, root cause, fix, and tempting broken alternatives in the project runbook.
24
+
25
+ ## Documentation Sync
26
+
27
+ - Project docs are operational contracts. When commands, schema, deploy shape, data model, seeded-data summary, crawler behavior, credential handling, or UI components change, update the matching project doc in the same change.
28
+ - Harper schema changes must update the conceptual schema docs and any verify paths that assert joins or row counts.
29
+ - Deploy topology, credential rotation, generated-artifact layout, and Fabric workarounds belong in the Fabric runbook.
30
+ - UI component, token, variant, or design-system changes must update the design-system catalog.
31
+
32
+ ## UI Work
33
+
34
+ - Browser UI must be composed from the project design system. Search the existing design-system catalog and components before adding markup.
35
+ - Add or extend the design-system component first, then consume it from pages.
36
+ - Pages should import UI components through the design-system barrel, not deep component paths.
37
+ - Do not introduce raw colors or ad hoc spacing in UI styles. Use design tokens and update the token docs when adding tokens.
38
+ - Every UI change needs Playwright verification that checks DOM behavior and captures screenshots. Type checks and unit tests are not enough for visual changes.
39
+
40
+ ## Immutable Code
41
+
42
+ - Prefer immutable data flow: `readonly` types, pure transformations, object/array copies, and explicit returned values.
43
+ - Do not mutate parameters, imported singletons, fixture objects, records, arrays, DOM-derived state, or config objects unless an API requires mutation and the exception is documented locally.
44
+ - Avoid `let`; use `const` and small pure helper functions instead.
45
+ - Avoid `any`, broad casts, and `ts-ignore`. If an external API forces an escape hatch, isolate it behind a typed adapter.
46
+
47
+ ## Verification
48
+
49
+ - Run `bun run build`, `bun run typecheck`, and the smallest relevant test command before reporting completion.
50
+ - For deploy-affecting changes, also run the project smoke command against the local or deployed Harper endpoint.
51
+ - If a verification command cannot run, report the exact command and blocker.
@@ -5,7 +5,11 @@ pre-commit:
5
5
  glob: '*.rb'
6
6
  run: bundle exec rubocop --force-exclusion {staged_files}
7
7
  bundler-audit:
8
- run: bundle exec bundler-audit check --update
8
+ # Unset GIT_DIR/GIT_WORK_TREE so `--update`'s internal git pull of the
9
+ # ruby-advisory-db (~/.local/share/ruby-advisory-db) does not inherit the
10
+ # repo's git context. Without this, the command fails when the hook runs
11
+ # inside a git worktree (the inherited GIT_DIR points at the wrong repo).
12
+ run: env -u GIT_DIR -u GIT_WORK_TREE bundle exec bundler-audit check --update
9
13
 
10
14
  commit-msg:
11
15
  commands:
@@ -34,7 +34,7 @@ node "$ROOT_DIR/scripts/generate-codex-plugin-artifacts.mjs" "$BASE_OUT" "$VERSI
34
34
  echo "Built plugins/lisa (v$VERSION)"
35
35
 
36
36
  # Build stack-specific plugins (NO base copy)
37
- STACKS=(typescript expo nestjs cdk rails)
37
+ STACKS=(typescript expo nestjs cdk harper-fabric rails)
38
38
  for stack in "${STACKS[@]}"; do
39
39
  STACK_SRC="$SRC_DIR/$stack"
40
40
  if [ ! -d "$STACK_SRC" ]; then
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Copy shell hook scripts next to the compiled Codex hook installer.
4
+ *
5
+ * TypeScript compilation emits `dist/codex/hooks-installer.js`, whose runtime
6
+ * resolver looks for scripts in `dist/codex/scripts/`. The source scripts are
7
+ * plain shell files, so tsc does not copy them.
8
+ */
9
+ import fs from "node:fs";
10
+ import path from "node:path";
11
+
12
+ const repoRoot = path.resolve(import.meta.dirname, "..");
13
+ const sourceDir = path.join(repoRoot, "src", "codex", "scripts");
14
+ const destDir = path.join(repoRoot, "dist", "codex", "scripts");
15
+
16
+ fs.rmSync(destDir, { recursive: true, force: true });
17
+ fs.mkdirSync(destDir, { recursive: true });
18
+
19
+ for (const entry of fs.readdirSync(sourceDir, { withFileTypes: true })) {
20
+ if (!entry.isFile()) {
21
+ continue;
22
+ }
23
+
24
+ const sourcePath = path.join(sourceDir, entry.name);
25
+ const destPath = path.join(destDir, entry.name);
26
+ fs.copyFileSync(sourcePath, destPath);
27
+ fs.chmodSync(destPath, 0o755);
28
+ }
@@ -267,6 +267,21 @@ function metadataFor(pluginName) {
267
267
  keywords: ["aws", "cdk", "infrastructure"],
268
268
  defaultPrompt: ["Review this CDK change"],
269
269
  },
270
+ "lisa-harper-fabric": {
271
+ displayName: "Lisa Harper/Fabric",
272
+ description:
273
+ "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
274
+ shortDescription: "Harper/Fabric workflow guidance",
275
+ longDescription:
276
+ "Lisa rules for Harper/Fabric deploy surfaces, generated JavaScript artifacts, operational docs, Playwright UI verification, and immutable TypeScript.",
277
+ category: "Coding",
278
+ capabilities: ["Interactive", "Write"],
279
+ keywords: ["harper", "fabric", "typescript", "playwright"],
280
+ defaultPrompt: [
281
+ "Review this Harper/Fabric change",
282
+ "Verify this Harper/Fabric deployment path",
283
+ ],
284
+ },
270
285
  "lisa-rails": {
271
286
  displayName: "Lisa Rails",
272
287
  description:
@@ -117,7 +117,7 @@ if command -v jq >/dev/null 2>&1; then
117
117
  | jq -r '.[] | select(.name == "lisa" and .source != "github") | .source' 2>/dev/null \
118
118
  | head -n 1)
119
119
  if [ -n "${STALE_LISA_SOURCE:-}" ]; then
120
- for stale_plugin in "lisa@lisa" "lisa-typescript@lisa" "lisa-expo@lisa" "lisa-nestjs@lisa" "lisa-cdk@lisa" "lisa-rails@lisa"; do
120
+ for stale_plugin in "lisa@lisa" "lisa-typescript@lisa" "lisa-expo@lisa" "lisa-nestjs@lisa" "lisa-cdk@lisa" "lisa-harper-fabric@lisa" "lisa-rails@lisa"; do
121
121
  claude plugin uninstall "$stale_plugin" --scope project </dev/null >/dev/null 2>&1 || true
122
122
  done
123
123
  claude plugin marketplace remove lisa </dev/null >/dev/null 2>&1 || true
@@ -140,7 +140,7 @@ fi
140
140
  # installed lisa-* plugins so they get re-resolved as remote. Worktrees under
141
141
  # .claude/worktrees/ have their own per-cwd plugin install state and are
142
142
  # healed in the same pass. A marker file gates one-time execution per cwd.
143
- LISA_PLUGINS=("lisa@lisa" "lisa-typescript@lisa" "lisa-expo@lisa" "lisa-nestjs@lisa" "lisa-cdk@lisa" "lisa-rails@lisa")
143
+ LISA_PLUGINS=("lisa@lisa" "lisa-typescript@lisa" "lisa-expo@lisa" "lisa-nestjs@lisa" "lisa-cdk@lisa" "lisa-harper-fabric@lisa" "lisa-rails@lisa")
144
144
  HEAL_V2_MARKER_NAME=".lisa-marketplace-heal-v2"
145
145
 
146
146
  heal_local_classification() {
@@ -210,7 +210,7 @@ claude plugin install "lisa@lisa" --scope project </dev/null 2>&1 || true
210
210
  # Detect which stack plugin to install from .claude/settings.json
211
211
  LISA_STACK=""
212
212
  if [ -f "$SETTINGS_FILE" ] && command -v jq >/dev/null 2>&1; then
213
- for stack in expo nestjs cdk rails; do
213
+ for stack in expo nestjs cdk harper-fabric rails; do
214
214
  if jq -e "(.enabledPlugins // {}) | has(\"lisa-${stack}@lisa\")" "$SETTINGS_FILE" >/dev/null 2>&1; then
215
215
  LISA_STACK="$stack"
216
216
  break
@@ -232,7 +232,7 @@ if [ -n "$LISA_STACK" ]; then
232
232
  fi
233
233
 
234
234
  # Uninstall old monolithic plugins during migration
235
- for old_plugin in "lisa-typescript@lisa" "lisa-expo@lisa" "lisa-nestjs@lisa" "lisa-cdk@lisa" "lisa-rails@lisa"; do
235
+ for old_plugin in "lisa-typescript@lisa" "lisa-expo@lisa" "lisa-nestjs@lisa" "lisa-cdk@lisa" "lisa-harper-fabric@lisa" "lisa-rails@lisa"; do
236
236
  # Skip if it's the same as what we just installed
237
237
  case "$LISA_STACK" in
238
238
  "") [ "$old_plugin" = "lisa-typescript@lisa" ] && continue ;;
@@ -255,7 +255,7 @@ for plugin in \
255
255
  done
256
256
 
257
257
  # Install stack-specific third-party plugins
258
- if [ "$LISA_STACK" = "expo" ]; then
258
+ if [ "$LISA_STACK" = "expo" ] || [ "$LISA_STACK" = "harper-fabric" ]; then
259
259
  for plugin in \
260
260
  "playwright@claude-plugins-official" \
261
261
  "posthog@claude-plugins-official"; do
@@ -0,0 +1,20 @@
1
+ {
2
+ "extends": "./typescript.json",
3
+ "compilerOptions": {
4
+ "lib": ["ES2022", "DOM"],
5
+ "rootDir": ".",
6
+ "outDir": "dist",
7
+ "resolveJsonModule": true,
8
+ "allowJs": false,
9
+ "skipLibCheck": true,
10
+ "types": ["node", "vitest"]
11
+ },
12
+ "include": ["src/**/*.ts", "tests/**/*.ts"],
13
+ "exclude": [
14
+ "dist",
15
+ "coverage",
16
+ "node_modules",
17
+ "harper-app/resources.js",
18
+ "harper-app/web/**/*.js"
19
+ ]
20
+ }