plm-skill-kernel
Wave 2 Conv A (FTR-604). The Skill Kernel package — sibling of
plm-engine-core — that hosts the decorator-based Skill SDK, the V1
in-process dispatcher, and the Kernel HTTP server stub matching CR.10
§7.bis verbatim.
Layout
02_App/plm-skill-kernel/
├── pyproject.toml # editable install + import-linter contracts
├── plm_skill_kernel/
│ ├── __init__.py # re-exports `skill`, `SkillContext`, etc.
│ ├── __main__.py # `python -m plm_skill_kernel` → server
│ ├── server.py # FastAPI app at POST /v1/skills/{id}/invoke
│ ├── dispatcher.py # V1 in-process invoker
│ ├── registry.py # boot wiring — discovers + registers skills
│ ├── sdk/
│ │ ├── decorator.py # `@skill(id=, version=)`
│ │ ├── context.py # SkillContext Pydantic
│ │ ├── types.py # SkillInvokeRequest / SkillInvokeResult
│ │ └── _registry.py # in-process decorator registry
│ └── skills/ # 3 starter skills (Q-W2A-1 nested layout)
│ ├── cleansing/
│ │ ├── normalise.py # cleansing.normalise / 1.0.0 / L2
│ │ └── dedupe.py # cleansing.dedupe / 1.0.0 / L2
│ └── bpmn/
│ └── generate.py # bpmn.generate / 1.0.0 / L1 (thin proxy)
└── tests/ # unit + ASGI in-process integration
Editable install
cd 02_App/backend
.\venv\Scripts\Activate.ps1 # Windows
pip install -e ../plm-skill-kernel
Mirrors the plm-engine-core editable-install pattern.
Dev launch (Q-W2A-3)
python -m plm_skill_kernel # uvicorn on port 8100
plm-skill-kernel --port 8100 # equivalent CLI
The backend at port 8000 is unaffected. The V1.1 loopback round-trip
(D-CONV-M-4 closure) sends HTTP from the Engine Core dispatcher to
this Kernel server when SKILL_KERNEL_LOOPBACK=on.
V1 wire contract
POST /v1/skills/{id}/invoke — frozen at CR.10 §7.bis.
Headers:
X-Core-Caller: <UUID> (required when caller is Core)
Idempotency-Key: <uuid> (optional, V1)
traceparent: <W3C> (optional)
Request body (SkillInvokeRequest):
payload: Dict[str, Any]
version: str ("1.0.0", etc.)
autonomy_hint: Optional[str] ("L1" / "L2" / "L3")
Response body (SkillInvokeResult):
ok: bool
result: Optional[Dict[str, Any]]
error: Optional[SkillErrorEnvelope]
deferred_to: Optional[str]
cancelled: Optional[bool]
Skill authoring (Decision #59 — decorator)
from plm_skill_kernel import skill, SkillContext
@skill(id="cleansing.normalise", version="1.0.0")
async def normalise(payload: dict, ctx: SkillContext) -> dict:
return {"normalised": _normalise_records(payload["records"])}
The decorator auto-registers into the in-process registry at module
import time + carries version through to the federated manifest
builder (CR.9).
Import-linter contracts
Two Forbidden contracts live in pyproject.toml:
plm_skill_kernelMUST NOT importplm_engine_core— federation contract preservation. The two communicate over HTTP, not Python.plm_skill_kernelMUST NOT importplm_accelerators(Workbench) — mirror of the plm-engine-core constraint.
Run:
lint-imports --config 02_App/plm-skill-kernel/pyproject.toml
Tests
cd 02_App/plm-skill-kernel
python -m pytest -q
The V1.1 HTTP round-trip integration test mounts the FastAPI app via httpx.AsyncClient(ASGITransport) — no subprocess, no real port (Q-W2A-4).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plm_skill_kernel-1.3.0.tar.gz.
File metadata
- Download URL: plm_skill_kernel-1.3.0.tar.gz
- Upload date:
- Size: 92.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c00dec34244b10414e7fb79619027323a942134a386ab4840a63ecda5e24982
|
|
| MD5 |
9346193aa98d3a6488647c63e2b8fd25
|
|
| BLAKE2b-256 |
2b5dfdd48cb5abd6874bfe8dae4512bee9afe48dfc8c59d92b32ba93c7a2c4de
|
Provenance
The following attestation bundles were made for plm_skill_kernel-1.3.0.tar.gz:
Publisher:
release-please.yml on plm-engine/plm-skill-kernel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plm_skill_kernel-1.3.0.tar.gz -
Subject digest:
8c00dec34244b10414e7fb79619027323a942134a386ab4840a63ecda5e24982 - Sigstore transparency entry: 2585380701
- Sigstore integration time:
-
Permalink:
plm-engine/plm-skill-kernel@adc817eeb614b3cd3409b78f80f289ac0a4c5f7e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/plm-engine
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-please.yml@adc817eeb614b3cd3409b78f80f289ac0a4c5f7e -
Trigger Event:
push
-
Statement type:
File details
Details for the file plm_skill_kernel-1.3.0-py3-none-any.whl.
File metadata
- Download URL: plm_skill_kernel-1.3.0-py3-none-any.whl
- Upload date:
- Size: 101.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e22a7e719f98552dcbef4bf56c9e11856a314592a7bb1028502c8e03ee830998
|
|
| MD5 |
ce55e45af5e3dcc8d02e1a06a009c90a
|
|
| BLAKE2b-256 |
45cc8da4da68de2c314c3ab8a16881777d8d3c2030465be20a2f6971b91f16d3
|
Provenance
The following attestation bundles were made for plm_skill_kernel-1.3.0-py3-none-any.whl:
Publisher:
release-please.yml on plm-engine/plm-skill-kernel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plm_skill_kernel-1.3.0-py3-none-any.whl -
Subject digest:
e22a7e719f98552dcbef4bf56c9e11856a314592a7bb1028502c8e03ee830998 - Sigstore transparency entry: 2585381565
- Sigstore integration time:
-
Permalink:
plm-engine/plm-skill-kernel@adc817eeb614b3cd3409b78f80f289ac0a4c5f7e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/plm-engine
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-please.yml@adc817eeb614b3cd3409b78f80f289ac0a4c5f7e -
Trigger Event:
push
-
Statement type: