@codyswann/lisa 2.322.1 → 2.322.2
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/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +3 -2
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +20 -9
- package/plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +20 -9
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +20 -9
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +20 -9
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +20 -9
- 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/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +20 -9
- package/scripts/lisa-remote-env/setup.sh +74 -5
|
@@ -299,18 +299,29 @@ export function installAssets(cwd = process.cwd()) {
|
|
|
299
299
|
}
|
|
300
300
|
|
|
301
301
|
/**
|
|
302
|
-
* The setup field, identical for every project.
|
|
302
|
+
* The setup field, identical for every project and every surface.
|
|
303
303
|
*
|
|
304
|
-
* Names neither the repository nor its package manager
|
|
305
|
-
*
|
|
306
|
-
*
|
|
307
|
-
*
|
|
304
|
+
* Names neither the repository nor its package manager, and deliberately not
|
|
305
|
+
* `$HOME` either: the surfaces disagree about where the field runs. Codex Cloud
|
|
306
|
+
* runs it inside the checkout, Claude Code web runs it from `$HOME` with the
|
|
307
|
+
* checkout one level down, and on Codex Cloud the checkout is not under `$HOME`
|
|
308
|
+
* at all — so a `$HOME` glob matched nothing there and bash was handed a path
|
|
309
|
+
* still containing a literal asterisk.
|
|
308
310
|
*
|
|
309
|
-
*
|
|
310
|
-
*
|
|
311
|
-
*
|
|
311
|
+
* Both candidates are therefore tried relative to cwd. `exec` on the first hit
|
|
312
|
+
* avoids a subshell and avoids parsing `ls`; the explicit `exit 1` means a
|
|
313
|
+
* missing entrypoint says so rather than the field quietly succeeding. The
|
|
314
|
+
* script then anchors itself on the repository root and installs dependencies
|
|
315
|
+
* from whichever lockfile the project commits.
|
|
316
|
+
*
|
|
317
|
+
* A field that named the repository and package manager was a string a human
|
|
318
|
+
* had to get right, in a settings box with no review, no version history and no
|
|
319
|
+
* test — and the logic it encoded belongs in a file that has all three.
|
|
312
320
|
*/
|
|
313
|
-
const SETUP_FIELD =
|
|
321
|
+
export const SETUP_FIELD =
|
|
322
|
+
"for f in scripts/lisa-remote-env/setup.sh */scripts/lisa-remote-env/setup.sh; " +
|
|
323
|
+
'do [ -f "$f" ] && exec bash "$f"; done; ' +
|
|
324
|
+
'echo "lisa-remote-env entrypoint not found under $PWD" >&2; exit 1';
|
|
314
325
|
|
|
315
326
|
/**
|
|
316
327
|
* The settings block that wires the session-start hook into a repository.
|
|
@@ -13,9 +13,21 @@
|
|
|
13
13
|
# and emphatically not in a vendor settings field.
|
|
14
14
|
set -euo pipefail
|
|
15
15
|
|
|
16
|
+
# Claude Code web runs the environment setup field from $HOME, while the
|
|
17
|
+
# checkout lives at $HOME/<repo>. If this installed copy is invoked by absolute
|
|
18
|
+
# path, move back to the repository root before resolving project-local files.
|
|
19
|
+
script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
|
|
20
|
+
case "$script_dir" in
|
|
21
|
+
*/scripts/lisa-remote-env)
|
|
22
|
+
cd "$script_dir/../.."
|
|
23
|
+
;;
|
|
24
|
+
esac
|
|
25
|
+
|
|
16
26
|
# Node is the one thing that cannot be installed by the installer, since the
|
|
17
|
-
# installer is written in it.
|
|
18
|
-
#
|
|
27
|
+
# installer is written in it. Checked before the dependency install rather than
|
|
28
|
+
# after: every package manager below is itself a node program, so a missing node
|
|
29
|
+
# would otherwise surface as that manager failing under `set -e`, and the script
|
|
30
|
+
# would exit on a confusing error instead of this actionable one.
|
|
19
31
|
if ! command -v node >/dev/null 2>&1; then
|
|
20
32
|
echo "node is required to prepare this environment but is not present." >&2
|
|
21
33
|
echo "It cannot be installed by the toolchain step, because that step runs" >&2
|
|
@@ -23,6 +35,62 @@ if ! command -v node >/dev/null 2>&1; then
|
|
|
23
35
|
exit 1
|
|
24
36
|
fi
|
|
25
37
|
|
|
38
|
+
# Install the project's dependencies, unless the caller already did.
|
|
39
|
+
#
|
|
40
|
+
# This lives here rather than in the vendor's settings field so that field can
|
|
41
|
+
# be one identical line for every project. Naming the package manager there
|
|
42
|
+
# meant a Claude environment for an npm project and one for a bun project
|
|
43
|
+
# differed by a string a human had to get right, in a box with no review, no
|
|
44
|
+
# version history, and no test.
|
|
45
|
+
#
|
|
46
|
+
# Which manager is decided by the lockfile that is actually committed, never
|
|
47
|
+
# guessed: a guessed one fails on the container's first command with an error
|
|
48
|
+
# blaming the project rather than the guess.
|
|
49
|
+
#
|
|
50
|
+
# Skipped when node_modules already exists, which is what makes this cheap on a
|
|
51
|
+
# resumed container and correct to run twice.
|
|
52
|
+
if [ "${LISA_SKIP_INSTALL:-}" != "1" ] && [ ! -d node_modules ]; then
|
|
53
|
+
if [ -f bun.lock ] || [ -f bun.lockb ]; then install_cmd="bun install"
|
|
54
|
+
elif [ -f pnpm-lock.yaml ]; then install_cmd="pnpm install --frozen-lockfile"
|
|
55
|
+
elif [ -f yarn.lock ]; then
|
|
56
|
+
# Yarn Classic and Berry spell the same intent differently, and each
|
|
57
|
+
# rejects the other's flag. The lockfile itself says which is in use:
|
|
58
|
+
# Yarn 1 writes a "# yarn lockfile v1" header, Berry does not.
|
|
59
|
+
if head -5 yarn.lock | grep -q "yarn lockfile v1"; then
|
|
60
|
+
install_cmd="yarn install --frozen-lockfile"
|
|
61
|
+
else
|
|
62
|
+
install_cmd="yarn install --immutable"
|
|
63
|
+
fi
|
|
64
|
+
elif [ -f package-lock.json ]; then install_cmd="npm ci"
|
|
65
|
+
else install_cmd=""
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
if [ -n "$install_cmd" ]; then
|
|
69
|
+
echo "Installing dependencies with: $install_cmd"
|
|
70
|
+
# CI=1 so lifecycle scripts take their automation path and leave the
|
|
71
|
+
# checkout alone. A remote-env setup is automation by definition, and a
|
|
72
|
+
# postinstall that rewrites tracked files here breaks any skill with a
|
|
73
|
+
# clean-checkout precondition — which the publishing skills have, because
|
|
74
|
+
# their diff is contractually bounded and merged without human review.
|
|
75
|
+
#
|
|
76
|
+
# Lisa's own postinstall already guards on exactly this variable, so this
|
|
77
|
+
# is an existing convention rather than a new one.
|
|
78
|
+
#
|
|
79
|
+
# NOT --ignore-scripts: that would also stop patch-package, so a project
|
|
80
|
+
# relying on patched dependencies would silently get unpatched ones — a
|
|
81
|
+
# quieter failure than the one being fixed.
|
|
82
|
+
#
|
|
83
|
+
# Without it the bug is cache-dependent, not deterministic: a fresh
|
|
84
|
+
# container installs and dirties the tree, a resumed one skips the install
|
|
85
|
+
# and succeeds. That reads as flakiness rather than a cause.
|
|
86
|
+
CI=1 $install_cmd
|
|
87
|
+
else
|
|
88
|
+
# Not fatal on its own. A project may carry no lockfile and still have the
|
|
89
|
+
# skill in a checkout directory, so let the resolver below decide.
|
|
90
|
+
echo "No lockfile found; skipping dependency install." >&2
|
|
91
|
+
fi
|
|
92
|
+
fi
|
|
93
|
+
|
|
26
94
|
# Where the skill lives depends on how this project's harness receives it, and
|
|
27
95
|
# the two delivery models differ in a way that matters here.
|
|
28
96
|
#
|
|
@@ -57,9 +125,10 @@ if [ -z "$runner" ]; then
|
|
|
57
125
|
echo "yet: Claude and Codex receive Lisa skills as an installed plugin, which" >&2
|
|
58
126
|
echo "is not part of a clone, so node_modules is the only copy present." >&2
|
|
59
127
|
echo >&2
|
|
60
|
-
echo "
|
|
61
|
-
echo "
|
|
62
|
-
echo "
|
|
128
|
+
echo "This script installs dependencies itself, so reaching here means the" >&2
|
|
129
|
+
echo "install did not produce the package, or the project has no lockfile" >&2
|
|
130
|
+
echo "identifying its package manager. Check that @codyswann/lisa is a" >&2
|
|
131
|
+
echo "dependency and that a lockfile is committed." >&2
|
|
63
132
|
echo >&2
|
|
64
133
|
echo "If dependencies are installed, run 'lisa apply' so the skills are" >&2
|
|
65
134
|
echo "present, then re-run setup." >&2
|