@event4u/agent-config 14.5.0 → 14.7.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 +384 -3
- package/README.md +1 -1
- package/dist/agent-src/commands/analyze/decision.md +7 -0
- package/dist/agent-src/commands/analyze/inbox.md +264 -10
- package/dist/agent-src/commands/analyze.md +1 -1
- package/dist/agent-src/commands/optimize/project.md +10 -0
- package/dist/agent-src/commands/roadmap/process-full.md +132 -4
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +31 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +161 -1
- package/dist/agent-src/rules/context-hygiene.md +2 -0
- package/dist/agent-src/rules/decision-revisit-gate.md +111 -7
- package/dist/agent-src/rules/fix-what-you-see.md +108 -0
- package/dist/agent-src/rules/no-roadmap-references.md +0 -5
- package/dist/agent-src/rules/recurring-criticism.md +110 -0
- package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
- package/dist/agent-src/rules/rule-type-governance.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +17 -0
- package/dist/agent-src/rules/skill-quality.md +0 -2
- package/dist/agent-src/rules/source-confidentiality.md +37 -7
- package/dist/agent-src/scripts/archival_sweep.ts +117 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +19 -3
- package/dist/agent-src/scripts/gate_budget.ts +282 -0
- package/dist/agent-src/scripts/gate_execute.ts +72 -31
- package/dist/agent-src/scripts/roadmap_gates.ts +74 -3
- package/dist/agent-src/scripts/update_roadmap_progress.ts +251 -7
- package/dist/agent-src/skills/adr-create/SKILL.md +25 -3
- package/dist/agent-src/skills/ai-council/SKILL.md +48 -807
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +320 -0
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +99 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +162 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +125 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +143 -0
- package/dist/agent-src/skills/decision-review/SKILL.md +18 -0
- package/dist/agent-src/skills/quality-tools/SKILL.md +34 -326
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +113 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +222 -0
- package/dist/agent-src/skills/roadmap-management/SKILL.md +15 -409
- package/dist/agent-src/skills/roadmap-management/references/archival.md +226 -0
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +107 -0
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +47 -0
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +58 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +34 -570
- package/dist/agent-src/skills/skill-writing/references/procedure.md +275 -0
- package/dist/agent-src/skills/skill-writing/references/read-only-scripts.md +18 -0
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +298 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +45 -2
- package/dist/agent-src/templates/scripts/telemetry/flush_sender.mjs +163 -0
- package/dist/agent-src/templates/scripts/telemetry/remote.ts +160 -7
- package/dist/agent-src/templates/scripts/telemetry/transport.ts +169 -0
- package/dist/cli/registry.js +1 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/chunk-2GNWGMAL.js +172 -0
- package/dist/cli-delegate/{chunk-RLN73PR5.js → chunk-4VR4ORQ6.js} +10 -7
- package/dist/cli-delegate/chunk-6EOCNQAM.js +402 -0
- package/dist/cli-delegate/{chunk-XURJ4AQC.js → chunk-74E3TKWV.js} +381 -280
- package/dist/cli-delegate/{chunk-3UCJWMMP.js → chunk-7F3VYSM2.js} +4 -4
- package/dist/cli-delegate/{chunk-BKO2AZ7Z.js → chunk-B2ERU2VA.js} +1 -1
- package/dist/cli-delegate/{chunk-NXFWFAYV.js → chunk-G23AT6GD.js} +1 -0
- package/dist/cli-delegate/{chunk-63WSP6YZ.js → chunk-GJ5BVHXM.js} +72 -165
- package/dist/cli-delegate/{chunk-ZPSXJTLI.js → chunk-JZ4NR2TW.js} +353 -1
- package/dist/cli-delegate/chunk-MWRD5YOH.js +100 -0
- package/dist/cli-delegate/{chunk-GRRPEPRN.js → chunk-T7L2QK3K.js} +24 -5
- package/dist/cli-delegate/{chunk-EVTY7ISR.js → chunk-YM4GZDJG.js} +9 -1
- package/dist/cli-delegate/cmd_conformance.js +459 -709
- package/dist/cli-delegate/cmd_doctor.js +6 -6
- package/dist/cli-delegate/cmd_explain.js +1 -1
- package/dist/cli-delegate/cmd_export.js +7 -6
- package/dist/cli-delegate/cmd_handoff.js +6 -6
- package/dist/cli-delegate/cmd_packs_active.js +1 -1
- package/dist/cli-delegate/cmd_preflight.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +7 -6
- package/dist/cli-delegate/cmd_session_recycle.js +840 -30
- package/dist/cli-delegate/cmd_settings_migrate.js +7 -6
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +7 -6
- package/dist/cli-delegate/cmd_uninstall.js +9 -7
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +7 -6
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +72 -29
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +10 -8
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +8 -6
- package/dist/hooks/dispatch.js +3127 -2022
- package/dist/install/claudePathsPlan.js +187 -0
- package/dist/install/claudePathsPlan.js.map +1 -0
- package/dist/install/hostLayerFingerprint.js +136 -0
- package/dist/install/hostLayerFingerprint.js.map +1 -0
- package/dist/install/install.mjs +553 -425
- package/dist/install/partitionEligibility.js +276 -0
- package/dist/install/partitionEligibility.js.map +1 -0
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1744 -1191
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_src.js +41 -0
- package/dist/scripts/_lib/agent_src.js.map +1 -1
- package/dist/scripts/_lib/install_layout.js +83 -0
- package/dist/scripts/_lib/install_layout.js.map +1 -0
- package/dist/scripts/_lib/installed_lock.js +444 -0
- package/dist/scripts/_lib/installed_lock.js.map +1 -0
- package/dist/scripts/condense.js +13 -164
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/schemas/settings.js +4 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/contracts/settings-classes.md +12 -6
- package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +8 -3
- package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +26 -0
- package/docs/guidelines/agent-infra/engineering-memory-data-format.md +49 -0
- package/docs/guidelines/agent-infra/memory-access.md +17 -0
- package/docs/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
- package/package.json +1 -1
- package/src/agent-src/scripts/archival_sweep.ts +117 -0
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +19 -3
- package/src/agent-src/scripts/gate_budget.ts +282 -0
- package/src/agent-src/scripts/gate_execute.ts +72 -31
- package/src/agent-src/scripts/roadmap_gates.ts +74 -3
- package/src/agent-src/scripts/update_roadmap_progress.ts +251 -7
- package/src/agent-src/templates/scripts/telemetry/flush_sender.mjs +163 -0
- package/src/agent-src/templates/scripts/telemetry/remote.ts +160 -7
- package/src/agent-src/templates/scripts/telemetry/transport.ts +169 -0
- package/src/config/agent-settings.template.yml +27 -2
- package/src/config/ci-local-parity.yml +18 -0
- package/src/config/estate-count-budget.json +367 -3
- package/src/config/gate-violation-baselines.json +41 -41
- package/src/config/pack-size-budget.json +3 -2
- package/src/config/rule-activation-census.json +14 -6
- package/src/config/rule-stub-ceilings.json +19 -6
- package/src/install/claudePathsPlan.ts +196 -0
- package/src/install/hostLayerFingerprint.ts +145 -0
- package/src/install/partitionEligibility.ts +325 -0
- package/src/scripts/_cli/cmd_session_recycle.ts +9 -1
- package/src/scripts/_dispatch.bash +6 -1
- package/src/scripts/_lib/ac_heading.ts +30 -0
- package/src/scripts/_lib/agent_src.ts +42 -0
- package/src/scripts/_lib/bench_ab_pinned_repo.ts +162 -0
- package/src/scripts/_lib/bench_ab_workspace.ts +10 -1
- package/src/scripts/_lib/envelope_grounding.ts +38 -8
- package/src/scripts/_lib/installed_lock.ts +50 -5
- package/src/scripts/_lib/layer_overlap_notice.ts +85 -0
- package/src/scripts/_lib/md_section.ts +129 -0
- package/src/scripts/_lib/scope_guard.sh +86 -4
- package/src/scripts/_lib/self_repair.ts +19 -0
- package/src/scripts/_lib/self_repair_class_b.ts +171 -0
- package/src/scripts/_lib/subagent_capsule.ts +81 -1
- package/src/scripts/adr/regenerate_index.ts +13 -2
- package/src/scripts/adr_cite_check.ts +424 -0
- package/src/scripts/ai_council/cli_help.ts +55 -0
- package/src/scripts/before_complete_hook.ts +153 -28
- package/src/scripts/bench_ab_v2_complexity.ts +27 -7
- package/src/scripts/check_adr_frontmatter.ts +187 -1
- package/src/scripts/check_references.ts +60 -0
- package/src/scripts/check_release_published.ts +32 -11
- package/src/scripts/check_single_delivery.ts +517 -0
- package/src/scripts/ci_settle.ts +170 -0
- package/src/scripts/condense.ts +20 -170
- package/src/scripts/council_cli.ts +3 -3
- package/src/scripts/dispatch_r2_reviewer.ts +6 -14
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +77 -14
- package/src/scripts/hooks/block_no_verify.ts +61 -10
- package/src/scripts/hooks/block_unauthorized_git.ts +1 -1
- package/src/scripts/hooks/concern_registry.ts +4 -0
- package/src/scripts/hooks/rtk_wrap_hook.ts +8 -3
- package/src/scripts/hooks/run_continuation_hook.ts +887 -68
- package/src/scripts/hooks/ship_diff_volume_hook.ts +81 -15
- package/src/scripts/hooks/source_first_gate_hook.ts +464 -0
- package/src/scripts/hooks/state_io.ts +782 -20
- package/src/scripts/hooks/subagent_ledger_hook.ts +44 -15
- package/src/scripts/hooks/telemetry_flush_hook.ts +139 -0
- package/src/scripts/hooks/telemetry_self_repair.ts +128 -0
- package/src/scripts/hooks/telemetry_usage_hook.ts +22 -4
- package/src/scripts/hooks/turn_end_gate_hook.ts +81 -15
- package/src/scripts/install.sh +12 -2
- package/src/scripts/install.ts +16 -11
- package/src/scripts/language_mirror_hook.ts +561 -25
- package/src/scripts/lint_framework_leakage_allowlist.json +2 -2
- package/src/scripts/lint_plan_risk_register.ts +4 -3
- package/src/scripts/lint_skill_router_head.ts +4 -4
- package/src/scripts/mcp_server/tools.ts +2 -2
- package/src/scripts/memory_consolidation.ts +189 -0
- package/src/scripts/memory_eviction.ts +384 -0
- package/src/scripts/new_roadmap.ts +136 -0
- package/src/scripts/pack_mcp_content.ts +20 -5
- package/src/scripts/release.ts +37 -38
- package/src/scripts/report_layer_overlap.ts +78 -0
- package/src/scripts/report_memory_pointers.ts +622 -0
- package/src/scripts/self_repair_hook.ts +37 -5
- package/src/scripts/session_register_hook.ts +115 -15
- package/src/scripts/skill_usage_collect.ts +11 -1
- package/src/scripts/skill_usage_report.ts +278 -8
- package/src/scripts/sync_pr_branch.ts +7 -0
- package/src/server/schemas/settings.ts +8 -0
- package/dist/cli-delegate/chunk-EJITJBJX.js +0 -172
- package/dist/cli-delegate/chunk-PZWRPRWP.js +0 -38
- /package/dist/cli-delegate/{chunk-RYNADUFG.js → chunk-LWTYTX6F.js} +0 -0
package/dist/scripts/condense.js
CHANGED
|
@@ -227,7 +227,11 @@ function _stripChars(s, chars) {
|
|
|
227
227
|
// module-level CLI self-invoke into its bundle. Re-exported here because four
|
|
228
228
|
// in-repo consumers import it from `condense.js`.
|
|
229
229
|
export { rule_in_scope } from '../install/ruleInScope.js';
|
|
230
|
+
// Re-exported for in-repo consumers; definitions moved beside emit_host_rules_cli.ts (Phase 5).
|
|
231
|
+
export { CLAUDE_PATHS_PATTERN_BUDGET, _claude_paths_plan, _escape_claude_bracket, _expanded_pattern_count, _has_non_path_trigger, _is_unresolved_placeholder, derive_trigger_globs, } from '../install/claudePathsPlan.js';
|
|
230
232
|
import { rule_in_scope } from '../install/ruleInScope.js';
|
|
233
|
+
import { isExclusivelyPackageOnly, partitionActive, setPartitionAnnounce } from '../install/partitionEligibility.js'; // ADR-236
|
|
234
|
+
import { _claude_paths_plan, derive_trigger_globs } from '../install/claudePathsPlan.js';
|
|
231
235
|
const _HERE = path.dirname(fileURLToPath(import.meta.url)); // <repo>/src/scripts
|
|
232
236
|
const _DEFAULT_PROJECT_ROOT = path.resolve(_HERE, '..', '..');
|
|
233
237
|
function _deriveState(root) {
|
|
@@ -256,6 +260,7 @@ function _deriveState(root) {
|
|
|
256
260
|
};
|
|
257
261
|
}
|
|
258
262
|
export const MODULE_STATE = _deriveState(_DEFAULT_PROJECT_ROOT);
|
|
263
|
+
setPartitionAnnounce(success); // ADR-236: the mode line must be visible at the default level
|
|
259
264
|
/**
|
|
260
265
|
* Test seam — reassign one or more module-state fields, mirroring the pytest
|
|
261
266
|
* monkeypatch of `condense.<NAME> = ...`. When `PROJECT_ROOT` is overridden,
|
|
@@ -1004,6 +1009,7 @@ function _scoped_rule_basenames() {
|
|
|
1004
1009
|
// is its fourth consumer, after the router compiler, the dist writer, and
|
|
1005
1010
|
// check_sync. Same predicate in all four; that is the point.
|
|
1006
1011
|
.filter((p) => !skip_compile_disabled_rule(`rules/${path.basename(p)}`))
|
|
1012
|
+
.filter((p) => !partitionActive(MODULE_STATE.PROJECT_ROOT) || isExclusivelyPackageOnly(p))
|
|
1007
1013
|
.map((p) => path.basename(p))
|
|
1008
1014
|
.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
1009
1015
|
}
|
|
@@ -1188,34 +1194,6 @@ export function _parse_frontmatter(content) {
|
|
|
1188
1194
|
function _yaml_scalar(value) {
|
|
1189
1195
|
return JSON.stringify(value);
|
|
1190
1196
|
}
|
|
1191
|
-
/**
|
|
1192
|
-
* Derive host-native activation globs from a rule's `triggers:` frontmatter
|
|
1193
|
-
* (road-to-request-scoped-rule-load Phase 2). `file_pattern` triggers map
|
|
1194
|
-
* verbatim; `path_prefix` triggers map to `<prefix>**`. Keyword / phrase /
|
|
1195
|
-
* command triggers produce no glob — those rules stay
|
|
1196
|
-
* description-activated (Cursor Agent-Requested / Windsurf model_decision).
|
|
1197
|
-
*/
|
|
1198
|
-
export function derive_trigger_globs(meta) {
|
|
1199
|
-
const triggers = meta['triggers'];
|
|
1200
|
-
if (!Array.isArray(triggers)) {
|
|
1201
|
-
return [];
|
|
1202
|
-
}
|
|
1203
|
-
const globs = [];
|
|
1204
|
-
for (const t of triggers) {
|
|
1205
|
-
if (t === null || typeof t !== 'object' || Array.isArray(t))
|
|
1206
|
-
continue;
|
|
1207
|
-
const obj = t;
|
|
1208
|
-
if (typeof obj['file_pattern'] === 'string' && obj['file_pattern']) {
|
|
1209
|
-
globs.push(obj['file_pattern']);
|
|
1210
|
-
}
|
|
1211
|
-
else if (typeof obj['path_prefix'] === 'string' && obj['path_prefix']) {
|
|
1212
|
-
const prefix = obj['path_prefix'];
|
|
1213
|
-
globs.push(prefix.endsWith('/') ? `${prefix}**` : `${prefix}**`);
|
|
1214
|
-
}
|
|
1215
|
-
}
|
|
1216
|
-
// De-dup, keep declaration order (deterministic output).
|
|
1217
|
-
return [...new Set(globs)];
|
|
1218
|
-
}
|
|
1219
1197
|
export function _emit_cursor_mdc(source, target) {
|
|
1220
1198
|
const [meta, body] = _parse_frontmatter(_readText(source));
|
|
1221
1199
|
const description = _strip(String(meta['description'] ?? '').replace(/\n/g, ' '));
|
|
@@ -1255,141 +1233,6 @@ export function _emit_windsurf_rule(source, target) {
|
|
|
1255
1233
|
_mkdirp(path.dirname(target));
|
|
1256
1234
|
_writeText(target, lines.join('\n'));
|
|
1257
1235
|
}
|
|
1258
|
-
/**
|
|
1259
|
-
* A brace group the host expands, versus an agent-config placeholder that only
|
|
1260
|
-
* LOOKS like one.
|
|
1261
|
-
*
|
|
1262
|
-
* `path_prefix: "{module_root}/"` in `roadmap-ci-steps-policy` is resolved by
|
|
1263
|
-
* this suite from `modules.root_paths`. Emitted verbatim into a host `paths:`
|
|
1264
|
-
* list it is a brace group with no comma, which the host expands to the literal
|
|
1265
|
-
* string `{module_root}` — a pattern that matches no file. The rule would then
|
|
1266
|
-
* reach the model **never** instead of on-demand, and nothing would say so: the
|
|
1267
|
-
* probed contract records this exact degradation as silent
|
|
1268
|
-
* (`claude-code-rules-dir-contract.md` § constraints).
|
|
1269
|
-
*
|
|
1270
|
-
* Dropping the pattern is fail-safe in the one direction that matters. A rule
|
|
1271
|
-
* left with no pattern at all carries no `paths:` key and loads
|
|
1272
|
-
* unconditionally — the status quo, not a regression. A rule carrying a
|
|
1273
|
-
* no-op pattern is invisible.
|
|
1274
|
-
*
|
|
1275
|
-
* The discriminator is the comma, not a placeholder allowlist: `{ts,tsx}` is a
|
|
1276
|
-
* real alternation, `{module_root}` cannot be one.
|
|
1277
|
-
*/
|
|
1278
|
-
export function _is_unresolved_placeholder(pattern) {
|
|
1279
|
-
for (const m of pattern.matchAll(/\{([^}]*)\}/g)) {
|
|
1280
|
-
if (!m[1].includes(',')) {
|
|
1281
|
-
return true;
|
|
1282
|
-
}
|
|
1283
|
-
}
|
|
1284
|
-
return false;
|
|
1285
|
-
}
|
|
1286
|
-
/**
|
|
1287
|
-
* `[` opens a bracket expression for the host. An unparseable one makes that
|
|
1288
|
-
* pattern match nothing while the rule's other patterns keep working — so a
|
|
1289
|
-
* literal `[` in a trigger is escaped rather than trusted.
|
|
1290
|
-
*/
|
|
1291
|
-
export function _escape_claude_bracket(pattern) {
|
|
1292
|
-
return pattern.replace(/\[/g, '\\[');
|
|
1293
|
-
}
|
|
1294
|
-
/**
|
|
1295
|
-
* Expanded-pattern cost of one glob: the product of its brace alternations.
|
|
1296
|
-
* The host budgets a rule's whole `paths:` list at 1,000 expanded patterns and
|
|
1297
|
-
* 4 MiB, and a list over budget is used UNEXPANDED — braces then match
|
|
1298
|
-
* literally, i.e. nothing. Counting keeps the emitter under the cliff instead
|
|
1299
|
-
* of discovering it as a silent no-op.
|
|
1300
|
-
*/
|
|
1301
|
-
export function _expanded_pattern_count(pattern) {
|
|
1302
|
-
let n = 1;
|
|
1303
|
-
for (const m of pattern.matchAll(/\{([^}]*)\}/g)) {
|
|
1304
|
-
n *= m[1].split(',').length;
|
|
1305
|
-
}
|
|
1306
|
-
return n;
|
|
1307
|
-
}
|
|
1308
|
-
/** Host-documented budget for one rule's whole `paths:` list. */
|
|
1309
|
-
export const CLAUDE_PATHS_PATTERN_BUDGET = 1000;
|
|
1310
|
-
/**
|
|
1311
|
-
* Does this rule declare any trigger that is NOT path-shaped?
|
|
1312
|
-
*
|
|
1313
|
-
* Load-bearing for `_claude_paths_plan` below, because one `triggers:` list
|
|
1314
|
-
* means two different things on two hosts. Cursor and Windsurf treat globs as
|
|
1315
|
-
* ADDITIVE — a rule with empty globs still reaches the agent through its
|
|
1316
|
-
* description (see `_emit_cursor_mdc`'s own comment). Claude Code treats
|
|
1317
|
-
* `paths:` as EXCLUSIVE: with it the rule loads on a path match; without it the
|
|
1318
|
-
* rule loads unconditionally. The emitter fed both semantics from one list, so
|
|
1319
|
-
* a rule that declared keywords *and* one path glob silently became
|
|
1320
|
-
* path-gated-only on Claude.
|
|
1321
|
-
*/
|
|
1322
|
-
export function _has_non_path_trigger(meta) {
|
|
1323
|
-
const triggers = meta['triggers'];
|
|
1324
|
-
if (!Array.isArray(triggers))
|
|
1325
|
-
return false;
|
|
1326
|
-
for (const t of triggers) {
|
|
1327
|
-
if (t === null || typeof t !== 'object' || Array.isArray(t))
|
|
1328
|
-
continue;
|
|
1329
|
-
const obj = t;
|
|
1330
|
-
if (typeof obj['keyword'] === 'string' && obj['keyword'])
|
|
1331
|
-
return true;
|
|
1332
|
-
if (typeof obj['phrase'] === 'string' && obj['phrase'])
|
|
1333
|
-
return true;
|
|
1334
|
-
}
|
|
1335
|
-
return false;
|
|
1336
|
-
}
|
|
1337
|
-
/**
|
|
1338
|
-
* Derive the host's `paths:` list for one rule, with every drop recorded.
|
|
1339
|
-
*
|
|
1340
|
-
* Kernel / always-apply rules get an EMPTY list on purpose: absent `paths:` is
|
|
1341
|
-
* how this host says "load unconditionally", which is exactly what an Iron-Law
|
|
1342
|
-
* rule needs. Scoping one would be a correctness regression dressed as a byte
|
|
1343
|
-
* saving — and the same contract notes path-scoped rules are not re-injected
|
|
1344
|
-
* after `/compact`, so an obligation that must survive compaction cannot be
|
|
1345
|
-
* path-scoped at all.
|
|
1346
|
-
*/
|
|
1347
|
-
export function _claude_paths_plan(meta) {
|
|
1348
|
-
const always_apply = Boolean(meta['alwaysApply'] || meta['type'] === 'always');
|
|
1349
|
-
if (always_apply) {
|
|
1350
|
-
return { globs: [], dropped: [] };
|
|
1351
|
-
}
|
|
1352
|
-
const globs = [];
|
|
1353
|
-
const dropped = [];
|
|
1354
|
-
// A rule that ALSO declares keyword / phrase triggers gets no `paths:` at
|
|
1355
|
-
// all, and therefore keeps loading unconditionally on Claude Code.
|
|
1356
|
-
//
|
|
1357
|
-
// Emitting `paths:` here would narrow the rule to a path match and discard
|
|
1358
|
-
// every keyword the author wrote, because this host reads the list as the
|
|
1359
|
-
// whole gate rather than as one way in. Measured before this guard: 25 of
|
|
1360
|
-
// 110 projected rules carried `paths:` and 19 of them also carried keyword
|
|
1361
|
-
// triggers — `design-fidelity` lost 21 of them, in exactly the pasted-
|
|
1362
|
-
// screenshot and capability-URL handovers its own routing section names as
|
|
1363
|
-
// the classes it exists to catch. Nothing in the tree recorded a decision
|
|
1364
|
-
// to make that trade, which is why it is treated as a defect.
|
|
1365
|
-
//
|
|
1366
|
-
// The drop is REPORTED rather than silent, so a rule whose obligation
|
|
1367
|
-
// really is path-bound is visible as a candidate for removing its keyword
|
|
1368
|
-
// triggers — the narrowing then becomes an authoring decision instead of an
|
|
1369
|
-
// emitter side effect. Cursor and Windsurf are untouched: globs are
|
|
1370
|
-
// additive there, so the same rule keeps both routes.
|
|
1371
|
-
if (_has_non_path_trigger(meta)) {
|
|
1372
|
-
for (const raw of derive_trigger_globs(meta)) {
|
|
1373
|
-
dropped.push({ pattern: raw, reason: 'mixed-triggers' });
|
|
1374
|
-
}
|
|
1375
|
-
return { globs, dropped };
|
|
1376
|
-
}
|
|
1377
|
-
let spent = 0;
|
|
1378
|
-
for (const raw of derive_trigger_globs(meta)) {
|
|
1379
|
-
if (_is_unresolved_placeholder(raw)) {
|
|
1380
|
-
dropped.push({ pattern: raw, reason: 'unresolved-placeholder' });
|
|
1381
|
-
continue;
|
|
1382
|
-
}
|
|
1383
|
-
const cost = _expanded_pattern_count(raw);
|
|
1384
|
-
if (spent + cost > CLAUDE_PATHS_PATTERN_BUDGET) {
|
|
1385
|
-
dropped.push({ pattern: raw, reason: 'over-budget' });
|
|
1386
|
-
continue;
|
|
1387
|
-
}
|
|
1388
|
-
spent += cost;
|
|
1389
|
-
globs.push(_escape_claude_bracket(raw));
|
|
1390
|
-
}
|
|
1391
|
-
return { globs, dropped };
|
|
1392
|
-
}
|
|
1393
1236
|
/**
|
|
1394
1237
|
* Emit a Claude Code rule carrying the host's OWN activation key.
|
|
1395
1238
|
*
|
|
@@ -1652,6 +1495,8 @@ function _render_native_model_md(src_md, tier) {
|
|
|
1652
1495
|
return text.replace(_MODEL_TIER_RE, `model: ${model}`);
|
|
1653
1496
|
}
|
|
1654
1497
|
export function generate_claude_skills(active_skill_names = null) {
|
|
1498
|
+
if (partitionActive(MODULE_STATE.PROJECT_ROOT))
|
|
1499
|
+
active_skill_names = new Set();
|
|
1655
1500
|
if (!_exists(MODULE_STATE.SKILLS_SOURCE)) {
|
|
1656
1501
|
process.stderr.write(' ⚠️ dist/agent-src/skills/ not found — skipping skills\n');
|
|
1657
1502
|
return 0;
|
|
@@ -1664,7 +1509,9 @@ export function generate_claude_skills(active_skill_names = null) {
|
|
|
1664
1509
|
skills = skills.filter((s) => active_skill_names.has(s));
|
|
1665
1510
|
}
|
|
1666
1511
|
const skill_set = new Set(skills);
|
|
1667
|
-
const command_slugs =
|
|
1512
|
+
const command_slugs = partitionActive(MODULE_STATE.PROJECT_ROOT)
|
|
1513
|
+
? new Set()
|
|
1514
|
+
: new Set([...iterCommands()].map(([, slug]) => slug));
|
|
1668
1515
|
_mkdirp(MODULE_STATE.CLAUDE_SKILLS_DIR);
|
|
1669
1516
|
const auto = _read_model_auto_switch() === 'auto';
|
|
1670
1517
|
for (const item of _iterdirSorted(MODULE_STATE.CLAUDE_SKILLS_DIR)) {
|
|
@@ -1812,6 +1659,8 @@ export function generate_claude_project_commands(active_command_slugs = null) {
|
|
|
1812
1659
|
return count;
|
|
1813
1660
|
}
|
|
1814
1661
|
export function generate_claude_commands(active_command_slugs = null) {
|
|
1662
|
+
if (partitionActive(MODULE_STATE.PROJECT_ROOT))
|
|
1663
|
+
active_command_slugs = new Set();
|
|
1815
1664
|
if (!_isDir(path.join(MODULE_STATE.PROJECT_ROOT, 'src', 'domains'))) {
|
|
1816
1665
|
process.stderr.write(' ⚠️ src/domains/ not found — skipping commands\n');
|
|
1817
1666
|
return 0;
|