@fantasticit/sumi 0.7.6 → 0.8.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.
Files changed (154) hide show
  1. package/README.md +17 -16
  2. package/dist/adapters.d.ts +2 -0
  3. package/dist/adapters.js +18 -3
  4. package/dist/adapters.js.map +1 -1
  5. package/dist/agent-hooks.d.ts +4 -1
  6. package/dist/agent-hooks.js +157 -12
  7. package/dist/agent-hooks.js.map +1 -1
  8. package/dist/cli.js +41 -2
  9. package/dist/cli.js.map +1 -1
  10. package/dist/context.js +4 -4
  11. package/dist/context.js.map +1 -1
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.js +1 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/instructions.js +3 -1
  16. package/dist/instructions.js.map +1 -1
  17. package/dist/visualize-page.d.ts +1 -0
  18. package/dist/visualize-page.js +49 -0
  19. package/dist/visualize-page.js.map +1 -0
  20. package/dist/visualize.d.ts +5 -0
  21. package/dist/visualize.js +132 -0
  22. package/dist/visualize.js.map +1 -0
  23. package/node_modules/@sumi/create/dist/scaffold.js +6 -0
  24. package/node_modules/@sumi/create/dist/scaffold.js.map +1 -1
  25. package/node_modules/@sumi/create/package.json +1 -1
  26. package/node_modules/@sumi/create/template/AGENTS.md +2 -0
  27. package/node_modules/@sumi/create/template/control/config.yaml +2 -0
  28. package/node_modules/@sumi/create/template/control/flows/change.flow.yaml +6 -0
  29. package/node_modules/@sumi/create/template/control/flows/check.flow.yaml +8 -0
  30. package/node_modules/@sumi/create/template/control/rubrics/business-impact.yaml +6 -0
  31. package/node_modules/@sumi/create/template/control/rules/development.md +61 -0
  32. package/node_modules/@sumi/create/template/init/AGENTS.md +2 -0
  33. package/node_modules/@sumi/create/template/init/control/flows/check.flow.yaml +2 -0
  34. package/node_modules/@sumi/kernel/dist/brief.d.ts +1 -0
  35. package/node_modules/@sumi/kernel/dist/brief.js +1 -0
  36. package/node_modules/@sumi/kernel/dist/brief.js.map +1 -1
  37. package/node_modules/@sumi/kernel/dist/engine.js +1 -0
  38. package/node_modules/@sumi/kernel/dist/engine.js.map +1 -1
  39. package/node_modules/@sumi/kernel/package.json +2 -2
  40. package/node_modules/@sumi/plugin-sdk/README.md +1 -1
  41. package/node_modules/@sumi/plugin-sdk/dist/index.d.ts +1 -0
  42. package/node_modules/@sumi/plugin-sdk/dist/index.js +1 -0
  43. package/node_modules/@sumi/plugin-sdk/dist/index.js.map +1 -1
  44. package/node_modules/@sumi/plugin-sdk/dist/protocol.d.ts +4 -0
  45. package/node_modules/@sumi/plugin-sdk/dist/protocol.js.map +1 -1
  46. package/node_modules/@sumi/plugin-sdk/dist/trace.d.ts +16 -0
  47. package/node_modules/@sumi/plugin-sdk/dist/trace.js +48 -0
  48. package/node_modules/@sumi/plugin-sdk/dist/trace.js.map +1 -0
  49. package/node_modules/@sumi/plugin-sdk/dist/validate.js +13 -2
  50. package/node_modules/@sumi/plugin-sdk/dist/validate.js.map +1 -1
  51. package/node_modules/@sumi/plugin-sdk/package.json +1 -1
  52. package/node_modules/@sumi/plugins-core/dist/agent-rules.d.ts +5 -0
  53. package/node_modules/@sumi/plugins-core/dist/agent-rules.js +66 -0
  54. package/node_modules/@sumi/plugins-core/dist/agent-rules.js.map +1 -0
  55. package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-before-edit.d.ts +1 -0
  56. package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-before-edit.js +10 -0
  57. package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-before-edit.js.map +1 -0
  58. package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-prompt.d.ts +1 -0
  59. package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-prompt.js +8 -0
  60. package/node_modules/@sumi/plugins-core/dist/commands/agent-rules-prompt.js.map +1 -0
  61. package/node_modules/@sumi/plugins-core/dist/plugins/agent-rules.d.ts +1 -0
  62. package/node_modules/@sumi/plugins-core/dist/plugins/agent-rules.js +19 -0
  63. package/node_modules/@sumi/plugins-core/dist/plugins/agent-rules.js.map +1 -0
  64. package/node_modules/@sumi/plugins-core/package.json +2 -2
  65. package/node_modules/@sumi/plugins-core/sumi-plugins.yaml +20 -0
  66. package/node_modules/@sumi/plugins-governance/README.md +3 -3
  67. package/node_modules/@sumi/plugins-governance/dist/checkout.d.ts +2 -0
  68. package/node_modules/@sumi/plugins-governance/dist/checkout.js.map +1 -1
  69. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report-check.js +2 -0
  70. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report-check.js.map +1 -1
  71. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js +2 -3
  72. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js.map +1 -1
  73. package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.d.ts +6 -0
  74. package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.js +11 -0
  75. package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.js.map +1 -0
  76. package/node_modules/@sumi/plugins-governance/dist/pr-report-status.d.ts +1 -0
  77. package/node_modules/@sumi/plugins-governance/dist/pr-report-status.js +15 -12
  78. package/node_modules/@sumi/plugins-governance/dist/pr-report-status.js.map +1 -1
  79. package/node_modules/@sumi/plugins-governance/instructions/push.md +1 -1
  80. package/node_modules/@sumi/plugins-governance/package.json +2 -2
  81. package/node_modules/@sumi/plugins-openspec/dist/impact-consistency.d.ts +11 -0
  82. package/node_modules/@sumi/plugins-openspec/dist/impact-consistency.js +67 -0
  83. package/node_modules/@sumi/plugins-openspec/dist/impact-consistency.js.map +1 -0
  84. package/node_modules/@sumi/plugins-openspec/dist/plugins/impact-consistency.d.ts +1 -0
  85. package/node_modules/@sumi/plugins-openspec/dist/plugins/impact-consistency.js +63 -0
  86. package/node_modules/@sumi/plugins-openspec/dist/plugins/impact-consistency.js.map +1 -0
  87. package/node_modules/@sumi/plugins-openspec/package.json +4 -2
  88. package/node_modules/@sumi/plugins-openspec/sumi-plugins.yaml +6 -0
  89. package/node_modules/@sumi/plugins-precedent/dist/candidates.d.ts +1 -0
  90. package/node_modules/@sumi/plugins-precedent/dist/commands/context.js +6 -0
  91. package/node_modules/@sumi/plugins-precedent/dist/commands/context.js.map +1 -1
  92. package/node_modules/@sumi/plugins-precedent/dist/commands/impact-submit.d.ts +1 -0
  93. package/node_modules/@sumi/plugins-precedent/dist/commands/impact-submit.js +21 -0
  94. package/node_modules/@sumi/plugins-precedent/dist/commands/impact-submit.js.map +1 -0
  95. package/node_modules/@sumi/plugins-precedent/dist/impact-candidates.d.ts +6 -0
  96. package/node_modules/@sumi/plugins-precedent/dist/impact-candidates.js +51 -0
  97. package/node_modules/@sumi/plugins-precedent/dist/impact-candidates.js.map +1 -0
  98. package/node_modules/@sumi/plugins-precedent/dist/impact-state.d.ts +14 -0
  99. package/node_modules/@sumi/plugins-precedent/dist/impact-state.js +60 -0
  100. package/node_modules/@sumi/plugins-precedent/dist/impact-state.js.map +1 -0
  101. package/node_modules/@sumi/plugins-precedent/dist/impact.d.ts +52 -0
  102. package/node_modules/@sumi/plugins-precedent/dist/impact.js +253 -0
  103. package/node_modules/@sumi/plugins-precedent/dist/impact.js.map +1 -0
  104. package/node_modules/@sumi/plugins-precedent/dist/index.d.ts +2 -0
  105. package/node_modules/@sumi/plugins-precedent/dist/index.js +2 -0
  106. package/node_modules/@sumi/plugins-precedent/dist/index.js.map +1 -1
  107. package/node_modules/@sumi/plugins-precedent/dist/plugins/harvest.js +31 -5
  108. package/node_modules/@sumi/plugins-precedent/dist/plugins/harvest.js.map +1 -1
  109. package/node_modules/@sumi/plugins-precedent/dist/plugins/impact.d.ts +1 -0
  110. package/node_modules/@sumi/plugins-precedent/dist/plugins/impact.js +60 -0
  111. package/node_modules/@sumi/plugins-precedent/dist/plugins/impact.js.map +1 -0
  112. package/node_modules/@sumi/plugins-precedent/package.json +3 -3
  113. package/node_modules/@sumi/plugins-precedent/sumi-plugins.yaml +9 -0
  114. package/node_modules/@sumi/plugins-review/README.md +27 -8
  115. package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.d.ts +1 -0
  116. package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.js +12 -0
  117. package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.js.map +1 -0
  118. package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.d.ts +1 -0
  119. package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.js +56 -0
  120. package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.js.map +1 -0
  121. package/node_modules/@sumi/plugins-review/dist/commands/submit.js +25 -67
  122. package/node_modules/@sumi/plugins-review/dist/commands/submit.js.map +1 -1
  123. package/node_modules/@sumi/plugins-review/dist/model-execution.d.ts +29 -0
  124. package/node_modules/@sumi/plugins-review/dist/model-execution.js +157 -0
  125. package/node_modules/@sumi/plugins-review/dist/model-execution.js.map +1 -0
  126. package/node_modules/@sumi/plugins-review/dist/model-independence.d.ts +10 -0
  127. package/node_modules/@sumi/plugins-review/dist/model-independence.js +14 -0
  128. package/node_modules/@sumi/plugins-review/dist/model-independence.js.map +1 -0
  129. package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.d.ts +1 -0
  130. package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.js +88 -0
  131. package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.js.map +1 -0
  132. package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js +44 -7
  133. package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js.map +1 -1
  134. package/node_modules/@sumi/plugins-review/dist/recheck.d.ts +48 -0
  135. package/node_modules/@sumi/plugins-review/dist/recheck.js +130 -0
  136. package/node_modules/@sumi/plugins-review/dist/recheck.js.map +1 -0
  137. package/node_modules/@sumi/plugins-review/dist/review.d.ts +7 -0
  138. package/node_modules/@sumi/plugins-review/dist/review.js +33 -4
  139. package/node_modules/@sumi/plugins-review/dist/review.js.map +1 -1
  140. package/node_modules/@sumi/plugins-review/dist/submission.d.ts +11 -0
  141. package/node_modules/@sumi/plugins-review/dist/submission.js +77 -0
  142. package/node_modules/@sumi/plugins-review/dist/submission.js.map +1 -0
  143. package/node_modules/@sumi/plugins-review/package.json +4 -3
  144. package/node_modules/@sumi/plugins-review/sumi-plugins.yaml +15 -0
  145. package/package.json +10 -10
  146. package/node_modules/@sumi/create/dist/bin.d.ts +0 -2
  147. package/node_modules/@sumi/create/dist/bin.js +0 -52
  148. package/node_modules/@sumi/create/dist/bin.js.map +0 -1
  149. package/node_modules/@sumi/plugins-core/dist/tool-batches.d.ts +0 -11
  150. package/node_modules/@sumi/plugins-core/dist/tool-batches.js +0 -41
  151. package/node_modules/@sumi/plugins-core/dist/tool-batches.js.map +0 -1
  152. package/node_modules/@sumi/plugins-governance/dist/hooks.d.ts +0 -2
  153. package/node_modules/@sumi/plugins-governance/dist/hooks.js +0 -4
  154. package/node_modules/@sumi/plugins-governance/dist/hooks.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recheck.js","sourceRoot":"","sources":["../src/recheck.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { ImpactRecord } from '@sumi/plugins-precedent';
