@integrity-labs/agt-cli 0.28.610 → 0.28.612
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-DESCRVVM.js → chunk-DJP4JZGE.js} +2 -2
- package/dist/{chunk-RTZ2VC7V.js → chunk-F2WTBHMD.js} +4 -4
- package/dist/{chunk-FF7H4K7I.js → chunk-RQAAW5LL.js} +30 -1
- package/dist/chunk-RQAAW5LL.js.map +1 -0
- package/dist/{claude-pair-runtime-3Y6ZICI3.js → claude-pair-runtime-4MKFMNYN.js} +2 -2
- package/dist/lib/manager-worker.js +13 -13
- package/dist/mcp/direct-chat-channel.js +36 -3
- package/dist/mcp/origami.js +29 -0
- package/dist/mcp/slack-channel.js +36 -3
- package/dist/mcp/telegram-channel.js +36 -3
- package/dist/{persistent-session-HOFUHGKI.js → persistent-session-KO24RZN7.js} +3 -3
- package/dist/{responsiveness-probe-Z7IFPQCU.js → responsiveness-probe-V4O7DXYV.js} +3 -3
- package/dist/{session-auth-dead-Q6AY5HC7.js → session-auth-dead-S7WK33WO.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-FF7H4K7I.js.map +0 -1
- /package/dist/{chunk-DESCRVVM.js.map → chunk-DJP4JZGE.js.map} +0 -0
- /package/dist/{chunk-RTZ2VC7V.js.map → chunk-F2WTBHMD.js.map} +0 -0
- /package/dist/{claude-pair-runtime-3Y6ZICI3.js.map → claude-pair-runtime-4MKFMNYN.js.map} +0 -0
- /package/dist/{persistent-session-HOFUHGKI.js.map → persistent-session-KO24RZN7.js.map} +0 -0
- /package/dist/{responsiveness-probe-Z7IFPQCU.js.map → responsiveness-probe-V4O7DXYV.js.map} +0 -0
- /package/dist/{session-auth-dead-Q6AY5HC7.js.map → session-auth-dead-S7WK33WO.js.map} +0 -0
|
@@ -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-KO24RZN7.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-4MKFMNYN.js.map
|
|
@@ -53,7 +53,7 @@ import {
|
|
|
53
53
|
safeWriteJsonAtomic,
|
|
54
54
|
setConfigHash,
|
|
55
55
|
tripClass
|
|
56
|
-
} from "../chunk-
|
|
56
|
+
} from "../chunk-F2WTBHMD.js";
|
|
57
57
|
import {
|
|
58
58
|
getProjectDir as getProjectDir2,
|
|
59
59
|
getReadyTasks,
|
|
@@ -109,7 +109,7 @@ import {
|
|
|
109
109
|
takeZombieDetection,
|
|
110
110
|
toOpencodeModel,
|
|
111
111
|
writeEgressAllowlist
|
|
112
|
-
} from "../chunk-
|
|
112
|
+
} from "../chunk-DJP4JZGE.js";
|
|
113
113
|
import {
|
|
114
114
|
ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
|
|
115
115
|
AnchorSessionClient,
|
|
@@ -186,7 +186,7 @@ import {
|
|
|
186
186
|
subagentActivityAgeSeconds,
|
|
187
187
|
sumTranscriptUsageInWindow,
|
|
188
188
|
transcriptActivityAgeSeconds
|
|
189
|
-
} from "../chunk-
|
|
189
|
+
} from "../chunk-RQAAW5LL.js";
|
|
190
190
|
import {
|
|
191
191
|
reapOrphanChannelMcps
|
|
192
192
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -11287,7 +11287,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
|
|
|
11287
11287
|
var dayRolloverInboundHold = /* @__PURE__ */ new Map();
|
|
11288
11288
|
var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
|
|
11289
11289
|
async function channelInboundActivityAgeSecondsFor(codeName) {
|
|
11290
|
-
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-
|
|
11290
|
+
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-V4O7DXYV.js");
|
|
11291
11291
|
const newest = newestPendingInboundActivityMtimeMs(dirname9(paneLogPath(codeName)));
|
|
11292
11292
|
if (newest === null) return null;
|
|
11293
11293
|
return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
|
|
@@ -11926,7 +11926,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
11926
11926
|
var lastVersionCheckAt = 0;
|
|
11927
11927
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
11928
11928
|
var lastResponsivenessProbeAt = 0;
|
|
11929
|
-
var agtCliVersion = true ? "0.28.
|
|
11929
|
+
var agtCliVersion = true ? "0.28.612" : "dev";
|
|
11930
11930
|
function resolveBrewPath(execFileSync3) {
|
|
11931
11931
|
try {
|
|
11932
11932
|
const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -13233,7 +13233,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
13233
13233
|
if (codeNames.length === 0) return;
|
|
13234
13234
|
void (async () => {
|
|
13235
13235
|
try {
|
|
13236
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
13236
|
+
const { collectDiagnostics } = await import("../persistent-session-KO24RZN7.js");
|
|
13237
13237
|
await api.post("/host/heartbeat", {
|
|
13238
13238
|
host_id: hostId,
|
|
13239
13239
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
|
|
@@ -13341,7 +13341,7 @@ async function pollCycle() {
|
|
|
13341
13341
|
}
|
|
13342
13342
|
try {
|
|
13343
13343
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
13344
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
13344
|
+
const { collectDiagnostics } = await import("../persistent-session-KO24RZN7.js");
|
|
13345
13345
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
13346
13346
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor) : void 0;
|
|
13347
13347
|
let tailscaleHostname;
|
|
@@ -13464,7 +13464,7 @@ async function pollCycle() {
|
|
|
13464
13464
|
collectPanelessActivityProbes,
|
|
13465
13465
|
getResponsivenessIntervalMs,
|
|
13466
13466
|
occupancyQualificationClassifications
|
|
13467
|
-
} = await import("../responsiveness-probe-
|
|
13467
|
+
} = await import("../responsiveness-probe-V4O7DXYV.js");
|
|
13468
13468
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
13469
13469
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
13470
13470
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -13570,7 +13570,7 @@ async function pollCycle() {
|
|
|
13570
13570
|
collectResponsivenessProbes,
|
|
13571
13571
|
livePendingInboundOldestAgeSeconds,
|
|
13572
13572
|
parkPendingInbound
|
|
13573
|
-
} = await import("../responsiveness-probe-
|
|
13573
|
+
} = await import("../responsiveness-probe-V4O7DXYV.js");
|
|
13574
13574
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
|
|
13575
13575
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
13576
13576
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -13726,7 +13726,7 @@ async function pollCycle() {
|
|
|
13726
13726
|
}
|
|
13727
13727
|
try {
|
|
13728
13728
|
const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
|
|
13729
|
-
const { probeSessionAuth } = await import("../session-auth-dead-
|
|
13729
|
+
const { probeSessionAuth } = await import("../session-auth-dead-S7WK33WO.js");
|
|
13730
13730
|
const observations = [];
|
|
13731
13731
|
const pendingCacheCommits = [];
|
|
13732
13732
|
const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
|
|
@@ -17215,7 +17215,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
17215
17215
|
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}`));
|
|
17216
17216
|
void (async () => {
|
|
17217
17217
|
try {
|
|
17218
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
17218
|
+
const { collectDiagnostics } = await import("../persistent-session-KO24RZN7.js");
|
|
17219
17219
|
await api.post("/host/heartbeat", {
|
|
17220
17220
|
host_id: hostId,
|
|
17221
17221
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
|
|
@@ -17266,7 +17266,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
17266
17266
|
}
|
|
17267
17267
|
try {
|
|
17268
17268
|
const hostId = await getHostId();
|
|
17269
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
17269
|
+
const { collectDiagnostics } = await import("../persistent-session-KO24RZN7.js");
|
|
17270
17270
|
await api.post("/host/heartbeat", {
|
|
17271
17271
|
host_id: hostId,
|
|
17272
17272
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
|
|
@@ -17862,7 +17862,7 @@ async function processClaudePairSessions(agents) {
|
|
|
17862
17862
|
killPairSession,
|
|
17863
17863
|
pairTmuxSession,
|
|
17864
17864
|
finalizeClaudePairOnboarding
|
|
17865
|
-
} = await import("../claude-pair-runtime-
|
|
17865
|
+
} = await import("../claude-pair-runtime-4MKFMNYN.js");
|
|
17866
17866
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
17867
17867
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
17868
17868
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -30142,8 +30142,12 @@ function busyAckNoticeText() {
|
|
|
30142
30142
|
return "\u{1F6E0}\uFE0F I'm in the middle of something right now \u2014 I'll follow up on this as soon as I'm free.";
|
|
30143
30143
|
}
|
|
30144
30144
|
var GIVE_UP_SIGNAL_MAX_AGE_MS = 30 * 60 * 1e3;
|
|
30145
|
-
function turnFailedNoticeText() {
|
|
30146
|
-
|
|
30145
|
+
function turnFailedNoticeText(failureClass) {
|
|
30146
|
+
const cause = failureClass === "overloaded" ? "the service I run on is overloaded right now \u2014 nothing to do with you or what you asked for" : failureClass === "server_error" ? "something upstream of me is failing right now \u2014 nothing to do with you or what you asked for" : null;
|
|
30147
|
+
if (cause === null) {
|
|
30148
|
+
return "\u26A0\uFE0F Something went wrong on my side and I couldn\u2019t finish that. Sorry \u2014 send it again when you get a chance and I\u2019ll pick it straight up.";
|
|
30149
|
+
}
|
|
30150
|
+
return `\u26A0\uFE0F I couldn\u2019t finish that \u2014 ${cause}. Sorry \u2014 send it again when you get a chance and I\u2019ll pick it straight up.`;
|
|
30147
30151
|
}
|
|
30148
30152
|
function oldestPendingMarkerAgeMs(dir, now = Date.now(), opts) {
|
|
30149
30153
|
if (!dir) return null;
|
|
@@ -32565,6 +32569,12 @@ var MARKUP_BRIDGE_SCRIPT = `<script>(function(){
|
|
|
32565
32569
|
var AL_PANEL_WIDTH_PX = 420;
|
|
32566
32570
|
var AL_MIN_CANVAS_PX = 320;
|
|
32567
32571
|
var AL_SPLIT_MIN_VIEWPORT_PX = AL_PANEL_WIDTH_PX + AL_MIN_CANVAS_PX;
|
|
32572
|
+
var DECK_HUD_BOTTOM_PX = 20;
|
|
32573
|
+
var DECK_HUD_HEIGHT_PX = 48;
|
|
32574
|
+
var DECK_HUD_TOP_PX = DECK_HUD_BOTTOM_PX + DECK_HUD_HEIGHT_PX;
|
|
32575
|
+
var DECK_CHROME_GAP_PX = 8;
|
|
32576
|
+
var DECK_ATTRIBUTION_BOTTOM_PX = DECK_HUD_TOP_PX + DECK_CHROME_GAP_PX;
|
|
32577
|
+
var DECK_ATTRIBUTION_NARROW_BOTTOM_PX = 104 + DECK_CHROME_GAP_PX;
|
|
32568
32578
|
|
|
32569
32579
|
// ../core/dist/integrations/augmented-live/asset.js
|
|
32570
32580
|
var MB = 1024 * 1024;
|
|
@@ -34866,6 +34876,29 @@ registerTriggerSource(videoRenderTriggerAdapter);
|
|
|
34866
34876
|
|
|
34867
34877
|
// ../core/dist/feature-flags/registry.js
|
|
34868
34878
|
var FLAG_REGISTRY = [
|
|
34879
|
+
{
|
|
34880
|
+
key: "impersonation-enabled",
|
|
34881
|
+
description: "Kill switch for admin impersonation (ENG-9080), filed during the 18 Aug cross-tenant identity incident. ON (default) = impersonation works as today. OFF = both halves of the flow refuse: the mint route stops issuing redeem URLs, and \u2014 the half that actually matters \u2014 the REDEEM route refuses before it inserts the nonce or calls generateLink, so a URL that was already issued cannot still mint a session. Redeem tokens live REDEEM_TTL_SECONDS = 300, so gating only the mint route would leave five minutes in which new sessions keep appearing after an operator believes they have stopped it. Evaluated as a GLOBAL stage value, read UNCACHED on the redeem path (see readImpersonationEnabled): a kill switch that takes a cache TTL to bite is not a kill switch. Containment only \u2014 it does not fix the underlying defect that redeem writes the target's cookies into whatever browser context opens the URL (ENG-8923 / ENG-9020).",
|
|
34882
|
+
flagType: "boolean",
|
|
34883
|
+
// Declared safe value is `true` = impersonation available, i.e. today's
|
|
34884
|
+
// behaviour, so merging this changes nothing until an operator flips it.
|
|
34885
|
+
//
|
|
34886
|
+
// NOTE the asymmetry with the other gates in this file, and it is
|
|
34887
|
+
// deliberate: their safe direction is "off / don't do the new thing"
|
|
34888
|
+
// because they gate NEW behaviour. This one gates EXISTING behaviour, so
|
|
34889
|
+
// the no-op default is `true`. The READ direction is where the safety lives
|
|
34890
|
+
// instead — an unreachable flag store resolves to DISABLED, not to this
|
|
34891
|
+
// default. See readImpersonationEnabled for that argument.
|
|
34892
|
+
defaultValue: true,
|
|
34893
|
+
// Enforcement gate (ADR-0022 section 4): re-enabling impersonation is
|
|
34894
|
+
// "relaxing a security control", exactly the mutation that must not happen
|
|
34895
|
+
// on a single unguarded write. The emergency direction (turning it OFF)
|
|
34896
|
+
// costs one confirmation, which is the right price.
|
|
34897
|
+
sensitive: true
|
|
34898
|
+
// Deliberately NOT public. A browser has no business evaluating whether
|
|
34899
|
+
// impersonation is available; both consumers are server-side route
|
|
34900
|
+
// handlers.
|
|
34901
|
+
},
|
|
34869
34902
|
{
|
|
34870
34903
|
key: "at-rest-v2-writes",
|
|
34871
34904
|
description: "ADR-0061 A2\u2192arm cutover (ENG-8944, parent ENG-8764). Gates whether the at-rest writer (encryptSecret/encryptAtRest) emits the v2 AAD-bound envelope when a DecryptContext is supplied; OFF (default) = the legacy v1 envelope (pre-ADR-0061 behaviour). Resolved FLEET-WIDE and process-global via setV2WritesArmed at the API + webapp + cron bootstrap seams, so ONLY the stage value applies \u2014 per-org overrides do not (the crypto writer carries no request/org context). Ships dark. Flip on only once every reader parses v2 (fleet-wide since release A1) AND the re-seal engine can re-seal v2 blobs before any AUTH_ENCRYPTION_KEY rotation (slice 5b). Reversible without redeploy: clearing it returns the writer to v1 within the flag cache TTL; already-written v2 blobs stay readable.",
|
|
@@ -38099,7 +38132,7 @@ function armTurnFailureWatch(args) {
|
|
|
38099
38132
|
return;
|
|
38100
38133
|
}
|
|
38101
38134
|
lastTurnFailedNoticeAt.set(args.sessionId, now);
|
|
38102
|
-
const ok = await postDirectChatNoticeMessage(args.sessionId, turnFailedNoticeText());
|
|
38135
|
+
const ok = await postDirectChatNoticeMessage(args.sessionId, turnFailedNoticeText(failure.failureClass));
|
|
38103
38136
|
if (!ok) {
|
|
38104
38137
|
lastTurnFailedNoticeAt.delete(args.sessionId);
|
|
38105
38138
|
process.stderr.write(
|
package/dist/mcp/origami.js
CHANGED
|
@@ -38903,6 +38903,12 @@ var MARKUP_BRIDGE_SCRIPT = `<script>(function(){
|
|
|
38903
38903
|
var AL_PANEL_WIDTH_PX = 420;
|
|
38904
38904
|
var AL_MIN_CANVAS_PX = 320;
|
|
38905
38905
|
var AL_SPLIT_MIN_VIEWPORT_PX = AL_PANEL_WIDTH_PX + AL_MIN_CANVAS_PX;
|
|
38906
|
+
var DECK_HUD_BOTTOM_PX = 20;
|
|
38907
|
+
var DECK_HUD_HEIGHT_PX = 48;
|
|
38908
|
+
var DECK_HUD_TOP_PX = DECK_HUD_BOTTOM_PX + DECK_HUD_HEIGHT_PX;
|
|
38909
|
+
var DECK_CHROME_GAP_PX = 8;
|
|
38910
|
+
var DECK_ATTRIBUTION_BOTTOM_PX = DECK_HUD_TOP_PX + DECK_CHROME_GAP_PX;
|
|
38911
|
+
var DECK_ATTRIBUTION_NARROW_BOTTOM_PX = 104 + DECK_CHROME_GAP_PX;
|
|
38906
38912
|
|
|
38907
38913
|
// ../core/dist/integrations/augmented-live/asset.js
|
|
38908
38914
|
var MB = 1024 * 1024;
|
|
@@ -40757,6 +40763,29 @@ registerTriggerSource(videoRenderTriggerAdapter);
|
|
|
40757
40763
|
|
|
40758
40764
|
// ../core/dist/feature-flags/registry.js
|
|
40759
40765
|
var FLAG_REGISTRY = [
|
|
40766
|
+
{
|
|
40767
|
+
key: "impersonation-enabled",
|
|
40768
|
+
description: "Kill switch for admin impersonation (ENG-9080), filed during the 18 Aug cross-tenant identity incident. ON (default) = impersonation works as today. OFF = both halves of the flow refuse: the mint route stops issuing redeem URLs, and \u2014 the half that actually matters \u2014 the REDEEM route refuses before it inserts the nonce or calls generateLink, so a URL that was already issued cannot still mint a session. Redeem tokens live REDEEM_TTL_SECONDS = 300, so gating only the mint route would leave five minutes in which new sessions keep appearing after an operator believes they have stopped it. Evaluated as a GLOBAL stage value, read UNCACHED on the redeem path (see readImpersonationEnabled): a kill switch that takes a cache TTL to bite is not a kill switch. Containment only \u2014 it does not fix the underlying defect that redeem writes the target's cookies into whatever browser context opens the URL (ENG-8923 / ENG-9020).",
|
|
40769
|
+
flagType: "boolean",
|
|
40770
|
+
// Declared safe value is `true` = impersonation available, i.e. today's
|
|
40771
|
+
// behaviour, so merging this changes nothing until an operator flips it.
|
|
40772
|
+
//
|
|
40773
|
+
// NOTE the asymmetry with the other gates in this file, and it is
|
|
40774
|
+
// deliberate: their safe direction is "off / don't do the new thing"
|
|
40775
|
+
// because they gate NEW behaviour. This one gates EXISTING behaviour, so
|
|
40776
|
+
// the no-op default is `true`. The READ direction is where the safety lives
|
|
40777
|
+
// instead — an unreachable flag store resolves to DISABLED, not to this
|
|
40778
|
+
// default. See readImpersonationEnabled for that argument.
|
|
40779
|
+
defaultValue: true,
|
|
40780
|
+
// Enforcement gate (ADR-0022 section 4): re-enabling impersonation is
|
|
40781
|
+
// "relaxing a security control", exactly the mutation that must not happen
|
|
40782
|
+
// on a single unguarded write. The emergency direction (turning it OFF)
|
|
40783
|
+
// costs one confirmation, which is the right price.
|
|
40784
|
+
sensitive: true
|
|
40785
|
+
// Deliberately NOT public. A browser has no business evaluating whether
|
|
40786
|
+
// impersonation is available; both consumers are server-side route
|
|
40787
|
+
// handlers.
|
|
40788
|
+
},
|
|
40760
40789
|
{
|
|
40761
40790
|
key: "at-rest-v2-writes",
|
|
40762
40791
|
description: "ADR-0061 A2\u2192arm cutover (ENG-8944, parent ENG-8764). Gates whether the at-rest writer (encryptSecret/encryptAtRest) emits the v2 AAD-bound envelope when a DecryptContext is supplied; OFF (default) = the legacy v1 envelope (pre-ADR-0061 behaviour). Resolved FLEET-WIDE and process-global via setV2WritesArmed at the API + webapp + cron bootstrap seams, so ONLY the stage value applies \u2014 per-org overrides do not (the crypto writer carries no request/org context). Ships dark. Flip on only once every reader parses v2 (fleet-wide since release A1) AND the re-seal engine can re-seal v2 blobs before any AUTH_ENCRYPTION_KEY rotation (slice 5b). Reversible without redeploy: clearing it returns the writer to v1 within the flag cache TTL; already-written v2 blobs stay readable.",
|
|
@@ -32954,6 +32954,12 @@ var MARKUP_BRIDGE_SCRIPT = `<script>(function(){
|
|
|
32954
32954
|
var AL_PANEL_WIDTH_PX = 420;
|
|
32955
32955
|
var AL_MIN_CANVAS_PX = 320;
|
|
32956
32956
|
var AL_SPLIT_MIN_VIEWPORT_PX = AL_PANEL_WIDTH_PX + AL_MIN_CANVAS_PX;
|
|
32957
|
+
var DECK_HUD_BOTTOM_PX = 20;
|
|
32958
|
+
var DECK_HUD_HEIGHT_PX = 48;
|
|
32959
|
+
var DECK_HUD_TOP_PX = DECK_HUD_BOTTOM_PX + DECK_HUD_HEIGHT_PX;
|
|
32960
|
+
var DECK_CHROME_GAP_PX = 8;
|
|
32961
|
+
var DECK_ATTRIBUTION_BOTTOM_PX = DECK_HUD_TOP_PX + DECK_CHROME_GAP_PX;
|
|
32962
|
+
var DECK_ATTRIBUTION_NARROW_BOTTOM_PX = 104 + DECK_CHROME_GAP_PX;
|
|
32957
32963
|
|
|
32958
32964
|
// ../core/dist/integrations/augmented-live/asset.js
|
|
32959
32965
|
var MB = 1024 * 1024;
|
|
@@ -35202,6 +35208,29 @@ registerTriggerSource(videoRenderTriggerAdapter);
|
|
|
35202
35208
|
|
|
35203
35209
|
// ../core/dist/feature-flags/registry.js
|
|
35204
35210
|
var FLAG_REGISTRY = [
|
|
35211
|
+
{
|
|
35212
|
+
key: "impersonation-enabled",
|
|
35213
|
+
description: "Kill switch for admin impersonation (ENG-9080), filed during the 18 Aug cross-tenant identity incident. ON (default) = impersonation works as today. OFF = both halves of the flow refuse: the mint route stops issuing redeem URLs, and \u2014 the half that actually matters \u2014 the REDEEM route refuses before it inserts the nonce or calls generateLink, so a URL that was already issued cannot still mint a session. Redeem tokens live REDEEM_TTL_SECONDS = 300, so gating only the mint route would leave five minutes in which new sessions keep appearing after an operator believes they have stopped it. Evaluated as a GLOBAL stage value, read UNCACHED on the redeem path (see readImpersonationEnabled): a kill switch that takes a cache TTL to bite is not a kill switch. Containment only \u2014 it does not fix the underlying defect that redeem writes the target's cookies into whatever browser context opens the URL (ENG-8923 / ENG-9020).",
|
|
35214
|
+
flagType: "boolean",
|
|
35215
|
+
// Declared safe value is `true` = impersonation available, i.e. today's
|
|
35216
|
+
// behaviour, so merging this changes nothing until an operator flips it.
|
|
35217
|
+
//
|
|
35218
|
+
// NOTE the asymmetry with the other gates in this file, and it is
|
|
35219
|
+
// deliberate: their safe direction is "off / don't do the new thing"
|
|
35220
|
+
// because they gate NEW behaviour. This one gates EXISTING behaviour, so
|
|
35221
|
+
// the no-op default is `true`. The READ direction is where the safety lives
|
|
35222
|
+
// instead — an unreachable flag store resolves to DISABLED, not to this
|
|
35223
|
+
// default. See readImpersonationEnabled for that argument.
|
|
35224
|
+
defaultValue: true,
|
|
35225
|
+
// Enforcement gate (ADR-0022 section 4): re-enabling impersonation is
|
|
35226
|
+
// "relaxing a security control", exactly the mutation that must not happen
|
|
35227
|
+
// on a single unguarded write. The emergency direction (turning it OFF)
|
|
35228
|
+
// costs one confirmation, which is the right price.
|
|
35229
|
+
sensitive: true
|
|
35230
|
+
// Deliberately NOT public. A browser has no business evaluating whether
|
|
35231
|
+
// impersonation is available; both consumers are server-side route
|
|
35232
|
+
// handlers.
|
|
35233
|
+
},
|
|
35205
35234
|
{
|
|
35206
35235
|
key: "at-rest-v2-writes",
|
|
35207
35236
|
description: "ADR-0061 A2\u2192arm cutover (ENG-8944, parent ENG-8764). Gates whether the at-rest writer (encryptSecret/encryptAtRest) emits the v2 AAD-bound envelope when a DecryptContext is supplied; OFF (default) = the legacy v1 envelope (pre-ADR-0061 behaviour). Resolved FLEET-WIDE and process-global via setV2WritesArmed at the API + webapp + cron bootstrap seams, so ONLY the stage value applies \u2014 per-org overrides do not (the crypto writer carries no request/org context). Ships dark. Flip on only once every reader parses v2 (fleet-wide since release A1) AND the re-seal engine can re-seal v2 blobs before any AUTH_ENCRYPTION_KEY rotation (slice 5b). Reversible without redeploy: clearing it returns the writer to v1 within the flag cache TTL; already-written v2 blobs stay readable.",
|
|
@@ -36968,8 +36997,12 @@ function giveUpNoticeText(reason = null) {
|
|
|
36968
36997
|
}
|
|
36969
36998
|
return "\u26A0\uFE0F I couldn't read your last message \u2014 please resend it.";
|
|
36970
36999
|
}
|
|
36971
|
-
function turnFailedNoticeText() {
|
|
36972
|
-
|
|
37000
|
+
function turnFailedNoticeText(failureClass) {
|
|
37001
|
+
const cause = failureClass === "overloaded" ? "the service I run on is overloaded right now \u2014 nothing to do with you or what you asked for" : failureClass === "server_error" ? "something upstream of me is failing right now \u2014 nothing to do with you or what you asked for" : null;
|
|
37002
|
+
if (cause === null) {
|
|
37003
|
+
return "\u26A0\uFE0F Something went wrong on my side and I couldn\u2019t finish that. Sorry \u2014 send it again when you get a chance and I\u2019ll pick it straight up.";
|
|
37004
|
+
}
|
|
37005
|
+
return `\u26A0\uFE0F I couldn\u2019t finish that \u2014 ${cause}. Sorry \u2014 send it again when you get a chance and I\u2019ll pick it straight up.`;
|
|
36973
37006
|
}
|
|
36974
37007
|
function turnRetryingNoticeText() {
|
|
36975
37008
|
return "\u23F3 Still working on this \u2014 things are running slower than usual on my side. I\u2019ll reply as soon as I have it.";
|
|
@@ -42672,7 +42705,7 @@ function armSlackTurnFailureWatch(args) {
|
|
|
42672
42705
|
const posted = await postSlackTurnNotice({
|
|
42673
42706
|
channel,
|
|
42674
42707
|
threadTs: args.threadTs,
|
|
42675
|
-
text: turnFailedNoticeText()
|
|
42708
|
+
text: turnFailedNoticeText(failure.failureClass)
|
|
42676
42709
|
});
|
|
42677
42710
|
if (!posted.ok) {
|
|
42678
42711
|
lastSlackTurnFailedNoticeAt.delete(conversationKey);
|
|
@@ -33113,6 +33113,12 @@ var MARKUP_BRIDGE_SCRIPT = `<script>(function(){
|
|
|
33113
33113
|
var AL_PANEL_WIDTH_PX = 420;
|
|
33114
33114
|
var AL_MIN_CANVAS_PX = 320;
|
|
33115
33115
|
var AL_SPLIT_MIN_VIEWPORT_PX = AL_PANEL_WIDTH_PX + AL_MIN_CANVAS_PX;
|
|
33116
|
+
var DECK_HUD_BOTTOM_PX = 20;
|
|
33117
|
+
var DECK_HUD_HEIGHT_PX = 48;
|
|
33118
|
+
var DECK_HUD_TOP_PX = DECK_HUD_BOTTOM_PX + DECK_HUD_HEIGHT_PX;
|
|
33119
|
+
var DECK_CHROME_GAP_PX = 8;
|
|
33120
|
+
var DECK_ATTRIBUTION_BOTTOM_PX = DECK_HUD_TOP_PX + DECK_CHROME_GAP_PX;
|
|
33121
|
+
var DECK_ATTRIBUTION_NARROW_BOTTOM_PX = 104 + DECK_CHROME_GAP_PX;
|
|
33116
33122
|
|
|
33117
33123
|
// ../core/dist/integrations/augmented-live/asset.js
|
|
33118
33124
|
var MB = 1024 * 1024;
|
|
@@ -35361,6 +35367,29 @@ registerTriggerSource(videoRenderTriggerAdapter);
|
|
|
35361
35367
|
|
|
35362
35368
|
// ../core/dist/feature-flags/registry.js
|
|
35363
35369
|
var FLAG_REGISTRY = [
|
|
35370
|
+
{
|
|
35371
|
+
key: "impersonation-enabled",
|
|
35372
|
+
description: "Kill switch for admin impersonation (ENG-9080), filed during the 18 Aug cross-tenant identity incident. ON (default) = impersonation works as today. OFF = both halves of the flow refuse: the mint route stops issuing redeem URLs, and \u2014 the half that actually matters \u2014 the REDEEM route refuses before it inserts the nonce or calls generateLink, so a URL that was already issued cannot still mint a session. Redeem tokens live REDEEM_TTL_SECONDS = 300, so gating only the mint route would leave five minutes in which new sessions keep appearing after an operator believes they have stopped it. Evaluated as a GLOBAL stage value, read UNCACHED on the redeem path (see readImpersonationEnabled): a kill switch that takes a cache TTL to bite is not a kill switch. Containment only \u2014 it does not fix the underlying defect that redeem writes the target's cookies into whatever browser context opens the URL (ENG-8923 / ENG-9020).",
|
|
35373
|
+
flagType: "boolean",
|
|
35374
|
+
// Declared safe value is `true` = impersonation available, i.e. today's
|
|
35375
|
+
// behaviour, so merging this changes nothing until an operator flips it.
|
|
35376
|
+
//
|
|
35377
|
+
// NOTE the asymmetry with the other gates in this file, and it is
|
|
35378
|
+
// deliberate: their safe direction is "off / don't do the new thing"
|
|
35379
|
+
// because they gate NEW behaviour. This one gates EXISTING behaviour, so
|
|
35380
|
+
// the no-op default is `true`. The READ direction is where the safety lives
|
|
35381
|
+
// instead — an unreachable flag store resolves to DISABLED, not to this
|
|
35382
|
+
// default. See readImpersonationEnabled for that argument.
|
|
35383
|
+
defaultValue: true,
|
|
35384
|
+
// Enforcement gate (ADR-0022 section 4): re-enabling impersonation is
|
|
35385
|
+
// "relaxing a security control", exactly the mutation that must not happen
|
|
35386
|
+
// on a single unguarded write. The emergency direction (turning it OFF)
|
|
35387
|
+
// costs one confirmation, which is the right price.
|
|
35388
|
+
sensitive: true
|
|
35389
|
+
// Deliberately NOT public. A browser has no business evaluating whether
|
|
35390
|
+
// impersonation is available; both consumers are server-side route
|
|
35391
|
+
// handlers.
|
|
35392
|
+
},
|
|
35364
35393
|
{
|
|
35365
35394
|
key: "at-rest-v2-writes",
|
|
35366
35395
|
description: "ADR-0061 A2\u2192arm cutover (ENG-8944, parent ENG-8764). Gates whether the at-rest writer (encryptSecret/encryptAtRest) emits the v2 AAD-bound envelope when a DecryptContext is supplied; OFF (default) = the legacy v1 envelope (pre-ADR-0061 behaviour). Resolved FLEET-WIDE and process-global via setV2WritesArmed at the API + webapp + cron bootstrap seams, so ONLY the stage value applies \u2014 per-org overrides do not (the crypto writer carries no request/org context). Ships dark. Flip on only once every reader parses v2 (fleet-wide since release A1) AND the re-seal engine can re-seal v2 blobs before any AUTH_ENCRYPTION_KEY rotation (slice 5b). Reversible without redeploy: clearing it returns the writer to v1 within the flag cache TTL; already-written v2 blobs stay readable.",
|
|
@@ -39572,8 +39601,12 @@ function giveUpNoticeText(reason = null) {
|
|
|
39572
39601
|
}
|
|
39573
39602
|
return "\u26A0\uFE0F I couldn't read your last message \u2014 please resend it.";
|
|
39574
39603
|
}
|
|
39575
|
-
function turnFailedNoticeText() {
|
|
39576
|
-
|
|
39604
|
+
function turnFailedNoticeText(failureClass) {
|
|
39605
|
+
const cause = failureClass === "overloaded" ? "the service I run on is overloaded right now \u2014 nothing to do with you or what you asked for" : failureClass === "server_error" ? "something upstream of me is failing right now \u2014 nothing to do with you or what you asked for" : null;
|
|
39606
|
+
if (cause === null) {
|
|
39607
|
+
return "\u26A0\uFE0F Something went wrong on my side and I couldn\u2019t finish that. Sorry \u2014 send it again when you get a chance and I\u2019ll pick it straight up.";
|
|
39608
|
+
}
|
|
39609
|
+
return `\u26A0\uFE0F I couldn\u2019t finish that \u2014 ${cause}. Sorry \u2014 send it again when you get a chance and I\u2019ll pick it straight up.`;
|
|
39577
39610
|
}
|
|
39578
39611
|
function turnRetryingNoticeText() {
|
|
39579
39612
|
return "\u23F3 Still working on this \u2014 things are running slower than usual on my side. I\u2019ll reply as soon as I have it.";
|
|
@@ -41987,7 +42020,7 @@ function armTelegramTurnFailureWatch(args) {
|
|
|
41987
42020
|
const posted = await postTelegramTurnNotice({
|
|
41988
42021
|
chatId: args.chatId,
|
|
41989
42022
|
...args.messageThreadId != null ? { messageThreadId: args.messageThreadId } : {},
|
|
41990
|
-
text: turnFailedNoticeText()
|
|
42023
|
+
text: turnFailedNoticeText(failure.failureClass)
|
|
41991
42024
|
});
|
|
41992
42025
|
if (!posted) {
|
|
41993
42026
|
lastTurnFailedNoticeAt.delete(conversationKey);
|
|
@@ -43,8 +43,8 @@ import {
|
|
|
43
43
|
writeDirectChatSessionState,
|
|
44
44
|
writeEgressAllowlist,
|
|
45
45
|
writePersistentClaudeWrapper
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import "./chunk-
|
|
46
|
+
} from "./chunk-DJP4JZGE.js";
|
|
47
|
+
import "./chunk-RQAAW5LL.js";
|
|
48
48
|
import "./chunk-XWVM4KPK.js";
|
|
49
49
|
export {
|
|
50
50
|
EGRESS_BASELINE_DOMAINS,
|
|
@@ -92,4 +92,4 @@ export {
|
|
|
92
92
|
writeEgressAllowlist,
|
|
93
93
|
writePersistentClaudeWrapper
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=persistent-session-
|
|
95
|
+
//# sourceMappingURL=persistent-session-KO24RZN7.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-DJP4JZGE.js";
|
|
4
|
+
import "./chunk-RQAAW5LL.js";
|
|
5
5
|
import "./chunk-XWVM4KPK.js";
|
|
6
6
|
|
|
7
7
|
// src/lib/responsiveness-probe.ts
|
|
@@ -710,4 +710,4 @@ export {
|
|
|
710
710
|
readAndResetSlackReplyBindingClassifications,
|
|
711
711
|
readAndResetSlackReplyTargetClassifications
|
|
712
712
|
};
|
|
713
|
-
//# sourceMappingURL=responsiveness-probe-
|
|
713
|
+
//# sourceMappingURL=responsiveness-probe-V4O7DXYV.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionTranscriptDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RQAAW5LL.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/session-auth-dead.ts
|
|
6
6
|
import { closeSync, openSync, readSync, readdirSync, statSync } from "fs";
|
|
@@ -203,4 +203,4 @@ export {
|
|
|
203
203
|
decideSessionAuthState,
|
|
204
204
|
probeSessionAuth
|
|
205
205
|
};
|
|
206
|
-
//# sourceMappingURL=session-auth-dead-
|
|
206
|
+
//# sourceMappingURL=session-auth-dead-S7WK33WO.js.map
|