@event4u/agent-config 14.6.0 → 14.8.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 +255 -145
- package/README.md +1 -1
- package/dist/agent-src/commands/analyze/inbox.md +264 -10
- package/dist/agent-src/commands/analyze.md +1 -1
- package/dist/agent-src/commands/evals/git-pr-merge.json +13 -0
- package/dist/agent-src/commands/evals/roadmap.json +17 -1
- package/dist/agent-src/commands/pr/create.md +14 -2
- package/dist/agent-src/commands/pr/merge.md +379 -0
- package/dist/agent-src/commands/roadmap/process-full.md +272 -32
- package/dist/agent-src/commands/roadmap.md +1 -1
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +46 -36
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +37 -2
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +95 -2
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +289 -106
- package/dist/agent-src/rules/artifact-drafting-protocol.md +5 -1
- package/dist/agent-src/rules/context-hygiene.md +2 -0
- package/dist/agent-src/rules/decision-revisit-gate.md +67 -32
- 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 +20 -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 +26 -7
- package/dist/agent-src/scripts/dashboard_mode.ts +212 -0
- 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 +296 -53
- package/dist/agent-src/skills/adr-create/SKILL.md +124 -5
- 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-record/SKILL.md +61 -3
- package/dist/agent-src/skills/decision-review/SKILL.md +65 -0
- package/dist/agent-src/skills/merge-conflicts/SKILL.md +26 -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/security/SKILL.md +8 -0
- package/dist/agent-src/skills/security-audit/SKILL.md +12 -1
- 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 +65 -4
- 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 +2 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/chunk-2GNWGMAL.js +172 -0
- package/dist/cli-delegate/{chunk-P6LQDIWK.js → chunk-7PRE6ZV2.js} +338 -0
- package/dist/cli-delegate/{chunk-BKO2AZ7Z.js → chunk-B2ERU2VA.js} +1 -1
- package/dist/cli-delegate/chunk-E4XIZDIB.js +402 -0
- package/dist/cli-delegate/{chunk-3UCJWMMP.js → chunk-EEJUMCDZ.js} +16 -16
- package/dist/cli-delegate/{chunk-NXFWFAYV.js → chunk-G23AT6GD.js} +1 -0
- package/dist/cli-delegate/{chunk-XURJ4AQC.js → chunk-H4VIVD4C.js} +385 -284
- package/dist/cli-delegate/chunk-I3EIN2YG.js +36 -0
- package/dist/cli-delegate/{chunk-RLN73PR5.js → chunk-LPPWO5CE.js} +12 -8
- package/dist/cli-delegate/chunk-MWRD5YOH.js +100 -0
- package/dist/cli-delegate/{chunk-UEZ7D35A.js → chunk-N7CDDGI3.js} +4 -23
- package/dist/cli-delegate/{chunk-63WSP6YZ.js → chunk-PMEKGDED.js} +74 -167
- 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_adr_effective.js +1162 -0
- package/dist/cli-delegate/cmd_conformance.js +466 -716
- package/dist/cli-delegate/cmd_converge.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +10 -10
- package/dist/cli-delegate/cmd_explain.js +1 -1
- package/dist/cli-delegate/cmd_export.js +10 -9
- package/dist/cli-delegate/cmd_handoff.js +10 -9
- package/dist/cli-delegate/cmd_memory_get.js +2 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +1 -1
- package/dist/cli-delegate/cmd_preflight.js +5 -5
- package/dist/cli-delegate/cmd_prune.js +11 -10
- package/dist/cli-delegate/cmd_route_audit.js +6 -5
- package/dist/cli-delegate/cmd_route_explain.js +3 -3
- package/dist/cli-delegate/cmd_session_recycle.js +840 -30
- package/dist/cli-delegate/cmd_settings_get.js +3 -3
- package/dist/cli-delegate/cmd_settings_migrate.js +10 -9
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +11 -10
- package/dist/cli-delegate/cmd_uninstall.js +13 -11
- package/dist/cli-delegate/cmd_update.js +4 -4
- package/dist/cli-delegate/cmd_upgrade.js +4 -4
- package/dist/cli-delegate/cmd_validate.js +11 -10
- package/dist/cli-delegate/cmd_versions.js +3 -3
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +111 -37
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +15 -12
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +11 -8
- package/dist/hooks/dispatch.js +3165 -2192
- package/dist/install/claudePathsPlan.js +187 -0
- package/dist/install/claudePathsPlan.js.map +1 -0
- package/dist/install/globalRuleLayers.js +169 -0
- package/dist/install/globalRuleLayers.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 +432 -0
- package/dist/install/partitionEligibility.js.map +1 -0
- package/dist/install/ruleLayerPartition.js +157 -0
- package/dist/install/ruleLayerPartition.js.map +1 -0
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1863 -1234
- 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/_lib/prune_empty_dirs.js +85 -0
- package/dist/scripts/_lib/prune_empty_dirs.js.map +1 -0
- package/dist/scripts/condense.js +63 -251
- 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/artifact-drafting-protocol-mechanics.md +45 -1
- package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +26 -0
- package/docs/guidelines/agent-infra/false-green.md +47 -1
- 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 +26 -7
- package/src/agent-src/scripts/dashboard_mode.ts +212 -0
- 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 +296 -53
- 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 +39 -0
- package/src/config/estate-count-budget.json +612 -3
- package/src/config/evaluator-budgets.json +3 -3
- package/src/config/gate-coverage.yml +220 -12
- package/src/config/gate-violation-baselines.json +73 -63
- package/src/config/gitignore-block.txt +15 -2
- package/src/config/hook-latency-budget.json +5 -0
- package/src/config/rule-activation-census.json +14 -6
- package/src/config/rule-stub-ceilings.json +34 -7
- package/src/install/claudePathsPlan.ts +196 -0
- package/src/install/globalRuleLayers.ts +197 -0
- package/src/install/hostLayerFingerprint.ts +145 -0
- package/src/install/partitionEligibility.ts +502 -0
- package/src/install/ruleLayerPartition.ts +212 -0
- package/src/scripts/_cli/cmd_adr_effective.ts +484 -0
- package/src/scripts/_cli/cmd_session_recycle.ts +9 -1
- package/src/scripts/_dispatch.bash +17 -1
- package/src/scripts/_lib/ac_heading.ts +30 -0
- package/src/scripts/_lib/adr_frontmatter.test.ts +365 -0
- package/src/scripts/_lib/adr_frontmatter.ts +459 -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 +49 -9
- package/src/scripts/_lib/installed_lock.ts +50 -5
- package/src/scripts/_lib/layer_overlap_notice.ts +11 -2
- package/src/scripts/_lib/md_section.ts +129 -0
- package/src/scripts/_lib/prune_empty_dirs.ts +80 -0
- package/src/scripts/_lib/scope_guard.sh +26 -3
- package/src/scripts/_lib/self_repair.ts +19 -0
- package/src/scripts/_lib/self_repair_class_b.ts +171 -0
- package/src/scripts/adr/evidence_census.ts +899 -0
- package/src/scripts/adr/regenerate_index.ts +12 -32
- package/src/scripts/adr_cite_check.ts +540 -39
- package/src/scripts/ai_council/cli_help.ts +55 -0
- package/src/scripts/audit_adr_coverage.ts +103 -17
- package/src/scripts/before_complete_hook.ts +153 -28
- package/src/scripts/bench_ab_v2_complexity.ts +27 -7
- package/src/scripts/bench_hook_latency.ts +204 -0
- package/src/scripts/build_archive_index.ts +34 -0
- package/src/scripts/check_adr_frontmatter.ts +574 -39
- package/src/scripts/check_hook_bundle_content.ts +219 -0
- package/src/scripts/check_new_adr_evidence.ts +529 -0
- package/src/scripts/check_references.ts +78 -0
- package/src/scripts/check_release_published.ts +32 -11
- package/src/scripts/check_rule_layer_partition.ts +531 -0
- package/src/scripts/check_single_delivery.ts +194 -17
- package/src/scripts/check_standing_rule_delivery.ts +8 -2
- package/src/scripts/ci_settle.ts +170 -0
- package/src/scripts/condense.ts +79 -259
- package/src/scripts/council_cli.ts +3 -3
- package/src/scripts/dispatch_r2_reviewer.ts +6 -14
- package/src/scripts/external_sources_denylist.json +4 -1
- 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 +21 -1
- package/src/scripts/hooks/concern_registry.ts +4 -0
- package/src/scripts/hooks/dispatch_hook.ts +154 -187
- package/src/scripts/hooks/dispatch_issues.ts +38 -19
- package/src/scripts/hooks/fallback_yaml.ts +66 -0
- package/src/scripts/hooks/host_semantics.ts +21 -0
- package/src/scripts/hooks/injection_budget.ts +13 -3
- package/src/scripts/hooks/py_json_dumps.ts +103 -0
- package/src/scripts/hooks/rtk_wrap_hook.ts +8 -3
- package/src/scripts/hooks/run_continuation_hook.ts +8 -5
- 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 +870 -21
- package/src/scripts/hooks/stdin_failure_policy.ts +96 -0
- 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/injection_scan_hook.ts +137 -5
- 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_hook_manifest.ts +49 -0
- package/src/scripts/lint_plan_risk_register.ts +4 -3
- package/src/scripts/lint_provenance_vocabulary.ts +472 -4
- package/src/scripts/lint_skill_router_head.ts +4 -4
- package/src/scripts/mcp_server/tools.ts +2 -2
- 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 +6 -0
- package/src/scripts/routing_doctor.ts +5 -1
- package/src/scripts/self_repair_hook.ts +37 -5
- package/src/scripts/session_register_hook.ts +11 -0
- 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 +170 -20
- 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-PPQO4NGR.js → chunk-6RJA2F5A.js} +3 -3
- package/dist/cli-delegate/{chunk-RYNADUFG.js → chunk-LWTYTX6F.js} +0 -0
- package/dist/cli-delegate/{chunk-FBKL6JWT.js → chunk-MMSGVZKV.js} +3 -3
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/scripts/hooks/state_io.ts
|
|
4
|
+
import { createHash } from "node:crypto";
|
|
5
|
+
import fs from "node:fs";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
var LOCK_BASENAME = ".dispatcher.lock";
|
|
8
|
+
var REPLAY_ENV_VAR = "AGENT_CONFIG_REPLAY";
|
|
9
|
+
function is_replay_mode() {
|
|
10
|
+
return (process.env[REPLAY_ENV_VAR] ?? "").trim() === "1";
|
|
11
|
+
}
|
|
12
|
+
function _lock_path(state_dir) {
|
|
13
|
+
return path.join(state_dir, LOCK_BASENAME);
|
|
14
|
+
}
|
|
15
|
+
function _target_lock_path(target_path) {
|
|
16
|
+
return `${target_path}.lock`;
|
|
17
|
+
}
|
|
18
|
+
function _py_json_dumps(value, indent) {
|
|
19
|
+
const pad = " ".repeat(indent);
|
|
20
|
+
const escapeString = (s) => {
|
|
21
|
+
let out = '"';
|
|
22
|
+
for (const ch of s) {
|
|
23
|
+
const code = ch.codePointAt(0);
|
|
24
|
+
switch (ch) {
|
|
25
|
+
case '"':
|
|
26
|
+
out += '\\"';
|
|
27
|
+
break;
|
|
28
|
+
case "\\":
|
|
29
|
+
out += "\\\\";
|
|
30
|
+
break;
|
|
31
|
+
case "\n":
|
|
32
|
+
out += "\\n";
|
|
33
|
+
break;
|
|
34
|
+
case "\r":
|
|
35
|
+
out += "\\r";
|
|
36
|
+
break;
|
|
37
|
+
case " ":
|
|
38
|
+
out += "\\t";
|
|
39
|
+
break;
|
|
40
|
+
case "\b":
|
|
41
|
+
out += "\\b";
|
|
42
|
+
break;
|
|
43
|
+
case "\f":
|
|
44
|
+
out += "\\f";
|
|
45
|
+
break;
|
|
46
|
+
default:
|
|
47
|
+
if (code < 32 || code > 126) {
|
|
48
|
+
if (code > 65535) {
|
|
49
|
+
const c = code - 65536;
|
|
50
|
+
const hi = 55296 + (c >> 10);
|
|
51
|
+
const lo = 56320 + (c & 1023);
|
|
52
|
+
out += "\\u" + hi.toString(16).padStart(4, "0") + "\\u" + lo.toString(16).padStart(4, "0");
|
|
53
|
+
} else {
|
|
54
|
+
out += "\\u" + code.toString(16).padStart(4, "0");
|
|
55
|
+
}
|
|
56
|
+
} else {
|
|
57
|
+
out += ch;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return out + '"';
|
|
62
|
+
};
|
|
63
|
+
const render = (v, depth) => {
|
|
64
|
+
if (v === null || v === void 0) {
|
|
65
|
+
return "null";
|
|
66
|
+
}
|
|
67
|
+
if (typeof v === "boolean") {
|
|
68
|
+
return v ? "true" : "false";
|
|
69
|
+
}
|
|
70
|
+
if (typeof v === "number") {
|
|
71
|
+
if (!Number.isFinite(v)) {
|
|
72
|
+
if (Number.isNaN(v)) return "NaN";
|
|
73
|
+
return v > 0 ? "Infinity" : "-Infinity";
|
|
74
|
+
}
|
|
75
|
+
return String(v);
|
|
76
|
+
}
|
|
77
|
+
if (typeof v === "string") {
|
|
78
|
+
return escapeString(v);
|
|
79
|
+
}
|
|
80
|
+
const curPad = pad.repeat(depth + 1);
|
|
81
|
+
const closePad = pad.repeat(depth);
|
|
82
|
+
if (Array.isArray(v)) {
|
|
83
|
+
if (v.length === 0) {
|
|
84
|
+
return "[]";
|
|
85
|
+
}
|
|
86
|
+
const items = v.map((item) => curPad + render(item, depth + 1));
|
|
87
|
+
return "[\n" + items.join(",\n") + "\n" + closePad + "]";
|
|
88
|
+
}
|
|
89
|
+
if (typeof v === "object") {
|
|
90
|
+
const obj = v;
|
|
91
|
+
const keys = Object.keys(obj);
|
|
92
|
+
if (keys.length === 0) {
|
|
93
|
+
return "{}";
|
|
94
|
+
}
|
|
95
|
+
const items = keys.map(
|
|
96
|
+
(k) => curPad + escapeString(k) + ": " + render(obj[k], depth + 1)
|
|
97
|
+
);
|
|
98
|
+
return "{\n" + items.join(",\n") + "\n" + closePad + "}";
|
|
99
|
+
}
|
|
100
|
+
throw new TypeError(`Object of type ${typeof v} is not JSON serializable`);
|
|
101
|
+
};
|
|
102
|
+
return render(value, 0);
|
|
103
|
+
}
|
|
104
|
+
function atomic_write_json(target, payload, options = {}) {
|
|
105
|
+
if (is_replay_mode()) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const indent = options.indent ?? 2;
|
|
109
|
+
const targetPath = path.resolve(target);
|
|
110
|
+
const state_dir = path.dirname(targetPath);
|
|
111
|
+
fs.mkdirSync(state_dir, { recursive: true });
|
|
112
|
+
const body = _py_json_dumps(payload, indent) + "\n";
|
|
113
|
+
_atomic_write_text(targetPath, body);
|
|
114
|
+
}
|
|
115
|
+
function atomic_write_text(target, text) {
|
|
116
|
+
if (is_replay_mode()) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const targetPath = path.resolve(target);
|
|
120
|
+
const state_dir = path.dirname(targetPath);
|
|
121
|
+
fs.mkdirSync(state_dir, { recursive: true });
|
|
122
|
+
_atomic_write_text(targetPath, text);
|
|
123
|
+
}
|
|
124
|
+
var LOCK_STALE_MS = 3e4;
|
|
125
|
+
var LOCK_ACQUIRE_DEADLINE_MS = 5e3;
|
|
126
|
+
var LOCK_SPIN_SLEEP_MS = 2;
|
|
127
|
+
function _sleep(ms) {
|
|
128
|
+
const sab = new Int32Array(new SharedArrayBuffer(4));
|
|
129
|
+
Atomics.wait(sab, 0, 0, ms);
|
|
130
|
+
}
|
|
131
|
+
function _acquire_lock(lock_path, options = {}) {
|
|
132
|
+
const blocking = options.blocking ?? true;
|
|
133
|
+
const fd = fs.openSync(lock_path, "a", 420);
|
|
134
|
+
const held = lock_path + ".held";
|
|
135
|
+
const give_up = () => {
|
|
136
|
+
try {
|
|
137
|
+
fs.closeSync(fd);
|
|
138
|
+
} catch {
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
};
|
|
142
|
+
const start = Date.now();
|
|
143
|
+
for (; ; ) {
|
|
144
|
+
try {
|
|
145
|
+
const heldFd = fs.openSync(held, "wx", 420);
|
|
146
|
+
fs.closeSync(heldFd);
|
|
147
|
+
return fd;
|
|
148
|
+
} catch (err) {
|
|
149
|
+
if (err.code !== "EEXIST") {
|
|
150
|
+
return fd;
|
|
151
|
+
}
|
|
152
|
+
let age_ms;
|
|
153
|
+
try {
|
|
154
|
+
age_ms = Date.now() - fs.statSync(held).mtimeMs;
|
|
155
|
+
} catch {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (age_ms >= LOCK_STALE_MS) {
|
|
159
|
+
try {
|
|
160
|
+
fs.rmSync(held, { force: true });
|
|
161
|
+
} catch {
|
|
162
|
+
}
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (!blocking) {
|
|
166
|
+
return give_up();
|
|
167
|
+
}
|
|
168
|
+
if (Date.now() - start > LOCK_ACQUIRE_DEADLINE_MS) {
|
|
169
|
+
return give_up();
|
|
170
|
+
}
|
|
171
|
+
_sleep(LOCK_SPIN_SLEEP_MS);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function _release_lock(fd, lock_path) {
|
|
176
|
+
try {
|
|
177
|
+
fs.closeSync(fd);
|
|
178
|
+
} catch {
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
fs.rmSync(lock_path + ".held", { force: true });
|
|
182
|
+
} catch {
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function _publish_text_locked(target, text) {
|
|
186
|
+
const tmp = target + `.tmp.${process.pid}`;
|
|
187
|
+
fs.writeFileSync(tmp, text, { encoding: "utf-8" });
|
|
188
|
+
fs.renameSync(tmp, target);
|
|
189
|
+
}
|
|
190
|
+
function _atomic_write_text(target, text) {
|
|
191
|
+
const lock_path = _lock_path(path.dirname(target));
|
|
192
|
+
const fd = _acquire_lock(lock_path);
|
|
193
|
+
if (fd === null) {
|
|
194
|
+
_publish_text_locked(target, text);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
_publish_text_locked(target, text);
|
|
199
|
+
} finally {
|
|
200
|
+
_release_lock(fd, lock_path);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
function has_stable_session_id(session_id) {
|
|
204
|
+
return typeof session_id === "string" && session_id.trim() !== "";
|
|
205
|
+
}
|
|
206
|
+
function session_state_file(dir, session_id) {
|
|
207
|
+
const digest = createHash("sha256").update(session_id, "utf8").digest("hex").slice(0, 32);
|
|
208
|
+
return path.join(dir, `${digest}.json`);
|
|
209
|
+
}
|
|
210
|
+
function restore_claimed_state(tomb, live, link = fs.linkSync) {
|
|
211
|
+
try {
|
|
212
|
+
link(tomb, live);
|
|
213
|
+
} catch (err) {
|
|
214
|
+
const code = err.code;
|
|
215
|
+
if (code !== "EEXIST" && code !== "ENOENT") {
|
|
216
|
+
if (!NO_HARD_LINK_CODES.has(code ?? "")) throw err;
|
|
217
|
+
if (!fs.existsSync(live)) {
|
|
218
|
+
fs.renameSync(tomb, live);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
fs.rmSync(tomb, { force: true });
|
|
224
|
+
}
|
|
225
|
+
var NO_HARD_LINK_CODES = /* @__PURE__ */ new Set(["EPERM", "ENOSYS", "EXDEV", "EOPNOTSUPP", "EMLINK"]);
|
|
226
|
+
function prune_stale_session_states(dir, now_ms, retention_days, mtime_of = (target) => fs.statSync(target).mtimeMs) {
|
|
227
|
+
if (is_replay_mode()) return 0;
|
|
228
|
+
const cutoff = now_ms - retention_days * 24 * 60 * 60 * 1e3;
|
|
229
|
+
let entries;
|
|
230
|
+
try {
|
|
231
|
+
entries = fs.readdirSync(dir);
|
|
232
|
+
} catch {
|
|
233
|
+
return 0;
|
|
234
|
+
}
|
|
235
|
+
let removed = 0;
|
|
236
|
+
let claim = 0;
|
|
237
|
+
for (const name of entries) {
|
|
238
|
+
const orphan = /^(.+\.json)\.\d+\.\d+\.tomb$/.exec(name);
|
|
239
|
+
const live_name = orphan?.[1];
|
|
240
|
+
if (live_name === void 0) continue;
|
|
241
|
+
const tomb = path.join(dir, name);
|
|
242
|
+
const live = path.join(dir, live_name);
|
|
243
|
+
try {
|
|
244
|
+
if (mtime_of(tomb) >= cutoff) {
|
|
245
|
+
restore_claimed_state(tomb, live);
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
fs.rmSync(tomb, { force: true });
|
|
249
|
+
removed += 1;
|
|
250
|
+
} catch {
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
for (const name of entries) {
|
|
254
|
+
if (!name.endsWith(".json")) continue;
|
|
255
|
+
const full = path.join(dir, name);
|
|
256
|
+
try {
|
|
257
|
+
if (mtime_of(full) >= cutoff) continue;
|
|
258
|
+
claim += 1;
|
|
259
|
+
const tomb = `${full}.${process.pid}.${claim}.tomb`;
|
|
260
|
+
fs.renameSync(full, tomb);
|
|
261
|
+
if (mtime_of(tomb) >= cutoff) {
|
|
262
|
+
restore_claimed_state(tomb, full);
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
fs.rmSync(tomb, { force: true });
|
|
266
|
+
for (const suffix of [".lock", ".lock.held"]) {
|
|
267
|
+
try {
|
|
268
|
+
fs.rmSync(`${full}${suffix}`, { force: true });
|
|
269
|
+
} catch {
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
removed += 1;
|
|
273
|
+
} catch {
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return removed;
|
|
277
|
+
}
|
|
278
|
+
function prune_legacy_state_file(target) {
|
|
279
|
+
if (is_replay_mode()) return;
|
|
280
|
+
try {
|
|
281
|
+
if (fs.statSync(target).isFile()) {
|
|
282
|
+
fs.rmSync(target, { force: true });
|
|
283
|
+
}
|
|
284
|
+
} catch {
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
function owns_session_state(state, session_id) {
|
|
288
|
+
if (typeof state !== "object" || state === null || Array.isArray(state)) return false;
|
|
289
|
+
return state["session_id"] === session_id;
|
|
290
|
+
}
|
|
291
|
+
function update_json_under_lock(target, mutate, options = {}) {
|
|
292
|
+
if (is_replay_mode()) return "failed";
|
|
293
|
+
const targetPath = path.resolve(target);
|
|
294
|
+
const state_dir = path.dirname(targetPath);
|
|
295
|
+
try {
|
|
296
|
+
fs.mkdirSync(state_dir, { recursive: true });
|
|
297
|
+
} catch {
|
|
298
|
+
return "failed";
|
|
299
|
+
}
|
|
300
|
+
const lock_path = _target_lock_path(targetPath);
|
|
301
|
+
let fd;
|
|
302
|
+
try {
|
|
303
|
+
fd = _acquire_lock(lock_path, { blocking: options.blocking ?? true });
|
|
304
|
+
} catch {
|
|
305
|
+
return "failed";
|
|
306
|
+
}
|
|
307
|
+
if (fd === null) return "failed";
|
|
308
|
+
try {
|
|
309
|
+
let loaded = {};
|
|
310
|
+
try {
|
|
311
|
+
const raw = fs.readFileSync(targetPath, "utf-8");
|
|
312
|
+
const decoded = JSON.parse(raw);
|
|
313
|
+
if (typeof decoded === "object" && decoded !== null && !Array.isArray(decoded)) {
|
|
314
|
+
loaded = decoded;
|
|
315
|
+
}
|
|
316
|
+
} catch {
|
|
317
|
+
}
|
|
318
|
+
const next = mutate(loaded);
|
|
319
|
+
if (next === null) return "skipped";
|
|
320
|
+
_publish_text_locked(targetPath, _py_json_dumps(next, options.indent ?? 2) + "\n");
|
|
321
|
+
return "written";
|
|
322
|
+
} catch {
|
|
323
|
+
return "failed";
|
|
324
|
+
} finally {
|
|
325
|
+
_release_lock(fd, lock_path);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// src/scripts/_lib/git_common_dir.ts
|
|
330
|
+
import fs2 from "node:fs";
|
|
331
|
+
import path2 from "node:path";
|
|
332
|
+
function realpath_or_self(p) {
|
|
333
|
+
try {
|
|
334
|
+
return fs2.realpathSync(p);
|
|
335
|
+
} catch {
|
|
336
|
+
return p;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
function git_dir(project_root) {
|
|
340
|
+
const dot_git = path2.join(project_root, ".git");
|
|
341
|
+
try {
|
|
342
|
+
const st = fs2.statSync(dot_git);
|
|
343
|
+
if (st.isDirectory()) {
|
|
344
|
+
return realpath_or_self(dot_git);
|
|
345
|
+
}
|
|
346
|
+
const m = fs2.readFileSync(dot_git, "utf-8").match(/^gitdir:\s*(.+)\s*$/m);
|
|
347
|
+
if (m === null) {
|
|
348
|
+
return null;
|
|
349
|
+
}
|
|
350
|
+
return realpath_or_self(path2.resolve(project_root, m[1].trim()));
|
|
351
|
+
} catch {
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
function current_branch(project_root) {
|
|
356
|
+
const gd = git_dir(project_root);
|
|
357
|
+
if (gd === null) return null;
|
|
358
|
+
try {
|
|
359
|
+
const head = fs2.readFileSync(path2.join(gd, "HEAD"), "utf-8").trim();
|
|
360
|
+
const m = head.match(/^ref:\s*refs\/heads\/(.+)$/);
|
|
361
|
+
return m === null ? null : m[1].trim();
|
|
362
|
+
} catch {
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
function git_common_dir(project_root) {
|
|
367
|
+
const dot_git = path2.join(project_root, ".git");
|
|
368
|
+
try {
|
|
369
|
+
const st = fs2.statSync(dot_git);
|
|
370
|
+
if (st.isDirectory()) {
|
|
371
|
+
return realpath_or_self(dot_git);
|
|
372
|
+
}
|
|
373
|
+
const m = fs2.readFileSync(dot_git, "utf-8").match(/^gitdir:\s*(.+)\s*$/m);
|
|
374
|
+
if (m === null) {
|
|
375
|
+
return null;
|
|
376
|
+
}
|
|
377
|
+
const gitdir = path2.resolve(project_root, m[1].trim());
|
|
378
|
+
const commondir_file = path2.join(gitdir, "commondir");
|
|
379
|
+
if (fs2.existsSync(commondir_file)) {
|
|
380
|
+
const common = path2.resolve(gitdir, fs2.readFileSync(commondir_file, "utf-8").trim());
|
|
381
|
+
return realpath_or_self(common);
|
|
382
|
+
}
|
|
383
|
+
return realpath_or_self(gitdir);
|
|
384
|
+
} catch {
|
|
385
|
+
return null;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
export {
|
|
390
|
+
is_replay_mode,
|
|
391
|
+
atomic_write_json,
|
|
392
|
+
atomic_write_text,
|
|
393
|
+
has_stable_session_id,
|
|
394
|
+
session_state_file,
|
|
395
|
+
prune_stale_session_states,
|
|
396
|
+
prune_legacy_state_file,
|
|
397
|
+
owns_session_state,
|
|
398
|
+
update_json_under_lock,
|
|
399
|
+
git_dir,
|
|
400
|
+
current_branch,
|
|
401
|
+
git_common_dir
|
|
402
|
+
};
|
|
@@ -10,6 +10,11 @@ import {
|
|
|
10
10
|
claude_plugin_snapshot_version,
|
|
11
11
|
codex_plugin_identity
|
|
12
12
|
} from "./chunk-FTAISGDQ.js";
|
|
13
|
+
import {
|
|
14
|
+
DEFAULT_GITATTRIBUTES,
|
|
15
|
+
SECTION_HEADER,
|
|
16
|
+
_is_source_repo
|
|
17
|
+
} from "./chunk-M2DPGFZ4.js";
|
|
13
18
|
import {
|
|
14
19
|
DEFAULT_PROJECTS_ROOT,
|
|
15
20
|
aggregateByBucket,
|
|
@@ -21,15 +26,10 @@ import {
|
|
|
21
26
|
projectStoreSlug,
|
|
22
27
|
scanTranscripts,
|
|
23
28
|
weightedInputUnits
|
|
24
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-MMSGVZKV.js";
|
|
25
30
|
import {
|
|
26
31
|
git_common_dir
|
|
27
|
-
} from "./chunk-
|
|
28
|
-
import {
|
|
29
|
-
DEFAULT_GITATTRIBUTES,
|
|
30
|
-
SECTION_HEADER,
|
|
31
|
-
_is_source_repo
|
|
32
|
-
} from "./chunk-M2DPGFZ4.js";
|
|
32
|
+
} from "./chunk-E4XIZDIB.js";
|
|
33
33
|
import {
|
|
34
34
|
DEFAULT_DEPLOY_ROOTS,
|
|
35
35
|
MANAGED_SIGNATURE,
|
|
@@ -38,15 +38,21 @@ import {
|
|
|
38
38
|
global_deploy_inventory_exports,
|
|
39
39
|
manifest_path,
|
|
40
40
|
read_manifest
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-PMEKGDED.js";
|
|
42
42
|
import {
|
|
43
43
|
read_lockfile
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-T7L2QK3K.js";
|
|
45
45
|
import {
|
|
46
46
|
LEGACY_ALL,
|
|
47
47
|
excludedRuleBasenames,
|
|
48
48
|
ruleScopeFromSettings
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-G23AT6GD.js";
|
|
50
|
+
import {
|
|
51
|
+
require_dist
|
|
52
|
+
} from "./chunk-OY53J6II.js";
|
|
53
|
+
import {
|
|
54
|
+
resolvePackageRoot
|
|
55
|
+
} from "./chunk-MCJYCQPF.js";
|
|
50
56
|
import {
|
|
51
57
|
PROJECT_ROOT_ENV,
|
|
52
58
|
ProjectRootError,
|
|
@@ -59,12 +65,6 @@ import {
|
|
|
59
65
|
event4u_root,
|
|
60
66
|
resolve_with_fallback
|
|
61
67
|
} from "./chunk-NDJLNC6Q.js";
|
|
62
|
-
import {
|
|
63
|
-
require_dist
|
|
64
|
-
} from "./chunk-OY53J6II.js";
|
|
65
|
-
import {
|
|
66
|
-
resolvePackageRoot
|
|
67
|
-
} from "./chunk-MCJYCQPF.js";
|
|
68
68
|
import {
|
|
69
69
|
__export,
|
|
70
70
|
__toESM
|