packages feed

kioku-cli-0.4.0.0: kioku-cli.cabal

cabal-version:   3.0
name:            kioku-cli
version:         0.4.0.0
synopsis:        kioku command-line interface
description:
  Command-line entry point for kioku demos and operational commands.

license:         BSD-3-Clause
license-file:    LICENSE
author:          Nadeem Bitar
maintainer:      nadeem@gmail.com
copyright:       2026 Nadeem Bitar
category:        Data
build-type:      Simple
tested-with:     GHC >=9.12 && <9.13
homepage:        https://github.com/shinzui/kioku
bug-reports:     https://github.com/shinzui/kioku/issues
extra-doc-files: CHANGELOG.md

source-repository head
  type:     git
  location: https://github.com/shinzui/kioku.git
  subdir:   kioku-cli

common warnings
  ghc-options:
    -Wall -Wcompat -Widentities -Wincomplete-record-updates
    -Wincomplete-uni-patterns -Wpartial-fields -Wredundant-constraints
    -Werror=incomplete-patterns

common shared
  default-language:   GHC2024
  default-extensions:
    BlockArguments
    DeriveAnyClass
    DuplicateRecordFields
    MultilineStrings
    OverloadedLabels
    OverloadedRecordDot
    OverloadedStrings
    QualifiedDo
    TemplateHaskell

library
  import:           warnings, shared
  hs-source-dirs:   src
  exposed-modules:
    Kioku.Cli
    Kioku.Cli.Commands.Artifacts
    Kioku.Cli.Commands.Demo
    Kioku.Cli.Commands.DemoSession
    Kioku.Cli.Commands.Distill
    Kioku.Cli.Commands.Persona
    Kioku.Cli.Commands.Recall
    Kioku.Cli.Commands.Scenes
    Kioku.Cli.Commands.Worker
    Kioku.Cli.Context
    Kioku.Cli.Options
    Kioku.Cli.Scope

  -- Same GHC 9.12.4 coercion-optimiser bug that kioku-core works around; here it
  -- fells the profiled build of Kioku.Cli.Commands.DemoSession:
  --
  --     panic! (the 'impossible' happened) / coercionKind / ConsSymbolDef
  --     pprPanic, called at compiler/GHC/Core/Coercion.hs:2550:17
  --
  -- The type-level Symbol axioms arrive transitively through kioku-core's
  -- KindID-typed identifiers, so this package needs the same opt-out even though
  -- it never mentions mmzk-typeid itself. See kioku-core.cabal for the full
  -- write-up. Profiled way only; ordinary builds keep the coercion optimiser.
  -- mori://MMZK1526/mmzk-typeid/upstream-issues/mmzk-typeid-kindid-ghc-9-12-4-profiling-coercionkind-panic
  ghc-prof-options: -fno-opt-coercion
  build-depends:
    , async                 >=2.2      && <2.3
    , base                  >=4.21     && <5
    , containers            >=0.6      && <0.8
    , directory             >=1.3      && <1.4
    , effectful             >=2.5      && <2.7
    , kioku-api             ^>=0.4.0.0
    , kioku-core            ^>=0.4.0.0
    , kiroku-store          ^>=0.8.0.0
    , optparse-applicative  >=0.18     && <0.20
    , text                  >=2.1      && <2.2
    , time                  >=1.12     && <1.15

executable kioku
  import:         warnings, shared
  main-is:        Main.hs
  hs-source-dirs: app
  ghc-options:    -threaded -rtsopts -with-rtsopts=-N
  build-depends:
    , base       >=4.21     && <5
    , kioku-cli  ^>=0.4.0.0

test-suite kioku-cli-test
  import:             warnings, shared
  type:               exitcode-stdio-1.0
  main-is:            Main.hs
  hs-source-dirs:     test
  other-modules:
    Kioku.Cli.ParserSpec
    Kioku.Cli.RecallEndToEndSpec

  ghc-options:        -threaded -rtsopts -with-rtsopts=-N

  -- Kioku.Cli.RecallEndToEndSpec runs the real binary as a subprocess: stdout, stderr and the
  -- environment are process-wide, and tasty runs cases concurrently, so redirecting them in
  -- process would race the rest of the suite.
  build-tool-depends: kioku-cli:kioku
  build-depends:
    , base                           >=4.21     && <5
    , effectful                      >=2.5      && <2.7
    , kioku-api                      ^>=0.4.0.0
    , kioku-cli                      ^>=0.4.0.0
    , kioku-core                     ^>=0.4.0.0
    , kioku-migrations:test-support  ^>=0.4.0.0
    , kiroku-store                   ^>=0.8.0.0
    , optparse-applicative           >=0.18
    , process                        >=1.6      && <1.7
    , tasty                          >=1.5
    , tasty-hunit                    >=0.10
    , text                           >=2.1
    , time                           >=1.12     && <1.15