1
2
  export interface RubricItem {
2
3
  id: string;
3
4
  question: string;
@@ -21,11 +22,14 @@ export interface ReviewRequest {
21
22
  contentDigest: string;
22
23
  repoRoot: string;
23
24
  items: RequestItem[];
25
+ impact?: ImpactRecord;
24
26
  }
25
27
  export interface Verdict {
26
28
  item: string;
27
29
  verdict: 'pass' | 'fail';
28
30
  reason: string;
31
+ evidence?: string;
32
+ uncertain?: boolean;
29
33
  file?: string;
30
34
  line?: number;
31
35
  }
@@ -66,7 +70,10 @@ export declare function requestKey(parts: {
66
70
  id: string;
67
71
  files: string[];
68
72
  }[];
73
+ impact?: ImpactRecord;
69
74
  }): string;
75
+ /** 每一条业务影响判断分别评审,避免一条笼统的通过结论掩盖遗漏。 */
76
+ export declare function impactRequestItems(record: ImpactRecord): RequestItem[];
70
77
  export declare function reviewsDir(root: string): string;
71
78
  /** 已接受结果的形状:verdicts 数组,每项含字符串 item 与 pass/fail。 */
72
79
  export declare function isReviewResult(v: unknown): v is ReviewResult;
@@ -72,6 +72,18 @@ export function requestKey(parts) {
72
72
  rubricDigest: parts.rubricDigest,
73
73
  contentDigest: parts.contentDigest,
74
74
  items: parts.items.map((i) => ({ id: i.id, files: i.files })),
75
+ ...(parts.impact ? { impact: parts.impact } : {}),
76
+ }));
77
+ }
78
+ /** 每一条业务影响判断分别评审,避免一条笼统的通过结论掩盖遗漏。 */
79
+ export function impactRequestItems(record) {
80
+ return record.items.map((item, index) => ({
81
+ id: `impact-${index + 1}`,
82
+ question: item.kind === 'none'
83
+ ? `核对业务差异与既有约束:无变化判断是否成立?理由:${item.reason};已核查:${item.checked.join('、')}`
84
+ : `核对业务差异与既有约束:${item.kind}「${item.statement}」是否准确、完整且没有遗漏或冲突?证据:${item.evidence.map((e) => `${e.file}${e.line ? `:${e.line}` : ''} ${e.explanation}`).join(';')}`,
85
+ pass: '对照业务差异、正式规格与 active 判例核查;理由中列出证据,不确定时标为 fail 且 uncertain=true',
86
+ files: item.kind === 'none' ? record.scope.files.map((file) => file.path) : item.paths,
75
87
  }));
76
88
  }
77
89
  export function reviewsDir(root) {
@@ -173,19 +185,36 @@ export function ticketsDir(root) {
173
185
  /** 校验评审结果:覆盖全部适用条目,verdict 合法,fail 条目带文件定位。返回错误列表。 */
174
186
  export function validateReviewResult(request, value) {
175
187
  const errors = [];
176
- const verdicts = value?.verdicts;
188
+ const verdicts = isRecord(value) ? value.verdicts : undefined;
177
189
  if (!Array.isArray(verdicts))
178
190
  return ['结果必须包含 verdicts 数组'];
191
+ const expected = new Set(request.items.map((item) => item.id));
192
+ const seen = new Set();
193
+ for (const verdict of verdicts) {
194
+ if (!isRecord(verdict) || typeof verdict.item !== 'string') {
195
+ errors.push('verdict 必须含字符串 item');
196
+ continue;
197
+ }
198
+ if (!expected.has(verdict.item))
199
+ errors.push(`多余条目 ${verdict.item}`);
200
+ if (seen.has(verdict.item))
201
+ errors.push(`重复条目 ${verdict.item}`);
202
+ seen.add(verdict.item);
203
+ }
179
204
  for (const item of request.items) {
180
- const v = verdicts.find((x) => x?.item === item.id);
205
+ const v = verdicts.find((x) => isRecord(x) && x.item === item.id);
181
206
  if (!v)
182
207
  errors.push(`缺少条目 ${item.id}`);
183
208
  else if (v.verdict !== 'pass' && v.verdict !== 'fail')
184
209
  errors.push(`条目 ${item.id} 的 verdict 必须为 pass 或 fail`);
185
- else if (typeof v.reason !== 'string' || !v.reason)
210
+ else if (typeof v.reason !== 'string' || !v.reason.trim())
186
211
  errors.push(`条目 ${item.id} 缺少理由`);
187
- else if (v.verdict === 'fail' && !v.file)
212
+ else if (v.verdict === 'fail' && (typeof v.file !== 'string' || !v.file.trim()))
188
213
  errors.push(`条目 ${item.id} 判为 fail 时必须给出文件定位`);
214
+ if (request.impact && item.id.startsWith('impact-') && (typeof v?.evidence !== 'string' || !v.evidence.trim()))
215
+ errors.push(`条目 ${item.id} 缺少独立核查证据`);
216
+ if (v?.uncertain === true && v.verdict !== 'fail')
217
+ errors.push(`条目 ${item.id} 无法判定时必须判为 fail`);
189
218
  }
190
219
  return errors;
191
220
  }
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type ReviewRequest, type ReviewResult, type Ticket } from './review.js';
2
+ export interface PreparedSubmission {
3
+ root: string;
4
+ ticketPath: string;
5
+ ticket: Ticket;
6
+ request: ReviewRequest;
7
+ blobs: Map<string, string>;
8
+ }
9
+ /** 两种提交入口共享同一份 ticket、请求和当前内容校验。 */
10
+ export declare function prepareSubmission(root: string, runId: string, stepId: string, ticketId: string, requireResultFile?: boolean): PreparedSubmission;
11
+ export declare function acceptSubmission(prepared: PreparedSubmission, value: unknown): ReviewResult;
@@ -0,0 +1,77 @@
1
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { digestOfBlobs, fileBlobs, isReviewResult, loadRubric, requestKey, ticketsDir, validateReviewResult, writeAccepted, writeCoverage, impactRequestItems, } from './review.js';
4
+ import { impactScope } from '@sumi/plugins-precedent';
5
+ import { readImpact } from '@sumi/plugins-precedent';
6
+ function readObject(path, what) {
7
+ let value;
8
+ try {
9
+ value = JSON.parse(readFileSync(path, 'utf8'));
10
+ }
11
+ catch {
12
+ throw new Error(`${what}无法读取或不是合法 JSON:${path}`);
13
+ }
14
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
15
+ throw new Error(`${what}格式不合法(应为 JSON 对象):${path}`);
16
+ return value;
17
+ }
18
+ /** 两种提交入口共享同一份 ticket、请求和当前内容校验。 */
19
+ export function prepareSubmission(root, runId, stepId, ticketId, requireResultFile = true) {
20
+ if (!/^[a-f0-9]{8}$/.test(ticketId))
21
+ throw new Error('ticket 格式无效');
22
+ const ticketPath = join(ticketsDir(root), `${ticketId}.json`);
23
+ if (!existsSync(ticketPath))
24
+ throw new Error(`ticket ${ticketId} 不存在`);
25
+ const ticket = readObject(ticketPath, 'ticket ');
26
+ if (ticket.runId !== runId || ticket.stepId !== stepId)
27
+ throw new Error('ticket 与运行或步骤不匹配');
28
+ if (ticket.used)
29
+ throw new Error('ticket 已使用');
30
+ if (typeof ticket.requestPath !== 'string' || typeof ticket.resultPath !== 'string')
31
+ throw new Error('ticket 格式不合法');
32
+ if (requireResultFile && !existsSync(ticket.resultPath))
33
+ throw new Error(`结果文件不在指定路径:${ticket.resultPath}`);
34
+ const request = readObject(ticket.requestPath, '评审请求');
35
+ if (!Array.isArray(request.items) || !request.items.every((i) => typeof i?.id === 'string' && Array.isArray(i.files)))
36
+ throw new Error('评审请求格式不合法');
37
+ if (request.key !== ticket.key)
38
+ throw new Error('评审请求的键与 ticket 不一致,请求可能被改写,请重新运行流程');
39
+ if (requestKey(request) !== request.key)
40
+ throw new Error('评审请求键与请求内容不符(条目范围或摘要被改写),请重新运行流程');
41
+ if (request.impact) {
42
+ const currentScope = impactScope(root, request.base, request.impact.scope.files.map((f) => f.path));
43
+ const current = currentScope ? readImpact(root, currentScope) : null;
44
+ if (!current || JSON.stringify(current) !== JSON.stringify(request.impact))
45
+ throw new Error('业务约束影响记录已变化,请重新运行评审');
46
+ const expectedItems = impactRequestItems(current);
47
+ const actualItems = request.items.filter((item) => item.id.startsWith('impact-'));
48
+ if (JSON.stringify(actualItems) !== JSON.stringify(expectedItems))
49
+ throw new Error('业务影响评审条目已变化,请重新运行评审');
50
+ }
51
+ const rubricDigest = loadRubric(request.repoRoot, request.rubric).digest;
52
+ if (rubricDigest !== request.rubricDigest)
53
+ throw new Error('评审准则已变化,请重新运行流程');
54
+ const reviewed = [...new Set(request.items.flatMap((i) => i.files))];
55
+ const blobs = fileBlobs(request.repoRoot, reviewed);
56
+ if (digestOfBlobs(reviewed, blobs) !== request.contentDigest)
57
+ throw new Error('被评审的内容已变化,请重新运行流程');
58
+ return { root, ticketPath, ticket, request, blobs };
59
+ }
60
+ export function acceptSubmission(prepared, value) {
61
+ const { root, ticketPath, ticket, request, blobs } = prepared;
62
+ const errors = validateReviewResult(request, value);
63
+ if (errors.length)
64
+ throw new Error(errors.join(';'));
65
+ if (!isReviewResult(value))
66
+ throw new Error('结果格式不合法:verdicts 每一项都须是含字符串 item、verdict 为 pass 或 fail 的对象');
67
+ writeAccepted(root, request.key, value);
68
+ if (!request.impact)
69
+ writeCoverage(root, request.key, {
70
+ rubricDigest: request.rubricDigest,
71
+ items: request.items.map((i) => ({ id: i.id, files: i.files })),
72
+ blobs: Object.fromEntries(blobs),
73
+ });
74
+ writeFileSync(ticketPath, JSON.stringify({ ...ticket, used: true }, null, 2));
75
+ return value;
76
+ }
77
+ //# sourceMappingURL=submission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submission.js","sourceRoot":"","sources":["../src/submission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,aAAa,EACb,SAAS,EACT,cAAc,EACd,UAAU,EACV,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,kBAAkB,GAInB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAUrD,SAAS,UAAU,CAAC,IAAY,EAAE,IAAY;IAC5C,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kBAAkB,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qBAAqB,IAAI,EAAE,CAAC,CAAC;IAC7H,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,KAAa,EACb,MAAc,EACd,QAAgB,EAChB,iBAAiB,GAAG,IAAI;IAExB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;IAC9D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,MAAM,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE,SAAS,CAAsB,CAAC;IACtE,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5F,IAAI,MAAM,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/C,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IACrH,IAAI,iBAAiB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5G,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAA6B,CAAC;IACnF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnH,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/B,IAAI,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACtF,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC7F,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,YAAY,GAAG,WAAW,CAC9B,IAAI,EACJ,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9C,CAAC;QACF,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACnH,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAClF,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC5G,CAAC;IACD,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACzE,IAAI,YAAY,KAAK,OAAO,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpD,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACnG,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAA4B,EAAE,KAAc;IAC3E,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IAC9D,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAC1G,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,CAAC,MAAM;QACjB,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE;YAC/B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/D,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;SACjC,CAAC,CAAC;IACL,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sumi/plugins-review",
3
- "version": "0.7.6",
3
+ "version": "0.8.0",
4
4
  "description": "评审插件",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,10 +13,11 @@
13
13
  "./package.json": "./package.json"
14
14
  },
