feat: Add API key authentication for backup tool

- Add get_api_key() and require_api_key() to auth.py
- Add generic key-value settings storage to SettingsStore
- Add test_api_key_auth to verify the implementation
- Uses secrets.compare_digest for timing-safe comparison
- Auto-generates API key on first use and stores in settings DB
This commit is contained in:
2026-05-11 21:25:46 +02:00
parent f912623677
commit 836f733a2e
31 changed files with 2014 additions and 1 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
+127
View File
@@ -0,0 +1,127 @@
{
"nextId": 1,
"settings": {
"globalPause": false,
"enginePaused": false,
"maxConcurrent": 2,
"maxTriageConcurrent": 2,
"globalMaxConcurrent": 4,
"maxWorktrees": 4,
"pollIntervalMs": 15000,
"heartbeatMultiplier": 1,
"groupOverlappingFiles": true,
"overlapIgnorePaths": [],
"autoMerge": true,
"mergeStrategy": "direct",
"requirePrApproval": false,
"pushAfterMerge": false,
"pushRemote": "origin",
"unavailableNodePolicy": "block",
"recycleWorktrees": false,
"worktreeNaming": "random",
"taskPrefix": "FN",
"includeTaskIdInCommit": true,
"commitAuthorEnabled": true,
"commitAuthorName": "Fusion",
"commitAuthorEmail": "noreply@runfusion.ai",
"modelPresets": [],
"autoSelectModelPreset": false,
"completionDocumentationMode": "off",
"defaultPresetBySize": {},
"autoResolveConflicts": true,
"smartConflictResolution": true,
"mergerAutostashMaxAgeHours": 24,
"worktreeRebaseBeforeMerge": true,
"worktreeRebaseRemote": "",
"worktreeRebaseLocalBase": true,
"mergeConflictStrategy": "smart-prefer-main",
"workflowStepTimeoutMs": 360000,
"strictScopeEnforcement": false,
"buildRetryCount": 0,
"verificationFixRetries": 3,
"buildTimeoutMs": 300000,
"requirePlanApproval": false,
"specStalenessEnabled": false,
"specStalenessMaxAgeMs": 21600000,
"aiSessionTtlMs": 604800000,
"aiSessionCleanupIntervalMs": 3600000,
"autoUnpauseEnabled": true,
"autoUnpauseBaseDelayMs": 300000,
"autoUnpauseMaxDelayMs": 3600000,
"maxStuckKills": 6,
"preserveProgressOnStuckRequeue": true,
"maxPostReviewFixes": 1,
"maxSpawnedAgentsPerParent": 5,
"maxSpawnedAgentsGlobal": 20,
"maintenanceIntervalMs": 300000,
"autoArchiveDoneTasksEnabled": true,
"autoArchiveDoneAfterMs": 172800000,
"archiveAgentLogMode": "compact",
"autoUpdatePrStatus": false,
"githubCommentOnDone": false,
"githubTrackingEnabledByDefault": false,
"githubAuthMode": "gh-cli",
"autoBackupEnabled": false,
"autoBackupSchedule": "0 2 * * *",
"autoBackupRetention": 7,
"autoBackupDir": ".fusion/backups",
"memoryBackupEnabled": false,
"memoryBackupSchedule": "0 3 * * *",
"memoryBackupRetention": 14,
"memoryBackupDir": ".fusion/backups/memory",
"memoryBackupScope": "all",
"autoSummarizeTitles": false,
"useAiMergeCommitSummary": true,
"insightExtractionEnabled": false,
"insightExtractionSchedule": "0 2 * * *",
"insightExtractionMinIntervalMs": 86400000,
"taskEvaluationEnabled": false,
"taskEvaluationSchedule": "0 5 * * *",
"taskEvaluationFollowUpPolicy": "off",
"memoryEnabled": true,
"memoryBackendType": "qmd",
"memoryAutoSummarizeEnabled": false,
"memoryAutoSummarizeThresholdChars": 50000,
"memoryAutoSummarizeSchedule": "0 3 * * *",
"memoryDreamsEnabled": false,
"memoryDreamsSchedule": "0 4 * * *",
"runStepsInNewSessions": false,
"maxParallelSteps": 2,
"missionStaleThresholdMs": 600000,
"missionMaxTaskRetries": 3,
"missionHealthCheckIntervalMs": 300000,
"reflectionEnabled": false,
"reflectionIntervalMs": 3600000,
"reflectionAfterTask": true,
"reviewHandoffPolicy": "disabled",
"showQuickChatFAB": false,
"researchSettings": {
"enabled": true,
"enabledSources": {
"webSearch": true,
"pageFetch": true,
"github": false,
"localDocs": true,
"llmSynthesis": true
},
"limits": {
"maxConcurrentRuns": 3,
"maxSourcesPerRun": 20,
"maxDurationMs": 300000,
"requestTimeoutMs": 30000
}
},
"evalSettings": {
"enabled": false,
"intervalMs": 86400000,
"followUpPolicy": "suggest-only",
"retentionDays": 30
},
"researchEnabled": true,
"researchMaxConcurrentRuns": 3,
"researchDefaultTimeout": 300000,
"researchMaxSourcesPerRun": 20,
"researchMaxSynthesisRounds": 2,
"globalPauseReason": "manual"
}
}
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
# Daily Memory 2026-05-11
<!-- Append running observations, open loops, and day-to-day notes here. Promote evergreen facts to MEMORY.md. -->
+3
View File
@@ -0,0 +1,3 @@
# Memory Dreams
<!-- Periodic synthesized patterns from daily notes. Promote durable lessons to MEMORY.md. -->
+19
View File
@@ -0,0 +1,19 @@
# Project Memory
<!-- This file stores durable project learnings. Agents consult and update it during triage and execution. -->
## Architecture
<!-- Key architectural patterns, module boundaries, and design decisions -->
## Conventions
<!-- Project-specific coding standards, naming patterns, file organization -->
## Pitfalls
<!-- Known issues, common mistakes, and things to avoid -->
## Context
<!-- Important background information, dependency constraints, deployment notes -->