@chenmk/superflow 0.5.6 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +12 -0
  2. package/README.zh-CN.md +10 -0
  3. package/assets/scripts/superflow-managed-command-guard.py +52 -17
  4. package/assets/scripts/superflow-managed-work-check.mjs +286 -126
  5. package/assets/skills/superflow-pipeline/references/managed-work.md +5 -0
  6. package/assets/skills-en/superflow-pipeline/references/managed-work.md +7 -0
  7. package/dist/app/cli.js +12 -0
  8. package/dist/app/cli.js.map +1 -1
  9. package/dist/app/commands/cleanup.js +17 -0
  10. package/dist/app/commands/cleanup.js.map +1 -0
  11. package/dist/app/commands/pipeline.js +16 -5
  12. package/dist/app/commands/pipeline.js.map +1 -1
  13. package/dist/app/commands/status.js +7 -1
  14. package/dist/app/commands/status.js.map +1 -1
  15. package/dist/domains/config/cli-help.js +8 -0
  16. package/dist/domains/config/cli-help.js.map +1 -1
  17. package/dist/domains/managed-work/acceptance-contract.js +139 -0
  18. package/dist/domains/managed-work/acceptance-contract.js.map +1 -0
  19. package/dist/domains/managed-work/cleanup.js +247 -0
  20. package/dist/domains/managed-work/cleanup.js.map +1 -0
  21. package/dist/domains/managed-work/context-manifest.js +26 -0
  22. package/dist/domains/managed-work/context-manifest.js.map +1 -1
  23. package/dist/domains/managed-work/contract.js +40 -4
  24. package/dist/domains/managed-work/contract.js.map +1 -1
  25. package/dist/domains/managed-work/control.js +82 -5
  26. package/dist/domains/managed-work/control.js.map +1 -1
  27. package/dist/domains/managed-work/execution-contract.js +33 -4
  28. package/dist/domains/managed-work/execution-contract.js.map +1 -1
  29. package/dist/domains/managed-work/executor-policy.js +1 -0
  30. package/dist/domains/managed-work/executor-policy.js.map +1 -1
  31. package/dist/domains/managed-work/host-review.js +4 -0
  32. package/dist/domains/managed-work/host-review.js.map +1 -1
  33. package/dist/domains/managed-work/journal.js +3 -2
  34. package/dist/domains/managed-work/journal.js.map +1 -1
  35. package/dist/domains/managed-work/prompts.js +52 -0
  36. package/dist/domains/managed-work/prompts.js.map +1 -1
  37. package/dist/domains/managed-work/review-facts.js +85 -1
  38. package/dist/domains/managed-work/review-facts.js.map +1 -1
  39. package/dist/domains/managed-work/runner.js +17 -7
  40. package/dist/domains/managed-work/runner.js.map +1 -1
  41. package/dist/domains/managed-work/schemas.js +26 -1
  42. package/dist/domains/managed-work/schemas.js.map +1 -1
  43. package/dist/domains/managed-work/state.js +1 -0
  44. package/dist/domains/managed-work/state.js.map +1 -1
  45. package/dist/domains/managed-work/storage.js +68 -0
  46. package/dist/domains/managed-work/storage.js.map +1 -1
  47. package/dist/domains/managed-work/time-format.js +69 -0
  48. package/dist/domains/managed-work/time-format.js.map +1 -0
  49. package/dist/domains/managed-work/types.js.map +1 -1
  50. package/dist/mcp/server.js +42 -1
  51. package/dist/mcp/server.js.map +1 -1
  52. package/dist/platform/agent-process.js +21 -0
  53. package/dist/platform/agent-process.js.map +1 -1
  54. package/dist/platform/codex-config.js +91 -0
  55. package/dist/platform/codex-config.js.map +1 -0
  56. package/package.json +1 -1
