@fantasticit/sumi 0.6.1 → 0.7.1

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.
Files changed (69) hide show
  1. package/README.md +3 -1
  2. package/dist/agents.js +1 -1
  3. package/dist/agents.js.map +1 -1
  4. package/dist/cli.d.ts +10 -1
  5. package/dist/cli.js +26 -5
  6. package/dist/cli.js.map +1 -1
  7. package/dist/fix.js +1 -1
  8. package/dist/fix.js.map +1 -1
  9. package/dist/launcher.cjs +23 -3
  10. package/dist/launcher.d.ts +10 -1
  11. package/dist/launcher.js +24 -4
  12. package/dist/launcher.js.map +1 -1
  13. package/dist/scaffold-commands.js +2 -2
  14. package/dist/scaffold-commands.js.map +1 -1
  15. package/dist/vendor.js +1 -1
  16. package/dist/vendor.js.map +1 -1
  17. package/node_modules/@sumi/create/README.md +1 -1
  18. package/node_modules/@sumi/create/dist/scaffold.js +4 -1
  19. package/node_modules/@sumi/create/dist/scaffold.js.map +1 -1
  20. package/node_modules/@sumi/create/package.json +1 -1
  21. package/node_modules/@sumi/create/template/control/config.yaml +3 -0
  22. package/node_modules/@sumi/kernel/package.json +2 -2
  23. package/node_modules/@sumi/plugin-sdk/README.md +17 -16
  24. package/node_modules/@sumi/plugin-sdk/dist/command-args.d.ts +22 -0
  25. package/node_modules/@sumi/plugin-sdk/dist/command-args.js +44 -0
  26. package/node_modules/@sumi/plugin-sdk/dist/command-args.js.map +1 -0
  27. package/node_modules/@sumi/plugin-sdk/dist/index.d.ts +1 -0
  28. package/node_modules/@sumi/plugin-sdk/dist/index.js +1 -0
  29. package/node_modules/@sumi/plugin-sdk/dist/index.js.map +1 -1
  30. package/node_modules/@sumi/plugin-sdk/package.json +1 -1
  31. package/node_modules/@sumi/plugins-core/README.md +7 -2
  32. package/node_modules/@sumi/plugins-core/dist/commands/adopt.js +3 -1
  33. package/node_modules/@sumi/plugins-core/dist/commands/adopt.js.map +1 -1
  34. package/node_modules/@sumi/plugins-core/dist/commands/baseline.js +4 -2
  35. package/node_modules/@sumi/plugins-core/dist/commands/baseline.js.map +1 -1
  36. package/node_modules/@sumi/plugins-core/dist/plugins/coverage.js +57 -5
  37. package/node_modules/@sumi/plugins-core/dist/plugins/coverage.js.map +1 -1
  38. package/node_modules/@sumi/plugins-core/dist/plugins/exec.js +4 -2
  39. package/node_modules/@sumi/plugins-core/dist/plugins/exec.js.map +1 -1
  40. package/node_modules/@sumi/plugins-core/package.json +2 -2
  41. package/node_modules/@sumi/plugins-governance/README.md +18 -8
  42. package/node_modules/@sumi/plugins-governance/dist/commands/approve.js +2 -0
  43. package/node_modules/@sumi/plugins-governance/dist/commands/approve.js.map +1 -1
  44. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js +24 -20
  45. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js.map +1 -1
  46. package/node_modules/@sumi/plugins-governance/dist/commands/unlock.js +2 -0
  47. package/node_modules/@sumi/plugins-governance/dist/commands/unlock.js.map +1 -1
  48. package/node_modules/@sumi/plugins-governance/dist/pr-report-publish.d.ts +48 -0
  49. package/node_modules/@sumi/plugins-governance/dist/pr-report-publish.js +181 -0
  50. package/node_modules/@sumi/plugins-governance/dist/pr-report-publish.js.map +1 -0
  51. package/node_modules/@sumi/plugins-governance/dist/pr-report-status.js +4 -1
  52. package/node_modules/@sumi/plugins-governance/dist/pr-report-status.js.map +1 -1
  53. package/node_modules/@sumi/plugins-governance/instructions/push.md +2 -1
  54. package/node_modules/@sumi/plugins-governance/package.json +2 -2
  55. package/node_modules/@sumi/plugins-governance/sumi-plugins.yaml +5 -1
  56. package/node_modules/@sumi/plugins-openspec/package.json +2 -2
  57. package/node_modules/@sumi/plugins-precedent/dist/commands/promote.js +5 -0
  58. package/node_modules/@sumi/plugins-precedent/dist/commands/promote.js.map +1 -1
  59. package/node_modules/@sumi/plugins-precedent/package.json +3 -3
  60. package/node_modules/@sumi/plugins-review/README.md +7 -4
  61. package/node_modules/@sumi/plugins-review/dist/commands/submit.js +49 -5
  62. package/node_modules/@sumi/plugins-review/dist/commands/submit.js.map +1 -1
  63. package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js +21 -7
  64. package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js.map +1 -1
  65. package/node_modules/@sumi/plugins-review/dist/review.d.ts +38 -2
  66. package/node_modules/@sumi/plugins-review/dist/review.js +95 -7
  67. package/node_modules/@sumi/plugins-review/dist/review.js.map +1 -1
  68. package/node_modules/@sumi/plugins-review/package.json +3 -3
  69. package/package.json +10 -10
@@ -1,23 +1,26 @@
1
1
  import { mkdtempSync, writeFileSync } from 'node:fs';
2
2
  import { tmpdir } from 'node:os';
3
3
  import { join } from 'node:path';
4
- import { PROJECT_SUMI, spawnCommandSync } from '@sumi/plugin-sdk';
4
+ import { guardCommandArgs, PROJECT_SUMI, spawnCommandSync } from '@sumi/plugin-sdk';
5
5
  import { runGateFlow, workspaceCommand } from '../checkout.js';
6
6
  import { resolvePrBase } from '../pr-base.js';
7
7
  import { PR_REPORT_MARKER, prReportHeadMarker } from '../pr-report-markers.js';
8
+ import { callerDir, ghRunner, parsePrReportArgs, PR_REPORT_USAGE, publishReport, resolveAttachments } from '../pr-report-publish.js';
8
9
  /**
9
10
  * sumi pr-report <PR 号>:以 PR 的完整范围(与目标分支的合并基础..头提交)在头提交的独立检出中
10
11
  * 按门禁配置运行门禁流程,把结论、各步骤状态、findings 与各步骤的报告段落发布为一条 PR 评论;
11
12
  * 同一 PR 再次运行时更新这条评论。评审未完成时不发布,给出工作区命令。依赖已登录的 gh。
13
+ * --attach <文件>[#说明](可重复)随评论上传图片或视频(需要 gh ≥ 2.100);编辑评论无法上传附件,
14
+ * 因此带附件时新建报告评论并删除旧的。
12
15
  */
13
16
  const root = process.env.SUMI_ROOT ?? process.cwd();
14
- const pr = process.argv[2];
15
17
  function fail(message, code = 1) {
16
18
  process.stderr.write(`${message}\n`);
17
19
  process.exit(code);
18
20
  }
21
+ const runGh = ghRunner(root);
19
22
  function gh(args) {
20
- const r = spawnCommandSync('gh', args, { cwd: root, encoding: 'utf8', windowsHide: true });
23
+ const r = runGh(args);
21
24
  if (r.error)
22
25
  fail('未找到 gh:PR 报告通过 GitHub CLI 读写 PR,请安装并登录 gh(gh auth login)', 3);
23
26
  if (r.status !== 0)
@@ -85,8 +88,16 @@ function compose(run, url, base, oid, baseBranch) {
85
88
  lines.push('', `<sub>由 \`sumi pr-report\` 生成;再次运行会更新本评论。PR:${url}</sub>`);
86
89
  return lines.join('\n');
87
90
  }
88
- if (!pr || !/^\d+$/.test(pr))
89
- fail('用法:sumi pr-report <PR 号>', 3);
91
+ // 参数与附件在运行耗时的门禁流程之前校验
92
+ guardCommandArgs(process.argv.slice(2), { usage: PR_REPORT_USAGE, options: ['attach'] }, 3);
93
+ const parsed = parsePrReportArgs(process.argv.slice(2));
94
+ if ('error' in parsed)
95
+ fail(parsed.error, 3);
96
+ const pr = parsed.pr;
97
+ const attachments = resolveAttachments(parsed.attach, callerDir(root));
98
+ if ('error' in attachments)
99
+ fail(attachments.error, 3);
100
+ const attach = attachments.attach;
90
101
  const view = JSON.parse(gh(['pr', 'view', pr, '--json', 'headRefOid,baseRefName,baseRefOid,url']));
91
102
  const head = tryGit(['rev-parse', 'HEAD']);
92
103
  if (head !== view.headRefOid) {
@@ -104,25 +115,18 @@ const run = runGateFlow(root, view.headRefOid, base, (line) => process.stderr.wr
104
115
  // 任一步骤待处理(例如评审未完成)都不发布:其他步骤失败时结论为 fail,不能只看结论
105
116
  const pending = (run.record?.steps ?? []).filter((s) => s.state === 'pending').map((s) => s.id);
106
117
  if (run.conclusion === 'pending' || pending.length) {
107
- fail(`PR 范围内有待处理项${pending.length ? `(${pending.join('、')})` : ''},没有发布报告。请在工作区运行 ${workspaceCommand(run, base)},按简报完成后再运行 ${PROJECT_SUMI} pr-report ${pr}`);
118
+ fail(`PR 范围内有待处理项${pending.length ? `(${pending.join('、')})` : ''},没有发布报告。请在工作区运行 ${workspaceCommand(run, base)},按简报完成后再运行 ${PROJECT_SUMI} pr-report ${pr}${attach.length ? '(带上原 --attach 参数)' : ''}`);
108
119
  }
109
120
  if (!run.conclusion)
110
121
  fail(`没有得到结论,没有发布报告:${run.problem ?? run.brief}`);
111
122
  const body = compose(run, view.url, base, view.headRefOid, view.baseRefName);
112
123
  const file = join(mkdtempSync(join(tmpdir(), 'sumi-pr-report-')), 'body.md');
113
124
  writeFileSync(file, body);
114
- const existing = gh([
115
- 'api',
116
- `repos/{owner}/{repo}/issues/${pr}/comments`,
117
- '--paginate',
118
- '--jq',
119
- `.[] | select(.body | startswith("${PR_REPORT_MARKER}")) | .id`,
120
- ])
121
- .split('\n')
122
- .filter(Boolean)[0];
123
- if (existing)
124
- gh(['api', '-X', 'PATCH', `repos/{owner}/{repo}/issues/comments/${existing}`, '-F', `body=@${file}`]);
125
- else
126
- gh(['pr', 'comment', pr, '--body-file', file]);
127
- process.stdout.write(`已${existing ? '更新' : '发布'} PR #${pr} 的检查报告:结论 ${run.problem ? STATE.blocked : (STATE[run.conclusion] ?? run.conclusion)}\n${view.url}\n`);
125
+ const published = publishReport({ pr, bodyFile: file, attach, gh: runGh });
126
+ if (!published.ok)
127
+ fail(published.message, 3);
128
+ if (published.warning)
129
+ process.stderr.write(`警告:${published.warning}\n`);
130
+ const verb = { created: '发布', updated: '更新', replaced: '重新发布' }[published.action];
131
+ process.stdout.write(`已${verb} PR #${pr} 的检查报告${attach.length ? `(附件 ${attach.length} 个)` : ''}:结论 ${run.problem ? STATE.blocked : (STATE[run.conclusion] ?? run.conclusion)}\n${view.url}\n`);
128
132
  //# sourceMappingURL=pr-report.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pr-report.js","sourceRoot":"","sources":["../../src/commands/pr-report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pr-report.js","sourceRoot":"","sources":["../../src/commands/pr-report.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
+ import { guardCommandArgs } from '@sumi/plugin-sdk';
1
2
  import { confirmOnTty, writeUnlock } from '../state.js';
2
3
  /** sumi unlock [--minutes N]:由人开启一个限时窗口,期间允许 AI 编辑受保护路径(推送前仍需确认)。 */
3
4
  const root = process.env.SUMI_ROOT ?? process.cwd();
5
+ guardCommandArgs(process.argv.slice(2), { usage: '用法:sumi unlock [--minutes N]', options: ['minutes'] });
4
6
  const i = process.argv.indexOf('--minutes');
5
7
  const minutes = i >= 0 ? Number(process.argv[i + 1]) : 30;
6
8
  if (!Number.isFinite(minutes) || minutes <= 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"unlock.js","sourceRoot":"","sources":["../../src/commands/unlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,qEAAqE;AACrE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACpD,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC5C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,IAAI,CAAC;IACH,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,MAAM,OAAO,oCAAoC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAI,KAAe,CAAC,OAAO,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"unlock.js","sourceRoot":"","sources":["../../src/commands/unlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,qEAAqE;AACrE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACpD,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,8BAA8B,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACzG,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC5C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,IAAI,CAAC;IACH,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,MAAM,OAAO,oCAAoC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAI,KAAe,CAAC,OAAO,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { CommandResult } from './pr-report-status.js';
2
+ /** gh pr comment 单次最多接受的附件数。 */
3
+ export declare const MAX_ATTACHMENTS = 50;
4
+ export declare const PR_REPORT_USAGE = "\u7528\u6CD5\uFF1Asumi pr-report <PR \u53F7> [--attach <\u6587\u4EF6>[#\u8BF4\u660E]]...";
5
+ export interface PrReportArgs {
6
+ pr: string;
7
+ attach: string[];
8
+ }
9
+ /** 解析 pr-report 的参数:一个 PR 号,任意个 --attach <值> / --attach=<值>,位置不限。出错时返回错误说明。 */
10
+ export declare function parsePrReportArgs(argv: string[]): PrReportArgs | {
11
+ error: string;
12
+ };
13
+ /**
14
+ * 调用者所在目录。插件命令由 CLI 在项目根目录下启动,调用者的目录只能从 shell 维护的 PWD 得知;
15
+ * PWD 缺失、不是目录或不在项目根目录之内(调用者目录一定在根目录之内,否则 CLI 找不到项目)时退回根目录。
16
+ */
17
+ export declare function callerDir(root: string, env?: NodeJS.ProcessEnv): string;
18
+ /**
19
+ * 校验附件并转为 gh 可用的参数值:路径按 cwd 解析为绝对路径,保留 `#说明`。
20
+ * 与 gh 的解析一致:整串本身是存在的文件时以整串为路径,否则以最后一个 `#` 之前的部分为路径。
21
+ */
22
+ export declare function resolveAttachments(specs: string[], cwd: string): {
23
+ attach: string[];
24
+ } | {
25
+ error: string;
26
+ };
27
+ export type GhRunner = (args: string[]) => CommandResult;
28
+ export declare function ghRunner(cwd: string): GhRunner;
29
+ export type PublishResult = {
30
+ ok: true;
31
+ action: 'created' | 'updated' | 'replaced';
32
+ attachments: number;
33
+ warning?: string;
34
+ } | {
35
+ ok: false;
36
+ message: string;
37
+ };
38
+ /**
39
+ * 发布报告评论。无附件时:已有报告评论则原地更新,否则新建。
40
+ * 有附件时:编辑评论无法上传附件,因此总是用 gh pr comment --attach 新建;已有报告评论时新建成功后再删除全部旧报告评论,
41
+ * 新建失败则旧报告保留;删除失败不影响已发布的新报告,返回警告。
42
+ */
43
+ export declare function publishReport(options: {
44
+ pr: string;
45
+ bodyFile: string;
46
+ attach: string[];
47
+ gh: GhRunner;
48
+ }): PublishResult;
@@ -0,0 +1,181 @@
1
+ import { realpathSync, statSync } from 'node:fs';
2
+ import { isAbsolute, relative, resolve } from 'node:path';
3
+ import { spawnCommandSync } from '@sumi/plugin-sdk';
4
+ import { PR_REPORT_MARKER } from './pr-report-markers.js';
5
+ /** gh pr comment 单次最多接受的附件数。 */
6
+ export const MAX_ATTACHMENTS = 50;
7
+ export const PR_REPORT_USAGE = '用法:sumi pr-report <PR 号> [--attach <文件>[#说明]]...';
8
+ /** 解析 pr-report 的参数:一个 PR 号,任意个 --attach <值> / --attach=<值>,位置不限。出错时返回错误说明。 */
9
+ export function parsePrReportArgs(argv) {
10
+ const attach = [];
11
+ let pr;
12
+ for (let i = 0; i < argv.length; i++) {
13
+ const arg = argv[i];
14
+ if (arg === '--attach') {
15
+ const value = argv[i + 1];
16
+ if (value === undefined || value === '' || value.startsWith('--'))
17
+ return { error: `--attach 缺少文件\n${PR_REPORT_USAGE}` };
18
+ attach.push(value);
19
+ i++;
20
+ }
21
+ else if (arg.startsWith('--attach=')) {
22
+ const value = arg.slice('--attach='.length);
23
+ if (!value)
24
+ return { error: `--attach 缺少文件\n${PR_REPORT_USAGE}` };
25
+ attach.push(value);
26
+ }
27
+ else if (arg.startsWith('-')) {
28
+ return { error: `未知参数:${arg}\n${PR_REPORT_USAGE}` };
29
+ }
30
+ else if (pr === undefined && /^\d+$/.test(arg)) {
31
+ pr = arg;
32
+ }
33
+ else {
34
+ return { error: `${pr === undefined ? '无效的 PR 号' : '多余的参数'}:${arg}\n${PR_REPORT_USAGE}` };
35
+ }
36
+ }
37
+ if (pr === undefined)
38
+ return { error: PR_REPORT_USAGE };
39
+ return { pr, attach };
40
+ }
41
+ /**
42
+ * 调用者所在目录。插件命令由 CLI 在项目根目录下启动,调用者的目录只能从 shell 维护的 PWD 得知;
43
+ * PWD 缺失、不是目录或不在项目根目录之内(调用者目录一定在根目录之内,否则 CLI 找不到项目)时退回根目录。
44
+ */
45
+ export function callerDir(root, env = process.env) {
46
+ const pwd = env.PWD;
47
+ if (!pwd || !isAbsolute(pwd))
48
+ return root;
49
+ try {
50
+ if (!statSync(pwd).isDirectory())
51
+ return root;
52
+ const rel = relative(realpathSync(root), realpathSync(pwd));
53
+ return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel)) ? pwd : root;
54
+ }
55
+ catch {
56
+ return root;
57
+ }
58
+ }
59
+ function fileKind(path) {
60
+ try {
61
+ const stat = statSync(path);
62
+ if (!stat.isFile())
63
+ return 'other';
64
+ return stat.size === 0 ? 'empty' : 'file';
65
+ }
66
+ catch {
67
+ return 'missing';
68
+ }
69
+ }
70
+ /**
71
+ * 校验附件并转为 gh 可用的参数值:路径按 cwd 解析为绝对路径,保留 `#说明`。
72
+ * 与 gh 的解析一致:整串本身是存在的文件时以整串为路径,否则以最后一个 `#` 之前的部分为路径。
73
+ */
74
+ export function resolveAttachments(specs, cwd) {
75
+ if (specs.length > MAX_ATTACHMENTS)
76
+ return { error: `附件最多 ${MAX_ATTACHMENTS} 个,当前 ${specs.length} 个` };
77
+ const attach = [];
78
+ for (const spec of specs) {
79
+ const whole = resolve(cwd, spec);
80
+ let path = whole;
81
+ let alt = '';
82
+ const hash = spec.lastIndexOf('#');
83
+ if (fileKind(whole) === 'missing' && hash > 0) {
84
+ path = resolve(cwd, spec.slice(0, hash));
85
+ alt = spec.slice(hash);
86
+ }
87
+ const kind = fileKind(path);
88
+ if (kind === 'missing')
89
+ return { error: `附件不存在:${spec}(解析为 ${path})` };
90
+ if (kind === 'other')
91
+ return { error: `附件不是普通文件:${spec}(解析为 ${path})` };
92
+ if (kind === 'empty')
93
+ return { error: `附件是空文件:${spec}(解析为 ${path})` };
94
+ attach.push(`${path}${alt}`);
95
+ }
96
+ return { attach };
97
+ }
98
+ export function ghRunner(cwd) {
99
+ return (args) => {
100
+ const r = spawnCommandSync('gh', args, { cwd, encoding: 'utf8', windowsHide: true });
101
+ return { status: r.status, stdout: r.stdout ?? '', stderr: r.stderr ?? '', error: r.error };
102
+ };
103
+ }
104
+ const GH_MISSING = '未找到 gh:PR 报告通过 GitHub CLI 读写 PR,请安装并登录 gh(gh auth login)';
105
+ function failure(args, r) {
106
+ if (r.error)
107
+ return GH_MISSING;
108
+ return `gh ${args.slice(0, 2).join(' ')} 失败:${r.stderr.trim()}`;
109
+ }
110
+ /**
111
+ * 已有的报告评论 id,按创建先后(id 递增)排序。正常只有一条;带附件重新发布时删除失败会残留多条,
112
+ * 此时最新一条是更新目标(与 pr-report-check 在没有绑定当前 head 的报告时取最新一条一致)。
113
+ */
114
+ function existingReports(gh, pr) {
115
+ const args = [
116
+ 'api',
117
+ `repos/{owner}/{repo}/issues/${pr}/comments`,
118
+ '--paginate',
119
+ '--jq',
120
+ `.[] | select(.body | startswith("${PR_REPORT_MARKER}")) | .id`,
121
+ ];
122
+ const r = gh(args);
123
+ if (r.error || r.status !== 0)
124
+ return { error: failure(args, r) };
125
+ const ids = r.stdout
126
+ .trim()
127
+ .split('\n')
128
+ .map((id) => id.trim())
129
+ .filter((id) => /^\d+$/.test(id));
130
+ ids.sort((a, b) => (BigInt(a) < BigInt(b) ? -1 : BigInt(a) > BigInt(b) ? 1 : 0));
131
+ return { ids };
132
+ }
133
+ /**
134
+ * 发布报告评论。无附件时:已有报告评论则原地更新,否则新建。
135
+ * 有附件时:编辑评论无法上传附件,因此总是用 gh pr comment --attach 新建;已有报告评论时新建成功后再删除全部旧报告评论,
136
+ * 新建失败则旧报告保留;删除失败不影响已发布的新报告,返回警告。
137
+ */
138
+ export function publishReport(options) {
139
+ const { pr, bodyFile, attach, gh } = options;
140
+ const found = existingReports(gh, pr);
141
+ if ('error' in found)
142
+ return { ok: false, message: found.error };
143
+ const existing = found.ids.at(-1);
144
+ if (!attach.length && existing) {
145
+ const args = ['api', '-X', 'PATCH', `repos/{owner}/{repo}/issues/comments/${existing}`, '-F', `body=@${bodyFile}`];
146
+ const r = gh(args);
147
+ if (r.error || r.status !== 0)
148
+ return { ok: false, message: failure(args, r) };
149
+ return { ok: true, action: 'updated', attachments: 0 };
150
+ }
151
+ const args = ['pr', 'comment', pr, '--body-file', bodyFile, ...attach.flatMap((a) => ['--attach', a])];
152
+ const created = gh(args);
153
+ if (created.error || created.status !== 0) {
154
+ if (attach.length && !created.error && /unknown flag/i.test(created.stderr)) {
155
+ return {
156
+ ok: false,
157
+ message: `当前 gh 不支持 --attach:需要 gh ≥ 2.100 才能附加文件,请升级 gh(${created.stderr.trim()})${existing ? ';已有报告评论未改动' : ''}`,
158
+ };
159
+ }
160
+ return { ok: false, message: `${failure(args, created)}${existing ? ';已有报告评论未改动' : ''}` };
161
+ }
162
+ if (!existing)
163
+ return { ok: true, action: 'created', attachments: attach.length };
164
+ // 新报告已发布:删除全部旧报告评论(含此前删除失败的残留),失败的列出供手动删除
165
+ const failed = [];
166
+ for (const id of found.ids) {
167
+ const removed = gh(['api', '-X', 'DELETE', `repos/{owner}/{repo}/issues/comments/${id}`]);
168
+ if (removed.error || removed.status !== 0)
169
+ failed.push(`${id}(${removed.error ? GH_MISSING : removed.stderr.trim()})`);
170
+ }
171
+ if (failed.length) {
172
+ return {
173
+ ok: true,
174
+ action: 'replaced',
175
+ attachments: attach.length,
176
+ warning: `新报告已发布,但删除旧报告评论失败:${failed.join(';')}。请在 PR 页面手动删除这些评论`,
177
+ };
178
+ }
179
+ return { ok: true, action: 'replaced', attachments: attach.length };
180
+ }
181
+ //# sourceMappingURL=pr-report-publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-report-publish.js","sourceRoot":"","sources":["../src/pr-report-publish.ts"],"names":[],"mappings":"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"}
@@ -83,7 +83,10 @@ export function checkPrReportStatus(root, run = defaultRunner) {
83
83
  if (head !== prHead) {
84
84
  return block(`PR #${pr.number} 的头提交是 ${prHead.slice(0, 8)},本地 HEAD 是 ${head.slice(0, 8)}。请先推送当前提交或切回 PR 头提交`, pr.number);
85
85
  }
86
- const report = (pr.comments ?? []).map((comment) => comment.body ?? '').find(isPrReport);
86
+ // 通常只有一条报告;带附件重新发布时若删除旧评论失败会残留多条,此时以绑定当前 head 的那条为准,
87
+ // 都不绑定时取最新一条(评论按时间升序返回;与 pr-report 更新最新一条的口径一致)
88
+ const reports = (pr.comments ?? []).map((comment) => comment.body ?? '').filter(isPrReport);
89
+ const report = reports.find((body) => prReportHead(body) === prHead) ?? reports.at(-1);
87
90
  if (!report)
88
91
  return block(`PR #${pr.number} 缺少 Sumi 审查报告。请运行:${PROJECT_SUMI} pr-report ${pr.number}`, pr.number);
89
92
  const reportHead = prReportHead(report);
@@ -1 +1 @@
1
- {"version":3,"file":"pr-report-status.js","sourceRoot":"","sources":["../src/pr-report-status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pr-report-status.js","sourceRoot":"","sources":["../src/pr-report-status.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ description: 推送前使用:按推送门禁的档位在工作区运行检查
7
7
  推送时 pre-push hook 运行 `sumi gate`:先判断这次推送是否需要人工确认(control 变更、删除或强制更新 ref 等),需要而未确认时立即拒绝、不运行检查;确认后重新推送,才在被推送提交的独立检出中安装依赖,按项目配置 `gate.tier` 的档位重跑 check。门禁不派发评审、不做人工确认,所以评审要在推送前于工作区完成,人工确认由用户完成。
8
8
 
9
9
  1. 读 `control/config.yaml` 的 `gate.tier`(未配置时为最低档位)。
10
- 2. 运行 `sumi run check --tier <该档位>`。分支还没有上游时,工作区与门禁都以与远端默认分支的合并基础为基准,评审范围一致。
10
+ 2. 运行 `sumi run check --tier <该档位>`。分支还没有上游时,工作区与门禁都以与远端默认分支的合并基础为基准,评审范围一致;分支已推送过时,门禁只看新增提交,工作区评审的范围(如配置基准下相对主干的全部改动)覆盖它且内容一致时,门禁直接复用,不必按门禁的基准再评审一遍。
11
11
  3. 简报中的评审派发动作(`sumi submit <运行> <步骤> --ticket <t>`):用全新上下文的子代理,按派发动作给出的评审请求逐条评审(只评审、不修改代码),结果写入指定文件,再运行给出的 `sumi submit` 命令;然后重跑第 2 步。评审不通过时,按 findings 修改代码后重跑。
12
12
  4. 第 2 步通过后再 `git push`。门禁拒绝时按它的提示处理:
13
13
  - 提示在工作区运行某条 `sumi run …`(带 `--base <基准>` 或 `--all`)时,原样运行并完成待处理项,再推送同一提交;
@@ -16,5 +16,6 @@ description: 推送前使用:按推送门禁的档位在工作区运行检查
16
16
  - 命令提示有待处理项时,按提示在工作区运行给出的命令(带 `--base <合并基础>`)完成评审,再重新运行;
17
17
  - 只有报告成功发布并绑定当前 PR head 后才可宣告 PR 工作流完成;报告缺失、过期或发布失败时不得结束;
18
18
  - PR 头提交变化后,旧报告立即过期,必须对新 head 重新运行 `sumi pr-report`;
19
+ - 只在用户要求或确有必要(例如需要展示 UI 改动效果)时用 `--attach <文件>[#说明]` 附加截图或录屏,需要 gh ≥ 2.100;
19
20
  - Claude Code、Codex 与 Cursor 的停止阶段 hook 会只读复查当前 PR head 的报告;它不会代替代理发布,但会在缺失或过期时强制继续处理。
20
21
  6. 不要替用户运行 `sumi approve` 或 `sumi unlock`,不要用 `--no-verify`、`HUSKY=0` 等方式绕过 hook。
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sumi/plugins-governance",
3
- "version": "0.6.1",
3
+ "version": "0.7.1",
4
4
  "description": "治理插件",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,7 +13,7 @@
13
13
  "./package.json": "./package.json"
14
14
  },
15
15
  "dependencies": {
16
- "@sumi/plugin-sdk": "0.6.1",
16
+ "@sumi/plugin-sdk": "0.7.1",
17
17
  "yaml": "2.9.1",
18
18
  "picomatch": "4.0.7"
19
19
  },
@@ -15,7 +15,11 @@ plugins:
15
15
  - { name: approve, argv: [node, ./dist/commands/approve.js], description: 人工确认待确认请求(需要交互式终端) }
16
16
  - { name: unlock, argv: [node, ./dist/commands/unlock.js], description: 由人开启 control 编辑窗口(需要交互式终端) }
17
17
  - { name: guard, argv: [node, ./dist/commands/guard.js], description: AI 工具前置 hook 的拦截命令 }
18
- - { name: pr-report, argv: [node, ./dist/commands/pr-report.js], description: 把 PR 范围的检查与评审结论发布为 PR 评论(需要 gh) }
18
+ - {
19
+ name: pr-report,
20
+ argv: [node, ./dist/commands/pr-report.js],
21
+ description: 把 PR 范围的检查与评审结论发布为 PR 评论,可用 --attach 附加图片或视频(需要 gh),
22
+ }
19
23
  - {
20
24
  name: pr-report-check,
21
25
  argv: [node, ./dist/commands/pr-report-check.js],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sumi/plugins-openspec",
3
- "version": "0.6.1",
3
+ "version": "0.7.1",
4
4
  "description": "OpenSpec 插件",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,7 +13,7 @@
13
13
  "./package.json": "./package.json"
14
14
  },
15
15
  "dependencies": {
16
- "@sumi/plugin-sdk": "0.6.1"
16
+ "@sumi/plugin-sdk": "0.7.1"
17
17
  },
18
18
  "files": [
19
19
  "dist",
@@ -1,5 +1,6 @@
1
1
  import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
+ import { guardCommandArgs } from '@sumi/plugin-sdk';
3
4
  import { stringify } from 'yaml';
4
5
  import { readCandidates, writeCandidates } from '../candidates.js';
5
6
  import { readRegistry, REGISTRY_FILE } from '../model.js';
@@ -10,6 +11,10 @@ import { readRegistry, REGISTRY_FILE } from '../model.js';
10
11
  */
11
12
  const root = process.env.SUMI_ROOT ?? process.cwd();
12
13
  const args = process.argv.slice(2);
14
+ guardCommandArgs(args, {
15
+ usage: '用法:sumi promote <kebab-case id> --type <checker|test|lint-rule|rubric-item> [--candidate <候选 id> --change <名称>] [--spec <cap#需求>] [--adr <路径>] [--from <运行#步骤/finding>]',
16
+ options: ['type', 'candidate', 'change', 'spec', 'adr', 'from'],
17
+ });
13
18
  const flag = (name) => {
14
19
  const i = args.indexOf(`--${name}`);
15
20
  return i >= 0 ? args[i + 1] : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/commands/promote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/commands/promote.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sumi/plugins-precedent",
3
- "version": "0.6.1",
3
+ "version": "0.7.1",
4
4
  "description": "判例插件",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,10 +13,10 @@
13
13
  "./package.json": "./package.json"
14
14
  },
15
15
  "dependencies": {
16
- "@sumi/plugin-sdk": "0.6.1",
16
+ "@sumi/plugin-sdk": "0.7.1",
17
17
  "yaml": "2.9.1",
18
18
  "picomatch": "4.0.7",
19
- "@sumi/plugins-governance": "0.6.1"
19
+ "@sumi/plugins-governance": "0.7.1"
20
20
  },
21
21
  "files": [
22
22
  "dist",
@@ -101,12 +101,15 @@ items:
101
101
 
102
102
  请求键是以下内容的 sha256:准则文件摘要、被评审文件的内容摘要、每个适用条目的 id 及其文件列表。比较基准不进键,因此推送门禁可以复用在工作区完成的评审。准则文件或被评审内容任一变化,都需要重新评审。内容摘要取 git blob id(经 clean 过滤),准则摘要按 LF 计算,因此同一提交在 LF 与 CRLF 检出(如 Windows 的 `core.autocrlf=true`)中得到相同的键。
103
103
 
104
+ 键不一致时,还会查找覆盖本次范围的已接受评审:同一准则内容,本次每个适用条目的文件都在那次评审同一条目的文件列表内,这些文件的内容(blob id)与当时一致,且这些条目全部通过,就直接复用(简报注明复用的评审)。典型场景是已推送的分支再次推送:工作区按配置基准评审了相对主干的全部改动,门禁以远端分支旧 tip 为基准只看新增提交,范围更窄但内容一致,不必再评审一遍。不通过的结果不按覆盖复用。覆盖记录与其键绑定:由记录内容重算的请求键必须等于记录的键,否则(以及记录或结果文件损坏时)跳过该记录。`sumi submit` 会核对请求键与 ticket 一致、由请求内容重算的键与准则摘要都未变,否则拒绝提交。
105
+
104
106
  已接受的结果保存在共享状态目录(`git rev-parse --git-common-dir` 下的 `sumi/`)中:
105
107
 
106
- | 路径 | 内容 |
107
- | ---------------------------- | -------------------- |
108
- | `sumi/reviews/<key>.json` | 已接受的评审结果 |
109
- | `sumi/tickets/<ticket>.json` | 派发记录与是否已使用 |
108
+ | 路径 | 内容 |
109
+ | ---------------------------------- | --------------------------------------------------------- |
110
+ | `sumi/reviews/<key>.json` | 已接受的评审结果 |
111
+ | `sumi/reviews/coverage/<key>.json` | 该评审的准则摘要、各条目文件列表与文件 blob(覆盖复用用) |
112
+ | `sumi/tickets/<ticket>.json` | 派发记录与是否已使用 |
110
113
 
111
114
  该目录由所有 worktree 共用,不在工作树中,也不随提交传播。
112
115