cabal-version:       2.4
name:                clod
version:             0.1.20
synopsis:            Project file manager for Claude AI integrations
description:         Clod (Claude Loader) is a utility for preparing and uploading files to Claude AI's 
                     Project Knowledge feature. It tracks file changes, respects .gitignore and .clodignore 
                     patterns, and optimizes filenames for Claude's UI.
                     .
                     Key features:
                     .
                     * Process all files on first run, only modified files on subsequent runs
                     * Respect .gitignore and .clodignore patterns
                     * Handle binary vs. text files automatically
                     * Use system temporary directories for staging files
                     * Create optimized filenames for Claude's UI
                     * Generate a path manifest for mapping optimized names back to original paths
                     * Color-coded, user-friendly terminal interface
                     * Capability-based security model
                     * Path-restricted file access to prevent unauthorized operations
                     .
                     Clod is particularly useful for reducing AI development costs while working with 
                     Claude. By handling file selection, staging, and tracking efficiently, it can cut 
                     API costs by 50% or more. This makes powerful AI tools accessible to students, 
                     bootstrappers, and developers on tight budgets, leveling the playing field between 
                     the wealthiest and the scrappiest.
                     .
                     Clod implements a capability-based security model to ensure safe AI interactions 
                     with the file system, and uses checksum-based file tracking with XXH3 hashes 
                     for detecting modified or renamed files. It uses libmagic for robust, content-based 
                     file type detection.
                     .
                     META NOTE: This project represents a milestone in human-AI collaboration, with Claude
                     (the AI assistant from Anthropic) writing 99.9% of the code based on guidance from Fuzz 
                     Leonard. The result demonstrates how powerful AI tools are best created through 
                     collaborative approaches where humans and AI systems leverage their respective strengths.
license:             MIT
license-file:        LICENSE
author:              Fuzz Leonard
maintainer:          ink@fuzz.ink
homepage:            https://github.com/fuzz/clod
bug-reports:         https://github.com/fuzz/clod/issues
category:            Development
build-type:          Simple

extra-source-files:
  README.md
  HUMAN.md
  CRITICAL.md
  SPEC.md
  guardrails.md
  project-instructions.md
  LICENSE
  resources/default_clodignore.dhall
  resources/binary_signatures.dhall
  resources/file_types.dhall
  resources/text_patterns.dhall
  bin/release
  bin/install-man-pages.sh
  man/clod.1.md
  man/clod.7.md
  man/clod.8.md

extra-doc-files:
  CHANGELOG.md
source-repository head
  type:              git
  location:          https://github.com/fuzz/clod

common deps
  build-depends:     
    base >= 4.7 && < 5,
    directory >= 1.3 && < 1.5,
    filepath >= 1.4 && < 1.6,
    process >= 1.6 && < 1.7,
    text >= 1.2 && < 2.2,
    bytestring >= 0.10 && < 0.13,
    containers >= 0.6 && < 0.7,
    time >= 1.9 && < 1.13,
    hashable >= 1.3 && < 1.6

common extensions
  default-extensions: 
    OverloadedStrings
    TypeOperators
    FlexibleContexts
    GADTs
    DataKinds
    ScopedTypeVariables
    TypeApplications
    RecordWildCards

library
  import:            deps, extensions
  hs-source-dirs:    src
  exposed-modules:   
    Clod.Core
    Clod.Config
    Clod.FileSystem
    Clod.FileSystem.Detection
    Clod.FileSystem.Operations
    Clod.FileSystem.Processing
    Clod.FileSystem.Transformations
    Clod.FileSystem.Checksums
    Clod.IgnorePatterns
    Clod.Output
    Clod.Types
    Clod.Effects
    Clod.Capability
    Clod.AdvancedCapability
  other-modules:     Paths_clod
  autogen-modules:   Paths_clod
  build-depends:     
    aeson >= 2.0 && < 3.0,
    aeson-pretty >= 0.8 && < 0.9,
    dhall >= 1.41 && < 1.44,
    temporary >= 1.3 && < 1.4,
    mtl >= 2.2 && < 2.4,
    transformers >= 0.5 && < 0.7,
    unix >= 2.7 && < 2.9,
    xxhash-ffi >= 0.3 && < 0.4,
    base16-bytestring >= 1.0 && < 1.1,
    magic >= 1.1 && < 1.2,
    prettyprinter >= 1.7 && < 1.8,
    file-embed >= 0.0.15 && < 0.1
  default-language:  Haskell2010
  default-extensions: TemplateHaskell
                      LambdaCase
  ghc-options:       -Wall

executable clod
  import:            deps, extensions
  hs-source-dirs:    app
  main-is:           Main.hs
  build-depends:     
    clod,
    aeson >= 2.0 && < 3.0,
    optparse-applicative >= 0.16 && < 0.18
  default-language:  Haskell2010
  ghc-options:       -Wall -threaded -rtsopts -with-rtsopts=-N
  
test-suite clod-test
  import:            deps, extensions
  type:              exitcode-stdio-1.0
  hs-source-dirs:    test
  main-is:           Spec.hs
  other-modules:     
    Clod.IgnorePatternsSpec
    Clod.FileSystemSpec
    Clod.CoreSpec
    Clod.ConfigSpec
    Clod.OutputSpec
    Clod.MainSpec
    Clod.FileSystem.DetectionSpec
    Clod.FileSystem.ChecksumsSpec
    Clod.FileSystem.DatabaseSpec
    Clod.CapabilitySpec
    Clod.AdvancedCapabilitySpec
    Clod.EffectsSpec
    Clod.TypesSpec
    Clod.FileSystem.OperationsSpec
    Clod.FileSystem.ProcessingSpec
    Clod.FileSystem.TransformationsSpec
    Clod.ManPagesSpec
    Clod.TestHelpers
  build-depends:     
    clod,
    temporary >= 1.3 && < 1.4,
    unix >= 2.7 && < 2.9,
    optparse-applicative >= 0.16 && < 0.18,
    hspec >= 2.8 && < 2.12,
    QuickCheck >= 2.14 && < 2.16,
    random >= 1.2 && < 1.4,
    mtl >= 2.2 && < 2.4
  default-language:  Haskell2010
  ghc-options:       -Wall -threaded -rtsopts -with-rtsopts=-N
  
executable magictest
  hs-source-dirs:    test
  main-is:           MagicTest.hs
  build-depends:     
    base >= 4.7 && < 5,
    magic >= 1.1 && < 1.2,
    directory >= 1.3 && < 1.5
  default-language:  Haskell2010
  default-extensions: OverloadedStrings
  ghc-options:       -Wall -threaded -rtsopts -with-rtsopts=-N