@integrity-labs/agt-cli 0.28.853 → 0.28.854
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/dist/bin/agt.js +5 -5
- package/dist/{chunk-XCAI3GSF.js → chunk-2E2NKILK.js} +2 -2
- package/dist/{chunk-WUXQVP7A.js → chunk-4Z4GFQAD.js} +143 -3
- package/dist/chunk-4Z4GFQAD.js.map +1 -0
- package/dist/{chunk-6BA2US4B.js → chunk-FHOLG6VL.js} +4 -4
- package/dist/{claude-pair-runtime-CJXQTVSC.js → claude-pair-runtime-63TA3LT5.js} +2 -2
- package/dist/lib/manager-worker.js +14 -14
- package/dist/mcp/direct-chat-channel.js +104 -0
- package/dist/mcp/index.js +104 -0
- package/dist/mcp/origami.js +104 -0
- package/dist/mcp/slack-channel.js +104 -0
- package/dist/mcp/telegram-channel.js +104 -0
- package/dist/{persistent-session-YGK7YHPR.js → persistent-session-N4DJ4VXZ.js} +3 -3
- package/dist/{responsiveness-probe-NGWO3JK3.js → responsiveness-probe-GYE5MIVB.js} +3 -3
- package/dist/{session-auth-dead-4UZR5655.js → session-auth-dead-K6B6D3WR.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-WUXQVP7A.js.map +0 -1
- /package/dist/{chunk-XCAI3GSF.js.map → chunk-2E2NKILK.js.map} +0 -0
- /package/dist/{chunk-6BA2US4B.js.map → chunk-FHOLG6VL.js.map} +0 -0
- /package/dist/{claude-pair-runtime-CJXQTVSC.js.map → claude-pair-runtime-63TA3LT5.js.map} +0 -0
- /package/dist/{persistent-session-YGK7YHPR.js.map → persistent-session-N4DJ4VXZ.js.map} +0 -0
- /package/dist/{responsiveness-probe-NGWO3JK3.js.map → responsiveness-probe-GYE5MIVB.js.map} +0 -0
- /package/dist/{session-auth-dead-4UZR5655.js.map → session-auth-dead-K6B6D3WR.js.map} +0 -0
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
parseEnvIntegrations,
|
|
17
17
|
shellQuote,
|
|
18
18
|
summarizeUnanswerablePane
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-2E2NKILK.js";
|
|
20
20
|
import {
|
|
21
21
|
BIND_FAILURE_QUARANTINE_THRESHOLD,
|
|
22
22
|
INTEGRATIONS_SECTION_END,
|
|
@@ -76,7 +76,7 @@ import {
|
|
|
76
76
|
sessionTranscriptDir,
|
|
77
77
|
worseConnectivityOutcome,
|
|
78
78
|
wrapScheduledTaskPrompt
|
|
79
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-4Z4GFQAD.js";
|
|
80
80
|
import {
|
|
81
81
|
parsePsRows
|
|
82
82
|
} from "./chunk-XWVM4KPK.js";
|
|
@@ -6566,7 +6566,7 @@ function exchangeFailureKind(err) {
|
|
|
6566
6566
|
}
|
|
6567
6567
|
|
|
6568
6568
|
// src/lib/api-client.ts
|
|
6569
|
-
var agtCliVersion = true ? "0.28.
|
|
6569
|
+
var agtCliVersion = true ? "0.28.854" : "dev";
|
|
6570
6570
|
var lastConfigHash = null;
|
|
6571
6571
|
function setConfigHash(hash) {
|
|
6572
6572
|
lastConfigHash = hash && hash.length > 0 ? hash : null;
|
|
@@ -10924,4 +10924,4 @@ export {
|
|
|
10924
10924
|
managerInstallSystemUnitCommand,
|
|
10925
10925
|
managerUninstallSystemUnitCommand
|
|
10926
10926
|
};
|
|
10927
|
-
//# sourceMappingURL=chunk-
|
|
10927
|
+
//# sourceMappingURL=chunk-FHOLG6VL.js.map
|
|
@@ -100,7 +100,7 @@ async function spawnPairSession(session) {
|
|
|
100
100
|
return { ok: true };
|
|
101
101
|
} catch {
|
|
102
102
|
}
|
|
103
|
-
const { resolveClaudeBinary } = await import("./persistent-session-
|
|
103
|
+
const { resolveClaudeBinary } = await import("./persistent-session-N4DJ4VXZ.js");
|
|
104
104
|
const claudeBin = resolveClaudeBinary();
|
|
105
105
|
const pairEnv = {
|
|
106
106
|
...process.env,
|
|
@@ -373,4 +373,4 @@ export {
|
|
|
373
373
|
startClaudePair,
|
|
374
374
|
submitClaudePairCode
|
|
375
375
|
};
|
|
376
|
-
//# sourceMappingURL=claude-pair-runtime-
|
|
376
|
+
//# sourceMappingURL=claude-pair-runtime-63TA3LT5.js.map
|
|
@@ -60,7 +60,7 @@ import {
|
|
|
60
60
|
safeWriteJsonAtomic,
|
|
61
61
|
setConfigHash,
|
|
62
62
|
tripClass
|
|
63
|
-
} from "../chunk-
|
|
63
|
+
} from "../chunk-FHOLG6VL.js";
|
|
64
64
|
import {
|
|
65
65
|
getProjectDir as getProjectDir2,
|
|
66
66
|
getReadyTasks,
|
|
@@ -126,7 +126,7 @@ import {
|
|
|
126
126
|
takeZombieDetection,
|
|
127
127
|
toOpencodeModel,
|
|
128
128
|
writeEgressAllowlist
|
|
129
|
-
} from "../chunk-
|
|
129
|
+
} from "../chunk-2E2NKILK.js";
|
|
130
130
|
import {
|
|
131
131
|
ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
|
|
132
132
|
AnchorSessionClient,
|
|
@@ -221,7 +221,7 @@ import {
|
|
|
221
221
|
subagentActivityAgeSeconds,
|
|
222
222
|
sumTranscriptUsageInWindow,
|
|
223
223
|
transcriptActivityAgeSeconds
|
|
224
|
-
} from "../chunk-
|
|
224
|
+
} from "../chunk-4Z4GFQAD.js";
|
|
225
225
|
import {
|
|
226
226
|
reapOrphanChannelMcps
|
|
227
227
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -13000,7 +13000,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
|
|
|
13000
13000
|
var dayRolloverInboundHold = /* @__PURE__ */ new Map();
|
|
13001
13001
|
var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
|
|
13002
13002
|
async function channelInboundActivityAgeSecondsFor(codeName) {
|
|
13003
|
-
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-
|
|
13003
|
+
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-GYE5MIVB.js");
|
|
13004
13004
|
const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
|
|
13005
13005
|
if (newest === null) return null;
|
|
13006
13006
|
return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
|
|
@@ -13668,7 +13668,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
13668
13668
|
var lastVersionCheckAt = 0;
|
|
13669
13669
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
13670
13670
|
var lastResponsivenessProbeAt = 0;
|
|
13671
|
-
var agtCliVersion = true ? "0.28.
|
|
13671
|
+
var agtCliVersion = true ? "0.28.854" : "dev";
|
|
13672
13672
|
function resolveBrewPath(execFileSync2) {
|
|
13673
13673
|
try {
|
|
13674
13674
|
const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -15258,7 +15258,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
15258
15258
|
if (codeNames.length === 0) return;
|
|
15259
15259
|
void (async () => {
|
|
15260
15260
|
try {
|
|
15261
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15261
|
+
const { collectDiagnostics } = await import("../persistent-session-N4DJ4VXZ.js");
|
|
15262
15262
|
await api.post("/host/heartbeat", {
|
|
15263
15263
|
host_id: hostId,
|
|
15264
15264
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -15400,7 +15400,7 @@ async function pollCycleInner() {
|
|
|
15400
15400
|
}
|
|
15401
15401
|
try {
|
|
15402
15402
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
15403
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15403
|
+
const { collectDiagnostics } = await import("../persistent-session-N4DJ4VXZ.js");
|
|
15404
15404
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
15405
15405
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor) : void 0;
|
|
15406
15406
|
let tailscaleHostname;
|
|
@@ -15569,7 +15569,7 @@ async function pollCycleInner() {
|
|
|
15569
15569
|
collectPanelessActivityProbes,
|
|
15570
15570
|
getResponsivenessIntervalMs,
|
|
15571
15571
|
occupancyQualificationClassifications
|
|
15572
|
-
} = await import("../responsiveness-probe-
|
|
15572
|
+
} = await import("../responsiveness-probe-GYE5MIVB.js");
|
|
15573
15573
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
15574
15574
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
15575
15575
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -15686,7 +15686,7 @@ async function pollCycleInner() {
|
|
|
15686
15686
|
collectResponsivenessProbes,
|
|
15687
15687
|
livePendingInboundOldestAgeSeconds,
|
|
15688
15688
|
parkPendingInbound
|
|
15689
|
-
} = await import("../responsiveness-probe-
|
|
15689
|
+
} = await import("../responsiveness-probe-GYE5MIVB.js");
|
|
15690
15690
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
|
|
15691
15691
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
15692
15692
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -15842,7 +15842,7 @@ async function pollCycleInner() {
|
|
|
15842
15842
|
}
|
|
15843
15843
|
try {
|
|
15844
15844
|
const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
|
|
15845
|
-
const { probeSessionAuth } = await import("../session-auth-dead-
|
|
15845
|
+
const { probeSessionAuth } = await import("../session-auth-dead-K6B6D3WR.js");
|
|
15846
15846
|
const observations = [];
|
|
15847
15847
|
const pendingCacheCommits = [];
|
|
15848
15848
|
const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
|
|
@@ -20055,7 +20055,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
20055
20055
|
try {
|
|
20056
20056
|
const freshId = rotateSessionForWedge(codeName);
|
|
20057
20057
|
consecutiveWedgeCycles.delete(codeName);
|
|
20058
|
-
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-
|
|
20058
|
+
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-GYE5MIVB.js");
|
|
20059
20059
|
const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
|
|
20060
20060
|
const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
|
|
20061
20061
|
const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
|
|
@@ -20093,7 +20093,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
20093
20093
|
void api.post("/host/restart-ack", { host_id: hostId, agent_id: agentId, restart_requested_at: requestedAt }).catch((err) => log(`[restart-lane] ack failed for '${codeName}': ${err.message}`));
|
|
20094
20094
|
void (async () => {
|
|
20095
20095
|
try {
|
|
20096
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
20096
|
+
const { collectDiagnostics } = await import("../persistent-session-N4DJ4VXZ.js");
|
|
20097
20097
|
await api.post("/host/heartbeat", {
|
|
20098
20098
|
host_id: hostId,
|
|
20099
20099
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -20139,7 +20139,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
20139
20139
|
}
|
|
20140
20140
|
try {
|
|
20141
20141
|
const hostId = await getHostId();
|
|
20142
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
20142
|
+
const { collectDiagnostics } = await import("../persistent-session-N4DJ4VXZ.js");
|
|
20143
20143
|
await api.post("/host/heartbeat", {
|
|
20144
20144
|
host_id: hostId,
|
|
20145
20145
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -20775,7 +20775,7 @@ async function processClaudePairSessions(agents) {
|
|
|
20775
20775
|
killPairSession,
|
|
20776
20776
|
pairTmuxSession,
|
|
20777
20777
|
finalizeClaudePairOnboarding
|
|
20778
|
-
} = await import("../claude-pair-runtime-
|
|
20778
|
+
} = await import("../claude-pair-runtime-63TA3LT5.js");
|
|
20779
20779
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
20780
20780
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
20781
20781
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -31462,6 +31462,110 @@ var HOURLY_BY_REGION = {
|
|
|
31462
31462
|
};
|
|
31463
31463
|
var KNOWN_PRICING_REGIONS = Object.keys(HOURLY_BY_REGION);
|
|
31464
31464
|
|
|
31465
|
+
// ../core/dist/guardrails/enforcer-registry.js
|
|
31466
|
+
var GUARDRAIL_ENFORCERS = [
|
|
31467
|
+
// ---- Enforced: this definition has its own enforcement point -------------
|
|
31468
|
+
{
|
|
31469
|
+
id: "email.domain_restrict",
|
|
31470
|
+
mechanism: "enforced",
|
|
31471
|
+
stage: "live",
|
|
31472
|
+
enforcer: "packages/api/src/lib/email-domain-guard.ts",
|
|
31473
|
+
effect: "enforceEmailDomainGuard runs at the top of both agent-egress paths; internal_only with zero verified domains takes an explicit AUDITED no-op branch rather than failing open silently."
|
|
31474
|
+
},
|
|
31475
|
+
{
|
|
31476
|
+
// MEASURED, and it corrects a claim ADR-0080 makes about this definition.
|
|
31477
|
+
//
|
|
31478
|
+
// The ADR reports calendar as `enforced` + `stage: 'shadow'`, blocked by
|
|
31479
|
+
// ENG-5868 (caller identity is not threaded to `callIntegrationTool`). Read
|
|
31480
|
+
// literally that says an org cannot get redaction today, and that is not
|
|
31481
|
+
// what the code does. `decideCalendarRedactionMode` (calendar-policy.ts) is
|
|
31482
|
+
// FAIL-CLOSED: with the caller unresolvable it returns `redact`, not
|
|
31483
|
+
// pass-through. `redactCalendarToolResponseIfNeeded` then calls
|
|
31484
|
+
// `applyRedactionToResponse` for every response whenever `config.stage` is
|
|
31485
|
+
// `enforce`. So an org that sets the stage gets real redaction — ENG-5868
|
|
31486
|
+
// costs the control its PRECISION (it cannot spare the principal), not its
|
|
31487
|
+
// ability to act.
|
|
31488
|
+
//
|
|
31489
|
+
// The stage is therefore per-ORG configuration, which ADR-0080 decision 1
|
|
31490
|
+
// is explicit is the effectiveness axis the static union deliberately does
|
|
31491
|
+
// not carry. `effectiveCalendarEnforcement` in the CLAUDE.md renderer owns
|
|
31492
|
+
// it, and since ENG-10104 caps `enforce` to `warn` whenever the org's stage
|
|
31493
|
+
// is not `enforce`.
|
|
31494
|
+
id: "calendar.confidentiality",
|
|
31495
|
+
mechanism: "enforced",
|
|
31496
|
+
stage: "live",
|
|
31497
|
+
enforcer: "packages/api/src/lib/calendar-confidentiality-guard.ts",
|
|
31498
|
+
effect: "at config.stage=enforce, redacts summary/description/attendees/location out of calendar read responses; at shadow/warn it writes a would_redact audit row and returns the response unchanged."
|
|
31499
|
+
},
|
|
31500
|
+
// ---- Delegated: read by another definition's enforcement point -----------
|
|
31501
|
+
//
|
|
31502
|
+
// Both can block, because their owner's point is live — which is the question
|
|
31503
|
+
// `guardrailCanBlock` asks and the right answer to it. It is NOT the whole
|
|
31504
|
+
// story for these two, and the gap has its own ticket: the org's email guard
|
|
31505
|
+
// STAGE is threaded into the prompt shape for `email.domain_restrict`'s id
|
|
31506
|
+
// alone (`host-runtime.ts`, the ENG-7829 fix), so a row of either id stored at
|
|
31507
|
+
// `enforce` on a shadow-stage org still renders under "must comply" with
|
|
31508
|
+
// nothing capping it. That is the effectiveness axis, not the mechanism one —
|
|
31509
|
+
// ENG-10110.
|
|
31510
|
+
{
|
|
31511
|
+
id: "email.require_approval",
|
|
31512
|
+
mechanism: "delegated",
|
|
31513
|
+
ownedBy: "email.domain_restrict",
|
|
31514
|
+
enforcer: "packages/api/src/lib/email-domain-guard.ts",
|
|
31515
|
+
effect: "routes a send to an approver instead of letting it leave."
|
|
31516
|
+
},
|
|
31517
|
+
{
|
|
31518
|
+
id: "email.mail_rules",
|
|
31519
|
+
mechanism: "delegated",
|
|
31520
|
+
ownedBy: "email.domain_restrict",
|
|
31521
|
+
enforcer: "packages/api/src/lib/email-domain-guard.ts",
|
|
31522
|
+
effect: "gates mail-rule creation/modification on the same egress path."
|
|
31523
|
+
},
|
|
31524
|
+
// ---- Advisory: seeded, applied, rendered — and read by nothing -----------
|
|
31525
|
+
//
|
|
31526
|
+
// These are NOT dead config. They are presented to operators in the console
|
|
31527
|
+
// and to agents in CLAUDE.md, three of them under a heading that promises the
|
|
31528
|
+
// violation is blocked. Listed individually rather than as a wildcard so that
|
|
31529
|
+
// fixing one is a one-line diff from `advisory` to `enforced`.
|
|
31530
|
+
//
|
|
31531
|
+
// The ticket is ENG-9800, not ENG-9874. ENG-9874 catalogued these and is
|
|
31532
|
+
// closed; a closed ticket tracks nothing, which is the same shrug an absent
|
|
31533
|
+
// one would be. ENG-9800 is the open sweep that owns making them real.
|
|
31534
|
+
{
|
|
31535
|
+
id: "require-approval-for-actions",
|
|
31536
|
+
mechanism: "advisory",
|
|
31537
|
+
reason: "unimplemented",
|
|
31538
|
+
ticket: "ENG-9800",
|
|
31539
|
+
note: `Rendered to agents as "violation blocks the action". Nothing reads it. The ENG-8562 incident is this guardrail's promise, unkept.`
|
|
31540
|
+
},
|
|
31541
|
+
{
|
|
31542
|
+
id: "data.pii_access",
|
|
31543
|
+
mechanism: "advisory",
|
|
31544
|
+
reason: "unimplemented",
|
|
31545
|
+
ticket: "ENG-9800",
|
|
31546
|
+
note: "Rendered as Enforced with block_export semantics; no export path consults it."
|
|
31547
|
+
},
|
|
31548
|
+
{
|
|
31549
|
+
id: "data.credential_access",
|
|
31550
|
+
mechanism: "advisory",
|
|
31551
|
+
reason: "unimplemented",
|
|
31552
|
+
ticket: "ENG-9800",
|
|
31553
|
+
note: "Rendered as Enforced with block_read/block_write; no credential path consults it."
|
|
31554
|
+
},
|
|
31555
|
+
{ id: "comm.social_posting", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
31556
|
+
{ id: "compliance.audit_all", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
31557
|
+
{ id: "no-external-network", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
31558
|
+
{ id: "no-pii-in-output", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
31559
|
+
{ id: "restrict-file-access", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
31560
|
+
{ id: "schedule.operating_hours", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
31561
|
+
{ id: "spend.hourly_limit", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
31562
|
+
{ id: "tool.allow_list", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
31563
|
+
{ id: "tool.block_list", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
31564
|
+
{ id: "tool.financial_txn", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
31565
|
+
{ id: "working-hours-only", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" }
|
|
31566
|
+
];
|
|
31567
|
+
var BY_ID = new Map(GUARDRAIL_ENFORCERS.map((e) => [e.id, e]));
|
|
31568
|
+
|
|
31465
31569
|
// ../core/dist/provisioning/frameworks/claudecode/agent-rules.js
|
|
31466
31570
|
var MAX_AGENT_RULES = 8;
|
|
31467
31571
|
var MAX_AGENT_RULE_CHARS = 200;
|
package/dist/mcp/index.js
CHANGED
|
@@ -24011,6 +24011,110 @@ var HOURLY_BY_REGION = {
|
|
|
24011
24011
|
};
|
|
24012
24012
|
var KNOWN_PRICING_REGIONS = Object.keys(HOURLY_BY_REGION);
|
|
24013
24013
|
|
|
24014
|
+
// ../core/dist/guardrails/enforcer-registry.js
|
|
24015
|
+
var GUARDRAIL_ENFORCERS = [
|
|
24016
|
+
// ---- Enforced: this definition has its own enforcement point -------------
|
|
24017
|
+
{
|
|
24018
|
+
id: "email.domain_restrict",
|
|
24019
|
+
mechanism: "enforced",
|
|
24020
|
+
stage: "live",
|
|
24021
|
+
enforcer: "packages/api/src/lib/email-domain-guard.ts",
|
|
24022
|
+
effect: "enforceEmailDomainGuard runs at the top of both agent-egress paths; internal_only with zero verified domains takes an explicit AUDITED no-op branch rather than failing open silently."
|
|
24023
|
+
},
|
|
24024
|
+
{
|
|
24025
|
+
// MEASURED, and it corrects a claim ADR-0080 makes about this definition.
|
|
24026
|
+
//
|
|
24027
|
+
// The ADR reports calendar as `enforced` + `stage: 'shadow'`, blocked by
|
|
24028
|
+
// ENG-5868 (caller identity is not threaded to `callIntegrationTool`). Read
|
|
24029
|
+
// literally that says an org cannot get redaction today, and that is not
|
|
24030
|
+
// what the code does. `decideCalendarRedactionMode` (calendar-policy.ts) is
|
|
24031
|
+
// FAIL-CLOSED: with the caller unresolvable it returns `redact`, not
|
|
24032
|
+
// pass-through. `redactCalendarToolResponseIfNeeded` then calls
|
|
24033
|
+
// `applyRedactionToResponse` for every response whenever `config.stage` is
|
|
24034
|
+
// `enforce`. So an org that sets the stage gets real redaction — ENG-5868
|
|
24035
|
+
// costs the control its PRECISION (it cannot spare the principal), not its
|
|
24036
|
+
// ability to act.
|
|
24037
|
+
//
|
|
24038
|
+
// The stage is therefore per-ORG configuration, which ADR-0080 decision 1
|
|
24039
|
+
// is explicit is the effectiveness axis the static union deliberately does
|
|
24040
|
+
// not carry. `effectiveCalendarEnforcement` in the CLAUDE.md renderer owns
|
|
24041
|
+
// it, and since ENG-10104 caps `enforce` to `warn` whenever the org's stage
|
|
24042
|
+
// is not `enforce`.
|
|
24043
|
+
id: "calendar.confidentiality",
|
|
24044
|
+
mechanism: "enforced",
|
|
24045
|
+
stage: "live",
|
|
24046
|
+
enforcer: "packages/api/src/lib/calendar-confidentiality-guard.ts",
|
|
24047
|
+
effect: "at config.stage=enforce, redacts summary/description/attendees/location out of calendar read responses; at shadow/warn it writes a would_redact audit row and returns the response unchanged."
|
|
24048
|
+
},
|
|
24049
|
+
// ---- Delegated: read by another definition's enforcement point -----------
|
|
24050
|
+
//
|
|
24051
|
+
// Both can block, because their owner's point is live — which is the question
|
|
24052
|
+
// `guardrailCanBlock` asks and the right answer to it. It is NOT the whole
|
|
24053
|
+
// story for these two, and the gap has its own ticket: the org's email guard
|
|
24054
|
+
// STAGE is threaded into the prompt shape for `email.domain_restrict`'s id
|
|
24055
|
+
// alone (`host-runtime.ts`, the ENG-7829 fix), so a row of either id stored at
|
|
24056
|
+
// `enforce` on a shadow-stage org still renders under "must comply" with
|
|
24057
|
+
// nothing capping it. That is the effectiveness axis, not the mechanism one —
|
|
24058
|
+
// ENG-10110.
|
|
24059
|
+
{
|
|
24060
|
+
id: "email.require_approval",
|
|
24061
|
+
mechanism: "delegated",
|
|
24062
|
+
ownedBy: "email.domain_restrict",
|
|
24063
|
+
enforcer: "packages/api/src/lib/email-domain-guard.ts",
|
|
24064
|
+
effect: "routes a send to an approver instead of letting it leave."
|
|
24065
|
+
},
|
|
24066
|
+
{
|
|
24067
|
+
id: "email.mail_rules",
|
|
24068
|
+
mechanism: "delegated",
|
|
24069
|
+
ownedBy: "email.domain_restrict",
|
|
24070
|
+
enforcer: "packages/api/src/lib/email-domain-guard.ts",
|
|
24071
|
+
effect: "gates mail-rule creation/modification on the same egress path."
|
|
24072
|
+
},
|
|
24073
|
+
// ---- Advisory: seeded, applied, rendered — and read by nothing -----------
|
|
24074
|
+
//
|
|
24075
|
+
// These are NOT dead config. They are presented to operators in the console
|
|
24076
|
+
// and to agents in CLAUDE.md, three of them under a heading that promises the
|
|
24077
|
+
// violation is blocked. Listed individually rather than as a wildcard so that
|
|
24078
|
+
// fixing one is a one-line diff from `advisory` to `enforced`.
|
|
24079
|
+
//
|
|
24080
|
+
// The ticket is ENG-9800, not ENG-9874. ENG-9874 catalogued these and is
|
|
24081
|
+
// closed; a closed ticket tracks nothing, which is the same shrug an absent
|
|
24082
|
+
// one would be. ENG-9800 is the open sweep that owns making them real.
|
|
24083
|
+
{
|
|
24084
|
+
id: "require-approval-for-actions",
|
|
24085
|
+
mechanism: "advisory",
|
|
24086
|
+
reason: "unimplemented",
|
|
24087
|
+
ticket: "ENG-9800",
|
|
24088
|
+
note: `Rendered to agents as "violation blocks the action". Nothing reads it. The ENG-8562 incident is this guardrail's promise, unkept.`
|
|
24089
|
+
},
|
|
24090
|
+
{
|
|
24091
|
+
id: "data.pii_access",
|
|
24092
|
+
mechanism: "advisory",
|
|
24093
|
+
reason: "unimplemented",
|
|
24094
|
+
ticket: "ENG-9800",
|
|
24095
|
+
note: "Rendered as Enforced with block_export semantics; no export path consults it."
|
|
24096
|
+
},
|
|
24097
|
+
{
|
|
24098
|
+
id: "data.credential_access",
|
|
24099
|
+
mechanism: "advisory",
|
|
24100
|
+
reason: "unimplemented",
|
|
24101
|
+
ticket: "ENG-9800",
|
|
24102
|
+
note: "Rendered as Enforced with block_read/block_write; no credential path consults it."
|
|
24103
|
+
},
|
|
24104
|
+
{ id: "comm.social_posting", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
24105
|
+
{ id: "compliance.audit_all", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
24106
|
+
{ id: "no-external-network", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
24107
|
+
{ id: "no-pii-in-output", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
24108
|
+
{ id: "restrict-file-access", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
24109
|
+
{ id: "schedule.operating_hours", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
24110
|
+
{ id: "spend.hourly_limit", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
24111
|
+
{ id: "tool.allow_list", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
24112
|
+
{ id: "tool.block_list", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
24113
|
+
{ id: "tool.financial_txn", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
24114
|
+
{ id: "working-hours-only", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" }
|
|
24115
|
+
];
|
|
24116
|
+
var BY_ID = new Map(GUARDRAIL_ENFORCERS.map((e) => [e.id, e]));
|
|
24117
|
+
|
|
24014
24118
|
// ../core/dist/provisioning/frameworks/claudecode/agent-rules.js
|
|
24015
24119
|
var MAX_AGENT_RULES = 8;
|
|
24016
24120
|
var MAX_AGENT_RULE_CHARS = 200;
|
package/dist/mcp/origami.js
CHANGED
|
@@ -38167,6 +38167,110 @@ var HOURLY_BY_REGION = {
|
|
|
38167
38167
|
};
|
|
38168
38168
|
var KNOWN_PRICING_REGIONS = Object.keys(HOURLY_BY_REGION);
|
|
38169
38169
|
|
|
38170
|
+
// ../core/dist/guardrails/enforcer-registry.js
|
|
38171
|
+
var GUARDRAIL_ENFORCERS = [
|
|
38172
|
+
// ---- Enforced: this definition has its own enforcement point -------------
|
|
38173
|
+
{
|
|
38174
|
+
id: "email.domain_restrict",
|
|
38175
|
+
mechanism: "enforced",
|
|
38176
|
+
stage: "live",
|
|
38177
|
+
enforcer: "packages/api/src/lib/email-domain-guard.ts",
|
|
38178
|
+
effect: "enforceEmailDomainGuard runs at the top of both agent-egress paths; internal_only with zero verified domains takes an explicit AUDITED no-op branch rather than failing open silently."
|
|
38179
|
+
},
|
|
38180
|
+
{
|
|
38181
|
+
// MEASURED, and it corrects a claim ADR-0080 makes about this definition.
|
|
38182
|
+
//
|
|
38183
|
+
// The ADR reports calendar as `enforced` + `stage: 'shadow'`, blocked by
|
|
38184
|
+
// ENG-5868 (caller identity is not threaded to `callIntegrationTool`). Read
|
|
38185
|
+
// literally that says an org cannot get redaction today, and that is not
|
|
38186
|
+
// what the code does. `decideCalendarRedactionMode` (calendar-policy.ts) is
|
|
38187
|
+
// FAIL-CLOSED: with the caller unresolvable it returns `redact`, not
|
|
38188
|
+
// pass-through. `redactCalendarToolResponseIfNeeded` then calls
|
|
38189
|
+
// `applyRedactionToResponse` for every response whenever `config.stage` is
|
|
38190
|
+
// `enforce`. So an org that sets the stage gets real redaction — ENG-5868
|
|
38191
|
+
// costs the control its PRECISION (it cannot spare the principal), not its
|
|
38192
|
+
// ability to act.
|
|
38193
|
+
//
|
|
38194
|
+
// The stage is therefore per-ORG configuration, which ADR-0080 decision 1
|
|
38195
|
+
// is explicit is the effectiveness axis the static union deliberately does
|
|
38196
|
+
// not carry. `effectiveCalendarEnforcement` in the CLAUDE.md renderer owns
|
|
38197
|
+
// it, and since ENG-10104 caps `enforce` to `warn` whenever the org's stage
|
|
38198
|
+
// is not `enforce`.
|
|
38199
|
+
id: "calendar.confidentiality",
|
|
38200
|
+
mechanism: "enforced",
|
|
38201
|
+
stage: "live",
|
|
38202
|
+
enforcer: "packages/api/src/lib/calendar-confidentiality-guard.ts",
|
|
38203
|
+
effect: "at config.stage=enforce, redacts summary/description/attendees/location out of calendar read responses; at shadow/warn it writes a would_redact audit row and returns the response unchanged."
|
|
38204
|
+
},
|
|
38205
|
+
// ---- Delegated: read by another definition's enforcement point -----------
|
|
38206
|
+
//
|
|
38207
|
+
// Both can block, because their owner's point is live — which is the question
|
|
38208
|
+
// `guardrailCanBlock` asks and the right answer to it. It is NOT the whole
|
|
38209
|
+
// story for these two, and the gap has its own ticket: the org's email guard
|
|
38210
|
+
// STAGE is threaded into the prompt shape for `email.domain_restrict`'s id
|
|
38211
|
+
// alone (`host-runtime.ts`, the ENG-7829 fix), so a row of either id stored at
|
|
38212
|
+
// `enforce` on a shadow-stage org still renders under "must comply" with
|
|
38213
|
+
// nothing capping it. That is the effectiveness axis, not the mechanism one —
|
|
38214
|
+
// ENG-10110.
|
|
38215
|
+
{
|
|
38216
|
+
id: "email.require_approval",
|
|
38217
|
+
mechanism: "delegated",
|
|
38218
|
+
ownedBy: "email.domain_restrict",
|
|
38219
|
+
enforcer: "packages/api/src/lib/email-domain-guard.ts",
|
|
38220
|
+
effect: "routes a send to an approver instead of letting it leave."
|
|
38221
|
+
},
|
|
38222
|
+
{
|
|
38223
|
+
id: "email.mail_rules",
|
|
38224
|
+
mechanism: "delegated",
|
|
38225
|
+
ownedBy: "email.domain_restrict",
|
|
38226
|
+
enforcer: "packages/api/src/lib/email-domain-guard.ts",
|
|
38227
|
+
effect: "gates mail-rule creation/modification on the same egress path."
|
|
38228
|
+
},
|
|
38229
|
+
// ---- Advisory: seeded, applied, rendered — and read by nothing -----------
|
|
38230
|
+
//
|
|
38231
|
+
// These are NOT dead config. They are presented to operators in the console
|
|
38232
|
+
// and to agents in CLAUDE.md, three of them under a heading that promises the
|
|
38233
|
+
// violation is blocked. Listed individually rather than as a wildcard so that
|
|
38234
|
+
// fixing one is a one-line diff from `advisory` to `enforced`.
|
|
38235
|
+
//
|
|
38236
|
+
// The ticket is ENG-9800, not ENG-9874. ENG-9874 catalogued these and is
|
|
38237
|
+
// closed; a closed ticket tracks nothing, which is the same shrug an absent
|
|
38238
|
+
// one would be. ENG-9800 is the open sweep that owns making them real.
|
|
38239
|
+
{
|
|
38240
|
+
id: "require-approval-for-actions",
|
|
38241
|
+
mechanism: "advisory",
|
|
38242
|
+
reason: "unimplemented",
|
|
38243
|
+
ticket: "ENG-9800",
|
|
38244
|
+
note: `Rendered to agents as "violation blocks the action". Nothing reads it. The ENG-8562 incident is this guardrail's promise, unkept.`
|
|
38245
|
+
},
|
|
38246
|
+
{
|
|
38247
|
+
id: "data.pii_access",
|
|
38248
|
+
mechanism: "advisory",
|
|
38249
|
+
reason: "unimplemented",
|
|
38250
|
+
ticket: "ENG-9800",
|
|
38251
|
+
note: "Rendered as Enforced with block_export semantics; no export path consults it."
|
|
38252
|
+
},
|
|
38253
|
+
{
|
|
38254
|
+
id: "data.credential_access",
|
|
38255
|
+
mechanism: "advisory",
|
|
38256
|
+
reason: "unimplemented",
|
|
38257
|
+
ticket: "ENG-9800",
|
|
38258
|
+
note: "Rendered as Enforced with block_read/block_write; no credential path consults it."
|
|
38259
|
+
},
|
|
38260
|
+
{ id: "comm.social_posting", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
38261
|
+
{ id: "compliance.audit_all", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
38262
|
+
{ id: "no-external-network", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
38263
|
+
{ id: "no-pii-in-output", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
38264
|
+
{ id: "restrict-file-access", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
38265
|
+
{ id: "schedule.operating_hours", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
38266
|
+
{ id: "spend.hourly_limit", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
38267
|
+
{ id: "tool.allow_list", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
38268
|
+
{ id: "tool.block_list", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
38269
|
+
{ id: "tool.financial_txn", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
38270
|
+
{ id: "working-hours-only", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" }
|
|
38271
|
+
];
|
|
38272
|
+
var BY_ID = new Map(GUARDRAIL_ENFORCERS.map((e) => [e.id, e]));
|
|
38273
|
+
|
|
38170
38274
|
// ../core/dist/provisioning/frameworks/claudecode/agent-rules.js
|
|
38171
38275
|
var MAX_AGENT_RULES = 8;
|
|
38172
38276
|
var MAX_AGENT_RULE_CHARS = 200;
|
|
@@ -32309,6 +32309,110 @@ var HOURLY_BY_REGION = {
|
|
|
32309
32309
|
};
|
|
32310
32310
|
var KNOWN_PRICING_REGIONS = Object.keys(HOURLY_BY_REGION);
|
|
32311
32311
|
|
|
32312
|
+
// ../core/dist/guardrails/enforcer-registry.js
|
|
32313
|
+
var GUARDRAIL_ENFORCERS = [
|
|
32314
|
+
// ---- Enforced: this definition has its own enforcement point -------------
|
|
32315
|
+
{
|
|
32316
|
+
id: "email.domain_restrict",
|
|
32317
|
+
mechanism: "enforced",
|
|
32318
|
+
stage: "live",
|
|
32319
|
+
enforcer: "packages/api/src/lib/email-domain-guard.ts",
|
|
32320
|
+
effect: "enforceEmailDomainGuard runs at the top of both agent-egress paths; internal_only with zero verified domains takes an explicit AUDITED no-op branch rather than failing open silently."
|
|
32321
|
+
},
|
|
32322
|
+
{
|
|
32323
|
+
// MEASURED, and it corrects a claim ADR-0080 makes about this definition.
|
|
32324
|
+
//
|
|
32325
|
+
// The ADR reports calendar as `enforced` + `stage: 'shadow'`, blocked by
|
|
32326
|
+
// ENG-5868 (caller identity is not threaded to `callIntegrationTool`). Read
|
|
32327
|
+
// literally that says an org cannot get redaction today, and that is not
|
|
32328
|
+
// what the code does. `decideCalendarRedactionMode` (calendar-policy.ts) is
|
|
32329
|
+
// FAIL-CLOSED: with the caller unresolvable it returns `redact`, not
|
|
32330
|
+
// pass-through. `redactCalendarToolResponseIfNeeded` then calls
|
|
32331
|
+
// `applyRedactionToResponse` for every response whenever `config.stage` is
|
|
32332
|
+
// `enforce`. So an org that sets the stage gets real redaction — ENG-5868
|
|
32333
|
+
// costs the control its PRECISION (it cannot spare the principal), not its
|
|
32334
|
+
// ability to act.
|
|
32335
|
+
//
|
|
32336
|
+
// The stage is therefore per-ORG configuration, which ADR-0080 decision 1
|
|
32337
|
+
// is explicit is the effectiveness axis the static union deliberately does
|
|
32338
|
+
// not carry. `effectiveCalendarEnforcement` in the CLAUDE.md renderer owns
|
|
32339
|
+
// it, and since ENG-10104 caps `enforce` to `warn` whenever the org's stage
|
|
32340
|
+
// is not `enforce`.
|
|
32341
|
+
id: "calendar.confidentiality",
|
|
32342
|
+
mechanism: "enforced",
|
|
32343
|
+
stage: "live",
|
|
32344
|
+
enforcer: "packages/api/src/lib/calendar-confidentiality-guard.ts",
|
|
32345
|
+
effect: "at config.stage=enforce, redacts summary/description/attendees/location out of calendar read responses; at shadow/warn it writes a would_redact audit row and returns the response unchanged."
|
|
32346
|
+
},
|
|
32347
|
+
// ---- Delegated: read by another definition's enforcement point -----------
|
|
32348
|
+
//
|
|
32349
|
+
// Both can block, because their owner's point is live — which is the question
|
|
32350
|
+
// `guardrailCanBlock` asks and the right answer to it. It is NOT the whole
|
|
32351
|
+
// story for these two, and the gap has its own ticket: the org's email guard
|
|
32352
|
+
// STAGE is threaded into the prompt shape for `email.domain_restrict`'s id
|
|
32353
|
+
// alone (`host-runtime.ts`, the ENG-7829 fix), so a row of either id stored at
|
|
32354
|
+
// `enforce` on a shadow-stage org still renders under "must comply" with
|
|
32355
|
+
// nothing capping it. That is the effectiveness axis, not the mechanism one —
|
|
32356
|
+
// ENG-10110.
|
|
32357
|
+
{
|
|
32358
|
+
id: "email.require_approval",
|
|
32359
|
+
mechanism: "delegated",
|
|
32360
|
+
ownedBy: "email.domain_restrict",
|
|
32361
|
+
enforcer: "packages/api/src/lib/email-domain-guard.ts",
|
|
32362
|
+
effect: "routes a send to an approver instead of letting it leave."
|
|
32363
|
+
},
|
|
32364
|
+
{
|
|
32365
|
+
id: "email.mail_rules",
|
|
32366
|
+
mechanism: "delegated",
|
|
32367
|
+
ownedBy: "email.domain_restrict",
|
|
32368
|
+
enforcer: "packages/api/src/lib/email-domain-guard.ts",
|
|
32369
|
+
effect: "gates mail-rule creation/modification on the same egress path."
|
|
32370
|
+
},
|
|
32371
|
+
// ---- Advisory: seeded, applied, rendered — and read by nothing -----------
|
|
32372
|
+
//
|
|
32373
|
+
// These are NOT dead config. They are presented to operators in the console
|
|
32374
|
+
// and to agents in CLAUDE.md, three of them under a heading that promises the
|
|
32375
|
+
// violation is blocked. Listed individually rather than as a wildcard so that
|
|
32376
|
+
// fixing one is a one-line diff from `advisory` to `enforced`.
|
|
32377
|
+
//
|
|
32378
|
+
// The ticket is ENG-9800, not ENG-9874. ENG-9874 catalogued these and is
|
|
32379
|
+
// closed; a closed ticket tracks nothing, which is the same shrug an absent
|
|
32380
|
+
// one would be. ENG-9800 is the open sweep that owns making them real.
|
|
32381
|
+
{
|
|
32382
|
+
id: "require-approval-for-actions",
|
|
32383
|
+
mechanism: "advisory",
|
|
32384
|
+
reason: "unimplemented",
|
|
32385
|
+
ticket: "ENG-9800",
|
|
32386
|
+
note: `Rendered to agents as "violation blocks the action". Nothing reads it. The ENG-8562 incident is this guardrail's promise, unkept.`
|
|
32387
|
+
},
|
|
32388
|
+
{
|
|
32389
|
+
id: "data.pii_access",
|
|
32390
|
+
mechanism: "advisory",
|
|
32391
|
+
reason: "unimplemented",
|
|
32392
|
+
ticket: "ENG-9800",
|
|
32393
|
+
note: "Rendered as Enforced with block_export semantics; no export path consults it."
|
|
32394
|
+
},
|
|
32395
|
+
{
|
|
32396
|
+
id: "data.credential_access",
|
|
32397
|
+
mechanism: "advisory",
|
|
32398
|
+
reason: "unimplemented",
|
|
32399
|
+
ticket: "ENG-9800",
|
|
32400
|
+
note: "Rendered as Enforced with block_read/block_write; no credential path consults it."
|
|
32401
|
+
},
|
|
32402
|
+
{ id: "comm.social_posting", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
32403
|
+
{ id: "compliance.audit_all", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
32404
|
+
{ id: "no-external-network", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
32405
|
+
{ id: "no-pii-in-output", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
32406
|
+
{ id: "restrict-file-access", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
32407
|
+
{ id: "schedule.operating_hours", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
32408
|
+
{ id: "spend.hourly_limit", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
32409
|
+
{ id: "tool.allow_list", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
32410
|
+
{ id: "tool.block_list", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
32411
|
+
{ id: "tool.financial_txn", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" },
|
|
32412
|
+
{ id: "working-hours-only", mechanism: "advisory", reason: "unimplemented", ticket: "ENG-9800" }
|
|
32413
|
+
];
|
|
32414
|
+
var BY_ID = new Map(GUARDRAIL_ENFORCERS.map((e) => [e.id, e]));
|
|
32415
|
+
|
|
32312
32416
|
// ../core/dist/provisioning/frameworks/claudecode/agent-rules.js
|
|
32313
32417
|
var MAX_AGENT_RULES = 8;
|
|
32314
32418
|
var MAX_AGENT_RULE_CHARS = 200;
|