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
|
- Active implementation plan: static config Python sources for trusted
|
||||||
project-local `NodeSpec` registries:
|
project-local `NodeSpec` registries:
|
||||||
[`static Python sources`](superpowers/plans/2026-06-11-static-python-sources.md).
|
[`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
|
- Completed: server startup policy moved to `wf_server.cli`; JSON-RPC HTTP
|
||||||
remains in `wf_transport_rpc_http`:
|
remains in `wf_transport_rpc_http`:
|
||||||
[`server CLI and transport boundary`](superpowers/specs/2026-06-10-server-cli-transport-boundary.md).
|
[`server CLI and transport boundary`](superpowers/specs/2026-06-10-server-cli-transport-boundary.md).
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Date: 2026-06-11
|
Date: 2026-06-11
|
||||||
|
|
||||||
Status: planned first non-MCP source family
|
Status: first static config slice implemented
|
||||||
|
|
||||||
Related:
|
Related:
|
||||||
|
|
||||||
@@ -113,3 +113,20 @@ After static config works:
|
|||||||
4. Consider isolation policy for untrusted Python. The first version is trusted
|
4. Consider isolation policy for untrusted Python. The first version is trusted
|
||||||
in-process code only.
|
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 __future__ import annotations
|
||||||
|
|
||||||
from collections.abc import Callable, Mapping, Sequence
|
from collections.abc import Mapping, Sequence
|
||||||
from importlib import import_module
|
from importlib import import_module
|
||||||
from typing import Any, Protocol
|
from typing import Any, Protocol
|
||||||
|
|
||||||
@@ -76,7 +76,9 @@ def _coerce_specs(raw_registry: object) -> list[NodeSpec[Any, Any]]:
|
|||||||
specs: list[NodeSpec[Any, Any]] = []
|
specs: list[NodeSpec[Any, Any]] = []
|
||||||
for value in values:
|
for value in values:
|
||||||
if not isinstance(value, NodeSpec):
|
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)
|
specs.append(value)
|
||||||
return specs
|
return specs
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user