igniter 0.5.0 → 0.5.2

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.
Files changed (840) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -3
  3. data/README.md +150 -658
  4. data/docs/README.md +59 -0
  5. data/docs/assets/README.md +8 -0
  6. data/docs/concepts/README.md +18 -0
  7. data/docs/concepts/igniter.md +119 -0
  8. data/docs/dev/README.md +48 -0
  9. data/docs/dev/agent-orchestra-dna.md +271 -0
  10. data/docs/dev/ai-agents-target-plan.md +178 -0
  11. data/docs/dev/application-target-plan.md +45 -0
  12. data/docs/dev/application-web-integration.md +59 -0
  13. data/docs/dev/application-web-poc-pattern-guide.md +167 -0
  14. data/docs/dev/architect-supervisor-bootstrap.md +322 -0
  15. data/docs/dev/architecture.md +20 -0
  16. data/docs/dev/cluster-target-plan.md +43 -0
  17. data/docs/dev/contract-persistence-target-plan.md +426 -0
  18. data/docs/dev/current-runtime-snapshot.md +73 -0
  19. data/docs/dev/data-ownership.md +29 -0
  20. data/docs/dev/document-rotation.md +51 -0
  21. data/docs/dev/embed-target-plan.md +51 -0
  22. data/docs/dev/igniter-web-dsl-sketch.md +151 -0
  23. data/docs/dev/igniter-web-target-plan.md +56 -0
  24. data/docs/dev/mcp-adapter-package-spec.md +81 -0
  25. data/docs/dev/module-system.md +46 -0
  26. data/docs/dev/package-map.md +112 -0
  27. data/docs/guide/README.md +77 -0
  28. data/docs/guide/ai-and-tools.md +33 -0
  29. data/docs/guide/api-and-runtime.md +38 -0
  30. data/docs/guide/app.md +45 -0
  31. data/docs/guide/application-capsules.md +139 -0
  32. data/docs/guide/application-showcase-portfolio.md +181 -0
  33. data/docs/guide/cli.md +70 -0
  34. data/docs/guide/cluster.md +55 -0
  35. data/docs/guide/configuration.md +31 -0
  36. data/docs/guide/contract-class-dsl.md +154 -0
  37. data/docs/guide/core-runtime-features.md +34 -0
  38. data/docs/guide/core.md +43 -0
  39. data/docs/guide/credentials.md +51 -0
  40. data/docs/guide/deployment-modes.md +63 -0
  41. data/docs/guide/distributed-workflows.md +21 -0
  42. data/docs/guide/getting-started.md +49 -0
  43. data/docs/guide/how-tos.md +33 -0
  44. data/docs/guide/igniter-lang-foundation.md +133 -0
  45. data/docs/guide/integrations.md +47 -0
  46. data/docs/guide/interactive-app-structure.md +91 -0
  47. data/docs/guide/store-adapters.md +183 -0
  48. data/docs/research/README.md +131 -0
  49. data/docs/research/contract-persistence-landing-zone.md +126 -0
  50. data/docs/research/contract-persistence-organic-model.md +279 -0
  51. data/docs/research/contract-persistence-organic-model.ru.md +277 -0
  52. data/docs/research/horizon-protocol.md +180 -0
  53. data/docs/research/igniter-lang-convergence-report.md +338 -0
  54. data/docs/research/project-status-horizon-report.md +363 -0
  55. data/docs/research/vision-handoff-protocol.md +141 -0
  56. data/docs/research/wizard-type-spec-architecture.md +293 -0
  57. data/docs/research/wizard-type-spec-research-request.md +134 -0
  58. data/docs/store/README.md +7 -0
  59. data/docs/store/convergence-audit.md +901 -0
  60. data/examples/README.md +152 -344
  61. data/examples/catalog.rb +1486 -0
  62. data/examples/cluster/incident_workflow.rb +70 -0
  63. data/examples/cluster/incidents.rb +63 -0
  64. data/examples/cluster/mesh_diagnostics.rb +89 -0
  65. data/examples/cluster/remediation.rb +63 -0
  66. data/examples/cluster/routing.rb +65 -0
  67. data/examples/contracts/aggregates.rb +39 -0
  68. data/examples/contracts/auditing.rb +35 -0
  69. data/examples/contracts/basic_pricing.rb +31 -0
  70. data/examples/contracts/branching.rb +36 -0
  71. data/examples/contracts/build_effect_executor_pack.rb +88 -0
  72. data/examples/contracts/build_your_own_pack.rb +82 -0
  73. data/examples/contracts/capabilities.rb +34 -0
  74. data/examples/contracts/class_callable.rb +45 -0
  75. data/examples/contracts/class_pricing.rb +32 -0
  76. data/examples/contracts/collection.rb +44 -0
  77. data/examples/contracts/commerce.rb +44 -0
  78. data/examples/contracts/compose_your_own_packs.rb +110 -0
  79. data/examples/contracts/composition.rb +61 -0
  80. data/examples/contracts/content_addressing.rb +33 -0
  81. data/examples/contracts/contractable_service.rb +43 -0
  82. data/examples/contracts/contractable_shadow.rb +69 -0
  83. data/examples/contracts/create_pack.rb +105 -0
  84. data/examples/contracts/dataflow.rb +57 -0
  85. data/examples/contracts/debug.rb +32 -0
  86. data/examples/contracts/debug_pack_authoring.rb +31 -0
  87. data/examples/contracts/diagnostics.rb +33 -0
  88. data/examples/contracts/differential.rb +97 -0
  89. data/examples/contracts/effects.rb +34 -0
  90. data/examples/contracts/embed_class_registration.rb +40 -0
  91. data/examples/contracts/embed_human_sugar.rb +106 -0
  92. data/examples/contracts/formula.rb +32 -0
  93. data/examples/contracts/incremental.rb +44 -0
  94. data/examples/contracts/introspection.rb +48 -0
  95. data/examples/contracts/invariants.rb +54 -0
  96. data/examples/contracts/journal.rb +37 -0
  97. data/examples/contracts/lang_foundation.rb +37 -0
  98. data/examples/contracts/mcp.rb +62 -0
  99. data/examples/contracts/mcp_host.rb +55 -0
  100. data/examples/contracts/mcp_server.rb +25 -0
  101. data/examples/contracts/piecewise.rb +30 -0
  102. data/examples/contracts/provenance.rb +55 -0
  103. data/examples/contracts/reactive.rb +62 -0
  104. data/examples/contracts/saga.rb +56 -0
  105. data/examples/contracts/scale.rb +30 -0
  106. data/examples/contracts/step_result.rb +58 -0
  107. data/examples/run.rb +163 -0
  108. data/lib/igniter/cluster.rb +3 -0
  109. data/lib/igniter/contract.rb +1 -326
  110. data/lib/igniter/monorepo_packages.rb +16 -0
  111. data/lib/igniter/version.rb +1 -1
  112. data/lib/igniter/web.rb +3 -0
  113. data/lib/igniter.rb +51 -43
  114. data/packages/igniter-agents/README.md +44 -0
  115. data/packages/igniter-agents/lib/igniter/agents/agent_definition.rb +26 -0
  116. data/packages/igniter-agents/lib/igniter/agents/agent_run.rb +47 -0
  117. data/packages/igniter-agents/lib/igniter/agents/agent_turn.rb +34 -0
  118. data/packages/igniter-agents/lib/igniter/agents/runner.rb +56 -0
  119. data/packages/igniter-agents/lib/igniter/agents/tool_call.rb +26 -0
  120. data/packages/igniter-agents/lib/igniter/agents/trace_event.rb +24 -0
  121. data/packages/igniter-agents/lib/igniter/agents.rb +33 -0
  122. data/packages/igniter-agents/lib/igniter-agents.rb +3 -0
  123. data/packages/igniter-ai/README.md +42 -0
  124. data/packages/igniter-ai/lib/igniter/ai/client.rb +18 -0
  125. data/packages/igniter-ai/lib/igniter/ai/error.rb +14 -0
  126. data/packages/igniter-ai/lib/igniter/ai/model_request.rb +28 -0
  127. data/packages/igniter-ai/lib/igniter/ai/model_response.rb +31 -0
  128. data/packages/igniter-ai/lib/igniter/ai/providers/fake.rb +24 -0
  129. data/packages/igniter-ai/lib/igniter/ai/providers/openai_responses.rb +100 -0
  130. data/packages/igniter-ai/lib/igniter/ai/providers/recorded.rb +40 -0
  131. data/packages/igniter-ai/lib/igniter/ai/usage.rb +32 -0
  132. data/packages/igniter-ai/lib/igniter/ai.rb +28 -0
  133. data/packages/igniter-ai/lib/igniter-ai.rb +3 -0
  134. data/packages/igniter-application/README.md +194 -0
  135. data/packages/igniter-application/lib/igniter/application/agent_definition.rb +38 -0
  136. data/packages/igniter-application/lib/igniter/application/agent_registry.rb +33 -0
  137. data/packages/igniter-application/lib/igniter/application/agent_runtime.rb +29 -0
  138. data/packages/igniter-application/lib/igniter/application/agents_builder.rb +26 -0
  139. data/packages/igniter-application/lib/igniter/application/ai_builder.rb +26 -0
  140. data/packages/igniter-application/lib/igniter/application/ai_provider_definition.rb +59 -0
  141. data/packages/igniter-application/lib/igniter/application/ai_registry.rb +34 -0
  142. data/packages/igniter-application/lib/igniter/application/application_assembly_plan.rb +67 -0
  143. data/packages/igniter-application/lib/igniter/application/application_blueprint.rb +227 -0
  144. data/packages/igniter-application/lib/igniter/application/application_capsule_report.rb +61 -0
  145. data/packages/igniter-application/lib/igniter/application/application_composition_report.rb +161 -0
  146. data/packages/igniter-application/lib/igniter/application/application_handoff_manifest.rb +100 -0
  147. data/packages/igniter-application/lib/igniter/application/application_host_activation_commit_readiness.rb +182 -0
  148. data/packages/igniter-application/lib/igniter/application/application_host_activation_dry_run_result.rb +190 -0
  149. data/packages/igniter-application/lib/igniter/application/application_host_activation_ledger_commit.rb +285 -0
  150. data/packages/igniter-application/lib/igniter/application/application_host_activation_ledger_verification.rb +301 -0
  151. data/packages/igniter-application/lib/igniter/application/application_host_activation_operation_digest.rb +68 -0
  152. data/packages/igniter-application/lib/igniter/application/application_host_activation_plan.rb +200 -0
  153. data/packages/igniter-application/lib/igniter/application/application_host_activation_plan_verification.rb +140 -0
  154. data/packages/igniter-application/lib/igniter/application/application_host_activation_readiness.rb +226 -0
  155. data/packages/igniter-application/lib/igniter/application/application_host_activation_receipt.rb +151 -0
  156. data/packages/igniter-application/lib/igniter/application/application_layout.rb +91 -0
  157. data/packages/igniter-application/lib/igniter/application/application_load_path.rb +38 -0
  158. data/packages/igniter-application/lib/igniter/application/application_load_report.rb +74 -0
  159. data/packages/igniter-application/lib/igniter/application/application_manifest.rb +65 -0
  160. data/packages/igniter-application/lib/igniter/application/application_structure_entry.rb +58 -0
  161. data/packages/igniter-application/lib/igniter/application/application_structure_plan.rb +128 -0
  162. data/packages/igniter-application/lib/igniter/application/application_transfer_applied_verification.rb +301 -0
  163. data/packages/igniter-application/lib/igniter/application/application_transfer_apply_plan.rb +167 -0
  164. data/packages/igniter-application/lib/igniter/application/application_transfer_apply_result.rb +321 -0
  165. data/packages/igniter-application/lib/igniter/application/application_transfer_bundle_artifact.rb +160 -0
  166. data/packages/igniter-application/lib/igniter/application/application_transfer_bundle_plan.rb +125 -0
  167. data/packages/igniter-application/lib/igniter/application/application_transfer_bundle_verification.rb +154 -0
  168. data/packages/igniter-application/lib/igniter/application/application_transfer_intake_plan.rb +195 -0
  169. data/packages/igniter-application/lib/igniter/application/application_transfer_inventory.rb +153 -0
  170. data/packages/igniter-application/lib/igniter/application/application_transfer_readiness.rb +260 -0
  171. data/packages/igniter-application/lib/igniter/application/application_transfer_receipt.rb +179 -0
  172. data/packages/igniter-application/lib/igniter/application/artifact_reference.rb +39 -0
  173. data/packages/igniter-application/lib/igniter/application/boot_phase.rb +27 -0
  174. data/packages/igniter-application/lib/igniter/application/boot_plan.rb +55 -0
  175. data/packages/igniter-application/lib/igniter/application/boot_report.rb +70 -0
  176. data/packages/igniter-application/lib/igniter/application/capsule_builder.rb +396 -0
  177. data/packages/igniter-application/lib/igniter/application/capsule_export.rb +26 -0
  178. data/packages/igniter-application/lib/igniter/application/capsule_import.rb +38 -0
  179. data/packages/igniter-application/lib/igniter/application/collection_invoker.rb +54 -0
  180. data/packages/igniter-application/lib/igniter/application/collection_transport_adapter.rb +37 -0
  181. data/packages/igniter-application/lib/igniter/application/compose_invoker.rb +51 -0
  182. data/packages/igniter-application/lib/igniter/application/compose_transport_adapter.rb +34 -0
  183. data/packages/igniter-application/lib/igniter/application/config.rb +86 -0
  184. data/packages/igniter-application/lib/igniter/application/config_builder.rb +69 -0
  185. data/packages/igniter-application/lib/igniter/application/contract_registry.rb +30 -0
  186. data/packages/igniter-application/lib/igniter/application/credential_definition.rb +65 -0
  187. data/packages/igniter-application/lib/igniter/application/credential_store.rb +68 -0
  188. data/packages/igniter-application/lib/igniter/application/embedded_host.rb +23 -0
  189. data/packages/igniter-application/lib/igniter/application/environment.rb +1071 -0
  190. data/packages/igniter-application/lib/igniter/application/feature_slice.rb +61 -0
  191. data/packages/igniter-application/lib/igniter/application/feature_slice_report.rb +43 -0
  192. data/packages/igniter-application/lib/igniter/application/file_backed_host_activation_ledger_adapter.rb +138 -0
  193. data/packages/igniter-application/lib/igniter/application/file_backed_installed_capsule_registry.rb +132 -0
  194. data/packages/igniter-application/lib/igniter/application/flow_declaration.rb +62 -0
  195. data/packages/igniter-application/lib/igniter/application/flow_event.rb +50 -0
  196. data/packages/igniter-application/lib/igniter/application/flow_session_snapshot.rb +98 -0
  197. data/packages/igniter-application/lib/igniter/application/installed_capsule_entry.rb +47 -0
  198. data/packages/igniter-application/lib/igniter/application/interface.rb +11 -0
  199. data/packages/igniter-application/lib/igniter/application/kernel.rb +385 -0
  200. data/packages/igniter-application/lib/igniter/application/lifecycle_plan_step.rb +38 -0
  201. data/packages/igniter-application/lib/igniter/application/manual_loader.rb +18 -0
  202. data/packages/igniter-application/lib/igniter/application/manual_scheduler.rb +15 -0
  203. data/packages/igniter-application/lib/igniter/application/memory_session_store.rb +33 -0
  204. data/packages/igniter-application/lib/igniter/application/missing_credential_error.rb +23 -0
  205. data/packages/igniter-application/lib/igniter/application/mount_intent.rb +48 -0
  206. data/packages/igniter-application/lib/igniter/application/mount_registration.rb +49 -0
  207. data/packages/igniter-application/lib/igniter/application/pending_action.rb +39 -0
  208. data/packages/igniter-application/lib/igniter/application/pending_input.rb +45 -0
  209. data/packages/igniter-application/lib/igniter/application/plan_executor.rb +93 -0
  210. data/packages/igniter-application/lib/igniter/application/profile.rb +178 -0
  211. data/packages/igniter-application/lib/igniter/application/provider.rb +19 -0
  212. data/packages/igniter-application/lib/igniter/application/provider_lifecycle_report.rb +72 -0
  213. data/packages/igniter-application/lib/igniter/application/provider_lifecycle_result.rb +54 -0
  214. data/packages/igniter-application/lib/igniter/application/provider_registration.rb +19 -0
  215. data/packages/igniter-application/lib/igniter/application/rack_host.rb +311 -0
  216. data/packages/igniter-application/lib/igniter/application/seam_lifecycle_result.rb +62 -0
  217. data/packages/igniter-application/lib/igniter/application/service_definition.rb +25 -0
  218. data/packages/igniter-application/lib/igniter/application/service_registry.rb +58 -0
  219. data/packages/igniter-application/lib/igniter/application/session_entry.rb +46 -0
  220. data/packages/igniter-application/lib/igniter/application/shutdown_plan.rb +45 -0
  221. data/packages/igniter-application/lib/igniter/application/shutdown_report.rb +54 -0
  222. data/packages/igniter-application/lib/igniter/application/snapshot.rb +35 -0
  223. data/packages/igniter-application/lib/igniter/application/transport_request.rb +40 -0
  224. data/packages/igniter-application/lib/igniter/application/transport_response.rb +22 -0
  225. data/packages/igniter-application/lib/igniter/application.rb +354 -0
  226. data/packages/igniter-application/lib/igniter-application.rb +3 -0
  227. data/packages/igniter-cluster/README.md +116 -0
  228. data/packages/igniter-cluster/lib/igniter/cluster/active_incident_set.rb +40 -0
  229. data/packages/igniter-cluster/lib/igniter/cluster/admission_policy.rb +158 -0
  230. data/packages/igniter-cluster/lib/igniter/cluster/admission_result.rb +47 -0
  231. data/packages/igniter-cluster/lib/igniter/cluster/capability_catalog.rb +66 -0
  232. data/packages/igniter-cluster/lib/igniter/cluster/capability_definition.rb +42 -0
  233. data/packages/igniter-cluster/lib/igniter/cluster/capability_query.rb +162 -0
  234. data/packages/igniter-cluster/lib/igniter/cluster/capability_router.rb +11 -0
  235. data/packages/igniter-cluster/lib/igniter/cluster/cluster_diagnostics_executor.rb +184 -0
  236. data/packages/igniter-cluster/lib/igniter/cluster/cluster_diagnostics_report.rb +49 -0
  237. data/packages/igniter-cluster/lib/igniter/cluster/cluster_event.rb +34 -0
  238. data/packages/igniter-cluster/lib/igniter/cluster/cluster_event_log.rb +27 -0
  239. data/packages/igniter-cluster/lib/igniter/cluster/cluster_incident.rb +42 -0
  240. data/packages/igniter-cluster/lib/igniter/cluster/decision_explanation.rb +31 -0
  241. data/packages/igniter-cluster/lib/igniter/cluster/direct_placement.rb +11 -0
  242. data/packages/igniter-cluster/lib/igniter/cluster/discovery_feed.rb +22 -0
  243. data/packages/igniter-cluster/lib/igniter/cluster/environment.rb +380 -0
  244. data/packages/igniter-cluster/lib/igniter/cluster/errors.rb +9 -0
  245. data/packages/igniter-cluster/lib/igniter/cluster/failover_plan.rb +45 -0
  246. data/packages/igniter-cluster/lib/igniter/cluster/failover_step.rb +32 -0
  247. data/packages/igniter-cluster/lib/igniter/cluster/health_policy.rb +124 -0
  248. data/packages/igniter-cluster/lib/igniter/cluster/incident_action.rb +49 -0
  249. data/packages/igniter-cluster/lib/igniter/cluster/incident_entry.rb +98 -0
  250. data/packages/igniter-cluster/lib/igniter/cluster/incident_executor.rb +145 -0
  251. data/packages/igniter-cluster/lib/igniter/cluster/incident_workflow.rb +64 -0
  252. data/packages/igniter-cluster/lib/igniter/cluster/kernel.rb +75 -0
  253. data/packages/igniter-cluster/lib/igniter/cluster/kernel_seams.rb +249 -0
  254. data/packages/igniter-cluster/lib/igniter/cluster/lease_grant.rb +40 -0
  255. data/packages/igniter-cluster/lib/igniter/cluster/lease_plan.rb +40 -0
  256. data/packages/igniter-cluster/lib/igniter/cluster/lease_policy.rb +96 -0
  257. data/packages/igniter-cluster/lib/igniter/cluster/membership_delta.rb +36 -0
  258. data/packages/igniter-cluster/lib/igniter/cluster/membership_feed.rb +24 -0
  259. data/packages/igniter-cluster/lib/igniter/cluster/membership_projection.rb +45 -0
  260. data/packages/igniter-cluster/lib/igniter/cluster/membership_snapshot.rb +64 -0
  261. data/packages/igniter-cluster/lib/igniter/cluster/memory_incident_registry.rb +169 -0
  262. data/packages/igniter-cluster/lib/igniter/cluster/memory_peer_registry.rb +24 -0
  263. data/packages/igniter-cluster/lib/igniter/cluster/mesh_admission.rb +24 -0
  264. data/packages/igniter-cluster/lib/igniter/cluster/mesh_admission_result.rb +40 -0
  265. data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_attempt.rb +51 -0
  266. data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_request.rb +71 -0
  267. data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_response.rb +28 -0
  268. data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_trace.rb +32 -0
  269. data/packages/igniter-cluster/lib/igniter/cluster/mesh_executor.rb +497 -0
  270. data/packages/igniter-cluster/lib/igniter/cluster/mesh_membership.rb +89 -0
  271. data/packages/igniter-cluster/lib/igniter/cluster/mesh_membership_event.rb +32 -0
  272. data/packages/igniter-cluster/lib/igniter/cluster/mesh_membership_source.rb +49 -0
  273. data/packages/igniter-cluster/lib/igniter/cluster/mesh_retry_policy.rb +42 -0
  274. data/packages/igniter-cluster/lib/igniter/cluster/mesh_trust_policy.rb +131 -0
  275. data/packages/igniter-cluster/lib/igniter/cluster/operator_timeline.rb +33 -0
  276. data/packages/igniter-cluster/lib/igniter/cluster/ownership_claim.rb +30 -0
  277. data/packages/igniter-cluster/lib/igniter/cluster/ownership_plan.rb +40 -0
  278. data/packages/igniter-cluster/lib/igniter/cluster/ownership_policy.rb +100 -0
  279. data/packages/igniter-cluster/lib/igniter/cluster/peer.rb +86 -0
  280. data/packages/igniter-cluster/lib/igniter/cluster/peer_discovery.rb +62 -0
  281. data/packages/igniter-cluster/lib/igniter/cluster/peer_health.rb +55 -0
  282. data/packages/igniter-cluster/lib/igniter/cluster/peer_profile.rb +102 -0
  283. data/packages/igniter-cluster/lib/igniter/cluster/peer_topology.rb +62 -0
  284. data/packages/igniter-cluster/lib/igniter/cluster/peer_view.rb +42 -0
  285. data/packages/igniter-cluster/lib/igniter/cluster/permissive_admission.rb +11 -0
  286. data/packages/igniter-cluster/lib/igniter/cluster/placement_decision.rb +38 -0
  287. data/packages/igniter-cluster/lib/igniter/cluster/placement_policy.rb +131 -0
  288. data/packages/igniter-cluster/lib/igniter/cluster/plan_action_result.rb +72 -0
  289. data/packages/igniter-cluster/lib/igniter/cluster/plan_execution_report.rb +57 -0
  290. data/packages/igniter-cluster/lib/igniter/cluster/plan_executor.rb +314 -0
  291. data/packages/igniter-cluster/lib/igniter/cluster/policy_admission.rb +18 -0
  292. data/packages/igniter-cluster/lib/igniter/cluster/policy_placement.rb +69 -0
  293. data/packages/igniter-cluster/lib/igniter/cluster/policy_router.rb +70 -0
  294. data/packages/igniter-cluster/lib/igniter/cluster/profile.rb +97 -0
  295. data/packages/igniter-cluster/lib/igniter/cluster/projection_executor.rb +42 -0
  296. data/packages/igniter-cluster/lib/igniter/cluster/projection_policy.rb +107 -0
  297. data/packages/igniter-cluster/lib/igniter/cluster/projection_report.rb +35 -0
  298. data/packages/igniter-cluster/lib/igniter/cluster/projection_stage.rb +32 -0
  299. data/packages/igniter-cluster/lib/igniter/cluster/rebalance_move.rb +30 -0
  300. data/packages/igniter-cluster/lib/igniter/cluster/rebalance_plan.rb +40 -0
  301. data/packages/igniter-cluster/lib/igniter/cluster/recovery_timeline.rb +33 -0
  302. data/packages/igniter-cluster/lib/igniter/cluster/registry_membership_source.rb +97 -0
  303. data/packages/igniter-cluster/lib/igniter/cluster/remediation_plan.rb +45 -0
  304. data/packages/igniter-cluster/lib/igniter/cluster/remediation_policy.rb +119 -0
  305. data/packages/igniter-cluster/lib/igniter/cluster/remediation_step.rb +44 -0
  306. data/packages/igniter-cluster/lib/igniter/cluster/route.rb +34 -0
  307. data/packages/igniter-cluster/lib/igniter/cluster/route_policy.rb +104 -0
  308. data/packages/igniter-cluster/lib/igniter/cluster/route_request.rb +61 -0
  309. data/packages/igniter-cluster/lib/igniter/cluster/topology_policy.rb +154 -0
  310. data/packages/igniter-cluster/lib/igniter/cluster/transport_adapter.rb +53 -0
  311. data/packages/igniter-cluster/lib/igniter/cluster.rb +108 -0
  312. data/packages/igniter-cluster/lib/igniter-cluster.rb +3 -0
  313. data/packages/igniter-contracts/README.md +239 -0
  314. data/packages/igniter-contracts/lib/igniter/contracts/api.rb +92 -0
  315. data/packages/igniter-contracts/lib/igniter/contracts/assembly/baseline_pack.rb +141 -0
  316. data/packages/igniter-contracts/lib/igniter/contracts/assembly/const_pack.rb +29 -0
  317. data/packages/igniter-contracts/lib/igniter/contracts/assembly/dsl_keyword.rb +21 -0
  318. data/packages/igniter-contracts/lib/igniter/contracts/assembly/hook_result_policies.rb +47 -0
  319. data/packages/igniter-contracts/lib/igniter/contracts/assembly/hook_spec.rb +73 -0
  320. data/packages/igniter-contracts/lib/igniter/contracts/assembly/hook_specs.rb +74 -0
  321. data/packages/igniter-contracts/lib/igniter/contracts/assembly/kernel.rb +220 -0
  322. data/packages/igniter-contracts/lib/igniter/contracts/assembly/node_type.rb +26 -0
  323. data/packages/igniter-contracts/lib/igniter/contracts/assembly/ordered_registry.rb +55 -0
  324. data/packages/igniter-contracts/lib/igniter/contracts/assembly/pack.rb +13 -0
  325. data/packages/igniter-contracts/lib/igniter/contracts/assembly/pack_manifest.rb +131 -0
  326. data/packages/igniter-contracts/lib/igniter/contracts/assembly/path_access.rb +76 -0
  327. data/packages/igniter-contracts/lib/igniter/contracts/assembly/profile.rb +133 -0
  328. data/packages/igniter-contracts/lib/igniter/contracts/assembly/project_pack.rb +42 -0
  329. data/packages/igniter-contracts/lib/igniter/contracts/assembly/registry.rb +57 -0
  330. data/packages/igniter-contracts/lib/igniter/contracts/assembly/step_result_pack.rb +42 -0
  331. data/packages/igniter-contracts/lib/igniter/contracts/assembly.rb +18 -0
  332. data/packages/igniter-contracts/lib/igniter/contracts/contract.rb +135 -0
  333. data/packages/igniter-contracts/lib/igniter/contracts/contractable.rb +288 -0
  334. data/packages/igniter-contracts/lib/igniter/contracts/environment.rb +51 -0
  335. data/packages/igniter-contracts/lib/igniter/contracts/errors.rb +47 -0
  336. data/packages/igniter-contracts/lib/igniter/contracts/execution/baseline_normalizers.rb +23 -0
  337. data/packages/igniter-contracts/lib/igniter/contracts/execution/baseline_runtime.rb +55 -0
  338. data/packages/igniter-contracts/lib/igniter/contracts/execution/baseline_validators.rb +113 -0
  339. data/packages/igniter-contracts/lib/igniter/contracts/execution/builder.rb +43 -0
  340. data/packages/igniter-contracts/lib/igniter/contracts/execution/compilation_report.rb +46 -0
  341. data/packages/igniter-contracts/lib/igniter/contracts/execution/compiled_graph.rb +21 -0
  342. data/packages/igniter-contracts/lib/igniter/contracts/execution/compiler.rb +66 -0
  343. data/packages/igniter-contracts/lib/igniter/contracts/execution/const_runtime.rb +15 -0
  344. data/packages/igniter-contracts/lib/igniter/contracts/execution/diagnostics.rb +24 -0
  345. data/packages/igniter-contracts/lib/igniter/contracts/execution/diagnostics_report.rb +40 -0
  346. data/packages/igniter-contracts/lib/igniter/contracts/execution/diagnostics_section.rb +37 -0
  347. data/packages/igniter-contracts/lib/igniter/contracts/execution/effect_invocation.rb +26 -0
  348. data/packages/igniter-contracts/lib/igniter/contracts/execution/execution_request.rb +28 -0
  349. data/packages/igniter-contracts/lib/igniter/contracts/execution/execution_result.rb +32 -0
  350. data/packages/igniter-contracts/lib/igniter/contracts/execution/inline_executor.rb +19 -0
  351. data/packages/igniter-contracts/lib/igniter/contracts/execution/mutable_named_values.rb +52 -0
  352. data/packages/igniter-contracts/lib/igniter/contracts/execution/named_values.rb +48 -0
  353. data/packages/igniter-contracts/lib/igniter/contracts/execution/operation.rb +42 -0
  354. data/packages/igniter-contracts/lib/igniter/contracts/execution/runtime.rb +43 -0
  355. data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result.rb +51 -0
  356. data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result_diagnostics.rb +35 -0
  357. data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result_runtime.rb +51 -0
  358. data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result_validators.rb +44 -0
  359. data/packages/igniter-contracts/lib/igniter/contracts/execution/structured_dump.rb +49 -0
  360. data/packages/igniter-contracts/lib/igniter/contracts/execution/validation_finding.rb +28 -0
  361. data/packages/igniter-contracts/lib/igniter/contracts/execution/validation_report.rb +46 -0
  362. data/packages/igniter-contracts/lib/igniter/contracts/execution.rb +28 -0
  363. data/packages/igniter-contracts/lib/igniter/contracts.rb +54 -0
  364. data/packages/igniter-contracts/lib/igniter/lang/backend.rb +19 -0
  365. data/packages/igniter-contracts/lib/igniter/lang/backends/ruby.rb +42 -0
  366. data/packages/igniter-contracts/lib/igniter/lang/diagnostic_payload.rb +174 -0
  367. data/packages/igniter-contracts/lib/igniter/lang/metadata_carrier_manifest.rb +112 -0
  368. data/packages/igniter-contracts/lib/igniter/lang/metadata_manifest.rb +128 -0
  369. data/packages/igniter-contracts/lib/igniter/lang/receipt_payload.rb +152 -0
  370. data/packages/igniter-contracts/lib/igniter/lang/schema_compatibility_diagnostic.rb +300 -0
  371. data/packages/igniter-contracts/lib/igniter/lang/types.rb +84 -0
  372. data/packages/igniter-contracts/lib/igniter/lang/verification_report.rb +226 -0
  373. data/packages/igniter-contracts/lib/igniter/lang.rb +27 -0
  374. data/packages/igniter-contracts/lib/igniter-contracts.rb +3 -0
  375. data/packages/igniter-embed/README.md +360 -0
  376. data/packages/igniter-embed/lib/igniter/embed/config.rb +155 -0
  377. data/packages/igniter-embed/lib/igniter/embed/container.rb +165 -0
  378. data/packages/igniter-embed/lib/igniter/embed/contract_handle.rb +23 -0
  379. data/packages/igniter-embed/lib/igniter/embed/contract_naming.rb +38 -0
  380. data/packages/igniter-embed/lib/igniter/embed/contractable/acceptance.rb +52 -0
  381. data/packages/igniter-embed/lib/igniter/embed/contractable/adapters.rb +33 -0
  382. data/packages/igniter-embed/lib/igniter/embed/contractable/config.rb +234 -0
  383. data/packages/igniter-embed/lib/igniter/embed/contractable/runner.rb +393 -0
  384. data/packages/igniter-embed/lib/igniter/embed/contractable/sugar_builder.rb +145 -0
  385. data/packages/igniter-embed/lib/igniter/embed/contractable.rb +29 -0
  386. data/packages/igniter-embed/lib/igniter/embed/contracts_builder.rb +54 -0
  387. data/packages/igniter-embed/lib/igniter/embed/errors.rb +14 -0
  388. data/packages/igniter-embed/lib/igniter/embed/execution_envelope.rb +50 -0
  389. data/packages/igniter-embed/lib/igniter/embed/host_builder.rb +39 -0
  390. data/packages/igniter-embed/lib/igniter/embed/rails.rb +21 -0
  391. data/packages/igniter-embed/lib/igniter/embed/registry.rb +78 -0
  392. data/packages/igniter-embed/lib/igniter/embed/sugar_expansion.rb +152 -0
  393. data/packages/igniter-embed/lib/igniter/embed.rb +38 -0
  394. data/packages/igniter-embed/lib/igniter-embed.rb +3 -0
  395. data/packages/igniter-extensions/README.md +381 -0
  396. data/packages/igniter-extensions/lib/igniter/extensions/contracts/aggregate_pack.rb +103 -0
  397. data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit/builder.rb +132 -0
  398. data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit/event.rb +34 -0
  399. data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit/snapshot.rb +44 -0
  400. data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit_pack.rb +60 -0
  401. data/packages/igniter-extensions/lib/igniter/extensions/contracts/branch_pack.rb +199 -0
  402. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/declaration.rb +31 -0
  403. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/error.rb +35 -0
  404. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/policy.rb +20 -0
  405. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/report.rb +47 -0
  406. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/violation.rb +30 -0
  407. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities_pack.rb +146 -0
  408. data/packages/igniter-extensions/lib/igniter/extensions/contracts/collection_pack.rb +212 -0
  409. data/packages/igniter-extensions/lib/igniter/extensions/contracts/commerce_pack.rb +91 -0
  410. data/packages/igniter-extensions/lib/igniter/extensions/contracts/compose_pack.rb +213 -0
  411. data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing/cache.rb +59 -0
  412. data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing/content_key.rb +63 -0
  413. data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing/declaration.rb +47 -0
  414. data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing_pack.rb +90 -0
  415. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/profile.rb +196 -0
  416. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/report.rb +85 -0
  417. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/scaffold.rb +461 -0
  418. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/scope.rb +79 -0
  419. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/wizard.rb +269 -0
  420. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/workflow.rb +189 -0
  421. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/workflow_step.rb +51 -0
  422. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/write_result.rb +48 -0
  423. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/write_step.rb +63 -0
  424. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/writer.rb +131 -0
  425. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator_pack.rb +128 -0
  426. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/aggregate_operators.rb +119 -0
  427. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/aggregate_state.rb +60 -0
  428. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/builder.rb +66 -0
  429. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/collection_result.rb +70 -0
  430. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/diff.rb +37 -0
  431. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/item_result.rb +44 -0
  432. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/result.rb +58 -0
  433. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/session.rb +173 -0
  434. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/window_filter.rb +49 -0
  435. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow_pack.rb +66 -0
  436. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/pack_audit.rb +181 -0
  437. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/pack_snapshot.rb +46 -0
  438. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/profile_snapshot.rb +50 -0
  439. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/report.rb +50 -0
  440. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug_pack.rb +115 -0
  441. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/divergence.rb +37 -0
  442. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/formatter.rb +85 -0
  443. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/report.rb +83 -0
  444. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/runner.rb +136 -0
  445. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential_pack.rb +61 -0
  446. data/packages/igniter-extensions/lib/igniter/extensions/contracts/execution_report_pack.rb +38 -0
  447. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/formatter.rb +60 -0
  448. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/node_state.rb +30 -0
  449. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/result.rb +65 -0
  450. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/session.rb +146 -0
  451. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental_pack.rb +40 -0
  452. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/builder.rb +27 -0
  453. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/cases_report.rb +47 -0
  454. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/error.rb +34 -0
  455. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/invariant.rb +30 -0
  456. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/report.rb +45 -0
  457. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/suite.rb +36 -0
  458. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/violation.rb +39 -0
  459. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants_pack.rb +88 -0
  460. data/packages/igniter-extensions/lib/igniter/extensions/contracts/journal_pack.rb +55 -0
  461. data/packages/igniter-extensions/lib/igniter/extensions/contracts/language/formula_pack.rb +185 -0
  462. data/packages/igniter-extensions/lib/igniter/extensions/contracts/language/piecewise_pack.rb +166 -0
  463. data/packages/igniter-extensions/lib/igniter/extensions/contracts/language/scale_pack.rb +147 -0
  464. data/packages/igniter-extensions/lib/igniter/extensions/contracts/lookup_pack.rb +50 -0
  465. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/creator_session.rb +105 -0
  466. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/tool_argument.rb +35 -0
  467. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/tool_definition.rb +33 -0
  468. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/tool_result.rb +28 -0
  469. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp_pack.rb +335 -0
  470. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/builder.rb +80 -0
  471. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/lineage.rb +59 -0
  472. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/node_trace.rb +53 -0
  473. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/text_formatter.rb +62 -0
  474. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance_pack.rb +52 -0
  475. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/builder.rb +43 -0
  476. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/dispatch_result.rb +59 -0
  477. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/engine.rb +79 -0
  478. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/event.rb +36 -0
  479. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/matcher.rb +20 -0
  480. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/plan.rb +58 -0
  481. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/subscription.rb +29 -0
  482. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive_pack.rb +169 -0
  483. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/compensation.rb +25 -0
  484. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/compensation_record.rb +28 -0
  485. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/compensation_set.rb +47 -0
  486. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/formatter.rb +39 -0
  487. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/result.rb +56 -0
  488. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/runner.rb +124 -0
  489. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga_pack.rb +56 -0
  490. data/packages/igniter-extensions/lib/igniter/extensions/contracts.rb +445 -0
  491. data/packages/igniter-extensions/lib/igniter/extensions.rb +6 -0
  492. data/packages/igniter-extensions/lib/igniter-extensions.rb +3 -0
  493. data/packages/igniter-hub/README.md +25 -0
  494. data/packages/igniter-hub/lib/igniter/hub/catalog_entry.rb +35 -0
  495. data/packages/igniter-hub/lib/igniter/hub/local_catalog.rb +51 -0
  496. data/packages/igniter-hub/lib/igniter/hub.rb +16 -0
  497. data/packages/igniter-hub/lib/igniter-hub.rb +3 -0
  498. data/packages/igniter-mcp-adapter/README.md +65 -0
  499. data/packages/igniter-mcp-adapter/exe/igniter-mcp-adapter +6 -0
  500. data/packages/igniter-mcp-adapter/lib/igniter/mcp/adapter/host.rb +226 -0
  501. data/packages/igniter-mcp-adapter/lib/igniter/mcp/adapter/server.rb +148 -0
  502. data/packages/igniter-mcp-adapter/lib/igniter/mcp/adapter.rb +40 -0
  503. data/packages/igniter-mcp-adapter/lib/igniter-mcp-adapter.rb +5 -0
  504. data/packages/igniter-web/README.md +539 -0
  505. data/packages/igniter-web/lib/igniter/web/api.rb +49 -0
  506. data/packages/igniter-web/lib/igniter/web/application.rb +99 -0
  507. data/packages/igniter-web/lib/igniter/web/application_web_mount.rb +162 -0
  508. data/packages/igniter-web/lib/igniter/web/arbre.rb +41 -0
  509. data/packages/igniter-web/lib/igniter/web/component.rb +103 -0
  510. data/packages/igniter-web/lib/igniter/web/components/view_action_node.rb +38 -0
  511. data/packages/igniter-web/lib/igniter/web/components/view_ask_node.rb +52 -0
  512. data/packages/igniter-web/lib/igniter/web/components/view_chat_node.rb +34 -0
  513. data/packages/igniter-web/lib/igniter/web/components/view_compare_node.rb +41 -0
  514. data/packages/igniter-web/lib/igniter/web/components/view_node.rb +30 -0
  515. data/packages/igniter-web/lib/igniter/web/components/view_screen.rb +34 -0
  516. data/packages/igniter-web/lib/igniter/web/components/view_stream_node.rb +32 -0
  517. data/packages/igniter-web/lib/igniter/web/components/view_zone.rb +26 -0
  518. data/packages/igniter-web/lib/igniter/web/components.rb +10 -0
  519. data/packages/igniter-web/lib/igniter/web/composer.rb +84 -0
  520. data/packages/igniter-web/lib/igniter/web/composition_finding.rb +16 -0
  521. data/packages/igniter-web/lib/igniter/web/composition_policy.rb +88 -0
  522. data/packages/igniter-web/lib/igniter/web/composition_preset.rb +131 -0
  523. data/packages/igniter-web/lib/igniter/web/composition_result.rb +27 -0
  524. data/packages/igniter-web/lib/igniter/web/flow_interaction_adapter.rb +104 -0
  525. data/packages/igniter-web/lib/igniter/web/flow_surface_projection.rb +121 -0
  526. data/packages/igniter-web/lib/igniter/web/interaction_target.rb +50 -0
  527. data/packages/igniter-web/lib/igniter/web/mount_context.rb +80 -0
  528. data/packages/igniter-web/lib/igniter/web/page.rb +110 -0
  529. data/packages/igniter-web/lib/igniter/web/record.rb +54 -0
  530. data/packages/igniter-web/lib/igniter/web/screen_spec.rb +109 -0
  531. data/packages/igniter-web/lib/igniter/web/surface_manifest.rb +370 -0
  532. data/packages/igniter-web/lib/igniter/web/surface_structure.rb +57 -0
  533. data/packages/igniter-web/lib/igniter/web/view_graph.rb +25 -0
  534. data/packages/igniter-web/lib/igniter/web/view_graph_renderer.rb +63 -0
  535. data/packages/igniter-web/lib/igniter/web/view_node.rb +37 -0
  536. data/packages/igniter-web/lib/igniter/web.rb +107 -0
  537. data/packages/igniter-web/lib/igniter-web.rb +3 -0
  538. metadata +547 -308
  539. data/docs/API_V2.md +0 -537
  540. data/docs/APPLICATION_V1.md +0 -253
  541. data/docs/ARCHITECTURE_V2.md +0 -317
  542. data/docs/BACKLOG.md +0 -166
  543. data/docs/BRANCHES_V1.md +0 -213
  544. data/docs/CAPABILITIES_V1.md +0 -207
  545. data/docs/COLLECTIONS_V1.md +0 -303
  546. data/docs/CONSENSUS_V1.md +0 -477
  547. data/docs/CONTENT_ADDRESSING_V1.md +0 -221
  548. data/docs/DATAFLOW_V1.md +0 -274
  549. data/docs/DISTRIBUTED_CONTRACTS_V1.md +0 -493
  550. data/docs/IGNITER_CONCEPTS.md +0 -81
  551. data/docs/LLM_V1.md +0 -335
  552. data/docs/MESH_V1.md +0 -732
  553. data/docs/NODE_CACHE_V1.md +0 -324
  554. data/docs/PATTERNS.md +0 -411
  555. data/docs/PROACTIVE_AGENTS_V1.md +0 -293
  556. data/docs/SERVER_V1.md +0 -512
  557. data/docs/SKILLS_V1.md +0 -213
  558. data/docs/STORE_ADAPTERS.md +0 -154
  559. data/docs/TEMPORAL_V1.md +0 -174
  560. data/docs/TOOLS_V1.md +0 -347
  561. data/docs/TRANSCRIPTION_V1.md +0 -403
  562. data/examples/agents.rb +0 -150
  563. data/examples/async_store.rb +0 -47
  564. data/examples/basic_pricing.rb +0 -27
  565. data/examples/collection.rb +0 -43
  566. data/examples/collection_partial_failure.rb +0 -50
  567. data/examples/composition.rb +0 -39
  568. data/examples/consensus.rb +0 -239
  569. data/examples/dataflow.rb +0 -308
  570. data/examples/diagnostics.rb +0 -28
  571. data/examples/differential.rb +0 -161
  572. data/examples/distributed_server.rb +0 -94
  573. data/examples/distributed_workflow.rb +0 -52
  574. data/examples/effects.rb +0 -184
  575. data/examples/elocal_webhook.rb +0 -1
  576. data/examples/incremental.rb +0 -142
  577. data/examples/invariants.rb +0 -179
  578. data/examples/llm_tools.rb +0 -237
  579. data/examples/marketing_ergonomics.rb +0 -57
  580. data/examples/mesh.rb +0 -239
  581. data/examples/mesh_discovery.rb +0 -267
  582. data/examples/mesh_gossip.rb +0 -162
  583. data/examples/order_pipeline.rb +0 -163
  584. data/examples/provenance.rb +0 -122
  585. data/examples/ringcentral_routing.rb +0 -269
  586. data/examples/saga.rb +0 -110
  587. data/lib/igniter/agent/mailbox.rb +0 -96
  588. data/lib/igniter/agent/message.rb +0 -21
  589. data/lib/igniter/agent/ref.rb +0 -86
  590. data/lib/igniter/agent/runner.rb +0 -129
  591. data/lib/igniter/agent/state_holder.rb +0 -23
  592. data/lib/igniter/agent.rb +0 -155
  593. data/lib/igniter/agents/ai/alert_agent.rb +0 -111
  594. data/lib/igniter/agents/ai/chain_agent.rb +0 -127
  595. data/lib/igniter/agents/ai/critic_agent.rb +0 -163
  596. data/lib/igniter/agents/ai/evaluator_agent.rb +0 -193
  597. data/lib/igniter/agents/ai/evolution_agent.rb +0 -286
  598. data/lib/igniter/agents/ai/health_check_agent.rb +0 -122
  599. data/lib/igniter/agents/ai/observer_agent.rb +0 -184
  600. data/lib/igniter/agents/ai/planner_agent.rb +0 -210
  601. data/lib/igniter/agents/ai/router_agent.rb +0 -131
  602. data/lib/igniter/agents/ai/self_reflection_agent.rb +0 -175
  603. data/lib/igniter/agents/observability/metrics_agent.rb +0 -130
  604. data/lib/igniter/agents/pipeline/batch_processor_agent.rb +0 -131
  605. data/lib/igniter/agents/proactive_agent.rb +0 -208
  606. data/lib/igniter/agents/reliability/retry_agent.rb +0 -99
  607. data/lib/igniter/agents/scheduling/cron_agent.rb +0 -110
  608. data/lib/igniter/agents.rb +0 -56
  609. data/lib/igniter/application/app_config.rb +0 -32
  610. data/lib/igniter/application/autoloader.rb +0 -18
  611. data/lib/igniter/application/generator.rb +0 -157
  612. data/lib/igniter/application/scheduler.rb +0 -109
  613. data/lib/igniter/application/yml_loader.rb +0 -39
  614. data/lib/igniter/application.rb +0 -174
  615. data/lib/igniter/capabilities.rb +0 -68
  616. data/lib/igniter/compiler/compiled_graph.rb +0 -180
  617. data/lib/igniter/compiler/graph_compiler.rb +0 -70
  618. data/lib/igniter/compiler/type_resolver.rb +0 -54
  619. data/lib/igniter/compiler/validation_context.rb +0 -61
  620. data/lib/igniter/compiler/validation_pipeline.rb +0 -32
  621. data/lib/igniter/compiler/validator.rb +0 -19
  622. data/lib/igniter/compiler/validators/await_validator.rb +0 -53
  623. data/lib/igniter/compiler/validators/callable_validator.rb +0 -125
  624. data/lib/igniter/compiler/validators/dependencies_validator.rb +0 -241
  625. data/lib/igniter/compiler/validators/outputs_validator.rb +0 -66
  626. data/lib/igniter/compiler/validators/remote_validator.rb +0 -60
  627. data/lib/igniter/compiler/validators/type_compatibility_validator.rb +0 -84
  628. data/lib/igniter/compiler/validators/uniqueness_validator.rb +0 -60
  629. data/lib/igniter/compiler.rb +0 -20
  630. data/lib/igniter/consensus/cluster.rb +0 -183
  631. data/lib/igniter/consensus/errors.rb +0 -14
  632. data/lib/igniter/consensus/executors.rb +0 -43
  633. data/lib/igniter/consensus/node.rb +0 -320
  634. data/lib/igniter/consensus/read_query.rb +0 -30
  635. data/lib/igniter/consensus/state_machine.rb +0 -58
  636. data/lib/igniter/consensus.rb +0 -58
  637. data/lib/igniter/content_addressing.rb +0 -133
  638. data/lib/igniter/dataflow/aggregate_operators.rb +0 -147
  639. data/lib/igniter/dataflow/aggregate_state.rb +0 -77
  640. data/lib/igniter/dataflow/diff.rb +0 -37
  641. data/lib/igniter/dataflow/diff_state.rb +0 -81
  642. data/lib/igniter/dataflow/incremental_collection_result.rb +0 -39
  643. data/lib/igniter/dataflow/window_filter.rb +0 -48
  644. data/lib/igniter/dataflow.rb +0 -65
  645. data/lib/igniter/diagnostics/auditing/report/console_formatter.rb +0 -80
  646. data/lib/igniter/diagnostics/auditing/report/markdown_formatter.rb +0 -22
  647. data/lib/igniter/diagnostics/introspection/formatters/mermaid_formatter.rb +0 -58
  648. data/lib/igniter/diagnostics/introspection/formatters/text_tree_formatter.rb +0 -44
  649. data/lib/igniter/diagnostics/report.rb +0 -349
  650. data/lib/igniter/diagnostics.rb +0 -8
  651. data/lib/igniter/differential/divergence.rb +0 -29
  652. data/lib/igniter/differential/formatter.rb +0 -96
  653. data/lib/igniter/differential/report.rb +0 -86
  654. data/lib/igniter/differential/runner.rb +0 -130
  655. data/lib/igniter/differential.rb +0 -51
  656. data/lib/igniter/dsl/contract_builder.rb +0 -495
  657. data/lib/igniter/dsl/schema_builder.rb +0 -73
  658. data/lib/igniter/dsl.rb +0 -9
  659. data/lib/igniter/effect.rb +0 -91
  660. data/lib/igniter/effect_registry.rb +0 -78
  661. data/lib/igniter/errors.rb +0 -79
  662. data/lib/igniter/events/bus.rb +0 -44
  663. data/lib/igniter/events/event.rb +0 -82
  664. data/lib/igniter/events.rb +0 -9
  665. data/lib/igniter/execution_report/builder.rb +0 -54
  666. data/lib/igniter/execution_report/formatter.rb +0 -50
  667. data/lib/igniter/execution_report/node_entry.rb +0 -24
  668. data/lib/igniter/execution_report/report.rb +0 -65
  669. data/lib/igniter/execution_report.rb +0 -32
  670. data/lib/igniter/executor.rb +0 -134
  671. data/lib/igniter/executor_registry.rb +0 -44
  672. data/lib/igniter/extensions/auditing/timeline.rb +0 -103
  673. data/lib/igniter/extensions/auditing.rb +0 -10
  674. data/lib/igniter/extensions/capabilities.rb +0 -39
  675. data/lib/igniter/extensions/content_addressing.rb +0 -5
  676. data/lib/igniter/extensions/dataflow.rb +0 -117
  677. data/lib/igniter/extensions/differential.rb +0 -114
  678. data/lib/igniter/extensions/execution_report.rb +0 -27
  679. data/lib/igniter/extensions/incremental.rb +0 -50
  680. data/lib/igniter/extensions/introspection/graph_formatter.rb +0 -103
  681. data/lib/igniter/extensions/introspection/plan_formatter.rb +0 -55
  682. data/lib/igniter/extensions/introspection/runtime_formatter.rb +0 -117
  683. data/lib/igniter/extensions/introspection.rb +0 -12
  684. data/lib/igniter/extensions/invariants.rb +0 -116
  685. data/lib/igniter/extensions/mesh.rb +0 -31
  686. data/lib/igniter/extensions/provenance.rb +0 -45
  687. data/lib/igniter/extensions/reactive/engine.rb +0 -83
  688. data/lib/igniter/extensions/reactive/matcher.rb +0 -21
  689. data/lib/igniter/extensions/reactive/reaction.rb +0 -18
  690. data/lib/igniter/extensions/reactive.rb +0 -12
  691. data/lib/igniter/extensions/saga.rb +0 -74
  692. data/lib/igniter/extensions.rb +0 -10
  693. data/lib/igniter/fingerprint.rb +0 -43
  694. data/lib/igniter/incremental/formatter.rb +0 -81
  695. data/lib/igniter/incremental/result.rb +0 -69
  696. data/lib/igniter/incremental/tracker.rb +0 -108
  697. data/lib/igniter/incremental.rb +0 -50
  698. data/lib/igniter/integrations/agents.rb +0 -18
  699. data/lib/igniter/integrations/llm/config.rb +0 -113
  700. data/lib/igniter/integrations/llm/context.rb +0 -74
  701. data/lib/igniter/integrations/llm/executor.rb +0 -352
  702. data/lib/igniter/integrations/llm/providers/anthropic.rb +0 -181
  703. data/lib/igniter/integrations/llm/providers/base.rb +0 -33
  704. data/lib/igniter/integrations/llm/providers/ollama.rb +0 -137
  705. data/lib/igniter/integrations/llm/providers/openai.rb +0 -182
  706. data/lib/igniter/integrations/llm/transcription/providers/assemblyai.rb +0 -200
  707. data/lib/igniter/integrations/llm/transcription/providers/base.rb +0 -122
  708. data/lib/igniter/integrations/llm/transcription/providers/deepgram.rb +0 -162
  709. data/lib/igniter/integrations/llm/transcription/providers/openai.rb +0 -102
  710. data/lib/igniter/integrations/llm/transcription/transcriber.rb +0 -145
  711. data/lib/igniter/integrations/llm/transcription/transcript_result.rb +0 -29
  712. data/lib/igniter/integrations/llm.rb +0 -95
  713. data/lib/igniter/integrations/rails/cable_adapter.rb +0 -49
  714. data/lib/igniter/integrations/rails/contract_job.rb +0 -76
  715. data/lib/igniter/integrations/rails/generators/contract/contract_generator.rb +0 -22
  716. data/lib/igniter/integrations/rails/generators/install/install_generator.rb +0 -33
  717. data/lib/igniter/integrations/rails/railtie.rb +0 -25
  718. data/lib/igniter/integrations/rails/webhook_concern.rb +0 -49
  719. data/lib/igniter/integrations/rails.rb +0 -12
  720. data/lib/igniter/invariant.rb +0 -50
  721. data/lib/igniter/memory/agent_memory.rb +0 -104
  722. data/lib/igniter/memory/episode.rb +0 -29
  723. data/lib/igniter/memory/fact.rb +0 -27
  724. data/lib/igniter/memory/memorable.rb +0 -90
  725. data/lib/igniter/memory/reflection_cycle.rb +0 -96
  726. data/lib/igniter/memory/reflection_record.rb +0 -28
  727. data/lib/igniter/memory/store.rb +0 -115
  728. data/lib/igniter/memory/stores/in_memory.rb +0 -136
  729. data/lib/igniter/memory/stores/sqlite.rb +0 -284
  730. data/lib/igniter/memory.rb +0 -80
  731. data/lib/igniter/mesh/announcer.rb +0 -55
  732. data/lib/igniter/mesh/config.rb +0 -45
  733. data/lib/igniter/mesh/discovery.rb +0 -39
  734. data/lib/igniter/mesh/errors.rb +0 -31
  735. data/lib/igniter/mesh/gossip.rb +0 -47
  736. data/lib/igniter/mesh/peer.rb +0 -21
  737. data/lib/igniter/mesh/peer_registry.rb +0 -51
  738. data/lib/igniter/mesh/poller.rb +0 -77
  739. data/lib/igniter/mesh/router.rb +0 -109
  740. data/lib/igniter/mesh.rb +0 -85
  741. data/lib/igniter/metrics/collector.rb +0 -131
  742. data/lib/igniter/metrics/prometheus_exporter.rb +0 -104
  743. data/lib/igniter/metrics/snapshot.rb +0 -8
  744. data/lib/igniter/metrics.rb +0 -37
  745. data/lib/igniter/model/aggregate_node.rb +0 -34
  746. data/lib/igniter/model/await_node.rb +0 -21
  747. data/lib/igniter/model/branch_node.rb +0 -46
  748. data/lib/igniter/model/collection_node.rb +0 -32
  749. data/lib/igniter/model/composition_node.rb +0 -22
  750. data/lib/igniter/model/compute_node.rb +0 -90
  751. data/lib/igniter/model/effect_node.rb +0 -37
  752. data/lib/igniter/model/graph.rb +0 -15
  753. data/lib/igniter/model/input_node.rb +0 -27
  754. data/lib/igniter/model/node.rb +0 -22
  755. data/lib/igniter/model/output_node.rb +0 -41
  756. data/lib/igniter/model/remote_node.rb +0 -42
  757. data/lib/igniter/model.rb +0 -18
  758. data/lib/igniter/node_cache.rb +0 -231
  759. data/lib/igniter/property_testing/formatter.rb +0 -66
  760. data/lib/igniter/property_testing/generators.rb +0 -115
  761. data/lib/igniter/property_testing/result.rb +0 -45
  762. data/lib/igniter/property_testing/run.rb +0 -43
  763. data/lib/igniter/property_testing/runner.rb +0 -47
  764. data/lib/igniter/property_testing.rb +0 -64
  765. data/lib/igniter/provenance/builder.rb +0 -97
  766. data/lib/igniter/provenance/lineage.rb +0 -82
  767. data/lib/igniter/provenance/node_trace.rb +0 -65
  768. data/lib/igniter/provenance/text_formatter.rb +0 -70
  769. data/lib/igniter/provenance.rb +0 -29
  770. data/lib/igniter/registry.rb +0 -67
  771. data/lib/igniter/replication/bootstrapper.rb +0 -61
  772. data/lib/igniter/replication/bootstrappers/gem.rb +0 -32
  773. data/lib/igniter/replication/bootstrappers/git.rb +0 -39
  774. data/lib/igniter/replication/bootstrappers/tarball.rb +0 -56
  775. data/lib/igniter/replication/expansion_plan.rb +0 -38
  776. data/lib/igniter/replication/expansion_planner.rb +0 -142
  777. data/lib/igniter/replication/manifest.rb +0 -45
  778. data/lib/igniter/replication/network_topology.rb +0 -123
  779. data/lib/igniter/replication/node_role.rb +0 -42
  780. data/lib/igniter/replication/reflective_replication_agent.rb +0 -238
  781. data/lib/igniter/replication/replication_agent.rb +0 -87
  782. data/lib/igniter/replication/role_registry.rb +0 -73
  783. data/lib/igniter/replication/ssh_session.rb +0 -77
  784. data/lib/igniter/replication.rb +0 -54
  785. data/lib/igniter/runtime/cache.rb +0 -126
  786. data/lib/igniter/runtime/collection_result.rb +0 -111
  787. data/lib/igniter/runtime/deferred_result.rb +0 -40
  788. data/lib/igniter/runtime/execution.rb +0 -416
  789. data/lib/igniter/runtime/input_validator.rb +0 -129
  790. data/lib/igniter/runtime/invalidator.rb +0 -52
  791. data/lib/igniter/runtime/job_worker.rb +0 -18
  792. data/lib/igniter/runtime/node_state.rb +0 -56
  793. data/lib/igniter/runtime/planner.rb +0 -126
  794. data/lib/igniter/runtime/resolver.rb +0 -758
  795. data/lib/igniter/runtime/result.rb +0 -117
  796. data/lib/igniter/runtime/runner_factory.rb +0 -20
  797. data/lib/igniter/runtime/runners/inline_runner.rb +0 -21
  798. data/lib/igniter/runtime/runners/store_runner.rb +0 -29
  799. data/lib/igniter/runtime/runners/thread_pool_runner.rb +0 -37
  800. data/lib/igniter/runtime/stores/active_record_store.rb +0 -53
  801. data/lib/igniter/runtime/stores/file_store.rb +0 -91
  802. data/lib/igniter/runtime/stores/memory_store.rb +0 -93
  803. data/lib/igniter/runtime/stores/redis_store.rb +0 -93
  804. data/lib/igniter/runtime.rb +0 -26
  805. data/lib/igniter/saga/compensation.rb +0 -31
  806. data/lib/igniter/saga/compensation_record.rb +0 -20
  807. data/lib/igniter/saga/executor.rb +0 -85
  808. data/lib/igniter/saga/formatter.rb +0 -49
  809. data/lib/igniter/saga/result.rb +0 -47
  810. data/lib/igniter/saga.rb +0 -56
  811. data/lib/igniter/server/client.rb +0 -166
  812. data/lib/igniter/server/config.rb +0 -34
  813. data/lib/igniter/server/handlers/base.rb +0 -105
  814. data/lib/igniter/server/handlers/contracts_handler.rb +0 -15
  815. data/lib/igniter/server/handlers/event_handler.rb +0 -32
  816. data/lib/igniter/server/handlers/execute_handler.rb +0 -43
  817. data/lib/igniter/server/handlers/health_handler.rb +0 -32
  818. data/lib/igniter/server/handlers/liveness_handler.rb +0 -20
  819. data/lib/igniter/server/handlers/manifest_handler.rb +0 -34
  820. data/lib/igniter/server/handlers/metrics_handler.rb +0 -51
  821. data/lib/igniter/server/handlers/peers_handler.rb +0 -115
  822. data/lib/igniter/server/handlers/readiness_handler.rb +0 -47
  823. data/lib/igniter/server/handlers/status_handler.rb +0 -27
  824. data/lib/igniter/server/http_server.rb +0 -146
  825. data/lib/igniter/server/rack_app.rb +0 -35
  826. data/lib/igniter/server/registry.rb +0 -56
  827. data/lib/igniter/server/router.rb +0 -108
  828. data/lib/igniter/server/server_logger.rb +0 -52
  829. data/lib/igniter/server.rb +0 -73
  830. data/lib/igniter/skill/feedback.rb +0 -116
  831. data/lib/igniter/skill/output_schema.rb +0 -110
  832. data/lib/igniter/skill.rb +0 -218
  833. data/lib/igniter/stream_loop.rb +0 -80
  834. data/lib/igniter/supervisor.rb +0 -167
  835. data/lib/igniter/temporal.rb +0 -84
  836. data/lib/igniter/tool/discoverable.rb +0 -151
  837. data/lib/igniter/tool.rb +0 -52
  838. data/lib/igniter/tool_registry.rb +0 -144
  839. data/lib/igniter/type_system.rb +0 -44
  840. /data/docs/{EXECUTION_MODEL_V2.md → dev/execution-model.md} +0 -0
