Skip to content

fix(export): 离线包的 install.sh 别再教在包目录里跑 lc code (#52) - #54

Merged
LouisDM merged 1 commit into
mainfrom
fix/issue-52-install-hint
Aug 12, 2026
Merged

fix(export): 离线包的 install.sh 别再教在包目录里跑 lc code (#52)#54
LouisDM merged 1 commit into
mainfrom
fix/issue-52-install-hint

Conversation

@LouisDM

@LouisDM LouisDM commented Aug 12, 2026

Copy link
Copy Markdown
Owner

#52 的收尾补丁。#53 合并后我复查了「还有哪里在教用户在仓库/包目录里跑 lc code」,发现漏了一处,而且是最要紧的那处。

问题

lc export 生成的 install.shbin/lc 里的 INSTALL_SH 模板)收尾是:

✅ 镜像已就位。在当前目录接着跑:
   ./bin/lc init      # registry.json 已在包里,只需填地址与你的 API Key
   ./bin/lc up        # 起网关
   ./bin/lc doctor    # 体检:连通性 + tool calling 真的生效
   ./bin/lc code      # 开始用

「在当前目录接着跑」+ lc init + lc code 三行连在一起 —— lc init 刚把全部上游的地址与凭证写进这个目录的 .env,紧接着就让你在同一个目录里启动 Codex。这就是 #46 / #50 两次踩坑的 happy path 的源头之一:包里的安装脚本自己在教。

#53 之后 lc code 在这种情况下会拒绝启动,所以这条指引不改,内网侧的人的体验就是「按包里的提示一行一行走,走到最后一行被工具拒绝」。那种体验的第一反应不是「哦我该 cd」,而是「这个检查怎么关掉」——正好是 #52 决策里最想避免的结果。

docs/offline-deployment.md 第 3 节的写法一直是对的(cd /path/to/your-project 再跑),漏的只有生成的 install.sh

改动

✅ 镜像已就位。在当前目录接着跑:
   ./bin/lc init      # ...
   ./bin/lc up        # 起网关
   ./bin/lc doctor    # 体检:连通性 + tool calling 真的生效

配好之后,切到你要让 Codex 改的那个项目目录里启动它:
   cd /path/to/your-project
   /opt/airgap-coder-0.1.0-20260812-071040/bin/lc code

别在这个目录里跑 lc code:上面的 lc init 把全部上游的地址与凭证写进了这里的
.env,而 Codex 的会话不用批准就能执行 shell 命令。lc code 检测到这种情况会
拒绝启动(确实要改 airgap-coder 自己时加 --allow-workspace-secrets)。

$(pwd) 由 install.sh 运行时展开(它开头就 cd "$(dirname "$0")"),所以给出的是可直接粘贴的绝对路径 —— 用户 cd 到自己项目之后,相对路径 ./bin/lc 就不管用了,这一点原来的指引不需要考虑,现在需要。

怎么验证的

scripts/test-export.sh 补 6 条断言(ci.yml 已有 bash scripts/test-export.sh,不需要动 .github/):

静态模板([3a],总是跑):

  • refute "./bin/lc code" —— 这条是防回归的主锚:包里的安装脚本永远不该出现相对路径的 lc code,因为它只在包目录里有意义
  • 教了 cd /path/to/your-project
  • 说清了会「拒绝启动」以及为什么
  • 给出了 --allow-workspace-secrets

真跑一遍 install.sh([6],有 docker 时跑):

  • 跑出来的 stdout 里同样没有 ./bin/lc code
  • 且含 $DIR2/bin/lc code —— $(pwd) 真的展开成了绝对路径,不是把字面量 $(pwd) 打给用户看

本地全套:py_compile / bash -n / lc --help / test-project-metadata.py / test-version.sh / test-entrypoint.sh / test-codex-review-script.sh / test-doctor-probe.sh / test-lc-secrets.sh / test-lc-commands.sh / test-export.sh 全绿;git status --short 干净。

Refs #52

🤖 Generated with Claude Code

install.sh 的收尾指引是「在当前目录接着跑 ... ./bin/lc code」,而紧邻的上一行
正是 `lc init`——它把全部上游的地址与凭证写进了那个目录的 .env。这就是 #46 /
#50 两次踩坑的 happy path 的源头之一:包里的安装脚本自己在教。

#52 之后 lc code 在这种情况下会拒绝启动,所以这条指引不改就是「按包里的提示
走,走到一半被工具拒绝」,而那种体验的第一反应是去找怎么关掉那个检查。

改成先 cd 到自己的项目目录,并给出 $(pwd)/bin/lc code 的绝对路径(可直接粘贴),
再说清为什么不能在包目录里跑,以及确实要在那里干活时的逃生阀。

test-export.sh 补 6 条断言:静态模板 4 条(不再出现 ./bin/lc code、教了 cd、
说清会被拒绝、给了逃生阀),真跑一遍 install.sh 的那条路径 2 条(stdout 里
$(pwd) 已展开,顺带钉住给的是绝对路径)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@LouisDM
LouisDM merged commit 36198f0 into main Aug 12, 2026
4 checks passed
@LouisDM
LouisDM deleted the fix/issue-52-install-hint branch August 12, 2026 07:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant