weaver-e10-builder 1.1.7 → 1.1.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAwE/D"}
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAyE/D"}
@@ -73,12 +73,12 @@ export function registerSkillCommands(program) {
73
73
  n += entry.isDirectory() ? countFiles(resolve(dest, entry.name)) : 1;
74
74
  }
75
75
  console.log(`✅ 已拷贝 ${n} 个文件 → ${dest}`);
76
- console.log(` 文档根: ${dest}(references/、actionflows/、assets/、SKILL.md)`);
76
+ console.log(` 文档根: ${dest}(SKILL.md、_catalog.md、references/、actionflows/、assets/)`);
77
77
  console.log(` 文档版本 = CLI 版本 ${pkgVersion()};若 skill 标注版本与 e10-cli --version 不符,先升级 CLI 再拷。`);
78
78
  });
79
79
  skill
80
80
  .command('sync')
81
- .description('探测已安装的 skill(~/.claude/skills、~/.workbuddy/skills、~/.codex/skills 等),把文档树自动拷进对应 skill 目录')
81
+ .description('探测已安装的 skill(~/.claude/skills、~/.workbuddy/skills、~/.codex/skills 等),把文档树 + 薄层指令文件自动拷进对应 skill 目录')
82
82
  .option('--target <dir>', '额外指定的 skill 安装根目录,可重复', collect, [])
83
83
  .action((cmdOpts) => {
84
84
  const results = provisionInstalledSkills(SKILL_DOCS_DIR, pkgVersion(), cmdOpts.target || []);
@@ -96,6 +96,8 @@ export function registerSkillCommands(program) {
96
96
  }
97
97
  else if (r.action === 'current')
98
98
  console.log(`已是最新,跳过 ${r.skillDir}`);
99
+ else if (r.action === 'newer')
100
+ console.log(`⚠️ 已装 skill 版本高于当前 CLI(${pkgVersion()}),未改动 ${r.skillDir};请先升级 CLI 再同步`);
99
101
  else
100
102
  console.log(`⚠️ 同步失败 ${r.skillDir}`);
101
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E;;;;;;;;;;;GAWG;AACH,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEpE,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1D,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0CAA0C,CAAC,CAAC;IAE3D,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,2BAA2B,cAAc,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,OAAO,UAAU,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0EAA0E,CAAC;SACvF,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;SACpC,MAAM,CAAC,CAAC,MAAe,EAAE,EAAE;QAC1B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,2BAA2B,cAAc,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACtD,gDAAgD;QAChD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;YAC1F,OAAO,CAAC,KAAK,CAAC,gBAAgB,IAAI,aAAa,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,gEAAgE;QAChE,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,cAAc,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACzE,MAAM,CAAC,GAAG,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACvE,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,yDAAyD,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,EAAE,iDAAiD,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mGAAmG,CAAC;SAChH,MAAM,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,OAAO,EAAE,EAAE,CAAC;SAC9D,MAAM,CAAC,CAAC,OAA6B,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,wBAAwB,CAAC,cAAc,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QACD,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,QAAQ,OAAO,UAAU,EAAE,GAAG,CAAC,CAAC;gBAAC,MAAM,EAAE,CAAC;YAAC,CAAC;iBAC/F,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;iBACjE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,eAAe,CAAC,CAAC;;gBAChH,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kCAAkC;AAClC,SAAS,OAAO,CAAC,KAAa,EAAE,IAAc;IAC5C,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1B,CAAC"}
@@ -5,13 +5,19 @@ export declare function pkgVersion(): string;
5
5
  export declare function knownSkillRoots(): string[];
6
6
  /** 在候选根目录里找已安装的 weaver-e10-builder skill 目录 */
7
7
  export declare function findInstalledSkills(extraRoots?: string[]): string[];
8
- /** 文档是否已就位(版本一致 **且** references/ 存在——薄 zip 的 SKILL.md 版本对但没文档树,必须补拷) */
9
- export declare function skillDocsCurrent(skillDir: string, version: string): boolean;
8
+ /**
9
+ * 文档是否已就位:版本一致 **且** references/ 存在 **且** 薄层文件与包内逐字节一致。
10
+ * - 薄 zip 的 SKILL.md 版本对但没文档树 → 必须补拷
11
+ * - 版本对但薄层文件是旧的(或缺失) → 也必须补拷,否则旧指令一直留在机器上
12
+ */
13
+ export declare function skillDocsCurrent(skillDir: string, docsDir: string, version: string): boolean;
10
14
  /**
11
15
  * 把 skill-docs 内容覆盖式同步进 skill 目录。
12
16
  * 先整树删掉归属树(references / actionflows/references / assets)再拷——解决"覆盖拷贝不删旧、升级残留旧文档":
13
17
  * 版本升级后源里已移除的指南/命令文档不会再留在已装 skill。
14
- * 薄层文件(_catalog.md、scripts/icons.db、actionflows/SKILL.md+CONTEXT.md,由 skill zip 提供、skill-docs 不含)不动。
18
+ * 薄层指令文件(SKILL.md、_catalog.md、actionflows/SKILL.md+CONTEXT.md)随外层 cpSync 一起覆盖——
19
+ * 它们和文档树一样由 skill-docs 提供,版本升级时必须跟着走,否则机器上会留着旧指令。
20
+ * 只有 scripts/ 等 skill-docs 不含的目录不动。
15
21
  */
16
22
  export declare function provisionSkillDocs(skillDir: string, docsDir: string): void;
17
23
  export interface ProvisionResult {
@@ -1 +1 @@
1
- {"version":3,"file":"skill-provision.d.ts","sourceRoot":"","sources":["../../src/services/skill-provision.ts"],"names":[],"mappings":"AAiBA,uDAAuD;AACvD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED,4CAA4C;AAC5C,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAO1C;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,UAAU,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAQvE;AAED,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAS3E;AAKD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAO1E;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;CACpD;AAaD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAM,EAAO,GACxB,eAAe,EAAE,CAsBnB"}
1
+ {"version":3,"file":"skill-provision.d.ts","sourceRoot":"","sources":["../../src/services/skill-provision.ts"],"names":[],"mappings":"AAmBA,uDAAuD;AACvD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED,4CAA4C;AAC5C,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAO1C;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,UAAU,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAQvE;AAeD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAgB5F;AAKD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAO1E;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;CACpD;AAaD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAM,EAAO,GACxB,eAAe,EAAE,CAsBnB"}
@@ -1,12 +1,14 @@
1
1
  /**
2
2
  * skill 文档自动预置:探测本机已安装的 weaver-e10-builder skill
3
3
  * (Claude Code ~/.claude/skills、WorkBuddy ~/.workbuddy/skills、Codex ~/.codex/skills,可扩展),
4
- * 把文档树(references/、actionflows/references/、assets/)+ SKILL.md 覆盖式拷进对应 skill 目录,
4
+ * 把文档树(references/、actionflows/references/、assets/)+ 薄层指令文件
5
+ * (SKILL.md、_catalog.md、actionflows/SKILL.md、actionflows/CONTEXT.md)覆盖式拷进对应 skill 目录,
5
6
  * 使已装 skill 自带文档——AI 直接读 skill 目录内的 references/,无需手动 skill copy。
6
7
  *
7
8
  * 触发:`e10-cli auth status` 每次会话自动检测(skill 的 step0 必跑);
8
- * `e10-cli skill sync` 显式手动。幂等:SKILL.md 版本一致即跳过。
9
+ * `e10-cli skill sync` 显式手动。幂等:版本一致 **且薄层内容一致** 才跳过。
9
10
  */
11
+ import { createHash } from 'node:crypto';
10
12
  import { cpSync, existsSync, readdirSync, readFileSync, rmSync } from 'node:fs';
11
13
  import { isNewer } from './update-check.js';
12
14
  import { homedir } from 'node:os';
@@ -45,15 +47,40 @@ export function findInstalledSkills(extraRoots = []) {
45
47
  }
46
48
  return [...new Set(found)];
47
49
  }
48
- /** 文档是否已就位(版本一致 **且** references/ 存在——薄 zip 的 SKILL.md 版本对但没文档树,必须补拷) */
49
- export function skillDocsCurrent(skillDir, version) {
50
+ /**
51
+ * 薄层指令文件:由 skill zip 提供、也必须随 npm 包同步的那几个。
52
+ * 早期只把 SKILL.md 放进 skill-docs,`_catalog.md` / `actionflows/SKILL.md` / `actionflows/CONTEXT.md`
53
+ * 进不了包,导致装了 skill 的机器这几个文件永远停在装 zip 那天(版本门禁还因为 SKILL.md 版本对而跳过)。
54
+ * docsDir 里没有的条目跳过校验(向后兼容老包)。
55
+ */
56
+ const THIN_FILES = ['SKILL.md', '_catalog.md', 'actionflows/SKILL.md', 'actionflows/CONTEXT.md'];
57
+ /** 内容指纹(归一 CRLF:仓库 LF、已装目录可能是 CRLF,换行差异不算改动) */
58
+ function contentHash(path) {
59
+ return createHash('md5').update(readFileSync(path, 'utf-8').replace(/\r\n/g, '\n')).digest('hex');
60
+ }
61
+ /**
62
+ * 文档是否已就位:版本一致 **且** references/ 存在 **且** 薄层文件与包内逐字节一致。
63
+ * - 薄 zip 的 SKILL.md 版本对但没文档树 → 必须补拷
64
+ * - 版本对但薄层文件是旧的(或缺失) → 也必须补拷,否则旧指令一直留在机器上
65
+ */
66
+ export function skillDocsCurrent(skillDir, docsDir, version) {
50
67
  try {
51
68
  const skillMd = resolve(skillDir, 'SKILL.md');
52
69
  if (!existsSync(skillMd))
53
70
  return false;
54
71
  if (!readFileSync(skillMd, 'utf-8').includes(`version: ${version}`))
55
72
  return false;
56
- return existsSync(resolve(skillDir, 'references'));
73
+ if (!existsSync(resolve(skillDir, 'references')))
74
+ return false;
75
+ for (const rel of THIN_FILES) {
76
+ const src = resolve(docsDir, rel);
77
+ if (!existsSync(src))
78
+ continue; // 包内不含该文件 → 不参与判定
79
+ const dst = resolve(skillDir, rel);
80
+ if (!existsSync(dst) || contentHash(src) !== contentHash(dst))
81
+ return false;
82
+ }
83
+ return true;
57
84
  }
58
85
  catch {
59
86
  return false;
@@ -65,7 +92,9 @@ const OWNED_DOC_TREES = ['references', 'actionflows/references', 'assets'];
65
92
  * 把 skill-docs 内容覆盖式同步进 skill 目录。
66
93
  * 先整树删掉归属树(references / actionflows/references / assets)再拷——解决"覆盖拷贝不删旧、升级残留旧文档":
67
94
  * 版本升级后源里已移除的指南/命令文档不会再留在已装 skill。
68
- * 薄层文件(_catalog.md、scripts/icons.db、actionflows/SKILL.md+CONTEXT.md,由 skill zip 提供、skill-docs 不含)不动。
95
+ * 薄层指令文件(SKILL.md、_catalog.md、actionflows/SKILL.md+CONTEXT.md)随外层 cpSync 一起覆盖——
96
+ * 它们和文档树一样由 skill-docs 提供,版本升级时必须跟着走,否则机器上会留着旧指令。
97
+ * 只有 scripts/ 等 skill-docs 不含的目录不动。
69
98
  */
70
99
  export function provisionSkillDocs(skillDir, docsDir) {
71
100
  for (const rel of OWNED_DOC_TREES) {
@@ -98,7 +127,7 @@ export function provisionInstalledSkills(docsDir, version, extraRoots = []) {
98
127
  const dirs = findInstalledSkills(extraRoots);
99
128
  const results = [];
100
129
  for (const dir of dirs) {
101
- if (skillDocsCurrent(dir, version)) {
130
+ if (skillDocsCurrent(dir, docsDir, version)) {
102
131
  results.push({ skillDir: dir, action: 'current' });
103
132
  continue;
104
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"skill-provision.js","sourceRoot":"","sources":["../../src/services/skill-provision.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-provision.js","sourceRoot":"","sources":["../../src/services/skill-provision.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "weaver-e10-builder",
3
- "version": "1.1.7",
3
+ "version": "1.1.8",
4
4
  "description": "Eteams/Ebuilder CLI — 泛微 OA 命令行工具",
5
5
  "type": "module",
6
6
  "files": [
@@ -2,11 +2,11 @@
2
2
  name: weaver-e10-builder
3
3
  display_name: 泛微E10智能搭建Skill
4
4
  display_name_en: E10 Builder
5
- description: 泛微E10智能搭建skill v2(通用版),辅助编写泛微Ebuilder自定义应用,对应CLI版本1.1.7
6
- description_zh: 泛微Ebuilder低代码应用智能搭建工具 v2(通用版),辅助编写自定义应用(表单/流程/列表/动作流/权限/分组/编号等),与 e10-cli 配套使用,当前对应 CLI 版本 1.1.7。
7
- description_en: E10 Ebuilder low-code app builder skill v2 (general) — helps build Weaver E10 custom apps (forms/workflows/lists/actionflows/permissions/groups/numbering) via e10-cli, currently paired with CLI 1.1.7.
5
+ description: 泛微E10智能搭建skill v2(通用版),辅助编写泛微Ebuilder自定义应用,对应CLI版本1.1.8
6
+ description_zh: 泛微Ebuilder低代码应用智能搭建工具 v2(通用版),辅助编写自定义应用(表单/流程/列表/动作流/权限/分组/编号等),与 e10-cli 配套使用,当前对应 CLI 版本 1.1.8。
7
+ description_en: E10 Ebuilder low-code app builder skill v2 (general) — helps build Weaver E10 custom apps (forms/workflows/lists/actionflows/permissions/groups/numbering) via e10-cli, currently paired with CLI 1.1.8.
8
8
  category: coding
9
- version: 1.1.7
9
+ version: 1.1.8
10
10
  author: 泛微网络科技股份有限公司
11
11
  auto: true
12
12
  ---
@@ -15,7 +15,7 @@ auto: true
15
15
 
16
16
  ## 安装与升级
17
17
 
18
- 本 skill 需与 CLI **版本匹配**(当前对应 CLI `1.1.7`)。版本不一致时命令/文档/选项可能对不上——升级前先对齐:
18
+ 本 skill 需与 CLI **版本匹配**(当前对应 CLI `1.1.8`)。版本不一致时命令/文档/选项可能对不上——升级前先对齐:
19
19
 
20
20
  ```shell
21
21
  e10-cli --version # 查 CLI 版本,应与上方 description 标注一致
@@ -0,0 +1,66 @@
1
+ # Skill Ebcoder 目录索引
2
+
3
+ > 此文件列出所有子文档的加载条件,供 Agent 按需加载。不要一次性加载全部。
4
+ >
5
+ > 以下所有路径统一写作 `references/...`:相对工作区根目录(`skill copy` 拷出的位置),或本机 skill 根目录(完整安装自带)。
6
+
7
+ ## Guides(编码指南)
8
+
9
+ | 用户意图关键词 | 加载文档 |
10
+ |---------------|---------|
11
+ | 表单CRUD、增删改查、getSimpleData、withDisplayNames、getFieldOptions、saveFormData、updateFormData、deleteFormData、字段类型 | `references/coding/guide-form-crud.md`(前端代码) |
12
+ | 编辑、修改、回显、handleEdit、getAllData、rawData、selectedPerson、editForm、数据回填 | `references/coding/guide-edit-backfill.md`(前端代码) |
13
+ | 字段联动、显隐联动、条件显示、form linkage | `references/form/guide-form-linkage.md` |
14
+ | 新建表单、form create、EB 表单标准创建流程 | `references/form/guide-create-form.md` |
15
+ | 字段定义、字段类型、关联字段码表、DateRange、multiple | `references/form/ref-form-fields.md` |
16
+ | FLOW/EXCEL、布局样表、布局蓝图、字段分组、singleRow | `references/form/guide-form-layout-planning.md` |
17
+ | 表单复杂编号、serial-mark、流水号、代字 | `references/form/guide-form-serial-mark.md` |
18
+ | 表单数据读写、form data、写入数据、查询数据、删除数据 | `references/form/guide-form-data.md` |
19
+ | 流程、审批、workflow、提交流程、flowpage、预填、URL传参、节点、操作者、审批人、连线 | `references/workflow/guide-workflow.md` |
20
+ | 公文流程、公文审批、收文、发文、公文设置、正文设置 | `references/workflow/guide-workflow-odoc.md` + `references/workflow/guide-workflow.md` |
21
+ | 分支条件、出口条件、条件JSON、save-condition、连线条件、condition add | `references/workflow/guide-workflow-condition.md` |
22
+ | 条件操作符编码、字段类型矩阵、关系符 | `references/workflow/operator-matrix.md` |
23
+ | 动作流、跨表单、写入台账、ActionEbAdd/ActionEbUpdate/ActionEbDelete、提交事件、自定义事件触发、内置MQ监听/发送、HTTP/HTTPS、DML/数仓 | `references/workflow/guide-workflow-action.md`;复杂动作流组件契约按需读取 `actionflows/SKILL.md` 及其 `references/components/` |
24
+ | 鉴权、登录、auth、ETEAMSID、多环境、profile、切换环境 | `references/auth/guide-auth.md` |
25
+ | HRM矩阵、条件矩阵、matrix、映射表 | `references/hrm/guide-matrix.md` |
26
+ | 新页面、导出、路由、entry.js、regOvProps、regReactChildren、asyncImport、publicUrl、Suspense | `references/coding/guide-page-export.md`(前端代码) |
27
+ | 写页面、页面代码、React编码、组件、entry.js模板 | `references/coding/guide-page-code.md`(前端代码) |
28
+
29
+ ## Reference(参考手册)
30
+
31
+ | 用户意图关键词 | 加载文档 |
32
+ |---------------|---------|
33
+ | CLI、命令、打包、build、import、创建应用、创建表单、菜单、project、form create、app create、matrix | `references/common/ref-cli-commands.md` |
34
+ | 接口文档导入、Postman、系统接口、连接器接口、createSystemInterfaceByAi、接口批量创建 | `references/esb-interface/guide-import.md` |
35
+ | 编译、语法、报错、不支持、babel、打包、var、const、let、es2015、stage-2 | `references/coding/ref-compile-rules.md`(前端代码) |
36
+
37
+ ## Components(组件文档)
38
+
39
+ | 用户意图关键词 | 加载文档 |
40
+ |---------------|---------|
41
+ | Button、按钮 | `references/components/@weapp-Button.md` |
42
+ | Table、表格 | `references/components/display-Table.md` |
43
+ | List、列表 | `references/components/display-List.md` |
44
+ | Pagination、分页 | `references/components/display-Pagination.md` |
45
+ | Icon、图标 | `references/components/display-Icon.md` |
46
+ | Avatar、头像 | `references/components/display-Avatar.md` |
47
+ | EChart、图表、Echarts | `references/components/generic-Echarts.md` |
48
+ | 文件预览、CorsComponent | `references/components/display-FilePreview.md` |
49
+ | Input、输入框、文本框 | `references/components/form-Input.md` |
50
+ | 人员选择、Browser Employee、resource | `references/components/form-EmployeeBrowser-api.md` |
51
+ | 部门选择、Browser Department、department | `references/components/form-DepartmentBrowser-api.md` |
52
+ | Upload、文件上传、附件、FileComponent | `references/components/form-Upload.md` |
53
+ | Badge、徽标 | `references/components/base-Badge.md` |
54
+ | Tag、标签 | `references/components/base-Tag.md` |
55
+
56
+ ## 组合场景
57
+
58
+ | 场景 | 需加载的文档 |
59
+ |------|-------------|
60
+ | CRUD 列表页 | `references/coding/guide-form-crud.md`(前端代码) + `references/components/display-Table.md` + `references/components/display-Pagination.md` |
61
+ | 表单新增/编辑弹窗 | `references/coding/guide-form-crud.md`(前端代码) + `references/coding/guide-edit-backfill.md` + 对应表单组件文档 |
62
+ | 新建完整应用 | `references/common/ref-cli-commands.md` + `references/form/guide-create-form.md` + `references/coding/guide-page-export.md`(前端代码) |
63
+ | 流程触发页面 | `references/workflow/guide-workflow.md` + `references/coding/guide-form-crud.md`(前端代码) |
64
+ | 流程分支条件 | `references/workflow/guide-workflow.md` + `references/workflow/guide-workflow-condition.md` |
65
+ | 跨表单动作流 | `references/workflow/guide-workflow.md` + `references/workflow/guide-workflow-action.md` |
66
+ | 编译报错排查 | `references/coding/ref-compile-rules.md`(前端代码) |
@@ -0,0 +1,71 @@
1
+ # Ubiquitous Language
2
+
3
+ ## Component Support
4
+
5
+ **Supported component** — A component registered in this Skill that has passed
6
+ the real platform temporary-save and temporary-snapshot-readback verification.
7
+ It may be selected and generated by the Skill.
8
+
9
+ The registry and the supported-component list contain supported components only.
10
+ There is no experimental or partially-supported registry state.
11
+
12
+ A component is supported only when all of the following hold: its real frontend
13
+ fields and dynamic required/exclusive rules are documented; every public
14
+ parameter has a verified native DTO conversion; conversion and validation have
15
+ automated tests; at least one real temporary-save and temporary-snapshot
16
+ readback succeeds; and its documentation states the supported property scope.
17
+
18
+ An individual supported component exposes only its verified properties. An
19
+ unverified property is absent from its public parameter contract and is rejected
20
+ when requested; it does not make already-verified properties unavailable.
21
+
22
+ **Component contract** — The machine-readable source of truth for a supported
23
+ component's name, public properties, types, required rules, and context
24
+ inputs/outputs. Derived component lists are updated by an explicit sync command
25
+ and checked for drift before a change is accepted.
26
+
27
+ **Core capability** — A stable shared operation such as temporary save/readback
28
+ or workflow compilation. Component-specific logic remains private by default;
29
+ it is promoted to the core only after a second real component needs the same
30
+ operation.
31
+
32
+ **Unsupported capability** — A platform capability lacking the required
33
+ component contract or verified native DTO. It is not registered in the Skill;
34
+ the Skill must report it as unsupported rather than fabricate a value.
35
+
36
+ ## Generation Lifecycle
37
+
38
+ **Generation attempt** — An actionflow application created by one execution of
39
+ the generator for a semantic plan; a failed attempt may be disabled and
40
+ removed, while an old unmarked attempt remains a manual-cleanup candidate.
41
+
42
+ **Formal actionflow** — The one current generated application whose save,
43
+ enablement, and formal readback have all succeeded.
44
+
45
+ **Duplicate generated actionflow** — A non-current `AI-` application carrying
46
+ the same generator identity as the current formal actionflow, even when its
47
+ display name is different.
48
+
49
+ **Generator identity** — The stable identity derived from the semantic plan
50
+ while excluding only its display name and description; it is distinct from the
51
+ human-readable actionflow name.
52
+
53
+ ## Existing Actionflow Modification
54
+
55
+ **Modification target actionflow** — The exact existing application identified
56
+ by `appId`; a display name or fuzzy search is never sufficient to select it.
57
+
58
+ **Original formal design** — The current design returned by the target
59
+ actionflow's active scene before an update. It is the update baseline and is
60
+ backed up before any write.
61
+
62
+ **Preserving update** — An update that applies only explicitly declared
63
+ operations to the original formal design and retains every unmentioned node
64
+ and property. The save request keeps the baseline IDs, but the platform may
65
+ reallocate action/output IDs when creating a new version; readback must match
66
+ the new version by tree position/type when an ID changes.
67
+
68
+ **Modification backup** — The complete original formal-design response stored
69
+ before a preserving update. It is evidence for review and manual recovery; the
70
+ CLI does not silently use it to overwrite the target after a failed save or
71
+ readback.
@@ -0,0 +1,159 @@
1
+ ---
2
+ name: generating-actionflows
3
+ description: "将业务需求编译为 Weaver ESB 动作流,或读取已有动作流后按原 ID 保留式修改:查询真实对象、正式保存、回读校验并返回设计器链接。运行能力来自 e10-cli 的 actionflow 命令组(复用 e10-cli 登录态)。新建默认保存并启用;仅当用户明确要求暂存时传 mode:stash。已有动作流修改走 update。"
4
+ ---
5
+
6
+ # Weaver 动作流生成
7
+
8
+ 将需求编译为「触发器 → 动作链 → 结束」的 ESB 动作流。先发现真实平台数据,再生成;不根据名称、历史场景或示例猜测任何平台对象。
9
+
10
+ 运行能力来自 `e10-cli actionflow` 命令组(已合并进 e10-cli 本体,复用其登录态,无需单独导出环境变量)。默认**保存并启用**(saveDesign saveAndStart=true);仅当用户明确要求暂存时传 `mode:"stash"` 走暂存(saveStashSnapshot)。
11
+
12
+ ## 运行与维护边界
13
+
14
+ - **运行模式(默认)**:只运行 `e10-cli actionflow <命令>`、读取本 Skill 的当前阶段/当前组件说明;不得读取或修改 e10-cli 源码(`packages/cli/src/services/actionflow/`)。
15
+ - **维护模式**:仅在用户明确要求修复、审计或新增组件时编辑实现;修改后必须跑类型检查、测试、构建和本 Skill 校验。校验目标固定为 `skill/actionflows`:不要把上层 `skill` 或发布目录 `skill-docs` 当作这个动作流 Skill 的标准目录校验。上层入口包含 E10 包的自定义元数据(如 `author`、`category`、`version`、`display_name`),不因通用校验器不认识这些扩展字段而改写、删除或迁移它们。
16
+ - 参数、默认值、动态必填、真实对象结构的唯一权威是 `e10-cli actionflow component-describe <type>`,参考文件不重复属性表。
17
+
18
+ ## 生成 SOP
19
+
20
+ 按顺序推进;只读取当前步骤需要的信息。每个场景是独立事务。
21
+
22
+ ### 1. 识别与选择
23
+
24
+ 1. 拆出触发器、动作顺序、条件/循环、固定资源与动态来源。
25
+ 2. 运行 `e10-cli actionflow component-list`,选择已登记组件。
26
+ 3. 对每一个选中的组件运行 `e10-cli actionflow component-describe <type>`,再只读取下方目录中该组件的 Markdown。
27
+ 4. 若存在多个业务选择会改变结果,或用户明确指定的资源找不到,暂停说明差异并询问;其余可查询的信息直接查询。
28
+
29
+ ### 2. 发现真实数据
30
+
31
+ 按 `component-describe` 的 `propertySources` 查询本次租户数据:
32
+
33
+ - 流程:`e10-cli actionflow workflow-browser-list` / `workflow-search` / `workflow-nodes`。
34
+ - 流程动态字段:`e10-cli actionflow workflow-context-fields`。默认每页 20 条;按需求字段名先传 `query`(例如 `{"workflowId":"<id>","query":"数据ID"}`),只使用本次返回的 `fields[].paramKey`。完整响应过大时用 `--out context.json` 落盘,禁止依赖终端截断后的片段。
35
+ - e-builder:`e10-cli actionflow form-applications` → `form-list` → `form-fields`。`form-applications` 返回的业务应用 `id` 用于下一步:`e10-cli actionflow form-list '{"groupId":"<业务应用ID>"}'`;这里必须是 `groupId`,不能传 `appId`。表单字段查询才使用 `{"tableId":"<表单ID>","appId":"<业务应用ID>"}`。
36
+ - 人员:`e10-cli actionflow recipient-search`。
37
+ - 人员入职/更新字段:`e10-cli actionflow hrm-onboarding-fields`。
38
+ - 文档状态:`e10-cli actionflow document-statuses`。
39
+
40
+ 查不到真实对象、字段或前端 DTO 时,不猜测 ID 或对象结构,说明未支持字段并停止该字段的生成。
41
+
42
+ ### 3. 组装语义计划
43
+
44
+ 1. 写入 `event`、`actions`,条件和循环作为动作拓扑的一部分。
45
+ 2. 只传 `component-describe` 声明的参数;固定值与动态值根据业务需求选择,不能为了动态而动态。
46
+ 3. 中文 plan 写入当前工作区 `.actionflow-plans/`,以 `planFile` 传给 CLI;不在 Skill 目录写临时文件。CLI 不会自动删除 plan;确认 `valid=true`、`saved=true`、`readBackVerified=true` 后才允许手工清理。
47
+ 4. 不手写 `Output`、平台内部字段或 FormulaBean DTO,除非组件契约明确要求前端原对象。
48
+ 5. 定时组件只使用 Quartz Cron:传 `cornString`,不传 `rate`、`hour`、`cycle`、`day` 等历史调度参数。
49
+ 6. 触发器或查询组件未被需求明确限制输出字段时,不传 `queryFields`(或传空数组):CLI 会默认全选,包含“数据ID”。如果需求明确引用某个业务字段,必须从当前租户的实时字段接口/字段选择器获取完整字段对象并保存真实 `id`,不能凭字段名、临时 ID 或只拼 `id/content`。查询节点还必须使用自身真实节点 ID 作为 `dataSource.enquiryId`,否则平台可能静默丢弃业务字段。正式回读必须确认每个声明的 `queryFields` 仍存在;缺失即生成失败,不能仅凭接口 `code=200`、`saved=true` 判定成功。e-builder 数据触发后发送消息且未显式给链接时,CLI 自动补 PC/移动端当前记录详情链接;不手写 `{formId}` / `{dataId}` 的 FormulaBean。查询结果字段动态赋值必须按手工设计器对象编译:普通业务字段使用 `FormField.<查询表单ID>.field_<真实字段ID>`,`config.paramKey` 使用 `<查询表单ID>.field_<真实字段ID>`,`config.fieldInfo.tablePrimaryKey` 为 `FormField`;系统字段按平台真实字段键(例如 `id`)保留。禁止使用 `FormData.<表单ID>[临时位置]...`,也禁止把临时公式 ID 当作 `frontId`。
50
+ 7. `ActionEbAdd` 批量新增以 `basisValue` 为明细行上下文:来源于该行的字段都用 `mapping`,编译为“依据值下级”(`switchType:"sub"`),下拉字段也同样处理。只有已核实来源/目标选项 ID 不同且语义需要转换时,才使用 `SWITCH`。关联 e-builder 字段应引用查询结果的 `数据ID`,固定格式为 `{target,kind:"query_result",source:"<EnquiryForm ref>",formId,fieldId:"id",index:0}`;`kind:"enquiry"`、`sourceId` 等旧写法会直接报错,绝不降级为空固定值。
51
+ 8. 动态赋值可使用或新建动作流变量、租户常量:已有资源必须用真实 ID;计划新建变量写顶层 `variables[]`,新建常量写 `constantDefinitions[]`,常量分组可传 `groupPk` 或 `groupName`。变量按当前 `applicationId + sceneId` 隔离,常量按分组跨动作流复用。生成时先调用真实接口创建/解析资源,再编译为变量 `type:"7"` 或常量 `type:"5"` FormulaBean;详细格式见 `references/dynamic_resources.md`。消息 `parts` 也支持 `variable`/`constant` 动态片段。
52
+ 8. 自定义事件和内置 MQ 的参数必须按对应平台组件说明提供原生参数对象;`CustomTrigger.customData`、`InnerMQListener.receiveParams`、`InnerMQSend.sendParams` 不能用猜测的字段替代。若验证要求“输入参数里有字段”,必须在生成前提供至少一行真实原生参数;`tables:[]`、`tableList:[]` 或省略 `receiveParams` 只能表示无输入参数,不能作为有参数的占位。`InnerMQListener` 与 `InnerMQSend` 是动作流级互斥组件,同一计划(包括条件/循环嵌套)同时出现时,CLI 在任何平台写接口前直接报错。
53
+ 9. 根触发节点的 `event.attr.icon` 必须使用平台真实图标:`CustomTrigger` 为 `Icon-N-Triggerrul`,`InnerMQListener` 为 `Icon-built-in-mq-listening-mcolor`;组件目录里的动作图标不能覆盖根触发器图标。保存后回读必须同时检查触发器图标、已声明输入参数的数量和查询字段,不能仅凭 `valid=true` / `saved=true` 判定配置正确。
54
+ 10. `InnerMQSend.sendParams.tableData` 必须遵循“参数类型决定数据类型候选”的平台规则:普通非数组标量通常只有“属性”一个选项,不应伪造可下拉状态;数组或 `json/xml/xml_string` 结构化参数才按真实候选设置 `dataType`,结构化参数的下级用 `parentId` 表达,并保留父子约束。具体规则见 `references/components/message/InnerMQSend.md`。
55
+
56
+ ### 4. 生成与逐场景反馈
57
+
58
+ 1. 一次只运行一个 `generate`。
59
+ 2. 成功保存并启用后立即返回名称、状态与 `workflowUrl`,再处理下一个场景。
60
+ 3. 批量任务完成后再给汇总表;一个场景失败不阻断其他场景。
61
+
62
+ ### 4.1 修改已有动作流
63
+
64
+ 已有动作流必须走独立的 `update` 命令,不得把已有 `appId` 塞进 `generate`,也不得按名称猜测目标:
65
+
66
+ ```bash
67
+ e10-cli actionflow update '@update-plan.json' --out update-result.json
68
+ ```
69
+
70
+ 修改计划必须使用以下结构:
71
+
72
+ ```json
73
+ {
74
+ "appId": "已有动作流的精确 ID",
75
+ "operations": [
76
+ {"op":"edit-node", "nodeId":"原节点 ID", "patch":{"data":{"...":"..."}}},
77
+ {"op":"delete-node", "nodeId":"要删除的原节点 ID"},
78
+ {"op":"add-node", "parentPath":"/actions", "index":1, "node":{"type":"平台节点类型","data":{}}},
79
+ {"op":"replace", "path":"/actions/0/data/...", "value":"新值"},
80
+ {"op":"remove", "path":"/actions/0/data/..."}
81
+ ]
82
+ }
83
+ ```
84
+
85
+ 操作必须显式声明;`edit-node` 深合并 `patch`,原节点 `id/wId` 不允许修改;`delete-node` 会从设计树移除节点并填充 `deleteActions`;`add-node` 使用 `read-design --out` 得到的平台原生节点结构,可用 `index` 插入指定位置,自动补雪花 ID 并填充 `addIds`。新增执行节点必须插在终止节点之前,且同步修改终止节点的 `sources`。回读对象中的平台展示字段会先转换为 `saveDesign` 接受的写入 DTO(例如 EventButton 的 `eventButtonId` 和按钮对象),不能把回读 JSON 原样作为接口体。更新计划中的节点 ID 必须来自本次正式 `read-design`,不能复用更早版本的 ID。保存新版时平台可能为动作/出口重新分配内部 ID;回读校验优先按 ID,ID 变化时按动作树路径和类型匹配,不能因版本复制产生新 ID 就误判失败。`sources[].id` 由平台保存时动态分配/回读时可能省略,必须通过稳定的 `sources[].wId` 校验。未操作的节点和属性从正式回读原样作为保存基线,不会被新建编译器重建;新建动作流的 `assistLayer` 只写平台空骨架 `{"nodes":[],"layout":{}}`,更新已有动作流保留原生 X6 画布节点,不得伪造扁平 `{id,type,layout}` 节点,也不能把旧版本悬空节点带入新版。更新前自动备份完整正式设计到 `.actionflow-plans/backups/`;也可以传 `backupFile` 指定路径。
86
+
87
+ 更新默认根据目标动作流当前状态决定 `saveAndStart`,保持启用/未启用状态;只有计划显式传 `saveAndStart` 才改变它。触发器 `event` 必须原样保留,禁止通过 `replace/remove` 修改 `/event` 或其子路径;如果要改变触发类型、触发表单、触发时机或触发器参数,必须新建动作流。正式更新固定带 `saveNewVersion:true`,保存为原动作流的新版本。保存响应未返回新版 ID 时,CLI 必须重新查询版本列表定位版本号更大的新场景,再对新版正式回读;定位不到新版时不能拿旧版冒充校验通过。保存后必须正式回读并检查编辑、新增、删除及未修改节点是否仍在;接口失败或回读失败只返回原因和备份位置,不自动回滚、覆盖或删除目标动作流。
88
+
89
+ ### 5. 回读与异常分流
90
+
91
+ - 预检/编译失败:修正计划或报告缺失真实对象;不会创建动作流。
92
+ - 保存并启用成功但正式回读不一致:不得宣称验证通过;根据回读定位计划或组件问题,修复后重试,旧测试流由 CLI 回收。
93
+ - 保存并启用成功且正式回读通过:返回链接。
94
+ - 保存失败:返回平台错误原因;不自动退回暂存。
95
+ - 平台接口或前端编辑器不可用:明确区分「JSON/readBack 已验证」和「UI 待确认」。
96
+
97
+ ## 流程节点触发绑定
98
+
99
+ `generate` 的 event 节点(`ApproveTrigger`)自带流程节点触发绑定:单条规则用 `workflowPath`(流程 id)+ `triggerTiming`;同一流程有多个触发时机时用 `triggerRules` 数组,编译为一个 `singleApproveConfigs[workflowId]` 规则数组。节点型时机使用 `approveNode`,出口型 `link` 必须使用真实 `approveLink`;编译器逐条校验可选节点类型与执行时间,不走 pathdef/addaction。多规则需要不同后续动作时,先按触发器上下文 `triggerType` / `executeTime` / `triggerNodeOrLinkId` 放 `Condition` 分支。完整联动表见 `references/components/workflow/ApproveTrigger.md`。
100
+
101
+ `generate` 默认**保存并启用**(saveDesign saveAndStart=true,正式版本生效),正式回读用 `getDesignBySceneId`。仅 `mode:"stash"` 时走暂存(saveStashSnapshot,非正式生效,需设计器手动发布)。
102
+
103
+ ## CLI
104
+
105
+ ```bash
106
+ e10-cli actionflow component-list
107
+ e10-cli actionflow component-describe <type>
108
+ e10-cli actionflow generate '{"planFile":"@<绝对路径>","appName":"AI-名称"}' --out generate-result.json # 默认保存并启用
109
+ e10-cli actionflow generate '{"planFile":"@...","mode":"stash"}' # 显式暂存(不启用)
110
+ e10-cli actionflow update '@update-plan.json' --out update-result.json # 读取后按原 ID 保留式修改
111
+ ```
112
+
113
+ 常用发现命令:`form-applications`、`form-list`、`form-fields`、`workflow-browser-list`、`workflow-search`、`workflow-nodes`、`workflow-context-fields`、`recipient-search`、`document-statuses`、`hrm-onboarding-fields`、`variable-list`、`variable-create`、`constant-list`、`constant-group-list`、`constant-group-create`、`constant-create`、`http-connectors`、`http-resources`、`http-interfaces`、`http-interface-detail`、`design-versions`、`read-stash`。变量/常量计划定义和引用见 `references/dynamic_resources.md`。
114
+
115
+ ## 触发器边界
116
+
117
+ 当前可生成的事件触发器:`ApproveTrigger`(流程事件)、`EventFormData`(e-builder 数据新增/更新/删除/字段变化)、`EventButton`(点击 e-builder 指定按钮)、`DateTrigger`、`TimeBatchTrigger`、`SimpleScheduler`、`CustomTrigger`(自定义事件)和 `InnerMQListener`(内置 MQ 监听)。`EventButton` 必须先用 `e10-cli actionflow form-buttons '{"tableId":"<表单ID>","appId":"<应用ID>"}'` 查询真实按钮,再以 `targetForm`、`buttonType:[{id,name,buttonLocation:"before"|"after"}]` 和可选 `triggerType` 生成;不得用 `EventFormData` 冒充按钮点击。`CustomTrigger` 和 `InnerMQListener` 的原生参数要求见 `references/components/trigger/CustomTrigger.md`、`references/components/trigger/InnerMQListener.md`。
118
+
119
+ 动作 `Http` 用于调用当前租户已配置的 HTTP/HTTPS 接口,参数要求见 `references/components/http/Http.md`;HTTPS 使用同一个 `Http` 组件,不能把协议地址当成新的组件类型。生成前会实时读取并校验“连接器 → 资源 → 接口 → 接口详情”,节点标题按“当前连接器: 当前接口”回填,图标按当前连接器目录回填;不存在、跨租户或归属不一致时拒绝生成,不信任旧环境的 E9 等名称、地址、图标或原生映射。HTTP 请求字段通过 `inputParams` 配置,必须用接口详情真实返回的 `table`/`paramKey`,CLI 写入参数行的 `formulaData`,支持统一的固定值、上下文、系统变量及函数/公式赋值;不能猜参数或直接改写 `request.tables`。动作 `InnerMQSend` 用于向平台内置 MQ 发送消息,参数要求见 `references/components/message/InnerMQSend.md`。`InnerMQListener` 和 `InnerMQSend` 不能放在同一个动作流中;该约束也适用于 `update` 修改后的完整设计。
120
+
121
+ 动作 `DMLExecute` 用于执行自定义 SQL 或存储过程,参数要求见 `references/components/database/DMLExecute.md`。只支持新版数仓结构,`operateType` 固定为 `0`;数据源连接 ID 必须通过 `actionflow datasource-list` 从当前环境取得,SQL 占位符与 `fieldSet` 必须严格对应。含 DML 的生成结果还要检查 `sqlAnalysisOk=true`,因为平台 SQL 分析失败可能不会阻断保存。
122
+
123
+ 含复杂 JSON 时优先用 `generate` 的 `planFile` 参数,且必须写为 `@plan.json` 或 `@绝对路径`,避免 shell 转义改变内容。只以终端摘要的 `valid/saved/readBackVerified/workflowUrl` 判断成功;完整结果用 `--out` 保存,禁止依据截断输出重试。
124
+
125
+ `update` 同样只以终端摘要的 `valid/saved/readBack.ok/workflowUrl` 判断成功;完整设计和回读结果使用 `--out` 保存。修改计划只接受 `@文件名` 形式,不兼容裸文件名。已有动作流更新时 `event` 触发器是不可变边界:更新计划不得替换或修改 `/event`,若需求要改变触发类型、触发表单、触发时机或触发器参数,CLI 必须在 `check/saveDesign` 前拒绝,并提示新建动作流。通过更新校验后,正式保存固定发送 `saveNewVersion:true`,在原动作流下创建平台新版本;保存后按新版场景 ID 回读,不能因平台重分配动作节点 ID 或终止节点 ID 而误报失败;`saveAndStart` 只继承/控制启用状态,不改变这一版本策略。
126
+
127
+ 成功生成后,CLI 会在应用描述中写入稳定的 `e10-cli:actionflow:v1:<plan指纹>` 标识,并仅清理**同一标识、`AI-` 前缀且不是当前应用**的旧生成尝试;名称可以不同。每条都执行“禁用 → 回收删除 → getAppById 确认不存在”。没有该标识的历史动作流不自动删除,避免误删人工流;清理结果/失败原因返回在 `duplicateCleanup`,当前失败应用的回收失败返回 `cleanupWarning`,不把接口失败归因于 Skill。
128
+
129
+ ## 组件目录
130
+
131
+ 选中类型后只读取 `references/components/<分类>/<type>.md` 对应文件;不读取同分类的其他组件文件。
132
+
133
+ | 设计器分类 | 组件文件目录 |
134
+ |---|---|
135
+ | e-builder 数据与表单触发 | `references/components/ebuilder/` |
136
+ | 流程 | `references/components/workflow/` |
137
+ | 文档 | `references/components/document/` |
138
+ | 人员 | `references/components/personnel/` |
139
+ | 逻辑 | `references/components/logic/` |
140
+ | HTTP/HTTPS 接口 | `references/components/http/` |
141
+ | 消息提醒 | `references/components/message/` |
142
+ | 内置 MQ / 自定义事件 | `references/components/trigger/`、`references/components/message/` |
143
+ | 会议、日程 | `references/components/calendar/` |
144
+ | 简单定时器 | `references/components/trigger/` |
145
+
146
+ 额外按需规则:
147
+
148
+ - 使用流程/表单触发器的系统字段、数据 ID 或动态引用时,读取 `references/trigger_runtime_notes.md`。
149
+ - 使用 `Condition` 或 e-builder 筛选条件时,读取 `references/condition_rules.md`。
150
+ - 组件需要计算、转换或函数树时,读取 `references/function_rules.md`;仅在该组件的说明允许函数树时使用。
151
+
152
+ 筛选条件左值的字段身份必须按实时 `componentKey` 生成,不能只按字段 ID 是否为数字判断。普通 e-builder 业务字段才使用 `field_<id>`;`Workflow` 关联流程字段使用原始数字 `fieldName`、`fieldType:"String"`、空 `module`/`originBrowserType`、`formInfo.formId/layoutId`、顶层 `sformId` 和仅含 `fieldId` 的 `config`。Workflow 的 `sformId` 必须由 `workflowPath.formIds` 反查真实流程表单对象;查不到就停止,不能用目标表单版本 ID兜底。保存后正式回读必须检查左值没有出现“已删除”。
153
+
154
+ ## 不变约束
155
+
156
+ - 动作流名称默认 `AI-` 前缀。
157
+ - 所有流程、表单、字段、人员、目录、规则和身份均取自当前租户。
158
+ - 不支持的组件或缺少真实前端对象的属性明确拒绝,不走保底伪造。
159
+ - 凭据只复用 e10-cli 登录态,不写入 Skill、计划或输出。