@codyswann/lisa 1.38.0 → 1.39.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 (57) hide show
  1. package/all/copy-overwrite/.claude/README.md +11 -5
  2. package/all/copy-overwrite/.claude/agents/agent-architect.md +0 -1
  3. package/all/copy-overwrite/.claude/agents/{architecture-planner.md → architecture-specialist.md} +7 -12
  4. package/all/copy-overwrite/.claude/agents/debug-specialist.md +204 -0
  5. package/all/copy-overwrite/.claude/agents/implementer.md +35 -23
  6. package/all/copy-overwrite/.claude/agents/learner.md +0 -1
  7. package/all/copy-overwrite/.claude/agents/performance-specialist.md +95 -0
  8. package/all/copy-overwrite/.claude/agents/{product-planner.md → product-specialist.md} +19 -14
  9. package/all/copy-overwrite/.claude/agents/{tech-reviewer.md → quality-specialist.md} +9 -11
  10. package/all/copy-overwrite/.claude/agents/{security-planner.md → security-specialist.md} +8 -13
  11. package/all/copy-overwrite/.claude/agents/{test-strategist.md → test-specialist.md} +20 -15
  12. package/all/copy-overwrite/.claude/agents/verification-specialist.md +189 -0
  13. package/all/copy-overwrite/.claude/commands/plan/create.md +1 -1
  14. package/all/copy-overwrite/.claude/commands/plan/execute.md +7 -0
  15. package/all/copy-overwrite/.claude/hooks/README.md +2 -2
  16. package/all/copy-overwrite/.claude/hooks/setup-jira-cli.sh +2 -2
  17. package/all/copy-overwrite/.claude/hooks/sync-tasks.sh +3 -0
  18. package/all/copy-overwrite/.claude/hooks/ticket-sync-reminder.sh +3 -0
  19. package/all/copy-overwrite/.claude/hooks/track-plan-sessions.sh +3 -0
  20. package/all/copy-overwrite/.claude/rules/lisa.md +2 -4
  21. package/all/copy-overwrite/.claude/rules/verfication.md +104 -1
  22. package/all/copy-overwrite/.claude/settings.json +219 -26
  23. package/all/copy-overwrite/.claude/skills/agent-design-best-practices/SKILL.md +219 -0
  24. package/all/copy-overwrite/.claude/skills/plan-add-test-coverage/SKILL.md +1 -1
  25. package/all/copy-overwrite/.claude/skills/plan-execute/SKILL.md +89 -0
  26. package/all/copy-overwrite/.claude/skills/plan-fix-linter-error/SKILL.md +1 -1
  27. package/all/copy-overwrite/.claude/skills/plan-lower-code-complexity/SKILL.md +1 -1
  28. package/all/copy-overwrite/.claude/skills/plan-reduce-max-lines/SKILL.md +1 -1
  29. package/all/copy-overwrite/.claude/skills/plan-reduce-max-lines-per-function/SKILL.md +1 -1
  30. package/all/copy-overwrite/README.md +6 -2
  31. package/dist/utils/fibonacci.d.ts +30 -22
  32. package/dist/utils/fibonacci.d.ts.map +1 -1
  33. package/dist/utils/fibonacci.js +40 -34
  34. package/dist/utils/fibonacci.js.map +1 -1
  35. package/package.json +1 -1
  36. package/rails/copy-overwrite/.claude/skills/plan-add-test-coverage/SKILL.md +1 -1
  37. package/rails/copy-overwrite/.claude/skills/plan-fix-linter-error/SKILL.md +1 -1
  38. package/rails/copy-overwrite/.claude/skills/plan-lower-code-complexity/SKILL.md +1 -1
  39. package/rails/copy-overwrite/.claude/skills/plan-reduce-max-lines/SKILL.md +1 -1
  40. package/rails/copy-overwrite/.claude/skills/plan-reduce-max-lines-per-function/SKILL.md +1 -1
  41. package/typescript/copy-contents/.husky/pre-push +1 -5
  42. package/typescript/copy-overwrite/.claude/settings.json +112 -78
  43. package/typescript/copy-overwrite/.github/workflows/quality.yml +1 -5
  44. package/all/copy-overwrite/.claude/REFERENCE.md +0 -519
  45. package/all/copy-overwrite/.claude/agents/codebase-analyzer.md +0 -146
  46. package/all/copy-overwrite/.claude/agents/codebase-locator.md +0 -125
  47. package/all/copy-overwrite/.claude/agents/codebase-pattern-finder.md +0 -237
  48. package/all/copy-overwrite/.claude/agents/consistency-checker.md +0 -58
  49. package/all/copy-overwrite/.claude/agents/product-reviewer.md +0 -47
  50. package/all/copy-overwrite/.claude/agents/spec-analyst.md +0 -41
  51. package/all/copy-overwrite/.claude/agents/test-coverage-agent.md +0 -17
  52. package/all/copy-overwrite/.claude/commands/plan/implement.md +0 -6
  53. package/all/copy-overwrite/.claude/rules/plan-governance.md +0 -96
  54. package/all/copy-overwrite/.claude/rules/plan.md +0 -79
  55. package/all/copy-overwrite/.claude/skills/plan-create/SKILL.md +0 -238
  56. package/all/copy-overwrite/.claude/skills/plan-implement/SKILL.md +0 -114
  57. /package/typescript/copy-overwrite/.claude/hooks/{install_pkgs.sh → install-pkgs.sh} +0 -0
@@ -17,9 +17,9 @@ brew install claude-code
17
17
 
18
18
  > Ask Claude: "I just cloned this repo. Walk me through the full setup including installing dependencies, environment variables, and any other configuration."
19
19
 
20
- ## Step 3: Run the App Locally
20
+ ## Step 3: Build and Test
21
21
 
22
- > Ask Claude: "How do I start the app locally? Walk me through the steps and verify it's running."
22
+ > Ask Claude: "How do I build this package and run the tests?"
23
23
 
24
24
  ## Step 4: Work on a Feature
25
25
 
@@ -56,6 +56,10 @@ Or use utility commands:
56
56
 
57
57
  > Ask Claude: "Increase test coverage for the files I changed."
58
58
 
59
+ ### Publish to npm
60
+
61
+ > Ask Claude: "Walk me through publishing a new version of this package to npm."
62
+
59
63
  ### Deploy
60
64
 
61
65
  > Ask Claude: "Walk me through deploying this project."
@@ -1,31 +1,36 @@
1
1
  /**
2
2
  * @file fibonacci.ts
3
- * @description BigInt Fibonacci utilities built on a lazy infinite generator.
4
- * Every public function delegates to `fibonacciGenerator` so the core
5
- * recurrence relation lives in exactly one place (DRY). BigInt eliminates
6
- * the precision ceiling that Number hits at fibonacci(78).
3
+ * @description Tuple-based Fibonacci utilities powered by an infinite BigInt generator.
4
+ * BigInt avoids the precision ceiling that Number hits at F(78), where values
5
+ * exceed Number.MAX_SAFE_INTEGER. Every public function derives its values from
6
+ * fibonacciGenerator, keeping the recurrence relation in a single place.
7
7
  * @module utils
8
8
  */
9
9
  /**
10
- * Infinite generator that lazily yields the Fibonacci sequence as BigInts
11
- * @yields {bigint} The next Fibonacci number in the sequence (0n, 1n, 1n, 2n, 3n, …)
12
- * @remarks Each call creates an independent iterator with its own state, so
13
- * multiple consumers can advance through the sequence without interference.
10
+ * Infinite generator yielding the Fibonacci sequence as BigInts.
11
+ *
12
+ * Uses a two-element pair to track consecutive values, yielding the leading
13
+ * element on each iteration and advancing the pair forward. Each call returns
14
+ * an independent iterator, so multiple consumers never interfere.
15
+ *
16
+ * @yields The next Fibonacci number (0n, 1n, 1n, 2n, 3n, 5n, …)
14
17
  * @example
15
18
  * ```typescript
16
19
  * const gen = fibonacciGenerator();
17
20
  * gen.next().value; // 0n
18
21
  * gen.next().value; // 1n
19
- * gen.next().value; // 1n
20
22
  * ```
21
23
  */
