slagyr/isaac-foundation

Extensible modular development platform

โ˜… 1Forks 0ClojureGitHub โ†—Compare

README

๐Ÿ Isaac Foundation ๐Ÿชจ

isaac-foundation

The seed of the Isaac platform: the CLI dispatcher, config management, module loader, and the berth extension machinery โ€” and not much else. Everything else (the server, sessions, LLM dispatch, tools, comms) is a module that plugs in.


Foundation License: MIT Clojure Babashka Java


Install the foundation, then grow it by adding modules to your config:

isaac init
# then add modules to <root>/config/isaac.edn:
#   {:modules {:isaac.http {:git/url "..." :git/sha "..."}}}

The foundation ships exactly one command (init) and built-in berths (:isaac/cli, :isaac.config/schema, :isaac.config/check). Modules declare their own berths and contribute to others' via isaac-manifest.edn โ€” the platform uses the same extension API that third-party modules do.

What's here

  • isaac.foundation.main / isaac.foundation.cli.registry โ€” CLI dispatch; commands arrive as :isaac/cli berth contributions from module manifests.
  • isaac.foundation โ€” Tier-1 public API facade for module authors (see FOUNDATION.md).
  • isaac.foundation.module.* โ€” module discovery (tools.deps coordinates in user config), manifest reading/validation, berth processing.
  • isaac.foundation.config.* โ€” config loading, schema composition (:isaac.config/schema berth), validation checks (:isaac.config/check berth), entity files, companions.
  • isaac.foundation.schema.* โ€” schema runtime: lexicon extensions, dynamic schema, [:registered-in? ...] validation.
  • Shared utilities: isaac.foundation.fs, isaac.foundation.logger, isaac.foundation.nexus, isaac.foundation.scheduler.runtime, isaac.foundation.shell, isaac.foundation.config.root.

Development

Babashka-first. Run things with:

bb isaac --help    # the CLI
bb spec            # speclj specs (60s timeout)
bb features        # gherclj acceptance tests (60s timeout; skips @slow, @wip)
bb features-slow   # launcher/subprocess @slow features only (60s timeout)
bb ci              # spec + fast features (60s timeout)

From the JVM, compose :test with a runner alias (shared test deps live in :test only). Prefer the bb jvm-* tasks โ€” they enforce the same 60s timeout as bb spec / bb features:

bb jvm-spec            # clj -M:test:spec
bb jvm-features        # clj -M:test:features
clj -M:test:mutate     # mutation testing (no timeout; not part of ci)

The spec tree is exported for consumers as io.github.slagyr/isaac-foundation-spec (:deps/root "spec"): step definitions, the marigold fixture world, and the marigold fixture modules.

Consumers should depend on a tagged release (not :local/root). Published tags are immutable โ€” see RELEASE.md.

io.github.slagyr/isaac-foundation
{:git/url "https://github.com/slagyr/isaac-foundation.git"
 :git/tag "v0.1.1"
 :git/sha "36e4a6f10a02b86008eb81aaa20b057387bb4c7a"}

Use the :dev-local alias in sibling repos to override back to ../isaac-foundation while developing in the monorepo.

The boundary gates (spec/isaac/foundation_boundary_spec.clj, spec/isaac/foundation_module_boundary_spec.clj) are permanent guards that foundation and module code stay on the documented public API.

Contributors

slagyrslagyr-assistant

Issues