@columenlabs/lumen-ship (中文(简体) )
卢门的运货包:一个发布命令,每个发布者与克洛德一起写笔记,变更日志 新的读物, 和lint守护每一个Lumen应用程序运行。 巴什外加一个小型的TypeScript读取器,没有框架.
- 文档 : https://lumen.columenlabs.com/docs/ (中文(简体) )
- 对于代理人: https://lumen.columenlabs.com/llms.txt (中文(简体) )
- 资料来源: https://github.com/columenlabs/lumen (中文(简体) ) (单位:千美元)
packages/ship麻省理工学院.
安装
bun add -d @columenlabs/lumen-ship
把它固定在与其他卢门软件包相同的准确版本. 命令需求 bash, (中文(简体) ), git, (中文(简体) ), gh (有REST 访问回转), jq 财务报告和审定财务报表 curl。 。 。 .
释放
lumen-ship release 切除 Repo 的 GitHub 释放。 从 repo 根运行, 每次合并到 main (CI工作)或用手进行.
| 命令 | 它会做什么 |
|---|---|
lumen-ship release | 一个补丁发布时间 main 一次 cadence.every 合并自最新发布标记或第一次合并后登陆 cadence.days 过了几天. FORCE=1 现在就剪了 |
lumen-ship release minor | 标记 main 作为下一个未成年人。 它的笔记是手写的 docs/releases/v<major>.<minor>.0.md,必须打开 main |
lumen-ship release notes | 再次从文件中设置最新的未成年人笔记 |
lumen-ship release tag v1.2.3 | 使已经存在的标签发布(对于一个先给标签的发布工作). REDO=1 又写笔记 |
DRY_RUN=1 显示它会做什么 并创造什么.
页:1
Claude写下每个释放的笔记 从之前的拖拉请求(承诺在没有的情况下站立),从你的提示。 只有在完整时才会发布回复:任何被截断,拒绝或失败的东西都会再次被问到,最多3次,然后发布失败. 无 ANTHROPIC_API_KEY 这些笔记是GitHub自己的拉动请求列表.
设定 LUMEN_FORBIDDEN_NAMES (regex交替, A|B)在公开回放中:注意名称一再次被问出而从未被公布,拉出请求列表只显示数字.
新的更改日志
与 changelog.path 设定,每个发行的密钥外卖 也承诺 main 作为JSON,最新的第一, 和标记继续 承诺,所以释放部署自己的笔记。 每个取走的子弹会用标记打开:类型标记([Feature], (中文(简体) ), [Improvement], (中文(简体) ), [Fix], (中文(简体) ), [Performance], (中文(简体) ), [Security])成为其芯片和标签,列在 changelog.apps 成为它的 apps。在您的提示中询问:
- [Fix] [Console] **Exports finish**: ...
[{ "tag": "v0.3.2", "published_at": "2026-10-24T18:00:00Z",
"takeaways": [{ "text": "**Exports finish**: ...", "types": ["fix"], "apps": ["console"] }] }]
交给他 WhatsNew (单位:千美元)LumenShell是因为 releases 与读者:
import { RELEASES_HEADERS, listReleases, type Release } from '@columenlabs/lumen-ship/releases';
import changelog from './changelog.json';
app.get('/api/releases', (c) =>
c.json(
{ releases: listReleases(changelog as Release[], {
limit: c.req.query('limit'),
before: c.req.query('before'),
canSee: (apps) => apps.some((a) => mayOpen(c, a)), // optional
}) },
200,
RELEASES_HEADERS,
),
);
listReleases 最新第一页limit 1至50起,20起违约; before iSO 时间)和 canSee保留一些应用程序的外卖 只给可能打开其中一台的人.
lumen-ship.json
在 repo 根(或路径在 LUMEN_SHIP_CONFIG:
{
"repo": "owner/name",
"notes": { "prompt": ".github/release-prompt.md", "model": "claude-sonnet-5-5", "maxTokens": 16000 },
"changelog": { "path": "src/changelog.json", "apps": { "console": "console", "api": "api" } },
"tags": "v0.*",
"promote": "release",
"cadence": { "every": 10, "days": 7 }
}
| 密钥 | |
|---|---|
repo | GitHub重新发布 继续。 需求 |
notes.prompt | 带有提示的文件; {tag} 成为发行的标签。 需求 |
notes.model, (中文(简体) ), notes.maxTokens | 模型及其输出限制(模型先想,所以保持大) |
changelog.path | 新的JSON生活的地方 main; 退出, 无更改日志 |
changelog.apps | 标签( 更小的例) — app id, 用于一个应用程序的外卖 |
tags | 释放标记作为一个git glob, v[0-9]* 默认; 当另一个方案的旧标记排序更高时缩小 |
promote | 每个新发行的分会(一个生产部署分会,例如) |
cadence.every, (中文(简体) ), cadence.days | 补丁到期后. RELEASE_EVERY 覆盖 every |
林特警卫
lumen-ship check kit-neutral [paths] # no name from LUMEN_FORBIDDEN_NAMES (default: src package.json README.md)
lumen-ship check suppressions # a useExhaustiveDependencies suppression needs a reason of 3+ words
lumen-ship check settings-copy # a Settings section description is one plain line of 64 characters or less
lumen-ship check magic-numbers # hard-coded px/rem class values may only go down
lumen-ship check parts <folders> # the kit's part pages: hint-text, text-action, raw-overlay, settings-page may only go down
从文件夹中逐一运行 lint 脚本; 运行 parts 从带应用程序文件夹的 repo 根中(lumen-ship check parts apps/*/web/src) (中文(简体) ). magic-numbers 读repo的 scripts/magic-numbers.baseline (或 LUMEN_SHIP_BASELINE: 一个 <folder> <count> 一条线,在变化中降低,删除一条. parts 读取 scripts/parts.baseline (或 LUMEN_SHIP_PARTS_BASELINE: 一个 <folder> <rule> <count> 线条; --write-baseline 写今天的计数 在第一次运行。 每个规则都会被解释, 写什么代替,在 https://lumen.columenlabs.com/parts/README.md (中文(简体) )。 。 。 .
行为检查
@columenlabs/lumen-ship/behavior 检查一个应用程序的持久对象在一段时间内是如何运行的,而不命名任何错误 。 一个理智的运行在模拟的时钟上驱动本地运行时间的应用程序,记录每个钟点,并让每个商店保持同样的生命迹象.
simClock()替换全局Date有时钟,运行向前.SimAlarms保持每个商店的警报 而不是运行时间, 所以没有火实时。 跑跑将时钟跳到最早期的警报,发射后再重复,所以模拟的一天需要几秒钟.judge(wakes, { from, to, stopped }, limits?)读取记录Wakes 和返回数numbers(对主音)和broken(每个重要标志被打破,用平话来说) 纯:没有运行时间,没有I/O.
| 重要标志 | 断时( 默认在 VITALS(中文(简体) ) |
|---|---|
| 醒来 | 12多小时后醒来,一无所有,一无所有 |
| 快速闲置 | 超过5个无所事事的钟声 一个小时后就响起下一个警报 |
| 唤醒率 | 120多小时后醒来 工作与否 |
| 过去警钟 | 唤醒在自己的时间之前设置了警报 |
| 每行钟声 | 读取或写出一万行 |
| 每日行数 | 一个店一天读了八百多行,或者写了四十多行 |
| 解决 | 过去6小时 仍然醒了12个多小时 |
| 错误 | 已丢出或记录出错 |
| 逃跑 | 一天结束前的两千个醒来 跑步停止了 |
import { judge, type Wake } from '@columenlabs/lumen-ship/behavior';
const { numbers, broken } = judge(wakes, { from, to, stopped });
if (broken.length) console.log(broken.map((b) => `${b.rule}: ${b.detail}`).join('\n'));
给它不同的起步状态,而不是失败案例:一个返回的用户商店,30天后同一个商店,第一次访问. 一个循环,一个逃跑的读取或被卡住的工作,然后自己打破一个至关重要的标志,不管是什么原因造成的.
版本数
0.x:任何未成年人可以断裂到1.0. 每次和鲁门合并 main 发布每个 Lumen 软件包的下一个补丁;参见 释放。 。 。 .