Skip to content

Commit 4b3ddb2

Browse files
authored
feat: finish distribution market readiness
* docs: align storefront and alpha.3 release truth * chore: allow root nvmrc in hygiene policy * feat: finish distribution market readiness * fix: run cli tests with orchestrator deps * fix: allow new public distribution surfaces in ci
1 parent b15ef5d commit 4b3ddb2

25 files changed

Lines changed: 592 additions & 78 deletions

DISTRIBUTION.md

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ change set.
1414

1515
Today CortexPilot officially ships a public repo front door, a GitHub Pages
1616
product front door, one proof-first public workflow baseline, a repo-local
17-
read-only MCP server, local coding-agent starter/bundle materials, and
18-
repo-owned skills for local adoption.
17+
read-only MCP server, a published PyPI package, a live Official MCP Registry
18+
entry, local coding-agent starter/bundle materials, and a live ClawHub skill.
1919

2020
It does not yet officially ship a hosted operator service, a public write-capable
21-
MCP, a Docker distribution path, or any registry-published plugin / skills /
22-
MCP / npm package release.
21+
MCP, a Docker distribution path, or standalone npm releases. OpenHands/extensions
22+
and MCP.so submissions are filed, but they still depend on external review or
23+
intake handling rather than repo-only publication.
2324

2425
## Status labels
2526

@@ -28,6 +29,8 @@ MCP / npm package release.
2829
registry item
2930
- `bundle-compatible`: installable from a local path or local marketplace-like
3031
surface, but still not a published listing
32+
- `submitted-externally`: the repo has filed the platform submission and holds a
33+
public receipt, but the host has not finished acceptance yet
3134
- `publish-ready but deferred`: metadata and package contract are ready for a
3235
future public package release, but no registry release is live yet
3336
- `not standalone distribution unit`: useful repo-owned surface, but not meant
@@ -45,24 +48,32 @@ MCP / npm package release.
4548
| GitHub Pages | `shipped` | Canonical public product front door | `https://xiaojiou176-open.github.io/CortexPilot-public/` | none | keep first screen compressed |
4649
| First proven workflow (`news_digest`) | `shipped` | Official public proof-first baseline | `docs/use-cases/index.html` and tracked proof assets | read-only proof / replay story | keep as the only release-proven public workflow |
4750
| Read-only MCP | `shipped` | Repo-owned stdio JSON-RPC MCP for machine-readable inspection only | bootstrapped repo checkout + `bash __CORTEXPILOT_REPO_ROOT__/scripts/run_readonly_mcp.sh` or the tracked starter templates | `stdio`, JSON-RPC 2.0, read-only, repo-local, no hosted auth, no OAuth | keep artifactized through `configs/mcp_public_manifest.json` |
51+
| PyPI package (`cortexpilot-orchestrator`) | `shipped` | Published package for the public read-only MCP runtime | `https://pypi.org/project/cortexpilot-orchestrator/0.1.0a4/` | package install only | keep package README, entrypoints, and version markers aligned with registry truth |
52+
| Official MCP Registry entry | `shipped` | Public MCP discovery entry for the read-only CortexPilot server | `https://registry.modelcontextprotocol.io/v0/servers?search=io.github.xiaojiou176-open/cortexpilot-readonly` | registry discovery only, stdio package install | keep `server.json` aligned with PyPI and the public MCP docs |
4853
| Codex starter | `starter-only` | Local marketplace seed plus shared read-only MCP template | `examples/coding-agents/codex/` | local path wiring only | keep truthful; do not relabel as official directory listing |
4954
| Claude Code starter | `starter-only` | Project-local `.claude` and `.mcp.json` starter | `examples/coding-agents/claude-code/` | local project wiring only | keep truthful; do not relabel as marketplace package |
5055
| OpenClaw starter | `starter-only` | Local config seed for the same read-only MCP and compatible bundle | `examples/coding-agents/openclaw/` | local config + local plugin path | keep truthful; do not relabel as ClawHub publication |
5156
| Cross-tool coding-agent bundle | `bundle-compatible` | Local bundle compatible with Codex local marketplace installs, Claude plugin-dir development, and OpenClaw local plugin loading | `examples/coding-agents/plugin-bundles/cortexpilot-coding-agent-bundle/` | local bundle metadata + repo-aware MCP wrapper | keep local-install contract; no published listing claim |
52-
| Repo-owned skill in the bundle | `publish-ready but deferred` | Cross-tool routing skill with `SKILL.md` + `manifest.yaml` for honest adoption path selection across Codex / Claude Code / OpenClaw style installs | `examples/coding-agents/plugin-bundles/cortexpilot-coding-agent-bundle/skills/cortexpilot-adoption-router/` | repo-owned skill contract, bundle-scoped today, no live registry listing | keep truthful: package-ready metadata exists, but official marketplace / registry submissions are still later actions |
57+
| Repo-owned adoption-router skill | `shipped` | Cross-tool routing skill with `SKILL.md` + `manifest.yaml`, shared between the repo bundle and external skill distribution | `examples/coding-agents/plugin-bundles/cortexpilot-coding-agent-bundle/skills/cortexpilot-adoption-router/` | repo-owned skill contract, local bundle plus external skill publication | keep the repo bundle and published skill receipts aligned |
58+
| ClawHub skill (`cortexpilot-adoption-router`) | `shipped` | Published OpenClaw skill for honest CortexPilot adoption routing | `https://www.clawhub.ai/skills/cortexpilot-adoption-router` | skill registry, no hosted CortexPilot account, no write-capable MCP | keep the skill copy aligned with the repo bundle and public boundary |
59+
| OpenHands/extensions submission | `submitted-externally` | Public skill submission for the same adoption-router artifact | `https://github.com/OpenHands/extensions/pull/152` | host review flow, not live until merged | track review without overclaiming a merged listing |
60+
| MCP.so submission | `submitted-externally` | Directory submission for the public read-only MCP server | `https://github.com/chatmcp/mcpso/issues/1559` | directory intake flow, not live until accepted | keep the issue body aligned with current package + registry truth |
5361
| `@cortexpilot/frontend-api-client` | `publish-ready but deferred` | Thin JS/TS client for control-plane reads and guarded operator add-ons | package metadata + README are publish-ready, but the official install story is still clone / vendor reuse until the first npm release exists | HTTP API with token / mutation-role expectations | publish later only after the first public package release is intentionally cut |
5462
| `@cortexpilot/frontend-api-contract` | `publish-ready but deferred` | Generated route / query / type boundary for frontend consumers | package metadata + README are publish-ready, but the official install story is still clone / vendor reuse until the first npm release exists | typed contract layer only | publish later only after the first public package release is intentionally cut |
5563
| `@cortexpilot/frontend-shared` | `not standalone distribution unit` | Repo-owned presentation substrate for dashboard / desktop / future web surfaces | repo-local package only | frontend presentation helpers only | keep repo-owned for now |
5664
| Docker image / Dockerfile | `deferred` | No official container distribution today; existing Dockerfiles are CI-only infrastructure | none | n/a | add only when a real container story exists |
5765
| Hosted Render pilot | `deferred` | Repo-side pilot blueprint exists, but no live hosted operator claim | `render.yaml` + runbook only | hosted HTTP / token boundary remains later | keep truthful; no live hosted claim |
5866
| Write-capable MCP | `not part of current official distribution` | Public MCP is still read-only | none | owner-only preview groundwork exists separately | keep gated and out of public claim |
59-
| Registry-published plugins / skills / MCP | `not part of current official distribution` | No official Codex / Claude Code / OpenClaw / MCP registry listing is live today | none | external platform submission required | external-only later action |
6067

