Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ vi.mock("@/hooks/queries/system-queries", () => ({
changelogPreview: false,
editMessages: false,
mobileApp: false,
providerSessionReaping: false,
timelineWindowing: false,
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ vi.mock("@/hooks/queries/system-queries", () => ({
changelogPreview: false,
editMessages: false,
mobileApp: false,
providerSessionReaping: false,
timelineWindowing: false,
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ vi.mock("@/hooks/queries/system-queries", () => ({
data: {
experiments: {
editMessages: false,
providerSessionReaping: false,
},
},
}),
Expand Down
1 change: 0 additions & 1 deletion apps/app/src/lib/system-config-atoms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ const unavailableSystemConfig: SystemConfigResponse = {
changelogPreview: false,
editMessages: false,
mobileApp: false,
providerSessionReaping: false,
timelineWindowing: false,
},
appearance: defaultAppTheme,
Expand Down
12 changes: 0 additions & 12 deletions apps/app/src/views/SettingsView.experiments.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ afterEach(cleanup);
function renderSection(overrides?: {
onChangelogPreviewEnabledChange?: (enabled: boolean) => void;
onMobileAppEnabledChange?: (enabled: boolean) => void;
onProviderSessionReapingEnabledChange?: (enabled: boolean) => void;
onTimelineWindowingEnabledChange?: (enabled: boolean) => void;
}) {
return render(
Expand All @@ -17,16 +16,12 @@ function renderSection(overrides?: {
disabled={false}
editMessagesEnabled={false}
mobileAppEnabled={false}
providerSessionReapingEnabled={false}
timelineWindowingEnabled={false}
onChangelogPreviewEnabledChange={
overrides?.onChangelogPreviewEnabledChange ?? vi.fn()
}
onEditMessagesEnabledChange={vi.fn()}
onMobileAppEnabledChange={overrides?.onMobileAppEnabledChange ?? vi.fn()}
onProviderSessionReapingEnabledChange={
overrides?.onProviderSessionReapingEnabledChange ?? vi.fn()
}
onTimelineWindowingEnabledChange={
overrides?.onTimelineWindowingEnabledChange ?? vi.fn()
}
Expand All @@ -49,13 +44,6 @@ describe("ExperimentsSettingsSection", () => {
expect(onChange).toHaveBeenCalledWith(true);
});

it("reports idle provider session release changes", () => {
const onChange = vi.fn();
renderSection({ onProviderSessionReapingEnabledChange: onChange });
fireEvent.click(screen.getByLabelText("Idle provider session release"));
expect(onChange).toHaveBeenCalledWith(true);
});

it("reports timeline windowing changes", () => {
const onChange = vi.fn();
renderSection({ onTimelineWindowingEnabledChange: onChange });
Expand Down
7 changes: 0 additions & 7 deletions apps/app/src/views/SettingsView.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,6 @@ function ExperimentsStory() {
disabled={false}
editMessagesEnabled={state.experiments.editMessages}
mobileAppEnabled={state.experiments.mobileApp}
providerSessionReapingEnabled={state.experiments.providerSessionReaping}
timelineWindowingEnabled={state.experiments.timelineWindowing}
onChangelogPreviewEnabledChange={(enabled) =>
state.setExperiments((current) => ({
Expand All @@ -376,12 +375,6 @@ function ExperimentsStory() {
mobileApp: enabled,
}))
}
onProviderSessionReapingEnabledChange={(enabled) =>
state.setExperiments((current) => ({
...current,
providerSessionReaping: enabled,
}))
}
onTimelineWindowingEnabledChange={(enabled) =>
state.setExperiments((current) => ({
...current,
Expand Down
25 changes: 0 additions & 25 deletions apps/app/src/views/SettingsView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -186,12 +186,10 @@ interface ExperimentsSettingsSectionProps {
changelogPreviewEnabled: boolean;
editMessagesEnabled: boolean;
mobileAppEnabled: boolean;
providerSessionReapingEnabled: boolean;
timelineWindowingEnabled: boolean;
onChangelogPreviewEnabledChange: (enabled: boolean) => void;
onEditMessagesEnabledChange: (enabled: boolean) => void;
onMobileAppEnabledChange: (enabled: boolean) => void;
onProviderSessionReapingEnabledChange: (enabled: boolean) => void;
onTimelineWindowingEnabledChange: (enabled: boolean) => void;
}

Expand Down Expand Up @@ -883,20 +881,16 @@ export function ProviderSettingsSection({
const CHANGELOG_PREVIEW_EXPERIMENT_LABEL = "Changelog preview";
const EDIT_MESSAGES_EXPERIMENT_LABEL = "Edit messages";
const MOBILE_APP_EXPERIMENT_LABEL = "Mobile app";
const PROVIDER_SESSION_REAPING_EXPERIMENT_LABEL =
"Idle provider session release";
const TIMELINE_WINDOWING_EXPERIMENT_LABEL = "Timeline windowing";
export function ExperimentsSettingsSection({
changelogPreviewEnabled,
disabled,
editMessagesEnabled,
mobileAppEnabled,
providerSessionReapingEnabled,
timelineWindowingEnabled,
onChangelogPreviewEnabledChange,
onEditMessagesEnabledChange,
onMobileAppEnabledChange,
onProviderSessionReapingEnabledChange,
onTimelineWindowingEnabledChange,
}: ExperimentsSettingsSectionProps) {
return (
Expand Down Expand Up @@ -941,18 +935,6 @@ export function ExperimentsSettingsSection({
/>
</SettingsWithControl>

<SettingsWithControl
label={PROVIDER_SESSION_REAPING_EXPERIMENT_LABEL}
description="Release restorable provider sessions after 30 idle minutes. A change can take up to five minutes."
>
<Switch
checked={providerSessionReapingEnabled}
disabled={disabled}
onCheckedChange={onProviderSessionReapingEnabledChange}
aria-label={PROVIDER_SESSION_REAPING_EXPERIMENT_LABEL}
/>
</SettingsWithControl>

<SettingsWithControl
label={TIMELINE_WINDOWING_EXPERIMENT_LABEL}
description="Mount only nearby rows in long timelines and expanded timeline details."
Expand Down Expand Up @@ -1143,13 +1125,6 @@ export function SettingsView() {
mobileApp: enabled,
})
}
providerSessionReapingEnabled={experiments.providerSessionReaping}
onProviderSessionReapingEnabledChange={(enabled) =>
updateExperimentsMutation.mutate({
...experiments,
providerSessionReaping: enabled,
})
}
timelineWindowingEnabled={experiments.timelineWindowing}
onTimelineWindowingEnabledChange={(enabled) =>
updateExperimentsMutation.mutate({
Expand Down
1 change: 0 additions & 1 deletion apps/desktop/scripts/smoke-packaged-app.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,6 @@ async function startSmokeServer({
dataDir,
experiments: {
mobileApp: false,
providerSessionReaping: false,
},
featureFlags: {
placeholder: false,
Expand Down
1 change: 0 additions & 1 deletion apps/desktop/test/preload-build.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,6 @@ async function startDesktopSmokeServer(
changelogPreview: false,
editMessages: false,
mobileApp: false,
providerSessionReaping: false,
timelineWindowing: false,
},
featureFlags: {
Expand Down
3 changes: 0 additions & 3 deletions apps/host-daemon/src/app.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,6 @@ describe("createHostDaemonApp", () => {
const reaper = startIdleProviderSessionReaper({
logger,
nowMs: () => nowMs,
resolveProviderSessionReapingEnabled: async () => true,
runtimeManager: {
reapIdleProviderSessions,
},
Expand All @@ -648,7 +647,6 @@ describe("createHostDaemonApp", () => {
expect(reapIdleProviderSessions).toHaveBeenNthCalledWith(1, {
idleForMs: 1_800_000,
nowMs: 1_000,
providerSessionReapingEnabled: true,
});

nowMs = 2_000;
Expand Down Expand Up @@ -688,7 +686,6 @@ describe("createHostDaemonApp", () => {
expect(reapIdleProviderSessions).toHaveBeenNthCalledWith(2, {
idleForMs: 1_800_000,
nowMs: 2_000,
providerSessionReapingEnabled: true,
});
expect(logger.warn).toHaveBeenCalledWith(
{
Expand Down
22 changes: 4 additions & 18 deletions apps/host-daemon/src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ interface IdleProviderSessionReaperRuntimeManager {
interface StartIdleProviderSessionReaperArgs {
logger: HostDaemonLogger;
nowMs: () => number;
resolveProviderSessionReapingEnabled: () => Promise<boolean>;
runtimeManager: IdleProviderSessionReaperRuntimeManager;
setIntervalFn: IdleProviderSessionReaperIntervalFn;
}
Expand Down Expand Up @@ -161,22 +160,11 @@ export function startIdleProviderSessionReaper(
return;
}
running = true;
void args
.resolveProviderSessionReapingEnabled()
.catch((error) => {
args.logger.warn(
{ ...runtimeErrorLogFields(error) },
"Failed to read idle provider session experiment policy",
);
return false;
void args.runtimeManager
.reapIdleProviderSessions({
idleForMs: IDLE_PROVIDER_SESSION_REAP_AFTER_MS,
nowMs: args.nowMs(),
})
.then((providerSessionReapingEnabled) =>
args.runtimeManager.reapIdleProviderSessions({
idleForMs: IDLE_PROVIDER_SESSION_REAP_AFTER_MS,
nowMs: args.nowMs(),
providerSessionReapingEnabled,
}),
)
.then((result) => {
if (result.reapedSessions.length === 0) {
return;
Expand Down Expand Up @@ -699,8 +687,6 @@ export async function createHostDaemonApp(
const idleProviderSessionReaper = startIdleProviderSessionReaper({
logger: options.logger,
nowMs: Date.now,
resolveProviderSessionReapingEnabled: async () =>
(await serverClient.getRuntimePolicy()).providerSessionReaping,
runtimeManager,
setIntervalFn: (callback, intervalMs) => {
const timer = setInterval(callback, intervalMs);
Expand Down
4 changes: 0 additions & 4 deletions apps/host-daemon/src/runtime-manager.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,6 @@ describe("RuntimeManager", () => {
manager.reapIdleProviderSessions({
idleForMs: 1_000,
nowMs: 5_000,
providerSessionReapingEnabled: false,
}),
).resolves.toEqual({
reapedSessions: [
Expand All @@ -444,13 +443,11 @@ describe("RuntimeManager", () => {
expect(firstRuntime.reapIdleProviderSessions).toHaveBeenCalledWith({
idleForMs: 1_000,
nowMs: 5_000,
providerSessionReapingEnabled: false,
runThreadExclusive: expect.any(Function),
});
expect(secondRuntime.reapIdleProviderSessions).toHaveBeenCalledWith({
idleForMs: 1_000,
nowMs: 5_000,
providerSessionReapingEnabled: false,
runThreadExclusive: expect.any(Function),
});
});
Expand Down Expand Up @@ -486,7 +483,6 @@ describe("RuntimeManager", () => {
const result = await manager.reapIdleProviderSessions({
idleForMs: 1_000,
nowMs: 5_000,
providerSessionReapingEnabled: true,
});

expect(result.reapedSessions).toEqual([]);
Expand Down
1 change: 0 additions & 1 deletion apps/host-daemon/src/runtime-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,6 @@ export interface RuntimeManagerOptions {
export interface RuntimeManagerReapIdleProviderSessionsArgs {
idleForMs: number;
nowMs: number;
providerSessionReapingEnabled: boolean;
}

interface RuntimeManagerReapedIdleProviderSession extends ReapedIdleProviderSession {
Expand Down
21 changes: 0 additions & 21 deletions apps/host-daemon/src/server-client.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,27 +42,6 @@ function createInteractiveRequest(): PendingInteractionCreate {
}

describe("createServerClient", () => {
it("reads the current runtime policy", async () => {
const fetchFn = vi.fn<FetchFn>(async (input, init) => {
expect(String(input)).toBe(
"https://bb.example.test/internal/runtime-policy",
);
expect(init?.method).toBe("GET");
return Response.json({ providerSessionReaping: true });
});
const client = createServerClient({
fetchFn,
getSessionId: () => "session-1",
hostKey: "host-key",
logger: createLogger(),
serverUrl: "https://bb.example.test",
});

await expect(client.getRuntimePolicy()).resolves.toEqual({
providerSessionReaping: true,
});
});

it("narrows a protocol update retry request from error details", async () => {
const fetchFn = vi.fn<FetchFn>(async () =>
Response.json(
Expand Down
14 changes: 0 additions & 14 deletions apps/host-daemon/src/server-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {
hostDaemonEventBatchResponseSchema,
hostDaemonInteractiveInterruptResponseSchema,
hostDaemonInteractiveRequestResponseSchema,
hostDaemonRuntimePolicySchema,
hostDaemonSessionOpenResponseSchema,
hostDaemonSkillTreeSchema,
hostDaemonToolCallResponseSchema,
Expand All @@ -17,7 +16,6 @@ import {
type HostDaemonInteractiveInterruptRequest,
type HostDaemonInteractiveRequest,
type HostDaemonLoadedEnvironment,
type HostDaemonRuntimePolicy,
type HostDaemonProjectAttachmentContentQuery,
type HostDaemonSessionOpenRequest,
type HostDaemonSessionOpenResponse,
Expand Down Expand Up @@ -182,7 +180,6 @@ interface OpenSessionArgs {
}

export interface ServerClient {
getRuntimePolicy(): Promise<HostDaemonRuntimePolicy>;
openSession(args: OpenSessionArgs): Promise<HostDaemonSessionOpenResponse>;
fetchProjectAttachment(
args: FetchProjectAttachmentArgs,
Expand Down Expand Up @@ -449,17 +446,6 @@ export function createServerClient(
}

return {
async getRuntimePolicy(): Promise<HostDaemonRuntimePolicy> {
const response = await fetchFn(buildInternalUrl("/runtime-policy"), {
method: "GET",
headers: headers(),
});
if (!response.ok) {
throw await createResponseError("get runtime policy", response);
}
return hostDaemonRuntimePolicySchema.parse(await response.json());
},

async openSession(
args: OpenSessionArgs,
): Promise<HostDaemonSessionOpenResponse> {
Expand Down
1 change: 0 additions & 1 deletion apps/host-daemon/src/server-connection.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,6 @@ function createServerClientFixture(args: CreateServerClientFixtureArgs = {}) {
};
const serverClient = {
openSession,
getRuntimePolicy: unused,
fetchProjectAttachment: unused,
fetchSkillTree: unused,
fetchPluginHostArtifact: unused,
Expand Down
1 change: 0 additions & 1 deletion apps/mobile/e2e/scripts/phase7-settings-reset.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ const experiments = http.put(`${SERVER_URL}/api/v1/settings/experiments`, {
editMessages: true,
mobileApp: false,
newOnboarding: false,
providerSessionReaping: false,
}),
});
if (!experiments.ok) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,6 @@ const EXPERIMENT_ROWS: readonly ExperimentRow[] = [
description:
"Pair the bb mobile app over bb connect: shows Add mobile device under Remote access (web and desktop) and enables bb connect machine-code.",
},
{
key: "providerSessionReaping",
label: "Idle provider session release",
description:
"Release restorable provider sessions after 30 idle minutes. A change can take up to five minutes.",
},
];

/** `/settings/experiments`: the server-persisted opt-in toggles (`PUT /settings/experiments`). */
Expand Down
Loading