deepstrike 0.2.43__tar.gz → 0.2.45__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.
- {deepstrike-0.2.43 → deepstrike-0.2.45}/Cargo.lock +6 -6
- {deepstrike-0.2.43 → deepstrike-0.2.45}/Cargo.toml +2 -2
- {deepstrike-0.2.43 → deepstrike-0.2.45}/PKG-INFO +1 -1
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/runtime/kernel/protocol.rs +8 -1
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-py/src/lib.rs +4 -1
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/execution_plane.py +6 -3
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/kernel_step.py +10 -6
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/large_result_spool.py +12 -5
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/runner.py +2 -2
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/tools/execution.py +3 -1
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/tools/registry.py +60 -2
- {deepstrike-0.2.43 → deepstrike-0.2.45}/pyproject.toml +1 -1
- {deepstrike-0.2.43 → deepstrike-0.2.45}/README.md +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/Cargo.toml +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/benches/kernel_baseline.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/benchmark/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/compression.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/config.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/fault.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/manager.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/partitions.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/policy.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/pressure.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/renderer.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/renewal.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/skill_catalog.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/summarizer.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/task_state.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/text.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/token_engine.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/units.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/context/utility.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/governance/constraint.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/governance/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/governance/permission.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/governance/pipeline.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/governance/quota.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/governance/rate_limit.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/governance/repeat_fuse.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/governance/veto.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/harness/eval.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/harness/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/lexical.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/lib.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/memory/curator.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/memory/durable.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/memory/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/mm/handle.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/mm/memory.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/mm/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/mm/value.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/orchestration/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/orchestration/task_graph.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/orchestration/tournament.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/orchestration/workflow/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/orchestration/workflow/run.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/proc/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/runtime/event_log.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/runtime/kernel/runtime.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/runtime/kernel/tests.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/runtime/kernel.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/runtime/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/runtime/repair.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/runtime/replay.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/runtime/session.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/entropy.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/milestone.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/policy.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/rollback.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/cancellation.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/capability.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/eviction.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/gate.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/milestone_exec.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/process.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/signal.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/tests.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/workflow.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/tcb.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/signals/attention.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/signals/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/signals/queue.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/signals/router.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/syscall/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/types/agent.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/types/capability.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/types/contract.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/types/error.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/types/message.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/types/milestone.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/types/mod.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/types/policy.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/types/result.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/types/signal.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/types/skill.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/types/task.rs +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-py/Cargo.toml +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/collaboration/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/collaboration/contract.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/collaboration/handoff.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/collaboration/harness.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/collaboration/modes.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/collaboration/pool.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/governance.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/harness/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/harness/harness.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/harness/judge.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/kernel/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/knowledge/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/knowledge/source.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/memory/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/memory/agent.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/memory/extraction.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/memory/in_memory_store.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/memory/protocols.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/memory/ranking.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/memory/retention.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/memory/working.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/anthropic.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/anthropic_compatible.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/base.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/deepseek.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/factories.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/gemini.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/glm.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/kimi.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/minimax.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/ollama.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/openai.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/openai_responses.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/qwen.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/replay.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/replay_validator.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/stream.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/providers/vendor_profiles.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/archive.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/context_policy.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/credential_vault.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/eval.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/event_stream.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/facade.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/filtered_plane.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/kernel_event_log.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/kernel_rebuild.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/kernel_transaction_log.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/loop_driver.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/mcp_proxy_plane.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/os_profile.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/os_snapshot.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/output_schema.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/process_sandbox_plane.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/provider_replay.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/reaction_checkpoint.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/reactive_session.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/reducers.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/reliability.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/remote_vpc_plane.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/replay_fixture.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/replay_provider.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/replay_sanitize.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/run_group.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/session_log.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/session_repair.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/sub_agent_orchestrator.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/turn_policy.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/workflow_control_flow.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/workflow_store.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/runtime/worktree_plane.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/safety/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/safety/permissions.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/signals/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/signals/gateway.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/signals/scheduled.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/signals/types.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/skills/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/skills/loader.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/skills/registry.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/skills/watcher.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/tools/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/tools/builtin/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/tools/builtin/read_file.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/tools/errors.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/types/__init__.py +0 -0
- {deepstrike-0.2.43 → deepstrike-0.2.45}/deepstrike/types/agent.py +0 -0
|
@@ -194,7 +194,7 @@ dependencies = [
|
|
|
194
194
|
|
|
195
195
|
[[package]]
|
|
196
196
|
name = "deepstrike-core"
|
|
197
|
-
version = "0.2.
|
|
197
|
+
version = "0.2.45"
|
|
198
198
|
dependencies = [
|
|
199
199
|
"compact_str",
|
|
200
200
|
"pretty_assertions",
|
|
@@ -206,7 +206,7 @@ dependencies = [
|
|
|
206
206
|
|
|
207
207
|
[[package]]
|
|
208
208
|
name = "deepstrike-lab"
|
|
209
|
-
version = "0.2.
|
|
209
|
+
version = "0.2.45"
|
|
210
210
|
dependencies = [
|
|
211
211
|
"deepstrike-core",
|
|
212
212
|
"serde",
|
|
@@ -216,7 +216,7 @@ dependencies = [
|
|
|
216
216
|
|
|
217
217
|
[[package]]
|
|
218
218
|
name = "deepstrike-node"
|
|
219
|
-
version = "0.2.
|
|
219
|
+
version = "0.2.45"
|
|
220
220
|
dependencies = [
|
|
221
221
|
"compact_str",
|
|
222
222
|
"deepstrike-core",
|
|
@@ -228,7 +228,7 @@ dependencies = [
|
|
|
228
228
|
|
|
229
229
|
[[package]]
|
|
230
230
|
name = "deepstrike-py"
|
|
231
|
-
version = "0.2.
|
|
231
|
+
version = "0.2.45"
|
|
232
232
|
dependencies = [
|
|
233
233
|
"compact_str",
|
|
234
234
|
"deepstrike-core",
|
|
@@ -239,7 +239,7 @@ dependencies = [
|
|
|
239
239
|
|
|
240
240
|
[[package]]
|
|
241
241
|
name = "deepstrike-sdk"
|
|
242
|
-
version = "0.2.
|
|
242
|
+
version = "0.2.45"
|
|
243
243
|
dependencies = [
|
|
244
244
|
"async-stream",
|
|
245
245
|
"async-trait",
|
|
@@ -273,7 +273,7 @@ dependencies = [
|
|
|
273
273
|
|
|
274
274
|
[[package]]
|
|
275
275
|
name = "deepstrike-wasm"
|
|
276
|
-
version = "0.2.
|
|
276
|
+
version = "0.2.45"
|
|
277
277
|
dependencies = [
|
|
278
278
|
"compact_str",
|
|
279
279
|
"deepstrike-core",
|
|
@@ -3,13 +3,13 @@ resolver = "2"
|
|
|
3
3
|
members = ["crates/deepstrike-core", "crates/deepstrike-py"]
|
|
4
4
|
|
|
5
5
|
[workspace.package]
|
|
6
|
-
version = "0.2.
|
|
6
|
+
version = "0.2.45"
|
|
7
7
|
edition = "2024"
|
|
8
8
|
license = "MIT"
|
|
9
9
|
repository = "https://github.com/kongusen/deepstrike"
|
|
10
10
|
|
|
11
11
|
[workspace.dependencies]
|
|
12
|
-
deepstrike-core = { path = "crates/deepstrike-core", version = "0.2.
|
|
12
|
+
deepstrike-core = { path = "crates/deepstrike-core", version = "0.2.45" }
|
|
13
13
|
notify = "6"
|
|
14
14
|
serde = { version = "1", features = ["derive"] }
|
|
15
15
|
serde_json = "1"
|
{deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/runtime/kernel/protocol.rs
RENAMED
|
@@ -92,6 +92,13 @@ pub struct KernelInput {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
impl KernelInput {
|
|
95
|
+
/// Operation identity used by [`Self::new`] for in-process callers. Hosts that correlate
|
|
96
|
+
/// against it (e.g. a `cancel_operation` for an operation started via `new`) must use this
|
|
97
|
+
/// constant, never a re-typed literal. NOT for durable wire hosts: anything keyed by
|
|
98
|
+
/// `(session, operation)` in storage that outlives the process needs a unique identity via
|
|
99
|
+
/// [`Self::correlated`].
|
|
100
|
+
pub const LOCAL_OPERATION_ID: &'static str = "local-operation";
|
|
101
|
+
|
|
95
102
|
/// Build an in-process input for callers that do not cross a durable wire boundary.
|
|
96
103
|
/// Wire hosts should use [`Self::correlated`] with their durable identities.
|
|
97
104
|
pub fn new(event: KernelInputEvent) -> Self {
|
|
@@ -99,7 +106,7 @@ impl KernelInput {
|
|
|
99
106
|
static LOCAL_EVENT_SEQUENCE: AtomicU64 = AtomicU64::new(1);
|
|
100
107
|
let event_seq = LOCAL_EVENT_SEQUENCE.fetch_add(1, Ordering::Relaxed);
|
|
101
108
|
Self::correlated(
|
|
102
|
-
|
|
109
|
+
Self::LOCAL_OPERATION_ID,
|
|
103
110
|
format!("local-event-{event_seq}"),
|
|
104
111
|
0,
|
|
105
112
|
event,
|
|
@@ -860,7 +860,10 @@ impl RenderedContext {
|
|
|
860
860
|
|
|
861
861
|
// ──────────────────────────────────────── KernelRuntime ────────────────────────────────────
|
|
862
862
|
|
|
863
|
-
|
|
863
|
+
// `weakref` so the SDK can key per-runtime wire state in a WeakKeyDictionary — a module dict
|
|
864
|
+
// keyed by id() aliases recycled addresses (a new runtime inherits a dead one's operation
|
|
865
|
+
// identity) and leaks an entry per runtime.
|
|
866
|
+
#[pyclass(weakref)]
|
|
864
867
|
struct KernelRuntime {
|
|
865
868
|
inner: RustKernelRuntime,
|
|
866
869
|
}
|
|
@@ -248,9 +248,11 @@ class LocalExecutionPlane:
|
|
|
248
248
|
audit=_audit,
|
|
249
249
|
)
|
|
250
250
|
try:
|
|
251
|
-
|
|
252
|
-
original_args_str = json.dumps(
|
|
253
|
-
validation
|
|
251
|
+
raw_kwargs = json.loads(call.arguments or "{}")
|
|
252
|
+
original_args_str = json.dumps(raw_kwargs)
|
|
253
|
+
# validation["args"], not raw_kwargs, from here on: a oneOf/anyOf ROOT accepts a repaired
|
|
254
|
+
# probe deep-copy — the original dict never sees those repairs (auto-casts, strips, defaults).
|
|
255
|
+
validation = validate_tool_arguments(registered.schema.parameters, raw_kwargs)
|
|
254
256
|
if validation.get("error"):
|
|
255
257
|
yield ToolResultEvent(
|
|
256
258
|
call_id=call.id,
|
|
@@ -261,6 +263,7 @@ class LocalExecutionPlane:
|
|
|
261
263
|
error_kind="recoverable",
|
|
262
264
|
)
|
|
263
265
|
return
|
|
266
|
+
kwargs = validation["args"]
|
|
264
267
|
if validation.get("repaired"):
|
|
265
268
|
yield ToolArgumentRepairedEvent(
|
|
266
269
|
call_id=call.id,
|
|
@@ -4,6 +4,7 @@ import json
|
|
|
4
4
|
import re
|
|
5
5
|
import time
|
|
6
6
|
import uuid
|
|
7
|
+
import weakref
|
|
7
8
|
from dataclasses import dataclass
|
|
8
9
|
from types import SimpleNamespace
|
|
9
10
|
from typing import Any
|
|
@@ -13,7 +14,11 @@ from deepstrike.providers.base import ContextBudgetOverflow, RenderedContext
|
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
KERNEL_ABI_VERSION = 2
|
|
16
|
-
|
|
17
|
+
# Keyed by the runtime OBJECT, not id(runtime): a plain dict keyed by id() aliases recycled
|
|
18
|
+
# addresses (a new runtime inherits a dead one's operation identity — fatal once a durable log
|
|
19
|
+
# keys chains by that identity) and leaks an entry per runtime. WeakKeyDictionary mirrors the
|
|
20
|
+
# Node/WASM WeakMap; the pyo3 KernelRuntime declares `weakref` support for exactly this.
|
|
21
|
+
_wire_states: "weakref.WeakKeyDictionary[Any, tuple[str, int]]" = weakref.WeakKeyDictionary()
|
|
17
22
|
|
|
18
23
|
|
|
19
24
|
def snapshot_kernel_runtime(runtime: Any) -> dict[str, Any]:
|
|
@@ -24,14 +29,14 @@ def restore_kernel_runtime(runtime: Any, snapshot: dict[str, Any]) -> None:
|
|
|
24
29
|
runtime.restore(json.dumps(snapshot))
|
|
25
30
|
operation_id = snapshot.get("operation_id")
|
|
26
31
|
if not operation_id:
|
|
27
|
-
_wire_states.pop(
|
|
32
|
+
_wire_states.pop(runtime, None)
|
|
28
33
|
return
|
|
29
34
|
next_sequence = 1
|
|
30
35
|
for accepted in snapshot.get("accepted_inputs") or []:
|
|
31
36
|
match = re.search(r"-event-(\d+)$", str(accepted.get("event_id") or ""))
|
|
32
37
|
if match:
|
|
33
38
|
next_sequence = max(next_sequence, int(match.group(1)) + 1)
|
|
34
|
-
_wire_states[
|
|
39
|
+
_wire_states[runtime] = (str(operation_id), next_sequence)
|
|
35
40
|
|
|
36
41
|
|
|
37
42
|
@dataclass
|
|
@@ -373,12 +378,11 @@ def _action_from_kernel(raw: dict[str, Any]) -> KernelRunnerAction:
|
|
|
373
378
|
|
|
374
379
|
|
|
375
380
|
def _step_input(runtime: Any, event: dict[str, Any]) -> str:
|
|
376
|
-
|
|
377
|
-
state = _wire_states.get(key)
|
|
381
|
+
state = _wire_states.get(runtime)
|
|
378
382
|
if state is None:
|
|
379
383
|
state = (f"python-operation-{uuid.uuid4()}", 1)
|
|
380
384
|
operation_id, sequence = state
|
|
381
|
-
_wire_states[
|
|
385
|
+
_wire_states[runtime] = (operation_id, sequence + 1)
|
|
382
386
|
correlated_event = (
|
|
383
387
|
{**event, "operation_id": operation_id}
|
|
384
388
|
if event.get("kind") == "cancel_operation"
|
|
@@ -16,9 +16,16 @@ class LargeResultSpool:
|
|
|
16
16
|
self._max_age_seconds = max_age_seconds
|
|
17
17
|
self._active_writes: dict[str, asyncio.Lock] = {}
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
@staticmethod
|
|
20
|
+
def _call_key(session_id: str, call_id: str) -> str:
|
|
21
|
+
# Session-scoped: the spool dir is shared across sessions and outlives runs, while vendor
|
|
22
|
+
# call ids can be index-style ("call_0") and repeat — an unscoped key lets read_result in
|
|
23
|
+
# one session fetch another session's spooled output.
|
|
24
|
+
return hashlib.sha256(f"{session_id}\x00{call_id}".encode("utf-8")).hexdigest()[:32]
|
|
25
|
+
|
|
26
|
+
async def persist_output(self, session_id: str, call_id: str, content: str) -> str:
|
|
20
27
|
digest = hashlib.sha256(content.encode("utf-8")).hexdigest()[:16]
|
|
21
|
-
call_key =
|
|
28
|
+
call_key = self._call_key(session_id, call_id)
|
|
22
29
|
self._spool_dir.mkdir(parents=True, exist_ok=True)
|
|
23
30
|
path = self._spool_dir / f"{call_key}-{digest}.txt"
|
|
24
31
|
path_str = str(path)
|
|
@@ -50,16 +57,16 @@ class LargeResultSpool:
|
|
|
50
57
|
return path.read_text(encoding="utf-8")
|
|
51
58
|
return await asyncio.get_running_loop().run_in_executor(None, _read)
|
|
52
59
|
|
|
53
|
-
async def find_by_call_id(self, call_id: str) -> str | None:
|
|
60
|
+
async def find_by_call_id(self, session_id: str, call_id: str) -> str | None:
|
|
54
61
|
"""O7: locate a spooled output by the tool call's id (the ``read_result`` meta-tool only
|
|
55
62
|
knows ``call_id``, not the content-hashed file name ``persist_output`` chose). Scans the
|
|
56
|
-
spool directory for the hashed call-key prefix; returns ``None`` if nothing
|
|
63
|
+
spool directory for the hashed session-scoped call-key prefix; returns ``None`` if nothing
|
|
57
64
|
was ever spooled for that call."""
|
|
58
65
|
if not self._spool_dir.is_dir():
|
|
59
66
|
return None
|
|
60
67
|
|
|
61
68
|
def _find() -> Path | None:
|
|
62
|
-
call_key =
|
|
69
|
+
call_key = self._call_key(session_id, call_id)
|
|
63
70
|
matches = sorted(self._spool_dir.glob(f"{call_key}-*.txt"))
|
|
64
71
|
return matches[0] if matches else None
|
|
65
72
|
|
|
@@ -1864,7 +1864,7 @@ class RuntimeRunner:
|
|
|
1864
1864
|
from deepstrike.runtime.large_result_spool import LargeResultSpool
|
|
1865
1865
|
spool = self._opts.result_spool or LargeResultSpool()
|
|
1866
1866
|
try:
|
|
1867
|
-
full = await spool.find_by_call_id(call_id)
|
|
1867
|
+
full = await spool.find_by_call_id(session_id, call_id)
|
|
1868
1868
|
except Exception:
|
|
1869
1869
|
full = None
|
|
1870
1870
|
|
|
@@ -2440,7 +2440,7 @@ class RuntimeRunner:
|
|
|
2440
2440
|
spool_ref = None
|
|
2441
2441
|
error = None
|
|
2442
2442
|
try:
|
|
2443
|
-
spool_ref = await spool.persist_output(action.call_id or "", action.output or "")
|
|
2443
|
+
spool_ref = await spool.persist_output(session_id, action.call_id or "", action.output or "")
|
|
2444
2444
|
except Exception as exc:
|
|
2445
2445
|
error = format_tool_error(exc)
|
|
2446
2446
|
action = kernel_action(runtime, self._pending_observations, {
|
|
@@ -22,7 +22,9 @@ async def execute_tools(
|
|
|
22
22
|
if validation.get("error"):
|
|
23
23
|
results.append(ToolResult(call_id=call.id, output=f"invalid arguments: {validation['error']}", is_error=True))
|
|
24
24
|
continue
|
|
25
|
-
|
|
25
|
+
# validation["args"], not kwargs: a oneOf/anyOf ROOT accepts a repaired probe
|
|
26
|
+
# deep-copy — the original dict never sees those repairs (auto-casts, strips, defaults).
|
|
27
|
+
output = await tool(**validation["args"])
|
|
26
28
|
if isinstance(output, AsyncIterable):
|
|
27
29
|
chunks = []
|
|
28
30
|
async for chunk in output:
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
import copy
|
|
3
3
|
import inspect
|
|
4
4
|
import json
|
|
5
|
+
import re
|
|
5
6
|
from collections.abc import AsyncIterable
|
|
6
7
|
from typing import Any, Callable
|
|
7
8
|
from deepstrike._kernel import ToolSchema
|
|
@@ -73,11 +74,13 @@ def validate_tool_arguments(schema_json: str, args: dict[str, Any]) -> dict[str,
|
|
|
73
74
|
try:
|
|
74
75
|
schema = json.loads(schema_json)
|
|
75
76
|
except Exception:
|
|
76
|
-
return {"error": "invalid tool schema", "repaired": False}
|
|
77
|
+
return {"error": "invalid tool schema", "repaired": False, "args": args}
|
|
77
78
|
state = {"repaired": False}
|
|
78
79
|
wrapper = {"root": args}
|
|
79
80
|
error = _validate_value(schema, wrapper, "root", "$", state)
|
|
80
|
-
|
|
81
|
+
# A oneOf/anyOf ROOT replaces the value with its accepted probe deep-copy — in-place mutation
|
|
82
|
+
# of the caller's dict only covers non-union roots. Callers must use the returned "args".
|
|
83
|
+
return {"error": error, "repaired": state["repaired"], "args": wrapper["root"]}
|
|
81
84
|
|
|
82
85
|
|
|
83
86
|
def _validate_value(schema: dict[str, Any], parent: Any, key: Any, path: str, state: dict[str, bool]) -> str | None:
|
|
@@ -200,10 +203,65 @@ def _validate_value(schema: dict[str, Any], parent: Any, key: Any, path: str, st
|
|
|
200
203
|
return f"{path} must be integer"
|
|
201
204
|
elif expected == "boolean" and not isinstance(value, bool):
|
|
202
205
|
return f"{path} must be boolean"
|
|
206
|
+
elif expected == "null" and value is not None:
|
|
207
|
+
return f"{path} must be null"
|
|
203
208
|
elif path == "$" and not isinstance(value, dict):
|
|
204
209
|
return f"{path} must be object"
|
|
205
210
|
|
|
206
211
|
enum_values = schema.get("enum")
|
|
207
212
|
if enum_values is not None and value not in enum_values:
|
|
208
213
|
return f"{path} must be one of enum values"
|
|
214
|
+
# `const` is THE discriminator convention for oneOf variants (kind: {const: "edit"}). Without
|
|
215
|
+
# it, union branches match on required+type alone and the WRONG branch can win — then its
|
|
216
|
+
# allow-list strips keys the right branch declared.
|
|
217
|
+
if "const" in schema:
|
|
218
|
+
want = schema["const"]
|
|
219
|
+
if isinstance(want, bool) or isinstance(value, bool):
|
|
220
|
+
matches = value is want
|
|
221
|
+
else:
|
|
222
|
+
matches = value == want
|
|
223
|
+
if not matches:
|
|
224
|
+
return f"{path} must equal the const value {json.dumps(want)}"
|
|
225
|
+
# Constraint keywords, checked per the value's actual type (JSON Schema semantics: string
|
|
226
|
+
# constraints ignore non-strings, etc.). Keywords outside this set (allOf, multipleOf,
|
|
227
|
+
# uniqueItems, format, if/then/else, …) are ignored, not rejected.
|
|
228
|
+
if isinstance(value, str):
|
|
229
|
+
min_length = schema.get("minLength")
|
|
230
|
+
if isinstance(min_length, int) and len(value) < min_length:
|
|
231
|
+
return f"{path} must be at least {min_length} characters"
|
|
232
|
+
max_length = schema.get("maxLength")
|
|
233
|
+
if isinstance(max_length, int) and len(value) > max_length:
|
|
234
|
+
return f"{path} must be at most {max_length} characters"
|
|
235
|
+
pattern = schema.get("pattern")
|
|
236
|
+
if isinstance(pattern, str):
|
|
237
|
+
try:
|
|
238
|
+
compiled = re.compile(pattern)
|
|
239
|
+
except re.error:
|
|
240
|
+
compiled = None # author-side bad regex: skip, never fail the call
|
|
241
|
+
if compiled is not None and compiled.search(value) is None:
|
|
242
|
+
return f"{path} must match pattern {pattern}"
|
|
243
|
+
elif isinstance(value, (int, float)) and not isinstance(value, bool):
|
|
244
|
+
for keyword, ok in (
|
|
245
|
+
("minimum", lambda bound: value >= bound),
|
|
246
|
+
("maximum", lambda bound: value <= bound),
|
|
247
|
+
("exclusiveMinimum", lambda bound: value > bound),
|
|
248
|
+
("exclusiveMaximum", lambda bound: value < bound),
|
|
249
|
+
):
|
|
250
|
+
bound = schema.get(keyword)
|
|
251
|
+
if isinstance(bound, (int, float)) and not isinstance(bound, bool) and not ok(bound):
|
|
252
|
+
op = {"minimum": ">=", "maximum": "<=", "exclusiveMinimum": ">", "exclusiveMaximum": "<"}[keyword]
|
|
253
|
+
return f"{path} must be {op} {bound}"
|
|
254
|
+
elif isinstance(value, list):
|
|
255
|
+
min_items = schema.get("minItems")
|
|
256
|
+
if isinstance(min_items, int) and len(value) < min_items:
|
|
257
|
+
return f"{path} must have at least {min_items} items"
|
|
258
|
+
max_items = schema.get("maxItems")
|
|
259
|
+
if isinstance(max_items, int) and len(value) > max_items:
|
|
260
|
+
return f"{path} must have at most {max_items} items"
|
|
261
|
+
# `not`: probe on a deep copy so a matching (= rejected) subschema's repairs never leak out.
|
|
262
|
+
not_schema = schema.get("not")
|
|
263
|
+
if isinstance(not_schema, dict):
|
|
264
|
+
probe = {"v": copy.deepcopy(value)}
|
|
265
|
+
if _validate_value(not_schema, probe, "v", path, {"repaired": False}) is None:
|
|
266
|
+
return f"{path} must not match the disallowed shape"
|
|
209
267
|
return None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/governance/repeat_fuse.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/orchestration/task_graph.rs
RENAMED
|
File without changes
|
{deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/orchestration/tournament.rs
RENAMED
|
File without changes
|
{deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/orchestration/workflow/mod.rs
RENAMED
|
File without changes
|
{deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/orchestration/workflow/run.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/runtime/kernel/runtime.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/gate.rs
RENAMED
|
File without changes
|
|
File without changes
|
{deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/mod.rs
RENAMED
|
File without changes
|
|
File without changes
|
{deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/signal.rs
RENAMED
|
File without changes
|
{deepstrike-0.2.43 → deepstrike-0.2.45}/crates/deepstrike-core/src/scheduler/state_machine/tests.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|