commit d74f77fd33362c4216851439d35a1a42ca718fd9 Author: Fusion Date: Thu May 14 01:14:36 2026 +0200 feat(FN-002): complete Step 1 — Root Monorepo Tooling and Repository Hygiene diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..7875149 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.py] +indent_size = 4 + +[Makefile] +indent_style = tab diff --git a/.fusion/config.json b/.fusion/config.json new file mode 100644 index 0000000..bc1393a --- /dev/null +++ b/.fusion/config.json @@ -0,0 +1,132 @@ +{ + "settings": { + "globalPause": false, + "enginePaused": false, + "maxConcurrent": 2, + "maxTriageConcurrent": 2, + "globalMaxConcurrent": 4, + "maxWorktrees": 4, + "pollIntervalMs": 15000, + "heartbeatMultiplier": 1, + "groupOverlappingFiles": true, + "overlapIgnorePaths": [], + "autoMerge": true, + "mergeStrategy": "direct", + "directMergeCommitStrategy": "auto", + "requirePrApproval": false, + "pushAfterMerge": false, + "pushRemote": "origin", + "unavailableNodePolicy": "block", + "recycleWorktrees": false, + "executorAllowSiblingBranchRename": 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", + "mergeStrategyOverlapBehavior": "flip-to-prefer-branch", + "workflowStepTimeoutMs": 360000, + "workflowRevisionForkOnScopeMismatch": true, + "strictScopeEnforcement": false, + "buildRetryCount": 0, + "verificationFixRetries": 3, + "buildTimeoutMs": 300000, + "requirePlanApproval": false, + "agentProvisioning": {}, + "specStalenessEnabled": false, + "specStalenessMaxAgeMs": 21600000, + "taskStuckTimeoutMs": 600000, + "staleHighFanoutBlockerAgeThresholdMs": 7200000, + "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 + } +} \ No newline at end of file diff --git a/.fusion/fusion.db b/.fusion/fusion.db new file mode 100644 index 0000000..8f15bff Binary files /dev/null and b/.fusion/fusion.db differ diff --git a/.fusion/memory/2026-05-13.md b/.fusion/memory/2026-05-13.md new file mode 100644 index 0000000..d722dc0 --- /dev/null +++ b/.fusion/memory/2026-05-13.md @@ -0,0 +1,3 @@ +# Daily Memory 2026-05-13 + + diff --git a/.fusion/memory/DREAMS.md b/.fusion/memory/DREAMS.md new file mode 100644 index 0000000..1e1f4f5 --- /dev/null +++ b/.fusion/memory/DREAMS.md @@ -0,0 +1,3 @@ +# Memory Dreams + + diff --git a/.fusion/memory/MEMORY.md b/.fusion/memory/MEMORY.md new file mode 100644 index 0000000..3407ce8 --- /dev/null +++ b/.fusion/memory/MEMORY.md @@ -0,0 +1,19 @@ +# Project Memory + + + +## Architecture + + + +## Conventions + + + +## Pitfalls + + + +## Context + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6aea1c8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,50 @@ +# Dependencies +node_modules/ +.pnpm-store/ + +# Build outputs +dist/ +build/ +*.tsbuildinfo + +# Environment +.env +.env.local +.env.*.local + +# IDE +.idea/ +.vscode/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db + +# Logs +*.log +logs/ + +# Testing +coverage/ + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.venv/ +venv/ +ENV/ +env/ +.egg-info/ +dist/ + +# Docker volumes +docker-volumes/ + +# Misc +.cache/ +.temp/ +tmp/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..145d157 --- /dev/null +++ b/Makefile @@ -0,0 +1,29 @@ +.PHONY: install lint test typecheck build dev compose-up compose-down clean + +install: + pnpm install + cd apps/api && python3 -m venv .venv && .venv/bin/pip install -e ".[dev]" + +lint: + pnpm lint + +test: + pnpm test + +typecheck: + pnpm typecheck + +build: + pnpm build + +dev: + pnpm dev + +compose-up: + docker compose up --build -d + +compose-down: + docker compose down + +clean: + rm -rf node_modules apps/web/node_modules apps/api/.venv diff --git a/package.json b/package.json new file mode 100644 index 0000000..1393fea --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "headquarter", + "version": "0.0.1", + "private": true, + "description": "Hosted workspace and tool-orchestration platform", + "scripts": { + "lint": "pnpm --filter @headquarter/web lint && pnpm --filter @headquarter/api lint", + "test": "pnpm --filter @headquarter/web test && pnpm --filter @headquarter/api test", + "typecheck": "pnpm --filter @headquarter/web typecheck && pnpm --filter @headquarter/api typecheck", + "build": "pnpm --filter @headquarter/web build && pnpm --filter @headquarter/api build", + "dev": "pnpm --parallel --filter @headquarter/web --filter @headquarter/api dev", + "compose:up": "docker compose up --build -d", + "compose:down": "docker compose down" + }, + "packageManager": "pnpm@11.1.1", + "engines": { + "node": ">=20", + "pnpm": ">=9" + } +} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..e9b0dad --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - 'apps/*' + - 'packages/*'