@fantasticit/sumi 0.9.0 → 0.9.2

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 (124) hide show
  1. package/dist/adapters.js +70 -3
  2. package/dist/adapters.js.map +1 -1
  3. package/dist/fix.js +10 -3
  4. package/dist/fix.js.map +1 -1
  5. package/node_modules/@sumi/create/package.json +1 -1
  6. package/node_modules/@sumi/create/template/control/flows/check.flow.yaml +12 -0
  7. package/node_modules/@sumi/create/template/control/rubrics/behavior.yaml +5 -5
  8. package/node_modules/@sumi/create/template/control/rubrics/clean-code.yaml +9 -0
  9. package/node_modules/@sumi/create/template/control/rubrics/device-acceptance.yaml +10 -0
  10. package/node_modules/@sumi/create/template/control/rubrics/domain.yaml +9 -0
  11. package/node_modules/@sumi/create/template/control/rubrics/omission.yaml +3 -3
  12. package/node_modules/@sumi/kernel/dist/brief.d.ts +2 -0
  13. package/node_modules/@sumi/kernel/dist/brief.js.map +1 -1
  14. package/node_modules/@sumi/kernel/dist/engine.js +29 -13
  15. package/node_modules/@sumi/kernel/dist/engine.js.map +1 -1
  16. package/node_modules/@sumi/kernel/dist/registry.d.ts +6 -0
  17. package/node_modules/@sumi/kernel/dist/registry.js +7 -1
  18. package/node_modules/@sumi/kernel/dist/registry.js.map +1 -1
  19. package/node_modules/@sumi/kernel/dist/scope.d.ts +4 -2
  20. package/node_modules/@sumi/kernel/dist/scope.js +12 -39
  21. package/node_modules/@sumi/kernel/dist/scope.js.map +1 -1
  22. package/node_modules/@sumi/kernel/dist/step-cache.d.ts +19 -0
  23. package/node_modules/@sumi/kernel/dist/step-cache.js +185 -0
  24. package/node_modules/@sumi/kernel/dist/step-cache.js.map +1 -0
  25. package/node_modules/@sumi/kernel/package.json +2 -2
  26. package/node_modules/@sumi/plugin-sdk/README.md +2 -0
  27. package/node_modules/@sumi/plugin-sdk/dist/git.d.ts +16 -1
  28. package/node_modules/@sumi/plugin-sdk/dist/git.js +45 -5
  29. package/node_modules/@sumi/plugin-sdk/dist/git.js.map +1 -1
  30. package/node_modules/@sumi/plugin-sdk/dist/index.d.ts +1 -0
  31. package/node_modules/@sumi/plugin-sdk/dist/index.js +1 -0
  32. package/node_modules/@sumi/plugin-sdk/dist/index.js.map +1 -1
  33. package/node_modules/@sumi/plugin-sdk/dist/protocol.d.ts +5 -0
  34. package/node_modules/@sumi/plugin-sdk/dist/protocol.js.map +1 -1
  35. package/node_modules/@sumi/plugin-sdk/dist/snapshot.d.ts +2 -0
  36. package/node_modules/@sumi/plugin-sdk/dist/snapshot.js +60 -0
  37. package/node_modules/@sumi/plugin-sdk/dist/snapshot.js.map +1 -0
  38. package/node_modules/@sumi/plugin-sdk/dist/validate.js +9 -0
  39. package/node_modules/@sumi/plugin-sdk/dist/validate.js.map +1 -1
  40. package/node_modules/@sumi/plugin-sdk/package.json +1 -1
  41. package/node_modules/@sumi/plugins-core/README.md +14 -10
  42. package/node_modules/@sumi/plugins-core/dist/fix/lint.js +3 -3
  43. package/node_modules/@sumi/plugins-core/dist/fix/lint.js.map +1 -1
  44. package/node_modules/@sumi/plugins-core/dist/lib.d.ts +6 -2
  45. package/node_modules/@sumi/plugins-core/dist/lib.js +12 -7
  46. package/node_modules/@sumi/plugins-core/dist/lib.js.map +1 -1
  47. package/node_modules/@sumi/plugins-core/dist/plugins/test-affected.js +105 -28
  48. package/node_modules/@sumi/plugins-core/dist/plugins/test-affected.js.map +1 -1
  49. package/node_modules/@sumi/plugins-core/dist/test-batches.d.ts +16 -0
  50. package/node_modules/@sumi/plugins-core/dist/test-batches.js +83 -0
  51. package/node_modules/@sumi/plugins-core/dist/test-batches.js.map +1 -0
  52. package/node_modules/@sumi/plugins-core/dist/test-checkpoints.d.ts +27 -0
  53. package/node_modules/@sumi/plugins-core/dist/test-checkpoints.js +121 -0
  54. package/node_modules/@sumi/plugins-core/dist/test-checkpoints.js.map +1 -0
  55. package/node_modules/@sumi/plugins-core/dist/vitest-runner.js +20 -4
  56. package/node_modules/@sumi/plugins-core/dist/vitest-runner.js.map +1 -1
  57. package/node_modules/@sumi/plugins-core/package.json +2 -2
  58. package/node_modules/@sumi/plugins-core/sumi-plugins.yaml +4 -0
  59. package/node_modules/@sumi/plugins-governance/README.md +9 -6
  60. package/node_modules/@sumi/plugins-governance/dist/checkout.d.ts +1 -2
  61. package/node_modules/@sumi/plugins-governance/dist/checkout.js +6 -6
  62. package/node_modules/@sumi/plugins-governance/dist/checkout.js.map +1 -1
  63. package/node_modules/@sumi/plugins-governance/dist/commands/gate.js +61 -5
  64. package/node_modules/@sumi/plugins-governance/dist/commands/gate.js.map +1 -1
  65. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js +19 -11
  66. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js.map +1 -1
  67. package/node_modules/@sumi/plugins-governance/dist/gate-cache.js +42 -5
  68. package/node_modules/@sumi/plugins-governance/dist/gate-cache.js.map +1 -1
  69. package/node_modules/@sumi/plugins-governance/dist/plugins/protected-paths.js +7 -4
  70. package/node_modules/@sumi/plugins-governance/dist/plugins/protected-paths.js.map +1 -1
  71. package/node_modules/@sumi/plugins-governance/dist/pr-base.d.ts +9 -0
  72. package/node_modules/@sumi/plugins-governance/dist/pr-base.js +28 -0
  73. package/node_modules/@sumi/plugins-governance/dist/pr-base.js.map +1 -1
  74. package/node_modules/@sumi/plugins-governance/dist/pr-report-publish.d.ts +16 -4
  75. package/node_modules/@sumi/plugins-governance/dist/pr-report-publish.js +47 -9
  76. package/node_modules/@sumi/plugins-governance/dist/pr-report-publish.js.map +1 -1
  77. package/node_modules/@sumi/plugins-governance/dist/protected.js +7 -9
  78. package/node_modules/@sumi/plugins-governance/dist/protected.js.map +1 -1
  79. package/node_modules/@sumi/plugins-governance/dist/semantic.js +2 -17
  80. package/node_modules/@sumi/plugins-governance/dist/semantic.js.map +1 -1
  81. package/node_modules/@sumi/plugins-governance/instructions/push.md +6 -4
  82. package/node_modules/@sumi/plugins-governance/package.json +2 -2
  83. package/node_modules/@sumi/plugins-openspec/package.json +4 -4
  84. package/node_modules/@sumi/plugins-precedent/dist/model.js +2 -15
  85. package/node_modules/@sumi/plugins-precedent/dist/model.js.map +1 -1
  86. package/node_modules/@sumi/plugins-precedent/dist/plugins/harvest.js +28 -3
  87. package/node_modules/@sumi/plugins-precedent/dist/plugins/harvest.js.map +1 -1
  88. package/node_modules/@sumi/plugins-precedent/package.json +3 -3
  89. package/node_modules/@sumi/plugins-review/README.md +1 -1
  90. package/node_modules/@sumi/plugins-review/dist/dispute.d.ts +9 -0
  91. package/node_modules/@sumi/plugins-review/dist/dispute.js +91 -0
  92. package/node_modules/@sumi/plugins-review/dist/dispute.js.map +1 -0
  93. package/node_modules/@sumi/plugins-review/dist/index.d.ts +1 -0
  94. package/node_modules/@sumi/plugins-review/dist/index.js +1 -0
  95. package/node_modules/@sumi/plugins-review/dist/index.js.map +1 -1
  96. package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.js +45 -8
  97. package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.js.map +1 -1
  98. package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js +56 -21
  99. package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js.map +1 -1
  100. package/node_modules/@sumi/plugins-review/dist/recheck.d.ts +1 -0
  101. package/node_modules/@sumi/plugins-review/dist/recheck.js +21 -4
  102. package/node_modules/@sumi/plugins-review/dist/recheck.js.map +1 -1
  103. package/node_modules/@sumi/plugins-review/dist/review.d.ts +29 -0
  104. package/node_modules/@sumi/plugins-review/dist/review.js +215 -3
  105. package/node_modules/@sumi/plugins-review/dist/review.js.map +1 -1
  106. package/node_modules/@sumi/plugins-review/dist/submission.js +5 -1
  107. package/node_modules/@sumi/plugins-review/dist/submission.js.map +1 -1
  108. package/node_modules/@sumi/plugins-review/dist/upgrade-command.d.ts +1 -0
  109. package/node_modules/@sumi/plugins-review/dist/upgrade-command.js +14 -0
  110. package/node_modules/@sumi/plugins-review/dist/upgrade-command.js.map +1 -0
  111. package/node_modules/@sumi/plugins-review/dist/upgrade-flow-plan.d.ts +13 -0
  112. package/node_modules/@sumi/plugins-review/dist/upgrade-flow-plan.js +531 -0
  113. package/node_modules/@sumi/plugins-review/dist/upgrade-flow-plan.js.map +1 -0
  114. package/node_modules/@sumi/plugins-review/dist/upgrade-flow-render.d.ts +33 -0
  115. package/node_modules/@sumi/plugins-review/dist/upgrade-flow-render.js +187 -0
  116. package/node_modules/@sumi/plugins-review/dist/upgrade-flow-render.js.map +1 -0
  117. package/node_modules/@sumi/plugins-review/dist/upgrade.d.ts +26 -0
  118. package/node_modules/@sumi/plugins-review/dist/upgrade.js +68 -0
  119. package/node_modules/@sumi/plugins-review/dist/upgrade.js.map +1 -0
  120. package/node_modules/@sumi/plugins-review/dist/validation-receipt.js +105 -5
  121. package/node_modules/@sumi/plugins-review/dist/validation-receipt.js.map +1 -1
  122. package/node_modules/@sumi/plugins-review/package.json +5 -4
  123. package/node_modules/@sumi/plugins-review/sumi-plugins.yaml +1 -0
  124. package/package.json +10 -10
@@ -22,6 +22,12 @@ export interface RegisteredCommand extends CommandDeclaration {
22
22
  export interface Registry {
23
23
  plugins: Map<string, RegisteredPlugin>;
24
24
  commands: Map<string, RegisteredCommand>;
25
+ /** 插件包声明的升级规划命令;内核只负责发现,不解释输出策略。 */
26
+ upgrades: {
27
+ argv: string[];
28
+ dir: string;
29
+ source: string;
30
+ }[];
25
31
  /** 已启用插件包声明并经项目配置增删的通用路径提示。 */
26
32
  pathHints: Record<string, string[]>;
27
33
  }
@@ -46,6 +46,7 @@ export function resolvePackageDir(root, name) {
46
46
  }
47
47
  export function loadRegistry(root, config) {
48
48
  const entries = [];
49
+ const upgrades = [];
49
50
  const pathHints = {};
50
51
  /** 已启用插件包的真实包名(按路径启用时读取其 package.json),用于依赖检查。 */
51
52
  const enabled = new Set(config.packages);
@@ -61,6 +62,11 @@ export function loadRegistry(root, config) {
61
62
  if (!existsSync(manifest))
62
63
  throw new KernelError(`插件包 ${name} 缺少 ${PACKAGE_MANIFEST}`);
63
64
  const raw = readYaml(manifest);
65
+ if (raw?.upgrade !== undefined) {
66
+ if (!Array.isArray(raw.upgrade) || !raw.upgrade.length || !raw.upgrade.every((part) => typeof part === 'string' && part))
67
+ throw new KernelError(`${manifest} 的 upgrade 必须是非空命令数组`);
68
+ upgrades.push({ argv: raw.upgrade, dir, source: manifest });
69
+ }
64
70
  if (raw?.pathHints !== undefined) {
65
71
  if (!raw.pathHints || typeof raw.pathHints !== 'object' || Array.isArray(raw.pathHints))
66
72
  throw new KernelError(`${manifest} 的 pathHints 必须是对象`);
@@ -135,6 +141,6 @@ export function loadRegistry(root, config) {
135
141
  commands.set(command.name, { ...command, pluginId: decl.id, dir: entry.dir });
136
142
  }
137
143
  }
138
- return { plugins, commands, pathHints };
144
+ return { plugins, commands, upgrades, pathHints };
139
145
  }
140
146
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -20,9 +20,11 @@ export declare function listFiles(root: string): string[];
20
20
  export declare function changedFiles(root: string, base: string | null): string[];
21
21
  /** 固定提交模式的改动文件。 */
22
22
  export declare function changedFilesAtCommit(root: string, base: string | null, commit: string): string[];
23
- /** 内容摘要:对路径、文件模式、内容(符号链接取目标)计算,工作区与提交检出使用同一算法。 */
24
- export declare function contentDigest(root: string, files?: string[]): string;
23
+ /** 工作区内容摘要由 SDK 的唯一实现计算。 */
24
+ export declare function contentDigest(root: string): string;
25
25
  export declare function matches(globs: string[] | undefined, file: string): boolean;
26
+ /** 步骤可见的文件:去掉项目 exclude,声明了 triggers 时只保留命中的文件。运行与修复共用这一规则。 */
27
+ export declare function stepFiles(files: string[], exclude: string[] | undefined, triggers: string[] | undefined): string[];
26
28
  export interface TierInfo {
27
29
  tier: string;
28
30
  reasons: string[];
@@ -1,8 +1,7 @@
1
1
  import { execFileSync } from 'node:child_process';
2
- import { createHash } from 'node:crypto';
3
- import { existsSync, lstatSync, readFileSync, readlinkSync } from 'node:fs';
2
+ import { existsSync } from 'node:fs';
4
3
  import { join } from 'node:path';
5
- import { GIT_MAX_BUFFER, gitPaths } from '@sumi/plugin-sdk';
4
+ import { GIT_MAX_BUFFER, gitPaths, repositorySnapshot } from '@sumi/plugin-sdk';
6
5
  import picomatch from 'picomatch';
7
6
  import { tierIndex } from './config.js';
8
7
  import { KernelError } from './errors.js';
@@ -68,57 +67,31 @@ export function listFiles(root) {
68
67
  export function changedFiles(root, base) {
69
68
  if (base === null)
70
69
  return listFiles(root);
71
- const diff = gitPaths(root, ['diff', '--name-only', base]);
70
+ const diff = gitPaths(root, ['diff', '--name-only', '--no-renames', base]);
72
71
  const untracked = gitPaths(root, ['ls-files', '--others', '--exclude-standard']);
73
72
  return [...new Set([...diff, ...untracked])].filter((f) => !f.startsWith(`${RUN_DIR}/`) && existsSync(join(root, f))).sort();
74
73
  }
75
74
  /** 固定提交模式的改动文件。 */
76
75
  export function changedFilesAtCommit(root, base, commit) {
77
- const args = base === null ? ['ls-tree', '-r', '--name-only', commit] : ['diff', '--name-only', base, commit];
76
+ const args = base === null ? ['ls-tree', '-r', '--name-only', commit] : ['diff', '--name-only', '--no-renames', base, commit];
78
77
  return gitPaths(root, args)
79
78
  .filter((f) => existsSync(join(root, f)))
80
79
  .sort();
81
80
  }
82
- /** 内容摘要:对路径、文件模式、内容(符号链接取目标)计算,工作区与提交检出使用同一算法。 */
83
- export function contentDigest(root, files = listFiles(root)) {
84
- const hash = createHash('sha256');
85
- // Windows 文件系统不提供 Unix 执行位,Git 索引保存提交所用的模式。
86
- const indexedModes = new Map();
87
- if (process.platform === 'win32') {
88
- for (const entry of gitPaths(root, ['ls-files', '--stage'])) {
89
- const match = /^(\d+) [0-9a-f]+ 0\t([\s\S]+)$/.exec(entry);
90
- if (match)
91
- indexedModes.set(match[2], match[1]);
92
- }
93
- }
94
- for (const file of files) {
95
- const full = join(root, file);
96
- const stat = lstatSync(full);
97
- // 子模块在工作区中是目录,git 只记录其提交,不纳入内容摘要。
98
- if (stat.isDirectory())
99
- continue;
100
- let mode = '100644';
101
- let body;
102
- if (stat.isSymbolicLink()) {
103
- mode = '120000';
104
- body = Buffer.from(readlinkSync(full));
105
- }
106
- else {
107
- if (process.platform === 'win32')
108
- mode = indexedModes.get(file) ?? mode;
109
- else if (stat.mode & 0o111)
110
- mode = '100755';
111
- body = readFileSync(full);
112
- }
113
- hash.update(`${file}\0${mode}\0${createHash('sha256').update(body).digest('hex')}\n`);
114
- }
115
- return hash.digest('hex');
81
+ /** 工作区内容摘要由 SDK 的唯一实现计算。 */
82
+ export function contentDigest(root) {
83
+ return repositorySnapshot(root);
116
84
  }
117
85
  export function matches(globs, file) {
118
86
  if (!globs || globs.length === 0)
119
87
  return false;
120
88
  return picomatch(globs, { dot: true })(file);
121
89
  }
90
+ /** 步骤可见的文件:去掉项目 exclude,声明了 triggers 时只保留命中的文件。运行与修复共用这一规则。 */
91
+ export function stepFiles(files, exclude, triggers) {
92
+ const pool = files.filter((f) => !matches(exclude, f));
93
+ return triggers ? pool.filter((f) => matches(triggers, f)) : pool;
94
+ }
122
95
  /** 档位:调用者指定或最低档位;升档规则命中时取较高者。 */
123
96
  export function deriveTier(config, files, requested) {
124
97
  let tier = requested ?? config.tiers[0];
@@ -1 +1 @@
1
- {"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { PluginContext } from '@sumi/plugin-sdk';
2
+ import type { StepRecord } from './brief.js';
3
+ import { type RegisteredPlugin } from './registry.js';
4
+ /** 未知工具或命令实现时不猜测缓存有效性。 */
5
+ export declare function stepCacheKey(root: string, snapshot: string, plugin: RegisteredPlugin, ctx: PluginContext): string | null;
6
+ interface Entry {
7
+ key: string;
8
+ runId: string;
9
+ record: StepRecord;
10
+ recordDigest: string;
11
+ evidence: {
12
+ path: string;
13
+ digest: string;
14
+ }[];
15
+ }
16
+ export declare function restoreStep(root: string, key: string, evidenceDir: string): Entry | null;
17
+ /** 每步结束即发布,可用于进程在后续步骤被中断的重入。 */
18
+ export declare function saveStep(root: string, key: string, runId: string, record: StepRecord, evidenceDir: string): void;
19
+ export {};
@@ -0,0 +1,185 @@
1
+ import { createHash, randomBytes } from 'node:crypto';
2
+ import { cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, writeFileSync, } from 'node:fs';
3
+ import { dirname, join, resolve, sep } from 'node:path';
4
+ import { resolveArgv } from './registry.js';
5
+ import { RUN_DIR } from './scope.js';
6
+ const hash = (value) => createHash('sha256').update(value).digest('hex');
7
+ function files(dir, prefix = '') {
8
+ const found = [];
9
+ try {
10
+ for (const name of readdirSync(dir).sort()) {
11
+ const path = join(dir, name);
12
+ const rel = prefix ? `${prefix}/${name}` : name;
13
+ const stat = lstatSync(path);
14
+ if (stat.isDirectory()) {
15
+ const nested = files(path, rel);
16
+ if (!nested)
17
+ return null;
18
+ found.push(...nested);
19
+ }
20
+ else if (stat.isFile())
21
+ found.push({ path: rel, digest: hash(readFileSync(path)) });
22
+ else
23
+ return null;
24
+ }
25
+ return found;
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ function toolIdentity(root, name) {
32
+ const manifest = join(root, 'node_modules', name, 'package.json');
33
+ try {
34
+ const packageDigest = hash(readFileSync(realpathSync(manifest)));
35
+ const state = [
36
+ join(root, 'node_modules', '.modules.yaml'),
37
+ join(root, 'node_modules', '.package-lock.json'),
38
+ join(root, '.yarn', 'install-state.gz'),
39
+ ].find(existsSync);
40
+ if (!state)
41
+ return null;
42
+ return hash(JSON.stringify([packageDigest, hash(readFileSync(state))]));
43
+ }
44
+ catch {
45
+ return null;
46
+ }
47
+ }
48
+ /** 未知工具或命令实现时不猜测缓存有效性。 */
49
+ export function stepCacheKey(root, snapshot, plugin, ctx) {
50
+ const cache = plugin.decl.cache;
51
+ if (!cache || plugin.decl.kind !== 'check')
52
+ return null;
53
+ const tools = (cache.tools ?? []).map((name) => [name, toolIdentity(root, name)]);
54
+ if (tools.some(([, identity]) => !identity))
55
+ return null;
56
+ const argv = resolveArgv(plugin.decl.command, plugin.commandDir);
57
+ const implementation = argv
58
+ .filter((arg) => arg.startsWith('/') || /^[A-Za-z]:[\\/]/.test(arg))
59
+ .map((path) => {
60
+ try {
61
+ return hash(readFileSync(path));
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ });
67
+ if (implementation.includes(null))
68
+ return null;
69
+ const dist = join(plugin.commandDir, 'dist');
70
+ const packageFiles = existsSync(dist) ? files(dist) : [];
71
+ if (!packageFiles)
72
+ return null;
73
+ let declaration;
74
+ try {
75
+ declaration = hash(readFileSync(plugin.source));
76
+ }
77
+ catch {
78
+ return null;
79
+ }
80
+ return hash(JSON.stringify({
81
+ version: 2,
82
+ root: resolve(root),
83
+ snapshot,
84
+ plugin: plugin.decl.id,
85
+ pluginVersion: plugin.decl.version,
86
+ declaration,
87
+ implementation,
88
+ packageFiles,
89
+ tools,
90
+ runtime: [process.version, process.platform, process.arch],
91
+ env: (cache.env ?? []).map((name) => [name, process.env[name] ?? null]),
92
+ context: {
93
+ pathHints: ctx.pathHints,
94
+ base: ctx.base,
95
+ mode: ctx.mode,
96
+ tier: ctx.tier,
97
+ tiers: ctx.tiers,
98
+ stepId: ctx.stepId,
99
+ config: ctx.config,
100
+ files: ctx.files,
101
+ all: ctx.all,
102
+ obligations: ctx.obligations,
103
+ labels: ctx.labels,
104
+ },
105
+ }));
106
+ }
107
+ function cacheDir(root, key) {
108
+ return join(root, RUN_DIR, 'cache', 'steps', key);
109
+ }
110
+ function sourceEvidence(root, entry) {
111
+ try {
112
+ const runs = realpathSync(join(root, RUN_DIR, 'runs'));
113
+ const sourceRun = realpathSync(join(runs, entry.runId));
114
+ if (dirname(sourceRun) !== runs)
115
+ return false;
116
+ const sourceDir = realpathSync(join(sourceRun, entry.record.id));
117
+ if (!sourceDir.startsWith(`${sourceRun}${sep}`))
118
+ return false;
119
+ return JSON.stringify(files(sourceDir)) === JSON.stringify(entry.evidence);
120
+ }
121
+ catch {
122
+ return false;
123
+ }
124
+ }
125
+ export function restoreStep(root, key, evidenceDir) {
126
+ const dir = cacheDir(root, key);
127
+ try {
128
+ const entry = JSON.parse(readFileSync(join(dir, 'cache.json'), 'utf8'));
129
+ if (entry.key !== key ||
130
+ entry.record.state !== 'pass' ||
131
+ entry.record.next.length ||
132
+ !entry.runId ||
133
+ entry.recordDigest !== hash(JSON.stringify(entry.record)))
134
+ return null;
135
+ const actual = files(join(dir, 'evidence'));
136
+ if (!actual || JSON.stringify(actual) !== JSON.stringify(entry.evidence) || !sourceEvidence(root, entry))
137
+ return null;
138
+ mkdirSync(evidenceDir, { recursive: true });
139
+ cpSync(join(dir, 'evidence'), evidenceDir, { recursive: true, force: true });
140
+ return entry;
141
+ }
142
+ catch {
143
+ rmSync(evidenceDir, { recursive: true, force: true });
144
+ return null;
145
+ }
146
+ }
147
+ /** 每步结束即发布,可用于进程在后续步骤被中断的重入。 */
148
+ export function saveStep(root, key, runId, record, evidenceDir) {
149
+ if (record.state !== 'pass' || record.next.length)
150
+ return;
151
+ const target = cacheDir(root, key);
152
+ if (existsSync(target)) {
153
+ try {
154
+ const existing = JSON.parse(readFileSync(join(target, 'cache.json'), 'utf8'));
155
+ if (existing.key === key &&
156
+ existing.recordDigest === hash(JSON.stringify(existing.record)) &&
157
+ JSON.stringify(files(join(target, 'evidence'))) === JSON.stringify(existing.evidence) &&
158
+ sourceEvidence(root, existing))
159
+ return;
160
+ }
161
+ catch {
162
+ // 损坏的缓存用新证据替换。
163
+ }
164
+ rmSync(target, { recursive: true, force: true });
165
+ }
166
+ const parent = join(root, RUN_DIR, 'cache', 'steps');
167
+ mkdirSync(parent, { recursive: true });
168
+ const temp = join(parent, `.tmp-${randomBytes(8).toString('hex')}`);
169
+ try {
170
+ mkdirSync(temp, { recursive: true });
171
+ cpSync(evidenceDir, join(temp, 'evidence'), { recursive: true });
172
+ const evidence = files(join(temp, 'evidence'));
173
+ if (!evidence)
174
+ return;
175
+ writeFileSync(join(temp, 'cache.json'), JSON.stringify({ key, runId, record, recordDigest: hash(JSON.stringify(record)), evidence }));
176
+ renameSync(temp, target);
177
+ }
178
+ catch {
179
+ // 缓存失败不能改变检查结论,下一次会正常执行。
180
+ }
181
+ finally {
182
+ rmSync(temp, { recursive: true, force: true });
183
+ }
184
+ }
185
+ //# sourceMappingURL=step-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-cache.js","sourceRoot":"","sources":["../src/step-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,MAAM,EACN,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAyB,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,IAAI,GAAG,CAAC,KAAsB,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAE1F,SAAS,KAAK,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE;IACrC,MAAM,KAAK,GAAuC,EAAE,CAAC;IACrD,IAAI,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAChD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAChC,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;;gBACjF,OAAO,IAAI,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,IAAY;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG;YACZ,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,oBAAoB,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,kBAAkB,CAAC;SACxC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAwB,EAAE,GAAkB;IACvG,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAU,CAAC,CAAC;IAC3F,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,IAAI;SACxB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACnE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IACL,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CACT,IAAI,CAAC,SAAS,CAAC;QACb,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;QACnB,QAAQ;QACR,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;QACtB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;QAClC,WAAW;QACX,cAAc;QACd,YAAY;QACZ,KAAK;QACL,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC;QAC1D,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QACvE,OAAO,EAAE;YACP,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAUD,SAAS,QAAQ,CAAC,IAAY,EAAE,GAAW;IACzC,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,KAAY;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC9C,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,GAAG,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,GAAW,EAAE,WAAmB;IACxE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAU,CAAC;QACjF,IACE,KAAK,CAAC,GAAG,KAAK,GAAG;YACjB,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM;YAC7B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;YACxB,CAAC,KAAK,CAAC,KAAK;YACZ,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEzD,OAAO,IAAI,CAAC;QACd,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACtH,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,GAAW,EAAE,KAAa,EAAE,MAAkB,EAAE,WAAmB;IACxG,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO;IAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAU,CAAC;YACvF,IACE,QAAQ,CAAC,GAAG,KAAK,GAAG;gBACpB,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC/D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACrF,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAE9B,OAAO;QACX,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;QACD,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,aAAa,CACX,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,EACxB,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAkB,CAAC,CAC7G,CAAC;QACF,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sumi/kernel",
3
- "version": "0.9.0",
3
+ "version": "0.9.2",
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.9.0",
16
+ "@sumi/plugin-sdk": "0.9.2",
17
17
  "yaml": "2.9.1",
18
18
  "picomatch": "4.0.7"
19
19
  }
@@ -54,6 +54,8 @@
54
54
 
55
55
  插件包在包根的 `sumi-plugins.yaml` 中以 `plugins:` 列出声明;项目插件每个目录一个 `plugin.yaml`。声明有三种形态:可执行插件(`command`)、派生插件(`base`)、只提供命令与 hook 的插件(不声明 `command`,但声明 `commands` 或 `hooks`)。
56
56
 
57
+ 纯本地 `check` 插件可以声明 `cache: { env: ['CI'], tools: ['typescript'] }`。默认不缓存;声明后,内核在完整工作区快照、步骤上下文、插件实现、指定环境变量和工具安装标识一致时验证并复用通过证据。依赖外部服务或未列出的隐藏输入的检查不应声明缓存。
58
+
57
59
  包清单还可在顶层声明 `pathHints: { testNeutral: ['openspec/**'] }`。只有启用的包参与汇总;项目配置 `pathHints.testNeutral.add/remove` 可按 glob 增删,结果在每个插件上下文的 `pathHints.testNeutral` 中。内核只汇总传递;`core/test-affected` 用它选择测试,`core/exec` 将其作为 JSON 数组 `SUMI_TEST_NEUTRAL` 传给项目脚本。它不改变其他插件收到的 `files`。这些 glob 使用 picomatch 语义并开启 `dot: true`;自定义脚本消费 `SUMI_TEST_NEUTRAL` 时也必须开启 dot,才能让 `openspec/**` 匹配 `.openspec.yaml` 等点文件。
58
60
 
59
61
  ### 编辑后补充上下文回执
@@ -1,7 +1,22 @@
1
- /** git 列文件命令的输出上限:大仓库的完整文件列表可达数十 MB。 */
1
+ /**
2
+ * git 同步调用的输出上限:大仓库的完整文件列表可达数十 MB,受保护文件(锁文件、快照)单个可达数 MB。
3
+ * 子进程默认上限只有 1MB,超出时抛 ENOBUFS;凡是输出随仓库规模增长的 git 调用都应使用本上限。
4
+ */
2
5
  export declare const GIT_MAX_BUFFER: number;
6
+ /** 输出超过 GIT_MAX_BUFFER 时的说明性错误,取代难以定位的 spawnSync ENOBUFS。 */
7
+ export declare function gitOutputTooLarge(args: string[]): Error;
8
+ /**
9
+ * 运行 git 并返回完整标准输出(不 trim)。失败照常抛出 execFileSync 的错误;仅输出超限时改抛说明性错误。
10
+ * 只用于输出随文件数或文件大小增长的子命令;读取整份 diff 内容前先考虑能否改用 --raw、--name-only 等摘要形式。
11
+ */
12
+ export declare function gitOutput(cwd: string, args: string[]): string;
3
13
  /**
4
14
  * 运行 git 的列文件命令(args[0] 为子命令,如 ls-files、diff --name-only、ls-tree --name-only),返回原始路径。
5
15
  * 以 -z 输出、按 \0 切分:默认输出会把非 ASCII 文件名转义为带引号的八进制串,路径对不上真实文件。
6
16
  */
7
17
  export declare function gitPaths(cwd: string, args: string[]): string[];
18
+ /**
19
+ * 读取某个提交中的文件内容(git show <ref>:<path>)。对象不存在或 git 失败时返回 null;
20
+ * 输出超限时抛出说明性错误,不把过大的文件静默当作不存在。
21
+ */
22
+ export declare function gitShowFile(cwd: string, ref: string, path: string): string | null;
@@ -1,19 +1,59 @@
1
- import { execFileSync } from 'node:child_process';
2
- /** git 列文件命令的输出上限:大仓库的完整文件列表可达数十 MB。 */
1
+ import { execFileSync, spawnSync } from 'node:child_process';
2
+ /**
3
+ * git 同步调用的输出上限:大仓库的完整文件列表可达数十 MB,受保护文件(锁文件、快照)单个可达数 MB。
4
+ * 子进程默认上限只有 1MB,超出时抛 ENOBUFS;凡是输出随仓库规模增长的 git 调用都应使用本上限。
5
+ */
3
6
  export const GIT_MAX_BUFFER = 512 * 1024 * 1024;
7
+ const overflowed = (error) => error?.code === 'ENOBUFS';
8
+ /** 输出超过 GIT_MAX_BUFFER 时的说明性错误,取代难以定位的 spawnSync ENOBUFS。 */
9
+ export function gitOutputTooLarge(args) {
10
+ return new Error(`git ${args.join(' ')} 的输出超过 ${GIT_MAX_BUFFER / 1024 / 1024}MB 上限,无法在内存中处理`);
11
+ }
12
+ /**
13
+ * 运行 git 并返回完整标准输出(不 trim)。失败照常抛出 execFileSync 的错误;仅输出超限时改抛说明性错误。
14
+ * 只用于输出随文件数或文件大小增长的子命令;读取整份 diff 内容前先考虑能否改用 --raw、--name-only 等摘要形式。
15
+ */
16
+ export function gitOutput(cwd, args) {
17
+ try {
18
+ return execFileSync('git', args, {
19
+ cwd,
20
+ encoding: 'utf8',
21
+ stdio: ['ignore', 'pipe', 'pipe'],
22
+ windowsHide: true,
23
+ maxBuffer: GIT_MAX_BUFFER,
24
+ });
25
+ }
26
+ catch (error) {
27
+ if (overflowed(error))
28
+ throw gitOutputTooLarge(args);
29
+ throw error;
30
+ }
31
+ }
4
32
  /**
5
33
  * 运行 git 的列文件命令(args[0] 为子命令,如 ls-files、diff --name-only、ls-tree --name-only),返回原始路径。
6
34
  * 以 -z 输出、按 \0 切分:默认输出会把非 ASCII 文件名转义为带引号的八进制串,路径对不上真实文件。
7
35
  */
8
36
  export function gitPaths(cwd, args) {
9
37
  const [subcommand, ...rest] = args;
10
- const out = execFileSync('git', [subcommand, '-z', ...rest], {
38
+ return gitOutput(cwd, [subcommand, '-z', ...rest])
39
+ .split('\0')
40
+ .filter(Boolean);
41
+ }
42
+ /**
43
+ * 读取某个提交中的文件内容(git show <ref>:<path>)。对象不存在或 git 失败时返回 null;
44
+ * 输出超限时抛出说明性错误,不把过大的文件静默当作不存在。
45
+ */
46
+ export function gitShowFile(cwd, ref, path) {
47
+ const args = ['show', `${ref}:${path}`];
48
+ const r = spawnSync('git', args, {
11
49
  cwd,
12
50
  encoding: 'utf8',
13
- stdio: ['ignore', 'pipe', 'pipe'],
51
+ stdio: ['ignore', 'pipe', 'ignore'],
14
52
  windowsHide: true,
15
53
  maxBuffer: GIT_MAX_BUFFER,
16
54
  });
17
- return out.split('\0').filter(Boolean);
55
+ if (overflowed(r.error))
56
+ throw gitOutputTooLarge(args);
57
+ return r.status === 0 && !r.error ? r.stdout : null;
18
58
  }
19
59
  //# sourceMappingURL=git.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,wCAAwC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAc;IAClD,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACnC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,UAAW,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE;QAC5D,GAAG;QACH,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QACjC,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,cAAc;KAC1B,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAEhD,MAAM,UAAU,GAAG,CAAC,KAAc,EAAW,EAAE,CAAE,KAA2C,EAAE,IAAI,KAAK,SAAS,CAAC;AAEjH,6DAA6D;AAC7D,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,cAAc,GAAG,IAAI,GAAG,IAAI,gBAAgB,CAAC,CAAC;AAChG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,IAAc;IACnD,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;YAC/B,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,UAAU,CAAC,KAAK,CAAC;YAAE,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAc;IAClD,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACnC,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,UAAW,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;SAChD,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,GAAW,EAAE,IAAY;IAChE,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE;QAC/B,GAAG;QACH,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;QACnC,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,cAAc;KAC1B,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;QAAE,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC"}
@@ -10,3 +10,4 @@ export * from './tool-batches.js';
10
10
  export * from './command-args.js';
11
11
  export * from './session-context.js';
12
12
  export * from './trace.js';
13
+ export * from './snapshot.js';
@@ -10,4 +10,5 @@ export * from './tool-batches.js';
10
10
  export * from './command-args.js';
11
11
  export * from './session-context.js';
12
12
  export * from './trace.js';
13
+ export * from './snapshot.js';
13
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
@@ -70,6 +70,11 @@ export interface PluginDeclaration {
70
70
  with?: Record<string, unknown>;
71
71
  /** 超时,单位秒。 */
72
72
  timeout: number;
73
+ /** 显式声明本地检查可复用及额外的执行环境输入;未声明时内核始终执行。 */
74
+ cache?: {
75
+ env?: string[];
76
+ tools?: string[];
77
+ };
73
78
  triggers?: string[];
74
79
  minTier?: string;
75
80
  fix?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** 与内核使用同一完整工作区快照;运行证据和依赖安装目录不参与摘要。 */
2
+ export declare function repositorySnapshot(root: string): string;