Align workspace, plugin, and MCP versions; document the complete feature release; validate plugin version at tag time; and include docs, skills, and the devsite-access plugin in release archives.
- commit
- 1d24d9f6d5c9c7a6965bf09f036b34afdd143ada
- parent
- 80aef41fbf6741e3f3d19b372e7e898011bc70bc
- author
- Dami <dami.etoile@gmail.com>
| M | .github/ | 60 | +++++++++++++++++++++++------- |
| M | .github/ | 13 | ++++++- |
| M | Cargo.lock | 10 | +++--- |
| M | Cargo.toml | 2 | +- |
| M | plugins/ | 2 | +- |
| M | plugins/ | 5 | ++- |
@@ -1,20 +1,52 @@
1-dev.site v0.3.1 is a small presentation and CLI-feedback patch for2-[v0.3.0](https://github.com/FelineStateMachine/devsite/releases/tag/v0.3.0).1+dev.site v0.4.0 makes the CLI an agent-ready control surface, adds scoped brokered access2+for sandboxed workers, and separates the application identity boundary from its default3+OIDC provider.34 4-## changes5+## highlights56 6-- Successful CLI/server version validation now appears as a green check during login;7- incompatible clients fail before consuming the enrollment ticket.8-- The public connection diagram now shows endpoint proof and registration plus the daemon's9- live authorization-snapshot sync.7+- devsite resources list --json now reconciles remote resources with local hosting state.8+- Resource upserts and removals support --plan / --dry-run, and devsite doctor --json9+ reports state-aware recovery actions without probing hosted services.10+- Endpoint identity files now use the semantic devsite-endpoint.key and11+ devsite-endpoint.pub names. Existing files in the devsite configuration directory are12+ migrated automatically.13+- A portable, model- and harness-neutral CLI skill documents the JSON and resident-process14+ contracts. Release archives now include the complete docs, skills, and15+ plugins/devsite-access bundles.1016 11-There are no additional protocol, database, or enrollment changes in this patch. See the12-[v0.3.0 release](https://github.com/FelineStateMachine/devsite/releases/tag/v0.3.0) for13-installation instructions, the security-hardening summary, and its required re-enrollment14-step.17+## scoped service broker18+19+A sandboxed requester can generate a signed service-keyword request and retain its private20+endpoint key. A machine enrolled with the explicit service_grants:issue scope can resolve21+that keyword among services its account may access, review a dry-run, and issue a22+short-lived grant bound to the requester endpoint.23+24+Grant application requires a server-signed dsp_ approval token over the exact broker25+credential, request, resource, endpoint, and expiry. Request ids are single-use, grants26+expire within 15 minutes, ambiguous service matches require an explicit resource id, and27+revoking the broker credential removes grant sessions it issued.28+29+The optional devsite-access plugin exposes the same workflow through a portable MCP30+2026-07-28 stdio adapter. It uses server/discover and per-request protocol metadata, has31+no initialize handshake or connection-scoped session state, supports request cancellation,32+and prevents its generic CLI tool from bypassing grant planning.33+34+## authentication portability35+36+Shoo remains the default login provider, but the server now treats it as an OIDC adapter37+rather than part of the account model. Deployments can configure another public OIDC38+provider with explicit issuer, authorization, token, JWKS, client, scope, and algorithm39+settings. Accounts are keyed by verified (issuer, subject) identity pairs, and the browser40+never receives provider tokens.41+42+## upgrade notes43+44+- Database migrations are automatic.45+- Existing CLI and daemon enrollment continues to work. Broker authority is not added to46+ existing machine credentials; create a new machine ticket with the service-grant option47+ enabled when a machine should act as a broker.48+- Deploy the v0.4.0 control plane before using the new access commands.1549 1650 Homebrew users can upgrade with:1751 18-```sh19-brew update && brew upgrade FelineStateMachine/tap/devsite20-```52+ brew update && brew upgrade FelineStateMachine/tap/devsite@@ -30,6 +30,12 @@ jobs:
3030 exit 13131 fi3232 33+ plugin_version="$(node -p "require('./plugins/devsite-access/.codex-plugin/plugin.json').version")"34+ if [[ "$tag_version" != "$plugin_version" ]]; then35+ echo "tag $GITHUB_REF_NAME does not match devsite-access plugin version $plugin_version" >&236+ exit 137+ fi38+3339 test:3440 name: Test workspace3541 needs: validate@@ -93,9 +99,11 @@ jobs:
9399 shell: bash94100 run: |95101 name="devsite-${GITHUB_REF_NAME}-${{ matrix.target }}"96- mkdir -p "dist/$name"102+ mkdir -p "dist/$name/plugins"97103 install -m 0755 "target/${{ matrix.target }}/release/devsite" "dist/$name/devsite"98104 cp README.md LICENSE "dist/$name/"105+ cp -R docs skills "dist/$name/"106+ cp -R plugins/devsite-access "dist/$name/plugins/"99107 tar -C dist -czf "dist/$name.tar.gz" "$name"100108 rm -rf "dist/$name"101109 @@ -107,6 +115,9 @@ jobs:
107115 New-Item -ItemType Directory -Path "dist/$name" | Out-Null108116 Copy-Item "target/${{ matrix.target }}/release/devsite.exe" "dist/$name/devsite.exe"109117 Copy-Item README.md, LICENSE "dist/$name/"118+ Copy-Item docs, skills -Destination "dist/$name" -Recurse119+ New-Item -ItemType Directory -Path "dist/$name/plugins" | Out-Null120+ Copy-Item plugins/devsite-access -Destination "dist/$name/plugins" -Recurse110121 Compress-Archive -Path "dist/$name" -DestinationPath "dist/$name.zip"111122 Remove-Item -Recurse "dist/$name"112123 @@ -821,7 +821,7 @@ dependencies = [
821821 822822 [[package]]823823 name = "devsite-cli"824-version = "0.3.1"824+version = "0.4.0"825825 dependencies = [826826 "anyhow",827827 "clap",@@ -842,7 +842,7 @@ dependencies = [
842842 843843 [[package]]844844 name = "devsite-client"845-version = "0.3.1"845+version = "0.4.0"846846 dependencies = [847847 "anyhow",848848 "devsite-proto",@@ -854,7 +854,7 @@ dependencies = [
854854 855855 [[package]]856856 name = "devsite-daemon"857-version = "0.3.1"857+version = "0.4.0"858858 dependencies = [859859 "anyhow",860860 "data-encoding",@@ -873,7 +873,7 @@ dependencies = [
873873 874874 [[package]]875875 name = "devsite-proto"876-version = "0.3.1"876+version = "0.4.0"877877 dependencies = [878878 "data-encoding",879879 "ed25519-dalek 2.2.0",@@ -885,7 +885,7 @@ dependencies = [
885885 886886 [[package]]887887 name = "devsite-server"888-version = "0.3.1"888+version = "0.4.0"889889 dependencies = [890890 "anyhow",891891 "axum",@@ -13,7 +13,10 @@ const skillPath = existsSync(repositorySkillPath)
1313 : resolve(root, 'skills/devsite-cli/SKILL.md');1414 const binary = process.env.DEVSITE_BIN || 'devsite';1515 const protocolVersion = '2026-07-28';16-const serverInfo = { name: 'devsite', version: '0.1.0' };16+const pluginManifest = JSON.parse(17+ readFileSync(resolve(root, '.codex-plugin/plugin.json'), 'utf8'),18+);19+const serverInfo = { name: 'devsite', version: pluginManifest.version };1720 const serverMeta = { 'io.modelcontextprotocol/serverInfo': serverInfo };1821 const inFlight = new Map();1922 const cancelled = new Set();