@codyswann/lisa 2.317.3 → 2.317.5
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 +6 -5
- 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-secrets-access/SKILL.md +7 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-aws/SKILL.md +32 -7
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/SKILL.md +20 -7
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/assets/setup.sh +29 -5
- package/plugins/lisa/scripts/remote-agent-aws-setup.sh +8 -2
- package/plugins/lisa/skills/lisa-secrets-access/SKILL.md +7 -0
- package/plugins/lisa/skills/lisa-setup-remote-aws/SKILL.md +32 -7
- package/plugins/lisa/skills/lisa-setup-remote-env/SKILL.md +20 -7
- package/plugins/lisa/skills/lisa-setup-remote-env/assets/setup.sh +29 -5
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/scripts/remote-agent-aws-setup.sh +8 -2
- package/plugins/lisa-agy/skills/lisa-secrets-access/SKILL.md +7 -0
- package/plugins/lisa-agy/skills/lisa-setup-remote-aws/SKILL.md +32 -7
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/SKILL.md +20 -7
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/assets/setup.sh +29 -5
- 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/scripts/remote-agent-aws-setup.sh +8 -2
- package/plugins/lisa-copilot/skills/lisa-secrets-access/SKILL.md +7 -0
- package/plugins/lisa-copilot/skills/lisa-setup-remote-aws/SKILL.md +32 -7
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/SKILL.md +20 -7
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/assets/setup.sh +29 -5
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/scripts/remote-agent-aws-setup.sh +8 -2
- package/plugins/lisa-cursor/skills/lisa-secrets-access/SKILL.md +7 -0
- package/plugins/lisa-cursor/skills/lisa-setup-remote-aws/SKILL.md +32 -7
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/SKILL.md +20 -7
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/assets/setup.sh +29 -5
- 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/scripts/remote-agent-aws-setup.sh +8 -2
- package/plugins/src/base/skills/lisa-secrets-access/SKILL.md +7 -0
- package/plugins/src/base/skills/lisa-setup-remote-aws/SKILL.md +32 -7
- package/plugins/src/base/skills/lisa-setup-remote-env/SKILL.md +20 -7
- package/plugins/src/base/skills/lisa-setup-remote-env/assets/setup.sh +29 -5
|
@@ -3,8 +3,14 @@
|
|
|
3
3
|
# source copied into every generated Lisa agent plugin.
|
|
4
4
|
#
|
|
5
5
|
# Required secret:
|
|
6
|
-
# LISA_AWS_BOOTSTRAP_JSON
|
|
7
|
-
#
|
|
6
|
+
# LISA_AWS_BOOTSTRAP_JSON The complete remote-agent bootstrap bundle, as one
|
|
7
|
+
# JSON value. cdkstarter's IAM kit emits it, but this
|
|
8
|
+
# script neither knows nor cares which store it came
|
|
9
|
+
# from — resolve it through lisa-secrets-access like
|
|
10
|
+
# any other secret. Note that a project whose
|
|
11
|
+
# provider is AWS Secrets Manager cannot keep it
|
|
12
|
+
# there: reading it would need the very credential it
|
|
13
|
+
# contains.
|
|
8
14
|
# Optional plain variables:
|
|
9
15
|
# LISA_REMOTE_AGENT claude | codex | cursor | copilot | agy | opencode
|
|
10
16
|
# LISA_AWS_DEFAULT_PROFILE Defaults to dev, then the first available profile.
|
|
@@ -198,6 +198,13 @@ Values never enter that process, so its output cannot leak one even if logged.
|
|
|
198
198
|
| `aws` | `aws secretsmanager get-secret-value --secret-id <name>` | not implemented |
|
|
199
199
|
| `vault` | `vault kv get -field=<name> <path>` | not implemented |
|
|
200
200
|
|
|
201
|
+
**A provider cannot hold its own bootstrap.** With `provider: "aws"`, reading any
|
|
202
|
+
secret needs AWS credentials — so the AWS bootstrap bundle
|
|
203
|
+
(`LISA_AWS_BOOTSTRAP_JSON`, see `lisa-setup-remote-aws`) cannot live there:
|
|
204
|
+
resolving it would require the very credential it contains. Keep that one in a
|
|
205
|
+
different provider. The same applies to any provider whose own access key is a
|
|
206
|
+
secret you would otherwise store inside it.
|
|
207
|
+
|
|
201
208
|
Unimplemented providers fail with a message naming where to add them, rather than failing obscurely. Do not claim support that does not exist.
|
|
202
209
|
|
|
203
210
|
Cache **in-process only**. Never write a resolved value to disk except through the materialization contract above.
|
|
@@ -30,16 +30,41 @@ Install the vendor-neutral AWS bootstrap into the current repository.
|
|
|
30
30
|
`.github/workflows/copilot-setup-steps.yml`; and it always writes
|
|
31
31
|
`docs/remote-agent-aws.md`.
|
|
32
32
|
4. Run `bash -n scripts/remote-agent-aws-setup.sh`.
|
|
33
|
-
5. Never write or request the actual bootstrap
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
configure a different name. Pass that name with `--secret-name` so the
|
|
39
|
-
generated runbook contains the exact retrieval command.
|
|
33
|
+
5. Never write or request the actual bootstrap bundle in repository files. Tell
|
|
34
|
+
the operator where to obtain it and where to put it — see **Where the bundle
|
|
35
|
+
lives** below. Pass `--secret-name` when the source names it something other
|
|
36
|
+
than `remote-agent-credentials`, so the generated runbook contains the exact
|
|
37
|
+
retrieval command.
|
|
40
38
|
6. Report the external step that remains: configure that one secret in the
|
|
41
39
|
remote environment and launch a smoke session.
|
|
42
40
|
|
|
41
|
+
## Where the bundle lives
|
|
42
|
+
|
|
43
|
+
`LISA_AWS_BOOTSTRAP_JSON` is **just another secret**, and it belongs wherever
|
|
44
|
+
the project keeps its secrets — resolved through `lisa-secrets-access` like
|
|
45
|
+
everything else. It is not tied to any one store.
|
|
46
|
+
|
|
47
|
+
Whoever provisions the IAM user emits the bundle somewhere. `cdkstarter` writes
|
|
48
|
+
it to AWS Secrets Manager as `remote-agent-credentials`, but that is where it is
|
|
49
|
+
*emitted*, not where it must *live*. Copy it once into the project's configured
|
|
50
|
+
provider and read it from there.
|
|
51
|
+
|
|
52
|
+
**Do not keep it in two stores.** A bundle sitting in Secrets Manager *and* in
|
|
53
|
+
the platform's secret store is two live copies of one credential: rotate the
|
|
54
|
+
IAM key and whichever copy you forget keeps authenticating until it doesn't,
|
|
55
|
+
with nothing to say which is current. That is the drift the single-store rule in
|
|
56
|
+
`lisa-secrets-access` exists to prevent, and this credential is not exempt.
|
|
57
|
+
|
|
58
|
+
**One provider cannot serve this particular secret.** If `secrets.provider` is
|
|
59
|
+
`aws`, reading the bundle requires AWS credentials — and the bundle *is* the AWS
|
|
60
|
+
credential. Anything else works: Bitwarden, 1Password, Doppler, Vault, or a
|
|
61
|
+
platform secret store. Pick the one that is not the thing being bootstrapped.
|
|
62
|
+
|
|
63
|
+
On a surface that materializes (see `lisa-secrets-access`), the bundle arrives
|
|
64
|
+
in `secrets.env` with everything else, so the project hook can run this setup
|
|
65
|
+
script after materialization with no extra plumbing. On a surface that reads
|
|
66
|
+
through live, resolve it at the point of use.
|
|
67
|
+
|
|
43
68
|
## Contract
|
|
44
69
|
|
|
45
70
|
A future coding agent is supported without an AWS change when its remote
|
|
@@ -10,17 +10,27 @@ Prepare a remote surface so a host project can execute there. Today that means *
|
|
|
10
10
|
|
|
11
11
|
## What lives where
|
|
12
12
|
|
|
13
|
-
The remote environment's own configuration fields stay **
|
|
13
|
+
The remote environment's own configuration fields stay **one line into the repository, preceded by the project's dependency install**. Nothing else is pasted into a vendor UI.
|
|
14
14
|
|
|
15
15
|
```text
|
|
16
|
-
setup: bash scripts/lisa-remote-env/setup.sh
|
|
17
|
-
maintenance: bash scripts/lisa-remote-env/setup.sh
|
|
16
|
+
setup: <install> && bash scripts/lisa-remote-env/setup.sh
|
|
17
|
+
maintenance: <install> && bash scripts/lisa-remote-env/setup.sh
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
`<install>` is whatever the project already uses — `bun install`, `npm ci`, `pnpm install`. Substitute it; do not invent one.
|
|
21
|
+
|
|
22
|
+
They are the same command. A container may be built fresh or resumed from cache; every step is idempotent and version-aware, so running it twice is correct, and running it on resume is what picks up a rotated value, an edited note, or a changed version pin.
|
|
21
23
|
|
|
22
24
|
The complete logic is repository-owned so it is reviewed, versioned, tested, and reusable. A large inline installer in a settings field is none of those things.
|
|
23
25
|
|
|
26
|
+
### Why the install has to come first
|
|
27
|
+
|
|
28
|
+
**A clone does not contain the skills on the harnesses that matter here.** OpenCode and Antigravity have them written into the checkout by `lisa apply`. Claude and Codex receive them as an *installed plugin*, which lives in the user's home directory — so a container that has just cloned the repository has never seen it.
|
|
29
|
+
|
|
30
|
+
`node_modules/@codyswann/lisa` is therefore the only copy present on a fresh container, and it is a good one: it is the version that project pins, which is the version its setup should run. The entrypoint searches the agent directories first and falls back to it.
|
|
31
|
+
|
|
32
|
+
Omitting the install does not degrade gracefully. The entrypoint exits before the toolchain, secrets, and hook phases have done anything, so the environment looks provisioned and fails on first dispatch.
|
|
33
|
+
|
|
24
34
|
## The three phases
|
|
25
35
|
|
|
26
36
|
1. **Toolchain** — assert what must already be present, install what is not.
|
|
@@ -110,8 +120,11 @@ When emitting, produce exactly:
|
|
|
110
120
|
```text
|
|
111
121
|
Environment name: <project> remote executor
|
|
112
122
|
Repository: <org>/<repo> (must be the default checkout)
|
|
113
|
-
Setup script: bash scripts/lisa-remote-env/setup.sh
|
|
114
|
-
Maintenance: bash scripts/lisa-remote-env/setup.sh
|
|
123
|
+
Setup script: <install> && bash scripts/lisa-remote-env/setup.sh
|
|
124
|
+
Maintenance: <install> && bash scripts/lisa-remote-env/setup.sh
|
|
125
|
+
(<install> is the project's own: bun install, npm ci, ...
|
|
126
|
+
It must precede the script — on a fresh container
|
|
127
|
+
node_modules is the only copy of the skills present.)
|
|
115
128
|
Environment vars: LISA_SECRETS_SURFACE=codex-cloud
|
|
116
129
|
BWS_ACCESS_TOKEN=<from the provider; an environment
|
|
117
130
|
variable, not a task secret — setup and cache-resume
|
|
@@ -136,7 +149,7 @@ Checked when setup runs, not at 3am:
|
|
|
136
149
|
|
|
137
150
|
- the environment exists and is bound to **this** repository as its default checkout;
|
|
138
151
|
- the bootstrap credential resolves;
|
|
139
|
-
- Lisa
|
|
152
|
+
- either a checkout-local Lisa skill is present, or the project dependency install has made the pinned `@codyswann/lisa` package available under `node_modules`.
|
|
140
153
|
|
|
141
154
|
Fail with a message naming what is missing. Never provision-and-hope.
|
|
142
155
|
|
|
@@ -23,13 +23,26 @@ if ! command -v node >/dev/null 2>&1; then
|
|
|
23
23
|
exit 1
|
|
24
24
|
fi
|
|
25
25
|
|
|
26
|
-
#
|
|
27
|
-
#
|
|
26
|
+
# Where the skill lives depends on how this project's harness receives it, and
|
|
27
|
+
# the two delivery models differ in a way that matters here.
|
|
28
|
+
#
|
|
29
|
+
# OpenCode and Antigravity get skills written INTO the checkout by `lisa apply`,
|
|
30
|
+
# so a clone already carries them. Claude and Codex receive them as an installed
|
|
31
|
+
# plugin, which lives in the user's home directory and is emphatically NOT part
|
|
32
|
+
# of a clone. A fresh remote container is the second case every time: it clones
|
|
33
|
+
# the repository and has never run a plugin install.
|
|
34
|
+
#
|
|
35
|
+
# So the agent directories are searched first — they are the cheapest hit and
|
|
36
|
+
# need nothing installed — and the npm package is the fallback that makes the
|
|
37
|
+
# plugin-delivered harnesses work at all. Lisa is a dependency of every project
|
|
38
|
+
# it is applied to, so `node_modules` carries the same skill at the version that
|
|
39
|
+
# project pins, which is the version its setup should run.
|
|
28
40
|
runner=""
|
|
29
41
|
for candidate in \
|
|
30
42
|
".claude/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs" \
|
|
31
43
|
".agents/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs" \
|
|
32
|
-
".codex/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs"
|
|
44
|
+
".codex/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs" \
|
|
45
|
+
"node_modules/@codyswann/lisa/plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs"; do
|
|
33
46
|
if [ -f "$candidate" ]; then
|
|
34
47
|
runner="$candidate"
|
|
35
48
|
break
|
|
@@ -37,8 +50,19 @@ for candidate in \
|
|
|
37
50
|
done
|
|
38
51
|
|
|
39
52
|
if [ -z "$runner" ]; then
|
|
40
|
-
echo "Cannot find the lisa-setup-remote-env skill
|
|
41
|
-
echo
|
|
53
|
+
echo "Cannot find the lisa-setup-remote-env skill." >&2
|
|
54
|
+
echo >&2
|
|
55
|
+
echo "Searched the agent skill directories and node_modules. On a remote" >&2
|
|
56
|
+
echo "container the usual cause is that dependencies have not been installed" >&2
|
|
57
|
+
echo "yet: Claude and Codex receive Lisa skills as an installed plugin, which" >&2
|
|
58
|
+
echo "is not part of a clone, so node_modules is the only copy present." >&2
|
|
59
|
+
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
|
|
63
|
+
echo >&2
|
|
64
|
+
echo "If dependencies are installed, run 'lisa apply' so the skills are" >&2
|
|
65
|
+
echo "present, then re-run setup." >&2
|
|
42
66
|
exit 1
|
|
43
67
|
fi
|
|
44
68
|
|
|
@@ -3,8 +3,14 @@
|
|
|
3
3
|
# source copied into every generated Lisa agent plugin.
|
|
4
4
|
#
|
|
5
5
|
# Required secret:
|
|
6
|
-
# LISA_AWS_BOOTSTRAP_JSON
|
|
7
|
-
#
|
|
6
|
+
# LISA_AWS_BOOTSTRAP_JSON The complete remote-agent bootstrap bundle, as one
|
|
7
|
+
# JSON value. cdkstarter's IAM kit emits it, but this
|
|
8
|
+
# script neither knows nor cares which store it came
|
|
9
|
+
# from — resolve it through lisa-secrets-access like
|
|
10
|
+
# any other secret. Note that a project whose
|
|
11
|
+
# provider is AWS Secrets Manager cannot keep it
|
|
12
|
+
# there: reading it would need the very credential it
|
|
13
|
+
# contains.
|
|
8
14
|
# Optional plain variables:
|
|
9
15
|
# LISA_REMOTE_AGENT claude | codex | cursor | copilot | agy | opencode
|
|
10
16
|
# LISA_AWS_DEFAULT_PROFILE Defaults to dev, then the first available profile.
|
|
@@ -198,6 +198,13 @@ Values never enter that process, so its output cannot leak one even if logged.
|
|
|
198
198
|
| `aws` | `aws secretsmanager get-secret-value --secret-id <name>` | not implemented |
|
|
199
199
|
| `vault` | `vault kv get -field=<name> <path>` | not implemented |
|
|
200
200
|
|
|
201
|
+
**A provider cannot hold its own bootstrap.** With `provider: "aws"`, reading any
|
|
202
|
+
secret needs AWS credentials — so the AWS bootstrap bundle
|
|
203
|
+
(`LISA_AWS_BOOTSTRAP_JSON`, see `lisa-setup-remote-aws`) cannot live there:
|
|
204
|
+
resolving it would require the very credential it contains. Keep that one in a
|
|
205
|
+
different provider. The same applies to any provider whose own access key is a
|
|
206
|
+
secret you would otherwise store inside it.
|
|
207
|
+
|
|
201
208
|
Unimplemented providers fail with a message naming where to add them, rather than failing obscurely. Do not claim support that does not exist.
|
|
202
209
|
|
|
203
210
|
Cache **in-process only**. Never write a resolved value to disk except through the materialization contract above.
|
|
@@ -30,16 +30,41 @@ Install the vendor-neutral AWS bootstrap into the current repository.
|
|
|
30
30
|
`.github/workflows/copilot-setup-steps.yml`; and it always writes
|
|
31
31
|
`docs/remote-agent-aws.md`.
|
|
32
32
|
4. Run `bash -n scripts/remote-agent-aws-setup.sh`.
|
|
33
|
-
5. Never write or request the actual bootstrap
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
configure a different name. Pass that name with `--secret-name` so the
|
|
39
|
-
generated runbook contains the exact retrieval command.
|
|
33
|
+
5. Never write or request the actual bootstrap bundle in repository files. Tell
|
|
34
|
+
the operator where to obtain it and where to put it — see **Where the bundle
|
|
35
|
+
lives** below. Pass `--secret-name` when the source names it something other
|
|
36
|
+
than `remote-agent-credentials`, so the generated runbook contains the exact
|
|
37
|
+
retrieval command.
|
|
40
38
|
6. Report the external step that remains: configure that one secret in the
|
|
41
39
|
remote environment and launch a smoke session.
|
|
42
40
|
|
|
41
|
+
## Where the bundle lives
|
|
42
|
+
|
|
43
|
+
`LISA_AWS_BOOTSTRAP_JSON` is **just another secret**, and it belongs wherever
|
|
44
|
+
the project keeps its secrets — resolved through `lisa-secrets-access` like
|
|
45
|
+
everything else. It is not tied to any one store.
|
|
46
|
+
|
|
47
|
+
Whoever provisions the IAM user emits the bundle somewhere. `cdkstarter` writes
|
|
48
|
+
it to AWS Secrets Manager as `remote-agent-credentials`, but that is where it is
|
|
49
|
+
*emitted*, not where it must *live*. Copy it once into the project's configured
|
|
50
|
+
provider and read it from there.
|
|
51
|
+
|
|
52
|
+
**Do not keep it in two stores.** A bundle sitting in Secrets Manager *and* in
|
|
53
|
+
the platform's secret store is two live copies of one credential: rotate the
|
|
54
|
+
IAM key and whichever copy you forget keeps authenticating until it doesn't,
|
|
55
|
+
with nothing to say which is current. That is the drift the single-store rule in
|
|
56
|
+
`lisa-secrets-access` exists to prevent, and this credential is not exempt.
|
|
57
|
+
|
|
58
|
+
**One provider cannot serve this particular secret.** If `secrets.provider` is
|
|
59
|
+
`aws`, reading the bundle requires AWS credentials — and the bundle *is* the AWS
|
|
60
|
+
credential. Anything else works: Bitwarden, 1Password, Doppler, Vault, or a
|
|
61
|
+
platform secret store. Pick the one that is not the thing being bootstrapped.
|
|
62
|
+
|
|
63
|
+
On a surface that materializes (see `lisa-secrets-access`), the bundle arrives
|
|
64
|
+
in `secrets.env` with everything else, so the project hook can run this setup
|
|
65
|
+
script after materialization with no extra plumbing. On a surface that reads
|
|
66
|
+
through live, resolve it at the point of use.
|
|
67
|
+
|
|
43
68
|
## Contract
|
|
44
69
|
|
|
45
70
|
A future coding agent is supported without an AWS change when its remote
|
|
@@ -10,17 +10,27 @@ Prepare a remote surface so a host project can execute there. Today that means *
|
|
|
10
10
|
|
|
11
11
|
## What lives where
|
|
12
12
|
|
|
13
|
-
The remote environment's own configuration fields stay **
|
|
13
|
+
The remote environment's own configuration fields stay **one line into the repository, preceded by the project's dependency install**. Nothing else is pasted into a vendor UI.
|
|
14
14
|
|
|
15
15
|
```text
|
|
16
|
-
setup: bash scripts/lisa-remote-env/setup.sh
|
|
17
|
-
maintenance: bash scripts/lisa-remote-env/setup.sh
|
|
16
|
+
setup: <install> && bash scripts/lisa-remote-env/setup.sh
|
|
17
|
+
maintenance: <install> && bash scripts/lisa-remote-env/setup.sh
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
`<install>` is whatever the project already uses — `bun install`, `npm ci`, `pnpm install`. Substitute it; do not invent one.
|
|
21
|
+
|
|
22
|
+
They are the same command. A container may be built fresh or resumed from cache; every step is idempotent and version-aware, so running it twice is correct, and running it on resume is what picks up a rotated value, an edited note, or a changed version pin.
|
|
21
23
|
|
|
22
24
|
The complete logic is repository-owned so it is reviewed, versioned, tested, and reusable. A large inline installer in a settings field is none of those things.
|
|
23
25
|
|
|
26
|
+
### Why the install has to come first
|
|
27
|
+
|
|
28
|
+
**A clone does not contain the skills on the harnesses that matter here.** OpenCode and Antigravity have them written into the checkout by `lisa apply`. Claude and Codex receive them as an *installed plugin*, which lives in the user's home directory — so a container that has just cloned the repository has never seen it.
|
|
29
|
+
|
|
30
|
+
`node_modules/@codyswann/lisa` is therefore the only copy present on a fresh container, and it is a good one: it is the version that project pins, which is the version its setup should run. The entrypoint searches the agent directories first and falls back to it.
|
|
31
|
+
|
|
32
|
+
Omitting the install does not degrade gracefully. The entrypoint exits before the toolchain, secrets, and hook phases have done anything, so the environment looks provisioned and fails on first dispatch.
|
|
33
|
+
|
|
24
34
|
## The three phases
|
|
25
35
|
|
|
26
36
|
1. **Toolchain** — assert what must already be present, install what is not.
|
|
@@ -110,8 +120,11 @@ When emitting, produce exactly:
|
|
|
110
120
|
```text
|
|
111
121
|
Environment name: <project> remote executor
|
|
112
122
|
Repository: <org>/<repo> (must be the default checkout)
|
|
113
|
-
Setup script: bash scripts/lisa-remote-env/setup.sh
|
|
114
|
-
Maintenance: bash scripts/lisa-remote-env/setup.sh
|
|
123
|
+
Setup script: <install> && bash scripts/lisa-remote-env/setup.sh
|
|
124
|
+
Maintenance: <install> && bash scripts/lisa-remote-env/setup.sh
|
|
125
|
+
(<install> is the project's own: bun install, npm ci, ...
|
|
126
|
+
It must precede the script — on a fresh container
|
|
127
|
+
node_modules is the only copy of the skills present.)
|
|
115
128
|
Environment vars: LISA_SECRETS_SURFACE=codex-cloud
|
|
116
129
|
BWS_ACCESS_TOKEN=<from the provider; an environment
|
|
117
130
|
variable, not a task secret — setup and cache-resume
|
|
@@ -136,7 +149,7 @@ Checked when setup runs, not at 3am:
|
|
|
136
149
|
|
|
137
150
|
- the environment exists and is bound to **this** repository as its default checkout;
|
|
138
151
|
- the bootstrap credential resolves;
|
|
139
|
-
- Lisa
|
|
152
|
+
- either a checkout-local Lisa skill is present, or the project dependency install has made the pinned `@codyswann/lisa` package available under `node_modules`.
|
|
140
153
|
|
|
141
154
|
Fail with a message naming what is missing. Never provision-and-hope.
|
|
142
155
|
|
|
@@ -23,13 +23,26 @@ if ! command -v node >/dev/null 2>&1; then
|
|
|
23
23
|
exit 1
|
|
24
24
|
fi
|
|
25
25
|
|
|
26
|
-
#
|
|
27
|
-
#
|
|
26
|
+
# Where the skill lives depends on how this project's harness receives it, and
|
|
27
|
+
# the two delivery models differ in a way that matters here.
|
|
28
|
+
#
|
|
29
|
+
# OpenCode and Antigravity get skills written INTO the checkout by `lisa apply`,
|
|
30
|
+
# so a clone already carries them. Claude and Codex receive them as an installed
|
|
31
|
+
# plugin, which lives in the user's home directory and is emphatically NOT part
|
|
32
|
+
# of a clone. A fresh remote container is the second case every time: it clones
|
|
33
|
+
# the repository and has never run a plugin install.
|
|
34
|
+
#
|
|
35
|
+
# So the agent directories are searched first — they are the cheapest hit and
|
|
36
|
+
# need nothing installed — and the npm package is the fallback that makes the
|
|
37
|
+
# plugin-delivered harnesses work at all. Lisa is a dependency of every project
|
|
38
|
+
# it is applied to, so `node_modules` carries the same skill at the version that
|
|
39
|
+
# project pins, which is the version its setup should run.
|
|
28
40
|
runner=""
|
|
29
41
|
for candidate in \
|
|
30
42
|
".claude/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs" \
|
|
31
43
|
".agents/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs" \
|
|
32
|
-
".codex/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs"
|
|
44
|
+
".codex/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs" \
|
|
45
|
+
"node_modules/@codyswann/lisa/plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs"; do
|
|
33
46
|
if [ -f "$candidate" ]; then
|
|
34
47
|
runner="$candidate"
|
|
35
48
|
break
|
|
@@ -37,8 +50,19 @@ for candidate in \
|
|
|
37
50
|
done
|
|
38
51
|
|
|
39
52
|
if [ -z "$runner" ]; then
|
|
40
|
-
echo "Cannot find the lisa-setup-remote-env skill
|
|
41
|
-
echo
|
|
53
|
+
echo "Cannot find the lisa-setup-remote-env skill." >&2
|
|
54
|
+
echo >&2
|
|
55
|
+
echo "Searched the agent skill directories and node_modules. On a remote" >&2
|
|
56
|
+
echo "container the usual cause is that dependencies have not been installed" >&2
|
|
57
|
+
echo "yet: Claude and Codex receive Lisa skills as an installed plugin, which" >&2
|
|
58
|
+
echo "is not part of a clone, so node_modules is the only copy present." >&2
|
|
59
|
+
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
|
|
63
|
+
echo >&2
|
|
64
|
+
echo "If dependencies are installed, run 'lisa apply' so the skills are" >&2
|
|
65
|
+
echo "present, then re-run setup." >&2
|
|
42
66
|
exit 1
|
|
43
67
|
fi
|
|
44
68
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.317.
|
|
3
|
+
"version": "2.317.5",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.317.
|
|
3
|
+
"version": "2.317.5",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.317.
|
|
3
|
+
"version": "2.317.5",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.317.
|
|
3
|
+
"version": "2.317.5",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.317.
|
|
3
|
+
"version": "2.317.5",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|