@codyswann/lisa 4.31.1 → 4.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cdk/create-only/stryker.conf.json +44 -0
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +22 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +18 -2
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +4 -4
- package/plugins/lisa/.claude-plugin/plugin.json +19 -1
- package/plugins/lisa/.codex-plugin/hooks.json +18 -0
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/hooks/inject-resolved-config.mjs +669 -0
- package/plugins/lisa/hooks/inject-resolved-config.sh +48 -0
- package/plugins/lisa/rules/eager/config-resolution.md +8 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +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 +10 -1
- package/plugins/lisa-copilot/hooks/inject-resolved-config.mjs +669 -0
- package/plugins/lisa-copilot/hooks/inject-resolved-config.sh +48 -0
- package/plugins/lisa-copilot/rules/eager/config-resolution.md +8 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/hooks.json +6 -0
- package/plugins/lisa-cursor/hooks/inject-resolved-config.mjs +669 -0
- package/plugins/lisa-cursor/hooks/inject-resolved-config.sh +48 -0
- package/plugins/lisa-cursor/rules/config-resolution.mdc +8 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +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-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/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 +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-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 +1 -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-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 +1 -1
- 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/.claude-plugin/plugin.json +18 -0
- package/plugins/src/base/hooks/inject-resolved-config.mjs +669 -0
- package/plugins/src/base/hooks/inject-resolved-config.sh +48 -0
- package/plugins/src/base/rules/eager/config-resolution.md +8 -1
- package/scripts/lib/per-agent-hook-filter.mjs +20 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# SessionStart / SubagentStart: put the RESOLVED Lisa configuration in front of
|
|
3
|
+
# the agent, so reading it is not a decision anyone can decline to make.
|
|
4
|
+
#
|
|
5
|
+
# `inject-rules.sh` beside this file injects RULE TEXT. Nothing injected the
|
|
6
|
+
# resolved VALUES, so an agent received a paragraph saying that configuration
|
|
7
|
+
# lives in a file and then had to decide, unprompted, to go read it. That
|
|
8
|
+
# decision is the step that gets skipped, and it is why projects keep "missing"
|
|
9
|
+
# a `.lisa.config.json` that is present and correct. An agent cannot skip
|
|
10
|
+
# reading what is already in its context.
|
|
11
|
+
#
|
|
12
|
+
# All the work — resolving `.lisa.config.local.json` over `.lisa.config.json`,
|
|
13
|
+
# marking built-in defaults, redacting identity, bounding the output — lives in
|
|
14
|
+
# the sibling `.mjs`, which is unit-tested. This wrapper only resolves the
|
|
15
|
+
# project root and hands stdin through.
|
|
16
|
+
#
|
|
17
|
+
# FAIL SOFT, ALWAYS. Every exit is 0 and every failure is silent. The right
|
|
18
|
+
# response to "node is missing" or "the renderer crashed" is a session that
|
|
19
|
+
# starts without this block, never a session that does not start. The hard
|
|
20
|
+
# reading of the same config lives where it can afford to be hard: the gate
|
|
21
|
+
# runner refuses a config it cannot read, and `lisa doctor` exits non-zero.
|
|
22
|
+
#
|
|
23
|
+
# Note the ONE case that is emphatically not silent: a config that exists and
|
|
24
|
+
# is malformed emits a block saying so. Staying quiet there would report a
|
|
25
|
+
# broken project as an unconfigured one, which is the invisible-gap failure
|
|
26
|
+
# this hook exists to remove.
|
|
27
|
+
set -uo pipefail
|
|
28
|
+
|
|
29
|
+
INPUT=$(cat 2>/dev/null || true)
|
|
30
|
+
|
|
31
|
+
ROOT="${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}}"
|
|
32
|
+
RENDERER="$ROOT/hooks/inject-resolved-config.mjs"
|
|
33
|
+
|
|
34
|
+
[ -f "$RENDERER" ] || exit 0
|
|
35
|
+
command -v node >/dev/null 2>&1 || exit 0
|
|
36
|
+
|
|
37
|
+
# CLAUDE_PROJECT_DIR is the harness's own declaration of the root and is the
|
|
38
|
+
# only source that stays correct when the session's cwd has moved. Falling back
|
|
39
|
+
# to the git toplevel before $PWD matters for the same reason: config lives at
|
|
40
|
+
# the repo root, and a hook that reads the cwd reports "unconfigured" from any
|
|
41
|
+
# subdirectory (the defect fixed for setup-jira-cli in CodySwannGT/lisa#2768).
|
|
42
|
+
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-}"
|
|
43
|
+
if [ -z "${PROJECT_DIR}" ] || [ ! -d "${PROJECT_DIR}" ]; then
|
|
44
|
+
PROJECT_DIR="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
printf '%s' "$INPUT" | node "$RENDERER" --project-dir "$PROJECT_DIR" || true
|
|
48
|
+
exit 0
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# Config Resolution (load-bearing)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**The resolved configuration is already in your context.** `inject-resolved-config.sh` runs at every session and subagent start and injects the EFFECTIVE values — `.lisa.config.local.json` already merged over `.lisa.config.json` — inside a `<lisa-resolved-config>` block, marking anything that is a Lisa built-in rather than something this project declared. Read the values there and act on them; do not re-derive them from the files, and do not act against them.
|
|
4
|
+
|
|
5
|
+
That block replaces the paragraph that used to sit here saying where configuration lives and which file wins. Restating it is what nine eager rules were already doing while agents acted against a config they never opened; if the block is ever missing, the two files are the source and the local one wins where they overlap.
|
|
6
|
+
|
|
7
|
+
Two things the block deliberately does not carry, so they stay here:
|
|
8
|
+
|
|
9
|
+
- **Writing identity.** Developer-specific identity (`atlassian.email`, etc.) MUST go in the local file, never the committed one. The injected block omits identity entirely, so it will never show you that this is broken.
|
|
10
|
+
- **Everything below**, which is behaviour keyed off config rather than the values themselves.
|
|
4
11
|
|
|
5
12
|
## Atlassian access — assistant-level rule
|
|
6
13
|
|
|
@@ -102,6 +102,26 @@ const SCRIPT_RULES = {
|
|
|
102
102
|
agy: false, // no full rules tree on agy; AGENTS.md carries only bounded bridges
|
|
103
103
|
copilot: true, // conservative default; conditionally stripped if rules-auto-load probe positive
|
|
104
104
|
},
|
|
105
|
+
// Ships wherever the agent has a session-start event, on the same reasoning
|
|
106
|
+
// as `secrets-preflight.sh` and NOT on `inject-rules.sh`'s. Cursor strips
|
|
107
|
+
// rule injection because rules are also delivered as native `rules/*.mdc`, so
|
|
108
|
+
// injecting would double-deliver; a RESOLVED CONFIG has no second delivery
|
|
109
|
+
// path on any agent — it is computed per session from two files on disk and
|
|
110
|
+
// is never emitted as a static artifact — so that reason does not transfer
|
|
111
|
+
// and Cursor gets it.
|
|
112
|
+
//
|
|
113
|
+
// Documented gap: agy has no SessionStart event at all, so agy sessions get
|
|
114
|
+
// no injected config. The compensating rung is the same one AGENTS.md
|
|
115
|
+
// requires when a harness cannot represent a control — shared rather than
|
|
116
|
+
// agent-layer: the gate runner refuses a config it cannot read, and
|
|
117
|
+
// `lisa doctor` exits non-zero on a broken one, on every agent.
|
|
118
|
+
"inject-resolved-config.sh": {
|
|
119
|
+
claude: true,
|
|
120
|
+
codex: true,
|
|
121
|
+
cursor: true,
|
|
122
|
+
agy: false,
|
|
123
|
+
copilot: true,
|
|
124
|
+
},
|
|
105
125
|
"inject-flow-context.sh": {
|
|
106
126
|
claude: true,
|
|
107
127
|
codex: true,
|