15
15
  "dependencies": {
16
- "@sumi/plugin-sdk": "0.7.6",
16
+ "@sumi/plugin-sdk": "0.8.0",
17
17
  "yaml": "2.9.1",
18
18
  "picomatch": "4.0.7",
19
- "@sumi/plugins-governance": "0.7.6"
19
+ "@sumi/plugins-governance": "0.8.0",
20
+ "@sumi/plugins-precedent": "0.8.0"
20
21
  },
21
22
  "files": [
22
23
  "dist",
@@ -10,4 +10,19 @@ plugins:
10
10
  context: context-rubrics
11
11
  commands:
12
12
  - { name: submit, argv: [node, ./dist/commands/submit.js], description: 提交评审结果 }
13
+ - { name: host-model-hook, argv: [node, ./dist/commands/host-model-hook.js], description: 记录代理宿主报告的模型事件 }
13
14
  - { name: context-rubrics, argv: [node, ./dist/commands/context.js], description: 列出给定路径上适用的评审条目 }
15
+ hooks:
16
+ agent:
17
+ beforeTool: { command: host-model-hook, tools: all, failure: open }
18
+ sessionStart: host-model-hook
19
+ modelSwitch: host-model-hook
20
+ - id: review/independent-recheck
21
+ version: 0.1.0
22
+ kind: check
23
+ command: [node, ./dist/plugins/independent-recheck.js]
24
+ timeout: 60
25
+ requires: ['@sumi/plugins-governance']
26
+ description: 用宿主报告的不同模型逐项复核原评审失败 finding
27
+ commands:
28
+ - { name: model-recheck, argv: [node, ./dist/commands/model-recheck.js], description: 提交独立模型复核结果 }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fantasticit/sumi",
3
- "version": "0.7.6",
3
+ "version": "0.8.0",
4
4
  "description": "sumi 命令行",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,14 +13,14 @@
13
13
  "./package.json": "./package.json"
14
14
  },
