docs: record static python source support

This commit is contained in:
lda
2026-06-11 18:54:34 +07:00 Verified
parent 6c10ef59f7
commit 7735d2012e
4 changed files with 25 additions and 3 deletions
+3
View File
@@ -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
+4 -2
View File
@@ -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