From ff659fa8a7101dd750d48e504b1b19671aab8f73 Mon Sep 17 00:00:00 2001 From: Workspai Runtime Contract Date: Fri, 18 Sep 2026 19:57:46 -0400 Subject: [PATCH 1/8] feat(cli): label OpenAI Agents SDK adapters stable --- contracts/create-planner-capabilities.v1.json | 24 ------ contracts/runtime-command-surface.v1.json | 4 +- ...orkspace-intelligence-architecture.v1.json | 4 +- package-lock.json | 10 +-- package.json | 2 +- packages/cli/CHANGELOG.md | 32 ++++---- packages/cli/RELEASE_NOTES.md | 36 ++++++++- .../create-planner-capabilities.v1.json | 24 ------ .../contracts/runtime-command-surface.v1.json | 4 +- ...orkspace-intelligence-architecture.v1.json | 4 +- packages/cli/docs/agent-framework-adapters.md | 8 +- packages/cli/docs/ci-workflows.md | 2 +- packages/cli/docs/commands-reference.md | 7 +- packages/cli/package.json | 2 +- .../cli/releases/RELEASE_NOTES_v0.76.0.md | 76 +++++++++++++++++++ .../cli/scripts/enterprise-package-smoke.mjs | 38 +++++++--- .../agent-framework-project-kits.test.ts | 19 ++--- .../agent-framework-release-admission.test.ts | 17 +++-- .../agent-framework-selection.test.ts | 4 +- .../agent-framework-user-flow.test.ts | 28 +++---- .../create-planner-capabilities.test.ts | 6 +- .../src/__tests__/handle-create-flags.test.ts | 14 +--- .../__tests__/openai-agents-adapter.test.ts | 2 +- .../__tests__/openai-agents-lifecycle.test.ts | 2 +- .../adapters/openai-agents/common.ts | 2 +- packages/wspai/package.json | 4 +- 26 files changed, 215 insertions(+), 160 deletions(-) create mode 100644 packages/cli/releases/RELEASE_NOTES_v0.76.0.md diff --git a/contracts/create-planner-capabilities.v1.json b/contracts/create-planner-capabilities.v1.json index 20df99b7..c4fd7d80 100644 --- a/contracts/create-planner-capabilities.v1.json +++ b/contracts/create-planner-capabilities.v1.json @@ -134,30 +134,6 @@ "versionPolicy": "tested-baseline", "moduleSupport": false, "workspacePythonEngine": "none" - }, - { - "id": "agent.openai.python", - "runtime": "python", - "framework": "openai-agents", - "plannerFramework": "openai-agents", - "category": "agent", - "owner": "workspai", - "stability": "stable", - "versionPolicy": "tested-baseline", - "moduleSupport": false, - "workspacePythonEngine": "none" - }, - { - "id": "agent.openai.typescript", - "runtime": "node", - "framework": "openai-agents", - "plannerFramework": "openai-agents", - "category": "agent", - "owner": "workspai", - "stability": "stable", - "versionPolicy": "tested-baseline", - "moduleSupport": false, - "workspacePythonEngine": "none" } ], "officialCreate": [ diff --git a/contracts/runtime-command-surface.v1.json b/contracts/runtime-command-surface.v1.json index fb5c2cd0..d34fe4dc 100644 --- a/contracts/runtime-command-surface.v1.json +++ b/contracts/runtime-command-surface.v1.json @@ -4371,9 +4371,7 @@ "dotnet.webapi.clean", "rust.axum", "agent.microsoft.python", - "agent.microsoft.dotnet", - "agent.openai.python", - "agent.openai.typescript" + "agent.microsoft.dotnet" ], "officialCreate": [ "frontend.nextjs", diff --git a/contracts/workspace-intelligence-architecture.v1.json b/contracts/workspace-intelligence-architecture.v1.json index 8be94c96..848a21bb 100644 --- a/contracts/workspace-intelligence-architecture.v1.json +++ b/contracts/workspace-intelligence-architecture.v1.json @@ -681,9 +681,7 @@ "dotnet.webapi.clean", "rust.axum", "agent.microsoft.python", - "agent.microsoft.dotnet", - "agent.openai.python", - "agent.openai.typescript" + "agent.microsoft.dotnet" ], "officialCreate": [ "frontend.nextjs", diff --git a/package-lock.json b/package-lock.json index 8c582347..1a262eaa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "workspai", - "version": "0.75.2", + "version": "0.76.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "workspai", - "version": "0.75.2", + "version": "0.76.0", "hasInstallScript": true, "license": "MIT", "workspaces": [ @@ -6600,7 +6600,7 @@ }, "packages/cli": { "name": "workspai", - "version": "0.75.2", + "version": "0.76.0", "license": "MIT", "dependencies": { "@clack/prompts": "^0.9.1", @@ -6809,10 +6809,10 @@ "license": "MIT" }, "packages/wspai": { - "version": "0.75.2", + "version": "0.76.0", "license": "MIT", "dependencies": { - "workspai": "0.75.2" + "workspai": "0.76.0" }, "bin": { "wspai": "bin/wspai.js" diff --git a/package.json b/package.json index a15b6b69..0358d847 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "workspai", "private": true, - "version": "0.75.2", + "version": "0.76.0", "description": "Workspai monorepo for Workspace Intelligence packages.", "author": "Chistiq", "license": "MIT", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 56332ce3..48a2c19b 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -7,16 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.76.0] - 2026-09-18 + ### Added -- Implemented preview OpenAI Agents SDK adapters for Python `0.22.2` and - TypeScript `@openai/agents` `0.18.0` with independent framework/runtime - selection, credentialless conformance lanes, and Create kit ids - `agent.openai.python` / `agent.openai.typescript`. Reviewed release admission - from matrix run 35357989405 on `8eb1308` now opens Create and Attach for those - explicit kit ids and `--framework openai-agents`. Adapters remain `preview`. - `--runtime python` without `--framework` requires an explicit framework because - Microsoft and OpenAI are both admitted. +- Implemented OpenAI Agents SDK adapters for Python `0.22.2` and TypeScript + `@openai/agents` `0.18.0` with independent framework/runtime selection, + credentialless conformance lanes, and Create kit ids `agent.openai.python` / + `agent.openai.typescript`. Adapters are labeled `stable`. Create and Attach + stay fail-closed until the new manifest digest is bound from a green matrix. + `--runtime python` without `--framework` requires an explicit framework + because Microsoft and OpenAI are both published. Handoffs, MCP, sessions, and + voice stay unsupported. ### Changed @@ -25,7 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 instructions. Live entrypoints stream stdout, accept a prompt from argv or stdin, and redact Azure-shaped secrets in addition to `sk-` values. Microsoft Python adds a credentialless LocalChatClient loop when the - framework is installed. Adapters remain `preview`. + framework is installed. Microsoft adapters remain `preview`. ### Fixed @@ -61,9 +63,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `pre-push`. - Isolated the workspace-intelligence adversarial script the same way; it runs during `quality:push` and was still inheriting husky Git env. -- Kept published `agent framework list` preview OpenAI adapters visible before - release admission; the enterprise package smoke now requires the four - reviewed Microsoft and OpenAI adapters. +- Kept published `agent framework list` OpenAI adapters visible; the enterprise + package smoke requires Microsoft to stay admitted and OpenAI to stay + fail-closed until the stable digest is bound. - Invoked npm through `npm_execpath` in the OpenAI TypeScript conformance smoke so Windows does not `spawn EINVAL` on `npm.cmd`. - Ran the OpenAI TypeScript conformance install/test inside the generated @@ -76,9 +78,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 require `project-context-agent.v1` JSON, and reject escaped symlinks without echoing file contents. Credentialless SDK checks now call the generated `buildAgent` / `build_agent` seam with official ScriptedModel - doubles. Python `pyproject.toml` is pip-editable. OpenAI adapters remain - preview after the reviewed admission; changing that label would change the - manifest digest and require a new matrix. Context-path containment + doubles. Python `pyproject.toml` is pip-editable. OpenAI adapters are labeled + `stable`; binding the new digest still requires the next green matrix. + Context-path containment is a bounded fd read after `O_NOFOLLOW` when available, not a TOCTOU-free walk. Generator coverage remains in the Vitest gate alongside the OpenAI adapter sources. diff --git a/packages/cli/RELEASE_NOTES.md b/packages/cli/RELEASE_NOTES.md index d6aea46b..6172af72 100644 --- a/packages/cli/RELEASE_NOTES.md +++ b/packages/cli/RELEASE_NOTES.md @@ -5,7 +5,41 @@ > `rapidkit` commands and `.rapidkit` paths. Use the [CLI README](./README.md) and > [Command Reference](./docs/commands-reference.md) for current usage. -## Latest Release: v0.75.2 (September 14, 2026) +## Latest Release: v0.76.0 (September 18, 2026) + +### Stable OpenAI Agents SDK Adapters + +Workspai 0.76.0 labels OpenAI Agents SDK starters stable for Python 0.22.2 and +TypeScript 0.18.0. Create and Attach stay fail-closed until the new digest is +bound from a green matrix. + +**What's New:** + +- Label `agent.openai.python` and `agent.openai.typescript` `stable`. +- Keep Create fail-closed until the new manifest digest is matrix-bound. +- Require `--framework` when `--runtime python` is shared; the CLI does not + guess. +- Keep handoffs, MCP, sessions, voice, sandbox, and approval loops + unsupported. + +**Compatibility:** Existing commands, schema versions, and fail-closed +framework admission remain supported. Microsoft adapters stay `preview`. +Independent Graph work is not this CLI release. + +**Publication status:** Released September 18, 2026. + +**Install:** + +```bash +npm install -g workspai@0.76.0 +workspai --version +``` + +[Full Release Notes](https://github.com/chistiq/workspai/blob/v0.76.0/packages/cli/releases/RELEASE_NOTES_v0.76.0.md) + +--- + +## v0.75.2 (September 14, 2026) ### Reviewed Framework Pins Without Automatic Promotion diff --git a/packages/cli/contracts/create-planner-capabilities.v1.json b/packages/cli/contracts/create-planner-capabilities.v1.json index 20df99b7..c4fd7d80 100644 --- a/packages/cli/contracts/create-planner-capabilities.v1.json +++ b/packages/cli/contracts/create-planner-capabilities.v1.json @@ -134,30 +134,6 @@ "versionPolicy": "tested-baseline", "moduleSupport": false, "workspacePythonEngine": "none" - }, - { - "id": "agent.openai.python", - "runtime": "python", - "framework": "openai-agents", - "plannerFramework": "openai-agents", - "category": "agent", - "owner": "workspai", - "stability": "stable", - "versionPolicy": "tested-baseline", - "moduleSupport": false, - "workspacePythonEngine": "none" - }, - { - "id": "agent.openai.typescript", - "runtime": "node", - "framework": "openai-agents", - "plannerFramework": "openai-agents", - "category": "agent", - "owner": "workspai", - "stability": "stable", - "versionPolicy": "tested-baseline", - "moduleSupport": false, - "workspacePythonEngine": "none" } ], "officialCreate": [ diff --git a/packages/cli/contracts/runtime-command-surface.v1.json b/packages/cli/contracts/runtime-command-surface.v1.json index fb5c2cd0..d34fe4dc 100644 --- a/packages/cli/contracts/runtime-command-surface.v1.json +++ b/packages/cli/contracts/runtime-command-surface.v1.json @@ -4371,9 +4371,7 @@ "dotnet.webapi.clean", "rust.axum", "agent.microsoft.python", - "agent.microsoft.dotnet", - "agent.openai.python", - "agent.openai.typescript" + "agent.microsoft.dotnet" ], "officialCreate": [ "frontend.nextjs", diff --git a/packages/cli/contracts/workspace-intelligence-architecture.v1.json b/packages/cli/contracts/workspace-intelligence-architecture.v1.json index 8be94c96..848a21bb 100644 --- a/packages/cli/contracts/workspace-intelligence-architecture.v1.json +++ b/packages/cli/contracts/workspace-intelligence-architecture.v1.json @@ -681,9 +681,7 @@ "dotnet.webapi.clean", "rust.axum", "agent.microsoft.python", - "agent.microsoft.dotnet", - "agent.openai.python", - "agent.openai.typescript" + "agent.microsoft.dotnet" ], "officialCreate": [ "frontend.nextjs", diff --git a/packages/cli/docs/agent-framework-adapters.md b/packages/cli/docs/agent-framework-adapters.md index 913b397c..09907aea 100644 --- a/packages/cli/docs/agent-framework-adapters.md +++ b/packages/cli/docs/agent-framework-adapters.md @@ -227,9 +227,11 @@ workspace profile. A later adapter-manifest change must not hide a kit. Create and Attach still refuse a kit whose adapter is not release-admitted; visibility in the picker is not permission to write a blocked adapter. Attach still requires `--framework openai-agents` when the -runtime is shared. Adapters remain `preview`; handoffs, MCP, sessions, voice, -sandbox, and approval loops stay unsupported. Changing `preview` to `stable` -would change the manifest digest and require a new matrix. +runtime is shared. OpenAI adapters are labeled `stable`. Handoffs, MCP, +sessions, voice, sandbox, and approval loops stay unsupported. Create and +Attach stay fail-closed until the new manifest digest, framework baseline, +runtime, and platform list are bound from a green matrix. Microsoft adapters +remain `preview`. A path-filtered twelve-lane adapter matrix compiles the generated Microsoft Python/.NET and OpenAI Python/TypeScript projects on Linux, macOS, and Windows. Every lane records all 18 mandatory diff --git a/packages/cli/docs/ci-workflows.md b/packages/cli/docs/ci-workflows.md index 7f6b6622..7578c638 100644 --- a/packages/cli/docs/ci-workflows.md +++ b/packages/cli/docs/ci-workflows.md @@ -118,7 +118,7 @@ Validate or preview the current CLI announcement locally: npm --workspace workspai run check:release-announcement npm --workspace workspai run release:announcement -- \ --product workspai-cli \ - --tag v0.75.2 \ + --tag v0.76.0 \ --markdown-output /tmp/workspai-discord-announcement.md ``` diff --git a/packages/cli/docs/commands-reference.md b/packages/cli/docs/commands-reference.md index fe33a5c0..6becbfae 100644 --- a/packages/cli/docs/commands-reference.md +++ b/packages/cli/docs/commands-reference.md @@ -276,9 +276,10 @@ See [Canonical-first agent entry](./agent-entry.md). `agent framework` is the governed bridge between Workspai evidence and an agent runtime. `list` exposes every built-in adapter and its release-admission -state. In this CLI version Microsoft Python `1.18.0` and .NET `1.21.0` plus -OpenAI Agents SDK Python `0.22.2` and TypeScript `0.18.0` are release-admitted -and remain `preview`. `plan` creates or reuses a scoped Goal, begins a Proof-Carrying Change, and +state. In this CLI version Microsoft Python `1.18.0` and .NET `1.21.0` remain +release-admitted `preview`. OpenAI Agents SDK Python `0.22.2` and TypeScript +`0.18.0` are labeled `stable` and stay fail-closed until the new digest is +bound. `plan` creates or reuses a scoped Goal, begins a Proof-Carrying Change, and attaches a hash-bound file plan without writing project files. `--runtime` selects `python`, `dotnet`, or `node`. `--framework` selects the independent framework id when more than one admitted adapter shares that runtime. diff --git a/packages/cli/package.json b/packages/cli/package.json index cec31107..4a0ead8e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "workspai", - "version": "0.75.2", + "version": "0.76.0", "type": "module", "description": "Open-source workspace intelligence CLI for software systems: create, adopt, govern, verify, and align polyglot workspaces for humans, CI, IDEs, and AI agents.", "keywords": [ diff --git a/packages/cli/releases/RELEASE_NOTES_v0.76.0.md b/packages/cli/releases/RELEASE_NOTES_v0.76.0.md new file mode 100644 index 00000000..856dcfcd --- /dev/null +++ b/packages/cli/releases/RELEASE_NOTES_v0.76.0.md @@ -0,0 +1,76 @@ + + +# Workspai CLI v0.76.0 + +Released September 18, 2026. + +**Publication status:** Published. + +## Stable OpenAI Agents SDK Adapters + +This minor release labels OpenAI Agents SDK starters `stable`. It does not +bind the new manifest digest, so Create and Attach stay fail-closed until a +green matrix is promoted. It does not add handoffs, MCP, sessions, voice, +sandbox, or approval loops, or let weekly discovery rewrite Create contracts. + +## Agent Framework Adapters + +- Python pins `openai-agents` `0.22.2`. TypeScript pins `@openai/agents` + `0.18.0` with `zod` `4.6.5`. +- Create kit ids are `agent.openai.python` and `agent.openai.typescript`. + Interactive Create lists every published agent kit; apply still refuses a + blocked adapter. +- `--framework openai-agents` selects the OpenAI runtime. `--runtime python` + without `--framework` requires an explicit choice because Microsoft Agent + Framework and OpenAI Agents SDK are both published. +- Labeling the adapters `stable` changes the manifest digest. The previous + preview admission on `8eb1308` no longer matches. Bind the next green + matrix before Create or Attach can write those kits. +- Generated starters resolve the owning `agents//` project, inspect + admitted JSON through allowlisted read-only tools, stream live stdout, accept + a prompt from argv or stdin, and fail closed on missing context. They do not + paste context into instructions or treat `boundedGraphSearch` as a shell. + +## Compatibility and Verification Boundaries + +Existing public commands and schema versions remain supported. Microsoft Agent +Framework adapters stay `preview`. Independent Graph work on `main` is not part +of this CLI publication and is not CLI production authority. This release does +not claim complete runtime validation for every repository or production-complete +OpenAI coverage. + +## Install + +```bash +npm install -g workspai@0.76.0 +workspai --version +``` + +The optional npm alias `wspai@0.76.0` targets the same CLI version. + +See the [Changelog](../CHANGELOG.md), [Command Reference](../docs/commands-reference.md), +and [Agent Framework Adapter Contract](../docs/agent-framework-adapters.md). diff --git a/packages/cli/scripts/enterprise-package-smoke.mjs b/packages/cli/scripts/enterprise-package-smoke.mjs index 40161284..6d1c5a3f 100644 --- a/packages/cli/scripts/enterprise-package-smoke.mjs +++ b/packages/cli/scripts/enterprise-package-smoke.mjs @@ -359,8 +359,6 @@ function assertCliContracts() { const expectedAdmittedIds = [ 'microsoft-agent-framework-dotnet', 'microsoft-agent-framework-python', - 'openai-agents-python', - 'openai-agents-typescript', ]; if (JSON.stringify(admittedIds) !== JSON.stringify(expectedAdmittedIds)) { fail( @@ -369,16 +367,18 @@ function assertCliContracts() { })` ); } - for (const previewId of ['openai-agents-python', 'openai-agents-typescript']) { - const preview = adapters.find((adapter) => adapter.id === previewId); - if (!preview) { - fail(`published CLI is missing implemented preview adapter ${previewId}`); + for (const openaiId of ['openai-agents-python', 'openai-agents-typescript']) { + const openai = adapters.find((adapter) => adapter.id === openaiId); + if (!openai) { + fail(`published CLI is missing implemented OpenAI adapter ${openaiId}`); } - if (preview.status !== 'admitted') { - fail(`${previewId} must be release-admitted after the reviewed matrix`); + if (openai.stability !== 'stable') { + fail(`${openaiId} must be labeled stable after the digest-changing promotion`); } - if (preview.stability && preview.stability !== 'preview') { - fail(`${previewId} must remain preview until a later digest-changing promotion`); + if (openai.status === 'admitted') { + fail( + `${openaiId} cannot stay admitted on the previous preview digest; bind the new matrix first` + ); } } @@ -416,6 +416,7 @@ function smokeCreateAgentFrameworkKits() { { kit: 'agent.microsoft.python', name: 'python-agent', + expectCreate: true, expectedFiles: [ 'README.md', '.workspai/project.json', @@ -430,6 +431,7 @@ function smokeCreateAgentFrameworkKits() { { kit: 'agent.microsoft.dotnet', name: 'dotnet-agent', + expectCreate: true, expectedFiles: [ 'README.md', '.workspai/project.json', @@ -446,6 +448,7 @@ function smokeCreateAgentFrameworkKits() { { kit: 'agent.openai.python', name: 'openai-python-agent', + expectCreate: false, expectedFiles: [ 'README.md', '.workspai/project.json', @@ -462,6 +465,7 @@ function smokeCreateAgentFrameworkKits() { { kit: 'agent.openai.typescript', name: 'openai-typescript-agent', + expectCreate: false, expectedFiles: [ 'README.md', '.workspai/project.json', @@ -489,6 +493,20 @@ function smokeCreateAgentFrameworkKits() { stdio: ['ignore', 'pipe', 'pipe'], } ); + const combined = `${result.stdout}\n${result.stderr}`; + if (scenario.expectCreate === false) { + if (result.status === 0) { + fail(`${scenario.kit} create succeeded before the stable digest was release-admitted`); + } + if ( + !/not release-admitted|adapter manifest changed after release admission/i.test(combined) + ) { + fail( + `${scenario.kit} failed closed without an admission blocker\n${result.stdout}\n${result.stderr}` + ); + } + continue; + } if (result.status !== 0) { fail( `${scenario.kit} governed create failed with exit ${result.status}\n${result.stdout}\n${result.stderr}` diff --git a/packages/cli/src/__tests__/agent-framework-project-kits.test.ts b/packages/cli/src/__tests__/agent-framework-project-kits.test.ts index a90b9303..fe5db829 100644 --- a/packages/cli/src/__tests__/agent-framework-project-kits.test.ts +++ b/packages/cli/src/__tests__/agent-framework-project-kits.test.ts @@ -20,7 +20,7 @@ afterEach(async () => { }); describe('agent framework project kits', () => { - it('publishes the exact release-admitted Microsoft and OpenAI kits', () => { + it('publishes the exact Microsoft and OpenAI kits and admits Microsoft until the OpenAI stable digest is bound', () => { expect(describeAgentFrameworkProjectKits().map((kit) => kit.id)).toEqual([ 'agent.microsoft.python', 'agent.microsoft.dotnet', @@ -28,20 +28,13 @@ describe('agent framework project kits', () => { 'agent.openai.typescript', ]); const kits = listAgentFrameworkProjectKits(); - expect(kits.map((kit) => kit.id)).toEqual([ - 'agent.microsoft.python', - 'agent.microsoft.dotnet', - 'agent.openai.python', - 'agent.openai.typescript', - ]); + expect(kits.map((kit) => kit.id)).toEqual(['agent.microsoft.python', 'agent.microsoft.dotnet']); expect(isAgentFrameworkProjectKit('agent.openai.python')).toBe(true); expect(isAgentFrameworkProjectKit('agent.openai.typescript')).toBe(true); - expect(resolveAgentFrameworkProjectKit('agent.openai.python')?.adapterId).toBe( - 'openai-agents-python' - ); - expect(resolveAgentFrameworkProjectKit('agent.openai.typescript')?.adapterId).toBe( - 'openai-agents-typescript' - ); + expect(resolveAgentFrameworkProjectKit('agent.openai.python')).toBeNull(); + expect(resolveAgentFrameworkProjectKit('agent.openai.typescript')).toBeNull(); + expect(isAdmittedAgentFrameworkProjectKit('agent.openai.python')).toBe(false); + expect(isAdmittedAgentFrameworkProjectKit('agent.openai.typescript')).toBe(false); expect(kits.every((kit) => isAdmittedAgentFrameworkProjectKit(kit))).toBe(true); }); diff --git a/packages/cli/src/__tests__/agent-framework-release-admission.test.ts b/packages/cli/src/__tests__/agent-framework-release-admission.test.ts index 8559d2d3..ce32fe9e 100644 --- a/packages/cli/src/__tests__/agent-framework-release-admission.test.ts +++ b/packages/cli/src/__tests__/agent-framework-release-admission.test.ts @@ -15,6 +15,14 @@ describe('agent framework release admission', () => { for (const adapter of BUILTIN_AGENT_FRAMEWORK_ADAPTERS) { const resolution = assessBundledAgentFrameworkRelease(adapter); + const openai = adapter.manifest.adapter.id.startsWith('openai-agents-'); + if (openai) { + expect(resolution).toMatchObject({ + status: 'blocked', + blockers: expect.arrayContaining(['adapter manifest changed after release admission']), + }); + continue; + } if (admittedIds.has(adapter.manifest.adapter.id)) { expect(resolution).toMatchObject({ status: 'admitted', blockers: [] }); expect(resolution.admission?.platforms).toEqual(['linux', 'darwin', 'win32']); @@ -79,16 +87,11 @@ describe('agent framework release admission', () => { .filter((adapter) => adapter.status === 'admitted') .map((adapter) => adapter.id) .sort() - ).toEqual([ - 'microsoft-agent-framework-dotnet', - 'microsoft-agent-framework-python', - 'openai-agents-python', - 'openai-agents-typescript', - ]); + ).toEqual(['microsoft-agent-framework-dotnet', 'microsoft-agent-framework-python']); expect( adapters .filter((adapter) => adapter.id.startsWith('openai-agents-')) - .every((adapter) => adapter.status === 'admitted' && adapter.stability === 'preview') + .every((adapter) => adapter.status === 'blocked' && adapter.stability === 'stable') ).toBe(true); expect( createBuiltinAgentFrameworkRegistry().resolveAdapter('openai-agents-python').status diff --git a/packages/cli/src/__tests__/agent-framework-selection.test.ts b/packages/cli/src/__tests__/agent-framework-selection.test.ts index 5570b377..8786fb8d 100644 --- a/packages/cli/src/__tests__/agent-framework-selection.test.ts +++ b/packages/cli/src/__tests__/agent-framework-selection.test.ts @@ -73,7 +73,7 @@ describe('agent framework selection', () => { ).toMatchObject({ adapterId: 'openai-agents-python', frameworkId: 'openai-agents', - admitted: true, + admitted: false, }); expect( resolveAgentFrameworkSelection({ @@ -84,7 +84,7 @@ describe('agent framework selection', () => { ).toMatchObject({ adapterId: 'openai-agents-typescript', frameworkId: 'openai-agents', - admitted: true, + admitted: false, }); }); }); diff --git a/packages/cli/src/__tests__/agent-framework-user-flow.test.ts b/packages/cli/src/__tests__/agent-framework-user-flow.test.ts index 0e48598c..8ddde913 100644 --- a/packages/cli/src/__tests__/agent-framework-user-flow.test.ts +++ b/packages/cli/src/__tests__/agent-framework-user-flow.test.ts @@ -266,22 +266,16 @@ describe('agent framework user flow', () => { ).rejects.toThrow(/Pass --framework explicitly/); }); - it('plans an OpenAI attach after reviewed release admission', async () => { - const { workspacePath, projectPath } = await fixture(); - const prepared = await prepareAgentFrameworkAttachment({ - workspacePath, - project: 'api', - runtime: 'python', - framework: 'openai-agents', - instanceName: 'primary', - }); - expect(prepared).toMatchObject({ - operation: 'plan', - status: 'planned', - adapterId: 'openai-agents-python', - frameworkId: 'openai-agents', - instanceName: 'primary', - }); - expect(await fsExtra.pathExists(path.join(projectPath, 'agents', 'primary'))).toBe(false); + it('fails closed for OpenAI attach until the stable digest is release-admitted', async () => { + const { workspacePath } = await fixture(); + await expect( + prepareAgentFrameworkAttachment({ + workspacePath, + project: 'api', + runtime: 'python', + framework: 'openai-agents', + instanceName: 'primary', + }) + ).rejects.toThrow(/not release-admitted|adapter manifest changed after release admission/); }); }); diff --git a/packages/cli/src/__tests__/create-planner-capabilities.test.ts b/packages/cli/src/__tests__/create-planner-capabilities.test.ts index d4a28a57..264c9e42 100644 --- a/packages/cli/src/__tests__/create-planner-capabilities.test.ts +++ b/packages/cli/src/__tests__/create-planner-capabilities.test.ts @@ -111,11 +111,7 @@ describe('create planner capabilities', () => { category: 'agent', versionPolicy: 'tested-baseline', }); - expect(contract.nativeCreate.find((kit) => kit.id === 'agent.openai.python')).toMatchObject({ - framework: 'openai-agents', - category: 'agent', - versionPolicy: 'tested-baseline', - }); + expect(contract.nativeCreate.find((kit) => kit.id === 'agent.openai.python')).toBeUndefined(); expect(contract.nativeCreate.find((kit) => kit.id === 'fastapi.standard')).toMatchObject({ plannerFramework: 'fastapi', workspacePythonEngine: 'required', diff --git a/packages/cli/src/__tests__/handle-create-flags.test.ts b/packages/cli/src/__tests__/handle-create-flags.test.ts index 31bd3e8b..4a70ba35 100644 --- a/packages/cli/src/__tests__/handle-create-flags.test.ts +++ b/packages/cli/src/__tests__/handle-create-flags.test.ts @@ -178,7 +178,7 @@ describe('handleCreateOrFallback - wrapper flags handling', () => { ); }, 90_000); - it('creates governed OpenAI agent projects after reviewed release admission', async () => { + it('refuses governed OpenAI agent projects until the stable digest is release-admitted', async () => { await create.createProject('agent-workspace', { parentDirectory: tmpDir, profile: 'minimal', @@ -206,20 +206,12 @@ describe('handleCreateOrFallback - wrapper flags handling', () => { '--yes', ]); - expect(pythonCode).toBe(0); - expect(typescriptCode).toBe(0); + expect(pythonCode).toBe(1); + expect(typescriptCode).toBe(1); expect( await fsExtra.pathExists( path.join(workspacePath, 'openai-python-agent', 'agents', 'primary', 'main.py') ) - ).toBe(true); - expect( - await fsExtra.pathExists( - path.join(workspacePath, 'openai-typescript-agent', 'agents', 'primary', 'src', 'main.ts') - ) - ).toBe(true); - expect( - await fsExtra.pathExists(path.join(workspacePath, 'openai-python-agent', 'pyproject.toml')) ).toBe(false); }, 90_000); diff --git a/packages/cli/src/__tests__/openai-agents-adapter.test.ts b/packages/cli/src/__tests__/openai-agents-adapter.test.ts index 40026fc6..4331a3c2 100644 --- a/packages/cli/src/__tests__/openai-agents-adapter.test.ts +++ b/packages/cli/src/__tests__/openai-agents-adapter.test.ts @@ -48,7 +48,7 @@ function assertCompleteManifest(manifest: AgentFrameworkAdapterManifest) { expect(validateAgentFrameworkAdapterManifest(manifest)).toEqual([]); expect(Object.values(manifest.operations).every((operation) => operation.supported)).toBe(true); expect(manifest.framework.id).toBe('openai-agents'); - expect(manifest.adapter.stability).toBe('preview'); + expect(manifest.adapter.stability).toBe('stable'); expect(manifest.security.secrets).toBe('references-only'); expect(manifest.ownership.mutationAdmission).toBe('workspai-pcc'); expect(manifest.capabilities['single-agent']?.support).toBe('native'); diff --git a/packages/cli/src/__tests__/openai-agents-lifecycle.test.ts b/packages/cli/src/__tests__/openai-agents-lifecycle.test.ts index 74d94aa2..dbcc2fb6 100644 --- a/packages/cli/src/__tests__/openai-agents-lifecycle.test.ts +++ b/packages/cli/src/__tests__/openai-agents-lifecycle.test.ts @@ -52,7 +52,7 @@ function admittedRegistry( manifestSha256, }, frameworkVersion: adapter.manifest.framework.testedVersions[0], - cliVersion: '0.75.2', + cliVersion: '0.76.0', environment: { platform, architecture: 'x64', diff --git a/packages/cli/src/agent-frameworks/adapters/openai-agents/common.ts b/packages/cli/src/agent-frameworks/adapters/openai-agents/common.ts index 8bd06388..fcde36e7 100644 --- a/packages/cli/src/agent-frameworks/adapters/openai-agents/common.ts +++ b/packages/cli/src/agent-frameworks/adapters/openai-agents/common.ts @@ -108,7 +108,7 @@ export function openaiAgentsManifest( id: adapterId, package: '@workspai/cli', version: '0.1.0', - stability: 'preview', + stability: 'stable', }, framework: { id: 'openai-agents', diff --git a/packages/wspai/package.json b/packages/wspai/package.json index 478439c7..3525ed65 100644 --- a/packages/wspai/package.json +++ b/packages/wspai/package.json @@ -1,6 +1,6 @@ { "name": "wspai", - "version": "0.75.2", + "version": "0.76.0", "type": "module", "description": "Short npm alias for the Workspai CLI.", "keywords": [ @@ -39,7 +39,7 @@ "scripts" ], "dependencies": { - "workspai": "0.75.2" + "workspai": "0.76.0" }, "publishConfig": { "registry": "https://registry.npmjs.org", From 25043f771167003ad21e9e9ec06a500fbe2bcb48 Mon Sep 17 00:00:00 2001 From: Workspai Runtime Contract Date: Fri, 18 Sep 2026 20:36:26 -0400 Subject: [PATCH 2/8] fix(cli): expose adapter stability on agent framework list --- packages/cli/CHANGELOG.md | 3 +++ packages/cli/scripts/enterprise-package-smoke.mjs | 6 +++++- .../cli/src/__tests__/package-publish-contract.test.ts | 7 +++++++ packages/cli/src/commands/agent-framework.ts | 3 ++- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 48a2c19b..ffda433d 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -31,6 +31,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- `agent framework list --json` includes each adapter's `stability`, so the + enterprise package smoke can tell a labeled-stable OpenAI adapter from the + previous preview digest. - Microsoft .NET context loader assigns `FileAttributes` before `GetAttributes` so CS0165 does not fail the restore/build lane. - OpenAI Python tools pass `failure_error_function=None`, and OpenAI diff --git a/packages/cli/scripts/enterprise-package-smoke.mjs b/packages/cli/scripts/enterprise-package-smoke.mjs index 6d1c5a3f..f8f50010 100644 --- a/packages/cli/scripts/enterprise-package-smoke.mjs +++ b/packages/cli/scripts/enterprise-package-smoke.mjs @@ -373,7 +373,11 @@ function assertCliContracts() { fail(`published CLI is missing implemented OpenAI adapter ${openaiId}`); } if (openai.stability !== 'stable') { - fail(`${openaiId} must be labeled stable after the digest-changing promotion`); + fail( + `${openaiId} must be labeled stable after the digest-changing promotion (observed: ${ + openai.stability ?? 'missing' + })` + ); } if (openai.status === 'admitted') { fail( diff --git a/packages/cli/src/__tests__/package-publish-contract.test.ts b/packages/cli/src/__tests__/package-publish-contract.test.ts index 4a3b4d30..0dad86c4 100644 --- a/packages/cli/src/__tests__/package-publish-contract.test.ts +++ b/packages/cli/src/__tests__/package-publish-contract.test.ts @@ -172,7 +172,14 @@ describe('npm publish contract', () => { expect(smoke).toContain("adapter.status === 'admitted'"); expect(smoke).toContain('microsoft-agent-framework-python'); expect(smoke).toContain('openai-agents-typescript'); + expect(smoke).toContain("openai.stability !== 'stable'"); expect(smoke).not.toContain('adapters?.length !== 2'); + + const listCommand = fs.readFileSync( + path.join(process.cwd(), 'src/commands/agent-framework.ts'), + 'utf8' + ); + expect(listCommand).toContain('stability: entry.manifest.adapter.stability'); }); it('keeps npm-only contributor enforcement out of consumer install lifecycles', () => { diff --git a/packages/cli/src/commands/agent-framework.ts b/packages/cli/src/commands/agent-framework.ts index 6b7e0d77..425e99e0 100644 --- a/packages/cli/src/commands/agent-framework.ts +++ b/packages/cli/src/commands/agent-framework.ts @@ -244,6 +244,7 @@ export function registerAgentFrameworkCommands(agentCommand: Command): void { framework: entry.manifest.framework.name, runtime: entry.manifest.implementation.runtimes[0], frameworkVersion: entry.manifest.framework.testedVersions[0], + stability: entry.manifest.adapter.stability, status: resolution.status, blockers: resolution.blockers, }; @@ -258,7 +259,7 @@ export function registerAgentFrameworkCommands(agentCommand: Command): void { for (const adapter of adapters) { const icon = adapter.status === 'admitted' ? chalk.green('●') : chalk.red('■'); console.log( - `${icon} ${adapter.framework} · ${adapter.runtime} · ${adapter.frameworkVersion} · ${adapter.status}` + `${icon} ${adapter.framework} · ${adapter.runtime} · ${adapter.frameworkVersion} · ${adapter.stability} · ${adapter.status}` ); } } From 04c2ce2475444253fc6c52364f4a69050bf0255a Mon Sep 17 00:00:00 2001 From: Workspai Runtime Contract Date: Fri, 18 Sep 2026 21:03:03 -0400 Subject: [PATCH 3/8] feat(cli): bind stable OpenAI Agents SDK release admission --- contracts/create-planner-capabilities.v1.json | 24 ++++++++++++++++ contracts/runtime-command-surface.v1.json | 4 ++- ...orkspace-intelligence-architecture.v1.json | 4 ++- packages/cli/CHANGELOG.md | 17 +++++------ packages/cli/RELEASE_NOTES.md | 5 ++-- .../create-planner-capabilities.v1.json | 24 ++++++++++++++++ .../contracts/runtime-command-surface.v1.json | 4 ++- ...orkspace-intelligence-architecture.v1.json | 4 ++- packages/cli/docs/agent-framework-adapters.md | 10 +++---- packages/cli/docs/commands-reference.md | 3 +- .../cli/releases/RELEASE_NOTES_v0.76.0.md | 23 +++++++-------- .../cli/scripts/enterprise-package-smoke.mjs | 12 ++++---- .../agent-framework-project-kits.test.ts | 21 ++++++++++---- .../agent-framework-release-admission.test.ts | 17 +++++------ .../agent-framework-selection.test.ts | 4 +-- .../agent-framework-user-flow.test.ts | 28 +++++++++++-------- .../create-planner-capabilities.test.ts | 6 +++- .../src/__tests__/handle-create-flags.test.ts | 14 ++++++++-- .../package-publish-contract.test.ts | 1 + .../release-admissions.v1.json | 12 ++++---- 20 files changed, 156 insertions(+), 81 deletions(-) diff --git a/contracts/create-planner-capabilities.v1.json b/contracts/create-planner-capabilities.v1.json index c4fd7d80..20df99b7 100644 --- a/contracts/create-planner-capabilities.v1.json +++ b/contracts/create-planner-capabilities.v1.json @@ -134,6 +134,30 @@ "versionPolicy": "tested-baseline", "moduleSupport": false, "workspacePythonEngine": "none" + }, + { + "id": "agent.openai.python", + "runtime": "python", + "framework": "openai-agents", + "plannerFramework": "openai-agents", + "category": "agent", + "owner": "workspai", + "stability": "stable", + "versionPolicy": "tested-baseline", + "moduleSupport": false, + "workspacePythonEngine": "none" + }, + { + "id": "agent.openai.typescript", + "runtime": "node", + "framework": "openai-agents", + "plannerFramework": "openai-agents", + "category": "agent", + "owner": "workspai", + "stability": "stable", + "versionPolicy": "tested-baseline", + "moduleSupport": false, + "workspacePythonEngine": "none" } ], "officialCreate": [ diff --git a/contracts/runtime-command-surface.v1.json b/contracts/runtime-command-surface.v1.json index d34fe4dc..fb5c2cd0 100644 --- a/contracts/runtime-command-surface.v1.json +++ b/contracts/runtime-command-surface.v1.json @@ -4371,7 +4371,9 @@ "dotnet.webapi.clean", "rust.axum", "agent.microsoft.python", - "agent.microsoft.dotnet" + "agent.microsoft.dotnet", + "agent.openai.python", + "agent.openai.typescript" ], "officialCreate": [ "frontend.nextjs", diff --git a/contracts/workspace-intelligence-architecture.v1.json b/contracts/workspace-intelligence-architecture.v1.json index 848a21bb..8be94c96 100644 --- a/contracts/workspace-intelligence-architecture.v1.json +++ b/contracts/workspace-intelligence-architecture.v1.json @@ -681,7 +681,9 @@ "dotnet.webapi.clean", "rust.axum", "agent.microsoft.python", - "agent.microsoft.dotnet" + "agent.microsoft.dotnet", + "agent.openai.python", + "agent.openai.typescript" ], "officialCreate": [ "frontend.nextjs", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index ffda433d..c82f0aa3 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -14,11 +14,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Implemented OpenAI Agents SDK adapters for Python `0.22.2` and TypeScript `@openai/agents` `0.18.0` with independent framework/runtime selection, credentialless conformance lanes, and Create kit ids `agent.openai.python` / - `agent.openai.typescript`. Adapters are labeled `stable`. Create and Attach - stay fail-closed until the new manifest digest is bound from a green matrix. - `--runtime python` without `--framework` requires an explicit framework - because Microsoft and OpenAI are both published. Handoffs, MCP, sessions, and - voice stay unsupported. + `agent.openai.typescript`. Adapters are labeled `stable` and release-admitted + from Adapter Matrix run `35408663712`. `--runtime python` without + `--framework` requires an explicit framework because Microsoft and OpenAI are + both published. Handoffs, MCP, sessions, and voice stay unsupported. ### Changed @@ -31,9 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- `agent framework list --json` includes each adapter's `stability`, so the - enterprise package smoke can tell a labeled-stable OpenAI adapter from the - previous preview digest. +- `agent framework list --json` includes each adapter's `stability`. - Microsoft .NET context loader assigns `FileAttributes` before `GetAttributes` so CS0165 does not fail the restore/build lane. - OpenAI Python tools pass `failure_error_function=None`, and OpenAI @@ -67,8 +64,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Isolated the workspace-intelligence adversarial script the same way; it runs during `quality:push` and was still inheriting husky Git env. - Kept published `agent framework list` OpenAI adapters visible; the enterprise - package smoke requires Microsoft to stay admitted and OpenAI to stay - fail-closed until the stable digest is bound. + package smoke requires Microsoft and OpenAI to stay release-admitted, and + OpenAI to stay labeled `stable`. - Invoked npm through `npm_execpath` in the OpenAI TypeScript conformance smoke so Windows does not `spawn EINVAL` on `npm.cmd`. - Ran the OpenAI TypeScript conformance install/test inside the generated diff --git a/packages/cli/RELEASE_NOTES.md b/packages/cli/RELEASE_NOTES.md index 6172af72..97c26fa5 100644 --- a/packages/cli/RELEASE_NOTES.md +++ b/packages/cli/RELEASE_NOTES.md @@ -10,13 +10,12 @@ ### Stable OpenAI Agents SDK Adapters Workspai 0.76.0 labels OpenAI Agents SDK starters stable for Python 0.22.2 and -TypeScript 0.18.0. Create and Attach stay fail-closed until the new digest is -bound from a green matrix. +TypeScript 0.18.0 and admits Create and Attach from the green adapter matrix. **What's New:** - Label `agent.openai.python` and `agent.openai.typescript` `stable`. -- Keep Create fail-closed until the new manifest digest is matrix-bound. +- Bind the stable digest so Create and Attach write those kits. - Require `--framework` when `--runtime python` is shared; the CLI does not guess. - Keep handoffs, MCP, sessions, voice, sandbox, and approval loops diff --git a/packages/cli/contracts/create-planner-capabilities.v1.json b/packages/cli/contracts/create-planner-capabilities.v1.json index c4fd7d80..20df99b7 100644 --- a/packages/cli/contracts/create-planner-capabilities.v1.json +++ b/packages/cli/contracts/create-planner-capabilities.v1.json @@ -134,6 +134,30 @@ "versionPolicy": "tested-baseline", "moduleSupport": false, "workspacePythonEngine": "none" + }, + { + "id": "agent.openai.python", + "runtime": "python", + "framework": "openai-agents", + "plannerFramework": "openai-agents", + "category": "agent", + "owner": "workspai", + "stability": "stable", + "versionPolicy": "tested-baseline", + "moduleSupport": false, + "workspacePythonEngine": "none" + }, + { + "id": "agent.openai.typescript", + "runtime": "node", + "framework": "openai-agents", + "plannerFramework": "openai-agents", + "category": "agent", + "owner": "workspai", + "stability": "stable", + "versionPolicy": "tested-baseline", + "moduleSupport": false, + "workspacePythonEngine": "none" } ], "officialCreate": [ diff --git a/packages/cli/contracts/runtime-command-surface.v1.json b/packages/cli/contracts/runtime-command-surface.v1.json index d34fe4dc..fb5c2cd0 100644 --- a/packages/cli/contracts/runtime-command-surface.v1.json +++ b/packages/cli/contracts/runtime-command-surface.v1.json @@ -4371,7 +4371,9 @@ "dotnet.webapi.clean", "rust.axum", "agent.microsoft.python", - "agent.microsoft.dotnet" + "agent.microsoft.dotnet", + "agent.openai.python", + "agent.openai.typescript" ], "officialCreate": [ "frontend.nextjs", diff --git a/packages/cli/contracts/workspace-intelligence-architecture.v1.json b/packages/cli/contracts/workspace-intelligence-architecture.v1.json index 848a21bb..8be94c96 100644 --- a/packages/cli/contracts/workspace-intelligence-architecture.v1.json +++ b/packages/cli/contracts/workspace-intelligence-architecture.v1.json @@ -681,7 +681,9 @@ "dotnet.webapi.clean", "rust.axum", "agent.microsoft.python", - "agent.microsoft.dotnet" + "agent.microsoft.dotnet", + "agent.openai.python", + "agent.openai.typescript" ], "officialCreate": [ "frontend.nextjs", diff --git a/packages/cli/docs/agent-framework-adapters.md b/packages/cli/docs/agent-framework-adapters.md index 09907aea..9769066a 100644 --- a/packages/cli/docs/agent-framework-adapters.md +++ b/packages/cli/docs/agent-framework-adapters.md @@ -20,7 +20,7 @@ manifest digests pass the required Linux, macOS, and Windows conformance lanes and are bound into the reviewed release-admission inventory. OpenAI Agents SDK adapters for Python and TypeScript are implemented in the -same registry and lifecycle. They are not listed as Create/Attach kits until +same registry and lifecycle. They are release-admitted Create/Attach kits after their complete cross-platform matrix is reviewed into that inventory. Public commands fail closed rather than silently substituting Microsoft, OpenAI, or another runtime. @@ -227,11 +227,9 @@ workspace profile. A later adapter-manifest change must not hide a kit. Create and Attach still refuse a kit whose adapter is not release-admitted; visibility in the picker is not permission to write a blocked adapter. Attach still requires `--framework openai-agents` when the -runtime is shared. OpenAI adapters are labeled `stable`. Handoffs, MCP, -sessions, voice, sandbox, and approval loops stay unsupported. Create and -Attach stay fail-closed until the new manifest digest, framework baseline, -runtime, and platform list are bound from a green matrix. Microsoft adapters -remain `preview`. +runtime is shared. OpenAI adapters are labeled `stable` and release-admitted. +Handoffs, MCP, sessions, voice, sandbox, and approval loops stay unsupported. +Microsoft adapters remain `preview`. A path-filtered twelve-lane adapter matrix compiles the generated Microsoft Python/.NET and OpenAI Python/TypeScript projects on Linux, macOS, and Windows. Every lane records all 18 mandatory diff --git a/packages/cli/docs/commands-reference.md b/packages/cli/docs/commands-reference.md index 6becbfae..bf1c0012 100644 --- a/packages/cli/docs/commands-reference.md +++ b/packages/cli/docs/commands-reference.md @@ -278,8 +278,7 @@ See [Canonical-first agent entry](./agent-entry.md). agent runtime. `list` exposes every built-in adapter and its release-admission state. In this CLI version Microsoft Python `1.18.0` and .NET `1.21.0` remain release-admitted `preview`. OpenAI Agents SDK Python `0.22.2` and TypeScript -`0.18.0` are labeled `stable` and stay fail-closed until the new digest is -bound. `plan` creates or reuses a scoped Goal, begins a Proof-Carrying Change, and +`0.18.0` are labeled `stable` and release-admitted. `plan` creates or reuses a scoped Goal, begins a Proof-Carrying Change, and attaches a hash-bound file plan without writing project files. `--runtime` selects `python`, `dotnet`, or `node`. `--framework` selects the independent framework id when more than one admitted adapter shares that runtime. diff --git a/packages/cli/releases/RELEASE_NOTES_v0.76.0.md b/packages/cli/releases/RELEASE_NOTES_v0.76.0.md index 856dcfcd..42e16e08 100644 --- a/packages/cli/releases/RELEASE_NOTES_v0.76.0.md +++ b/packages/cli/releases/RELEASE_NOTES_v0.76.0.md @@ -1,16 +1,16 @@