@@ -1,284 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Igniter
4
- module Memory
5
- module Stores
6
- # SQLite-backed persistent Store implementation.
7
- #
8
- # Uses SQLite3 with FTS5 for fast full-text search on episode content.
9
- # Requires the +sqlite3+ gem (soft dependency — not declared in the gemspec).
10
- # Raises +Igniter::Memory::ConfigurationError+ if the gem is not available.
11
- #
12
- # @example In-memory SQLite (for tests)
13
- # store = Igniter::Memory::Stores::SQLite.new(path: ":memory:")
14
- #
15
- # @example Persistent file
16
- # store = Igniter::Memory::Stores::SQLite.new(path: "/tmp/agent_memory.db")
17
- class SQLite < Store # rubocop:disable Metrics/ClassLength
18
- # @param path [String] file path for the database, or ":memory:" for transient storage
19
- def initialize(path:) # rubocop:disable Lint/MissingSuper
20
- require "sqlite3"
21
- rescue LoadError
22
- raise ConfigurationError,
23
- "SQLite store requires the 'sqlite3' gem. Add it to your Gemfile: gem 'sqlite3'"
24
- else
25
- @mutex = Mutex.new
26
- @db = ::SQLite3::Database.new(path)
27
- @db.results_as_hash = true
28
- create_schema!
29
- end
30
-
31
- # @see Store#record
32
- def record(agent_id:, type:, content:, session_id: nil, outcome: nil, importance: 0.5) # rubocop:disable Metrics/ParameterLists
33
- @mutex.synchronize do
34
- @db.execute(
35
- "INSERT INTO episodes (agent_id, session_id, ts, type, content, outcome, importance) " \
36
- "VALUES (?, ?, ?, ?, ?, ?, ?)",
37
- [agent_id, session_id, Time.now.to_i, type.to_s, content.to_s, outcome, importance.to_f]
38
- )
39
- row_to_episode(
40
- @db.get_first_row("SELECT * FROM episodes WHERE id = last_insert_rowid()")
41
- )
42
- end
43
- end
44
-
45
- # @see Store#episodes
46
- def episodes(agent_id:, last: 50, type: nil) # rubocop:disable Metrics/MethodLength
47
- @mutex.synchronize do
48
- rows = if type
49
- @db.execute(
50
- "SELECT * FROM episodes WHERE agent_id = ? AND type = ? ORDER BY ts ASC LIMIT ?",
51
- [agent_id, type.to_s, last]
52
- )
53
- else
54
- @db.execute(
55
- "SELECT * FROM episodes WHERE agent_id = ? ORDER BY ts ASC LIMIT ?",
56
- [agent_id, last]
57
- )
58
- end
59
- rows.map { |r| row_to_episode(r) }
60
- end
61
- end
62
-
63
- # @see Store#retrieve
64
- def retrieve(agent_id:, query: nil, limit: 10, type: nil) # rubocop:disable Metrics/MethodLength
65
- @mutex.synchronize do
66
- if query
67
- fts_retrieve(agent_id, query, limit, type)
68
- else
69
- rows = if type
70
- @db.execute(
71
- "SELECT * FROM episodes WHERE agent_id = ? AND type = ? ORDER BY ts ASC LIMIT ?",
72
- [agent_id, type.to_s, limit]
73
- )
74
- else
75
- @db.execute(
76
- "SELECT * FROM episodes WHERE agent_id = ? ORDER BY ts ASC LIMIT ?",
77
- [agent_id, limit]
78
- )
79
- end
80
- rows.map { |r| row_to_episode(r) }
81
- end
82
- end
83
- end
84
-
85
- # @see Store#store_fact
86
- def store_fact(agent_id:, key:, value:, confidence: 1.0) # rubocop:disable Metrics/MethodLength
87
- @mutex.synchronize do
88
- serialized = value.to_s
89
- @db.execute(
90
- "INSERT OR REPLACE INTO facts (agent_id, key, value, confidence, updated_at) " \
91
- "VALUES (?, ?, ?, ?, ?)",
92
- [agent_id, key.to_s, serialized, confidence.to_f, Time.now.to_i]
93
- )
94
- row_to_fact(
95
- @db.get_first_row("SELECT * FROM facts WHERE agent_id = ? AND key = ?", [agent_id, key.to_s])
96
- )
97
- end
98
- end
99
-
100
- # @see Store#facts
101
- def facts(agent_id:)
102
- @mutex.synchronize do
103
- rows = @db.execute("SELECT * FROM facts WHERE agent_id = ?", [agent_id])
104
- rows.each_with_object({}) do |row, hash|
105
- fact = row_to_fact(row)
106
- hash[fact.key] = fact
107
- end
108
- end
109
- end
110
-
111
- # @see Store#record_reflection
112
- def record_reflection(agent_id:, summary:, system_patch: nil, applied: false)
113
- @mutex.synchronize do
114
- @db.execute(
115
- "INSERT INTO reflections (agent_id, ts, summary, system_patch, applied) " \
116
- "VALUES (?, ?, ?, ?, ?)",
117
- [agent_id, Time.now.to_i, summary, system_patch, applied ? 1 : 0]
118
- )
119
- row_to_reflection(
120
- @db.get_first_row("SELECT * FROM reflections WHERE id = last_insert_rowid()")
121
- )
122
- end
123
- end
124
-
125
- # @see Store#reflections
126
- def reflections(agent_id:, applied: nil) # rubocop:disable Metrics/MethodLength
127
- @mutex.synchronize do
128
- rows = if applied.nil?
129
- @db.execute("SELECT * FROM reflections WHERE agent_id = ? ORDER BY ts ASC", [agent_id])
130
- else
131
- @db.execute(
132
- "SELECT * FROM reflections WHERE agent_id = ? AND applied = ? ORDER BY ts ASC",
133
- [agent_id, applied ? 1 : 0]
134
- )
135
- end
136
- rows.map { |r| row_to_reflection(r) }
137
- end
138
- end
139
-
140
- # @see Store#apply_reflection
141
- def apply_reflection(id:)
142
- @mutex.synchronize do
143
- changes_before = @db.changes
144
- @db.execute("UPDATE reflections SET applied = 1 WHERE id = ?", [id])
145
- @db.changes > changes_before || @db.changes == 1
146
- end
147
- end
148
-
149
- # @see Store#clear
150
- def clear(agent_id:)
151
- @mutex.synchronize do
152
- @db.execute("DELETE FROM episodes WHERE agent_id = ?", [agent_id])
153
- @db.execute("DELETE FROM facts WHERE agent_id = ?", [agent_id])
154
- @db.execute("DELETE FROM reflections WHERE agent_id = ?", [agent_id])
155
- end
156
- end
157
-
158
- private
159
-
160
- def fts_retrieve(agent_id, query, limit, type) # rubocop:disable Metrics/MethodLength
161
- rows = if type
162
- @db.execute(
163
- "SELECT e.* FROM episodes e " \
164
- "JOIN episodes_fts fts ON fts.rowid = e.id " \
165
- "WHERE fts.content MATCH ? AND e.agent_id = ? AND e.type = ? " \
166
- "ORDER BY e.ts ASC LIMIT ?",
167
- [query.to_s, agent_id, type.to_s, limit]
168
- )
169
- else
170
- @db.execute(
171
- "SELECT e.* FROM episodes e " \
172
- "JOIN episodes_fts fts ON fts.rowid = e.id " \
173
- "WHERE fts.content MATCH ? AND e.agent_id = ? " \
174
- "ORDER BY e.ts ASC LIMIT ?",
175
- [query.to_s, agent_id, limit]
176
- )
177
- end
178
- rows.map { |r| row_to_episode(r) }
179
- rescue ::SQLite3::Exception
180
- # FTS5 match error (e.g. invalid query syntax) — fall back to LIKE
181
- fallback_retrieve(agent_id, query, limit, type)
182
- end
183
-
184
- def fallback_retrieve(agent_id, query, limit, type) # rubocop:disable Metrics/MethodLength
185
- q = "%#{query}%"
186
- rows = if type
187
- @db.execute(
188
- "SELECT * FROM episodes WHERE agent_id = ? AND type = ? AND content LIKE ? " \
189
- "ORDER BY ts ASC LIMIT ?",
190
- [agent_id, type.to_s, q, limit]
191
- )
192
- else
193
- @db.execute(
194
- "SELECT * FROM episodes WHERE agent_id = ? AND content LIKE ? " \
195
- "ORDER BY ts ASC LIMIT ?",
196
- [agent_id, q, limit]
197
- )
198
- end
199
- rows.map { |r| row_to_episode(r) }
200
- end
201
-
202
- def row_to_episode(row) # rubocop:disable Metrics/MethodLength
203
- return nil unless row
204
-
205
- Episode.new(
206
- id: row["id"],
207
- agent_id: row["agent_id"],
208
- session_id: row["session_id"],
209
- ts: row["ts"],
210
- type: row["type"],
211
- content: row["content"],
212
- outcome: row["outcome"],
213
- importance: row["importance"]
214
- )
215
- end
216
-
217
- def row_to_fact(row)
218
- return nil unless row
219
-
220
- Fact.new(
221
- id: row["id"],
222
- agent_id: row["agent_id"],
223
- key: row["key"],
224
- value: row["value"],
225
- confidence: row["confidence"],
226
- updated_at: row["updated_at"]
227
- )
228
- end
229
-
230
- def row_to_reflection(row)
231
- return nil unless row
232
-
233
- ReflectionRecord.new(
234
- id: row["id"],
235
- agent_id: row["agent_id"],
236
- ts: row["ts"],
237
- summary: row["summary"],
238
- system_patch: row["system_patch"],
239
- applied: row["applied"] == 1
240
- )
241
- end
242
-
243
- def create_schema! # rubocop:disable Metrics/MethodLength
244
- @db.execute_batch(<<~SQL)
245
- CREATE TABLE IF NOT EXISTS episodes (
246
- id INTEGER PRIMARY KEY AUTOINCREMENT,
247
- agent_id TEXT NOT NULL,
248
- session_id TEXT,
249
- ts INTEGER NOT NULL,
250
- type TEXT NOT NULL,
251
- content TEXT NOT NULL,
252
- outcome TEXT,
253
- importance REAL NOT NULL DEFAULT 0.5
254
- );
255
- CREATE INDEX IF NOT EXISTS idx_ep_agent ON episodes(agent_id, ts);
256
- CREATE VIRTUAL TABLE IF NOT EXISTS episodes_fts USING fts5(
257
- content, content='episodes', content_rowid='id'
258
- );
259
- CREATE TRIGGER IF NOT EXISTS ep_ai AFTER INSERT ON episodes BEGIN
260
- INSERT INTO episodes_fts(rowid, content) VALUES (new.id, new.content);
261
- END;
262
- CREATE TABLE IF NOT EXISTS facts (
263
- id INTEGER PRIMARY KEY AUTOINCREMENT,
264
- agent_id TEXT NOT NULL,
265
- key TEXT NOT NULL,
266
- value TEXT,
267
- confidence REAL DEFAULT 1.0,
268
- updated_at INTEGER,
269
- UNIQUE(agent_id, key)
270
- );
271
- CREATE TABLE IF NOT EXISTS reflections (
272
- id INTEGER PRIMARY KEY AUTOINCREMENT,
273
- agent_id TEXT NOT NULL,
274
- ts INTEGER NOT NULL,
275
- summary TEXT,
276
- system_patch TEXT,
277
- applied INTEGER DEFAULT 0
278
- );
279
- SQL
280
- end
281
- end
282
- end
283
- end
284
- end
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "igniter/errors"
4
- require "igniter/memory/episode"
5
- require "igniter/memory/fact"
6
- require "igniter/memory/reflection_record"
7
- require "igniter/memory/store"
8
- require "igniter/memory/stores/in_memory"
9
- require "igniter/memory/stores/sqlite"
10
- require "igniter/memory/reflection_cycle"
11
- require "igniter/memory/agent_memory"
12
- require "igniter/memory/memorable"
13
-
14
- module Igniter
15
- # Pluggable episodic memory system for Agents and Skills.
16
- #
17
- # Agents and Skills can record what happened (episodes), store learned facts,
18
- # and trigger reflection cycles that analyse past behaviour.
19
- #
20
- # == Quick start
21
- #
22
- # require "igniter/memory"
23
- #
24
- # class MyAgent < Igniter::Agent
25
- # include Igniter::Memory::Memorable
26
- # enable_memory # uses the global default InMemory store
27
- # end
28
- #
29
- # == Custom store
30
- #
31
- # Igniter::Memory.default_store = Igniter::Memory::Stores::SQLite.new(path: "/tmp/mem.db")
32
- #
33
- # class MyAgent < Igniter::Agent
34
- # include Igniter::Memory::Memorable
35
- # enable_memory store: Igniter::Memory.default_store
36
- # end
37
- #
38
- # == Global configuration
39
- #
40
- # Igniter::Memory.configure do |m|
41
- # m.default_store = Igniter::Memory::Stores::SQLite.new(path: "/var/app/memory.db")
42
- # end
43
- module Memory
44
- # Raised when a required dependency (e.g. sqlite3 gem) is missing or when
45
- # Memory is misconfigured.
46
- ConfigurationError = Class.new(Igniter::Error)
47
-
48
- class << self
49
- # Returns the global default store, creating an InMemory store on first access.
50
- #
51
- # @return [Store]
52
- def default_store
53
- @default_store ||= Stores::InMemory.new
54
- end
55
-
56
- # Override the global default store.
57
- #
58
- # @param store [Store]
59
- # @return [Store]
60
- attr_writer :default_store
61
-
62
- # Yield self for block-style configuration.
63
- #
64
- # @example
65
- # Igniter::Memory.configure do |m|
66
- # m.default_store = Igniter::Memory::Stores::SQLite.new(path: "/tmp/mem.db")
67
- # end
68
- def configure
69
- yield self
70
- end
71
-
72
- # Reset module-level state (primarily useful in tests).
73
- #
74
- # @return [void]
75
- def reset!
76
- @default_store = nil
77
- end
78
- end
79
- end
80
- end
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Igniter
4
- module Mesh
5
- # Announces this node's identity to seed nodes at startup and withdraws
6
- # the registration on graceful shutdown.
7
- #
8
- # All network errors are swallowed — a seed being temporarily down must
9
- # not prevent the local node from starting. The background Poller will
10
- # re-register once the seed recovers.
11
- class Announcer
12
- def initialize(config)
13
- @config = config
14
- end
15
-
16
- # POST self-manifest to every configured seed. No-op if peer_name or
17
- # local_url are not configured.
18
- def announce_all
19
- return unless announceable?
20
-
21
- @config.seeds.each { |url| announce_to(url) }
22
- end
23
-
24
- # DELETE self from every configured seed. Best-effort — errors are ignored.
25
- def deannounce_all
26
- return unless @config.peer_name
27
-
28
- @config.seeds.each { |url| deannounce_from(url) }
29
- end
30
-
31
- private
32
-
33
- def announceable?
34
- @config.peer_name && !@config.peer_name.to_s.strip.empty? &&
35
- @config.local_url && !@config.local_url.to_s.strip.empty?
36
- end
37
-
38
- def announce_to(seed_url)
39
- Igniter::Server::Client.new(seed_url, timeout: 5).register_peer(
40
- name: @config.peer_name,
41
- url: @config.local_url,
42
- capabilities: @config.local_capabilities
43
- )
44
- rescue Igniter::Server::Client::ConnectionError
45
- nil
46
- end
47
-
48
- def deannounce_from(seed_url)
49
- Igniter::Server::Client.new(seed_url, timeout: 5).unregister_peer(@config.peer_name)
50
- rescue Igniter::Server::Client::ConnectionError
51
- nil
52
- end
53
- end
54
- end
55
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Igniter
4
- module Mesh
5
- # Configuration for the local mesh node: registered peers and local identity.
6
- class Config
7
- attr_accessor :peer_name, :local_capabilities, :seeds, :discovery_interval,
8
- :auto_announce, :local_url, :gossip_fanout
9
- attr_reader :peers, :peer_registry
10
-
11
- def initialize
12
- @peer_name = nil
13
- @local_capabilities = []
14
- @peers = []
15
- @peer_registry = PeerRegistry.new
16
- @seeds = []
17
- @discovery_interval = 30
18
- @auto_announce = true
19
- @local_url = nil
20
- @gossip_fanout = 3
21
- end
22
-
23
- # Register a remote peer by name.
24
- #
25
- # Igniter::Mesh.configure do |c|
26
- # c.add_peer "orders-node", url: "http://orders.internal:4567",
27
- # capabilities: [:orders, :inventory]
28
- # end
29
- def add_peer(name, url:, capabilities: [])
30
- @peers << Peer.new(name: name, url: url, capabilities: capabilities)
31
- self
32
- end
33
-
34
- # All static peers that advertise a given capability.
35
- def peers_with_capability(capability)
36
- @peers.select { |p| p.capable?(capability) }
37
- end
38
-
39
- # Find a static peer by its registered name. Returns nil if not found.
40
- def peer_named(name)
41
- @peers.find { |p| p.name == name.to_s }
42
- end
43
- end
44
- end
45
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Igniter
4
- module Mesh
5
- # Orchestrates the full dynamic-discovery lifecycle:
6
- #
7
- # 1. Announce self to all seeds (POST /v1/mesh/peers).
8
- # 2. Immediately poll all seeds for their known peer list (GET /v1/mesh/peers).
9
- # 3. Start the background Poller to keep the registry up to date.
10
- #
11
- # On #stop:
12
- # 1. Deannounce self from all seeds (DELETE /v1/mesh/peers/:name), best-effort.
13
- # 2. Stop the background Poller.
14
- class Discovery
15
- def initialize(config)
16
- @config = config
17
- @announcer = Announcer.new(config)
18
- @poller = Poller.new(config)
19
- end
20
-
21
- def start
22
- @announcer.announce_all
23
- @poller.poll_once
24
- @poller.start
25
- self
26
- end
27
-
28
- def stop
29
- @announcer.deannounce_all
30
- @poller.stop
31
- self
32
- end
33
-
34
- def running?
35
- @poller.running?
36
- end
37
- end
38
- end
39
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Igniter
4
- module Mesh
5
- # Raised when a capability-routed remote node has no alive peers.
6
- # Inherits from PendingDependencyError so the resolver transitions
7
- # the node to :pending (same as await/distributed workflow nodes).
8
- class DeferredCapabilityError < Igniter::PendingDependencyError
9
- attr_reader :capability
10
-
11
- def initialize(capability, deferred_result, message = nil)
12
- @capability = capability
13
- super(deferred_result, message || "No alive peer with capability :#{capability}")
14
- end
15
- end
16
-
17
- # Raised when a pinned_to peer is unavailable.
18
- # Inherits from ResolutionError so the resolver transitions the node
19
- # to :failed and surfaces it as an operational incident requiring
20
- # manual intervention.
21
- class IncidentError < Igniter::ResolutionError
22
- attr_reader :peer_name
23
-
24
- def initialize(peer_name, message = nil, context: {})
25
- @peer_name = peer_name
26
- super(message || "Pinned peer '#{peer_name}' is unreachable — manual intervention required",
27
- context: context)
28
- end
29
- end
30
- end
31
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Igniter
4
- module Mesh
5
- # Executes a single peer-to-peer gossip round.
6
- #
7
- # Picks up to config.gossip_fanout random peers from the local PeerRegistry
8
- # (excluding self), fetches their GET /v1/mesh/peers lists, and registers
9
- # any newly discovered peers. This decentralises topology exchange: once seeds
10
- # bootstrap the registry, peers continue spreading topology information among
11
- # themselves even if seeds become unavailable.
12
- #
13
- # Errors from individual peers are swallowed — a dead peer must not abort
14
- # the round for the remaining candidates.
15
- class GossipRound
16
- def initialize(config)
17
- @config = config
18
- end
19
-
20
- def run
21
- pick_candidates.each { |peer| exchange_with(peer) }
22
- end
23
-
24
- private
25
-
26
- def pick_candidates
27
- @config.peer_registry.all
28
- .reject { |p| p.url == @config.local_url }
29
- .sample(@config.gossip_fanout)
30
- end
31
-
32
- def exchange_with(peer) # rubocop:disable Metrics/AbcSize
33
- peers = Igniter::Server::Client.new(peer.url, timeout: 5).list_peers
34
- peers.each do |pd|
35
- next if pd[:name].nil? || pd[:url].nil?
36
- next if pd[:name] == @config.peer_name
37
-
38
- @config.peer_registry.register(
39
- Peer.new(name: pd[:name], url: pd[:url], capabilities: pd[:capabilities] || [])
40
- )
41
- end
42
- rescue Igniter::Server::Client::ConnectionError
43
- nil
44
- end
45
- end
46
- end
47
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Igniter
4
- module Mesh
5
- # Immutable value object representing a peer in the static mesh.
6
- class Peer
7
- attr_reader :name, :url, :capabilities
8
-
9
- def initialize(name:, url:, capabilities: [])
10
- @name = name.to_s.freeze
11
- @url = url.to_s.chomp("/").freeze
12
- @capabilities = Array(capabilities).map(&:to_sym).freeze
13
- freeze
14
- end
15
-
16
- def capable?(capability)
17
- @capabilities.include?(capability.to_sym)
18
- end
19
- end
20
- end
21
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Igniter
4
- module Mesh
5
- # Thread-safe registry for dynamically discovered peers.
6
- #
7
- # Stores peers indexed by name so that registering the same peer twice
8
- # (e.g. from two different seeds) is idempotent and the latest wins.
9
- class PeerRegistry
10
- def initialize
11
- @peers = {}
12
- @mutex = Mutex.new
13
- end
14
-
15
- # Register (or update) a peer. Thread-safe.
16
- def register(peer)
17
- @mutex.synchronize { @peers[peer.name] = peer }
18
- end
19
-
20
- # Remove a peer by name. No-op if not registered.
21
- def unregister(name)
22
- @mutex.synchronize { @peers.delete(name.to_s) }
23
- end
24
-
25
- # All currently registered peers (snapshot).
26
- def all
27
- @mutex.synchronize { @peers.values.dup }
28
- end
29
-
30
- # Peers that advertise a given capability.
31
- def peers_with_capability(capability)
32
- all.select { |p| p.capable?(capability) }
33
- end
34
-
35
- # Find a peer by name. Returns nil if not found.
36
- def peer_named(name)
37
- @mutex.synchronize { @peers[name.to_s] }
38
- end
39
-
40
- # Remove all registered peers. Useful in tests.
41
- def clear
42
- @mutex.synchronize { @peers.clear }
43
- end
44
-
45
- # Number of registered peers.
46
- def size
47
- @mutex.synchronize { @peers.size }
48
- end
49
- end
50
- end
51
- end