@@ -0,0 +1,139 @@
1
+ import { createHash } from "crypto";
2
+ import { existsSync, readFileSync, realpathSync } from "fs";
3
+ import path from "path";
4
+ import { managedText } from "./i18n.js";
5
+ export function requiresManagedAcceptanceContract(contract) {
6
+ return contract.source === "task_file" || contract.source === "sdd";
7
+ }
8
+ export function parseManagedAcceptanceContractFile(file) {
9
+ let value;
10
+ try {
11
+ value = JSON.parse(readFileSync(path.resolve(file), "utf-8"));
12
+ }
13
+ catch (error) {
14
+ const detail = error instanceof Error ? `: ${error.message}` : "";
15
+ throw new Error(`无法读取验收合同 JSON${detail}`);
16
+ }
17
+ validateManagedAcceptanceContract(value, "zh");
18
+ return value;
19
+ }
20
+ export function validateManagedAcceptanceContract(value, language = "zh") {
21
+ const message = (zh, en) => managedText(language, zh, en);
22
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
23
+ throw new Error(message("验收合同必须是 JSON 对象", "Acceptance contract must be a JSON object"));
24
+ }
25
+ const contract = value;
26
+ assertTextList(contract.businessInvariants, "businessInvariants", true, message);
27
+ assertTextList(contract.deliverables, "deliverables", true, message);
28
+ assertTextList(contract.verification, "verification", true, message);
29
+ assertTextList(contract.exclusions, "exclusions", false, message);
30
+ if (!Array.isArray(contract.sourceCoverage) ||
31
+ contract.sourceCoverage.length === 0) {
32
+ throw new Error(message("验收合同必须列出 sourceCoverage", "Acceptance contract must list sourceCoverage"));
33
+ }
34
+ const scopes = new Set();
35
+ const targets = new Set();
36
+ for (const item of contract.sourceCoverage) {
37
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
38
+ throw new Error(message("sourceCoverage 项格式非法", "Invalid sourceCoverage item"));
39
+ }
40
+ if (!isText(item.scope) || scopes.has(item.scope.trim())) {
41
+ throw new Error(message("sourceCoverage.scope 必须非空且唯一", "sourceCoverage.scope must be non-empty and unique"));
42
+ }
43
+ scopes.add(item.scope.trim());
44
+ assertTextList(item.targets, "sourceCoverage.targets", true, message);
45
+ for (const target of item.targets) {
46
+ const normalized = target.trim();
47
+ if (targets.has(normalized)) {
48
+ throw new Error(message("sourceCoverage.targets 不能在不同覆盖项中重复", "sourceCoverage.targets cannot be duplicated across coverage items"));
49
+ }
50
+ targets.add(normalized);
51
+ }
52
+ }
53
+ }
54
+ export function assertManagedAcceptanceTargetsExist(contract) {
55
+ if (!contract.acceptanceContract)
56
+ return;
57
+ const roots = [contract.projectRoot, ...contract.relatedProjectRoots].map((root) => realpathSync(path.resolve(root)));
58
+ for (const coverage of contract.acceptanceContract.sourceCoverage) {
59
+ for (const target of coverage.targets) {
60
+ if (path.isAbsolute(target) || target.split(/[\\/]+/).includes("..")) {
61
+ throw new Error(managedText(contract.language, `源码覆盖目标必须是仓库内相对路径:${target}`, `Source coverage target must be a repository-relative path: ${target}`));
62
+ }
63
+ if (path.normalize(target) === ".") {
64
+ throw new Error(managedText(contract.language, "源码覆盖目标不能指向仓库根目录", "Source coverage target cannot be the repository root"));
65
+ }
66
+ const matched = roots.some((root) => {
67
+ const candidate = path.join(root, target);
68
+ if (!existsSync(candidate))
69
+ return false;
70
+ const resolved = realpathSync(candidate);
71
+ return resolved === root || resolved.startsWith(`${root}${path.sep}`);
72
+ });
73
+ if (!matched) {
74
+ throw new Error(managedText(contract.language, `源码覆盖目标在启动时不存在:${target}`, `Source coverage target does not exist at start: ${target}`));
75
+ }
76
+ }
77
+ }
78
+ }
79
+ /** New starts fail closed; persisted legacy tasks remain inspectable/resumable. */
80
+ export function assertManagedAcceptanceContractForStart(contract) {
81
+ if (requiresManagedAcceptanceContract(contract) &&
82
+ !contract.acceptanceContract) {
83
+ throw new Error(managedText(contract.language, "任务 Prompt/SDD 启动必须提供冻结的结构化验收合同", "Task-file and SDD starts require a frozen structured acceptance contract"));
84
+ }
85
+ if (!contract.acceptanceContract)
86
+ return;
87
+ validateManagedAcceptanceContract(contract.acceptanceContract, contract.language);
88
+ assertManagedAcceptanceTargetsExist(contract);
89
+ }
90
+ export function managedAcceptanceContractHash(contract) {
91
+ return createHash("sha256").update(JSON.stringify(contract)).digest("hex");
92
+ }
93
+ export function managedAcceptanceContractReferences(contract) {
94
+ return [
95
+ ...contract.businessInvariants.map((_, index) => `invariant:${index + 1}`),
96
+ ...contract.sourceCoverage.map((_, index) => `source:${index + 1}`),
97
+ ...contract.deliverables.map((_, index) => `deliverable:${index + 1}`),
98
+ ...contract.verification.map((_, index) => `verification:${index + 1}`),
99
+ ...contract.exclusions.map((_, index) => `exclusion:${index + 1}`),
100
+ ];
101
+ }
102
+ export function validateManagedAcceptanceReviewCoverage(contract, result) {
103
+ if (!contract.acceptanceContract)
104
+ return;
105
+ const expected = managedAcceptanceContractReferences(contract.acceptanceContract);
106
+ const reviewed = result.acceptanceCoverage?.reviewed;
107
+ const message = (zh, en) => managedText(contract.language, zh, en);
108
+ if (!Array.isArray(reviewed) || new Set(reviewed).size !== reviewed.length) {
109
+ throw new Error(message("Host 评审缺少唯一的验收合同覆盖记录", "Host review is missing unique acceptance-contract coverage"));
110
+ }
111
+ const actual = new Set(reviewed);
112
+ if (expected.length !== actual.size ||
113
+ expected.some((reference) => !actual.has(reference))) {
114
+ throw new Error(message("Host 评审没有覆盖全部冻结验收合同条目", "Host review did not cover every frozen acceptance-contract item"));
115
+ }
116
+ const known = new Set(expected);
117
+ for (const finding of result.findings) {
118
+ if (!Array.isArray(finding.acceptanceContractRefs) ||
119
+ finding.acceptanceContractRefs.length === 0) {
120
+ throw new Error(message(`finding ${finding.id} 未映射验收合同条目`, `Finding ${finding.id} is not mapped to an acceptance-contract item`));
121
+ }
122
+ if (finding.acceptanceContractRefs.some((reference) => !known.has(reference))) {
123
+ throw new Error(message(`finding ${finding.id} 引用了未知验收合同条目`, `Finding ${finding.id} references an unknown acceptance-contract item`));
124
+ }
125
+ }
126
+ }
127
+ function assertTextList(value, name, required, message) {
128
+ if (!Array.isArray(value) || (required && value.length === 0)) {
129
+ throw new Error(message(`验收合同 ${name} 必须是${required ? "非空" : ""}字符串数组`, `Acceptance contract ${name} must be ${required ? "a non-empty " : "an "}array of strings`));
130
+ }
131
+ if (value.some((item) => !isText(item)) ||
132
+ new Set(value.map((item) => item.trim())).size !== value.length) {
133
+ throw new Error(message(`验收合同 ${name} 不能包含空值或重复项`, `Acceptance contract ${name} cannot contain blank or duplicate items`));
134
+ }
135
+ }
136
+ function isText(value) {
137
+ return typeof value === "string" && value.trim().length > 0;
138
+ }
139
+ //# sourceMappingURL=acceptance-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acceptance-contract.js","sourceRoot":"","sources":["../../../src/domains/managed-work/acceptance-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,247 @@
1
+ import { appendFileSync, existsSync, lstatSync, readdirSync, readFileSync, realpathSync, unlinkSync, } from "fs";
2
+ import path from "path";
3
+ import { managedTaskDir } from "./paths.js";
4
+ import { validateManagedWorkspaceBinding } from "./workspace-binding.js";
5
+ const TASK_ID = /^task-[A-Za-z0-9][A-Za-z0-9-]*$/;
6
+ const ACTIVE = new Set([
7
+ "queued",
8
+ "running",
9
+ "waiting_for_connectivity",
10
+ "waiting_for_provider_change",
11
+ "waiting_for_host_review",
12
+ "paused",
13
+ ]);
14
+ const STOPPED = new Set([
15
+ "waiting_for_human",
16
+ "review_exhausted",
17
+ "budget_exhausted",
18
+ "deadline_exhausted",
19
+ "repair_pending",
20
+ "local_delivery_ready",
21
+ "environment_validation_blocked",
22
+ "release_ready",
23
+ "awaiting_git_approval",
24
+ "completed",
25
+ "failed",
26
+ "cancelled",
27
+ ]);
28
+ /**
29
+ * Plans process-artifact deletion from a verified task directory. This is a
30
+ * deterministic storage policy: it never asks an Agent to decide evidence value.
31
+ */
32
+ export function planManagedTaskCleanup(projectRoot, taskId, retention) {
33
+ const context = verifyCleanupContext(projectRoot, taskId);
34
+ const policy = retention ?? context.contract.retention ?? "compact";
35
+ if (!["full", "compact", "none"].includes(policy)) {
36
+ throw new Error("留存策略只允许 full、compact 或 none");
37
+ }
38
+ const actions = [];
39
+ const retained = [];
40
+ for (const run of context.runs) {
41
+ planRunCleanup(context.projectRoot, run.directory, policy, actions, retained);
42
+ }
43
+ return {
44
+ taskId,
45
+ projectRoot: context.projectRoot,
46
+ retention: policy,
47
+ actions: actions.sort((left, right) => left.path.localeCompare(right.path)),
48
+ retained: retained.sort((left, right) => left.path.localeCompare(right.path)),
49
+ totalBytes: actions.reduce((total, action) => total + action.bytes, 0),
50
+ };
51
+ }
52
+ export function executeManagedTaskCleanup(plan, dryRun = false) {
53
+ const current = planManagedTaskCleanup(plan.projectRoot, plan.taskId, plan.retention);
54
+ if (!sameActions(plan.actions, current.actions)) {
55
+ throw new Error("清理清单已变化,请重新执行 dry-run 后再删除");
56
+ }
57
+ if (dryRun) {
58
+ return {
59
+ ...current,
60
+ deletedFiles: 0,
61
+ releasedBytes: 0,
62
+ dryRun: true,
63
+ };
64
+ }
65
+ let deletedFiles = 0;
66
+ let releasedBytes = 0;
67
+ for (const action of current.actions) {
68
+ const target = path.resolve(current.projectRoot, action.path);
69
+ assertTaskOwnedFile(target, current.projectRoot, current.taskId);
70
+ const stat = lstatSync(target);
71
+ if (!stat.isFile() || stat.isSymbolicLink()) {
72
+ throw new Error(`拒绝删除非普通任务文件:${action.path}`);
73
+ }
74
+ unlinkSync(target);
75
+ deletedFiles += 1;
76
+ releasedBytes += stat.size;
77
+ }
78
+ writeRetentionSummaries(current, deletedFiles, releasedBytes);
79
+ return { ...current, deletedFiles, releasedBytes, dryRun: false };
80
+ }
81
+ function verifyCleanupContext(projectRoot, taskId) {
82
+ if (!TASK_ID.test(taskId))
83
+ throw new Error("任务编号格式非法");
84
+ const root = realpathSync(path.resolve(projectRoot));
85
+ const tasks = path.join(root, ".superflow", "tasks");
86
+ if (!existsSync(tasks) || lstatSync(tasks).isSymbolicLink()) {
87
+ throw new Error("托管任务根目录不存在或不是安全目录");
88
+ }
89
+ const taskDir = managedTaskDir(root, taskId);
90
+ if (!existsSync(taskDir) || lstatSync(taskDir).isSymbolicLink()) {
91
+ throw new Error("托管任务目录不存在或不是安全目录");
92
+ }
93
+ const realTasks = realpathSync(tasks);
94
+ const realTask = realpathSync(taskDir);
95
+ if (path.dirname(realTask) !== realTasks ||
96
+ path.basename(realTask) !== taskId) {
97
+ throw new Error("任务目录未绑定到指定项目,拒绝清理");
98
+ }
99
+ const contract = readJson(path.join(realTask, "task.json"));
100
+ if (contract.taskId !== taskId ||
101
+ realpathSync(path.resolve(contract.projectRoot)) !== root) {
102
+ throw new Error("任务合同与项目绑定不一致,拒绝清理");
103
+ }
104
+ const binding = readJson(path.join(realTask, "workspace-binding.json"));
105
+ try {
106
+ validateManagedWorkspaceBinding(binding, contract);
107
+ }
108
+ catch (error) {
109
+ throw new Error(`工作区绑定无效,拒绝清理:${error.message}`);
110
+ }
111
+ const runsDir = path.join(realTask, "runs");
112
+ if (!existsSync(runsDir) || lstatSync(runsDir).isSymbolicLink()) {
113
+ throw new Error("任务运行目录缺失或不安全,拒绝清理");
114
+ }
115
+ const runs = readdirSync(runsDir)
116
+ .filter((name) => name.startsWith("run-"))
117
+ .sort()
118
+ .map((name) => {
119
+ const directory = path.join(runsDir, name);
120
+ if (lstatSync(directory).isSymbolicLink()) {
121
+ throw new Error("运行目录包含符号链接,拒绝清理");
122
+ }
123
+ const statePath = path.join(directory, "run-state.json");
124
+ if (!existsSync(statePath))
125
+ throw new Error("运行状态缺失,拒绝清理");
126
+ const state = readJson(statePath);
127
+ if (state.taskId !== taskId ||
128
+ realpathSync(path.resolve(state.projectRoot)) !== root) {
129
+ throw new Error("运行状态与任务绑定不一致,拒绝清理");
130
+ }
131
+ if (ACTIVE.has(state.status) || state.runningAgentPid) {
132
+ throw new Error("任务仍在运行或等待 Host 评审,拒绝清理");
133
+ }
134
+ if (!STOPPED.has(state.status)) {
135
+ throw new Error("任务状态未知或损坏,拒绝清理");
136
+ }
137
+ return { directory, state };
138
+ });
139
+ if (runs.length === 0)
140
+ throw new Error("任务没有可验证的运行状态,拒绝清理");
141
+ return { projectRoot: root, contract, runs };
142
+ }
143
+ function planRunCleanup(projectRoot, runDir, retention, actions, retained) {
144
+ const names = readdirSync(runDir).sort();
145
+ const protectedReferences = readProtectedReferences(runDir, names);
146
+ const latestHandoff = latestNumber(names, /^executor-handoff-(\d+)\.(?:json|md)$/);
147
+ const latestRepair = latestNumber(names, /^repair-(\d+)\.md$/);
148
+ for (const name of names) {
149
+ const file = path.join(runDir, name);
150
+ const stat = lstatSync(file);
151
+ if (stat.isSymbolicLink()) {
152
+ throw new Error(`运行目录包含符号链接,拒绝清理:${name}`);
153
+ }
154
+ if (!stat.isFile())
155
+ continue;
156
+ const relative = path.relative(projectRoot, file);
157
+ const reason = cleanupReason(name, latestHandoff, latestRepair, retention);
158
+ if (!reason) {
159
+ retained.push({ path: relative, reason: "恢复、交付或审计证据" });
160
+ continue;
161
+ }
162
+ if (retention === "full") {
163
+ retained.push({ path: relative, reason: "full 策略完整留存" });
164
+ continue;
165
+ }
166
+ if (protectedReferences.has(name)) {
167
+ retained.push({ path: relative, reason: "仍被有效证据引用" });
168
+ continue;
169
+ }
170
+ actions.push({ path: relative, bytes: stat.size, reason });
171
+ }
172
+ }
173
+ function cleanupReason(name, latestHandoff, latestRepair, retention) {
174
+ if (/^workspace-change-\d+\.txt$/.test(name))
175
+ return "重复工作区快照";
176
+ if (/^executor-progress-\d+\.jsonl$/.test(name))
177
+ return "已汇总的进度流";
178
+ if (/^executor-\d+-(?:invalid|failed)-events(?:-part-\d+)?\.jsonl$/.test(name)) {
179
+ return "无效或失败调用的原始事件流";
180
+ }
181
+ if (/^executor-\d+(?:-(?:invalid|failed))?-stderr(?:-part-\d+)?\.log$/.test(name)) {
182
+ return "重复执行 stderr";
183
+ }
184
+ if (/^executor-result-\d+-invalid\.json$/.test(name))
185
+ return "已替代的无效交付";
186
+ if (/^executor-self-repair-\d+\.json$/.test(name))
187
+ return "已吸收的机械整改记录";
188
+ const handoff = name.match(/^executor-handoff-(\d+)\.(?:json|md)$/);
189
+ if (handoff && Number(handoff[1]) < (latestHandoff ?? 0))
190
+ return "已被最新交接替代";
191
+ const repair = name.match(/^repair-(\d+)\.md$/);
192
+ if (repair && Number(repair[1]) < (latestRepair ?? 0))
193
+ return "已被最新整改要求替代";
194
+ if (retention === "none" &&
195
+ /^executor-\d+-events(?:-part-\d+)?\.jsonl$/.test(name)) {
196
+ return "none 策略删除已被交付摘要吸收的原始事件流";
197
+ }
198
+ return null;
199
+ }
200
+ function readProtectedReferences(runDir, names) {
201
+ const references = new Set();
202
+ const candidates = names.filter((name) => /^(?:run-state\.json|progress\.jsonl|progress\.md|task-report\.md|review-facts-\d+\.(?:json|md)|review-result-\d+\.json|host-review-\d+\.md|executor-result-\d+\.json|retention-summary\.jsonl)$/.test(name));
203
+ for (const name of candidates) {
204
+ const content = readFileSync(path.join(runDir, name), "utf-8");
205
+ for (const match of content.matchAll(/(?:[A-Za-z0-9_.-]+\.(?:jsonl|json|md|log|txt))/g)) {
206
+ references.add(match[1]);
207
+ }
208
+ }
209
+ return references;
210
+ }
211
+ function latestNumber(names, expression) {
212
+ const values = names.flatMap((name) => {
213
+ const match = name.match(expression);
214
+ return match ? [Number(match[1])] : [];
215
+ });
216
+ return values.length === 0 ? null : Math.max(...values);
217
+ }
218
+ function assertTaskOwnedFile(file, projectRoot, taskId) {
219
+ const taskDir = path.resolve(managedTaskDir(projectRoot, taskId));
220
+ if (!file.startsWith(`${taskDir}${path.sep}`)) {
221
+ throw new Error("清理目标越出任务目录,拒绝操作");
222
+ }
223
+ }
224
+ function sameActions(expected, actual) {
225
+ return JSON.stringify(expected) === JSON.stringify(actual);
226
+ }
227
+ function writeRetentionSummaries(plan, deletedFiles, releasedBytes) {
228
+ const timestamp = new Date().toISOString();
229
+ for (const runId of new Set(plan.actions.map((action) => action.path.split(path.sep)[4]))) {
230
+ if (!runId)
231
+ continue;
232
+ const runDir = path.join(managedTaskDir(plan.projectRoot, plan.taskId), "runs", runId);
233
+ appendFileSync(path.join(runDir, "retention-summary.jsonl"), `${JSON.stringify({
234
+ schemaVersion: 1,
235
+ timestamp,
236
+ retention: plan.retention,
237
+ deletedFiles,
238
+ releasedBytes,
239
+ plannedFiles: plan.actions.length,
240
+ preservedReason: "run-state、当前交接、评审、最终交付和引用证据保留",
241
+ })}\n`, "utf-8");
242
+ }
243
+ }
244
+ function readJson(file) {
245
+ return JSON.parse(readFileSync(file, "utf-8"));
246
+ }
247
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/domains/managed-work/cleanup.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,12 @@ export function ensureManagedContextManifest(contract) {
12
12
  if (!includesWorkspaceBinding(manifest, contract)) {
13
13
  manifest = writeManagedContextManifest(contract);
14
14
  }
15
+ if (contract.acceptanceContract &&
16
+ !includesAcceptanceContract(manifest, contract)) {
17
+ throw new Error(contract.language === "en"
18
+ ? "Managed context manifest is missing the frozen acceptance contract"
19
+ : "托管执行上下文清单缺少冻结验收合同");
20
+ }
15
21
  validateManagedContextManifest(manifest, contract);
16
22
  return manifest;
17
23
  }
