docs: record static python source support
This commit is contained in:
@@ -88,6 +88,9 @@ auth admin are implemented. The next work is polish, not new broad surfaces.
|
||||
- Active implementation plan: static config Python sources for trusted
|
||||
project-local `NodeSpec` registries:
|
||||
[`static Python sources`](superpowers/plans/2026-06-11-static-python-sources.md).
|
||||
- Completed: static config `kind: "python"` sources can load trusted local
|
||||
`NodeSpec` registries and expose them through WorkflowServer. Implementation:
|
||||
[`static Python sources`](historical/superpowers/plans/2026-06-11-static-python-sources.md).
|
||||
- Completed: server startup policy moved to `wf_server.cli`; JSON-RPC HTTP
|
||||
remains in `wf_transport_rpc_http`:
|
||||
[`server CLI and transport boundary`](superpowers/specs/2026-06-10-server-cli-transport-boundary.md).
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Date: 2026-06-11
|
||||
|
||||
Status: planned first non-MCP source family
|
||||
Status: first static config slice implemented
|
||||
|
||||
Related:
|
||||
|
||||
@@ -113,3 +113,20 @@ After static config works:
|
||||
4. Consider isolation policy for untrusted Python. The first version is trusted
|
||||
in-process code only.
|
||||
|
||||
## Implementation Status
|
||||
|
||||
Implemented:
|
||||
|
||||
- `wf_config` accepts `server.sources[]` entries with `kind: "python"`.
|
||||
- `wf_sources_python` loads trusted in-process `NodeSpec` registries from
|
||||
`module:registry`.
|
||||
- `wf_server.config` composes Python sources into local/static servers.
|
||||
- Capability listing/calling works over JSON-RPC.
|
||||
|
||||
Still deferred:
|
||||
|
||||
- mutable source registry/apply support
|
||||
- hot reload
|
||||
- reducer exports
|
||||
- sandboxing/untrusted code
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Callable, Mapping, Sequence
|
||||
from collections.abc import Mapping, Sequence
|
||||
from importlib import import_module
|
||||
from typing import Any, Protocol
|
||||
|
||||
@@ -76,7 +76,9 @@ def _coerce_specs(raw_registry: object) -> list[NodeSpec[Any, Any]]:
|
||||
specs: list[NodeSpec[Any, Any]] = []
|
||||
for value in values:
|
||||
if not isinstance(value, NodeSpec):
|
||||
raise TypeError(f"expected NodeSpec in Python source registry, got {type(value).__name__}")
|
||||
raise TypeError(
|
||||
f"expected NodeSpec in Python source registry, got {type(value).__name__}"
|
||||
)
|
||||
specs.append(value)
|
||||
return specs
|
||||
|
||||
|
||||
Reference in New Issue
Block a user