simplicio-cli 0.16.2__tar.gz → 0.16.3__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.
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/PKG-INFO +19 -13
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/README.md +17 -11
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/pyproject.toml +4 -4
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/__init__.py +1 -1
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/_cache.py +104 -24
- simplicio_cli-0.16.3/simplicio/atomic_execution.py +306 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/cli.py +71 -4
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/_shared.py +3 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/edit.py +111 -3
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/prototype.py +1 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/run.py +186 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/runtime.py +21 -0
- simplicio_cli-0.16.3/simplicio/commands/task.py +132 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/execution_contract.py +21 -0
- simplicio_cli-0.16.3/simplicio/execution_mode.py +603 -0
- simplicio_cli-0.16.3/simplicio/hbp.py +339 -0
- simplicio_cli-0.16.3/simplicio/legacy_json_adapter.py +64 -0
- simplicio_cli-0.16.3/simplicio/local_inference.py +59 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/local_models.py +13 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/memory_store.py +1 -3
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/observability.py +6 -2
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/orchestrator/multi_task.py +3 -3
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/orientation_plan.py +1 -2
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/pipeline.py +307 -20
- simplicio_cli-0.16.3/simplicio/pipeline_integrated.py +351 -0
- simplicio_cli-0.16.3/simplicio/plan_compiler/__init__.py +163 -0
- simplicio_cli-0.16.3/simplicio/plan_compiler/authority.py +336 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/plan_compiler/compat_adapter.py +8 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/plan_compiler/compile_task_spec.py +32 -13
- simplicio_cli-0.16.3/simplicio/plan_compiler/conformance.py +193 -0
- simplicio_cli-0.16.3/simplicio/plan_compiler/effect_sink.py +112 -0
- simplicio_cli-0.16.3/simplicio/plan_compiler/mapper_context.py +696 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/plan_compiler/models.py +42 -38
- simplicio_cli-0.16.3/simplicio/plan_compiler/runtime_effect_sink.py +681 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/plan_discovery.py +4 -12
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/provider_cache_receipt.py +1 -3
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/providers.py +92 -12
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/runtime_contracts.py +16 -0
- simplicio_cli-0.16.3/simplicio/standalone_migration.py +237 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/task_operator.py +1 -1
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/task_spec.py +177 -24
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio_cli.egg-info/PKG-INFO +19 -13
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio_cli.egg-info/SOURCES.txt +12 -1
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio_cli.egg-info/requires.txt +1 -1
- simplicio_cli-0.16.3/tests/test_json_boundaries.py +18 -0
- simplicio_cli-0.16.2/simplicio/commands/task.py +0 -59
- simplicio_cli-0.16.2/simplicio/pipeline_integrated.py +0 -171
- simplicio_cli-0.16.2/simplicio/plan_compiler/__init__.py +0 -87
- simplicio_cli-0.16.2/simplicio/plan_compiler/effect_sink.py +0 -93
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/LICENSE +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/setup.cfg +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/adaptive.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/bench.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/cache.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/cache_cli.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/__init__.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/bench.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/cache.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/claims.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/detect.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/doctor.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/env_export.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/file.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/file_read.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/gate.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/index.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/init.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/inspect.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/intake.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/memory.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/nest.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/scenarios/claims-gate.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/score_skill.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/smoke.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/status.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/test.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/test_run.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/token.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/versions.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/component_manifest.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/detect.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/doctor.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/dod.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/ecosystem.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/evidence_ledger.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/hardware.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/hub_adapter.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/init.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/intent.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/map_view.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/mapper.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/mapper_api.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/mechanical_edit.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/orchestrator/__init__.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/orchestrator/cost_governor.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/orchestrator/feature.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/pipeline_fixers.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/pipeline_stages.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/pipeline_task_result.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/plan_compiler/canonical_hash.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/plan_compiler/errors.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/precedent.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/prompt.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/prompt_envelope.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/py.typed +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/runtime_async.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/runtime_bridge.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/runtime_env.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/__init__.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/_pipeline_adapter.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/cli.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/__init__.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/go_gin.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/markdown_document.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/php_laravel.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/python_cst.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/python_fastapi.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/python_orm.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/python_pydantic.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/python_pytest.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/registry.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/rust_axum.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/types.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/typescript_next_page.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/typescript_next_route.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/executor.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/plan_schema.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/planner.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/recipes.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/skill_opt.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/stack_registry.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/skill_router.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/sprint_loader.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/SKILL.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/go-gin/admin-crud.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/go-gin/auth-jwt.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/go-gin/crud-resource.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/php-laravel/admin-crud.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/php-laravel/auth-jwt.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/php-laravel/crud-resource.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/php-vanilla/docs-marker.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/admin-crud.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/auth-jwt.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/background-worker.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/crud-resource.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/file-upload.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/oauth-integration.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/scheduled-job.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/websocket.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/rust-axum/admin-crud.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/rust-axum/auth-jwt.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/rust-axum/crud-resource.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/ts-nextjs/admin-crud.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/ts-nextjs/auth-jwt.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/ts-nextjs/crud-resource.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/simplicio_prompt.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/tree/bin/app.sh +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/tree/test/app.bats +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/tree/src/App.Api/App.Api.csproj +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/tree/src/App.Api/Program.cs +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/tree/tests/App.Tests/App.Tests.csproj +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/tree/tests/App.Tests/HealthTests.cs +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/App.Web.csproj +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Components/App.razor +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Components/Pages/Home.razor +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Program.cs +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/tests/App.Tests/App.Tests.csproj +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/tests/App.Tests/HealthTests.cs +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/tree/lib/main.dart +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/tree/pubspec.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/tree/test/widget_test.dart +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/config/config.exs +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app/application.ex +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/controllers/health_controller.ex +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/endpoint.ex +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/router.ex +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/mix.exs +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/test/health_controller_test.exs +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/test/test_helper.exs +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/tree/cmd/root.go +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/tree/cmd/root_test.go +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/tree/go.mod +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/tree/main.go +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/tree/cmd/server/main.go +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/tree/go.mod +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/tree/internal/http/router.go +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/tree/internal/http/router_test.go +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/tree/cmd/server/main.go +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/tree/go.mod +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/tree/internal/http/router.go +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/tree/internal/http/router_test.go +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/tree/build.gradle.kts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/tree/settings.gradle.kts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/tree/src/main/java/com/example/Application.java +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/tree/src/main/java/com/example/HealthController.java +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/tree/src/test/java/com/example/HealthControllerTest.java +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/tree/package.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/tree/src/app.js +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/tree/src/server.js +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/tree/tests/health.test.js +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/app/build.gradle.kts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/AndroidManifest.xml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/java/com/example/app/MainActivity.kt +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/res/values/styles.xml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/test/java/com/example/app/SmokeTest.kt +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/build.gradle.kts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/settings.gradle.kts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/tree/build.gradle.kts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/tree/settings.gradle.kts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/tree/src/main/kotlin/com/example/Application.kt +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/tree/src/test/kotlin/com/example/ApplicationTest.kt +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/tree/build.gradle.kts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/tree/settings.gradle.kts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/tree/src/main/kotlin/com/example/Application.kt +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/tree/src/main/kotlin/com/example/HealthController.kt +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/tree/src/test/kotlin/com/example/HealthControllerTest.kt +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/artisan +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/bootstrap/app.php +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/composer.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/phpunit.xml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/routes/api.php +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/routes/console.php +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/tests/Feature/HealthTest.php +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/tests/TestCase.php +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/tree/composer.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/tree/src/Controller/HealthController.php +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/tree/tests/HealthControllerTest.php +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/tree/composer.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/tree/phpunit.xml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/tree/src/Health.php +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/tree/tests/HealthTest.php +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/tree/pyproject.toml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/tree/src/app/__init__.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/tree/src/app/cli.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/tree/tests/test_cli.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/app/__init__.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/app/apps.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/app/tests.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/app/views.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/config/__init__.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/config/asgi.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/config/settings.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/config/urls.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/config/wsgi.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/manage.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/pyproject.toml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/.gitignore +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/README.template.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/pyproject.toml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/ruff.toml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/src/api/__init__.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/src/main.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/tests/test_health.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/tree/pyproject.toml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/tree/ruff.toml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/tree/src/app.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/tree/tests/test_health.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/index.html +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/package.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/src/App.test.tsx +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/src/App.tsx +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/src/main.tsx +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/tsconfig.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/Gemfile +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/app/controllers/health_controller.rb +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/bin/rails +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/config/application.rb +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/config/boot.rb +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/config/routes.rb +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/test/controllers/health_controller_test.rb +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/test/test_helper.rb +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/tree/Cargo.toml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/tree/src/main.rs +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/tree/Cargo.toml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/tree/src/main.rs +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/tree/Cargo.toml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/tree/src/main.rs +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/tree/Sources/App/App.swift +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/tree/Sources/App/ContentView.swift +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/tree/Tests/AppTests/AppTests.swift +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/tree/Package.swift +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/tree/Sources/App/main.swift +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/tree/Tests/AppTests/HealthTests.swift +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/package.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/src/app.controller.spec.ts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/src/app.controller.ts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/src/app.module.ts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/src/main.ts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/tsconfig.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/.eslintrc.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/.gitignore +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/next.config.mjs +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/package.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/pnpm-workspace.yaml +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/src/app/layout.tsx +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/src/app/page.tsx +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/tsconfig.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/practices.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/stack.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/README.md +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/app/root.tsx +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/app/routes/_index.tsx +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/app/routes/health.test.ts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/app/routes/health.ts +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/package.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/tsconfig.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/verify.json +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/userpromptsubmit-hook.sh +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/token_primitives.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/toon_codec.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/transaction.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/utils/__init__.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/utils/cache.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/utils/fs.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/utils/http_client.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/utils/serialization.py +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio_cli.egg-info/dependency_links.txt +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio_cli.egg-info/entry_points.txt +0 -0
- {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio_cli.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: simplicio-cli
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.3
|
|
4
4
|
Summary: Portable task-to-code pipeline that works with any LLM. Turn a one-line task into a verified code change — diff + test + verify loop. +55 pts on a 156-check benchmark, 21% faster, ~same tokens.
|
|
5
5
|
Author-email: Wesley Simplicio <wesleybob4@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -28,7 +28,7 @@ Requires-Python: >=3.10
|
|
|
28
28
|
Description-Content-Type: text/markdown
|
|
29
29
|
License-File: LICENSE
|
|
30
30
|
Requires-Dist: numpy>=2.1.0
|
|
31
|
-
Requires-Dist: simplicio-mapper>=0.24.
|
|
31
|
+
Requires-Dist: simplicio-mapper>=0.24.2
|
|
32
32
|
Requires-Dist: simplicio-prompt>=1.14.1
|
|
33
33
|
Requires-Dist: httpx>=0.28.1
|
|
34
34
|
Requires-Dist: orjson>=3.11.9
|
|
@@ -538,10 +538,10 @@ Missing an extra never crashes with a raw traceback — every optional import
|
|
|
538
538
|
is guarded and raises an actionable error naming the exact extra to install
|
|
539
539
|
(e.g. `pip install 'simplicio-cli[providers]'`).
|
|
540
540
|
|
|
541
|
-
####
|
|
541
|
+
#### CI and local quality gate
|
|
542
542
|
|
|
543
|
-
|
|
544
|
-
|
|
543
|
+
The blocking `.github/workflows/ci.yml` coverage job runs on pull requests
|
|
544
|
+
and pushes to `main`. The same gate is reproducible locally; attach its
|
|
545
545
|
command output to the pull request:
|
|
546
546
|
|
|
547
547
|
```bash
|
|
@@ -780,7 +780,7 @@ user prompt. UserPromptSubmit is the right pre-hook for routing decisions.
|
|
|
780
780
|
| GLM (z.ai) | `glm-4.6` | `https://api.z.ai/api/paas/v4` |
|
|
781
781
|
| DeepSeek | `deepseek-chat` | `https://api.deepseek.com` |
|
|
782
782
|
| OpenAI | `gpt-4.1` | `https://api.openai.com/v1` |
|
|
783
|
-
| Local (llama.cpp) | `openbmb/minicpm5:latest` | *(leave unset)* |
|
|
783
|
+
| Local (llama.cpp, paused by default) | `openbmb/minicpm5:latest` + `SIMPLICIO_LOCAL_INFERENCE=enabled` | *(leave unset)* |
|
|
784
784
|
| Anthropic native | `claude-opus-4-7` | *(leave unset)* |
|
|
785
785
|
|
|
786
786
|
If `SIMPLICIO_BASE_URL` is unset and the key is `ANTHROPIC_API_KEY`, it uses the
|
|
@@ -791,19 +791,25 @@ your `base_url` — so **any** OpenAI-like provider works without code changes.
|
|
|
791
791
|
simplicio-py smoke # prints provider config + one test call
|
|
792
792
|
```
|
|
793
793
|
|
|
794
|
-
#### Path 4 — local llama.cpp GGUF
|
|
794
|
+
#### Path 4 — local llama.cpp GGUF (explicitly re-enabled only)
|
|
795
795
|
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
796
|
+
Local inference is **paused by default**. With no provider configured, or
|
|
797
|
+
when a loopback endpoint such as Ollama is selected, the CLI fails closed with
|
|
798
|
+
the machine-readable reason `LOCAL_INFERENCE_PAUSED`; it does not read a
|
|
799
|
+
cached completion, load a model, download weights, start a process, or open a
|
|
800
|
+
socket. Existing GGUF artifacts are preserved.
|
|
801
|
+
|
|
802
|
+
Use an explicit remote provider for normal operation. To intentionally enable
|
|
803
|
+
the local route for a process, set `SIMPLICIO_LOCAL_INFERENCE=enabled` first.
|
|
804
|
+
The in-process [`llama-cpp-python`](https://github.com/abetlen/llama-cpp-python)
|
|
805
|
+
backend then uses `openbmb/minicpm5:latest`, backed by
|
|
800
806
|
`openbmb/MiniCPM5-1B-GGUF::MiniCPM5-1B-Q4_K_M.gguf`.
|
|
801
807
|
|
|
802
808
|
```bash
|
|
803
809
|
pip install 'simplicio-cli[local]' # pulls llama-cpp-python + huggingface-hub
|
|
804
|
-
simplicio-py doctor --install
|
|
810
|
+
SIMPLICIO_LOCAL_INFERENCE=enabled simplicio-py doctor --install
|
|
805
811
|
|
|
806
|
-
simplicio-py task "add input validation to createUser" \
|
|
812
|
+
SIMPLICIO_LOCAL_INFERENCE=enabled simplicio-py task "add input validation to createUser" \
|
|
807
813
|
--target src/users.ts --local # forces local llama.cpp
|
|
808
814
|
|
|
809
815
|
# the GGUF is fetched once from the Hugging Face Hub, then reused
|
|
@@ -472,10 +472,10 @@ Missing an extra never crashes with a raw traceback — every optional import
|
|
|
472
472
|
is guarded and raises an actionable error naming the exact extra to install
|
|
473
473
|
(e.g. `pip install 'simplicio-cli[providers]'`).
|
|
474
474
|
|
|
475
|
-
####
|
|
475
|
+
#### CI and local quality gate
|
|
476
476
|
|
|
477
|
-
|
|
478
|
-
|
|
477
|
+
The blocking `.github/workflows/ci.yml` coverage job runs on pull requests
|
|
478
|
+
and pushes to `main`. The same gate is reproducible locally; attach its
|
|
479
479
|
command output to the pull request:
|
|
480
480
|
|
|
481
481
|
```bash
|
|
@@ -714,7 +714,7 @@ user prompt. UserPromptSubmit is the right pre-hook for routing decisions.
|
|
|
714
714
|
| GLM (z.ai) | `glm-4.6` | `https://api.z.ai/api/paas/v4` |
|
|
715
715
|
| DeepSeek | `deepseek-chat` | `https://api.deepseek.com` |
|
|
716
716
|
| OpenAI | `gpt-4.1` | `https://api.openai.com/v1` |
|
|
717
|
-
| Local (llama.cpp) | `openbmb/minicpm5:latest` | *(leave unset)* |
|
|
717
|
+
| Local (llama.cpp, paused by default) | `openbmb/minicpm5:latest` + `SIMPLICIO_LOCAL_INFERENCE=enabled` | *(leave unset)* |
|
|
718
718
|
| Anthropic native | `claude-opus-4-7` | *(leave unset)* |
|
|
719
719
|
|
|
720
720
|
If `SIMPLICIO_BASE_URL` is unset and the key is `ANTHROPIC_API_KEY`, it uses the
|
|
@@ -725,19 +725,25 @@ your `base_url` — so **any** OpenAI-like provider works without code changes.
|
|
|
725
725
|
simplicio-py smoke # prints provider config + one test call
|
|
726
726
|
```
|
|
727
727
|
|
|
728
|
-
#### Path 4 — local llama.cpp GGUF
|
|
728
|
+
#### Path 4 — local llama.cpp GGUF (explicitly re-enabled only)
|
|
729
729
|
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
730
|
+
Local inference is **paused by default**. With no provider configured, or
|
|
731
|
+
when a loopback endpoint such as Ollama is selected, the CLI fails closed with
|
|
732
|
+
the machine-readable reason `LOCAL_INFERENCE_PAUSED`; it does not read a
|
|
733
|
+
cached completion, load a model, download weights, start a process, or open a
|
|
734
|
+
socket. Existing GGUF artifacts are preserved.
|
|
735
|
+
|
|
736
|
+
Use an explicit remote provider for normal operation. To intentionally enable
|
|
737
|
+
the local route for a process, set `SIMPLICIO_LOCAL_INFERENCE=enabled` first.
|
|
738
|
+
The in-process [`llama-cpp-python`](https://github.com/abetlen/llama-cpp-python)
|
|
739
|
+
backend then uses `openbmb/minicpm5:latest`, backed by
|
|
734
740
|
`openbmb/MiniCPM5-1B-GGUF::MiniCPM5-1B-Q4_K_M.gguf`.
|
|
735
741
|
|
|
736
742
|
```bash
|
|
737
743
|
pip install 'simplicio-cli[local]' # pulls llama-cpp-python + huggingface-hub
|
|
738
|
-
simplicio-py doctor --install
|
|
744
|
+
SIMPLICIO_LOCAL_INFERENCE=enabled simplicio-py doctor --install
|
|
739
745
|
|
|
740
|
-
simplicio-py task "add input validation to createUser" \
|
|
746
|
+
SIMPLICIO_LOCAL_INFERENCE=enabled simplicio-py task "add input validation to createUser" \
|
|
741
747
|
--target src/users.ts --local # forces local llama.cpp
|
|
742
748
|
|
|
743
749
|
# the GGUF is fetched once from the Hugging Face Hub, then reused
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "simplicio-cli"
|
|
3
|
-
version = "0.16.
|
|
3
|
+
version = "0.16.3"
|
|
4
4
|
description = "Portable task-to-code pipeline that works with any LLM. Turn a one-line task into a verified code change — diff + test + verify loop. +55 pts on a 156-check benchmark, 21% faster, ~same tokens."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "MIT" }
|
|
@@ -53,7 +53,7 @@ classifiers = [
|
|
|
53
53
|
# (generated, `--check`-able) for the full graph and #99 for the audit.
|
|
54
54
|
dependencies = [
|
|
55
55
|
"numpy>=2.1.0",
|
|
56
|
-
"simplicio-mapper>=0.24.
|
|
56
|
+
"simplicio-mapper>=0.24.2",
|
|
57
57
|
"simplicio-prompt>=1.14.1",
|
|
58
58
|
"httpx>=0.28.1",
|
|
59
59
|
"orjson>=3.11.9",
|
|
@@ -72,8 +72,8 @@ providers = ["anthropic>=0.112.0", "openai>=2.44.0"]
|
|
|
72
72
|
# vectors yet); the numpy-only cosine-similarity math stays in base.
|
|
73
73
|
ml = ["sentence-transformers>=5.6.0"]
|
|
74
74
|
bench = ["fpdf2>=2.8.7"]
|
|
75
|
-
#
|
|
76
|
-
#
|
|
75
|
+
# Explicit opt-in local inference. Pulls llama.cpp Python bindings and
|
|
76
|
+
# huggingface-hub; the backend stays paused until SIMPLICIO_LOCAL_INFERENCE=enabled.
|
|
77
77
|
local = ["llama-cpp-python>=0.3.32", "huggingface-hub>=1.21.0"]
|
|
78
78
|
# Opt-in faster asyncio event loop for the structured-concurrency runtime
|
|
79
79
|
# (simplicio.runtime_async, issue #212). Never required: `install_uvloop()`
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import ast
|
|
5
6
|
import hashlib
|
|
6
7
|
import json
|
|
7
8
|
import os
|
|
@@ -12,6 +13,8 @@ from dataclasses import dataclass, field
|
|
|
12
13
|
from pathlib import Path
|
|
13
14
|
from typing import Any
|
|
14
15
|
|
|
16
|
+
from .hbp import HbpError, HbpEvidenceLedger
|
|
17
|
+
|
|
15
18
|
|
|
16
19
|
def _env_flag(name: str, default: bool) -> bool:
|
|
17
20
|
raw = os.environ.get(name)
|
|
@@ -111,8 +114,90 @@ class CompletionCache:
|
|
|
111
114
|
return _env_flag("SIMPLICIO_BUST_CACHE", False)
|
|
112
115
|
|
|
113
116
|
def path_for(self, key: str) -> Path:
|
|
117
|
+
return self.root / key[:2] / f"{key}.hbp"
|
|
118
|
+
|
|
119
|
+
def _legacy_path_for(self, key: str) -> Path:
|
|
114
120
|
return self.root / key[:2] / f"{key}.json"
|
|
115
121
|
|
|
122
|
+
@staticmethod
|
|
123
|
+
def _fields(entry: CacheEntry) -> dict[str, str]:
|
|
124
|
+
# repr/literal_eval is used only for the bounded metadata scalar. It
|
|
125
|
+
# is never executed and keeps the internal cache free of JSON.
|
|
126
|
+
return {
|
|
127
|
+
"completion": entry.completion,
|
|
128
|
+
"created_at": repr(entry.created_at),
|
|
129
|
+
"metadata": repr(entry.metadata),
|
|
130
|
+
"model": entry.model,
|
|
131
|
+
"provider_id": entry.provider_id,
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
@staticmethod
|
|
135
|
+
def _entry_from_fields(fields: dict[str, str]) -> CacheEntry:
|
|
136
|
+
try:
|
|
137
|
+
metadata = ast.literal_eval(fields.get("metadata", "{}"))
|
|
138
|
+
created_at = float(fields.get("created_at", "0"))
|
|
139
|
+
except (ValueError, SyntaxError, TypeError) as exc:
|
|
140
|
+
raise HbpError("invalid completion cache fields") from exc
|
|
141
|
+
if not isinstance(metadata, dict):
|
|
142
|
+
raise HbpError("completion cache metadata must be a mapping")
|
|
143
|
+
return CacheEntry(
|
|
144
|
+
completion=fields.get("completion", ""),
|
|
145
|
+
provider_id=fields.get("provider_id", ""),
|
|
146
|
+
model=fields.get("model", ""),
|
|
147
|
+
created_at=created_at or time.time(),
|
|
148
|
+
metadata=metadata,
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
def _read_hbp(self, path: Path) -> CacheEntry:
|
|
152
|
+
rows = HbpEvidenceLedger(path.parent, file_name=path.name).verify()
|
|
153
|
+
if len(rows) != 1 or rows[0].topic != "completion-cache":
|
|
154
|
+
raise HbpError("completion cache must contain exactly one record")
|
|
155
|
+
payload = rows[0].payload
|
|
156
|
+
payload_bytes = payload.encode("utf-8")
|
|
157
|
+
prefix = b"hbp-fields/v1"
|
|
158
|
+
if not payload_bytes.startswith(prefix):
|
|
159
|
+
raise HbpError("completion cache has an unsupported payload")
|
|
160
|
+
fields: dict[str, str] = {}
|
|
161
|
+
cursor = len(prefix)
|
|
162
|
+
while cursor < len(payload_bytes):
|
|
163
|
+
if payload_bytes[cursor : cursor + 1] != b":":
|
|
164
|
+
raise HbpError("invalid completion cache field framing")
|
|
165
|
+
colon = payload_bytes.find(b":", cursor + 1)
|
|
166
|
+
if colon < 0:
|
|
167
|
+
raise HbpError("truncated completion cache field length")
|
|
168
|
+
try:
|
|
169
|
+
size = int(payload_bytes[cursor + 1 : colon])
|
|
170
|
+
except ValueError as exc:
|
|
171
|
+
raise HbpError("invalid completion cache field length") from exc
|
|
172
|
+
start = colon + 1
|
|
173
|
+
end = start + size
|
|
174
|
+
raw_field, cursor = payload_bytes[start:end], end
|
|
175
|
+
if len(raw_field) != size:
|
|
176
|
+
raise HbpError("truncated completion cache field")
|
|
177
|
+
try:
|
|
178
|
+
field = raw_field.decode("utf-8")
|
|
179
|
+
except UnicodeDecodeError as exc:
|
|
180
|
+
raise HbpError("completion cache field is not UTF-8") from exc
|
|
181
|
+
separator = field.find("=")
|
|
182
|
+
if separator < 1:
|
|
183
|
+
raise HbpError("completion cache field is missing a key")
|
|
184
|
+
key, value = field[:separator], field[separator + 1 :]
|
|
185
|
+
fields[key] = value
|
|
186
|
+
return self._entry_from_fields(fields)
|
|
187
|
+
|
|
188
|
+
def _write_hbp(self, path: Path, entry: CacheEntry) -> None:
|
|
189
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
190
|
+
temp_dir = Path(tempfile.mkdtemp(prefix=f".{path.stem}.", dir=str(path.parent)))
|
|
191
|
+
try:
|
|
192
|
+
temp_path = temp_dir / path.name
|
|
193
|
+
HbpEvidenceLedger(temp_dir, file_name=path.name).record_fields(
|
|
194
|
+
"completion-cache", self._fields(entry), "simplicio-dev-cli/cache"
|
|
195
|
+
)
|
|
196
|
+
HbpEvidenceLedger(temp_dir, file_name=path.name).verify()
|
|
197
|
+
os.replace(temp_path, path)
|
|
198
|
+
finally:
|
|
199
|
+
shutil.rmtree(temp_dir, ignore_errors=True)
|
|
200
|
+
|
|
116
201
|
def get(self, key: str) -> CacheEntry | None:
|
|
117
202
|
if not self.enabled or self.bust:
|
|
118
203
|
self.misses += 1
|
|
@@ -120,8 +205,19 @@ class CompletionCache:
|
|
|
120
205
|
path = self.path_for(key)
|
|
121
206
|
try:
|
|
122
207
|
if not path.exists():
|
|
123
|
-
self.
|
|
124
|
-
|
|
208
|
+
legacy = self._legacy_path_for(key)
|
|
209
|
+
if legacy.exists():
|
|
210
|
+
try:
|
|
211
|
+
with legacy.open("r", encoding="utf-8") as handle:
|
|
212
|
+
self._write_hbp(path, CacheEntry.from_dict(json.load(handle)))
|
|
213
|
+
legacy.unlink()
|
|
214
|
+
except (OSError, ValueError, TypeError, json.JSONDecodeError, HbpError):
|
|
215
|
+
self._safe_unlink(legacy)
|
|
216
|
+
self.misses += 1
|
|
217
|
+
return None
|
|
218
|
+
else:
|
|
219
|
+
self.misses += 1
|
|
220
|
+
return None
|
|
125
221
|
if self._is_expired(path):
|
|
126
222
|
self._safe_unlink(path)
|
|
127
223
|
self.misses += 1
|
|
@@ -130,11 +226,10 @@ class CompletionCache:
|
|
|
130
226
|
self.misses += 1
|
|
131
227
|
return None
|
|
132
228
|
try:
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
except (OSError, ValueError, TypeError):
|
|
229
|
+
entry = self._read_hbp(path)
|
|
230
|
+
self.hits += 1
|
|
231
|
+
return entry
|
|
232
|
+
except (OSError, ValueError, TypeError, HbpError):
|
|
138
233
|
self._safe_unlink(path)
|
|
139
234
|
self.misses += 1
|
|
140
235
|
return None
|
|
@@ -144,24 +239,9 @@ class CompletionCache:
|
|
|
144
239
|
return
|
|
145
240
|
path = self.path_for(key)
|
|
146
241
|
try:
|
|
147
|
-
|
|
148
|
-
fd, tmp_name = tempfile.mkstemp(
|
|
149
|
-
prefix=f".{path.stem}.",
|
|
150
|
-
suffix=".tmp",
|
|
151
|
-
dir=str(path.parent),
|
|
152
|
-
)
|
|
242
|
+
self._write_hbp(path, entry)
|
|
153
243
|
except OSError:
|
|
154
244
|
return
|
|
155
|
-
try:
|
|
156
|
-
with os.fdopen(fd, "w", encoding="utf-8") as handle:
|
|
157
|
-
json.dump(entry.to_dict(), handle, sort_keys=True)
|
|
158
|
-
try:
|
|
159
|
-
os.replace(tmp_name, path)
|
|
160
|
-
except OSError:
|
|
161
|
-
return
|
|
162
|
-
finally:
|
|
163
|
-
if os.path.exists(tmp_name):
|
|
164
|
-
self._safe_unlink(Path(tmp_name))
|
|
165
245
|
self.puts += 1
|
|
166
246
|
evict_every = max(1, _env_int("SIMPLICIO_CACHE_EVICT_EVERY", 16))
|
|
167
247
|
if self.puts == 1 or self.puts % evict_every == 0:
|
|
@@ -202,7 +282,7 @@ class CompletionCache:
|
|
|
202
282
|
return []
|
|
203
283
|
return [
|
|
204
284
|
path
|
|
205
|
-
for path in self.root.rglob("*.
|
|
285
|
+
for path in self.root.rglob("*.hbp")
|
|
206
286
|
if path.is_file() and _is_completion_cache_file(self.root, path)
|
|
207
287
|
]
|
|
208
288
|
except OSError:
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
"""One-dispatch/one-attempt execution boundary for integrated coordinators.
|
|
2
|
+
|
|
3
|
+
This module deliberately has no scheduler, retry loop, provider selection,
|
|
4
|
+
worktree creation, queue, or terminal-state writer. The coordinator supplies
|
|
5
|
+
one already-selected PlanNode and its causal attempt/lease context; Dev CLI
|
|
6
|
+
may submit at most the single effect belonging to that node and returns an
|
|
7
|
+
observation. What happens next is exclusively a coordinator decision.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import contextvars
|
|
13
|
+
import hashlib
|
|
14
|
+
import time
|
|
15
|
+
from collections.abc import Callable, Mapping, Sequence
|
|
16
|
+
from dataclasses import dataclass, field
|
|
17
|
+
from typing import Any, Literal
|
|
18
|
+
|
|
19
|
+
from simplicio.plan_compiler.effect_sink import EffectDispatchContext, EffectOutcome, EffectSink
|
|
20
|
+
from simplicio.plan_compiler.models import EffectPlan, PlanNode, VerificationPlan
|
|
21
|
+
|
|
22
|
+
ATOMIC_OBSERVATION_SCHEMA = "simplicio.dev-cli.atomic-observation/v1"
|
|
23
|
+
Outcome = Literal[
|
|
24
|
+
"completed",
|
|
25
|
+
"effect_submitted",
|
|
26
|
+
"failed",
|
|
27
|
+
"cancelled",
|
|
28
|
+
"lease_lost",
|
|
29
|
+
"stale_fence",
|
|
30
|
+
"effect_unknown",
|
|
31
|
+
]
|
|
32
|
+
Retryability = Literal["retryable", "non_retryable", "unknown"]
|
|
33
|
+
CancellationCheck = Callable[[], bool]
|
|
34
|
+
LeaseCheck = Callable[[str, str], bool]
|
|
35
|
+
FenceCheck = Callable[[str], bool]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class IntegratedOwnershipError(RuntimeError):
|
|
39
|
+
"""An integrated caller attempted to reintroduce local lifecycle ownership."""
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@dataclass(frozen=True)
|
|
43
|
+
class AttemptContext:
|
|
44
|
+
"""Coordinator-owned identity and guards for exactly one dispatch."""
|
|
45
|
+
|
|
46
|
+
attempt_id: str
|
|
47
|
+
lease_id: str
|
|
48
|
+
fencing_token: str
|
|
49
|
+
context_handle: str
|
|
50
|
+
deadline_monotonic: float | None = None
|
|
51
|
+
cancellation_requested: CancellationCheck = field(default=lambda: False, repr=False, compare=False)
|
|
52
|
+
lease_valid: LeaseCheck = field(default=lambda _lease, _fence: True, repr=False, compare=False)
|
|
53
|
+
fence_current: FenceCheck = field(default=lambda _fence: True, repr=False, compare=False)
|
|
54
|
+
|
|
55
|
+
def __post_init__(self) -> None:
|
|
56
|
+
for name in ("attempt_id", "lease_id", "fencing_token", "context_handle"):
|
|
57
|
+
if not getattr(self, name).strip():
|
|
58
|
+
raise ValueError(f"{name} is required for integrated execution")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@dataclass(frozen=True)
|
|
62
|
+
class AtomicObservation:
|
|
63
|
+
"""Executor facts sufficient for an external coordinator's next decision."""
|
|
64
|
+
|
|
65
|
+
outcome: Outcome
|
|
66
|
+
reason: str
|
|
67
|
+
failure_fingerprint: str | None
|
|
68
|
+
retryability: Retryability
|
|
69
|
+
attempt_id: str
|
|
70
|
+
lease_id: str
|
|
71
|
+
fencing_token: str
|
|
72
|
+
context_handle: str
|
|
73
|
+
plan_node_id: str
|
|
74
|
+
effect_ids: tuple[str, ...]
|
|
75
|
+
evidence_handles: tuple[str, ...]
|
|
76
|
+
receipt_handles: tuple[str, ...]
|
|
77
|
+
validation: tuple[Mapping[str, Any], ...]
|
|
78
|
+
resources: Mapping[str, int | float | None]
|
|
79
|
+
|
|
80
|
+
def to_dict(self) -> dict[str, Any]:
|
|
81
|
+
return {
|
|
82
|
+
"schema": ATOMIC_OBSERVATION_SCHEMA,
|
|
83
|
+
"outcome": self.outcome,
|
|
84
|
+
"reason": self.reason,
|
|
85
|
+
"failure_fingerprint": self.failure_fingerprint,
|
|
86
|
+
"retryability": self.retryability,
|
|
87
|
+
"attempt_id": self.attempt_id,
|
|
88
|
+
"lease_id": self.lease_id,
|
|
89
|
+
"fencing_token": self.fencing_token,
|
|
90
|
+
"context_handle": self.context_handle,
|
|
91
|
+
"plan_node_id": self.plan_node_id,
|
|
92
|
+
"effect_ids": list(self.effect_ids),
|
|
93
|
+
"evidence_handles": list(self.evidence_handles),
|
|
94
|
+
"receipt_handles": list(self.receipt_handles),
|
|
95
|
+
"validation": [dict(item) for item in self.validation],
|
|
96
|
+
"resources": dict(self.resources),
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
_ACTIVE_ATTEMPT: contextvars.ContextVar[str | None] = contextvars.ContextVar(
|
|
101
|
+
"simplicio_integrated_attempt", default=None
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _fingerprint(reason: str) -> str:
|
|
106
|
+
return hashlib.sha256(reason.encode("utf-8", errors="replace")).hexdigest()[:16]
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def _guard_reason(attempt: AttemptContext) -> tuple[Outcome, str] | None:
|
|
110
|
+
if attempt.cancellation_requested():
|
|
111
|
+
return "cancelled", "coordinator cancellation requested"
|
|
112
|
+
if attempt.deadline_monotonic is not None and time.monotonic() >= attempt.deadline_monotonic:
|
|
113
|
+
return "cancelled", "coordinator deadline elapsed"
|
|
114
|
+
if not attempt.fence_current(attempt.fencing_token):
|
|
115
|
+
return "stale_fence", "coordinator fencing token is stale"
|
|
116
|
+
if not attempt.lease_valid(attempt.lease_id, attempt.fencing_token):
|
|
117
|
+
return "lease_lost", "coordinator lease is no longer valid"
|
|
118
|
+
return None
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def _observation(
|
|
122
|
+
outcome: Outcome,
|
|
123
|
+
reason: str,
|
|
124
|
+
retryability: Retryability,
|
|
125
|
+
*,
|
|
126
|
+
node: PlanNode,
|
|
127
|
+
attempt: AttemptContext,
|
|
128
|
+
started: float,
|
|
129
|
+
effect_ids: tuple[str, ...] = (),
|
|
130
|
+
evidence_handles: tuple[str, ...] = (),
|
|
131
|
+
receipt_handles: tuple[str, ...] = (),
|
|
132
|
+
validation: tuple[Mapping[str, Any], ...] = (),
|
|
133
|
+
) -> AtomicObservation:
|
|
134
|
+
return AtomicObservation(
|
|
135
|
+
outcome=outcome,
|
|
136
|
+
reason=reason,
|
|
137
|
+
failure_fingerprint=None if outcome in {"completed", "effect_submitted"} else _fingerprint(reason),
|
|
138
|
+
retryability=retryability,
|
|
139
|
+
attempt_id=attempt.attempt_id,
|
|
140
|
+
lease_id=attempt.lease_id,
|
|
141
|
+
fencing_token=attempt.fencing_token,
|
|
142
|
+
context_handle=attempt.context_handle,
|
|
143
|
+
plan_node_id=node.node_id,
|
|
144
|
+
effect_ids=effect_ids,
|
|
145
|
+
evidence_handles=evidence_handles,
|
|
146
|
+
receipt_handles=receipt_handles,
|
|
147
|
+
validation=validation,
|
|
148
|
+
resources={
|
|
149
|
+
"atomic_attempts": 1,
|
|
150
|
+
"effect_calls": len(effect_ids),
|
|
151
|
+
"model_calls": 0,
|
|
152
|
+
"subprocesses": 0,
|
|
153
|
+
"threads_created": 0,
|
|
154
|
+
"worktrees_created": 0,
|
|
155
|
+
"tokens": 0,
|
|
156
|
+
"latency_ms": round((time.monotonic() - started) * 1000, 3),
|
|
157
|
+
},
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def execute_work_item_once(
|
|
162
|
+
plan_node: PlanNode,
|
|
163
|
+
attempt: AttemptContext,
|
|
164
|
+
*,
|
|
165
|
+
effects: Sequence[EffectPlan],
|
|
166
|
+
verifications: Sequence[VerificationPlan],
|
|
167
|
+
effect_sink: EffectSink,
|
|
168
|
+
dispatch_context: EffectDispatchContext | None = None,
|
|
169
|
+
) -> AtomicObservation:
|
|
170
|
+
"""Execute one selected node once, without making lifecycle decisions.
|
|
171
|
+
|
|
172
|
+
An effectful node must have exactly one matching effect. This structural
|
|
173
|
+
restriction makes a single dispatch incapable of hiding a retry/batch.
|
|
174
|
+
Guard checks run immediately before the only mutating boundary. Sink
|
|
175
|
+
exceptions become ``effect_unknown`` and are never retried here.
|
|
176
|
+
"""
|
|
177
|
+
active = _ACTIVE_ATTEMPT.get()
|
|
178
|
+
if active is not None:
|
|
179
|
+
raise IntegratedOwnershipError(
|
|
180
|
+
f"nested integrated attempt is forbidden: active={active}, requested={attempt.attempt_id}"
|
|
181
|
+
)
|
|
182
|
+
matching_effects = tuple(effect for effect in effects if effect.plan_node_id == plan_node.node_id)
|
|
183
|
+
unrelated = [effect.effect_id for effect in effects if effect.plan_node_id != plan_node.node_id]
|
|
184
|
+
if unrelated:
|
|
185
|
+
raise IntegratedOwnershipError("one dispatch may contain effects only for its selected PlanNode")
|
|
186
|
+
if len(matching_effects) > 1:
|
|
187
|
+
raise IntegratedOwnershipError("one integrated PlanNode may submit at most one effect per dispatch")
|
|
188
|
+
if dispatch_context is not None:
|
|
189
|
+
if dispatch_context.plan_node.node_id != plan_node.node_id:
|
|
190
|
+
raise IntegratedOwnershipError(
|
|
191
|
+
"dispatch context PlanNode must match the selected integrated PlanNode"
|
|
192
|
+
)
|
|
193
|
+
if dispatch_context.coordinator_id != attempt.attempt_id:
|
|
194
|
+
raise IntegratedOwnershipError(
|
|
195
|
+
"dispatch context coordinator_id must preserve the coordinator attempt_id"
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
started = time.monotonic()
|
|
199
|
+
token = _ACTIVE_ATTEMPT.set(attempt.attempt_id)
|
|
200
|
+
try:
|
|
201
|
+
guard = _guard_reason(attempt)
|
|
202
|
+
if guard is not None:
|
|
203
|
+
outcome, reason = guard
|
|
204
|
+
return _observation(
|
|
205
|
+
outcome, reason, "retryable", node=plan_node, attempt=attempt, started=started
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
matching_validations = tuple(
|
|
209
|
+
{
|
|
210
|
+
"verification_id": item.verification_id,
|
|
211
|
+
"verifier": item.verifier,
|
|
212
|
+
"acceptance_criteria_refs": list(item.acceptance_criteria_refs),
|
|
213
|
+
}
|
|
214
|
+
for item in verifications
|
|
215
|
+
if item.plan_node_id == plan_node.node_id
|
|
216
|
+
)
|
|
217
|
+
if not matching_effects:
|
|
218
|
+
return _observation(
|
|
219
|
+
"completed",
|
|
220
|
+
"effect-free node observed; coordinator retains verification scheduling",
|
|
221
|
+
"non_retryable",
|
|
222
|
+
node=plan_node,
|
|
223
|
+
attempt=attempt,
|
|
224
|
+
started=started,
|
|
225
|
+
validation=matching_validations,
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
# Re-check at the last possible instant before the only effect boundary.
|
|
229
|
+
guard = _guard_reason(attempt)
|
|
230
|
+
if guard is not None:
|
|
231
|
+
outcome, reason = guard
|
|
232
|
+
return _observation(
|
|
233
|
+
outcome, reason, "retryable", node=plan_node, attempt=attempt, started=started
|
|
234
|
+
)
|
|
235
|
+
effect = matching_effects[0]
|
|
236
|
+
try:
|
|
237
|
+
context = dispatch_context or EffectDispatchContext(
|
|
238
|
+
plan_id="",
|
|
239
|
+
goal_id="",
|
|
240
|
+
plan_node=plan_node,
|
|
241
|
+
verifications=list(verifications),
|
|
242
|
+
coordinator_id=attempt.attempt_id,
|
|
243
|
+
)
|
|
244
|
+
result: EffectOutcome = effect_sink.submit(effect, context)
|
|
245
|
+
except IntegratedOwnershipError:
|
|
246
|
+
raise
|
|
247
|
+
except Exception as exc:
|
|
248
|
+
reason = f"effect outcome unknown after sink failure: {type(exc).__name__}"
|
|
249
|
+
return _observation(
|
|
250
|
+
"effect_unknown",
|
|
251
|
+
reason,
|
|
252
|
+
"unknown",
|
|
253
|
+
node=plan_node,
|
|
254
|
+
attempt=attempt,
|
|
255
|
+
started=started,
|
|
256
|
+
effect_ids=(effect.effect_id,),
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
receipt_payload = result.receipt or {}
|
|
260
|
+
receipt = str(receipt_payload.get("receipt_handle", result.idempotency_key)).strip()
|
|
261
|
+
evidence = tuple(
|
|
262
|
+
str(item) for item in receipt_payload.get("evidence_handles", ()) if str(item).strip()
|
|
263
|
+
)
|
|
264
|
+
accepted_states = {"running", "completed"}
|
|
265
|
+
if result.state not in accepted_states:
|
|
266
|
+
reason = ", ".join(result.reason_codes) or f"runtime effect state: {result.state}"
|
|
267
|
+
retryability: Retryability = (
|
|
268
|
+
"unknown"
|
|
269
|
+
if result.state == "effect_unknown"
|
|
270
|
+
else "retryable"
|
|
271
|
+
if result.state in {"not_started", "blocked_conflict"}
|
|
272
|
+
else "non_retryable"
|
|
273
|
+
)
|
|
274
|
+
return _observation(
|
|
275
|
+
"effect_unknown" if result.state == "effect_unknown" else "failed",
|
|
276
|
+
reason,
|
|
277
|
+
retryability,
|
|
278
|
+
node=plan_node,
|
|
279
|
+
attempt=attempt,
|
|
280
|
+
started=started,
|
|
281
|
+
effect_ids=(effect.effect_id,),
|
|
282
|
+
receipt_handles=(receipt,) if receipt else (),
|
|
283
|
+
)
|
|
284
|
+
return _observation(
|
|
285
|
+
"effect_submitted",
|
|
286
|
+
f"runtime accepted atomic submission with state {result.state}",
|
|
287
|
+
"non_retryable",
|
|
288
|
+
node=plan_node,
|
|
289
|
+
attempt=attempt,
|
|
290
|
+
started=started,
|
|
291
|
+
effect_ids=(effect.effect_id,),
|
|
292
|
+
evidence_handles=evidence,
|
|
293
|
+
receipt_handles=(receipt,) if receipt else (),
|
|
294
|
+
validation=matching_validations,
|
|
295
|
+
)
|
|
296
|
+
finally:
|
|
297
|
+
_ACTIVE_ATTEMPT.reset(token)
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
__all__ = [
|
|
301
|
+
"ATOMIC_OBSERVATION_SCHEMA",
|
|
302
|
+
"AtomicObservation",
|
|
303
|
+
"AttemptContext",
|
|
304
|
+
"IntegratedOwnershipError",
|
|
305
|
+
"execute_work_item_once",
|
|
306
|
+
]
|