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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -3
- data/README.md +150 -658
- data/docs/README.md +59 -0
- data/docs/assets/README.md +8 -0
- data/docs/concepts/README.md +18 -0
- data/docs/concepts/igniter.md +119 -0
- data/docs/dev/README.md +48 -0
- data/docs/dev/agent-orchestra-dna.md +271 -0
- data/docs/dev/ai-agents-target-plan.md +178 -0
- data/docs/dev/application-target-plan.md +45 -0
- data/docs/dev/application-web-integration.md +59 -0
- data/docs/dev/application-web-poc-pattern-guide.md +167 -0
- data/docs/dev/architect-supervisor-bootstrap.md +322 -0
- data/docs/dev/architecture.md +20 -0
- data/docs/dev/cluster-target-plan.md +43 -0
- data/docs/dev/contract-persistence-target-plan.md +426 -0
- data/docs/dev/current-runtime-snapshot.md +73 -0
- data/docs/dev/data-ownership.md +29 -0
- data/docs/dev/document-rotation.md +51 -0
- data/docs/dev/embed-target-plan.md +51 -0
- data/docs/dev/igniter-web-dsl-sketch.md +151 -0
- data/docs/dev/igniter-web-target-plan.md +56 -0
- data/docs/dev/mcp-adapter-package-spec.md +81 -0
- data/docs/dev/module-system.md +46 -0
- data/docs/dev/package-map.md +112 -0
- data/docs/guide/README.md +77 -0
- data/docs/guide/ai-and-tools.md +33 -0
- data/docs/guide/api-and-runtime.md +38 -0
- data/docs/guide/app.md +45 -0
- data/docs/guide/application-capsules.md +139 -0
- data/docs/guide/application-showcase-portfolio.md +181 -0
- data/docs/guide/cli.md +70 -0
- data/docs/guide/cluster.md +55 -0
- data/docs/guide/configuration.md +31 -0
- data/docs/guide/contract-class-dsl.md +154 -0
- data/docs/guide/core-runtime-features.md +34 -0
- data/docs/guide/core.md +43 -0
- data/docs/guide/credentials.md +51 -0
- data/docs/guide/deployment-modes.md +63 -0
- data/docs/guide/distributed-workflows.md +21 -0
- data/docs/guide/getting-started.md +49 -0
- data/docs/guide/how-tos.md +33 -0
- data/docs/guide/igniter-lang-foundation.md +133 -0
- data/docs/guide/integrations.md +47 -0
- data/docs/guide/interactive-app-structure.md +91 -0
- data/docs/guide/store-adapters.md +183 -0
- data/docs/research/README.md +131 -0
- data/docs/research/contract-persistence-landing-zone.md +126 -0
- data/docs/research/contract-persistence-organic-model.md +279 -0
- data/docs/research/contract-persistence-organic-model.ru.md +277 -0
- data/docs/research/horizon-protocol.md +180 -0
- data/docs/research/igniter-lang-convergence-report.md +338 -0
- data/docs/research/project-status-horizon-report.md +363 -0
- data/docs/research/vision-handoff-protocol.md +141 -0
- data/docs/research/wizard-type-spec-architecture.md +293 -0
- data/docs/research/wizard-type-spec-research-request.md +134 -0
- data/docs/store/README.md +7 -0
- data/docs/store/convergence-audit.md +901 -0
- data/examples/README.md +152 -344
- data/examples/catalog.rb +1486 -0
- data/examples/cluster/incident_workflow.rb +70 -0
- data/examples/cluster/incidents.rb +63 -0
- data/examples/cluster/mesh_diagnostics.rb +89 -0
- data/examples/cluster/remediation.rb +63 -0
- data/examples/cluster/routing.rb +65 -0
- data/examples/contracts/aggregates.rb +39 -0
- data/examples/contracts/auditing.rb +35 -0
- data/examples/contracts/basic_pricing.rb +31 -0
- data/examples/contracts/branching.rb +36 -0
- data/examples/contracts/build_effect_executor_pack.rb +88 -0
- data/examples/contracts/build_your_own_pack.rb +82 -0
- data/examples/contracts/capabilities.rb +34 -0
- data/examples/contracts/class_callable.rb +45 -0
- data/examples/contracts/class_pricing.rb +32 -0
- data/examples/contracts/collection.rb +44 -0
- data/examples/contracts/commerce.rb +44 -0
- data/examples/contracts/compose_your_own_packs.rb +110 -0
- data/examples/contracts/composition.rb +61 -0
- data/examples/contracts/content_addressing.rb +33 -0
- data/examples/contracts/contractable_service.rb +43 -0
- data/examples/contracts/contractable_shadow.rb +69 -0
- data/examples/contracts/create_pack.rb +105 -0
- data/examples/contracts/dataflow.rb +57 -0
- data/examples/contracts/debug.rb +32 -0
- data/examples/contracts/debug_pack_authoring.rb +31 -0
- data/examples/contracts/diagnostics.rb +33 -0
- data/examples/contracts/differential.rb +97 -0
- data/examples/contracts/effects.rb +34 -0
- data/examples/contracts/embed_class_registration.rb +40 -0
- data/examples/contracts/embed_human_sugar.rb +106 -0
- data/examples/contracts/formula.rb +32 -0
- data/examples/contracts/incremental.rb +44 -0
- data/examples/contracts/introspection.rb +48 -0
- data/examples/contracts/invariants.rb +54 -0
- data/examples/contracts/journal.rb +37 -0
- data/examples/contracts/lang_foundation.rb +37 -0
- data/examples/contracts/mcp.rb +62 -0
- data/examples/contracts/mcp_host.rb +55 -0
- data/examples/contracts/mcp_server.rb +25 -0
- data/examples/contracts/piecewise.rb +30 -0
- data/examples/contracts/provenance.rb +55 -0
- data/examples/contracts/reactive.rb +62 -0
- data/examples/contracts/saga.rb +56 -0
- data/examples/contracts/scale.rb +30 -0
- data/examples/contracts/step_result.rb +58 -0
- data/examples/run.rb +163 -0
- data/lib/igniter/cluster.rb +3 -0
- data/lib/igniter/contract.rb +1 -326
- data/lib/igniter/monorepo_packages.rb +16 -0
- data/lib/igniter/version.rb +1 -1
- data/lib/igniter/web.rb +3 -0
- data/lib/igniter.rb +51 -43
- data/packages/igniter-agents/README.md +44 -0
- data/packages/igniter-agents/lib/igniter/agents/agent_definition.rb +26 -0
- data/packages/igniter-agents/lib/igniter/agents/agent_run.rb +47 -0
- data/packages/igniter-agents/lib/igniter/agents/agent_turn.rb +34 -0
- data/packages/igniter-agents/lib/igniter/agents/runner.rb +56 -0
- data/packages/igniter-agents/lib/igniter/agents/tool_call.rb +26 -0
- data/packages/igniter-agents/lib/igniter/agents/trace_event.rb +24 -0
- data/packages/igniter-agents/lib/igniter/agents.rb +33 -0
- data/packages/igniter-agents/lib/igniter-agents.rb +3 -0
- data/packages/igniter-ai/README.md +42 -0
- data/packages/igniter-ai/lib/igniter/ai/client.rb +18 -0
- data/packages/igniter-ai/lib/igniter/ai/error.rb +14 -0
- data/packages/igniter-ai/lib/igniter/ai/model_request.rb +28 -0
- data/packages/igniter-ai/lib/igniter/ai/model_response.rb +31 -0
- data/packages/igniter-ai/lib/igniter/ai/providers/fake.rb +24 -0
- data/packages/igniter-ai/lib/igniter/ai/providers/openai_responses.rb +100 -0
- data/packages/igniter-ai/lib/igniter/ai/providers/recorded.rb +40 -0
- data/packages/igniter-ai/lib/igniter/ai/usage.rb +32 -0
- data/packages/igniter-ai/lib/igniter/ai.rb +28 -0
- data/packages/igniter-ai/lib/igniter-ai.rb +3 -0
- data/packages/igniter-application/README.md +194 -0
- data/packages/igniter-application/lib/igniter/application/agent_definition.rb +38 -0
- data/packages/igniter-application/lib/igniter/application/agent_registry.rb +33 -0
- data/packages/igniter-application/lib/igniter/application/agent_runtime.rb +29 -0
- data/packages/igniter-application/lib/igniter/application/agents_builder.rb +26 -0
- data/packages/igniter-application/lib/igniter/application/ai_builder.rb +26 -0
- data/packages/igniter-application/lib/igniter/application/ai_provider_definition.rb +59 -0
- data/packages/igniter-application/lib/igniter/application/ai_registry.rb +34 -0
- data/packages/igniter-application/lib/igniter/application/application_assembly_plan.rb +67 -0
- data/packages/igniter-application/lib/igniter/application/application_blueprint.rb +227 -0
- data/packages/igniter-application/lib/igniter/application/application_capsule_report.rb +61 -0
- data/packages/igniter-application/lib/igniter/application/application_composition_report.rb +161 -0
- data/packages/igniter-application/lib/igniter/application/application_handoff_manifest.rb +100 -0
- data/packages/igniter-application/lib/igniter/application/application_host_activation_commit_readiness.rb +182 -0
- data/packages/igniter-application/lib/igniter/application/application_host_activation_dry_run_result.rb +190 -0
- data/packages/igniter-application/lib/igniter/application/application_host_activation_ledger_commit.rb +285 -0
- data/packages/igniter-application/lib/igniter/application/application_host_activation_ledger_verification.rb +301 -0
- data/packages/igniter-application/lib/igniter/application/application_host_activation_operation_digest.rb +68 -0
- data/packages/igniter-application/lib/igniter/application/application_host_activation_plan.rb +200 -0
- data/packages/igniter-application/lib/igniter/application/application_host_activation_plan_verification.rb +140 -0
- data/packages/igniter-application/lib/igniter/application/application_host_activation_readiness.rb +226 -0
- data/packages/igniter-application/lib/igniter/application/application_host_activation_receipt.rb +151 -0
- data/packages/igniter-application/lib/igniter/application/application_layout.rb +91 -0
- data/packages/igniter-application/lib/igniter/application/application_load_path.rb +38 -0
- data/packages/igniter-application/lib/igniter/application/application_load_report.rb +74 -0
- data/packages/igniter-application/lib/igniter/application/application_manifest.rb +65 -0
- data/packages/igniter-application/lib/igniter/application/application_structure_entry.rb +58 -0
- data/packages/igniter-application/lib/igniter/application/application_structure_plan.rb +128 -0
- data/packages/igniter-application/lib/igniter/application/application_transfer_applied_verification.rb +301 -0
- data/packages/igniter-application/lib/igniter/application/application_transfer_apply_plan.rb +167 -0
- data/packages/igniter-application/lib/igniter/application/application_transfer_apply_result.rb +321 -0
- data/packages/igniter-application/lib/igniter/application/application_transfer_bundle_artifact.rb +160 -0
- data/packages/igniter-application/lib/igniter/application/application_transfer_bundle_plan.rb +125 -0
- data/packages/igniter-application/lib/igniter/application/application_transfer_bundle_verification.rb +154 -0
- data/packages/igniter-application/lib/igniter/application/application_transfer_intake_plan.rb +195 -0
- data/packages/igniter-application/lib/igniter/application/application_transfer_inventory.rb +153 -0
- data/packages/igniter-application/lib/igniter/application/application_transfer_readiness.rb +260 -0
- data/packages/igniter-application/lib/igniter/application/application_transfer_receipt.rb +179 -0
- data/packages/igniter-application/lib/igniter/application/artifact_reference.rb +39 -0
- data/packages/igniter-application/lib/igniter/application/boot_phase.rb +27 -0
- data/packages/igniter-application/lib/igniter/application/boot_plan.rb +55 -0
- data/packages/igniter-application/lib/igniter/application/boot_report.rb +70 -0
- data/packages/igniter-application/lib/igniter/application/capsule_builder.rb +396 -0
- data/packages/igniter-application/lib/igniter/application/capsule_export.rb +26 -0
- data/packages/igniter-application/lib/igniter/application/capsule_import.rb +38 -0
- data/packages/igniter-application/lib/igniter/application/collection_invoker.rb +54 -0
- data/packages/igniter-application/lib/igniter/application/collection_transport_adapter.rb +37 -0
- data/packages/igniter-application/lib/igniter/application/compose_invoker.rb +51 -0
- data/packages/igniter-application/lib/igniter/application/compose_transport_adapter.rb +34 -0
- data/packages/igniter-application/lib/igniter/application/config.rb +86 -0
- data/packages/igniter-application/lib/igniter/application/config_builder.rb +69 -0
- data/packages/igniter-application/lib/igniter/application/contract_registry.rb +30 -0
- data/packages/igniter-application/lib/igniter/application/credential_definition.rb +65 -0
- data/packages/igniter-application/lib/igniter/application/credential_store.rb +68 -0
- data/packages/igniter-application/lib/igniter/application/embedded_host.rb +23 -0
- data/packages/igniter-application/lib/igniter/application/environment.rb +1071 -0
- data/packages/igniter-application/lib/igniter/application/feature_slice.rb +61 -0
- data/packages/igniter-application/lib/igniter/application/feature_slice_report.rb +43 -0
- data/packages/igniter-application/lib/igniter/application/file_backed_host_activation_ledger_adapter.rb +138 -0
- data/packages/igniter-application/lib/igniter/application/file_backed_installed_capsule_registry.rb +132 -0
- data/packages/igniter-application/lib/igniter/application/flow_declaration.rb +62 -0
- data/packages/igniter-application/lib/igniter/application/flow_event.rb +50 -0
- data/packages/igniter-application/lib/igniter/application/flow_session_snapshot.rb +98 -0
- data/packages/igniter-application/lib/igniter/application/installed_capsule_entry.rb +47 -0
- data/packages/igniter-application/lib/igniter/application/interface.rb +11 -0
- data/packages/igniter-application/lib/igniter/application/kernel.rb +385 -0
- data/packages/igniter-application/lib/igniter/application/lifecycle_plan_step.rb +38 -0
- data/packages/igniter-application/lib/igniter/application/manual_loader.rb +18 -0
- data/packages/igniter-application/lib/igniter/application/manual_scheduler.rb +15 -0
- data/packages/igniter-application/lib/igniter/application/memory_session_store.rb +33 -0
- data/packages/igniter-application/lib/igniter/application/missing_credential_error.rb +23 -0
- data/packages/igniter-application/lib/igniter/application/mount_intent.rb +48 -0
- data/packages/igniter-application/lib/igniter/application/mount_registration.rb +49 -0
- data/packages/igniter-application/lib/igniter/application/pending_action.rb +39 -0
- data/packages/igniter-application/lib/igniter/application/pending_input.rb +45 -0
- data/packages/igniter-application/lib/igniter/application/plan_executor.rb +93 -0
- data/packages/igniter-application/lib/igniter/application/profile.rb +178 -0
- data/packages/igniter-application/lib/igniter/application/provider.rb +19 -0
- data/packages/igniter-application/lib/igniter/application/provider_lifecycle_report.rb +72 -0
- data/packages/igniter-application/lib/igniter/application/provider_lifecycle_result.rb +54 -0
- data/packages/igniter-application/lib/igniter/application/provider_registration.rb +19 -0
- data/packages/igniter-application/lib/igniter/application/rack_host.rb +311 -0
- data/packages/igniter-application/lib/igniter/application/seam_lifecycle_result.rb +62 -0
- data/packages/igniter-application/lib/igniter/application/service_definition.rb +25 -0
- data/packages/igniter-application/lib/igniter/application/service_registry.rb +58 -0
- data/packages/igniter-application/lib/igniter/application/session_entry.rb +46 -0
- data/packages/igniter-application/lib/igniter/application/shutdown_plan.rb +45 -0
- data/packages/igniter-application/lib/igniter/application/shutdown_report.rb +54 -0
- data/packages/igniter-application/lib/igniter/application/snapshot.rb +35 -0
- data/packages/igniter-application/lib/igniter/application/transport_request.rb +40 -0
- data/packages/igniter-application/lib/igniter/application/transport_response.rb +22 -0
- data/packages/igniter-application/lib/igniter/application.rb +354 -0
- data/packages/igniter-application/lib/igniter-application.rb +3 -0
- data/packages/igniter-cluster/README.md +116 -0
- data/packages/igniter-cluster/lib/igniter/cluster/active_incident_set.rb +40 -0
- data/packages/igniter-cluster/lib/igniter/cluster/admission_policy.rb +158 -0
- data/packages/igniter-cluster/lib/igniter/cluster/admission_result.rb +47 -0
- data/packages/igniter-cluster/lib/igniter/cluster/capability_catalog.rb +66 -0
- data/packages/igniter-cluster/lib/igniter/cluster/capability_definition.rb +42 -0
- data/packages/igniter-cluster/lib/igniter/cluster/capability_query.rb +162 -0
- data/packages/igniter-cluster/lib/igniter/cluster/capability_router.rb +11 -0
- data/packages/igniter-cluster/lib/igniter/cluster/cluster_diagnostics_executor.rb +184 -0
- data/packages/igniter-cluster/lib/igniter/cluster/cluster_diagnostics_report.rb +49 -0
- data/packages/igniter-cluster/lib/igniter/cluster/cluster_event.rb +34 -0
- data/packages/igniter-cluster/lib/igniter/cluster/cluster_event_log.rb +27 -0
- data/packages/igniter-cluster/lib/igniter/cluster/cluster_incident.rb +42 -0
- data/packages/igniter-cluster/lib/igniter/cluster/decision_explanation.rb +31 -0
- data/packages/igniter-cluster/lib/igniter/cluster/direct_placement.rb +11 -0
- data/packages/igniter-cluster/lib/igniter/cluster/discovery_feed.rb +22 -0
- data/packages/igniter-cluster/lib/igniter/cluster/environment.rb +380 -0
- data/packages/igniter-cluster/lib/igniter/cluster/errors.rb +9 -0
- data/packages/igniter-cluster/lib/igniter/cluster/failover_plan.rb +45 -0
- data/packages/igniter-cluster/lib/igniter/cluster/failover_step.rb +32 -0
- data/packages/igniter-cluster/lib/igniter/cluster/health_policy.rb +124 -0
- data/packages/igniter-cluster/lib/igniter/cluster/incident_action.rb +49 -0
- data/packages/igniter-cluster/lib/igniter/cluster/incident_entry.rb +98 -0
- data/packages/igniter-cluster/lib/igniter/cluster/incident_executor.rb +145 -0
- data/packages/igniter-cluster/lib/igniter/cluster/incident_workflow.rb +64 -0
- data/packages/igniter-cluster/lib/igniter/cluster/kernel.rb +75 -0
- data/packages/igniter-cluster/lib/igniter/cluster/kernel_seams.rb +249 -0
- data/packages/igniter-cluster/lib/igniter/cluster/lease_grant.rb +40 -0
- data/packages/igniter-cluster/lib/igniter/cluster/lease_plan.rb +40 -0
- data/packages/igniter-cluster/lib/igniter/cluster/lease_policy.rb +96 -0
- data/packages/igniter-cluster/lib/igniter/cluster/membership_delta.rb +36 -0
- data/packages/igniter-cluster/lib/igniter/cluster/membership_feed.rb +24 -0
- data/packages/igniter-cluster/lib/igniter/cluster/membership_projection.rb +45 -0
- data/packages/igniter-cluster/lib/igniter/cluster/membership_snapshot.rb +64 -0
- data/packages/igniter-cluster/lib/igniter/cluster/memory_incident_registry.rb +169 -0
- data/packages/igniter-cluster/lib/igniter/cluster/memory_peer_registry.rb +24 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh_admission.rb +24 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh_admission_result.rb +40 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_attempt.rb +51 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_request.rb +71 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_response.rb +28 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_trace.rb +32 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh_executor.rb +497 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh_membership.rb +89 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh_membership_event.rb +32 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh_membership_source.rb +49 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh_retry_policy.rb +42 -0
- data/packages/igniter-cluster/lib/igniter/cluster/mesh_trust_policy.rb +131 -0
- data/packages/igniter-cluster/lib/igniter/cluster/operator_timeline.rb +33 -0
- data/packages/igniter-cluster/lib/igniter/cluster/ownership_claim.rb +30 -0
- data/packages/igniter-cluster/lib/igniter/cluster/ownership_plan.rb +40 -0
- data/packages/igniter-cluster/lib/igniter/cluster/ownership_policy.rb +100 -0
- data/packages/igniter-cluster/lib/igniter/cluster/peer.rb +86 -0
- data/packages/igniter-cluster/lib/igniter/cluster/peer_discovery.rb +62 -0
- data/packages/igniter-cluster/lib/igniter/cluster/peer_health.rb +55 -0
- data/packages/igniter-cluster/lib/igniter/cluster/peer_profile.rb +102 -0
- data/packages/igniter-cluster/lib/igniter/cluster/peer_topology.rb +62 -0
- data/packages/igniter-cluster/lib/igniter/cluster/peer_view.rb +42 -0
- data/packages/igniter-cluster/lib/igniter/cluster/permissive_admission.rb +11 -0
- data/packages/igniter-cluster/lib/igniter/cluster/placement_decision.rb +38 -0
- data/packages/igniter-cluster/lib/igniter/cluster/placement_policy.rb +131 -0
- data/packages/igniter-cluster/lib/igniter/cluster/plan_action_result.rb +72 -0
- data/packages/igniter-cluster/lib/igniter/cluster/plan_execution_report.rb +57 -0
- data/packages/igniter-cluster/lib/igniter/cluster/plan_executor.rb +314 -0
- data/packages/igniter-cluster/lib/igniter/cluster/policy_admission.rb +18 -0
- data/packages/igniter-cluster/lib/igniter/cluster/policy_placement.rb +69 -0
- data/packages/igniter-cluster/lib/igniter/cluster/policy_router.rb +70 -0
- data/packages/igniter-cluster/lib/igniter/cluster/profile.rb +97 -0
- data/packages/igniter-cluster/lib/igniter/cluster/projection_executor.rb +42 -0
- data/packages/igniter-cluster/lib/igniter/cluster/projection_policy.rb +107 -0
- data/packages/igniter-cluster/lib/igniter/cluster/projection_report.rb +35 -0
- data/packages/igniter-cluster/lib/igniter/cluster/projection_stage.rb +32 -0
- data/packages/igniter-cluster/lib/igniter/cluster/rebalance_move.rb +30 -0
- data/packages/igniter-cluster/lib/igniter/cluster/rebalance_plan.rb +40 -0
- data/packages/igniter-cluster/lib/igniter/cluster/recovery_timeline.rb +33 -0
- data/packages/igniter-cluster/lib/igniter/cluster/registry_membership_source.rb +97 -0
- data/packages/igniter-cluster/lib/igniter/cluster/remediation_plan.rb +45 -0
- data/packages/igniter-cluster/lib/igniter/cluster/remediation_policy.rb +119 -0
- data/packages/igniter-cluster/lib/igniter/cluster/remediation_step.rb +44 -0
- data/packages/igniter-cluster/lib/igniter/cluster/route.rb +34 -0
- data/packages/igniter-cluster/lib/igniter/cluster/route_policy.rb +104 -0
- data/packages/igniter-cluster/lib/igniter/cluster/route_request.rb +61 -0
- data/packages/igniter-cluster/lib/igniter/cluster/topology_policy.rb +154 -0
- data/packages/igniter-cluster/lib/igniter/cluster/transport_adapter.rb +53 -0
- data/packages/igniter-cluster/lib/igniter/cluster.rb +108 -0
- data/packages/igniter-cluster/lib/igniter-cluster.rb +3 -0
- data/packages/igniter-contracts/README.md +239 -0
- data/packages/igniter-contracts/lib/igniter/contracts/api.rb +92 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/baseline_pack.rb +141 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/const_pack.rb +29 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/dsl_keyword.rb +21 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/hook_result_policies.rb +47 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/hook_spec.rb +73 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/hook_specs.rb +74 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/kernel.rb +220 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/node_type.rb +26 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/ordered_registry.rb +55 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/pack.rb +13 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/pack_manifest.rb +131 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/path_access.rb +76 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/profile.rb +133 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/project_pack.rb +42 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/registry.rb +57 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly/step_result_pack.rb +42 -0
- data/packages/igniter-contracts/lib/igniter/contracts/assembly.rb +18 -0
- data/packages/igniter-contracts/lib/igniter/contracts/contract.rb +135 -0
- data/packages/igniter-contracts/lib/igniter/contracts/contractable.rb +288 -0
- data/packages/igniter-contracts/lib/igniter/contracts/environment.rb +51 -0
- data/packages/igniter-contracts/lib/igniter/contracts/errors.rb +47 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/baseline_normalizers.rb +23 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/baseline_runtime.rb +55 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/baseline_validators.rb +113 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/builder.rb +43 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/compilation_report.rb +46 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/compiled_graph.rb +21 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/compiler.rb +66 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/const_runtime.rb +15 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/diagnostics.rb +24 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/diagnostics_report.rb +40 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/diagnostics_section.rb +37 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/effect_invocation.rb +26 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/execution_request.rb +28 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/execution_result.rb +32 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/inline_executor.rb +19 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/mutable_named_values.rb +52 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/named_values.rb +48 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/operation.rb +42 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/runtime.rb +43 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result.rb +51 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result_diagnostics.rb +35 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result_runtime.rb +51 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result_validators.rb +44 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/structured_dump.rb +49 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/validation_finding.rb +28 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution/validation_report.rb +46 -0
- data/packages/igniter-contracts/lib/igniter/contracts/execution.rb +28 -0
- data/packages/igniter-contracts/lib/igniter/contracts.rb +54 -0
- data/packages/igniter-contracts/lib/igniter/lang/backend.rb +19 -0
- data/packages/igniter-contracts/lib/igniter/lang/backends/ruby.rb +42 -0
- data/packages/igniter-contracts/lib/igniter/lang/diagnostic_payload.rb +174 -0
- data/packages/igniter-contracts/lib/igniter/lang/metadata_carrier_manifest.rb +112 -0
- data/packages/igniter-contracts/lib/igniter/lang/metadata_manifest.rb +128 -0
- data/packages/igniter-contracts/lib/igniter/lang/receipt_payload.rb +152 -0
- data/packages/igniter-contracts/lib/igniter/lang/schema_compatibility_diagnostic.rb +300 -0
- data/packages/igniter-contracts/lib/igniter/lang/types.rb +84 -0
- data/packages/igniter-contracts/lib/igniter/lang/verification_report.rb +226 -0
- data/packages/igniter-contracts/lib/igniter/lang.rb +27 -0
- data/packages/igniter-contracts/lib/igniter-contracts.rb +3 -0
- data/packages/igniter-embed/README.md +360 -0
- data/packages/igniter-embed/lib/igniter/embed/config.rb +155 -0
- data/packages/igniter-embed/lib/igniter/embed/container.rb +165 -0
- data/packages/igniter-embed/lib/igniter/embed/contract_handle.rb +23 -0
- data/packages/igniter-embed/lib/igniter/embed/contract_naming.rb +38 -0
- data/packages/igniter-embed/lib/igniter/embed/contractable/acceptance.rb +52 -0
- data/packages/igniter-embed/lib/igniter/embed/contractable/adapters.rb +33 -0
- data/packages/igniter-embed/lib/igniter/embed/contractable/config.rb +234 -0
- data/packages/igniter-embed/lib/igniter/embed/contractable/runner.rb +393 -0
- data/packages/igniter-embed/lib/igniter/embed/contractable/sugar_builder.rb +145 -0
- data/packages/igniter-embed/lib/igniter/embed/contractable.rb +29 -0
- data/packages/igniter-embed/lib/igniter/embed/contracts_builder.rb +54 -0
- data/packages/igniter-embed/lib/igniter/embed/errors.rb +14 -0
- data/packages/igniter-embed/lib/igniter/embed/execution_envelope.rb +50 -0
- data/packages/igniter-embed/lib/igniter/embed/host_builder.rb +39 -0
- data/packages/igniter-embed/lib/igniter/embed/rails.rb +21 -0
- data/packages/igniter-embed/lib/igniter/embed/registry.rb +78 -0
- data/packages/igniter-embed/lib/igniter/embed/sugar_expansion.rb +152 -0
- data/packages/igniter-embed/lib/igniter/embed.rb +38 -0
- data/packages/igniter-embed/lib/igniter-embed.rb +3 -0
- data/packages/igniter-extensions/README.md +381 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/aggregate_pack.rb +103 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit/builder.rb +132 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit/event.rb +34 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit/snapshot.rb +44 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit_pack.rb +60 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/branch_pack.rb +199 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/declaration.rb +31 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/error.rb +35 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/policy.rb +20 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/report.rb +47 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/violation.rb +30 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities_pack.rb +146 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/collection_pack.rb +212 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/commerce_pack.rb +91 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/compose_pack.rb +213 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing/cache.rb +59 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing/content_key.rb +63 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing/declaration.rb +47 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing_pack.rb +90 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/profile.rb +196 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/report.rb +85 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/scaffold.rb +461 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/scope.rb +79 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/wizard.rb +269 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/workflow.rb +189 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/workflow_step.rb +51 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/write_result.rb +48 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/write_step.rb +63 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/writer.rb +131 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator_pack.rb +128 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/aggregate_operators.rb +119 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/aggregate_state.rb +60 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/builder.rb +66 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/collection_result.rb +70 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/diff.rb +37 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/item_result.rb +44 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/result.rb +58 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/session.rb +173 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/window_filter.rb +49 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow_pack.rb +66 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/pack_audit.rb +181 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/pack_snapshot.rb +46 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/profile_snapshot.rb +50 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/report.rb +50 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug_pack.rb +115 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/divergence.rb +37 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/formatter.rb +85 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/report.rb +83 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/runner.rb +136 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential_pack.rb +61 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/execution_report_pack.rb +38 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/formatter.rb +60 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/node_state.rb +30 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/result.rb +65 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/session.rb +146 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental_pack.rb +40 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/builder.rb +27 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/cases_report.rb +47 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/error.rb +34 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/invariant.rb +30 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/report.rb +45 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/suite.rb +36 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/violation.rb +39 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants_pack.rb +88 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/journal_pack.rb +55 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/language/formula_pack.rb +185 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/language/piecewise_pack.rb +166 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/language/scale_pack.rb +147 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/lookup_pack.rb +50 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/creator_session.rb +105 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/tool_argument.rb +35 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/tool_definition.rb +33 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/tool_result.rb +28 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp_pack.rb +335 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/builder.rb +80 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/lineage.rb +59 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/node_trace.rb +53 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/text_formatter.rb +62 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance_pack.rb +52 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/builder.rb +43 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/dispatch_result.rb +59 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/engine.rb +79 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/event.rb +36 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/matcher.rb +20 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/plan.rb +58 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/subscription.rb +29 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive_pack.rb +169 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/compensation.rb +25 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/compensation_record.rb +28 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/compensation_set.rb +47 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/formatter.rb +39 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/result.rb +56 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/runner.rb +124 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga_pack.rb +56 -0
- data/packages/igniter-extensions/lib/igniter/extensions/contracts.rb +445 -0
- data/packages/igniter-extensions/lib/igniter/extensions.rb +6 -0
- data/packages/igniter-extensions/lib/igniter-extensions.rb +3 -0
- data/packages/igniter-hub/README.md +25 -0
- data/packages/igniter-hub/lib/igniter/hub/catalog_entry.rb +35 -0
- data/packages/igniter-hub/lib/igniter/hub/local_catalog.rb +51 -0
- data/packages/igniter-hub/lib/igniter/hub.rb +16 -0
- data/packages/igniter-hub/lib/igniter-hub.rb +3 -0
- data/packages/igniter-mcp-adapter/README.md +65 -0
- data/packages/igniter-mcp-adapter/exe/igniter-mcp-adapter +6 -0
- data/packages/igniter-mcp-adapter/lib/igniter/mcp/adapter/host.rb +226 -0
- data/packages/igniter-mcp-adapter/lib/igniter/mcp/adapter/server.rb +148 -0
- data/packages/igniter-mcp-adapter/lib/igniter/mcp/adapter.rb +40 -0
- data/packages/igniter-mcp-adapter/lib/igniter-mcp-adapter.rb +5 -0
- data/packages/igniter-web/README.md +539 -0
- data/packages/igniter-web/lib/igniter/web/api.rb +49 -0
- data/packages/igniter-web/lib/igniter/web/application.rb +99 -0
- data/packages/igniter-web/lib/igniter/web/application_web_mount.rb +162 -0
- data/packages/igniter-web/lib/igniter/web/arbre.rb +41 -0
- data/packages/igniter-web/lib/igniter/web/component.rb +103 -0
- data/packages/igniter-web/lib/igniter/web/components/view_action_node.rb +38 -0
- data/packages/igniter-web/lib/igniter/web/components/view_ask_node.rb +52 -0
- data/packages/igniter-web/lib/igniter/web/components/view_chat_node.rb +34 -0
- data/packages/igniter-web/lib/igniter/web/components/view_compare_node.rb +41 -0
- data/packages/igniter-web/lib/igniter/web/components/view_node.rb +30 -0
- data/packages/igniter-web/lib/igniter/web/components/view_screen.rb +34 -0
- data/packages/igniter-web/lib/igniter/web/components/view_stream_node.rb +32 -0
- data/packages/igniter-web/lib/igniter/web/components/view_zone.rb +26 -0
- data/packages/igniter-web/lib/igniter/web/components.rb +10 -0
- data/packages/igniter-web/lib/igniter/web/composer.rb +84 -0
- data/packages/igniter-web/lib/igniter/web/composition_finding.rb +16 -0
- data/packages/igniter-web/lib/igniter/web/composition_policy.rb +88 -0
- data/packages/igniter-web/lib/igniter/web/composition_preset.rb +131 -0
- data/packages/igniter-web/lib/igniter/web/composition_result.rb +27 -0
- data/packages/igniter-web/lib/igniter/web/flow_interaction_adapter.rb +104 -0
- data/packages/igniter-web/lib/igniter/web/flow_surface_projection.rb +121 -0
- data/packages/igniter-web/lib/igniter/web/interaction_target.rb +50 -0
- data/packages/igniter-web/lib/igniter/web/mount_context.rb +80 -0
- data/packages/igniter-web/lib/igniter/web/page.rb +110 -0
- data/packages/igniter-web/lib/igniter/web/record.rb +54 -0
- data/packages/igniter-web/lib/igniter/web/screen_spec.rb +109 -0
- data/packages/igniter-web/lib/igniter/web/surface_manifest.rb +370 -0
- data/packages/igniter-web/lib/igniter/web/surface_structure.rb +57 -0
- data/packages/igniter-web/lib/igniter/web/view_graph.rb +25 -0
- data/packages/igniter-web/lib/igniter/web/view_graph_renderer.rb +63 -0
- data/packages/igniter-web/lib/igniter/web/view_node.rb +37 -0
- data/packages/igniter-web/lib/igniter/web.rb +107 -0
- data/packages/igniter-web/lib/igniter-web.rb +3 -0
- metadata +547 -308
- 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/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/examples/agents.rb +0 -150
- data/examples/async_store.rb +0 -47
- data/examples/basic_pricing.rb +0 -27
- data/examples/collection.rb +0 -43
- data/examples/collection_partial_failure.rb +0 -50
- data/examples/composition.rb +0 -39
- data/examples/consensus.rb +0 -239
- data/examples/dataflow.rb +0 -308
- data/examples/diagnostics.rb +0 -28
- data/examples/differential.rb +0 -161
- data/examples/distributed_server.rb +0 -94
- data/examples/distributed_workflow.rb +0 -52
- data/examples/effects.rb +0 -184
- data/examples/elocal_webhook.rb +0 -1
- data/examples/incremental.rb +0 -142
- data/examples/invariants.rb +0 -179
- data/examples/llm_tools.rb +0 -237
- data/examples/marketing_ergonomics.rb +0 -57
- data/examples/mesh.rb +0 -239
- data/examples/mesh_discovery.rb +0 -267
- data/examples/mesh_gossip.rb +0 -162
- data/examples/order_pipeline.rb +0 -163
- data/examples/provenance.rb +0 -122
- data/examples/ringcentral_routing.rb +0 -269
- data/examples/saga.rb +0 -110
- data/lib/igniter/agent/mailbox.rb +0 -96
- data/lib/igniter/agent/message.rb +0 -21
- data/lib/igniter/agent/ref.rb +0 -86
- data/lib/igniter/agent/runner.rb +0 -129
- data/lib/igniter/agent/state_holder.rb +0 -23
- data/lib/igniter/agent.rb +0 -155
- data/lib/igniter/agents/ai/alert_agent.rb +0 -111
- data/lib/igniter/agents/ai/chain_agent.rb +0 -127
- data/lib/igniter/agents/ai/critic_agent.rb +0 -163
- data/lib/igniter/agents/ai/evaluator_agent.rb +0 -193
- data/lib/igniter/agents/ai/evolution_agent.rb +0 -286
- data/lib/igniter/agents/ai/health_check_agent.rb +0 -122
- data/lib/igniter/agents/ai/observer_agent.rb +0 -184
- data/lib/igniter/agents/ai/planner_agent.rb +0 -210
- data/lib/igniter/agents/ai/router_agent.rb +0 -131
- data/lib/igniter/agents/ai/self_reflection_agent.rb +0 -175
- data/lib/igniter/agents/observability/metrics_agent.rb +0 -130
- data/lib/igniter/agents/pipeline/batch_processor_agent.rb +0 -131
- data/lib/igniter/agents/proactive_agent.rb +0 -208
- data/lib/igniter/agents/reliability/retry_agent.rb +0 -99
- data/lib/igniter/agents/scheduling/cron_agent.rb +0 -110
- data/lib/igniter/agents.rb +0 -56
- data/lib/igniter/application/app_config.rb +0 -32
- data/lib/igniter/application/autoloader.rb +0 -18
- data/lib/igniter/application/generator.rb +0 -157
- data/lib/igniter/application/scheduler.rb +0 -109
- data/lib/igniter/application/yml_loader.rb +0 -39
- data/lib/igniter/application.rb +0 -174
- data/lib/igniter/capabilities.rb +0 -68
- data/lib/igniter/compiler/compiled_graph.rb +0 -180
- data/lib/igniter/compiler/graph_compiler.rb +0 -70
- data/lib/igniter/compiler/type_resolver.rb +0 -54
- data/lib/igniter/compiler/validation_context.rb +0 -61
- data/lib/igniter/compiler/validation_pipeline.rb +0 -32
- data/lib/igniter/compiler/validator.rb +0 -19
- data/lib/igniter/compiler/validators/await_validator.rb +0 -53
- data/lib/igniter/compiler/validators/callable_validator.rb +0 -125
- data/lib/igniter/compiler/validators/dependencies_validator.rb +0 -241
- data/lib/igniter/compiler/validators/outputs_validator.rb +0 -66
- data/lib/igniter/compiler/validators/remote_validator.rb +0 -60
- data/lib/igniter/compiler/validators/type_compatibility_validator.rb +0 -84
- data/lib/igniter/compiler/validators/uniqueness_validator.rb +0 -60
- data/lib/igniter/compiler.rb +0 -20
- data/lib/igniter/consensus/cluster.rb +0 -183
- data/lib/igniter/consensus/errors.rb +0 -14
- data/lib/igniter/consensus/executors.rb +0 -43
- data/lib/igniter/consensus/node.rb +0 -320
- data/lib/igniter/consensus/read_query.rb +0 -30
- data/lib/igniter/consensus/state_machine.rb +0 -58
- data/lib/igniter/consensus.rb +0 -58
- data/lib/igniter/content_addressing.rb +0 -133
- data/lib/igniter/dataflow/aggregate_operators.rb +0 -147
- data/lib/igniter/dataflow/aggregate_state.rb +0 -77
- data/lib/igniter/dataflow/diff.rb +0 -37
- data/lib/igniter/dataflow/diff_state.rb +0 -81
- data/lib/igniter/dataflow/incremental_collection_result.rb +0 -39
- data/lib/igniter/dataflow/window_filter.rb +0 -48
- data/lib/igniter/dataflow.rb +0 -65
- data/lib/igniter/diagnostics/auditing/report/console_formatter.rb +0 -80
- data/lib/igniter/diagnostics/auditing/report/markdown_formatter.rb +0 -22
- data/lib/igniter/diagnostics/introspection/formatters/mermaid_formatter.rb +0 -58
- data/lib/igniter/diagnostics/introspection/formatters/text_tree_formatter.rb +0 -44
- data/lib/igniter/diagnostics/report.rb +0 -349
- data/lib/igniter/diagnostics.rb +0 -8
- data/lib/igniter/differential/divergence.rb +0 -29
- data/lib/igniter/differential/formatter.rb +0 -96
- data/lib/igniter/differential/report.rb +0 -86
- data/lib/igniter/differential/runner.rb +0 -130
- data/lib/igniter/differential.rb +0 -51
- data/lib/igniter/dsl/contract_builder.rb +0 -495
- data/lib/igniter/dsl/schema_builder.rb +0 -73
- data/lib/igniter/dsl.rb +0 -9
- data/lib/igniter/effect.rb +0 -91
- data/lib/igniter/effect_registry.rb +0 -78
- data/lib/igniter/errors.rb +0 -79
- data/lib/igniter/events/bus.rb +0 -44
- data/lib/igniter/events/event.rb +0 -82
- data/lib/igniter/events.rb +0 -9
- data/lib/igniter/execution_report/builder.rb +0 -54
- data/lib/igniter/execution_report/formatter.rb +0 -50
- data/lib/igniter/execution_report/node_entry.rb +0 -24
- data/lib/igniter/execution_report/report.rb +0 -65
- data/lib/igniter/execution_report.rb +0 -32
- data/lib/igniter/executor.rb +0 -134
- data/lib/igniter/executor_registry.rb +0 -44
- data/lib/igniter/extensions/auditing/timeline.rb +0 -103
- data/lib/igniter/extensions/auditing.rb +0 -10
- data/lib/igniter/extensions/capabilities.rb +0 -39
- data/lib/igniter/extensions/content_addressing.rb +0 -5
- data/lib/igniter/extensions/dataflow.rb +0 -117
- data/lib/igniter/extensions/differential.rb +0 -114
- data/lib/igniter/extensions/execution_report.rb +0 -27
- data/lib/igniter/extensions/incremental.rb +0 -50
- data/lib/igniter/extensions/introspection/graph_formatter.rb +0 -103
- data/lib/igniter/extensions/introspection/plan_formatter.rb +0 -55
- data/lib/igniter/extensions/introspection/runtime_formatter.rb +0 -117
- data/lib/igniter/extensions/introspection.rb +0 -12
- data/lib/igniter/extensions/invariants.rb +0 -116
- data/lib/igniter/extensions/mesh.rb +0 -31
- data/lib/igniter/extensions/provenance.rb +0 -45
- data/lib/igniter/extensions/reactive/engine.rb +0 -83
- data/lib/igniter/extensions/reactive/matcher.rb +0 -21
- data/lib/igniter/extensions/reactive/reaction.rb +0 -18
- data/lib/igniter/extensions/reactive.rb +0 -12
- data/lib/igniter/extensions/saga.rb +0 -74
- data/lib/igniter/extensions.rb +0 -10
- data/lib/igniter/fingerprint.rb +0 -43
- data/lib/igniter/incremental/formatter.rb +0 -81
- data/lib/igniter/incremental/result.rb +0 -69
- data/lib/igniter/incremental/tracker.rb +0 -108
- data/lib/igniter/incremental.rb +0 -50
- data/lib/igniter/integrations/agents.rb +0 -18
- data/lib/igniter/integrations/llm/config.rb +0 -113
- data/lib/igniter/integrations/llm/context.rb +0 -74
- data/lib/igniter/integrations/llm/executor.rb +0 -352
- data/lib/igniter/integrations/llm/providers/anthropic.rb +0 -181
- data/lib/igniter/integrations/llm/providers/base.rb +0 -33
- data/lib/igniter/integrations/llm/providers/ollama.rb +0 -137
- data/lib/igniter/integrations/llm/providers/openai.rb +0 -182
- data/lib/igniter/integrations/llm/transcription/providers/assemblyai.rb +0 -200
- data/lib/igniter/integrations/llm/transcription/providers/base.rb +0 -122
- data/lib/igniter/integrations/llm/transcription/providers/deepgram.rb +0 -162
- data/lib/igniter/integrations/llm/transcription/providers/openai.rb +0 -102
- data/lib/igniter/integrations/llm/transcription/transcriber.rb +0 -145
- data/lib/igniter/integrations/llm/transcription/transcript_result.rb +0 -29
- data/lib/igniter/integrations/llm.rb +0 -95
- data/lib/igniter/integrations/rails/cable_adapter.rb +0 -49
- data/lib/igniter/integrations/rails/contract_job.rb +0 -76
- data/lib/igniter/integrations/rails/generators/contract/contract_generator.rb +0 -22
- data/lib/igniter/integrations/rails/generators/install/install_generator.rb +0 -33
- data/lib/igniter/integrations/rails/railtie.rb +0 -25
- data/lib/igniter/integrations/rails/webhook_concern.rb +0 -49
- data/lib/igniter/integrations/rails.rb +0 -12
- data/lib/igniter/invariant.rb +0 -50
- data/lib/igniter/memory/agent_memory.rb +0 -104
- data/lib/igniter/memory/episode.rb +0 -29
- data/lib/igniter/memory/fact.rb +0 -27
- data/lib/igniter/memory/memorable.rb +0 -90
- data/lib/igniter/memory/reflection_cycle.rb +0 -96
- data/lib/igniter/memory/reflection_record.rb +0 -28
- data/lib/igniter/memory/store.rb +0 -115
- data/lib/igniter/memory/stores/in_memory.rb +0 -136
- data/lib/igniter/memory/stores/sqlite.rb +0 -284
- data/lib/igniter/memory.rb +0 -80
- data/lib/igniter/mesh/announcer.rb +0 -55
- data/lib/igniter/mesh/config.rb +0 -45
- data/lib/igniter/mesh/discovery.rb +0 -39
- data/lib/igniter/mesh/errors.rb +0 -31
- data/lib/igniter/mesh/gossip.rb +0 -47
- data/lib/igniter/mesh/peer.rb +0 -21
- data/lib/igniter/mesh/peer_registry.rb +0 -51
- data/lib/igniter/mesh/poller.rb +0 -77
- data/lib/igniter/mesh/router.rb +0 -109
- data/lib/igniter/mesh.rb +0 -85
- data/lib/igniter/metrics/collector.rb +0 -131
- data/lib/igniter/metrics/prometheus_exporter.rb +0 -104
- data/lib/igniter/metrics/snapshot.rb +0 -8
- data/lib/igniter/metrics.rb +0 -37
- data/lib/igniter/model/aggregate_node.rb +0 -34
- data/lib/igniter/model/await_node.rb +0 -21
- data/lib/igniter/model/branch_node.rb +0 -46
- data/lib/igniter/model/collection_node.rb +0 -32
- data/lib/igniter/model/composition_node.rb +0 -22
- data/lib/igniter/model/compute_node.rb +0 -90
- data/lib/igniter/model/effect_node.rb +0 -37
- data/lib/igniter/model/graph.rb +0 -15
- data/lib/igniter/model/input_node.rb +0 -27
- data/lib/igniter/model/node.rb +0 -22
- data/lib/igniter/model/output_node.rb +0 -41
- data/lib/igniter/model/remote_node.rb +0 -42
- data/lib/igniter/model.rb +0 -18
- data/lib/igniter/node_cache.rb +0 -231
- data/lib/igniter/property_testing/formatter.rb +0 -66
- data/lib/igniter/property_testing/generators.rb +0 -115
- data/lib/igniter/property_testing/result.rb +0 -45
- data/lib/igniter/property_testing/run.rb +0 -43
- data/lib/igniter/property_testing/runner.rb +0 -47
- data/lib/igniter/property_testing.rb +0 -64
- data/lib/igniter/provenance/builder.rb +0 -97
- data/lib/igniter/provenance/lineage.rb +0 -82
- data/lib/igniter/provenance/node_trace.rb +0 -65
- data/lib/igniter/provenance/text_formatter.rb +0 -70
- data/lib/igniter/provenance.rb +0 -29
- data/lib/igniter/registry.rb +0 -67
- data/lib/igniter/replication/bootstrapper.rb +0 -61
- data/lib/igniter/replication/bootstrappers/gem.rb +0 -32
- data/lib/igniter/replication/bootstrappers/git.rb +0 -39
- data/lib/igniter/replication/bootstrappers/tarball.rb +0 -56
- data/lib/igniter/replication/expansion_plan.rb +0 -38
- data/lib/igniter/replication/expansion_planner.rb +0 -142
- data/lib/igniter/replication/manifest.rb +0 -45
- data/lib/igniter/replication/network_topology.rb +0 -123
- data/lib/igniter/replication/node_role.rb +0 -42
- data/lib/igniter/replication/reflective_replication_agent.rb +0 -238
- data/lib/igniter/replication/replication_agent.rb +0 -87
- data/lib/igniter/replication/role_registry.rb +0 -73
- data/lib/igniter/replication/ssh_session.rb +0 -77
- data/lib/igniter/replication.rb +0 -54
- data/lib/igniter/runtime/cache.rb +0 -126
- data/lib/igniter/runtime/collection_result.rb +0 -111
- data/lib/igniter/runtime/deferred_result.rb +0 -40
- data/lib/igniter/runtime/execution.rb +0 -416
- data/lib/igniter/runtime/input_validator.rb +0 -129
- data/lib/igniter/runtime/invalidator.rb +0 -52
- data/lib/igniter/runtime/job_worker.rb +0 -18
- data/lib/igniter/runtime/node_state.rb +0 -56
- data/lib/igniter/runtime/planner.rb +0 -126
- data/lib/igniter/runtime/resolver.rb +0 -758
- data/lib/igniter/runtime/result.rb +0 -117
- data/lib/igniter/runtime/runner_factory.rb +0 -20
- data/lib/igniter/runtime/runners/inline_runner.rb +0 -21
- data/lib/igniter/runtime/runners/store_runner.rb +0 -29
- data/lib/igniter/runtime/runners/thread_pool_runner.rb +0 -37
- data/lib/igniter/runtime/stores/active_record_store.rb +0 -53
- data/lib/igniter/runtime/stores/file_store.rb +0 -91
- data/lib/igniter/runtime/stores/memory_store.rb +0 -93
- data/lib/igniter/runtime/stores/redis_store.rb +0 -93
- data/lib/igniter/runtime.rb +0 -26
- data/lib/igniter/saga/compensation.rb +0 -31
- data/lib/igniter/saga/compensation_record.rb +0 -20
- data/lib/igniter/saga/executor.rb +0 -85
- data/lib/igniter/saga/formatter.rb +0 -49
- data/lib/igniter/saga/result.rb +0 -47
- data/lib/igniter/saga.rb +0 -56
- data/lib/igniter/server/client.rb +0 -166
- data/lib/igniter/server/config.rb +0 -34
- data/lib/igniter/server/handlers/base.rb +0 -105
- data/lib/igniter/server/handlers/contracts_handler.rb +0 -15
- data/lib/igniter/server/handlers/event_handler.rb +0 -32
- data/lib/igniter/server/handlers/execute_handler.rb +0 -43
- data/lib/igniter/server/handlers/health_handler.rb +0 -32
- data/lib/igniter/server/handlers/liveness_handler.rb +0 -20
- data/lib/igniter/server/handlers/manifest_handler.rb +0 -34
- data/lib/igniter/server/handlers/metrics_handler.rb +0 -51
- data/lib/igniter/server/handlers/peers_handler.rb +0 -115
- data/lib/igniter/server/handlers/readiness_handler.rb +0 -47
- data/lib/igniter/server/handlers/status_handler.rb +0 -27
- data/lib/igniter/server/http_server.rb +0 -146
- data/lib/igniter/server/rack_app.rb +0 -35
- data/lib/igniter/server/registry.rb +0 -56
- data/lib/igniter/server/router.rb +0 -108
- data/lib/igniter/server/server_logger.rb +0 -52
- data/lib/igniter/server.rb +0 -73
- data/lib/igniter/skill/feedback.rb +0 -116
- data/lib/igniter/skill/output_schema.rb +0 -110
- data/lib/igniter/skill.rb +0 -218
- data/lib/igniter/stream_loop.rb +0 -80
- data/lib/igniter/supervisor.rb +0 -167
- data/lib/igniter/temporal.rb +0 -84
- data/lib/igniter/tool/discoverable.rb +0 -151
- data/lib/igniter/tool.rb +0 -52
- data/lib/igniter/tool_registry.rb +0 -144
- data/lib/igniter/type_system.rb +0 -44
- /data/docs/{EXECUTION_MODEL_V2.md → dev/execution-model.md} +0 -0
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
# igniter-web
|
|
2
|
+
|
|
3
|
+
Contracts-first web package for Igniter.
|
|
4
|
+
|
|
5
|
+
Primary entrypoints:
|
|
6
|
+
|
|
7
|
+
- `require "igniter-web"`
|
|
8
|
+
- `require "igniter/web"`
|
|
9
|
+
|
|
10
|
+
Current package shape:
|
|
11
|
+
|
|
12
|
+
- `Igniter::Web::Api`
|
|
13
|
+
- `Igniter::Web::Application`
|
|
14
|
+
- `Igniter::Web::ScreenSpec`
|
|
15
|
+
- `Igniter::Web::Composer`
|
|
16
|
+
- `Igniter::Web::CompositionPreset`
|
|
17
|
+
- `Igniter::Web::ViewGraph`
|
|
18
|
+
- `Igniter::Web::ViewGraphRenderer`
|
|
19
|
+
- `Igniter::Web::SurfaceStructure`
|
|
20
|
+
- `Igniter::Web::SurfaceManifest`
|
|
21
|
+
- `Igniter::Web::FlowInteractionAdapter`
|
|
22
|
+
- `Igniter::Web::FlowSurfaceProjection`
|
|
23
|
+
- `Igniter::Web::Page`
|
|
24
|
+
- `Igniter::Web::Component`
|
|
25
|
+
- `Igniter::Web::Record`
|
|
26
|
+
|
|
27
|
+
## Direction
|
|
28
|
+
|
|
29
|
+
`igniter-web` is the active rebuild target for Igniter's web authoring and
|
|
30
|
+
transport surface.
|
|
31
|
+
|
|
32
|
+
It is intentionally not a generic CRUD-first MVC framework.
|
|
33
|
+
The package should optimize for the shapes Igniter actually cares about:
|
|
34
|
+
|
|
35
|
+
- dashboards
|
|
36
|
+
- chats
|
|
37
|
+
- streams
|
|
38
|
+
- automations
|
|
39
|
+
- webhooks
|
|
40
|
+
- operator surfaces
|
|
41
|
+
- agent-driven and environment-driven flows
|
|
42
|
+
- long-lived wizard/process UIs
|
|
43
|
+
|
|
44
|
+
Current design notes live in:
|
|
45
|
+
|
|
46
|
+
- [docs/dev/igniter-web-target-plan.md](../../docs/dev/igniter-web-target-plan.md)
|
|
47
|
+
- [docs/dev/igniter-web-dsl-sketch.md](../../docs/dev/igniter-web-dsl-sketch.md)
|
|
48
|
+
|
|
49
|
+
For the richer application examples that exercise `igniter-web`, see
|
|
50
|
+
[Application Showcase Portfolio](../../docs/guide/application-showcase-portfolio.md).
|
|
51
|
+
|
|
52
|
+
## Current Status
|
|
53
|
+
|
|
54
|
+
This package currently ships only a skeleton:
|
|
55
|
+
|
|
56
|
+
- package facade
|
|
57
|
+
- namespace entrypoints
|
|
58
|
+
- route/endpoint declaration objects
|
|
59
|
+
- Arbre-backed `Page` and `Component` base classes
|
|
60
|
+
- compact `root` / `page` authoring DSL
|
|
61
|
+
- initial screen composition objects for agent-managed views and flows
|
|
62
|
+
- first Arbre renderer for composed view graphs
|
|
63
|
+
- semantic Arbre components for screen, zone, and node rendering
|
|
64
|
+
- specialized Arbre components for action, chat, stream, ask, and compare nodes
|
|
65
|
+
- web-side `ApplicationWebMount` for future `igniter-application` integration
|
|
66
|
+
- `MountContext` for mounted pages to access routes, app manifest, services,
|
|
67
|
+
interfaces, and mount metadata without custom handler/context classes
|
|
68
|
+
- `SurfaceStructure` for web-owned surface groups inside application layout
|
|
69
|
+
profiles
|
|
70
|
+
- `SurfaceManifest` for web-owned exports/imports metadata that can be lifted
|
|
71
|
+
into application capsule exports
|
|
72
|
+
- flow pending-state/projection helpers for inspection and explicit
|
|
73
|
+
application flow handoff
|
|
74
|
+
- an adapter-oriented `Record` placeholder
|
|
75
|
+
|
|
76
|
+
That gives the rebuild a real package boundary now, while leaving room to shape
|
|
77
|
+
the full web runtime and authoring DSL incrementally.
|
|
78
|
+
|
|
79
|
+
The package README is not a production server claim. Current showcase Web
|
|
80
|
+
surfaces use manual server mode as review scaffolding and stable app-local
|
|
81
|
+
`data-` attributes as inspection seams; they do not graduate marker DSL,
|
|
82
|
+
route DSL, component DSL, browser automation default, auth, persistence, live
|
|
83
|
+
transport, deployment behavior, or cluster placement.
|
|
84
|
+
|
|
85
|
+
## Current DSL Sketch
|
|
86
|
+
|
|
87
|
+
```ruby
|
|
88
|
+
app = Igniter::Web.application do
|
|
89
|
+
root title: "Operator" do
|
|
90
|
+
main class: "shell" do
|
|
91
|
+
h1 "Operator"
|
|
92
|
+
para "Everything is healthy"
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
page "/projects/:id", title: "Project" do
|
|
97
|
+
main do
|
|
98
|
+
h1 assigns[:project_name]
|
|
99
|
+
para assigns[:status]
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
command "/projects/:id/advance", to: Contracts::AdvanceProject
|
|
104
|
+
stream "/projects/:id/events", to: Projections::ProjectEvents
|
|
105
|
+
end
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Composition starts from screen intent:
|
|
109
|
+
|
|
110
|
+
```ruby
|
|
111
|
+
result = Igniter::Web.compose(name: :plan_review, intent: :human_decision) do
|
|
112
|
+
title "Plan review"
|
|
113
|
+
|
|
114
|
+
show :plan_summary
|
|
115
|
+
show :risk_panel
|
|
116
|
+
compare :current_plan, :proposed_plan
|
|
117
|
+
|
|
118
|
+
action :approve, run: Contracts::ApprovePlan
|
|
119
|
+
chat with: Agents::ProjectLead
|
|
120
|
+
|
|
121
|
+
compose with: :decision_workspace
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
result.success?
|
|
125
|
+
result.graph.zone(:footer)
|
|
126
|
+
Igniter::Web.render(result.graph, context: assigns[:ctx])
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Web applications can also be wrapped as a web-owned mount object:
|
|
130
|
+
|
|
131
|
+
```ruby
|
|
132
|
+
web = Igniter::Web.application do
|
|
133
|
+
root title: "Operator" do
|
|
134
|
+
main { h1 "Operator" }
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
mount = Igniter::Web.mount(:operator, path: "/operator", application: web)
|
|
139
|
+
bound_mount = mount.bind(environment: app_environment)
|
|
140
|
+
bound_mount.rack_app.call("PATH_INFO" => "/operator")
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Mounted pages receive `assigns[:ctx]`:
|
|
144
|
+
|
|
145
|
+
```ruby
|
|
146
|
+
root title: "Operator" do
|
|
147
|
+
main do
|
|
148
|
+
h1 assigns[:ctx].manifest.name
|
|
149
|
+
para assigns[:ctx].route("/events")
|
|
150
|
+
para assigns[:ctx].service(:cluster_status).call
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
command "/incidents/:id/resolve", to: Igniter::Web.contract("Contracts::ResolveIncident")
|
|
155
|
+
stream "/events", to: Igniter::Web.projection("Projections::ClusterEvents")
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Application Capsule Structure
|
|
159
|
+
|
|
160
|
+
`igniter-web` treats web as an optional surface inside an
|
|
161
|
+
`igniter-application` capsule, not as the application itself.
|
|
162
|
+
|
|
163
|
+
If you are starting from application structure, read the user-facing
|
|
164
|
+
[Application Capsules guide](../../docs/guide/application-capsules.md) first.
|
|
165
|
+
This README explains the web-owned half of that boundary.
|
|
166
|
+
|
|
167
|
+
Application layout owns only the top-level `:web` group:
|
|
168
|
+
|
|
169
|
+
- compact capsule profile: `web`
|
|
170
|
+
- standalone / expanded profile: `app/web`
|
|
171
|
+
|
|
172
|
+
Inside that root, `igniter-web` owns this initial surface vocabulary:
|
|
173
|
+
|
|
174
|
+
- `screens` - composed screen specs and agent-managed flows
|
|
175
|
+
- `pages` - routeable page templates
|
|
176
|
+
- `components` - reusable Arbre-backed view components
|
|
177
|
+
- `projections` - read-model and stream targets for live surfaces
|
|
178
|
+
- `webhooks` - external ingress endpoints
|
|
179
|
+
- `assets` - optional web-local static or generated assets
|
|
180
|
+
|
|
181
|
+
This vocabulary is deliberately web-local. Non-web applications remain
|
|
182
|
+
first-class and do not need a `web` directory.
|
|
183
|
+
|
|
184
|
+
```ruby
|
|
185
|
+
blueprint = Igniter::Application.blueprint(
|
|
186
|
+
name: :operator,
|
|
187
|
+
root: "apps/operator",
|
|
188
|
+
layout_profile: :capsule,
|
|
189
|
+
web_surfaces: [:operator_console]
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
structure = Igniter::Web.surface_structure(blueprint)
|
|
193
|
+
structure.web_root # => "web"
|
|
194
|
+
structure.path(:screens) # => "web/screens"
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Surface Exports And Imports
|
|
198
|
+
|
|
199
|
+
`igniter-web` can describe a mounted web surface without asking
|
|
200
|
+
`igniter-application` to understand pages, Arbre, or screen graphs.
|
|
201
|
+
|
|
202
|
+
```ruby
|
|
203
|
+
web = Igniter::Web.application do
|
|
204
|
+
command "/incidents/:id/resolve",
|
|
205
|
+
to: Igniter::Web.contract("Contracts::ResolveIncident")
|
|
206
|
+
|
|
207
|
+
stream "/events",
|
|
208
|
+
to: Igniter::Web.projection("Projections::ClusterEvents")
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
surface = Igniter::Web.surface_manifest(web, name: :operator_console, path: "/operator")
|
|
212
|
+
surface.exports # route/api/screen surface exported by the mount
|
|
213
|
+
surface.imports # contract/service/projection/agent targets required by it
|
|
214
|
+
surface.to_h.fetch(:interactions) # pending asks/actions plus streams/chats
|
|
215
|
+
Igniter::Web.flow_pending_state(surface, current_step: :review)
|
|
216
|
+
surface.to_capsule_export # compatible with ApplicationBlueprint exports:
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
This is intentionally web-owned metadata. The application capsule can export
|
|
220
|
+
the whole web surface as `kind: :web_surface`, while the detailed route/screen
|
|
221
|
+
imports stay nested until a host decides which targets are local and which are
|
|
222
|
+
external requirements.
|
|
223
|
+
|
|
224
|
+
For agent-native flows, `SurfaceManifest` also extracts interaction metadata
|
|
225
|
+
from screen specs:
|
|
226
|
+
|
|
227
|
+
- `pending_inputs` from `ask`
|
|
228
|
+
- `pending_actions` from `action`
|
|
229
|
+
- `streams` from `stream`
|
|
230
|
+
- `chats` from `chat`
|
|
231
|
+
|
|
232
|
+
This remains metadata only. Application-owned flow sessions decide which
|
|
233
|
+
interactions are active for a concrete snapshot.
|
|
234
|
+
|
|
235
|
+
When an application wants to start a flow from a web surface, use
|
|
236
|
+
`Igniter::Web.flow_pending_state(...)` as an explicit boundary adapter. It
|
|
237
|
+
returns plain `pending_inputs` and `pending_actions` hashes suitable for
|
|
238
|
+
`Environment#start_flow`, while preserving the original web interaction under
|
|
239
|
+
metadata for inspection.
|
|
240
|
+
|
|
241
|
+
`Igniter::Web.flow_surface_projection(...)` can also compare a surface manifest
|
|
242
|
+
with application-owned flow declaration and feature-slice metadata. Use it for
|
|
243
|
+
inspection/reporting, not for starting flows or mutating sessions.
|
|
244
|
+
|
|
245
|
+
For application capsule reports, use `Igniter::Web.flow_surface_metadata(...)`
|
|
246
|
+
or `surface.to_surface_metadata(projections: ...)` to pass a plain web-owned
|
|
247
|
+
surface hash into `ApplicationBlueprint#capsule_report(surface_metadata:)`.
|
|
248
|
+
The envelope keeps `kind: :web_surface`, summary `status`, related `flows` /
|
|
249
|
+
`features`, and nested projection hashes on the web side.
|
|
250
|
+
|
|
251
|
+
The same plain surface metadata can be carried into application transfer
|
|
252
|
+
artifacts:
|
|
253
|
+
|
|
254
|
+
```ruby
|
|
255
|
+
surface_metadata = Igniter::Web.surface_metadata(surface)
|
|
256
|
+
|
|
257
|
+
Igniter::Application.handoff_manifest(
|
|
258
|
+
subject: :operator_bundle,
|
|
259
|
+
capsules: [operator],
|
|
260
|
+
mount_intents: [
|
|
261
|
+
{
|
|
262
|
+
capsule: :operator,
|
|
263
|
+
kind: :web,
|
|
264
|
+
at: "/operator",
|
|
265
|
+
metadata: { surface: surface.name }
|
|
266
|
+
}
|
|
267
|
+
],
|
|
268
|
+
surface_metadata: [surface_metadata]
|
|
269
|
+
)
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
This is still a read-only handoff manifest. It does not bind the web mount, call
|
|
273
|
+
Rack, route browser traffic, or make `igniter-application` inspect
|
|
274
|
+
`SurfaceManifest`, screens, pages, or components.
|
|
275
|
+
|
|
276
|
+
For dry-run transfer inventories, keep web-local paths as supplied metadata too:
|
|
277
|
+
|
|
278
|
+
```ruby
|
|
279
|
+
structure = Igniter::Web.surface_structure(operator)
|
|
280
|
+
|
|
281
|
+
Igniter::Application.transfer_inventory(
|
|
282
|
+
operator,
|
|
283
|
+
surface_metadata: [
|
|
284
|
+
{
|
|
285
|
+
name: :operator_console,
|
|
286
|
+
kind: :web_surface,
|
|
287
|
+
path: structure.web_root,
|
|
288
|
+
screens_path: structure.path(:screens)
|
|
289
|
+
}
|
|
290
|
+
]
|
|
291
|
+
)
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
The inventory may report that the top-level application `web` group is missing,
|
|
295
|
+
but it should not inspect `web/screens`, `web/pages`, or other web-local
|
|
296
|
+
subgroups as application-owned structure.
|
|
297
|
+
|
|
298
|
+
For the final read-only decision report before any future transfer/package
|
|
299
|
+
tool, pass the same supplied metadata into transfer readiness:
|
|
300
|
+
|
|
301
|
+
```ruby
|
|
302
|
+
readiness = Igniter::Application.transfer_readiness(
|
|
303
|
+
operator,
|
|
304
|
+
surface_metadata: [
|
|
305
|
+
{
|
|
306
|
+
name: :operator_console,
|
|
307
|
+
kind: :web_surface,
|
|
308
|
+
path: structure.web_root,
|
|
309
|
+
screens_path: structure.path(:screens)
|
|
310
|
+
}
|
|
311
|
+
]
|
|
312
|
+
)
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
Readiness may count supplied web surfaces and warn when a declared surface has
|
|
316
|
+
no supplied metadata. It still treats the metadata as an opaque hash and does
|
|
317
|
+
not load `igniter-web`, inspect screen graphs, bind mounts, or route browser
|
|
318
|
+
traffic.
|
|
319
|
+
|
|
320
|
+
Bundle plans reuse the same boundary. A future package writer can inspect the
|
|
321
|
+
read-only plan's `surfaces` count and metadata, but the plan still contains only
|
|
322
|
+
supplied hashes:
|
|
323
|
+
|
|
324
|
+
```ruby
|
|
325
|
+
bundle_plan = Igniter::Application.transfer_bundle_plan(
|
|
326
|
+
operator,
|
|
327
|
+
surface_metadata: [
|
|
328
|
+
{
|
|
329
|
+
name: :operator_console,
|
|
330
|
+
kind: :web_surface,
|
|
331
|
+
path: structure.web_root,
|
|
332
|
+
screens_path: structure.path(:screens)
|
|
333
|
+
}
|
|
334
|
+
]
|
|
335
|
+
)
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
This is planning metadata, not an archive writer, mount binder, route
|
|
339
|
+
activation step, or web screen/component inspection pass.
|
|
340
|
+
|
|
341
|
+
If an application writes an explicit transfer bundle artifact from that plan,
|
|
342
|
+
the artifact metadata manifest preserves the same supplied surface hashes inside
|
|
343
|
+
the serialized plan:
|
|
344
|
+
|
|
345
|
+
```ruby
|
|
346
|
+
result = Igniter::Application.write_transfer_bundle(
|
|
347
|
+
bundle_plan,
|
|
348
|
+
output: "tmp/operator_bundle"
|
|
349
|
+
)
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
The writer copies only files already listed by the plan and writes
|
|
353
|
+
`igniter-transfer-bundle.json`. Web metadata is embedded for review; it is not
|
|
354
|
+
used to discover web-local files, load `SurfaceManifest`, bind mounts, or
|
|
355
|
+
activate routes.
|
|
356
|
+
|
|
357
|
+
Bundle verification reads that artifact metadata back and counts supplied
|
|
358
|
+
surfaces from the serialized plan:
|
|
359
|
+
|
|
360
|
+
```ruby
|
|
361
|
+
verification = Igniter::Application.verify_transfer_bundle("tmp/operator_bundle")
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
This readback step does not require `igniter-web`. It verifies the artifact
|
|
365
|
+
shape and file list only; web surface hashes remain opaque review metadata.
|
|
366
|
+
|
|
367
|
+
Destination intake planning keeps the same rule. The receiving-side plan may
|
|
368
|
+
report the supplied surface count while previewing artifact files against an
|
|
369
|
+
explicit destination root:
|
|
370
|
+
|
|
371
|
+
```ruby
|
|
372
|
+
intake = Igniter::Application.transfer_intake_plan(
|
|
373
|
+
verification,
|
|
374
|
+
destination_root: "apps/incoming"
|
|
375
|
+
)
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
The intake plan is read-only. It does not create web directories, copy bundle
|
|
379
|
+
contents, install surfaces, bind mounts, activate routes, or inspect web-local
|
|
380
|
+
screen/component structure.
|
|
381
|
+
|
|
382
|
+
Apply planning stays read-only too. It converts accepted intake data into
|
|
383
|
+
operation hashes for future review:
|
|
384
|
+
|
|
385
|
+
```ruby
|
|
386
|
+
apply_plan = Igniter::Application.transfer_apply_plan(intake)
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
The operation list may include directory and file-copy review steps, plus
|
|
390
|
+
manual host wiring steps, but it does not execute them. Supplied web surfaces
|
|
391
|
+
remain a count on the plan; there is no web mount binding, route activation, or
|
|
392
|
+
screen/component inspection.
|
|
393
|
+
|
|
394
|
+
Apply execution is the first mutable transfer boundary and is still explicit:
|
|
395
|
+
|
|
396
|
+
```ruby
|
|
397
|
+
dry_run = Igniter::Application.apply_transfer_plan(apply_plan)
|
|
398
|
+
committed = Igniter::Application.apply_transfer_plan(apply_plan, commit: true)
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
Dry-run is the default. Commit mode may create reviewed directories and copy
|
|
402
|
+
reviewed files, but it still treats web surface metadata as an opaque count and
|
|
403
|
+
does not install surfaces, bind mounts, activate routes, or inspect web
|
|
404
|
+
internals.
|
|
405
|
+
|
|
406
|
+
Post-apply verification is the read-only closure step after an explicit commit:
|
|
407
|
+
|
|
408
|
+
```ruby
|
|
409
|
+
report = Igniter::Application.verify_applied_transfer(
|
|
410
|
+
committed,
|
|
411
|
+
apply_plan: apply_plan
|
|
412
|
+
)
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
The report verifies only reviewed destination directories/files and artifact
|
|
416
|
+
sources. It may preserve the supplied web surface count from the committed
|
|
417
|
+
result, but it does not require `igniter-web`, inspect web metadata, install
|
|
418
|
+
surfaces, bind mounts, activate routes, or repair destination state.
|
|
419
|
+
|
|
420
|
+
Transfer receipts are the audit/closure summary over already-built reports:
|
|
421
|
+
|
|
422
|
+
```ruby
|
|
423
|
+
receipt = Igniter::Application.transfer_receipt(
|
|
424
|
+
report,
|
|
425
|
+
apply_result: committed,
|
|
426
|
+
apply_plan: apply_plan
|
|
427
|
+
)
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
The receipt can carry the same supplied web surface count forward for humans,
|
|
431
|
+
agents, and CI logs. It remains application-owned reporting only; it does not
|
|
432
|
+
load web classes, interpret surface metadata, mount routes, activate browser
|
|
433
|
+
traffic, or mutate destination files.
|
|
434
|
+
|
|
435
|
+
For the complete public transfer path, start with
|
|
436
|
+
`examples/application/capsule_transfer_end_to_end.rb`. It demonstrates the
|
|
437
|
+
application-owned chain from capsule declaration to receipt while keeping web
|
|
438
|
+
surface metadata as supplied hashes. The example does not activate web routes,
|
|
439
|
+
bind mounts, inspect screens/components, or require `igniter-web`.
|
|
440
|
+
|
|
441
|
+
After a transfer receipt, host integration is still a separate review boundary.
|
|
442
|
+
Mount intents describe where a host might bind an interaction surface later;
|
|
443
|
+
they are not `Igniter::Web.mount(...)` calls, Rack traffic, route activation, or
|
|
444
|
+
screen/component inspection. A web-capable host can use `igniter-web` to turn
|
|
445
|
+
reviewed metadata into a real mount, but non-web capsules and application-owned
|
|
446
|
+
transfer reports never require this package.
|
|
447
|
+
|
|
448
|
+
Host activation readiness is the read-only preflight over those host decisions:
|
|
449
|
+
|
|
450
|
+
```ruby
|
|
451
|
+
readiness = Igniter::Application.host_activation_readiness(
|
|
452
|
+
receipt,
|
|
453
|
+
handoff_manifest: manifest,
|
|
454
|
+
mount_decisions: [
|
|
455
|
+
{ capsule: :operator, kind: :web, at: "/operator", status: :accepted }
|
|
456
|
+
],
|
|
457
|
+
surface_metadata: [{ name: :operator_console, kind: :web_surface }]
|
|
458
|
+
)
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
For web surfaces, readiness confirms only that the host has reviewed supplied
|
|
462
|
+
mount intents and surface metadata. It still does not instantiate web mounts,
|
|
463
|
+
bind routes, call Rack, inspect screens/components, or require `igniter-web`
|
|
464
|
+
for non-web capsules.
|
|
465
|
+
|
|
466
|
+
Host activation plans turn accepted readiness into descriptive review
|
|
467
|
+
operations:
|
|
468
|
+
|
|
469
|
+
```ruby
|
|
470
|
+
plan = Igniter::Application.host_activation_plan(readiness)
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
For web-capable capsules, the application-owned plan may include
|
|
474
|
+
`review_mount_intent` operations. These are still not executable web operations:
|
|
475
|
+
they do not bind `Igniter::Web::ApplicationWebMount`, activate routes, call
|
|
476
|
+
Rack, render screens, or inspect components. A future host/web activation step
|
|
477
|
+
must consume the reviewed intent explicitly.
|
|
478
|
+
|
|
479
|
+
Activation plan verification reads that descriptive plan back:
|
|
480
|
+
|
|
481
|
+
```ruby
|
|
482
|
+
verification = Igniter::Application.verify_host_activation_plan(plan)
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
For web-related operations, verification accepts only `review_mount_intent`
|
|
486
|
+
entries with supplied intent metadata. It does not require `igniter-web`, bind
|
|
487
|
+
an `ApplicationWebMount`, activate routes, call Rack, render screens, inspect
|
|
488
|
+
components, or turn the reviewed mount intent into browser traffic. Any future
|
|
489
|
+
web-capable activation adapter must still consume the verified metadata through
|
|
490
|
+
an explicit web-owned boundary.
|
|
491
|
+
|
|
492
|
+
Future web activation is therefore a separate proposal, not an implied next
|
|
493
|
+
step. Before `igniter-web` should offer a mutable adapter for
|
|
494
|
+
`review_mount_intent`, that adapter would need explicit evidence:
|
|
495
|
+
|
|
496
|
+
- a valid activation plan verification with no findings
|
|
497
|
+
- an explicit host/web caller decision, similar to `commit: true`
|
|
498
|
+
- the reviewed `review_mount_intent` operation and original intent metadata
|
|
499
|
+
- an explicit `Igniter::Web::ApplicationWebMount` or equivalent web-owned mount
|
|
500
|
+
object supplied by the caller
|
|
501
|
+
- an explicit host target or rack/router adapter supplied by the caller
|
|
502
|
+
- a receipt/report shape for dry-run vs committed mount activation
|
|
503
|
+
|
|
504
|
+
Even then, the application layer should only hand off verified metadata. It
|
|
505
|
+
should not discover web surfaces, create mounts, bind routes, call Rack, render
|
|
506
|
+
screens, inspect component graphs, or send browser traffic on behalf of web.
|
|
507
|
+
|
|
508
|
+
Application dry-run activation reporting keeps that same boundary:
|
|
509
|
+
|
|
510
|
+
```ruby
|
|
511
|
+
dry_run = Igniter::Application.dry_run_host_activation(
|
|
512
|
+
verification,
|
|
513
|
+
host_target: "Host::OperatorRuntime"
|
|
514
|
+
)
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
For `review_mount_intent`, the dry-run report may include a skipped operation
|
|
518
|
+
with a web/host-owned mount reason. That is still evidence for a future adapter,
|
|
519
|
+
not mount activation. The dry-run report does not create or bind
|
|
520
|
+
`ApplicationWebMount`, activate routes, render screens, call Rack, inspect
|
|
521
|
+
component graphs, or send browser traffic.
|
|
522
|
+
|
|
523
|
+
Commit readiness is also only a read-only evidence gate:
|
|
524
|
+
|
|
525
|
+
```ruby
|
|
526
|
+
commit_readiness = Igniter::Application.host_activation_commit_readiness(
|
|
527
|
+
dry_run,
|
|
528
|
+
provided_adapters: [
|
|
529
|
+
{ name: :web_mount_adapter_evidence, kind: :web_or_host_mount_evidence }
|
|
530
|
+
]
|
|
531
|
+
)
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
For web mount intents, `web_mount_adapter_evidence` means a caller has supplied
|
|
535
|
+
explicit acknowledgement or future adapter evidence for the skipped
|
|
536
|
+
`review_mount_intent` operation. It is not an `ApplicationWebMount`, router, or
|
|
537
|
+
Rack adapter, and commit readiness must not discover, instantiate, bind, or
|
|
538
|
+
call one. A future mutable web activation track would still need to define the
|
|
539
|
+
actual web-owned adapter and its receipt before any mount can become live.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Igniter
|
|
4
|
+
module Web
|
|
5
|
+
class Api
|
|
6
|
+
Endpoint = Struct.new(:kind, :verb, :path, :target, :metadata, keyword_init: true)
|
|
7
|
+
|
|
8
|
+
attr_reader :endpoints
|
|
9
|
+
|
|
10
|
+
def initialize
|
|
11
|
+
@endpoints = []
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def draw(&block)
|
|
15
|
+
instance_eval(&block) if block
|
|
16
|
+
self
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def command(path, to:, via: :post, **metadata)
|
|
20
|
+
register_endpoint(:command, path, to, via, metadata)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def query(path, to:, via: :get, **metadata)
|
|
24
|
+
register_endpoint(:query, path, to, via, metadata)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def stream(path, to:, via: :get, **metadata)
|
|
28
|
+
register_endpoint(:stream, path, to, via, metadata)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def webhook(path, to:, via: :post, **metadata)
|
|
32
|
+
register_endpoint(:webhook, path, to, via, metadata)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def register_endpoint(kind, path, target, verb, metadata)
|
|
38
|
+
@endpoints << Endpoint.new(
|
|
39
|
+
kind: kind,
|
|
40
|
+
verb: verb.to_sym,
|
|
41
|
+
path: path,
|
|
42
|
+
target: target,
|
|
43
|
+
metadata: metadata.freeze
|
|
44
|
+
)
|
|
45
|
+
self
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Igniter
|
|
4
|
+
module Web
|
|
5
|
+
class Application
|
|
6
|
+
Route = Struct.new(:verb, :path, :target, :metadata, keyword_init: true)
|
|
7
|
+
Mount = Struct.new(:path, :target, :metadata, keyword_init: true)
|
|
8
|
+
|
|
9
|
+
attr_reader :routes, :mounts, :api_surface, :pages, :screens
|
|
10
|
+
|
|
11
|
+
def initialize(api: nil)
|
|
12
|
+
@routes = []
|
|
13
|
+
@mounts = []
|
|
14
|
+
@api_surface = api
|
|
15
|
+
@pages = []
|
|
16
|
+
@screens = []
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def draw(&block)
|
|
20
|
+
instance_eval(&block) if block
|
|
21
|
+
self
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
%i[get post put patch delete].each do |verb|
|
|
25
|
+
define_method(verb) do |path, to:, **metadata|
|
|
26
|
+
@routes << Route.new(
|
|
27
|
+
verb: verb,
|
|
28
|
+
path: path,
|
|
29
|
+
target: to,
|
|
30
|
+
metadata: metadata.freeze
|
|
31
|
+
)
|
|
32
|
+
self
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def mount(path, to:, **metadata)
|
|
37
|
+
@mounts << Mount.new(path: path, target: to, metadata: metadata.freeze)
|
|
38
|
+
self
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def root(to: nil, title: nil, **metadata, &block)
|
|
42
|
+
page("/", to: to, title: title, **metadata, &block)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def page(path, to: nil, title: nil, **metadata, &block)
|
|
46
|
+
target = if to
|
|
47
|
+
to
|
|
48
|
+
elsif block
|
|
49
|
+
Page.define(title: title, &block)
|
|
50
|
+
else
|
|
51
|
+
raise ArgumentError, "page requires either `to:` or a block"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
@pages << target if target.is_a?(Class) && target <= Page
|
|
55
|
+
get(path, to: target, page: true, title: title, **metadata)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def screen(name, intent: nil, compose: true, **options, &block)
|
|
59
|
+
spec = ScreenSpec.build(name, intent: intent, **options, &block)
|
|
60
|
+
@screens << (compose ? Composer.compose(spec) : spec)
|
|
61
|
+
self
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def screen_route(path, screen_name, **metadata)
|
|
65
|
+
screen = @screens.find do |candidate|
|
|
66
|
+
candidate.respond_to?(:screen) && candidate.screen.name == screen_name.to_sym
|
|
67
|
+
end
|
|
68
|
+
raise ArgumentError, "unknown composed screen: #{screen_name.inspect}" unless screen
|
|
69
|
+
|
|
70
|
+
get(path, to: screen, screen: true, **metadata)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def api(&block)
|
|
74
|
+
@api_surface ||= Api.new
|
|
75
|
+
@api_surface.draw(&block)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def command(...)
|
|
79
|
+
api.command(...)
|
|
80
|
+
self
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def query(...)
|
|
84
|
+
api.query(...)
|
|
85
|
+
self
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def stream(...)
|
|
89
|
+
api.stream(...)
|
|
90
|
+
self
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def webhook(...)
|
|
94
|
+
api.webhook(...)
|
|
95
|
+
self
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|