@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
@@ -64,6 +64,18 @@
64
64
  },
65
65
  "category": "Coding"
66
66
  },
67
+ {
68
+ "name": "lisa-harper-fabric",
69
+ "source": {
70
+ "source": "local",
71
+ "path": "./plugins/lisa-harper-fabric"
72
+ },
73
+ "policy": {
74
+ "installation": "AVAILABLE",
75
+ "authentication": "ON_INSTALL"
76
+ },
77
+ "category": "Coding"
78
+ },
67
79
  {
68
80
  "name": "lisa-rails",
69
81
  "source": {
@@ -141,7 +141,7 @@ export async function installHooks(lisaDir, destDir, detectedTypes) {
141
141
  // Step 2: mirror rules from Lisa into .codex/lisa-rules/ (only when
142
142
  // inject-rules is being installed — i.e., always, since it's a "*" hook)
143
143
  const ruleFiles = applicable.some(e => e.id === "inject-rules")
144
- ? (await mirrorRules(lisaDir, rulesDir)).map(file => path.join(LISA_RULES_SUBDIR, file))
144
+ ? (await mirrorRules(lisaDir, rulesDir, detectedTypes)).map(file => path.join(LISA_RULES_SUBDIR, file))
145
145
  : [];
146
146
  // Step 3: tagged-merge hooks.json
147
147
  const hooksFilePath = path.join(codexDir, HOOKS_FILENAME);
@@ -211,20 +211,32 @@ function resolveBundledScript(filename) {
211
211
  return path.join(moduleDir, "scripts", filename);
212
212
  }
213
213
  /**
214
- * Copy every .md file from Lisa's `plugins/lisa/rules/` into the host's
215
- * `.codex/lisa-rules/`. Returns the list of filenames copied (without
216
- * directory).
214
+ * Copy every .md file from Lisa's base and detected stack plugin `rules/`
215
+ * directories into the host's `.codex/lisa-rules/`.
217
216
  * @param lisaDir - Absolute path to the Lisa repo / installed package
218
217
  * @param rulesDestDir - Absolute path to `<destDir>/.codex/lisa-rules/`
218
+ * @param detectedTypes - Project types Lisa detected for the host
219
219
  * @returns Filenames (without directory) of every rule .md file copied
220
220
  */
221
- async function mirrorRules(lisaDir, rulesDestDir) {
222
- const rulesSourceDir = path.join(lisaDir, "plugins", "lisa", "rules");
223
- if (!(await fse.pathExists(rulesSourceDir))) {
224
- return [];
221
+ async function mirrorRules(lisaDir, rulesDestDir, detectedTypes) {
222
+ const pluginNames = ["lisa", ...detectedTypes.map(type => `lisa-${type}`)];
223
+ // First pass: list all .md files per plugin without copying
224
+ const filesByPlugin = await Promise.all(pluginNames.map(async (pluginName) => {
225
+ const sourceDir = path.join(lisaDir, "plugins", pluginName, "rules");
226
+ if (!(await fse.pathExists(sourceDir))) {
227
+ return { sourceDir, files: [] };
228
+ }
229
+ const files = (await readdir(sourceDir)).filter(name => name.endsWith(".md"));
230
+ return { sourceDir, files };
231
+ }));
232
+ // Detect filename collisions before performing any copies
233
+ const allFiles = filesByPlugin.flatMap(({ files }) => files);
234
+ if (new Set(allFiles).size !== allFiles.length) {
235
+ const duplicate = allFiles.find((name, index) => allFiles.indexOf(name) !== index);
236
+ throw new Error(`Duplicate Lisa rule filename "${duplicate ?? "unknown"}" across plugin rules/ directories`);
225
237
  }
226
- const files = (await readdir(rulesSourceDir)).filter(name => name.endsWith(".md"));
227
- await Promise.all(files.map(file => copyFile(path.join(rulesSourceDir, file), path.join(rulesDestDir, file))));
228
- return Object.freeze(files);
238
+ // Second pass: copy files now that we know there are no collisions
239
+ await Promise.all(filesByPlugin.map(({ sourceDir, files }) => Promise.all(files.map(file => copyFile(path.join(sourceDir, file), path.join(rulesDestDir, file))))));
240
+ return Object.freeze(allFiles);
229
241
  }
230
242
  //# sourceMappingURL=hooks-installer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks-installer.js","sourceRoot":"","sources":["../../src/codex/hooks-installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks-installer.js","sourceRoot":"","sources":["../../src/codex/hooks-installer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-marketplace-installer.d.ts","sourceRoot":"","sources":["../../src/codex/plugin-marketplace-installer.ts"],"names":[],"mappings":"AAWA,6EAA6E;AAC7E,eAAO,MAAM,sBAAsB,QAIlC,CAAC;AAsBF,2CAA2C;AAC3C,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,wBAAwB,CAAC,CAcnC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB"}
1
+ {"version":3,"file":"plugin-marketplace-installer.d.ts","sourceRoot":"","sources":["../../src/codex/plugin-marketplace-installer.ts"],"names":[],"mappings":"AAWA,6EAA6E;AAC7E,eAAO,MAAM,sBAAsB,QAIlC,CAAC;AAwBF,2CAA2C;AAC3C,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,wBAAwB,CAAC,CAcnC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB"}
@@ -17,6 +17,7 @@ const LISA_CODEX_PLUGINS = [
17
17
  "lisa-expo",
18
18
  "lisa-nestjs",
19
19
  "lisa-cdk",
20
+ "lisa-harper-fabric",
20
21
  "lisa-rails",
21
22
  ];
22
23
  /** Marketplace category should match each generated `.codex-plugin` manifest. */
@@ -26,6 +27,7 @@ const LISA_CODEX_PLUGIN_CATEGORIES = {
26
27
  "lisa-expo": "Coding",
27
28
  "lisa-nestjs": "Coding",
28
29
  "lisa-cdk": "Coding",
30
+ "lisa-harper-fabric": "Coding",
29
31
  "lisa-rails": "Coding",
30
32
  };
31
33
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-marketplace-installer.js","sourceRoot":"","sources":["../../src/codex/plugin-marketplace-installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-marketplace-installer.js","sourceRoot":"","sources":["../../src/codex/plugin-marketplace-installer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAC7C,SAAS,EACT,SAAS,EACT,kBAAkB,CACnB,CAAC;AAEF,yCAAyC;AACzC,MAAM,kBAAkB,GAAG;IACzB,MAAM;IACN,iBAAiB;IACjB,WAAW;IACX,aAAa;IACb,UAAU;IACV,oBAAoB;IACpB,YAAY;CACJ,CAAC;AAEX,iFAAiF;AACjF,MAAM,4BAA4B,GAAqC;IACrE,IAAI,EAAE,cAAc;IACpB,iBAAiB,EAAE,cAAc;IACjC,WAAW,EAAE,QAAQ;IACrB,aAAa,EAAE,QAAQ;IACvB,UAAU,EAAE,QAAQ;IACpB,oBAAoB,EAAE,QAAQ;IAC9B,YAAY,EAAE,QAAQ;CACvB,CAAC;AAQF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAe,EACf,OAAe;IAEf,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;IACnE,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,MAAM;QACrB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC,CAAC,sBAAsB,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,SAAS,CACb,eAAe,EACf,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACtC,MAAM,CACP,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,MAAM,EAAE,CAAC;AACxE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAiB,EACjB,OAAe,EACf,OAAe;IAEf,MAAM,IAAI,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CACrC,MAAM,CAAC,EAAE,CACP,CAAC,kBAAkB,CAAC,QAAQ,CAC1B,MAAM,CAAC,IAA2C,CACnD,CACJ,CAAC;IACF,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE;YACP,GAAG,WAAW;YACd,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CACrC,0BAA0B,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CACzD;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB;IAC7B,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE;YACT,WAAW,EAAE,cAAc;SAC5B;QACD,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,GAAY;IAKxC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,oBAAoB,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;QACtD,SAAS,EACP,GAAG,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;YACzD,CAAC,CAAE,GAAG,CAAC,SAAqC;YAC5C,CAAC,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE;QACrC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YACjC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAChB,CAAC,MAAM,EAAqC,EAAE,CAC5C,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,CAChD;YACH,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,0BAA0B,CACjC,UAAkB,EAClB,OAAe,EACf,OAAe;IAEf,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACN,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,yBAAyB,CAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,EACzC,OAAO,CACR;SACF;QACD,MAAM,EAAE;YACN,YAAY,EACV,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW;YAC9D,cAAc,EAAE,YAAY;SAC7B;QACD,QAAQ,EAAE,4BAA4B,CAAC,UAAU,CAAC,IAAI,QAAQ;KAC/D,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,yBAAyB,CAChC,UAAkB,EAClB,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9E,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env bash
2
+ # Lisa-managed Codex hook script (PreToolUse Edit|Write|apply_patch).
3
+ # Blocks edits to TypeORM migration files. Use `bun run migration:generate`
4
+ # to regenerate from entity diffs instead — hand-written migrations drift
5
+ # from entity metadata and break the schema/migration contract.
6
+ #
7
+ # Codex blocks the tool call when stdout has hookSpecificOutput.permissionDecision
8
+ # set to "deny", or when the script exits non-zero with a deny message.
9
+ #
10
+ # Tool envelope shapes (Codex CLI 0.125.0):
11
+ # Edit / Write → tool_input.file_path (single string)
12
+ # apply_patch → tool_input.command (["apply_patch", "<patch>"])
13
+ #
14
+ # The patch text encodes target file paths via "*** Update File: <path>" /
15
+ # "*** Add File: <path>" / "*** Delete File: <path>" directives. We must
16
+ # extract every such path so apply_patch can't sneak past this guard.
17
+ set -euo pipefail
18
+
19
+ JSON_INPUT="$(cat)"
20
+
21
+ if ! command -v jq >/dev/null 2>&1; then
22
+ # Without jq we can't reliably parse — fail open (allow the edit). This
23
+ # matches the project rule against grep/sed/cut/awk-based JSON parsing.
24
+ exit 0
25
+ fi
26
+
27
+ # Determine which tool fired. Codex puts the tool name at .tool_name on
28
+ # every PreToolUse envelope; falling back to .tool just in case.
29
+ TOOL_NAME="$(echo "$JSON_INPUT" | jq -r '.tool_name // .tool // empty')"
30
+
31
+ # Collect every candidate path the tool intends to write. Newline-separated.
32
+ CANDIDATE_PATHS=""
33
+ case "$TOOL_NAME" in
34
+ apply_patch)
35
+ # Pull the full patch string out of tool_input.command[1], then extract
36
+ # every "*** {Update,Add,Delete} File: <path>" header line. jq handles
37
+ # the JSON; we use bash-native string splitting (NOT grep/cut on JSON)
38
+ # to walk the patch text line-by-line.
39
+ PATCH_TEXT="$(echo "$JSON_INPUT" | jq -r '.tool_input.command[1] // empty')"
40
+ if [ -n "${PATCH_TEXT}" ]; then
41
+ while IFS= read -r line; do
42
+ case "$line" in
43
+ "*** Update File: "*|"*** Add File: "*|"*** Delete File: "*)
44
+ CANDIDATE_PATHS+="${line#*: }"$'\n'
45
+ ;;
46
+ esac
47
+ done <<<"${PATCH_TEXT}"
48
+ fi
49
+ ;;
50
+ *)
51
+ # Edit / Write / anything else: single file under tool_input.file_path
52
+ SINGLE_PATH="$(echo "$JSON_INPUT" | jq -r '.tool_input.file_path // empty')"
53
+ [ -n "${SINGLE_PATH}" ] && CANDIDATE_PATHS="${SINGLE_PATH}"
54
+ ;;
55
+ esac
56
+
57
+ [ -n "${CANDIDATE_PATHS}" ] || exit 0
58
+
59
+ # Walk every candidate; deny on the first migration match.
60
+ while IFS= read -r FILE_PATH; do
61
+ [ -n "${FILE_PATH}" ] || continue
62
+ case "${FILE_PATH}" in
63
+ */migrations/*[0-9]*-*.ts)
64
+ cat <<EOF >&2
65
+ ⚠ block-migration-edits: refusing to modify ${FILE_PATH}.
66
+
67
+ TypeORM migrations must be regenerated from entity diffs:
68
+ bun run migration:generate -- src/database/migrations/<descriptive-name>
69
+
70
+ Hand-written migrations drift from entity metadata and break the schema
71
+ contract. Modify the entity, run the generator, then commit the result.
72
+ EOF
73
+ exit 2
74
+ ;;
75
+ esac
76
+ done <<<"${CANDIDATE_PATHS}"
77
+
78
+ exit 0
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env bash
2
+ # Lisa-managed Codex hook script (PreToolUse Bash).
3
+ # Blocks git commands that try to bypass verification hooks with --no-verify.
4
+ set -euo pipefail
5
+
6
+ input="$(cat 2>/dev/null || true)"
7
+ [ -n "$input" ] || exit 0
8
+ command -v jq >/dev/null 2>&1 || exit 0
9
+
10
+ tool_name="$(printf '%s' "$input" | jq -r '.tool_name // empty' 2>/dev/null || true)"
11
+ [ "$tool_name" = "Bash" ] || exit 0
12
+
13
+ command_str="$(printf '%s' "$input" | jq -r '.tool_input.command // empty' 2>/dev/null || true)"
14
+ [ -n "$command_str" ] || exit 0
15
+
16
+ if printf '%s' "$command_str" | grep -Eq '(^|[^[:alnum:]_-])--no-verify($|[^[:alnum:]_-])'; then
17
+ jq -n '{
18
+ "hookSpecificOutput": {
19
+ "hookEventName": "PreToolUse",
20
+ "permissionDecision": "deny",
21
+ "permissionDecisionReason": "Blocked: --no-verify bypasses pre-commit/pre-push hooks. Fix the underlying issue or ask the user before bypassing."
22
+ }
23
+ }'
24
+ fi
25
+
26
+ exit 0
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env bash
2
+ # Lisa-managed Codex hook script (PostToolUse Edit|Write|apply_patch).
3
+ # Runs Prettier on the just-edited file. Reads tool_input.file_path from
4
+ # stdin JSON.
5
+ #
6
+ # Note on apply_patch: Codex's apply_patch tool envelope exposes the patch
7
+ # under tool_input.command (an array), not tool_input.file_path. This script
8
+ # only formats single-file Edit/Write tool calls. apply_patch fires get
9
+ # silently skipped (FILE_PATH empty) — that's acceptable here because the
10
+ # next save/edit will still run the formatter, and the user can always run
11
+ # `prettier --write` against modified files manually.
12
+ set -euo pipefail
13
+
14
+ JSON_INPUT="$(cat)"
15
+
16
+ # Project rule (.claude/rules/PROJECT_RULES.md): never parse JSON in shell
17
+ # with grep/sed/cut/awk — always use jq. Fail open without jq so we don't
18
+ # block the agent on missing tooling.
19
+ command -v jq >/dev/null 2>&1 || exit 0
20
+ FILE_PATH="$(echo "$JSON_INPUT" | jq -r '.tool_input.file_path // empty')"
21
+
22
+ [ -n "${FILE_PATH}" ] || exit 0
23
+ [ -f "${FILE_PATH}" ] || exit 0
24
+
25
+ case "${FILE_PATH##*.}" in
26
+ ts|tsx|js|jsx|mjs|cjs|json|md|yaml|yml|css|scss|html) ;;
27
+ *) exit 0 ;;
28
+ esac
29
+
30
+ # Prefer the project-local prettier; fall back to a globally installed one
31
+ if [ -x "./node_modules/.bin/prettier" ]; then
32
+ ./node_modules/.bin/prettier --write "${FILE_PATH}" >/dev/null 2>&1 || true
33
+ elif command -v prettier >/dev/null 2>&1; then
34
+ prettier --write "${FILE_PATH}" >/dev/null 2>&1 || true
35
+ fi
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env bash
2
+ # Lisa-managed Codex hook script.
3
+ # Reads all .md files from .codex/lisa-rules/ and injects them into the
4
+ # session context via additionalContext.
5
+ #
6
+ # Wired by Lisa's installer as a SessionStart hook in .codex/hooks.json.
7
+ # Codex sets the hook script's cwd to the session cwd (NOT the repo root),
8
+ # so we resolve paths against `git rev-parse --show-toplevel`.
9
+ set -euo pipefail
10
+
11
+ REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
12
+ RULES_DIR="${REPO_ROOT}/.codex/lisa-rules"
13
+
14
+ # Bail silently if the rules dir is absent (e.g., Lisa was uninstalled)
15
+ [ -d "$RULES_DIR" ] || exit 0
16
+
17
+ # Fail open if jq is missing — without it we can't emit valid hook JSON.
18
+ # Codex would otherwise log a warning on every SessionStart.
19
+ command -v jq >/dev/null 2>&1 || exit 0
20
+
21
+ CONTEXT=""
22
+ for file in "$RULES_DIR"/*.md; do
23
+ [ -f "$file" ] || continue
24
+ CONTEXT+="$(cat "$file")"$'\n\n'
25
+ done
26
+
27
+ # Bail if no rules were found
28
+ [ -n "$CONTEXT" ] || exit 0
29
+
30
+ # Codex hooks accept hookSpecificOutput.additionalContext for context injection
31
+ jq -n --arg ctx "$CONTEXT" '{"hookSpecificOutput": {"hookEventName": "SessionStart", "additionalContext": $ctx}}'
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env bash
2
+ # Lisa-managed Codex hook script (SessionStart startup).
3
+ # Mirrors Claude's dependency bootstrap, but remains fail-open so Codex startup
4
+ # is never bricked by a package-manager issue.
5
+ set -uo pipefail
6
+
7
+ repo_root="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
8
+ cd "$repo_root" 2>/dev/null || exit 0
9
+
10
+ if [ -d "node_modules" ] || [ ! -f "package.json" ]; then
11
+ exit 0
12
+ fi
13
+
14
+ if [ -f "bun.lockb" ] || [ -f "bun.lock" ]; then
15
+ command -v bun >/dev/null 2>&1 && bun install
16
+ elif [ -f "pnpm-lock.yaml" ]; then
17
+ command -v pnpm >/dev/null 2>&1 && pnpm install
18
+ elif [ -f "yarn.lock" ]; then
19
+ command -v yarn >/dev/null 2>&1 && yarn install
20
+ elif [ -f "package-lock.json" ]; then
21
+ command -v npm >/dev/null 2>&1 && npm install
22
+ else
23
+ command -v npm >/dev/null 2>&1 && npm install
24
+ fi
25
+
26
+ exit 0
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env bash
2
+ # Lisa-managed Codex hook script (PostToolUse Edit|Write|apply_patch).
3
+ # Runs ESLint --fix on the just-edited file. If unfixable errors remain,
4
+ # exits non-zero so Codex sees the failure and the agent self-corrects.
5
+ set -euo pipefail
6
+
7
+ JSON_INPUT="$(cat)"
8
+
9
+ # Project rule (.claude/rules/PROJECT_RULES.md): never parse JSON in shell
10
+ # with grep/sed/cut/awk — always use jq. Fail open without jq.
11
+ command -v jq >/dev/null 2>&1 || exit 0
12
+ FILE_PATH="$(echo "$JSON_INPUT" | jq -r '.tool_input.file_path // empty')"
13
+
14
+ [ -n "${FILE_PATH}" ] || exit 0
15
+ [ -f "${FILE_PATH}" ] || exit 0
16
+
17
+ case "${FILE_PATH##*.}" in
18
+ ts|tsx|js|jsx|mjs|cjs) ;;
19
+ *) exit 0 ;;
20
+ esac
21
+
22
+ if [ -x "./node_modules/.bin/eslint" ]; then
23
+ ESLINT="./node_modules/.bin/eslint"
24
+ elif command -v eslint >/dev/null 2>&1; then
25
+ ESLINT="eslint"
26
+ else
27
+ exit 0
28
+ fi
29
+
30
+ # Auto-fix what we can; surface anything left so the agent fixes it itself
31
+ "$ESLINT" --fix "${FILE_PATH}" >/dev/null 2>&1 || true
32
+ "$ESLINT" --quiet "${FILE_PATH}"
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env bash
2
+ # Lisa-managed Codex hook script (Stop event).
3
+ # Sends a desktop/push notification when a Codex session completes.
4
+ # No-op if NTFY_TOPIC is not set or curl is unavailable.
5
+ set -euo pipefail
6
+
7
+ [ -n "${NTFY_TOPIC:-}" ] || exit 0
8
+ command -v curl >/dev/null 2>&1 || exit 0
9
+
10
+ TITLE="${NTFY_TITLE:-Codex session complete}"
11
+ MESSAGE="${NTFY_MESSAGE:-Your Codex session has finished. Check the terminal for results.}"
12
+
13
+ curl -s -m 5 \
14
+ -H "Title: ${TITLE}" \
15
+ -H "Priority: default" \
16
+ -d "${MESSAGE}" \
17
+ "https://ntfy.sh/${NTFY_TOPIC}" \
18
+ >/dev/null 2>&1 || true
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env bash
2
+ # Lisa-managed Codex hook script (PostToolUse Edit|Write|apply_patch).
3
+ # Runs RuboCop -a (safe autocorrect) on the just-edited Ruby file, then
4
+ # checks for remaining unfixable errors. Blocking — non-zero exit forces
5
+ # the agent to fix.
6
+ set -euo pipefail
7
+
8
+ JSON_INPUT="$(cat)"
9
+
10
+ # Project rule (.claude/rules/PROJECT_RULES.md): never parse JSON in shell
11
+ # with grep/sed/cut/awk — always use jq. Fail open without jq.
12
+ command -v jq >/dev/null 2>&1 || exit 0
13
+ FILE_PATH="$(echo "$JSON_INPUT" | jq -r '.tool_input.file_path // empty')"
14
+
15
+ [ -n "${FILE_PATH}" ] || exit 0
16
+ [ -f "${FILE_PATH}" ] || exit 0
17
+
18
+ case "${FILE_PATH##*.}" in
19
+ rb|rake) ;;
20
+ *) exit 0 ;;
21
+ esac
22
+
23
+ if command -v bundle >/dev/null 2>&1 && [ -f "./Gemfile" ]; then
24
+ RUBOCOP=(bundle exec rubocop)
25
+ elif command -v rubocop >/dev/null 2>&1; then
26
+ RUBOCOP=(rubocop)
27
+ else
28
+ exit 0
29
+ fi
30
+
31
+ "${RUBOCOP[@]}" -a "${FILE_PATH}" >/dev/null 2>&1 || true
32
+ "${RUBOCOP[@]}" "${FILE_PATH}"
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env bash
2
+ # Lisa-managed Codex hook script (SessionStart).
3
+ # Writes jira-cli configuration from environment variables when available.
4
+ set -euo pipefail
5
+
6
+ if [[ -z "${JIRA_SERVER:-}" || -z "${JIRA_LOGIN:-}" ]]; then
7
+ exit 0
8
+ fi
9
+
10
+ config_dir="${HOME}/.config/.jira"
11
+ config_file="${config_dir}/.config.yml"
12
+ mkdir -p "$config_dir"
13
+
14
+ cat > "$config_file" << EOF
15
+ installation: ${JIRA_INSTALLATION:-cloud}
16
+ server: ${JIRA_SERVER}
17
+ login: ${JIRA_LOGIN}
18
+ project: ${JIRA_PROJECT:-}
19
+ board: "${JIRA_BOARD:-}"
20
+ auth_type: basic
21
+ epic:
22
+ name: Epic Name
23
+ link: Epic Link
24
+ EOF
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env bash
2
+ # Lisa-managed Codex hook script (PostToolUse Edit|Write|apply_patch).
3
+ # Runs ast-grep scan against the project, reporting only errors involving
4
+ # the just-edited file. Blocking — non-zero exit forces the agent to fix.
5
+ set -euo pipefail
6
+
7
+ JSON_INPUT="$(cat)"
8
+
9
+ # Project rule (.claude/rules/PROJECT_RULES.md): never parse JSON in shell
10
+ # with grep/sed/cut/awk — always use jq. Fail open without jq.
11
+ command -v jq >/dev/null 2>&1 || exit 0
12
+ FILE_PATH="$(echo "$JSON_INPUT" | jq -r '.tool_input.file_path // empty' 2>/dev/null || true)"
13
+
14
+ [ -n "${FILE_PATH}" ] || exit 0
15
+ [ -f "${FILE_PATH}" ] || exit 0
16
+
17
+ case "${FILE_PATH##*.}" in
18
+ ts|tsx|js|jsx|mjs|cjs) ;;
19
+ *) exit 0 ;;
20
+ esac
21
+
22
+ if [ -x "./node_modules/.bin/ast-grep" ]; then
23
+ AST_GREP="./node_modules/.bin/ast-grep"
24
+ elif command -v ast-grep >/dev/null 2>&1; then
25
+ AST_GREP="ast-grep"
26
+ elif command -v sg >/dev/null 2>&1; then
27
+ AST_GREP="sg"
28
+ else
29
+ exit 0
30
+ fi
31
+
32
+ [ -f "./sgconfig.yml" ] || exit 0
33
+
34
+ "$AST_GREP" scan "${FILE_PATH}" 2>&1
@@ -0,0 +1,28 @@
1
+ /**
2
+ * ESLint 9 Flat Config - Harper/Fabric Stack
3
+ *
4
+ * Extends Lisa's TypeScript config with stricter immutability and generated
5
+ * Harper deploy artifact ignores.
6
+ * @module configs/eslint/harper-fabric
7
+ */
8
+ import type { Linter } from "eslint";
9
+ import { defaultIgnores, defaultThresholds } from "./typescript.js";
10
+ export { defaultIgnores, defaultThresholds };
11
+ /**
12
+ * Default ignore patterns for Harper/Fabric projects.
13
+ */
14
+ export declare const defaultHarperFabricIgnores: string[];
15
+ /**
16
+ * Creates the Harper/Fabric ESLint configuration.
17
+ * @param options - Configuration options
18
+ * @param options.tsconfigRootDir - Root directory for tsconfig.json
19
+ * @param options.ignorePatterns - Patterns to ignore
20
+ * @param options.thresholds - Threshold overrides
21
+ * @returns ESLint flat config array
22
+ */
23
+ export declare function getHarperFabricConfig({ tsconfigRootDir, ignorePatterns, thresholds, }: {
24
+ tsconfigRootDir: string;
25
+ ignorePatterns?: string[];
26
+ thresholds?: typeof defaultThresholds;
27
+ }): Linter.Config[];
28
+ //# sourceMappingURL=harper-fabric.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harper-fabric.d.ts","sourceRoot":"","sources":["../../../src/configs/eslint/harper-fabric.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EACL,cAAc,EACd,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,0BAA0B,UAStC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,eAAe,EACf,cAA2C,EAC3C,UAA8B,GAC/B,EAAE;IACD,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,iBAAiB,CAAC;CACvC,GAAG,MAAM,CAAC,MAAM,EAAE,CAkClB"}
@@ -0,0 +1,59 @@
1
+ import { defaultIgnores, defaultThresholds, getTypescriptConfig, } from "./typescript.js";
2
+ export { defaultIgnores, defaultThresholds };
3
+ /**
4
+ * Default ignore patterns for Harper/Fabric projects.
5
+ */
6
+ export const defaultHarperFabricIgnores = [
7
+ ...defaultIgnores,
8
+ "**/*.yaml",
9
+ "**/*.yml",
10
+ "**/*.toml",
11
+ "*.config.local.ts",
12
+ "harper-app/resources.js",
13
+ "harper-app/web/**/*.js",
14
+ "harper-app/web/**/*.js.map",
15
+ ];
16
+ /**
17
+ * Creates the Harper/Fabric ESLint configuration.
18
+ * @param options - Configuration options
19
+ * @param options.tsconfigRootDir - Root directory for tsconfig.json
20
+ * @param options.ignorePatterns - Patterns to ignore
21
+ * @param options.thresholds - Threshold overrides
22
+ * @returns ESLint flat config array
23
+ */
24
+ export function getHarperFabricConfig({ tsconfigRootDir, ignorePatterns = defaultHarperFabricIgnores, thresholds = defaultThresholds, }) {
25
+ return [
26
+ ...getTypescriptConfig({
27
+ tsconfigRootDir,
28
+ ignorePatterns,
29
+ thresholds,
30
+ }),
31
+ {
32
+ files: ["src/**/*.ts"],
33
+ rules: {
34
+ "functional/immutable-data": "error",
35
+ "functional/no-let": "error",
36
+ "functional/prefer-readonly-type": "error",
37
+ "functional/readonly-type": "error",
38
+ "functional/type-declaration-immutability": "error",
39
+ },
40
+ },
41
+ {
42
+ files: ["tests/**/*.test.ts", "tests/**/*smoke.ts"],
43
+ rules: {
44
+ "functional/immutable-data": "off",
45
+ "functional/no-let": "off",
46
+ "functional/prefer-readonly-type": "off",
47
+ "functional/readonly-type": "off",
48
+ "functional/type-declaration-immutability": "off",
49
+ },
50
+ },
51
+ {
52
+ files: ["src/scripts/**/*.ts", "tests/**/*.ts"],
53
+ rules: {
54
+ "no-restricted-syntax": "off",
55
+ },
56
+ },
57
+ ];
58
+ }
59
+ //# sourceMappingURL=harper-fabric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harper-fabric.js","sourceRoot":"","sources":["../../../src/configs/eslint/harper-fabric.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,GAAG,cAAc;IACjB,WAAW;IACX,UAAU;IACV,WAAW;IACX,mBAAmB;IACnB,yBAAyB;IACzB,wBAAwB;IACxB,4BAA4B;CAC7B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,EACpC,eAAe,EACf,cAAc,GAAG,0BAA0B,EAC3C,UAAU,GAAG,iBAAiB,GAK/B;IACC,OAAO;QACL,GAAG,mBAAmB,CAAC;YACrB,eAAe;YACf,cAAc;YACd,UAAU;SACX,CAAC;QACF;YACE,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,KAAK,EAAE;gBACL,2BAA2B,EAAE,OAAO;gBACpC,mBAAmB,EAAE,OAAO;gBAC5B,iCAAiC,EAAE,OAAO;gBAC1C,0BAA0B,EAAE,OAAO;gBACnC,0CAA0C,EAAE,OAAO;aACpD;SACF;QACD;YACE,KAAK,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;YACnD,KAAK,EAAE;gBACL,2BAA2B,EAAE,KAAK;gBAClC,mBAAmB,EAAE,KAAK;gBAC1B,iCAAiC,EAAE,KAAK;gBACxC,0BAA0B,EAAE,KAAK;gBACjC,0CAA0C,EAAE,KAAK;aAClD;SACF;QACD;YACE,KAAK,EAAE,CAAC,qBAAqB,EAAE,eAAe,CAAC;YAC/C,KAAK,EAAE;gBACL,sBAAsB,EAAE,KAAK;aAC9B;SACF;KACiB,CAAC;AACvB,CAAC"}
@@ -6,6 +6,7 @@
6
6
  * @see nestjs.ts for NestJS stack config
7
7
  * @see expo.ts for Expo/React Native stack config
8
8
  * @see cdk.ts for AWS CDK stack config
9
+ * @see harper-fabric.ts for Harper/Fabric stack config
9
10
  * @see slow.ts for slow rules run periodically
10
11
  */
11
12
  export * from "./base.js";
@@ -13,5 +14,6 @@ export * from "./typescript.js";
13
14
  export * from "./nestjs.js";
14
15
  export * from "./expo.js";
15
16
  export * from "./cdk.js";
17
+ export * from "./harper-fabric.js";
16
18
  export * from "./slow.js";
17
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/configs/eslint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/configs/eslint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
@@ -6,6 +6,7 @@
6
6
  * @see nestjs.ts for NestJS stack config
7
7
  * @see expo.ts for Expo/React Native stack config
8
8
  * @see cdk.ts for AWS CDK stack config
9
+ * @see harper-fabric.ts for Harper/Fabric stack config
9
10
  * @see slow.ts for slow rules run periodically
10
11
  */
11
12
  export * from "./base.js";
@@ -13,5 +14,6 @@ export * from "./typescript.js";
13
14
  export * from "./nestjs.js";
14
15
  export * from "./expo.js";
15
16
  export * from "./cdk.js";
17
+ export * from "./harper-fabric.js";
16
18
  export * from "./slow.js";
17
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/configs/eslint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/configs/eslint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}