palmengine 0.7.4__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.
- palmengine-0.7.4/.gitignore +232 -0
- palmengine-0.7.4/CHANGELOG.md +158 -0
- palmengine-0.7.4/PKG-INFO +370 -0
- palmengine-0.7.4/README.md +323 -0
- palmengine-0.7.4/docs/node_modules/@jridgewell/gen-mapping/LICENSE +19 -0
- palmengine-0.7.4/docs/node_modules/@jridgewell/gen-mapping/README.md +227 -0
- palmengine-0.7.4/docs/node_modules/@jridgewell/remapping/LICENSE +19 -0
- palmengine-0.7.4/docs/node_modules/@jridgewell/remapping/README.md +218 -0
- palmengine-0.7.4/docs/node_modules/@jridgewell/resolve-uri/LICENSE +19 -0
- palmengine-0.7.4/docs/node_modules/@jridgewell/resolve-uri/README.md +40 -0
- palmengine-0.7.4/docs/node_modules/@jridgewell/sourcemap-codec/LICENSE +19 -0
- palmengine-0.7.4/docs/node_modules/@jridgewell/sourcemap-codec/README.md +264 -0
- palmengine-0.7.4/docs/node_modules/@jridgewell/trace-mapping/LICENSE +19 -0
- palmengine-0.7.4/docs/node_modules/@jridgewell/trace-mapping/README.md +348 -0
- palmengine-0.7.4/docs/node_modules/@parcel/watcher/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/@parcel/watcher/README.md +136 -0
- palmengine-0.7.4/docs/node_modules/@parcel/watcher-linux-x64-glibc/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/@parcel/watcher-linux-x64-glibc/README.md +1 -0
- palmengine-0.7.4/docs/node_modules/@parcel/watcher-linux-x64-musl/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/@parcel/watcher-linux-x64-musl/README.md +1 -0
- palmengine-0.7.4/docs/node_modules/@tailwindcss/cli/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/@tailwindcss/cli/README.md +36 -0
- palmengine-0.7.4/docs/node_modules/@tailwindcss/node/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/@tailwindcss/node/README.md +36 -0
- palmengine-0.7.4/docs/node_modules/@tailwindcss/oxide/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/@tailwindcss/oxide-linux-x64-gnu/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/@tailwindcss/oxide-linux-x64-gnu/README.md +3 -0
- palmengine-0.7.4/docs/node_modules/@tailwindcss/oxide-linux-x64-musl/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/@tailwindcss/oxide-linux-x64-musl/README.md +3 -0
- palmengine-0.7.4/docs/node_modules/detect-libc/LICENSE +201 -0
- palmengine-0.7.4/docs/node_modules/detect-libc/README.md +163 -0
- palmengine-0.7.4/docs/node_modules/enhanced-resolve/LICENSE +20 -0
- palmengine-0.7.4/docs/node_modules/enhanced-resolve/README.md +784 -0
- palmengine-0.7.4/docs/node_modules/graceful-fs/LICENSE +15 -0
- palmengine-0.7.4/docs/node_modules/graceful-fs/README.md +143 -0
- palmengine-0.7.4/docs/node_modules/is-extglob/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/is-extglob/README.md +107 -0
- palmengine-0.7.4/docs/node_modules/is-glob/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/is-glob/README.md +206 -0
- palmengine-0.7.4/docs/node_modules/jiti/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/jiti/README.md +258 -0
- palmengine-0.7.4/docs/node_modules/lightningcss/LICENSE +373 -0
- palmengine-0.7.4/docs/node_modules/lightningcss/README.md +105 -0
- palmengine-0.7.4/docs/node_modules/lightningcss-linux-x64-gnu/LICENSE +373 -0
- palmengine-0.7.4/docs/node_modules/lightningcss-linux-x64-gnu/README.md +1 -0
- palmengine-0.7.4/docs/node_modules/lightningcss-linux-x64-musl/LICENSE +373 -0
- palmengine-0.7.4/docs/node_modules/lightningcss-linux-x64-musl/README.md +1 -0
- palmengine-0.7.4/docs/node_modules/magic-string/LICENSE +7 -0
- palmengine-0.7.4/docs/node_modules/magic-string/README.md +325 -0
- palmengine-0.7.4/docs/node_modules/node-addon-api/README.md +319 -0
- palmengine-0.7.4/docs/node_modules/node-addon-api/tools/README.md +73 -0
- palmengine-0.7.4/docs/node_modules/picocolors/LICENSE +15 -0
- palmengine-0.7.4/docs/node_modules/picocolors/README.md +21 -0
- palmengine-0.7.4/docs/node_modules/picomatch/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/picomatch/README.md +749 -0
- palmengine-0.7.4/docs/node_modules/source-map-js/LICENSE +28 -0
- palmengine-0.7.4/docs/node_modules/source-map-js/README.md +765 -0
- palmengine-0.7.4/docs/node_modules/tailwindcss/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/tailwindcss/README.md +36 -0
- palmengine-0.7.4/docs/node_modules/tapable/LICENSE +21 -0
- palmengine-0.7.4/docs/node_modules/tapable/README.md +715 -0
- palmengine-0.7.4/examples/README.md +103 -0
- palmengine-0.7.4/examples/definitions/approval_workflow.py +100 -0
- palmengine-0.7.4/examples/definitions/data_ingestion.py +97 -0
- palmengine-0.7.4/examples/definitions/onboard.py +85 -0
- palmengine-0.7.4/examples/definitions/quick_wizard.py +29 -0
- palmengine-0.7.4/examples/full_demo.py +128 -0
- palmengine-0.7.4/pyproject.toml +131 -0
- palmengine-0.7.4/src/palm/__init__.py +23 -0
- palmengine-0.7.4/src/palm/app/__init__.py +22 -0
- palmengine-0.7.4/src/palm/app/app.py +356 -0
- palmengine-0.7.4/src/palm/app/bootstrap.py +124 -0
- palmengine-0.7.4/src/palm/app/cli_settings.py +63 -0
- palmengine-0.7.4/src/palm/app/registry.py +72 -0
- palmengine-0.7.4/src/palm/app/resolvers.py +43 -0
- palmengine-0.7.4/src/palm/app/session.py +67 -0
- palmengine-0.7.4/src/palm/app/settings.py +61 -0
- palmengine-0.7.4/src/palm/backends/__init__.py +5 -0
- palmengine-0.7.4/src/palm/backends/behavior_tree/__init__.py +7 -0
- palmengine-0.7.4/src/palm/backends/behavior_tree/runner.py +68 -0
- palmengine-0.7.4/src/palm/common/__init__.py +91 -0
- palmengine-0.7.4/src/palm/common/exceptions.py +50 -0
- palmengine-0.7.4/src/palm/common/executions/__init__.py +12 -0
- palmengine-0.7.4/src/palm/common/executions/executor.py +413 -0
- palmengine-0.7.4/src/palm/common/executions/flow_submission.py +114 -0
- palmengine-0.7.4/src/palm/common/executions/process_submission.py +55 -0
- palmengine-0.7.4/src/palm/common/hooks/__init__.py +6 -0
- palmengine-0.7.4/src/palm/common/hooks/instance_persistence.py +68 -0
- palmengine-0.7.4/src/palm/common/hooks/state_snapshot.py +72 -0
- palmengine-0.7.4/src/palm/common/managers/__init__.py +15 -0
- palmengine-0.7.4/src/palm/common/managers/base.py +25 -0
- palmengine-0.7.4/src/palm/common/managers/instance_manager.py +341 -0
- palmengine-0.7.4/src/palm/common/patterns/__init__.py +6 -0
- palmengine-0.7.4/src/palm/common/patterns/build_context.py +23 -0
- palmengine-0.7.4/src/palm/common/patterns/builder.py +51 -0
- palmengine-0.7.4/src/palm/common/persistence/__init__.py +23 -0
- palmengine-0.7.4/src/palm/common/persistence/definition_repository.py +299 -0
- palmengine-0.7.4/src/palm/common/persistence/instance_repository.py +193 -0
- palmengine-0.7.4/src/palm/common/persistence/instance_resume.py +16 -0
- palmengine-0.7.4/src/palm/common/persistence/instance_sync.py +110 -0
- palmengine-0.7.4/src/palm/common/plans/__init__.py +7 -0
- palmengine-0.7.4/src/palm/common/plans/execution_plan.py +59 -0
- palmengine-0.7.4/src/palm/common/plans/process_plan.py +32 -0
- palmengine-0.7.4/src/palm/common/plans/registry.py +68 -0
- palmengine-0.7.4/src/palm/common/storage/__init__.py +5 -0
- palmengine-0.7.4/src/palm/common/storage/factory.py +141 -0
- palmengine-0.7.4/src/palm/core/__init__.py +112 -0
- palmengine-0.7.4/src/palm/core/auth/__init__.py +9 -0
- palmengine-0.7.4/src/palm/core/auth/engine.py +57 -0
- palmengine-0.7.4/src/palm/core/base.py +54 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/__init__.py +58 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/base.py +92 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/base_pattern.py +39 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/composite.py +24 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/decorator.py +37 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/engine.py +118 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/exceptions.py +21 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/leaf.py +20 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/__init__.py +27 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/composite/__init__.py +10 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/composite/parallel_node.py +74 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/composite/selector_node.py +35 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/composite/sequence_node.py +35 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/decorator/__init__.py +7 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/decorator/inverter_node.py +21 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/decorator/repeat_node.py +38 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/decorator/retry_node.py +33 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/leaf/__init__.py +11 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/leaf/action_node.py +31 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/leaf/condition_node.py +26 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/nodes/leaf/interactive_leaf.py +45 -0
- palmengine-0.7.4/src/palm/core/behavior_tree/root.py +19 -0
- palmengine-0.7.4/src/palm/core/context/__init__.py +10 -0
- palmengine-0.7.4/src/palm/core/context/base_state.py +43 -0
- palmengine-0.7.4/src/palm/core/context/engine.py +110 -0
- palmengine-0.7.4/src/palm/core/event/__init__.py +9 -0
- palmengine-0.7.4/src/palm/core/event/engine.py +52 -0
- palmengine-0.7.4/src/palm/core/exceptions.py +56 -0
- palmengine-0.7.4/src/palm/core/orchestration/__init__.py +35 -0
- palmengine-0.7.4/src/palm/core/orchestration/drive.py +38 -0
- palmengine-0.7.4/src/palm/core/orchestration/engine.py +316 -0
- palmengine-0.7.4/src/palm/core/orchestration/events.py +17 -0
- palmengine-0.7.4/src/palm/core/orchestration/exceptions.py +47 -0
- palmengine-0.7.4/src/palm/core/orchestration/execution/__init__.py +5 -0
- palmengine-0.7.4/src/palm/core/orchestration/execution/base_runner.py +18 -0
- palmengine-0.7.4/src/palm/core/orchestration/execution_context.py +16 -0
- palmengine-0.7.4/src/palm/core/orchestration/hooks.py +65 -0
- palmengine-0.7.4/src/palm/core/orchestration/input_capable.py +26 -0
- palmengine-0.7.4/src/palm/core/orchestration/job.py +142 -0
- palmengine-0.7.4/src/palm/core/orchestration/job_state.py +40 -0
- palmengine-0.7.4/src/palm/core/orchestration/mode/__init__.py +8 -0
- palmengine-0.7.4/src/palm/core/orchestration/mode/base_mode.py +52 -0
- palmengine-0.7.4/src/palm/core/orchestration/mode/unconfigured_mode.py +41 -0
- palmengine-0.7.4/src/palm/core/orchestration/run_result.py +24 -0
- palmengine-0.7.4/src/palm/core/registry.py +73 -0
- palmengine-0.7.4/src/palm/core/resource/__init__.py +10 -0
- palmengine-0.7.4/src/palm/core/resource/base_provider.py +29 -0
- palmengine-0.7.4/src/palm/core/resource/engine.py +39 -0
- palmengine-0.7.4/src/palm/core/storage/__init__.py +10 -0
- palmengine-0.7.4/src/palm/core/storage/base_backend.py +53 -0
- palmengine-0.7.4/src/palm/core/storage/engine.py +93 -0
- palmengine-0.7.4/src/palm/definitions/__init__.py +10 -0
- palmengine-0.7.4/src/palm/definitions/flow.py +67 -0
- palmengine-0.7.4/src/palm/definitions/process.py +70 -0
- palmengine-0.7.4/src/palm/instances/__init__.py +9 -0
- palmengine-0.7.4/src/palm/instances/process_instance.py +113 -0
- palmengine-0.7.4/src/palm/instances/state_snapshot.py +80 -0
- palmengine-0.7.4/src/palm/instances/status_history.py +42 -0
- palmengine-0.7.4/src/palm/patterns/__init__.py +15 -0
- palmengine-0.7.4/src/palm/patterns/_apps.py +18 -0
- palmengine-0.7.4/src/palm/patterns/_registry.py +134 -0
- palmengine-0.7.4/src/palm/patterns/dag/__init__.py +10 -0
- palmengine-0.7.4/src/palm/patterns/dag/builder.py +26 -0
- palmengine-0.7.4/src/palm/patterns/dag/pattern.py +21 -0
- palmengine-0.7.4/src/palm/patterns/dag/registry.py +9 -0
- palmengine-0.7.4/src/palm/patterns/etl/__init__.py +10 -0
- palmengine-0.7.4/src/palm/patterns/etl/builder.py +26 -0
- palmengine-0.7.4/src/palm/patterns/etl/pattern.py +26 -0
- palmengine-0.7.4/src/palm/patterns/etl/registry.py +9 -0
- palmengine-0.7.4/src/palm/patterns/wizard/__init__.py +63 -0
- palmengine-0.7.4/src/palm/patterns/wizard/action_leaf.py +94 -0
- palmengine-0.7.4/src/palm/patterns/wizard/backtrack.py +71 -0
- palmengine-0.7.4/src/palm/patterns/wizard/base.py +10 -0
- palmengine-0.7.4/src/palm/patterns/wizard/builder.py +170 -0
- palmengine-0.7.4/src/palm/patterns/wizard/commit_leaf.py +113 -0
- palmengine-0.7.4/src/palm/patterns/wizard/config.py +156 -0
- palmengine-0.7.4/src/palm/patterns/wizard/events.py +19 -0
- palmengine-0.7.4/src/palm/patterns/wizard/handler.py +94 -0
- palmengine-0.7.4/src/palm/patterns/wizard/keys.py +23 -0
- palmengine-0.7.4/src/palm/patterns/wizard/options.py +66 -0
- palmengine-0.7.4/src/palm/patterns/wizard/pattern.py +143 -0
- palmengine-0.7.4/src/palm/patterns/wizard/persistence.py +54 -0
- palmengine-0.7.4/src/palm/patterns/wizard/registry.py +24 -0
- palmengine-0.7.4/src/palm/patterns/wizard/resume.py +34 -0
- palmengine-0.7.4/src/palm/patterns/wizard/step_kinds.py +13 -0
- palmengine-0.7.4/src/palm/patterns/wizard/step_leaf.py +98 -0
- palmengine-0.7.4/src/palm/patterns/wizard/submission.py +21 -0
- palmengine-0.7.4/src/palm/patterns/wizard/summary_leaf.py +78 -0
- palmengine-0.7.4/src/palm/patterns/wizard/tree.py +78 -0
- palmengine-0.7.4/src/palm/patterns/wizard/validation.py +137 -0
- palmengine-0.7.4/src/palm/providers/__init__.py +13 -0
- palmengine-0.7.4/src/palm/providers/_apps.py +14 -0
- palmengine-0.7.4/src/palm/providers/graphql/__init__.py +6 -0
- palmengine-0.7.4/src/palm/providers/graphql/provider.py +20 -0
- palmengine-0.7.4/src/palm/providers/graphql/registry.py +6 -0
- palmengine-0.7.4/src/palm/providers/postgres/__init__.py +6 -0
- palmengine-0.7.4/src/palm/providers/postgres/provider.py +20 -0
- palmengine-0.7.4/src/palm/providers/postgres/registry.py +6 -0
- palmengine-0.7.4/src/palm/providers/rest/__init__.py +6 -0
- palmengine-0.7.4/src/palm/providers/rest/provider.py +20 -0
- palmengine-0.7.4/src/palm/providers/rest/registry.py +6 -0
- palmengine-0.7.4/src/palm/runtimes/__init__.py +24 -0
- palmengine-0.7.4/src/palm/runtimes/base.py +290 -0
- palmengine-0.7.4/src/palm/runtimes/cli.py +118 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/__init__.py +6 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/actions.py +68 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/args.py +211 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/bootstrap.py +53 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/commands/__init__.py +5 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/commands/registry.py +413 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/completion.py +184 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/context.py +80 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/display.py +178 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/doctor.py +112 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/instance_ops.py +126 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/instances.py +52 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/output.py +33 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/repl.py +88 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/settings.py +5 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/startup.py +67 -0
- palmengine-0.7.4/src/palm/runtimes/cli_pkg/version_info.py +59 -0
- palmengine-0.7.4/src/palm/runtimes/daemon.py +46 -0
- palmengine-0.7.4/src/palm/runtimes/embedded.py +27 -0
- palmengine-0.7.4/src/palm/runtimes/hooks.py +115 -0
- palmengine-0.7.4/src/palm/runtimes/host.py +41 -0
- palmengine-0.7.4/src/palm/runtimes/schedulers/__init__.py +6 -0
- palmengine-0.7.4/src/palm/runtimes/schedulers/inline.py +61 -0
- palmengine-0.7.4/src/palm/runtimes/schedulers/queued.py +133 -0
- palmengine-0.7.4/src/palm/runtimes/server/__init__.py +6 -0
- palmengine-0.7.4/src/palm/runtimes/server/auth.py +37 -0
- palmengine-0.7.4/src/palm/runtimes/server/http.py +281 -0
- palmengine-0.7.4/src/palm/runtimes/server/runtime.py +195 -0
- palmengine-0.7.4/src/palm/runtimes/wiring.py +59 -0
- palmengine-0.7.4/src/palm/states/__init__.py +10 -0
- palmengine-0.7.4/src/palm/states/blackboard_state.py +40 -0
- palmengine-0.7.4/src/palm/storages/__init__.py +21 -0
- palmengine-0.7.4/src/palm/storages/_apps.py +20 -0
- palmengine-0.7.4/src/palm/storages/filesystem/__init__.py +6 -0
- palmengine-0.7.4/src/palm/storages/filesystem/backend.py +175 -0
- palmengine-0.7.4/src/palm/storages/filesystem/registry.py +6 -0
- palmengine-0.7.4/src/palm/storages/memory/__init__.py +6 -0
- palmengine-0.7.4/src/palm/storages/memory/backend.py +42 -0
- palmengine-0.7.4/src/palm/storages/memory/registry.py +6 -0
- palmengine-0.7.4/src/palm/storages/mongodb/__init__.py +6 -0
- palmengine-0.7.4/src/palm/storages/mongodb/backend.py +81 -0
- palmengine-0.7.4/src/palm/storages/mongodb/registry.py +6 -0
- palmengine-0.7.4/src/palm/storages/postgres/__init__.py +6 -0
- palmengine-0.7.4/src/palm/storages/postgres/backend.py +36 -0
- palmengine-0.7.4/src/palm/storages/postgres/registry.py +6 -0
- palmengine-0.7.4/src/palm/utils/__init__.py +5 -0
- palmengine-0.7.4/tests/__init__.py +1 -0
- palmengine-0.7.4/tests/conftest.py +22 -0
- palmengine-0.7.4/tests/core/__init__.py +1 -0
- palmengine-0.7.4/tests/core/conftest.py +111 -0
- palmengine-0.7.4/tests/core/fakes/__init__.py +102 -0
- palmengine-0.7.4/tests/core/fakes/mode.py +81 -0
- palmengine-0.7.4/tests/core/fakes/runner.py +83 -0
- palmengine-0.7.4/tests/core/fakes/state.py +59 -0
- palmengine-0.7.4/tests/core/test_behavior_tree.py +133 -0
- palmengine-0.7.4/tests/core/test_context.py +65 -0
- palmengine-0.7.4/tests/core/test_hooks.py +44 -0
- palmengine-0.7.4/tests/core/test_orchestration.py +168 -0
- palmengine-0.7.4/tests/test_auth_middleware.py +82 -0
- palmengine-0.7.4/tests/test_cli.py +302 -0
- palmengine-0.7.4/tests/test_cli_version.py +50 -0
- palmengine-0.7.4/tests/test_common_boundary.py +27 -0
- palmengine-0.7.4/tests/test_common_package.py +37 -0
- palmengine-0.7.4/tests/test_core_registry.py +239 -0
- palmengine-0.7.4/tests/test_daemon_runtime.py +85 -0
- palmengine-0.7.4/tests/test_definitions_storage.py +116 -0
- palmengine-0.7.4/tests/test_embedded.py +84 -0
- palmengine-0.7.4/tests/test_execution_plan.py +52 -0
- palmengine-0.7.4/tests/test_executions.py +244 -0
- palmengine-0.7.4/tests/test_filesystem_storage.py +197 -0
- palmengine-0.7.4/tests/test_instance_manager.py +214 -0
- palmengine-0.7.4/tests/test_instances.py +140 -0
- palmengine-0.7.4/tests/test_modular_apps.py +55 -0
- palmengine-0.7.4/tests/test_observability_hook.py +41 -0
- palmengine-0.7.4/tests/test_orchestration_integration.py +68 -0
- palmengine-0.7.4/tests/test_palm_app.py +111 -0
- palmengine-0.7.4/tests/test_placeholder.py +62 -0
- palmengine-0.7.4/tests/test_plan_registry.py +60 -0
- palmengine-0.7.4/tests/test_process_plan.py +64 -0
- palmengine-0.7.4/tests/test_queued_scheduler.py +95 -0
- palmengine-0.7.4/tests/test_runtime_host.py +60 -0
- palmengine-0.7.4/tests/test_server_plans_http.py +105 -0
- palmengine-0.7.4/tests/test_server_runtime.py +98 -0
- palmengine-0.7.4/tests/test_state_snapshot_hook.py +220 -0
- palmengine-0.7.4/tests/test_storage.py +116 -0
- palmengine-0.7.4/tests/test_wizard.py +378 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py.cover
|
|
50
|
+
*.lcov
|
|
51
|
+
.hypothesis/
|
|
52
|
+
.pytest_cache/
|
|
53
|
+
cover/
|
|
54
|
+
|
|
55
|
+
# Translations
|
|
56
|
+
*.mo
|
|
57
|
+
*.pot
|
|
58
|
+
|
|
59
|
+
# Django stuff:
|
|
60
|
+
*.log
|
|
61
|
+
local_settings.py
|
|
62
|
+
db.sqlite3
|
|
63
|
+
db.sqlite3-journal
|
|
64
|
+
|
|
65
|
+
# Flask stuff:
|
|
66
|
+
instance/
|
|
67
|
+
.webassets-cache
|
|
68
|
+
|
|
69
|
+
# Scrapy stuff:
|
|
70
|
+
.scrapy
|
|
71
|
+
|
|
72
|
+
# Sphinx documentation
|
|
73
|
+
docs/_build/
|
|
74
|
+
|
|
75
|
+
# PyBuilder
|
|
76
|
+
.pybuilder/
|
|
77
|
+
target/
|
|
78
|
+
|
|
79
|
+
# Jupyter Notebook
|
|
80
|
+
.ipynb_checkpoints
|
|
81
|
+
|
|
82
|
+
# IPython
|
|
83
|
+
profile_default/
|
|
84
|
+
ipython_config.py
|
|
85
|
+
|
|
86
|
+
# pyenv
|
|
87
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
88
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
89
|
+
# .python-version
|
|
90
|
+
|
|
91
|
+
# pipenv
|
|
92
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
93
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
94
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
95
|
+
# install all needed dependencies.
|
|
96
|
+
# Pipfile.lock
|
|
97
|
+
|
|
98
|
+
# UV
|
|
99
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
100
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
101
|
+
# commonly ignored for libraries.
|
|
102
|
+
# uv.lock
|
|
103
|
+
|
|
104
|
+
# poetry
|
|
105
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
106
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
107
|
+
# commonly ignored for libraries.
|
|
108
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
109
|
+
# poetry.lock
|
|
110
|
+
# poetry.toml
|
|
111
|
+
|
|
112
|
+
# pdm
|
|
113
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
114
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
115
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
116
|
+
# pdm.lock
|
|
117
|
+
# pdm.toml
|
|
118
|
+
.pdm-python
|
|
119
|
+
.pdm-build/
|
|
120
|
+
|
|
121
|
+
# pixi
|
|
122
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
123
|
+
# pixi.lock
|
|
124
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
125
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
126
|
+
.pixi/*
|
|
127
|
+
!.pixi/config.toml
|
|
128
|
+
|
|
129
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
130
|
+
__pypackages__/
|
|
131
|
+
|
|
132
|
+
# Celery stuff
|
|
133
|
+
celerybeat-schedule*
|
|
134
|
+
celerybeat.pid
|
|
135
|
+
|
|
136
|
+
# Redis
|
|
137
|
+
*.rdb
|
|
138
|
+
*.aof
|
|
139
|
+
*.pid
|
|
140
|
+
|
|
141
|
+
# RabbitMQ
|
|
142
|
+
mnesia/
|
|
143
|
+
rabbitmq/
|
|
144
|
+
rabbitmq-data/
|
|
145
|
+
|
|
146
|
+
# ActiveMQ
|
|
147
|
+
activemq-data/
|
|
148
|
+
|
|
149
|
+
# SageMath parsed files
|
|
150
|
+
*.sage.py
|
|
151
|
+
|
|
152
|
+
# Environments
|
|
153
|
+
.env
|
|
154
|
+
.envrc
|
|
155
|
+
.venv
|
|
156
|
+
env/
|
|
157
|
+
venv/
|
|
158
|
+
ENV/
|
|
159
|
+
env.bak/
|
|
160
|
+
venv.bak/
|
|
161
|
+
|
|
162
|
+
# Spyder project settings
|
|
163
|
+
.spyderproject
|
|
164
|
+
.spyproject
|
|
165
|
+
|
|
166
|
+
# Rope project settings
|
|
167
|
+
.ropeproject
|
|
168
|
+
|
|
169
|
+
# mkdocs documentation
|
|
170
|
+
/site
|
|
171
|
+
|
|
172
|
+
# mypy
|
|
173
|
+
.mypy_cache/
|
|
174
|
+
.dmypy.json
|
|
175
|
+
dmypy.json
|
|
176
|
+
|
|
177
|
+
# Pyre type checker
|
|
178
|
+
.pyre/
|
|
179
|
+
|
|
180
|
+
# pytype static type analyzer
|
|
181
|
+
.pytype/
|
|
182
|
+
|
|
183
|
+
# Cython debug symbols
|
|
184
|
+
cython_debug/
|
|
185
|
+
|
|
186
|
+
# PyCharm
|
|
187
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
188
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
189
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
190
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
191
|
+
# .idea/
|
|
192
|
+
|
|
193
|
+
# Abstra
|
|
194
|
+
# Abstra is an AI-powered process automation framework.
|
|
195
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
196
|
+
# Learn more at https://abstra.io/docs
|
|
197
|
+
.abstra/
|
|
198
|
+
|
|
199
|
+
# Visual Studio Code
|
|
200
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
201
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
202
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
203
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
204
|
+
# .vscode/
|
|
205
|
+
# Temporary file for partial code execution
|
|
206
|
+
tempCodeRunnerFile.py
|
|
207
|
+
|
|
208
|
+
# Ruff stuff:
|
|
209
|
+
.ruff_cache/
|
|
210
|
+
|
|
211
|
+
# PyPI configuration file
|
|
212
|
+
.pypirc
|
|
213
|
+
|
|
214
|
+
# Marimo
|
|
215
|
+
marimo/_static/
|
|
216
|
+
marimo/_lsp/
|
|
217
|
+
__marimo__/
|
|
218
|
+
|
|
219
|
+
# Streamlit
|
|
220
|
+
.streamlit/secrets.toml
|
|
221
|
+
|
|
222
|
+
# Database
|
|
223
|
+
*.db
|
|
224
|
+
|
|
225
|
+
# Repomix
|
|
226
|
+
repomix-output.xml
|
|
227
|
+
|
|
228
|
+
# Archive
|
|
229
|
+
archive/
|
|
230
|
+
|
|
231
|
+
# Data
|
|
232
|
+
data/
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Palm are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
4
|
+
|
|
5
|
+
## [0.7.4] — 2026-06-10
|
|
6
|
+
|
|
7
|
+
Distribution and adoption improvements — no breaking API changes.
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- **PyPI package renamed to `palmengine`** — install with `pip install palmengine[cli]`; Python import remains `import palm`; CLI command remains `palm`
|
|
12
|
+
- **Packaging** — `just build`, `just publish-test`, `just publish`, `just install-local`, `just release-prep`; GitHub Actions publish workflow
|
|
13
|
+
- **Documentation** — README installation section, DEVELOPMENT release guide, install commands updated across docs
|
|
14
|
+
|
|
15
|
+
## [0.7.0] — 2026-06-10
|
|
16
|
+
|
|
17
|
+
Production-ready persistence foundation, storage factory, and instance lifecycle coordination.
|
|
18
|
+
|
|
19
|
+
### Changed (architectural boundaries)
|
|
20
|
+
|
|
21
|
+
- **Wizard logic removed from `palm.common`** — instance field extraction, resume restoration, and submission metadata now live in `palm.patterns.wizard.persistence` and `palm.patterns.wizard.submission`, registered via `palm.patterns._registry`
|
|
22
|
+
- **`PatternBuildContext` slimmed** — no wizard metadata or default commit/validation registry resolution; wizard builder owns its defaults
|
|
23
|
+
- **Generic persistence preserved** — `snapshot_state`, `state_from_snapshot`, `build_instance_from_job`, `update_instance_from_job`, `prepare_resume_state` remain in `palm.common.persistence.instance_sync` and delegate to pattern hooks
|
|
24
|
+
|
|
25
|
+
### Added (CLI usability)
|
|
26
|
+
|
|
27
|
+
- **Global CLI flags** — `-b`/`-d`, `--config`, `-S`/`--enable-state-snapshot`, `--max-loaded-instances`, `--max-concurrent-active`, `--scheduler`, `--format` (`table`|`json`); merged via `settings_from_invocation()` with documented env precedence
|
|
28
|
+
- **REPL auto-completion** — context-aware suggestions for commands, wizard/process names, and instance ids (active by default; `--all` for terminal); snapshot command scoped to instances with snapshots
|
|
29
|
+
- **Instance workflows** — `instance list` filters (`--all`, `--status`, `--flow`, `--limit`), `instance prune [--dry-run]`, richer tables (status emoji, short + full ids), JSON output for scripting
|
|
30
|
+
- **`palm doctor`** — persistence mode panel and active (non-terminal) instance summary
|
|
31
|
+
|
|
32
|
+
### Added (continued)
|
|
33
|
+
|
|
34
|
+
- **`InstanceManager`** (`palm.common.managers`) — LRU cache, active-instance tracking, lightweight summaries, startup reconciliation, and thread-safe coordination over `InstanceRepository`
|
|
35
|
+
- **`BaseManager`** — minimal `initialize` / `shutdown` lifecycle contract for managers
|
|
36
|
+
- **`InstanceSummary`** — fast listing view for CLI `instance list` without full payload loads
|
|
37
|
+
- **Instance settings** — `max_loaded_instances`, `max_concurrent_active`, `reconcile_instances_on_startup` on `PalmSettings`
|
|
38
|
+
- **Manager tests** — `tests/test_instance_manager.py`
|
|
39
|
+
|
|
40
|
+
### Changed (continued)
|
|
41
|
+
|
|
42
|
+
- **CLI bootstrap** — thin `PalmApp` client; `resolve_cli_settings()` respects `PALM_*` env unless flags are explicit; persistence banner in REPL/doctor
|
|
43
|
+
- **CLI instance resolution** — `instance list` shows full ids; prefix/name resolution shared across `status`, `snapshots`, and `resume`; all commands use `instance_manager`
|
|
44
|
+
- **`PalmApp`** — shared `instance_manager` property; instance APIs route through the manager
|
|
45
|
+
- **`BaseRuntime`** — wires hooks and executor through `InstanceManager`; shared manager across app runtimes
|
|
46
|
+
- **CLI** — `instance list`, `doctor`, and snapshot commands use the manager layer
|
|
47
|
+
|
|
48
|
+
### Added
|
|
49
|
+
|
|
50
|
+
- **`FilesystemStorageBackend`** — production filesystem persistence with atomic writes (temp file + rename), JSON serialization, namespace key paths (`palm:instances:*` → nested `.json` files), thread-safe operations, and v0.6 flat-file read compatibility
|
|
51
|
+
- **`StorageFactory`** (`palm.common.storage`) — lazy backend registration, `PalmSettings`-driven `backend_options`, and `initialize_engine()` / `select()` helpers
|
|
52
|
+
- **Storage exceptions** — `StoragePermissionError`, `StorageCorruptionError` in `palm.core.exceptions`
|
|
53
|
+
- **Optional storage extras** — `postgres` and `mongodb` uv extras for lazy-loaded backends
|
|
54
|
+
- **Filesystem tests** — `tests/test_filesystem_storage.py` (unit + repository + `PalmApp` integration)
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- **`BaseRuntime.start()`** — initializes shared `StorageEngine` via `StorageFactory` (respects `backend_options` from `PalmSettings.data_dir`)
|
|
59
|
+
- **`runtime_start_options()`** — forwards filesystem `data_dir` through `backend_options`
|
|
60
|
+
- **Repository list methods** — skip missing or corrupted index entries instead of failing entire listings
|
|
61
|
+
- **Storage autoload** — core backends (`memory`, `filesystem`) register at import; `postgres` / `mongodb` load lazily on first use
|
|
62
|
+
- **`FilesystemBackend`** — alias retained; canonical class is `FilesystemStorageBackend`
|
|
63
|
+
|
|
64
|
+
### Configuration
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
export PALM_STORAGE_BACKEND=filesystem
|
|
68
|
+
export PALM_DATA_DIR=./data # optional; defaults to ./data
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## [0.6.0] — 2026-06-07
|
|
72
|
+
|
|
73
|
+
Major orchestration maturation release: authoritative lifecycle, layered runtimes, execution plans, and production-oriented server/daemon surfaces.
|
|
74
|
+
|
|
75
|
+
### Added
|
|
76
|
+
|
|
77
|
+
- **`palm.app` layer** — `PalmApp`, `PalmSettings`, multi-runtime registry, shared storage, definition bootstrap
|
|
78
|
+
- **`palm.common` package** — shared coordination split into `executions/`, `plans/`, `hooks/`, `persistence/`, `patterns/`
|
|
79
|
+
- **Django-style extensible apps** — `patterns/`, `providers/`, `storages/` restructured as self-contained subpackages with per-app `registry.py` and `INSTALLED_*` autoload lists
|
|
80
|
+
- **Pattern builder registry** — each pattern app registers its own `builder.py`; `common/patterns/builder.py` dispatches generically
|
|
81
|
+
- **Lifecycle authority** — `RunResult` + `OrchestrationEngine.apply_result()` as sole job transition path
|
|
82
|
+
- **Scheduling model** — `JobScheduler` (inline/queued) composes with `JobRunner`; shared `drive_job` primitive
|
|
83
|
+
- **Middleware** — `JobHook` protocol with drive-phase hooks (`on_before_drive`, `on_after_drive`); `AuthMiddleware`, `DriveObservabilityHook`, `InstancePersistenceHook`
|
|
84
|
+
- **State snapshots** — optional `StateSnapshotHook` captures `BlackboardState` at configurable job status transitions; stored as bounded `state_snapshots[]` ring buffer on `ProcessInstance`; configured via `PalmSettings` (`enable_state_snapshot`, `snapshot_on_status`, `max_snapshots_per_instance`); CLI `palm instance snapshots <id>`; `PalmApp.list_instance_snapshots()`
|
|
85
|
+
- **Thread-safe registries** — `Registry`, pattern builder map, `CommitRegistry`, `PlanRegistry`, and `RuntimeRegistry` use `threading.RLock`; idempotent re-registration; concurrency tests in `tests/test_core_registry.py`
|
|
86
|
+
- **Executions handoff** — `ExecutionPlan`, `ProcessPlan`, `prepare_*_plan`, `submit_plan(s)`, `PlanRegistry` for deferred submission
|
|
87
|
+
- **Runtimes** — `RuntimeHost` protocol, `BaseRuntime` shared wiring, `DaemonRuntime`, `ServerRuntime` (stdlib HTTP API)
|
|
88
|
+
- **Auth** — `AuthEngine` wired on runtimes; `auth_enforce`, per-request `X-Palm-Subject` on server
|
|
89
|
+
- **Server API** — `POST /v1/plans/prepare`, `POST /v1/plans/submit`, job input/status endpoints
|
|
90
|
+
- **Migration guide** — [MIGRATION-0.6.md](MIGRATION-0.6.md)
|
|
91
|
+
|
|
92
|
+
### Changed
|
|
93
|
+
|
|
94
|
+
- **Package layout** — coordination logic moved from monolithic `palm.executions` to structured `palm.common`
|
|
95
|
+
- **EmbeddedRuntime** slimmed to policy wrapper over `BaseRuntime`
|
|
96
|
+
- **DefinitionExecutor** uses plan-based submission internally
|
|
97
|
+
- CLI storage flag renamed to `--storage-backend`
|
|
98
|
+
- Test double renamed: `TestBackend` → `TestRunner`
|
|
99
|
+
- Orchestration initialization uses `scheduler=` (not `mode=`)
|
|
100
|
+
|
|
101
|
+
### Removed
|
|
102
|
+
|
|
103
|
+
- **`palm.executions` package** — use `palm.common` and subpackages (`common.plans`, `common.hooks`, etc.)
|
|
104
|
+
- **`palm.patterns.wizard.commit`** — use `palm.patterns.wizard.handler`
|
|
105
|
+
- `ExecutionBackend` alias (use `JobRunner`)
|
|
106
|
+
- `BehaviorTreeBackend` alias (use `BehaviorTreeRunner`)
|
|
107
|
+
- `EmbeddedMode` (use `InlineScheduler`)
|
|
108
|
+
- `wire_instance_persistence()` (automatic hook registration)
|
|
109
|
+
- `ProcessExecutor` alias (use `DefinitionExecutor`)
|
|
110
|
+
- Deprecated `backend=` parameters on schedulers and runtime runner resolution
|
|
111
|
+
|
|
112
|
+
## [0.5.0-dev] — 2026-06-05
|
|
113
|
+
|
|
114
|
+
Milestone toward **0.5.0**: a production-oriented developer experience on top of the 0.4.0 architecture rebuild.
|
|
115
|
+
|
|
116
|
+
### Added
|
|
117
|
+
|
|
118
|
+
- **Executions layer** (`palm.executions`) — `DefinitionExecutor`, `DefinitionRepository`, pattern builder, and instance sync outside core
|
|
119
|
+
- **Persistent process instances** (`palm.instances`) — durable snapshots with status history; resume across runtime restarts when storage is shared
|
|
120
|
+
- **Pluggable state** — `BlackboardState` and orchestration job state decoupled from engine internals
|
|
121
|
+
- **Transactional wizards** — declarative validation, summary/commit steps, named commit handlers, resource action steps, backtracking
|
|
122
|
+
- **Modern CLI** (`palm.runtimes.cli_pkg`) — Rich output, REPL, `process` / `instance` / `wizard` commands, `input` / `back` / `status`
|
|
123
|
+
- **`palm doctor`** and **`palm status --full`** — engine health, registries, definition catalog, recent instances
|
|
124
|
+
- **`palm version --full`** — build and plugin matrix without starting a job
|
|
125
|
+
- **Example definitions** — onboarding, data ingestion, approval workflow, quick wizard under `examples/definitions/`
|
|
126
|
+
- **`examples/full_demo.py`** — end-to-end script: register → submit → input → commit → simulated restart → resume
|
|
127
|
+
- **Documentation** — README quick start, ARCHITECTURE.md, DEVELOPMENT.md, examples guide
|
|
128
|
+
- **`just` recipes** — `palm-doctor`, `palm-repl`, demos, `demo-full`, release-oriented `prepr`
|
|
129
|
+
|
|
130
|
+
### Changed
|
|
131
|
+
|
|
132
|
+
- **EmbeddedRuntime** high-level API — `submit_flow`, `submit_process`, `provide_input`, `resume_process`, `get_instance`
|
|
133
|
+
- CLI entry point rebuilt; legacy REPL command aliases retained during transition
|
|
134
|
+
- Version series opens at **0.5.0-dev** (supersedes 0.4.0-dev tracking)
|
|
135
|
+
|
|
136
|
+
### Architecture (carried from 0.4.0)
|
|
137
|
+
|
|
138
|
+
- Pure **core** layer with registry-based extension
|
|
139
|
+
- Patterns: wizard, DAG, ETL; providers: REST, GraphQL, Postgres; storages: memory, filesystem, MongoDB, Postgres
|
|
140
|
+
- Legacy code quarantined under `archive/` (not imported by new code)
|
|
141
|
+
|
|
142
|
+
## [0.4.0] — 2026
|
|
143
|
+
|
|
144
|
+
### Added
|
|
145
|
+
|
|
146
|
+
- Full package restructure: `palm.core`, `palm.patterns`, `palm.providers`, `palm.storages`, `palm.definitions`
|
|
147
|
+
- Registry-based pattern, provider, and storage registration
|
|
148
|
+
- Wizard, DAG, and ETL pattern skeletons
|
|
149
|
+
- Embedded runtime wiring and orchestration job lifecycle
|
|
150
|
+
- Core purity guard and AGENTS.md constitution
|
|
151
|
+
|
|
152
|
+
### Removed
|
|
153
|
+
|
|
154
|
+
- Monolithic pre-0.4.0 layout (preserved in `archive/` for reference)
|
|
155
|
+
|
|
156
|
+
## [0.3.x and earlier]
|
|
157
|
+
|
|
158
|
+
See `archive/` for legacy CLI, wizards, and behavior-tree implementations.
|