@integrity-labs/agt-cli 0.28.1097 → 0.28.1098
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-3RGBEI34.js → chunk-3SNPFRW3.js} +4 -4
- package/dist/{chunk-I7XCW4G6.js → chunk-AVM2BBSX.js} +25 -4
- package/dist/chunk-AVM2BBSX.js.map +1 -0
- package/dist/{chunk-EGVRUVOF.js → chunk-WQQGPPQW.js} +2 -2
- package/dist/{claude-pair-runtime-XXBIFMD5.js → claude-pair-runtime-MZXXBNGF.js} +2 -2
- package/dist/lib/manager-worker.js +16 -16
- package/dist/mcp/direct-chat-channel.js +11 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/origami.js +11 -0
- package/dist/mcp/slack-channel.js +11 -0
- package/dist/mcp/telegram-channel.js +11 -0
- package/dist/{persistent-session-VGORZUKN.js → persistent-session-WHEFQHXF.js} +3 -3
- package/dist/{responsiveness-probe-CWOTGPZC.js → responsiveness-probe-WHV2OHXM.js} +3 -3
- package/dist/{session-auth-dead-P3AXR4PR.js → session-auth-dead-H3YYJLPC.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-I7XCW4G6.js.map +0 -1
- /package/dist/{chunk-3RGBEI34.js.map → chunk-3SNPFRW3.js.map} +0 -0
- /package/dist/{chunk-EGVRUVOF.js.map → chunk-WQQGPPQW.js.map} +0 -0
- /package/dist/{claude-pair-runtime-XXBIFMD5.js.map → claude-pair-runtime-MZXXBNGF.js.map} +0 -0
- /package/dist/{persistent-session-VGORZUKN.js.map → persistent-session-WHEFQHXF.js.map} +0 -0
- /package/dist/{responsiveness-probe-CWOTGPZC.js.map → responsiveness-probe-WHV2OHXM.js.map} +0 -0
- /package/dist/{session-auth-dead-P3AXR4PR.js.map → session-auth-dead-H3YYJLPC.js.map} +0 -0
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
rotateDailySession,
|
|
25
25
|
sessionFileExists,
|
|
26
26
|
todayLocalIso
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-AVM2BBSX.js";
|
|
28
28
|
import {
|
|
29
29
|
classifyUnanswerablePane,
|
|
30
30
|
findUsageLimitResetHint,
|
|
@@ -6113,4 +6113,4 @@ export {
|
|
|
6113
6113
|
stopAllSessionsAndWait,
|
|
6114
6114
|
getProjectDir
|
|
6115
6115
|
};
|
|
6116
|
-
//# sourceMappingURL=chunk-
|
|
6116
|
+
//# sourceMappingURL=chunk-WQQGPPQW.js.map
|
|
@@ -266,7 +266,7 @@ async function spawnPairSession(session) {
|
|
|
266
266
|
return { ok: true };
|
|
267
267
|
} catch {
|
|
268
268
|
}
|
|
269
|
-
const { resolveClaudeBinary } = await import("./persistent-session-
|
|
269
|
+
const { resolveClaudeBinary } = await import("./persistent-session-WHEFQHXF.js");
|
|
270
270
|
const claudeBin = resolveClaudeBinary();
|
|
271
271
|
const pairEnv = {
|
|
272
272
|
...process.env,
|
|
@@ -734,4 +734,4 @@ export {
|
|
|
734
734
|
startClaudePair,
|
|
735
735
|
submitClaudePairCode
|
|
736
736
|
};
|
|
737
|
-
//# sourceMappingURL=claude-pair-runtime-
|
|
737
|
+
//# sourceMappingURL=claude-pair-runtime-MZXXBNGF.js.map
|
|
@@ -67,7 +67,7 @@ import {
|
|
|
67
67
|
safeWriteJsonAtomic,
|
|
68
68
|
setConfigHash,
|
|
69
69
|
tripClass
|
|
70
|
-
} from "../chunk-
|
|
70
|
+
} from "../chunk-3SNPFRW3.js";
|
|
71
71
|
import {
|
|
72
72
|
getProjectDir as getProjectDir2,
|
|
73
73
|
getReadyTasks,
|
|
@@ -154,7 +154,7 @@ import {
|
|
|
154
154
|
webFetchBaselineValue,
|
|
155
155
|
webFetchRestartNeeded,
|
|
156
156
|
writeEgressAllowlist
|
|
157
|
-
} from "../chunk-
|
|
157
|
+
} from "../chunk-WQQGPPQW.js";
|
|
158
158
|
import {
|
|
159
159
|
ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
|
|
160
160
|
AnchorSessionClient,
|
|
@@ -264,7 +264,7 @@ import {
|
|
|
264
264
|
subagentActivityAgeSeconds,
|
|
265
265
|
sumTranscriptUsageInWindow,
|
|
266
266
|
transcriptActivityAgeSeconds
|
|
267
|
-
} from "../chunk-
|
|
267
|
+
} from "../chunk-AVM2BBSX.js";
|
|
268
268
|
import {
|
|
269
269
|
classifyUnanswerablePane,
|
|
270
270
|
paneRemedy
|
|
@@ -14142,7 +14142,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
|
|
|
14142
14142
|
var dayRolloverInboundHold = /* @__PURE__ */ new Map();
|
|
14143
14143
|
var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
|
|
14144
14144
|
async function channelInboundActivityAgeSecondsFor(codeName) {
|
|
14145
|
-
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-
|
|
14145
|
+
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-WHV2OHXM.js");
|
|
14146
14146
|
const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
|
|
14147
14147
|
if (newest === null) return null;
|
|
14148
14148
|
return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
|
|
@@ -14900,7 +14900,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
14900
14900
|
var lastVersionCheckAt = 0;
|
|
14901
14901
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
14902
14902
|
var lastResponsivenessProbeAt = 0;
|
|
14903
|
-
var agtCliVersion = true ? "0.28.
|
|
14903
|
+
var agtCliVersion = true ? "0.28.1098" : "dev";
|
|
14904
14904
|
function resolveBrewPath(execFileSync3) {
|
|
14905
14905
|
try {
|
|
14906
14906
|
const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -16517,7 +16517,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
16517
16517
|
if (codeNames.length === 0) return;
|
|
16518
16518
|
void (async () => {
|
|
16519
16519
|
try {
|
|
16520
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
16520
|
+
const { collectDiagnostics } = await import("../persistent-session-WHEFQHXF.js");
|
|
16521
16521
|
await api.post("/host/heartbeat", {
|
|
16522
16522
|
host_id: hostId,
|
|
16523
16523
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
|
|
@@ -16659,7 +16659,7 @@ async function pollCycleInner() {
|
|
|
16659
16659
|
}
|
|
16660
16660
|
try {
|
|
16661
16661
|
const { detectHostSecurity } = await import("../host-security-KQYYZZVW.js");
|
|
16662
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
16662
|
+
const { collectDiagnostics } = await import("../persistent-session-WHEFQHXF.js");
|
|
16663
16663
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
16664
16664
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor) : void 0;
|
|
16665
16665
|
let tailscaleHostname;
|
|
@@ -16867,7 +16867,7 @@ async function pollCycleInner() {
|
|
|
16867
16867
|
collectPanelessActivityProbes,
|
|
16868
16868
|
getResponsivenessIntervalMs,
|
|
16869
16869
|
occupancyQualificationClassifications
|
|
16870
|
-
} = await import("../responsiveness-probe-
|
|
16870
|
+
} = await import("../responsiveness-probe-WHV2OHXM.js");
|
|
16871
16871
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
16872
16872
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
16873
16873
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -16984,7 +16984,7 @@ async function pollCycleInner() {
|
|
|
16984
16984
|
collectResponsivenessProbes,
|
|
16985
16985
|
livePendingInboundOldestAgeSeconds,
|
|
16986
16986
|
parkPendingInbound
|
|
16987
|
-
} = await import("../responsiveness-probe-
|
|
16987
|
+
} = await import("../responsiveness-probe-WHV2OHXM.js");
|
|
16988
16988
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-M6AFZWNU.js");
|
|
16989
16989
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
16990
16990
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -17270,7 +17270,7 @@ async function pollCycleInner() {
|
|
|
17270
17270
|
}
|
|
17271
17271
|
}
|
|
17272
17272
|
);
|
|
17273
|
-
const { parkPendingInbound } = await import("../responsiveness-probe-
|
|
17273
|
+
const { parkPendingInbound } = await import("../responsiveness-probe-WHV2OHXM.js");
|
|
17274
17274
|
const { parked, deadLettered } = parkPendingInbound(codeName, new Date(fatalNowMs));
|
|
17275
17275
|
paneFatalStreak.delete(codeName);
|
|
17276
17276
|
paneFatalRestarts.set(codeName, [...history, fatalNowMs]);
|
|
@@ -17301,7 +17301,7 @@ async function pollCycleInner() {
|
|
|
17301
17301
|
TRANSCRIPT_MOUNT_ESCALATION_REFRESH_MS,
|
|
17302
17302
|
bindSourceEscalations
|
|
17303
17303
|
} = await import("../transcript-mount-health-OHE6IVJV.js");
|
|
17304
|
-
const { transcriptBindSourcesFor, ensureTranscriptBindSources } = await import("../persistent-session-
|
|
17304
|
+
const { transcriptBindSourcesFor, ensureTranscriptBindSources } = await import("../persistent-session-WHEFQHXF.js");
|
|
17305
17305
|
const mountConfig = resolveTranscriptMountConfig();
|
|
17306
17306
|
const liveAgents = agentState.persistentSessionAgents;
|
|
17307
17307
|
for (const tracked of [
|
|
@@ -17466,7 +17466,7 @@ async function pollCycleInner() {
|
|
|
17466
17466
|
}
|
|
17467
17467
|
try {
|
|
17468
17468
|
const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-VR5QGP3J.js");
|
|
17469
|
-
const { probeSessionAuth } = await import("../session-auth-dead-
|
|
17469
|
+
const { probeSessionAuth } = await import("../session-auth-dead-H3YYJLPC.js");
|
|
17470
17470
|
const observations = [];
|
|
17471
17471
|
const pendingCacheCommits = [];
|
|
17472
17472
|
const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
|
|
@@ -22038,7 +22038,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
22038
22038
|
try {
|
|
22039
22039
|
const freshId = rotateSessionForWedge(codeName);
|
|
22040
22040
|
consecutiveWedgeCycles.delete(codeName);
|
|
22041
|
-
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-
|
|
22041
|
+
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-WHV2OHXM.js");
|
|
22042
22042
|
const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
|
|
22043
22043
|
const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
|
|
22044
22044
|
const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
|
|
@@ -22081,7 +22081,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
22081
22081
|
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}`));
|
|
22082
22082
|
void (async () => {
|
|
22083
22083
|
try {
|
|
22084
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
22084
|
+
const { collectDiagnostics } = await import("../persistent-session-WHEFQHXF.js");
|
|
22085
22085
|
await api.post("/host/heartbeat", {
|
|
22086
22086
|
host_id: hostId,
|
|
22087
22087
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
|
|
@@ -22132,7 +22132,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
22132
22132
|
}
|
|
22133
22133
|
try {
|
|
22134
22134
|
const hostId = await getHostId();
|
|
22135
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
22135
|
+
const { collectDiagnostics } = await import("../persistent-session-WHEFQHXF.js");
|
|
22136
22136
|
await api.post("/host/heartbeat", {
|
|
22137
22137
|
host_id: hostId,
|
|
22138
22138
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
|
|
@@ -22804,7 +22804,7 @@ async function processClaudePairSessions(agents) {
|
|
|
22804
22804
|
// cannot take it for itself — by the time it runs, the write it is looking
|
|
22805
22805
|
// for may already have happened.
|
|
22806
22806
|
snapshotPairConfig
|
|
22807
|
-
} = await import("../claude-pair-runtime-
|
|
22807
|
+
} = await import("../claude-pair-runtime-MZXXBNGF.js");
|
|
22808
22808
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
22809
22809
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
22810
22810
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -38167,6 +38167,17 @@ var FLAG_REGISTRY = [
|
|
|
38167
38167
|
// deliberate, audited per-org flip (ADR-0022 §4).
|
|
38168
38168
|
sensitive: true
|
|
38169
38169
|
},
|
|
38170
|
+
{
|
|
38171
|
+
key: "email-guard-sole-decider",
|
|
38172
|
+
description: "ENG-11190 PR1: make the email guardrail (`email.domain_restrict`) the ONLY decider for email sends. Today two gates judge every send: the email guard (by its stage) and the Composio tool-tier HITL (OUTLOOK_SEND_EMAIL / GMAIL_SEND_EMAIL resolve to `write_high_risk`, so every send is held whatever the guard says). Brad, 6 Oct (Two Tractors / Horatio): a guard set to Shadow must not still produce an approval card. When ON for an org, the tier gate stops re-deciding a registered composing email send for an agent that HAS an active email guardrail AND whose stage is in force: the guard, which already ran first in callIntegrationTool and holds or blocks by its own stage, is the verdict. A stage whose enable flag is off (Require approval or Block that is not yet enabled for the org) only observes, so it is NOT a verdict and the tier hold stays (Obi Wan on #6816). An agent with no email guardrail (or a disabled one) keeps the tier hold, so turning this on never removes the only hold an org has. Draft-sends (recipients on the stored draft) keep the tier hold in this slice. Every deferred send is still audited. Evaluated per-org. Ships dark.",
|
|
38173
|
+
flagType: "boolean",
|
|
38174
|
+
// Declared safe value is `false` (both gates, today's behaviour). A flag-DB read error
|
|
38175
|
+
// degrades here, so a flags outage keeps the tier hold rather than silently loosening it.
|
|
38176
|
+
defaultValue: false,
|
|
38177
|
+
// Turning it on lets external email go out WITHOUT the tier hold where the guard allows
|
|
38178
|
+
// it (e.g. Shadow), so it is a deliberate, audited per-org flip (ADR-0022 §4).
|
|
38179
|
+
sensitive: true
|
|
38180
|
+
},
|
|
38170
38181
|
{
|
|
38171
38182
|
key: "email-require-approval-enforcement",
|
|
38172
38183
|
description: 'Enforcement gate for the `email.require_approval` guardrail (ENG-9611). That guardrail has been `default_for_new_orgs` since ~2026-05-03 and its display text promises "Require human approval before sending any email", but nothing ever read it: its only runtime path was toGuardrailForPrompt, i.e. a line in the agent CLAUDE.md. When ON for an org, a DISPATCHING email send (never a draft-create, ENG-7980) is held and routed to Human Approval regardless of recipient domain \u2014 which is what "any email" means, and is what distinguishes it from email-guard-require-approval-enabled, whose require_approval stage only intercepts a would-be DOMAIN block. Deliberately separate from the guardrail row: roughly four months of orgs already carry an inert `enforce`-level row, so reading the row alone would arm a blocking control across all of them on deploy. New orgs are no longer armed (ENG-11234). Orgs created while the ENG-9629/9675 new-org arm was live keep their org-scoped ON override until an operator flips them per org. Evaluated per-org. Ships dark.',
|
package/dist/mcp/index.js
CHANGED
|
@@ -30385,6 +30385,17 @@ var FLAG_REGISTRY = [
|
|
|
30385
30385
|
// deliberate, audited per-org flip (ADR-0022 §4).
|
|
30386
30386
|
sensitive: true
|
|
30387
30387
|
},
|
|
30388
|
+
{
|
|
30389
|
+
key: "email-guard-sole-decider",
|
|
30390
|
+
description: "ENG-11190 PR1: make the email guardrail (`email.domain_restrict`) the ONLY decider for email sends. Today two gates judge every send: the email guard (by its stage) and the Composio tool-tier HITL (OUTLOOK_SEND_EMAIL / GMAIL_SEND_EMAIL resolve to `write_high_risk`, so every send is held whatever the guard says). Brad, 6 Oct (Two Tractors / Horatio): a guard set to Shadow must not still produce an approval card. When ON for an org, the tier gate stops re-deciding a registered composing email send for an agent that HAS an active email guardrail AND whose stage is in force: the guard, which already ran first in callIntegrationTool and holds or blocks by its own stage, is the verdict. A stage whose enable flag is off (Require approval or Block that is not yet enabled for the org) only observes, so it is NOT a verdict and the tier hold stays (Obi Wan on #6816). An agent with no email guardrail (or a disabled one) keeps the tier hold, so turning this on never removes the only hold an org has. Draft-sends (recipients on the stored draft) keep the tier hold in this slice. Every deferred send is still audited. Evaluated per-org. Ships dark.",
|
|
30391
|
+
flagType: "boolean",
|
|
30392
|
+
// Declared safe value is `false` (both gates, today's behaviour). A flag-DB read error
|
|
30393
|
+
// degrades here, so a flags outage keeps the tier hold rather than silently loosening it.
|
|
30394
|
+
defaultValue: false,
|
|
30395
|
+
// Turning it on lets external email go out WITHOUT the tier hold where the guard allows
|
|
30396
|
+
// it (e.g. Shadow), so it is a deliberate, audited per-org flip (ADR-0022 §4).
|
|
30397
|
+
sensitive: true
|
|
30398
|
+
},
|
|
30388
30399
|
{
|
|
30389
30400
|
key: "email-require-approval-enforcement",
|
|
30390
30401
|
description: 'Enforcement gate for the `email.require_approval` guardrail (ENG-9611). That guardrail has been `default_for_new_orgs` since ~2026-05-03 and its display text promises "Require human approval before sending any email", but nothing ever read it: its only runtime path was toGuardrailForPrompt, i.e. a line in the agent CLAUDE.md. When ON for an org, a DISPATCHING email send (never a draft-create, ENG-7980) is held and routed to Human Approval regardless of recipient domain \u2014 which is what "any email" means, and is what distinguishes it from email-guard-require-approval-enabled, whose require_approval stage only intercepts a would-be DOMAIN block. Deliberately separate from the guardrail row: roughly four months of orgs already carry an inert `enforce`-level row, so reading the row alone would arm a blocking control across all of them on deploy. New orgs are no longer armed (ENG-11234). Orgs created while the ENG-9629/9675 new-org arm was live keep their org-scoped ON override until an operator flips them per org. Evaluated per-org. Ships dark.',
|
package/dist/mcp/origami.js
CHANGED
|
@@ -44331,6 +44331,17 @@ var FLAG_REGISTRY = [
|
|
|
44331
44331
|
// deliberate, audited per-org flip (ADR-0022 §4).
|
|
44332
44332
|
sensitive: true
|
|
44333
44333
|
},
|
|
44334
|
+
{
|
|
44335
|
+
key: "email-guard-sole-decider",
|
|
44336
|
+
description: "ENG-11190 PR1: make the email guardrail (`email.domain_restrict`) the ONLY decider for email sends. Today two gates judge every send: the email guard (by its stage) and the Composio tool-tier HITL (OUTLOOK_SEND_EMAIL / GMAIL_SEND_EMAIL resolve to `write_high_risk`, so every send is held whatever the guard says). Brad, 6 Oct (Two Tractors / Horatio): a guard set to Shadow must not still produce an approval card. When ON for an org, the tier gate stops re-deciding a registered composing email send for an agent that HAS an active email guardrail AND whose stage is in force: the guard, which already ran first in callIntegrationTool and holds or blocks by its own stage, is the verdict. A stage whose enable flag is off (Require approval or Block that is not yet enabled for the org) only observes, so it is NOT a verdict and the tier hold stays (Obi Wan on #6816). An agent with no email guardrail (or a disabled one) keeps the tier hold, so turning this on never removes the only hold an org has. Draft-sends (recipients on the stored draft) keep the tier hold in this slice. Every deferred send is still audited. Evaluated per-org. Ships dark.",
|
|
44337
|
+
flagType: "boolean",
|
|
44338
|
+
// Declared safe value is `false` (both gates, today's behaviour). A flag-DB read error
|
|
44339
|
+
// degrades here, so a flags outage keeps the tier hold rather than silently loosening it.
|
|
44340
|
+
defaultValue: false,
|
|
44341
|
+
// Turning it on lets external email go out WITHOUT the tier hold where the guard allows
|
|
44342
|
+
// it (e.g. Shadow), so it is a deliberate, audited per-org flip (ADR-0022 §4).
|
|
44343
|
+
sensitive: true
|
|
44344
|
+
},
|
|
44334
44345
|
{
|
|
44335
44346
|
key: "email-require-approval-enforcement",
|
|
44336
44347
|
description: 'Enforcement gate for the `email.require_approval` guardrail (ENG-9611). That guardrail has been `default_for_new_orgs` since ~2026-05-03 and its display text promises "Require human approval before sending any email", but nothing ever read it: its only runtime path was toGuardrailForPrompt, i.e. a line in the agent CLAUDE.md. When ON for an org, a DISPATCHING email send (never a draft-create, ENG-7980) is held and routed to Human Approval regardless of recipient domain \u2014 which is what "any email" means, and is what distinguishes it from email-guard-require-approval-enabled, whose require_approval stage only intercepts a would-be DOMAIN block. Deliberately separate from the guardrail row: roughly four months of orgs already carry an inert `enforce`-level row, so reading the row alone would arm a blocking control across all of them on deploy. New orgs are no longer armed (ENG-11234). Orgs created while the ENG-9629/9675 new-org arm was live keep their org-scoped ON override until an operator flips them per org. Evaluated per-org. Ships dark.',
|
|
@@ -38938,6 +38938,17 @@ var FLAG_REGISTRY = [
|
|
|
38938
38938
|
// deliberate, audited per-org flip (ADR-0022 §4).
|
|
38939
38939
|
sensitive: true
|
|
38940
38940
|
},
|
|
38941
|
+
{
|
|
38942
|
+
key: "email-guard-sole-decider",
|
|
38943
|
+
description: "ENG-11190 PR1: make the email guardrail (`email.domain_restrict`) the ONLY decider for email sends. Today two gates judge every send: the email guard (by its stage) and the Composio tool-tier HITL (OUTLOOK_SEND_EMAIL / GMAIL_SEND_EMAIL resolve to `write_high_risk`, so every send is held whatever the guard says). Brad, 6 Oct (Two Tractors / Horatio): a guard set to Shadow must not still produce an approval card. When ON for an org, the tier gate stops re-deciding a registered composing email send for an agent that HAS an active email guardrail AND whose stage is in force: the guard, which already ran first in callIntegrationTool and holds or blocks by its own stage, is the verdict. A stage whose enable flag is off (Require approval or Block that is not yet enabled for the org) only observes, so it is NOT a verdict and the tier hold stays (Obi Wan on #6816). An agent with no email guardrail (or a disabled one) keeps the tier hold, so turning this on never removes the only hold an org has. Draft-sends (recipients on the stored draft) keep the tier hold in this slice. Every deferred send is still audited. Evaluated per-org. Ships dark.",
|
|
38944
|
+
flagType: "boolean",
|
|
38945
|
+
// Declared safe value is `false` (both gates, today's behaviour). A flag-DB read error
|
|
38946
|
+
// degrades here, so a flags outage keeps the tier hold rather than silently loosening it.
|
|
38947
|
+
defaultValue: false,
|
|
38948
|
+
// Turning it on lets external email go out WITHOUT the tier hold where the guard allows
|
|
38949
|
+
// it (e.g. Shadow), so it is a deliberate, audited per-org flip (ADR-0022 §4).
|
|
38950
|
+
sensitive: true
|
|
38951
|
+
},
|
|
38941
38952
|
{
|
|
38942
38953
|
key: "email-require-approval-enforcement",
|
|
38943
38954
|
description: 'Enforcement gate for the `email.require_approval` guardrail (ENG-9611). That guardrail has been `default_for_new_orgs` since ~2026-05-03 and its display text promises "Require human approval before sending any email", but nothing ever read it: its only runtime path was toGuardrailForPrompt, i.e. a line in the agent CLAUDE.md. When ON for an org, a DISPATCHING email send (never a draft-create, ENG-7980) is held and routed to Human Approval regardless of recipient domain \u2014 which is what "any email" means, and is what distinguishes it from email-guard-require-approval-enabled, whose require_approval stage only intercepts a would-be DOMAIN block. Deliberately separate from the guardrail row: roughly four months of orgs already carry an inert `enforce`-level row, so reading the row alone would arm a blocking control across all of them on deploy. New orgs are no longer armed (ENG-11234). Orgs created while the ENG-9629/9675 new-org arm was live keep their org-scoped ON override until an operator flips them per org. Evaluated per-org. Ships dark.',
|
|
@@ -39044,6 +39044,17 @@ var FLAG_REGISTRY = [
|
|
|
39044
39044
|
// deliberate, audited per-org flip (ADR-0022 §4).
|
|
39045
39045
|
sensitive: true
|
|
39046
39046
|
},
|
|
39047
|
+
{
|
|
39048
|
+
key: "email-guard-sole-decider",
|
|
39049
|
+
description: "ENG-11190 PR1: make the email guardrail (`email.domain_restrict`) the ONLY decider for email sends. Today two gates judge every send: the email guard (by its stage) and the Composio tool-tier HITL (OUTLOOK_SEND_EMAIL / GMAIL_SEND_EMAIL resolve to `write_high_risk`, so every send is held whatever the guard says). Brad, 6 Oct (Two Tractors / Horatio): a guard set to Shadow must not still produce an approval card. When ON for an org, the tier gate stops re-deciding a registered composing email send for an agent that HAS an active email guardrail AND whose stage is in force: the guard, which already ran first in callIntegrationTool and holds or blocks by its own stage, is the verdict. A stage whose enable flag is off (Require approval or Block that is not yet enabled for the org) only observes, so it is NOT a verdict and the tier hold stays (Obi Wan on #6816). An agent with no email guardrail (or a disabled one) keeps the tier hold, so turning this on never removes the only hold an org has. Draft-sends (recipients on the stored draft) keep the tier hold in this slice. Every deferred send is still audited. Evaluated per-org. Ships dark.",
|
|
39050
|
+
flagType: "boolean",
|
|
39051
|
+
// Declared safe value is `false` (both gates, today's behaviour). A flag-DB read error
|
|
39052
|
+
// degrades here, so a flags outage keeps the tier hold rather than silently loosening it.
|
|
39053
|
+
defaultValue: false,
|
|
39054
|
+
// Turning it on lets external email go out WITHOUT the tier hold where the guard allows
|
|
39055
|
+
// it (e.g. Shadow), so it is a deliberate, audited per-org flip (ADR-0022 §4).
|
|
39056
|
+
sensitive: true
|
|
39057
|
+
},
|
|
39047
39058
|
{
|
|
39048
39059
|
key: "email-require-approval-enforcement",
|
|
39049
39060
|
description: 'Enforcement gate for the `email.require_approval` guardrail (ENG-9611). That guardrail has been `default_for_new_orgs` since ~2026-05-03 and its display text promises "Require human approval before sending any email", but nothing ever read it: its only runtime path was toGuardrailForPrompt, i.e. a line in the agent CLAUDE.md. When ON for an org, a DISPATCHING email send (never a draft-create, ENG-7980) is held and routed to Human Approval regardless of recipient domain \u2014 which is what "any email" means, and is what distinguishes it from email-guard-require-approval-enabled, whose require_approval stage only intercepts a would-be DOMAIN block. Deliberately separate from the guardrail row: roughly four months of orgs already carry an inert `enforce`-level row, so reading the row alone would arm a blocking control across all of them on deploy. New orgs are no longer armed (ENG-11234). Orgs created while the ENG-9629/9675 new-org arm was live keep their org-scoped ON override until an operator flips them per org. Evaluated per-org. Ships dark.',
|
|
@@ -68,8 +68,8 @@ import {
|
|
|
68
68
|
writeDirectChatSessionState,
|
|
69
69
|
writeEgressAllowlist,
|
|
70
70
|
writePersistentClaudeWrapper
|
|
71
|
-
} from "./chunk-
|
|
72
|
-
import "./chunk-
|
|
71
|
+
} from "./chunk-WQQGPPQW.js";
|
|
72
|
+
import "./chunk-AVM2BBSX.js";
|
|
73
73
|
import "./chunk-OCMJ5E6J.js";
|
|
74
74
|
import "./chunk-XWVM4KPK.js";
|
|
75
75
|
import "./chunk-EL5MWGGH.js";
|
|
@@ -145,4 +145,4 @@ export {
|
|
|
145
145
|
writeEgressAllowlist,
|
|
146
146
|
writePersistentClaudeWrapper
|
|
147
147
|
};
|
|
148
|
-
//# sourceMappingURL=persistent-session-
|
|
148
|
+
//# sourceMappingURL=persistent-session-WHEFQHXF.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-WQQGPPQW.js";
|
|
4
|
+
import "./chunk-AVM2BBSX.js";
|
|
5
5
|
import "./chunk-OCMJ5E6J.js";
|
|
6
6
|
import "./chunk-XWVM4KPK.js";
|
|
7
7
|
import "./chunk-EL5MWGGH.js";
|
|
@@ -802,4 +802,4 @@ export {
|
|
|
802
802
|
readAndResetSlackReplyBindingClassifications,
|
|
803
803
|
readAndResetSlackReplyTargetClassifications
|
|
804
804
|
};
|
|
805
|
-
//# sourceMappingURL=responsiveness-probe-
|
|
805
|
+
//# sourceMappingURL=responsiveness-probe-WHV2OHXM.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionTranscriptDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AVM2BBSX.js";
|
|
4
4
|
import "./chunk-DGUM43GV.js";
|
|
5
5
|
|
|
6
6
|
// src/lib/session-auth-dead.ts
|
|
@@ -204,4 +204,4 @@ export {
|
|
|
204
204
|
decideSessionAuthState,
|
|
205
205
|
probeSessionAuth
|
|
206
206
|
};
|
|
207
|
-
//# sourceMappingURL=session-auth-dead-
|
|
207
|
+
//# sourceMappingURL=session-auth-dead-H3YYJLPC.js.map
|