bazaar-compute-node 0.1.3__py3-none-any.whl

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.
Files changed (62) hide show
  1. bazaar_compute_node/__init__.py +3 -0
  2. bazaar_compute_node/app/__init__.py +1 -0
  3. bazaar_compute_node/app/application.py +398 -0
  4. bazaar_compute_node/app/attachments.py +154 -0
  5. bazaar_compute_node/app/command.py +342 -0
  6. bazaar_compute_node/app/config.py +121 -0
  7. bazaar_compute_node/app/registry.py +120 -0
  8. bazaar_compute_node/app/transport.py +264 -0
  9. bazaar_compute_node/app/windows_pipe.py +463 -0
  10. bazaar_compute_node/app/wrapper.py +63 -0
  11. bazaar_compute_node/bcc.py +524 -0
  12. bazaar_compute_node/cli.py +382 -0
  13. bazaar_compute_node/contrib/__init__.py +1 -0
  14. bazaar_compute_node/contrib/codex_app_server/__init__.py +63 -0
  15. bazaar_compute_node/contrib/codex_app_server/approval.py +168 -0
  16. bazaar_compute_node/contrib/codex_app_server/client.py +408 -0
  17. bazaar_compute_node/contrib/codex_app_server/events.py +431 -0
  18. bazaar_compute_node/contrib/codex_app_server/plugin.py +15 -0
  19. bazaar_compute_node/contrib/codex_app_server/process.py +583 -0
  20. bazaar_compute_node/contrib/codex_app_server/protocol.py +103 -0
  21. bazaar_compute_node/contrib/codex_app_server/runtime.py +513 -0
  22. bazaar_compute_node/contrib/logging/__init__.py +5 -0
  23. bazaar_compute_node/contrib/logging/audit.py +61 -0
  24. bazaar_compute_node/contrib/logging/plugin.py +11 -0
  25. bazaar_compute_node/contrib/sqlite/__init__.py +14 -0
  26. bazaar_compute_node/contrib/sqlite/codec.py +768 -0
  27. bazaar_compute_node/contrib/sqlite/database.py +282 -0
  28. bazaar_compute_node/contrib/sqlite/migrations.py +646 -0
  29. bazaar_compute_node/contrib/sqlite/plugin.py +11 -0
  30. bazaar_compute_node/contrib/sqlite/repository.py +1059 -0
  31. bazaar_compute_node/contrib/wecom/__init__.py +1 -0
  32. bazaar_compute_node/contrib/wecom/channel.py +960 -0
  33. bazaar_compute_node/contrib/wecom/markdown.py +146 -0
  34. bazaar_compute_node/contrib/wecom/plugin.py +29 -0
  35. bazaar_compute_node/core/__init__.py +5 -0
  36. bazaar_compute_node/core/approval.py +51 -0
  37. bazaar_compute_node/core/audit.py +101 -0
  38. bazaar_compute_node/core/channel.py +121 -0
  39. bazaar_compute_node/core/client.py +30 -0
  40. bazaar_compute_node/core/command.py +85 -0
  41. bazaar_compute_node/core/concurrency.py +29 -0
  42. bazaar_compute_node/core/correlation.py +48 -0
  43. bazaar_compute_node/core/instruction.py +224 -0
  44. bazaar_compute_node/core/lifecycle.py +48 -0
  45. bazaar_compute_node/core/models/__init__.py +63 -0
  46. bazaar_compute_node/core/models/entities.py +514 -0
  47. bazaar_compute_node/core/models/states.py +369 -0
  48. bazaar_compute_node/core/observability.py +47 -0
  49. bazaar_compute_node/core/orchestration/__init__.py +5 -0
  50. bazaar_compute_node/core/orchestration/command.py +614 -0
  51. bazaar_compute_node/core/orchestration/services.py +135 -0
  52. bazaar_compute_node/core/orchestration/session.py +891 -0
  53. bazaar_compute_node/core/orchestration/turn.py +451 -0
  54. bazaar_compute_node/core/outcomes.py +51 -0
  55. bazaar_compute_node/core/paths.py +19 -0
  56. bazaar_compute_node/core/runtime.py +118 -0
  57. bazaar_compute_node/core/storage.py +167 -0
  58. bazaar_compute_node-0.1.3.dist-info/METADATA +178 -0
  59. bazaar_compute_node-0.1.3.dist-info/RECORD +62 -0
  60. bazaar_compute_node-0.1.3.dist-info/WHEEL +4 -0
  61. bazaar_compute_node-0.1.3.dist-info/entry_points.txt +15 -0
  62. bazaar_compute_node-0.1.3.dist-info/licenses/LICENSE +613 -0