22
24
  export declare function fibonacciGenerator(): Generator<bigint, never, unknown>;
23
25
  /**
24
- * Returns the nth Fibonacci number as a BigInt
25
- * @param n - Zero-based index into the Fibonacci sequence (must be a non-negative integer)
26
- * @returns The nth Fibonacci number (e.g. fibonacci(5) 5n)
27
- * @throws {RangeError} When n is negative, non-integer, NaN, or Infinity
28
- * @remarks Delegates to `fibonacciGenerator` so the recurrence logic is defined once.
26
+ * Returns the nth Fibonacci number (0-indexed) as a BigInt.
27
+ *
28
+ * Collects n + 1 values from the generator and returns the final element,
29
+ * delegating the recurrence to fibonacciGenerator for DRY.
30
+ *
31
+ * @param n - Zero-based position in the Fibonacci sequence (non-negative integer)
32
+ * @returns The nth Fibonacci number as a BigInt
33
+ * @throws {RangeError} When n is negative, fractional, NaN, or infinite
29
34
  * @example
30
35
  * ```typescript
31
36
  * fibonacci(0); // 0n
@@ -33,19 +38,22 @@ export declare function fibonacciGenerator(): Generator<bigint, never, unknown>;
33
38
  * fibonacci(78); // 8944394323791464n — beyond Number.MAX_SAFE_INTEGER
34
39
  * ```
35
40
  */
36
- export declare function fibonacci(n: number): bigint;
41
+ export declare const fibonacci: (n: number) => bigint;
37
42
  /**
38
- * Returns the first `length` Fibonacci numbers as a readonly BigInt array
39
- * @param length - How many Fibonacci numbers to return (must be a non-negative integer)
40
- * @returns A new array containing the first `length` Fibonacci numbers
41
- * @throws {RangeError} When length is negative, non-integer, NaN, or Infinity
42
- * @remarks Delegates to `fibonacciGenerator` so the recurrence logic is defined once.
43
- * Returns a fresh array on every call — callers can safely mutate the result.
43
+ * Returns the first `length` Fibonacci numbers as a readonly BigInt array.
44
+ *
45
+ * Spreads an empty array of the requested size and maps each slot to the
46
+ * next generator value, delegating the recurrence to fibonacciGenerator for DRY.
47
+ * Returns a fresh array on every call so callers can safely consume the result.
48
+ *
49
+ * @param length - How many Fibonacci numbers to collect (non-negative integer)
50
+ * @returns A new readonly array of the first `length` Fibonacci numbers
51
+ * @throws {RangeError} When length is negative, fractional, NaN, or infinite
44
52
  * @example
45
53
  * ```typescript
46
54
  * fibonacciSequence(0); // []
47
55
  * fibonacciSequence(5); // [0n, 1n, 1n, 2n, 3n]
48
56
  * ```
49
57
  */
50
- export declare function fibonacciSequence(length: number): readonly bigint[];
58
+ export declare const fibonacciSequence: (length: number) => readonly bigint[];
51
59
  //# sourceMappingURL=fibonacci.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fibonacci.d.ts","sourceRoot":"","sources":["../../src/utils/fibonacci.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAiB,kBAAkB,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAUvE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU3C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CASnE"}
1
+ {"version":3,"file":"fibonacci.d.ts","sourceRoot":"","sources":["../../src/utils/fibonacci.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAiB,kBAAkB,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CASvE;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,SAAS,MAAO,MAAM,KAAG,MAYrC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,WAAY,MAAM,KAAG,SAAS,MAAM,EASjE,CAAC"}
@@ -1,40 +1,44 @@
1
1
  /**
2
2
  * @file fibonacci.ts
3
- * @description BigInt Fibonacci utilities built on a lazy infinite generator.
4
- * Every public function delegates to `fibonacciGenerator` so the core
5
- * recurrence relation lives in exactly one place (DRY). BigInt eliminates
6
- * the precision ceiling that Number hits at fibonacci(78).
3
+ * @description Tuple-based Fibonacci utilities powered by an infinite BigInt generator.
4
+ * BigInt avoids the precision ceiling that Number hits at F(78), where values
5
+ * exceed Number.MAX_SAFE_INTEGER. Every public function derives its values from
6
+ * fibonacciGenerator, keeping the recurrence relation in a single place.
7
7
  * @module utils
8
8
  */
9
9
  /**
10
- * Infinite generator that lazily yields the Fibonacci sequence as BigInts
11
- * @yields {bigint} The next Fibonacci number in the sequence (0n, 1n, 1n, 2n, 3n, …)
12
- * @remarks Each call creates an independent iterator with its own state, so
13
- * multiple consumers can advance through the sequence without interference.
10
+ * Infinite generator yielding the Fibonacci sequence as BigInts.
11
+ *
12
+ * Uses a two-element pair to track consecutive values, yielding the leading
13
+ * element on each iteration and advancing the pair forward. Each call returns
14
+ * an independent iterator, so multiple consumers never interfere.
15
+ *
16
+ * @yields The next Fibonacci number (0n, 1n, 1n, 2n, 3n, 5n, …)
14
17
  * @example
15
18
  * ```typescript
16
19
  * const gen = fibonacciGenerator();
17
20
  * gen.next().value; // 0n
18
21
  * gen.next().value; // 1n
19
- * gen.next().value; // 1n
20
22
  * ```
21
23
  */
22
24
  export function* fibonacciGenerator() {
23
- /* eslint-disable functional/no-let -- generator requires mutable state for iterative Fibonacci computation */
24
- let a = 0n;
25
- let b = 1n;
26
- /* eslint-enable functional/no-let -- re-enable after generator state declarations */
27
- while (true) {
28
- yield a;
29
- [a, b] = [b, a + b];
25
+ /* eslint-disable functional/no-let -- generator requires mutable pair to track consecutive Fibonacci values */
26
+ let pair = [0n, 1n];
27
+ /* eslint-enable functional/no-let -- re-enable after generator state declaration */
28
+ for (;;) {
29
+ yield pair[0];
30
+ pair = [pair[1], pair[0] + pair[1]];
30
31
  }
31
32
  }
32
33
  /**
33
- * Returns the nth Fibonacci number as a BigInt
34
- * @param n - Zero-based index into the Fibonacci sequence (must be a non-negative integer)
35
- * @returns The nth Fibonacci number (e.g. fibonacci(5) 5n)
36
- * @throws {RangeError} When n is negative, non-integer, NaN, or Infinity
37
- * @remarks Delegates to `fibonacciGenerator` so the recurrence logic is defined once.
34
+ * Returns the nth Fibonacci number (0-indexed) as a BigInt.
35
+ *
36
+ * Collects n + 1 values from the generator and returns the final element,
37
+ * delegating the recurrence to fibonacciGenerator for DRY.
38
+ *
39
+ * @param n - Zero-based position in the Fibonacci sequence (non-negative integer)
40
+ * @returns The nth Fibonacci number as a BigInt
41
+ * @throws {RangeError} When n is negative, fractional, NaN, or infinite
38
42
  * @example
39
43
  * ```typescript
40
44
  * fibonacci(0); // 0n
@@ -42,32 +46,34 @@ export function* fibonacciGenerator() {
42
46
  * fibonacci(78); // 8944394323791464n — beyond Number.MAX_SAFE_INTEGER
43
47
  * ```
44
48
  */
45
- export function fibonacci(n) {
49
+ export const fibonacci = (n) => {
46
50
  if (!Number.isFinite(n) || !Number.isInteger(n) || n < 0) {
47
51
  throw new RangeError(`Expected a non-negative integer for n, got ${String(n)}`);
48
52
  }
49
53
  const gen = fibonacciGenerator();
50
- Array.from({ length: n }, () => gen.next());
51
- return gen.next().value;
52
- }
54
+ return Array.from({ length: n + 1 }).reduce(() => gen.next().value, 0n);
55
+ };
53
56
  /**
54
- * Returns the first `length` Fibonacci numbers as a readonly BigInt array
55
- * @param length - How many Fibonacci numbers to return (must be a non-negative integer)
56
- * @returns A new array containing the first `length` Fibonacci numbers
57
- * @throws {RangeError} When length is negative, non-integer, NaN, or Infinity
58
- * @remarks Delegates to `fibonacciGenerator` so the recurrence logic is defined once.
59
- * Returns a fresh array on every call — callers can safely mutate the result.
57
+ * Returns the first `length` Fibonacci numbers as a readonly BigInt array.
58
+ *
59
+ * Spreads an empty array of the requested size and maps each slot to the
60
+ * next generator value, delegating the recurrence to fibonacciGenerator for DRY.
61
+ * Returns a fresh array on every call so callers can safely consume the result.
62
+ *
63
+ * @param length - How many Fibonacci numbers to collect (non-negative integer)
64
+ * @returns A new readonly array of the first `length` Fibonacci numbers
65
+ * @throws {RangeError} When length is negative, fractional, NaN, or infinite
60
66
  * @example
61
67
  * ```typescript
62
68
  * fibonacciSequence(0); // []
63
69
  * fibonacciSequence(5); // [0n, 1n, 1n, 2n, 3n]
64
70
  * ```
65
71
  */
66
- export function fibonacciSequence(length) {
72
+ export const fibonacciSequence = (length) => {
67
73
  if (!Number.isFinite(length) || !Number.isInteger(length) || length < 0) {
68
74
  throw new RangeError(`Expected a non-negative integer for length, got ${String(length)}`);
69
75
  }
70
76
  const gen = fibonacciGenerator();
71
- return Array.from({ length }, () => gen.next().value);
72
- }
77
+ return [...Array(length)].map(() => gen.next().value);
78
+ };
73
79
  //# sourceMappingURL=fibonacci.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fibonacci.js","sourceRoot":"","sources":["../../src/utils/fibonacci.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,SAAS,CAAC,CAAC,kBAAkB;IACjC,8GAA8G;IAC9G,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,qFAAqF;IAErF,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,CAAC,CAAC;QACR,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,UAAU,CAClB,8CAA8C,MAAM,CAAC,CAAC,CAAC,EAAE,CAC1D,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,UAAU,CAClB,mDAAmD,MAAM,CAAC,MAAM,CAAC,EAAE,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"fibonacci.js","sourceRoot":"","sources":["../../src/utils/fibonacci.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,SAAS,CAAC,CAAC,kBAAkB;IACjC,+GAA+G;IAC/G,IAAI,IAAI,GAA8B,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,oFAAoF;IAEpF,SAAS,CAAC;QACR,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE;IAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,UAAU,CAClB,8CAA8C,MAAM,CAAC,CAAC,CAAC,EAAE,CAC1D,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CACzC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,EACtB,EAAE,CACH,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAqB,EAAE;IACrE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,UAAU,CAClB,mDAAmD,MAAM,CAAC,MAAM,CAAC,EAAE,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC,CAAC"}
package/package.json CHANGED
@@ -89,7 +89,7 @@
89
89
  "@isaacs/brace-expansion": "^5.0.1"
90
90
  },
91
91
  "name": "@codyswann/lisa",
92
- "version": "1.38.0",
92
+ "version": "1.39.0",
93
93
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
94
94
  "main": "dist/index.js",
95
95
  "bin": {
@@ -42,4 +42,4 @@ Configuration: .simplecov, update minimum_coverage to $ARGUMENTS%
42
42
  Verification: `bundle exec rspec` -> Expected: SimpleCov reports >= $ARGUMENTS% coverage
43
43
  ```
44
44
 
45
- Invoke `/plan-create` with this brief to create the implementation plan.
45
+ Invoke `/plan-execute` with this brief to create the implementation plan.
@@ -42,4 +42,4 @@ Fix strategies: extract methods, reduce complexity, apply auto-correct where saf
42
42
  Verification: `bundle exec rubocop --format simple 2>&1 | grep -E "($ARGUMENTS)" | wc -l` -> Expected: 0
43
43
  ```
44
44
 
45
- Invoke `/plan-create` with this brief to create the implementation plan.
45
+ Invoke `/plan-execute` with this brief to create the implementation plan.
@@ -45,4 +45,4 @@ Refactoring strategies: extract methods, early returns, extract conditions, use
45
45
  Verification: `bundle exec rubocop --only Metrics/CyclomaticComplexity --format simple 2>&1 | grep "offense" | wc -l` -> Expected: 0
46
46
  ```
47
47
 
48
- Invoke `/plan-create` with this brief to create the implementation plan.
48
+ Invoke `/plan-execute` with this brief to create the implementation plan.
@@ -43,4 +43,4 @@ Refactoring strategies: extract concerns, extract service objects, remove duplic
43
43
  Verification: `bundle exec rubocop --only Metrics/ClassLength,Metrics/ModuleLength --format simple 2>&1 | grep "offense" | wc -l` -> Expected: 0
44
44
  ```
45
45
 
46
- Invoke `/plan-create` with this brief to create the implementation plan.
46
+ Invoke `/plan-execute` with this brief to create the implementation plan.
@@ -43,4 +43,4 @@ Refactoring strategies: extract methods, early returns, extract conditions, use
43
43
  Verification: `bundle exec rubocop --only Metrics/MethodLength --format simple 2>&1 | grep "offense" | wc -l` -> Expected: 0
44
44
  ```
45
45
 
46
- Invoke `/plan-create` with this brief to create the implementation plan.
46
+ Invoke `/plan-execute` with this brief to create the implementation plan.
@@ -85,11 +85,7 @@ elif [ "$PACKAGE_MANAGER" = "bun" ]; then
85
85
  # Parent packages pin ^4.4.1; fix requires major version 5.x (incompatible)
86
86
  # Risk: None - CLI build tool, not a production runtime dependency
87
87
 
88
- # Excluding GHSA-43fc-jf86-j433: axios DoS via __proto__ key in mergeConfig
89
- # Transitive dependency via aws-amplify > @aws-amplify/api-rest > axios
90
- # bun overrides/resolutions cannot reach nested node_modules copies
91
- # Risk: Low - only affects server-side mergeConfig with attacker-controlled input
92
- if ! bun audit --audit-level=high --ignore GHSA-5j98-mcp5-4vw2 --ignore GHSA-8qq5-rm4j-mr97 --ignore GHSA-37qj-frw5-hhjh --ignore GHSA-43fc-jf86-j433; then
88
+ if ! bun audit --audit-level=high --ignore GHSA-5j98-mcp5-4vw2 --ignore GHSA-8qq5-rm4j-mr97 --ignore GHSA-37qj-frw5-hhjh; then
93
89
  echo "⚠️ Security audit failed. Please fix high/critical vulnerabilities before pushing."
94
90
  exit 1
95
91
  fi
@@ -1,13 +1,31 @@
1
1
  {
2
+ "attribution": {
3
+ "commit": "🤖 Generated with Claude Code\n\nCo-Authored-By: Claude",
4
+ "pr": "🤖 Generated with Claude Code"
5
+ },
6
+ "enabledPlugins": {
7
+ "typescript-lsp@claude-plugins-official": true,
8
+ "safety-net@cc-marketplace": true,
9
+ "code-simplifier@claude-plugins-official": true,
10
+ "code-review@claude-plugins-official": true,
11
+ "playwright@claude-plugins-official": true,
12
+ "coderabbit@claude-plugins-official": true
13
+ },
14
+ "env": {
15
+ "BASH_DEFAULT_TIMEOUT_MS": "1800000",
16
+ "BASH_MAX_TIMEOUT_MS": "7200000",
17
+ "CLAUDE_DEBUG": "0",
18
+ "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
19
+ },
2
20
  "hooks": {
3
- "UserPromptSubmit": [
21
+ "Notification": [
4
22
  {
5
- "matcher": "",
23
+ "matcher": "permission_prompt|idle_prompt",
6
24
  "hooks": [
7
25
  {
8
26
  "type": "command",
9
- "command": "echo 'REMINDER: Start your response with \"I'\\''m tired boss\" as required by CLAUDE.md.'",
10
- "timeout": 1
27
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/notify-ntfy.sh",
28
+ "timeout": 5
11
29
  }
12
30
  ]
13
31
  },
@@ -16,11 +34,13 @@
16
34
  "hooks": [
17
35
  {
18
36
  "type": "command",
19
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/enforce-plan-rules.sh",
37
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh",
20
38
  "timeout": 5
21
39
  }
22
40
  ]
23
- },
41
+ }
42
+ ],
43
+ "PermissionRequest": [
24
44
  {
25
45
  "matcher": "",
26
46
  "hooks": [
@@ -32,24 +52,26 @@
32
52
  ]
33
53
  }
34
54
  ],
35
- "SessionStart": [
55
+ "PostToolUse": [
36
56
  {
37
- "matcher": "startup",
57
+ "matcher": "Write|Edit",
38
58
  "hooks": [
39
59
  {
40
60
  "type": "command",
41
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/install_pkgs.sh",
42
- "timeout": 480
61
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/format-on-edit.sh"
62
+ },
63
+ {
64
+ "type": "command",
65
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/sg-scan-on-edit.sh"
43
66
  }
44
67
  ]
45
68
  },
46
69
  {
47
- "matcher": "",
70
+ "matcher": "TaskCreate|TaskUpdate",
48
71
  "hooks": [
49
72
  {
50
73
  "type": "command",
51
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/setup-jira-cli.sh",
52
- "timeout": 5
74
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/sync-tasks.sh"
53
75
  }
54
76
  ]
55
77
  },
@@ -58,13 +80,30 @@
58
80
  "hooks": [
59
81
  {
60
82
  "type": "command",
61
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh",
62
- "timeout": 5
83
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh"
84
+ }
85
+ ]
86
+ },
87
+ {
88
+ "matcher": "Task",
89
+ "hooks": [
90
+ {
91
+ "type": "command",
92
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-task || true"
93
+ }
94
+ ]
95
+ },
96
+ {
97
+ "matcher": "TodoWrite",
98
+ "hooks": [
99
+ {
100
+ "type": "command",
101
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code post-todo || true"
63
102
  }
64
103
  ]
65
104
  }
66
105
  ],
67
- "SessionEnd": [
106
+ "PostToolUseFailure": [
68
107
  {
69
108
  "matcher": "",
70
109
  "hooks": [
@@ -76,7 +115,7 @@
76
115
  ]
77
116
  }
78
117
  ],
79
- "Setup": [
118
+ "PreCompact": [
80
119
  {
81
120
  "matcher": "",
82
121
  "hooks": [
@@ -94,35 +133,42 @@
94
133
  "hooks": [
95
134
  {
96
135
  "type": "command",
97
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh",
98
- "timeout": 5
136
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh"
137
+ }
138
+ ]
139
+ },
140
+ {
141
+ "matcher": "Task",
142
+ "hooks": [
143
+ {
144
+ "type": "command",
145
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code pre-task || true"
99
146
  }
100
147
  ]
101
148
  }
102
149
  ],
103
- "PostToolUse": [
150
+ "SessionEnd": [
104
151
  {
105
- "matcher": "Write|Edit",
152
+ "matcher": "",
106
153
  "hooks": [
107
154
  {
108
155
  "type": "command",
109
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/format-on-edit.sh",
110
- "timeout": 10
156
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh"
111
157
  },
112
158
  {
113
159
  "type": "command",
114
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/sg-scan-on-edit.sh",
115
- "timeout": 30
160
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-end || true"
116
161
  }
117
162
  ]
118
- },
163
+ }
164
+ ],
165
+ "SessionStart": [
119
166
  {
120
- "matcher": "TaskCreate|TaskUpdate",
167
+ "matcher": "startup",
121
168
  "hooks": [
122
169
  {
123
170
  "type": "command",
124
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/sync-tasks.sh",
125
- "timeout": 10
171
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/install-pkgs.sh"
126
172
  }
127
173
  ]
128
174
  },
@@ -131,25 +177,25 @@
131
177
  "hooks": [
132
178
  {
133
179
  "type": "command",
134
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh",
135
- "timeout": 5
180
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/setup-jira-cli.sh"
181
+ },
182
+ {
183
+ "type": "command",
184
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code session-start || true"
136
185
  }
137
186
  ]
138
- }
139
- ],
140
- "PostToolUseFailure": [
187
+ },
141
188
  {
142
189
  "matcher": "",
143
190
  "hooks": [
144
191
  {
145
192
  "type": "command",
146
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh",
147
- "timeout": 5
193
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh"
148
194
  }
149
195
  ]
150
196
  }
151
197
  ],
152
- "PermissionRequest": [
198
+ "Setup": [
153
199
  {
154
200
  "matcher": "",
155
201
  "hooks": [
@@ -161,41 +207,43 @@
161
207
  ]
162
208
  }
163
209
  ],
164
- "SubagentStart": [
210
+ "Stop": [
165
211
  {
166
212
  "matcher": "",
167
213
  "hooks": [
168
214
  {
169
215
  "type": "command",
170
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh",
171
- "timeout": 5
216
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/notify-ntfy.sh"
217
+ },
218
+ {
219
+ "type": "command",
220
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code stop || true"
172
221
  }
173
222
  ]
174
- }
175
- ],
176
- "SubagentStop": [
223
+ },
177
224
  {
178
225
  "matcher": "",
179
226
  "hooks": [
180
227
  {
181
228
  "type": "command",
182
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh",
183
- "timeout": 5
229
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh"
184
230
  }
185
231
  ]
186
232
  }
187
233
  ],
188
- "Notification": [
234
+ "SubagentStart": [
189
235
  {
190
- "matcher": "permission_prompt|idle_prompt",
236
+ "matcher": "",
191
237
  "hooks": [
192
238
  {
193
239
  "type": "command",
194
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/notify-ntfy.sh",
240
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh",
195
241
  "timeout": 5
196
242
  }
197
243
  ]
198
- },
244
+ }
245
+ ],
246
+ "SubagentStop": [
199
247
  {
200
248
  "matcher": "",
201
249
  "hooks": [
@@ -207,14 +255,17 @@
207
255
  ]
208
256
  }
209
257
  ],
210
- "Stop": [
258
+ "UserPromptSubmit": [
211
259
  {
212
260
  "matcher": "",
213
261
  "hooks": [
214
262
  {
215
263
  "type": "command",
216
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/notify-ntfy.sh",
217
- "timeout": 5
264
+ "command": "echo 'REMINDER: Start your response with \"I'\\''m tired boss\" as required by CLAUDE.md.'"
265
+ },
266
+ {
267
+ "type": "command",
268
+ "command": "command -v entire >/dev/null 2>&1 && entire hooks claude-code user-prompt-submit || true"
218
269
  }
219
270
  ]
220
271
  },
@@ -223,42 +274,25 @@
223
274
  "hooks": [
224
275
  {
225
276
  "type": "command",
226
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh",
227
- "timeout": 5
277
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/enforce-plan-rules.sh"
228
278
  }
229
279
  ]
230
- }
231
- ],
232
- "PreCompact": [
280
+ },
233
281
  {
234
282
  "matcher": "",
235
283
  "hooks": [
236
284
  {
237
285
  "type": "command",
238
- "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh",
239
- "timeout": 5
286
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/debug-hook.sh"
240
287
  }
241
288
  ]
242
289
  }
243
290
  ]
244
291
  },
245
- "env": {
246
- "BASH_DEFAULT_TIMEOUT_MS": "1800000",
247
- "BASH_MAX_TIMEOUT_MS": "7200000",
248
- "CLAUDE_DEBUG": "0",
249
- "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
250
- },
251
- "attribution": {
252
- "commit": "🤖 Generated with Claude Code\n\nCo-Authored-By: Claude",
253
- "pr": "🤖 Generated with Claude Code"
292
+ "permissions": {
293
+ "deny": [
294
+ "Read(./.entire/metadata/**)"
295
+ ]
254
296
  },
255
- "plansDirectory": "./plans",
256
- "enabledPlugins": {
257
- "typescript-lsp@claude-plugins-official": true,
258
- "safety-net@cc-marketplace": true,
259
- "code-simplifier@claude-plugins-official": true,
260
- "code-review@claude-plugins-official": true,
261
- "playwright@claude-plugins-official": true,
262
- "coderabbit@claude-plugins-official": true
263
- }
264
- }
297
+ "plansDirectory": "./plans"
298
+ }