monoid-agent-kernel 0.18.0__tar.gz → 0.19.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- monoid_agent_kernel-0.19.0/.gitattributes +1 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/.github/workflows/ci.yml +22 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/.gitignore +7 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/CHANGELOG.md +16 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/PKG-INFO +14 -9
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/README.md +13 -8
- monoid_agent_kernel-0.19.0/docs/img/studio-v019-main.jpg +0 -0
- monoid_agent_kernel-0.19.0/docs/img/studio-v019-profile-builder.jpg +0 -0
- monoid_agent_kernel-0.19.0/docs/img/studio-v019-review-changes.jpg +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/pyproject.toml +5 -3
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/_version.py +1 -1
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/loop.py +5 -4
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/loop_phases.py +2 -4
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/recorder.py +29 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/proposal.py +47 -32
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/recovery.py +18 -5
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/README.md +40 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/cli.py +10 -3
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/server.py +401 -28
- monoid_agent_kernel-0.19.0/src/monoid_agent_kernel/reference/studio/web/dist/assets/index-DOYa7R5h.js +7 -0
- monoid_agent_kernel-0.19.0/src/monoid_agent_kernel/reference/studio/web/dist/assets/index-GoYjJIxI.css +2 -0
- monoid_agent_kernel-0.19.0/src/monoid_agent_kernel/reference/studio/web/dist/index.html +15 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/window.py +2 -2
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_recovery.py +73 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_release_packaging.py +11 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_studio.py +54 -60
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_studio_proposals.py +136 -7
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_studio_sessions.py +226 -0
- monoid_agent_kernel-0.18.0/src/monoid_agent_kernel/reference/studio/web/index.html +0 -1955
- monoid_agent_kernel-0.18.0/src/monoid_agent_kernel/reference/studio/web/settings.html +0 -108
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/.env.example +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/.github/workflows/publish.yml +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/CODE_OF_CONDUCT.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/CONTRIBUTING.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/LICENSE +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/NOTICE +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/SECURITY.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/BACKEND.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/CLI.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/COMPATIBILITY.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/CONFORMANCE.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/CONTRACTS.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/CORE_HELPER_KIT.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/DBOS_REFERENCE.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/EMBEDDING.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/FIRST_SKILL_TUTORIAL.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/OBSERVABILITY.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/OPERATIONAL_RULE_COVERAGE.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/PHASE_1S_COVERAGE.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/PHASE_4_CLOSURE.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/README.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/REFERENCE.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/RUNNER_BACKEND_RESPONSIBILITY_MAP.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/SKILLS_DESIGN.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/SUBAGENT_DESIGN.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/TOOL_SURFACE.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/V0_18_RELEASE_AUDIT.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/img/a2a.png +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/img/hero.png +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/img/studio-v016-main.png +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/img/studio-v016-profile-builder.png +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/security/PRODUCTION_CHECKLIST.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/security/SECURITY_MODEL.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/docs/security/THREAT_MODEL.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/custom_model_adapter.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/custom_tool_quickstart.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/custom_tools/word_count_tool.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/embedding_hosted_product.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/embedding_local_product.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/full_stack_integration.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/memory_quickstart.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/messy_workspace_cleanup.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/minimal_quickstart.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/otel_tracing.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/redacting_event_sink.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/run-spec.json +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/runtime-config.json +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/examples/workspaces/edit_markdown_notes/notes.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/_policy_util.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/_proc.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/builder.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/cli.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/contracts.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/fixtures/compatibility-v1.json +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/fixtures.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/harness.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/profiles/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/profiles/_metadata.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/profiles/capability_security.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/profiles/control_plane.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/profiles/durable_runner.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/profiles/message_fabric.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/profiles/minimal_agent.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/profiles/multi_agent.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/profiles/provider_gateway.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/profiles/reference_full.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/profiles/side_effect_tool_agent.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/profiles/tool_agent.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/report.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/conformance/runner.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/contracts.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/_util.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/agents.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/cancellation.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/capability.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/capability_revocation.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/checkpoint.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/compatibility.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/content.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/context.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/control.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/control_audit.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/durable_codec.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/durable_metadata.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/event_sequencing.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/event_subscription.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/events.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/external_agent_envelope.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/frontmatter.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/inbox.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/lease_admission.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/lifecycle.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/manifest.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/media.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/outbox.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/output_validator.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/packages.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/projections.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/prompt.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/proposal_file.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/result.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/schemas.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/scope.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/side_effect_policy.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/spec.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/streaming.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/subagent_runtime.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/tool_approval.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/tool_surface.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/trace_context.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/wire_validation.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/workspace.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/core/workspace_index.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/env.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/errors.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/event_loader.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/identifiers.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/mcp/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/mcp/client.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/mcp/provider.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/memory.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/narration.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/observability/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/observability/otel.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/permissions.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/providers/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/providers/_common.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/providers/base.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/providers/fake.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/providers/gateway.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/providers/openai.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/public_view.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/py.typed +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/_shared/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/_shared/control_transport.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/_shared/http_util.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/_shared/tokens.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/commands.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/http.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/jobs.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/loop_factory.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/outbox_dispatch.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/ports.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/projection.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/proposal_reader.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/run_execution.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/run_preparation.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/run_state.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/run_types.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/runtime_config.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/service.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/session.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/backend/session_drive.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/capability.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/command_inbox.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/conformance.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/dbos/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/dbos/control_plane.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/dbos/run_driver.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/dbos/runtime.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/llm_gateway/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/llm_gateway/http.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/llm_gateway/providers.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/llm_gateway/service.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/mcp_gateway/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/mcp_gateway/http.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/mcp_gateway/service.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/outbox.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/stores/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/stores/lease.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/stores/sqlite.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/activity.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/chat_projection.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/sample-skills/code-review-checklist/SKILL.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/sample-skills/code-review-checklist/references/review-checklist.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/sample-skills/commit-message/SKILL.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/sample-skills/incident-summary/SKILL.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/sample-skills/incident-summary/references/incident-template.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/sample-skills/release-notes/SKILL.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/sample-skills/release-notes/references/release-note-template.md +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/sample-skills/release-notes/scripts/collect_changes.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/auto-render.min.js +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/katex.min.css +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/studio/web/vendor/katex/katex.min.js +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/web_gateway/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/web_gateway/http.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/web_gateway/providers.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/reference/web_gateway/service.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/shell.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/skills/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/skills/definition.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/skills/loader.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/skills/provider.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/subagent_loader.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tasks.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tool_loader.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tool_services/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tool_services/base.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tool_services/jobs.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tool_services/shell.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tool_services/web.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tools/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tools/base.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tools/builtin.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tools/decorator.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tools/defaults.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/tools/tool_ids.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/web.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/workspace/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/workspace/local.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/workspace/paths.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/native_agent_runner/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/native_agent_runner/py.typed +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_capability_revocation_profile.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_capability_security_profile.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_compatibility_fixtures.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_control_plane_profile.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_durable_runner_profile.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_external_runner.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_import_boundaries.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_message_fabric_profile.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_multi_agent_profile.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_provider_gateway_profile.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_reference_full_profile.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_side_effect_tool_agent_profile.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_skeleton.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conformance/test_tool_agent_profile.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/conftest.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/__init__.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/backend.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/backend_factory.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/backend_harness.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/dbos_control_worker.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/dbos_run_worker.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/http.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/mcp.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/process.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/runtime.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/studio_harness.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/test_tiers.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/support/waiting.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_agent_loop_lifecycle.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_agent_runtime_config.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_async_loop.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_async_tools.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_command_inbox.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_control.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_dbos_control.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_dbos_run.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_event_subscription.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_http_api.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_media.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_providers.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_runtime_config.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_stream.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_turn_recovery.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_backend_watchdog.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_builder_cli.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_cancellation.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_canonical_hash.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_capability.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_capability_broker_contract.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_capability_revocation.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_checkpoint.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_checkpoint_store_contract.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_cli_and_openai.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_command_store_contract.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_compatibility_ledger.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_content_parts.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_context_providers.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_dbos_control_models.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_dbos_run_driver.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_dbos_run_models.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_durability_fault_matrix.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_durable_codec.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_durable_metadata.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_event_data_schema.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_event_sequencing.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_event_subscription.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_examples.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_external_agent_envelope.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_external_agent_envelope_properties.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_external_implementation_contract.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_file_lock.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_frontmatter.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_gateway_provider.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_hitl.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_inbox.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_inbox_outbox_properties.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_jobs.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_lease_admission.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_lease_store_contract.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_llm_gateway_backend.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_llm_gateway_stream.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_loop.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_mcp.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_mcp_gateway.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_media.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_memory.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_multimodal_forwarding.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_namespace_compat.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_narration.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_observability.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_openai_adapter.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_otel.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_outbox.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_output_validator.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_prompt_composition.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_proposal_package.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_public_surface.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_pump.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_scenario_scoring.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_scope_relation.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_scope_relation_properties.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_session_drive.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_session_lifecycle.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_shell.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_side_effect_policy.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_skills.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_spec_serialization.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_studio_chat_projection.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_studio_cli.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_studio_settings.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_studio_shell_web.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_studio_skills_mcp.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_subagent.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_subagent_runtime_context.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_test_tiering.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_tokens.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_tool_approval.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_tool_decorator.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_tool_ids.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_tool_result_envelope.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_tool_services.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_tool_surface.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_tools.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_trace_context.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_usage_accounting.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_web_gateway.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_wire_validation.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_workspace_contract.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_workspace_paths_properties.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_workspace_permissions.py +0 -0
- {monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/tests/test_workspace_protocol.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
src/monoid_agent_kernel/reference/studio/web/dist/assets/*.js whitespace=-trailing-space
|
|
@@ -6,6 +6,28 @@ on:
|
|
|
6
6
|
pull_request:
|
|
7
7
|
|
|
8
8
|
jobs:
|
|
9
|
+
studio-ui:
|
|
10
|
+
name: Studio UI build
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- uses: actions/setup-node@v4
|
|
15
|
+
with:
|
|
16
|
+
node-version: "24"
|
|
17
|
+
cache: npm
|
|
18
|
+
cache-dependency-path: studio-ui/package-lock.json
|
|
19
|
+
- name: Install Studio UI dependencies
|
|
20
|
+
working-directory: studio-ui
|
|
21
|
+
run: npm ci
|
|
22
|
+
- name: Type and accessibility check
|
|
23
|
+
working-directory: studio-ui
|
|
24
|
+
run: npm run check
|
|
25
|
+
- name: Build packaged Studio UI
|
|
26
|
+
working-directory: studio-ui
|
|
27
|
+
run: npm run build
|
|
28
|
+
- name: Verify committed assets are current
|
|
29
|
+
run: git diff --exit-code -- src/monoid_agent_kernel/reference/studio/web/dist
|
|
30
|
+
|
|
9
31
|
lint:
|
|
10
32
|
runs-on: ubuntu-latest
|
|
11
33
|
steps:
|
|
@@ -15,11 +15,18 @@ __pycache__/
|
|
|
15
15
|
.eggs/
|
|
16
16
|
build/
|
|
17
17
|
dist/
|
|
18
|
+
!src/monoid_agent_kernel/reference/studio/web/dist/
|
|
19
|
+
!src/monoid_agent_kernel/reference/studio/web/dist/**
|
|
18
20
|
.pytest_cache/
|
|
19
21
|
.hypothesis/
|
|
20
22
|
.mypy_cache/
|
|
21
23
|
.ruff_cache/
|
|
22
24
|
|
|
25
|
+
# Studio frontend build workspace
|
|
26
|
+
node_modules/
|
|
27
|
+
studio-ui/coverage/
|
|
28
|
+
studio-ui/.vite/
|
|
29
|
+
|
|
23
30
|
# Virtual environments
|
|
24
31
|
.venv/
|
|
25
32
|
venv/
|
|
@@ -7,6 +7,22 @@ out in commit messages and here.
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.19.0] - 2026-07-13
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Rebuilt Agent Studio as a packaged Svelte 5, TypeScript, Vite, and Tailwind CSS application with
|
|
15
|
+
responsive profile, run-control, approval, live-config, change-review, and request-preview
|
|
16
|
+
surfaces. Released wheels and source distributions carry the compiled UI and require no Node.js
|
|
17
|
+
runtime.
|
|
18
|
+
- Added explicit Studio pause, resume, and failed-turn retry BFF controls plus a versioned,
|
|
19
|
+
runtime-resolved `ModelRequest` preview payload.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Moved Studio frontend authoring dependencies into `studio-ui/` and added a deterministic CI build
|
|
24
|
+
check that keeps the committed Python-package assets synchronized with the Svelte source.
|
|
25
|
+
|
|
10
26
|
## [0.18.0] - 2026-07-12
|
|
11
27
|
|
|
12
28
|
- Added an experimental optional DBOS Reference activation-recovery profile. Its finite,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: monoid-agent-kernel
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.19.0
|
|
4
4
|
Summary: Lightweight durable agent kernel for product integrations
|
|
5
5
|
Project-URL: Homepage, https://github.com/hoonseokyoon/monoid-agent-kernel
|
|
6
6
|
Project-URL: Repository, https://github.com/hoonseokyoon/monoid-agent-kernel
|
|
@@ -75,18 +75,19 @@ then follow the [Documentation map](#documentation) to the path for your role.
|
|
|
75
75
|
|
|
76
76
|
The bundled **Agent Studio** reference app (`monoid studio serve`) drives the kernel
|
|
77
77
|
through its Python API behind a single-page UI. A profile chooses the model, reasoning
|
|
78
|
-
level, prompt instructions, and
|
|
78
|
+
level, prompt instructions, and capability surface; each profile keeps its own chat history.
|
|
79
79
|
|
|
80
|
-

|
|
81
81
|
|
|
82
|
-
*A real Studio run: the agent reads `sales.csv`,
|
|
83
|
-
|
|
82
|
+
*A real Studio run: the agent reads `sales.csv`, pauses for human approval, and stages
|
|
83
|
+
`INSIGHTS.md` and `revenue_trend.svg` for file-by-file review. The user applies the approved
|
|
84
|
+
files through Studio and previews the chart directly in the workspace panel.*
|
|
84
85
|
|
|
85
|
-

|
|
86
87
|
|
|
87
|
-
*The
|
|
88
|
-
|
|
89
|
-
and
|
|
88
|
+
*The Profile Builder places model, reasoning, and capability controls beside the
|
|
89
|
+
backend-resolved first-turn `ModelRequest`: system prompt, exact tool schemas, model
|
|
90
|
+
settings, and boundary notes.*
|
|
90
91
|
|
|
91
92
|
## Architecture: Contract / Conformance Test / Core Helper Kit / Reference
|
|
92
93
|
|
|
@@ -119,6 +120,10 @@ For the dynamic binding-based tool surface, see
|
|
|
119
120
|
pip install monoid-agent-kernel
|
|
120
121
|
```
|
|
121
122
|
|
|
123
|
+
The Studio UI ships as precompiled static assets. Running Studio does not install or require
|
|
124
|
+
Node.js, Svelte, Vite, or Tailwind CSS; those tools are confined to frontend development and the
|
|
125
|
+
release build.
|
|
126
|
+
|
|
122
127
|
The default install runs Studio with complete one-shot gateway turns. Add the async HTTP extra
|
|
123
128
|
to render live token deltas in Studio:
|
|
124
129
|
|
|
@@ -24,18 +24,19 @@ then follow the [Documentation map](#documentation) to the path for your role.
|
|
|
24
24
|
|
|
25
25
|
The bundled **Agent Studio** reference app (`monoid studio serve`) drives the kernel
|
|
26
26
|
through its Python API behind a single-page UI. A profile chooses the model, reasoning
|
|
27
|
-
level, prompt instructions, and
|
|
27
|
+
level, prompt instructions, and capability surface; each profile keeps its own chat history.
|
|
28
28
|
|
|
29
|
-

|
|
30
30
|
|
|
31
|
-
*A real Studio run: the agent reads `sales.csv`,
|
|
32
|
-
|
|
31
|
+
*A real Studio run: the agent reads `sales.csv`, pauses for human approval, and stages
|
|
32
|
+
`INSIGHTS.md` and `revenue_trend.svg` for file-by-file review. The user applies the approved
|
|
33
|
+
files through Studio and previews the chart directly in the workspace panel.*
|
|
33
34
|
|
|
34
|
-

|
|
35
36
|
|
|
36
|
-
*The
|
|
37
|
-
|
|
38
|
-
and
|
|
37
|
+
*The Profile Builder places model, reasoning, and capability controls beside the
|
|
38
|
+
backend-resolved first-turn `ModelRequest`: system prompt, exact tool schemas, model
|
|
39
|
+
settings, and boundary notes.*
|
|
39
40
|
|
|
40
41
|
## Architecture: Contract / Conformance Test / Core Helper Kit / Reference
|
|
41
42
|
|
|
@@ -68,6 +69,10 @@ For the dynamic binding-based tool surface, see
|
|
|
68
69
|
pip install monoid-agent-kernel
|
|
69
70
|
```
|
|
70
71
|
|
|
72
|
+
The Studio UI ships as precompiled static assets. Running Studio does not install or require
|
|
73
|
+
Node.js, Svelte, Vite, or Tailwind CSS; those tools are confined to frontend development and the
|
|
74
|
+
release build.
|
|
75
|
+
|
|
71
76
|
The default install runs Studio with complete one-shot gateway turns. Add the async HTTP extra
|
|
72
77
|
to render live token deltas in Studio:
|
|
73
78
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "monoid-agent-kernel"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.19.0"
|
|
8
8
|
description = "Lightweight durable agent kernel for product integrations"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -96,8 +96,10 @@ exclude = ["**/DX_NOTES.md"]
|
|
|
96
96
|
force-include = { "src/monoid_agent_kernel/py.typed" = "monoid_agent_kernel/py.typed", "src/native_agent_runner/py.typed" = "native_agent_runner/py.typed" }
|
|
97
97
|
|
|
98
98
|
[tool.hatch.build.targets.sdist]
|
|
99
|
-
# Keep internal journals
|
|
100
|
-
|
|
99
|
+
# Keep internal journals, workspace-local release scratch data, and the Node-only Studio authoring
|
|
100
|
+
# project out of source distributions. The compiled Studio assets live under the Python package and
|
|
101
|
+
# remain available to wheel/sdist users without Node.js.
|
|
102
|
+
exclude = ["**/DX_NOTES.md", "/.tmp", "/studio-ui"]
|
|
101
103
|
|
|
102
104
|
[tool.pytest.ini_options]
|
|
103
105
|
testpaths = ["tests"]
|
|
@@ -3495,8 +3495,7 @@ class AgentLoop:
|
|
|
3495
3495
|
turn_id: str | None = None,
|
|
3496
3496
|
parent_id: str | None = None,
|
|
3497
3497
|
) -> None:
|
|
3498
|
-
diff_text = context.workspace
|
|
3499
|
-
diff_path = recorder.write_diff(diff_text)
|
|
3498
|
+
diff_text, diff_path, proposal_payload = recorder.write_proposal_revision(context.workspace)
|
|
3500
3499
|
recorder.emit(
|
|
3501
3500
|
"workspace.diff.updated",
|
|
3502
3501
|
turn_id=turn_id,
|
|
@@ -3504,10 +3503,12 @@ class AgentLoop:
|
|
|
3504
3503
|
data={
|
|
3505
3504
|
"path": str(diff_path.relative_to(recorder.run_dir)),
|
|
3506
3505
|
"bytes": len(diff_text.encode("utf-8")),
|
|
3507
|
-
"changed_paths": [
|
|
3506
|
+
"changed_paths": [
|
|
3507
|
+
public_path(path, self.permission_policy)
|
|
3508
|
+
for path in context.workspace.changed_paths()
|
|
3509
|
+
],
|
|
3508
3510
|
},
|
|
3509
3511
|
)
|
|
3510
|
-
proposal_payload = recorder.write_proposal_snapshot(context.workspace, diff_path)
|
|
3511
3512
|
recorder.emit(
|
|
3512
3513
|
"workspace.proposal.updated",
|
|
3513
3514
|
turn_id=turn_id,
|
{monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/loop_phases.py
RENAMED
|
@@ -477,8 +477,7 @@ class LoopFinalizer:
|
|
|
477
477
|
recorder = res.recorder
|
|
478
478
|
workspace = res.workspace
|
|
479
479
|
context.job_manager.cancel_all()
|
|
480
|
-
diff_path = recorder.
|
|
481
|
-
proposal_payload = recorder.write_proposal_snapshot(workspace, diff_path)
|
|
480
|
+
_diff_text, diff_path, proposal_payload = recorder.write_proposal_revision(workspace)
|
|
482
481
|
metrics = self.build_metrics(state, res)
|
|
483
482
|
recorder.write_metrics(metrics)
|
|
484
483
|
recorder.emit(
|
|
@@ -535,8 +534,7 @@ class LoopFinalizer:
|
|
|
535
534
|
loop = self._loop
|
|
536
535
|
recorder = res.recorder
|
|
537
536
|
workspace = res.workspace
|
|
538
|
-
diff_path = recorder.
|
|
539
|
-
proposal_payload = recorder.write_proposal_snapshot(workspace, diff_path)
|
|
537
|
+
_diff_text, diff_path, proposal_payload = recorder.write_proposal_revision(workspace)
|
|
540
538
|
metrics = self.build_metrics(state, res)
|
|
541
539
|
recorder.write_metrics(metrics)
|
|
542
540
|
recorder.emit(
|
{monoid_agent_kernel-0.18.0 → monoid_agent_kernel-0.19.0}/src/monoid_agent_kernel/recorder.py
RENAMED
|
@@ -3,7 +3,10 @@ from __future__ import annotations
|
|
|
3
3
|
import json
|
|
4
4
|
import logging
|
|
5
5
|
import sys
|
|
6
|
+
import threading
|
|
6
7
|
import time
|
|
8
|
+
from collections.abc import Iterator
|
|
9
|
+
from contextlib import contextmanager
|
|
7
10
|
from dataclasses import dataclass, field
|
|
8
11
|
from pathlib import Path
|
|
9
12
|
from typing import TYPE_CHECKING, Any, TextIO
|
|
@@ -19,6 +22,24 @@ if TYPE_CHECKING:
|
|
|
19
22
|
from monoid_agent_kernel.core.workspace import ChangedEntry, Workspace
|
|
20
23
|
|
|
21
24
|
_LOGGER = logging.getLogger("monoid_agent_kernel.recorder")
|
|
25
|
+
_PROPOSAL_LOCKS_GUARD = threading.Lock()
|
|
26
|
+
_PROPOSAL_LOCKS: dict[str, threading.RLock] = {}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@contextmanager
|
|
30
|
+
def proposal_snapshot_lock(run_dir: Path) -> Iterator[None]:
|
|
31
|
+
"""Serialize one run's proposal snapshot writes and live-directory consumers.
|
|
32
|
+
|
|
33
|
+
Proposal files form one logical revision even though they occupy several paths. The reference
|
|
34
|
+
backend and Studio use this same in-process lock while reading, exporting, approving, or
|
|
35
|
+
applying them, so no consumer can observe the writer between ``diff.patch`` and the final
|
|
36
|
+
atomic ``proposal.json`` replace.
|
|
37
|
+
"""
|
|
38
|
+
key = str(run_dir.resolve())
|
|
39
|
+
with _PROPOSAL_LOCKS_GUARD:
|
|
40
|
+
lock = _PROPOSAL_LOCKS.setdefault(key, threading.RLock())
|
|
41
|
+
with lock:
|
|
42
|
+
yield
|
|
22
43
|
|
|
23
44
|
|
|
24
45
|
@dataclass
|
|
@@ -255,6 +276,14 @@ class AgentRecorder:
|
|
|
255
276
|
diff_path.write_text(diff_text, encoding="utf-8")
|
|
256
277
|
return diff_path
|
|
257
278
|
|
|
279
|
+
def write_proposal_revision(self, workspace: Workspace) -> tuple[str, Path, dict[str, Any]]:
|
|
280
|
+
"""Persist one internally consistent diff and proposal snapshot revision."""
|
|
281
|
+
with proposal_snapshot_lock(self.run_dir):
|
|
282
|
+
diff_text = workspace.diff_patch()
|
|
283
|
+
diff_path = self.write_diff(diff_text)
|
|
284
|
+
proposal_payload = self.write_proposal_snapshot(workspace, diff_path)
|
|
285
|
+
return diff_text, diff_path, proposal_payload
|
|
286
|
+
|
|
258
287
|
def write_manifest(self, manifest: RunManifest) -> Path:
|
|
259
288
|
manifest_path = self.run_dir / "manifest.json"
|
|
260
289
|
write_json_atomic(manifest_path, manifest.to_json())
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import hashlib
|
|
3
4
|
import re
|
|
4
5
|
from collections.abc import Callable
|
|
5
6
|
from dataclasses import dataclass
|
|
@@ -16,6 +17,7 @@ from monoid_agent_kernel.core.packages import (
|
|
|
16
17
|
)
|
|
17
18
|
from monoid_agent_kernel.core.proposal_file import ProposalFileError, read_proposal_file_payload
|
|
18
19
|
from monoid_agent_kernel.errors import PermissionDenied
|
|
20
|
+
from monoid_agent_kernel.recorder import proposal_snapshot_lock
|
|
19
21
|
from monoid_agent_kernel.reference.backend.ports import RunRecordPort
|
|
20
22
|
from monoid_agent_kernel.reference.backend.proposal_reader import read_proposal_snapshot
|
|
21
23
|
from monoid_agent_kernel.reference.backend.run_state import (
|
|
@@ -44,7 +46,8 @@ class ProposalService:
|
|
|
44
46
|
def proposal(self, run_id: str, token: str) -> dict[str, Any]:
|
|
45
47
|
self._context.authorize_run(run_id, token)
|
|
46
48
|
record = self._context.record(run_id)
|
|
47
|
-
|
|
49
|
+
with proposal_snapshot_lock(record.run_dir):
|
|
50
|
+
payload = read_proposal_snapshot(record)
|
|
48
51
|
if payload is None:
|
|
49
52
|
return {
|
|
50
53
|
"run_id": record.run_id,
|
|
@@ -65,23 +68,31 @@ class ProposalService:
|
|
|
65
68
|
self._context.authorize_run(run_id, token)
|
|
66
69
|
record = self._context.record(run_id)
|
|
67
70
|
diff_path = record.run_dir / "diff.patch"
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
with proposal_snapshot_lock(record.run_dir):
|
|
72
|
+
ready = diff_path.exists()
|
|
73
|
+
data = diff_path.read_bytes() if ready else b""
|
|
74
|
+
return {
|
|
75
|
+
"run_id": run_id,
|
|
76
|
+
"ready": ready,
|
|
77
|
+
"diff": data.decode("utf-8"),
|
|
78
|
+
"diff_sha256": hashlib.sha256(data).hexdigest(),
|
|
79
|
+
}
|
|
70
80
|
|
|
71
81
|
def proposal_file(self, run_id: str, token: str, path: str) -> dict[str, Any]:
|
|
72
82
|
self._context.authorize_run(run_id, token)
|
|
73
83
|
record = self._context.record(run_id)
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
with proposal_snapshot_lock(record.run_dir):
|
|
85
|
+
proposal = read_proposal_snapshot(record)
|
|
86
|
+
if proposal is None:
|
|
87
|
+
raise ValueError("proposal snapshot is not ready")
|
|
88
|
+
try:
|
|
89
|
+
file_payload = read_proposal_file_payload(record.run_dir, proposal, path)
|
|
90
|
+
except ProposalFileError as exc:
|
|
91
|
+
if exc.reason in {"not_found", "snapshot_missing"}:
|
|
92
|
+
raise KeyError(str(exc)) from exc
|
|
93
|
+
if exc.reason == "escapes_run_dir":
|
|
94
|
+
raise PermissionDenied(str(exc)) from exc
|
|
95
|
+
raise ValueError(str(exc)) from exc
|
|
85
96
|
return {
|
|
86
97
|
"run_id": record.run_id,
|
|
87
98
|
"tenant_id": record.tenant_id,
|
|
@@ -93,8 +104,9 @@ class ProposalService:
|
|
|
93
104
|
self._context.authorize_run(run_id, token)
|
|
94
105
|
record = self._context.record(run_id)
|
|
95
106
|
output = record.run_dir / "proposal.tar"
|
|
96
|
-
|
|
97
|
-
|
|
107
|
+
with proposal_snapshot_lock(record.run_dir):
|
|
108
|
+
payload = export_package(record.run_dir, output)
|
|
109
|
+
tar_bytes = output.read_bytes()
|
|
98
110
|
checkpoint_store = self._checkpoint_store()
|
|
99
111
|
digest = checkpoint_store.put_blob(run_id, tar_bytes)
|
|
100
112
|
self._context.emit_backend_event(
|
|
@@ -141,13 +153,14 @@ class ProposalService:
|
|
|
141
153
|
) -> dict[str, Any]:
|
|
142
154
|
self._context.authorize_run(run_id, token)
|
|
143
155
|
record = self._context.record(run_id)
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
156
|
+
with proposal_snapshot_lock(record.run_dir):
|
|
157
|
+
approval = create_approval(
|
|
158
|
+
record.run_dir,
|
|
159
|
+
approver_id=approver_id,
|
|
160
|
+
approved_paths=approved_paths or None,
|
|
161
|
+
note=note,
|
|
162
|
+
)
|
|
163
|
+
write_approval(record.run_dir / "approval.json", approval)
|
|
151
164
|
self._context.emit_backend_event(
|
|
152
165
|
run_id,
|
|
153
166
|
"proposal.approved",
|
|
@@ -165,13 +178,14 @@ class ProposalService:
|
|
|
165
178
|
) -> dict[str, Any]:
|
|
166
179
|
self._context.authorize_run(run_id, token)
|
|
167
180
|
record = self._context.record(run_id)
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
181
|
+
with proposal_snapshot_lock(record.run_dir):
|
|
182
|
+
approval = create_approval(
|
|
183
|
+
record.run_dir,
|
|
184
|
+
approver_id=approver_id,
|
|
185
|
+
decision="rejected",
|
|
186
|
+
note=reason,
|
|
187
|
+
)
|
|
188
|
+
write_approval(record.run_dir / "approval.json", approval)
|
|
175
189
|
self._context.emit_backend_event(
|
|
176
190
|
run_id,
|
|
177
191
|
"proposal.rejected",
|
|
@@ -197,8 +211,9 @@ class ProposalService:
|
|
|
197
211
|
raise PermissionDenied(f"apply target is outside allowed roots: {target}")
|
|
198
212
|
record = self._context.record(run_id)
|
|
199
213
|
approval = approval_path or (record.run_dir / "approval.json")
|
|
200
|
-
|
|
201
|
-
|
|
214
|
+
with proposal_snapshot_lock(record.run_dir):
|
|
215
|
+
result = apply_package(record.run_dir, approval=approval, target=target, dry_run=dry_run)
|
|
216
|
+
write_apply_result(record.run_dir / "apply-result.json", result)
|
|
202
217
|
event_type = "proposal.conflict" if result.status == "conflict" else "proposal.applied"
|
|
203
218
|
self._context.emit_backend_event(
|
|
204
219
|
run_id,
|
|
@@ -22,7 +22,11 @@ from monoid_agent_kernel.core.durable_metadata import (
|
|
|
22
22
|
DurableMetadataCommitter,
|
|
23
23
|
validate_recovery_metadata,
|
|
24
24
|
)
|
|
25
|
-
from monoid_agent_kernel.core.result import
|
|
25
|
+
from monoid_agent_kernel.core.result import (
|
|
26
|
+
AgentRunResult,
|
|
27
|
+
Suspension,
|
|
28
|
+
suspension_from_checkpoint_payload,
|
|
29
|
+
)
|
|
26
30
|
from monoid_agent_kernel.identifiers import namespaced_id
|
|
27
31
|
from monoid_agent_kernel.reference.backend.ports import (
|
|
28
32
|
DriveOpenSessionPort,
|
|
@@ -209,15 +213,24 @@ class RecoveryService:
|
|
|
209
213
|
record.seen_inbox_ids = set(checkpoint.inbox_seen_ids)
|
|
210
214
|
for message in checkpoint.queued_messages:
|
|
211
215
|
self._context.call_soon(record.message_queue.put_nowait, message)
|
|
212
|
-
|
|
216
|
+
restored_suspension = (
|
|
217
|
+
suspension_from_checkpoint_payload(checkpoint.last_suspension)
|
|
218
|
+
if checkpoint.last_suspension is not None
|
|
219
|
+
else Suspension(reason="settled", status="completed")
|
|
220
|
+
)
|
|
221
|
+
self._context.spawn(self.run_recovered(run_id, request, loop, restored_suspension))
|
|
213
222
|
|
|
214
|
-
async def run_recovered(
|
|
223
|
+
async def run_recovered(
|
|
224
|
+
self,
|
|
225
|
+
run_id: str,
|
|
226
|
+
request: RunRequestPort,
|
|
227
|
+
loop: LoopPort,
|
|
228
|
+
suspension: Suspension,
|
|
229
|
+
) -> None:
|
|
215
230
|
await self._context.acquire_run_slot()
|
|
216
231
|
try:
|
|
217
232
|
if loop.has_pending_tasks():
|
|
218
233
|
suspension = Suspension(reason="awaiting_tasks", status="running", has_external=True)
|
|
219
|
-
else:
|
|
220
|
-
suspension = Suspension(reason="settled", status="completed")
|
|
221
234
|
record = self._context.record(run_id)
|
|
222
235
|
result = await self._context.drive_open_session(
|
|
223
236
|
record,
|
|
@@ -22,6 +22,33 @@ monoid studio accept # deterministic offline acceptance check, emits JSO
|
|
|
22
22
|
Run `studio doctor` first if anything looks off — it turns late, cryptic setup failures into an
|
|
23
23
|
upfront pass/fail checklist with remediation.
|
|
24
24
|
|
|
25
|
+
## Frontend development
|
|
26
|
+
|
|
27
|
+
Studio's browser UI is a Svelte 5 + TypeScript application under `studio-ui/`. Tailwind CSS v4
|
|
28
|
+
maps the semantic Studio tokens to utilities. Node.js is needed only when authoring or rebuilding
|
|
29
|
+
the UI; released Python packages include the compiled assets.
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# terminal 1: BFF and agent runtime
|
|
33
|
+
monoid studio serve --port 8799
|
|
34
|
+
|
|
35
|
+
# terminal 2: Vite dev server with /api proxied to Studio
|
|
36
|
+
cd studio-ui
|
|
37
|
+
npm ci
|
|
38
|
+
npm run dev
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Before committing frontend changes, rebuild the packaged assets and run the Svelte checks:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
cd studio-ui
|
|
45
|
+
npm run check
|
|
46
|
+
npm run build
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The build writes to `src/monoid_agent_kernel/reference/studio/web/dist/`. Commit that directory so
|
|
50
|
+
wheel and sdist users can run Studio without Node.js.
|
|
51
|
+
|
|
25
52
|
### Flags & defaults
|
|
26
53
|
|
|
27
54
|
| Flag | Default | Meaning |
|
|
@@ -59,6 +86,19 @@ at another file, or `--no-env-file` to rely only on the process environment.
|
|
|
59
86
|
files, jobs, proposed changes, and file previews. Trace shows the live event tree. Live Config
|
|
60
87
|
exposes model, reasoning, OTel, and capability toggles.
|
|
61
88
|
|
|
89
|
+
## Review flow
|
|
90
|
+
|
|
91
|
+
Write-capable profiles stage workspace changes as a proposal. Studio presents human approval,
|
|
92
|
+
per-file review decisions, package export, and apply as separate workflow steps.
|
|
93
|
+
|
|
94
|
+

|
|
95
|
+
|
|
96
|
+
*Review Changes previews files from the proposal snapshot before apply. Each file can be approved or
|
|
97
|
+
excluded independently; **Apply approved** writes only the approved paths into the workspace.*
|
|
98
|
+
|
|
99
|
+
**Export package** builds a digest-addressed TAR from the complete current proposal. Per-file review
|
|
100
|
+
decisions control apply and do not filter the exported package.
|
|
101
|
+
|
|
62
102
|
Profile state is lightweight Studio metadata. The `studio-profiles.json` sidecar under the run root
|
|
63
103
|
stores custom profile presets and maps run ids to profile ids so scoped history survives a restart.
|
|
64
104
|
Profiles are Studio-owned presets; the kernel contract stays unchanged.
|
|
@@ -73,9 +73,15 @@ def run_acceptance(
|
|
|
73
73
|
base_url = server.start()
|
|
74
74
|
check("healthz", _http_json(f"{base_url}/healthz").get("ok") is True)
|
|
75
75
|
index_html = _http_text(f"{base_url}/")
|
|
76
|
-
check(
|
|
76
|
+
check(
|
|
77
|
+
"index-static-shell",
|
|
78
|
+
'<div id="app"></div>' in index_html and "/assets/" in index_html,
|
|
79
|
+
)
|
|
77
80
|
settings_html = _http_text(f"{base_url}/settings")
|
|
78
|
-
check(
|
|
81
|
+
check(
|
|
82
|
+
"settings-static-shell",
|
|
83
|
+
'<div id="app"></div>' in settings_html and "/assets/" in settings_html,
|
|
84
|
+
)
|
|
79
85
|
cfg = _http_json(f"{base_url}/api/config")
|
|
80
86
|
check("config-route", cfg.get("offline") is True and cfg.get("provider") == "offline")
|
|
81
87
|
settings = _http_json(f"{base_url}/api/settings")
|
|
@@ -103,7 +109,8 @@ def run_acceptance(
|
|
|
103
109
|
if settled:
|
|
104
110
|
final_text = str((settled[-1].get("data") or {}).get("final_text") or "")
|
|
105
111
|
state = str(server.run_status(run_id).get("state") or "")
|
|
106
|
-
|
|
112
|
+
if state != "running":
|
|
113
|
+
break
|
|
107
114
|
time.sleep(0.1)
|
|
108
115
|
check("deterministic-chat", bool(final_text), final_text[:120])
|
|
109
116
|
transcript = _http_json(f"{base_url}/api/chat-transcript?run_id={quote(run_id)}") if run_id else {}
|