roboz 0.1.2.dev11__tar.gz → 0.1.2.dev12__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.
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/CHANGELOG.md +17 -1
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/PKG-INFO +76 -15
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/README.md +73 -13
- roboz-0.1.2.dev12/docs/catalogues.md +156 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/pyproject.toml +12 -17
- roboz-0.1.2.dev12/src/roboz/endpoints/__init__.py +1 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/__main__.py +7 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/_inventory_codec.py +281 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/_inventory_codegen.py +126 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/adapters/__init__.py +1 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/adapters/openai_compatible.py +250 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/catalog.py +89 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/catalog.pyi +35 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/cli.py +281 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/inventory.py +63 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/inventory.pyi +37 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/specs.py +40 -0
- roboz-0.1.2.dev12/src/roboz/shed/__init__.py +1 -0
- roboz-0.1.2.dev12/src/roboz/shed/agents/__init__.py +6 -0
- roboz-0.1.2.dev12/src/roboz/shed/agents/librarian.py +50 -0
- roboz-0.1.2.dev12/src/roboz/shed/agents/orchestrator.py +49 -0
- roboz-0.1.2.dev12/src/roboz/shed/capabilities.py +354 -0
- roboz-0.1.2.dev12/src/roboz/shed/dependency_health.py +328 -0
- roboz-0.1.2.dev12/src/roboz/shed/deployments/__init__.py +5 -0
- roboz-0.1.2.dev12/src/roboz/shed/deployments/robosprawl.py +75 -0
- roboz-0.1.2.dev12/src/roboz/shed/identifiers.py +30 -0
- roboz-0.1.2.dev12/src/roboz/shed/models.py +242 -0
- roboz-0.1.2.dev12/src/roboz/shed/sandbox.py +226 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/__init__.py +8 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/cli_tools/__init__.py +10 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/cli_tools/prompts.py +195 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/email_tools/__init__.py +10 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/email_tools/prompts.py +125 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/file_editing/__init__.py +27 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/file_editing/prompts.py +149 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/robosprawl.py +143 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/__init__.py +52 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/_snapshot_metadata.py +90 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/apply_patch.py +194 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/__init__.py +23 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/run_file_command/__init__.py +12 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/run_file_command/command.py +162 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/run_file_command/resolve.py +388 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/run_file_command/specs.py +131 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/utilities/__init__.py +80 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/utilities/cmd_spec.py +48 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/utilities/constants.py +36 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/utilities/formatting.py +252 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/utilities/path_extractors.py +179 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/compactification/__init__.py +35 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/compactification/compactify_messages.py +260 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/compactification/prompts.py +107 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/compactification/summarize.py +279 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/compactification/summary_prompts.py +61 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/consolidate_memory.py +287 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/consolidate_memory_example.py +110 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/consolidate_memory_prompts.py +110 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/contexts.py +170 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/__init__.py +54 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/contracts.py +244 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/drafts.py +414 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/factory.py +266 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/inputs.py +66 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/messages.py +248 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/runtime.py +31 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/guard.py +161 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/guard_formatting.py +58 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/librarian_errors.py +8 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/memory_files.py +117 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/purge_files.py +98 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/runner.py +251 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/sleep_between_runs.py +63 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/snapshot_conversation_example.py +38 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/snapshot_conversation_prompts.py +89 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/snapshot_conversations.py +320 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/snapshot_normalize.py +61 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/stop_when_watched_agents_inactive.py +50 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/truncation.py +20 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/types.py +30 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/utils.py +252 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/.gitignore +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/LICENSE +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/__init__.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/__init__.pyi +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/_naming.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/agent/__init__.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/agent/_execution_context.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/agent/_identifiers.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/agent/_notifications.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/agent/_prompts.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/agent/_tool_observer.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/agent/background_agent.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/agent/core.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/agent/prompt_agent_tool.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/agent/subagent.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/dependencies.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/deployment.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/examples/__init__.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/examples/complex.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/examples/simple.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/examples/simpsons_quotes.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/exceptions.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/llm/__init__.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/llm/_diagnostics.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/llm/_retry.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/llm/_truncation.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/llm/binding.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/llm/calls.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/llm/completion.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/llm/endpoints.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/llm/openai_compatible.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/llm/openrouter.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/llm/prompts.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/models/__init__.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/models/_schema.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/models/_serialization.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/models/_telemetry.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/models/core.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/models/messages.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/models/truncation.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/py.typed +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/__init__.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/_environment.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/_external.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/_logging.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/_paths.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/events.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/io.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/observability.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/persistence/__init__.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/persistence/activity.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/persistence/schema.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/pipe.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/runtime/sinks.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/skill/__init__.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/skill/_prompts.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/skill/core.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/tooling/__init__.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/tooling/_prompts.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/tooling/_protocols.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/tooling/_typing.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/tooling/context.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/tooling/core.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/tooling/decorators.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/tools/__init__.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/tools/_identifiers.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/tools/control.py +0 -0
- {roboz-0.1.2.dev11 → roboz-0.1.2.dev12}/src/roboz/tools/interaction.py +0 -0
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.1.2.dev12 - 2026-09-21
|
|
6
|
+
|
|
7
|
+
- Breaking: consolidate core, Shed, and Endpoints into the `roboz`
|
|
8
|
+
distribution. Replace `roboshed` imports with `roboz.shed` and
|
|
9
|
+
`roboz_endpoints` imports with `roboz.endpoints`; no compatibility packages
|
|
10
|
+
or forwarding namespaces are provided.
|
|
11
|
+
- Install the OpenAI SDK as a required dependency while retaining deferred
|
|
12
|
+
endpoint client construction and credential-free imports. Remove package
|
|
13
|
+
extras and the `roboz-endpoints` executable; manage catalogues with
|
|
14
|
+
`python -m roboz.endpoints inventory`.
|
|
15
|
+
- Exclude Proton Bridge from the consolidated distribution. Its pre-migration
|
|
16
|
+
implementation and development setup remain preserved on the
|
|
17
|
+
`wip/proton-bridge` branch.
|
|
18
|
+
- Consolidate package documentation into the main README and move the detailed
|
|
19
|
+
project catalogue guide to `docs/catalogues.md`.
|
|
20
|
+
|
|
5
21
|
## 0.1.2.dev11 - 2026-09-21
|
|
6
22
|
|
|
7
23
|
- Ship the simple and complex examples in `roboz.examples`, so installed users
|
|
@@ -172,7 +188,7 @@
|
|
|
172
188
|
|
|
173
189
|
- Breaking: remove the `roboz[openai]` extra. Install
|
|
174
190
|
`roboz-endpoints[openai]` directly for the endpoint catalogue and SDK adapter;
|
|
175
|
-
it installs core automatically.
|
|
191
|
+
it installs core automatically.
|
|
176
192
|
|
|
177
193
|
- Breaking: move dependency primitives from `roboz.tooling.dependencies` and
|
|
178
194
|
`roboz.tooling` to `roboz.dependencies`. Update those imports; the existing
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: roboz
|
|
3
|
-
Version: 0.1.2.
|
|
3
|
+
Version: 0.1.2.dev12
|
|
4
4
|
Import-Name: roboz
|
|
5
|
-
Summary: Typed
|
|
5
|
+
Summary: Typed agents, reusable capabilities, and model catalogues
|
|
6
6
|
Project-URL: Homepage, https://github.com/Tachion-Oy/roboz
|
|
7
7
|
Project-URL: Repository, https://github.com/Tachion-Oy/roboz
|
|
8
8
|
Project-URL: Issues, https://github.com/Tachion-Oy/roboz/issues
|
|
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.14
|
|
21
21
|
Classifier: Typing :: Typed
|
|
22
22
|
Requires-Python: >=3.13
|
|
23
|
+
Requires-Dist: openai<3,>=2.8.1
|
|
23
24
|
Requires-Dist: pydantic>=2.12.4
|
|
24
25
|
Requires-Dist: python-dotenv>=1.2.1
|
|
25
26
|
Requires-Dist: rich>=14.2.0
|
|
@@ -236,7 +237,8 @@ uv run python -m roboz.examples.complex
|
|
|
236
237
|
|
|
237
238
|
## Try it out
|
|
238
239
|
|
|
239
|
-
Add RoboZ to a uv project and run the same bundled example
|
|
240
|
+
Add RoboZ to a uv project and run the same bundled example. The one dependency
|
|
241
|
+
includes the core framework, Shed, Endpoints, and the OpenAI SDK:
|
|
240
242
|
|
|
241
243
|
```bash
|
|
242
244
|
uv add roboz
|
|
@@ -250,21 +252,80 @@ python -m pip install roboz
|
|
|
250
252
|
python -m roboz.examples.simple
|
|
251
253
|
```
|
|
252
254
|
|
|
253
|
-
##
|
|
255
|
+
## Shed
|
|
254
256
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
257
|
+
`roboz.shed` provides reusable components built on the core primitives. Use an
|
|
258
|
+
individual guarded file or email tool, add a capability to a
|
|
259
|
+
`DeployableAgent`, start from the orchestrator and Librarian definitions, or use
|
|
260
|
+
the RoboSprawl recipe to assemble a persistent project agent. Applications own
|
|
261
|
+
the model endpoints, event sinks, lifecycle, and filesystem layout.
|
|
258
262
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
263
|
+
- `roboz.shed.agents` contains the orchestrator and Librarian definitions.
|
|
264
|
+
- `roboz.shed.capabilities` binds reusable behavior to agent configuration.
|
|
265
|
+
- `roboz.shed.tools` contains guarded file commands, patching, email contracts,
|
|
266
|
+
conversation compaction, snapshots, memory consolidation, and retention.
|
|
267
|
+
- `roboz.shed.skills` supplies the agent instructions for those tools.
|
|
268
|
+
- `roboz.shed.sandbox` defines filesystem scopes and tool permission policies.
|
|
269
|
+
- `roboz.shed.dependency_health` checks configured external resources.
|
|
265
270
|
|
|
266
|
-
|
|
267
|
-
|
|
271
|
+
Shed permission policies guard Shed tools. They are not an operating-system
|
|
272
|
+
sandbox.
|
|
273
|
+
|
|
274
|
+
## Endpoints and model catalogues
|
|
275
|
+
|
|
276
|
+
`roboz.endpoints` builds concrete `LLMEndpoint` and `TranscriptionEndpoint`
|
|
277
|
+
objects for OpenAI-compatible APIs. The OpenAI SDK is installed with RoboZ, but
|
|
278
|
+
client construction and credential lookup remain deferred until an endpoint is
|
|
279
|
+
materialized or used. Importing and inspecting the bundled catalogue needs no
|
|
280
|
+
credentials:
|
|
281
|
+
|
|
282
|
+
```python
|
|
283
|
+
from roboz.endpoints.inventory import openrouter
|
|
284
|
+
|
|
285
|
+
endpoint = openrouter.z_ai__glm_5_3
|
|
286
|
+
print(endpoint.model_name)
|
|
287
|
+
print(endpoint.max_context_tokens)
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
The bundled OpenRouter, Cerebras, and Groq entries are examples. Export them to
|
|
291
|
+
an editable project catalogue, change `models.json`, then generate the Python
|
|
292
|
+
snapshot:
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
uv run python -m roboz.endpoints inventory export
|
|
296
|
+
# Edit model_catalogue/models.json.
|
|
297
|
+
uv run python -m roboz.endpoints inventory import
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
For a src-layout project named `my-app`, the commands create
|
|
301
|
+
`src/my_app/model_catalogue/models.json` and
|
|
302
|
+
`src/my_app/model_catalogue/providers.py`. Import the generated catalogue from
|
|
303
|
+
your application package:
|
|
304
|
+
|
|
305
|
+
```python
|
|
306
|
+
from my_app.model_catalogue.providers import my_service
|
|
307
|
+
|
|
308
|
+
endpoint = my_service.chat
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
Only OpenAI-compatible API protocols are supported. An inventory entry records
|
|
312
|
+
a provider URL, the name of its credential environment variable, and its model
|
|
313
|
+
routes; it never stores the credential itself. See the
|
|
314
|
+
[project catalogue guide](docs/catalogues.md) for custom paths, inventory
|
|
315
|
+
format, reset, and recovery.
|
|
316
|
+
|
|
317
|
+
## Module map
|
|
318
|
+
|
|
319
|
+
| Module | Provides |
|
|
320
|
+
| --- | --- |
|
|
321
|
+
| `roboz` | Agent, tool, factory, and skill authoring facade. |
|
|
322
|
+
| `roboz.agent` | Agent implementations, subagents, and background agents. |
|
|
323
|
+
| `roboz.deployment` | Reusable agent definitions and capabilities. |
|
|
324
|
+
| `roboz.llm` | Endpoint contracts, selection, calls, and request policies. |
|
|
325
|
+
| `roboz.models` | Typed messages and tool input/output models. |
|
|
326
|
+
| `roboz.runtime` | Events, pipes, sinks, persistence, and observability. |
|
|
327
|
+
| `roboz.shed` | Reusable capabilities, guarded tools, agents, and recipes. |
|
|
328
|
+
| `roboz.endpoints` | OpenAI-compatible adapters and typed model catalogues. |
|
|
268
329
|
|
|
269
330
|
## Development
|
|
270
331
|
|
|
@@ -209,7 +209,8 @@ uv run python -m roboz.examples.complex
|
|
|
209
209
|
|
|
210
210
|
## Try it out
|
|
211
211
|
|
|
212
|
-
Add RoboZ to a uv project and run the same bundled example
|
|
212
|
+
Add RoboZ to a uv project and run the same bundled example. The one dependency
|
|
213
|
+
includes the core framework, Shed, Endpoints, and the OpenAI SDK:
|
|
213
214
|
|
|
214
215
|
```bash
|
|
215
216
|
uv add roboz
|
|
@@ -223,21 +224,80 @@ python -m pip install roboz
|
|
|
223
224
|
python -m roboz.examples.simple
|
|
224
225
|
```
|
|
225
226
|
|
|
226
|
-
##
|
|
227
|
+
## Shed
|
|
227
228
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
229
|
+
`roboz.shed` provides reusable components built on the core primitives. Use an
|
|
230
|
+
individual guarded file or email tool, add a capability to a
|
|
231
|
+
`DeployableAgent`, start from the orchestrator and Librarian definitions, or use
|
|
232
|
+
the RoboSprawl recipe to assemble a persistent project agent. Applications own
|
|
233
|
+
the model endpoints, event sinks, lifecycle, and filesystem layout.
|
|
231
234
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
235
|
+
- `roboz.shed.agents` contains the orchestrator and Librarian definitions.
|
|
236
|
+
- `roboz.shed.capabilities` binds reusable behavior to agent configuration.
|
|
237
|
+
- `roboz.shed.tools` contains guarded file commands, patching, email contracts,
|
|
238
|
+
conversation compaction, snapshots, memory consolidation, and retention.
|
|
239
|
+
- `roboz.shed.skills` supplies the agent instructions for those tools.
|
|
240
|
+
- `roboz.shed.sandbox` defines filesystem scopes and tool permission policies.
|
|
241
|
+
- `roboz.shed.dependency_health` checks configured external resources.
|
|
238
242
|
|
|
239
|
-
|
|
240
|
-
|
|
243
|
+
Shed permission policies guard Shed tools. They are not an operating-system
|
|
244
|
+
sandbox.
|
|
245
|
+
|
|
246
|
+
## Endpoints and model catalogues
|
|
247
|
+
|
|
248
|
+
`roboz.endpoints` builds concrete `LLMEndpoint` and `TranscriptionEndpoint`
|
|
249
|
+
objects for OpenAI-compatible APIs. The OpenAI SDK is installed with RoboZ, but
|
|
250
|
+
client construction and credential lookup remain deferred until an endpoint is
|
|
251
|
+
materialized or used. Importing and inspecting the bundled catalogue needs no
|
|
252
|
+
credentials:
|
|
253
|
+
|
|
254
|
+
```python
|
|
255
|
+
from roboz.endpoints.inventory import openrouter
|
|
256
|
+
|
|
257
|
+
endpoint = openrouter.z_ai__glm_5_3
|
|
258
|
+
print(endpoint.model_name)
|
|
259
|
+
print(endpoint.max_context_tokens)
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
The bundled OpenRouter, Cerebras, and Groq entries are examples. Export them to
|
|
263
|
+
an editable project catalogue, change `models.json`, then generate the Python
|
|
264
|
+
snapshot:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
uv run python -m roboz.endpoints inventory export
|
|
268
|
+
# Edit model_catalogue/models.json.
|
|
269
|
+
uv run python -m roboz.endpoints inventory import
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
For a src-layout project named `my-app`, the commands create
|
|
273
|
+
`src/my_app/model_catalogue/models.json` and
|
|
274
|
+
`src/my_app/model_catalogue/providers.py`. Import the generated catalogue from
|
|
275
|
+
your application package:
|
|
276
|
+
|
|
277
|
+
```python
|
|
278
|
+
from my_app.model_catalogue.providers import my_service
|
|
279
|
+
|
|
280
|
+
endpoint = my_service.chat
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Only OpenAI-compatible API protocols are supported. An inventory entry records
|
|
284
|
+
a provider URL, the name of its credential environment variable, and its model
|
|
285
|
+
routes; it never stores the credential itself. See the
|
|
286
|
+
[project catalogue guide](docs/catalogues.md) for custom paths, inventory
|
|
287
|
+
format, reset, and recovery.
|
|
288
|
+
|
|
289
|
+
## Module map
|
|
290
|
+
|
|
291
|
+
| Module | Provides |
|
|
292
|
+
| --- | --- |
|
|
293
|
+
| `roboz` | Agent, tool, factory, and skill authoring facade. |
|
|
294
|
+
| `roboz.agent` | Agent implementations, subagents, and background agents. |
|
|
295
|
+
| `roboz.deployment` | Reusable agent definitions and capabilities. |
|
|
296
|
+
| `roboz.llm` | Endpoint contracts, selection, calls, and request policies. |
|
|
297
|
+
| `roboz.models` | Typed messages and tool input/output models. |
|
|
298
|
+
| `roboz.runtime` | Events, pipes, sinks, persistence, and observability. |
|
|
299
|
+
| `roboz.shed` | Reusable capabilities, guarded tools, agents, and recipes. |
|
|
300
|
+
| `roboz.endpoints` | OpenAI-compatible adapters and typed model catalogues. |
|
|
241
301
|
|
|
242
302
|
## Development
|
|
243
303
|
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Project catalogues
|
|
2
|
+
|
|
3
|
+
A project catalogue is an editable JSON inventory plus a generated Python
|
|
4
|
+
module. It lets an application define its own OpenAI-compatible providers and
|
|
5
|
+
models without modifying RoboZ.
|
|
6
|
+
|
|
7
|
+
## Standard workflow
|
|
8
|
+
|
|
9
|
+
Run these commands from the application project root:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
uv run python -m roboz.endpoints inventory export
|
|
13
|
+
# Edit the generated models.json.
|
|
14
|
+
uv run python -m roboz.endpoints inventory import
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The export command creates a `model_catalogue` package. The import command reads
|
|
18
|
+
`models.json` and generates `providers.py` beside it. Edit and retain the JSON;
|
|
19
|
+
do not edit the generated Python module.
|
|
20
|
+
|
|
21
|
+
For a project with `name = "my-app"` in `pyproject.toml`, the default location
|
|
22
|
+
follows the existing package layout:
|
|
23
|
+
|
|
24
|
+
- `src/my_app/__init__.py` → `src/my_app/model_catalogue/`
|
|
25
|
+
- `my_app/__init__.py` → `my_app/model_catalogue/`
|
|
26
|
+
|
|
27
|
+
If neither package exists, the CLI uses `model_catalogue/` in the project root.
|
|
28
|
+
For reliable imports from every application module, use `--path` to place the
|
|
29
|
+
catalogue inside the actual application package when automatic detection fails.
|
|
30
|
+
|
|
31
|
+
The generated package contains:
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
model_catalogue/
|
|
35
|
+
├── __init__.py
|
|
36
|
+
├── models.json # editable source
|
|
37
|
+
└── providers.py # generated snapshot
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Import through the application's package path:
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
from my_app.model_catalogue.providers import my_service
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Choose another name or location
|
|
47
|
+
|
|
48
|
+
`--path` selects the JSON file. Unless `--output` is provided, import generates
|
|
49
|
+
`providers.py` beside that JSON file. For example, to call the package
|
|
50
|
+
`endpoints`:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
mkdir -p src/my_app/endpoints
|
|
54
|
+
touch src/my_app/endpoints/__init__.py
|
|
55
|
+
|
|
56
|
+
uv run python -m roboz.endpoints inventory export \
|
|
57
|
+
--path src/my_app/endpoints/models.json
|
|
58
|
+
|
|
59
|
+
uv run python -m roboz.endpoints inventory import \
|
|
60
|
+
--path src/my_app/endpoints/models.json
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Then import it from any application module:
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
from my_app.endpoints.providers import my_service
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
To choose the generated module name as well:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
uv run python -m roboz.endpoints inventory import \
|
|
73
|
+
--path src/my_app/endpoints/models.json \
|
|
74
|
+
--output src/my_app/endpoints/catalogue.py
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
That module is imported as:
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
from my_app.endpoints.catalogue import my_service
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
For custom paths, create the parent package and its `__init__.py` first. Paths
|
|
84
|
+
are relative to the directory in which the command runs.
|
|
85
|
+
|
|
86
|
+
## Inventory format
|
|
87
|
+
|
|
88
|
+
The exported file is the complete starting inventory. A provider entry has its
|
|
89
|
+
service URL, the name of its credential environment variable, and one or more
|
|
90
|
+
models:
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"schema_version": 1,
|
|
95
|
+
"providers": {
|
|
96
|
+
"my_service": {
|
|
97
|
+
"base_url": "https://models.example.com/v1",
|
|
98
|
+
"api_key_env": "MY_SERVICE_API_KEY",
|
|
99
|
+
"models": {
|
|
100
|
+
"chat": {
|
|
101
|
+
"model_id": "my-chat-model",
|
|
102
|
+
"endpoint_type": "llm",
|
|
103
|
+
"max_context_tokens": 128000
|
|
104
|
+
},
|
|
105
|
+
"voice": {
|
|
106
|
+
"model_id": "my-transcription-model",
|
|
107
|
+
"endpoint_type": "transcription"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Provider and model keys become Python names, so they must be valid public Python
|
|
116
|
+
identifiers. `model_id` is the identifier sent to the provider. A chat model
|
|
117
|
+
requires `max_context_tokens`; a transcription model does not accept it.
|
|
118
|
+
|
|
119
|
+
Only OpenAI-compatible APIs are currently supported. Store the environment
|
|
120
|
+
variable name in `api_key_env`, never the credential itself.
|
|
121
|
+
|
|
122
|
+
## Regenerate after editing
|
|
123
|
+
|
|
124
|
+
Once `providers.py` exists, regenerate it with `--force`:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
uv run python -m roboz.endpoints inventory import --force
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
For a custom location, pass the same `--path` and, if used originally,
|
|
131
|
+
`--output`. Restart the application so it imports the new snapshot. Package
|
|
132
|
+
upgrades do not replace a project catalogue.
|
|
133
|
+
|
|
134
|
+
## Reset or recover
|
|
135
|
+
|
|
136
|
+
Reset restores the bundled examples after confirmation and discards catalogue
|
|
137
|
+
customizations:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
uv run python -m roboz.endpoints inventory reset
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
For a custom catalogue, pass its `--path` and `--output`. Copy anything that
|
|
144
|
+
must be retained before confirming the reset.
|
|
145
|
+
|
|
146
|
+
If `models.json` was lost but the generated module remains, recover JSON without
|
|
147
|
+
executing the module:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
uv run python -m roboz.endpoints inventory export \
|
|
151
|
+
--from-module src/my_app/model_catalogue/providers.py \
|
|
152
|
+
--path recovered-models.json
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Use `uv run python -m roboz.endpoints inventory <command> --help` for the full
|
|
156
|
+
options of `export`, `import`, or `reset`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "roboz"
|
|
3
|
-
version = "0.1.2.
|
|
4
|
-
description = "Typed
|
|
3
|
+
version = "0.1.2.dev12"
|
|
4
|
+
description = "Typed agents, reusable capabilities, and model catalogues"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [{ name = "Tachion Oy" }]
|
|
7
7
|
license = "Apache-2.0"
|
|
@@ -20,6 +20,7 @@ classifiers = [
|
|
|
20
20
|
"Typing :: Typed",
|
|
21
21
|
]
|
|
22
22
|
dependencies = [
|
|
23
|
+
"openai>=2.8.1,<3",
|
|
23
24
|
"pydantic>=2.12.4",
|
|
24
25
|
"python-dotenv>=1.2.1",
|
|
25
26
|
"rich>=14.2.0",
|
|
@@ -29,20 +30,18 @@ dependencies = [
|
|
|
29
30
|
requires = ["hatchling>=1.32"]
|
|
30
31
|
build-backend = "hatchling.build"
|
|
31
32
|
|
|
32
|
-
[tool.uv.workspace]
|
|
33
|
-
members = ["packages/*"]
|
|
34
|
-
|
|
35
|
-
[tool.uv.sources]
|
|
36
|
-
roboz = { workspace = true }
|
|
37
|
-
roboshed = { workspace = true }
|
|
38
|
-
roboz-endpoints = { workspace = true }
|
|
39
|
-
roboz-proton-bridge = { workspace = true }
|
|
40
|
-
|
|
41
33
|
[tool.hatch.build.targets.wheel]
|
|
42
34
|
packages = ["src/roboz"]
|
|
43
35
|
|
|
44
36
|
[tool.hatch.build.targets.sdist]
|
|
45
|
-
include = [
|
|
37
|
+
include = [
|
|
38
|
+
"/src/roboz",
|
|
39
|
+
"/docs/catalogues.md",
|
|
40
|
+
"/README.md",
|
|
41
|
+
"/CHANGELOG.md",
|
|
42
|
+
"/LICENSE",
|
|
43
|
+
"/pyproject.toml",
|
|
44
|
+
]
|
|
46
45
|
|
|
47
46
|
[project.urls]
|
|
48
47
|
Homepage = "https://github.com/Tachion-Oy/roboz"
|
|
@@ -53,7 +52,7 @@ Documentation = "https://github.com/Tachion-Oy/roboz#readme"
|
|
|
53
52
|
[tool.pytest.ini_options]
|
|
54
53
|
addopts = "--cov=roboz --cov-report=term-missing --ignore=tests/type_tests"
|
|
55
54
|
python_files = ["test_*.py", "tests_*.py"]
|
|
56
|
-
testpaths = ["tests"
|
|
55
|
+
testpaths = ["tests"]
|
|
57
56
|
|
|
58
57
|
[tool.ruff.lint]
|
|
59
58
|
select = ["D", "E4", "E7", "E9", "F"]
|
|
@@ -63,16 +62,12 @@ convention = "google"
|
|
|
63
62
|
|
|
64
63
|
[tool.ruff.lint.per-file-ignores]
|
|
65
64
|
"examples/**/*.py" = ["D"]
|
|
66
|
-
"packages/*/tests/**/*.py" = ["D"]
|
|
67
65
|
"scripts/**/*.py" = ["D"]
|
|
68
66
|
"tests/**/*.py" = ["D"]
|
|
69
67
|
|
|
70
68
|
[dependency-groups]
|
|
71
69
|
dev = [
|
|
72
70
|
"check-wheel-contents>=0.6",
|
|
73
|
-
"roboshed",
|
|
74
|
-
"roboz-endpoints[openai]",
|
|
75
|
-
"roboz-proton-bridge",
|
|
76
71
|
"pyright>=1.1.411",
|
|
77
72
|
"pytest>=7.0",
|
|
78
73
|
"pytest-cov>=4.0",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Typed model catalogues and OpenAI-compatible endpoint adapters."""
|