metaobjects 0.9.0__tar.gz → 0.10.0__tar.gz
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.
- {metaobjects-0.9.0 → metaobjects-0.10.0}/PKG-INFO +1 -1
- {metaobjects-0.9.0 → metaobjects-0.10.0}/pyproject.toml +16 -1
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-authoring/SKILL.md +15 -8
- metaobjects-0.10.0/src/metaobjects/apidocs/__init__.py +91 -0
- metaobjects-0.10.0/src/metaobjects/apidocs/api_model.py +111 -0
- metaobjects-0.10.0/src/metaobjects/apidocs/builder.py +389 -0
- metaobjects-0.10.0/src/metaobjects/apidocs/naming.py +123 -0
- metaobjects-0.10.0/src/metaobjects/apidocs/paths.py +75 -0
- metaobjects-0.10.0/src/metaobjects/apidocs/renderer.py +185 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/cli.py +106 -0
- metaobjects-0.10.0/src/metaobjects/codegen/config.py +19 -0
- metaobjects-0.10.0/src/metaobjects/codegen/constants.py +28 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/format.py +12 -1
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/entity_model.py +96 -24
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/extractor_generator.py +1 -10
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/filter_allowlist_generator.py +4 -18
- metaobjects-0.10.0/src/metaobjects/codegen/generators/fr019_shared_enum.py +135 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/output_parser_generator.py +1 -12
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/output_prompt_generator.py +1 -11
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/payload_vo_generator.py +42 -24
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/render_helper_generator.py +6 -13
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/router_generator.py +6 -30
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/runner.py +20 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/type_map.py +4 -1
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/core_types.py +103 -221
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/documentation/doc_constants.py +2 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/documentation/doc_schema.py +2 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/errors.py +52 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/validate_source_parameter_ref.py +6 -1
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/validation_passes.py +108 -2
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/field/field_constants.py +6 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/object/object_constants.py +8 -1
- metaobjects-0.10.0/src/metaobjects/meta/presentation/ui/ui_provider.py +53 -0
- metaobjects-0.10.0/src/metaobjects/meta/provider_extends.py +80 -0
- metaobjects-0.10.0/src/metaobjects/meta/template/prompt_provider.py +63 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/template/template_constants.py +1 -1
- metaobjects-0.10.0/src/metaobjects/naming_refs.py +141 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/parser.py +45 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/provider.py +12 -1
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/registry.py +40 -1
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/registry_manifest.py +122 -13
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/__init__.py +595 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/attr.json +59 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/db.json +43 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/documentation.json +78 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/field.json +139 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/identity.json +33 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/layout.json +15 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/object.json +47 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/origin.json +38 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/prompt.json +76 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/relationship.json +65 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/source.json +16 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/template.json +29 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/ui.json +33 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/validator.json +56 -0
- metaobjects-0.10.0/src/metaobjects/spec_metamodel/view.json +75 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/super_resolve.py +70 -2
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/yaml_desugar.py +77 -9
- metaobjects-0.10.0/tests/codegen/test_api_docs_builder.py +88 -0
- metaobjects-0.10.0/tests/codegen/test_api_docs_paths.py +59 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_entity_model.py +49 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_enum_conformance.py +11 -7
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_format.py +11 -0
- metaobjects-0.10.0/tests/codegen/test_fr019_shared_provided_conformance.py +99 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_payload_vo_generator.py +29 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_render_helper_generator.py +22 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_runner.py +48 -2
- metaobjects-0.10.0/tests/conformance/conformance-expected-failures.json +25 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/conformance_adapter.py +14 -3
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/fixture_discovery.py +16 -3
- metaobjects-0.10.0/tests/conformance/test_api_docs_cross_port_conformance.py +98 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_extract_conformance.py +1 -1
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_fr010_loader_attrs.py +5 -2
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_fr011_attrs.py +5 -2
- metaobjects-0.10.0/tests/conformance/test_spec_metamodel_embed.py +59 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/test_output_prompt_conformance.py +1 -1
- metaobjects-0.10.0/tests/test_api_docs_accuracy.py +234 -0
- metaobjects-0.10.0/tests/unit/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_common_attrs.py +5 -4
- metaobjects-0.10.0/tests/unit/test_strict_child_placement.py +73 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_template_toolcall.py +5 -3
- metaobjects-0.10.0/tests/unit/test_template_wrong_subtype_attrs.py +84 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_validation_attr_schema.py +5 -2
- {metaobjects-0.9.0 → metaobjects-0.10.0}/uv.lock +8 -2
- metaobjects-0.9.0/src/metaobjects/codegen/config.py +0 -11
- metaobjects-0.9.0/src/metaobjects/codegen/constants.py +0 -13
- metaobjects-0.9.0/src/metaobjects/meta/template/template_provider.py +0 -43
- metaobjects-0.9.0/tests/conformance/conformance-expected-failures.json +0 -5
- {metaobjects-0.9.0 → metaobjects-0.10.0}/.gitignore +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/LICENSE +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/README.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/hatch_build.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/README.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/servers/csharp.meta.json +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/servers/java.meta.json +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/servers/kotlin.meta.json +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/servers/python.meta.json +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/servers/typescript.meta.json +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/SKILL.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/references/csharp.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/references/java.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/references/kotlin.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/references/typescript.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/SKILL.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/csharp.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/java.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/kotlin.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/python.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/typescript.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/SKILL.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/java.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/kotlin.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/react.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/tanstack.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/typescript.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-verify/SKILL.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/skills/metaobjects-verify/references/migration.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/_content/templates/always-on.md.mustache +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/assemble.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/content_root.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/scaffold.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/agent_context/types.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/attr_class_map.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/KNOWN_GAPS.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/extract_delegate_emitter.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/extract_schema_emitter.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/fr010_field_mapping.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generator.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generator_registry.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/m2m_codegen.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/template_generator.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/tph_plan.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/generators/trace_helper_generator.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/instance_artifacts.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/output_format_spec_emitter.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/overwrite_policy.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/runtime/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/codegen/runtime/filter_parser.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/datatype.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/documentation/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/documentation/doc_provider.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/merge.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/meta_data_loader.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/sources/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/sources/directory_source.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/sources/file_source.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/sources/meta_data_source.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/sources/uri_source.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/validate_discriminator.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/validate_field_readonly.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/loader/validate_source_physical_names.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/attr/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/attr/attr_constants.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/attr/meta_attr.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/field/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/field/meta_field.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/identity/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/identity/identity_constants.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/identity/meta_identity.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/object/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/object/meta_object.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/object/meta_object_aware.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/object/object_class_registry.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/object/object_extract.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/object/value_object.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/relationship/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/relationship/derive_m2m_fields.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/relationship/meta_relationship.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/relationship/relationship_constants.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/validator/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/core/validator/validator_constants.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/meta_data.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/meta_root.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/persistence/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/persistence/db/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/persistence/db/db_constants.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/persistence/db/db_provider.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/persistence/origin/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/persistence/origin/meta_origin.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/persistence/origin/origin_constants.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/persistence/source/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/persistence/source/meta_source.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/persistence/source/source_constants.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/presentation/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/presentation/layout/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/presentation/layout/layout_constants.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/presentation/layout/meta_layout.py +0 -0
- {metaobjects-0.9.0/src/metaobjects/meta/presentation/view → metaobjects-0.10.0/src/metaobjects/meta/presentation/ui}/__init__.py +0 -0
- {metaobjects-0.9.0/src/metaobjects/meta/template → metaobjects-0.10.0/src/metaobjects/meta/presentation/view}/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/presentation/view/meta_view.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/presentation/view/view_constants.py +0 -0
- {metaobjects-0.9.0/src/metaobjects/shared → metaobjects-0.10.0/src/metaobjects/meta/template}/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/meta/template/meta_template.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/parser_yaml.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/py.typed +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/email_document.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/escapers.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/extract/KNOWN_GAPS.md +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/extract/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/extract/coerce.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/extract/extract.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/extract/extract_map.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/extract/json_forgiving_reader.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/extract/locate.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/extract/normalize.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/extract/strip.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/extract/types.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/extract/xml_forgiving_reader.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/filesystem_provider.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/prompt/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/prompt/output_format_renderer.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/prompt/output_format_spec.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/prompt/prompt_field.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/prompt/prompt_overrides.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/prompt/prompt_style.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/renderer.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/render/verify.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/runtime/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/runtime/llm_recorder.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/runtime/n2m_resolver.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/runtime/object_manager.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/runtime/tph.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/serializer_json.py +0 -0
- {metaobjects-0.9.0/tests → metaobjects-0.10.0/src/metaobjects/shared}/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/shared/base_types.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/shared/separators.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/shared/structural.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/source/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/source/error_source.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/source/json_path.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/source/semantic_diff.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/src/metaobjects/source/yaml_positions.py +0 -0
- {metaobjects-0.9.0/tests/codegen → metaobjects-0.10.0/tests}/__init__.py +0 -0
- {metaobjects-0.9.0/tests/conformance → metaobjects-0.10.0/tests/codegen}/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/golden/extends/expected/BaseEntity.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/golden/extends/expected/Program.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/golden/extends/meta.json +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/golden/nested-array/expected/AuthorBrief.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/golden/nested-array/expected/PostBrief.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/golden/nested-array/meta.json +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/golden/scalars/expected/Metric.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/golden/scalars/expected/Report.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/golden/scalars/meta.json +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/golden/vanilla/expected/Subscriber.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/golden/vanilla/meta.json +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_abstract_conformance.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_cli.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_cli_registry.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_cli_staleness_nudge.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_cli_verify_subverbs.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_constants_config.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_extractor_generator.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_filter_allowlist_generator.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_fr010_output_codegen.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_generator.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_generator_extension_seams.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_golden.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_inheritance_conformance.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_instance_artifacts.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_m2m_codegen.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_output_parser_generator.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_overwrite_policy.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_render_helper_conformance.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_router_generator.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_template_generator.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_tph_codegen.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_trace_helper_generator.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_type_map.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/codegen/test_validation_conformance.py +0 -0
- {metaobjects-0.9.0/tests/integration → metaobjects-0.10.0/tests/conformance}/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/capabilities.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/corpus.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/expected_failures.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/navigator.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_agent_context_conformance.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_conformance.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_extract_object_verdict.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_generator_registry_conformance.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_object_model_conformance.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_registry_conformance.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_runner_hardfail.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_strict_attr_load.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_template_generator_conformance.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/test_yaml_conformance.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/conformance/yaml-conformance-expected-failures.json +0 -0
- {metaobjects-0.9.0/tests/render → metaobjects-0.10.0/tests/integration}/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/api_contract_assertions.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/api_contract_m2m_server.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/api_contract_server.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/generated_m2m_app.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/generated_router_app.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/generated_tph_app.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/meta_ai_trace.yaml +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/normalization.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/postgres_container.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/query_runner.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/scenarios.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/test_api_contract.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/test_api_contract_generated.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/test_api_contract_m2m.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/test_api_contract_m2m_generated.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/test_api_contract_tph_generated.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/test_llm_call_trace.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/test_normalization.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/test_query_scenarios.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/integration/test_runtime_return_types.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/open_closed_proof_test.py +0 -0
- {metaobjects-0.9.0/tests/render/extract → metaobjects-0.10.0/tests/render}/__init__.py +0 -0
- {metaobjects-0.9.0/tests/render/prompt → metaobjects-0.10.0/tests/render/extract}/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/extract/test_coerce.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/extract/test_extract.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/extract/test_extract_map.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/extract/test_json_forgiving_reader.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/extract/test_locate.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/extract/test_model.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/extract/test_normalize.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/extract/test_strip.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/extract/test_xml_forgiving_reader.py +0 -0
- {metaobjects-0.9.0/tests/source → metaobjects-0.10.0/tests/render/prompt}/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/prompt/test_output_format_renderer.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/test_email_document.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/test_filesystem_provider.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/test_output_format_renderer_nested.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/test_render_conformance.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/test_render_max_chars.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/test_verify.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/render/test_verify_conformance.py +0 -0
- {metaobjects-0.9.0/tests/unit → metaobjects-0.10.0/tests/source}/__init__.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/source/test_fr5c_merge_attribution.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/source/test_fr5d_reference_resolution.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/source/test_fr5e_database_source_shape.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/source/test_json_path.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/source/test_semantic_diff.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/source/test_source_on_node.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/source/test_yaml_positions.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_agent_context_staleness.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_capabilities.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_core_types.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_effective_package.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_errors.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_field_enum.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_field_uuid_dbcolumntype.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_fr016_source_name_and_kind_aliases.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_llm_recorder.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_loader.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_loader_bom.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_loader_class.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_merge.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_meta_attr.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_meta_data.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_meta_source.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_module_shortcuts.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_n2m_resolver.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_object_manager_uuid_coercion.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_one_primary_source.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_parser.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_parser_yaml.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_provider.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_provider_extension.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_registry.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_registry_completeness.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_registry_extend.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_registry_sealed.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_relationship_referential_actions.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_resolution_key.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_runtime_resolution_key_binding.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_serializer.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_shared_constants.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_smoke.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_sources.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_super_resolve.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_validation_filter_values.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_validation_origin_paths.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_validation_sort_field.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_validation_warnings.py +0 -0
- {metaobjects-0.9.0 → metaobjects-0.10.0}/tests/unit/test_yaml_desugar.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: metaobjects
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.0
|
|
4
4
|
Summary: Cross-language metadata standard: declare typed entities once, generate idiomatic drift-checked code across languages — Python port.
|
|
5
5
|
Project-URL: Homepage, https://metaobjects.dev
|
|
6
6
|
Project-URL: Repository, https://github.com/metaobjectsdev/metaobjects
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "metaobjects"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.10.0"
|
|
4
4
|
description = "Cross-language metadata standard: declare typed entities once, generate idiomatic drift-checked code across languages — Python port."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -75,6 +75,12 @@ exclude = ["**/KNOWN_GAPS.md"]
|
|
|
75
75
|
# falls back to walking up to the monorepo agent-context/.
|
|
76
76
|
[tool.hatch.build.hooks.custom]
|
|
77
77
|
|
|
78
|
+
# FR-033 — the 15 shared spec/metamodel/*.json files are COMMITTED copies under
|
|
79
|
+
# src/metaobjects/spec_metamodel/ (not build-time-generated), so hatchling's default
|
|
80
|
+
# package inclusion ships them in both the sdist and the wheel (read via
|
|
81
|
+
# importlib.resources, AOT-safe). A byte-identity gate
|
|
82
|
+
# (tests/conformance/test_spec_metamodel_embed.py) keeps the copies from drifting
|
|
83
|
+
# from the repo-root spec/metamodel/ source.
|
|
78
84
|
[tool.hatch.build]
|
|
79
85
|
artifacts = ["src/metaobjects/agent_context/_content/**"]
|
|
80
86
|
|
|
@@ -93,4 +99,13 @@ exclude = ["tests/codegen/golden/"]
|
|
|
93
99
|
[dependency-groups]
|
|
94
100
|
dev = [
|
|
95
101
|
"pytest>=9.0.3",
|
|
102
|
+
# `uv run` installs THIS group (PEP 735), not [project.optional-dependencies].
|
|
103
|
+
# The validator-parity corpus (tests/codegen/test_validation_conformance.py)
|
|
104
|
+
# imports pydantic to exercise the generated Pydantic models, so it must be here
|
|
105
|
+
# or the CI `uv run pytest` collection fails with ModuleNotFoundError.
|
|
106
|
+
"pydantic>=2",
|
|
107
|
+
# ruff is the Python codegen format pass (src/metaobjects/codegen/format.py); the
|
|
108
|
+
# cli-registry corpus runs codegen, so without ruff in the group `uv run pytest`
|
|
109
|
+
# fails at format time with "No module named ruff".
|
|
110
|
+
"ruff>=0.6",
|
|
96
111
|
]
|
|
@@ -34,7 +34,7 @@ subtype — there is **no** separate `subType` body key.
|
|
|
34
34
|
{ "object.entity": { "name": "User" } }
|
|
35
35
|
{ "field.string": { "name": "email", "@required": true } }
|
|
36
36
|
{ "field.enum": { "name": "status", "@values": ["OPEN", "CLOSED"] } }
|
|
37
|
-
{ "identity.primary": { "@fields": ["id"] } }
|
|
37
|
+
{ "identity.primary": { "name": "id", "@fields": ["id"] } }
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
A complete entity in canonical JSON:
|
|
@@ -52,7 +52,7 @@ A complete entity in canonical JSON:
|
|
|
52
52
|
{ "field.long": { "name": "id" } },
|
|
53
53
|
{ "field.string": { "name": "name", "@required": true, "@maxLength": 200 } },
|
|
54
54
|
{ "field.string": { "name": "bio", "@maxLength": 2000 } },
|
|
55
|
-
{ "identity.primary": { "@fields": ["id"], "@generation": "increment" } }
|
|
55
|
+
{ "identity.primary": { "name": "id", "@fields": ["id"], "@generation": "increment" } }
|
|
56
56
|
]
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -74,7 +74,7 @@ metadata:
|
|
|
74
74
|
- field.long: { name: id }
|
|
75
75
|
- field.string: { name: name, required: true, maxLength: 200 }
|
|
76
76
|
- field.string: { name: bio, maxLength: 2000 }
|
|
77
|
-
- identity.primary: { fields: id, generation: increment }
|
|
77
|
+
- identity.primary: { name: id, fields: id, generation: increment }
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
## Reserved structural keys vs. attributes
|
|
@@ -206,8 +206,8 @@ reference for navigation/typing/codegen only. Referential actions
|
|
|
206
206
|
`relationship.*` node (see Relationships below).
|
|
207
207
|
|
|
208
208
|
```json
|
|
209
|
-
{ "identity.primary": { "@fields": ["id"], "@generation": "increment" } }
|
|
210
|
-
{ "identity.secondary": { "@fields": ["email"] } }
|
|
209
|
+
{ "identity.primary": { "name": "id", "@fields": ["id"], "@generation": "increment" } }
|
|
210
|
+
{ "identity.secondary": { "name": "byEmail", "@fields": ["email"] } }
|
|
211
211
|
{ "identity.reference": { "name": "fkAuthor", "@fields": ["authorId"], "@references": "Author", "@enforce": true } }
|
|
212
212
|
```
|
|
213
213
|
|
|
@@ -251,8 +251,15 @@ each with a `@role`, exactly one `primary`.
|
|
|
251
251
|
{ "source.rdb": { "@kind": "view", "@table": "v_author", "@schema": "blog" } }
|
|
252
252
|
```
|
|
253
253
|
|
|
254
|
-
|
|
255
|
-
|
|
254
|
+
**An entity's PRIMARY source must be writable** (`table`) — read-only kinds are
|
|
255
|
+
legal only in non-primary roles (e.g. table `primary` + view `replica` for
|
|
256
|
+
read-through). A derived read model over a view/proc is an **`object.projection`**
|
|
257
|
+
(FR-024): its fields `extends` entity fields (`extends: "Author.id"` — dotted
|
|
258
|
+
child traversal, package only on the root segment) and/or carry `origin.*`
|
|
259
|
+
children (`passthrough` / `aggregate` / `collection`) declaring assembly; its
|
|
260
|
+
identity passes through via `extends` (`identity.primary: { name: id, extends:
|
|
261
|
+
"Author.id" }`); it is read-only by construction and the declared field set IS
|
|
262
|
+
the exposure (fail-closed).
|
|
256
263
|
|
|
257
264
|
## Abstracts + `extends` (deferred resolution) + `overlay`
|
|
258
265
|
|
|
@@ -275,7 +282,7 @@ change.
|
|
|
275
282
|
children:
|
|
276
283
|
- source.rdb: { table: authors }
|
|
277
284
|
- field.string: { name: name, required: true }
|
|
278
|
-
- identity.primary: { fields: id }
|
|
285
|
+
- identity.primary: { name: id, fields: id }
|
|
279
286
|
```
|
|
280
287
|
|
|
281
288
|
Resolution facts:
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"""Python native SDK / API-reference docs (the ``api/python`` surface).
|
|
2
|
+
|
|
3
|
+
Tier-1, idiomatic per-language reference for the generated Python SDK (Pydantic
|
|
4
|
+
model / FastAPI routes / repository ``Protocol`` data-access / validation /
|
|
5
|
+
extractor / render helper / payload / output-format prompt / output parser /
|
|
6
|
+
filter allowlist). Accurate-by-construction: every documented symbol name comes
|
|
7
|
+
from the :mod:`metaobjects.apidocs.naming` seam — the SAME seam the real
|
|
8
|
+
generators delegate to — so docs can never claim a name the generators do not
|
|
9
|
+
emit. Distinct from the model docs (Tier-2, neutral, TS-owned). See
|
|
10
|
+
``docs/superpowers/specs/2026-06-13-cross-port-sdk-docs-conformance-design.md``.
|
|
11
|
+
|
|
12
|
+
The builder / renderer symbols are exposed lazily (via :pep:`562` module
|
|
13
|
+
``__getattr__``) so that a generator importing the lightweight
|
|
14
|
+
:mod:`metaobjects.apidocs.naming` seam does NOT pull in the builder (which imports
|
|
15
|
+
those same generators) — that would be a circular import at module-init time.
|
|
16
|
+
"""
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
from typing import TYPE_CHECKING, Any
|
|
20
|
+
|
|
21
|
+
# Path math is leaf-level (no generator imports) — safe to expose eagerly.
|
|
22
|
+
from metaobjects.apidocs.paths import (
|
|
23
|
+
Layout,
|
|
24
|
+
doc_page_output_path,
|
|
25
|
+
model_cross_href,
|
|
26
|
+
package_to_path,
|
|
27
|
+
surface_cross_href,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
if TYPE_CHECKING: # pragma: no cover - import-time only for type checkers
|
|
31
|
+
from metaobjects.apidocs.api_model import (
|
|
32
|
+
ApiModel,
|
|
33
|
+
ApiSymbol,
|
|
34
|
+
ApiSymbolKind,
|
|
35
|
+
ApiUnit,
|
|
36
|
+
FieldShape,
|
|
37
|
+
UnitExample,
|
|
38
|
+
)
|
|
39
|
+
from metaobjects.apidocs.builder import PythonApiModelBuilder, build_api_model
|
|
40
|
+
from metaobjects.apidocs.renderer import (
|
|
41
|
+
PythonApiDocsRenderer,
|
|
42
|
+
render_agent_api,
|
|
43
|
+
render_index,
|
|
44
|
+
render_unit_page,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# Lazily-resolved exports → their defining submodule.
|
|
48
|
+
_LAZY: dict[str, str] = {
|
|
49
|
+
"ApiModel": "api_model",
|
|
50
|
+
"ApiSymbol": "api_model",
|
|
51
|
+
"ApiSymbolKind": "api_model",
|
|
52
|
+
"ApiUnit": "api_model",
|
|
53
|
+
"FieldShape": "api_model",
|
|
54
|
+
"UnitExample": "api_model",
|
|
55
|
+
"PythonApiModelBuilder": "builder",
|
|
56
|
+
"build_api_model": "builder",
|
|
57
|
+
"PythonApiDocsRenderer": "renderer",
|
|
58
|
+
"render_unit_page": "renderer",
|
|
59
|
+
"render_index": "renderer",
|
|
60
|
+
"render_agent_api": "renderer",
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
__all__ = [
|
|
64
|
+
"ApiModel",
|
|
65
|
+
"ApiSymbol",
|
|
66
|
+
"ApiSymbolKind",
|
|
67
|
+
"ApiUnit",
|
|
68
|
+
"FieldShape",
|
|
69
|
+
"UnitExample",
|
|
70
|
+
"PythonApiModelBuilder",
|
|
71
|
+
"build_api_model",
|
|
72
|
+
"PythonApiDocsRenderer",
|
|
73
|
+
"render_unit_page",
|
|
74
|
+
"render_index",
|
|
75
|
+
"render_agent_api",
|
|
76
|
+
"Layout",
|
|
77
|
+
"doc_page_output_path",
|
|
78
|
+
"model_cross_href",
|
|
79
|
+
"package_to_path",
|
|
80
|
+
"surface_cross_href",
|
|
81
|
+
]
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def __getattr__(name: str) -> Any:
|
|
85
|
+
submodule = _LAZY.get(name)
|
|
86
|
+
if submodule is None:
|
|
87
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
88
|
+
import importlib
|
|
89
|
+
|
|
90
|
+
mod = importlib.import_module(f"{__name__}.{submodule}")
|
|
91
|
+
return getattr(mod, name)
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""The Python native SDK api-surface IR (intermediate representation).
|
|
2
|
+
|
|
3
|
+
Mirrors the Java ``JavaApiModel`` IR (server/java/.../apidocs), the C#
|
|
4
|
+
``CSharpApiModel``, and the TS ``api-model.ts``, idiomatic to the Python
|
|
5
|
+
(Pydantic / FastAPI / ObjectManager) generated surface: Pydantic model /
|
|
6
|
+
``ObjectManager`` data-access / FastAPI routes / validation / extractor /
|
|
7
|
+
render helper / payload model / output-format prompt / output parser / filter
|
|
8
|
+
allowlist.
|
|
9
|
+
|
|
10
|
+
NAMES on every symbol come from the :mod:`metaobjects.apidocs.naming` seam (never
|
|
11
|
+
re-concatenated in the builder), so what this model documents == what the real
|
|
12
|
+
generators emit.
|
|
13
|
+
"""
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from dataclasses import dataclass, field
|
|
17
|
+
from enum import Enum
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ApiSymbolKind(str, Enum):
|
|
21
|
+
"""The generated-category axis a documented symbol belongs to (Python /
|
|
22
|
+
Pydantic + FastAPI flavored)."""
|
|
23
|
+
|
|
24
|
+
#: The Pydantic v2 model class (entity) or value-object model.
|
|
25
|
+
MODEL = "model"
|
|
26
|
+
#: Data access — the consumer-implemented repository ``Protocol`` seam.
|
|
27
|
+
DATA_ACCESS = "data_access"
|
|
28
|
+
#: A FastAPI route (named ``"VERB path"``).
|
|
29
|
+
REST = "rest"
|
|
30
|
+
#: Pydantic field validation on the create/update shape.
|
|
31
|
+
VALIDATION = "validation"
|
|
32
|
+
#: The tolerant + strict extractor for a template payload.
|
|
33
|
+
EXTRACTOR = "extractor"
|
|
34
|
+
#: The typed render helper wrapping the render engine.
|
|
35
|
+
RENDER = "render"
|
|
36
|
+
#: The typed payload model bound to a template.
|
|
37
|
+
PAYLOAD = "payload"
|
|
38
|
+
#: The output-format prompt fragment.
|
|
39
|
+
PROMPT = "prompt"
|
|
40
|
+
#: The output parser (``parse_*``) back into the typed payload.
|
|
41
|
+
OUTPUT_PARSER = "output_parser"
|
|
42
|
+
#: The per-entity sort/filter allowlist.
|
|
43
|
+
FILTER = "filter"
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@dataclass(frozen=True)
|
|
47
|
+
class FieldShape:
|
|
48
|
+
"""A documented field: name + Python type + optionality + an optional note
|
|
49
|
+
(e.g. enum values)."""
|
|
50
|
+
|
|
51
|
+
name: str
|
|
52
|
+
type: str
|
|
53
|
+
optional: bool
|
|
54
|
+
note: str | None = None
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@dataclass(frozen=True)
|
|
58
|
+
class UnitExample:
|
|
59
|
+
"""A worked example for a unit (reserved for later phases; carried for
|
|
60
|
+
cross-port IR parity)."""
|
|
61
|
+
|
|
62
|
+
title: str
|
|
63
|
+
code: str
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@dataclass(frozen=True)
|
|
67
|
+
class ApiSymbol:
|
|
68
|
+
"""One documented symbol of the generated Python SDK surface.
|
|
69
|
+
|
|
70
|
+
:param name: the emitted Python identifier (or ``"VERB path"`` for a REST route).
|
|
71
|
+
:param kind: which generated category this symbol belongs to.
|
|
72
|
+
:param module: the import line / module path the symbol lives in.
|
|
73
|
+
:param signature: a human-readable Python signature line.
|
|
74
|
+
:param usage: a one-line "what you use this for".
|
|
75
|
+
:param returns: the symbol's return surface, or ``None``.
|
|
76
|
+
:param fields: per-field shapes for model/validation/payload symbols (may be empty).
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
name: str
|
|
80
|
+
kind: ApiSymbolKind
|
|
81
|
+
module: str
|
|
82
|
+
signature: str
|
|
83
|
+
usage: str
|
|
84
|
+
returns: str | None = None
|
|
85
|
+
fields: list[FieldShape] = field(default_factory=list)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
@dataclass(frozen=True)
|
|
89
|
+
class ApiUnit:
|
|
90
|
+
"""One documented unit (an entity / value object, or a template) + its symbols.
|
|
91
|
+
|
|
92
|
+
:param node: the unit's short name (the doc-page basename).
|
|
93
|
+
:param package: the unit's metadata package (e.g. ``acme::shop``).
|
|
94
|
+
:param kind: ``"entity"`` | ``"value"`` | ``"template"``.
|
|
95
|
+
:param symbols: the documented symbols, in canonical IR order.
|
|
96
|
+
:param example: an optional unit-level worked example (reserved).
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
node: str
|
|
100
|
+
package: str
|
|
101
|
+
kind: str
|
|
102
|
+
symbols: list[ApiSymbol]
|
|
103
|
+
example: UnitExample | None = None
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
@dataclass(frozen=True)
|
|
107
|
+
class ApiModel:
|
|
108
|
+
"""The full per-project Python SDK api surface IR."""
|
|
109
|
+
|
|
110
|
+
project: str
|
|
111
|
+
units: list[ApiUnit]
|