@event4u/agent-config 14.14.0 → 14.14.1
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/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +33 -0
- package/README.md +1 -1
- package/dist/agent-src/commands/pr/create.md +16 -1
- package/dist/agent-src/contexts/execution/terminal-states.md +25 -4
- package/dist/agent-src/rules/missing-skill-recovery.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +2 -2
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/cli/registry.js +1 -0
- package/dist/cli-delegate/{chunk-ILMUPLGW.js → chunk-7RXIKF62.js} +159 -86
- package/dist/cli-delegate/cmd_conformance.js +1 -1
- package/dist/cli-delegate/cmd_doctor.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +5 -5
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/hooks/dispatch.js +528 -371
- package/dist/mcp/registry-manifest.json +2 -2
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +185 -98
- package/package.json +1 -1
- package/src/config/assurance-capability-registry.json +1 -1
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +62 -2
- package/src/config/gate-reachability-exemptions.json +1 -0
- package/src/config/gate-violation-baselines.json +4 -3
- package/src/config/web-launch-readiness.json +4 -2
- package/src/scripts/_cli/_doctor_emit.ts +71 -0
- package/src/scripts/_cli/_doctor_strict.ts +163 -0
- package/src/scripts/_cli/cmd_doctor.ts +16 -37
- package/src/scripts/_dispatch.bash +11 -0
- package/src/scripts/_lib/branch_convergence.ts +186 -0
- package/src/scripts/_lib/context_observation.ts +132 -0
- package/src/scripts/_lib/continuation_ladder.ts +188 -0
- package/src/scripts/_lib/experiment_binding.ts +95 -0
- package/src/scripts/_lib/ignored_blocker.ts +8 -1
- package/src/scripts/_lib/outcome_envelope.ts +6 -1
- package/src/scripts/_lib/outcome_vocabularies.ts +135 -5
- package/src/scripts/_lib/release_highlights.ts +12 -3
- package/src/scripts/_lib/repeated_failure.ts +19 -2
- package/src/scripts/_lib/runtime_journal.ts +11 -4
- package/src/scripts/check_agent_artifact_location.ts +337 -0
- package/src/scripts/check_artefact_count_messaging.ts +74 -8
- package/src/scripts/check_enforcement_coverage.ts +40 -1
- package/src/scripts/check_release_highlights.ts +17 -1
- package/src/scripts/check_web_launch_readiness.ts +310 -20
- package/src/scripts/evolution_lab.ts +53 -1
- package/src/scripts/generate_capability_matrix.ts +16 -9
- package/src/scripts/grade_target_readiness.ts +221 -2
- package/src/scripts/hook_effect_doctor.ts +47 -4
- package/src/scripts/hooks/run_continuation_hook.ts +78 -88
- package/src/scripts/hooks/session_eol_hook.ts +12 -1
- package/src/scripts/install-hooks.sh +18 -0
- package/src/scripts/lint_code_comments.ts +106 -1
- package/src/scripts/release_drill.ts +57 -1
- package/src/scripts/release_publication.ts +58 -0
- package/src/scripts/roadmap_context.ts +15 -0
- package/src/scripts/skill_scout.ts +633 -0
- package/src/scripts/sync_pr_branch.ts +521 -42
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
"artefact_count": 623,
|
|
4
4
|
"scanner_version": "de0a22b4ac4c"
|
|
5
5
|
},
|
|
6
|
-
"generated_at": "2026-09-
|
|
6
|
+
"generated_at": "2026-09-03",
|
|
7
7
|
"package": {
|
|
8
8
|
"description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) \u2014 every claim machine-checked, including the counts in these badges.",
|
|
9
9
|
"homepage": "https://event4u-app.github.io/agent-config",
|
|
10
10
|
"name": "@event4u/agent-config",
|
|
11
11
|
"repository": "https://github.com/event4u-app/agent-config",
|
|
12
|
-
"version": "14.14.
|
|
12
|
+
"version": "14.14.1"
|
|
13
13
|
},
|
|
14
14
|
"registries": [
|
|
15
15
|
{
|
package/dist/mcp/server.json
CHANGED
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
"transport": {
|
|
10
10
|
"type": "stdio"
|
|
11
11
|
},
|
|
12
|
-
"version": "14.14.
|
|
12
|
+
"version": "14.14.1"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
15
|
"repository": {
|
|
16
16
|
"source": "github",
|
|
17
17
|
"url": "https://github.com/event4u-app/agent-config"
|
|
18
18
|
},
|
|
19
|
-
"version": "14.14.
|
|
19
|
+
"version": "14.14.1"
|
|
20
20
|
}
|
package/dist/mcp/server.mjs
CHANGED
|
@@ -33747,6 +33747,115 @@ var init_rule_scope = __esm({
|
|
|
33747
33747
|
}
|
|
33748
33748
|
});
|
|
33749
33749
|
|
|
33750
|
+
// src/scripts/_cli/_doctor_strict.ts
|
|
33751
|
+
function eprint(msg) {
|
|
33752
|
+
process.stderr.write(`${msg}
|
|
33753
|
+
`);
|
|
33754
|
+
}
|
|
33755
|
+
function strictTripping(level) {
|
|
33756
|
+
return level === "warn" ? /* @__PURE__ */ new Set(["fail", "warn"]) : /* @__PURE__ */ new Set(["fail"]);
|
|
33757
|
+
}
|
|
33758
|
+
function canProceed(driftPresent, checks) {
|
|
33759
|
+
return !driftPresent && !checks.some((c) => c["status"] === "fail");
|
|
33760
|
+
}
|
|
33761
|
+
function validateStrictLevel(level) {
|
|
33762
|
+
if (!STRICT_LEVELS.has(level)) {
|
|
33763
|
+
throw new StrictLevelError(
|
|
33764
|
+
`argument --strict-level: invalid choice: '${level}' (choose from 'fail', 'warn')`
|
|
33765
|
+
);
|
|
33766
|
+
}
|
|
33767
|
+
}
|
|
33768
|
+
function strictExit(opts, checks, driftPresent) {
|
|
33769
|
+
if (!opts.strict) {
|
|
33770
|
+
return null;
|
|
33771
|
+
}
|
|
33772
|
+
const tripping = strictTripping(opts.strict_level);
|
|
33773
|
+
const tripped = checks.filter((c) => tripping.has(c["status"]));
|
|
33774
|
+
if (!driftPresent && tripped.length === 0) {
|
|
33775
|
+
return 0;
|
|
33776
|
+
}
|
|
33777
|
+
if (process.env[STRICT_KILL_SWITCH] === "1") {
|
|
33778
|
+
eprint(
|
|
33779
|
+
`\u26A0\uFE0F doctor --strict: ${String(tripped.length)} finding(s) at or above '${opts.strict_level}'` + (driftPresent ? " plus manifest drift" : "") + `, but ${STRICT_KILL_SWITCH}=1 suppressed the failing exit. The findings above still stand; unset it to restore the gate.`
|
|
33780
|
+
);
|
|
33781
|
+
return 0;
|
|
33782
|
+
}
|
|
33783
|
+
return 1;
|
|
33784
|
+
}
|
|
33785
|
+
function attachProceedFields(payload, driftPresent, checks) {
|
|
33786
|
+
const proceed = canProceed(driftPresent, checks);
|
|
33787
|
+
payload["can_proceed"] = proceed;
|
|
33788
|
+
payload["status"] = proceed ? checks.some((c) => c["status"] === "warn") ? "warn" : "ok" : "fail";
|
|
33789
|
+
}
|
|
33790
|
+
function validateStrictLevelOr(level, onError) {
|
|
33791
|
+
try {
|
|
33792
|
+
validateStrictLevel(level);
|
|
33793
|
+
} catch (e) {
|
|
33794
|
+
if (e instanceof StrictLevelError) onError(e.message);
|
|
33795
|
+
throw e;
|
|
33796
|
+
}
|
|
33797
|
+
}
|
|
33798
|
+
var StrictLevelError, STRICT_DEFAULT_LEVEL, STRICT_LEVELS, STRICT_KILL_SWITCH, STRICT_STORE_TRUE, STRICT_VALUE_FLAGS, STRICT_DEFAULTS, STRICT_USAGE;
|
|
33799
|
+
var init_doctor_strict = __esm({
|
|
33800
|
+
"src/scripts/_cli/_doctor_strict.ts"() {
|
|
33801
|
+
"use strict";
|
|
33802
|
+
StrictLevelError = class extends Error {
|
|
33803
|
+
};
|
|
33804
|
+
STRICT_DEFAULT_LEVEL = "fail";
|
|
33805
|
+
STRICT_LEVELS = /* @__PURE__ */ new Set(["fail", "warn"]);
|
|
33806
|
+
STRICT_KILL_SWITCH = "AGENT_CONFIG_DOCTOR_NO_FAIL";
|
|
33807
|
+
STRICT_STORE_TRUE = { "--strict": "strict" };
|
|
33808
|
+
STRICT_VALUE_FLAGS = { "--strict-level": "strict_level" };
|
|
33809
|
+
STRICT_DEFAULTS = { strict: false, strict_level: STRICT_DEFAULT_LEVEL };
|
|
33810
|
+
STRICT_USAGE = " [--strict] [--strict-level {fail,warn}]\n";
|
|
33811
|
+
}
|
|
33812
|
+
});
|
|
33813
|
+
|
|
33814
|
+
// src/scripts/_cli/_doctor_emit.ts
|
|
33815
|
+
function print(line = "") {
|
|
33816
|
+
process.stdout.write(`${line}
|
|
33817
|
+
`);
|
|
33818
|
+
}
|
|
33819
|
+
function _emit_text(project_root, missing, modified, foreign, tag_drift) {
|
|
33820
|
+
const total = missing.length + modified.length + foreign.length + tag_drift.length;
|
|
33821
|
+
if (total === 0) {
|
|
33822
|
+
print(`\u2705 doctor: manifest matches filesystem under ${project_root}`);
|
|
33823
|
+
return;
|
|
33824
|
+
}
|
|
33825
|
+
print(`\u26A0\uFE0F doctor: ${total} drift item(s) under ${project_root}`);
|
|
33826
|
+
const groups = [
|
|
33827
|
+
["missing", missing],
|
|
33828
|
+
["modified", modified],
|
|
33829
|
+
["foreign", foreign],
|
|
33830
|
+
["tag-drift", tag_drift]
|
|
33831
|
+
];
|
|
33832
|
+
for (const [label, items] of groups) {
|
|
33833
|
+
if (items.length === 0) {
|
|
33834
|
+
continue;
|
|
33835
|
+
}
|
|
33836
|
+
print(`
|
|
33837
|
+
${label} (${items.length}):`);
|
|
33838
|
+
for (const it of items) {
|
|
33839
|
+
const tool = it["tool"] || "?";
|
|
33840
|
+
print(` \xB7 [${tool}] ${it["path"]}`);
|
|
33841
|
+
if (label === "tag-drift") {
|
|
33842
|
+
const found = it["found"] || "(missing)";
|
|
33843
|
+
const expected = "expected" in it ? it["expected"] : PACKAGE_TAG_ID;
|
|
33844
|
+
print(` expected: ${expected}`);
|
|
33845
|
+
print(` found: ${found}`);
|
|
33846
|
+
}
|
|
33847
|
+
print(` fix: ${it["fix"]}`);
|
|
33848
|
+
}
|
|
33849
|
+
}
|
|
33850
|
+
}
|
|
33851
|
+
var PACKAGE_TAG_ID;
|
|
33852
|
+
var init_doctor_emit = __esm({
|
|
33853
|
+
"src/scripts/_cli/_doctor_emit.ts"() {
|
|
33854
|
+
"use strict";
|
|
33855
|
+
PACKAGE_TAG_ID = "event4u/agent-config";
|
|
33856
|
+
}
|
|
33857
|
+
});
|
|
33858
|
+
|
|
33750
33859
|
// src/scripts/_cli/cmd_doctor.ts
|
|
33751
33860
|
var cmd_doctor_exports = {};
|
|
33752
33861
|
__export(cmd_doctor_exports, {
|
|
@@ -33758,7 +33867,7 @@ __export(cmd_doctor_exports, {
|
|
|
33758
33867
|
MCP_BETA_GATES: () => MCP_BETA_GATES,
|
|
33759
33868
|
MIN_PYTHON: () => MIN_PYTHON,
|
|
33760
33869
|
NO_FRONTMATTER: () => NO_FRONTMATTER,
|
|
33761
|
-
PACKAGE_TAG_ID: () =>
|
|
33870
|
+
PACKAGE_TAG_ID: () => PACKAGE_TAG_ID2,
|
|
33762
33871
|
REPAIR_IDS: () => REPAIR_IDS,
|
|
33763
33872
|
STATUS_SYMBOLS: () => STATUS_SYMBOLS,
|
|
33764
33873
|
_check_bridge_drift: () => _check_bridge_drift,
|
|
@@ -33956,10 +34065,10 @@ function yamlSafeLoad2(text) {
|
|
|
33956
34065
|
return void 0;
|
|
33957
34066
|
}
|
|
33958
34067
|
}
|
|
33959
|
-
function
|
|
34068
|
+
function print2(line = "") {
|
|
33960
34069
|
process16.stdout.write(line + "\n");
|
|
33961
34070
|
}
|
|
33962
|
-
function
|
|
34071
|
+
function eprint2(line = "") {
|
|
33963
34072
|
process16.stderr.write(line + "\n");
|
|
33964
34073
|
}
|
|
33965
34074
|
function _resolve_project_root(arg) {
|
|
@@ -34011,22 +34120,22 @@ function _detect_wrapper(project_root) {
|
|
|
34011
34120
|
};
|
|
34012
34121
|
}
|
|
34013
34122
|
function _emit_trace_text(root, anchor, trace, origin) {
|
|
34014
|
-
|
|
34015
|
-
|
|
34123
|
+
print2(` \u{1F4CD} start: ${process16.cwd()}`);
|
|
34124
|
+
print2(` \u{1F4CD} origin: ${origin}`);
|
|
34016
34125
|
if (trace.length > 0) {
|
|
34017
|
-
|
|
34126
|
+
print2(" trace:");
|
|
34018
34127
|
for (const record of trace) {
|
|
34019
34128
|
const hit = record.hit;
|
|
34020
34129
|
const symbol = hit ? "\u2705" : "\xB7";
|
|
34021
34130
|
const tag = `[${record.pass}]`;
|
|
34022
34131
|
const anchor_str = hit ? ` \u2192 ${hit}` : "";
|
|
34023
|
-
|
|
34132
|
+
print2(` ${symbol} ${tag} ${record.ancestor}${anchor_str} (${record.reason})`);
|
|
34024
34133
|
}
|
|
34025
34134
|
}
|
|
34026
34135
|
if (root !== null) {
|
|
34027
|
-
|
|
34136
|
+
print2(` \u{1F4CD} resolved root: ${root} (anchor: ${anchor || "n/a"})`);
|
|
34028
34137
|
} else {
|
|
34029
|
-
|
|
34138
|
+
print2(" \u26A0\uFE0F no anchor found in chain");
|
|
34030
34139
|
}
|
|
34031
34140
|
}
|
|
34032
34141
|
function _emit_trace_json(root, anchor, trace, origin) {
|
|
@@ -34037,32 +34146,32 @@ function _emit_trace_json(root, anchor, trace, origin) {
|
|
|
34037
34146
|
anchor,
|
|
34038
34147
|
trace
|
|
34039
34148
|
};
|
|
34040
|
-
|
|
34149
|
+
print2(_jsonDumpsIndentAscii(payload, 2));
|
|
34041
34150
|
}
|
|
34042
34151
|
function _emit_context_text(ctx) {
|
|
34043
|
-
|
|
34044
|
-
|
|
34152
|
+
print2(` \u{1F4CD} project_root: ${ctx["project_root"]} (origin: ${ctx["origin"]})`);
|
|
34153
|
+
print2(` \u{1F4E6} install_mode: ${ctx["install_mode"]} (source: ${ctx["install_mode_source"]})`);
|
|
34045
34154
|
const env_pin = ctx["env_pin"];
|
|
34046
34155
|
if (env_pin) {
|
|
34047
34156
|
const marker = ctx["root_override"] ? " (--root override)" : "";
|
|
34048
|
-
|
|
34157
|
+
print2(` \u{1F512} env_pin: ${env_pin}${marker}`);
|
|
34049
34158
|
} else {
|
|
34050
|
-
|
|
34159
|
+
print2(" \u{1F512} env_pin: (unset)");
|
|
34051
34160
|
}
|
|
34052
34161
|
const layers = ctx["settings_layers"] || [];
|
|
34053
34162
|
if (layers.length > 0) {
|
|
34054
|
-
|
|
34163
|
+
print2(` \u{1F4D1} settings layers (${layers.length}):`);
|
|
34055
34164
|
for (const layer of layers) {
|
|
34056
|
-
|
|
34165
|
+
print2(` - ${layer}`);
|
|
34057
34166
|
}
|
|
34058
34167
|
} else {
|
|
34059
|
-
|
|
34168
|
+
print2(" \u{1F4D1} settings layers: (none)");
|
|
34060
34169
|
}
|
|
34061
34170
|
const wrapper = ctx["wrapper"] || {};
|
|
34062
34171
|
if (wrapper["exists"]) {
|
|
34063
|
-
|
|
34172
|
+
print2(` \u{1F9E9} wrapper: ${wrapper["path"]} (embedded root: ${wrapper["embedded_root"]})`);
|
|
34064
34173
|
} else {
|
|
34065
|
-
|
|
34174
|
+
print2(` \u{1F9E9} wrapper: (not present at ${wrapper["path"]})`);
|
|
34066
34175
|
}
|
|
34067
34176
|
}
|
|
34068
34177
|
function _resolve_path(project_root, raw) {
|
|
@@ -34245,12 +34354,12 @@ function _classify2(records) {
|
|
|
34245
34354
|
continue;
|
|
34246
34355
|
}
|
|
34247
34356
|
const tag = _read_inline_package_tag(target);
|
|
34248
|
-
if (!(tag instanceof _Sentinel) && tag !==
|
|
34357
|
+
if (!(tag instanceof _Sentinel) && tag !== PACKAGE_TAG_ID2) {
|
|
34249
34358
|
tag_drift.push({
|
|
34250
34359
|
tool: tool_id,
|
|
34251
34360
|
path: String(target),
|
|
34252
34361
|
kind,
|
|
34253
|
-
expected:
|
|
34362
|
+
expected: PACKAGE_TAG_ID2,
|
|
34254
34363
|
found: tag === null ? "" : tag,
|
|
34255
34364
|
fix: _fix_hint("tag-drift", kind)
|
|
34256
34365
|
});
|
|
@@ -34857,7 +34966,7 @@ function _check_stale_orphans() {
|
|
|
34857
34966
|
continue;
|
|
34858
34967
|
}
|
|
34859
34968
|
const tag = _read_inline_package_tag(md);
|
|
34860
|
-
if (tag instanceof _Sentinel || tag !==
|
|
34969
|
+
if (tag instanceof _Sentinel || tag !== PACKAGE_TAG_ID2) {
|
|
34861
34970
|
continue;
|
|
34862
34971
|
}
|
|
34863
34972
|
orphan_count += 1;
|
|
@@ -35885,17 +35994,17 @@ function _run_no_manifest(opts, project_root, origin, bridge_present) {
|
|
|
35885
35994
|
if (opts.json) {
|
|
35886
35995
|
_emit_json(project_root, [], [], [], [], checks, origin);
|
|
35887
35996
|
} else if (opts.check === null) {
|
|
35888
|
-
|
|
35997
|
+
print2(` \u{1F4CD} project_root: ${project_root} (origin: ${origin})`);
|
|
35889
35998
|
if (bridge_present) {
|
|
35890
|
-
|
|
35999
|
+
print2(
|
|
35891
36000
|
" \u2139\uFE0F global-only consumer: install marker present, no project lockfile (expected under ADR-020)"
|
|
35892
36001
|
);
|
|
35893
|
-
|
|
36002
|
+
print2(
|
|
35894
36003
|
" project-manifest checks are skipped \u2014 they apply only to project-local distributed tools"
|
|
35895
36004
|
);
|
|
35896
36005
|
} else {
|
|
35897
|
-
|
|
35898
|
-
|
|
36006
|
+
eprint2(` \u26A0\uFE0F no project lockfile and no consumer install marker at ${project_root}`);
|
|
36007
|
+
eprint2(
|
|
35899
36008
|
" run `agent-config init` (project install) or `agent-config refresh --project` (global-only consumer)"
|
|
35900
36009
|
);
|
|
35901
36010
|
}
|
|
@@ -35911,6 +36020,8 @@ function _run_no_manifest(opts, project_root, origin, bridge_present) {
|
|
|
35911
36020
|
}
|
|
35912
36021
|
return fail_check ? 1 : 0;
|
|
35913
36022
|
}
|
|
36023
|
+
const sx = strictExit(opts, checks, false);
|
|
36024
|
+
if (sx !== null) return bridge_present ? sx : 2;
|
|
35914
36025
|
if (opts.ci && bridge_present) {
|
|
35915
36026
|
return fail_check ? 1 : 0;
|
|
35916
36027
|
}
|
|
@@ -35929,66 +36040,36 @@ function _emit_json(project_root, missing, modified, foreign, tag_drift, checks
|
|
|
35929
36040
|
}
|
|
35930
36041
|
if (checks !== null) {
|
|
35931
36042
|
payload["checks"] = checks;
|
|
36043
|
+
const drift = missing.length + modified.length + foreign.length + tag_drift.length;
|
|
36044
|
+
attachProceedFields(payload, drift > 0, checks);
|
|
35932
36045
|
if (checks.some((c) => c["id"] === "detection")) {
|
|
35933
36046
|
payload["detection"] = detectionJson(_detection_report(project_root));
|
|
35934
36047
|
}
|
|
35935
36048
|
}
|
|
35936
|
-
|
|
36049
|
+
print2(_jsonDumpsIndentAscii(payload, 2));
|
|
35937
36050
|
}
|
|
35938
36051
|
function _emit_checks_text(checks) {
|
|
35939
36052
|
if (checks.length === 0) {
|
|
35940
36053
|
return;
|
|
35941
36054
|
}
|
|
35942
|
-
|
|
36055
|
+
print2("checks:");
|
|
35943
36056
|
for (const c of checks) {
|
|
35944
36057
|
const sym = STATUS_SYMBOLS[c["status"]] ?? "?";
|
|
35945
|
-
|
|
36058
|
+
print2(` ${sym} ${c["id"]}: ${c["message"]}`);
|
|
35946
36059
|
if (c["status"] !== "ok" && c["remedy"]) {
|
|
35947
|
-
|
|
36060
|
+
print2(` fix: ${c["remedy"]}`);
|
|
35948
36061
|
}
|
|
35949
36062
|
}
|
|
35950
|
-
|
|
36063
|
+
print2("");
|
|
35951
36064
|
}
|
|
35952
36065
|
function _emit_detection_text(project_root, checks) {
|
|
35953
36066
|
if (!checks.some((c) => c["id"] === "detection")) {
|
|
35954
36067
|
return;
|
|
35955
36068
|
}
|
|
35956
36069
|
for (const line of renderDetectionLines(_detection_report(project_root))) {
|
|
35957
|
-
|
|
35958
|
-
}
|
|
35959
|
-
print("");
|
|
35960
|
-
}
|
|
35961
|
-
function _emit_text(project_root, missing, modified, foreign, tag_drift) {
|
|
35962
|
-
const total = missing.length + modified.length + foreign.length + tag_drift.length;
|
|
35963
|
-
if (total === 0) {
|
|
35964
|
-
print(`\u2705 doctor: manifest matches filesystem under ${project_root}`);
|
|
35965
|
-
return;
|
|
35966
|
-
}
|
|
35967
|
-
print(`\u26A0\uFE0F doctor: ${total} drift item(s) under ${project_root}`);
|
|
35968
|
-
const groups = [
|
|
35969
|
-
["missing", missing],
|
|
35970
|
-
["modified", modified],
|
|
35971
|
-
["foreign", foreign],
|
|
35972
|
-
["tag-drift", tag_drift]
|
|
35973
|
-
];
|
|
35974
|
-
for (const [label, items] of groups) {
|
|
35975
|
-
if (items.length === 0) {
|
|
35976
|
-
continue;
|
|
35977
|
-
}
|
|
35978
|
-
print(`
|
|
35979
|
-
${label} (${items.length}):`);
|
|
35980
|
-
for (const it of items) {
|
|
35981
|
-
const tool = it["tool"] || "?";
|
|
35982
|
-
print(` \xB7 [${tool}] ${it["path"]}`);
|
|
35983
|
-
if (label === "tag-drift") {
|
|
35984
|
-
const found = it["found"] || "(missing)";
|
|
35985
|
-
const expected = "expected" in it ? it["expected"] : PACKAGE_TAG_ID;
|
|
35986
|
-
print(` expected: ${expected}`);
|
|
35987
|
-
print(` found: ${found}`);
|
|
35988
|
-
}
|
|
35989
|
-
print(` fix: ${it["fix"]}`);
|
|
35990
|
-
}
|
|
36070
|
+
print2(line);
|
|
35991
36071
|
}
|
|
36072
|
+
print2("");
|
|
35992
36073
|
}
|
|
35993
36074
|
function _argError9(msg) {
|
|
35994
36075
|
process16.stderr.write(USAGE2);
|
|
@@ -36001,6 +36082,7 @@ function _parse3(argv) {
|
|
|
36001
36082
|
project: null,
|
|
36002
36083
|
json: false,
|
|
36003
36084
|
ci: false,
|
|
36085
|
+
...STRICT_DEFAULTS,
|
|
36004
36086
|
check: null,
|
|
36005
36087
|
trace_root: false,
|
|
36006
36088
|
context: false,
|
|
@@ -36098,7 +36180,7 @@ function _run_context(opts) {
|
|
|
36098
36180
|
[project_root, origin] = _resolve_project_root(opts.project);
|
|
36099
36181
|
} catch (exc) {
|
|
36100
36182
|
if (exc instanceof ProjectRootError) {
|
|
36101
|
-
|
|
36183
|
+
eprint2(`\u274C doctor: ${exc.message}`);
|
|
36102
36184
|
return 2;
|
|
36103
36185
|
}
|
|
36104
36186
|
throw exc;
|
|
@@ -36115,7 +36197,7 @@ function _run_context(opts) {
|
|
|
36115
36197
|
wrapper: _detect_wrapper(project_root)
|
|
36116
36198
|
};
|
|
36117
36199
|
if (opts.json) {
|
|
36118
|
-
|
|
36200
|
+
print2(_jsonDumpsIndentAscii(ctx, 2));
|
|
36119
36201
|
} else {
|
|
36120
36202
|
_emit_context_text(ctx);
|
|
36121
36203
|
}
|
|
@@ -36137,7 +36219,7 @@ function _run_anatomy(opts) {
|
|
|
36137
36219
|
economyError = err instanceof Error ? err.message : String(err);
|
|
36138
36220
|
}
|
|
36139
36221
|
if (opts.json) {
|
|
36140
|
-
|
|
36222
|
+
print2(
|
|
36141
36223
|
_jsonDumpsIndentAscii(
|
|
36142
36224
|
{
|
|
36143
36225
|
preamble_byte_census: byteCensus,
|
|
@@ -36149,10 +36231,10 @@ function _run_anatomy(opts) {
|
|
|
36149
36231
|
);
|
|
36150
36232
|
return 0;
|
|
36151
36233
|
}
|
|
36152
|
-
|
|
36153
|
-
|
|
36154
|
-
|
|
36155
|
-
|
|
36234
|
+
print2("\u2500\u2500 injection anatomy \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500");
|
|
36235
|
+
print2(census.renderText(byteCensus));
|
|
36236
|
+
print2("");
|
|
36237
|
+
print2(
|
|
36156
36238
|
economyReport !== null ? economy.renderText(economyReport) : `dispatch-economy report unavailable: ${economyError}`
|
|
36157
36239
|
);
|
|
36158
36240
|
return 0;
|
|
@@ -36174,29 +36256,30 @@ function _run_repair(opts) {
|
|
|
36174
36256
|
payload["action"] = "error";
|
|
36175
36257
|
payload["error"] = osErrorStr2(exc);
|
|
36176
36258
|
if (opts.json) {
|
|
36177
|
-
|
|
36259
|
+
print2(_jsonDumpsIndentAscii(payload, 2));
|
|
36178
36260
|
} else {
|
|
36179
|
-
|
|
36261
|
+
eprint2(`\u274C doctor: could not remove ${state_pth}: ${osErrorStr2(exc)}`);
|
|
36180
36262
|
}
|
|
36181
36263
|
return 2;
|
|
36182
36264
|
}
|
|
36183
36265
|
}
|
|
36184
36266
|
if (opts.json) {
|
|
36185
|
-
|
|
36267
|
+
print2(_jsonDumpsIndentAscii(payload, 2));
|
|
36186
36268
|
} else {
|
|
36187
36269
|
if (payload["action"] === "remove") {
|
|
36188
|
-
|
|
36270
|
+
print2(`\u2705 doctor: reset wizard-state (${state_pth})`);
|
|
36189
36271
|
} else {
|
|
36190
|
-
|
|
36272
|
+
print2(`\u2705 doctor: nothing to repair (no wizard-state at ${state_pth})`);
|
|
36191
36273
|
}
|
|
36192
36274
|
}
|
|
36193
36275
|
return 0;
|
|
36194
36276
|
}
|
|
36195
|
-
|
|
36277
|
+
eprint2(`\u274C doctor: unknown repair target ${pyRepr2(target)}`);
|
|
36196
36278
|
return 2;
|
|
36197
36279
|
}
|
|
36198
36280
|
function main21(argv = null) {
|
|
36199
36281
|
const opts = _parse3(argv !== null ? Array.from(argv) : process16.argv.slice(2));
|
|
36282
|
+
validateStrictLevelOr(opts.strict_level, _argError9);
|
|
36200
36283
|
if (opts.ci) {
|
|
36201
36284
|
opts.json = true;
|
|
36202
36285
|
}
|
|
@@ -36218,7 +36301,7 @@ function main21(argv = null) {
|
|
|
36218
36301
|
[project_root, origin] = _resolve_project_root(opts.project);
|
|
36219
36302
|
} catch (exc) {
|
|
36220
36303
|
if (exc instanceof ProjectRootError) {
|
|
36221
|
-
|
|
36304
|
+
eprint2(`\u274C doctor: ${exc.message}`);
|
|
36222
36305
|
return 2;
|
|
36223
36306
|
}
|
|
36224
36307
|
throw exc;
|
|
@@ -36244,7 +36327,7 @@ function main21(argv = null) {
|
|
|
36244
36327
|
_emit_json(project_root, missing, modified, foreign, tag_drift, checks, origin);
|
|
36245
36328
|
} else {
|
|
36246
36329
|
if (opts.check === null) {
|
|
36247
|
-
|
|
36330
|
+
print2(` \u{1F4CD} project_root: ${project_root} (origin: ${origin})`);
|
|
36248
36331
|
}
|
|
36249
36332
|
_emit_checks_text(checks);
|
|
36250
36333
|
_emit_detection_text(project_root, checks);
|
|
@@ -36261,6 +36344,8 @@ function main21(argv = null) {
|
|
|
36261
36344
|
if (opts.ci) {
|
|
36262
36345
|
return drift_present || fail_check ? 1 : 0;
|
|
36263
36346
|
}
|
|
36347
|
+
const strict = strictExit(opts, checks, drift_present);
|
|
36348
|
+
if (strict !== null) return strict;
|
|
36264
36349
|
return drift_present ? 1 : 0;
|
|
36265
36350
|
}
|
|
36266
36351
|
function _isCliEntry17() {
|
|
@@ -36289,7 +36374,7 @@ function _isCliEntry17() {
|
|
|
36289
36374
|
return false;
|
|
36290
36375
|
}
|
|
36291
36376
|
}
|
|
36292
|
-
var YAML6, _HERE18, ArgparseExit4, _Sentinel, NO_FRONTMATTER, _INSTALL_MODE_MARKER_REL,
|
|
36377
|
+
var YAML6, _HERE18, ArgparseExit4, _Sentinel, NO_FRONTMATTER, _INSTALL_MODE_MARKER_REL, PACKAGE_TAG_ID2, _FRONTMATTER_PACKAGE_RE, CHECK_IDS, GLOBAL_CHECK_IDS, MANIFEST_REQUIRED_CHECK_IDS, REPAIR_IDS, MCP_BETA_GATES, STATUS_SYMBOLS, MIN_PYTHON, _PLACEHOLDER_EMAIL_RE, _PLACEHOLDER_NAME_RE, _RULE_PROJECTION_DIRS, _check_python_runtime, _check_humanizer_runtime, _CLI_PROVIDER_META, _detection_memo, PROG4, USAGE2, _STORE_TRUE_FLAGS, _VALUE_FLAGS;
|
|
36293
36378
|
var init_cmd_doctor = __esm({
|
|
36294
36379
|
"src/scripts/_cli/cmd_doctor.ts"() {
|
|
36295
36380
|
"use strict";
|
|
@@ -36320,6 +36405,8 @@ var init_cmd_doctor = __esm({
|
|
|
36320
36405
|
init_review_gate();
|
|
36321
36406
|
init_package_root();
|
|
36322
36407
|
init_rule_scope();
|
|
36408
|
+
init_doctor_strict();
|
|
36409
|
+
init_doctor_emit();
|
|
36323
36410
|
_HERE18 = fileURLToPath31(import.meta.url);
|
|
36324
36411
|
ArgparseExit4 = class extends Error {
|
|
36325
36412
|
constructor(code) {
|
|
@@ -36332,7 +36419,7 @@ var init_cmd_doctor = __esm({
|
|
|
36332
36419
|
};
|
|
36333
36420
|
NO_FRONTMATTER = new _Sentinel();
|
|
36334
36421
|
_INSTALL_MODE_MARKER_REL = "agents/.agent-state/install-mode.txt";
|
|
36335
|
-
|
|
36422
|
+
PACKAGE_TAG_ID2 = "event4u/agent-config";
|
|
36336
36423
|
_FRONTMATTER_PACKAGE_RE = /^package:\s*(.+?)\s*$/m;
|
|
36337
36424
|
CHECK_IDS = [
|
|
36338
36425
|
"scope",
|
|
@@ -36427,17 +36514,17 @@ var init_cmd_doctor = __esm({
|
|
|
36427
36514
|
_detection_memo = null;
|
|
36428
36515
|
PROG4 = "agent-config doctor";
|
|
36429
36516
|
USAGE2 = `usage: ${PROG4} [-h] [--project PROJECT] [--json] [--ci] [--check ID]
|
|
36430
|
-
[--trace-root] [--context] [--anatomy]
|
|
36431
|
-
[--repair ID]
|
|
36432
|
-
`;
|
|
36517
|
+
` + STRICT_USAGE + " [--trace-root] [--context] [--anatomy]\n [--repair ID]\n";
|
|
36433
36518
|
_STORE_TRUE_FLAGS = {
|
|
36434
36519
|
"--json": "json",
|
|
36435
36520
|
"--ci": "ci",
|
|
36521
|
+
...STRICT_STORE_TRUE,
|
|
36436
36522
|
"--trace-root": "trace_root",
|
|
36437
36523
|
"--context": "context",
|
|
36438
36524
|
"--anatomy": "anatomy"
|
|
36439
36525
|
};
|
|
36440
36526
|
_VALUE_FLAGS = {
|
|
36527
|
+
...STRICT_VALUE_FLAGS,
|
|
36441
36528
|
"--project": "project",
|
|
36442
36529
|
"--check": "check",
|
|
36443
36530
|
"--repair": "repair"
|
|
@@ -42161,11 +42248,11 @@ import * as path80 from "node:path";
|
|
|
42161
42248
|
import process21 from "node:process";
|
|
42162
42249
|
import { spawnSync as spawnSync12 } from "node:child_process";
|
|
42163
42250
|
import { fileURLToPath as fileURLToPath46, pathToFileURL as pathToFileURL36 } from "node:url";
|
|
42164
|
-
function
|
|
42251
|
+
function print3(s = "") {
|
|
42165
42252
|
process21.stdout.write(`${s}
|
|
42166
42253
|
`);
|
|
42167
42254
|
}
|
|
42168
|
-
function
|
|
42255
|
+
function eprint3(s = "") {
|
|
42169
42256
|
process21.stderr.write(`${s}
|
|
42170
42257
|
`);
|
|
42171
42258
|
}
|
|
@@ -42549,14 +42636,14 @@ function _parse4(argv) {
|
|
|
42549
42636
|
function main36(argv = null) {
|
|
42550
42637
|
const opts = _parse4(argv !== null ? Array.from(argv) : process21.argv.slice(2));
|
|
42551
42638
|
if (opts.funnel) {
|
|
42552
|
-
|
|
42639
|
+
print3(render6(buildFunnel()));
|
|
42553
42640
|
return 0;
|
|
42554
42641
|
}
|
|
42555
42642
|
let project_root;
|
|
42556
42643
|
try {
|
|
42557
42644
|
[project_root] = _resolve_project_root(opts.project);
|
|
42558
42645
|
} catch (exc) {
|
|
42559
|
-
|
|
42646
|
+
eprint3(`\u274C conformance: ${exc.message}`);
|
|
42560
42647
|
return 2;
|
|
42561
42648
|
}
|
|
42562
42649
|
const manifest_pth = manifest_path(project_root);
|
|
@@ -42585,7 +42672,7 @@ function main36(argv = null) {
|
|
|
42585
42672
|
const failed = allChecks.some((c) => c["status"] === "fail") || driftCount > 0;
|
|
42586
42673
|
appendConformanceReport(conformanceChecks, project_root);
|
|
42587
42674
|
if (opts.json) {
|
|
42588
|
-
|
|
42675
|
+
print3(
|
|
42589
42676
|
_jsonDumpsIndentAscii(
|
|
42590
42677
|
{
|
|
42591
42678
|
project_root,
|
|
@@ -42598,20 +42685,20 @@ function main36(argv = null) {
|
|
|
42598
42685
|
)
|
|
42599
42686
|
);
|
|
42600
42687
|
} else {
|
|
42601
|
-
|
|
42602
|
-
|
|
42688
|
+
print3(` \u{1F4CD} project_root: ${project_root}`);
|
|
42689
|
+
print3("conformance:");
|
|
42603
42690
|
for (const c of allChecks) {
|
|
42604
42691
|
const sym = STATUS_SYMBOLS[c["status"]] ?? "?";
|
|
42605
|
-
|
|
42692
|
+
print3(` ${sym} ${c["id"]}: ${c["message"]}`);
|
|
42606
42693
|
if (c["status"] !== "ok" && c["remedy"]) {
|
|
42607
|
-
|
|
42694
|
+
print3(` fix: ${c["remedy"]}`);
|
|
42608
42695
|
}
|
|
42609
42696
|
}
|
|
42610
42697
|
if (driftCount > 0) {
|
|
42611
|
-
|
|
42698
|
+
print3(` \u274C drift: ${driftCount} drifted file(s) \u2014 run \`agent-config doctor\` for detail`);
|
|
42612
42699
|
}
|
|
42613
|
-
|
|
42614
|
-
|
|
42700
|
+
print3("");
|
|
42701
|
+
print3(
|
|
42615
42702
|
failed ? "\u274C conformance: red \u2014 the OS is not fully installed/firing here" : "\u2705 conformance: green \u2014 installed and firing"
|
|
42616
42703
|
);
|
|
42617
42704
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@event4u/agent-config",
|
|
3
3
|
"mcpName": "io.github.event4u-app/agent-config",
|
|
4
|
-
"version": "14.14.
|
|
4
|
+
"version": "14.14.1",
|
|
5
5
|
"description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) — every claim machine-checked, including the counts in these badges.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"private": false,
|