Skip to content

Conversation

@lukvmil
Copy link
Member

@lukvmil lukvmil commented Dec 3, 2025

  • restructured code base for a better "manual dependency injection" approach, node implementations are classes now, not instances
  • factored effector out of core subsystems to remove dependency loops
  • created knowledge and event processing threads to handle decoupling via knowledge object and event queues
  • created node assembler and node container classes for building and storing node components respectively, node assembler can be configured to override subsystem classes
  • knowledge handlers passed directly into node assembler now
  • added "RID types of interest" field to config (defaults to orn:koi-net.node), which informs the node contact handler, automatically subscribing too and backfilling from node providers of those types
  • handshake is now its own component
  • created JSON schemas for all protocol objects
  • better conditions for determining when no coordinator is known
  • event worker flushes buffers before shutting down
  • experimental CLI to install, create, and run node implementations
  • set up structlog, moving towards better logging practices
  • removed behaviors
  • moved logic into lifecycle
  • added effector back to handler context
  • factored out action context for now
  • finally added support for "limit" in poll events request
  • added ApiModels as a discriminated union using type consts in the request/payload models
  • added a model map linking API paths (aka methods) to request and response models (both raw and enveloped versions) -- refactored request handler accordingly
  • major overhaul moving a lot of logic from server -> response_handler: wraps with envelope validation into a single method
  • entrypoints (poller, server) should be largely interfaces not contain much logic themselves
  • working on a better dependency injection system
  • moved around some default values and dependencies
  • figured out clean unified design for assembler and blueprints, works like a regular class is expected to
  • refined node assembler, parses through all base classes in reverse order to construct _build_order
  • moved base, partial, and full node definitions back to core.py
  • attempt to refactor config system
  • separate subsystem ConfigLoader handles reading and writing to YAML
  • config components now separated by full/partial node
  • generating on missing logic moved to model validators,
  • added support for non factories to dependency injection framework -- detects non callables, and Pydantic BaseModels and treats them "as is"
  • restructuring and renaming
  • queues and buffer use 'push' instead of redundant push_kobj/push_event_to
  • moved config system into a node component
  • removed old logging system from example nodes
  • updated typing and error logging
  • added LNAV config file for koi-net ndjson logs
  • removed cli tools, removed cli entrypoint in pyproject, moving to 'cli' branch, won't be a part of v1.2
  • fixing coordinator catch up, no longer tries to query partial nodes or nodes that don't provide orn:koi-net.node state
  • moved catch up function in lifecycle to a sync manager component
  • decomposed assembler build function into three steps
  • added a dependency graph visualizer
  • updated LNAV config
  • cleaned up knowledge handler class
  • added doc strings to assembler
  • pass on config modules - improved logging and docs
  • update documentation, logging, organization from entry point components
  • cleaning up network methods, documentation and small code improvements
  • added a reset for the node network timeout
  • updated docstrings and cleaned up code in processor modules
  • updated documentation for protocol and worker modules
  • generalized poll event buffer, to event buffer including timing features for broadcast batching
  • added broadcast event buffer as an independent component
  • moved internal config for workers into config class
  • removed unused default effector actions
  • renamed secure to secure manager
  • restructured sync manager and catch up call in lifecycle
  • refactored effector to work similar to the processing pipeline, accepts a list of deref handlers
  • made public key overwrite warning more specific
  • gave effector deref handlers access to handler context, readded post init injection to effector
  • hacked type annotation return from node assembler to give a better dynamic representation of the node container to the type checker
  • added write through option on deref function
  • spun out config proxy class from config loader
  • renamed config cls to config schema
  • better separation of concerns for config system
  • renamed component config_cls -> config_schema
  • switched assembler functions back to chain calls
  • implemented cache directly with config dependency (necessary for new config system)
  • moved all code execution out of init functions
  • lifecycle start now calls config loader, and loads priv key to secure manager
  • removed lifespan from fastapi app, now done using lifecycle context manager in server class to allow for config loading before uvicorn starts
  • added kobj worker config
  • automated component build order via kahn's algorithm on dependency graph
  • working on cycle detection and sending useful dev errors
  • moved start / stop logic into worker classes
  • factored out lifecycle component, instead the node container object will automatically run start() and stop() functions for components which provide them
  • config now loads at init time, not at startup
  • entrypoint components run() method treated as special main thread function by container
  • refactored assembly mechanism: new assembly artifact class does most of the assembly work, built once for each node assembly
  • node assembly builds components and passes them along with the artifact into a new node container class
  • node container class has start, stop, and run functions, they will automatically turn components on in order and then run the entrypoint
  • experimenting with explicit overrides, cache schema has a component.static decorator now
  • added a consts module
  • moved assembler, component, container, and consts to shared build module, cleaned up documentation
  • moved handshaker, profile monitor (renamed from self start), and sync manager to behaviors module
  • removed catcher upper component and split its start up functions between the handshaker and sync manager
  • cleaning up, added get_logger method in log system, may have components import log as a dependency
  • renamed assembly artifact -> build artifact
  • added a new comp_order decorator to give start and stop orderer more information
  • comp_order.worker starts worker components before and stops them after all other components
  • renamed component -> comp_type
  • removed factory (for now), default comp type is singleton
  • moved build_app() call to init of server, not run method
  • added comp_order.worker to base worker class
  • readded access log to uvicorn
  • added more specific typehints for full node and partial node config
  • updated log system
  • achieved compatibility with uvicorn logs including errors and access!
  • handshaker bug fix, handshakes when there aren't any neighbors

