@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.
Files changed (61) hide show
  1. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  2. package/dist/core/upstream-evidence-manifest.js +3 -2
  3. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  4. package/package.json +1 -1
  5. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  6. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  7. package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +20 -9
  8. package/plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +20 -9
  9. package/plugins/lisa-agy/plugin.json +1 -1
  10. package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +20 -9
  11. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  13. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  14. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +20 -9
  18. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +20 -9
  20. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  22. package/plugins/lisa-expo-agy/plugin.json +1 -1
  23. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  27. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  28. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  32. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  33. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  37. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  38. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  42. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  43. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  47. package/plugins/lisa-rails-agy/plugin.json +1 -1
  48. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  52. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  53. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  57. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  58. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/src/base/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +20 -9
  61. package/scripts/lisa-remote-env/setup.sh +74 -5
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.322.1",
3
+ "version": "2.322.2",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.322.1",
3
+ "version": "2.322.2",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.322.1",
3
+ "version": "2.322.2",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.322.1",
3
+ "version": "2.322.2",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.322.1",
3
+ "version": "2.322.2",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.322.1",
3
+ "version": "2.322.2",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.322.1",
3
+ "version": "2.322.2",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -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. Claude Code web runs
305
- * this field from `$HOME` while the checkout sits one level down, so the glob
306
- * locates the script; the script then anchors itself on the repository root and
307
- * installs dependencies from whichever lockfile the project commits.
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
- * A field that named both was a string a human had to get right, in a settings
310
- * box with no review, no version history and no test and the logic it encoded
311
- * belongs in a file that has all three.
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 = `bash "$HOME"/*/scripts/lisa-remote-env/setup.sh`;
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. Fail with an actionable message rather than a
18
- # "command not found" forty lines deep.
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 "Install dependencies before this script runs. The environment's setup" >&2
61
- echo "command should be the install and this script together, for example:" >&2
62
- echo " bun install && bash scripts/lisa-remote-env/setup.sh" >&2
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