agentic-flow-kit 1.0.2 → 1.1.0
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/README.md +1 -1
- package/package.json +1 -1
- package/src/add-host.mjs +3 -2
- package/src/cli.mjs +1 -1
- package/src/init.mjs +2 -1
- package/src/profiles.mjs +6 -2
- package/src/sync.test.mjs +3 -1
- package/templates/_agents/scripts/check-loop.mjs +1 -1
- package/templates/_agents/scripts/check-loop.test.mjs +1 -1
package/README.md
CHANGED
|
@@ -54,7 +54,7 @@ npx agentic-flow-kit add-gate dotnet-ca
|
|
|
54
54
|
| 选项 | 说明 |
|
|
55
55
|
|------|------|
|
|
56
56
|
| `--stack` | `dotnet` / `node` / `python` / `go` / `none`(默认 none)——**门禁配置三处**:commit-check 条件编译检查(暂存对应扩展名时 commit 前自动构建)+ **质量检测**(`checks`:lint / 类型检查 / vet 等秒级确定性检查,存在对应配置文件(tsconfig / eslint / ruff / go.mod 等)才启用,没有则自动跳过;测试不放提交门——关单在 test.md 阶段门)、settings.json 自检验命令权限、AGENTS.md「项目适配区」命令预填 |
|
|
57
|
-
| `--hosts` | `zcode` / `opencode` / `trae` / `omp` / `claude` / `cursor` / `codex` 逗号多选(默认 zcode
|
|
57
|
+
| `--hosts` | `zcode` / `opencode` / `trae` / `omp` / `claude` / `cursor` / `codex` 逗号多选(默认 zcode)。七个宿主一律入库(2026-10-05 起 zcode/omp 撤销 localOnly——换宿主不丢文件、CI 克隆面与本仓一致);zcode 的会话级液态草稿(`.zcode/drafts/`、`.zcode/plans/`)是本机态、不该入库——init 不再自动写这条规则,请自行加进 `.gitignore`(本仓实例见根 `.gitignore`)。Claude Code 加载 `.claude/commands` 与 `.claude/agents`;Cursor 加载 `.cursor/commands`;Codex 读仓库根 `AGENTS.md` 与 `.codex/skills/`,`.codex/commands` 是同形薄转发 |
|
|
58
58
|
| `--board-port` | workflow 看板端口(默认 8933) |
|
|
59
59
|
| `--dir` | 目标项目根(默认当前目录) |
|
|
60
60
|
| `--force` | 覆盖已存在的同名文件(默认保守跳过) |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-flow-kit",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "AI-Native 闭环工作流 + wiki 知识层脚手架——flow-kit init 一条命令为新项目装好 .agents 工作流引擎(阶段命令/角色契约/门禁钩子/kb 检索/看板/规则面预算)+ workflow 文档闭环 + wiki 知识库,装完自包含、零运行时依赖",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
package/src/add-host.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// flow-kit add-host <宿主>:init 后补装宿主适配层。
|
|
2
2
|
// 渲染 modules/hosts/<h> → HOSTS[h].dir → managed 台账按 rel 去重补记 → options.hosts 补记
|
|
3
|
-
// → localOnly 宿主(
|
|
3
|
+
// → localOnly 宿主(2026-10-05 起暂无命中,见 profiles.mjs#HOSTS.localOnly).gitignore 追加 → doctor
|
|
4
4
|
import fs from 'node:fs';
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
import { renderTree } from './render.mjs';
|
|
@@ -51,7 +51,8 @@ export function addHost(args, pkgRoot) {
|
|
|
51
51
|
if (!already) kit.options.hosts = [...(kit.options.hosts || []), host];
|
|
52
52
|
fs.writeFileSync(kitPath, `${JSON.stringify(kit, null, 2)}\n`);
|
|
53
53
|
|
|
54
|
-
// localOnly 宿主进 .gitignore
|
|
54
|
+
// localOnly 宿主进 .gitignore(缺才补)。2026-10-05 起七个宿主一律 localOnly:false,该分支暂无宿主命中;
|
|
55
|
+
// 保留是为了未来重开「本机专属宿主」档位时不必改结构——判定单源在 profiles.mjs#HOSTS.localOnly。
|
|
55
56
|
if (HOSTS[host].localOnly) {
|
|
56
57
|
const giPath = path.join(target, '.gitignore');
|
|
57
58
|
const line = `${HOSTS[host].dir}/`;
|
package/src/cli.mjs
CHANGED
|
@@ -46,7 +46,7 @@ init 选项(全部可选,均有默认值):
|
|
|
46
46
|
条件编译检查(builds)与质量检测(checks:lint/类型/vet 等秒级确定性检查,
|
|
47
47
|
有对应配置文件才启用)、settings.json 自检验命令权限(allow)、
|
|
48
48
|
AGENTS.md「项目适配区」命令预填
|
|
49
|
-
--hosts <宿主列表> 逗号分隔:zcode,opencode,trae,omp,claude,cursor,codex(默认 zcode
|
|
49
|
+
--hosts <宿主列表> 逗号分隔:zcode,opencode,trae,omp,claude,cursor,codex(默认 zcode;七个宿主一律入库,不自动进 .gitignore)
|
|
50
50
|
--board-port <端口> workflow 看板端口(默认 8933)
|
|
51
51
|
--dir <目录> 目标项目根(默认当前目录)
|
|
52
52
|
--force 覆盖已存在的同名文件(默认保守跳过)
|
package/src/init.mjs
CHANGED
|
@@ -242,7 +242,8 @@ export async function init(args, pkgRoot) {
|
|
|
242
242
|
ownedGenerated.push({ rel, sha256: sha256(Buffer.from(content, 'utf8')) });
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
// 4) .gitignore
|
|
245
|
+
// 4) .gitignore 追加(缺哪条补哪条)。2026-10-05 起七个宿主一律 localOnly:false,
|
|
246
|
+
// 宿主目录不再自动进 .gitignore——实际只补 .agents/cache/ 这条运行时缓存。
|
|
246
247
|
const giPath = path.join(target, '.gitignore');
|
|
247
248
|
const giNeed = ['.agents/cache/', ...(hosts.filter((h) => HOSTS[h].localOnly).map((h) => `${HOSTS[h].dir}/`))];
|
|
248
249
|
let giText = fs.existsSync(giPath) ? fs.readFileSync(giPath, 'utf8') : '';
|
package/src/profiles.mjs
CHANGED
|
@@ -6,10 +6,14 @@
|
|
|
6
6
|
// pkg:scripts.build 表示 package.json 里该脚本为非空字符串。没有对应配置的项目自动跳过,
|
|
7
7
|
// 不 fail-closed 误拦。none = 不配置(项目日后自填)。
|
|
8
8
|
export const HOSTS = {
|
|
9
|
-
zcode
|
|
9
|
+
// 2026-10-05 宿主本地化撤销:zcode / omp 原 localOnly:true(init 与 add-host 会把 .zcode/、.omp/
|
|
10
|
+
// 整目录写进装户 .gitignore)。改为 false 后七个宿主一律入库,换宿主不丢文件、CI 克隆面与本仓一致。
|
|
11
|
+
// 代价是 zcode 的会话级液态草稿(.zcode/drafts/、.zcode/plans/)改由装户自己加 .gitignore 规则;
|
|
12
|
+
// 本仓 .gitignore 净效果保留这两行草稿规则(实例见根 .gitignore),.zcode/agents/*.md 保持 tracked(2026-09-27 gate-coverage 独立复核确立)。
|
|
13
|
+
zcode: { dir: '.zcode', localOnly: false },
|
|
10
14
|
opencode: { dir: '.opencode', localOnly: false, commandPrefix: 'wf-' },
|
|
11
15
|
trae: { dir: '.trae', localOnly: false, commandPrefix: 'wf-' },
|
|
12
|
-
omp: { dir: '.omp', localOnly:
|
|
16
|
+
omp: { dir: '.omp', localOnly: false },
|
|
13
17
|
// 2026-09-29 店面:序号仍把 zcode 放第一(交互菜单 1–4 不变)。claude / cursor 的 commands 由宿主自动加载;
|
|
14
18
|
// codex 自动读仓库根 AGENTS.md 与 .codex/skills/,commands 与 agents 是同形薄转发,供显式引用。
|
|
15
19
|
claude: { dir: '.claude', localOnly: false, commandPrefix: 'wf-' },
|
package/src/sync.test.mjs
CHANGED
|
@@ -18,6 +18,8 @@ function check(name, cond, detail = '') {
|
|
|
18
18
|
}
|
|
19
19
|
const W = (p, content) => { fs.mkdirSync(path.dirname(p), { recursive: true }); fs.writeFileSync(p, content); };
|
|
20
20
|
const R = (p) => fs.readFileSync(p, 'utf8');
|
|
21
|
+
// 可选读:装户端在无 localOnly 宿主时不再创建 .gitignore,断言「不追加」须容忍文件不存在
|
|
22
|
+
const ROpt = (p) => (fs.existsSync(p) ? fs.readFileSync(p, 'utf8') : '');
|
|
21
23
|
|
|
22
24
|
// ---- fixture 包根(v2 形态:chg/host 变更、new 新增、gone 已删)----
|
|
23
25
|
function mkFixture() {
|
|
@@ -162,7 +164,7 @@ else if (cmd === 'add-gate') addGate(rest, root);
|
|
|
162
164
|
const kit = JSON.parse(R(path.join(t, '.agents/kit.json')));
|
|
163
165
|
check('S7 managed 台账补记(项目根相对路径)', kit.managed.some((f) => f.rel === '.zcode/h.txt'), JSON.stringify(kit.managed));
|
|
164
166
|
check('S7 options.hosts 补记', Array.isArray(kit.options.hosts) && kit.options.hosts.includes('zcode'));
|
|
165
|
-
check('S7 localOnly
|
|
167
|
+
check('S7 宿主目录不再进 .gitignore(localOnly 已撤销,zcode 与其余宿主同策)', !ROpt(path.join(t, '.gitignore')).includes('.zcode/'), ROpt(path.join(t, '.gitignore')));
|
|
166
168
|
const r2 = runCmd('add-host', fx, t, ['zcode']);
|
|
167
169
|
check('S7 重复装未 --force → 报错退出', r2.status === 1 && (r2.stderr || '').includes('--force'), r2.stderr);
|
|
168
170
|
}
|
|
@@ -504,7 +504,7 @@ for (const inc of docFiles('incidents')) {
|
|
|
504
504
|
}
|
|
505
505
|
}
|
|
506
506
|
const zc = `.zcode/agents/${role}.md`;
|
|
507
|
-
if (fs.existsSync(path.join(ROOT, zc))) { //
|
|
507
|
+
if (fs.existsSync(path.join(ROOT, zc))) { // .zcode/agents/ 现为入库件(2026-10-05 起宿主一律入库);缺失只说明宿主未装,不告警,存在时校验一致性
|
|
508
508
|
if (!new RegExp(`^name:\\s*["']?${role}["']?\\s*$`, 'm').test(textOf(zc).join('\n'))) warnings.push(`- [WARN Adapter 无效] ZCode ${role} 的 name 与文件名不一致:${zc}`);
|
|
509
509
|
if (!textOf(zc).some((l) => l.includes(rolePath))) warnings.push(`- [WARN Adapter 断线] ZCode ${role} 未引用公共角色:${rolePath}`);
|
|
510
510
|
}
|
|
@@ -253,7 +253,7 @@ const mkConfirmedDoc = (root, rel, fmBody) => {
|
|
|
253
253
|
rmfix(T);
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
-
// ---- 场景 15:ZCode Adapter 缺失不告警(
|
|
256
|
+
// ---- 场景 15:ZCode Adapter 缺失不告警(宿主未装),存在且断线仍告警 ----
|
|
257
257
|
{
|
|
258
258
|
const T = mkfix();
|
|
259
259
|
w(T, 'workflow/intents/2026-09-12-o.md', INTENT('o', '状态: done\n级别: L1\n日期: 2026-09-12', '\n## 验收标准(可测试)\n- [x] 用例通过(证据:全绿)\n'));
|