@@ -0,0 +1,167 @@
1
+ from __future__ import annotations
2
+
3
+ from contextlib import AbstractAsyncContextManager
4
+ from dataclasses import dataclass
5
+ from typing import Protocol
6
+
7
+ from .lifecycle import IAsyncLifecycle
8
+ from .models import (
9
+ BcnSession,
10
+ ChannelSession,
11
+ ConsumerCursor,
12
+ InboundMessage,
13
+ OutboundMessage,
14
+ RuntimeAttempt,
15
+ RuntimeEvent,
16
+ RuntimeSession,
17
+ )
18
+
19
+
20
+ @dataclass(frozen=True, slots=True)
21
+ class NodeIdentity:
22
+ """Stable node and shared workspace identity returned by storage."""
23
+
24
+ node_id: str
25
+ workspace_id: str
26
+
27
+ def __post_init__(self) -> None:
28
+ if not isinstance(self.node_id, str) or not self.node_id:
29
+ raise ValueError("node_id must be a non-empty string")
30
+ if not isinstance(self.workspace_id, str) or not self.workspace_id:
31
+ raise ValueError("workspace_id must be a non-empty string")
32
+
33
+
34
+ class IStorageTransaction(Protocol):
35
+ """Explicit transaction boundary for repository operations.
36
+
37
+ A normal context exit commits. An exception, including cancellation,
38
+ rolls back. Implementations must not rely on implicit driver transactions
39
+ for cursor, fresh-check, or durable outcome transitions.
40
+ """
41
+
42
+ async def find_channel_session(
43
+ self,
44
+ *,
45
+ channel: str,
46
+ provider_thread_id: str,
47
+ ) -> ChannelSession | None:
48
+ """Find a channel session by provider-neutral identity fields."""
49
+ ...
50
+
51
+ async def get_channel_session(self, session_id: str) -> ChannelSession | None:
52
+ """Load one channel session by local id."""
53
+ ...
54
+
55
+ async def get_bcn_session(self, session_id: str) -> BcnSession | None:
56
+ """Load one bcn session by local id."""
57
+ ...
58
+
59
+ async def find_bcn_session(self, channel_session_id: str) -> BcnSession | None:
60
+ """Find the bcn session bound to one channel session for recovery."""
61
+ ...
62
+
63
+ async def get_runtime_session(self, session_id: str) -> RuntimeSession | None:
64
+ """Load one durable runtime binding by local id."""
65
+ ...
66
+
67
+ async def find_runtime_session(self, session_id: str) -> RuntimeSession | None:
68
+ """Find the runtime session bound to one bcn session for recovery."""
69
+ ...
70
+
71
+ async def get_runtime_attempt(self, turn_id: str) -> RuntimeAttempt | None:
72
+ """Load one immutable runtime attempt correlation record."""
73
+ ...
74
+
75
+ async def get_consumer_cursor(self, session_id: str) -> ConsumerCursor | None:
76
+ """Load the session-scoped delivery and inbox snapshot cursor."""
77
+ ...
78
+
79
+ async def get_latest_inbound_seq(self, session_id: str) -> int:
80
+ """Return zero when the session has no inbound messages."""
81
+ ...
82
+
83
+ async def find_inbound_message(
84
+ self,
85
+ channel: str,
86
+ provider_thread_id: str,
87
+ provider_message_id: str,
88
+ ) -> InboundMessage | None:
89
+ """Load the canonical inbound bound to one external message identity."""
90
+ ...
91
+
92
+ async def list_ready_attachment_paths(self) -> tuple[str, ...]:
93
+ """List workspace-relative paths retained by ready descriptors."""
94
+ ...
95
+
96
+ async def list_inbound_messages(
97
+ self,
98
+ session_id: str,
99
+ *,
100
+ after_seq: int | None = None,
101
+ target: str | None = None,
102
+ around_message_id: str | None = None,
103
+ notifying_only: bool = False,
104
+ limit: int = 100,
105
+ ) -> tuple[InboundMessage, ...]:
106
+ """Read messages without advancing the consumer cursor."""
107
+ ...
108
+
109
+ async def save_channel_session(self, session: ChannelSession) -> None:
110
+ """Persist a validated channel session binding update."""
111
+ ...
112
+
113
+ async def save_bcn_session(self, session: BcnSession) -> None:
114
+ """Persist a validated bcn session binding update."""
115
+ ...
116
+
117
+ async def save_runtime_session(self, session: RuntimeSession) -> None:
118
+ """Persist a validated runtime binding update."""
119
+ ...
120
+
121
+ async def save_runtime_attempt(self, attempt: RuntimeAttempt) -> None:
122
+ """Persist one immutable runtime attempt correlation record."""
123
+ ...
124
+
125
+ async def append_inbound_message(self, message: InboundMessage) -> InboundMessage:
126
+ """Append or deduplicate one inbound message and return its canonical row."""
127
+ ...
128
+
129
+ async def save_consumer_cursor(self, cursor: ConsumerCursor) -> None:
130
+ """Persist the session cursor and independent inbox snapshot."""
131
+ ...
132
+
133
+ async def get_outbound_message(
134
+ self, outbound_message_id: str
135
+ ) -> OutboundMessage | None:
136
+ """Load one outbound command attempt by local id."""
137
+ ...
138
+
139
+ async def save_outbound_message(self, message: OutboundMessage) -> OutboundMessage:
140
+ """Persist a draft or delivery transition and return its canonical row."""
141
+ ...
142
+
143
+ async def append_runtime_event(self, event: RuntimeEvent) -> RuntimeEvent:
144
+ """Append an operational event and return its canonical local sequence."""
145
+ ...
146
+
147
+
148
+ class IStorage(IAsyncLifecycle, Protocol):
149
+ """Provider-neutral storage lifecycle and explicit transaction factory."""
150
+
151
+ @property
152
+ def name(self) -> str:
153
+ """Return the stable entry-point identity of this adapter."""
154
+ ...
155
+
156
+ async def initialize(
157
+ self,
158
+ *,
159
+ node_id: str | None = None,
160
+ workspace_id: str | None = None,
161
+ ) -> NodeIdentity:
162
+ """Load or create node identity after storage startup."""
163
+ ...
164
+
165
+ def transaction(self) -> AbstractAsyncContextManager[IStorageTransaction]:
166
+ """Open an explicit transaction owned by the caller."""
167
+ ...
@@ -0,0 +1,178 @@
1
+ Metadata-Version: 2.4
2
+ Name: bazaar-compute-node
3
+ Version: 0.1.3
4
+ Summary: Runtime-agnostic computer node daemon for agents and channels.
5
+ License-Expression: AGPL-3.0-only
6
+ License-File: LICENSE
7
+ Requires-Dist: aiohttp>=3.12.0
8
+ Requires-Dist: aiosqlite>=0.20.0
9
+ Requires-Dist: cryptography>=45.0.0
10
+ Requires-Python: >=3.14
11
+ Project-URL: Repository, https://github.com/yuchanns/bazaar-compute-node
12
+ Description-Content-Type: text/markdown
13
+
14
+ # Bazaar Compute Node
15
+
16
+ Bazaar Compute Node(`bcn`)是一个可组合的 Agent 计算节点。用户通过 Channel 与
17
+ Agent Runtime 沟通:Channel 提供输入任务和接收结果的界面,Runtime 是用户选择的 Agent
18
+ Harness 工具。
19
+
20
+ 不同的 Channel 与 Runtime 可以自由组合和扩展,不绑定具体供应商或交互形态。
21
+
22
+ ## 核心能力
23
+
24
+ - **自由组合**:根据使用场景分别选择 Channel 与 Runtime,并可独立替换和扩展。
25
+ - **持续会话**:每个用户和对话拥有独立上下文,节点重启后仍可继续之前的任务。
26
+ - **真实工作区**:Runtime 可以在独立工作区中分析、创建和修改文件,而不局限于文本回答。
27
+ - **可靠交付**:自动处理长结果的分批发送并记录交付状态,避免任务结果静默丢失。
28
+ - **安全边界**:复用所选 Harness 的权限机制,按任务需要控制文件与网络访问。
29
+ - **跨平台运行**:支持 Linux、macOS 和 Windows,并以后台进程长期运行。
30
+
31
+ ## 当前支持
32
+
33
+ 当前版本提供首组可用组合:
34
+
35
+ - **WeCom Channel**:通过企业微信与 Agent Runtime 持续沟通;
36
+ - **Codex Runtime**:使用 Codex 作为 Agent Harness 工具完成任务。
37
+
38
+ ## Roadmap
39
+
40
+ bcn 将沿着可组合的 Channel、Runtime 与节点通用能力继续扩展。
41
+
42
+ ### 更多 Harness
43
+
44
+ - 一个节点允许添加多个 Agents
45
+ - Agent Teams 合作
46
+
47
+ ### 更多 Channel
48
+
49
+ - **Telegram**:通过 Telegram 与 Agent 交互。
50
+ - **GitHub**: 通过 GitHub Issue 与 Agent Harness 进行开发。
51
+ - **GitLab**: 将 Agent Harness 引入企业私有仓库与团队进行开发。
52
+
53
+ ### 更多 Runtime
54
+
55
+ - **Claude Code**:支持选择 Claude Code 作为 Agent Harness;
56
+ - **pi**:支持选择 pi 作为 Agent Harness。
57
+
58
+ ### 节点能力
59
+
60
+ - **附件发送**:让 Agent 可以通过当前 Channel 交付生成的文件;
61
+ - **定时任务**:创建一次性或周期性任务,由节点按计划自动执行并返回结果。
62
+
63
+ ## 安装
64
+
65
+ 项目通过 PyPI 分发,要求 Python 3.14 或更高版本:
66
+
67
+ ```bash
68
+ uv tool install bazaar-compute-node
69
+ bcn --version
70
+ ```
71
+
72
+ 升级到 PyPI 上的最新正式版本:
73
+
74
+ ```bash
75
+ uv tool upgrade bazaar-compute-node
76
+ ```
77
+
78
+ 也可以直接从 GitHub 运行尚未发布的源码:
79
+
80
+ ```bash
81
+ uvx --from 'git+https://github.com/yuchanns/bazaar-compute-node@main' bcn --version
82
+ ```
83
+
84
+ 生产环境建议将 `@main` 替换为固定 tag 或 commit,避免运行版本随分支更新。
85
+
86
+ ## Channel
87
+
88
+ Channel 是用户输入任务、接收结果,并与 Agent Runtime 持续沟通的界面。启动节点时选择一种
89
+ Channel 即可。
90
+
91
+ ### WeCom
92
+
93
+ WeCom Channel 对接企业微信智能机器人,支持单聊、群聊、文本与媒体输入,以及 Markdown
94
+ 长消息分批返回。群聊中需要 @机器人,确保消息能够进入节点。
95
+
96
+ 在 `~/.bcn/config.toml` 中配置 Bot ID:
97
+
98
+ ```toml
99
+ [channel.wecom]
100
+ bot_id = "your-bot-id"
101
+ ```
102
+
103
+ Bot Secret 不写入配置文件,只通过环境变量提供:
104
+
105
+ ```bash
106
+ export BCN_WECOM_BOT_SECRET='your-bot-secret'
107
+ ```
108
+
109
+ PowerShell:
110
+
111
+ ```powershell
112
+ $env:BCN_WECOM_BOT_SECRET = 'your-bot-secret'
113
+ ```
114
+
115
+ ## Runtime
116
+
117
+ Runtime 是用户选择的 Agent Harness 工具,用来运行 Agent 并完成任务。启动节点时选择一种
118
+ Runtime 即可。
119
+
120
+ ### Codex
121
+
122
+ 使用 Codex Runtime 前,需要先安装并登录
123
+ [Codex CLI](https://developers.openai.com/codex/cli/)。
124
+
125
+ 默认配置只允许 Codex 写入当前会话的工作区,并允许其命令访问网络:
126
+
127
+ ```toml
128
+ [runtime]
129
+ sandbox_mode = "workspace-write"
130
+ network_access = true
131
+ ```
132
+
133
+ 如需覆盖 Codex 的默认模型或推理强度,可以在 `[runtime]` 中增加 `model` 和 `effort`。
134
+ 除非你明确需要使用运行用户已有的主机权限,否则不要将 `sandbox_mode` 改为
135
+ `danger-full-access`。
136
+
137
+ ## 启动节点
138
+
139
+ 在 `~/.bcn/config.toml` 中选择要组合的 Channel 与 Runtime。以下配置使用当前已经落地的
140
+ WeCom + Codex 组合:
141
+
142
+ ```toml
143
+ [node]
144
+ channel = "wecom"
145
+ runtime = "codex"
146
+ ```
147
+
148
+ 启动后台节点:
149
+
150
+ ```bash
151
+ uvx --from 'git+https://github.com/yuchanns/bazaar-compute-node@main' bcn start
152
+ ```
153
+
154
+ 也可以不创建配置文件,直接通过 `--channel`、`--runtime`、`--model`、`--effort`、
155
+ `--sandbox-mode` 和 `--network-access` 等参数启动;命令行参数会覆盖配置文件中的对应值。
156
+
157
+ ## 常用操作
158
+
159
+ ```bash
160
+ # Stop the background node gracefully.
161
+ uvx --from 'git+https://github.com/yuchanns/bazaar-compute-node@main' bcn stop
162
+
163
+ # Restart the node after changing configuration.
164
+ uvx --from 'git+https://github.com/yuchanns/bazaar-compute-node@main' bcn restart
165
+
166
+ # Inspect available options.
167
+ uvx --from 'git+https://github.com/yuchanns/bazaar-compute-node@main' bcn --help
168
+ ```
169
+
170
+ 节点数据默认保存在 `~/.bcn`。停止节点会优雅关闭后台进程,不会删除既有会话、工作区或消息记录。
171
+
172
+ ## 许可证
173
+
174
+ 本项目使用 [GNU Affero General Public License v3.0](LICENSE)。
175
+
176
+ ## Credits
177
+
178
+ 本项目的协作模型与 Agent Runtime 设计受到 [Raft.build](https://raft.build) 的启发,谨此致谢。
@@ -0,0 +1,62 @@
1
+ bazaar_compute_node/__init__.py,sha256=53_DJe-VLzgldmTJPdbNKASHyUPfkQ3reFXcjwSE3Vg,85
2
+ bazaar_compute_node/app/__init__.py,sha256=KuBO8wDyz3JOTRwjA8eJ2pb8AX8B9R89Rr4beasY1-M,59
3
+ bazaar_compute_node/app/application.py,sha256=9187ME_HN6kBD3OTVkC60xqYea-MbhsdsSl66YQEQgI,14985
4
+ bazaar_compute_node/app/attachments.py,sha256=IIyFIKZbt7eeonkBCT_mME-TRZ4wggiCH1A6GgvtXE4,5964
5
+ bazaar_compute_node/app/command.py,sha256=zy-y9vM9_nt5KSNXx1GwCYTjbbysRWG9NIeTY6qK6Po,12914
6
+ bazaar_compute_node/app/config.py,sha256=ww6dGZfIuapUBkdAyn3B1cFlYIHqdao5ybAcI0y1hKs,4541
7
+ bazaar_compute_node/app/registry.py,sha256=54aHCHiBCvHs99StWfETUCO25gbaG1A2exynCWZ5igA,4012
8
+ bazaar_compute_node/app/transport.py,sha256=cGH0N5hnQKzartyTE8ALowlxjlDCZP3nGxfiYFK1en8,9002
9
+ bazaar_compute_node/app/windows_pipe.py,sha256=qdl6tbhTHF8OQckrQfZAcy34LFdVzx5MCcGOsvLp9HY,14710
10
+ bazaar_compute_node/app/wrapper.py,sha256=AOW47DBaJFEHZevQ0H5tP3smIaSB2ww246sDc_W8-88,1929
11
+ bazaar_compute_node/bcc.py,sha256=SGaTWjcVKrdW3P1DyQyMf1_sbWBxExneFtOhPojRj14,18457
12
+ bazaar_compute_node/cli.py,sha256=D310AaGWClXIXv3IRkFPQFas4RoPOiu5MyYkCM8kfmY,11870
13
+ bazaar_compute_node/contrib/__init__.py,sha256=tbFhPuTl23h_TtraSOcCxne-Yq5CUrdQQioSw_IHH6s,63
14
+ bazaar_compute_node/contrib/codex_app_server/__init__.py,sha256=_UMpu3gjG-IXWuMOaP-SnwPvilDRuB6ks5JntcNSWaE,1589
15
+ bazaar_compute_node/contrib/codex_app_server/approval.py,sha256=2e9T_8X9SUMNjwsdJum9XLeY6KkdVx3TaS4n8siMrII,5493
16
+ bazaar_compute_node/contrib/codex_app_server/client.py,sha256=aPxvlON-r21HbyYw1UE_Wx64UDh8XFfCuLjYNCfa_VA,12827
17
+ bazaar_compute_node/contrib/codex_app_server/events.py,sha256=BpKlVWubunSjM3-tFJ_3EubWWSU0IpIYwaaVmXMqWEA,16278
18
+ bazaar_compute_node/contrib/codex_app_server/plugin.py,sha256=aCoN3D49WSt2JrIm-D8ZQlBH1M1YYeHUQeRyqv7_Bv8,399
19
+ bazaar_compute_node/contrib/codex_app_server/process.py,sha256=DdSMxPgXoy4um88dzUh3rTG6irmO2dmGyoZ1wvrhXVE,20794
20
+ bazaar_compute_node/contrib/codex_app_server/protocol.py,sha256=JaViEGquWwp_SF_CMogJr-wbMgmUwJlRzZqWEMTMdJY,2902
21
+ bazaar_compute_node/contrib/codex_app_server/runtime.py,sha256=IvOx_k04Op_OsFVyEaNRyJsj2JWE3iyEVcNNAr8tX2c,19616
22
+ bazaar_compute_node/contrib/logging/__init__.py,sha256=gZnDXRjaAVFhRW7DAkFhfTOcwTHnQGE6aJ6HFG6WCUE,96
23
+ bazaar_compute_node/contrib/logging/audit.py,sha256=gI7akvoFyElgydzF4fg9p4oEGE9KalDcKBQZye3Q6MI,2010
24
+ bazaar_compute_node/contrib/logging/plugin.py,sha256=NfMxZq6o0nDnuFbzgl6WET-KQCq4HeZBgHfhHD_QrW0,196
25
+ bazaar_compute_node/contrib/sqlite/__init__.py,sha256=xDxqVZo2RcZmtw1otNDsqiHe6UsbrA-LEf7pDNlfcZY,306
26
+ bazaar_compute_node/contrib/sqlite/codec.py,sha256=eEesABKsW5rDE7GKgz_et5JCUJQ--hFi86DNcE2vPCI,30654
27
+ bazaar_compute_node/contrib/sqlite/database.py,sha256=EhR_NJRjVpprV3bTY4Us8J-Kb5F2WrMWLJS0lUeIe9Q,9892
28
+ bazaar_compute_node/contrib/sqlite/migrations.py,sha256=aFxQ6xosrJaGkGIvBe37pDRMQkL2eHiknD667eJ8zos,23757
29
+ bazaar_compute_node/contrib/sqlite/plugin.py,sha256=wPrEpsf-ho2u5IF-NDGOtKs4onNWF9nF26DxfaR3W08,205
30
+ bazaar_compute_node/contrib/sqlite/repository.py,sha256=m_A5gFw8uxsInubBUWpc3kK5EPuDvanjbRV04a4IJXk,45985
31
+ bazaar_compute_node/contrib/wecom/__init__.py,sha256=oh81U9F7_tdJDjM1AJYvprUQOt2mV9zPf8-LCBGnnVU,45
32
+ bazaar_compute_node/contrib/wecom/channel.py,sha256=0mtyQFsN8t_QjRLTJo2PChHZN7AHVT3v7U4zBrA-CXY,38197
33
+ bazaar_compute_node/contrib/wecom/markdown.py,sha256=tNtk3BSe0QbJemK_m6TiA_FVlfpHUaIbIx9Ehdv7vTk,4897
34
+ bazaar_compute_node/contrib/wecom/plugin.py,sha256=R3_tnzca8rEYJ6UJURKPC4vZJDbEpIS_rAwMMbAtAYk,924
35
+ bazaar_compute_node/core/__init__.py,sha256=5hDdQN5MuoC8fSPUXgB06N9ZfWnrX367bym3ZKdiYgQ,212
36
+ bazaar_compute_node/core/approval.py,sha256=WxSzdFUKybR0fMgbEbxFBr4gds7ehocx3NEDI5rl4vI,1762
37
+ bazaar_compute_node/core/audit.py,sha256=EMlYMh7V01eOvD_P8rjkZpHD3Dyoh2z5KaSgTOkxBe8,3341
38
+ bazaar_compute_node/core/channel.py,sha256=f7TdpJps43i7_1KgddTf0ylAEtW5rTqYRCtn7Bk9gz4,3752
39
+ bazaar_compute_node/core/client.py,sha256=KYooK8OeIvHt4VX_EN2V7aTKbcQaGcAqTKw9GCDEqx8,887
40
+ bazaar_compute_node/core/command.py,sha256=oZ2yec-u3UAAtFn9_RZpyb7aIj0Owmg57VsoOIZ_E2w,2752
41
+ bazaar_compute_node/core/concurrency.py,sha256=viJx1CV3VFrY7tKD77iTActP8zdYokMhbaP4ja3rYcU,978
42
+ bazaar_compute_node/core/correlation.py,sha256=c7CGd0TOJwsqYBSGAgIYYfM7ufu-aDn6Lk9_6ln3u_I,1906
43
+ bazaar_compute_node/core/instruction.py,sha256=jP6ODinNBrhN6-Myt18D-gX8WKycHoh7CRmN4-Q0CVU,15242
44
+ bazaar_compute_node/core/lifecycle.py,sha256=4wL9f_S-93Zsork6oevD_JhjkabYtHWWCIUhQFLvU64,1632
45
+ bazaar_compute_node/core/models/__init__.py,sha256=wb9d_abZf9opn1uA1675YYVgDJBL6V_IF-KN5yYEsFQ,1295
46
+ bazaar_compute_node/core/models/entities.py,sha256=0RhM0HZeutlwWUcVHMUOnwIvQOppe1AtsR3RbMhmcGM,18331
47
+ bazaar_compute_node/core/models/states.py,sha256=_R93vVuMzleW-ujFXBeCQRFRIPZEubDZw16Z7pec1Es,13156
48
+ bazaar_compute_node/core/observability.py,sha256=Kom3d2FXnaJe61gDjxpnT7Zz1utjCVqQjPz_XiL_YdU,1226
49
+ bazaar_compute_node/core/orchestration/__init__.py,sha256=o55opZI-vkesm-ziZD6gZQY7tj3tnI6nwcre5ygq2mQ,151
50
+ bazaar_compute_node/core/orchestration/command.py,sha256=SezMU3VpTcnsqlfOTwAaJ2PGamdCjr413VtzLz68IhU,26860
51
+ bazaar_compute_node/core/orchestration/services.py,sha256=azjLc7_4nmmxrG7uVYvJyWpPDcUv6dM-YTxBoHaLQcY,4147
52
+ bazaar_compute_node/core/orchestration/session.py,sha256=AAt_FVla6LnA4pt0VUSFzJO-lK57N9l11mQRGK_XqG0,35858
53
+ bazaar_compute_node/core/orchestration/turn.py,sha256=-aSHeMsrB_70gRCyPxSN0IdH8mqzgchDknuCWCqEFD0,17968
54
+ bazaar_compute_node/core/outcomes.py,sha256=QecTXJ0QZ33J3ton9Xalp-NH4zQ_sBRPSFDnZcqSwIc,1741
55
+ bazaar_compute_node/core/paths.py,sha256=3_szH8NVEKI1KAmLxM2wBI_XCIoFDWzEmBB0T3uHP6w,555
56
+ bazaar_compute_node/core/runtime.py,sha256=hX_41WlwqdzHAYgMktSctPozR58bSRNlaigHgEaG1eo,3885
57
+ bazaar_compute_node/core/storage.py,sha256=V1sUpKZVrd0aX-Nbkb8DWKRK624nlKirvni09s9NOIQ,5619
58
+ bazaar_compute_node-0.1.3.dist-info/licenses/LICENSE,sha256=ux8a5pM2QVuZCxl-4Fiu9LkvMdwCxa0qQ1jvGWDzi-4,33876
59
+ bazaar_compute_node-0.1.3.dist-info/WHEEL,sha256=q9Wah2_CgP24mRNSlTyb0F8Yrbz55SzVl8eHLkZ_wvE,80
60
+ bazaar_compute_node-0.1.3.dist-info/entry_points.txt,sha256=Bzzi72277-1aui_xVQVVj1mQjEyoo-oR37nL_zIvkU8,451
61
+ bazaar_compute_node-0.1.3.dist-info/METADATA,sha256=41steq9Dp11Rw3qOmKfMtDf8zprW2tfl7EzK0Mxj9uQ,5522
62
+ bazaar_compute_node-0.1.3.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: uv 0.12.2
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,15 @@
1
+ [console_scripts]
2
+ bcn = bazaar_compute_node.cli:main
3
+
4
+ [bazaar_compute_node.audits]
5
+ logging = bazaar_compute_node.contrib.logging.plugin:create_audit
6
+
7
+ [bazaar_compute_node.channels]
8
+ wecom = bazaar_compute_node.contrib.wecom.plugin:create_channel
9
+
10
+ [bazaar_compute_node.runtimes]
11
+ codex = bazaar_compute_node.contrib.codex_app_server.plugin:create_runtime
12
+
13
+ [bazaar_compute_node.storages]
14
+ sqlite = bazaar_compute_node.contrib.sqlite.plugin:create_storage
15
+