bazaar-compute-node 0.1.29__tar.gz → 0.1.30__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.
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/PKG-INFO +2 -2
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/README.md +1 -1
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/pyproject.toml +2 -1
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/pyproject.toml.orig +2 -1
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/application.py +29 -23
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/transport.py +4 -2
- bazaar_compute_node-0.1.30/src/bazaar_compute_node/contrib/claude/__init__.py +28 -0
- bazaar_compute_node-0.1.30/src/bazaar_compute_node/contrib/claude/approval.py +117 -0
- bazaar_compute_node-0.1.30/src/bazaar_compute_node/contrib/claude/client.py +484 -0
- bazaar_compute_node-0.1.30/src/bazaar_compute_node/contrib/claude/events.py +481 -0
- bazaar_compute_node-0.1.30/src/bazaar_compute_node/contrib/claude/process.py +339 -0
- bazaar_compute_node-0.1.30/src/bazaar_compute_node/contrib/claude/protocol.py +102 -0
- bazaar_compute_node-0.1.30/src/bazaar_compute_node/contrib/claude/runtime.py +628 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -2
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/codex/client.py +0 -20
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/codex/events.py +0 -8
- bazaar_compute_node-0.1.30/src/bazaar_compute_node/contrib/codex/plugin.py +15 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/codex/process.py +22 -36
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/codex/protocol.py +4 -1
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/codex/runtime.py +84 -52
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/orchestration/reminder.py +28 -8
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/orchestration/session.py +103 -17
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/runtime.py +15 -9
- bazaar_compute_node-0.1.30/src/bazaar_compute_node/core/utils/__init__.py +3 -0
- bazaar_compute_node-0.1.30/src/bazaar_compute_node/core/utils/line_reader.py +37 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/LICENSE +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/agent.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/agent_management.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/attachments.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/command.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/config.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/registry.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/resource_dispatch.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/system_service.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/wrapper.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/bcc.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/cli.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/__init__.py +0 -0
- {bazaar_compute_node-0.1.29/src/bazaar_compute_node/contrib/codex → bazaar_compute_node-0.1.30/src/bazaar_compute_node/contrib/claude}/plugin.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/codex/approval.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/lark/api.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/lark/approval.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/lark/channel.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/lark/outbound.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/lark/transport.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/logging/audit.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/logging/plugin.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/codec.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/database.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/executor.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v01_initial_node_schema.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v02_session_mapping_indexes.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v03_message_log_indexes.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v04_runtime_attempt_facts.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v05_inbound_message_references.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v06_inbound_message_reference_integrity.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v07_inbound_provider_identity.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v08_transient_stream_events.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v09_remove_runtime_events.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v10_add_outbound_attachments.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v11_remove_runtime_session_mapping.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v12_add_reminders.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v13_add_agent_ownership.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v14_add_inbox_discovery_indexes.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v15_add_handoffs.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v16_remove_outbound_drafts.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v17_remove_agent_identity_triggers.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v18_unify_messages.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v19_reminder_system_messages.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v20_remove_freshness_persistence.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v21_remove_handoffs.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/migrations/v22_readable_targets.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/sqlite/storage.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/telegram/api.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/telegram/approval.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/telegram/channel.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/telegram/identity.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/telegram/outbound.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/wecom/channel.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/wecom/markdown.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/approval.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/audit.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/channel.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/client.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/command.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/concurrency.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/correlation.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/inbox.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/instruction.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/lifecycle.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/models/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/models/entities.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/models/reminder.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/models/reminder_owner.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/models/states.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/observability.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/orchestration/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/orchestration/command.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/orchestration/delivery.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/orchestration/error_feedback.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/orchestration/reminder_command.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/orchestration/services.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/orchestration/turn.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/outcomes.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/paths.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/reminder.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/storage.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/core/timerwheel.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/i18n/__init__.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/i18n/catalog.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/rendering.py +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/resources/developer_instructions.md +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/resources/locales/en.toml +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/resources/locales/zh-CN.toml +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/resources/system_service/launchd.plist +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/resources/system_service/launchd.sh +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/resources/system_service/systemd.service +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/resources/system_service/windows.ps1 +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
- {bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/resources/system_service/windows.xml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bazaar-compute-node
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.30
|
|
4
4
|
Summary: Runtime-agnostic computer node daemon for agents and channels.
|
|
5
5
|
License-Expression: AGPL-3.0-only
|
|
6
6
|
License-File: LICENSE
|
|
@@ -110,7 +110,7 @@ Windows: Get-Content "$env:USERPROFILE\.bcn\system-service.log" -Wait
|
|
|
110
110
|
| Status / 状态 | Runtime / 运行时 |
|
|
111
111
|
| --- | --- |
|
|
112
112
|
| ✅ | Codex |
|
|
113
|
-
|
|
|
113
|
+
| ✅ | Claude Code |
|
|
114
114
|
| 🚧 | Pi |
|
|
115
115
|
| 🚧 | Hermes Agent |
|
|
116
116
|
| 🚧 | DeepSeek Harness |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "bazaar-compute-node"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.30"
|
|
4
4
|
description = "Runtime-agnostic computer node daemon for agents and channels."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "AGPL-3.0-only"
|
|
@@ -24,6 +24,7 @@ bcn = "bazaar_compute_node.cli:main"
|
|
|
24
24
|
|
|
25
25
|
[project.entry-points."bazaar_compute_node.runtimes"]
|
|
26
26
|
codex = "bazaar_compute_node.contrib.codex.plugin:create_runtime"
|
|
27
|
+
claudecode = "bazaar_compute_node.contrib.claude.plugin:create_runtime"
|
|
27
28
|
|
|
28
29
|
[project.entry-points."bazaar_compute_node.channels"]
|
|
29
30
|
wecom = "bazaar_compute_node.contrib.wecom.plugin:builder"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "bazaar-compute-node"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.30"
|
|
4
4
|
description = "Runtime-agnostic computer node daemon for agents and channels."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "AGPL-3.0-only"
|
|
@@ -24,6 +24,7 @@ bcn = "bazaar_compute_node.cli:main"
|
|
|
24
24
|
|
|
25
25
|
[project.entry-points."bazaar_compute_node.runtimes"]
|
|
26
26
|
codex = "bazaar_compute_node.contrib.codex.plugin:create_runtime"
|
|
27
|
+
claudecode = "bazaar_compute_node.contrib.claude.plugin:create_runtime"
|
|
27
28
|
|
|
28
29
|
[project.entry-points."bazaar_compute_node.channels"]
|
|
29
30
|
wecom = "bazaar_compute_node.contrib.wecom.plugin:builder"
|
{bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/application.py
RENAMED
|
@@ -117,8 +117,12 @@ class NodeApplication:
|
|
|
117
117
|
|
|
118
118
|
self._started = True
|
|
119
119
|
self._stopped.clear()
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
async with asyncio.TaskGroup() as group:
|
|
121
|
+
for agent_configuration in self.configuration.agents:
|
|
122
|
+
group.create_task(
|
|
123
|
+
self._start_agent(agent_configuration),
|
|
124
|
+
name=f"bcn-agent-start-{agent_configuration.id}",
|
|
125
|
+
)
|
|
122
126
|
try:
|
|
123
127
|
await self.reminder_scheduler.start(
|
|
124
128
|
timeout=self.timeout_budget.startup_seconds,
|
|
@@ -141,26 +145,27 @@ class NodeApplication:
|
|
|
141
145
|
async def _start_agent(self, configuration: AgentConfiguration) -> None:
|
|
142
146
|
application: AgentApplication | None = None
|
|
143
147
|
try:
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
148
|
+
async with asyncio.timeout(self.timeout_budget.startup_seconds):
|
|
149
|
+
factories = await asyncio.to_thread(
|
|
150
|
+
self._registry.load_agent,
|
|
151
|
+
channel=configuration.channel.kind,
|
|
152
|
+
runtime=configuration.runtime.kind,
|
|
153
|
+
storage=self.configuration.storage,
|
|
154
|
+
)
|
|
155
|
+
storage_scope = self.storage.scope(configuration.id, configuration.name)
|
|
156
|
+
application = AgentApplication(
|
|
157
|
+
configuration=configuration,
|
|
158
|
+
factories=factories,
|
|
159
|
+
storage=storage_scope,
|
|
160
|
+
audit=self.audit,
|
|
161
|
+
timer_wheel=self.timer_wheel,
|
|
162
|
+
reminder_concurrency=self._reminder_concurrency,
|
|
163
|
+
reminder_poke=self.reminder_scheduler.poke,
|
|
164
|
+
endpoint=lambda: self.endpoint,
|
|
165
|
+
timeout_budget=self.timeout_budget,
|
|
166
|
+
translator=self.translator,
|
|
167
|
+
)
|
|
168
|
+
await application.start()
|
|
164
169
|
except asyncio.CancelledError:
|
|
165
170
|
if application is not None:
|
|
166
171
|
await self._stop_agent_after_failed_start(application)
|
|
@@ -410,7 +415,8 @@ class NodeApplication:
|
|
|
410
415
|
|
|
411
416
|
async def _stop_agent_after_failed_start(self, agent: AgentApplication) -> None:
|
|
412
417
|
try:
|
|
413
|
-
|
|
418
|
+
async with asyncio.timeout(self.timeout_budget.shutdown_seconds):
|
|
419
|
+
await agent.stop()
|
|
414
420
|
except BaseException as error:
|
|
415
421
|
self._logger.debug(
|
|
416
422
|
"agent cleanup after failed start failed",
|
{bazaar_compute_node-0.1.29 → bazaar_compute_node-0.1.30}/src/bazaar_compute_node/app/transport.py
RENAMED
|
@@ -12,6 +12,8 @@ from pathlib import Path
|
|
|
12
12
|
from typing import Any
|
|
13
13
|
from urllib.parse import parse_qs, urlsplit
|
|
14
14
|
|
|
15
|
+
from ..core.utils import UnlimitedLineReader
|
|
16
|
+
|
|
15
17
|
RequestHandler = Callable[[Mapping[str, object]], Awaitable[Mapping[str, object]]]
|
|
16
18
|
StreamPair = tuple[asyncio.StreamReader, asyncio.StreamWriter]
|
|
17
19
|
|
|
@@ -147,7 +149,7 @@ class LocalCommandServer:
|
|
|
147
149
|
writer: asyncio.StreamWriter,
|
|
148
150
|
) -> None:
|
|
149
151
|
try:
|
|
150
|
-
line = await reader.readline()
|
|
152
|
+
line = await UnlimitedLineReader(reader).readline()
|
|
151
153
|
if not line:
|
|
152
154
|
return
|
|
153
155
|
payload = json.loads(line)
|
|
@@ -267,7 +269,7 @@ class LocalCommandClient:
|
|
|
267
269
|
+ b"\n"
|
|
268
270
|
)
|
|
269
271
|
await writer.drain()
|
|
270
|
-
line = await reader.readline()
|
|
272
|
+
line = await UnlimitedLineReader(reader).readline()
|
|
271
273
|
if not line:
|
|
272
274
|
raise ConnectionError("local command server closed without a response")
|
|
273
275
|
response = json.loads(line)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""Claude Code streaming process, protocol, and runtime adapter."""
|
|
2
|
+
|
|
3
|
+
from .client import Client
|
|
4
|
+
from .events import TurnEventStream
|
|
5
|
+
from .process import ProcessSpec, ProcessState, ProcessSupervisor, build_arguments
|
|
6
|
+
from .protocol import (
|
|
7
|
+
ClaudeControlError,
|
|
8
|
+
ClaudeProcessExited,
|
|
9
|
+
ClaudeProcessNotRunning,
|
|
10
|
+
ClaudeProtocolError,
|
|
11
|
+
ClaudeTransportError,
|
|
12
|
+
)
|
|
13
|
+
from .runtime import Runtime
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"ClaudeControlError",
|
|
17
|
+
"ClaudeProcessExited",
|
|
18
|
+
"ClaudeProcessNotRunning",
|
|
19
|
+
"ClaudeProtocolError",
|
|
20
|
+
"ClaudeTransportError",
|
|
21
|
+
"Client",
|
|
22
|
+
"ProcessSpec",
|
|
23
|
+
"ProcessState",
|
|
24
|
+
"ProcessSupervisor",
|
|
25
|
+
"Runtime",
|
|
26
|
+
"TurnEventStream",
|
|
27
|
+
"build_arguments",
|
|
28
|
+
]
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
from collections.abc import Mapping
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from time import time_ns
|
|
7
|
+
|
|
8
|
+
from ...core.models import ApprovalDecision, ApprovalRequest, ApprovalResult
|
|
9
|
+
from .protocol import ClaudeProtocolError, JsonObject
|
|
10
|
+
|
|
11
|
+
_MAX_APPROVAL_DESCRIPTION = 4_000
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass(frozen=True, slots=True)
|
|
15
|
+
class ApprovalEnvelope:
|
|
16
|
+
"""Claude permission request plus its provider-neutral projection."""
|
|
17
|
+
|
|
18
|
+
control_request_id: str
|
|
19
|
+
tool_name: str
|
|
20
|
+
tool_input: Mapping[str, object]
|
|
21
|
+
request: ApprovalRequest
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def parse_approval_request(
|
|
25
|
+
message: Mapping[str, object],
|
|
26
|
+
*,
|
|
27
|
+
session_id: str,
|
|
28
|
+
runtime_session_id: str,
|
|
29
|
+
turn_id: str,
|
|
30
|
+
) -> ApprovalEnvelope:
|
|
31
|
+
if message.get("type") != "control_request":
|
|
32
|
+
raise ClaudeProtocolError("message is not a control request")
|
|
33
|
+
control_request_id = message.get("request_id")
|
|
34
|
+
if not isinstance(control_request_id, str) or not control_request_id:
|
|
35
|
+
raise ClaudeProtocolError("permission control request requires a request_id")
|
|
36
|
+
request = message.get("request")
|
|
37
|
+
if not isinstance(request, Mapping) or request.get("subtype") != "can_use_tool":
|
|
38
|
+
raise ClaudeProtocolError("unsupported Claude control request subtype")
|
|
39
|
+
tool_use_id = request.get("tool_use_id")
|
|
40
|
+
if not isinstance(tool_use_id, str) or not tool_use_id:
|
|
41
|
+
raise ClaudeProtocolError("permission request requires a tool_use_id")
|
|
42
|
+
tool_name = request.get("tool_name")
|
|
43
|
+
if not isinstance(tool_name, str) or not tool_name:
|
|
44
|
+
raise ClaudeProtocolError("permission request requires a tool_name")
|
|
45
|
+
tool_input = request.get("input")
|
|
46
|
+
if not isinstance(tool_input, Mapping):
|
|
47
|
+
raise ClaudeProtocolError("permission request input must be an object")
|
|
48
|
+
|
|
49
|
+
description = _description(request, tool_input)
|
|
50
|
+
return ApprovalEnvelope(
|
|
51
|
+
control_request_id=control_request_id,
|
|
52
|
+
tool_name=tool_name,
|
|
53
|
+
tool_input=tool_input,
|
|
54
|
+
request=ApprovalRequest(
|
|
55
|
+
request_id=tool_use_id,
|
|
56
|
+
session_id=session_id,
|
|
57
|
+
runtime_session_id=runtime_session_id,
|
|
58
|
+
action=tool_name,
|
|
59
|
+
created_at_ms=time_ns() // 1_000_000,
|
|
60
|
+
turn_id=turn_id,
|
|
61
|
+
description=description,
|
|
62
|
+
metadata={
|
|
63
|
+
"provider_control_request_id": control_request_id,
|
|
64
|
+
"provider_tool_name": tool_name,
|
|
65
|
+
"provider_input": dict(tool_input),
|
|
66
|
+
},
|
|
67
|
+
),
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def build_approval_response(
|
|
72
|
+
approval: ApprovalEnvelope, result: ApprovalResult
|
|
73
|
+
) -> JsonObject:
|
|
74
|
+
if result.request_id != approval.request.request_id:
|
|
75
|
+
raise ValueError("approval result request id does not match tool use")
|
|
76
|
+
if result.decision is ApprovalDecision.APPROVED:
|
|
77
|
+
return {"behavior": "allow", "updatedInput": dict(approval.tool_input)}
|
|
78
|
+
return {
|
|
79
|
+
"behavior": "deny",
|
|
80
|
+
"message": result.reason or "Permission denied by the user.",
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def deny_approval(message: str) -> JsonObject:
|
|
85
|
+
return {"behavior": "deny", "message": message}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def _description(
|
|
89
|
+
request: Mapping[str, object], tool_input: Mapping[str, object]
|
|
90
|
+
) -> str:
|
|
91
|
+
parts = []
|
|
92
|
+
for field_name in ("description", "title", "display_name", "decision_reason"):
|
|
93
|
+
value = request.get(field_name)
|
|
94
|
+
if isinstance(value, str) and value.strip() and value.strip() not in parts:
|
|
95
|
+
parts.append(value.strip())
|
|
96
|
+
try:
|
|
97
|
+
encoded_input = json.dumps(
|
|
98
|
+
dict(tool_input),
|
|
99
|
+
ensure_ascii=False,
|
|
100
|
+
sort_keys=True,
|
|
101
|
+
separators=(",", ":"),
|
|
102
|
+
)
|
|
103
|
+
except TypeError, ValueError:
|
|
104
|
+
encoded_input = "[input unavailable]"
|
|
105
|
+
parts.append(f"{request['tool_name']} input: {encoded_input}")
|
|
106
|
+
description = "\n".join(parts)
|
|
107
|
+
if len(description) > _MAX_APPROVAL_DESCRIPTION:
|
|
108
|
+
return description[: _MAX_APPROVAL_DESCRIPTION - 1] + "…"
|
|
109
|
+
return description
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
__all__ = [
|
|
113
|
+
"ApprovalEnvelope",
|
|
114
|
+
"build_approval_response",
|
|
115
|
+
"deny_approval",
|
|
116
|
+
"parse_approval_request",
|
|
117
|
+
]
|