lukvmil and others added 30 commits September 9, 2025 16:48
…ith DI framework. trying to factor out the "actor" class into utils
…d NodeContainer classes. grouped behaviors back into a class Behaviors (prev Actor)
…v commit also removed add_handler and register_handler functions from pipeline, handlers should now be passed in as a list in the NodeAssembler class)
… event worker flushes buffers before shutting down now
prototype cli interface for managing koi nodes
…ifecycle, added effector back to handler context
…" in poll events request, added ApiModels as a discriminated union using type consts in the request/payload models, added a model map linking API paths (aka methods) to request and response models (both raw and enveloped versions) -- refactored request handler accordingly, major overhaul moving a lot of logic from server -> response_handler: wraps with envelope validation into a single method -- entrypoints (poller, server) should be largely interfaces not contain much logic themselves,
…der to construct _build_order, moved base, partial, and full node defintions back to core.py. marking for 1.2.0b2 release
…ndles reading and writing to YAML, config components now separated by full/partial node, generating on missing logic moved to model validators, added support for non factories to dependency injection framework -- detects non callables, and Pydantic BaseModels and treats them as is
…r nodes that don't provide orn:koi-net.node state
…omposed assembler build function into three steps, added a dependency graph visualizer, updated LNAV config
…s. added a reset for the node network timeout
lukvmil and others added 25 commits November 16, 2025 15:57
…res for broadcast batching, added broadcast event buffer as an independent component, moved internal config for workers into config class,
…ager, restructured sync manager and catch up call in lifecycle, added more docstrings
…ts a list of deref handlers, made public key overwrite warning more specific, gave effector deref handlers access to handler context, readded post init injection to effector
…namic representation of the node container to the type checker, added write through option on deref function
… config schema, better separation of concerns for config system
…in calls, implemented cache directly with config dependency (necessary for new config system), moved all code execution out of init functions, lifecycle start now calls config loader, and loads priv key to secure manager, removed lifespan from fastapi app, now done using lifecycle context manager in server class to allow for config loading before uvicorn starts, added kobj worker config
…aph, working on cycle detection and sending useful dev errors
…will automatically run `start()` and `stop()` functions in build and reverse build order for components which provide them. config now loads at init time, not at startup. entrypoint components `run()` method treated as special main thread function by container.
…: new assembly artifact class does most of the assembly work, built once for each node assembly; node assembly builds components and passes them along with the artifact into a new node container class. node container class has start, stop, and run functions. they will automatically turn components on in order and then run the entrypoint. experimenting with explicit overrides, cache schema has a @component.static decorator now. added a consts module
… manager to behaviors module. removed catcher upper component and split its start up functions between the handshaker and sync manager.
…ecorator to give start and stop orderer more information, comp_order.worker starts worker components before and stops them after all other components, renamed component -> comp_type, removed factory (for now), default is singleton, moved build_app() call to init of server, not run method, added comp_order.worker to base worker class, version bump -> 1.2.0-beta.8
@lukvmil lukvmil merged commit 804402a into main Dec 3, 2025
@lukvmil lukvmil deleted the dev branch December 3, 2025 22:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants