Feat : import session into auto firefox
All checks were successful
release / build (push) Successful in 27s
release / verify-windows (push) Successful in 1m15s

This commit is contained in:
jeanotx32
2026-08-12 03:45:35 +02:00
parent ae8ae6b91d
commit 8fef1aacb0
7 changed files with 258 additions and 1 deletions

View File

@@ -46,6 +46,8 @@ const EVENT_STYLES: Record<AgentEvent, EventStyle> = {
'fullscreen.failed': { icon: '⛶', tone: 'warn' },
'browser.opened': { icon: '⊞', tone: 'info' },
'browser.closed': { icon: '⊟', tone: 'offline' },
'browser.imported': { icon: '⇄', tone: 'ok' },
'browser.importFailed': { icon: '⇄', tone: 'warn' },
'preset.applied': { icon: '≡', tone: 'ok' },
'preset.failed': { icon: '≡', tone: 'warn' },
'config.changed': { icon: '⚙', tone: 'info' },

View File

@@ -6,6 +6,7 @@ import type {
PresetApplyResult,
RecordingPreset,
RecordingSettings,
SessionImportResult,
StreamState,
WatchSettings,
WatchTarget,
@@ -85,6 +86,8 @@ export function AgentSettings({ agent, targets, onClose, onCommand, notify }: Pr
const [recording, setRecording] = useState<RecordingSettings>(agent.recording);
const [presetResult, setPresetResult] = useState<PresetApplyResult | null>(null);
const [applyingPreset, setApplyingPreset] = useState(false);
const [importResult, setImportResult] = useState<SessionImportResult | null>(null);
const [importingSession, setImportingSession] = useState(false);
const preset = findRecordingPreset(recording.presetId) ?? RECORDING_PRESETS[0]!;
const encoderInfo = RECORDING_ENCODERS[recording.encoder];
@@ -127,6 +130,25 @@ export function AgentSettings({ agent, targets, onClose, onCommand, notify }: Pr
}
}
/**
* Copie les cookies du Firefox personnel dans le profil piloté, pour que la
* capture démarre déjà connectée. Ferme au passage l'instance pilotée si
* elle tournait — la prochaine capture la relance avec les cookies neufs.
*/
async function importSession() {
setImportingSession(true);
setImportResult(null);
try {
const { data } = await api.command(agent.id, 'browser.importSession');
setImportResult(data as SessionImportResult);
notify('Session importée');
} catch (err) {
notify(err instanceof Error ? err.message : "Import de session impossible", 'error');
} finally {
setImportingSession(false);
}
}
async function save() {
setBusy(true);
try {
@@ -441,6 +463,33 @@ export function AgentSettings({ agent, targets, onClose, onCommand, notify }: Pr
</label>
)}
{browser.mode === 'bidi' && (
<div className="row" style={{ alignItems: 'flex-start' }}>
<div className="field grow">
<button
className="ghost"
disabled={importingSession}
onClick={() => void importSession()}
>
{importingSession ? 'Import' : 'Importer les cookies du Firefox personnel'}
</button>
<span className="muted small">
Le profil piloté part vierge, donc déconnecté des sites où tu es connecté
ailleurs. Cette action copie les cookies de session (et rien d'autre) depuis
ton Firefox habituel, en lecture seule rien n'y est jamais écrit. Connecte-toi
d'abord dans ce Firefox- si ce n'est pas déjà fait. L'instance pilotée en
cours, s'il y en a une, est fermée : la prochaine capture repart connectée.
</span>
{importResult && (
<p className="small">
Copié depuis <code>{importResult.sourceProfile}</code> :{' '}
{importResult.copied.join(', ')}
</p>
)}
</div>
</div>
)}
<div className="row">
<label className="field grow">
<span>Délai avant le plein écran (s)</span>