15
15
  "dependencies": {
16
- "@sumi/create": "0.7.6",
17
- "@sumi/kernel": "0.7.6",
18
- "@sumi/plugin-sdk": "0.7.6",
19
- "@sumi/plugins-core": "0.7.6",
20
- "@sumi/plugins-governance": "0.7.6",
21
- "@sumi/plugins-openspec": "0.7.6",
22
- "@sumi/plugins-precedent": "0.7.6",
23
- "@sumi/plugins-review": "0.7.6",
16
+ "@sumi/create": "0.8.0",
17
+ "@sumi/kernel": "0.8.0",
18
+ "@sumi/plugin-sdk": "0.8.0",
19
+ "@sumi/plugins-core": "0.8.0",
20
+ "@sumi/plugins-governance": "0.8.0",
21
+ "@sumi/plugins-openspec": "0.8.0",
22
+ "@sumi/plugins-precedent": "0.8.0",
23
+ "@sumi/plugins-review": "0.8.0",
24
24
  "tar": "7.5.22",
25
25
  "yaml": "2.9.1"
26
26
  },
@@ -42,5 +42,5 @@
42
42
  "tar",
43
43
  "yaml"
44
44
  ],
45
- "sumiBuild": "sha256:830ed000d447608463cbea2555b5ba350c9dc3e1daee309288bbb1b64c409b01"
45
+ "sumiBuild": "sha256:577d3cfecb19058348796e3c85a9966f79796fead2344e08b2495af7bcff3cb9"
46
46
  }
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
@@ -1,52 +0,0 @@
1
- #!/usr/bin/env node
2
- import { execFileSync, spawnSync } from 'node:child_process';
3
- import { existsSync, symlinkSync } from 'node:fs';
4
- import { join, resolve } from 'node:path';
5
- import { scaffold } from './scaffold.js';
6
- /**
7
- * create-ai-coding <目录> [--agents claude,codex,cursor] [--link <node_modules 路径>] [--no-install]
8
- * 创建遵循三层结构的新项目:复制模板、初始化 git、安装依赖、生成 AI 工具适配与 git hook。
9
- */
10
- const args = process.argv.slice(2);
11
- const flag = (name) => {
12
- const i = args.indexOf(`--${name}`);
13
- return i >= 0 ? args[i + 1] : undefined;
14
- };
15
- const target = args.find((a, i) => !a.startsWith('--') && !['--agents', '--link'].includes(args[i - 1] ?? ''));
16
- if (!target) {
17
- process.stderr.write('用法:create-ai-coding <目录> [--agents claude,codex,cursor] [--link <node_modules>] [--no-install]\n');
18
- process.exit(3);
19
- }
20
- const dir = resolve(target);
21
- try {
22
- scaffold(dir, {
23
- agents: flag('agents')
24
- ?.split(',')
25
- .map((a) => a.trim())
26
- .filter(Boolean),
27
- });
28
- }
29
- catch (error) {
30
- process.stderr.write(`${error.message}\n`);
31
- process.exit(1);
32
- }
33
- execFileSync('git', ['init', '-q', '-b', 'main'], { cwd: dir });
34
- const link = flag('link');
35
- if (link)
36
- symlinkSync(resolve(link), join(dir, 'node_modules'));
37
- else if (!args.includes('--no-install')) {
38
- const r = spawnSync('pnpm', ['install'], { cwd: dir, stdio: 'inherit' });
39
- if (r.status !== 0)
40
- process.stderr.write('依赖安装失败,请稍后在项目中手动运行 pnpm install\n');
41
- }
42
- const ctl = join(dir, 'node_modules', '.bin', 'ctl');
43
- if (existsSync(ctl))
44
- spawnSync(ctl, ['sync-agents'], { cwd: dir, stdio: 'inherit' });
45
- process.stdout.write([
46
- `已创建 ${dir}`,
47
- '下一步:',
48
- ' npx ctl run check --all # 新项目应直接通过',
49
- ' 首次推送时,门禁会要求确认全部 control 内容:由人在自己的终端运行它给出的 npx ctl approve <请求 id>',
50
- '',
51
- ].join('\n'));
52
- //# sourceMappingURL=bin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Windows 的 .cmd shim 会经过命令解释器;给引号、转义和 shim 前缀保留余量。
3
- * 所有平台共用该预算,使长列表行为可重复测试。
4
- */
5
- export declare const FILE_TOOL_COMMAND_BUDGET = 6000;
6
- export declare function estimateCommandSize(command: string, args: string[]): number;
7
- /**
8
- * 保持原顺序把文件参数拆成可安全启动的批次。
9
- * 固定参数或单个文件无法放入空批时直接拒绝,避免工具收到截断列表。
10
- */
11
- export declare function splitFileArguments(command: string, fixedArgs: string[], files: string[], budget?: number): string[][];
@@ -1,41 +0,0 @@
1
- /**
2
- * Windows 的 .cmd shim 会经过命令解释器;给引号、转义和 shim 前缀保留余量。
3
- * 所有平台共用该预算,使长列表行为可重复测试。
4
- */
5
- export const FILE_TOOL_COMMAND_BUDGET = 6_000;
6
- const SHELL_OVERHEAD = 128;
7
- /** 按 UTF-8 字节数的两倍保守估算参数经 shell 引号与转义后的占用。 */
8
- function estimateArgumentSize(value) {
9
- return Buffer.byteLength(value, 'utf8') * 2 + 8;
10
- }
11
- export function estimateCommandSize(command, args) {
12
- return [command, ...args].reduce((size, value) => size + estimateArgumentSize(value), SHELL_OVERHEAD);
13
- }
14
- /**
15
- * 保持原顺序把文件参数拆成可安全启动的批次。
16
- * 固定参数或单个文件无法放入空批时直接拒绝,避免工具收到截断列表。
17
- */
18
- export function splitFileArguments(command, fixedArgs, files, budget = FILE_TOOL_COMMAND_BUDGET) {
19
- if (!Number.isSafeInteger(budget) || budget <= 0)
20
- throw new Error(`无效的命令参数安全预算:${budget}`);
21
- const fixedSize = estimateCommandSize(command, fixedArgs);
22
- if (fixedSize > budget)
23
- throw new Error(`工具固定参数超过安全预算:${command}`);
24
- if (files.length === 0)
25
- return [[]];
26
- const batches = [];
27
- let batch = [];
28
- for (const file of files) {
29
- if (estimateCommandSize(command, [...fixedArgs, file]) > budget) {
30
- throw new Error(`单个文件参数超过安全预算:${file}`);
31
- }
32
- if (batch.length > 0 && estimateCommandSize(command, [...fixedArgs, ...batch, file]) > budget) {
33
- batches.push(batch);
34
- batch = [];
35
- }
36
- batch.push(file);
37
- }
38
- batches.push(batch);
39
- return batches;
40
- }
41
- //# sourceMappingURL=tool-batches.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-batches.js","sourceRoot":"","sources":["../src/tool-batches.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,6CAA6C;AAC7C,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,IAAc;IACjE,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;AACxG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,SAAmB,EAAE,KAAe,EAAE,MAAM,GAAG,wBAAwB;IACzH,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;IAC3F,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC1D,IAAI,SAAS,GAAG,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,mBAAmB,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,mBAAmB,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;YAC9F,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,EAAE,CAAC;QACb,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,2 +0,0 @@
1
- /** 本插件声明的推送前 hook(pre-push: gate)按统一格式生成,guard 据此校验完整性。 */
2
- export declare const PRE_PUSH_HOOK: string;
@@ -1,4 +0,0 @@
1
- import { gitHookScript } from '@ctl/plugin-sdk';
2
- /** 本插件声明的推送前 hook(pre-push: gate)按统一格式生成,guard 据此校验完整性。 */
3
- export const PRE_PUSH_HOOK = gitHookScript(['gate']);
4
- //# sourceMappingURL=hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,2DAA2D;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}