@chenmk/superflow 0.3.0 → 0.5.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.
- package/INSTALL.en.md +54 -12
- package/INSTALL.md +59 -33
- package/README.md +192 -49
- package/README.zh-CN.md +166 -46
- package/assets/brand/managed-review-loop.png +0 -0
- package/assets/manifest.json +15 -9
- package/assets/prompts/superflow-design.md +3 -0
- package/assets/prompts/superflow-docs.md +4 -1
- package/assets/scripts/superflow-coding-ready.mjs +135 -0
- package/assets/scripts/superflow-dependency-update-hook.sh +81 -8
- package/assets/scripts/superflow-document-audit.mjs +240 -0
- package/assets/scripts/superflow-environment-preflight.mjs +398 -0
- package/assets/scripts/superflow-hook-guard.sh +40 -1
- package/assets/scripts/superflow-managed-command-guard.py +309 -0
- package/assets/scripts/superflow-managed-executor-preflight.mjs +421 -0
- package/assets/scripts/superflow-managed-owner-verification.sh +117 -0
- package/assets/scripts/superflow-managed-work-check.mjs +455 -0
- package/assets/scripts/superflow-managed-work-guard.sh +17 -0
- package/assets/skills/openspec-propose/SKILL.md +11 -0
- package/assets/skills/superflow-clarify/SKILL.md +14 -0
- package/assets/skills/superflow-design/SKILL.md +46 -12
- package/assets/skills/superflow-docs/SKILL.md +109 -2
- package/assets/skills/superflow-pipeline/SKILL.md +205 -2
- package/assets/skills/superflow-pipeline/references/batch-prompt-template.md +17 -9
- package/assets/skills/superflow-pipeline/references/document-readiness.md +157 -0
- package/assets/skills/superflow-pipeline/references/document-templates.md +17 -5
- package/assets/skills/superflow-pipeline/references/feature-gated-workflow.md +14 -0
- package/assets/skills/superflow-pipeline/references/implementation-prompt-template.md +20 -11
- package/assets/skills/superflow-pipeline/references/managed-work.md +166 -0
- package/assets/skills/superflow-pipeline/references/orchestration.md +2 -2
- package/assets/skills/superflow-pipeline/references/p0-baseline-template.md +3 -2
- package/assets/skills/superflow-pipeline/references/quality-gate.md +8 -5
- package/assets/skills/superflow-pipeline/references/reviewer-checklist.md +7 -0
- package/assets/skills/superflow-pipeline/references/superpower-technical-design-template.md +10 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-archive.sh +1 -1
- package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +282 -16
- package/assets/skills/superflow-pipeline/scripts/superflow-handoff.sh +7 -4
- package/assets/skills/superflow-requirement-review/SKILL.md +178 -0
- package/assets/skills/superflow-requirement-review/agents/openai.yaml +4 -0
- package/assets/skills-en/openspec-propose/SKILL.md +14 -0
- package/assets/skills-en/superflow-clarify/SKILL.md +17 -0
- package/assets/skills-en/superflow-design/SKILL.md +40 -11
- package/assets/skills-en/superflow-docs/SKILL.md +115 -0
- package/assets/skills-en/superflow-pipeline/SKILL.md +202 -0
- package/assets/skills-en/superflow-pipeline/references/batch-prompt-template.md +4 -0
- package/assets/skills-en/superflow-pipeline/references/document-readiness.md +125 -0
- package/assets/skills-en/superflow-pipeline/references/document-templates.md +15 -0
- package/assets/skills-en/superflow-pipeline/references/feature-gated-workflow.md +7 -0
- package/assets/skills-en/superflow-pipeline/references/implementation-prompt-template.md +7 -0
- package/assets/skills-en/superflow-pipeline/references/managed-work.md +184 -0
- package/assets/skills-en/superflow-pipeline/references/quality-gate.md +20 -0
- package/assets/skills-en/superflow-pipeline/references/reviewer-checklist.md +7 -0
- package/assets/skills-en/superflow-pipeline/references/superpower-technical-design-template.md +11 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-archive.sh +1 -1
- package/assets/skills-en/superflow-pipeline/scripts/superflow-guard.sh +279 -14
- package/assets/skills-en/superflow-pipeline/scripts/superflow-handoff.sh +7 -4
- package/assets/skills-en/superflow-requirement-review/SKILL.md +99 -0
- package/assets/skills-en/superflow-requirement-review/agents/openai.yaml +4 -0
- package/dist/app/cli.js +176 -103
- package/dist/app/cli.js.map +1 -1
- package/dist/app/commands/change-guard.js +19 -2
- package/dist/app/commands/change-guard.js.map +1 -1
- package/dist/app/commands/check.js +107 -45
- package/dist/app/commands/check.js.map +1 -1
- package/dist/app/commands/docs.js +7 -3
- package/dist/app/commands/docs.js.map +1 -1
- package/dist/app/commands/doctor.js +174 -198
- package/dist/app/commands/doctor.js.map +1 -1
- package/dist/app/commands/eval.js +64 -0
- package/dist/app/commands/eval.js.map +1 -0
- package/dist/app/commands/implement.js +7 -3
- package/dist/app/commands/implement.js.map +1 -1
- package/dist/app/commands/init.js +16 -24
- package/dist/app/commands/init.js.map +1 -1
- package/dist/app/commands/managed-service.js +5 -0
- package/dist/app/commands/managed-service.js.map +1 -0
- package/dist/app/commands/mcp.js +167 -0
- package/dist/app/commands/mcp.js.map +1 -0
- package/dist/app/commands/pipeline.js +757 -3
- package/dist/app/commands/pipeline.js.map +1 -1
- package/dist/app/commands/requirement-review.js +6 -0
- package/dist/app/commands/requirement-review.js.map +1 -0
- package/dist/app/commands/status.js +262 -77
- package/dist/app/commands/status.js.map +1 -1
- package/dist/app/commands/uninstall.js +8 -5
- package/dist/app/commands/uninstall.js.map +1 -1
- package/dist/app/commands/update.js +114 -15
- package/dist/app/commands/update.js.map +1 -1
- package/dist/domains/agent.js +3 -11
- package/dist/domains/agent.js.map +1 -1
- package/dist/domains/config/cli-help.js +145 -73
- package/dist/domains/config/cli-help.js.map +1 -1
- package/dist/domains/config/i18n.js +6 -8
- package/dist/domains/config/i18n.js.map +1 -1
- package/dist/domains/config/manifest.js +0 -3
- package/dist/domains/config/manifest.js.map +1 -1
- package/dist/domains/deps.js +70 -8
- package/dist/domains/deps.js.map +1 -1
- package/dist/domains/hook.js +71 -38
- package/dist/domains/hook.js.map +1 -1
- package/dist/domains/managed-work/completion-policy.js +174 -0
- package/dist/domains/managed-work/completion-policy.js.map +1 -0
- package/dist/domains/managed-work/context-manifest.js +208 -0
- package/dist/domains/managed-work/context-manifest.js.map +1 -0
- package/dist/domains/managed-work/contract.js +349 -0
- package/dist/domains/managed-work/contract.js.map +1 -0
- package/dist/domains/managed-work/control-signals.js +34 -0
- package/dist/domains/managed-work/control-signals.js.map +1 -0
- package/dist/domains/managed-work/control.js +628 -0
- package/dist/domains/managed-work/control.js.map +1 -0
- package/dist/domains/managed-work/evaluation.js +497 -0
- package/dist/domains/managed-work/evaluation.js.map +1 -0
- package/dist/domains/managed-work/evidence-path.js +14 -0
- package/dist/domains/managed-work/evidence-path.js.map +1 -0
- package/dist/domains/managed-work/execution-contract.js +167 -0
- package/dist/domains/managed-work/execution-contract.js.map +1 -0
- package/dist/domains/managed-work/executor-policy.js +65 -0
- package/dist/domains/managed-work/executor-policy.js.map +1 -0
- package/dist/domains/managed-work/failure.js +65 -0
- package/dist/domains/managed-work/failure.js.map +1 -0
- package/dist/domains/managed-work/host-review.js +77 -0
- package/dist/domains/managed-work/host-review.js.map +1 -0
- package/dist/domains/managed-work/human-messages.js +31 -0
- package/dist/domains/managed-work/human-messages.js.map +1 -0
- package/dist/domains/managed-work/i18n.js +12 -0
- package/dist/domains/managed-work/i18n.js.map +1 -0
- package/dist/domains/managed-work/input.js +137 -0
- package/dist/domains/managed-work/input.js.map +1 -0
- package/dist/domains/managed-work/journal.js +196 -0
- package/dist/domains/managed-work/journal.js.map +1 -0
- package/dist/domains/managed-work/lock.js +106 -0
- package/dist/domains/managed-work/lock.js.map +1 -0
- package/dist/domains/managed-work/notifications.js +38 -0
- package/dist/domains/managed-work/notifications.js.map +1 -0
- package/dist/domains/managed-work/pair-admission.js +108 -0
- package/dist/domains/managed-work/pair-admission.js.map +1 -0
- package/dist/domains/managed-work/paths.js +18 -0
- package/dist/domains/managed-work/paths.js.map +1 -0
- package/dist/domains/managed-work/prompts.js +453 -0
- package/dist/domains/managed-work/prompts.js.map +1 -0
- package/dist/domains/managed-work/redaction.js +90 -0
- package/dist/domains/managed-work/redaction.js.map +1 -0
- package/dist/domains/managed-work/review-convergence.js +41 -0
- package/dist/domains/managed-work/review-convergence.js.map +1 -0
- package/dist/domains/managed-work/review-facts.js +181 -0
- package/dist/domains/managed-work/review-facts.js.map +1 -0
- package/dist/domains/managed-work/rule-selection.js +84 -0
- package/dist/domains/managed-work/rule-selection.js.map +1 -0
- package/dist/domains/managed-work/runner.js +2418 -0
- package/dist/domains/managed-work/runner.js.map +1 -0
- package/dist/domains/managed-work/schemas.js +155 -0
- package/dist/domains/managed-work/schemas.js.map +1 -0
- package/dist/domains/managed-work/service.js +190 -0
- package/dist/domains/managed-work/service.js.map +1 -0
- package/dist/domains/managed-work/state.js +280 -0
- package/dist/domains/managed-work/state.js.map +1 -0
- package/dist/domains/managed-work/storage.js +223 -0
- package/dist/domains/managed-work/storage.js.map +1 -0
- package/dist/domains/managed-work/types.js +19 -0
- package/dist/domains/managed-work/types.js.map +1 -0
- package/dist/domains/managed-work/verification-categories.js +39 -0
- package/dist/domains/managed-work/verification-categories.js.map +1 -0
- package/dist/domains/managed-work/verification-policy.js +116 -0
- package/dist/domains/managed-work/verification-policy.js.map +1 -0
- package/dist/domains/managed-work/wait.js +58 -0
- package/dist/domains/managed-work/wait.js.map +1 -0
- package/dist/domains/managed-work/workspace-binding.js +133 -0
- package/dist/domains/managed-work/workspace-binding.js.map +1 -0
- package/dist/domains/sdd-readiness.js +44 -0
- package/dist/domains/sdd-readiness.js.map +1 -0
- package/dist/domains/skill/deploy.js +0 -6
- package/dist/domains/skill/deploy.js.map +1 -1
- package/dist/domains/skill/scripts.js +0 -8
- package/dist/domains/skill/scripts.js.map +1 -1
- package/dist/domains/state.js +1 -2
- package/dist/domains/state.js.map +1 -1
- package/dist/mcp/runtime-identity.js +21 -0
- package/dist/mcp/runtime-identity.js.map +1 -0
- package/dist/mcp/server.js +369 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/platform/agent-process.js +769 -0
- package/dist/platform/agent-process.js.map +1 -0
- package/dist/platform/executable.js +28 -0
- package/dist/platform/executable.js.map +1 -0
- package/dist/platform/paths.js +1 -17
- package/dist/platform/paths.js.map +1 -1
- package/dist/platform/process-liveness.js +10 -0
- package/dist/platform/process-liveness.js.map +1 -0
- package/dist/platform/process-tree.js +44 -0
- package/dist/platform/process-tree.js.map +1 -0
- package/dist/platform/process.js +1 -1
- package/dist/platform/process.js.map +1 -1
- package/dist/platform/version-check.js +30 -9
- package/dist/platform/version-check.js.map +1 -1
- package/package.json +16 -7
- package/scripts/check-design-principles.mjs +107 -0
- package/scripts/check-managed-work-design.mjs +507 -0
- package/scripts/clean-dist.js +9 -0
- package/scripts/ensure-bin-modes.js +11 -0
- package/dist/cli/index.js +0 -193
- package/dist/cli/index.js.map +0 -1
- package/dist/commands/archive.js +0 -6
- package/dist/commands/archive.js.map +0 -1
- package/dist/commands/clarify.js +0 -6
- package/dist/commands/clarify.js.map +0 -1
- package/dist/commands/design.js +0 -28
- package/dist/commands/design.js.map +0 -1
- package/dist/commands/docs.js +0 -6
- package/dist/commands/docs.js.map +0 -1
- package/dist/commands/doctor.js +0 -494
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/implement.js +0 -6
- package/dist/commands/implement.js.map +0 -1
- package/dist/commands/init.js +0 -520
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/pipeline.js +0 -6
- package/dist/commands/pipeline.js.map +0 -1
- package/dist/commands/scan.js +0 -63
- package/dist/commands/scan.js.map +0 -1
- package/dist/commands/status.js +0 -173
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/uninstall.js +0 -214
- package/dist/commands/uninstall.js.map +0 -1
- package/dist/commands/update.js +0 -193
- package/dist/commands/update.js.map +0 -1
- package/dist/commands/verify.js +0 -6
- package/dist/commands/verify.js.map +0 -1
- package/dist/core/assets.js +0 -27
- package/dist/core/assets.js.map +0 -1
- package/dist/core/cli-help.js +0 -98
- package/dist/core/cli-help.js.map +0 -1
- package/dist/core/context.js +0 -123
- package/dist/core/context.js.map +0 -1
- package/dist/core/dependencies.js +0 -146
- package/dist/core/dependencies.js.map +0 -1
- package/dist/core/detect.js +0 -64
- package/dist/core/detect.js.map +0 -1
- package/dist/core/i18n.js +0 -105
- package/dist/core/i18n.js.map +0 -1
- package/dist/core/integrity.js +0 -46
- package/dist/core/integrity.js.map +0 -1
- package/dist/core/manifest.js +0 -21
- package/dist/core/manifest.js.map +0 -1
- package/dist/core/prompts.js +0 -20
- package/dist/core/prompts.js.map +0 -1
- package/dist/core/registry.js +0 -134
- package/dist/core/registry.js.map +0 -1
- package/dist/core/rules.js +0 -17
- package/dist/core/rules.js.map +0 -1
- package/dist/core/scripts.js +0 -48
- package/dist/core/scripts.js.map +0 -1
- package/dist/core/skill-check.js +0 -32
- package/dist/core/skill-check.js.map +0 -1
- package/dist/core/skills.js +0 -62
- package/dist/core/skills.js.map +0 -1
- package/dist/core/state.js +0 -54
- package/dist/core/state.js.map +0 -1
- package/dist/utils/path.js +0 -11
- package/dist/utils/path.js.map +0 -1
- package/dist/utils/shell.js +0 -29
- package/dist/utils/shell.js.map +0 -1
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "crypto";
|
|
2
|
+
import { readFileSync } from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { managedText } from "./i18n.js";
|
|
5
|
+
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
|
+
export function createManagedTaskContract(input) {
|
|
7
|
+
const request = input.request.trim();
|
|
8
|
+
if (!request) {
|
|
9
|
+
throw new Error(managedText(input.language, "托管任务内容不能为空", "Managed task cannot be empty"));
|
|
10
|
+
}
|
|
11
|
+
const projectRoot = path.resolve(input.projectRoot);
|
|
12
|
+
const relatedProjectRoots = [
|
|
13
|
+
...new Set((input.relatedProjectRoots ?? [])
|
|
14
|
+
.map((root) => path.resolve(root))
|
|
15
|
+
.filter((root) => root !== projectRoot)),
|
|
16
|
+
].sort();
|
|
17
|
+
const supervisorAgent = input.supervisorAgent ?? "codex";
|
|
18
|
+
const executorAgent = input.executorAgent ?? oppositeAgent(supervisorAgent);
|
|
19
|
+
if (supervisorAgent === executorAgent) {
|
|
20
|
+
throw new Error(managedText(input.language, "监督 Agent 和执行 Agent 不能相同", "Supervisor and executor agents must be different"));
|
|
21
|
+
}
|
|
22
|
+
const taskId = buildTaskId();
|
|
23
|
+
const now = new Date().toISOString();
|
|
24
|
+
const profile = input.profile && input.profile !== "auto"
|
|
25
|
+
? input.profile
|
|
26
|
+
: classifyManagedProfile(request);
|
|
27
|
+
const source = input.source ?? "direct_prompt";
|
|
28
|
+
const budgets = resolveBudgets(input.budgets, input.language);
|
|
29
|
+
const taskPrompt = input.taskPromptPath
|
|
30
|
+
? buildTaskPrompt(projectRoot, taskId, input.taskPromptPath)
|
|
31
|
+
: shouldGenerateStandardPrompt(source, profile)
|
|
32
|
+
? buildGeneratedStandardPrompt(projectRoot, taskId, request, profile, input.language)
|
|
33
|
+
: null;
|
|
34
|
+
const contract = {
|
|
35
|
+
schemaVersion: 1,
|
|
36
|
+
taskId,
|
|
37
|
+
request,
|
|
38
|
+
source,
|
|
39
|
+
projectRoot,
|
|
40
|
+
relatedProjectRoots,
|
|
41
|
+
profile,
|
|
42
|
+
language: input.language ?? "zh",
|
|
43
|
+
objective: taskPrompt
|
|
44
|
+
? managedText(input.language, `严格执行冻结的 Superflow 任务 Prompt:${taskPrompt.snapshotPath}`, `Execute the frozen Superflow task prompt exactly: ${taskPrompt.snapshotPath}`)
|
|
45
|
+
: request,
|
|
46
|
+
doneCriteria: defaultDoneCriteria(profile, input.language),
|
|
47
|
+
mandatoryEngineeringRules: normalizeMandatoryRules(input.mandatoryEngineeringRules),
|
|
48
|
+
taskPrompt,
|
|
49
|
+
supervisorAgent,
|
|
50
|
+
executorAgent,
|
|
51
|
+
supervisorExecution: "external_host",
|
|
52
|
+
executionMode: input.executionMode ?? "delegated",
|
|
53
|
+
contractHash: "",
|
|
54
|
+
permissions: {
|
|
55
|
+
autonomy: "maximum_within_safe_scope",
|
|
56
|
+
gitCommit: false,
|
|
57
|
+
gitPush: false,
|
|
58
|
+
productionWrites: false,
|
|
59
|
+
bypassSandbox: false,
|
|
60
|
+
externalModelDataDisclosure: {
|
|
61
|
+
approved: input.externalModelDataDisclosure?.approved !== false,
|
|
62
|
+
approvedBy: input.externalModelDataDisclosure?.approved === false
|
|
63
|
+
? null
|
|
64
|
+
: (input.externalModelDataDisclosure?.approvedBy ??
|
|
65
|
+
"legacy_cli_user"),
|
|
66
|
+
approvedAt: input.externalModelDataDisclosure?.approved !== false
|
|
67
|
+
? (input.externalModelDataDisclosure?.approvedAt ?? now)
|
|
68
|
+
: null,
|
|
69
|
+
scope: [projectRoot, ...relatedProjectRoots],
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
budgets,
|
|
73
|
+
createdAt: now,
|
|
74
|
+
updatedAt: now,
|
|
75
|
+
status: input.executionMode === "human_directed"
|
|
76
|
+
? "waiting_for_human"
|
|
77
|
+
: "queued",
|
|
78
|
+
};
|
|
79
|
+
contract.contractHash = calculateManagedContractHash(contract);
|
|
80
|
+
return contract;
|
|
81
|
+
}
|
|
82
|
+
export function validateManagedTaskContract(contract) {
|
|
83
|
+
const message = (zh, en) => managedText(contract.language, zh, en);
|
|
84
|
+
if (contract.schemaVersion !== 1) {
|
|
85
|
+
throw new Error(message(`不支持的托管任务合同版本:${contract.schemaVersion}`, `Unsupported managed task contract version: ${contract.schemaVersion}`));
|
|
86
|
+
}
|
|
87
|
+
if (contract.supervisorAgent === contract.executorAgent) {
|
|
88
|
+
throw new Error(message("监督 Agent 和执行 Agent 不能相同", "Supervisor and executor agents must be different"));
|
|
89
|
+
}
|
|
90
|
+
if (contract.supervisorExecution !== undefined &&
|
|
91
|
+
!["managed_cli", "external_host"].includes(contract.supervisorExecution)) {
|
|
92
|
+
throw new Error(message("监督执行模式只允许 external_host", "Supervisor execution only supports external_host"));
|
|
93
|
+
}
|
|
94
|
+
const disclosure = contract.permissions.externalModelDataDisclosure;
|
|
95
|
+
if (!disclosure ||
|
|
96
|
+
!Array.isArray(disclosure.scope) ||
|
|
97
|
+
disclosure.scope.some((root) => ![contract.projectRoot, ...contract.relatedProjectRoots].includes(root))) {
|
|
98
|
+
throw new Error(message("外部研发 Agent 数据披露授权缺失或作用域非法", "External executor data-disclosure approval is missing or has an invalid scope"));
|
|
99
|
+
}
|
|
100
|
+
validateManagedBudgets(contract.budgets, contract.language);
|
|
101
|
+
validateTaskPromptMetadata(contract);
|
|
102
|
+
if (contract.permissions.gitCommit ||
|
|
103
|
+
contract.permissions.gitPush ||
|
|
104
|
+
contract.permissions.productionWrites ||
|
|
105
|
+
contract.permissions.bypassSandbox) {
|
|
106
|
+
throw new Error(message("托管任务合同试图放宽不可覆盖的安全边界", "Managed task contract attempts to relax non-overridable safety boundaries"));
|
|
107
|
+
}
|
|
108
|
+
if (contract.contractHash !== calculateManagedContractHash(contract)) {
|
|
109
|
+
throw new Error(message("托管任务合同哈希校验失败,拒绝继续", "Managed task contract hash verification failed; refusing to continue"));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export function calculateManagedContractHash(contract) {
|
|
113
|
+
const immutable = {
|
|
114
|
+
schemaVersion: contract.schemaVersion,
|
|
115
|
+
taskId: contract.taskId,
|
|
116
|
+
request: contract.request,
|
|
117
|
+
source: contract.source,
|
|
118
|
+
projectRoot: path.resolve(contract.projectRoot),
|
|
119
|
+
relatedProjectRoots: contract.relatedProjectRoots.map((root) => path.resolve(root)),
|
|
120
|
+
profile: contract.profile,
|
|
121
|
+
...(contract.language ? { language: contract.language } : {}),
|
|
122
|
+
objective: contract.objective,
|
|
123
|
+
doneCriteria: contract.doneCriteria,
|
|
124
|
+
...(contract.mandatoryEngineeringRules?.length
|
|
125
|
+
? { mandatoryEngineeringRules: contract.mandatoryEngineeringRules }
|
|
126
|
+
: {}),
|
|
127
|
+
taskPrompt: contract.taskPrompt,
|
|
128
|
+
supervisorAgent: contract.supervisorAgent,
|
|
129
|
+
executorAgent: contract.executorAgent,
|
|
130
|
+
...(contract.supervisorExecution
|
|
131
|
+
? { supervisorExecution: contract.supervisorExecution }
|
|
132
|
+
: {}),
|
|
133
|
+
...(contract.executionMode ? { executionMode: contract.executionMode } : {}),
|
|
134
|
+
permissions: contract.permissions,
|
|
135
|
+
budgets: contract.budgets,
|
|
136
|
+
};
|
|
137
|
+
return createHash("sha256").update(JSON.stringify(immutable)).digest("hex");
|
|
138
|
+
}
|
|
139
|
+
function normalizeMandatoryRules(rules) {
|
|
140
|
+
return [...new Set((rules ?? []).map((rule) => rule.trim()).filter(Boolean))];
|
|
141
|
+
}
|
|
142
|
+
export function validateManagedTaskPromptSnapshot(contract) {
|
|
143
|
+
if (!contract.taskPrompt)
|
|
144
|
+
return;
|
|
145
|
+
let content;
|
|
146
|
+
try {
|
|
147
|
+
content = readFileSync(contract.taskPrompt.snapshotPath, "utf-8");
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
throw new Error(managedText(contract.language, "冻结的任务 Prompt 快照不存在,拒绝继续", "Frozen task prompt snapshot is missing; refusing to continue"));
|
|
151
|
+
}
|
|
152
|
+
if (sha256(content) !== contract.taskPrompt.sha256) {
|
|
153
|
+
throw new Error(managedText(contract.language, "冻结的任务 Prompt 快照哈希校验失败,拒绝继续", "Frozen task prompt snapshot hash verification failed; refusing to continue"));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function buildTaskPrompt(projectRoot, taskId, inputPath) {
|
|
157
|
+
const originalPath = path.resolve(inputPath);
|
|
158
|
+
const content = readFileSync(originalPath, "utf-8");
|
|
159
|
+
return {
|
|
160
|
+
originalPath,
|
|
161
|
+
snapshotPath: path.join(projectRoot, ".superflow", "tasks", taskId, "source-prompt.md"),
|
|
162
|
+
sha256: sha256(content),
|
|
163
|
+
origin: "user",
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function shouldGenerateStandardPrompt(source, profile) {
|
|
167
|
+
return source === "direct_prompt" && ["engineering", "sdd"].includes(profile);
|
|
168
|
+
}
|
|
169
|
+
function buildGeneratedStandardPrompt(projectRoot, taskId, request, profile, language) {
|
|
170
|
+
const snapshotPath = path.join(projectRoot, ".superflow", "tasks", taskId, "source-prompt.md");
|
|
171
|
+
const content = generatedStandardPromptContent(request, profile, language);
|
|
172
|
+
return {
|
|
173
|
+
originalPath: snapshotPath,
|
|
174
|
+
snapshotPath,
|
|
175
|
+
sha256: sha256(content),
|
|
176
|
+
origin: "generated_standard",
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* A direct engineering request still needs a frozen executable contract.
|
|
181
|
+
* This deliberately supplies process boundaries only; API, DB and test
|
|
182
|
+
* details remain owned by the project documents or by Host clarification.
|
|
183
|
+
*/
|
|
184
|
+
export function generatedStandardPromptContent(request, profile, language) {
|
|
185
|
+
const runtimeAcceptance = requiresGeneratedRuntimeAcceptance(request);
|
|
186
|
+
const concurrency = requiresGeneratedConcurrencyContract(request);
|
|
187
|
+
if (language === "en") {
|
|
188
|
+
const lines = [
|
|
189
|
+
"# Generated Standard Execution Contract",
|
|
190
|
+
"",
|
|
191
|
+
"This contract was generated from a direct request. It freezes execution boundaries, not invented product decisions.",
|
|
192
|
+
"",
|
|
193
|
+
"## User request",
|
|
194
|
+
"",
|
|
195
|
+
request,
|
|
196
|
+
"",
|
|
197
|
+
"## Required preparation in the same executor call",
|
|
198
|
+
"",
|
|
199
|
+
"- Read the task contract, selected project rules, and current source before editing.",
|
|
200
|
+
"- Identify the existing capability to reuse, exact files to change, task-owned resources, and the affected verification scope.",
|
|
201
|
+
"- For application, API, database, browser, container, or integration work, define one repository-local acceptance entry before claiming completion: preflight, setup, build, startup, real invocation, assertions, cleanup, and durable evidence paths.",
|
|
202
|
+
"- If an unresolved business or architecture choice would change API, data, transaction, concurrency, or acceptance behaviour, return blocked to Host; do not invent a second design.",
|
|
203
|
+
"- Before delivery, synchronize any task-level design, tests, and report that this task creates or changes with the actual source and evidence.",
|
|
204
|
+
];
|
|
205
|
+
if (runtimeAcceptance) {
|
|
206
|
+
lines.push("", "## Runtime acceptance integrity", "", "- The acceptance entry must be portable: discover tools from PATH, project-relative paths, or explicit environment variables; never embed personal absolute paths or credentials.", "- The entry must leave task-owned processes, ports, temporary data, and logs clean even after a representative setup or assertion failure.", "- Do not use broad classpath scanning, generic bean replacement, or unrelated service stubs merely to force an application to start. Keep every isolation item named, directly evidenced, and scoped to the task; otherwise return a real blocker to Host.");
|
|
207
|
+
}
|
|
208
|
+
if (concurrency) {
|
|
209
|
+
lines.push("", "## Concurrency acceptance integrity", "", "- Preserve the requested concurrent semantics in the real acceptance. A business conflict must be a deterministic non-5xx response with a stable error contract; never accept a server error as a successful conflict proof.", "- Prove the requested state transition occurs exactly once with database or equivalent durable-state evidence.");
|
|
210
|
+
}
|
|
211
|
+
lines.push("", `Profile: ${profile}`, "");
|
|
212
|
+
return lines.join("\n");
|
|
213
|
+
}
|
|
214
|
+
const lines = [
|
|
215
|
+
"# 自动生成的标准执行合同",
|
|
216
|
+
"",
|
|
217
|
+
"本合同由直述需求生成,只冻结执行边界,不凭空编造产品方案。",
|
|
218
|
+
"",
|
|
219
|
+
"## 用户需求",
|
|
220
|
+
"",
|
|
221
|
+
request,
|
|
222
|
+
"",
|
|
223
|
+
"## 同一次研发调用内必须完成的准备",
|
|
224
|
+
"",
|
|
225
|
+
"- 编码前读取任务合同、适用项目规则和当前源码。",
|
|
226
|
+
"- 明确可复用的现有能力、精确修改文件、任务自有资源及受影响验证范围。",
|
|
227
|
+
"- 涉及应用、接口、数据库、浏览器、容器或集成时,在声称完成前定义一个仓库内验收入口:预检查、setup、构建、启动、真实调用、断言、清理和可持久读取的证据路径。",
|
|
228
|
+
"- 若未解决的业务或架构选择会改变 API、数据、事务、并发或验收行为,返回 Host 阻塞;不得发明第二套设计。",
|
|
229
|
+
"- 交付前将本任务新建或修改的任务级设计、测试和报告与实际源码、证据同步。",
|
|
230
|
+
];
|
|
231
|
+
if (runtimeAcceptance) {
|
|
232
|
+
lines.push("", "## 真实验收完整性", "", "- 验收入口必须可移植:只可通过 PATH、项目相对路径或显式环境变量发现工具;不得写入个人绝对路径或凭据。", "- 即使出现代表性的 setup 或断言失败,验收入口也必须清理任务自有进程、端口、临时数据和日志。", "- 不得为了强行启动应用而引入全包类路径扫描、通用 Bean 替换或无关服务桩;每项隔离必须具名、直接有启动失败证据且只服务于当前任务,否则如实向 Host 返回阻塞。");
|
|
233
|
+
}
|
|
234
|
+
if (concurrency) {
|
|
235
|
+
lines.push("", "## 并发验收完整性", "", "- 必须在真实验收中保留需求指定的并发语义。业务冲突必须返回确定性的非 5xx 响应和稳定错误合同;不得把服务端错误当作冲突成功。", "- 必须使用数据库或等价持久状态证据证明需求指定的状态转换恰好发生一次。");
|
|
236
|
+
}
|
|
237
|
+
lines.push("", `任务档位:${profile}`, "");
|
|
238
|
+
return lines.join("\n");
|
|
239
|
+
}
|
|
240
|
+
function requiresGeneratedRuntimeAcceptance(request) {
|
|
241
|
+
return /(?:\bapi\b|\bhttp\b|\be2e\b|\bsql\b|\bmysql\b|\bdatabase\b|\bdocker\b|\bbrowser\b|\bfrontend\b|\bbackend\b|\bserver\b|\bservice\b|\bstartup\b|\bintegration\b|接口|启动|数据库|浏览器|前端|后端|服务|容器|端到端|集成测试)/i.test(request);
|
|
242
|
+
}
|
|
243
|
+
function requiresGeneratedConcurrencyContract(request) {
|
|
244
|
+
return /(?:\bcas\b|expectedversion|optimistic|concurren(?:cy|t)|race|版本冲突|乐观锁|并发|竞争)/i.test(request);
|
|
245
|
+
}
|
|
246
|
+
function validateTaskPromptMetadata(contract) {
|
|
247
|
+
if (!contract.taskPrompt)
|
|
248
|
+
return;
|
|
249
|
+
if (!/^[a-f0-9]{64}$/.test(contract.taskPrompt.sha256)) {
|
|
250
|
+
throw new Error(managedText(contract.language, "任务 Prompt 哈希格式非法", "Task prompt hash format is invalid"));
|
|
251
|
+
}
|
|
252
|
+
const expectedSnapshot = path.join(contract.projectRoot, ".superflow", "tasks", contract.taskId, "source-prompt.md");
|
|
253
|
+
if (path.resolve(contract.taskPrompt.snapshotPath) !== expectedSnapshot) {
|
|
254
|
+
throw new Error(managedText(contract.language, "任务 Prompt 快照路径不属于当前托管任务", "Task prompt snapshot path does not belong to this managed task"));
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function sha256(value) {
|
|
258
|
+
return createHash("sha256").update(value).digest("hex");
|
|
259
|
+
}
|
|
260
|
+
export function classifyManagedProfile(request) {
|
|
261
|
+
const normalized = request.toLowerCase();
|
|
262
|
+
if (/(等待|监控|观察|轮询|watch|monitor|日志持续)/i.test(normalized)) {
|
|
263
|
+
return "monitor";
|
|
264
|
+
}
|
|
265
|
+
if (/(openspec|sdd|数据库|database|sql|mapper|跨仓|cross[- ]?repo|支付|payment|退款|refund|消息队列|message queue|mq|api|接口|状态机|state machine|生产|production)/i.test(normalized)) {
|
|
266
|
+
return "sdd";
|
|
267
|
+
}
|
|
268
|
+
if (/(修复|fix|开发|develop|实现|implement|代码|code|测试|test|bug|build|compile|启动应用|start (?:the )?app|重构|refactor)/i.test(normalized)) {
|
|
269
|
+
return "engineering";
|
|
270
|
+
}
|
|
271
|
+
return "quick";
|
|
272
|
+
}
|
|
273
|
+
function resolveBudgets(overrides = {}, language) {
|
|
274
|
+
const budgets = { ...DEFAULT_MANAGED_BUDGETS, ...overrides };
|
|
275
|
+
validateManagedBudgets(budgets, language);
|
|
276
|
+
return budgets;
|
|
277
|
+
}
|
|
278
|
+
function validateManagedBudgets(budgets, language) {
|
|
279
|
+
assertIntegerRange("maxReviewRounds", budgets.maxReviewRounds, HARD_MAX_REVIEW_ROUNDS, language);
|
|
280
|
+
if (budgets.maxExecutorTokenUnits !== undefined) {
|
|
281
|
+
assertIntegerRange("maxExecutorTokenUnits", budgets.maxExecutorTokenUnits, HARD_MAX_EXECUTOR_TOKEN_UNITS, language);
|
|
282
|
+
}
|
|
283
|
+
if (budgets.maxExecutorCostUsd !== undefined) {
|
|
284
|
+
assertRange("maxExecutorCostUsd", budgets.maxExecutorCostUsd, HARD_MAX_EXECUTOR_COST_USD, language);
|
|
285
|
+
}
|
|
286
|
+
assertIntegerRange("maxExecutorInvocations", budgets.maxExecutorInvocations, HARD_MAX_EXECUTOR_INVOCATIONS, language);
|
|
287
|
+
assertIntegerRange("maxTotalAgentInvocations", budgets.maxTotalAgentInvocations, HARD_MAX_TOTAL_AGENT_INVOCATIONS, language);
|
|
288
|
+
if (budgets.executorPhysicalStopAt !== undefined &&
|
|
289
|
+
(!Number.isInteger(budgets.executorPhysicalStopAt) ||
|
|
290
|
+
budgets.executorPhysicalStopAt <= 0)) {
|
|
291
|
+
throw new Error(managedText(language, "Claude 物理调用停止点必须是正整数", "The Claude physical invocation stop point must be a positive integer"));
|
|
292
|
+
}
|
|
293
|
+
assertRange("maxActiveRunHours", budgets.maxActiveRunHours, HARD_MAX_ACTIVE_RUN_HOURS, language);
|
|
294
|
+
assertRange("maxSingleInvocationHours", budgets.maxSingleInvocationHours, HARD_MAX_SINGLE_INVOCATION_HOURS, language);
|
|
295
|
+
if (budgets.stalledTimeoutMinutes <= budgets.noProgressWarningMinutes) {
|
|
296
|
+
throw new Error(managedText(language, "卡死判定时间必须大于无进展告警时间", "Stalled timeout must be greater than the no-progress warning time"));
|
|
297
|
+
}
|
|
298
|
+
if (!Number.isFinite(budgets.activeRunWarningHours) ||
|
|
299
|
+
budgets.activeRunWarningHours <= 0 ||
|
|
300
|
+
budgets.activeRunWarningHours >= budgets.maxActiveRunHours) {
|
|
301
|
+
throw new Error(managedText(language, "运行告警时间必须大于 0 且小于实际工作时间硬上限", "Active-run warning time must be greater than 0 and below the hard active-run limit"));
|
|
302
|
+
}
|
|
303
|
+
if (!Number.isFinite(budgets.noProgressWarningMinutes) ||
|
|
304
|
+
budgets.noProgressWarningMinutes <= 0 ||
|
|
305
|
+
!Number.isFinite(budgets.stalledTimeoutMinutes)) {
|
|
306
|
+
throw new Error(managedText(language, "无进展和卡死判定时间必须是正数", "No-progress warning and stalled timeout must be positive numbers"));
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
function assertRange(field, value, max, language) {
|
|
310
|
+
if (!Number.isFinite(value) || value <= 0 || value > max) {
|
|
311
|
+
throw new Error(managedText(language, `${field} 必须大于 0 且不能超过硬上限 ${max}`, `${field} must be greater than 0 and cannot exceed the hard limit ${max}`));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
function assertIntegerRange(field, value, max, language) {
|
|
315
|
+
assertRange(field, value, max, language);
|
|
316
|
+
if (!Number.isInteger(value)) {
|
|
317
|
+
throw new Error(managedText(language, `${field} 必须是整数`, `${field} must be an integer`));
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
function oppositeAgent(agent) {
|
|
321
|
+
return agent === "codex" ? "claude" : "codex";
|
|
322
|
+
}
|
|
323
|
+
function buildTaskId() {
|
|
324
|
+
const stamp = new Date()
|
|
325
|
+
.toISOString()
|
|
326
|
+
.replace(/[-:TZ.]/g, "")
|
|
327
|
+
.slice(0, 14);
|
|
328
|
+
return `task-${stamp}-${randomUUID().slice(0, 8)}`;
|
|
329
|
+
}
|
|
330
|
+
function defaultDoneCriteria(profile, language) {
|
|
331
|
+
const common = language === "en"
|
|
332
|
+
? [
|
|
333
|
+
"Complete the user goal without silently expanding scope",
|
|
334
|
+
"Provide reviewable deliverables and verification evidence",
|
|
335
|
+
"Record residual issues, blockers, and unexecuted checks",
|
|
336
|
+
"After final acceptance, wait for user approval; never commit or push Git automatically",
|
|
337
|
+
]
|
|
338
|
+
: [
|
|
339
|
+
"完成用户目标且不静默扩大业务范围",
|
|
340
|
+
"提供可复核的目标产物和验证证据",
|
|
341
|
+
"记录遗留问题、阻塞和未执行项",
|
|
342
|
+
"最终验收后等待用户批准,禁止自动 Git 提交或推送",
|
|
343
|
+
];
|
|
344
|
+
if (profile === "engineering" || profile === "sdd") {
|
|
345
|
+
common.splice(2, 0, managedText(language, "执行与风险匹配的构建、测试和运行验证", "Run build, test, and runtime verification proportionate to risk"));
|
|
346
|
+
}
|
|
347
|
+
return common;
|
|
348
|
+
}
|
|
349
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/domains/managed-work/contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { existsSync, readFileSync, unlinkSync } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { managedTaskDir } from "./paths.js";
|
|
4
|
+
import { writeJsonAtomic } from "./storage.js";
|
|
5
|
+
function signalPath(contract) {
|
|
6
|
+
return path.join(managedTaskDir(contract.projectRoot, contract.taskId), "control-signal.json");
|
|
7
|
+
}
|
|
8
|
+
export function requestManagedPause(contract, reason, actor = "user") {
|
|
9
|
+
const signal = {
|
|
10
|
+
pauseRequested: true,
|
|
11
|
+
reason: reason.trim() || "User requested pause",
|
|
12
|
+
actor: actor.trim() || "user",
|
|
13
|
+
requestedAt: new Date().toISOString(),
|
|
14
|
+
};
|
|
15
|
+
writeJsonAtomic(signalPath(contract), signal);
|
|
16
|
+
return signal;
|
|
17
|
+
}
|
|
18
|
+
export function readManagedControlSignal(contract) {
|
|
19
|
+
const file = signalPath(contract);
|
|
20
|
+
if (!existsSync(file))
|
|
21
|
+
return null;
|
|
22
|
+
try {
|
|
23
|
+
return JSON.parse(readFileSync(file, "utf-8"));
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function clearManagedControlSignal(contract) {
|
|
30
|
+
const file = signalPath(contract);
|
|
31
|
+
if (existsSync(file))
|
|
32
|
+
unlinkSync(file);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=control-signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-signals.js","sourceRoot":"","sources":["../../../src/domains/managed-work/control-signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAU/C,SAAS,UAAU,CAAC,QAA6B;IAC/C,OAAO,IAAI,CAAC,IAAI,CACd,cAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,EACrD,qBAAqB,CACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAA6B,EAC7B,MAAc,EACd,KAAK,GAAG,MAAM;IAEd,MAAM,MAAM,GAAyB;QACnC,cAAc,EAAE,IAAI;QACpB,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,sBAAsB;QAC/C,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,MAAM;QAC7B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;IACF,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,QAA6B;IAE7B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAyB,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAA6B;IACrE,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC"}
|