fo-core 2.0.0b2__tar.gz
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.
- fo_core-2.0.0b2/LICENSE +21 -0
- fo_core-2.0.0b2/PKG-INFO +274 -0
- fo_core-2.0.0b2/README.md +155 -0
- fo_core-2.0.0b2/pyproject.toml +454 -0
- fo_core-2.0.0b2/setup.cfg +4 -0
- fo_core-2.0.0b2/src/cli/__init__.py +65 -0
- fo_core-2.0.0b2/src/cli/analytics.py +391 -0
- fo_core-2.0.0b2/src/cli/autotag_v2.py +252 -0
- fo_core-2.0.0b2/src/cli/benchmark.py +1352 -0
- fo_core-2.0.0b2/src/cli/completion.py +54 -0
- fo_core-2.0.0b2/src/cli/config_cli.py +102 -0
- fo_core-2.0.0b2/src/cli/copilot.py +99 -0
- fo_core-2.0.0b2/src/cli/daemon.py +236 -0
- fo_core-2.0.0b2/src/cli/dedupe_renderer.py +465 -0
- fo_core-2.0.0b2/src/cli/dedupe_v2.py +385 -0
- fo_core-2.0.0b2/src/cli/doctor.py +460 -0
- fo_core-2.0.0b2/src/cli/interactive.py +107 -0
- fo_core-2.0.0b2/src/cli/lazy.py +173 -0
- fo_core-2.0.0b2/src/cli/main.py +452 -0
- fo_core-2.0.0b2/src/cli/models_cli.py +52 -0
- fo_core-2.0.0b2/src/cli/organize.py +260 -0
- fo_core-2.0.0b2/src/cli/path_validation.py +147 -0
- fo_core-2.0.0b2/src/cli/profile.py +520 -0
- fo_core-2.0.0b2/src/cli/rules.py +292 -0
- fo_core-2.0.0b2/src/cli/setup.py +261 -0
- fo_core-2.0.0b2/src/cli/state.py +47 -0
- fo_core-2.0.0b2/src/cli/suggest.py +244 -0
- fo_core-2.0.0b2/src/cli/undo_history.py +319 -0
- fo_core-2.0.0b2/src/cli/undo_recover.py +149 -0
- fo_core-2.0.0b2/src/cli/undo_redo.py +269 -0
- fo_core-2.0.0b2/src/cli/update.py +98 -0
- fo_core-2.0.0b2/src/cli/utilities.py +463 -0
- fo_core-2.0.0b2/src/config/__init__.py +18 -0
- fo_core-2.0.0b2/src/config/manager.py +488 -0
- fo_core-2.0.0b2/src/config/migrations.py +218 -0
- fo_core-2.0.0b2/src/config/path_manager.py +157 -0
- fo_core-2.0.0b2/src/config/path_migration.py +112 -0
- fo_core-2.0.0b2/src/config/provider_env.py +362 -0
- fo_core-2.0.0b2/src/config/schema.py +113 -0
- fo_core-2.0.0b2/src/core/__init__.py +28 -0
- fo_core-2.0.0b2/src/core/backend_detector.py +267 -0
- fo_core-2.0.0b2/src/core/dispatcher.py +404 -0
- fo_core-2.0.0b2/src/core/display.py +99 -0
- fo_core-2.0.0b2/src/core/file_ops.py +206 -0
- fo_core-2.0.0b2/src/core/hardware_profile.py +317 -0
- fo_core-2.0.0b2/src/core/initializer.py +117 -0
- fo_core-2.0.0b2/src/core/organizer.py +669 -0
- fo_core-2.0.0b2/src/core/path_guard.py +202 -0
- fo_core-2.0.0b2/src/core/setup_wizard.py +373 -0
- fo_core-2.0.0b2/src/core/types.py +124 -0
- fo_core-2.0.0b2/src/daemon/__init__.py +20 -0
- fo_core-2.0.0b2/src/daemon/config.py +59 -0
- fo_core-2.0.0b2/src/daemon/pid.py +446 -0
- fo_core-2.0.0b2/src/daemon/scheduler.py +197 -0
- fo_core-2.0.0b2/src/daemon/service.py +524 -0
- fo_core-2.0.0b2/src/events/__init__.py +82 -0
- fo_core-2.0.0b2/src/events/audit.py +286 -0
- fo_core-2.0.0b2/src/events/config.py +46 -0
- fo_core-2.0.0b2/src/events/consumer.py +260 -0
- fo_core-2.0.0b2/src/events/discovery.py +266 -0
- fo_core-2.0.0b2/src/events/health.py +275 -0
- fo_core-2.0.0b2/src/events/middleware.py +464 -0
- fo_core-2.0.0b2/src/events/monitor.py +251 -0
- fo_core-2.0.0b2/src/events/publisher.py +179 -0
- fo_core-2.0.0b2/src/events/pubsub.py +301 -0
- fo_core-2.0.0b2/src/events/replay.py +322 -0
- fo_core-2.0.0b2/src/events/service_bus.py +374 -0
- fo_core-2.0.0b2/src/events/stream.py +432 -0
- fo_core-2.0.0b2/src/events/subscription.py +285 -0
- fo_core-2.0.0b2/src/events/types.py +134 -0
- fo_core-2.0.0b2/src/fo_core.egg-info/PKG-INFO +274 -0
- fo_core-2.0.0b2/src/fo_core.egg-info/SOURCES.txt +329 -0
- fo_core-2.0.0b2/src/fo_core.egg-info/dependency_links.txt +1 -0
- fo_core-2.0.0b2/src/fo_core.egg-info/entry_points.txt +2 -0
- fo_core-2.0.0b2/src/fo_core.egg-info/requires.txt +111 -0
- fo_core-2.0.0b2/src/fo_core.egg-info/top_level.txt +18 -0
- fo_core-2.0.0b2/src/history/__init__.py +30 -0
- fo_core-2.0.0b2/src/history/cleanup.py +425 -0
- fo_core-2.0.0b2/src/history/database.py +464 -0
- fo_core-2.0.0b2/src/history/export.py +347 -0
- fo_core-2.0.0b2/src/history/models.py +306 -0
- fo_core-2.0.0b2/src/history/tracker.py +370 -0
- fo_core-2.0.0b2/src/history/transaction.py +307 -0
- fo_core-2.0.0b2/src/integrations/__init__.py +25 -0
- fo_core-2.0.0b2/src/integrations/base.py +73 -0
- fo_core-2.0.0b2/src/integrations/browser.py +68 -0
- fo_core-2.0.0b2/src/integrations/manager.py +109 -0
- fo_core-2.0.0b2/src/integrations/obsidian.py +141 -0
- fo_core-2.0.0b2/src/integrations/vscode.py +96 -0
- fo_core-2.0.0b2/src/integrations/workflow.py +108 -0
- fo_core-2.0.0b2/src/interfaces/__init__.py +43 -0
- fo_core-2.0.0b2/src/interfaces/intelligence.py +63 -0
- fo_core-2.0.0b2/src/interfaces/model.py +75 -0
- fo_core-2.0.0b2/src/interfaces/pipeline.py +116 -0
- fo_core-2.0.0b2/src/interfaces/processor.py +71 -0
- fo_core-2.0.0b2/src/interfaces/search.py +97 -0
- fo_core-2.0.0b2/src/interfaces/storage.py +77 -0
- fo_core-2.0.0b2/src/methodologies/__init__.py +3 -0
- fo_core-2.0.0b2/src/methodologies/johnny_decimal/__init__.py +147 -0
- fo_core-2.0.0b2/src/methodologies/johnny_decimal/adapters.py +392 -0
- fo_core-2.0.0b2/src/methodologies/johnny_decimal/categories.py +491 -0
- fo_core-2.0.0b2/src/methodologies/johnny_decimal/compatibility.py +426 -0
- fo_core-2.0.0b2/src/methodologies/johnny_decimal/config.py +417 -0
- fo_core-2.0.0b2/src/methodologies/johnny_decimal/migrator.py +448 -0
- fo_core-2.0.0b2/src/methodologies/johnny_decimal/numbering.py +526 -0
- fo_core-2.0.0b2/src/methodologies/johnny_decimal/scanner.py +363 -0
- fo_core-2.0.0b2/src/methodologies/johnny_decimal/system.py +574 -0
- fo_core-2.0.0b2/src/methodologies/johnny_decimal/transformer.py +360 -0
- fo_core-2.0.0b2/src/methodologies/johnny_decimal/validator.py +349 -0
- fo_core-2.0.0b2/src/methodologies/para/__init__.py +59 -0
- fo_core-2.0.0b2/src/methodologies/para/ai/__init__.py +59 -0
- fo_core-2.0.0b2/src/methodologies/para/ai/feature_extractor.py +540 -0
- fo_core-2.0.0b2/src/methodologies/para/ai/feedback.py +549 -0
- fo_core-2.0.0b2/src/methodologies/para/ai/file_mover.py +492 -0
- fo_core-2.0.0b2/src/methodologies/para/ai/suggestion_engine.py +620 -0
- fo_core-2.0.0b2/src/methodologies/para/categories.py +379 -0
- fo_core-2.0.0b2/src/methodologies/para/config.py +351 -0
- fo_core-2.0.0b2/src/methodologies/para/default_config.yaml +123 -0
- fo_core-2.0.0b2/src/methodologies/para/detection/__init__.py +27 -0
- fo_core-2.0.0b2/src/methodologies/para/detection/heuristics.py +1170 -0
- fo_core-2.0.0b2/src/methodologies/para/folder_generator.py +267 -0
- fo_core-2.0.0b2/src/methodologies/para/folder_mapper.py +382 -0
- fo_core-2.0.0b2/src/methodologies/para/migration_manager.py +725 -0
- fo_core-2.0.0b2/src/methodologies/para/rules/__init__.py +37 -0
- fo_core-2.0.0b2/src/methodologies/para/rules/engine.py +585 -0
- fo_core-2.0.0b2/src/models/__init__.py +60 -0
- fo_core-2.0.0b2/src/models/_claude_client.py +76 -0
- fo_core-2.0.0b2/src/models/_claude_response.py +56 -0
- fo_core-2.0.0b2/src/models/_llama_cpp_helpers.py +53 -0
- fo_core-2.0.0b2/src/models/_ollama_response.py +90 -0
- fo_core-2.0.0b2/src/models/_openai_client.py +81 -0
- fo_core-2.0.0b2/src/models/_openai_response.py +35 -0
- fo_core-2.0.0b2/src/models/_vision_helpers.py +90 -0
- fo_core-2.0.0b2/src/models/analytics.py +263 -0
- fo_core-2.0.0b2/src/models/audio_model.py +154 -0
- fo_core-2.0.0b2/src/models/audio_registry.py +51 -0
- fo_core-2.0.0b2/src/models/audio_transcriber.py +462 -0
- fo_core-2.0.0b2/src/models/base.py +256 -0
- fo_core-2.0.0b2/src/models/claude_text_model.py +174 -0
- fo_core-2.0.0b2/src/models/claude_vision_model.py +279 -0
- fo_core-2.0.0b2/src/models/llama_cpp_text_model.py +243 -0
- fo_core-2.0.0b2/src/models/mlx_text_model.py +237 -0
- fo_core-2.0.0b2/src/models/model_manager.py +335 -0
- fo_core-2.0.0b2/src/models/openai_text_model.py +183 -0
- fo_core-2.0.0b2/src/models/openai_vision_model.py +255 -0
- fo_core-2.0.0b2/src/models/provider_factory.py +56 -0
- fo_core-2.0.0b2/src/models/provider_registry.py +302 -0
- fo_core-2.0.0b2/src/models/registry.py +74 -0
- fo_core-2.0.0b2/src/models/suggestion_types.py +171 -0
- fo_core-2.0.0b2/src/models/text_model.py +367 -0
- fo_core-2.0.0b2/src/models/text_registry.py +49 -0
- fo_core-2.0.0b2/src/models/vision_model.py +336 -0
- fo_core-2.0.0b2/src/models/vision_registry.py +51 -0
- fo_core-2.0.0b2/src/optimization/__init__.py +58 -0
- fo_core-2.0.0b2/src/optimization/batch_sizer.py +275 -0
- fo_core-2.0.0b2/src/optimization/buffer_pool.py +218 -0
- fo_core-2.0.0b2/src/optimization/connection_pool.py +240 -0
- fo_core-2.0.0b2/src/optimization/database.py +491 -0
- fo_core-2.0.0b2/src/optimization/lazy_loader.py +206 -0
- fo_core-2.0.0b2/src/optimization/leak_detector.py +219 -0
- fo_core-2.0.0b2/src/optimization/memory_limiter.py +207 -0
- fo_core-2.0.0b2/src/optimization/memory_profiler.py +286 -0
- fo_core-2.0.0b2/src/optimization/model_cache.py +284 -0
- fo_core-2.0.0b2/src/optimization/query_cache.py +226 -0
- fo_core-2.0.0b2/src/optimization/resource_monitor.py +290 -0
- fo_core-2.0.0b2/src/optimization/warmup.py +208 -0
- fo_core-2.0.0b2/src/parallel/__init__.py +45 -0
- fo_core-2.0.0b2/src/parallel/checkpoint.py +262 -0
- fo_core-2.0.0b2/src/parallel/config.py +61 -0
- fo_core-2.0.0b2/src/parallel/executor.py +66 -0
- fo_core-2.0.0b2/src/parallel/models.py +158 -0
- fo_core-2.0.0b2/src/parallel/persistence.py +163 -0
- fo_core-2.0.0b2/src/parallel/priority_queue.py +191 -0
- fo_core-2.0.0b2/src/parallel/processor.py +554 -0
- fo_core-2.0.0b2/src/parallel/resource_manager.py +196 -0
- fo_core-2.0.0b2/src/parallel/result.py +86 -0
- fo_core-2.0.0b2/src/parallel/resume.py +279 -0
- fo_core-2.0.0b2/src/parallel/scheduler.py +117 -0
- fo_core-2.0.0b2/src/parallel/throttle.py +155 -0
- fo_core-2.0.0b2/src/pipeline/__init__.py +24 -0
- fo_core-2.0.0b2/src/pipeline/config.py +145 -0
- fo_core-2.0.0b2/src/pipeline/orchestrator.py +744 -0
- fo_core-2.0.0b2/src/pipeline/processor_pool.py +198 -0
- fo_core-2.0.0b2/src/pipeline/resource_aware_executor.py +406 -0
- fo_core-2.0.0b2/src/pipeline/router.py +217 -0
- fo_core-2.0.0b2/src/pipeline/stages/__init__.py +25 -0
- fo_core-2.0.0b2/src/pipeline/stages/analyzer.py +86 -0
- fo_core-2.0.0b2/src/pipeline/stages/postprocessor.py +153 -0
- fo_core-2.0.0b2/src/pipeline/stages/preprocessor.py +79 -0
- fo_core-2.0.0b2/src/pipeline/stages/writer.py +114 -0
- fo_core-2.0.0b2/src/services/__init__.py +47 -0
- fo_core-2.0.0b2/src/services/analytics/__init__.py +17 -0
- fo_core-2.0.0b2/src/services/analytics/analytics_service.py +425 -0
- fo_core-2.0.0b2/src/services/analytics/metrics_calculator.py +131 -0
- fo_core-2.0.0b2/src/services/analytics/storage_analyzer.py +287 -0
- fo_core-2.0.0b2/src/services/analyzer.py +165 -0
- fo_core-2.0.0b2/src/services/audio/__init__.py +58 -0
- fo_core-2.0.0b2/src/services/audio/classifier.py +541 -0
- fo_core-2.0.0b2/src/services/audio/content_analyzer.py +274 -0
- fo_core-2.0.0b2/src/services/audio/data/content_analyzer_lexicon.json +405 -0
- fo_core-2.0.0b2/src/services/audio/lexicons.py +191 -0
- fo_core-2.0.0b2/src/services/audio/metadata_extractor.py +391 -0
- fo_core-2.0.0b2/src/services/audio/organizer.py +404 -0
- fo_core-2.0.0b2/src/services/audio/preprocessor.py +378 -0
- fo_core-2.0.0b2/src/services/audio/transcriber.py +343 -0
- fo_core-2.0.0b2/src/services/audio/utils.py +384 -0
- fo_core-2.0.0b2/src/services/auto_tagging/__init__.py +92 -0
- fo_core-2.0.0b2/src/services/auto_tagging/content_analyzer.py +467 -0
- fo_core-2.0.0b2/src/services/auto_tagging/tag_learning.py +500 -0
- fo_core-2.0.0b2/src/services/auto_tagging/tag_recommender.py +406 -0
- fo_core-2.0.0b2/src/services/copilot/__init__.py +31 -0
- fo_core-2.0.0b2/src/services/copilot/conversation.py +156 -0
- fo_core-2.0.0b2/src/services/copilot/engine.py +262 -0
- fo_core-2.0.0b2/src/services/copilot/executor.py +460 -0
- fo_core-2.0.0b2/src/services/copilot/intent_parser.py +301 -0
- fo_core-2.0.0b2/src/services/copilot/models.py +118 -0
- fo_core-2.0.0b2/src/services/copilot/rules/__init__.py +26 -0
- fo_core-2.0.0b2/src/services/copilot/rules/models.py +202 -0
- fo_core-2.0.0b2/src/services/copilot/rules/preview.py +253 -0
- fo_core-2.0.0b2/src/services/copilot/rules/rule_manager.py +209 -0
- fo_core-2.0.0b2/src/services/deduplication/__init__.py +70 -0
- fo_core-2.0.0b2/src/services/deduplication/backup.py +419 -0
- fo_core-2.0.0b2/src/services/deduplication/detector.py +308 -0
- fo_core-2.0.0b2/src/services/deduplication/document_dedup.py +163 -0
- fo_core-2.0.0b2/src/services/deduplication/embedder.py +366 -0
- fo_core-2.0.0b2/src/services/deduplication/extractor.py +517 -0
- fo_core-2.0.0b2/src/services/deduplication/hasher.py +209 -0
- fo_core-2.0.0b2/src/services/deduplication/image_dedup.py +493 -0
- fo_core-2.0.0b2/src/services/deduplication/image_utils.py +573 -0
- fo_core-2.0.0b2/src/services/deduplication/index.py +207 -0
- fo_core-2.0.0b2/src/services/deduplication/quality.py +441 -0
- fo_core-2.0.0b2/src/services/deduplication/reporter.py +153 -0
- fo_core-2.0.0b2/src/services/deduplication/semantic.py +332 -0
- fo_core-2.0.0b2/src/services/deduplication/viewer.py +683 -0
- fo_core-2.0.0b2/src/services/intelligence/__init__.py +104 -0
- fo_core-2.0.0b2/src/services/intelligence/confidence.py +530 -0
- fo_core-2.0.0b2/src/services/intelligence/conflict_resolver.py +412 -0
- fo_core-2.0.0b2/src/services/intelligence/directory_prefs.py +251 -0
- fo_core-2.0.0b2/src/services/intelligence/feedback_processor.py +445 -0
- fo_core-2.0.0b2/src/services/intelligence/folder_learner.py +337 -0
- fo_core-2.0.0b2/src/services/intelligence/naming_analyzer.py +457 -0
- fo_core-2.0.0b2/src/services/intelligence/pattern_extractor.py +495 -0
- fo_core-2.0.0b2/src/services/intelligence/pattern_learner.py +409 -0
- fo_core-2.0.0b2/src/services/intelligence/preference_database.py +591 -0
- fo_core-2.0.0b2/src/services/intelligence/preference_storage.py +727 -0
- fo_core-2.0.0b2/src/services/intelligence/preference_store.py +592 -0
- fo_core-2.0.0b2/src/services/intelligence/preference_tracker.py +466 -0
- fo_core-2.0.0b2/src/services/intelligence/profile_exporter.py +337 -0
- fo_core-2.0.0b2/src/services/intelligence/profile_importer.py +532 -0
- fo_core-2.0.0b2/src/services/intelligence/profile_manager.py +499 -0
- fo_core-2.0.0b2/src/services/intelligence/profile_merger.py +497 -0
- fo_core-2.0.0b2/src/services/intelligence/profile_migrator.py +482 -0
- fo_core-2.0.0b2/src/services/intelligence/scoring.py +412 -0
- fo_core-2.0.0b2/src/services/intelligence/template_manager.py +556 -0
- fo_core-2.0.0b2/src/services/misplacement_detector.py +491 -0
- fo_core-2.0.0b2/src/services/pattern_analyzer.py +453 -0
- fo_core-2.0.0b2/src/services/search/__init__.py +18 -0
- fo_core-2.0.0b2/src/services/search/bm25_index.py +138 -0
- fo_core-2.0.0b2/src/services/search/embedding_cache.py +265 -0
- fo_core-2.0.0b2/src/services/search/hybrid_retriever.py +347 -0
- fo_core-2.0.0b2/src/services/search/vector_index.py +126 -0
- fo_core-2.0.0b2/src/services/smart_suggestions.py +525 -0
- fo_core-2.0.0b2/src/services/suggestion_feedback.py +401 -0
- fo_core-2.0.0b2/src/services/text_processor.py +558 -0
- fo_core-2.0.0b2/src/services/video/__init__.py +25 -0
- fo_core-2.0.0b2/src/services/video/metadata_extractor.py +291 -0
- fo_core-2.0.0b2/src/services/video/organizer.py +171 -0
- fo_core-2.0.0b2/src/services/video/scene_detector.py +426 -0
- fo_core-2.0.0b2/src/services/vision_processor.py +584 -0
- fo_core-2.0.0b2/src/undo/__init__.py +26 -0
- fo_core-2.0.0b2/src/undo/_journal.py +29 -0
- fo_core-2.0.0b2/src/undo/durable_move.py +1551 -0
- fo_core-2.0.0b2/src/undo/models.py +125 -0
- fo_core-2.0.0b2/src/undo/rollback.py +680 -0
- fo_core-2.0.0b2/src/undo/trash_gc.py +541 -0
- fo_core-2.0.0b2/src/undo/undo_manager.py +454 -0
- fo_core-2.0.0b2/src/undo/validator.py +580 -0
- fo_core-2.0.0b2/src/undo/viewer.py +384 -0
- fo_core-2.0.0b2/src/updater/__init__.py +34 -0
- fo_core-2.0.0b2/src/updater/background.py +43 -0
- fo_core-2.0.0b2/src/updater/checker.py +231 -0
- fo_core-2.0.0b2/src/updater/installer.py +413 -0
- fo_core-2.0.0b2/src/updater/manager.py +165 -0
- fo_core-2.0.0b2/src/updater/sidecar_updater.py +285 -0
- fo_core-2.0.0b2/src/updater/state.py +100 -0
- fo_core-2.0.0b2/src/utils/__init__.py +15 -0
- fo_core-2.0.0b2/src/utils/atomic_io.py +36 -0
- fo_core-2.0.0b2/src/utils/atomic_write.py +331 -0
- fo_core-2.0.0b2/src/utils/chart_generator.py +150 -0
- fo_core-2.0.0b2/src/utils/cli_errors.py +55 -0
- fo_core-2.0.0b2/src/utils/epub_enhanced.py +770 -0
- fo_core-2.0.0b2/src/utils/file_readers.py +62 -0
- fo_core-2.0.0b2/src/utils/log_redact.py +474 -0
- fo_core-2.0.0b2/src/utils/readers/__init__.py +379 -0
- fo_core-2.0.0b2/src/utils/readers/_base.py +71 -0
- fo_core-2.0.0b2/src/utils/readers/archives.py +413 -0
- fo_core-2.0.0b2/src/utils/readers/cad.py +564 -0
- fo_core-2.0.0b2/src/utils/readers/documents.py +429 -0
- fo_core-2.0.0b2/src/utils/readers/ebook.py +119 -0
- fo_core-2.0.0b2/src/utils/readers/scientific.py +321 -0
- fo_core-2.0.0b2/src/utils/safedir.py +579 -0
- fo_core-2.0.0b2/src/utils/text_processing.py +344 -0
- fo_core-2.0.0b2/src/watcher/__init__.py +21 -0
- fo_core-2.0.0b2/src/watcher/config.py +137 -0
- fo_core-2.0.0b2/src/watcher/handler.py +494 -0
- fo_core-2.0.0b2/src/watcher/monitor.py +331 -0
- fo_core-2.0.0b2/src/watcher/queue.py +219 -0
- fo_core-2.0.0b2/tests/test_audio_model.py +189 -0
- fo_core-2.0.0b2/tests/test_cli_analytics_integration.py +35 -0
- fo_core-2.0.0b2/tests/test_cli_config_integration.py +184 -0
- fo_core-2.0.0b2/tests/test_cli_daemon.py +206 -0
- fo_core-2.0.0b2/tests/test_cli_dedupe_v2.py +168 -0
- fo_core-2.0.0b2/tests/test_cli_interactive.py +200 -0
- fo_core-2.0.0b2/tests/test_cli_main.py +330 -0
- fo_core-2.0.0b2/tests/test_cli_model_integration.py +78 -0
- fo_core-2.0.0b2/tests/test_cli_suggest.py +238 -0
- fo_core-2.0.0b2/tests/test_cli_undo_redo_integration.py +114 -0
- fo_core-2.0.0b2/tests/test_compatibility.py +585 -0
- fo_core-2.0.0b2/tests/test_config_manager.py +784 -0
- fo_core-2.0.0b2/tests/test_config_schema.py +163 -0
- fo_core-2.0.0b2/tests/test_copilot_engine.py +288 -0
- fo_core-2.0.0b2/tests/test_copilot_rules.py +349 -0
- fo_core-2.0.0b2/tests/test_helpers.py +136 -0
- fo_core-2.0.0b2/tests/test_organizer_audio_transcription.py +617 -0
- fo_core-2.0.0b2/tests/test_organizer_integration.py +159 -0
- fo_core-2.0.0b2/tests/test_test_helpers.py +221 -0
- fo_core-2.0.0b2/tests/test_timestamp_safety.py +89 -0
- fo_core-2.0.0b2/tests/test_update_background.py +91 -0
- fo_core-2.0.0b2/tests/test_update_state.py +48 -0
- fo_core-2.0.0b2/tests/test_updater.py +370 -0
- fo_core-2.0.0b2/tests/test_version.py +235 -0
fo_core-2.0.0b2/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Yanhao Qiu
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
fo_core-2.0.0b2/PKG-INFO
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: fo-core
|
|
3
|
+
Version: 2.0.0b2
|
|
4
|
+
Summary: Streamlined CLI file organizer powered by local AI (Ollama)
|
|
5
|
+
Author-email: fo-core Team <noreply@example.com>
|
|
6
|
+
License: MIT OR Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/curdriceaurora/fo-core
|
|
8
|
+
Project-URL: Repository, https://github.com/curdriceaurora/fo-core
|
|
9
|
+
Project-URL: Issues, https://github.com/curdriceaurora/fo-core/issues
|
|
10
|
+
Keywords: file-management,ai,organization,local-llm,privacy
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Desktop Environment :: File Managers
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: ollama>=0.1.0
|
|
24
|
+
Requires-Dist: Pillow~=12.2
|
|
25
|
+
Requires-Dist: PyMuPDF~=1.23
|
|
26
|
+
Requires-Dist: python-docx~=1.0
|
|
27
|
+
Requires-Dist: openpyxl~=3.1
|
|
28
|
+
Requires-Dist: python-pptx<2,>=0.6.0
|
|
29
|
+
Requires-Dist: ebooklib<1,>=0.20
|
|
30
|
+
Requires-Dist: beautifulsoup4~=4.12
|
|
31
|
+
Requires-Dist: lxml~=6.1
|
|
32
|
+
Requires-Dist: defusedxml<1,>=0.7.1
|
|
33
|
+
Requires-Dist: mutagen~=1.47
|
|
34
|
+
Requires-Dist: snowballstemmer>=2.2.0
|
|
35
|
+
Requires-Dist: striprtf<1,>=0.0.26
|
|
36
|
+
Requires-Dist: tinytag~=2.2
|
|
37
|
+
Requires-Dist: py7zr<2,>=0.20.0
|
|
38
|
+
Requires-Dist: pypdf~=6.10
|
|
39
|
+
Requires-Dist: rarfile~=4.1
|
|
40
|
+
Requires-Dist: typer[all]~=0.12
|
|
41
|
+
Requires-Dist: rich~=13.0
|
|
42
|
+
Requires-Dist: Pygments>=2.20.0
|
|
43
|
+
Requires-Dist: sqlalchemy~=2.0
|
|
44
|
+
Requires-Dist: alembic~=1.13
|
|
45
|
+
Requires-Dist: Mako>=1.3.11
|
|
46
|
+
Requires-Dist: pyyaml~=6.0
|
|
47
|
+
Requires-Dist: platformdirs~=4.9
|
|
48
|
+
Requires-Dist: pydantic~=2.5
|
|
49
|
+
Requires-Dist: pydantic-settings~=2.1
|
|
50
|
+
Requires-Dist: python-dotenv~=1.0
|
|
51
|
+
Requires-Dist: click~=8.1
|
|
52
|
+
Requires-Dist: watchdog~=3.0
|
|
53
|
+
Requires-Dist: psutil<7,>=6.1
|
|
54
|
+
Requires-Dist: loguru<1,>=0.7.0
|
|
55
|
+
Requires-Dist: httpx~=0.27
|
|
56
|
+
Provides-Extra: dev
|
|
57
|
+
Requires-Dist: pytest~=9.0; extra == "dev"
|
|
58
|
+
Requires-Dist: pytest-asyncio>=1.0; extra == "dev"
|
|
59
|
+
Requires-Dist: pytest-cov~=4.1; extra == "dev"
|
|
60
|
+
Requires-Dist: pytest-mock~=3.12; extra == "dev"
|
|
61
|
+
Requires-Dist: pytest-timeout<2.4.0,>=2.2.0; extra == "dev"
|
|
62
|
+
Requires-Dist: pytest-xdist~=3.5; extra == "dev"
|
|
63
|
+
Requires-Dist: pytest-randomly~=3.15; extra == "dev"
|
|
64
|
+
Requires-Dist: mypy!=1.20.2,~=1.8; extra == "dev"
|
|
65
|
+
Requires-Dist: types-PyYAML~=6.0; extra == "dev"
|
|
66
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
67
|
+
Requires-Dist: black~=26.3; extra == "dev"
|
|
68
|
+
Requires-Dist: isort~=8.0; extra == "dev"
|
|
69
|
+
Requires-Dist: pre-commit~=3.6; extra == "dev"
|
|
70
|
+
Requires-Dist: codespell~=2.2; extra == "dev"
|
|
71
|
+
Requires-Dist: faker~=40.12; extra == "dev"
|
|
72
|
+
Requires-Dist: pytest-benchmark~=4.0; extra == "dev"
|
|
73
|
+
Requires-Dist: interrogate~=1.5; extra == "dev"
|
|
74
|
+
Requires-Dist: pymarkdownlnt>=0.9.25; extra == "dev"
|
|
75
|
+
Requires-Dist: deptry>=0.16.0; extra == "dev"
|
|
76
|
+
Requires-Dist: diff-cover~=7.0; extra == "dev"
|
|
77
|
+
Provides-Extra: cloud
|
|
78
|
+
Requires-Dist: openai~=2.31; extra == "cloud"
|
|
79
|
+
Provides-Extra: llama
|
|
80
|
+
Requires-Dist: llama-cpp-python>=0.2.0; extra == "llama"
|
|
81
|
+
Provides-Extra: mlx
|
|
82
|
+
Requires-Dist: mlx-lm<1,>=0.0.19; platform_system == "Darwin" and extra == "mlx"
|
|
83
|
+
Provides-Extra: claude
|
|
84
|
+
Requires-Dist: anthropic>=0.20.0; extra == "claude"
|
|
85
|
+
Provides-Extra: media
|
|
86
|
+
Requires-Dist: faster-whisper~=1.0; extra == "media"
|
|
87
|
+
Requires-Dist: torch~=2.1; extra == "media"
|
|
88
|
+
Requires-Dist: pydub<1,>=0.25.0; extra == "media"
|
|
89
|
+
Requires-Dist: opencv-python~=4.8; extra == "media"
|
|
90
|
+
Requires-Dist: scenedetect[opencv]<1,>=0.6.0; extra == "media"
|
|
91
|
+
Provides-Extra: dedup-text
|
|
92
|
+
Requires-Dist: numpy<3,>=1.24; extra == "dedup-text"
|
|
93
|
+
Requires-Dist: scikit-learn<1.9,>=1.4; extra == "dedup-text"
|
|
94
|
+
Provides-Extra: dedup-image
|
|
95
|
+
Requires-Dist: fo-core[dedup-text]; extra == "dedup-image"
|
|
96
|
+
Requires-Dist: imagededup<1,>=0.3.0; extra == "dedup-image"
|
|
97
|
+
Requires-Dist: torch~=2.1; extra == "dedup-image"
|
|
98
|
+
Provides-Extra: scientific
|
|
99
|
+
Requires-Dist: h5py~=3.10; extra == "scientific"
|
|
100
|
+
Requires-Dist: netCDF4~=1.6; extra == "scientific"
|
|
101
|
+
Requires-Dist: scipy~=1.11; extra == "scientific"
|
|
102
|
+
Provides-Extra: cad
|
|
103
|
+
Requires-Dist: ezdxf~=1.1; extra == "cad"
|
|
104
|
+
Provides-Extra: build
|
|
105
|
+
Requires-Dist: pyinstaller~=6.0; extra == "build"
|
|
106
|
+
Provides-Extra: docs
|
|
107
|
+
Requires-Dist: mkdocs~=1.5; extra == "docs"
|
|
108
|
+
Requires-Dist: mkdocs-material~=9.5; extra == "docs"
|
|
109
|
+
Requires-Dist: pymdown-extensions~=10.21; extra == "docs"
|
|
110
|
+
Requires-Dist: mkdocs-minify-plugin>=0.8.0; extra == "docs"
|
|
111
|
+
Requires-Dist: mkdocstrings[python]>=0.24.0; extra == "docs"
|
|
112
|
+
Provides-Extra: search
|
|
113
|
+
Requires-Dist: numpy<3,>=1.24; extra == "search"
|
|
114
|
+
Requires-Dist: rank-bm25>=0.2.0; extra == "search"
|
|
115
|
+
Requires-Dist: scikit-learn<1.9,>=1.4; extra == "search"
|
|
116
|
+
Provides-Extra: all
|
|
117
|
+
Requires-Dist: fo-core[build,cad,claude,cloud,dedup-image,dedup-text,dev,llama,media,mlx,scientific,search]; extra == "all"
|
|
118
|
+
Dynamic: license-file
|
|
119
|
+
|
|
120
|
+
# fo-core
|
|
121
|
+
|
|
122
|
+
> Local AI file organizer. Point it at a directory — it categorizes and moves your files using a model running on your own machine. **Local by default**: Ollama runs on-device, no API key required. Cloud providers are optional extras.
|
|
123
|
+
|
|
124
|
+
[](https://github.com/curdriceaurora/fo-core/actions/workflows/ci.yml)
|
|
125
|
+
[](LICENSE)
|
|
126
|
+
[](https://www.python.org/downloads/)
|
|
127
|
+
[](CHANGELOG.md)
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Prerequisites
|
|
132
|
+
|
|
133
|
+
1. **Python 3.11 or later** — check with `python3 --version`
|
|
134
|
+
2. **Ollama** — install from [ollama.ai](https://ollama.ai), then start it:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
ollama serve
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Install
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
pip install fo-core
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Then pull the default AI models (first-time only, ~4 GB total):
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
ollama pull qwen2.5:3b-instruct-q4_K_M
|
|
152
|
+
ollama pull qwen2.5vl:7b-q4_K_M
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Verify optional deps for your files:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
fo doctor ~/Downloads
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Quick Start
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# Preview what would happen — no files are moved
|
|
167
|
+
fo organize ~/Downloads ~/Organized --dry-run
|
|
168
|
+
|
|
169
|
+
# Run it for real
|
|
170
|
+
fo organize ~/Downloads ~/Organized
|
|
171
|
+
|
|
172
|
+
# Changed your mind?
|
|
173
|
+
fo undo
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Commands
|
|
179
|
+
|
|
180
|
+
| Command | What it does |
|
|
181
|
+
|---------|--------------|
|
|
182
|
+
| `fo organize [SRC] [DEST]` | Organize files using AI categorization |
|
|
183
|
+
| `fo preview [SRC]` | Dry-run preview without moving files |
|
|
184
|
+
| `fo search [QUERY]` | Full-text search across files |
|
|
185
|
+
| `fo analyze [DIR]` | File statistics and analysis |
|
|
186
|
+
| `fo dedupe` | Find and remove duplicate files |
|
|
187
|
+
| `fo suggest` | AI-powered organization suggestions |
|
|
188
|
+
| `fo autotag` | Auto-tag files based on content |
|
|
189
|
+
| `fo copilot` | Natural-language assistant |
|
|
190
|
+
| `fo rules` | Manage organization rules (YAML) |
|
|
191
|
+
| `fo config show\|list\|edit` | View or update configuration |
|
|
192
|
+
| `fo doctor [DIR]` | Scan a directory and recommend optional deps |
|
|
193
|
+
| `fo daemon start\|stop` | Background file watcher |
|
|
194
|
+
| `fo undo / redo / history` | Operation history and rollback |
|
|
195
|
+
| `fo model` | Select or inspect AI models |
|
|
196
|
+
| `fo benchmark` | Performance benchmarks |
|
|
197
|
+
| `fo setup` | Interactive setup wizard |
|
|
198
|
+
|
|
199
|
+
Full flag documentation: [docs/cli-reference.md](docs/cli-reference.md)
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## AI Providers
|
|
204
|
+
|
|
205
|
+
**Default**: Ollama — runs entirely on your machine, no API key needed.
|
|
206
|
+
|
|
207
|
+
Cloud providers are optional extras:
|
|
208
|
+
|
|
209
|
+
| Provider | Install | Works with |
|
|
210
|
+
|----------|---------|------------|
|
|
211
|
+
| OpenAI-compatible | `pip install "fo-core[cloud]"` | OpenAI, LM Studio, vLLM, Groq |
|
|
212
|
+
| Anthropic Claude | `pip install "fo-core[claude]"` | Claude text + vision models |
|
|
213
|
+
| llama.cpp | `pip install "fo-core[llama]"` | GGUF models — no Ollama required |
|
|
214
|
+
| MLX (Apple Silicon) | `pip install "fo-core[mlx]"` | MLX-optimized local models |
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Optional Feature Packs
|
|
219
|
+
|
|
220
|
+
Core file types (PDF, DOCX, XLSX, PPTX, EPUB, ZIP) work out of the box. RAR also works but requires a system-level `unrar` or `unar` binary. Install extras for additional capabilities:
|
|
221
|
+
|
|
222
|
+
| Pack | Install | Adds |
|
|
223
|
+
|------|---------|------|
|
|
224
|
+
| `media` | `pip install "fo-core[media]"` | Audio transcription (faster-whisper) + video scene detection. Use `fo organize --transcribe-audio` for content-aware audio categorization, or verify the install with `fo benchmark run --suite audio --transcribe-smoke`. |
|
|
225
|
+
| `dedup-text` | `pip install "fo-core[dedup-text]"` | TF-IDF/cosine text deduplication |
|
|
226
|
+
| `dedup-image` | `pip install "fo-core[dedup-image]"` | Image similarity deduplication |
|
|
227
|
+
| `scientific` | `pip install "fo-core[scientific]"` | HDF5, NetCDF, MATLAB formats |
|
|
228
|
+
| `cad` | `pip install "fo-core[cad]"` | DXF/DWG CAD files |
|
|
229
|
+
| `search` | `pip install "fo-core[search]"` | BM25 + vector search |
|
|
230
|
+
| `all` | `pip install "fo-core[all]"` | All of the above |
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Configuration
|
|
235
|
+
|
|
236
|
+
Config lives in `~/.config/fo/config.yaml`. Override the location with the `FO_CONFIG` environment variable.
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
fo config show # view all settings
|
|
240
|
+
fo config edit --text-model qwen2.5:3b-instruct-q4_K_M # change text model
|
|
241
|
+
fo config edit --device auto # change device
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Full configuration reference: [docs/CONFIGURATION.md](docs/CONFIGURATION.md)
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Documentation
|
|
249
|
+
|
|
250
|
+
| Doc | Contents |
|
|
251
|
+
|-----|----------|
|
|
252
|
+
| [Getting Started](docs/getting-started.md) | Installation options, first run, platform notes |
|
|
253
|
+
| [CLI Reference](docs/cli-reference.md) | Every command and flag |
|
|
254
|
+
| [Configuration](docs/CONFIGURATION.md) | All config keys explained |
|
|
255
|
+
| [FAQ](docs/faq.md) | Common questions and troubleshooting |
|
|
256
|
+
| [Troubleshooting](docs/troubleshooting.md) | Diagnosing connection and model issues |
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Contributing / Development
|
|
261
|
+
|
|
262
|
+
See [DEVELOPER.md](DEVELOPER.md) for architecture, local setup, testing, and contribution guidelines.
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Releases
|
|
267
|
+
|
|
268
|
+
Currently `2.0.0-beta.1`. The acceptance criteria that were required for this
|
|
269
|
+
promotion and the contract with public pre-release testers are documented in
|
|
270
|
+
[docs/release/beta-criteria.md](docs/release/beta-criteria.md).
|
|
271
|
+
|
|
272
|
+
## License
|
|
273
|
+
|
|
274
|
+
MIT OR Apache-2.0
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# fo-core
|
|
2
|
+
|
|
3
|
+
> Local AI file organizer. Point it at a directory — it categorizes and moves your files using a model running on your own machine. **Local by default**: Ollama runs on-device, no API key required. Cloud providers are optional extras.
|
|
4
|
+
|
|
5
|
+
[](https://github.com/curdriceaurora/fo-core/actions/workflows/ci.yml)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](https://www.python.org/downloads/)
|
|
8
|
+
[](CHANGELOG.md)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
1. **Python 3.11 or later** — check with `python3 --version`
|
|
15
|
+
2. **Ollama** — install from [ollama.ai](https://ollama.ai), then start it:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
ollama serve
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Install
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pip install fo-core
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Then pull the default AI models (first-time only, ~4 GB total):
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
ollama pull qwen2.5:3b-instruct-q4_K_M
|
|
33
|
+
ollama pull qwen2.5vl:7b-q4_K_M
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Verify optional deps for your files:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
fo doctor ~/Downloads
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Quick Start
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Preview what would happen — no files are moved
|
|
48
|
+
fo organize ~/Downloads ~/Organized --dry-run
|
|
49
|
+
|
|
50
|
+
# Run it for real
|
|
51
|
+
fo organize ~/Downloads ~/Organized
|
|
52
|
+
|
|
53
|
+
# Changed your mind?
|
|
54
|
+
fo undo
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Commands
|
|
60
|
+
|
|
61
|
+
| Command | What it does |
|
|
62
|
+
|---------|--------------|
|
|
63
|
+
| `fo organize [SRC] [DEST]` | Organize files using AI categorization |
|
|
64
|
+
| `fo preview [SRC]` | Dry-run preview without moving files |
|
|
65
|
+
| `fo search [QUERY]` | Full-text search across files |
|
|
66
|
+
| `fo analyze [DIR]` | File statistics and analysis |
|
|
67
|
+
| `fo dedupe` | Find and remove duplicate files |
|
|
68
|
+
| `fo suggest` | AI-powered organization suggestions |
|
|
69
|
+
| `fo autotag` | Auto-tag files based on content |
|
|
70
|
+
| `fo copilot` | Natural-language assistant |
|
|
71
|
+
| `fo rules` | Manage organization rules (YAML) |
|
|
72
|
+
| `fo config show\|list\|edit` | View or update configuration |
|
|
73
|
+
| `fo doctor [DIR]` | Scan a directory and recommend optional deps |
|
|
74
|
+
| `fo daemon start\|stop` | Background file watcher |
|
|
75
|
+
| `fo undo / redo / history` | Operation history and rollback |
|
|
76
|
+
| `fo model` | Select or inspect AI models |
|
|
77
|
+
| `fo benchmark` | Performance benchmarks |
|
|
78
|
+
| `fo setup` | Interactive setup wizard |
|
|
79
|
+
|
|
80
|
+
Full flag documentation: [docs/cli-reference.md](docs/cli-reference.md)
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## AI Providers
|
|
85
|
+
|
|
86
|
+
**Default**: Ollama — runs entirely on your machine, no API key needed.
|
|
87
|
+
|
|
88
|
+
Cloud providers are optional extras:
|
|
89
|
+
|
|
90
|
+
| Provider | Install | Works with |
|
|
91
|
+
|----------|---------|------------|
|
|
92
|
+
| OpenAI-compatible | `pip install "fo-core[cloud]"` | OpenAI, LM Studio, vLLM, Groq |
|
|
93
|
+
| Anthropic Claude | `pip install "fo-core[claude]"` | Claude text + vision models |
|
|
94
|
+
| llama.cpp | `pip install "fo-core[llama]"` | GGUF models — no Ollama required |
|
|
95
|
+
| MLX (Apple Silicon) | `pip install "fo-core[mlx]"` | MLX-optimized local models |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Optional Feature Packs
|
|
100
|
+
|
|
101
|
+
Core file types (PDF, DOCX, XLSX, PPTX, EPUB, ZIP) work out of the box. RAR also works but requires a system-level `unrar` or `unar` binary. Install extras for additional capabilities:
|
|
102
|
+
|
|
103
|
+
| Pack | Install | Adds |
|
|
104
|
+
|------|---------|------|
|
|
105
|
+
| `media` | `pip install "fo-core[media]"` | Audio transcription (faster-whisper) + video scene detection. Use `fo organize --transcribe-audio` for content-aware audio categorization, or verify the install with `fo benchmark run --suite audio --transcribe-smoke`. |
|
|
106
|
+
| `dedup-text` | `pip install "fo-core[dedup-text]"` | TF-IDF/cosine text deduplication |
|
|
107
|
+
| `dedup-image` | `pip install "fo-core[dedup-image]"` | Image similarity deduplication |
|
|
108
|
+
| `scientific` | `pip install "fo-core[scientific]"` | HDF5, NetCDF, MATLAB formats |
|
|
109
|
+
| `cad` | `pip install "fo-core[cad]"` | DXF/DWG CAD files |
|
|
110
|
+
| `search` | `pip install "fo-core[search]"` | BM25 + vector search |
|
|
111
|
+
| `all` | `pip install "fo-core[all]"` | All of the above |
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Configuration
|
|
116
|
+
|
|
117
|
+
Config lives in `~/.config/fo/config.yaml`. Override the location with the `FO_CONFIG` environment variable.
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
fo config show # view all settings
|
|
121
|
+
fo config edit --text-model qwen2.5:3b-instruct-q4_K_M # change text model
|
|
122
|
+
fo config edit --device auto # change device
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Full configuration reference: [docs/CONFIGURATION.md](docs/CONFIGURATION.md)
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Documentation
|
|
130
|
+
|
|
131
|
+
| Doc | Contents |
|
|
132
|
+
|-----|----------|
|
|
133
|
+
| [Getting Started](docs/getting-started.md) | Installation options, first run, platform notes |
|
|
134
|
+
| [CLI Reference](docs/cli-reference.md) | Every command and flag |
|
|
135
|
+
| [Configuration](docs/CONFIGURATION.md) | All config keys explained |
|
|
136
|
+
| [FAQ](docs/faq.md) | Common questions and troubleshooting |
|
|
137
|
+
| [Troubleshooting](docs/troubleshooting.md) | Diagnosing connection and model issues |
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Contributing / Development
|
|
142
|
+
|
|
143
|
+
See [DEVELOPER.md](DEVELOPER.md) for architecture, local setup, testing, and contribution guidelines.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Releases
|
|
148
|
+
|
|
149
|
+
Currently `2.0.0-beta.1`. The acceptance criteria that were required for this
|
|
150
|
+
promotion and the contract with public pre-release testers are documented in
|
|
151
|
+
[docs/release/beta-criteria.md](docs/release/beta-criteria.md).
|
|
152
|
+
|
|
153
|
+
## License
|
|
154
|
+
|
|
155
|
+
MIT OR Apache-2.0
|