@devcxl/opencode-cabbage 0.3.2 → 1.1.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/README.md +34 -19
- package/README.zh.md +34 -19
- package/assets/agents/dev-lifecycle.md +60 -49
- package/assets/agents/team/architect.md +8 -1
- package/assets/agents/team/developer.md +89 -0
- package/assets/agents/team/goal-verify.md +5 -1
- package/assets/agents/team/reviewer.md +6 -0
- package/assets/commands/code.md +3 -2
- package/assets/commands/design.md +3 -2
- package/assets/commands/release.md +3 -2
- package/assets/commands/requirements.md +3 -2
- package/assets/commands/review.md +3 -2
- package/assets/commands/setup.md +3 -2
- package/assets/commands/tasks.md +2 -1
- package/assets/prompts/bootstrap.md +9 -8
- package/assets/prompts/stage-contract.md +55 -0
- package/assets/skills/flow-code/SKILL.md +38 -140
- package/assets/skills/flow-design/SKILL.md +28 -79
- package/assets/skills/flow-release/SKILL.md +31 -51
- package/assets/skills/flow-requirements/SKILL.md +31 -196
- package/assets/skills/flow-review/SKILL.md +26 -123
- package/assets/skills/flow-setup/SKILL.md +40 -43
- package/assets/skills/flow-tasks/SKILL.md +23 -153
- package/assets/skills/flow-tdd/SKILL.md +30 -31
- package/dist/kernel/caller.d.ts +48 -0
- package/dist/kernel/caller.js +88 -0
- package/dist/kernel/caller.js.map +1 -0
- package/dist/kernel/context.d.ts +27 -0
- package/dist/kernel/context.js +84 -0
- package/dist/kernel/context.js.map +1 -0
- package/dist/kernel/flow.d.ts +175 -0
- package/dist/kernel/flow.js +467 -0
- package/dist/kernel/flow.js.map +1 -0
- package/dist/kernel/legacy.d.ts +19 -0
- package/dist/kernel/legacy.js +34 -0
- package/dist/kernel/legacy.js.map +1 -0
- package/dist/kernel/mutex.d.ts +8 -0
- package/dist/kernel/mutex.js +23 -0
- package/dist/kernel/mutex.js.map +1 -0
- package/dist/kernel/permission.d.ts +21 -0
- package/dist/kernel/permission.js +45 -0
- package/dist/kernel/permission.js.map +1 -0
- package/dist/kernel/profile.d.ts +35 -0
- package/dist/kernel/profile.js +147 -0
- package/dist/kernel/profile.js.map +1 -0
- package/dist/kernel/records.d.ts +103 -0
- package/dist/kernel/records.js +240 -0
- package/dist/kernel/records.js.map +1 -0
- package/dist/kernel/release.d.ts +106 -0
- package/dist/kernel/release.js +241 -0
- package/dist/kernel/release.js.map +1 -0
- package/dist/kernel/review.d.ts +34 -0
- package/dist/kernel/review.js +82 -0
- package/dist/kernel/review.js.map +1 -0
- package/dist/kernel/session-index.d.ts +45 -0
- package/dist/kernel/session-index.js +136 -0
- package/dist/kernel/session-index.js.map +1 -0
- package/dist/kernel/setup.d.ts +95 -0
- package/dist/kernel/setup.js +401 -0
- package/dist/kernel/setup.js.map +1 -0
- package/dist/kernel/slug.d.ts +23 -0
- package/dist/kernel/slug.js +67 -0
- package/dist/kernel/slug.js.map +1 -0
- package/dist/kernel/task.d.ts +213 -0
- package/dist/kernel/task.js +873 -0
- package/dist/kernel/task.js.map +1 -0
- package/dist/{flowrun → kernel/tdd}/adapter.d.ts +1 -1
- package/dist/{flowrun → kernel/tdd}/adapter.js +27 -26
- package/dist/kernel/tdd/adapter.js.map +1 -0
- package/dist/{flowrun → kernel/tdd}/digest.d.ts +2 -1
- package/dist/{flowrun → kernel/tdd}/digest.js +6 -4
- package/dist/kernel/tdd/digest.js.map +1 -0
- package/dist/{flowrun → kernel/tdd}/evaluator.d.ts +1 -1
- package/dist/{flowrun → kernel/tdd}/evaluator.js +1 -1
- package/dist/kernel/tdd/evaluator.js.map +1 -0
- package/dist/kernel/tdd/evidence.d.ts +42 -0
- package/dist/kernel/tdd/evidence.js +48 -0
- package/dist/kernel/tdd/evidence.js.map +1 -0
- package/dist/{flowrun → kernel/tdd}/state.d.ts +2 -2
- package/dist/{flowrun → kernel/tdd}/state.js +1 -1
- package/dist/kernel/tdd/state.js.map +1 -0
- package/dist/kernel/types.d.ts +180 -0
- package/dist/kernel/types.js +2 -0
- package/dist/kernel/types.js.map +1 -0
- package/dist/kernel/worktree.d.ts +45 -0
- package/dist/kernel/worktree.js +156 -0
- package/dist/kernel/worktree.js.map +1 -0
- package/dist/plugin/agents.d.ts +5 -17
- package/dist/plugin/agents.js +0 -23
- package/dist/plugin/agents.js.map +1 -1
- package/dist/plugin/flow-control.d.ts +91 -0
- package/dist/plugin/flow-control.js +287 -0
- package/dist/plugin/flow-control.js.map +1 -0
- package/dist/plugin/goal.d.ts +17 -46
- package/dist/plugin/goal.js +47 -117
- package/dist/plugin/goal.js.map +1 -1
- package/dist/plugin/prompt-lint.js +78 -6
- package/dist/plugin/prompt-lint.js.map +1 -1
- package/dist/plugin/release-control.d.ts +39 -0
- package/dist/plugin/release-control.js +343 -0
- package/dist/plugin/release-control.js.map +1 -0
- package/dist/plugin/server.d.ts +19 -0
- package/dist/plugin/server.js +198 -320
- package/dist/plugin/server.js.map +1 -1
- package/dist/plugin/setup-control.d.ts +59 -0
- package/dist/plugin/setup-control.js +111 -0
- package/dist/plugin/setup-control.js.map +1 -0
- package/dist/plugin/shell.d.ts +7 -34
- package/dist/plugin/shell.js +12 -137
- package/dist/plugin/shell.js.map +1 -1
- package/dist/plugin/skills.d.ts +1 -1
- package/dist/plugin/skills.js +1 -7
- package/dist/plugin/skills.js.map +1 -1
- package/dist/plugin/task-control.d.ts +90 -0
- package/dist/plugin/task-control.js +208 -0
- package/dist/plugin/task-control.js.map +1 -0
- package/dist/plugin/tdd-checkpoint.d.ts +128 -0
- package/dist/plugin/tdd-checkpoint.js +664 -0
- package/dist/plugin/tdd-checkpoint.js.map +1 -0
- package/dist/util/gh.d.ts +5 -0
- package/dist/util/gh.js +12 -0
- package/dist/util/gh.js.map +1 -1
- package/dist/util/paths.d.ts +6 -2
- package/dist/util/paths.js +15 -7
- package/dist/util/paths.js.map +1 -1
- package/package.json +4 -4
- package/assets/agents/team/backend.md +0 -100
- package/assets/agents/team/frontend.md +0 -98
- package/assets/commands/handoff.md +0 -4
- package/assets/commands/test.md +0 -4
- package/assets/context/CONTEXT.md +0 -41
- package/assets/skills/flow-handoff/SKILL.md +0 -76
- package/assets/skills/flow-test/SKILL.md +0 -75
- package/dist/flowrun/adapter.js.map +0 -1
- package/dist/flowrun/audit.d.ts +0 -5
- package/dist/flowrun/audit.js +0 -67
- package/dist/flowrun/audit.js.map +0 -1
- package/dist/flowrun/ci.d.ts +0 -64
- package/dist/flowrun/ci.js +0 -184
- package/dist/flowrun/ci.js.map +0 -1
- package/dist/flowrun/coverage.d.ts +0 -70
- package/dist/flowrun/coverage.js +0 -207
- package/dist/flowrun/coverage.js.map +0 -1
- package/dist/flowrun/digest.js.map +0 -1
- package/dist/flowrun/evaluator.js.map +0 -1
- package/dist/flowrun/gate.d.ts +0 -28
- package/dist/flowrun/gate.js +0 -139
- package/dist/flowrun/gate.js.map +0 -1
- package/dist/flowrun/github.d.ts +0 -24
- package/dist/flowrun/github.js +0 -154
- package/dist/flowrun/github.js.map +0 -1
- package/dist/flowrun/index.d.ts +0 -14
- package/dist/flowrun/index.js +0 -15
- package/dist/flowrun/index.js.map +0 -1
- package/dist/flowrun/merge.d.ts +0 -57
- package/dist/flowrun/merge.js +0 -180
- package/dist/flowrun/merge.js.map +0 -1
- package/dist/flowrun/migration.d.ts +0 -11
- package/dist/flowrun/migration.js +0 -276
- package/dist/flowrun/migration.js.map +0 -1
- package/dist/flowrun/resilience.d.ts +0 -18
- package/dist/flowrun/resilience.js +0 -80
- package/dist/flowrun/resilience.js.map +0 -1
- package/dist/flowrun/state.js.map +0 -1
- package/dist/flowrun/transitions.d.ts +0 -66
- package/dist/flowrun/transitions.js +0 -168
- package/dist/flowrun/transitions.js.map +0 -1
- package/dist/flowrun/types.d.ts +0 -356
- package/dist/flowrun/types.js +0 -21
- package/dist/flowrun/types.js.map +0 -1
- package/dist/flowrun/validator.d.ts +0 -19
- package/dist/flowrun/validator.js +0 -209
- package/dist/flowrun/validator.js.map +0 -1
- package/dist/plugin/broker.d.ts +0 -73
- package/dist/plugin/broker.js +0 -140
- package/dist/plugin/broker.js.map +0 -1
- package/dist/plugin/tdd-tool.d.ts +0 -62
- package/dist/plugin/tdd-tool.js +0 -336
- package/dist/plugin/tdd-tool.js.map +0 -1
package/dist/flowrun/audit.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { gh } from "../util/gh.js";
|
|
2
|
-
import { escapeShellArg } from "../util/shell.js";
|
|
3
|
-
export async function postAuditComment(issueNumber, body) {
|
|
4
|
-
try {
|
|
5
|
-
const escaped = escapeShellArg(body);
|
|
6
|
-
await gh(`issue comment ${issueNumber} --body '${escaped}'`);
|
|
7
|
-
return true;
|
|
8
|
-
}
|
|
9
|
-
catch {
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
export async function postPRComment(prNumber, body) {
|
|
14
|
-
try {
|
|
15
|
-
const escaped = escapeShellArg(body);
|
|
16
|
-
await gh(`pr comment ${prNumber} --body '${escaped}'`);
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
export function buildStageAudit(flowRun, stage) {
|
|
24
|
-
const s = flowRun.stages[stage];
|
|
25
|
-
if (!s)
|
|
26
|
-
return `Stage "${stage}" not found`;
|
|
27
|
-
const lines = [
|
|
28
|
-
`### Stage: ${stage}`,
|
|
29
|
-
`Status: ${s.status}`,
|
|
30
|
-
`Completed: ${s.completedAt ?? "not yet"}`,
|
|
31
|
-
];
|
|
32
|
-
if (s.checks.length > 0) {
|
|
33
|
-
lines.push("", "**Checks:**");
|
|
34
|
-
for (const check of s.checks) {
|
|
35
|
-
lines.push(`- ${check.name}: ${check.status}`);
|
|
36
|
-
for (const ev of check.evidence) {
|
|
37
|
-
lines.push(` - \`${ev.command}\` → exit ${ev.exitCode}: ${ev.summary}`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return lines.join("\n");
|
|
42
|
-
}
|
|
43
|
-
export function buildMergeAudit(task) {
|
|
44
|
-
const lines = [
|
|
45
|
-
`### Task: ${task.id}`,
|
|
46
|
-
`PR: #${task.prNumber}`,
|
|
47
|
-
`Status: ${task.status}`,
|
|
48
|
-
"",
|
|
49
|
-
"**Merge Checkpoints:**",
|
|
50
|
-
];
|
|
51
|
-
if (task.prCheckpoints) {
|
|
52
|
-
const cp = task.prCheckpoints;
|
|
53
|
-
const gates = {
|
|
54
|
-
localChecks: cp.localChecks.status,
|
|
55
|
-
ciChecks: cp.ciChecks.status,
|
|
56
|
-
reviewerApproval: cp.reviewerApproval.status,
|
|
57
|
-
goalVerification: cp.goalVerification.status,
|
|
58
|
-
branchProtection: cp.branchProtection.status,
|
|
59
|
-
mergeResult: cp.mergeResult.status,
|
|
60
|
-
};
|
|
61
|
-
for (const [name, status] of Object.entries(gates)) {
|
|
62
|
-
lines.push(`- ${name}: ${status}`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return lines.join("\n");
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=audit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/flowrun/audit.ts"],"names":[],"mappings":"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"}
|
package/dist/flowrun/ci.d.ts
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import type { RepositoryQualityPolicy, TaskCommand, CoveragePolicy } from "./types.js";
|
|
2
|
-
/** 从 gh pr view --json statusCheckRollup 获取的 PR 检查结果 */
|
|
3
|
-
export interface PRCheckResult {
|
|
4
|
-
context: string;
|
|
5
|
-
state: "EXPECTED" | "ERROR" | "FAILURE" | "PENDING" | "SUCCESS";
|
|
6
|
-
app: {
|
|
7
|
-
id: number;
|
|
8
|
-
name: string;
|
|
9
|
-
} | null;
|
|
10
|
-
}
|
|
11
|
-
/** checkRequiredChecks 的返回结果 */
|
|
12
|
-
export interface CICheckResult {
|
|
13
|
-
allPassed: boolean;
|
|
14
|
-
missingContexts: string[];
|
|
15
|
-
failedContexts: string[];
|
|
16
|
-
pendingContexts: string[];
|
|
17
|
-
untrustedSources: Array<{
|
|
18
|
-
context: string;
|
|
19
|
-
expectedAppId: number;
|
|
20
|
-
actualAppId: number | null;
|
|
21
|
-
}>;
|
|
22
|
-
}
|
|
23
|
-
/** validateRequiredWorkflow 的返回结果 */
|
|
24
|
-
export interface RequiredWorkflowValidation {
|
|
25
|
-
valid: boolean;
|
|
26
|
-
errors: string[];
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* 验证 PR 的状态检查是否满足 RepositoryQualityPolicy 中定义的 required checks。
|
|
30
|
-
*
|
|
31
|
-
* 规则:
|
|
32
|
-
* - mode 为 "off" 时不校验,直接返回 allPassed: true
|
|
33
|
-
* - mode 为 "required" 时:
|
|
34
|
-
* 1. 每个 requiredChecks 中的 context 必须在 PR checks 中存在
|
|
35
|
-
* 2. 状态必须为 SUCCESS
|
|
36
|
-
* 3. 发布该 check 的 GitHub App ID 必须与配置的 appId 匹配
|
|
37
|
-
* (appId 为 0 时不校验来源)
|
|
38
|
-
*/
|
|
39
|
-
export declare function checkRequiredChecks(policy: RepositoryQualityPolicy, prChecks: PRCheckResult[]): CICheckResult;
|
|
40
|
-
/**
|
|
41
|
-
* 验证 RepositoryQualityPolicy 的 requiredChecks 配置有效性。
|
|
42
|
-
*
|
|
43
|
-
* 规则:
|
|
44
|
-
* - mode 为 "off" 时跳过所有校验
|
|
45
|
-
* - mode 为 "required" 时:
|
|
46
|
-
* 1. requiredChecks 不能为空
|
|
47
|
-
* 2. 每个 entry 必须有 workflowPath、workflowRef
|
|
48
|
-
* 3. 不允许重复的 context
|
|
49
|
-
*/
|
|
50
|
-
export declare function validateRequiredWorkflow(policy: RepositoryQualityPolicy): RequiredWorkflowValidation;
|
|
51
|
-
/**
|
|
52
|
-
* checkBranchProtection 委托给 merge.ts 中已有的实现。
|
|
53
|
-
* 这里作为 re-export wrapper,保持 CI 模块的 API 统一性。
|
|
54
|
-
*/
|
|
55
|
-
export { checkBranchProtection } from "./merge.js";
|
|
56
|
-
/**
|
|
57
|
-
* 计算质量契约摘要(Quality Contract Digest)。
|
|
58
|
-
*
|
|
59
|
-
* 绑定 testCommands + verifyCommands + coveragePolicy,
|
|
60
|
-
* 使用 JCS (JSON Canonicalization Scheme) + SHA-256 生成确定性摘要。
|
|
61
|
-
*
|
|
62
|
-
* 用于在 PR checkpoint 中记录期望的契约版本,确保 CI 执行时契约未被修改。
|
|
63
|
-
*/
|
|
64
|
-
export declare function computeQualityContractDigest(testCommands: TaskCommand[], verifyCommands: TaskCommand[], coveragePolicy: CoveragePolicy | null): string;
|
package/dist/flowrun/ci.js
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
// ─── checkRequiredChecks ───
|
|
3
|
-
/**
|
|
4
|
-
* 验证 PR 的状态检查是否满足 RepositoryQualityPolicy 中定义的 required checks。
|
|
5
|
-
*
|
|
6
|
-
* 规则:
|
|
7
|
-
* - mode 为 "off" 时不校验,直接返回 allPassed: true
|
|
8
|
-
* - mode 为 "required" 时:
|
|
9
|
-
* 1. 每个 requiredChecks 中的 context 必须在 PR checks 中存在
|
|
10
|
-
* 2. 状态必须为 SUCCESS
|
|
11
|
-
* 3. 发布该 check 的 GitHub App ID 必须与配置的 appId 匹配
|
|
12
|
-
* (appId 为 0 时不校验来源)
|
|
13
|
-
*/
|
|
14
|
-
export function checkRequiredChecks(policy, prChecks) {
|
|
15
|
-
// mode off — 不增加额外约束
|
|
16
|
-
if (policy.mode === "off") {
|
|
17
|
-
return {
|
|
18
|
-
allPassed: true,
|
|
19
|
-
missingContexts: [],
|
|
20
|
-
failedContexts: [],
|
|
21
|
-
pendingContexts: [],
|
|
22
|
-
untrustedSources: [],
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
// mode required — 逐项验证
|
|
26
|
-
const prCheckMap = new Map();
|
|
27
|
-
for (const c of prChecks) {
|
|
28
|
-
prCheckMap.set(c.context, c);
|
|
29
|
-
}
|
|
30
|
-
const missingContexts = [];
|
|
31
|
-
const failedContexts = [];
|
|
32
|
-
const pendingContexts = [];
|
|
33
|
-
const untrustedSources = [];
|
|
34
|
-
for (const required of policy.requiredChecks) {
|
|
35
|
-
const prCheck = prCheckMap.get(required.context);
|
|
36
|
-
// 1. context 缺失
|
|
37
|
-
if (!prCheck) {
|
|
38
|
-
missingContexts.push(required.context);
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
// 2. 状态检查
|
|
42
|
-
if (prCheck.state === "SUCCESS") {
|
|
43
|
-
// 通过 — 继续检查来源
|
|
44
|
-
}
|
|
45
|
-
else if (prCheck.state === "PENDING" || prCheck.state === "EXPECTED") {
|
|
46
|
-
pendingContexts.push(required.context);
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
// FAILURE, ERROR
|
|
51
|
-
failedContexts.push(required.context);
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
// 3. 来源验证(appId 为 0 时不校验)
|
|
55
|
-
if (required.appId !== 0) {
|
|
56
|
-
if (!prCheck.app || prCheck.app.id !== required.appId) {
|
|
57
|
-
untrustedSources.push({
|
|
58
|
-
context: required.context,
|
|
59
|
-
expectedAppId: required.appId,
|
|
60
|
-
actualAppId: prCheck.app?.id ?? null,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
const allPassed = missingContexts.length === 0 &&
|
|
66
|
-
failedContexts.length === 0 &&
|
|
67
|
-
pendingContexts.length === 0 &&
|
|
68
|
-
untrustedSources.length === 0;
|
|
69
|
-
return {
|
|
70
|
-
allPassed,
|
|
71
|
-
missingContexts,
|
|
72
|
-
failedContexts,
|
|
73
|
-
pendingContexts,
|
|
74
|
-
untrustedSources,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
// ─── validateRequiredWorkflow ───
|
|
78
|
-
/**
|
|
79
|
-
* 验证 RepositoryQualityPolicy 的 requiredChecks 配置有效性。
|
|
80
|
-
*
|
|
81
|
-
* 规则:
|
|
82
|
-
* - mode 为 "off" 时跳过所有校验
|
|
83
|
-
* - mode 为 "required" 时:
|
|
84
|
-
* 1. requiredChecks 不能为空
|
|
85
|
-
* 2. 每个 entry 必须有 workflowPath、workflowRef
|
|
86
|
-
* 3. 不允许重复的 context
|
|
87
|
-
*/
|
|
88
|
-
export function validateRequiredWorkflow(policy) {
|
|
89
|
-
// mode off — 无需校验
|
|
90
|
-
if (policy.mode === "off") {
|
|
91
|
-
return { valid: true, errors: [] };
|
|
92
|
-
}
|
|
93
|
-
const errors = [];
|
|
94
|
-
// 1. requiredChecks 不能为空
|
|
95
|
-
if (policy.requiredChecks.length === 0) {
|
|
96
|
-
errors.push("requiredChecks must not be empty when mode is 'required'");
|
|
97
|
-
return { valid: false, errors };
|
|
98
|
-
}
|
|
99
|
-
// 2. 校验每个 entry
|
|
100
|
-
const seenContexts = new Set();
|
|
101
|
-
for (let i = 0; i < policy.requiredChecks.length; i++) {
|
|
102
|
-
const entry = policy.requiredChecks[i];
|
|
103
|
-
const prefix = `requiredChecks[${i}]`;
|
|
104
|
-
// 检查 context 重复
|
|
105
|
-
if (seenContexts.has(entry.context)) {
|
|
106
|
-
errors.push(`${prefix}: duplicate context "${entry.context}"`);
|
|
107
|
-
}
|
|
108
|
-
seenContexts.add(entry.context);
|
|
109
|
-
// 检查 workflowPath
|
|
110
|
-
if (!entry.workflowPath) {
|
|
111
|
-
errors.push(`${prefix}: workflowPath must not be empty`);
|
|
112
|
-
}
|
|
113
|
-
// 检查 workflowRef
|
|
114
|
-
if (!entry.workflowRef) {
|
|
115
|
-
errors.push(`${prefix}: workflowRef must not be empty`);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return { valid: errors.length === 0, errors };
|
|
119
|
-
}
|
|
120
|
-
// ─── checkBranchProtection ───
|
|
121
|
-
/**
|
|
122
|
-
* checkBranchProtection 委托给 merge.ts 中已有的实现。
|
|
123
|
-
* 这里作为 re-export wrapper,保持 CI 模块的 API 统一性。
|
|
124
|
-
*/
|
|
125
|
-
export { checkBranchProtection } from "./merge.js";
|
|
126
|
-
// ─── computeQualityContractDigest ───
|
|
127
|
-
/**
|
|
128
|
-
* JCS (JSON Canonicalization Scheme) 序列化:
|
|
129
|
-
* - 对象的 key 按 UTF-8 字节序排序
|
|
130
|
-
* - 无多余空白
|
|
131
|
-
* - 数字保留原始精度
|
|
132
|
-
*/
|
|
133
|
-
function jcsStringify(value) {
|
|
134
|
-
if (value === null)
|
|
135
|
-
return "null";
|
|
136
|
-
if (typeof value === "boolean")
|
|
137
|
-
return value ? "true" : "false";
|
|
138
|
-
if (typeof value === "number") {
|
|
139
|
-
if (Number.isFinite(value)) {
|
|
140
|
-
// 使用标准数字序列化
|
|
141
|
-
return String(value);
|
|
142
|
-
}
|
|
143
|
-
return "null";
|
|
144
|
-
}
|
|
145
|
-
if (typeof value === "string") {
|
|
146
|
-
return JSON.stringify(value);
|
|
147
|
-
}
|
|
148
|
-
if (Array.isArray(value)) {
|
|
149
|
-
const items = value.map(jcsStringify);
|
|
150
|
-
return `[${items.join(",")}]`;
|
|
151
|
-
}
|
|
152
|
-
if (typeof value === "object") {
|
|
153
|
-
// 按 key 排序
|
|
154
|
-
const keys = Object.keys(value).sort((a, b) => {
|
|
155
|
-
const bufA = Buffer.from(a, "utf-8");
|
|
156
|
-
const bufB = Buffer.from(b, "utf-8");
|
|
157
|
-
return Buffer.compare(bufA, bufB);
|
|
158
|
-
});
|
|
159
|
-
const pairs = keys.map(k => {
|
|
160
|
-
const v = value[k];
|
|
161
|
-
return `${JSON.stringify(k)}:${jcsStringify(v)}`;
|
|
162
|
-
});
|
|
163
|
-
return `{${pairs.join(",")}}`;
|
|
164
|
-
}
|
|
165
|
-
return "null";
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* 计算质量契约摘要(Quality Contract Digest)。
|
|
169
|
-
*
|
|
170
|
-
* 绑定 testCommands + verifyCommands + coveragePolicy,
|
|
171
|
-
* 使用 JCS (JSON Canonicalization Scheme) + SHA-256 生成确定性摘要。
|
|
172
|
-
*
|
|
173
|
-
* 用于在 PR checkpoint 中记录期望的契约版本,确保 CI 执行时契约未被修改。
|
|
174
|
-
*/
|
|
175
|
-
export function computeQualityContractDigest(testCommands, verifyCommands, coveragePolicy) {
|
|
176
|
-
const contract = {
|
|
177
|
-
testCommands,
|
|
178
|
-
verifyCommands,
|
|
179
|
-
coveragePolicy,
|
|
180
|
-
};
|
|
181
|
-
const json = jcsStringify(contract);
|
|
182
|
-
return createHash("sha256").update(json, "utf-8").digest("hex");
|
|
183
|
-
}
|
|
184
|
-
//# sourceMappingURL=ci.js.map
|
package/dist/flowrun/ci.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ci.js","sourceRoot":"","sources":["../../src/flowrun/ci.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import type { CoverageEvidence } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* 检验 coverage report 路径的安全性。
|
|
4
|
-
*
|
|
5
|
-
* 规则:
|
|
6
|
-
* - 拒绝空路径
|
|
7
|
-
* - 拒绝绝对路径
|
|
8
|
-
* - 拒绝包含 null 字节等危险字符的路径
|
|
9
|
-
* - 拒绝包含 `..` 路径遍历的路径
|
|
10
|
-
*
|
|
11
|
-
* 注意:此函数仅检查路径结构,不处理 symlink。symlink 检查由 resolveCoveragePath 通过 realpath 完成。
|
|
12
|
-
*/
|
|
13
|
-
export declare function validateCoveragePath(reportPath: string, sandboxRoot: string): void;
|
|
14
|
-
/**
|
|
15
|
-
* 在 sandbox 内安全地解析 coverage report 路径。
|
|
16
|
-
*
|
|
17
|
-
* 1. 先执行 validateCoveragePath 结构检查
|
|
18
|
-
* 2. join sandbox + reportPath
|
|
19
|
-
* 3. resolve 后确保不逃逸 sandbox
|
|
20
|
-
* 4. (调用方负责)通过 realpath 检查 symlink 逃逸
|
|
21
|
-
*
|
|
22
|
-
* 返回解析后的绝对路径。
|
|
23
|
-
*/
|
|
24
|
-
export declare function resolveCoveragePath(reportPath: string, sandboxRoot: string): string;
|
|
25
|
-
export interface ParsedCoverageData {
|
|
26
|
-
actual: number;
|
|
27
|
-
metric: "lines";
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* 解析 istanbul-json-summary 格式的 coverage 报告。
|
|
31
|
-
*
|
|
32
|
-
* 抽取 `total.lines.pct`,执行严格的数值校验:
|
|
33
|
-
* - 拒绝缺少 `total.lines` 字段
|
|
34
|
-
* - 拒绝 `pct` 为 non-number、NaN、`"Unknown"` 等非数值
|
|
35
|
-
* - 拒绝 `pct` 超出 [0, 100] 范围
|
|
36
|
-
*
|
|
37
|
-
* 返回 ParsedCoverageData 或 null(解析失败/数据无效)。
|
|
38
|
-
*/
|
|
39
|
-
export declare function parseCoverageReport(reportPath: string, metric: "lines"): Promise<ParsedCoverageData | null>;
|
|
40
|
-
export interface BuildCoverageEvidenceInput {
|
|
41
|
-
actual: number | null;
|
|
42
|
-
threshold: number;
|
|
43
|
-
metric: "lines";
|
|
44
|
-
headSha: string;
|
|
45
|
-
reportDigest: string | null;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* 构建 CoverageEvidence。
|
|
49
|
-
*
|
|
50
|
-
* - actual >= threshold → pass
|
|
51
|
-
* - actual < threshold → fail
|
|
52
|
-
* - actual 为 null → pending(报告解析失败或不存在)
|
|
53
|
-
*/
|
|
54
|
-
export declare function buildCoverageEvidence(input: BuildCoverageEvidenceInput): CoverageEvidence;
|
|
55
|
-
/**
|
|
56
|
-
* 简单的阈值校验(纯数字比较)。
|
|
57
|
-
*/
|
|
58
|
-
export declare function checkCoverageThreshold(actual: number, threshold: number): boolean;
|
|
59
|
-
/**
|
|
60
|
-
* 对 coverage report 文件计算 digest。
|
|
61
|
-
* 用于绑定 report 内容与 evidence。
|
|
62
|
-
*/
|
|
63
|
-
export declare function computeReportDigest(reportPath: string): Promise<string | null>;
|
|
64
|
-
/**
|
|
65
|
-
* 检查 symlink 是否逃逸 sandbox。
|
|
66
|
-
* 在 resolveCoveragePath 之后调用,对已解析路径做 realpath 检查。
|
|
67
|
-
*
|
|
68
|
-
* 返回 safe absolute path,或抛出错误。
|
|
69
|
-
*/
|
|
70
|
-
export declare function verifySymlinkSafe(resolvedPath: string, sandboxRoot: string): Promise<string>;
|
package/dist/flowrun/coverage.js
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { readFile, lstat, realpath } from "node:fs/promises";
|
|
2
|
-
import { resolve, isAbsolute, join, normalize } from "node:path";
|
|
3
|
-
import { createHash } from "node:crypto";
|
|
4
|
-
// ─── 常量 ───
|
|
5
|
-
const DANGEROUS_PATH = /[\x00-\x1f\x7f]/;
|
|
6
|
-
// ─── 路径安全校验 ───
|
|
7
|
-
/**
|
|
8
|
-
* 检验 coverage report 路径的安全性。
|
|
9
|
-
*
|
|
10
|
-
* 规则:
|
|
11
|
-
* - 拒绝空路径
|
|
12
|
-
* - 拒绝绝对路径
|
|
13
|
-
* - 拒绝包含 null 字节等危险字符的路径
|
|
14
|
-
* - 拒绝包含 `..` 路径遍历的路径
|
|
15
|
-
*
|
|
16
|
-
* 注意:此函数仅检查路径结构,不处理 symlink。symlink 检查由 resolveCoveragePath 通过 realpath 完成。
|
|
17
|
-
*/
|
|
18
|
-
export function validateCoveragePath(reportPath, sandboxRoot) {
|
|
19
|
-
if (!reportPath || reportPath.trim() === "") {
|
|
20
|
-
throw new Error("Coverage report path is empty");
|
|
21
|
-
}
|
|
22
|
-
if (DANGEROUS_PATH.test(reportPath)) {
|
|
23
|
-
throw new Error(`Coverage report path contains dangerous characters: ${reportPath}`);
|
|
24
|
-
}
|
|
25
|
-
const normalized = normalize(reportPath);
|
|
26
|
-
if (isAbsolute(normalized)) {
|
|
27
|
-
throw new Error("Coverage report path must be relative, got absolute path");
|
|
28
|
-
}
|
|
29
|
-
// 拒绝路径穿越:以 .. 开头或包含 /../
|
|
30
|
-
const segments = normalized.split("/");
|
|
31
|
-
if (segments.includes("..") || segments.includes("..\\")) {
|
|
32
|
-
throw new Error(`Coverage report path escapes sandbox: ${reportPath}`);
|
|
33
|
-
}
|
|
34
|
-
// 拒绝 Windows 风格的路径穿越
|
|
35
|
-
const winSegments = normalized.split("\\");
|
|
36
|
-
if (winSegments.includes("..")) {
|
|
37
|
-
throw new Error(`Coverage report path escapes sandbox: ${reportPath}`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* 在 sandbox 内安全地解析 coverage report 路径。
|
|
42
|
-
*
|
|
43
|
-
* 1. 先执行 validateCoveragePath 结构检查
|
|
44
|
-
* 2. join sandbox + reportPath
|
|
45
|
-
* 3. resolve 后确保不逃逸 sandbox
|
|
46
|
-
* 4. (调用方负责)通过 realpath 检查 symlink 逃逸
|
|
47
|
-
*
|
|
48
|
-
* 返回解析后的绝对路径。
|
|
49
|
-
*/
|
|
50
|
-
export function resolveCoveragePath(reportPath, sandboxRoot) {
|
|
51
|
-
// 步骤 1: 结构检查
|
|
52
|
-
validateCoveragePath(reportPath, sandboxRoot);
|
|
53
|
-
// 步骤 2: 拼接并解析
|
|
54
|
-
const sandboxNorm = resolve(sandboxRoot);
|
|
55
|
-
const resolved = resolve(join(sandboxNorm, reportPath));
|
|
56
|
-
// 步骤 3: 确保未逃逸 sandbox
|
|
57
|
-
if (!resolved.startsWith(sandboxNorm + "/") && resolved !== sandboxNorm) {
|
|
58
|
-
throw new Error(`Coverage report path resolves outside sandbox: ${reportPath} → ${resolved}`);
|
|
59
|
-
}
|
|
60
|
-
return resolved;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* 解析 istanbul-json-summary 格式的 coverage 报告。
|
|
64
|
-
*
|
|
65
|
-
* 抽取 `total.lines.pct`,执行严格的数值校验:
|
|
66
|
-
* - 拒绝缺少 `total.lines` 字段
|
|
67
|
-
* - 拒绝 `pct` 为 non-number、NaN、`"Unknown"` 等非数值
|
|
68
|
-
* - 拒绝 `pct` 超出 [0, 100] 范围
|
|
69
|
-
*
|
|
70
|
-
* 返回 ParsedCoverageData 或 null(解析失败/数据无效)。
|
|
71
|
-
*/
|
|
72
|
-
export async function parseCoverageReport(reportPath, metric) {
|
|
73
|
-
let raw;
|
|
74
|
-
try {
|
|
75
|
-
raw = await readFile(reportPath, "utf-8");
|
|
76
|
-
}
|
|
77
|
-
catch {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
let parsed;
|
|
81
|
-
try {
|
|
82
|
-
parsed = JSON.parse(raw);
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
const report = parsed;
|
|
91
|
-
// 检查 total 对象
|
|
92
|
-
const total = report.total;
|
|
93
|
-
if (!total || typeof total !== "object") {
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
// 检查 lines 对象
|
|
97
|
-
const lines = total.lines;
|
|
98
|
-
if (!lines || typeof lines !== "object") {
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
// 提取并校验 pct
|
|
102
|
-
const pct = lines.pct;
|
|
103
|
-
// 拒绝 "Unknown" 字符串值
|
|
104
|
-
if (typeof pct === "string") {
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
// 拒绝非 number 类型
|
|
108
|
-
if (typeof pct !== "number") {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
// 拒绝 NaN
|
|
112
|
-
if (isNaN(pct)) {
|
|
113
|
-
return null;
|
|
114
|
-
}
|
|
115
|
-
// 拒绝无穷大
|
|
116
|
-
if (!isFinite(pct)) {
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
// 拒绝范围外数值
|
|
120
|
-
if (pct < 0 || pct > 100) {
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
actual: pct,
|
|
125
|
-
metric,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* 构建 CoverageEvidence。
|
|
130
|
-
*
|
|
131
|
-
* - actual >= threshold → pass
|
|
132
|
-
* - actual < threshold → fail
|
|
133
|
-
* - actual 为 null → pending(报告解析失败或不存在)
|
|
134
|
-
*/
|
|
135
|
-
export function buildCoverageEvidence(input) {
|
|
136
|
-
let status;
|
|
137
|
-
let summary;
|
|
138
|
-
if (input.actual === null) {
|
|
139
|
-
status = "pending";
|
|
140
|
-
summary = `Coverage report not available or could not be parsed for head ${input.headSha.slice(0, 7)}`;
|
|
141
|
-
}
|
|
142
|
-
else if (input.actual >= input.threshold) {
|
|
143
|
-
status = "pass";
|
|
144
|
-
summary = `Coverage ${input.actual}% meets threshold ${input.threshold}% (${input.metric}) at head ${input.headSha.slice(0, 7)}`;
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
status = "fail";
|
|
148
|
-
summary = `Coverage ${input.actual}% below threshold ${input.threshold}% (${input.metric}) at head ${input.headSha.slice(0, 7)}`;
|
|
149
|
-
}
|
|
150
|
-
return {
|
|
151
|
-
status,
|
|
152
|
-
headSha: input.headSha,
|
|
153
|
-
actual: input.actual,
|
|
154
|
-
threshold: input.threshold,
|
|
155
|
-
metric: input.metric,
|
|
156
|
-
reportDigest: input.reportDigest,
|
|
157
|
-
summary,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* 简单的阈值校验(纯数字比较)。
|
|
162
|
-
*/
|
|
163
|
-
export function checkCoverageThreshold(actual, threshold) {
|
|
164
|
-
return actual >= threshold;
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* 对 coverage report 文件计算 digest。
|
|
168
|
-
* 用于绑定 report 内容与 evidence。
|
|
169
|
-
*/
|
|
170
|
-
export async function computeReportDigest(reportPath) {
|
|
171
|
-
try {
|
|
172
|
-
const content = await readFile(reportPath);
|
|
173
|
-
const hash = createHash("sha256");
|
|
174
|
-
hash.update(content);
|
|
175
|
-
return hash.digest("hex");
|
|
176
|
-
}
|
|
177
|
-
catch {
|
|
178
|
-
return null;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* 检查 symlink 是否逃逸 sandbox。
|
|
183
|
-
* 在 resolveCoveragePath 之后调用,对已解析路径做 realpath 检查。
|
|
184
|
-
*
|
|
185
|
-
* 返回 safe absolute path,或抛出错误。
|
|
186
|
-
*/
|
|
187
|
-
export async function verifySymlinkSafe(resolvedPath, sandboxRoot) {
|
|
188
|
-
const sandboxNorm = resolve(sandboxRoot);
|
|
189
|
-
let lstatResult;
|
|
190
|
-
try {
|
|
191
|
-
lstatResult = await lstat(resolvedPath);
|
|
192
|
-
}
|
|
193
|
-
catch {
|
|
194
|
-
// 文件不存在,由调用方处理
|
|
195
|
-
return resolvedPath;
|
|
196
|
-
}
|
|
197
|
-
if (lstatResult.isSymbolicLink()) {
|
|
198
|
-
const real = await realpath(resolvedPath);
|
|
199
|
-
const realNorm = resolve(real);
|
|
200
|
-
if (!realNorm.startsWith(sandboxNorm + "/") && realNorm !== sandboxNorm) {
|
|
201
|
-
throw new Error(`Symlink escapes sandbox: ${resolvedPath} → ${realNorm}`);
|
|
202
|
-
}
|
|
203
|
-
return realNorm;
|
|
204
|
-
}
|
|
205
|
-
return resolvedPath;
|
|
206
|
-
}
|
|
207
|
-
//# sourceMappingURL=coverage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/flowrun/coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"digest.js","sourceRoot":"","sources":["../../src/flowrun/digest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/flowrun/evaluator.ts"],"names":[],"mappings":"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"}
|