6168
## Version And Release Truth
6269

6370
- The latest live GitHub release is `v0.1.0-alpha.3`.
6471
- `v0.1.0-alpha.3` is the current published prerelease baseline and is meant to
6572
match the current released `main` snapshot.
73+
- The latest published public package for the read-only MCP is
74+
`cortexpilot-orchestrator==0.1.0a4`.
75+
- The latest Official MCP Registry entry points to
76+
`io.github.xiaojiou176-open/cortexpilot-readonly@0.1.0a4`.
6677
- `v0.1.0-alpha.1` remains the historical first public baseline, not the latest
6778
release truth.
6879
- If `main` moves again after this release, README, Pages, and docs must return
@@ -84,9 +95,8 @@ MCP / npm package release.
8495
These are intentionally outside repo-side completion:
8596

8697
- publish npm packages
87-
- publish a PyPI package
88-
- submit an MCP registry entry
89-
- submit Codex / Claude Code / OpenClaw marketplace or registry items
98+
- wait for OpenHands/extensions review on PR `#152`
99+
- wait for MCP.so intake handling on issue `#1559`
90100
- publish a Docker image
91101
- deploy a live hosted operator service
92102
- promote a public write-capable MCP

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,19 @@ not a hosted product, and the shipped MCP surface remains **read-only**.
2626

2727
The shortest truthful answer today is:
2828

29-
> CortexPilot officially ships a public repo, a public Pages front door, a repo-local read-only MCP surface, and proof-first starter materials. Hosted service, write-capable MCP, Docker distribution, registry submissions, and standalone package publication are still explicitly deferred.
29+
> CortexPilot officially ships a public repo, a public Pages front door, a repo-local read-only MCP surface, a published PyPI package, a live Official MCP Registry entry, and a live ClawHub skill. OpenHands/extensions and MCP.so submissions are filed with public receipts, while hosted service, write-capable MCP, Docker distribution, and standalone npm releases remain deferred.
3030
3131
Use these buckets:
3232

33-
- **Shipped now**: repo, Pages, proof-first docs, read-only MCP
33+
- **Shipped now**: repo, Pages, proof-first docs, read-only MCP, PyPI package, Official MCP Registry entry, ClawHub skill
3434
- **Starter-only**: Codex / Claude Code / OpenClaw local starter kits and bundle examples
35+
- **Submitted externally**: `OpenHands/extensions#152` and `chatmcp/mcpso#1559` are filed and await host review
3536
- **Publish-ready but deferred**:
3637
`@cortexpilot/frontend-api-client`,
3738
`@cortexpilot/frontend-api-contract`
3839
- **Workspace-only**: `@cortexpilot/frontend-shared` stays repo-owned and is
3940
not marketed as a standalone package
40-
- **Deferred**: hosted operator, write-capable MCP, Docker image, npm/PyPI, and marketplace/registry submissions
41+
- **Deferred**: hosted operator, write-capable MCP, Docker image, and standalone npm releases
4142

4243
If you need the exact matrix instead of a one-line summary, open
4344
[DISTRIBUTION.md](DISTRIBUTION.md) or the public

apps/orchestrator/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Orchestrator Module
2+
<!-- mcp-name: io.github.xiaojiou176-open/cortexpilot-readonly -->
23

34
`apps/orchestrator/` is the backend core of CortexPilot.
45

apps/orchestrator/setup.cfg

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,47 @@
11
[metadata]
22
name = cortexpilot-orchestrator
3-
version = 0.1.0
3+
version = 0.1.0a4
4+
description = CortexPilot orchestrator and read-only MCP runtime
5+
long_description = file: README.md
6+
long_description_content_type = text/markdown
7+
license = MIT
8+
url = https://github.com/xiaojiou176-open/CortexPilot-public
9+
project_urls =
10+
Homepage = https://xiaojiou176-open.github.io/CortexPilot-public/
11+
Repository = https://github.com/xiaojiou176-open/CortexPilot-public
12+
Documentation = https://xiaojiou176-open.github.io/CortexPilot-public/mcp/
13+
Issues = https://github.com/xiaojiou176-open/CortexPilot-public/issues
14+
Discussions = https://github.com/xiaojiou176-open/CortexPilot-public/discussions
15+
Changelog = https://github.com/xiaojiou176-open/CortexPilot-public/releases
416

517
[options]
618
package_dir =
719
= src
820
packages = find:
21+
install_requires =
22+
pydantic==2.12.5
23+
jsonschema==4.26.0
24+
typer==0.21.1
25+
rich==14.3.3
26+
fastapi==0.128.1
27+
uvicorn==0.42.0
28+
python-dotenv==1.2.1
29+
opentelemetry-api==1.40.0
30+
opentelemetry-sdk==1.40.0
31+
opentelemetry-exporter-otlp-proto-grpc==1.40.0
32+
opentelemetry-exporter-otlp-proto-http==1.40.0
33+
playwright==1.58.0
34+
google-genai==1.68.0
35+
openai-agents==0.7.0
36+
temporalio==1.22.0
37+
duckduckgo-search==8.1.1
38+
httpx==0.28.1
39+
mcp>=1.9.4,<2.0.0
940

1041
[options.packages.find]
1142
where = src
43+
44+
[options.entry_points]
45+
console_scripts =
46+
cortexpilot = cortexpilot_orch.cli:main
47+
cortexpilot-readonly-mcp = cortexpilot_orch.mcp_entrypoints:readonly_mcp_main

apps/orchestrator/src/cortexpilot_orch/cli.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,5 +513,13 @@ def mcp_queue_pilot_server() -> None:
513513
serve_queue_pilot_mcp()
514514

515515

516-
if __name__ == "__main__":
516+
def main() -> None:
517517
app()
518+
519+
520+
def mcp_readonly_main() -> None:
521+
serve_readonly_mcp()
522+
523+
524+
if __name__ == "__main__":
525+
main()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from __future__ import annotations
2+
3+
from cortexpilot_orch.mcp_readonly_server import serve_readonly_mcp
4+
5+
6+
def readonly_mcp_main() -> None:
7+
serve_readonly_mcp()

apps/orchestrator/src/cortexpilot_orch/mcp_readonly_server.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
SERVER_INFO = {
1818
"name": "cortexpilot-readonly",
1919
"title": "CortexPilot Read-only MCP",
20-
"version": "0.1.0",
20+
"version": "0.1.0a4",
2121
}
2222

2323

@@ -329,7 +329,7 @@ def build_readonly_tools(read_service: ControlPlaneReadService) -> list[Readonly
329329

330330
class CortexPilotReadonlyMcpServer:
331331
def __init__(self, read_service: ControlPlaneReadService | None = None) -> None:
332-
self._read_service = read_service or ControlPlaneReadService.from_api_main()
332+
self._read_service = read_service or ControlPlaneReadService.from_runtime()
333333
self._tools = build_readonly_tools(self._read_service)
334334
self._tool_map = {tool.name: tool for tool in self._tools}
335335

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
1-
from cortexpilot_orch.services.orchestration_service import OrchestrationService
2-
from cortexpilot_orch.services.rollback_service import RollbackService
3-
from cortexpilot_orch.services.session_index_service import SessionIndexService
1+
"""Service package exports for CortexPilot.
42
5-
__all__ = ["RollbackService", "OrchestrationService", "SessionIndexService"]
3+
Keep this module import-light so read-only surfaces can import targeted service
4+
modules without pulling the full orchestration runtime into package import side
5+
effects.
6+
"""
7+
8+
__all__ = [
9+
"OrchestrationService",
10+
"RollbackService",
11+
"SessionIndexService",
12+
]

0 commit comments

Comments
 (0)