@steerable/runtime-darwin-arm64 0.10.2 → 0.11.0
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.
- package/package.json +1 -1
- package/python-runtime/manifest.json +1 -1
- package/python-runtime/python/lib/python3.12/site-packages/{steerable_agent_harness-0.10.2.dist-info → steerable_agent_harness-0.11.0.dist-info}/METADATA +1 -1
- package/python-runtime/python/lib/python3.12/site-packages/{steerable_agent_harness-0.10.2.dist-info → steerable_agent_harness-0.11.0.dist-info}/RECORD +7 -7
- package/python-runtime/python/lib/python3.12/site-packages/{steerable_agent_protocol-0.10.2.dist-info → steerable_agent_protocol-0.11.0.dist-info}/METADATA +1 -1
- package/python-runtime/python/lib/python3.12/site-packages/steerable_agent_protocol-0.11.0.dist-info/RECORD +11 -0
- package/python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/__init__.py +12 -0
- package/python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/orchestration.py +374 -35
- package/python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/peer.py +192 -0
- package/python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/pool.py +96 -2
- package/python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/subagent.py +27 -8
- package/python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/team_board.py +229 -0
- package/python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/tree.py +155 -0
- package/python-runtime/python/lib/python3.12/site-packages/{steerable_agent_runtime-0.10.2.dist-info → steerable_agent_runtime-0.11.0.dist-info}/METADATA +32 -1
- package/python-runtime/python/lib/python3.12/site-packages/{steerable_agent_runtime-0.10.2.dist-info → steerable_agent_runtime-0.11.0.dist-info}/RECORD +17 -11
- package/python-runtime/python/lib/python3.12/site-packages/steerable_sidecar/sidecar.py +49 -1
- package/python-runtime/python/lib/python3.12/site-packages/{steerable_sidecar-0.10.2.dist-info → steerable_sidecar-0.11.0.dist-info}/METADATA +25 -1
- package/python-runtime/python/lib/python3.12/site-packages/{steerable_sidecar-0.10.2.dist-info → steerable_sidecar-0.11.0.dist-info}/RECORD +9 -9
- package/runtime.json +44 -32
- package/python-runtime/python/lib/python3.12/site-packages/steerable_agent_protocol-0.10.2.dist-info/RECORD +0 -11
- /package/python-runtime/python/lib/python3.12/site-packages/{steerable_agent_harness-0.10.2.dist-info → steerable_agent_harness-0.11.0.dist-info}/INSTALLER +0 -0
- /package/python-runtime/python/lib/python3.12/site-packages/{steerable_agent_harness-0.10.2.dist-info → steerable_agent_harness-0.11.0.dist-info}/WHEEL +0 -0
- /package/python-runtime/python/lib/python3.12/site-packages/{steerable_agent_protocol-0.10.2.dist-info → steerable_agent_protocol-0.11.0.dist-info}/INSTALLER +0 -0
- /package/python-runtime/python/lib/python3.12/site-packages/{steerable_agent_protocol-0.10.2.dist-info → steerable_agent_protocol-0.11.0.dist-info}/WHEEL +0 -0
- /package/python-runtime/python/lib/python3.12/site-packages/{steerable_agent_runtime-0.10.2.dist-info → steerable_agent_runtime-0.11.0.dist-info}/INSTALLER +0 -0
- /package/python-runtime/python/lib/python3.12/site-packages/{steerable_agent_runtime-0.10.2.dist-info → steerable_agent_runtime-0.11.0.dist-info}/WHEEL +0 -0
- /package/python-runtime/python/lib/python3.12/site-packages/{steerable_sidecar-0.10.2.dist-info → steerable_sidecar-0.11.0.dist-info}/INSTALLER +0 -0
- /package/python-runtime/python/lib/python3.12/site-packages/{steerable_sidecar-0.10.2.dist-info → steerable_sidecar-0.11.0.dist-info}/WHEEL +0 -0
- /package/python-runtime/python/lib/python3.12/site-packages/{steerable_sidecar-0.10.2.dist-info → steerable_sidecar-0.11.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"""Tree-wide addressing: any agent in one spawn tree can message another.
|
|
2
|
+
|
|
3
|
+
Up to now ``agent_send`` only reached an executor's **own** children — a pool
|
|
4
|
+
sees exactly the loops it built. That makes collaboration strictly downward:
|
|
5
|
+
a sibling, or the parent itself, is unaddressable no matter how the parent
|
|
6
|
+
choreographed the work. Real "split this refactor across four agents" needs
|
|
7
|
+
the other direction: an implementer telling the researcher what it found, a
|
|
8
|
+
reviewer asking the implementer why a test changed, a worker reporting to the
|
|
9
|
+
agent that spawned it.
|
|
10
|
+
|
|
11
|
+
This module is the addressing layer for that. One ``AgentTree`` per root turn
|
|
12
|
+
holds every addressable member, and each member is registered by the executor
|
|
13
|
+
that **owns** it — the only thing that can steer or resume it. So ``send``
|
|
14
|
+
resolves a lineage id across the whole tree and then delegates to that owner;
|
|
15
|
+
nothing here pokes at another agent's loop directly.
|
|
16
|
+
|
|
17
|
+
Why an explicit tree instead of "walk up and ask": resume is a parent
|
|
18
|
+
operation (only the owning pool holds the loop, its schemas and its budget
|
|
19
|
+
line), so a peer message must arrive at the owner anyway. Holding the owner's
|
|
20
|
+
delivery callback at registration makes that one hop instead of a recursive
|
|
21
|
+
search that could deadlock against a parent waiting on its child.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from __future__ import annotations
|
|
25
|
+
|
|
26
|
+
import logging
|
|
27
|
+
from collections.abc import Awaitable, Callable
|
|
28
|
+
from dataclasses import dataclass
|
|
29
|
+
|
|
30
|
+
__all__ = ["AgentTree", "TreeMember"]
|
|
31
|
+
|
|
32
|
+
logger = logging.getLogger(__name__)
|
|
33
|
+
|
|
34
|
+
#: Delivers a message to one member, returning the same ``steered`` /
|
|
35
|
+
#: ``resumed`` / ``error:*`` vocabulary ``AgentPool.send`` already uses. The
|
|
36
|
+
#: owner decides what a message means for its agent (steer while running,
|
|
37
|
+
#: resume when settled); the tree does not know.
|
|
38
|
+
Deliver = Callable[[str], Awaitable[str]]
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@dataclass(frozen=True, slots=True)
|
|
42
|
+
class TreeMember:
|
|
43
|
+
"""One addressable agent.
|
|
44
|
+
|
|
45
|
+
``lineage`` is the tree id (``0`` is the root, ``0.2.1`` a grandchild), so
|
|
46
|
+
a sender can name any relative: ``0`` for the agent that started
|
|
47
|
+
everything, ``0.1`` for a sibling, ``0.2.1`` for a grandchild.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
lineage: str
|
|
51
|
+
depth: int
|
|
52
|
+
parent: str | None
|
|
53
|
+
profile: str | None = None
|
|
54
|
+
|
|
55
|
+
def to_wire(self) -> dict[str, object]:
|
|
56
|
+
"""Camel-case payload for a tool result."""
|
|
57
|
+
return {
|
|
58
|
+
"childId": self.lineage,
|
|
59
|
+
"depth": self.depth,
|
|
60
|
+
**({"parentId": self.parent} if self.parent is not None else {}),
|
|
61
|
+
**({"profile": self.profile} if self.profile else {}),
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class AgentTree:
|
|
66
|
+
"""Every addressable member of one spawn tree.
|
|
67
|
+
|
|
68
|
+
Registration is the authorization: an agent is reachable exactly while its
|
|
69
|
+
owner keeps it registered, so closing a child unregisters it and the
|
|
70
|
+
address stops resolving. There is no separate permission table to drift.
|
|
71
|
+
|
|
72
|
+
The root registers itself through ``register_root``; every other member
|
|
73
|
+
registers at spawn. Membership is scoped to the tree object, which is why
|
|
74
|
+
a message cannot escape into an unrelated conversation's agents.
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
def __init__(self) -> None:
|
|
78
|
+
self._deliver: dict[str, Deliver] = {}
|
|
79
|
+
self._members: dict[str, TreeMember] = {}
|
|
80
|
+
|
|
81
|
+
# -- registration --------------------------------------------------
|
|
82
|
+
|
|
83
|
+
def register_root(self, deliver: Deliver) -> TreeMember:
|
|
84
|
+
"""Make the root agent (``0``) addressable.
|
|
85
|
+
|
|
86
|
+
Children need this to report to whoever spawned them — without it the
|
|
87
|
+
only upward channel is the completion notice, which carries a status
|
|
88
|
+
and no reply path.
|
|
89
|
+
"""
|
|
90
|
+
return self._register(TreeMember(lineage="0", depth=0, parent=None), deliver)
|
|
91
|
+
|
|
92
|
+
def register(self, member: TreeMember, deliver: Deliver) -> TreeMember:
|
|
93
|
+
"""Make one child addressable for as long as its owner keeps it so."""
|
|
94
|
+
return self._register(member, deliver)
|
|
95
|
+
|
|
96
|
+
def _register(self, member: TreeMember, deliver: Deliver) -> TreeMember:
|
|
97
|
+
self._members[member.lineage] = member
|
|
98
|
+
self._deliver[member.lineage] = deliver
|
|
99
|
+
return member
|
|
100
|
+
|
|
101
|
+
def unregister(self, lineage: str) -> None:
|
|
102
|
+
"""Stop resolving one address; a later send reports it as unknown."""
|
|
103
|
+
self._members.pop(lineage, None)
|
|
104
|
+
self._deliver.pop(lineage, None)
|
|
105
|
+
|
|
106
|
+
# -- addressing ----------------------------------------------------
|
|
107
|
+
|
|
108
|
+
def get(self, lineage: str) -> TreeMember | None:
|
|
109
|
+
"""The member at ``lineage``, or ``None`` when it is not reachable."""
|
|
110
|
+
return self._members.get(lineage)
|
|
111
|
+
|
|
112
|
+
def members(self) -> list[TreeMember]:
|
|
113
|
+
"""Every reachable member, root first then in registration order."""
|
|
114
|
+
return sorted(self._members.values(), key=lambda m: (m.depth, m.lineage))
|
|
115
|
+
|
|
116
|
+
def resolve(self, sender: str, target: str) -> TreeMember | None:
|
|
117
|
+
"""The member ``target`` names, if ``sender`` may address it.
|
|
118
|
+
|
|
119
|
+
Two refusals, both structural rather than policy:
|
|
120
|
+
|
|
121
|
+
- the target must be registered (an unknown or closed agent has no
|
|
122
|
+
owner to deliver to);
|
|
123
|
+
- a member cannot address itself — that is a no-op the model would
|
|
124
|
+
read as a delivered message.
|
|
125
|
+
|
|
126
|
+
Everything else is allowed on purpose. Siblings, parent and children
|
|
127
|
+
are all in one tree because one agent created the work, and a worker
|
|
128
|
+
that cannot tell a sibling what it found falls back to routing every
|
|
129
|
+
fact through the parent, which is the cost this exists to remove.
|
|
130
|
+
"""
|
|
131
|
+
if target == sender:
|
|
132
|
+
return None
|
|
133
|
+
return self._members.get(target)
|
|
134
|
+
|
|
135
|
+
async def send(self, sender: str, target: str, message: str) -> str:
|
|
136
|
+
"""Deliver ``message`` from ``sender`` to ``target``.
|
|
137
|
+
|
|
138
|
+
Returns the owner's delivery verdict (``steered`` / ``resumed`` /
|
|
139
|
+
``error:*``). An unaddressable target reports ``error:unknown_member``
|
|
140
|
+
with the reachable ids, so a model that guessed a name can correct
|
|
141
|
+
itself instead of retrying the same call.
|
|
142
|
+
"""
|
|
143
|
+
member = self.resolve(sender, target)
|
|
144
|
+
deliver = self._deliver.get(target)
|
|
145
|
+
if member is None or deliver is None:
|
|
146
|
+
known = ", ".join(m.lineage for m in self.members()) or "(none)"
|
|
147
|
+
return (
|
|
148
|
+
f"error:unknown_member: {target!r} is not reachable from this "
|
|
149
|
+
f"tree; reachable: {known}"
|
|
150
|
+
)
|
|
151
|
+
try:
|
|
152
|
+
return await deliver(message)
|
|
153
|
+
except Exception as exc: # noqa: BLE001 — a peer failure is data
|
|
154
|
+
logger.warning("peer send %s -> %s failed: %s", sender, target, exc)
|
|
155
|
+
return f"error:delivery_failed: {target!r}: {exc}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: steerable-agent-runtime
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.11.0
|
|
4
4
|
Summary: Steerable agent runtime: LLM, tool, storage, and transport adapters.
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -88,6 +88,37 @@ release. Nothing in the single-agent path changed.
|
|
|
88
88
|
- **`SubagentExecutor.attach_pool()` / `.pool`** expose the shared pool so a
|
|
89
89
|
host can report children's usage alongside the turn's own bill.
|
|
90
90
|
|
|
91
|
+
## Upgrading from 0.10
|
|
92
|
+
|
|
93
|
+
Peer messaging and a shared task board (R8). Additive on the tool surface:
|
|
94
|
+
the same six orchestration tools exist, `agent_send` gained reach, and four
|
|
95
|
+
board tools appear when the family is on.
|
|
96
|
+
|
|
97
|
+
- **`agent_send` is tree-wide.** It used to reach only an executor's own
|
|
98
|
+
children. It now accepts any live lineage id in the turn's spawn tree — the
|
|
99
|
+
root (`0`), a sibling, a child — authorized by membership, not by a
|
|
100
|
+
permission table. Delivery still goes through the owning pool, so the
|
|
101
|
+
verdict vocabulary (`steered` / `resumed` / `error:*`) is unchanged. A
|
|
102
|
+
message to the root steers the parent loop and lands as a user turn at its
|
|
103
|
+
next round boundary.
|
|
104
|
+
- **Leaf agents get `agent_send` and `agent_list`.** A child that may not
|
|
105
|
+
spawn (depth wall) or that came from `delegate_subagent` is still a member
|
|
106
|
+
of the job, so it is advertised those two tools with no `agent_spawn`. A
|
|
107
|
+
host that counts tools per child will see two more.
|
|
108
|
+
- **`agent_list` gained `members` and `self`** next to `children` — the live
|
|
109
|
+
addresses `agent_send` accepts. `children` keeps its meaning and shape.
|
|
110
|
+
- **New: `AgentTree` / `TreeMember` / `TeamTaskBoard` / `TaskItem`,**
|
|
111
|
+
`OrchestrationExecutor(tree=..., team_board=...)`, and
|
|
112
|
+
`AgentPool.tree`. Passing neither keeps the previous behaviour exactly
|
|
113
|
+
(single-pool reach, no board tools). `PeerToolsExecutor` is the layer that
|
|
114
|
+
gives a leaf the two messaging tools.
|
|
115
|
+
- **New board tools, advertised with the family:** `team_task_create`,
|
|
116
|
+
`team_task_claim`, `team_task_complete`, `team_task_list`. They are
|
|
117
|
+
in-process and per turn — the board does not outlive its root turn, and the
|
|
118
|
+
durable child index remains the record of what survived.
|
|
119
|
+
- **`subagent` children now register in the same tree,** so a delegated child
|
|
120
|
+
and an `agent_spawn` child can message each other. `AgentPool.tree` exposes
|
|
121
|
+
it; `attach_pool` is what makes a delegation part of the turn's job.
|
|
91
122
|
Selectively install just the bits you need:
|
|
92
123
|
|
|
93
124
|
```bash
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
steerable_agent_runtime-0.
|
|
2
|
-
steerable_agent_runtime-0.
|
|
3
|
-
steerable_agent_runtime-0.
|
|
4
|
-
steerable_agent_runtime-0.
|
|
5
|
-
steerable_agent_runtime-0.
|
|
6
|
-
steerable_agent_runtime-0.
|
|
7
|
-
steerable_agent_runtime-0.
|
|
8
|
-
steerable_agent_runtime/__init__.py,sha256=
|
|
1
|
+
steerable_agent_runtime-0.11.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
2
|
+
steerable_agent_runtime-0.11.0.dist-info/METADATA,sha256=p0mi6i8cGICwZmZIxB29wLTPZnao10KPvgH6Tms_C-k,6769
|
|
3
|
+
steerable_agent_runtime-0.11.0.dist-info/RECORD,,
|
|
4
|
+
steerable_agent_runtime-0.11.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
steerable_agent_runtime-0.11.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
|
|
6
|
+
steerable_agent_runtime-0.11.0.dist-info/direct_url.json,sha256=ynbDZRQrFTAM9HNmanpnH67hn0SPZjj7e-HwGyfekcc,303
|
|
7
|
+
steerable_agent_runtime-0.11.0.dist-info/top_level.txt,sha256=oH6AX0Sbye_DmFcu-JFEwuu-yXwyCkkdquPt8t0pFJE,24
|
|
8
|
+
steerable_agent_runtime/__init__.py,sha256=4cY8-MICTOiT87TqaJNlVHeG0BtB305I13k90RDGXBg,13732
|
|
9
9
|
steerable_agent_runtime/__pycache__/__init__.cpython-312.pyc,,
|
|
10
10
|
steerable_agent_runtime/__pycache__/antihallucination.cpython-312.pyc,,
|
|
11
11
|
steerable_agent_runtime/__pycache__/approval.cpython-312.pyc,,
|
|
@@ -40,6 +40,7 @@ steerable_agent_runtime/__pycache__/native_bridge.cpython-312.pyc,,
|
|
|
40
40
|
steerable_agent_runtime/__pycache__/observation_aging.cpython-312.pyc,,
|
|
41
41
|
steerable_agent_runtime/__pycache__/orchestration.cpython-312.pyc,,
|
|
42
42
|
steerable_agent_runtime/__pycache__/otel.cpython-312.pyc,,
|
|
43
|
+
steerable_agent_runtime/__pycache__/peer.cpython-312.pyc,,
|
|
43
44
|
steerable_agent_runtime/__pycache__/plugins.cpython-312.pyc,,
|
|
44
45
|
steerable_agent_runtime/__pycache__/pool.cpython-312.pyc,,
|
|
45
46
|
steerable_agent_runtime/__pycache__/pricing.cpython-312.pyc,,
|
|
@@ -54,6 +55,7 @@ steerable_agent_runtime/__pycache__/sandboxed.cpython-312.pyc,,
|
|
|
54
55
|
steerable_agent_runtime/__pycache__/skills.cpython-312.pyc,,
|
|
55
56
|
steerable_agent_runtime/__pycache__/spill.cpython-312.pyc,,
|
|
56
57
|
steerable_agent_runtime/__pycache__/subagent.cpython-312.pyc,,
|
|
58
|
+
steerable_agent_runtime/__pycache__/team_board.cpython-312.pyc,,
|
|
57
59
|
steerable_agent_runtime/__pycache__/todo.cpython-312.pyc,,
|
|
58
60
|
steerable_agent_runtime/__pycache__/tokens.cpython-312.pyc,,
|
|
59
61
|
steerable_agent_runtime/__pycache__/tool_presentation.cpython-312.pyc,,
|
|
@@ -61,6 +63,7 @@ steerable_agent_runtime/__pycache__/tool_schema.cpython-312.pyc,,
|
|
|
61
63
|
steerable_agent_runtime/__pycache__/tool_search.cpython-312.pyc,,
|
|
62
64
|
steerable_agent_runtime/__pycache__/tools.cpython-312.pyc,,
|
|
63
65
|
steerable_agent_runtime/__pycache__/tracing.cpython-312.pyc,,
|
|
66
|
+
steerable_agent_runtime/__pycache__/tree.cpython-312.pyc,,
|
|
64
67
|
steerable_agent_runtime/__pycache__/world_state.cpython-312.pyc,,
|
|
65
68
|
steerable_agent_runtime/antihallucination.py,sha256=_IU1q0NKLjjw_3D-1JGr1FbBkRhSwaPTwibD_z-5IdQ,27133
|
|
66
69
|
steerable_agent_runtime/approval.py,sha256=l9VaKSqG1w_w0TSKFI6FwBLzwAs-MaqyKpXdewA7fl8,26825
|
|
@@ -115,10 +118,11 @@ steerable_agent_runtime/model_info.py,sha256=yLiA8uWzPv7fHO7mUlgd0NlpbT1PBXKWX-u
|
|
|
115
118
|
steerable_agent_runtime/model_resolve.py,sha256=vcKDvfLiBcTr99dj1FDsiKiA16o0IC6trm-yRFdlgQY,10332
|
|
116
119
|
steerable_agent_runtime/native_bridge.py,sha256=Mu9CeTBHyjwU6Q2Yn-4sW1JGNW6H4dSVfYuuX4W212k,38582
|
|
117
120
|
steerable_agent_runtime/observation_aging.py,sha256=4ajPHONvyh46LIRLTNqJGmJtSeDX6kJe1-1zhDuRaG8,8129
|
|
118
|
-
steerable_agent_runtime/orchestration.py,sha256=
|
|
121
|
+
steerable_agent_runtime/orchestration.py,sha256=Oj6POU3TBGX9ASRonayo0iVJV2xZGqlfiCMev3mJeSQ,54172
|
|
119
122
|
steerable_agent_runtime/otel.py,sha256=idBWSnIbXowF7fzfFS9rkhPFZTf0e1SdSuNMJJw0aRg,14471
|
|
123
|
+
steerable_agent_runtime/peer.py,sha256=xTL1P95ng3vLue_6lnmMNpmGn373ZnZJxARpRu_chKQ,7383
|
|
120
124
|
steerable_agent_runtime/plugins.py,sha256=VCProcLnWzVxr7WRI5ndRbkdX-fXh1CTa-YCg-q60Xc,18444
|
|
121
|
-
steerable_agent_runtime/pool.py,sha256=
|
|
125
|
+
steerable_agent_runtime/pool.py,sha256=eanoBpa8XTMimuAmcj3uENVNXped20gAusiTYp9TXOY,51752
|
|
122
126
|
steerable_agent_runtime/pricing.py,sha256=EsciOP14OFnP5m0UIOF9uNV_DTCBE4OIEDSGCiZhGbM,3081
|
|
123
127
|
steerable_agent_runtime/pseudo.py,sha256=K3bIpjacetNqfBmK30gzquS7pZ-xYXgluDE8mHSG_d0,24200
|
|
124
128
|
steerable_agent_runtime/recording.py,sha256=y7iRHJD_NzlxpZvFvtqy94mYfCVagp9bJCK_BfJIp7w,16796
|
|
@@ -140,7 +144,8 @@ steerable_agent_runtime/storage/in_memory.py,sha256=6MgDanAiVqpYagTeMcljhk62GCGZ
|
|
|
140
144
|
steerable_agent_runtime/storage/sqlalchemy_store.py,sha256=RagEhi1bLXS7_ET-UsN8SWvNr2NbnXF_2yNe6CXjYTE,24337
|
|
141
145
|
steerable_agent_runtime/storage/sqlite_store.py,sha256=qBepGs82s6nRiUO92DtleuGFDQQHiFpCNTyib9T3zaY,23324
|
|
142
146
|
steerable_agent_runtime/storage/write_lease.py,sha256=Yzwe0ggIfVPlJaRwGUYr_dOHVBC9R4842ALLoc3iQO8,6115
|
|
143
|
-
steerable_agent_runtime/subagent.py,sha256=
|
|
147
|
+
steerable_agent_runtime/subagent.py,sha256=bPPcSHHmmy12TPJgqnH393_6dzNoFLsmXRU2N2nkm-c,32889
|
|
148
|
+
steerable_agent_runtime/team_board.py,sha256=VCWxhXlwu9GwQvZ49MSRPg1uVR-xzU8OxQzvKm5KBs0,8528
|
|
144
149
|
steerable_agent_runtime/todo.py,sha256=59uuGm_a8kqAJ0vIS0IWg1GbEXL9OBBkPqUkv2-G2B0,13255
|
|
145
150
|
steerable_agent_runtime/tokens.py,sha256=6WKyxf5dYP98UoLa6ONUbwQubUaLfw6yyr6z98zJuX0,6480
|
|
146
151
|
steerable_agent_runtime/tool_presentation.py,sha256=k4K4Zva1by75l3HDpNUMSbVQeuvB7BYM3gI9Mtunw-g,6850
|
|
@@ -154,4 +159,5 @@ steerable_agent_runtime/transport/__pycache__/fastapi_sse.cpython-312.pyc,,
|
|
|
154
159
|
steerable_agent_runtime/transport/__pycache__/stdio_jsonrpc.cpython-312.pyc,,
|
|
155
160
|
steerable_agent_runtime/transport/fastapi_sse.py,sha256=u6yuKdSFxYeRajyArvHTW_wrtFbQAdcFo8Ib3WWyKMg,3555
|
|
156
161
|
steerable_agent_runtime/transport/stdio_jsonrpc.py,sha256=zivW7_1fQC1voeF-Q4HhTI1QBQMj0zZMJRzs1DTwoPs,15861
|
|
162
|
+
steerable_agent_runtime/tree.py,sha256=1RYQwjP1fEHzYalG2TiDatc-BZ5r_TiaqD6ZslwgJPQ,6658
|
|
157
163
|
steerable_agent_runtime/world_state.py,sha256=y08rAXzgM_PEe7UAdhGeix2bAc_clC6gXQDn-CIeYTE,13043
|
|
@@ -78,9 +78,11 @@ from steerable_agent_runtime import (
|
|
|
78
78
|
AcpEngineSpec,
|
|
79
79
|
AcpPermissionPolicy,
|
|
80
80
|
AcpToolBridge,
|
|
81
|
+
AgentTree,
|
|
81
82
|
OrchestrationConfig,
|
|
82
83
|
OrchestrationExecutor,
|
|
83
84
|
SessionBudgetExceeded,
|
|
85
|
+
TeamTaskBoard,
|
|
84
86
|
TreeBudget,
|
|
85
87
|
PluginLoadError,
|
|
86
88
|
PluginStateError,
|
|
@@ -124,6 +126,7 @@ from steerable_agent_runtime import (
|
|
|
124
126
|
skill_to_dict,
|
|
125
127
|
skill_tool_descriptor,
|
|
126
128
|
subagent_tool_descriptor,
|
|
129
|
+
team_tool_descriptors,
|
|
127
130
|
mcp_invoker,
|
|
128
131
|
register_mcp_catalog,
|
|
129
132
|
)
|
|
@@ -2518,6 +2521,15 @@ class Sidecar:
|
|
|
2518
2521
|
# and delegate children appear in agent_list.
|
|
2519
2522
|
orchestration_param = params.get("orchestration")
|
|
2520
2523
|
orchestration: OrchestrationExecutor | None = None
|
|
2524
|
+
# R8: one tree and one board per turn. The tree is what makes every
|
|
2525
|
+
# agent in the job addressable — a worker messaging a sibling, a child
|
|
2526
|
+
# reporting to the root — and the board is the plan they share. Both
|
|
2527
|
+
# live exactly as long as the turn: a spawn tree does not outlive its
|
|
2528
|
+
# root run, and the durable registry answers the different question of
|
|
2529
|
+
# what survives. The root registers once its loop exists (below), since
|
|
2530
|
+
# a message to it is delivered by steering that loop.
|
|
2531
|
+
team_tree: AgentTree | None = None
|
|
2532
|
+
team_board: TeamTaskBoard | None = None
|
|
2521
2533
|
if (
|
|
2522
2534
|
isinstance(orchestration_param, dict)
|
|
2523
2535
|
and orchestration_param
|
|
@@ -2552,6 +2564,13 @@ class Sidecar:
|
|
|
2552
2564
|
else None
|
|
2553
2565
|
),
|
|
2554
2566
|
)
|
|
2567
|
+
# R8: a peer tree and a shared board come with the family unless
|
|
2568
|
+
# the host turns them off. Both are additive — an agent that never
|
|
2569
|
+
# messages or claims behaves exactly as before — so they default
|
|
2570
|
+
# on rather than requiring a second opt-in.
|
|
2571
|
+
if orchestration_param.get("team", True):
|
|
2572
|
+
team_tree = AgentTree()
|
|
2573
|
+
team_board = TeamTaskBoard()
|
|
2555
2574
|
# The parent loop is created after this executor (the loop needs
|
|
2556
2575
|
# the executor), so a fork reads the transcript through a holder.
|
|
2557
2576
|
orchestration = OrchestrationExecutor(
|
|
@@ -2577,6 +2596,8 @@ class Sidecar:
|
|
|
2577
2596
|
parent_route=parent_route,
|
|
2578
2597
|
provider_factory=_orchestration_provider_factory,
|
|
2579
2598
|
budget=tree_budget,
|
|
2599
|
+
tree=team_tree,
|
|
2600
|
+
team_board=team_board,
|
|
2580
2601
|
)
|
|
2581
2602
|
if subagent_executor is not None:
|
|
2582
2603
|
subagent_executor.attach_pool(orchestration.pool)
|
|
@@ -2585,6 +2606,11 @@ class Sidecar:
|
|
|
2585
2606
|
*(tools or []),
|
|
2586
2607
|
*orchestration_tool_descriptors(orch_config),
|
|
2587
2608
|
]
|
|
2609
|
+
if team_board is not None:
|
|
2610
|
+
# The root writes the plan, so it always has the board tools;
|
|
2611
|
+
# children get them from their own executor (which is why the
|
|
2612
|
+
# descriptors are appended here once, not per child).
|
|
2613
|
+
tools = [*(tools or []), *team_tool_descriptors(orch_config)]
|
|
2588
2614
|
# Router-answered tools (run_code, ask_user): registered on the
|
|
2589
2615
|
# sidecar's router but unknown to the host — under toolsViaHost the
|
|
2590
2616
|
# inner executor forwards every call to the host, so they must be
|
|
@@ -2690,7 +2716,15 @@ class Sidecar:
|
|
|
2690
2716
|
# holder's declaration above).
|
|
2691
2717
|
if orchestration is not None:
|
|
2692
2718
|
parent_loop_holder.append(loop)
|
|
2693
|
-
|
|
2719
|
+
if team_tree is not None:
|
|
2720
|
+
# The root is a member too: a child reporting a finding, or a
|
|
2721
|
+
# worker asking whoever wrote the plan, needs an address that
|
|
2722
|
+
# reaches this turn's parent loop. Steering is the delivery —
|
|
2723
|
+
# it lands at the next round boundary as a user message, the
|
|
2724
|
+
# same channel a host steer uses.
|
|
2725
|
+
team_tree.register_root(
|
|
2726
|
+
lambda message, target=loop: _deliver_to_loop(target, message)
|
|
2727
|
+
) # Expose the pool to the panel's live controls (interrupt a running
|
|
2694
2728
|
# child). Keyed by chat: one turn at a time per chat, so a later
|
|
2695
2729
|
# turn simply replaces it.
|
|
2696
2730
|
if params.get("chatId"):
|
|
@@ -3923,6 +3957,20 @@ def _tree_report_of(budget: TreeBudget) -> dict[str, Any]:
|
|
|
3923
3957
|
return {"limit": report.limit, "spent": report.spent, "byAgent": dict(report.by_agent)}
|
|
3924
3958
|
|
|
3925
3959
|
|
|
3960
|
+
async def _deliver_to_loop(loop: CoreLoop, message: str) -> str:
|
|
3961
|
+
"""Deliver a peer message to the turn's own parent loop.
|
|
3962
|
+
|
|
3963
|
+
Steering is the only channel the root has: it is a running run, so the
|
|
3964
|
+
message becomes a user turn at the next round boundary — the same path a
|
|
3965
|
+
host-initiated steer takes, which is what makes a child's report visible
|
|
3966
|
+
to the model rather than to some side table. The verdict vocabulary
|
|
3967
|
+
matches ``AgentPool.send`` (``steered`` / ``resumed``) so a sender reads
|
|
3968
|
+
one set of answers whether the target is a child or the root.
|
|
3969
|
+
"""
|
|
3970
|
+
loop.steer(message)
|
|
3971
|
+
return "steered"
|
|
3972
|
+
|
|
3973
|
+
|
|
3926
3974
|
def _tree_budget_from(params: dict[str, Any]) -> TreeBudget:
|
|
3927
3975
|
"""Build the turn tree's shared token limit from the request.
|
|
3928
3976
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: steerable-sidecar
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.11.0
|
|
4
4
|
Summary: Steerable agent runtime sidecar — JSON-RPC over stdio.
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -82,6 +82,30 @@ Every change below is additive except where noted.
|
|
|
82
82
|
the child re-reads the parent prefix on a different route. Changing the route
|
|
83
83
|
without a fork fails closed.
|
|
84
84
|
|
|
85
|
+
## Upgrading from 0.10
|
|
86
|
+
|
|
87
|
+
Peer messaging and a shared task board ride the orchestration opt-in. Nothing
|
|
88
|
+
changes for a host that does not enable it.
|
|
89
|
+
|
|
90
|
+
- **`orchestration.team` (default `true`)** — with `enabled: true`, the turn
|
|
91
|
+
also creates a spawn tree and a shared task board, and advertises four board
|
|
92
|
+
tools (`team_task_create`, `team_task_claim`, `team_task_complete`,
|
|
93
|
+
`team_task_list`) to every agent in the job. `team: false` keeps the six-tool
|
|
94
|
+
family without them, for a host that does not want the extra tools in the
|
|
95
|
+
prompt.
|
|
96
|
+
- **`agent_send` reaches the whole job.** Any live lineage id is addressable —
|
|
97
|
+
`0` (the turn's root), a sibling, a child — not just this executor's own
|
|
98
|
+
children. A message to the root steers the parent loop, so a worker's report
|
|
99
|
+
arrives as a user turn. `agent_list` now also returns `members` (live
|
|
100
|
+
addresses with depth and profile) and `self`.
|
|
101
|
+
- **Depth no longer gates messaging.** A child at the depth wall, and a
|
|
102
|
+
`delegate_subagent` child, are advertised `agent_send` + `agent_list` and
|
|
103
|
+
nothing else from the family. A host that counts child tools sees two more.
|
|
104
|
+
- **The tree and board are per turn.** They do not outlive the root run;
|
|
105
|
+
`agent.children.list` remains the durable record. A message to an id that
|
|
106
|
+
belonged to an earlier turn is not resumable through the tree — that is what
|
|
107
|
+
`agent_send`'s registry path handles.
|
|
108
|
+
|
|
85
109
|
## Embedding
|
|
86
110
|
|
|
87
111
|
```python
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
../../../bin/steerable-sidecar,sha256=585U51qsZ6YLxjRRp6qNsSx231-LesLDofKABRJGKPg,264
|
|
2
2
|
../../../bin/steerable-sidecar-acp,sha256=NyQYfZ5KrcRCUhtmpNf2dU05RdUwekozg8GtUdFcxh0,267
|
|
3
3
|
../../../bin/steerable-sidecar-headless,sha256=fnPsDRsBH1__rlO-Zhh_8LzgplWrXILWJpad3oFSvF4,264
|
|
4
|
-
steerable_sidecar-0.
|
|
5
|
-
steerable_sidecar-0.
|
|
6
|
-
steerable_sidecar-0.
|
|
7
|
-
steerable_sidecar-0.
|
|
8
|
-
steerable_sidecar-0.
|
|
9
|
-
steerable_sidecar-0.
|
|
10
|
-
steerable_sidecar-0.
|
|
11
|
-
steerable_sidecar-0.
|
|
4
|
+
steerable_sidecar-0.11.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
5
|
+
steerable_sidecar-0.11.0.dist-info/METADATA,sha256=sEx44fSw8YYkxijoI3fQaY36LAmuVGQxpWeTzeP8Lvw,5272
|
|
6
|
+
steerable_sidecar-0.11.0.dist-info/RECORD,,
|
|
7
|
+
steerable_sidecar-0.11.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
+
steerable_sidecar-0.11.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
|
|
9
|
+
steerable_sidecar-0.11.0.dist-info/direct_url.json,sha256=p_X38H9svp4Cw2AHeViap9EkkW3IUdtzVXf2QP9BCDA,297
|
|
10
|
+
steerable_sidecar-0.11.0.dist-info/entry_points.txt,sha256=qrH9-x-0XSrW3-G1-QmU4j8A7b731wKPnc_XS_oAkO8,190
|
|
11
|
+
steerable_sidecar-0.11.0.dist-info/top_level.txt,sha256=0QLlBP9tgRT5PLQXFYLc_FTgTH87Qn6JGsgJj4ZvhDs,18
|
|
12
12
|
steerable_sidecar/__init__.py,sha256=p-szaR3e6eP8xV0O9GyEKgdEISz3iaDXvsZv8XhBEKo,669
|
|
13
13
|
steerable_sidecar/__main__.py,sha256=qzdZBagiiY-v60K__iEjRSLxh3e-davno32o3s2SpQI,4294
|
|
14
14
|
steerable_sidecar/__pycache__/__init__.cpython-312.pyc,,
|
|
@@ -69,7 +69,7 @@ steerable_sidecar/run_code_driver.py,sha256=L46TH_st_7Kw9SdhPcDK8GQP0I-7xTmjRIAz
|
|
|
69
69
|
steerable_sidecar/sandbox.py,sha256=9Ts-ddkaqWp9E-BcmZamj2SWuVugcHBCLo6LqBzMEs0,30164
|
|
70
70
|
steerable_sidecar/search_tools.py,sha256=CKqca5zjGTZsA7uLKh_UkXz9AFt4Fe1PBVqTQTHVYNs,6118
|
|
71
71
|
steerable_sidecar/shell_session.py,sha256=Q1MIQXwHWag1QUbUfApQ75Q0aYSFXZaoeo7oV6wTPhU,10538
|
|
72
|
-
steerable_sidecar/sidecar.py,sha256=
|
|
72
|
+
steerable_sidecar/sidecar.py,sha256=52297rpGdHI-Qw1DRzScj1QHecd4TT2QFP1EUmN1yCI,192126
|
|
73
73
|
steerable_sidecar/stream_chunks.py,sha256=SghkPzrRkmBdXN6FoR8Sldpxi-WT8GRzEYtA3tEyQVU,4681
|
|
74
74
|
steerable_sidecar/todo_tools.py,sha256=A0XKJd5ZK6TVj3qH9zNvoCKd_Cebq_P5FhWvYoVv1hQ,1598
|
|
75
75
|
steerable_sidecar/tool_contract.json,sha256=BEj64csxA_jr8hh_gHKsPu97jqNyIHa7YE_U5oYsvok,8135
|
package/runtime.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"path": "python-runtime/manifest.json",
|
|
11
|
-
"sha256": "
|
|
11
|
+
"sha256": "db120757c56c7c39cefe40ecab6fec38f92faa2a82cc283172b250c06dbf549c"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
"path": "python-runtime/python/bin/2to3",
|
|
@@ -6815,19 +6815,19 @@
|
|
|
6815
6815
|
"sha256": "3e972a442ac2e0d22211245269400f662d05799427e2047109496a5529e02978"
|
|
6816
6816
|
},
|
|
6817
6817
|
{
|
|
6818
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_harness-0.
|
|
6818
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_harness-0.11.0.dist-info/INSTALLER",
|
|
6819
6819
|
"sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508"
|
|
6820
6820
|
},
|
|
6821
6821
|
{
|
|
6822
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_harness-0.
|
|
6823
|
-
"sha256": "
|
|
6822
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_harness-0.11.0.dist-info/METADATA",
|
|
6823
|
+
"sha256": "3a9c13b62192fbab973abbe52b1be3d258fc4d6f36a82cd9260a926771a851aa"
|
|
6824
6824
|
},
|
|
6825
6825
|
{
|
|
6826
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_harness-0.
|
|
6827
|
-
"sha256": "
|
|
6826
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_harness-0.11.0.dist-info/RECORD",
|
|
6827
|
+
"sha256": "57b6a2225ed20e89b7b0f08b5edf591be687363a0ad52ae648ef85eeed39f94b"
|
|
6828
6828
|
},
|
|
6829
6829
|
{
|
|
6830
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_harness-0.
|
|
6830
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_harness-0.11.0.dist-info/WHEEL",
|
|
6831
6831
|
"sha256": "98e75747d0b7c0c568bfb71263c3d8f970b3a374a6996087bc642be5cb09a1aa"
|
|
6832
6832
|
},
|
|
6833
6833
|
{
|
|
@@ -6839,24 +6839,24 @@
|
|
|
6839
6839
|
"sha256": "8deca72a770e3f41d61295dc16cec0ef2df3e339684749e309aaf680c7017dba"
|
|
6840
6840
|
},
|
|
6841
6841
|
{
|
|
6842
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_protocol-0.
|
|
6842
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_protocol-0.11.0.dist-info/INSTALLER",
|
|
6843
6843
|
"sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508"
|
|
6844
6844
|
},
|
|
6845
6845
|
{
|
|
6846
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_protocol-0.
|
|
6847
|
-
"sha256": "
|
|
6846
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_protocol-0.11.0.dist-info/METADATA",
|
|
6847
|
+
"sha256": "f9d4e128a66174cca0b5cd2127e4dc1e87544c70850af061cb0c695f8a77cfc5"
|
|
6848
6848
|
},
|
|
6849
6849
|
{
|
|
6850
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_protocol-0.
|
|
6851
|
-
"sha256": "
|
|
6850
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_protocol-0.11.0.dist-info/RECORD",
|
|
6851
|
+
"sha256": "80b2a19de5490d29e2858509db14befbf458eb9235ff5ed3bff39ef384a85a43"
|
|
6852
6852
|
},
|
|
6853
6853
|
{
|
|
6854
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_protocol-0.
|
|
6854
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_protocol-0.11.0.dist-info/WHEEL",
|
|
6855
6855
|
"sha256": "98e75747d0b7c0c568bfb71263c3d8f970b3a374a6996087bc642be5cb09a1aa"
|
|
6856
6856
|
},
|
|
6857
6857
|
{
|
|
6858
6858
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/__init__.py",
|
|
6859
|
-
"sha256": "
|
|
6859
|
+
"sha256": "e1c63cf8c2024ce893f3b4ea689365547786d01b41df4e48d7793dd110c65c18"
|
|
6860
6860
|
},
|
|
6861
6861
|
{
|
|
6862
6862
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/antihallucination.py",
|
|
@@ -7032,19 +7032,23 @@
|
|
|
7032
7032
|
},
|
|
7033
7033
|
{
|
|
7034
7034
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/orchestration.py",
|
|
7035
|
-
"sha256": "
|
|
7035
|
+
"sha256": "3a3e8f394dd30465fd0124689daca8d22549576c591aa95f88231ebf79897924"
|
|
7036
7036
|
},
|
|
7037
7037
|
{
|
|
7038
7038
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/otel.py",
|
|
7039
7039
|
"sha256": "89d0564a721b5e8c05edfcdf152f6b9213c56537f47b549d4ae34c249c346918"
|
|
7040
7040
|
},
|
|
7041
|
+
{
|
|
7042
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/peer.py",
|
|
7043
|
+
"sha256": "c532f53fde67837bcbb9effa96798c3699869f7ef7667649c4046946efdc84a4"
|
|
7044
|
+
},
|
|
7041
7045
|
{
|
|
7042
7046
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/plugins.py",
|
|
7043
7047
|
"sha256": "5423eba1c2e75b3571afb5912399dd45b91d5fe7d78750936be60283eabad177"
|
|
7044
7048
|
},
|
|
7045
7049
|
{
|
|
7046
7050
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/pool.py",
|
|
7047
|
-
"sha256": "
|
|
7051
|
+
"sha256": "79a9e80696bc5d33229ae026723dee10d54d5e979ddb4800bac893629f535ce6"
|
|
7048
7052
|
},
|
|
7049
7053
|
{
|
|
7050
7054
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/pricing.py",
|
|
@@ -7112,7 +7116,11 @@
|
|
|
7112
7116
|
},
|
|
7113
7117
|
{
|
|
7114
7118
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/subagent.py",
|
|
7115
|
-
"sha256": "
|
|
7119
|
+
"sha256": "6cf3dc4871e69b2d764cf260aa71f7f77ffa77336814bb265d15363769e49be7"
|
|
7120
|
+
},
|
|
7121
|
+
{
|
|
7122
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/team_board.py",
|
|
7123
|
+
"sha256": "5425b1857970bbd1b042f678f4c4913e0d6e551fb1cd4f0ec50cef2a6e4a06cd"
|
|
7116
7124
|
},
|
|
7117
7125
|
{
|
|
7118
7126
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/todo.py",
|
|
@@ -7154,24 +7162,28 @@
|
|
|
7154
7162
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/transport/stdio_jsonrpc.py",
|
|
7155
7163
|
"sha256": "ce2bd6effd5f402d6fa1e17e4381e14c8d50050323d3364c251cecd434f0a0fb"
|
|
7156
7164
|
},
|
|
7165
|
+
{
|
|
7166
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/tree.py",
|
|
7167
|
+
"sha256": "d51610c233f57c41f361a946d938836ad73e059e6bfd389aa83e99b25c2024f4"
|
|
7168
|
+
},
|
|
7157
7169
|
{
|
|
7158
7170
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime/world_state.py",
|
|
7159
7171
|
"sha256": "cb4f2b017ce033f3c47bb50076119e8b1d9b01cfdc942ea05d00e7f8221e6131"
|
|
7160
7172
|
},
|
|
7161
7173
|
{
|
|
7162
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime-0.
|
|
7174
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime-0.11.0.dist-info/INSTALLER",
|
|
7163
7175
|
"sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508"
|
|
7164
7176
|
},
|
|
7165
7177
|
{
|
|
7166
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime-0.
|
|
7167
|
-
"sha256": "
|
|
7178
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime-0.11.0.dist-info/METADATA",
|
|
7179
|
+
"sha256": "a749a2ea2f1c1880b0666648c41dbdc0b4cf6676a8d7428fbe01fa4e6b3f0be9"
|
|
7168
7180
|
},
|
|
7169
7181
|
{
|
|
7170
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime-0.
|
|
7171
|
-
"sha256": "
|
|
7182
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime-0.11.0.dist-info/RECORD",
|
|
7183
|
+
"sha256": "d6fa42beea1577569703576dbb436b1cdfc1028d861c34bddf4dfca31c1491fd"
|
|
7172
7184
|
},
|
|
7173
7185
|
{
|
|
7174
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime-0.
|
|
7186
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_agent_runtime-0.11.0.dist-info/WHEEL",
|
|
7175
7187
|
"sha256": "98e75747d0b7c0c568bfb71263c3d8f970b3a374a6996087bc642be5cb09a1aa"
|
|
7176
7188
|
},
|
|
7177
7189
|
{
|
|
@@ -7308,7 +7320,7 @@
|
|
|
7308
7320
|
},
|
|
7309
7321
|
{
|
|
7310
7322
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_sidecar/sidecar.py",
|
|
7311
|
-
"sha256": "
|
|
7323
|
+
"sha256": "e76dbdeeba4674723e430d4347349c8f540779c7784d3d9014fd44526375c822"
|
|
7312
7324
|
},
|
|
7313
7325
|
{
|
|
7314
7326
|
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_sidecar/stream_chunks.py",
|
|
@@ -7339,23 +7351,23 @@
|
|
|
7339
7351
|
"sha256": "d00b8b7d1d932a9f9c9ba8c1f812ed63a7f8fb84026a787373ae0bf3b353edca"
|
|
7340
7352
|
},
|
|
7341
7353
|
{
|
|
7342
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_sidecar-0.
|
|
7354
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_sidecar-0.11.0.dist-info/INSTALLER",
|
|
7343
7355
|
"sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508"
|
|
7344
7356
|
},
|
|
7345
7357
|
{
|
|
7346
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_sidecar-0.
|
|
7347
|
-
"sha256": "
|
|
7358
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_sidecar-0.11.0.dist-info/METADATA",
|
|
7359
|
+
"sha256": "b04c78e1f4b0f18624c628e82377d0698dfa2c09ae546431a56793cde3fc2efc"
|
|
7348
7360
|
},
|
|
7349
7361
|
{
|
|
7350
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_sidecar-0.
|
|
7351
|
-
"sha256": "
|
|
7362
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_sidecar-0.11.0.dist-info/RECORD",
|
|
7363
|
+
"sha256": "255c4142e77708323d4cc635bea78e53bca88d7ece3c741575c4af8cdb95903a"
|
|
7352
7364
|
},
|
|
7353
7365
|
{
|
|
7354
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_sidecar-0.
|
|
7366
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_sidecar-0.11.0.dist-info/WHEEL",
|
|
7355
7367
|
"sha256": "98e75747d0b7c0c568bfb71263c3d8f970b3a374a6996087bc642be5cb09a1aa"
|
|
7356
7368
|
},
|
|
7357
7369
|
{
|
|
7358
|
-
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_sidecar-0.
|
|
7370
|
+
"path": "python-runtime/python/lib/python3.12/site-packages/steerable_sidecar-0.11.0.dist-info/entry_points.txt",
|
|
7359
7371
|
"sha256": "aab1fdfb1fb45d2ad6dfe1b5f90994e23f00edbef7d7028f9dcfd74bfa0090ef"
|
|
7360
7372
|
},
|
|
7361
7373
|
{
|
|
@@ -8779,7 +8791,7 @@
|
|
|
8779
8791
|
"sha256": "482786a0d83d8536eddc78aafdf702d247ddc1f33d45115bdfe86c92a3d6043f"
|
|
8780
8792
|
}
|
|
8781
8793
|
],
|
|
8782
|
-
"packageVersion": "0.
|
|
8794
|
+
"packageVersion": "0.11.0",
|
|
8783
8795
|
"runCodePython": "python-runtime/python/bin/python3",
|
|
8784
8796
|
"schemaVersion": 1,
|
|
8785
8797
|
"sidecarPython": "python-runtime/python/bin/python3",
|