@dommaker/harness 1.8.1 → 1.10.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/CHANGELOG.md +16 -0
- package/README.md +10 -13
- package/dist/cli/commands/check.d.ts +3 -3
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +41 -78
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/constraints-report.d.ts +2 -10
- package/dist/cli/commands/constraints-report.d.ts.map +1 -1
- package/dist/cli/commands/constraints-report.js +4 -57
- package/dist/cli/commands/constraints-report.js.map +1 -1
- package/dist/cli/commands/constraints-retire.d.ts +9 -23
- package/dist/cli/commands/constraints-retire.d.ts.map +1 -1
- package/dist/cli/commands/constraints-retire.js +39 -121
- package/dist/cli/commands/constraints-retire.js.map +1 -1
- package/dist/cli/commands/constraints.d.ts +3 -8
- package/dist/cli/commands/constraints.d.ts.map +1 -1
- package/dist/cli/commands/constraints.js +8 -23
- package/dist/cli/commands/constraints.js.map +1 -1
- package/dist/cli/commands/definitions.js +2 -2
- package/dist/cli/commands/init.d.ts +0 -32
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +7 -149
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +14 -17
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/scaffold-templates.d.ts +0 -2
- package/dist/cli/commands/scaffold-templates.d.ts.map +1 -1
- package/dist/cli/commands/scaffold-templates.js +2 -37
- package/dist/cli/commands/scaffold-templates.js.map +1 -1
- package/dist/cli/commands/scaffold.d.ts +0 -2
- package/dist/cli/commands/scaffold.d.ts.map +1 -1
- package/dist/cli/commands/scaffold.js +0 -10
- package/dist/cli/commands/scaffold.js.map +1 -1
- package/dist/cli/commands/status.js +10 -10
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/sync-docs/agents-syncer.d.ts +0 -2
- package/dist/cli/commands/sync-docs/agents-syncer.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs/agents-syncer.js +4 -23
- package/dist/cli/commands/sync-docs/agents-syncer.js.map +1 -1
- package/dist/cli/commands/sync-docs/capabilities-syncer.d.ts +22 -0
- package/dist/cli/commands/sync-docs/capabilities-syncer.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs/capabilities-syncer.js +113 -8
- package/dist/cli/commands/sync-docs/capabilities-syncer.js.map +1 -1
- package/dist/cli/commands/sync-docs/index.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs/index.js +36 -4
- package/dist/cli/commands/sync-docs/index.js.map +1 -1
- package/dist/core/constraints/capabilities-parser.d.ts.map +1 -1
- package/dist/core/constraints/capabilities-parser.js +16 -4
- package/dist/core/constraints/capabilities-parser.js.map +1 -1
- package/dist/core/constraints/checker.d.ts +15 -24
- package/dist/core/constraints/checker.d.ts.map +1 -1
- package/dist/core/constraints/checker.js +33 -72
- package/dist/core/constraints/checker.js.map +1 -1
- package/dist/core/constraints/checkers/docs-freshness.js +1 -1
- package/dist/core/constraints/checkers/docs-freshness.js.map +1 -1
- package/dist/core/constraints/checkers/governance-presence.d.ts +2 -1
- package/dist/core/constraints/checkers/governance-presence.d.ts.map +1 -1
- package/dist/core/constraints/checkers/governance-presence.js +4 -3
- package/dist/core/constraints/checkers/governance-presence.js.map +1 -1
- package/dist/core/constraints/checkers/index.d.ts +1 -1
- package/dist/core/constraints/checkers/index.d.ts.map +1 -1
- package/dist/core/constraints/checkers/index.js +4 -8
- package/dist/core/constraints/checkers/index.js.map +1 -1
- package/dist/core/constraints/checkers/iron-flags.d.ts +3 -4
- package/dist/core/constraints/checkers/iron-flags.d.ts.map +1 -1
- package/dist/core/constraints/checkers/iron-flags.js +4 -5
- package/dist/core/constraints/checkers/iron-flags.js.map +1 -1
- package/dist/core/constraints/checkers/no-test-simplification.js +1 -1
- package/dist/core/constraints/checkers/no-test-simplification.js.map +1 -1
- package/dist/core/constraints/checkers/types.d.ts +1 -1
- package/dist/core/constraints/checkers/types.js +1 -1
- package/dist/core/constraints/definitions/guidelines.d.ts +4 -4
- package/dist/core/constraints/definitions/guidelines.d.ts.map +1 -1
- package/dist/core/constraints/definitions/guidelines.js +9 -25
- package/dist/core/constraints/definitions/guidelines.js.map +1 -1
- package/dist/core/constraints/definitions/iron-laws.d.ts +4 -4
- package/dist/core/constraints/definitions/iron-laws.d.ts.map +1 -1
- package/dist/core/constraints/definitions/iron-laws.js +10 -81
- package/dist/core/constraints/definitions/iron-laws.js.map +1 -1
- package/dist/core/constraints/definitions.d.ts +7 -9
- package/dist/core/constraints/definitions.d.ts.map +1 -1
- package/dist/core/constraints/definitions.js +13 -16
- package/dist/core/constraints/definitions.js.map +1 -1
- package/dist/core/constraints/index.d.ts +2 -5
- package/dist/core/constraints/index.d.ts.map +1 -1
- package/dist/core/constraints/index.js +3 -13
- package/dist/core/constraints/index.js.map +1 -1
- package/dist/core/constraints/injection-writer.d.ts +10 -38
- package/dist/core/constraints/injection-writer.d.ts.map +1 -1
- package/dist/core/constraints/injection-writer.js +17 -54
- package/dist/core/constraints/injection-writer.js.map +1 -1
- package/dist/core/constraints/run-env.d.ts +1 -10
- package/dist/core/constraints/run-env.d.ts.map +1 -1
- package/dist/core/constraints/run-env.js +1 -22
- package/dist/core/constraints/run-env.js.map +1 -1
- package/dist/core/constraints/usage-report.d.ts +5 -7
- package/dist/core/constraints/usage-report.d.ts.map +1 -1
- package/dist/core/constraints/usage-report.js +5 -10
- package/dist/core/constraints/usage-report.js.map +1 -1
- package/dist/core/effective-constraints.d.ts +12 -22
- package/dist/core/effective-constraints.d.ts.map +1 -1
- package/dist/core/effective-constraints.js +13 -30
- package/dist/core/effective-constraints.js.map +1 -1
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -9
- package/dist/core/index.js.map +1 -1
- package/dist/core/project-config-loader.d.ts +4 -42
- package/dist/core/project-config-loader.d.ts.map +1 -1
- package/dist/core/project-config-loader.js +16 -125
- package/dist/core/project-config-loader.js.map +1 -1
- package/dist/core/validators/passes-gate.d.ts +2 -2
- package/dist/core/validators/passes-gate.js +6 -6
- package/dist/core/validators/passes-gate.js.map +1 -1
- package/dist/hooks/bootstrap.d.ts +9 -12
- package/dist/hooks/bootstrap.d.ts.map +1 -1
- package/dist/hooks/bootstrap.js +9 -31
- package/dist/hooks/bootstrap.js.map +1 -1
- package/dist/hooks/index.d.ts +5 -7
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +4 -10
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +9 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -23
- package/dist/index.js.map +1 -1
- package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
- package/dist/monitoring/trace-analyzer.js +11 -12
- package/dist/monitoring/trace-analyzer.js.map +1 -1
- package/dist/monitoring/traces.d.ts +4 -4
- package/dist/monitoring/traces.d.ts.map +1 -1
- package/dist/monitoring/traces.js +8 -8
- package/dist/monitoring/traces.js.map +1 -1
- package/dist/presets/standard.d.ts +8 -10
- package/dist/presets/standard.d.ts.map +1 -1
- package/dist/presets/standard.js +10 -16
- package/dist/presets/standard.js.map +1 -1
- package/dist/types/constraint.d.ts +24 -35
- package/dist/types/constraint.d.ts.map +1 -1
- package/dist/types/constraint.js +8 -7
- package/dist/types/constraint.js.map +1 -1
- package/dist/types/passes-gate.d.ts +5 -5
- package/dist/types/passes-gate.d.ts.map +1 -1
- package/dist/types/project-config.d.ts +8 -66
- package/dist/types/project-config.d.ts.map +1 -1
- package/dist/types/project-config.js +3 -2
- package/dist/types/project-config.js.map +1 -1
- package/dist/types/trace.d.ts +8 -10
- package/dist/types/trace.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/CONTEXT.md +3 -3
- package/src/__tests__/checker-extra.test.ts +37 -61
- package/src/__tests__/checker.test.ts +10 -115
- package/src/__tests__/effective-constraints.test.ts +18 -83
- package/src/__tests__/iron-laws.test.ts +71 -90
- package/src/__tests__/passes-gate-check.test.ts +2 -2
- package/src/__tests__/project-config-loader-extra.test.ts +22 -123
- package/src/__tests__/project-config-loader.test.ts +5 -33
- package/src/__tests__/public-exports.test.ts +31 -11
- package/src/__tests__/public-type-surface.test.ts +2 -13
- package/src/__tests__/public-value-surface.test.ts +1 -7
- package/src/__tests__/skip-semantics.test.ts +21 -37
- package/src/__tests__/trace-analyzer-extra.test.ts +14 -14
- package/src/__tests__/trace-analyzer.test.ts +21 -21
- package/src/__tests__/trace-collector.test.ts +22 -22
- package/src/__tests__/traces.test.ts +27 -28
- package/src/cli/commands/CONTEXT.md +12 -9
- package/src/cli/commands/__tests__/check-read-count.test.ts +4 -15
- package/src/cli/commands/__tests__/check-skip-output.test.ts +14 -14
- package/src/cli/commands/__tests__/check.test.ts +14 -31
- package/src/cli/commands/__tests__/constraints-report.test.ts +12 -80
- package/src/cli/commands/__tests__/constraints-retire.test.ts +42 -231
- package/src/cli/commands/__tests__/init-governance-io.test.ts +12 -58
- package/src/cli/commands/__tests__/init-ondisk.test.ts +12 -20
- package/src/cli/commands/__tests__/init.test.ts +0 -11
- package/src/cli/commands/__tests__/project-path-anchoring.test.ts +2 -2
- package/src/cli/commands/__tests__/registry.test.ts +39 -3
- package/src/cli/commands/__tests__/report-extra.test.ts +4 -4
- package/src/cli/commands/__tests__/report.test.ts +1 -1
- package/src/cli/commands/__tests__/scaffold.test.ts +4 -14
- package/src/cli/commands/__tests__/status-analysis-wiring.test.ts +3 -3
- package/src/cli/commands/__tests__/status-extra.test.ts +14 -14
- package/src/cli/commands/__tests__/status.test.ts +12 -12
- package/src/cli/commands/__tests__/sync-docs-agents.test.ts +1 -1
- package/src/cli/commands/__tests__/sync-docs-table-layout.test.ts +259 -0
- package/src/cli/commands/check.ts +43 -82
- package/src/cli/commands/constraints-report.ts +4 -59
- package/src/cli/commands/constraints-retire.ts +49 -154
- package/src/cli/commands/constraints.ts +11 -26
- package/src/cli/commands/definitions.ts +2 -2
- package/src/cli/commands/init.ts +8 -179
- package/src/cli/commands/report.ts +19 -23
- package/src/cli/commands/scaffold-templates.ts +1 -37
- package/src/cli/commands/scaffold.ts +0 -11
- package/src/cli/commands/status.ts +10 -10
- package/src/cli/commands/sync-docs/agents-syncer.ts +4 -25
- package/src/cli/commands/sync-docs/capabilities-syncer.ts +139 -9
- package/src/cli/commands/sync-docs/index.ts +41 -4
- package/src/core/CONTEXT.md +9 -9
- package/src/core/constraints/__tests__/capability-counts.test.ts +5 -5
- package/src/core/constraints/__tests__/collect-constraints.test.ts +13 -8
- package/src/core/constraints/__tests__/git-evidence.test.ts +4 -7
- package/src/core/constraints/__tests__/injection-writer.test.ts +8 -61
- package/src/core/constraints/__tests__/run-env.test.ts +5 -34
- package/src/core/constraints/__tests__/trace-injection.test.ts +1 -1
- package/src/core/constraints/capabilities-parser.ts +17 -5
- package/src/core/constraints/checker.ts +39 -88
- package/src/core/constraints/checkers/__tests__/check-outcome.test.ts +5 -8
- package/src/core/constraints/checkers/__tests__/governance-presence.test.ts +1 -53
- package/src/core/constraints/checkers/__tests__/iron-flags.test.ts +5 -25
- package/src/core/constraints/checkers/docs-freshness.ts +1 -1
- package/src/core/constraints/checkers/governance-presence.ts +4 -3
- package/src/core/constraints/checkers/index.ts +4 -10
- package/src/core/constraints/checkers/iron-flags.ts +3 -12
- package/src/core/constraints/checkers/no-test-simplification.ts +1 -1
- package/src/core/constraints/checkers/types.ts +1 -1
- package/src/core/constraints/definitions/guidelines.ts +8 -25
- package/src/core/constraints/definitions/iron-laws.ts +9 -82
- package/src/core/constraints/definitions.ts +14 -15
- package/src/core/constraints/index.ts +4 -19
- package/src/core/constraints/injection-writer.ts +16 -61
- package/src/core/constraints/run-env.ts +1 -33
- package/src/core/constraints/usage-report.ts +8 -15
- package/src/core/effective-constraints.ts +14 -45
- package/src/core/index.ts +3 -10
- package/src/core/project-config-loader.ts +20 -145
- package/src/core/validators/passes-gate.ts +6 -6
- package/src/failure/CONTEXT.md +1 -1
- package/src/hooks/CONTEXT.md +12 -22
- package/src/hooks/__tests__/bootstrap.test.ts +24 -75
- package/src/hooks/bootstrap.ts +9 -48
- package/src/hooks/index.ts +5 -20
- package/src/index.ts +9 -31
- package/src/monitoring/__tests__/trace-file-anchoring.test.ts +1 -1
- package/src/monitoring/__tests__/traces.test.ts +22 -22
- package/src/monitoring/trace-analyzer.ts +12 -13
- package/src/monitoring/traces.ts +8 -8
- package/src/presets/__tests__/standard.test.ts +12 -16
- package/src/presets/standard.ts +14 -23
- package/src/types/__tests__/types.test.ts +3 -3
- package/src/types/constraint.ts +26 -40
- package/src/types/passes-gate.ts +5 -5
- package/src/types/project-config.ts +8 -77
- package/src/types/trace.ts +8 -11
- package/dist/core/constraints/agent-prompt-renderer.d.ts +0 -32
- package/dist/core/constraints/agent-prompt-renderer.d.ts.map +0 -1
- package/dist/core/constraints/agent-prompt-renderer.js +0 -55
- package/dist/core/constraints/agent-prompt-renderer.js.map +0 -1
- package/dist/core/constraints/checkers/no-bypass-checkpoint.d.ts +0 -6
- package/dist/core/constraints/checkers/no-bypass-checkpoint.d.ts.map +0 -1
- package/dist/core/constraints/checkers/no-bypass-checkpoint.js +0 -40
- package/dist/core/constraints/checkers/no-bypass-checkpoint.js.map +0 -1
- package/dist/core/constraints/definitions/prompts.d.ts +0 -12
- package/dist/core/constraints/definitions/prompts.d.ts.map +0 -1
- package/dist/core/constraints/definitions/prompts.js +0 -400
- package/dist/core/constraints/definitions/prompts.js.map +0 -1
- package/dist/core/constraints/injection-drift.d.ts +0 -61
- package/dist/core/constraints/injection-drift.d.ts.map +0 -1
- package/dist/core/constraints/injection-drift.js +0 -131
- package/dist/core/constraints/injection-drift.js.map +0 -1
- package/dist/core/constraints/injection-renderer.d.ts +0 -23
- package/dist/core/constraints/injection-renderer.d.ts.map +0 -1
- package/dist/core/constraints/injection-renderer.js +0 -44
- package/dist/core/constraints/injection-renderer.js.map +0 -1
- package/dist/hooks/config.d.ts +0 -30
- package/dist/hooks/config.d.ts.map +0 -1
- package/dist/hooks/config.js +0 -34
- package/dist/hooks/config.js.map +0 -1
- package/dist/hooks/pipeline.d.ts +0 -54
- package/dist/hooks/pipeline.d.ts.map +0 -1
- package/dist/hooks/pipeline.js +0 -173
- package/dist/hooks/pipeline.js.map +0 -1
- package/dist/hooks/registry.d.ts +0 -70
- package/dist/hooks/registry.d.ts.map +0 -1
- package/dist/hooks/registry.js +0 -141
- package/dist/hooks/registry.js.map +0 -1
- package/dist/hooks/types.d.ts +0 -113
- package/dist/hooks/types.d.ts.map +0 -1
- package/dist/hooks/types.js +0 -9
- package/dist/hooks/types.js.map +0 -1
- package/src/__tests__/hooks-pipeline.test.ts +0 -201
- package/src/cli/commands/__tests__/check-drift.test.ts +0 -158
- package/src/cli/commands/__tests__/init-injection.test.ts +0 -466
- package/src/core/constraints/__tests__/agent-prompt-renderer.test.ts +0 -129
- package/src/core/constraints/__tests__/injection-drift.test.ts +0 -247
- package/src/core/constraints/agent-prompt-renderer.ts +0 -67
- package/src/core/constraints/checkers/__tests__/no-bypass-checkpoint.test.ts +0 -76
- package/src/core/constraints/checkers/no-bypass-checkpoint.ts +0 -40
- package/src/core/constraints/definitions/prompts.ts +0 -414
- package/src/core/constraints/injection-drift.ts +0 -142
- package/src/core/constraints/injection-renderer.ts +0 -44
- package/src/hooks/__tests__/config.test.ts +0 -19
- package/src/hooks/__tests__/pipeline.test.ts +0 -195
- package/src/hooks/__tests__/registry.test.ts +0 -115
- package/src/hooks/config.ts +0 -33
- package/src/hooks/pipeline.ts +0 -202
- package/src/hooks/registry.ts +0 -166
- package/src/hooks/types.ts +0 -120
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* 治理约束注入段漂移校验(ADR-0001 决策 7)
|
|
4
|
-
*
|
|
5
|
-
* 检测三类漂移:
|
|
6
|
-
* 1. 版本漂移:标记段内 `<!-- version: x -->` ≠ 当前 harness 包版本
|
|
7
|
-
* 2. 内容漂移:标记段实际条目 ≠ renderConstraintsSection(当前生效集, 当前版本)
|
|
8
|
-
* (手改裁剪 / harness 升级后未重跑 init / config.yml 变更后未同步),
|
|
9
|
-
* 产出条目级差异(missing/extra),比逐行 diff 更可读
|
|
10
|
-
* 3. 重复章节:标记段之外还存在另一个 `## Governance Rules` 标题
|
|
11
|
-
* (init 旧版本在无标记时追加第二个同名章节的历史问题)
|
|
12
|
-
*
|
|
13
|
-
* 落点路由(studio #307,ADR 2026-08-21 落点模型):注入段可能在
|
|
14
|
-
* CLAUDE.md(旧模型仓)或 AGENTS.md `PRESERVE:governance` 段内(新模型仓),
|
|
15
|
-
* 与 init 的 setupGovernanceConstraints 路由一致——CLAUDE.md 有标记优先。
|
|
16
|
-
*
|
|
17
|
-
* 纯检测、只读:不改任何文件。check 仅警告不阻断,详细差异进 report。
|
|
18
|
-
* 两处均无标记段 = 未注入,不算漂移(report 一句话提示,check 不警告)。
|
|
19
|
-
*/
|
|
20
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
21
|
-
if (k2 === undefined) k2 = k;
|
|
22
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
23
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
24
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
25
|
-
}
|
|
26
|
-
Object.defineProperty(o, k2, desc);
|
|
27
|
-
}) : (function(o, m, k, k2) {
|
|
28
|
-
if (k2 === undefined) k2 = k;
|
|
29
|
-
o[k2] = m[k];
|
|
30
|
-
}));
|
|
31
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
32
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
33
|
-
}) : function(o, v) {
|
|
34
|
-
o["default"] = v;
|
|
35
|
-
});
|
|
36
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
37
|
-
var ownKeys = function(o) {
|
|
38
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
39
|
-
var ar = [];
|
|
40
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
41
|
-
return ar;
|
|
42
|
-
};
|
|
43
|
-
return ownKeys(o);
|
|
44
|
-
};
|
|
45
|
-
return function (mod) {
|
|
46
|
-
if (mod && mod.__esModule) return mod;
|
|
47
|
-
var result = {};
|
|
48
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
49
|
-
__setModuleDefault(result, mod);
|
|
50
|
-
return result;
|
|
51
|
-
};
|
|
52
|
-
})();
|
|
53
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
-
exports.INJECTION_DRIFT_FIX_HINT = void 0;
|
|
55
|
-
exports.detectInjectionDrift = detectInjectionDrift;
|
|
56
|
-
const path = __importStar(require("path"));
|
|
57
|
-
const effective_constraints_1 = require("../effective-constraints");
|
|
58
|
-
const run_env_1 = require("./run-env");
|
|
59
|
-
const package_version_1 = require("../../utils/package-version");
|
|
60
|
-
const injection_renderer_1 = require("./injection-renderer");
|
|
61
|
-
const injection_writer_1 = require("./injection-writer");
|
|
62
|
-
/** 修复指引(重跑 init 幂等同步注入段) */
|
|
63
|
-
exports.INJECTION_DRIFT_FIX_HINT = '重跑 `npx @dommaker/harness init` 同步注入段(漂移仅警告,不阻断)';
|
|
64
|
-
const VERSION_LINE_RE = /<!-- version: ([^ ]+) -->/;
|
|
65
|
-
const ENTRY_LINE_RE = /^- \*\*.+?\*\*: .+$/;
|
|
66
|
-
const GROUP_HEADING_RE = /^### .+$/;
|
|
67
|
-
/**
|
|
68
|
-
* 提取参与条目级比对的"有效行":注入条目(- **id**: text)与分组标题(### ...)。
|
|
69
|
-
* 标记行、版本行、空行不参与——版本单独比对,空行/标记属排版噪音。
|
|
70
|
-
*/
|
|
71
|
-
function significantLines(section) {
|
|
72
|
-
return section
|
|
73
|
-
.split('\n')
|
|
74
|
-
.map(l => l.trim())
|
|
75
|
-
.filter(l => ENTRY_LINE_RE.test(l) || GROUP_HEADING_RE.test(l));
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* 检测约束注入段漂移
|
|
79
|
-
*
|
|
80
|
-
* @param target 项目根路径,或本 run 的运行级观察面(CLI check 传入即与本 run 共用
|
|
81
|
-
* 同一份 config.yml 读取,漂移侧的生效集计算不再重读文件——ADR-0023 决策 2)
|
|
82
|
-
* @param currentVersion 当前 harness 版本(缺省经 getHarnessPackageVersion 正本读取;测试可显式传入)
|
|
83
|
-
* @param expectedConstraints 本 run 已算好的生效集(CLI check 传入 → 生效集链路一次运行只算
|
|
84
|
-
* 一遍,且比对用的就是本 run 实际执法的那份)。不传则按 target 自取,行为与改前逐字一致
|
|
85
|
-
*/
|
|
86
|
-
function detectInjectionDrift(target, currentVersion = (0, package_version_1.getHarnessPackageVersion)(), expectedConstraints) {
|
|
87
|
-
const env = (0, run_env_1.resolveRunEnv)(target);
|
|
88
|
-
const projectRoot = env.projectPath;
|
|
89
|
-
const result = {
|
|
90
|
-
hasDrift: false,
|
|
91
|
-
notInjected: false,
|
|
92
|
-
duplicateHeading: false,
|
|
93
|
-
fixHint: exports.INJECTION_DRIFT_FIX_HINT,
|
|
94
|
-
};
|
|
95
|
-
const injected = (0, injection_writer_1.resolveInjectionTarget)(projectRoot);
|
|
96
|
-
if (!injected) {
|
|
97
|
-
// 两处均无标记段 = 未注入,不算漂移(check 不警告)。
|
|
98
|
-
// 重复章节仍如实记录供 report 提示:旧落点 CLAUDE.md 优先,其次 AGENTS.md。
|
|
99
|
-
const legacy = (0, injection_writer_1.readIfExists)(path.join(projectRoot, 'CLAUDE.md')) ??
|
|
100
|
-
(0, injection_writer_1.readIfExists)(path.join(projectRoot, 'AGENTS.md'));
|
|
101
|
-
if (legacy !== null) {
|
|
102
|
-
result.duplicateHeading = (0, injection_writer_1.countGovernanceHeadings)(legacy) > 1;
|
|
103
|
-
}
|
|
104
|
-
result.notInjected = true;
|
|
105
|
-
return result;
|
|
106
|
-
}
|
|
107
|
-
result.injectionFile = injected.file;
|
|
108
|
-
const { content, startIdx, endIdx } = injected;
|
|
109
|
-
// 重复章节:全文统计治理标题数(严格计数 injection-writer.countGovernanceHeadings,#83)
|
|
110
|
-
const headingCount = (0, injection_writer_1.countGovernanceHeadings)(content);
|
|
111
|
-
result.duplicateHeading = headingCount > 1;
|
|
112
|
-
const actualSection = content.slice(startIdx, endIdx + injection_renderer_1.CONSTRAINTS_END_MARKER.length);
|
|
113
|
-
// 1. 版本漂移
|
|
114
|
-
const versionMatch = VERSION_LINE_RE.exec(actualSection);
|
|
115
|
-
const actualVersion = versionMatch ? versionMatch[1] : '(缺失)';
|
|
116
|
-
if (actualVersion !== currentVersion) {
|
|
117
|
-
result.versionDrift = { expected: currentVersion, actual: actualVersion };
|
|
118
|
-
}
|
|
119
|
-
// 2. 内容漂移(条目级:期望渲染 vs 实际段)
|
|
120
|
-
const expectedSection = (0, injection_renderer_1.renderConstraintsSection)(expectedConstraints ?? (0, effective_constraints_1.getEffectiveConstraints)(env), currentVersion);
|
|
121
|
-
const expectedLines = new Set(significantLines(expectedSection));
|
|
122
|
-
const actualLines = new Set(significantLines(actualSection));
|
|
123
|
-
const missing = [...expectedLines].filter(l => !actualLines.has(l));
|
|
124
|
-
const extra = [...actualLines].filter(l => !expectedLines.has(l));
|
|
125
|
-
if (missing.length > 0 || extra.length > 0) {
|
|
126
|
-
result.contentDrift = { missing, extra };
|
|
127
|
-
}
|
|
128
|
-
result.hasDrift = Boolean(result.versionDrift) || Boolean(result.contentDrift) || result.duplicateHeading;
|
|
129
|
-
return result;
|
|
130
|
-
}
|
|
131
|
-
//# sourceMappingURL=injection-drift.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"injection-drift.js","sourceRoot":"","sources":["../../../src/core/constraints/injection-drift.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLAUDE.md 约束注入段渲染(ADR-0001)
|
|
3
|
-
*
|
|
4
|
-
* 纯函数:输入生效约束集 + harness 版本,输出标记区间的期望文本。
|
|
5
|
-
* 与写文件分离——init 注入与 P6 注入漂移校验(期望 vs 实际)共用此渲染。
|
|
6
|
-
*/
|
|
7
|
-
import type { Constraint } from '../../types/constraint';
|
|
8
|
-
/** 约束注入段开始标记 */
|
|
9
|
-
export declare const CONSTRAINTS_START_MARKER = "<!-- HARNESS_CONSTRAINTS_START -->";
|
|
10
|
-
/** 约束注入段结束标记 */
|
|
11
|
-
export declare const CONSTRAINTS_END_MARKER = "<!-- HARNESS_CONSTRAINTS_END -->";
|
|
12
|
-
/**
|
|
13
|
-
* 渲染 CLAUDE.md 约束注入段(含 START/END 标记,不含 `## Governance Rules` 标题)
|
|
14
|
-
*
|
|
15
|
-
* 结构:### Iron Laws / ### Guidelines / ### Prompts(行为约束),
|
|
16
|
-
* 条目为 `- **id**: promptInjection`;无 promptInjection 的 check 条目
|
|
17
|
-
* (如 docs_freshness)不出现在注入段。返回文本以换行结尾。
|
|
18
|
-
*
|
|
19
|
-
* @param constraints 生效约束集(getEffectiveConstraints 的输出)
|
|
20
|
-
* @param version harness 版本号(写入 `<!-- version: x -->` 供漂移校验)
|
|
21
|
-
*/
|
|
22
|
-
export declare function renderConstraintsSection(constraints: Constraint[], version: string): string;
|
|
23
|
-
//# sourceMappingURL=injection-renderer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"injection-renderer.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/injection-renderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,gBAAgB;AAChB,eAAO,MAAM,wBAAwB,uCAAuC,CAAC;AAC7E,gBAAgB;AAChB,eAAO,MAAM,sBAAsB,qCAAqC,CAAC;AAEzE;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAmB3F"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* CLAUDE.md 约束注入段渲染(ADR-0001)
|
|
4
|
-
*
|
|
5
|
-
* 纯函数:输入生效约束集 + harness 版本,输出标记区间的期望文本。
|
|
6
|
-
* 与写文件分离——init 注入与 P6 注入漂移校验(期望 vs 实际)共用此渲染。
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.CONSTRAINTS_END_MARKER = exports.CONSTRAINTS_START_MARKER = void 0;
|
|
10
|
-
exports.renderConstraintsSection = renderConstraintsSection;
|
|
11
|
-
/** 约束注入段开始标记 */
|
|
12
|
-
exports.CONSTRAINTS_START_MARKER = '<!-- HARNESS_CONSTRAINTS_START -->';
|
|
13
|
-
/** 约束注入段结束标记 */
|
|
14
|
-
exports.CONSTRAINTS_END_MARKER = '<!-- HARNESS_CONSTRAINTS_END -->';
|
|
15
|
-
/**
|
|
16
|
-
* 渲染 CLAUDE.md 约束注入段(含 START/END 标记,不含 `## Governance Rules` 标题)
|
|
17
|
-
*
|
|
18
|
-
* 结构:### Iron Laws / ### Guidelines / ### Prompts(行为约束),
|
|
19
|
-
* 条目为 `- **id**: promptInjection`;无 promptInjection 的 check 条目
|
|
20
|
-
* (如 docs_freshness)不出现在注入段。返回文本以换行结尾。
|
|
21
|
-
*
|
|
22
|
-
* @param constraints 生效约束集(getEffectiveConstraints 的输出)
|
|
23
|
-
* @param version harness 版本号(写入 `<!-- version: x -->` 供漂移校验)
|
|
24
|
-
*/
|
|
25
|
-
function renderConstraintsSection(constraints, version) {
|
|
26
|
-
const lines = [exports.CONSTRAINTS_START_MARKER, `<!-- version: ${version} -->`];
|
|
27
|
-
const renderGroup = (level, heading, first) => {
|
|
28
|
-
const items = constraints.filter(c => c.level === level && c.promptInjection);
|
|
29
|
-
if (items.length === 0)
|
|
30
|
-
return;
|
|
31
|
-
if (!first)
|
|
32
|
-
lines.push('');
|
|
33
|
-
lines.push(heading);
|
|
34
|
-
for (const c of items) {
|
|
35
|
-
lines.push(`- **${c.id}**: ${c.promptInjection}`);
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
renderGroup('iron_law', '### Iron Laws (违反将阻断)', true);
|
|
39
|
-
renderGroup('guideline', '### Guidelines (应遵循)', lines.length === 2);
|
|
40
|
-
renderGroup('prompt', '### Prompts (行为约束)', lines.length === 2);
|
|
41
|
-
lines.push(exports.CONSTRAINTS_END_MARKER);
|
|
42
|
-
return lines.join('\n') + '\n';
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=injection-renderer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"injection-renderer.js","sourceRoot":"","sources":["../../../src/core/constraints/injection-renderer.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAmBH,4DAmBC;AAlCD,gBAAgB;AACH,QAAA,wBAAwB,GAAG,oCAAoC,CAAC;AAC7E,gBAAgB;AACH,QAAA,sBAAsB,GAAG,kCAAkC,CAAC;AAEzE;;;;;;;;;GASG;AACH,SAAgB,wBAAwB,CAAC,WAAyB,EAAE,OAAe;IACjF,MAAM,KAAK,GAAa,CAAC,gCAAwB,EAAE,iBAAiB,OAAO,MAAM,CAAC,CAAC;IAEnF,MAAM,WAAW,GAAG,CAAC,KAA0C,EAAE,OAAe,EAAE,KAAc,EAAE,EAAE;QAClG,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC;QAC9E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC;IAEF,WAAW,CAAC,UAAU,EAAE,uBAAuB,EAAE,IAAI,CAAC,CAAC;IACvD,WAAW,CAAC,WAAW,EAAE,sBAAsB,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IACrE,WAAW,CAAC,QAAQ,EAAE,oBAAoB,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAEhE,KAAK,CAAC,IAAI,CAAC,8BAAsB,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC"}
|
package/dist/hooks/config.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hook 配置归一(G7)
|
|
3
|
-
*
|
|
4
|
-
* studio 侧 per-hook 运行时配置(`blocking: boolean`)与 harness 侧
|
|
5
|
-
* `HookConfig.errorStrategy` 双轨归一:以 errorStrategy 为唯一真相,
|
|
6
|
-
* `blocking` → errorStrategy 为无损映射。
|
|
7
|
-
*
|
|
8
|
-
* 映射语义(确认于 H5):
|
|
9
|
-
* - blocking=true → 'block':hook 失败阻断管线(停止执行后续 hook,
|
|
10
|
-
* 管线结果 passed=false、blockedBy 记名)——对应 studio safeCallHook 抛错
|
|
11
|
-
* - blocking=false → 'warn':hook 失败记录警告并继续执行后续 hook
|
|
12
|
-
* (管线结果 warnings 记名,passed 不受影响)——对应 studio safeCallHook
|
|
13
|
-
* console.warn 继续
|
|
14
|
-
*
|
|
15
|
-
* #159 起 `HookConfig` 是 `enabled` / `errorStrategy` 的唯一声明点:
|
|
16
|
-
* HookDefinition 不再携带这两个字段,注册环节以配置表填充有效值,
|
|
17
|
-
* 有效策略集合收敛为 'block' | 'warn'(原 'ignore' 退出有效面)。
|
|
18
|
-
*
|
|
19
|
-
* studio 侧随动(studio #150 A4):hooks/config.ts 删 DEFAULTS/safeCallHook,
|
|
20
|
-
* blocking→errorStrategy 无损映射进 toHookDef;HARNESS_HOOK_DISABLE 保留 studio。
|
|
21
|
-
*/
|
|
22
|
-
import type { HookErrorStrategy } from './types';
|
|
23
|
-
/**
|
|
24
|
-
* blocking 布尔 → errorStrategy 无损映射(block/warn)
|
|
25
|
-
*
|
|
26
|
-
* @param blocking studio 侧「失败是否阻断」语义
|
|
27
|
-
* @returns 'block'(阻断)| 'warn'(警告继续)
|
|
28
|
-
*/
|
|
29
|
-
export declare function toErrorStrategy(blocking: boolean): HookErrorStrategy;
|
|
30
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/hooks/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,iBAAiB,CAEpE"}
|
package/dist/hooks/config.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Hook 配置归一(G7)
|
|
4
|
-
*
|
|
5
|
-
* studio 侧 per-hook 运行时配置(`blocking: boolean`)与 harness 侧
|
|
6
|
-
* `HookConfig.errorStrategy` 双轨归一:以 errorStrategy 为唯一真相,
|
|
7
|
-
* `blocking` → errorStrategy 为无损映射。
|
|
8
|
-
*
|
|
9
|
-
* 映射语义(确认于 H5):
|
|
10
|
-
* - blocking=true → 'block':hook 失败阻断管线(停止执行后续 hook,
|
|
11
|
-
* 管线结果 passed=false、blockedBy 记名)——对应 studio safeCallHook 抛错
|
|
12
|
-
* - blocking=false → 'warn':hook 失败记录警告并继续执行后续 hook
|
|
13
|
-
* (管线结果 warnings 记名,passed 不受影响)——对应 studio safeCallHook
|
|
14
|
-
* console.warn 继续
|
|
15
|
-
*
|
|
16
|
-
* #159 起 `HookConfig` 是 `enabled` / `errorStrategy` 的唯一声明点:
|
|
17
|
-
* HookDefinition 不再携带这两个字段,注册环节以配置表填充有效值,
|
|
18
|
-
* 有效策略集合收敛为 'block' | 'warn'(原 'ignore' 退出有效面)。
|
|
19
|
-
*
|
|
20
|
-
* studio 侧随动(studio #150 A4):hooks/config.ts 删 DEFAULTS/safeCallHook,
|
|
21
|
-
* blocking→errorStrategy 无损映射进 toHookDef;HARNESS_HOOK_DISABLE 保留 studio。
|
|
22
|
-
*/
|
|
23
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.toErrorStrategy = toErrorStrategy;
|
|
25
|
-
/**
|
|
26
|
-
* blocking 布尔 → errorStrategy 无损映射(block/warn)
|
|
27
|
-
*
|
|
28
|
-
* @param blocking studio 侧「失败是否阻断」语义
|
|
29
|
-
* @returns 'block'(阻断)| 'warn'(警告继续)
|
|
30
|
-
*/
|
|
31
|
-
function toErrorStrategy(blocking) {
|
|
32
|
-
return blocking ? 'block' : 'warn';
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=config.js.map
|
package/dist/hooks/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/hooks/config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;AAUH,0CAEC;AARD;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,QAAiB;IAC/C,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACrC,CAAC"}
|
package/dist/hooks/pipeline.d.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HookPipeline — hook 有序执行、错误隔离、采样
|
|
3
|
-
*
|
|
4
|
-
* 执行顺序:before hooks → consumer operation → after hooks
|
|
5
|
-
* 每个 hook 独立 try/catch,单个 hook 失败不影���其他 hook。
|
|
6
|
-
*/
|
|
7
|
-
import type { HookPhase, HookExecutionRecord, PipelineResult } from './types';
|
|
8
|
-
import type { HookRegistry } from './registry';
|
|
9
|
-
export declare class HookPipeline<C = unknown> {
|
|
10
|
-
private registry;
|
|
11
|
-
constructor(registry: HookRegistry<C, unknown>);
|
|
12
|
-
/**
|
|
13
|
-
* 执行指定 phase 的所有 enabled hook
|
|
14
|
-
*
|
|
15
|
-
* @param phase hook 时机
|
|
16
|
-
* @param context 传递给每个 hook 的上下文
|
|
17
|
-
* @returns 管线执行结果
|
|
18
|
-
*/
|
|
19
|
-
run(phase: HookPhase, context: C): Promise<PipelineResult>;
|
|
20
|
-
/**
|
|
21
|
-
* 按名执行单个 hook(#167)
|
|
22
|
-
*
|
|
23
|
-
* 与 run() 共用 executeOne 的采样与错误隔离路径(判定与错误策略的实现体
|
|
24
|
-
* 只有一份);enabled / errorStrategy 的值来源仍是注册环节填充的
|
|
25
|
-
* EffectiveHook(唯一声明点 HookConfig,#159)。
|
|
26
|
-
*
|
|
27
|
-
* - enabled:false → 实现体零调用,返回 skipped:true / passed:true 记录
|
|
28
|
-
* (镜像 sampled 先例:未执行 = 记录上一面旗,不是异常)
|
|
29
|
-
* - errorStrategy 'block' 且失败 → 抛 Error(message 含 hook 名与原文);
|
|
30
|
-
* 'warn' 且失败 → resolve,返回 passed:false 带 error 的记录
|
|
31
|
-
* - 未知名 → 抛错(与 assertHookRegistryClosed 闭环口径一致,拒绝静默缺失)
|
|
32
|
-
*
|
|
33
|
-
* @param name hook 名称(须已注册)
|
|
34
|
-
* @param context 传递给 hook 的上下文
|
|
35
|
-
* @returns 管线观测记录
|
|
36
|
-
*/
|
|
37
|
-
runOne(name: string, context: C): Promise<HookExecutionRecord>;
|
|
38
|
-
/**
|
|
39
|
-
* 执行 before + after 全套管线
|
|
40
|
-
*
|
|
41
|
-
* @param context 上下文
|
|
42
|
-
* @param operation 业务操作(在 before 和 after 之间执行)
|
|
43
|
-
* @returns 管线结果 + 操作结果
|
|
44
|
-
*/
|
|
45
|
-
runFull<R>(context: C, operation: () => Promise<R>): Promise<{
|
|
46
|
-
pipelineResult: PipelineResult;
|
|
47
|
-
operationResult?: R;
|
|
48
|
-
}>;
|
|
49
|
-
/**
|
|
50
|
-
* 执行单个 hook(带采样和错误隔离)
|
|
51
|
-
*/
|
|
52
|
-
private executeOne;
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/hooks/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAEV,SAAS,EACT,mBAAmB,EACnB,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,qBAAa,YAAY,CAAC,CAAC,GAAG,OAAO;IACnC,OAAO,CAAC,QAAQ,CAA2B;gBAE/B,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC;IAI9C;;;;;;OAMG;IACG,GAAG,CACP,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,cAAc,CAAC;IAyB1B;;;;;;;;;;;;;;;;OAgBG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA8BpE;;;;;;OAMG;IACG,OAAO,CAAC,CAAC,EACb,OAAO,EAAE,CAAC,EACV,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC;QAAE,cAAc,EAAE,cAAc,CAAC;QAAC,eAAe,CAAC,EAAE,CAAC,CAAA;KAAE,CAAC;IAwCnE;;OAEG;YACW,UAAU;CA4CzB"}
|
package/dist/hooks/pipeline.js
DELETED
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* HookPipeline — hook 有序执行、错误隔离、采样
|
|
4
|
-
*
|
|
5
|
-
* 执行顺序:before hooks → consumer operation → after hooks
|
|
6
|
-
* 每个 hook 独立 try/catch,单个 hook 失败不影���其他 hook。
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.HookPipeline = void 0;
|
|
10
|
-
class HookPipeline {
|
|
11
|
-
registry;
|
|
12
|
-
constructor(registry) {
|
|
13
|
-
this.registry = registry;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* 执行指定 phase 的所有 enabled hook
|
|
17
|
-
*
|
|
18
|
-
* @param phase hook 时机
|
|
19
|
-
* @param context 传递给每个 hook 的上下文
|
|
20
|
-
* @returns 管线执行结果
|
|
21
|
-
*/
|
|
22
|
-
async run(phase, context) {
|
|
23
|
-
const hooks = this.registry.getEnabled(phase);
|
|
24
|
-
const records = [];
|
|
25
|
-
const blockedBy = [];
|
|
26
|
-
const warnings = [];
|
|
27
|
-
let passed = true;
|
|
28
|
-
for (const hook of hooks) {
|
|
29
|
-
const record = await this.executeOne(hook, context);
|
|
30
|
-
records.push(record);
|
|
31
|
-
if (!record.passed) {
|
|
32
|
-
if (hook.errorStrategy === 'block') {
|
|
33
|
-
passed = false;
|
|
34
|
-
blockedBy.push(hook.name);
|
|
35
|
-
break; // blocking hook 失败,停止执行后续 hook
|
|
36
|
-
}
|
|
37
|
-
// 'warn':记录警告继续(有效集合仅 block/warn,策略由 HookConfig 必填声明)
|
|
38
|
-
warnings.push(hook.name);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return { passed, records, blockedBy, warnings };
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* 按名执行单个 hook(#167)
|
|
45
|
-
*
|
|
46
|
-
* 与 run() 共用 executeOne 的采样与错误隔离路径(判定与错误策略的实现体
|
|
47
|
-
* 只有一份);enabled / errorStrategy 的值来源仍是注册环节填充的
|
|
48
|
-
* EffectiveHook(唯一声明点 HookConfig,#159)。
|
|
49
|
-
*
|
|
50
|
-
* - enabled:false → 实现体零调用,返回 skipped:true / passed:true 记录
|
|
51
|
-
* (镜像 sampled 先例:未执行 = 记录上一面旗,不是异常)
|
|
52
|
-
* - errorStrategy 'block' 且失败 → 抛 Error(message 含 hook 名与原文);
|
|
53
|
-
* 'warn' 且失败 → resolve,返回 passed:false 带 error 的记录
|
|
54
|
-
* - 未知名 → 抛错(与 assertHookRegistryClosed 闭环口径一致,拒绝静默缺失)
|
|
55
|
-
*
|
|
56
|
-
* @param name hook 名称(须已注册)
|
|
57
|
-
* @param context 传递给 hook 的上下文
|
|
58
|
-
* @returns 管线观测记录
|
|
59
|
-
*/
|
|
60
|
-
async runOne(name, context) {
|
|
61
|
-
const hook = this.registry.get(name);
|
|
62
|
-
if (!hook) {
|
|
63
|
-
throw new Error(`[harness] hook 执行失败:hook "${name}" 未注册。请注册同名 HookDefinition 与 HookConfig 声明。`);
|
|
64
|
-
}
|
|
65
|
-
if (!hook.enabled) {
|
|
66
|
-
const now = Date.now();
|
|
67
|
-
return {
|
|
68
|
-
hookName: hook.name,
|
|
69
|
-
phase: hook.phase,
|
|
70
|
-
startedAt: now,
|
|
71
|
-
completedAt: now,
|
|
72
|
-
durationMs: 0,
|
|
73
|
-
passed: true,
|
|
74
|
-
skipped: true,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
const record = await this.executeOne(hook, context);
|
|
78
|
-
if (!record.passed && hook.errorStrategy === 'block') {
|
|
79
|
-
throw new Error(`[harness] hook "${hook.name}" blocked: ${record.error ?? '未知错误'}`);
|
|
80
|
-
}
|
|
81
|
-
return record;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* 执行 before + after 全套管线
|
|
85
|
-
*
|
|
86
|
-
* @param context 上下文
|
|
87
|
-
* @param operation 业务操作(在 before 和 after 之间执行)
|
|
88
|
-
* @returns 管线结果 + 操作结果
|
|
89
|
-
*/
|
|
90
|
-
async runFull(context, operation) {
|
|
91
|
-
// 1. Before hooks
|
|
92
|
-
const beforeResult = await this.run('before', context);
|
|
93
|
-
if (!beforeResult.passed) {
|
|
94
|
-
return { pipelineResult: beforeResult };
|
|
95
|
-
}
|
|
96
|
-
// 2. Execute operation
|
|
97
|
-
let operationResult;
|
|
98
|
-
try {
|
|
99
|
-
operationResult = await operation();
|
|
100
|
-
}
|
|
101
|
-
catch (err) {
|
|
102
|
-
// 操作失败:仍执行 after hooks,但传递错误信息
|
|
103
|
-
const afterResult = await this.run('after', {
|
|
104
|
-
...context,
|
|
105
|
-
_operationError: err.message,
|
|
106
|
-
});
|
|
107
|
-
return {
|
|
108
|
-
pipelineResult: {
|
|
109
|
-
passed: false,
|
|
110
|
-
records: [...beforeResult.records, ...afterResult.records],
|
|
111
|
-
blockedBy: [...beforeResult.blockedBy, '_operation'],
|
|
112
|
-
warnings: [...beforeResult.warnings, ...afterResult.warnings],
|
|
113
|
-
},
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
// 3. After hooks
|
|
117
|
-
const afterResult = await this.run('after', context);
|
|
118
|
-
return {
|
|
119
|
-
pipelineResult: {
|
|
120
|
-
passed: beforeResult.passed && afterResult.passed,
|
|
121
|
-
records: [...beforeResult.records, ...afterResult.records],
|
|
122
|
-
blockedBy: [...beforeResult.blockedBy, ...afterResult.blockedBy],
|
|
123
|
-
warnings: [...beforeResult.warnings, ...afterResult.warnings],
|
|
124
|
-
},
|
|
125
|
-
operationResult,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* 执行单个 hook(带采样和错误隔离)
|
|
130
|
-
*/
|
|
131
|
-
async executeOne(hook, context) {
|
|
132
|
-
const startedAt = Date.now();
|
|
133
|
-
// 采样检查
|
|
134
|
-
if (hook.sampleRate !== undefined && hook.sampleRate < 1) {
|
|
135
|
-
if (Math.random() > hook.sampleRate) {
|
|
136
|
-
return {
|
|
137
|
-
hookName: hook.name,
|
|
138
|
-
phase: hook.phase,
|
|
139
|
-
startedAt,
|
|
140
|
-
completedAt: Date.now(),
|
|
141
|
-
durationMs: 0,
|
|
142
|
-
passed: true,
|
|
143
|
-
sampled: true,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
try {
|
|
148
|
-
const result = await hook.execute(context);
|
|
149
|
-
return {
|
|
150
|
-
hookName: hook.name,
|
|
151
|
-
phase: hook.phase,
|
|
152
|
-
startedAt,
|
|
153
|
-
completedAt: Date.now(),
|
|
154
|
-
durationMs: Date.now() - startedAt,
|
|
155
|
-
passed: result.passed !== false,
|
|
156
|
-
error: result.error,
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
catch (err) {
|
|
160
|
-
return {
|
|
161
|
-
hookName: hook.name,
|
|
162
|
-
phase: hook.phase,
|
|
163
|
-
startedAt,
|
|
164
|
-
completedAt: Date.now(),
|
|
165
|
-
durationMs: Date.now() - startedAt,
|
|
166
|
-
passed: false,
|
|
167
|
-
error: err.message,
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
exports.HookPipeline = HookPipeline;
|
|
173
|
-
//# sourceMappingURL=pipeline.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/hooks/pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/registry.d.ts
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HookRegistry — hook 注册/注销/查询
|
|
3
|
-
*
|
|
4
|
-
* 纯簿记,无执行逻辑。线程不安全(Node.js 单线程)。
|
|
5
|
-
*/
|
|
6
|
-
import type { EffectiveHook, HookConfig, HookDefinition, HookPhase } from './types';
|
|
7
|
-
/**
|
|
8
|
-
* 注册表闭环双向校验(H5,复制 checker 闭环模式)
|
|
9
|
-
*
|
|
10
|
-
* 声明(HookConfig,consumer 的 per-hook 配置表)↔ 实现(注册的
|
|
11
|
-
* HookDefinition)加载期双向校验,任一不满足即抛错,拒绝静默缺失:
|
|
12
|
-
* - 引用未注册 → 抛错(声明了配置但没有注册实现 = 死配置)
|
|
13
|
-
* - 注册无定义 → 抛错(注册了实现但没有配置声明 = 死代码)
|
|
14
|
-
* - 重复声明 / 重复注册 → 抛错
|
|
15
|
-
*
|
|
16
|
-
* 断言限构建/测试期调用(harness 无内置 hook 定义,加载期闭环由
|
|
17
|
-
* consumer 在其注册点/测试中调用本函数),不进入运行时热路径,
|
|
18
|
-
* 不破坏 --help/--version 懒加载。消灭「hook 定义不注册 = 死代码」
|
|
19
|
-
* 类 prompt 规矩(studio 侧随动)。
|
|
20
|
-
*
|
|
21
|
-
* @throws 任一方向不满足时抛错
|
|
22
|
-
*/
|
|
23
|
-
export declare function assertHookRegistryClosed<C = unknown, R = unknown>(configs: readonly HookConfig[], hooks: readonly HookDefinition<C, R>[]): void;
|
|
24
|
-
export declare class HookRegistry<C = unknown, R = unknown> {
|
|
25
|
-
private hooks;
|
|
26
|
-
/**
|
|
27
|
-
* 注册 hook(同名覆盖)
|
|
28
|
-
*
|
|
29
|
-
* 有效 `enabled` / `errorStrategy` 由 HookConfig 填充——配置表是这两个
|
|
30
|
-
* 语义的唯一声明点(#159),定义与配置名称不一致即抛错。
|
|
31
|
-
*/
|
|
32
|
-
register(hook: HookDefinition<C, R>, config: HookConfig): void;
|
|
33
|
-
/**
|
|
34
|
-
* 批量注册(按 name 配对配置;有实现缺配置声明即抛错)
|
|
35
|
-
*/
|
|
36
|
-
registerAll(hooks: HookDefinition<C, R>[], configs: readonly HookConfig[]): void;
|
|
37
|
-
/**
|
|
38
|
-
* 注销 hook
|
|
39
|
-
*/
|
|
40
|
-
unregister(name: string): boolean;
|
|
41
|
-
/**
|
|
42
|
-
* 获取单个 hook(含有效 enabled / errorStrategy)
|
|
43
|
-
*/
|
|
44
|
-
get(name: string): EffectiveHook<C, R> | undefined;
|
|
45
|
-
/**
|
|
46
|
-
* 获取指定时机、已启用的 hook,按优先级排序
|
|
47
|
-
*/
|
|
48
|
-
getEnabled(phase: HookPhase): EffectiveHook<C, R>[];
|
|
49
|
-
/**
|
|
50
|
-
* 列出所有 hook 名称
|
|
51
|
-
*/
|
|
52
|
-
listNames(): string[];
|
|
53
|
-
/**
|
|
54
|
-
* 列出所有 hook(含禁用)
|
|
55
|
-
*/
|
|
56
|
-
listAll(): EffectiveHook<C, R>[];
|
|
57
|
-
/**
|
|
58
|
-
* 启用/禁用 hook
|
|
59
|
-
*/
|
|
60
|
-
setEnabled(name: string, enabled: boolean): boolean;
|
|
61
|
-
/**
|
|
62
|
-
* 清空所有 hook
|
|
63
|
-
*/
|
|
64
|
-
clear(): void;
|
|
65
|
-
/**
|
|
66
|
-
* Hook 数量
|
|
67
|
-
*/
|
|
68
|
-
get size(): number;
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/hooks/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAC/D,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,KAAK,EAAE,SAAS,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GACrC,IAAI,CAsCN;AAED,qBAAa,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IAChD,OAAO,CAAC,KAAK,CAA+C;IAE5D;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAa9D;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI;IAahF;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS;IAIlD;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAMnD;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,OAAO,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAIhC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IAOnD;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|