@@ -49,6 +55,17 @@ export function writeManagedContextManifest(contract) {
49
55
  protection: "immutable",
50
56
  },
51
57
  ];
58
+ if (contract.acceptanceContract) {
59
+ candidates.push({
60
+ file: path.join(taskDir, "acceptance-contract.json"),
61
+ role: "task_contract",
62
+ protection: "immutable",
63
+ }, {
64
+ file: path.join(taskDir, "acceptance-contract.md"),
65
+ role: "task_contract",
66
+ protection: "immutable",
67
+ });
68
+ }
52
69
  const canonicalTasksPath = readManagedExecutionContract(contract).canonicalTasksPath;
53
70
  if (canonicalTasksPath) {
54
71
  candidates.push({
@@ -205,4 +222,13 @@ function includesWorkspaceBinding(manifest, contract) {
205
222
  const actual = new Set(manifest.entries.map((entry) => entry.path));
206
223
  return expected.every((file) => actual.has(file));
207
224
  }
225
+ function includesAcceptanceContract(manifest, contract) {
226
+ const taskDir = managedTaskDir(contract.projectRoot, contract.taskId);
227
+ const expected = [
228
+ path.join(taskDir, "acceptance-contract.json"),
229
+ path.join(taskDir, "acceptance-contract.md"),
230
+ ].map((file) => path.resolve(file));
231
+ const actual = new Set(manifest.entries.map((entry) => entry.path));
232
+ return expected.every((file) => actual.has(file));
233
+ }
208
234
  //# sourceMappingURL=context-manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-manifest.js","sourceRoot":"","sources":["../../../src/domains/managed-work/context-manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-manifest.js","sourceRoot":"","sources":["../../../src/domains/managed-work/context-manifest.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { createHash, randomUUID } from "crypto";
2
2
  import { readFileSync } from "fs";
3
3
  import path from "path";
4
4
  import { managedText } from "./i18n.js";
5
+ import { validateManagedAcceptanceContract } from "./acceptance-contract.js";
5
6
  import { DEFAULT_MANAGED_BUDGETS, HARD_MAX_ACTIVE_RUN_HOURS, HARD_MAX_EXECUTOR_INVOCATIONS, HARD_MAX_EXECUTOR_TOKEN_UNITS, HARD_MAX_EXECUTOR_COST_USD, HARD_MAX_REVIEW_ROUNDS, HARD_MAX_SINGLE_INVOCATION_HOURS, HARD_MAX_TOTAL_AGENT_INVOCATIONS, } from "./types.js";
6
7
  export function createManagedTaskContract(input) {
7
8
  const request = input.request.trim();
@@ -48,8 +49,12 @@ export function createManagedTaskContract(input) {
48
49
  taskPrompt,
49
50
  supervisorAgent,
50
51
  executorAgent,
52
+ executorConfig: input.executorConfig,
51
53
  supervisorExecution: "external_host",
52
54
  executionMode: input.executionMode ?? "delegated",
55
+ retention: input.retention ?? "compact",
56
+ taskKind: input.taskKind ?? classifyManagedTaskKind(source, profile, request),
57
+ acceptanceContract: input.acceptanceContract,
53
58
  contractHash: "",
54
59
  permissions: {
55
60
  autonomy: "maximum_within_safe_scope",
@@ -72,9 +77,7 @@ export function createManagedTaskContract(input) {
72
77
  budgets,
73
78
  createdAt: now,
74
79
  updatedAt: now,
75
- status: input.executionMode === "human_directed"
76
- ? "waiting_for_human"
77
- : "queued",
80
+ status: input.executionMode === "human_directed" ? "waiting_for_human" : "queued",
78
81
  };
79
82
  contract.contractHash = calculateManagedContractHash(contract);
80
83
  return contract;
@@ -91,6 +94,9 @@ export function validateManagedTaskContract(contract) {
91
94
  !["managed_cli", "external_host"].includes(contract.supervisorExecution)) {
92
95
  throw new Error(message("监督执行模式只允许 external_host", "Supervisor execution only supports external_host"));
93
96
  }
97
+ if (contract.acceptanceContract) {
98
+ validateManagedAcceptanceContract(contract.acceptanceContract, contract.language);
99
+ }
94
100
  const disclosure = contract.permissions.externalModelDataDisclosure;
95
101
  if (!disclosure ||
96
102
  !Array.isArray(disclosure.scope) ||
@@ -98,6 +104,14 @@ export function validateManagedTaskContract(contract) {
98
104
  throw new Error(message("外部研发 Agent 数据披露授权缺失或作用域非法", "External executor data-disclosure approval is missing or has an invalid scope"));
99
105
  }
100
106
  validateManagedBudgets(contract.budgets, contract.language);
107
+ if (contract.retention &&
108
+ !["full", "compact", "none"].includes(contract.retention)) {
109
+ throw new Error(message("托管产物留存策略非法", "Managed retention policy is invalid"));
110
+ }
111
+ if (contract.taskKind &&
112
+ !["code", "docs-only", "review-only"].includes(contract.taskKind)) {
113
+ throw new Error(message("托管任务类型非法", "Managed task kind is invalid"));
114
+ }
101
115
  validateTaskPromptMetadata(contract);
102
116
  if (contract.permissions.gitCommit ||
103
117
  contract.permissions.gitPush ||
@@ -127,10 +141,20 @@ export function calculateManagedContractHash(contract) {
127
141
  taskPrompt: contract.taskPrompt,
128
142
  supervisorAgent: contract.supervisorAgent,
129
143
  executorAgent: contract.executorAgent,
144
+ ...(contract.executorConfig
145
+ ? { executorConfig: contract.executorConfig }
146
+ : {}),
130
147
  ...(contract.supervisorExecution
131
148
  ? { supervisorExecution: contract.supervisorExecution }
132
149
  : {}),
133
- ...(contract.executionMode ? { executionMode: contract.executionMode } : {}),
150
+ ...(contract.executionMode
151
+ ? { executionMode: contract.executionMode }
152
+ : {}),
153
+ ...(contract.retention ? { retention: contract.retention } : {}),
154
+ ...(contract.taskKind ? { taskKind: contract.taskKind } : {}),
155
+ ...(contract.acceptanceContract
156
+ ? { acceptanceContract: contract.acceptanceContract }
157
+ : {}),
134
158
  permissions: contract.permissions,
135
159
  budgets: contract.budgets,
136
160
  };
@@ -270,6 +294,18 @@ export function classifyManagedProfile(request) {
270
294
  }
271
295
  return "quick";
272
296
  }
297
+ function classifyManagedTaskKind(source, profile, request) {
298
+ if (source === "sdd" || profile === "engineering" || profile === "sdd") {
299
+ return "code";
300
+ }
301
+ if (/\b(?:docs?|document|documentation)\b|文档|说明书|README/i.test(request)) {
302
+ return "docs-only";
303
+ }
304
+ if (/\b(?:review|audit|inspect|评审|审查|检查|复盘)\b/i.test(request)) {
305
+ return "review-only";
306
+ }
307
+ return "code";
308
+ }
273
309
  function resolveBudgets(overrides = {}, language) {
274
310
  const budgets = { ...DEFAULT_MANAGED_BUDGETS, ...overrides };
275
311
  validateManagedBudgets(budgets, language);