@event4u/agent-config 17.0.0 → 17.1.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/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +104 -485
- package/README.md +2 -1
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +5 -3
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +5 -1
- package/dist/cli-delegate/{chunk-IROAQ77A.js → chunk-3PK3VZHB.js} +107 -9
- package/dist/cli-delegate/{chunk-2SFOOFJJ.js → chunk-BZJ4Y3CI.js} +1 -1
- package/dist/cli-delegate/{chunk-CAL76ADI.js → chunk-CMZEKSNN.js} +52 -10
- package/dist/cli-delegate/{chunk-ESUNQ5XR.js → chunk-E3CFULNX.js} +22 -4
- package/dist/cli-delegate/{chunk-GOMILC3O.js → chunk-QBHEI5N4.js} +4 -3
- package/dist/cli-delegate/{chunk-SIOMDAKL.js → chunk-VYZGJLCA.js} +29 -39
- package/dist/cli-delegate/chunk-W5JXMF2T.js +77 -0
- package/dist/cli-delegate/{chunk-4SHNERBL.js → chunk-XIAPY44N.js} +1 -1
- package/dist/cli-delegate/{chunk-JHMMWNJ2.js → chunk-YHAPONWV.js} +1 -1
- package/dist/cli-delegate/cmd_conformance.js +9 -8
- package/dist/cli-delegate/cmd_doctor.js +4 -4
- package/dist/cli-delegate/cmd_doctor_neighbours.js +2 -2
- package/dist/cli-delegate/cmd_explain.js +1 -1
- package/dist/cli-delegate/cmd_export.js +6 -6
- package/dist/cli-delegate/cmd_fleet.js +3 -3
- package/dist/cli-delegate/cmd_preflight.js +3 -3
- package/dist/cli-delegate/cmd_prune.js +6 -6
- package/dist/cli-delegate/cmd_settings_migrate.js +6 -6
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +6 -6
- package/dist/cli-delegate/cmd_uninstall.js +6 -6
- package/dist/cli-delegate/cmd_update.js +9 -13
- package/dist/cli-delegate/cmd_validate.js +6 -6
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +4 -4
- 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 +98 -74
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/install/claudeRuleRewrite.js +10 -3
- package/dist/install/conflict.js +24 -2
- package/dist/install/conflictTracker.js +14 -3
- package/dist/install/install.mjs +222 -117
- package/dist/install/installThinLayer.js +1 -0
- package/dist/install/loggedWrites.js +142 -0
- package/dist/install/paths.js +12 -2
- package/dist/install/preserve.js +25 -4
- package/dist/install/txlog.js +10 -6
- package/dist/mcp/registry-manifest.json +2 -2
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +845 -294
- package/dist/scripts/_lib/egress_rules.js +4 -1
- package/dist/scripts/_lib/identifier_redaction.js +35 -2
- package/dist/scripts/ai_council/seat_policy.js +7 -1
- package/dist/server/schemas/settings.js +1 -1
- package/package.json +1 -1
- package/src/config/ci-local-parity.yml +1 -1
- package/src/config/gate-coverage.yml +27 -7
- package/src/config/gate-violation-baselines.json +8 -2
- package/src/config/hook-bundle-budget.json +2 -2
- package/src/config/production-entries.json +18 -0
- package/src/config/release-gate-locality.yml +0 -7
- package/src/install/claudeRuleRewrite.ts +10 -1
- package/src/install/conflict.ts +24 -1
- package/src/install/conflictTracker.ts +18 -2
- package/src/install/installThinLayer.ts +6 -0
- package/src/install/loggedWrites.ts +148 -0
- package/src/install/paths.ts +11 -2
- package/src/install/preserve.ts +40 -4
- package/src/install/txlog.ts +10 -6
- package/src/scripts/_cli/cmd_conformance.ts +3 -2
- package/src/scripts/_cli/cmd_update.ts +15 -17
- package/src/scripts/_lib/council_settings_block.ts +9 -2
- package/src/scripts/_lib/egress_rules.ts +4 -1
- package/src/scripts/_lib/host_capability.ts +10 -5
- package/src/scripts/_lib/identifier_redaction.ts +38 -2
- package/src/scripts/_lib/price_freshness.ts +112 -0
- package/src/scripts/_lib/production_reach.ts +194 -0
- package/src/scripts/_lib/quota_parked.ts +17 -28
- package/src/scripts/_lib/release_findings_ingest.ts +13 -335
- package/src/scripts/_lib/tier_downshift_verdict.ts +81 -35
- package/src/scripts/ai_council/chairman.ts +5 -2
- package/src/scripts/ai_council/clients.ts +4 -3
- package/src/scripts/ai_council/free_hand_shadow.ts +24 -12
- package/src/scripts/ai_council/free_route_catalog.ts +142 -5
- package/src/scripts/ai_council/free_route_client.ts +4 -0
- package/src/scripts/ai_council/hand_payload.ts +115 -7
- package/src/scripts/ai_council/orchestrator.ts +7 -10
- package/src/scripts/ai_council/route_chooser.ts +1 -1
- package/src/scripts/ai_council/route_member.ts +66 -4
- package/src/scripts/ai_council/seat_policy.ts +8 -1
- package/src/scripts/ai_council/self_hosted_probe.ts +327 -0
- package/src/scripts/ai_council/status_surface.ts +2 -0
- package/src/scripts/ask_transport.ts +137 -15
- package/src/scripts/check_finding_dispositions.ts +25 -71
- package/src/scripts/check_release_pr_shape.ts +3 -3
- package/src/scripts/check_step_production_reach.ts +257 -0
- package/src/scripts/council_cli.ts +10 -8
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +3 -0
- package/src/scripts/hooks/dispatch_hook.ts +2 -2
- package/src/scripts/hooks/payload_stub.ts +27 -0
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +29 -70
- package/src/scripts/hooks/subagent_ledger_hook.ts +80 -0
- package/src/scripts/install.ts +2 -2
- package/src/scripts/lint_decision_classes.ts +34 -0
- package/src/scripts/lint_hook_manifest.ts +24 -0
- package/src/scripts/lint_roadmap_blockers.ts +52 -3
- package/src/scripts/release.ts +5 -9
- package/src/scripts/release_drill.ts +11 -165
- package/src/scripts/release_publication.ts +0 -9
- package/src/scripts/report_production_reach.ts +35 -0
- package/src/scripts/worker_reuse_shadow_report.ts +399 -1
- package/src/server/schemas/settings.ts +1 -1
- package/dist/cli-delegate/chunk-A4QJ6ENT.js +0 -50
- /package/dist/cli-delegate/{chunk-E6XNBVE4.js → chunk-KR5ZIFPO.js} +0 -0
package/dist/install/install.mjs
CHANGED
|
@@ -4001,10 +4001,10 @@ var require_resolve_block_map = __commonJS({
|
|
|
4001
4001
|
let offset = bm.offset;
|
|
4002
4002
|
let commentEnd = null;
|
|
4003
4003
|
for (const collItem of bm.items) {
|
|
4004
|
-
const { start, key, sep:
|
|
4004
|
+
const { start, key, sep: sep11, value } = collItem;
|
|
4005
4005
|
const keyProps = resolveProps.resolveProps(start, {
|
|
4006
4006
|
indicator: "explicit-key-ind",
|
|
4007
|
-
next: key ??
|
|
4007
|
+
next: key ?? sep11?.[0],
|
|
4008
4008
|
offset,
|
|
4009
4009
|
onError,
|
|
4010
4010
|
parentIndent: bm.indent,
|
|
@@ -4018,7 +4018,7 @@ var require_resolve_block_map = __commonJS({
|
|
|
4018
4018
|
else if ("indent" in key && key.indent !== bm.indent)
|
|
4019
4019
|
onError(offset, "BAD_INDENT", startColMsg);
|
|
4020
4020
|
}
|
|
4021
|
-
if (!keyProps.anchor && !keyProps.tag && !
|
|
4021
|
+
if (!keyProps.anchor && !keyProps.tag && !sep11) {
|
|
4022
4022
|
commentEnd = keyProps.end;
|
|
4023
4023
|
if (keyProps.comment) {
|
|
4024
4024
|
if (map.comment)
|
|
@@ -4042,7 +4042,7 @@ var require_resolve_block_map = __commonJS({
|
|
|
4042
4042
|
ctx.atKey = false;
|
|
4043
4043
|
if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))
|
|
4044
4044
|
onError(keyStart, "DUPLICATE_KEY", "Map keys must be unique");
|
|
4045
|
-
const valueProps = resolveProps.resolveProps(
|
|
4045
|
+
const valueProps = resolveProps.resolveProps(sep11 ?? [], {
|
|
4046
4046
|
indicator: "map-value-ind",
|
|
4047
4047
|
next: value,
|
|
4048
4048
|
offset: keyNode.range[2],
|
|
@@ -4058,7 +4058,7 @@ var require_resolve_block_map = __commonJS({
|
|
|
4058
4058
|
if (ctx.options.strict && keyProps.start < valueProps.found.offset - 1024)
|
|
4059
4059
|
onError(keyNode.range, "KEY_OVER_1024_CHARS", "The : indicator must be at most 1024 chars after the start of an implicit block mapping key");
|
|
4060
4060
|
}
|
|
4061
|
-
const valueNode = value ? composeNode(ctx, value, valueProps, onError) : composeEmptyNode(ctx, offset,
|
|
4061
|
+
const valueNode = value ? composeNode(ctx, value, valueProps, onError) : composeEmptyNode(ctx, offset, sep11, null, valueProps, onError);
|
|
4062
4062
|
if (ctx.schema.compat)
|
|
4063
4063
|
utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);
|
|
4064
4064
|
offset = valueNode.range[2];
|
|
@@ -4149,7 +4149,7 @@ var require_resolve_end = __commonJS({
|
|
|
4149
4149
|
let comment = "";
|
|
4150
4150
|
if (end) {
|
|
4151
4151
|
let hasSpace = false;
|
|
4152
|
-
let
|
|
4152
|
+
let sep11 = "";
|
|
4153
4153
|
for (const token of end) {
|
|
4154
4154
|
const { source, type } = token;
|
|
4155
4155
|
switch (type) {
|
|
@@ -4163,13 +4163,13 @@ var require_resolve_end = __commonJS({
|
|
|
4163
4163
|
if (!comment)
|
|
4164
4164
|
comment = cb;
|
|
4165
4165
|
else
|
|
4166
|
-
comment +=
|
|
4167
|
-
|
|
4166
|
+
comment += sep11 + cb;
|
|
4167
|
+
sep11 = "";
|
|
4168
4168
|
break;
|
|
4169
4169
|
}
|
|
4170
4170
|
case "newline":
|
|
4171
4171
|
if (comment)
|
|
4172
|
-
|
|
4172
|
+
sep11 += source;
|
|
4173
4173
|
hasSpace = true;
|
|
4174
4174
|
break;
|
|
4175
4175
|
default:
|
|
@@ -4212,18 +4212,18 @@ var require_resolve_flow_collection = __commonJS({
|
|
|
4212
4212
|
let offset = fc.offset + fc.start.source.length;
|
|
4213
4213
|
for (let i = 0; i < fc.items.length; ++i) {
|
|
4214
4214
|
const collItem = fc.items[i];
|
|
4215
|
-
const { start, key, sep:
|
|
4215
|
+
const { start, key, sep: sep11, value } = collItem;
|
|
4216
4216
|
const props = resolveProps.resolveProps(start, {
|
|
4217
4217
|
flow: fcName,
|
|
4218
4218
|
indicator: "explicit-key-ind",
|
|
4219
|
-
next: key ??
|
|
4219
|
+
next: key ?? sep11?.[0],
|
|
4220
4220
|
offset,
|
|
4221
4221
|
onError,
|
|
4222
4222
|
parentIndent: fc.indent,
|
|
4223
4223
|
startOnNewline: false
|
|
4224
4224
|
});
|
|
4225
4225
|
if (!props.found) {
|
|
4226
|
-
if (!props.anchor && !props.tag && !
|
|
4226
|
+
if (!props.anchor && !props.tag && !sep11 && !value) {
|
|
4227
4227
|
if (i === 0 && props.comma)
|
|
4228
4228
|
onError(props.comma, "UNEXPECTED_TOKEN", `Unexpected , in ${fcName}`);
|
|
4229
4229
|
else if (i < fc.items.length - 1)
|
|
@@ -4277,8 +4277,8 @@ var require_resolve_flow_collection = __commonJS({
|
|
|
4277
4277
|
}
|
|
4278
4278
|
}
|
|
4279
4279
|
}
|
|
4280
|
-
if (!isMap && !
|
|
4281
|
-
const valueNode = value ? composeNode(ctx, value, props, onError) : composeEmptyNode(ctx, props.end,
|
|
4280
|
+
if (!isMap && !sep11 && !props.found) {
|
|
4281
|
+
const valueNode = value ? composeNode(ctx, value, props, onError) : composeEmptyNode(ctx, props.end, sep11, null, props, onError);
|
|
4282
4282
|
coll.items.push(valueNode);
|
|
4283
4283
|
offset = valueNode.range[2];
|
|
4284
4284
|
if (isBlock(value))
|
|
@@ -4290,7 +4290,7 @@ var require_resolve_flow_collection = __commonJS({
|
|
|
4290
4290
|
if (isBlock(key))
|
|
4291
4291
|
onError(keyNode.range, "BLOCK_IN_FLOW", blockMsg);
|
|
4292
4292
|
ctx.atKey = false;
|
|
4293
|
-
const valueProps = resolveProps.resolveProps(
|
|
4293
|
+
const valueProps = resolveProps.resolveProps(sep11 ?? [], {
|
|
4294
4294
|
flow: fcName,
|
|
4295
4295
|
indicator: "map-value-ind",
|
|
4296
4296
|
next: value,
|
|
@@ -4301,8 +4301,8 @@ var require_resolve_flow_collection = __commonJS({
|
|
|
4301
4301
|
});
|
|
4302
4302
|
if (valueProps.found) {
|
|
4303
4303
|
if (!isMap && !props.found && ctx.options.strict) {
|
|
4304
|
-
if (
|
|
4305
|
-
for (const st of
|
|
4304
|
+
if (sep11)
|
|
4305
|
+
for (const st of sep11) {
|
|
4306
4306
|
if (st === valueProps.found)
|
|
4307
4307
|
break;
|
|
4308
4308
|
if (st.type === "newline") {
|
|
@@ -4319,7 +4319,7 @@ var require_resolve_flow_collection = __commonJS({
|
|
|
4319
4319
|
else
|
|
4320
4320
|
onError(valueProps.start, "MISSING_CHAR", `Missing , or : between ${fcName} items`);
|
|
4321
4321
|
}
|
|
4322
|
-
const valueNode = value ? composeNode(ctx, value, valueProps, onError) : valueProps.found ? composeEmptyNode(ctx, valueProps.end,
|
|
4322
|
+
const valueNode = value ? composeNode(ctx, value, valueProps, onError) : valueProps.found ? composeEmptyNode(ctx, valueProps.end, sep11, null, valueProps, onError) : null;
|
|
4323
4323
|
if (valueNode) {
|
|
4324
4324
|
if (isBlock(value))
|
|
4325
4325
|
onError(valueNode.range, "BLOCK_IN_FLOW", blockMsg);
|
|
@@ -4499,7 +4499,7 @@ var require_resolve_block_scalar = __commonJS({
|
|
|
4499
4499
|
chompStart = i + 1;
|
|
4500
4500
|
}
|
|
4501
4501
|
let value = "";
|
|
4502
|
-
let
|
|
4502
|
+
let sep11 = "";
|
|
4503
4503
|
let prevMoreIndented = false;
|
|
4504
4504
|
for (let i = 0; i < contentStart; ++i)
|
|
4505
4505
|
value += lines[i][0].slice(trimIndent) + "\n";
|
|
@@ -4516,24 +4516,24 @@ var require_resolve_block_scalar = __commonJS({
|
|
|
4516
4516
|
indent = "";
|
|
4517
4517
|
}
|
|
4518
4518
|
if (type === Scalar.Scalar.BLOCK_LITERAL) {
|
|
4519
|
-
value +=
|
|
4520
|
-
|
|
4519
|
+
value += sep11 + indent.slice(trimIndent) + content;
|
|
4520
|
+
sep11 = "\n";
|
|
4521
4521
|
} else if (indent.length > trimIndent || content[0] === " ") {
|
|
4522
|
-
if (
|
|
4523
|
-
|
|
4524
|
-
else if (!prevMoreIndented &&
|
|
4525
|
-
|
|
4526
|
-
value +=
|
|
4527
|
-
|
|
4522
|
+
if (sep11 === " ")
|
|
4523
|
+
sep11 = "\n";
|
|
4524
|
+
else if (!prevMoreIndented && sep11 === "\n")
|
|
4525
|
+
sep11 = "\n\n";
|
|
4526
|
+
value += sep11 + indent.slice(trimIndent) + content;
|
|
4527
|
+
sep11 = "\n";
|
|
4528
4528
|
prevMoreIndented = true;
|
|
4529
4529
|
} else if (content === "") {
|
|
4530
|
-
if (
|
|
4530
|
+
if (sep11 === "\n")
|
|
4531
4531
|
value += "\n";
|
|
4532
4532
|
else
|
|
4533
|
-
|
|
4533
|
+
sep11 = "\n";
|
|
4534
4534
|
} else {
|
|
4535
|
-
value +=
|
|
4536
|
-
|
|
4535
|
+
value += sep11 + content;
|
|
4536
|
+
sep11 = " ";
|
|
4537
4537
|
prevMoreIndented = false;
|
|
4538
4538
|
}
|
|
4539
4539
|
}
|
|
@@ -4715,25 +4715,25 @@ var require_resolve_flow_scalar = __commonJS({
|
|
|
4715
4715
|
if (!match)
|
|
4716
4716
|
return source;
|
|
4717
4717
|
let res = match[1];
|
|
4718
|
-
let
|
|
4718
|
+
let sep11 = " ";
|
|
4719
4719
|
let pos = first.lastIndex;
|
|
4720
4720
|
line.lastIndex = pos;
|
|
4721
4721
|
while (match = line.exec(source)) {
|
|
4722
4722
|
if (match[1] === "") {
|
|
4723
|
-
if (
|
|
4724
|
-
res +=
|
|
4723
|
+
if (sep11 === "\n")
|
|
4724
|
+
res += sep11;
|
|
4725
4725
|
else
|
|
4726
|
-
|
|
4726
|
+
sep11 = "\n";
|
|
4727
4727
|
} else {
|
|
4728
|
-
res +=
|
|
4729
|
-
|
|
4728
|
+
res += sep11 + match[1];
|
|
4729
|
+
sep11 = " ";
|
|
4730
4730
|
}
|
|
4731
4731
|
pos = line.lastIndex;
|
|
4732
4732
|
}
|
|
4733
4733
|
const last = /[ \t]*(.*)/sy;
|
|
4734
4734
|
last.lastIndex = pos;
|
|
4735
4735
|
match = last.exec(source);
|
|
4736
|
-
return res +
|
|
4736
|
+
return res + sep11 + (match?.[1] ?? "");
|
|
4737
4737
|
}
|
|
4738
4738
|
function doubleQuotedValue(source, onError) {
|
|
4739
4739
|
let res = "";
|
|
@@ -5543,14 +5543,14 @@ var require_cst_stringify = __commonJS({
|
|
|
5543
5543
|
}
|
|
5544
5544
|
}
|
|
5545
5545
|
}
|
|
5546
|
-
function stringifyItem({ start, key, sep:
|
|
5546
|
+
function stringifyItem({ start, key, sep: sep11, value }) {
|
|
5547
5547
|
let res = "";
|
|
5548
5548
|
for (const st of start)
|
|
5549
5549
|
res += st.source;
|
|
5550
5550
|
if (key)
|
|
5551
5551
|
res += stringifyToken(key);
|
|
5552
|
-
if (
|
|
5553
|
-
for (const st of
|
|
5552
|
+
if (sep11)
|
|
5553
|
+
for (const st of sep11)
|
|
5554
5554
|
res += st.source;
|
|
5555
5555
|
if (value)
|
|
5556
5556
|
res += stringifyToken(value);
|
|
@@ -6717,18 +6717,18 @@ var require_parser = __commonJS({
|
|
|
6717
6717
|
if (this.type === "map-value-ind") {
|
|
6718
6718
|
const prev = getPrevProps(this.peek(2));
|
|
6719
6719
|
const start = getFirstKeyStartProps(prev);
|
|
6720
|
-
let
|
|
6720
|
+
let sep11;
|
|
6721
6721
|
if (scalar.end) {
|
|
6722
|
-
|
|
6723
|
-
|
|
6722
|
+
sep11 = scalar.end;
|
|
6723
|
+
sep11.push(this.sourceToken);
|
|
6724
6724
|
delete scalar.end;
|
|
6725
6725
|
} else
|
|
6726
|
-
|
|
6726
|
+
sep11 = [this.sourceToken];
|
|
6727
6727
|
const map = {
|
|
6728
6728
|
type: "block-map",
|
|
6729
6729
|
offset: scalar.offset,
|
|
6730
6730
|
indent: scalar.indent,
|
|
6731
|
-
items: [{ start, key: scalar, sep:
|
|
6731
|
+
items: [{ start, key: scalar, sep: sep11 }]
|
|
6732
6732
|
};
|
|
6733
6733
|
this.onKeyLine = true;
|
|
6734
6734
|
this.stack[this.stack.length - 1] = map;
|
|
@@ -6881,15 +6881,15 @@ var require_parser = __commonJS({
|
|
|
6881
6881
|
} else if (isFlowToken(it.key) && !includesToken(it.sep, "newline")) {
|
|
6882
6882
|
const start2 = getFirstKeyStartProps(it.start);
|
|
6883
6883
|
const key = it.key;
|
|
6884
|
-
const
|
|
6885
|
-
|
|
6884
|
+
const sep11 = it.sep;
|
|
6885
|
+
sep11.push(this.sourceToken);
|
|
6886
6886
|
delete it.key;
|
|
6887
6887
|
delete it.sep;
|
|
6888
6888
|
this.stack.push({
|
|
6889
6889
|
type: "block-map",
|
|
6890
6890
|
offset: this.offset,
|
|
6891
6891
|
indent: this.indent,
|
|
6892
|
-
items: [{ start: start2, key, sep:
|
|
6892
|
+
items: [{ start: start2, key, sep: sep11 }]
|
|
6893
6893
|
});
|
|
6894
6894
|
} else if (start.length > 0) {
|
|
6895
6895
|
it.sep = it.sep.concat(start, this.sourceToken);
|
|
@@ -7083,13 +7083,13 @@ var require_parser = __commonJS({
|
|
|
7083
7083
|
const prev = getPrevProps(parent);
|
|
7084
7084
|
const start = getFirstKeyStartProps(prev);
|
|
7085
7085
|
fixFlowSeqItems(fc);
|
|
7086
|
-
const
|
|
7087
|
-
|
|
7086
|
+
const sep11 = fc.end.splice(1, fc.end.length);
|
|
7087
|
+
sep11.push(this.sourceToken);
|
|
7088
7088
|
const map = {
|
|
7089
7089
|
type: "block-map",
|
|
7090
7090
|
offset: fc.offset,
|
|
7091
7091
|
indent: fc.indent,
|
|
7092
|
-
items: [{ start, key: fc, sep:
|
|
7092
|
+
items: [{ start, key: fc, sep: sep11 }]
|
|
7093
7093
|
};
|
|
7094
7094
|
this.onKeyLine = true;
|
|
7095
7095
|
this.stack[this.stack.length - 1] = map;
|
|
@@ -8482,7 +8482,8 @@ function probeHostCapabilities(hostId) {
|
|
|
8482
8482
|
const base = resolveHostCapabilities(hostId);
|
|
8483
8483
|
const flag = process2.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS;
|
|
8484
8484
|
const probedAgentTeams = typeof flag === "string" && flag !== "";
|
|
8485
|
-
|
|
8485
|
+
const probedResume = probedAgentTeams && hostId === "claude";
|
|
8486
|
+
return { ...base, agent_teams: base.agent_teams || probedAgentTeams, worker_resume: base.worker_resume || probedResume };
|
|
8486
8487
|
}
|
|
8487
8488
|
var CAPABILITY_FIELDS = [
|
|
8488
8489
|
"subagent_spawn",
|
|
@@ -8504,9 +8505,9 @@ function describeHostCapabilities(hostId) {
|
|
|
8504
8505
|
const probedAgentTeams = typeof flag === "string" && flag !== "";
|
|
8505
8506
|
const sources = {};
|
|
8506
8507
|
for (const field of CAPABILITY_FIELDS) {
|
|
8507
|
-
if (row !== void 0 && typeof row[field] === "boolean") {
|
|
8508
|
+
if (row !== void 0 && typeof row[field] === "boolean" && !(row[field] === false && manifest[field] === true)) {
|
|
8508
8509
|
sources[field] = "registry";
|
|
8509
|
-
} else if (field === "agent_teams" && probedAgentTeams) {
|
|
8510
|
+
} else if ((field === "agent_teams" || field === "worker_resume" && hostId === "claude") && probedAgentTeams) {
|
|
8510
8511
|
sources[field] = "live-probe";
|
|
8511
8512
|
} else {
|
|
8512
8513
|
sources[field] = "default";
|
|
@@ -10091,14 +10092,21 @@ function recordedHashesWithLedger(root, env) {
|
|
|
10091
10092
|
var SIDECAR_SUFFIX = ".agent-config.new";
|
|
10092
10093
|
var EXIT_COMPLETED_WITH_CONFLICTS = 3;
|
|
10093
10094
|
function isLedgerMigration(inputs) {
|
|
10094
|
-
if (!inputs.exists || inputs.force) return false;
|
|
10095
|
+
if (!inputs.exists || inputs.force || inputs.loggedWrite === true) return false;
|
|
10095
10096
|
if (inputs.ledgerListed !== true) return false;
|
|
10096
10097
|
if (inputs.onDiskSha256 === null) return false;
|
|
10097
10098
|
return classifyOwnership(inputs.recordedSha256, inputs.onDiskSha256) === "unknown";
|
|
10098
10099
|
}
|
|
10100
|
+
function logProofApplies(inputs) {
|
|
10101
|
+
if (!inputs.exists || inputs.force || inputs.onDiskSha256 === null) return false;
|
|
10102
|
+
const ownership = classifyOwnership(inputs.recordedSha256, inputs.onDiskSha256);
|
|
10103
|
+
if (ownership === "recorded-modified") return inputs.recordedIsStaged === true;
|
|
10104
|
+
return ownership === "unknown" && isLedgerMigration({ ...inputs, loggedWrite: false });
|
|
10105
|
+
}
|
|
10099
10106
|
function decideDeployWrite(inputs) {
|
|
10100
10107
|
if (!inputs.exists) return "write";
|
|
10101
10108
|
if (inputs.force) return "write";
|
|
10109
|
+
if (inputs.loggedWrite === true && logProofApplies(inputs)) return "write";
|
|
10102
10110
|
const ownership = classifyOwnership(inputs.recordedSha256, inputs.onDiskSha256);
|
|
10103
10111
|
if (ownership === "recorded-modified") return "preserve";
|
|
10104
10112
|
if (ownership === "unknown" && isLedgerMigration(inputs)) {
|
|
@@ -10123,12 +10131,125 @@ function foreignSidecarMessage(target, sidecar) {
|
|
|
10123
10131
|
return `Refusing to replace ${sidecar}: it already exists with different content and this install cannot show it wrote it. Package content for ${target} was NOT staged. Move or delete that file and re-run, or rerun with --force to replace the managed file instead.`;
|
|
10124
10132
|
}
|
|
10125
10133
|
|
|
10134
|
+
// src/install/loggedWrites.ts
|
|
10135
|
+
import { gunzipSync } from "node:zlib";
|
|
10136
|
+
import { existsSync as existsSync5, readdirSync as readdirSync5, readFileSync as readFileSync10, realpathSync as realpathSync3, statSync as statSync4 } from "node:fs";
|
|
10137
|
+
import { basename as basename3, dirname as dirname4, join as join12, relative as relative2, resolve as resolve4, sep as sep3 } from "node:path";
|
|
10138
|
+
|
|
10139
|
+
// src/install/paths.ts
|
|
10140
|
+
import { homedir as homedir6, tmpdir } from "node:os";
|
|
10141
|
+
import { join as join11 } from "node:path";
|
|
10142
|
+
var INSTALL_ROOT_SUBPATH = ".event4u/agent-config";
|
|
10143
|
+
var INSTALL_LOG_FILENAME = "install-log.jsonl";
|
|
10144
|
+
function resolveHome(home) {
|
|
10145
|
+
if (home && home.length > 0) {
|
|
10146
|
+
return home;
|
|
10147
|
+
}
|
|
10148
|
+
const fromOs = homedir6();
|
|
10149
|
+
if (!fromOs) {
|
|
10150
|
+
throw new Error(
|
|
10151
|
+
"Cannot resolve home directory \u2014 both $HOME (POSIX) and $USERPROFILE (Windows) are unset."
|
|
10152
|
+
);
|
|
10153
|
+
}
|
|
10154
|
+
return fromOs;
|
|
10155
|
+
}
|
|
10156
|
+
function getInstallRoot(home) {
|
|
10157
|
+
return join11(resolveHome(home), INSTALL_ROOT_SUBPATH);
|
|
10158
|
+
}
|
|
10159
|
+
function getLogPath(home) {
|
|
10160
|
+
const configHome = home ? void 0 : process.env["EVENT4U_CONFIG_HOME"];
|
|
10161
|
+
if (configHome) return join11(configHome, INSTALL_LOG_FILENAME);
|
|
10162
|
+
return join11(getInstallRoot(home), INSTALL_LOG_FILENAME);
|
|
10163
|
+
}
|
|
10164
|
+
|
|
10165
|
+
// src/install/loggedWrites.ts
|
|
10166
|
+
var WRITE_MARKER = '"kind":"write"';
|
|
10167
|
+
var fileCache = /* @__PURE__ */ new Map();
|
|
10168
|
+
var dirRealpaths = /* @__PURE__ */ new Map();
|
|
10169
|
+
function canonicalPath(p) {
|
|
10170
|
+
const abs = resolve4(p);
|
|
10171
|
+
const dir = dirname4(abs);
|
|
10172
|
+
let real = dirRealpaths.get(dir);
|
|
10173
|
+
if (real === void 0) {
|
|
10174
|
+
try {
|
|
10175
|
+
real = realpathSync3(dir);
|
|
10176
|
+
} catch {
|
|
10177
|
+
real = dir;
|
|
10178
|
+
}
|
|
10179
|
+
dirRealpaths.set(dir, real);
|
|
10180
|
+
}
|
|
10181
|
+
return join12(real, basename3(abs));
|
|
10182
|
+
}
|
|
10183
|
+
function logFiles(logPath) {
|
|
10184
|
+
const dir = dirname4(logPath);
|
|
10185
|
+
if (!existsSync5(dir)) return [];
|
|
10186
|
+
const stem = basename3(logPath).replace(/\.jsonl$/, "");
|
|
10187
|
+
try {
|
|
10188
|
+
return readdirSync5(dir).filter((n) => n.startsWith(stem) && (n.endsWith(".jsonl") || n.endsWith(".jsonl.gz"))).map((n) => join12(dir, n)).sort();
|
|
10189
|
+
} catch {
|
|
10190
|
+
return [];
|
|
10191
|
+
}
|
|
10192
|
+
}
|
|
10193
|
+
function writesIn(file) {
|
|
10194
|
+
let stamp;
|
|
10195
|
+
try {
|
|
10196
|
+
const st = statSync4(file);
|
|
10197
|
+
stamp = `${st.size}:${Math.trunc(st.mtimeMs)}`;
|
|
10198
|
+
} catch {
|
|
10199
|
+
return [];
|
|
10200
|
+
}
|
|
10201
|
+
const cached = fileCache.get(file);
|
|
10202
|
+
if (cached !== void 0 && cached.stamp === stamp) return cached.entries;
|
|
10203
|
+
let text = "";
|
|
10204
|
+
try {
|
|
10205
|
+
const raw = readFileSync10(file);
|
|
10206
|
+
text = (file.endsWith(".gz") ? gunzipSync(raw) : raw).toString("utf8");
|
|
10207
|
+
} catch {
|
|
10208
|
+
text = "";
|
|
10209
|
+
}
|
|
10210
|
+
const entries = [];
|
|
10211
|
+
for (const line of text.split("\n")) {
|
|
10212
|
+
if (!line.includes(WRITE_MARKER)) continue;
|
|
10213
|
+
let entry;
|
|
10214
|
+
try {
|
|
10215
|
+
entry = JSON.parse(line);
|
|
10216
|
+
} catch {
|
|
10217
|
+
continue;
|
|
10218
|
+
}
|
|
10219
|
+
if (typeof entry.path !== "string" || typeof entry.sha256 !== "string" || entry.sha256 === "") continue;
|
|
10220
|
+
entries.push([canonicalPath(entry.path), entry.sha256]);
|
|
10221
|
+
}
|
|
10222
|
+
fileCache.set(file, { stamp, entries });
|
|
10223
|
+
return entries;
|
|
10224
|
+
}
|
|
10225
|
+
function loggedWriteDigests(logPath = getLogPath()) {
|
|
10226
|
+
const writes = /* @__PURE__ */ new Map();
|
|
10227
|
+
for (const file of logFiles(logPath)) {
|
|
10228
|
+
for (const [target, sha] of writesIn(file)) {
|
|
10229
|
+
let set = writes.get(target);
|
|
10230
|
+
if (set === void 0) writes.set(target, set = /* @__PURE__ */ new Set());
|
|
10231
|
+
set.add(sha);
|
|
10232
|
+
}
|
|
10233
|
+
}
|
|
10234
|
+
return writes;
|
|
10235
|
+
}
|
|
10236
|
+
function onlyDeployed(anchor, currentFiles, log) {
|
|
10237
|
+
return (target) => {
|
|
10238
|
+
const rel = relative2(resolve4(anchor), resolve4(target)).split(sep3).join("/");
|
|
10239
|
+
if (currentFiles.has(rel)) log(target);
|
|
10240
|
+
};
|
|
10241
|
+
}
|
|
10242
|
+
function wroteTheseBytes(target, onDiskSha256, writes) {
|
|
10243
|
+
return writes.get(canonicalPath(target))?.has(onDiskSha256) === true;
|
|
10244
|
+
}
|
|
10245
|
+
|
|
10126
10246
|
// src/install/conflictTracker.ts
|
|
10127
10247
|
function createConflictTracker(host) {
|
|
10128
10248
|
const conflictState = {
|
|
10129
10249
|
root: null,
|
|
10130
10250
|
recorded: null,
|
|
10131
10251
|
ledgerFiles: null,
|
|
10252
|
+
logged: null,
|
|
10132
10253
|
preserved: [],
|
|
10133
10254
|
migrated: /* @__PURE__ */ new Set(),
|
|
10134
10255
|
staged: /* @__PURE__ */ new Map()
|
|
@@ -10227,6 +10348,7 @@ function createConflictTracker(host) {
|
|
|
10227
10348
|
conflictState.root = root;
|
|
10228
10349
|
conflictState.recorded = null;
|
|
10229
10350
|
conflictState.ledgerFiles = null;
|
|
10351
|
+
conflictState.logged = null;
|
|
10230
10352
|
conflictState.preserved = [];
|
|
10231
10353
|
conflictState.migrated = /* @__PURE__ */ new Set();
|
|
10232
10354
|
conflictState.staged = /* @__PURE__ */ new Map();
|
|
@@ -10239,13 +10361,17 @@ function createConflictTracker(host) {
|
|
|
10239
10361
|
*/
|
|
10240
10362
|
resolve(target, force, would) {
|
|
10241
10363
|
const exists = pathExists(target);
|
|
10242
|
-
const
|
|
10364
|
+
const recordedSha256 = exists ? recordedHashFor(target) : void 0;
|
|
10365
|
+
const unproven = {
|
|
10243
10366
|
exists,
|
|
10244
|
-
recordedSha256
|
|
10367
|
+
recordedSha256,
|
|
10245
10368
|
onDiskSha256: exists ? sha256OfFile(target) : null,
|
|
10246
10369
|
force,
|
|
10247
|
-
ledgerListed: exists && ledgerLists(target)
|
|
10370
|
+
ledgerListed: exists && ledgerLists(target),
|
|
10371
|
+
recordedIsStaged: typeof recordedSha256 === "string" && recordedSha256 === recordedHashFor(sidecarPathFor(target))
|
|
10248
10372
|
};
|
|
10373
|
+
const loggedWrite = logProofApplies(unproven) && wroteTheseBytes(target, unproven.onDiskSha256, conflictState.logged ??= loggedWriteDigests());
|
|
10374
|
+
const base = { ...unproven, loggedWrite };
|
|
10249
10375
|
const migrating = isLedgerMigration(base);
|
|
10250
10376
|
const decision = decideDeployWrite(
|
|
10251
10377
|
migrating ? { ...base, packagedSha256: wouldWriteDigest(target, would) } : base
|
|
@@ -10302,9 +10428,9 @@ function createConflictTracker(host) {
|
|
|
10302
10428
|
|
|
10303
10429
|
// src/install/manifestFiles.ts
|
|
10304
10430
|
var YAML3 = __toESM(require_dist(), 1);
|
|
10305
|
-
import { existsSync as
|
|
10306
|
-
import { homedir as
|
|
10307
|
-
import { isAbsolute as isAbsolute3, join as
|
|
10431
|
+
import { existsSync as existsSync6, readFileSync as readFileSync11 } from "node:fs";
|
|
10432
|
+
import { homedir as homedir7 } from "node:os";
|
|
10433
|
+
import { isAbsolute as isAbsolute3, join as join14, resolve as resolve6 } from "node:path";
|
|
10308
10434
|
function fileEntry(p, kind, hashContent) {
|
|
10309
10435
|
return { path: p, kind, sha256: hashContent ? sha256OfFile(p) : null };
|
|
10310
10436
|
}
|
|
@@ -10327,28 +10453,28 @@ function filesByToolFromBridges(tools, projectRoot, scope, bridgeMarker) {
|
|
|
10327
10453
|
for (const toolId of [...tools].sort()) {
|
|
10328
10454
|
const marker = bridgeMarker(toolId, scope);
|
|
10329
10455
|
if (!marker) continue;
|
|
10330
|
-
const markerPath = isAbsolute3(marker) ? marker :
|
|
10456
|
+
const markerPath = isAbsolute3(marker) ? marker : join14(projectRoot, marker);
|
|
10331
10457
|
out[toolId] = [fileEntry(markerPath, "bridge", false)];
|
|
10332
10458
|
}
|
|
10333
10459
|
return out;
|
|
10334
10460
|
}
|
|
10335
10461
|
function expanduser6(p) {
|
|
10336
|
-
if (p === "~") return
|
|
10462
|
+
if (p === "~") return homedir7();
|
|
10337
10463
|
if (p.startsWith("~/") || process.platform === "win32" && p.startsWith("~\\")) {
|
|
10338
|
-
return
|
|
10464
|
+
return join14(homedir7(), p.slice(2));
|
|
10339
10465
|
}
|
|
10340
10466
|
return p;
|
|
10341
10467
|
}
|
|
10342
10468
|
function resolveRecorded(raw, projectRoot) {
|
|
10343
10469
|
const expanded = expanduser6(raw);
|
|
10344
|
-
return isAbsolute3(expanded) ?
|
|
10470
|
+
return isAbsolute3(expanded) ? resolve6(expanded) : resolve6(projectRoot, expanded);
|
|
10345
10471
|
}
|
|
10346
10472
|
function readRecordedByTool(manifestPath, projectRoot) {
|
|
10347
10473
|
const out = /* @__PURE__ */ new Map();
|
|
10348
|
-
if (!
|
|
10474
|
+
if (!existsSync6(manifestPath)) return out;
|
|
10349
10475
|
let doc;
|
|
10350
10476
|
try {
|
|
10351
|
-
doc = YAML3.parse(
|
|
10477
|
+
doc = YAML3.parse(readFileSync11(manifestPath, "utf8"));
|
|
10352
10478
|
} catch {
|
|
10353
10479
|
return out;
|
|
10354
10480
|
}
|
|
@@ -10402,7 +10528,7 @@ function reconcileToolFiles(fresh, prior, preserved) {
|
|
|
10402
10528
|
const seen = /* @__PURE__ */ new Set();
|
|
10403
10529
|
for (const entry of fresh) {
|
|
10404
10530
|
const raw = entry["path"];
|
|
10405
|
-
if (typeof raw === "string") seen.add(
|
|
10531
|
+
if (typeof raw === "string") seen.add(resolve6(expanduser6(raw)));
|
|
10406
10532
|
}
|
|
10407
10533
|
const out = [...fresh];
|
|
10408
10534
|
for (const file of prior.files) {
|
|
@@ -10418,7 +10544,7 @@ function preservedIndex(preservedTargets, staged) {
|
|
|
10418
10544
|
for (const target of preservedTargets) {
|
|
10419
10545
|
const sidecar = sidecarPathFor(target);
|
|
10420
10546
|
const sha = staged.get(sidecar) ?? null;
|
|
10421
|
-
out.set(
|
|
10547
|
+
out.set(resolve6(target), {
|
|
10422
10548
|
sha256: sha,
|
|
10423
10549
|
sidecar: sha === null ? null : { path: sidecar, kind: "sidecar", sha256: sha }
|
|
10424
10550
|
});
|
|
@@ -11393,17 +11519,17 @@ import {
|
|
|
11393
11519
|
fsyncSync,
|
|
11394
11520
|
mkdirSync as mkdirSync6,
|
|
11395
11521
|
openSync as openSync3,
|
|
11396
|
-
readFileSync as
|
|
11522
|
+
readFileSync as readFileSync17,
|
|
11397
11523
|
renameSync as renameSync6,
|
|
11398
11524
|
unlinkSync as unlinkSync6,
|
|
11399
11525
|
writeSync
|
|
11400
11526
|
} from "node:fs";
|
|
11401
|
-
import { dirname as
|
|
11527
|
+
import { dirname as dirname8, join as join21 } from "node:path";
|
|
11402
11528
|
function atomicWriteFile(target, data, options = {}) {
|
|
11403
11529
|
const mode = options.mode ?? 420;
|
|
11404
|
-
const parent =
|
|
11530
|
+
const parent = dirname8(target);
|
|
11405
11531
|
mkdirSync6(parent, { recursive: true });
|
|
11406
|
-
const tmp =
|
|
11532
|
+
const tmp = join21(parent, `.tmp.${process.pid}.${randSuffix()}`);
|
|
11407
11533
|
let fd = null;
|
|
11408
11534
|
try {
|
|
11409
11535
|
fd = openSync3(tmp, "w", mode);
|
|
@@ -11430,12 +11556,12 @@ function atomicWriteFile(target, data, options = {}) {
|
|
|
11430
11556
|
function atomicAppendLine(target, line) {
|
|
11431
11557
|
let existing = "";
|
|
11432
11558
|
try {
|
|
11433
|
-
existing =
|
|
11559
|
+
existing = readFileSync17(target, "utf8");
|
|
11434
11560
|
} catch {
|
|
11435
11561
|
existing = "";
|
|
11436
11562
|
}
|
|
11437
|
-
const
|
|
11438
|
-
atomicWriteFile(target, `${existing}${
|
|
11563
|
+
const sep11 = existing.length > 0 && !existing.endsWith("\n") ? "\n" : "";
|
|
11564
|
+
atomicWriteFile(target, `${existing}${sep11}${line}
|
|
11439
11565
|
`);
|
|
11440
11566
|
}
|
|
11441
11567
|
function randSuffix() {
|
|
@@ -13081,8 +13207,8 @@ function ruleFileArrives(sourcePath, scope) {
|
|
|
13081
13207
|
if (!sourcePath.endsWith(".md")) {
|
|
13082
13208
|
return true;
|
|
13083
13209
|
}
|
|
13084
|
-
const
|
|
13085
|
-
if (COMPAT_ALWAYS_EXCLUDED.includes(
|
|
13210
|
+
const basename10 = path25.basename(sourcePath);
|
|
13211
|
+
if (COMPAT_ALWAYS_EXCLUDED.includes(basename10)) {
|
|
13086
13212
|
return false;
|
|
13087
13213
|
}
|
|
13088
13214
|
return rule_in_scope(sourcePath, scope.workspaces, scope.packs, scope.roles ?? null);
|
|
@@ -13293,8 +13419,8 @@ function _withPreservedKeys(rendered, original) {
|
|
|
13293
13419
|
}
|
|
13294
13420
|
return ["---", ...keep, "---", "", rendered].join("\n");
|
|
13295
13421
|
}
|
|
13296
|
-
function rewriteAndReport(rulesDir, quiet, info2, warn2, wrappers, preserved = /* @__PURE__ */ new Set()) {
|
|
13297
|
-
const result = rewriteClaudeRules(rulesDir, preserved);
|
|
13422
|
+
function rewriteAndReport(rulesDir, quiet, info2, warn2, wrappers, preserved = /* @__PURE__ */ new Set(), onWrite) {
|
|
13423
|
+
const result = rewriteClaudeRules(rulesDir, preserved, onWrite);
|
|
13298
13424
|
if (wrappers && !quiet) {
|
|
13299
13425
|
if (wrappers.wrapped.length > 0) {
|
|
13300
13426
|
info2(
|
|
@@ -13348,7 +13474,7 @@ function renderClaudeRule(sourceText) {
|
|
|
13348
13474
|
lines.push(pyRstrip(body) + "\n");
|
|
13349
13475
|
return { text: lines.join("\n"), globs: plan.globs, dropped: plan.dropped };
|
|
13350
13476
|
}
|
|
13351
|
-
function rewriteClaudeRules(rulesDir, preserved = /* @__PURE__ */ new Set()) {
|
|
13477
|
+
function rewriteClaudeRules(rulesDir, preserved = /* @__PURE__ */ new Set(), onWrite) {
|
|
13352
13478
|
const result = { rewritten: 0, scoped: [], dropped: [], failed: [] };
|
|
13353
13479
|
let entries;
|
|
13354
13480
|
try {
|
|
@@ -13386,6 +13512,7 @@ function rewriteClaudeRules(rulesDir, preserved = /* @__PURE__ */ new Set()) {
|
|
|
13386
13512
|
});
|
|
13387
13513
|
continue;
|
|
13388
13514
|
}
|
|
13515
|
+
onWrite?.(full);
|
|
13389
13516
|
result.rewritten += 1;
|
|
13390
13517
|
}
|
|
13391
13518
|
const stem = name.slice(0, -3);
|
|
@@ -14041,6 +14168,7 @@ function thinInstalledRuleLayer(opts) {
|
|
|
14041
14168
|
try {
|
|
14042
14169
|
if (next !== installed) {
|
|
14043
14170
|
fs33.writeFileSync(target, next, "utf-8");
|
|
14171
|
+
opts.onWrite?.(target);
|
|
14044
14172
|
rewritten += 1;
|
|
14045
14173
|
}
|
|
14046
14174
|
thinned += 1;
|
|
@@ -14483,8 +14611,8 @@ function installerThinsHost(_hostId, _opts = {}) {
|
|
|
14483
14611
|
}
|
|
14484
14612
|
|
|
14485
14613
|
// src/install/wizard-plan.ts
|
|
14486
|
-
import { homedir as
|
|
14487
|
-
import { isAbsolute as isAbsolute7, join as
|
|
14614
|
+
import { homedir as homedir15 } from "node:os";
|
|
14615
|
+
import { isAbsolute as isAbsolute7, join as join39, resolve as resolve20 } from "node:path";
|
|
14488
14616
|
var USER_SCOPE_PATHS = {
|
|
14489
14617
|
"claude-code": "~/.claude/",
|
|
14490
14618
|
"claude-desktop": "~/Library/Application Support/Claude/",
|
|
@@ -14570,7 +14698,7 @@ function dryRunTargetLines(global, tools, projectTarget) {
|
|
|
14570
14698
|
for (const tool of tools) {
|
|
14571
14699
|
const anchor = USER_SCOPE_PATHS[tool];
|
|
14572
14700
|
if (anchor === void 0) continue;
|
|
14573
|
-
out += ` ${tool} \u2192 ${anchor.startsWith("~/") ?
|
|
14701
|
+
out += ` ${tool} \u2192 ${anchor.startsWith("~/") ? join39(homedir15(), anchor.slice(2)) : anchor}
|
|
14574
14702
|
`;
|
|
14575
14703
|
}
|
|
14576
14704
|
out += " phases: project payload sync \u2014 skipped (global installs write user-scope paths only)\n";
|
|
@@ -19115,7 +19243,7 @@ var settingsSchema = external_exports.object({
|
|
|
19115
19243
|
egress: external_exports.object({
|
|
19116
19244
|
placeholders: external_exports.object({
|
|
19117
19245
|
mode: external_exports.enum(["off", "observe", "protect", "strict"]).default("off").describe(
|
|
19118
|
-
"Dispatcher egress stage (docs/contracts/egress-placeholders-v1.md). off (default) = nothing. observe = detect and count listed values in prompts and tool bodies, types and counts only, and change nothing a hook concern sees. protect = also give every recording and advisory concern a copy with each value replaced by a placeholder token, so local stores keep tokens; guards still see the original. strict = as protect until the host rewrite exists. No mode yet changes what reaches the model; the rule table holds credential
|
|
19246
|
+
"Dispatcher egress stage (docs/contracts/egress-placeholders-v1.md). off (default) = nothing. observe = detect and count listed values in prompts and tool bodies, types and counts only, and change nothing a hook concern sees. protect = also give every recording and advisory concern a copy with each value replaced by a placeholder token, so local stores keep tokens; guards still see the original. strict = as protect until the host rewrite exists. No mode yet changes what reaches the model; the rule table holds credential rows and the validated identifier rows. Project layers only."
|
|
19119
19247
|
)
|
|
19120
19248
|
}).default({})
|
|
19121
19249
|
}).default({}),
|
|
@@ -21370,33 +21498,9 @@ var SCOPE_DETECT_AI_DIRS = [
|
|
|
21370
21498
|
".kilocode"
|
|
21371
21499
|
];
|
|
21372
21500
|
|
|
21373
|
-
// src/install/paths.ts
|
|
21374
|
-
import { homedir as homedir15, tmpdir as tmpdir3 } from "node:os";
|
|
21375
|
-
import { join as join40 } from "node:path";
|
|
21376
|
-
var INSTALL_ROOT_SUBPATH = ".event4u/agent-config";
|
|
21377
|
-
var INSTALL_LOG_FILENAME = "install-log.jsonl";
|
|
21378
|
-
function resolveHome(home) {
|
|
21379
|
-
if (home && home.length > 0) {
|
|
21380
|
-
return home;
|
|
21381
|
-
}
|
|
21382
|
-
const fromOs = homedir15();
|
|
21383
|
-
if (!fromOs) {
|
|
21384
|
-
throw new Error(
|
|
21385
|
-
"Cannot resolve home directory \u2014 both $HOME (POSIX) and $USERPROFILE (Windows) are unset."
|
|
21386
|
-
);
|
|
21387
|
-
}
|
|
21388
|
-
return fromOs;
|
|
21389
|
-
}
|
|
21390
|
-
function getInstallRoot(home) {
|
|
21391
|
-
return join40(resolveHome(home), INSTALL_ROOT_SUBPATH);
|
|
21392
|
-
}
|
|
21393
|
-
function getLogPath(home) {
|
|
21394
|
-
return join40(getInstallRoot(home), INSTALL_LOG_FILENAME);
|
|
21395
|
-
}
|
|
21396
|
-
|
|
21397
21501
|
// src/install/txlog.ts
|
|
21398
21502
|
import { createGzip } from "node:zlib";
|
|
21399
|
-
import { createReadStream, createWriteStream, existsSync as
|
|
21503
|
+
import { createReadStream, createWriteStream, existsSync as existsSync18, readFileSync as readFileSync36, renameSync as renameSync8, statSync as statSync14, unlinkSync as unlinkSync8 } from "node:fs";
|
|
21400
21504
|
import { pipeline } from "node:stream/promises";
|
|
21401
21505
|
var ROTATION_MAX_BYTES = 10 * 1024 * 1024;
|
|
21402
21506
|
var ROTATION_MAX_AGE_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
@@ -21407,12 +21511,12 @@ function appendTxLog(logPath, entry) {
|
|
|
21407
21511
|
atomicAppendLine(logPath, JSON.stringify(entry));
|
|
21408
21512
|
}
|
|
21409
21513
|
function shouldRotate(logPath, now = /* @__PURE__ */ new Date()) {
|
|
21410
|
-
if (!
|
|
21514
|
+
if (!existsSync18(logPath)) {
|
|
21411
21515
|
return false;
|
|
21412
21516
|
}
|
|
21413
21517
|
let size = 0;
|
|
21414
21518
|
try {
|
|
21415
|
-
size =
|
|
21519
|
+
size = statSync14(logPath).size;
|
|
21416
21520
|
} catch {
|
|
21417
21521
|
return false;
|
|
21418
21522
|
}
|
|
@@ -21426,7 +21530,7 @@ function shouldRotate(logPath, now = /* @__PURE__ */ new Date()) {
|
|
|
21426
21530
|
return now.getTime() - firstTs >= ROTATION_MAX_AGE_MS;
|
|
21427
21531
|
}
|
|
21428
21532
|
function rotateLogSync(logPath) {
|
|
21429
|
-
if (!
|
|
21533
|
+
if (!existsSync18(logPath)) {
|
|
21430
21534
|
return;
|
|
21431
21535
|
}
|
|
21432
21536
|
const stamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
@@ -21445,7 +21549,7 @@ async function gzipInPlace(source) {
|
|
|
21445
21549
|
}
|
|
21446
21550
|
function readFirstTimestamp(logPath) {
|
|
21447
21551
|
try {
|
|
21448
|
-
const raw =
|
|
21552
|
+
const raw = readFileSync36(logPath, "utf8");
|
|
21449
21553
|
const firstLine = raw.split("\n", 1)[0] ?? "";
|
|
21450
21554
|
const parsed = tryParseEntry(firstLine);
|
|
21451
21555
|
if (parsed === null) return null;
|
|
@@ -23550,7 +23654,8 @@ function _deploy_global_content(tools, force, package_root, lockfile_path2) {
|
|
|
23550
23654
|
info,
|
|
23551
23655
|
warn,
|
|
23552
23656
|
res,
|
|
23553
|
-
preserved_now
|
|
23657
|
+
preserved_now,
|
|
23658
|
+
onlyDeployed(anchor, current_files, (p) => _log_tx_entry("write", p))
|
|
23554
23659
|
);
|
|
23555
23660
|
deployClaudeCarrier({
|
|
23556
23661
|
packageRoot: package_root,
|
|
@@ -23560,7 +23665,7 @@ function _deploy_global_content(tools, force, package_root, lockfile_path2) {
|
|
|
23560
23665
|
warn,
|
|
23561
23666
|
userPin: state.FULL_PIN,
|
|
23562
23667
|
wantsThin: installerThinsHost(tool_id, { packageRoot: package_root }),
|
|
23563
|
-
thin: (bodyLinkRoot) => describeThinInstalledLayer(thinInstalledRuleLayer({ rulesDir: path38.join(anchor, "rules"), packageRoot: package_root, preserved: preserved_now, bodyLinkRoot }))
|
|
23668
|
+
thin: (bodyLinkRoot) => describeThinInstalledLayer(thinInstalledRuleLayer({ rulesDir: path38.join(anchor, "rules"), packageRoot: package_root, preserved: preserved_now, bodyLinkRoot, onWrite: onlyDeployed(anchor, current_files, (p) => _log_tx_entry("write", p)) }))
|
|
23564
23669
|
});
|
|
23565
23670
|
if (!state.QUIET) for (const l of installReceiptBudgetLines(package_root, void 0, { thisDeploy: /* @__PURE__ */ new Map([[anchor, current_files]]) })) info(l);
|
|
23566
23671
|
}
|