@event4u/agent-config 9.33.0 → 9.34.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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +85 -167
- package/dist/agent-src/commands/agent-handoff.md +15 -3
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +35 -1
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +21 -12
- package/dist/agent-src/skills/design-tokens/SKILL.md +15 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +24 -0
- package/dist/agent-src/skills/rule-writing/SKILL.md +23 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +80 -2
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +5 -3
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +24 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/cli-delegate/{chunk-2WELHO3P.js → chunk-I5EAFRII.js} +35 -0
- package/dist/cli-delegate/{chunk-PMQ6Z3T3.js → chunk-REMEZSVP.js} +9 -2
- package/dist/cli-delegate/{chunk-3EWYC3YK.js → chunk-UEZ7D35A.js} +4 -3
- package/dist/cli-delegate/cmd_conformance.js +1 -1
- package/dist/cli-delegate/cmd_doctor.js +1 -1
- package/dist/cli-delegate/cmd_handoff.js +2 -2
- package/dist/cli-delegate/cmd_memory_get.js +1 -1
- package/dist/cli-delegate/cmd_route_audit.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +7 -2
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +11 -11
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +2 -2
- package/dist/discovery/dormancy-report.md +17 -0
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +3 -3
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +3 -3
- package/dist/hooks/dispatch.js +96 -7
- package/dist/mcp/registry-manifest.json +2 -2
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +118 -10
- package/docs/guidelines/agent-infra/failure-signatures.md +47 -12
- package/package.json +2 -2
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +35 -1
- package/src/config/quorum-attendance-budget.json +1 -1
- package/src/scripts/_cli/cmd_session_recycle.ts +6 -1
- package/src/scripts/_lib/env_kill_switch.ts +37 -0
- package/src/scripts/_lib/security_lint.ts +18 -4
- package/src/scripts/_lib/self_repair.ts +60 -0
- package/src/scripts/_lib/self_repair_store.ts +65 -5
- package/src/scripts/_lib/subagent_capsule.ts +78 -1
- package/src/scripts/ai_council/events_log.ts +2 -2
- package/src/scripts/ai_council/orchestrator.ts +38 -0
- package/src/scripts/ai_council/prompts.ts +165 -3
- package/src/scripts/ai_council/quorum.ts +10 -0
- package/src/scripts/ai_team/review_gate.ts +2 -2
- package/src/scripts/build_discovery_manifest.ts +165 -0
- package/src/scripts/check_claims.ts +51 -2
- package/src/scripts/ci_time_ratio.ts +3 -1
- package/src/scripts/discovery_graph.ts +201 -27
- package/src/scripts/dispatch_r2_reviewer.ts +102 -1
- package/src/scripts/lint_handoffs.ts +92 -2
- package/src/scripts/lint_hedge_words.ts +317 -0
- package/src/scripts/lint_mcp_config_security.ts +1 -1
- package/src/scripts/lint_skill_frontmatter_safety.ts +1 -1
- package/src/scripts/self_repair_cli.ts +26 -1
- package/src/scripts/skill_linter.ts +58 -2
|
@@ -106,6 +106,44 @@ const SECTION_ALIASES: Record<string, Set<string>> = {
|
|
|
106
106
|
|
|
107
107
|
const RECOMMENDED_SKILL_SECTIONS: string[] = [];
|
|
108
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Sections `skill-writing` labels required for a NAMED SUBSET of skills, paired
|
|
111
|
+
* with the predicate that decides the subset.
|
|
112
|
+
*
|
|
113
|
+
* The predicate must be decidable from the filesystem, never from prose. That is
|
|
114
|
+
* what keeps the false-positive class empty by construction: a skill either ships
|
|
115
|
+
* a directory or it does not, so there is nothing for a heuristic to get wrong,
|
|
116
|
+
* and the check can ship as `error` on day one instead of as an open-ended
|
|
117
|
+
* advisory (the stage-vs-hedge argument in `check_suppression_hygiene.ts`).
|
|
118
|
+
*
|
|
119
|
+
* `skill-writing` carries two further section patterns — `Rationalizations to
|
|
120
|
+
* reject` and `Non-negotiable deliverable`. Neither is listed here, and neither
|
|
121
|
+
* is labelled required any more. Their populations ("security-stop-routed",
|
|
122
|
+
* "adjacent-technology cluster") are judgement calls that no property of the tree
|
|
123
|
+
* declares, so a predicate for them would be exactly the heuristic this table
|
|
124
|
+
* refuses; compliance stood at 0 of 289 skills while the label said required.
|
|
125
|
+
* Council 2026-08-11 (2/2, anthropic + openai) resolved the mismatch by
|
|
126
|
+
* reclassifying both to `recommended pattern` rather than by adding a declared
|
|
127
|
+
* frontmatter key — an authored opt-in cannot see the skill that should have
|
|
128
|
+
* opted in and did not, so it would buy a gate without buying the guarantee.
|
|
129
|
+
*/
|
|
130
|
+
const CONDITIONAL_SKILL_SECTIONS: { section: string; when: (skillDir: string) => boolean; reason: string }[] = [
|
|
131
|
+
{
|
|
132
|
+
section: 'Security constraints',
|
|
133
|
+
// `isDirectory()`, not `existsSync` — a FILE named `scripts` would satisfy
|
|
134
|
+
// an existence test while shipping no script at all, and the predicate is
|
|
135
|
+
// only false-positive-free because it means what it says.
|
|
136
|
+
when: (skillDir) => {
|
|
137
|
+
try {
|
|
138
|
+
return fs.statSync(path.join(skillDir, 'scripts')).isDirectory();
|
|
139
|
+
} catch {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
reason: 'the skill ships a scripts/ directory',
|
|
144
|
+
},
|
|
145
|
+
];
|
|
146
|
+
|
|
109
147
|
const RULE_BAD_SIGNS = ['## Procedure', '## Output format', '## Gotchas'];
|
|
110
148
|
|
|
111
149
|
const FRUGALITY_WRITER_SKILLS = new Set([
|
|
@@ -1346,7 +1384,7 @@ function lint_execution_metadata(execution: ExecutionBlock): Issue[] {
|
|
|
1346
1384
|
return issues;
|
|
1347
1385
|
}
|
|
1348
1386
|
|
|
1349
|
-
export function lint_skill(p: string, text: string): LintResult {
|
|
1387
|
+
export function lint_skill(p: string, text: string, absPath: string | null = null): LintResult {
|
|
1350
1388
|
const issues: Issue[] = [];
|
|
1351
1389
|
const suggestions: string[] = [];
|
|
1352
1390
|
|
|
@@ -1359,6 +1397,24 @@ export function lint_skill(p: string, text: string): LintResult {
|
|
|
1359
1397
|
}
|
|
1360
1398
|
}
|
|
1361
1399
|
|
|
1400
|
+
// `p` may be a repo-relative DISPLAY path, so it is not resolvable on its own;
|
|
1401
|
+
// `absPath` is the path actually read and `lint_file` always supplies it. A
|
|
1402
|
+
// caller that supplies neither gets no conditional check rather than a check
|
|
1403
|
+
// resolved against whatever the process cwd happens to be — a gate whose
|
|
1404
|
+
// verdict depends on the caller's directory is worse than an absent one.
|
|
1405
|
+
const skillDir = absPath !== null ? path.dirname(absPath) : path.isAbsolute(p) ? path.dirname(p) : null;
|
|
1406
|
+
for (const { section, when, reason } of CONDITIONAL_SKILL_SECTIONS) {
|
|
1407
|
+
if (skillDir !== null && when(skillDir) && !sectionMatches(section, sections)) {
|
|
1408
|
+
issues.push(
|
|
1409
|
+
new Issue(
|
|
1410
|
+
'error',
|
|
1411
|
+
'missing_conditional_section',
|
|
1412
|
+
`Missing required section: ${section} (${reason})`,
|
|
1413
|
+
),
|
|
1414
|
+
);
|
|
1415
|
+
}
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1362
1418
|
for (const section of RECOMMENDED_SKILL_SECTIONS) {
|
|
1363
1419
|
if (!sectionMatches(section, sections)) {
|
|
1364
1420
|
issues.push(
|
|
@@ -3533,7 +3589,7 @@ export function lint_file(p: string, repoRoot: string | null = null): LintResult
|
|
|
3533
3589
|
|
|
3534
3590
|
let result: LintResult;
|
|
3535
3591
|
if (artifactType === 'skill') {
|
|
3536
|
-
result = lint_skill(displayPath, text);
|
|
3592
|
+
result = lint_skill(displayPath, text, p);
|
|
3537
3593
|
} else if (artifactType === 'rule') {
|
|
3538
3594
|
result = lint_rule(displayPath, text);
|
|
3539
3595
|
} else if (artifactType === 'command') {
|