simplicio-cli 0.18.0__tar.gz → 0.18.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.18.0/simplicio_cli.egg-info → simplicio_cli-0.18.3}/PKG-INFO +3 -3
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/pyproject.toml +3 -3
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/__init__.py +1 -1
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/checkpoint_store.py +2 -1
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/cli.py +2 -0
- simplicio_cli-0.18.3/simplicio/codex_hooks.py +65 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/delivery_auth.py +2 -3
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/effect_transaction.py +2 -4
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/execution_mode.py +9 -3
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/execution_receipts.py +1 -1
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/fast_contracts.py +4 -4
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/hardware.py +7 -3
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/litert_cli.py +1 -1
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/map_view.py +7 -3
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/mapper.py +1 -1
- simplicio_cli-0.18.3/simplicio/mutation_dispatch.py +45 -0
- simplicio_cli-0.18.3/simplicio/mutation_lifecycle.py +96 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/mutation_worker.py +59 -19
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/pipeline.py +21 -3
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/pipeline_task_result.py +27 -4
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/execution_contracts.py +7 -19
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/mapper_context.py +20 -6
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/prism_envelope.py +204 -205
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/prism_receipts.py +4 -4
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/prism_transaction.py +2 -2
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/progressive_verify.py +2 -1
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/cli.py +3 -1
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/stage_abi.py +6 -4
- simplicio_cli-0.18.3/simplicio/stage_main.py +52 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/utils/fs.py +18 -1
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/write_set_lock.py +122 -122
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3/simplicio_cli.egg-info}/PKG-INFO +3 -3
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio_cli.egg-info/SOURCES.txt +1 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio_cli.egg-info/requires.txt +2 -2
- simplicio_cli-0.18.0/simplicio/mutation_dispatch.py +0 -35
- simplicio_cli-0.18.0/simplicio/mutation_lifecycle.py +0 -58
- simplicio_cli-0.18.0/simplicio/stage_main.py +0 -34
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/LICENSE +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/setup.cfg +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/_cache.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/adaptive.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/atomic_execution.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/bench.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/cache.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/cache_cli.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/changeset_v2.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/__init__.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/_shared.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/bench.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/cache.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/changeset.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/claims.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/detect.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/doctor.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/edit.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/env_export.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/fast.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/file.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/file_read.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/gate.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/index.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/init.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/inspect.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/intake.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/memory.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/nest.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/prototype.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/run.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/runtime.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/scenarios/claims-gate.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/score_skill.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/smoke.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/status.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/task.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/test.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/test_run.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/token.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/versions.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/component_manifest.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/detect.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/doctor.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/dod.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/ecosystem.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/evidence_ledger.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/execution_contract.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/hbp.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/hub_adapter.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/init.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/intent.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/legacy_json_adapter.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/local_models.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/mapper_api.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/mechanical_edit.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/memory_store.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/observability.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/orchestrator/__init__.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/orchestrator/cost_governor.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/orchestrator/feature.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/orchestrator/multi_task.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/orientation_plan.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/pipeline_fixers.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/pipeline_integrated.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/pipeline_stages.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/__init__.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/authority.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/canonical_hash.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/compat_adapter.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/compile_task_spec.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/conformance.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/effect_sink.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/errors.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/models.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/runtime_effect_sink.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_discovery.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/precedent.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/prompt.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/prompt_envelope.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/provider_cache_receipt.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/providers.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/py.typed +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/runtime_async.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/runtime_bridge.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/runtime_contracts.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/runtime_env.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/__init__.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/_pipeline_adapter.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/__init__.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/go_gin.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/markdown_document.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/php_laravel.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/python_cst.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/python_fastapi.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/python_orm.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/python_pydantic.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/python_pytest.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/registry.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/rust_axum.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/types.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/typescript_next_page.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/typescript_next_route.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/executor.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/plan_schema.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/planner.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/recipes.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/skill_opt.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/stack_registry.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/skill_router.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/sprint_loader.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/standalone_migration.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/task_operator.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/task_spec.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/SKILL.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/go-gin/admin-crud.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/go-gin/auth-jwt.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/go-gin/crud-resource.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/php-laravel/admin-crud.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/php-laravel/auth-jwt.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/php-laravel/crud-resource.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/php-vanilla/docs-marker.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/admin-crud.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/auth-jwt.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/background-worker.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/crud-resource.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/file-upload.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/oauth-integration.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/scheduled-job.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/websocket.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/rust-axum/admin-crud.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/rust-axum/auth-jwt.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/rust-axum/crud-resource.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/ts-nextjs/admin-crud.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/ts-nextjs/auth-jwt.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/ts-nextjs/crud-resource.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/simplicio_prompt.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/tree/bin/app.sh +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/tree/test/app.bats +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/tree/src/App.Api/App.Api.csproj +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/tree/src/App.Api/Program.cs +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/tree/tests/App.Tests/App.Tests.csproj +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/tree/tests/App.Tests/HealthTests.cs +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/App.Web.csproj +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Components/App.razor +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Components/Pages/Home.razor +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Program.cs +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/tests/App.Tests/App.Tests.csproj +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/tests/App.Tests/HealthTests.cs +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/tree/lib/main.dart +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/tree/pubspec.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/tree/test/widget_test.dart +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/config/config.exs +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app/application.ex +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/controllers/health_controller.ex +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/endpoint.ex +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/router.ex +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/mix.exs +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/test/health_controller_test.exs +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/test/test_helper.exs +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/tree/cmd/root.go +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/tree/cmd/root_test.go +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/tree/go.mod +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/tree/main.go +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/tree/cmd/server/main.go +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/tree/go.mod +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/tree/internal/http/router.go +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/tree/internal/http/router_test.go +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/tree/cmd/server/main.go +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/tree/go.mod +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/tree/internal/http/router.go +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/tree/internal/http/router_test.go +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/tree/build.gradle.kts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/tree/settings.gradle.kts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/tree/src/main/java/com/example/Application.java +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/tree/src/main/java/com/example/HealthController.java +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/tree/src/test/java/com/example/HealthControllerTest.java +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/tree/package.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/tree/src/app.js +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/tree/src/server.js +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/tree/tests/health.test.js +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/app/build.gradle.kts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/AndroidManifest.xml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/java/com/example/app/MainActivity.kt +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/res/values/styles.xml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/test/java/com/example/app/SmokeTest.kt +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/build.gradle.kts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/settings.gradle.kts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/tree/build.gradle.kts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/tree/settings.gradle.kts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/tree/src/main/kotlin/com/example/Application.kt +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/tree/src/test/kotlin/com/example/ApplicationTest.kt +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/tree/build.gradle.kts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/tree/settings.gradle.kts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/tree/src/main/kotlin/com/example/Application.kt +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/tree/src/main/kotlin/com/example/HealthController.kt +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/tree/src/test/kotlin/com/example/HealthControllerTest.kt +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/artisan +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/bootstrap/app.php +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/composer.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/phpunit.xml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/routes/api.php +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/routes/console.php +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/tests/Feature/HealthTest.php +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/tests/TestCase.php +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/tree/composer.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/tree/src/Controller/HealthController.php +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/tree/tests/HealthControllerTest.php +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/tree/composer.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/tree/phpunit.xml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/tree/src/Health.php +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/tree/tests/HealthTest.php +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/tree/pyproject.toml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/tree/src/app/__init__.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/tree/src/app/cli.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/tree/tests/test_cli.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/app/__init__.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/app/apps.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/app/tests.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/app/views.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/config/__init__.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/config/asgi.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/config/settings.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/config/urls.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/config/wsgi.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/manage.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/pyproject.toml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/.gitignore +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/README.template.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/pyproject.toml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/ruff.toml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/src/api/__init__.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/src/main.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/tests/test_health.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/tree/pyproject.toml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/tree/ruff.toml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/tree/src/app.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/tree/tests/test_health.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/index.html +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/package.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/src/App.test.tsx +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/src/App.tsx +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/src/main.tsx +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/tsconfig.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/Gemfile +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/app/controllers/health_controller.rb +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/bin/rails +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/config/application.rb +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/config/boot.rb +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/config/routes.rb +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/test/controllers/health_controller_test.rb +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/test/test_helper.rb +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/tree/Cargo.toml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/tree/src/main.rs +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/tree/Cargo.toml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/tree/src/main.rs +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/tree/Cargo.toml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/tree/src/main.rs +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/tree/Sources/App/App.swift +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/tree/Sources/App/ContentView.swift +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/tree/Tests/AppTests/AppTests.swift +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/tree/Package.swift +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/tree/Sources/App/main.swift +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/tree/Tests/AppTests/HealthTests.swift +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/package.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/src/app.controller.spec.ts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/src/app.controller.ts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/src/app.module.ts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/src/main.ts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/tsconfig.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/.eslintrc.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/.gitignore +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/next.config.mjs +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/package.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/pnpm-workspace.yaml +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/src/app/layout.tsx +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/src/app/page.tsx +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/tsconfig.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/practices.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/stack.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/README.md +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/app/root.tsx +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/app/routes/_index.tsx +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/app/routes/health.test.ts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/app/routes/health.ts +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/package.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/tsconfig.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/verify.json +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/userpromptsubmit-hook.sh +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/token_primitives.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/toon_codec.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/transaction.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/utils/__init__.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/utils/cache.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/utils/http_client.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/utils/serialization.py +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio_cli.egg-info/dependency_links.txt +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio_cli.egg-info/entry_points.txt +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio_cli.egg-info/top_level.txt +0 -0
- {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/tests/test_json_boundaries.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: simplicio-cli
|
|
3
|
-
Version: 0.18.
|
|
3
|
+
Version: 0.18.3
|
|
4
4
|
Summary: Deterministic task-to-code contract and verification CLI. It never executes or provisions an LLM.
|
|
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.26.
|
|
31
|
+
Requires-Dist: simplicio-mapper>=0.26.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
|
|
@@ -40,7 +40,7 @@ Requires-Dist: sentence-transformers>=5.6.0; extra == "ml"
|
|
|
40
40
|
Provides-Extra: bench
|
|
41
41
|
Requires-Dist: fpdf2>=2.8.7; extra == "bench"
|
|
42
42
|
Provides-Extra: fast
|
|
43
|
-
Requires-Dist: simplicio-fast<
|
|
43
|
+
Requires-Dist: simplicio-fast<3,>=2.0.18; extra == "fast"
|
|
44
44
|
Provides-Extra: performance
|
|
45
45
|
Requires-Dist: uvloop>=0.21.0; sys_platform != "win32" and extra == "performance"
|
|
46
46
|
Provides-Extra: all
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "simplicio-cli"
|
|
3
|
-
version = "0.18.
|
|
3
|
+
version = "0.18.3"
|
|
4
4
|
description = "Deterministic task-to-code contract and verification CLI. It never executes or provisions an LLM."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "MIT" }
|
|
@@ -45,7 +45,7 @@ classifiers = [
|
|
|
45
45
|
# (generated, `--check`-able) for the full graph and #99 for the audit.
|
|
46
46
|
dependencies = [
|
|
47
47
|
"numpy>=2.1.0",
|
|
48
|
-
"simplicio-mapper>=0.26.
|
|
48
|
+
"simplicio-mapper>=0.26.2",
|
|
49
49
|
"simplicio-prompt>=1.14.1",
|
|
50
50
|
"httpx>=0.28.1",
|
|
51
51
|
"orjson>=3.11.9",
|
|
@@ -62,7 +62,7 @@ ml = ["sentence-transformers>=5.6.0"]
|
|
|
62
62
|
bench = ["fpdf2>=2.8.7"]
|
|
63
63
|
# Optional canonical Fast adapter. It remains outside the base install until
|
|
64
64
|
# its release train is formally promoted.
|
|
65
|
-
fast = ["simplicio-fast>=0.
|
|
65
|
+
fast = ["simplicio-fast>=2.0.18,<3"]
|
|
66
66
|
# Opt-in faster asyncio event loop for the structured-concurrency runtime
|
|
67
67
|
# (simplicio.runtime_async, issue #212). Never required: `install_uvloop()`
|
|
68
68
|
# no-ops on Windows or when this extra is absent, falling back to stdlib
|
|
@@ -692,6 +692,7 @@ def _main_unwrapped(argv=None):
|
|
|
692
692
|
|
|
693
693
|
# Stage ABI mutations fail closed before verbosity/parser/dispatch can run.
|
|
694
694
|
from .mutation_dispatch import guard_mutable_dispatch
|
|
695
|
+
|
|
695
696
|
guard_mutable_dispatch(argv)
|
|
696
697
|
|
|
697
698
|
quiet, verbose, argv = _extract_global_verbosity(argv)
|
|
@@ -769,6 +770,7 @@ def main(argv=None):
|
|
|
769
770
|
"""Run legacy commands directly or wrap Stage ABI mutations pre-to-post."""
|
|
770
771
|
args = list(sys.argv[1:] if argv is None else argv)
|
|
771
772
|
from .stage_main import run_stage_or_legacy
|
|
773
|
+
|
|
772
774
|
return run_stage_or_legacy(args, _main_unwrapped)
|
|
773
775
|
|
|
774
776
|
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""Portable Codex hook bridge for the installed Simplicio CLI.
|
|
2
|
+
|
|
3
|
+
Codex sends hook context as JSON on stdin. This module deliberately keeps
|
|
4
|
+
the hook observational: malformed input, unsupported events, and detector
|
|
5
|
+
errors never block the host agent. UserPromptSubmit is the one event with a
|
|
6
|
+
useful side effect: it emits the existing deterministic task hint on stderr.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import json
|
|
12
|
+
import os
|
|
13
|
+
import sys
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
from .detect import detect
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _payload(raw: str) -> dict[str, Any]:
|
|
20
|
+
if not raw.strip():
|
|
21
|
+
return {}
|
|
22
|
+
try:
|
|
23
|
+
value = json.loads(raw)
|
|
24
|
+
except (TypeError, ValueError):
|
|
25
|
+
return {}
|
|
26
|
+
return value if isinstance(value, dict) else {}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _event(payload: dict[str, Any]) -> str:
|
|
30
|
+
value = payload.get("hook_event_name") or payload.get("event") or payload.get("type")
|
|
31
|
+
return str(value or "").strip().lower()
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _prompt(payload: dict[str, Any]) -> str:
|
|
35
|
+
for key in ("prompt", "user_prompt", "text"):
|
|
36
|
+
value = payload.get(key)
|
|
37
|
+
if isinstance(value, str):
|
|
38
|
+
return value
|
|
39
|
+
return ""
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def main() -> int:
|
|
43
|
+
if os.environ.get("SIMPLICIO_HOOK_GUARD"):
|
|
44
|
+
return 0
|
|
45
|
+
|
|
46
|
+
payload = _payload(sys.stdin.read())
|
|
47
|
+
if _event(payload) not in {"userpromptsubmit", "user_prompt_submit"}:
|
|
48
|
+
return 0
|
|
49
|
+
|
|
50
|
+
prompt = _prompt(payload)
|
|
51
|
+
if not prompt:
|
|
52
|
+
return 0
|
|
53
|
+
|
|
54
|
+
try:
|
|
55
|
+
result = detect(prompt)
|
|
56
|
+
if result.is_code_task:
|
|
57
|
+
sys.stderr.write(f"{result.hint}\n")
|
|
58
|
+
except Exception:
|
|
59
|
+
# Hooks must never take down or block the host agent.
|
|
60
|
+
return 0
|
|
61
|
+
return 0
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
if __name__ == "__main__":
|
|
65
|
+
raise SystemExit(main())
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import hashlib
|
|
6
|
-
import json
|
|
7
5
|
import time
|
|
6
|
+
from collections.abc import Callable, Mapping
|
|
8
7
|
from dataclasses import dataclass, field
|
|
9
|
-
from typing import Any
|
|
8
|
+
from typing import Any
|
|
10
9
|
|
|
11
10
|
from simplicio.plan_compiler.canonical_hash import canonical_hash
|
|
12
11
|
|
|
@@ -58,8 +58,7 @@ class EffectTransaction:
|
|
|
58
58
|
with self._db() as database:
|
|
59
59
|
database.execute("BEGIN IMMEDIATE")
|
|
60
60
|
database.execute(
|
|
61
|
-
"UPDATE transactions SET state=?, receipt=COALESCE(?, receipt) "
|
|
62
|
-
"WHERE idempotency_key=?",
|
|
61
|
+
"UPDATE transactions SET state=?, receipt=COALESCE(?, receipt) WHERE idempotency_key=?",
|
|
63
62
|
(state, encoded, key),
|
|
64
63
|
)
|
|
65
64
|
database.execute(
|
|
@@ -82,8 +81,7 @@ class EffectTransaction:
|
|
|
82
81
|
with self._db() as database:
|
|
83
82
|
database.execute("BEGIN IMMEDIATE")
|
|
84
83
|
row = database.execute(
|
|
85
|
-
"SELECT change_set_hash,state,receipt FROM transactions "
|
|
86
|
-
"WHERE idempotency_key=?",
|
|
84
|
+
"SELECT change_set_hash,state,receipt FROM transactions WHERE idempotency_key=?",
|
|
87
85
|
(key,),
|
|
88
86
|
).fetchone()
|
|
89
87
|
if row:
|
|
@@ -236,9 +236,15 @@ def prepare_execution_inputs(
|
|
|
236
236
|
) -> PreparedExecutionInputs:
|
|
237
237
|
"""Resolve installed-entrypoint inputs without probing in standalone mode."""
|
|
238
238
|
if requested_mode(mode, root) == "standalone":
|
|
239
|
+
# Standalone still needs to consume an explicitly supplied context pack.
|
|
240
|
+
# Previously the path arguments were silently ignored in this branch, so
|
|
241
|
+
# Loop's local degraded context never reached the task precondition gate.
|
|
242
|
+
resolved_pack = (
|
|
243
|
+
context_pack if context_pack is not None else _load_context_pack(root, context_pack_path)
|
|
244
|
+
)
|
|
239
245
|
return PreparedExecutionInputs(
|
|
240
246
|
context_snapshot,
|
|
241
|
-
|
|
247
|
+
resolved_pack,
|
|
242
248
|
execution_context,
|
|
243
249
|
authorization,
|
|
244
250
|
effect_sink,
|
|
@@ -324,7 +330,7 @@ def blocked_input_profile(
|
|
|
324
330
|
},
|
|
325
331
|
{"configured": False, "production": False, "kind": None},
|
|
326
332
|
None,
|
|
327
|
-
os.environ.get("SIMPLICIO_EXECUTION_ROLLOUT", str(config.get("rollout", "
|
|
333
|
+
os.environ.get("SIMPLICIO_EXECUTION_ROLLOUT", str(config.get("rollout", "default"))),
|
|
328
334
|
False,
|
|
329
335
|
error.code,
|
|
330
336
|
policy.to_dict(),
|
|
@@ -361,7 +367,7 @@ def negotiate_execution_mode(
|
|
|
361
367
|
"""Negotiate only from versioned contracts; never infer from files/help/process names."""
|
|
362
368
|
requested = requested_mode(mode, root)
|
|
363
369
|
config = _config(root)
|
|
364
|
-
rollout = os.environ.get("SIMPLICIO_EXECUTION_ROLLOUT", str(config.get("rollout", "
|
|
370
|
+
rollout = os.environ.get("SIMPLICIO_EXECUTION_ROLLOUT", str(config.get("rollout", "default")))
|
|
365
371
|
coordinator = {
|
|
366
372
|
"kind": coordinator_kind or os.environ.get("SIMPLICIO_COORDINATOR_KIND", "unknown"),
|
|
367
373
|
"id": coordinator_id or os.environ.get("SIMPLICIO_COORDINATOR_ID", ""),
|
|
@@ -24,7 +24,7 @@ def execution_mode_blocker(profile: Any) -> dict[str, Any]:
|
|
|
24
24
|
[runtime["capability"]] if not runtime.get("capability_available") else []
|
|
25
25
|
),
|
|
26
26
|
"runtime_version": runtime.get("version"),
|
|
27
|
-
"compatible_dev_cli_version": ">=0.
|
|
27
|
+
"compatible_dev_cli_version": ">=0.18.1",
|
|
28
28
|
"next_action": "run `simplicio-py runtime verify --json`, then retry",
|
|
29
29
|
}
|
|
30
30
|
)
|
|
@@ -12,8 +12,8 @@ from typing import Any
|
|
|
12
12
|
|
|
13
13
|
FAST_DISTRIBUTION = "simplicio-fast"
|
|
14
14
|
FAST_MODULE = "simplicio_fast"
|
|
15
|
-
FAST_MIN_VERSION = (
|
|
16
|
-
FAST_MAX_MAJOR =
|
|
15
|
+
FAST_MIN_VERSION = (2, 0, 18)
|
|
16
|
+
FAST_MAX_MAJOR = 3
|
|
17
17
|
CAPABILITIES_SCHEMA = "simplicio.fast-capabilities/v1"
|
|
18
18
|
DOCTOR_SCHEMA = "simplicio.fast-doctor/v1"
|
|
19
19
|
RECEIPT_SCHEMA = "simplicio.fast-local-receipt/v1"
|
|
@@ -87,7 +87,7 @@ def fast_preflight(*, offline: bool = False) -> FastPreflight:
|
|
|
87
87
|
mapper_version,
|
|
88
88
|
False,
|
|
89
89
|
"fast-version-outside-supported-range",
|
|
90
|
-
f"install {FAST_DISTRIBUTION}>=0.
|
|
90
|
+
f"install {FAST_DISTRIBUTION}>=2.0.18,<3",
|
|
91
91
|
)
|
|
92
92
|
|
|
93
93
|
parser_available = _module_available(f"{FAST_MODULE}.parsers", "SIMPLICIO_FAST_PARSER_AVAILABLE")
|
|
@@ -109,7 +109,7 @@ def capabilities_contract(*, offline: bool = False) -> dict[str, Any]:
|
|
|
109
109
|
"schema": CAPABILITIES_SCHEMA,
|
|
110
110
|
"availability": preflight.to_dict(),
|
|
111
111
|
"compatibility": {
|
|
112
|
-
"fast": ">=0.
|
|
112
|
+
"fast": ">=2.0.18,<3",
|
|
113
113
|
"mapper": "installed version reported; negotiated through snapshot schema",
|
|
114
114
|
},
|
|
115
115
|
"schemas": [
|
|
@@ -65,7 +65,7 @@ def _ram_macos() -> float | None:
|
|
|
65
65
|
if out.returncode != 0:
|
|
66
66
|
return None
|
|
67
67
|
return int(out.stdout.strip()) / (1024**3)
|
|
68
|
-
except (
|
|
68
|
+
except (OSError, subprocess.TimeoutExpired, ValueError):
|
|
69
69
|
return None
|
|
70
70
|
|
|
71
71
|
|
|
@@ -95,7 +95,11 @@ def _gpu_nvidia() -> tuple[float, str] | None:
|
|
|
95
95
|
text=True,
|
|
96
96
|
timeout=5,
|
|
97
97
|
)
|
|
98
|
-
|
|
98
|
+
# Captured console handles can be invalid under Windows test runners
|
|
99
|
+
# (WinError 6/50). Hardware probing is advisory, so every OS-level
|
|
100
|
+
# process-launch failure must degrade to "no GPU" instead of failing
|
|
101
|
+
# `doctor --json`.
|
|
102
|
+
except (OSError, subprocess.TimeoutExpired):
|
|
99
103
|
return None
|
|
100
104
|
if out.returncode != 0 or not out.stdout.strip():
|
|
101
105
|
return None
|
|
@@ -129,7 +133,7 @@ def _gpu_apple_silicon() -> tuple[float, str] | None:
|
|
|
129
133
|
text=True,
|
|
130
134
|
timeout=3,
|
|
131
135
|
)
|
|
132
|
-
except (
|
|
136
|
+
except (OSError, subprocess.TimeoutExpired):
|
|
133
137
|
return None
|
|
134
138
|
if out.returncode != 0:
|
|
135
139
|
return None
|
|
@@ -366,7 +366,13 @@ def get_effective_map_view(root: str | os.PathLike[str], *, force_remap: bool =
|
|
|
366
366
|
manifest + worktree overlay from disk when the live git identity still
|
|
367
367
|
matches them — this is the "no redundant full remap" path (issue #213).
|
|
368
368
|
"""
|
|
369
|
-
|
|
369
|
+
root_path = Path(root).resolve()
|
|
370
|
+
# Mapper inspection may materialize its own cache under ``.simplicio``.
|
|
371
|
+
# Resolve that state before fingerprinting the worktree, otherwise the
|
|
372
|
+
# cache write changes ``git status`` after the overlay path is chosen and
|
|
373
|
+
# makes the just-created overlay unreachable on the next call.
|
|
374
|
+
artifacts = artifact_status(root_path)
|
|
375
|
+
identity = resolve_git_identity(root_path)
|
|
370
376
|
cache_key = _cache_key(identity)
|
|
371
377
|
if not force_remap and cache_key in _VIEW_CACHE:
|
|
372
378
|
return _VIEW_CACHE[cache_key]
|
|
@@ -390,8 +396,6 @@ def get_effective_map_view(root: str | os.PathLike[str], *, force_remap: bool =
|
|
|
390
396
|
if overlay_candidate.matches(identity):
|
|
391
397
|
overlay = overlay_candidate
|
|
392
398
|
|
|
393
|
-
artifacts = artifact_status(identity.root)
|
|
394
|
-
|
|
395
399
|
if canonical is not None and overlay is not None:
|
|
396
400
|
source = SOURCE_CANONICAL_OVERLAY_HIT
|
|
397
401
|
else:
|
|
@@ -178,7 +178,7 @@ def map_ask(
|
|
|
178
178
|
data = run_mapper_json(root, "ask", extra=extra, revision=revision, snapshot_id=snapshot_id)
|
|
179
179
|
if data is None:
|
|
180
180
|
return None
|
|
181
|
-
return _normalize_ask_results(data.get("results"))
|
|
181
|
+
return _normalize_ask_results(data.get("results"))
|
|
182
182
|
|
|
183
183
|
|
|
184
184
|
def _safe_json(path: Path) -> dict[str, Any] | None:
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""Mandatory pre-dispatch Hookwall guard for every Stage ABI mutation route."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import os
|
|
7
|
+
from collections.abc import Mapping, Sequence
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
from .mutation_lifecycle import MUTABLE_ENTRYPOINTS
|
|
11
|
+
from .mutation_worker import MutationBlocked, validate
|
|
12
|
+
|
|
13
|
+
READ_ONLY = {"status", "claims", "inspect", "doctor", "versions", "file", "detect", "runtime", "fast"}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def route_name(argv: Sequence[str]) -> str:
|
|
17
|
+
if not argv:
|
|
18
|
+
return ""
|
|
19
|
+
for length in range(min(3, len(argv)), 0, -1):
|
|
20
|
+
candidate = ".".join(argv[:length])
|
|
21
|
+
if candidate in MUTABLE_ENTRYPOINTS:
|
|
22
|
+
return candidate
|
|
23
|
+
return argv[0]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def guard_mutable_dispatch(argv: Sequence[str], environ: Mapping[str, str] | None = None) -> None:
|
|
27
|
+
env = dict(os.environ if environ is None else environ)
|
|
28
|
+
route = route_name(argv)
|
|
29
|
+
if route in READ_ONLY or route not in MUTABLE_ENTRYPOINTS:
|
|
30
|
+
return
|
|
31
|
+
if env.get("SIMPLICIO_STAGE_ABI") != "1":
|
|
32
|
+
return # compatibility lane; never presented as Stage ABI
|
|
33
|
+
path = env.get("SIMPLICIO_MECHANICAL_PLAN", "")
|
|
34
|
+
if not path:
|
|
35
|
+
raise MutationBlocked("MECHANICAL_PLAN_REQUIRED")
|
|
36
|
+
plan_path = Path(path)
|
|
37
|
+
try:
|
|
38
|
+
plan = json.loads(plan_path.read_text(encoding="utf-8"))
|
|
39
|
+
except (OSError, ValueError) as exc:
|
|
40
|
+
raise MutationBlocked("MECHANICAL_PLAN_INVALID") from exc
|
|
41
|
+
root = Path(env.get("SIMPLICIO_WORKSPACE", ".")).resolve()
|
|
42
|
+
sealed = validate(plan, root)
|
|
43
|
+
expected = env.get("SIMPLICIO_IDEMPOTENCY_KEY")
|
|
44
|
+
if not expected or sealed["idempotency_key"] != expected:
|
|
45
|
+
raise MutationBlocked("IDEMPOTENCY_KEY_REQUIRED")
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"""Recovery, verification and rollback lifecycle for the Stage ABI worker."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
from collections.abc import Callable
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from .mutation_worker import RECEIPT, MutationBlocked, MutationWorker, digest
|
|
10
|
+
|
|
11
|
+
MUTABLE_ENTRYPOINTS = {
|
|
12
|
+
"index",
|
|
13
|
+
"task",
|
|
14
|
+
"run",
|
|
15
|
+
"cache.clear",
|
|
16
|
+
"init",
|
|
17
|
+
"env-export",
|
|
18
|
+
"mechanical-edit",
|
|
19
|
+
"changeset",
|
|
20
|
+
"edit",
|
|
21
|
+
"test.run",
|
|
22
|
+
"prototype.apply",
|
|
23
|
+
"prototype.scaffold",
|
|
24
|
+
"prototype.plan",
|
|
25
|
+
"prototype.promote",
|
|
26
|
+
"prototype.reject",
|
|
27
|
+
"prototype.batch",
|
|
28
|
+
"memory.init",
|
|
29
|
+
"memory.store",
|
|
30
|
+
"memory.handoff",
|
|
31
|
+
"token.context-cache.put",
|
|
32
|
+
"token.context-cache.invalidate",
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def verify_receipt(receipt: dict[str, Any]) -> bool:
|
|
37
|
+
if receipt.get("schema") != RECEIPT:
|
|
38
|
+
return False
|
|
39
|
+
supplied = receipt.get("receipt_hash")
|
|
40
|
+
return isinstance(supplied, str) and supplied == digest(
|
|
41
|
+
{key: value for key, value in receipt.items() if key != "receipt_hash"}
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def recover(worker: MutationWorker, key: str, observer: Callable[[], dict[str, Any]]) -> dict[str, Any]:
|
|
46
|
+
with worker._db() as db:
|
|
47
|
+
row = db.execute("SELECT plan_hash,state,receipt FROM mutations WHERE key=?", (key,)).fetchone()
|
|
48
|
+
if not row or row[1] not in {"RESERVED", "UNCERTAIN"}:
|
|
49
|
+
raise MutationBlocked("RECOVERY_NOT_REQUIRED")
|
|
50
|
+
observed = observer()
|
|
51
|
+
if observed.get("status") == "committed":
|
|
52
|
+
receipt = {
|
|
53
|
+
"schema": RECEIPT,
|
|
54
|
+
"plan_id": observed["plan_id"],
|
|
55
|
+
"plan_hash": row[0],
|
|
56
|
+
"idempotency_key": key,
|
|
57
|
+
"before_hash": observed["before_hash"],
|
|
58
|
+
"after_hash": observed["after_hash"],
|
|
59
|
+
"status": "committed",
|
|
60
|
+
"operations": observed.get("operations", []),
|
|
61
|
+
}
|
|
62
|
+
receipt["receipt_hash"] = digest(receipt)
|
|
63
|
+
with worker._db() as db:
|
|
64
|
+
db.execute(
|
|
65
|
+
"UPDATE mutations SET state='VERIFIED',receipt=? WHERE key=?",
|
|
66
|
+
(json.dumps(receipt, sort_keys=True), key),
|
|
67
|
+
)
|
|
68
|
+
return receipt
|
|
69
|
+
raise MutationBlocked("RECOVERY_OBSERVATION_INSUFFICIENT")
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def rollback(
|
|
73
|
+
worker: MutationWorker, key: str, restorer: Callable[[dict[str, Any]], dict[str, Any]]
|
|
74
|
+
) -> dict[str, Any]:
|
|
75
|
+
with worker._db() as db:
|
|
76
|
+
row = db.execute("SELECT state,receipt FROM mutations WHERE key=?", (key,)).fetchone()
|
|
77
|
+
if not row or row[0] not in {"VERIFIED", "UNCERTAIN"}:
|
|
78
|
+
raise MutationBlocked("ROLLBACK_NOT_ALLOWED")
|
|
79
|
+
prior = json.loads(row[1]) if row[1] else {}
|
|
80
|
+
result = restorer(prior)
|
|
81
|
+
if result.get("status") != "restored":
|
|
82
|
+
raise MutationBlocked("ROLLBACK_UNVERIFIED")
|
|
83
|
+
receipt = {
|
|
84
|
+
"schema": "simplicio.rollback-receipt/v1",
|
|
85
|
+
"idempotency_key": key,
|
|
86
|
+
"mutation_receipt_hash": prior.get("receipt_hash"),
|
|
87
|
+
"restored_hash": result["restored_hash"],
|
|
88
|
+
"status": "restored",
|
|
89
|
+
}
|
|
90
|
+
receipt["receipt_hash"] = digest(receipt)
|
|
91
|
+
with worker._db() as db:
|
|
92
|
+
db.execute(
|
|
93
|
+
"UPDATE mutations SET state='ROLLED_BACK',receipt=? WHERE key=?",
|
|
94
|
+
(json.dumps(receipt, sort_keys=True), key),
|
|
95
|
+
)
|
|
96
|
+
return receipt
|
|
@@ -1,23 +1,38 @@
|
|
|
1
1
|
"""Fail-closed Stage ABI mutation worker for MechanicalPlanV1."""
|
|
2
|
+
|
|
2
3
|
from __future__ import annotations
|
|
3
|
-
|
|
4
|
+
|
|
5
|
+
import hashlib
|
|
6
|
+
import json
|
|
7
|
+
import sqlite3
|
|
8
|
+
from collections.abc import Callable
|
|
4
9
|
from pathlib import Path
|
|
5
|
-
from typing import Any
|
|
10
|
+
from typing import Any
|
|
6
11
|
|
|
7
12
|
SCHEMA = "simplicio.mechanical-plan/v1"
|
|
8
13
|
RECEIPT = "simplicio.mutation-receipt/v1"
|
|
9
14
|
|
|
15
|
+
|
|
10
16
|
class MutationBlocked(RuntimeError):
|
|
11
17
|
def __init__(self, reason_code: str):
|
|
12
18
|
self.reason_code = reason_code
|
|
13
19
|
super().__init__(reason_code)
|
|
14
20
|
|
|
21
|
+
|
|
15
22
|
def digest(value: Any) -> str:
|
|
16
23
|
return hashlib.sha256(json.dumps(value, sort_keys=True, separators=(",", ":")).encode()).hexdigest()
|
|
17
24
|
|
|
25
|
+
|
|
18
26
|
def validate(plan: dict[str, Any], root: Path) -> dict[str, Any]:
|
|
19
|
-
required = (
|
|
20
|
-
|
|
27
|
+
required = (
|
|
28
|
+
"schema",
|
|
29
|
+
"plan_id",
|
|
30
|
+
"source_hash",
|
|
31
|
+
"idempotency_key",
|
|
32
|
+
"operations",
|
|
33
|
+
"effect_set",
|
|
34
|
+
"hookwall_pre",
|
|
35
|
+
)
|
|
21
36
|
if any(not plan.get(key) for key in required) or plan["schema"] != SCHEMA:
|
|
22
37
|
raise MutationBlocked("MECHANICAL_PLAN_INVALID")
|
|
23
38
|
pre = plan["hookwall_pre"]
|
|
@@ -29,51 +44,76 @@ def validate(plan: dict[str, Any], root: Path) -> dict[str, Any]:
|
|
|
29
44
|
if not isinstance(value, str) or Path(value).is_absolute() or ".." in Path(value).parts:
|
|
30
45
|
raise MutationBlocked("PATH_ESCAPE")
|
|
31
46
|
candidate = (root.resolve() / value).resolve()
|
|
32
|
-
try:
|
|
33
|
-
|
|
47
|
+
try:
|
|
48
|
+
candidate.relative_to(root.resolve())
|
|
49
|
+
except ValueError as exc:
|
|
50
|
+
raise MutationBlocked("SYMLINK_ESCAPE") from exc
|
|
34
51
|
normalized["plan_hash"] = digest({k: normalized[k] for k in normalized if k != "plan_hash"})
|
|
35
52
|
if plan.get("plan_hash") and plan["plan_hash"] != normalized["plan_hash"]:
|
|
36
53
|
raise MutationBlocked("PLAN_TAMPERED")
|
|
37
54
|
return normalized
|
|
38
55
|
|
|
56
|
+
|
|
39
57
|
class MutationWorker:
|
|
40
58
|
def __init__(self, root: str | Path):
|
|
41
59
|
self.root = Path(root)
|
|
42
60
|
self.db_path = self.root / ".simplicio" / "mutation-worker.sqlite3"
|
|
43
61
|
self.db_path.parent.mkdir(parents=True, exist_ok=True)
|
|
44
62
|
with self._db() as db:
|
|
45
|
-
db.execute(
|
|
63
|
+
db.execute(
|
|
64
|
+
"CREATE TABLE IF NOT EXISTS mutations("
|
|
65
|
+
"key TEXT PRIMARY KEY, plan_hash TEXT, state TEXT, receipt TEXT)"
|
|
66
|
+
)
|
|
67
|
+
|
|
46
68
|
def _db(self):
|
|
47
69
|
db = sqlite3.connect(self.db_path, isolation_level=None)
|
|
48
|
-
db.execute("PRAGMA journal_mode=WAL")
|
|
70
|
+
db.execute("PRAGMA journal_mode=WAL")
|
|
71
|
+
db.execute("PRAGMA synchronous=FULL")
|
|
49
72
|
return db
|
|
50
|
-
|
|
51
|
-
|
|
73
|
+
|
|
74
|
+
def execute(
|
|
75
|
+
self, plan: dict[str, Any], executor: Callable[[dict[str, Any]], dict[str, Any]]
|
|
76
|
+
) -> dict[str, Any]:
|
|
77
|
+
sealed = validate(plan, self.root)
|
|
78
|
+
key = sealed["idempotency_key"]
|
|
52
79
|
with self._db() as db:
|
|
53
80
|
db.execute("BEGIN IMMEDIATE")
|
|
54
81
|
row = db.execute("SELECT plan_hash,state,receipt FROM mutations WHERE key=?", (key,)).fetchone()
|
|
55
82
|
if row:
|
|
56
83
|
db.execute("COMMIT")
|
|
57
|
-
if row[0] != sealed["plan_hash"]:
|
|
58
|
-
|
|
84
|
+
if row[0] != sealed["plan_hash"]:
|
|
85
|
+
raise MutationBlocked("IDEMPOTENCY_LINEAGE_MISMATCH")
|
|
86
|
+
if row[1] == "VERIFIED":
|
|
87
|
+
return json.loads(row[2])
|
|
59
88
|
raise MutationBlocked("RECOVERY_REQUIRED")
|
|
60
89
|
db.execute("INSERT INTO mutations VALUES(?,?,?,NULL)", (key, sealed["plan_hash"], "RESERVED"))
|
|
61
90
|
db.execute("COMMIT")
|
|
62
91
|
try:
|
|
63
92
|
result = executor(sealed)
|
|
64
93
|
except BaseException:
|
|
65
|
-
with self._db() as db:
|
|
94
|
+
with self._db() as db:
|
|
95
|
+
db.execute("UPDATE mutations SET state='UNCERTAIN' WHERE key=?", (key,))
|
|
66
96
|
raise
|
|
67
97
|
if result.get("status") != "ok" or not result.get("applied"):
|
|
68
|
-
with self._db() as db:
|
|
98
|
+
with self._db() as db:
|
|
99
|
+
db.execute("UPDATE mutations SET state='ROLLED_BACK' WHERE key=?", (key,))
|
|
69
100
|
raise MutationBlocked("EFFECT_NOT_COMMITTED")
|
|
70
|
-
receipt = {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
101
|
+
receipt = {
|
|
102
|
+
"schema": RECEIPT,
|
|
103
|
+
"plan_id": sealed["plan_id"],
|
|
104
|
+
"plan_hash": sealed["plan_hash"],
|
|
105
|
+
"idempotency_key": key,
|
|
106
|
+
"before_hash": result["before_hash"],
|
|
107
|
+
"after_hash": result["after_hash"],
|
|
108
|
+
"status": "committed",
|
|
109
|
+
"operations": result.get("operations", []),
|
|
110
|
+
}
|
|
74
111
|
receipt["receipt_hash"] = digest(receipt)
|
|
75
112
|
with self._db() as db:
|
|
76
113
|
db.execute("BEGIN IMMEDIATE")
|
|
77
|
-
db.execute(
|
|
114
|
+
db.execute(
|
|
115
|
+
"UPDATE mutations SET state='VERIFIED',receipt=? WHERE key=?",
|
|
116
|
+
(json.dumps(receipt, sort_keys=True), key),
|
|
117
|
+
)
|
|
78
118
|
db.execute("COMMIT")
|
|
79
119
|
return receipt
|
|
@@ -451,7 +451,12 @@ def run_task(
|
|
|
451
451
|
blocked_preconditions=[blocker],
|
|
452
452
|
)
|
|
453
453
|
if dry_run_task:
|
|
454
|
-
blockers = _dry_run_preconditions(
|
|
454
|
+
blockers = _dry_run_preconditions(
|
|
455
|
+
root,
|
|
456
|
+
target,
|
|
457
|
+
context_pack=context_pack,
|
|
458
|
+
allow_degraded_mapper=requested_execution_mode == "standalone",
|
|
459
|
+
)
|
|
455
460
|
if blockers:
|
|
456
461
|
warnings = [item["message"] for item in blockers]
|
|
457
462
|
return _task_result(
|
|
@@ -464,6 +469,21 @@ def run_task(
|
|
|
464
469
|
blocked_preconditions=blockers,
|
|
465
470
|
target_kind=target_kind(root, target),
|
|
466
471
|
)
|
|
472
|
+
if os.environ.get("SIMPLICIO_STANDALONE_PREFLIGHT", "").strip().lower() in {
|
|
473
|
+
"1",
|
|
474
|
+
"true",
|
|
475
|
+
"yes",
|
|
476
|
+
"on",
|
|
477
|
+
}:
|
|
478
|
+
return _task_result(
|
|
479
|
+
target,
|
|
480
|
+
prompt,
|
|
481
|
+
"",
|
|
482
|
+
applied=False,
|
|
483
|
+
status="dry_run",
|
|
484
|
+
warnings=["standalone_preflight_provider_skipped"],
|
|
485
|
+
target_kind=target_kind(root, target),
|
|
486
|
+
)
|
|
467
487
|
# Issue #210 AC6: snapshot bound paths BEFORE generate() so an
|
|
468
488
|
# out-of-band mutation that happens while the provider subprocess is
|
|
469
489
|
# running (e.g. the target deleted mid-stall) is caught even though
|
|
@@ -924,8 +944,6 @@ def run_task_spec(root, stack, task_spec: TaskSpec, **kwargs: Any) -> dict[str,
|
|
|
924
944
|
"""
|
|
925
945
|
if not isinstance(task_spec, TaskSpec):
|
|
926
946
|
raise TypeError("run_task_spec requires a simplicio.task_spec.TaskSpec")
|
|
927
|
-
if "task_spec" in kwargs:
|
|
928
|
-
raise TypeError("run_task_spec does not accept a second task_spec argument")
|
|
929
947
|
narrative = task_spec.narrative
|
|
930
948
|
goal = str(narrative.get("goal") or narrative.get("want") or task_spec.functionality or task_spec.task_id)
|
|
931
949
|
criteria = "\n".join(
|