igniter 0.5.0 → 0.5.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -3
- data/README.md +162 -624
- data/bin/igniter-stack +94 -0
- data/docs/README.md +62 -0
- data/examples/README.md +74 -349
- data/examples/agent_orchestration.rb +76 -0
- data/examples/agents.rb +2 -1
- data/examples/catalog.rb +412 -0
- data/examples/consensus.rb +13 -11
- data/examples/dataflow.rb +3 -2
- data/examples/distributed_workflow.rb +1 -1
- data/examples/effects.rb +10 -9
- data/examples/incremental.rb +4 -3
- data/examples/introspection.rb +49 -0
- data/examples/invariants.rb +4 -3
- data/examples/llm_tools.rb +18 -18
- data/examples/mesh.rb +16 -14
- data/examples/mesh_discovery.rb +41 -21
- data/examples/mesh_gossip.rb +19 -17
- data/examples/reactive_auditing.rb +50 -0
- data/examples/run.rb +163 -0
- data/lib/igniter/monorepo_packages.rb +17 -0
- data/lib/igniter/stack.rb +5 -0
- data/lib/igniter.rb +33 -17
- data/packages/igniter-agents/README.md +22 -0
- data/{lib → packages/igniter-agents/lib}/igniter/agent/ref.rb +1 -0
- data/{lib → packages/igniter-agents/lib}/igniter/agent/runner.rb +12 -0
- data/{lib → packages/igniter-agents/lib}/igniter/agent.rb +6 -0
- data/{lib → packages/igniter-agents/lib}/igniter/agents/proactive_agent.rb +1 -1
- data/packages/igniter-agents/lib/igniter/agents.rb +23 -0
- data/{lib/igniter/agents/ai → packages/igniter-agents/lib/igniter/ai/agents}/chain_agent.rb +4 -2
- data/{lib/igniter/agents/ai → packages/igniter-agents/lib/igniter/ai/agents}/critic_agent.rb +4 -2
- data/{lib/igniter/agents/ai → packages/igniter-agents/lib/igniter/ai/agents}/evaluator_agent.rb +4 -2
- data/{lib/igniter/agents/ai → packages/igniter-agents/lib/igniter/ai/agents}/evolution_agent.rb +4 -2
- data/{lib/igniter/agents/ai → packages/igniter-agents/lib/igniter/ai/agents}/observer_agent.rb +4 -2
- data/{lib/igniter/agents/ai → packages/igniter-agents/lib/igniter/ai/agents}/planner_agent.rb +4 -2
- data/{lib/igniter/agents/ai → packages/igniter-agents/lib/igniter/ai/agents}/router_agent.rb +4 -2
- data/{lib/igniter/agents/ai → packages/igniter-agents/lib/igniter/ai/agents}/self_reflection_agent.rb +4 -2
- data/packages/igniter-agents/lib/igniter/ai/agents.rb +25 -0
- data/{lib → packages/igniter-agents/lib}/igniter/registry.rb +2 -0
- data/packages/igniter-agents/lib/igniter/runtime/registry_agent_adapter.rb +102 -0
- data/{lib → packages/igniter-agents/lib}/igniter/supervisor.rb +3 -0
- data/packages/igniter-agents/lib/igniter-agents.rb +7 -0
- data/packages/igniter-ai/README.md +20 -0
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/config.rb +1 -1
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/context.rb +2 -2
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/executor.rb +14 -14
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/providers/anthropic.rb +5 -5
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/providers/base.rb +1 -1
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/providers/ollama.rb +4 -4
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/providers/openai.rb +5 -5
- data/{lib/igniter → packages/igniter-ai/lib/igniter/ai}/skill/feedback.rb +4 -4
- data/{lib/igniter → packages/igniter-ai/lib/igniter/ai}/skill/output_schema.rb +6 -6
- data/packages/igniter-ai/lib/igniter/ai/skill/runtime_contract.rb +87 -0
- data/packages/igniter-ai/lib/igniter/ai/skill.rb +107 -0
- data/packages/igniter-ai/lib/igniter/ai/tool_registry.rb +79 -0
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/transcription/providers/assemblyai.rb +8 -8
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/transcription/providers/base.rb +3 -3
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/transcription/providers/deepgram.rb +3 -3
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/transcription/providers/openai.rb +3 -3
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/transcription/transcriber.rb +6 -6
- data/{lib/igniter/integrations/llm → packages/igniter-ai/lib/igniter/ai}/transcription/transcript_result.rb +1 -1
- data/{lib/igniter/integrations/llm.rb → packages/igniter-ai/lib/igniter/ai.rb} +18 -15
- data/packages/igniter-ai/lib/igniter-ai.rb +3 -0
- data/packages/igniter-app/README.md +19 -0
- data/packages/igniter-app/lib/igniter/app/app_config.rb +43 -0
- data/packages/igniter-app/lib/igniter/app/app_host.rb +56 -0
- data/packages/igniter-app/lib/igniter/app/app_host_config.rb +27 -0
- data/packages/igniter-app/lib/igniter/app/app_host_pack.rb +13 -0
- data/{lib/igniter/application → packages/igniter-app/lib/igniter/app}/autoloader.rb +2 -2
- data/packages/igniter-app/lib/igniter/app/cluster_app_host.rb +95 -0
- data/packages/igniter-app/lib/igniter/app/cluster_app_host_config.rb +78 -0
- data/packages/igniter-app/lib/igniter/app/credentials/config_loader.rb +152 -0
- data/packages/igniter-app/lib/igniter/app/credentials/credential.rb +48 -0
- data/packages/igniter-app/lib/igniter/app/credentials/credential_policy.rb +38 -0
- data/packages/igniter-app/lib/igniter/app/credentials/events/credential_event.rb +179 -0
- data/packages/igniter-app/lib/igniter/app/credentials/events.rb +12 -0
- data/packages/igniter-app/lib/igniter/app/credentials/lease_request.rb +153 -0
- data/packages/igniter-app/lib/igniter/app/credentials/policies/ephemeral_lease_policy.rb +35 -0
- data/packages/igniter-app/lib/igniter/app/credentials/policies/local_only_policy.rb +33 -0
- data/packages/igniter-app/lib/igniter/app/credentials/policies.rb +13 -0
- data/packages/igniter-app/lib/igniter/app/credentials/store.rb +21 -0
- data/packages/igniter-app/lib/igniter/app/credentials/stores/file_store.rb +114 -0
- data/packages/igniter-app/lib/igniter/app/credentials/trail.rb +254 -0
- data/packages/igniter-app/lib/igniter/app/credentials.rb +20 -0
- data/packages/igniter-app/lib/igniter/app/dev_output_sync.rb +4 -0
- data/packages/igniter-app/lib/igniter/app/diagnostics/app_host_contributor.rb +71 -0
- data/packages/igniter-app/lib/igniter/app/diagnostics/cluster_app_host_contributor.rb +97 -0
- data/packages/igniter-app/lib/igniter/app/diagnostics/credential_contributor.rb +66 -0
- data/packages/igniter-app/lib/igniter/app/diagnostics/evolution_contributor.rb +74 -0
- data/packages/igniter-app/lib/igniter/app/diagnostics/ignite_contributor.rb +121 -0
- data/packages/igniter-app/lib/igniter/app/diagnostics/loader_contributor.rb +68 -0
- data/packages/igniter-app/lib/igniter/app/diagnostics/orchestration_contributor.rb +200 -0
- data/packages/igniter-app/lib/igniter/app/diagnostics/runtime_contributor.rb +68 -0
- data/packages/igniter-app/lib/igniter/app/diagnostics/scheduler_contributor.rb +72 -0
- data/packages/igniter-app/lib/igniter/app/diagnostics/sdk_contributor.rb +284 -0
- data/packages/igniter-app/lib/igniter/app/diagnostics.rb +62 -0
- data/packages/igniter-app/lib/igniter/app/evolution/approval_decision.rb +115 -0
- data/packages/igniter-app/lib/igniter/app/evolution/approval_request.rb +36 -0
- data/packages/igniter-app/lib/igniter/app/evolution/plan.rb +72 -0
- data/packages/igniter-app/lib/igniter/app/evolution/planner.rb +85 -0
- data/packages/igniter-app/lib/igniter/app/evolution/result.rb +45 -0
- data/packages/igniter-app/lib/igniter/app/evolution/runner.rb +102 -0
- data/packages/igniter-app/lib/igniter/app/evolution/store.rb +21 -0
- data/packages/igniter-app/lib/igniter/app/evolution/stores/file_store.rb +241 -0
- data/packages/igniter-app/lib/igniter/app/evolution/trail.rb +108 -0
- data/packages/igniter-app/lib/igniter/app/evolution.rb +11 -0
- data/packages/igniter-app/lib/igniter/app/filesystem_loader_adapter.rb +21 -0
- data/packages/igniter-app/lib/igniter/app/generator.rb +636 -0
- data/packages/igniter-app/lib/igniter/app/generators/cluster.rb +1367 -0
- data/packages/igniter-app/lib/igniter/app/generators/dashboard.rb +152 -0
- data/packages/igniter-app/lib/igniter/app/generators/playground.rb +1227 -0
- data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/README.md.erb +37 -0
- data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/app.rb.erb +19 -0
- data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/contexts/home_context.rb.erb +54 -0
- data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/frontend/application.js.erb +3 -0
- data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/spec/dashboard_app_spec.rb.erb +79 -0
- data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/support/stack_overview.rb.erb +23 -0
- data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/web/handlers/home_handler.rb.erb +27 -0
- data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/web/views/home_page.arb.erb +44 -0
- data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/web/views/home_page.rb.erb +56 -0
- data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/web/views/layout.arb.erb +17 -0
- data/packages/igniter-app/lib/igniter/app/host_adapter.rb +26 -0
- data/packages/igniter-app/lib/igniter/app/host_config.rb +40 -0
- data/packages/igniter-app/lib/igniter/app/host_registry.rb +43 -0
- data/packages/igniter-app/lib/igniter/app/loader_adapter.rb +15 -0
- data/packages/igniter-app/lib/igniter/app/loader_pack.rb +8 -0
- data/packages/igniter-app/lib/igniter/app/loader_registry.rb +39 -0
- data/packages/igniter-app/lib/igniter/app/observability/operator_action_handler.rb +147 -0
- data/packages/igniter-app/lib/igniter/app/observability/operator_console_handler.rb +747 -0
- data/packages/igniter-app/lib/igniter/app/observability/operator_overview_handler.rb +350 -0
- data/packages/igniter-app/lib/igniter/app/observability.rb +5 -0
- data/packages/igniter-app/lib/igniter/app/observability_pack.rb +71 -0
- data/packages/igniter-app/lib/igniter/app/operator/dispatcher.rb +40 -0
- data/packages/igniter-app/lib/igniter/app/operator/handler_registry.rb +40 -0
- data/packages/igniter-app/lib/igniter/app/operator/handler_result.rb +67 -0
- data/packages/igniter-app/lib/igniter/app/operator/handlers/base.rb +79 -0
- data/packages/igniter-app/lib/igniter/app/operator/handlers/ignite_handler.rb +108 -0
- data/packages/igniter-app/lib/igniter/app/operator/handlers/orchestration_handler.rb +33 -0
- data/packages/igniter-app/lib/igniter/app/operator/handlers.rb +5 -0
- data/packages/igniter-app/lib/igniter/app/operator/lifecycle_contract.rb +55 -0
- data/packages/igniter-app/lib/igniter/app/operator/policy.rb +157 -0
- data/packages/igniter-app/lib/igniter/app/operator.rb +17 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/action_result_builder.rb +65 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/followup_request.rb +36 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/handler_registry.rb +58 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/handlers.rb +106 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/inbox.rb +283 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/inbox_query.rb +293 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/lane_registry.rb +100 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/operator_query.rb +449 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/plan.rb +68 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/planner.rb +89 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/policies.rb +125 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/policy_registry.rb +63 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/result.rb +43 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/routing_registry.rb +43 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/runner.rb +50 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/runtime_event_query.rb +205 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/runtime_overview_builder.rb +286 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/runtime_query_overview_builder.rb +20 -0
- data/packages/igniter-app/lib/igniter/app/orchestration/runtime_result_builder.rb +23 -0
- data/packages/igniter-app/lib/igniter/app/orchestration.rb +113 -0
- data/packages/igniter-app/lib/igniter/app/runtime.rb +4 -0
- data/packages/igniter-app/lib/igniter/app/runtime_context.rb +101 -0
- data/packages/igniter-app/lib/igniter/app/runtime_pack.rb +16 -0
- data/packages/igniter-app/lib/igniter/app/scaffold_pack.rb +6 -0
- data/{lib/igniter/application → packages/igniter-app/lib/igniter/app}/scheduler.rb +2 -2
- data/packages/igniter-app/lib/igniter/app/scheduler_adapter.rb +17 -0
- data/packages/igniter-app/lib/igniter/app/scheduler_pack.rb +8 -0
- data/packages/igniter-app/lib/igniter/app/scheduler_registry.rb +39 -0
- data/packages/igniter-app/lib/igniter/app/stack.rb +1726 -0
- data/packages/igniter-app/lib/igniter/app/stack_pack.rb +3 -0
- data/packages/igniter-app/lib/igniter/app/threaded_scheduler_adapter.rb +35 -0
- data/packages/igniter-app/lib/igniter/app/yml_loader.rb +43 -0
- data/packages/igniter-app/lib/igniter/app.rb +2367 -0
- data/packages/igniter-app/lib/igniter/ignite/bootstrap_agent.rb +334 -0
- data/packages/igniter-app/lib/igniter/ignite/bootstrap_target.rb +79 -0
- data/packages/igniter-app/lib/igniter/ignite/deployment_intent.rb +82 -0
- data/packages/igniter-app/lib/igniter/ignite/ignition_agent.rb +1011 -0
- data/packages/igniter-app/lib/igniter/ignite/ignition_plan.rb +83 -0
- data/packages/igniter-app/lib/igniter/ignite/ignition_report.rb +144 -0
- data/packages/igniter-app/lib/igniter/ignite/store.rb +19 -0
- data/packages/igniter-app/lib/igniter/ignite/stores/file_store.rb +112 -0
- data/packages/igniter-app/lib/igniter/ignite/trail.rb +215 -0
- data/packages/igniter-app/lib/igniter/ignite.rb +11 -0
- data/packages/igniter-app/lib/igniter-app.rb +5 -0
- data/packages/igniter-cluster/README.md +9 -0
- data/packages/igniter-cluster/lib/igniter/cluster/agent_route_resolver.rb +58 -0
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/consensus/cluster.rb +8 -4
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/consensus/errors.rb +3 -1
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/consensus/executors.rb +3 -1
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/consensus/node.rb +3 -1
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/consensus/read_query.rb +5 -3
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/consensus/state_machine.rb +4 -2
- data/packages/igniter-cluster/lib/igniter/cluster/consensus.rb +18 -0
- data/packages/igniter-cluster/lib/igniter/cluster/diagnostics/governance_contributor.rb +90 -0
- data/packages/igniter-cluster/lib/igniter/cluster/diagnostics/identity_contributor.rb +98 -0
- data/packages/igniter-cluster/lib/igniter/cluster/diagnostics/routing_contributor.rb +674 -0
- data/packages/igniter-cluster/lib/igniter/cluster/diagnostics.rb +24 -0
- data/packages/igniter-cluster/lib/igniter/cluster/events/envelope.rb +136 -0
- data/packages/igniter-cluster/lib/igniter/cluster/events/hook_support.rb +33 -0
- data/packages/igniter-cluster/lib/igniter/cluster/events/log.rb +102 -0
- data/packages/igniter-cluster/lib/igniter/cluster/events/projection_feed.rb +98 -0
- data/packages/igniter-cluster/lib/igniter/cluster/events/read_model_projector.rb +32 -0
- data/packages/igniter-cluster/lib/igniter/cluster/events.rb +131 -0
- data/packages/igniter-cluster/lib/igniter/cluster/governance/admission_decision.rb +41 -0
- data/packages/igniter-cluster/lib/igniter/cluster/governance/admission_policy.rb +66 -0
- data/packages/igniter-cluster/lib/igniter/cluster/governance/admission_queue.rb +88 -0
- data/packages/igniter-cluster/lib/igniter/cluster/governance/admission_request.rb +62 -0
- data/packages/igniter-cluster/lib/igniter/cluster/governance/admission_workflow.rb +214 -0
- data/packages/igniter-cluster/lib/igniter/cluster/governance/checkpoint.rb +141 -0
- data/packages/igniter-cluster/lib/igniter/cluster/governance/compaction_record.rb +33 -0
- data/packages/igniter-cluster/lib/igniter/cluster/governance/stores/checkpoint_store.rb +89 -0
- data/packages/igniter-cluster/lib/igniter/cluster/governance/stores/file_store.rb +249 -0
- data/packages/igniter-cluster/lib/igniter/cluster/governance/trail.rb +164 -0
- data/packages/igniter-cluster/lib/igniter/cluster/governance.rb +12 -0
- data/packages/igniter-cluster/lib/igniter/cluster/identity/capability_attestation.rb +114 -0
- data/packages/igniter-cluster/lib/igniter/cluster/identity/manifest.rb +139 -0
- data/packages/igniter-cluster/lib/igniter/cluster/identity/node_identity.rb +106 -0
- data/packages/igniter-cluster/lib/igniter/cluster/identity.rb +5 -0
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/mesh/announcer.rb +37 -4
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/checkpoint_gossip.rb +60 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/config.rb +146 -0
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/mesh/discovery.rb +7 -2
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/mesh/errors.rb +10 -5
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/mesh/gossip.rb +19 -4
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/mesh_ql.rb +470 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/node_observation.rb +281 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/observation_query.rb +284 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/peer.rb +51 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/peer_capacity_report.rb +42 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/peer_identity_envelope.rb +158 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/peer_metadata.rb +122 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/peer_registry.rb +81 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/placement_decision.rb +64 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/placement_planner.rb +154 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/placement_policy.rb +103 -0
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/mesh/poller.rb +19 -4
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/rebalance_plan.rb +66 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/rebalance_planner.rb +153 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/repair_loop.rb +169 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/router.rb +306 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/workload_signal.rb +46 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh/workload_tracker.rb +215 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh.rb +452 -0
- data/packages/igniter-cluster/lib/igniter/cluster/ownership/claim.rb +69 -0
- data/packages/igniter-cluster/lib/igniter/cluster/ownership/errors.rb +19 -0
- data/packages/igniter-cluster/lib/igniter/cluster/ownership/owner_client.rb +76 -0
- data/packages/igniter-cluster/lib/igniter/cluster/ownership/registry.rb +98 -0
- data/packages/igniter-cluster/lib/igniter/cluster/ownership/resolver.rb +62 -0
- data/packages/igniter-cluster/lib/igniter/cluster/ownership.rb +81 -0
- data/packages/igniter-cluster/lib/igniter/cluster/projection_store.rb +62 -0
- data/packages/igniter-cluster/lib/igniter/cluster/rag/chunk.rb +49 -0
- data/packages/igniter-cluster/lib/igniter/cluster/rag/fanout_retriever.rb +93 -0
- data/packages/igniter-cluster/lib/igniter/cluster/rag/knowledge_shard.rb +140 -0
- data/packages/igniter-cluster/lib/igniter/cluster/rag/net_http_adapter.rb +85 -0
- data/packages/igniter-cluster/lib/igniter/cluster/rag/ranker.rb +46 -0
- data/packages/igniter-cluster/lib/igniter/cluster/rag/retrieval_query.rb +30 -0
- data/packages/igniter-cluster/lib/igniter/cluster/rag/retrieval_result.rb +77 -0
- data/packages/igniter-cluster/lib/igniter/cluster/rag.rb +38 -0
- data/packages/igniter-cluster/lib/igniter/cluster/remote_adapter.rb +101 -0
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/replication/bootstrapper.rb +3 -1
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/replication/bootstrappers/gem.rb +11 -4
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/replication/bootstrappers/git.rb +9 -2
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/replication/bootstrappers/tarball.rb +8 -2
- data/packages/igniter-cluster/lib/igniter/cluster/replication/capability_query.rb +675 -0
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/replication/expansion_plan.rb +5 -3
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/replication/expansion_planner.rb +41 -29
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/replication/manifest.rb +3 -1
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/replication/network_topology.rb +44 -17
- data/packages/igniter-cluster/lib/igniter/cluster/replication/node_profile.rb +134 -0
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/replication/reflective_replication_agent.rb +50 -29
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/replication/replication_agent.rb +4 -2
- data/{lib/igniter → packages/igniter-cluster/lib/igniter/cluster}/replication/ssh_session.rb +3 -1
- data/packages/igniter-cluster/lib/igniter/cluster/replication.rb +38 -0
- data/packages/igniter-cluster/lib/igniter/cluster/routed_agent_adapter.rb +79 -0
- data/packages/igniter-cluster/lib/igniter/cluster/routing_plan_executor.rb +427 -0
- data/packages/igniter-cluster/lib/igniter/cluster/routing_plan_result.rb +38 -0
- data/packages/igniter-cluster/lib/igniter/cluster/trust/admission_plan.rb +34 -0
- data/packages/igniter-cluster/lib/igniter/cluster/trust/admission_planner.rb +76 -0
- data/packages/igniter-cluster/lib/igniter/cluster/trust/admission_result.rb +34 -0
- data/packages/igniter-cluster/lib/igniter/cluster/trust/admission_runner.rb +125 -0
- data/packages/igniter-cluster/lib/igniter/cluster/trust/trust_assessment.rb +37 -0
- data/packages/igniter-cluster/lib/igniter/cluster/trust/trust_store.rb +58 -0
- data/packages/igniter-cluster/lib/igniter/cluster/trust/verifier.rb +80 -0
- data/packages/igniter-cluster/lib/igniter/cluster/trust.rb +9 -0
- data/packages/igniter-cluster/lib/igniter/cluster.rb +71 -0
- data/packages/igniter-cluster/lib/igniter-cluster.rb +3 -0
- data/packages/igniter-core/README.md +21 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/capabilities.rb +3 -1
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/compiled_graph.rb +40 -2
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/validation_pipeline.rb +1 -0
- data/packages/igniter-core/lib/igniter/core/compiler/validators/agent_validator.rb +142 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/validators/dependencies_validator.rb +40 -1
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler.rb +1 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/contract.rb +76 -6
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/dataflow.rb +7 -7
- data/packages/igniter-core/lib/igniter/core/diagnostics/agent_contributor.rb +241 -0
- data/packages/igniter-core/lib/igniter/core/diagnostics/capability_contributor.rb +162 -0
- data/packages/igniter-core/lib/igniter/core/diagnostics/orchestration_contributor.rb +75 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/diagnostics/report.rb +81 -6
- data/packages/igniter-core/lib/igniter/core/diagnostics.rb +58 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/dsl/contract_builder.rb +163 -6
- data/packages/igniter-core/lib/igniter/core/dto/record.rb +189 -0
- data/packages/igniter-core/lib/igniter/core/dto.rb +8 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/effect.rb +4 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/errors.rb +26 -3
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/extensions/introspection/graph_formatter.rb +32 -1
- data/packages/igniter-core/lib/igniter/core/extensions/introspection/plan_formatter.rb +85 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/extensions/introspection/runtime_formatter.rb +26 -0
- data/packages/igniter-core/lib/igniter/core/extensions/invariants.rb +70 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/incremental.rb +4 -4
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/memory/memorable.rb +1 -1
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/memory/stores/sqlite.rb +5 -3
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/memory.rb +11 -11
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/metrics/prometheus_exporter.rb +1 -1
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/metrics.rb +8 -8
- data/packages/igniter-core/lib/igniter/core/model/agent_interaction_contract.rb +172 -0
- data/packages/igniter-core/lib/igniter/core/model/agent_node.rb +86 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/model/branch_node.rb +37 -1
- data/packages/igniter-core/lib/igniter/core/model/remote_node.rb +91 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/model.rb +2 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/node_cache.rb +1 -1
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/property_testing.rb +8 -8
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/provenance/builder.rb +30 -1
- data/packages/igniter-core/lib/igniter/core/runtime/agent_adapter.rb +41 -0
- data/packages/igniter-core/lib/igniter/core/runtime/agent_result_contract.rb +91 -0
- data/packages/igniter-core/lib/igniter/core/runtime/agent_route.rb +60 -0
- data/packages/igniter-core/lib/igniter/core/runtime/agent_route_resolver.rb +26 -0
- data/packages/igniter-core/lib/igniter/core/runtime/agent_session.rb +922 -0
- data/packages/igniter-core/lib/igniter/core/runtime/agent_session_query.rb +379 -0
- data/packages/igniter-core/lib/igniter/core/runtime/agent_transport.rb +30 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/cache.rb +6 -3
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/deferred_result.rb +27 -1
- data/packages/igniter-core/lib/igniter/core/runtime/execution.rb +913 -0
- data/packages/igniter-core/lib/igniter/core/runtime/job_worker.rb +39 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/node_state.rb +4 -2
- data/packages/igniter-core/lib/igniter/core/runtime/orchestration_overview.rb +213 -0
- data/packages/igniter-core/lib/igniter/core/runtime/orchestration_runtime_state.rb +176 -0
- data/packages/igniter-core/lib/igniter/core/runtime/orchestration_transition_query.rb +208 -0
- data/packages/igniter-core/lib/igniter/core/runtime/planner.rb +301 -0
- data/packages/igniter-core/lib/igniter/core/runtime/proxy_agent_adapter.rb +124 -0
- data/packages/igniter-core/lib/igniter/core/runtime/remote_adapter.rb +26 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/resolver.rb +250 -57
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/result.rb +2 -0
- data/packages/igniter-core/lib/igniter/core/runtime/stores/sqlite_store.rb +155 -0
- data/packages/igniter-core/lib/igniter/core/runtime/stream_result.rb +171 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime.rb +15 -0
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/temporal.rb +1 -1
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/tool/discoverable.rb +3 -3
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/tool.rb +6 -2
- data/{lib/igniter → packages/igniter-core/lib/igniter/core}/version.rb +1 -1
- data/packages/igniter-core/lib/igniter/core.rb +23 -0
- data/packages/igniter-core/lib/igniter-core.rb +3 -0
- data/packages/igniter-extensions/README.md +21 -0
- data/packages/igniter-extensions/lib/igniter/extensions/auditing.rb +3 -0
- data/{lib → packages/igniter-extensions/lib}/igniter/extensions/capabilities.rb +1 -1
- data/{lib → packages/igniter-extensions/lib}/igniter/extensions/content_addressing.rb +1 -1
- data/{lib → packages/igniter-extensions/lib}/igniter/extensions/dataflow.rb +1 -1
- data/{lib → packages/igniter-extensions/lib}/igniter/extensions/differential.rb +1 -1
- data/{lib → packages/igniter-extensions/lib}/igniter/extensions/execution_report.rb +1 -1
- data/{lib → packages/igniter-extensions/lib}/igniter/extensions/incremental.rb +1 -1
- data/packages/igniter-extensions/lib/igniter/extensions/introspection.rb +3 -0
- data/packages/igniter-extensions/lib/igniter/extensions/invariants.rb +3 -0
- data/{lib → packages/igniter-extensions/lib}/igniter/extensions/provenance.rb +1 -1
- data/packages/igniter-extensions/lib/igniter/extensions/reactive.rb +3 -0
- data/{lib → packages/igniter-extensions/lib}/igniter/extensions/saga.rb +1 -1
- data/packages/igniter-extensions/lib/igniter/extensions.rb +8 -0
- data/packages/igniter-extensions/lib/igniter-extensions.rb +3 -0
- data/packages/igniter-frontend/README.md +224 -0
- data/packages/igniter-frontend/lib/igniter/frontend/app.rb +90 -0
- data/packages/igniter-frontend/lib/igniter/frontend/app_access.rb +36 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/component.rb +120 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/action_group.rb +53 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/badge.rb +91 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/boolean.rb +53 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/breadcrumbs.rb +71 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/card.rb +114 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/conversation_panel.rb +61 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/datetime.rb +42 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/display_value_support.rb +38 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/empty_state.rb +39 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/event_list.rb +44 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/filters.rb +183 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/indicator.rb +59 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/json_panel.rb +36 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/key_value_list.rb +40 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/loading_state.rb +43 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/metric_grid.rb +37 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/number.rb +53 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/page_header.rb +53 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/pagination.rb +143 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/panel.rb +67 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/percentage.rb +79 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/resource_list.rb +38 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/scenario_card.rb +48 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/shell_columns.rb +67 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/sidebar_shell.rb +106 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/table_with.rb +203 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/tabs.rb +147 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/viz.rb +185 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/page.rb +74 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/raw_text_node.rb +40 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre/template_page.rb +243 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre.rb +48 -0
- data/packages/igniter-frontend/lib/igniter/frontend/arbre_page.rb +7 -0
- data/packages/igniter-frontend/lib/igniter/frontend/assets.rb +101 -0
- data/packages/igniter-frontend/lib/igniter/frontend/builder.rb +124 -0
- data/packages/igniter-frontend/lib/igniter/frontend/component.rb +24 -0
- data/packages/igniter-frontend/lib/igniter/frontend/components.rb +7 -0
- data/packages/igniter-frontend/lib/igniter/frontend/context.rb +53 -0
- data/packages/igniter-frontend/lib/igniter/frontend/form_builder.rb +63 -0
- data/packages/igniter-frontend/lib/igniter/frontend/handler.rb +92 -0
- data/packages/igniter-frontend/lib/igniter/frontend/javascript.rb +353 -0
- data/packages/igniter-frontend/lib/igniter/frontend/page.rb +24 -0
- data/packages/igniter-frontend/lib/igniter/frontend/request.rb +61 -0
- data/packages/igniter-frontend/lib/igniter/frontend/response.rb +67 -0
- data/packages/igniter-frontend/lib/igniter/frontend/tailwind/realtime/adapters.rb +226 -0
- data/packages/igniter-frontend/lib/igniter/frontend/tailwind/realtime/presets.rb +147 -0
- data/packages/igniter-frontend/lib/igniter/frontend/tailwind/realtime.rb +259 -0
- data/packages/igniter-frontend/lib/igniter/frontend/tailwind/surfaces.rb +1074 -0
- data/packages/igniter-frontend/lib/igniter/frontend/tailwind/ui.rb +1438 -0
- data/packages/igniter-frontend/lib/igniter/frontend/tailwind.rb +180 -0
- data/packages/igniter-frontend/lib/igniter/frontend/version.rb +9 -0
- data/packages/igniter-frontend/lib/igniter/frontend.rb +35 -0
- data/packages/igniter-frontend/lib/igniter-frontend.rb +3 -0
- data/packages/igniter-rails/README.md +96 -0
- data/packages/igniter-rails/lib/igniter/plugins/rails/generators/contract/templates/contract.rb.tt +22 -0
- data/packages/igniter-rails/lib/igniter/plugins/rails/generators/install/templates/igniter.rb.tt +16 -0
- data/packages/igniter-rails/lib/igniter-rails.rb +3 -0
- data/packages/igniter-schema-rendering/README.md +27 -0
- data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/page.rb +35 -0
- data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/patcher.rb +47 -0
- data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/renderer.rb +268 -0
- data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/schema.rb +172 -0
- data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/store.rb +53 -0
- data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/submission_normalizer.rb +117 -0
- data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/submission_processor.rb +91 -0
- data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/submission_validator.rb +62 -0
- data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/version.rb +9 -0
- data/packages/igniter-schema-rendering/lib/igniter/schema_rendering.rb +20 -0
- data/packages/igniter-schema-rendering/lib/igniter-schema-rendering.rb +3 -0
- data/packages/igniter-sdk/README.md +25 -0
- data/packages/igniter-sdk/lib/igniter/sdk/channels/base.rb +84 -0
- data/packages/igniter-sdk/lib/igniter/sdk/channels/delivery_result.rb +61 -0
- data/packages/igniter-sdk/lib/igniter/sdk/channels/message.rb +101 -0
- data/packages/igniter-sdk/lib/igniter/sdk/channels/telegram.rb +161 -0
- data/packages/igniter-sdk/lib/igniter/sdk/channels/webhook.rb +213 -0
- data/packages/igniter-sdk/lib/igniter/sdk/channels.rb +17 -0
- data/packages/igniter-sdk/lib/igniter/sdk/data/store.rb +31 -0
- data/packages/igniter-sdk/lib/igniter/sdk/data/stores/file.rb +113 -0
- data/packages/igniter-sdk/lib/igniter/sdk/data/stores/in_memory.rb +63 -0
- data/packages/igniter-sdk/lib/igniter/sdk/data/stores/sqlite.rb +144 -0
- data/packages/igniter-sdk/lib/igniter/sdk/data.rb +34 -0
- data/packages/igniter-sdk/lib/igniter/sdk/tools/agent_bootstrap_tool.rb +151 -0
- data/packages/igniter-sdk/lib/igniter/sdk/tools/local_workflow_selector_tool.rb +269 -0
- data/packages/igniter-sdk/lib/igniter/sdk/tools/system_discovery_tool.rb +198 -0
- data/packages/igniter-sdk/lib/igniter/sdk/tools.rb +9 -0
- data/packages/igniter-sdk/lib/igniter/sdk.rb +86 -0
- data/packages/igniter-sdk/lib/igniter-sdk.rb +3 -0
- data/packages/igniter-server/README.md +9 -0
- data/packages/igniter-server/lib/igniter/server/agent_session_store.rb +98 -0
- data/packages/igniter-server/lib/igniter/server/agent_transport.rb +95 -0
- data/packages/igniter-server/lib/igniter/server/app_host.rb +3 -0
- data/{lib → packages/igniter-server/lib}/igniter/server/client.rb +96 -6
- data/packages/igniter-server/lib/igniter/server/config.rb +70 -0
- data/packages/igniter-server/lib/igniter/server/handlers/agent_message_handler.rb +107 -0
- data/packages/igniter-server/lib/igniter/server/handlers/agent_session_handler.rb +125 -0
- data/packages/igniter-server/lib/igniter/server/handlers/manifest_handler.rb +77 -0
- data/{lib → packages/igniter-server/lib}/igniter/server/handlers/metrics_handler.rb +1 -1
- data/{lib → packages/igniter-server/lib}/igniter/server/handlers/peers_handler.rb +38 -17
- data/{lib → packages/igniter-server/lib}/igniter/server/http_server.rb +91 -15
- data/{lib → packages/igniter-server/lib}/igniter/server/rack_app.rb +27 -2
- data/packages/igniter-server/lib/igniter/server/remote_adapter.rb +27 -0
- data/packages/igniter-server/lib/igniter/server/router.rb +291 -0
- data/{lib → packages/igniter-server/lib}/igniter/server/server_logger.rb +3 -1
- data/{lib → packages/igniter-server/lib}/igniter/server.rb +58 -1
- data/packages/igniter-server/lib/igniter-server.rb +3 -0
- metadata +631 -282
- data/docs/API_V2.md +0 -537
- data/docs/APPLICATION_V1.md +0 -253
- data/docs/ARCHITECTURE_V2.md +0 -317
- data/docs/BACKLOG.md +0 -166
- data/docs/BRANCHES_V1.md +0 -213
- data/docs/CAPABILITIES_V1.md +0 -207
- data/docs/COLLECTIONS_V1.md +0 -303
- data/docs/CONSENSUS_V1.md +0 -477
- data/docs/CONTENT_ADDRESSING_V1.md +0 -221
- data/docs/DATAFLOW_V1.md +0 -274
- data/docs/DISTRIBUTED_CONTRACTS_V1.md +0 -493
- data/docs/EXECUTION_MODEL_V2.md +0 -324
- data/docs/IGNITER_CONCEPTS.md +0 -81
- data/docs/LLM_V1.md +0 -335
- data/docs/MESH_V1.md +0 -732
- data/docs/NODE_CACHE_V1.md +0 -324
- data/docs/PATTERNS.md +0 -411
- data/docs/PROACTIVE_AGENTS_V1.md +0 -293
- data/docs/SERVER_V1.md +0 -512
- data/docs/SKILLS_V1.md +0 -213
- data/docs/STORE_ADAPTERS.md +0 -154
- data/docs/TEMPORAL_V1.md +0 -174
- data/docs/TOOLS_V1.md +0 -347
- data/docs/TRANSCRIPTION_V1.md +0 -403
- data/lib/igniter/agents.rb +0 -56
- data/lib/igniter/application/app_config.rb +0 -32
- data/lib/igniter/application/generator.rb +0 -157
- data/lib/igniter/application/yml_loader.rb +0 -39
- data/lib/igniter/application.rb +0 -174
- data/lib/igniter/consensus.rb +0 -58
- data/lib/igniter/diagnostics.rb +0 -8
- data/lib/igniter/extensions/introspection/plan_formatter.rb +0 -55
- data/lib/igniter/extensions/invariants.rb +0 -116
- data/lib/igniter/extensions/mesh.rb +0 -31
- data/lib/igniter/integrations/agents.rb +0 -18
- data/lib/igniter/mesh/config.rb +0 -45
- data/lib/igniter/mesh/peer.rb +0 -21
- data/lib/igniter/mesh/peer_registry.rb +0 -51
- data/lib/igniter/mesh/router.rb +0 -109
- data/lib/igniter/mesh.rb +0 -85
- data/lib/igniter/model/remote_node.rb +0 -42
- data/lib/igniter/replication/node_role.rb +0 -42
- data/lib/igniter/replication/role_registry.rb +0 -73
- data/lib/igniter/replication.rb +0 -54
- data/lib/igniter/runtime/execution.rb +0 -416
- data/lib/igniter/runtime/job_worker.rb +0 -18
- data/lib/igniter/runtime/planner.rb +0 -126
- data/lib/igniter/server/config.rb +0 -34
- data/lib/igniter/server/handlers/manifest_handler.rb +0 -34
- data/lib/igniter/server/router.rb +0 -108
- data/lib/igniter/skill.rb +0 -218
- data/lib/igniter/tool_registry.rb +0 -144
- /data/{lib → packages/igniter-agents/lib}/igniter/agent/mailbox.rb +0 -0
- /data/{lib → packages/igniter-agents/lib}/igniter/agent/message.rb +0 -0
- /data/{lib → packages/igniter-agents/lib}/igniter/agent/state_holder.rb +0 -0
- /data/{lib → packages/igniter-agents/lib}/igniter/agents/observability/metrics_agent.rb +0 -0
- /data/{lib → packages/igniter-agents/lib}/igniter/agents/pipeline/batch_processor_agent.rb +0 -0
- /data/{lib/igniter/agents/ai → packages/igniter-agents/lib/igniter/agents/proactive}/alert_agent.rb +0 -0
- /data/{lib/igniter/agents/ai → packages/igniter-agents/lib/igniter/agents/proactive}/health_check_agent.rb +0 -0
- /data/{lib → packages/igniter-agents/lib}/igniter/agents/reliability/retry_agent.rb +0 -0
- /data/{lib → packages/igniter-agents/lib}/igniter/agents/scheduling/cron_agent.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/graph_compiler.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/type_resolver.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/validation_context.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/validator.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/validators/await_validator.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/validators/callable_validator.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/validators/outputs_validator.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/validators/remote_validator.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/validators/type_compatibility_validator.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/compiler/validators/uniqueness_validator.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/content_addressing.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/dataflow/aggregate_operators.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/dataflow/aggregate_state.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/dataflow/diff.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/dataflow/diff_state.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/dataflow/incremental_collection_result.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/dataflow/window_filter.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/diagnostics/auditing/report/console_formatter.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/diagnostics/auditing/report/markdown_formatter.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/diagnostics/introspection/formatters/mermaid_formatter.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/diagnostics/introspection/formatters/text_tree_formatter.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/differential/divergence.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/differential/formatter.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/differential/report.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/differential/runner.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/differential.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/dsl/schema_builder.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/dsl.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/effect_registry.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/events/bus.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/events/event.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/events.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/execution_report/builder.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/execution_report/formatter.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/execution_report/node_entry.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/execution_report/report.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/execution_report.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/executor.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/executor_registry.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/extensions/auditing/timeline.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/extensions/auditing.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/extensions/introspection.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/extensions/reactive/engine.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/extensions/reactive/matcher.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/extensions/reactive/reaction.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/extensions/reactive.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/extensions.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/fingerprint.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/incremental/formatter.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/incremental/result.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/incremental/tracker.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/invariant.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/memory/agent_memory.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/memory/episode.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/memory/fact.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/memory/reflection_cycle.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/memory/reflection_record.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/memory/store.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/memory/stores/in_memory.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/metrics/collector.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/metrics/snapshot.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/model/aggregate_node.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/model/await_node.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/model/collection_node.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/model/composition_node.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/model/compute_node.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/model/effect_node.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/model/graph.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/model/input_node.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/model/node.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/model/output_node.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/property_testing/formatter.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/property_testing/generators.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/property_testing/result.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/property_testing/run.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/property_testing/runner.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/provenance/lineage.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/provenance/node_trace.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/provenance/text_formatter.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/provenance.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/collection_result.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/input_validator.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/invalidator.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/runner_factory.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/runners/inline_runner.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/runners/store_runner.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/runners/thread_pool_runner.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/stores/active_record_store.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/stores/file_store.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/stores/memory_store.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/runtime/stores/redis_store.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/saga/compensation.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/saga/compensation_record.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/saga/executor.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/saga/formatter.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/saga/result.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/saga.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/stream_loop.rb +0 -0
- /data/{lib/igniter → packages/igniter-core/lib/igniter/core}/type_system.rb +0 -0
- /data/{lib/igniter/integrations → packages/igniter-rails/lib/igniter/plugins}/rails/cable_adapter.rb +0 -0
- /data/{lib/igniter/integrations → packages/igniter-rails/lib/igniter/plugins}/rails/contract_job.rb +0 -0
- /data/{lib/igniter/integrations → packages/igniter-rails/lib/igniter/plugins}/rails/generators/contract/contract_generator.rb +0 -0
- /data/{lib/igniter/integrations → packages/igniter-rails/lib/igniter/plugins}/rails/generators/install/install_generator.rb +0 -0
- /data/{lib/igniter/integrations → packages/igniter-rails/lib/igniter/plugins}/rails/railtie.rb +0 -0
- /data/{lib/igniter/integrations → packages/igniter-rails/lib/igniter/plugins}/rails/webhook_concern.rb +0 -0
- /data/{lib/igniter/integrations → packages/igniter-rails/lib/igniter/plugins}/rails.rb +0 -0
- /data/{lib → packages/igniter-server/lib}/igniter/server/handlers/base.rb +0 -0
- /data/{lib → packages/igniter-server/lib}/igniter/server/handlers/contracts_handler.rb +0 -0
- /data/{lib → packages/igniter-server/lib}/igniter/server/handlers/event_handler.rb +0 -0
- /data/{lib → packages/igniter-server/lib}/igniter/server/handlers/execute_handler.rb +0 -0
- /data/{lib → packages/igniter-server/lib}/igniter/server/handlers/health_handler.rb +0 -0
- /data/{lib → packages/igniter-server/lib}/igniter/server/handlers/liveness_handler.rb +0 -0
- /data/{lib → packages/igniter-server/lib}/igniter/server/handlers/readiness_handler.rb +0 -0
- /data/{lib → packages/igniter-server/lib}/igniter/server/handlers/status_handler.rb +0 -0
- /data/{lib → packages/igniter-server/lib}/igniter/server/registry.rb +0 -0
data/docs/APPLICATION_V1.md
DELETED
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
# Igniter::Application v1
|
|
2
|
-
|
|
3
|
-
`Igniter::Application` is an optional base class that packages contracts, executors, YAML config, a background scheduler, and server startup into a single coherent entry point. It replaces the raw `Igniter::Server.configure` boilerplate and provides a conventional project layout.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Quick Start
|
|
8
|
-
|
|
9
|
-
### 1. Generate a scaffold
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
igniter-server new my_app
|
|
13
|
-
cd my_app
|
|
14
|
-
bundle install
|
|
15
|
-
bin/start
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
This creates:
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
my_app/
|
|
22
|
-
├── application.rb ← Application class (entry point)
|
|
23
|
-
├── application.yml ← base config (port, log_format, etc.)
|
|
24
|
-
├── Gemfile
|
|
25
|
-
├── config.ru ← Rack entry point for Puma / Unicorn
|
|
26
|
-
├── bin/start ← convenience start script
|
|
27
|
-
├── contracts/ ← put Contract subclasses here
|
|
28
|
-
└── executors/ ← put Executor subclasses here
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### 2. Define your Application
|
|
32
|
-
|
|
33
|
-
```ruby
|
|
34
|
-
# application.rb
|
|
35
|
-
require "igniter"
|
|
36
|
-
require "igniter/server"
|
|
37
|
-
require "igniter/application"
|
|
38
|
-
|
|
39
|
-
Dir[File.join(__dir__, "executors/**/*.rb")].sort.each { |f| require f }
|
|
40
|
-
Dir[File.join(__dir__, "contracts/**/*.rb")].sort.each { |f| require f }
|
|
41
|
-
|
|
42
|
-
class MyApp < Igniter::Application
|
|
43
|
-
config_file File.join(__dir__, "application.yml") # optional
|
|
44
|
-
|
|
45
|
-
configure do |c|
|
|
46
|
-
c.port = ENV.fetch("PORT", 4567).to_i
|
|
47
|
-
c.store = Igniter::Runtime::Stores::MemoryStore.new
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
register "OrderContract", OrderContract
|
|
51
|
-
register "InvoiceContract", InvoiceContract
|
|
52
|
-
|
|
53
|
-
schedule :cleanup, every: "1h" do
|
|
54
|
-
puts "[cleanup] #{Time.now.strftime("%H:%M")}"
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
schedule :daily_report, every: "1d", at: "09:00" do
|
|
58
|
-
DailyReportContract.new.resolve_all(date: Date.today)
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
MyApp.start if $PROGRAM_NAME == __FILE__
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### 3. Run
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
# Built-in HTTP server (blocking)
|
|
69
|
-
ruby application.rb
|
|
70
|
-
|
|
71
|
-
# Rack / Puma
|
|
72
|
-
bundle exec puma config.ru
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
## DSL Reference
|
|
78
|
-
|
|
79
|
-
### `config_file(path)`
|
|
80
|
-
|
|
81
|
-
Load a YAML file as the base configuration. Applied **before** the `configure` block — values in the block always win.
|
|
82
|
-
|
|
83
|
-
```ruby
|
|
84
|
-
config_file File.join(__dir__, "application.yml")
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### `configure { |c| ... }`
|
|
88
|
-
|
|
89
|
-
Block receives an `AppConfig` instance. May be called multiple times; blocks are applied in order.
|
|
90
|
-
|
|
91
|
-
```ruby
|
|
92
|
-
configure do |c|
|
|
93
|
-
c.host = "0.0.0.0"
|
|
94
|
-
c.port = 4567
|
|
95
|
-
c.log_format = :json # :text (default) or :json
|
|
96
|
-
c.drain_timeout = 30 # seconds for SIGTERM drain
|
|
97
|
-
c.store = my_store # any store adapter
|
|
98
|
-
c.metrics_collector = Igniter::Metrics::Collector.new
|
|
99
|
-
end
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### `executors_path(path)` / `contracts_path(path)`
|
|
103
|
-
|
|
104
|
-
Eagerly require all `.rb` files under the given directory on startup.
|
|
105
|
-
|
|
106
|
-
```ruby
|
|
107
|
-
executors_path "executors/"
|
|
108
|
-
contracts_path "contracts/"
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### `register(name, contract_class)`
|
|
112
|
-
|
|
113
|
-
Register a contract for HTTP dispatch.
|
|
114
|
-
|
|
115
|
-
```ruby
|
|
116
|
-
register "OrderContract", OrderContract
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### `schedule(name, every:, at: nil) { ... }`
|
|
120
|
-
|
|
121
|
-
Define a recurring background job. Starts automatically with `start` / `rack_app`.
|
|
122
|
-
|
|
123
|
-
```ruby
|
|
124
|
-
schedule :heartbeat, every: "30s" do
|
|
125
|
-
HealthCheckContract.new.resolve_all
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
schedule :daily_report, every: "1d", at: "09:00" do
|
|
129
|
-
DailyReportContract.new.resolve_all(date: Date.today)
|
|
130
|
-
end
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
**Interval formats:**
|
|
134
|
-
|
|
135
|
-
| Format | Meaning |
|
|
136
|
-
|--------|---------|
|
|
137
|
-
| `30` | 30 seconds (Integer) |
|
|
138
|
-
| `"30s"` | 30 seconds |
|
|
139
|
-
| `"5m"` | 5 minutes |
|
|
140
|
-
| `"2h"` | 2 hours |
|
|
141
|
-
| `"1d"` | 1 day |
|
|
142
|
-
| `{ hours: 1, minutes: 30 }` | 90 minutes |
|
|
143
|
-
|
|
144
|
-
`at: "HH:MM"` delays the first run until the next occurrence of that wall-clock time, then repeats with `every:`.
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## application.yml Reference
|
|
149
|
-
|
|
150
|
-
```yaml
|
|
151
|
-
server:
|
|
152
|
-
port: 4567
|
|
153
|
-
host: "0.0.0.0"
|
|
154
|
-
log_format: text # "text" (default) or "json"
|
|
155
|
-
drain_timeout: 30 # seconds for graceful SIGTERM shutdown
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
Keys under `server:` map 1-to-1 to `AppConfig` attributes. Values from YAML are applied first; the `configure` block runs afterwards and overrides anything.
|
|
159
|
-
|
|
160
|
-
ENV variables are not expanded in YAML — read them in the `configure` block:
|
|
161
|
-
|
|
162
|
-
```ruby
|
|
163
|
-
configure do |c|
|
|
164
|
-
c.port = ENV.fetch("PORT", 4567).to_i
|
|
165
|
-
end
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
## Lifecycle
|
|
171
|
-
|
|
172
|
-
### `MyApp.start`
|
|
173
|
-
|
|
174
|
-
Builds the config, registers contracts, starts background jobs, then starts the built-in pure-Ruby HTTP server (blocking). Registers `at_exit` to stop the scheduler.
|
|
175
|
-
|
|
176
|
-
### `MyApp.rack_app`
|
|
177
|
-
|
|
178
|
-
Same as `start` but returns a Rack-compatible application instead of blocking. Use with Puma, Unicorn, or any Rack server:
|
|
179
|
-
|
|
180
|
-
```ruby
|
|
181
|
-
# config.ru
|
|
182
|
-
require_relative "application"
|
|
183
|
-
run MyApp.rack_app
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
```bash
|
|
187
|
-
bundle exec puma config.ru -p 4567
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### `MyApp.config`
|
|
191
|
-
|
|
192
|
-
Returns the `AppConfig` instance (populated after the first call to `start` or `rack_app`).
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## Build Order
|
|
197
|
-
|
|
198
|
-
1. YAML file loaded → values applied to `AppConfig`
|
|
199
|
-
2. `executors_path` / `contracts_path` directories required
|
|
200
|
-
3. `configure` blocks run in declaration order (override YAML)
|
|
201
|
-
4. `Server::Config` built from `AppConfig`
|
|
202
|
-
5. Contracts registered on the server registry
|
|
203
|
-
6. Scheduler started (one thread per job)
|
|
204
|
-
|
|
205
|
-
---
|
|
206
|
-
|
|
207
|
-
## Subclass Isolation
|
|
208
|
-
|
|
209
|
-
Each `Igniter::Application` subclass gets its own isolated set of registered contracts, scheduled jobs, and configure blocks via the `inherited` hook. Subclasses do not share state:
|
|
210
|
-
|
|
211
|
-
```ruby
|
|
212
|
-
class AppA < Igniter::Application
|
|
213
|
-
register "ContractA", ContractA
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
class AppB < Igniter::Application
|
|
217
|
-
register "ContractB", ContractB
|
|
218
|
-
end
|
|
219
|
-
# AppA and AppB have completely independent registries
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
## Companion App Example
|
|
225
|
-
|
|
226
|
-
`examples/companion/` is a full production-style application built with `Igniter::Application`. It implements a distributed voice AI assistant pipeline:
|
|
227
|
-
|
|
228
|
-
```
|
|
229
|
-
ESP32 microphone → ASR → Intent → Chat (LLM) → TTS → ESP32 speaker
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
**Single-process demo (mock executors, no hardware):**
|
|
233
|
-
|
|
234
|
-
```bash
|
|
235
|
-
ruby examples/companion/demo.rb
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
**Orchestrator node (HP t740, real Ollama):**
|
|
239
|
-
|
|
240
|
-
```bash
|
|
241
|
-
# Requires: ollama serve (llama3.1:8b pulled)
|
|
242
|
-
bundle exec ruby examples/companion/application.rb
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
**See also:** [`examples/companion/README.md`](../examples/companion/README.md)
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
## Integration with igniter-server
|
|
250
|
-
|
|
251
|
-
`Igniter::Application` is a thin wrapper around `Igniter::Server`. The underlying `Server::Config` and `HttpServer` are the same — you can still use `Igniter::Server.configure` directly when you don't need the Application scaffold.
|
|
252
|
-
|
|
253
|
-
The two approaches are compatible in the same process: `Igniter::Application#start` calls `Igniter::Server::HttpServer.new(config).start` internally.
|
data/docs/ARCHITECTURE_V2.md
DELETED
|
@@ -1,317 +0,0 @@
|
|
|
1
|
-
# Igniter v2 Architecture
|
|
2
|
-
|
|
3
|
-
## Goal
|
|
4
|
-
|
|
5
|
-
Igniter v2 is a Ruby library for describing business logic as a validated dependency graph and executing that graph with:
|
|
6
|
-
|
|
7
|
-
- deterministic resolution
|
|
8
|
-
- lazy evaluation
|
|
9
|
-
- selective invalidation
|
|
10
|
-
- transparent events
|
|
11
|
-
- optional extensions built on top of the event stream
|
|
12
|
-
|
|
13
|
-
The core design principle is strict separation between:
|
|
14
|
-
|
|
15
|
-
- model time: describing the graph
|
|
16
|
-
- compile time: validating and freezing the graph
|
|
17
|
-
- runtime: resolving the graph against inputs
|
|
18
|
-
|
|
19
|
-
## Design Principles
|
|
20
|
-
|
|
21
|
-
1. Small, hard core.
|
|
22
|
-
The kernel should be minimal, strict, and easy to test.
|
|
23
|
-
|
|
24
|
-
2. Compile first, execute second.
|
|
25
|
-
No runtime should deal with half-built DSL objects.
|
|
26
|
-
|
|
27
|
-
3. Explicit data flow.
|
|
28
|
-
Dependencies, output exposure, and composition mappings are always declared.
|
|
29
|
-
|
|
30
|
-
4. Extensions over hooks.
|
|
31
|
-
Auditing, reactions, tracing, and introspection consume runtime events instead of being deeply embedded in execution.
|
|
32
|
-
|
|
33
|
-
5. Stable identities.
|
|
34
|
-
Nodes should have stable `id`, `path`, and `kind`. Runtime logic must not depend on Ruby object identity alone.
|
|
35
|
-
|
|
36
|
-
## Layered Architecture
|
|
37
|
-
|
|
38
|
-
### 1. `Igniter::Model`
|
|
39
|
-
|
|
40
|
-
Pure compile-time domain objects. No lazy execution, no caching, no observers.
|
|
41
|
-
|
|
42
|
-
Primary objects:
|
|
43
|
-
|
|
44
|
-
- `Igniter::Model::Graph`
|
|
45
|
-
- `Igniter::Model::Node`
|
|
46
|
-
- `Igniter::Model::InputNode`
|
|
47
|
-
- `Igniter::Model::ComputeNode`
|
|
48
|
-
- `Igniter::Model::OutputNode`
|
|
49
|
-
- `Igniter::Model::CompositionNode`
|
|
50
|
-
- `Igniter::Model::Dependency`
|
|
51
|
-
|
|
52
|
-
Responsibilities:
|
|
53
|
-
|
|
54
|
-
- represent graph topology
|
|
55
|
-
- store node metadata
|
|
56
|
-
- store dependency declarations
|
|
57
|
-
- store source location metadata for diagnostics
|
|
58
|
-
- expose graph traversal primitives
|
|
59
|
-
|
|
60
|
-
Constraints:
|
|
61
|
-
|
|
62
|
-
- immutable after compilation
|
|
63
|
-
- no implicit mutation during runtime
|
|
64
|
-
|
|
65
|
-
### 2. `Igniter::Compiler`
|
|
66
|
-
|
|
67
|
-
Transforms draft model definitions into a validated `CompiledGraph`.
|
|
68
|
-
|
|
69
|
-
Primary objects:
|
|
70
|
-
|
|
71
|
-
- `Igniter::Compiler::GraphCompiler`
|
|
72
|
-
- `Igniter::Compiler::CompiledGraph`
|
|
73
|
-
- `Igniter::Compiler::Validator`
|
|
74
|
-
- `Igniter::Compiler::ResolutionPlan`
|
|
75
|
-
|
|
76
|
-
Responsibilities:
|
|
77
|
-
|
|
78
|
-
- validate node uniqueness
|
|
79
|
-
- validate paths and namespaces
|
|
80
|
-
- validate dependency references
|
|
81
|
-
- detect cycles
|
|
82
|
-
- validate composition mappings
|
|
83
|
-
- compute topological order
|
|
84
|
-
- freeze the result
|
|
85
|
-
|
|
86
|
-
Compiler output:
|
|
87
|
-
|
|
88
|
-
- stable node registry by id and path
|
|
89
|
-
- dependency index
|
|
90
|
-
- reverse dependency index
|
|
91
|
-
- topological resolution plan
|
|
92
|
-
- output registry
|
|
93
|
-
|
|
94
|
-
### 3. `Igniter::Runtime`
|
|
95
|
-
|
|
96
|
-
Executes a compiled graph for one input set.
|
|
97
|
-
|
|
98
|
-
Primary objects:
|
|
99
|
-
|
|
100
|
-
- `Igniter::Runtime::Execution`
|
|
101
|
-
- `Igniter::Runtime::Resolver`
|
|
102
|
-
- `Igniter::Runtime::Cache`
|
|
103
|
-
- `Igniter::Runtime::Invalidator`
|
|
104
|
-
- `Igniter::Runtime::NodeState`
|
|
105
|
-
- `Igniter::Runtime::Result`
|
|
106
|
-
- `Igniter::Runtime::ExecutorRegistry`
|
|
107
|
-
|
|
108
|
-
Responsibilities:
|
|
109
|
-
|
|
110
|
-
- hold input values
|
|
111
|
-
- resolve requested outputs or nodes
|
|
112
|
-
- cache node states
|
|
113
|
-
- invalidate downstream nodes on input changes
|
|
114
|
-
- emit lifecycle events
|
|
115
|
-
- expose execution result
|
|
116
|
-
|
|
117
|
-
Non-responsibilities:
|
|
118
|
-
|
|
119
|
-
- graph validation
|
|
120
|
-
- DSL parsing
|
|
121
|
-
- auditing persistence
|
|
122
|
-
- reactive policy decisions
|
|
123
|
-
|
|
124
|
-
### 4. `Igniter::DSL`
|
|
125
|
-
|
|
126
|
-
Thin syntax layer that produces a graph draft or a builder input for the compiler.
|
|
127
|
-
|
|
128
|
-
Primary objects:
|
|
129
|
-
|
|
130
|
-
- `Igniter::DSL::Contract`
|
|
131
|
-
- `Igniter::DSL::Builder`
|
|
132
|
-
- `Igniter::DSL::Reference`
|
|
133
|
-
|
|
134
|
-
Responsibilities:
|
|
135
|
-
|
|
136
|
-
- provide ergonomic declaration syntax
|
|
137
|
-
- map user declarations to model/compiler input
|
|
138
|
-
- attach source-location metadata for errors
|
|
139
|
-
|
|
140
|
-
Rules:
|
|
141
|
-
|
|
142
|
-
- DSL must not contain execution logic
|
|
143
|
-
- DSL must not decide invalidation or cache behavior
|
|
144
|
-
- DSL should prefer explicit references over `method_missing`
|
|
145
|
-
|
|
146
|
-
### 5. `Igniter::Events`
|
|
147
|
-
|
|
148
|
-
Canonical runtime event schema.
|
|
149
|
-
|
|
150
|
-
Primary objects:
|
|
151
|
-
|
|
152
|
-
- `Igniter::Events::Event`
|
|
153
|
-
- `Igniter::Events::Bus`
|
|
154
|
-
- `Igniter::Events::Subscriber`
|
|
155
|
-
|
|
156
|
-
Responsibilities:
|
|
157
|
-
|
|
158
|
-
- publish structured execution events
|
|
159
|
-
- provide extension point for diagnostics and reactive features
|
|
160
|
-
|
|
161
|
-
### 6. `Igniter::Extensions`
|
|
162
|
-
|
|
163
|
-
Optional packages built on top of the event stream and compiled/runtime APIs.
|
|
164
|
-
|
|
165
|
-
Initial extension namespaces:
|
|
166
|
-
|
|
167
|
-
- `Igniter::Extensions::Auditing`
|
|
168
|
-
- `Igniter::Extensions::Reactive`
|
|
169
|
-
- `Igniter::Extensions::Introspection`
|
|
170
|
-
|
|
171
|
-
## Runtime Boundaries
|
|
172
|
-
|
|
173
|
-
The runtime is split by responsibility:
|
|
174
|
-
|
|
175
|
-
- `Execution`: public session object
|
|
176
|
-
- `Resolver`: resolves one node using dependencies
|
|
177
|
-
- `Cache`: stores `NodeState` by node id
|
|
178
|
-
- `Invalidator`: marks downstream nodes stale
|
|
179
|
-
- `Result`: output facade for callers
|
|
180
|
-
- `Bus`: emits execution events
|
|
181
|
-
|
|
182
|
-
This is deliberate. The old shape concentrated orchestration, state mutation, notifications, and invalidation in one class. In v2, each concern gets a dedicated object.
|
|
183
|
-
|
|
184
|
-
## Node Model
|
|
185
|
-
|
|
186
|
-
Every compiled node should have:
|
|
187
|
-
|
|
188
|
-
- `id`
|
|
189
|
-
- `kind`
|
|
190
|
-
- `name`
|
|
191
|
-
- `path`
|
|
192
|
-
- `dependencies`
|
|
193
|
-
- `metadata`
|
|
194
|
-
|
|
195
|
-
Candidate node kinds for v2:
|
|
196
|
-
|
|
197
|
-
- `:input`
|
|
198
|
-
- `:compute`
|
|
199
|
-
- `:output`
|
|
200
|
-
- `:composition`
|
|
201
|
-
|
|
202
|
-
Optional later kinds:
|
|
203
|
-
|
|
204
|
-
- `:constant`
|
|
205
|
-
- `:projection`
|
|
206
|
-
- `:group`
|
|
207
|
-
|
|
208
|
-
### Why reduce node kinds
|
|
209
|
-
|
|
210
|
-
The kernel should start with the smallest set that explains the execution model clearly. Extra node kinds should be added only when they materially simplify the model rather than encode DSL convenience.
|
|
211
|
-
|
|
212
|
-
## Composition Strategy
|
|
213
|
-
|
|
214
|
-
Composition is a first-class node kind.
|
|
215
|
-
|
|
216
|
-
A composition node:
|
|
217
|
-
|
|
218
|
-
- references another compiled contract
|
|
219
|
-
- defines an input mapping from parent execution to child execution
|
|
220
|
-
- returns either a child `Result` or a collection of child `Result` objects
|
|
221
|
-
|
|
222
|
-
Composition rules:
|
|
223
|
-
|
|
224
|
-
- parent and child graphs are independently compiled
|
|
225
|
-
- child execution has its own cache and event stream
|
|
226
|
-
- parent events may carry child execution correlation metadata
|
|
227
|
-
|
|
228
|
-
## Extension Strategy
|
|
229
|
-
|
|
230
|
-
Extensions must subscribe to events and read runtime state through stable APIs.
|
|
231
|
-
|
|
232
|
-
Examples:
|
|
233
|
-
|
|
234
|
-
- auditing stores a timeline of events and snapshots
|
|
235
|
-
- reactive runs side effects in response to selected events
|
|
236
|
-
- introspection formats compiled graphs and runtime state
|
|
237
|
-
|
|
238
|
-
The kernel should not know persistence formats, storage adapters, or replay UIs.
|
|
239
|
-
|
|
240
|
-
## Error Model
|
|
241
|
-
|
|
242
|
-
Errors should be typed and predictable.
|
|
243
|
-
|
|
244
|
-
Primary families:
|
|
245
|
-
|
|
246
|
-
- `Igniter::CompileError`
|
|
247
|
-
- `Igniter::ValidationError`
|
|
248
|
-
- `Igniter::CycleError`
|
|
249
|
-
- `Igniter::InputError`
|
|
250
|
-
- `Igniter::ResolutionError`
|
|
251
|
-
- `Igniter::CompositionError`
|
|
252
|
-
|
|
253
|
-
Compile errors should include source metadata when available:
|
|
254
|
-
|
|
255
|
-
- contract class
|
|
256
|
-
- node path
|
|
257
|
-
- line number
|
|
258
|
-
- declaration snippet or declaration type
|
|
259
|
-
|
|
260
|
-
## Packaging Rules
|
|
261
|
-
|
|
262
|
-
The public surface should be intentionally small:
|
|
263
|
-
|
|
264
|
-
- `require "igniter"`
|
|
265
|
-
- `Igniter::Contract`
|
|
266
|
-
- `Igniter.compile`
|
|
267
|
-
- `Igniter.execute`
|
|
268
|
-
|
|
269
|
-
Autoloading must be optional convenience, not a hard dependency for correctness.
|
|
270
|
-
|
|
271
|
-
The gem must be valid and packageable without:
|
|
272
|
-
|
|
273
|
-
- a `.git` directory
|
|
274
|
-
- Rails
|
|
275
|
-
- optional extensions
|
|
276
|
-
|
|
277
|
-
## Initial Directory Shape
|
|
278
|
-
|
|
279
|
-
```text
|
|
280
|
-
lib/
|
|
281
|
-
igniter.rb
|
|
282
|
-
igniter/
|
|
283
|
-
version.rb
|
|
284
|
-
errors.rb
|
|
285
|
-
contract.rb
|
|
286
|
-
model/
|
|
287
|
-
compiler/
|
|
288
|
-
runtime/
|
|
289
|
-
events/
|
|
290
|
-
dsl/
|
|
291
|
-
extensions/
|
|
292
|
-
auditing/
|
|
293
|
-
reactive/
|
|
294
|
-
introspection/
|
|
295
|
-
spec/
|
|
296
|
-
compiler/
|
|
297
|
-
runtime/
|
|
298
|
-
integration/
|
|
299
|
-
docs/
|
|
300
|
-
ARCHITECTURE_V2.md
|
|
301
|
-
EXECUTION_MODEL_V2.md
|
|
302
|
-
API_V2.md
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
## Non-Goals for the First Rewrite
|
|
306
|
-
|
|
307
|
-
These should not block the first working kernel:
|
|
308
|
-
|
|
309
|
-
- Rails integration
|
|
310
|
-
- persistence adapters
|
|
311
|
-
- replay UI
|
|
312
|
-
- async execution
|
|
313
|
-
- distributed execution
|
|
314
|
-
- type inference
|
|
315
|
-
- speculative optimization
|
|
316
|
-
|
|
317
|
-
The first target is a strict, reliable, inspectable synchronous engine.
|