workspai 0.75.2 → 0.77.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +2 -2
  2. package/contracts/agent-framework-capabilities.v1.json +2 -2
  3. package/contracts/cli-runtime-command-inventory.v1.snapshot.json +12 -0
  4. package/contracts/create-planner-capabilities.v1.json +48 -0
  5. package/contracts/extension-cli-compatibility.v1.json +4 -2
  6. package/contracts/published-contract-catalog.v1.json +10 -0
  7. package/contracts/runtime-command-surface.v1.json +5 -1
  8. package/contracts/workspace-intelligence/agent-framework-admission-candidate.v2.json +217 -0
  9. package/contracts/workspace-intelligence/agent-framework-conformance-report.v2.json +274 -0
  10. package/contracts/workspace-intelligence/workspace-model.v1.json +4 -0
  11. package/contracts/workspace-intelligence-architecture.v1.json +7 -3
  12. package/dist/analyze-TJM66CPF.js +1 -0
  13. package/dist/autopilot-release-C7Q4OTPY.js +1 -0
  14. package/dist/capabilities-command-TIBIKWPK.js +1 -0
  15. package/dist/{chunk-K52IQX3J.js → chunk-223SWPTL.js} +1 -1
  16. package/dist/chunk-3EMAC3MF.js +4 -0
  17. package/dist/{chunk-GDOO2YZW.js → chunk-3EPR3D5Q.js} +1 -1
  18. package/dist/chunk-3SQIV3F4.js +1 -0
  19. package/dist/{chunk-ZI54C2AO.js → chunk-475GQJ2D.js} +1 -1
  20. package/dist/{chunk-P36TACKN.js → chunk-47UR6ZH4.js} +1 -1
  21. package/dist/{chunk-VHMDWRDG.js → chunk-4BPZJR4Z.js} +4 -4
  22. package/dist/{chunk-VWBWDDU2.js → chunk-4CXV3PPV.js} +1 -1
  23. package/dist/chunk-4ZUBPFSO.js +6 -0
  24. package/dist/chunk-5KXOV7W4.js +1 -0
  25. package/dist/chunk-6BO4QHKA.js +1 -0
  26. package/dist/{chunk-OA2YJN22.js → chunk-DWDYLKVW.js} +1 -1
  27. package/dist/{chunk-KDVNRNDU.js → chunk-DWKCFHHL.js} +1 -1
  28. package/dist/{chunk-EP7SUMAX.js → chunk-E7WJ2QX7.js} +1 -1
  29. package/dist/{chunk-FNVWDXK2.js → chunk-GLBFY7AB.js} +5 -5
  30. package/dist/{chunk-ZGVODK5C.js → chunk-HRVHQBTA.js} +1 -1
  31. package/dist/{chunk-WHBKKJ7L.js → chunk-IAXRGH4Q.js} +1 -1
  32. package/dist/chunk-IDETNYCF.js +1 -0
  33. package/dist/chunk-IHWS3ALP.js +2 -0
  34. package/dist/{chunk-FZWLWFR4.js → chunk-J2MPBSQJ.js} +1 -1
  35. package/dist/{chunk-PFAGXI3G.js → chunk-JVZA35OL.js} +1 -1
  36. package/dist/chunk-LUPKDFQ3.js +7 -0
  37. package/dist/chunk-N7DOKE7V.js +2 -0
  38. package/dist/chunk-O3TVVQ6X.js +6 -0
  39. package/dist/chunk-P5LI5DL3.js +1 -0
  40. package/dist/{chunk-4JXJRIJM.js → chunk-QCX6BO2M.js} +1 -1
  41. package/dist/chunk-SC43A6LH.js +97 -0
  42. package/dist/chunk-SEZTSMRR.js +1 -0
  43. package/dist/{chunk-COOVCORC.js → chunk-SVO2GGTV.js} +1 -1
  44. package/dist/{chunk-5K4O3TAW.js → chunk-TGNPMOM6.js} +1 -1
  45. package/dist/chunk-UNEK3VVR.js +2684 -0
  46. package/dist/{chunk-IKBE3HOH.js → chunk-UP3UWAJV.js} +1 -1
  47. package/dist/{chunk-LFY7KTPD.js → chunk-UTIK3K3M.js} +1 -1
  48. package/dist/{chunk-WXUCAVFT.js → chunk-V6HVDVKJ.js} +8 -8
  49. package/dist/chunk-WC2K5QFI.js +10 -0
  50. package/dist/{chunk-DTNOF3MP.js → chunk-X5XFT5UZ.js} +1 -1
  51. package/dist/{chunk-ADHX7D3F.js → chunk-ZIWWE4BQ.js} +1 -1
  52. package/dist/{create-ZFSFWAW3.js → create-YPAZJYCE.js} +1 -1
  53. package/dist/{doctor-4KL4XUCS.js → doctor-W5PXJ5FL.js} +1 -1
  54. package/dist/{goal-lifecycle-EXQZD7IA.js → goal-lifecycle-5R55CA7H.js} +1 -1
  55. package/dist/{goal-pack-DKJU2DEP.js → goal-pack-IS6GGJPH.js} +1 -1
  56. package/dist/index.d.ts +12 -6
  57. package/dist/index.js +181 -171
  58. package/dist/{pipeline-4GVAOCEN.js → pipeline-LW3SW2WT.js} +1 -1
  59. package/dist/platform-capabilities-RWOWND5Q.js +1 -0
  60. package/dist/{project-agent-entry-7QKNEEXP.js → project-agent-entry-5TYKK5IV.js} +1 -1
  61. package/dist/{project-intelligence-lens-IHRYCLNU.js → project-intelligence-lens-TEOSTKNU.js} +1 -1
  62. package/dist/{project-test-coverage-3P5FH6E5.js → project-test-coverage-T4TIWGKN.js} +1 -1
  63. package/dist/proof-carrying-change-2TKRADCW.js +1 -0
  64. package/dist/{pythonRapidkitExec-UMFLDIYR.js → pythonRapidkitExec-S35OEIEF.js} +1 -1
  65. package/dist/{verified-goal-XI4RQESU.js → verified-goal-RN4TOV34.js} +1 -1
  66. package/dist/{workspace-EYXAKMVI.js → workspace-A33YMF2N.js} +1 -1
  67. package/dist/{workspace-agent-sync-SN55KT6N.js → workspace-agent-sync-VCA4G4DT.js} +1 -1
  68. package/dist/{workspace-context-PW6ESEHH.js → workspace-context-YBWLSKR6.js} +1 -1
  69. package/dist/{workspace-contract-FPLFL4G3.js → workspace-contract-3QUZDBMM.js} +1 -1
  70. package/dist/{workspace-explain-TVQ5IF5D.js → workspace-explain-NXYRAQFI.js} +1 -1
  71. package/dist/{workspace-foundation-DWIJPZRH.js → workspace-foundation-DZ52PECX.js} +1 -1
  72. package/dist/{workspace-graph-stream-RUTNWLQB.js → workspace-graph-stream-4VT46HZ7.js} +1 -1
  73. package/dist/{workspace-intelligence-4CA2CSPZ.js → workspace-intelligence-FKYQQDJ6.js} +1 -1
  74. package/dist/{workspace-intelligence-runner-VM5SXXAT.js → workspace-intelligence-runner-3K2JZH6Q.js} +1 -1
  75. package/dist/{workspace-knowledge-graph-JXN2ZOAF.js → workspace-knowledge-graph-CPBKNXQI.js} +1 -1
  76. package/dist/workspace-knowledge-graph-snapshot-67XDXUOT.js +1 -0
  77. package/dist/{workspace-mcp-serve-4WN4CSD7.js → workspace-mcp-serve-UXPKX7K6.js} +1 -1
  78. package/dist/{workspace-model-D4IECQML.js → workspace-model-POCPMNRT.js} +1 -1
  79. package/dist/{workspace-onboarding-6XWDKLM5.js → workspace-onboarding-KLG3GG7S.js} +1 -1
  80. package/dist/{workspace-registry-summary-Y3ET36NH.js → workspace-registry-summary-M4WMFDQ4.js} +1 -1
  81. package/dist/{workspace-repair-engine-HBUXRHDY.js → workspace-repair-engine-2VGN42QD.js} +1 -1
  82. package/dist/workspace-run-5YQR7GEZ.js +1 -0
  83. package/dist/{workspace-verify-OOAZ3NMZ.js → workspace-verify-PLAKTF3J.js} +1 -1
  84. package/dist/{workspace-watch-BNM5B6HU.js → workspace-watch-VNU4KVYN.js} +1 -1
  85. package/docs/README.md +4 -2
  86. package/docs/agent-framework-adapters.md +168 -39
  87. package/docs/ci-workflows.md +40 -22
  88. package/docs/commands-reference.md +19 -8
  89. package/docs/create-planner-capabilities.md +1 -0
  90. package/docs/creating-workspaces-and-projects.md +28 -9
  91. package/docs/doctor-command.md +9 -4
  92. package/docs/model-gateways.md +204 -0
  93. package/docs/native-kit-baselines.md +4 -2
  94. package/docs/workspace-run.md +3 -1
  95. package/package.json +5 -1
  96. package/scripts/enterprise-package-smoke.mjs +200 -5
  97. package/dist/analyze-6UEBC5OJ.js +0 -1
  98. package/dist/autopilot-release-H5TO6NYY.js +0 -1
  99. package/dist/capabilities-command-VK3LQLP2.js +0 -1
  100. package/dist/chunk-3N27P3KO.js +0 -7
  101. package/dist/chunk-3RNWBFRP.js +0 -4
  102. package/dist/chunk-66O62XNJ.js +0 -97
  103. package/dist/chunk-7NKM6EHE.js +0 -7
  104. package/dist/chunk-BR6QIYQS.js +0 -1
  105. package/dist/chunk-DFREJHG7.js +0 -1
  106. package/dist/chunk-E42IFQFR.js +0 -6
  107. package/dist/chunk-EWD6QTAM.js +0 -2
  108. package/dist/chunk-G5UCEXP6.js +0 -1
  109. package/dist/chunk-JKAAKE4Z.js +0 -6
  110. package/dist/chunk-LARREYZN.js +0 -1
  111. package/dist/chunk-RGNCL5OB.js +0 -1
  112. package/dist/chunk-SZHRPELL.js +0 -1
  113. package/dist/chunk-VXFIMEC6.js +0 -2
  114. package/dist/chunk-X7OI24LO.js +0 -418
  115. package/dist/platform-capabilities-DB4BZPTD.js +0 -1
  116. package/dist/proof-carrying-change-O37XUPIZ.js +0 -1
  117. package/dist/workspace-knowledge-graph-snapshot-KBNUXA64.js +0 -1
  118. package/dist/workspace-run-VN7KV4BU.js +0 -1
@@ -12,23 +12,35 @@ existing project ---/ |
12
12
  -> Workspai Context, Goal, PCC, and Verify
13
13
  ```
14
14
 
15
- Microsoft Agent Framework is the first concrete implementation of this
15
+ Microsoft Agent Framework is the first adapter implementation of this
16
16
  foundation. Its Python and .NET adapters are intentionally separate because
17
17
  their package graphs, runtime requirements, entrypoints, and verification
18
- commands differ. Both are available for governed attachment after their exact
19
- manifest digests pass the required Linux, macOS, and Windows conformance lanes
20
- and are bound into the reviewed release-admission inventory.
18
+ commands differ. Both become available for governed attachment only after the
19
+ exact manifest and release baseline pass the required Linux, macOS, and Windows
20
+ conformance lanes and are bound into the reviewed release-admission inventory.
21
+ Per-platform semantic implementation digests accompany that evidence for
22
+ traceability, but do not act as runtime authorization locks.
23
+
24
+ OpenAI Agents SDK adapters for Python and TypeScript are implemented in the
25
+ same registry and lifecycle. They become Create/Attach kits only after their
26
+ complete cross-platform matrix is reviewed into that inventory. Public
27
+ commands fail closed rather than silently substituting Microsoft, OpenAI, or
28
+ another runtime.
29
+
30
+ OpenRouter Client SDK access belongs to the [AI Gateway](./model-gateways.md)
31
+ category. Do not add OpenRouter under Agent Frameworks, and do not use
32
+ `@openrouter/agent` to implement a gateway kit.
21
33
 
22
34
  ## Published contracts
23
35
 
24
- | Contract | Purpose |
25
- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- |
26
- | `contracts/agent-framework-capabilities.v1.json` | Normative ownership, capability, lifecycle, security, versioning, and admission rules |
27
- | `contracts/workspace-intelligence/agent-framework-adapter-manifest.v1.json` | JSON Schema for one framework/version adapter declaration |
28
- | `contracts/workspace-intelligence/agent-framework-conformance-report.v1.json` | JSON Schema for reproducible adapter admission evidence |
29
- | `contracts/workspace-intelligence/agent-framework-change-plan.v1.json` | Portable, mutation-free scaffold or attach plan returned to the host |
30
- | `contracts/workspace-intelligence/agent-framework-ownership-receipt.v1.json` | Hash-bound proof of the files Workspai may safely refresh |
31
- | `contracts/workspace-intelligence/agent-framework-admission-candidate.v1.json` | Review-pending, digest-bound index of the complete cross-platform evidence matrix |
36
+ | Contract | Purpose |
37
+ | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- |
38
+ | `contracts/agent-framework-capabilities.v1.json` | Normative ownership, capability, lifecycle, security, versioning, and admission rules |
39
+ | `contracts/workspace-intelligence/agent-framework-adapter-manifest.v1.json` | JSON Schema for one framework/version adapter declaration |
40
+ | `contracts/workspace-intelligence/agent-framework-conformance-report.v2.json` | JSON Schema binding reproducible adapter evidence to manifest and implementation digests |
41
+ | `contracts/workspace-intelligence/agent-framework-change-plan.v1.json` | Portable, mutation-free scaffold or attach plan returned to the host |
42
+ | `contracts/workspace-intelligence/agent-framework-ownership-receipt.v1.json` | Hash-bound proof of the files Workspai may safely refresh |
43
+ | `contracts/workspace-intelligence/agent-framework-admission-candidate.v2.json` | Review-pending, digest-bound index of the complete cross-platform evidence matrix |
32
44
 
33
45
  The schemas are also discoverable through
34
46
  `contracts/published-contract-catalog.v1.json` and the extension compatibility
@@ -109,16 +121,38 @@ Generated starter files use an isolated `agents/<instance>` root and keep
109
121
  adapter state under `.workspai/agent-frameworks/<adapter>/<instance>.json`.
110
122
  That instance contains the only runtime dependency manifest; the project root
111
123
  does not receive an empty Python or .NET manifest that could be mistaken for a
112
- second executable unit. Workspace Model reports these projects as `agent`,
124
+ second executable unit. Python and .NET starters resolve bounded context from
125
+ the directory that owns `agents/<instance>/`. They do not use process cwd.
126
+ `workspace run start` executes from the agent package directory and still
127
+ finds `.workspai/reports/project-context-agent.json` at the project root.
128
+ Loaders share the OpenAI containment contract: canonical path walk, regular-file
129
+ open, 128 KiB cap, UTF-8 JSON, and `schemaVersion: project-context-agent.v1`.
130
+ The Python starter is pip-editable (`[build-system]` + setuptools modules) and
131
+ uses the official Foundry hello-world `Agent(client=FoundryChatClient(...))`
132
+ pattern with three read-only documented tools: `describe_workspai_context`,
133
+ `read_workspai_project_summary`, and `list_workspai_supported_commands`. The
134
+ .NET starter uses `AIProjectClient.AsAIAgent` plus `AIFunctionFactory.Create`,
135
+ enables `RestorePackagesWithLockFile`, and does not emit invented NuGet lock
136
+ hashes. Neither starter pastes admitted JSON into instructions; live
137
+ entrypoints stream stdout and accept a prompt from argv or stdin. Neither
138
+ starter hardcodes a Foundry model name; `FOUNDRY_MODEL` is
139
+ required. `DefaultAzureCredential` remains the local development convenience
140
+ Microsoft documents; generated READMEs tell production hosts to prefer
141
+ `ManagedIdentityCredential`. Adapters remain `preview`. Unsupported Microsoft
142
+ primitives (durable workflows, MCP, HITL loops, hosted tools) stay out of the
143
+ generated first-version scaffold.
144
+ Workspace Model reports these projects as `agent`,
113
145
  retains `microsoft-agent-framework` as their framework identity, and reports
114
146
  only lifecycle stages backed by concrete manifests, entrypoints, tests, or an
115
147
  owned project runner.
116
148
  Each starter also includes credentialless tests for the bounded context
117
- boundary and an environment-name example with no secret values. Python uses
118
- the host platform's normal Python 3 launcher and remains dependency-free for
119
- these tests; .NET uses a separately pinned test project. The conformance matrix
120
- executes these tests in addition to compiling and exercising the deterministic
121
- framework lifecycle.
149
+ boundary, allowlisted views, and Azure-shaped redaction, plus an
150
+ environment-name example with no secret values. Python context
151
+ tests isolate the operational context file and restore it afterward; they stay
152
+ dependency-free unless `agent-framework` is installed for the optional
153
+ LocalChatClient loop. .NET uses a separately pinned test project. The conformance
154
+ matrix executes these tests in addition to compiling and exercising the
155
+ deterministic framework lifecycle.
122
156
  Existing user-authored files are blockers, never overwrite targets. A managed
123
157
  comment alone does not prove ownership: refresh also requires the previous
124
158
  Workspai ownership receipt, which is bound to the exact adapter-manifest digest;
@@ -127,18 +161,100 @@ Provider credentials remain environment references. The first provider profile u
127
161
  Microsoft Foundry, but provider identity is not part of framework identity and
128
162
  additional profiles must preserve the same security boundary.
129
163
 
130
- A path-filtered six-lane adapter matrix compiles the generated Python and .NET
131
- projects on Linux, macOS, and Windows. Every lane records all 18 mandatory
132
- checks, the exact runtime and framework baseline, a digest of the adapter
133
- manifest, and one bounded evidence file per check. Reports are retained as CI
134
- artifacts for review. A final job validates every evidence path and admits the
135
- matrix only when all three operating-system lanes pass for both adapters.
164
+ ## OpenAI Agents SDK baseline
165
+
166
+ The built-in OpenAI adapters pin independently verified SDK baselines. They do
167
+ not reuse Microsoft detection, kits, or model-provider defaults.
168
+
169
+ | Adapter | Tested framework | Runtime | Authored detection |
170
+ | -------------------------- | ---------------- | --------------- | ---------------------------------- |
171
+ | `openai-agents-python` | `0.22.2` | Python `>=3.10` | exact PyPI package `openai-agents` |
172
+ | `openai-agents-typescript` | `0.18.0` | Node.js `>=22` | exact npm package `@openai/agents` |
173
+
174
+ The TypeScript starter also pins peer `zod` `4.6.5`, TypeScript `5.9.3`, and
175
+ `@types/node` `22.20.3`. The `openai` PyPI or npm package alone is not this
176
+ framework. Generated markers under `.workspai/agent-frameworks/` cannot select
177
+ it.
178
+
179
+ Generated loaders resolve the Workspai project as the directory that owns
180
+ `agents/<instance>/`. They do not use process cwd, unbounded ancestor search,
181
+ or a copied context file inside the agent package. Canonical containment,
182
+ a regular-file open (`O_NOFOLLOW` when the platform provides it), the 128 KiB
183
+ cap, UTF-8 JSON, and `schemaVersion: project-context-agent.v1` are enforced in
184
+ the starter. Generation, freshness, and integrity remain host-owned agent-sync
185
+ work. Internal symlinks, including Windows reparse points treated as links, are
186
+ allowed only when every resolved hop stays inside the project root. Diagnostics
187
+ do not include file contents.
188
+
189
+ The loader walk is not an atomic open. Between `lstat` of one hop and `open` of
190
+ the next, a local actor who can replace a path component may still race the
191
+ walk. The bound we claim, and only that bound, is: after a successful open with
192
+ `O_NOFOLLOW` when the kernel provides it, that file descriptor is `fstat`'d and
193
+ at most 128 KiB is read from that descriptor. This is not a proof of complete
194
+ TOCTOU immunity, of Windows junction behavior on every host, or of
195
+ enterprise-grade isolation.
196
+
197
+ Claimed capabilities are conservative and independently evidenced:
198
+
199
+ - native: `single-agent`, `typed-tools`, `local-execution`
200
+ - conditional: `telemetry` (defaults off; `WORKSPAI_AGENT_TRACING=1` opts in;
201
+ `OPENAI_AGENTS_DISABLE_TRACING=1|true` keeps tracing off even if the opt-in
202
+ is set), `provider-neutral-models` (starter only reads `OPENAI_MODEL` /
203
+ `OPENAI_DEFAULT_MODEL`)
204
+ - unsupported in this version: handoffs, MCP, sessions/resume, voice, sandbox,
205
+ hosted tools, and human-approval loops
206
+
207
+ Python cancellation uses `Runner.max_turns` and `ModelSettings.timeout` from
208
+ `openai-agents` `0.22.2`. `ModelSettings.timeout` is a per-model-request
209
+ timeout applied only on the live model path. Injected `ScriptedModel` runs omit
210
+ it because that setting hung the official test double on Python 3.13.
211
+ TypeScript cancellation uses `maxTurns` plus `AbortSignal` from
212
+ `@openai/agents` `0.18.0`. Those SDK controls are not a Workspai-owned timeout
213
+ service. Workspai still owns mutation admission and verification; a successful
214
+ model run is not verified evidence.
215
+
216
+ Generated starters do not paste `project-context-agent.json` into model
217
+ instructions. They expose three read-only tools over allowlisted views:
218
+ context size and `schemaVersion`, workspace/project identity (including
219
+ `boundedGraphSearch` as a pointer, not a shell), and the admitted command
220
+ surface. Live Python uses `Runner.run_streamed`; live TypeScript streams
221
+ `Runner.run({ stream: true })`. Credentialless ScriptedModel tests stay on
222
+ the non-stream `run` path. A prompt is taken from argv or stdin.
223
+
224
+ Generated OpenAI context tests copy the operational
225
+ `.workspai/reports/project-context-agent.json` aside for the suite and restore
226
+ it afterward. A green test run is not allowed to delete or replace that host
227
+ artifact.
228
+
229
+ Create lists every published agent kit under **AI Agent**, including
230
+ `agent.openai.python` and `agent.openai.typescript`. That picker is the
231
+ published catalog: it is not filtered by release-admission digest match or
232
+ workspace profile. A later adapter-manifest change must not hide a kit.
233
+ Create and Attach still refuse a kit whose adapter is not release-admitted;
234
+ visibility in the picker is not permission to write a blocked adapter.
235
+ Attach still requires `--framework openai-agents` when the
236
+ runtime is shared. OpenAI adapters are labeled `stable`; release admission
237
+ remains blocked until the exact v2 cross-platform candidate is promoted.
238
+ Handoffs, MCP, sessions, voice, sandbox, and approval loops stay unsupported.
239
+ Microsoft adapters remain `preview`.
240
+
241
+ A path-filtered PR gate compiles only the affected Microsoft or OpenAI adapter
242
+ family on Linux. Shared lifecycle, security, registry, admission, and contract
243
+ changes select both families; documentation-only edits do not run adapter
244
+ conformance. The complete twelve-lane matrix is an explicit release-
245
+ qualification operation: it compiles Microsoft Python/.NET and OpenAI
246
+ Python/TypeScript on Linux, macOS, and Windows. Every full-qualification lane
247
+ records all 18 mandatory checks, the exact runtime and framework baseline,
248
+ digests of the adapter manifest and semantic implementation, and one bounded
249
+ evidence file per check. Reports are retained as CI artifacts for review. A
250
+ final job validates every evidence path and emits an admission candidate only
251
+ when all three operating-system lanes pass for every built-in adapter.
136
252
  Python conformance is pinned to 3.10.11, the final Python 3.10 release with
137
253
  cross-platform binary installers; this provides one reproducible minimum-runtime
138
254
  baseline while the adapter continues to declare Python `>=3.10` support.
139
255
 
140
256
  After verification, CI emits one admission-candidate artifact. It binds the
141
- source commit, CLI version, adapter-manifest digests, lane reports, and every
257
+ source commit, CLI version, adapter manifest and implementation digests, lane reports, and every
142
258
  evidence file by SHA-256. Its status is always `pending`: successful CI produces
143
259
  reviewable evidence, not release authority. Only the protected version-update
144
260
  branch may convert that candidate into the exact release-admission inventory,
@@ -149,11 +265,16 @@ blocked when callers provide neither raw conformance reports nor explicit
149
265
  permission to use the bundled reviewed release inventory. User-facing commands
150
266
  enable that inventory deliberately and fail closed if an adapter version,
151
267
  manifest digest, framework baseline, runtime, or platform list has changed.
268
+ Semantic implementation digests remain in lane reports, candidates, and the
269
+ reviewed inventory as audit provenance. They are verified during full
270
+ qualification and promotion, but are deliberately not runtime authorization:
271
+ routine implementation changes are guarded by affected-family tests instead
272
+ of requiring a hand-edited admission digest for every source edit.
152
273
 
153
274
  ## Attach an agent runtime
154
275
 
155
- Build current Workspace Intelligence first, then inspect the release-admitted
156
- runtimes:
276
+ Build current Workspace Intelligence first, then inspect adapter admission
277
+ state:
157
278
 
158
279
  ```bash
159
280
  npx workspai workspace intelligence run --for-agent generic --strict --json
@@ -170,6 +291,11 @@ npx workspai agent framework plan \
170
291
  --name support-agent
171
292
  ```
172
293
 
294
+ When more than one admitted framework shares a runtime, pass `--framework`
295
+ explicitly. Workspai does not guess or fall back. `--runtime python` without
296
+ `--framework` now requires an explicit choice because Microsoft Agent Framework
297
+ and OpenAI Agents SDK are both admitted.
298
+
173
299
  The interactive attach command displays the same plan and asks before granting
174
300
  its filesystem effect. Automation must opt in with `--yes` and records the
175
301
  identity supplied by `--granted-by`:
@@ -207,8 +333,9 @@ npx workspai create project agent.microsoft.dotnet operations-agent
207
333
  Create writes a minimal runtime identity, registers the project, seals a
208
334
  Model/Graph baseline so the adapter can plan, applies the adapter-owned scaffold
209
335
  inside that Change, then re-observes Model, Graph, and project grounding against
210
- the nested runtime. The interactive wizard exposes these kits under the **AI
211
- Agent** category only because they are release-admitted. A failed scaffold
336
+ the nested runtime. The interactive wizard lists every published kit under the
337
+ **AI Agent** category. Scaffolding still requires the selected adapter to be
338
+ release-admitted. A failed scaffold
212
339
  rolls back the new directory and workspace registration. Detection itself
213
340
  remains read-only and never authorizes writes.
214
341
 
@@ -274,10 +401,12 @@ and unadvertised runtimes fail closed.
274
401
 
275
402
  The generic boundary was hardened against two deliberately different
276
403
  integration shapes: a filesystem-first Node.js framework and the
277
- multi-language Microsoft Agent Framework. Only the Microsoft adapters are
278
- implemented. They are selectable for Create and Attach only while their exact
279
- manifest digest, framework baseline, runtime, and platform list remain in the
280
- reviewed release-admission inventory.
404
+ multi-language Microsoft Agent Framework. OpenAI Agents SDK Python and
405
+ TypeScript adapters now share that same create, attach, detection, ownership,
406
+ and verification host. They are selectable for Create and Attach only after
407
+ their exact manifest digest, framework baseline, runtime, and platform list
408
+ enter the reviewed release-admission inventory. Microsoft adapters remain
409
+ selectable while their current inventory entries stay valid.
281
410
 
282
411
  ## Implementation sequence
283
412
 
@@ -286,13 +415,13 @@ reviewed release-admission inventory.
286
415
  2. Use the framework-neutral registry, detector, and bounded manifest loader.
287
416
  3. Review the Microsoft Python and .NET digest-bound evidence produced by the
288
417
  full conformance matrix.
289
- 4. Keep automated upstream discovery separate from release authority: report
418
+ 4. Review the OpenAI Python and TypeScript digest-bound evidence produced by
419
+ the same matrix; do not treat local Linux success as multi-OS admission.
420
+ 5. Keep automated upstream discovery separate from release authority: report
290
421
  newer registry versions, then update pins only through a reviewed change.
291
422
  Re-run the full matrix before treating a new pin as independently proven.
292
- 5. Admit another framework only after its create and attach paths share these
293
- ownership, rollback, and verification guarantees.
294
423
 
295
424
  AutoGen is not planned as a new-project target because Microsoft Agent
296
- Framework is its supported successor path. Eve, LangGraph, and OpenAI Agents
297
- SDK are not advertised; each requires its own adapter, tested baseline, and
298
- conformance evidence.
425
+ Framework is its supported successor path. Eve and LangGraph are not
426
+ advertised; each requires its own adapter, tested baseline, and conformance
427
+ evidence.
@@ -4,33 +4,51 @@ Map of GitHub Actions workflows in this repository. Use this when editing CI to
4
4
 
5
5
  ## Workflows
6
6
 
7
- | Workflow | Path | Purpose |
8
- | ------------------------ | ---------------------------------------------------- | ------------------------------------------------------------------------- |
9
- | Build / test matrix | `.github/workflows/ci.yml` | Path-aware docs or full matrix validation plus the required `CI Gate` |
10
- | Workspace E2E matrix | `.github/workflows/workspace-e2e-matrix.yml` | Cross-OS workspace lifecycle smoke; setup `--warm-deps`; cache/mirror ops |
11
- | Windows bridge E2E | `.github/workflows/windows-bridge-e2e.yml` | Native Windows bridge and lifecycle checks |
12
- | E2E smoke | `.github/workflows/e2e-smoke.yml` | Focused bridge regression smoke |
13
- | Official generator smoke | `.github/workflows/frontend-generator-smoke.yml` | Contract-driven official-generator drift gate |
14
- | Agent Framework matrix | `.github/workflows/agent-framework-conformance.yml` | Six-lane Python/.NET adapter compile, credentialless lifecycle, admission |
15
- | Agent Framework discovery| `.github/workflows/agent-framework-version-discovery.yml` | Weekly PyPI/NuGet candidate report; no commit, PR, or contract rewrite |
16
- | Security | `.github/workflows/security.yml` | Path-aware scanning plus the always-resolved `Security Gate` |
17
- | Manual npm release | `.github/workflows/release-npm-manual.yml` | Maintainer-only release gate and publish workflow |
18
- | Discord announcement | `.github/workflows/discord-release-announcement.yml` | Preview and publish one idempotent product-aware release announcement |
19
- | Contributor onboarding | `.github/workflows/contributor-onboarding.yml` | Accepted-contributor onboarding automation |
20
- | Contributor Hub | `.github/workflows/contributor-hub.yml` | Daily live issue-route freshness |
21
- | Welcome | `.github/workflows/welcome.yml` | First-issue and first-contribution messages |
7
+ | Workflow | Path | Purpose |
8
+ | ------------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
9
+ | Build / test matrix | `.github/workflows/ci.yml` | Path-aware docs or full matrix validation plus the required `CI Gate` |
10
+ | Workspace E2E matrix | `.github/workflows/workspace-e2e-matrix.yml` | Cross-OS workspace lifecycle smoke; setup `--warm-deps`; cache/mirror ops |
11
+ | Windows bridge E2E | `.github/workflows/windows-bridge-e2e.yml` | Native Windows bridge and lifecycle checks |
12
+ | E2E smoke | `.github/workflows/e2e-smoke.yml` | Focused bridge regression smoke |
13
+ | Official generator smoke | `.github/workflows/frontend-generator-smoke.yml` | Contract-driven official-generator drift gate |
14
+ | Agent Framework matrix | `.github/workflows/agent-framework-conformance.yml` | Affected-family Linux PR gate plus manual twelve-lane release qualification and admission |
15
+ | Agent Framework discovery | `.github/workflows/agent-framework-version-discovery.yml` | Weekly PyPI/NuGet candidate report; no commit, PR, or contract rewrite |
16
+ | Model Gateway matrix | `.github/workflows/model-gateway-qualification.yml` | Three-OS generated-project and lifecycle qualification; manual fast mode stays on Linux |
17
+ | Model Gateway discovery | `.github/workflows/model-gateway-version-discovery.yml` | Weekly npm/PyPI/GitHub candidate report; no baseline write, commit, or PR |
18
+ | Security | `.github/workflows/security.yml` | Path-aware scanning plus the always-resolved `Security Gate` |
19
+ | Manual npm release | `.github/workflows/release-npm-manual.yml` | Maintainer-only release gate and publish workflow |
20
+ | Discord announcement | `.github/workflows/discord-release-announcement.yml` | Preview and publish one idempotent product-aware release announcement |
21
+ | Contributor onboarding | `.github/workflows/contributor-onboarding.yml` | Accepted-contributor onboarding automation |
22
+ | Contributor Hub | `.github/workflows/contributor-hub.yml` | Daily live issue-route freshness |
23
+ | Welcome | `.github/workflows/welcome.yml` | First-issue and first-contribution messages |
22
24
 
23
25
  ## Agent Framework workflows
24
26
 
25
- Weekly `agent-framework-version-discovery` checks PyPI and NuGet, then stops at
27
+ Weekly `agent-framework-version-discovery` checks PyPI, NuGet, and npm, then stops at
26
28
  a report and artifact. It does not commit, open a pull request, regenerate
27
- Create contracts, or write `release-admissions.v1.json`. A human pin update
28
- still has to pass `agent-framework-conformance` on Linux, macOS, and Windows
29
- for Python and .NET. That matrix compiles the nested `agents/primary` runtime,
30
- runs credentialless context-boundary tests, and records digest-bound evidence.
31
- It never sets Foundry credentials. Only a reviewed admission on the protected
29
+ Create contracts, or write `release-admissions.v2.json`. A human pin update
30
+ still has to pass the manual `full` mode of `agent-framework-conformance` on
31
+ Linux, macOS, and Windows for every built-in adapter runtime. Pull requests run
32
+ the faster Linux gate only for the affected Microsoft or OpenAI family; shared
33
+ agent-framework surfaces select both, while documentation-only changes skip the
34
+ specialized workflow. The full matrix compiles the nested `agents/primary`
35
+ runtime, runs credentialless context-boundary tests, and records manifest-bound
36
+ admission data plus semantic implementation provenance. Promotion requires the
37
+ candidate source commit to equal the checked-out promotion commit. An
38
+ implementation digest is audit evidence, not a runtime lock and not a manual
39
+ maintenance requirement after every routine adapter edit.
40
+ It never sets Foundry or OpenAI credentials. Only a reviewed admission on the protected
32
41
  version-update branch can promote a green candidate.
33
42
 
43
+ OpenRouter AI Gateway kits are not part of the Agent Framework conformance
44
+ matrix. They use a dedicated qualification workflow for generated-project
45
+ install, tests, smoke, missing-key startup, Workspace Run, and Workspace
46
+ Verify. Path-triggered runs and manual `full` mode qualify both adapters on
47
+ Linux, macOS, and Windows. Manual `fast` mode is the only single-OS path.
48
+ Weekly discovery reports newer stable sdk-core versions, with registry and
49
+ GitHub agreement shown as a candidate diff. It does not write the baseline or
50
+ open a pull request. See [AI Gateway](./model-gateways.md).
51
+
34
52
  The PR template at `.github/agent-framework-version-update.md` is for that
35
53
  human pin update. It is not opened by the weekly discovery workflow.
36
54
 
@@ -118,7 +136,7 @@ Validate or preview the current CLI announcement locally:
118
136
  npm --workspace workspai run check:release-announcement
119
137
  npm --workspace workspai run release:announcement -- \
120
138
  --product workspai-cli \
121
- --tag v0.75.2 \
139
+ --tag v0.77.0 \
122
140
  --markdown-output /tmp/workspai-discord-announcement.md
123
141
  ```
124
142
 
@@ -82,11 +82,13 @@ npx workspai change capsule validate --change <change-id> [--workspace <path>] [
82
82
  npx workspai change capsule export --change <change-id> --output <path> [--workspace <path>] [--json]
83
83
  npx workspai create project agent.microsoft.python <name> [--agent-name <name>] [--skip-git]
84
84
  npx workspai create project agent.microsoft.dotnet <name> [--agent-name <name>] [--skip-git]
85
+ npx workspai create project gateway.openrouter.typescript <name> [--skip-git] [--json]
86
+ npx workspai create project gateway.openrouter.python <name> [--skip-git] [--json]
85
87
  npx workspai agent bootstrap [--project <path>] [--for-agent <host>] [--no-live-inputs] [--strict] [--json]
86
88
  npx workspai agent framework list [--json]
87
- npx workspai agent framework plan --project <name> --runtime <python|dotnet> --name <agent> [--goal <goal-id>] [--workspace <path>] [--json]
88
- npx workspai agent framework attach --project <name> --runtime <python|dotnet> --name <agent> [-y] [--granted-by <identity>] [--workspace <path>] [--json]
89
- npx workspai agent framework apply --change <change-id> --project <name> --runtime <python|dotnet> [--workspace <path>] [--json]
89
+ npx workspai agent framework plan --project <name> --runtime <python|dotnet|node> [--framework <id>] --name <agent> [--goal <goal-id>] [--workspace <path>] [--json]
90
+ npx workspai agent framework attach --project <name> --runtime <python|dotnet|node> [--framework <id>] --name <agent> [-y] [--granted-by <identity>] [--workspace <path>] [--json]
91
+ npx workspai agent framework apply --change <change-id> --project <name> --runtime <python|dotnet|node> [--framework <id>] [--workspace <path>] [--json]
90
92
  ```
91
93
 
92
94
  Recommended CI:
@@ -275,16 +277,25 @@ Blocked receipts exit `2`; strict mode also maps degraded evidence to exit `2`.
275
277
  See [Canonical-first agent entry](./agent-entry.md).
276
278
 
277
279
  `agent framework` is the governed bridge between Workspai evidence and an
278
- agent runtime. `list` exposes only exact release-admitted baselines: Python
279
- `1.18.0` and .NET `1.21.0` in this CLI version. `plan` creates or reuses a
280
- scoped Goal, begins a Proof-Carrying Change, and attaches a hash-bound file
281
- plan without writing project files. `attach` shows that plan and requires an
280
+ agent runtime. `list` exposes every built-in adapter and its release-admission
281
+ state. In this CLI version Microsoft Python `1.18.0` and .NET `1.21.0` remain
282
+ `preview`. OpenAI Agents SDK Python `0.22.2` and TypeScript `0.18.0` are
283
+ labeled `stable`. Create and Attach require the reviewed v2 release inventory,
284
+ whose manifest, framework baseline, runtime, and platform claims were promoted
285
+ from the Linux, macOS, and Windows release matrix. Semantic implementation
286
+ digests remain audit provenance rather than runtime authorization. `plan`
287
+ creates or reuses a scoped Goal, begins a Proof-Carrying Change, and
288
+ attaches a hash-bound file plan without writing project files. `--runtime`
289
+ selects `python`, `dotnet`, or `node`. `--framework` selects the independent
290
+ framework id when more than one admitted adapter shares that runtime.
291
+ `attach` shows that plan and requires an
282
292
  interactive confirmation or explicit `--yes` before granting the filesystem
283
293
  effect and writing an isolated `agents/<name>` directory. `create project
284
294
  agent.microsoft.python|dotnet` uses the same admitted lifecycle for a new
285
295
  project: it registers the project, plans against a Model baseline, writes the
286
296
  nested runtime, then re-observes Model/Graph before it claims Intelligence is
287
- sealed. Dependency installation, credentials, generated-code execution, and
297
+ sealed. `create project agent.openai.python|typescript` uses the same admitted
298
+ lifecycle. Dependency installation, credentials, generated-code execution, and
288
299
  model provider calls are never implied by that approval. `apply` is the
289
300
  automation counterpart for a plan that was separately authorized with
290
301
  `change authorize`. Any adapter, version, manifest, runtime, or platform drift
@@ -22,6 +22,7 @@ Native create is reserved for Workspai-owned kits with deterministic contracts:
22
22
  - Spring Boot
23
23
  - ASP.NET Core Web API
24
24
  - Rust / Axum
25
+ - OpenRouter AI Gateway (TypeScript and Python)
25
26
 
26
27
  These kits can be exposed through `workspai create project` because Workspai can
27
28
  create the project and immediately produce the expected `.workspai` metadata,
@@ -16,9 +16,9 @@ For a compact list of command syntax, see
16
16
  A **workspace** is the shared home for related projects, rules, and saved
17
17
  Workspai reports.
18
18
 
19
- A **project** is an application, service, or governed agent, such as a FastAPI
20
- API, Go service, Spring Boot service, .NET API, frontend application, or
21
- Microsoft Agent Framework entrypoint.
19
+ A **project** is an application, service, governed agent, or model gateway, such as a FastAPI
20
+ API, Go service, Spring Boot service, .NET API, frontend application,
21
+ Microsoft Agent Framework entrypoint, or OpenRouter AI Gateway.
22
22
 
23
23
  The canonical commands are:
24
24
 
@@ -42,6 +42,7 @@ does not have exactly the same behavior.
42
42
  | Turn the current folder into a workspace before creating | `npx workspai create project gofiber.standard api --create-workspace --yes` |
43
43
  | Create a project without workspace management | `npx workspai create project gofiber.standard api --no-workspace --yes` |
44
44
  | Create a governed Microsoft Agent Framework project | `npx workspai create project agent.microsoft.python support-agent` |
45
+ | Create a server-owned OpenRouter AI Gateway | `npx workspai create project gateway.openrouter.typescript model-gateway` |
45
46
  | Preview a supported create plan | `npx workspai create project frontend.nextjs web --dry-run` |
46
47
 
47
48
  # Creating a workspace
@@ -394,9 +395,11 @@ project metadata and performs the selected workspace registration.
394
395
  | ------------------------ | ------- | --------------- | ------ |
395
396
  | `agent.microsoft.python` | Python | `agent-framework-core` `1.18.0`, Foundry `1.13.0`, `azure-identity` `1.25.3` | Isolated `agents/<instance>/` with `pyproject.toml`, credentialless `unittest`, and `.env.example` |
396
397
  | `agent.microsoft.dotnet` | .NET | `Microsoft.Agents.AI` `1.21.0`, Foundry `1.21.0-preview.260911.1` | Isolated `agents/<instance>/` with the executable project plus a dedicated test project |
398
+ | `agent.openai.python` | Python | `openai-agents` `0.22.2` | Isolated `agents/<instance>/` with pip-editable `pyproject.toml`, credentialless `unittest`, and `.env.example` |
399
+ | `agent.openai.typescript` | Node.js | `@openai/agents` `0.18.0`, `zod` `4.6.5` | Isolated `agents/<instance>/` with `package.json`, credentialless `node:test`, and `.env.example` |
397
400
 
398
- Interactive `workspai create` shows these kits under **AI Agent** only after
399
- release admission. Agent kits require Workspace governance and therefore do not
401
+ Interactive `workspai create` shows these kits under **AI Agent** after
402
+ reviewed release admission. Agent kits require Workspace governance and therefore do not
400
403
  accept `--no-workspace`. Optional `--agent-name` names the instance directory
401
404
  (default `primary`). They do not install dependencies, call a model, or store
402
405
  credentials. Exact versions are promoted only after the full Linux, macOS, and
@@ -416,6 +419,21 @@ npx workspai change verify --change <change-id> --json
416
419
  independent proof for this scaffold. See
417
420
  [Agent Framework Adapter Contract](./agent-framework-adapters.md).
418
421
 
422
+ ## AI Gateway kits
423
+
424
+ | Kit | Runtime | Tested baseline | Layout |
425
+ | --- | --- | --- | --- |
426
+ | `gateway.openrouter.typescript` | Node.js | `@openrouter/sdk` `1.3.11`, TypeScript `5.9.3`, `@types/node` `22.20.3` | Server-owned OpenRouter Client SDK starter with `gateway.policy.json`, credentialless `node:test`, and `.env.example` |
427
+ | `gateway.openrouter.python` | Python | `openrouter` `1.2.11` | Server-owned OpenRouter Client SDK starter with `gateway.policy.json`, credentialless `unittest`, and `.env.example` |
428
+
429
+ Interactive `workspai create` shows these kits under **AI Gateway** with the
430
+ hint **Unified model access and routing**. A model identifier is runtime
431
+ configuration, not a kit. Create does not install dependencies, call a model,
432
+ or store credentials. Attach is not supported for Gateway in this release.
433
+ The official Go Client SDK remains beta (`v0.8.11` on
434
+ 2026-09-21) and is not admitted. See
435
+ [AI Gateway](./model-gateways.md).
436
+
419
437
  ## Desktop, extension, and additional backend generators
420
438
 
421
439
  | Category | Project | Kit | Creation owner |
@@ -426,10 +444,11 @@ independent proof for this scaffold. See
426
444
  | Desktop | Electron Forge | `desktop.electron` | create-electron-app |
427
445
  | Extension | VS Code Extension | `extension.vscode` | generator-code |
428
446
 
429
- Every generated project receives a canonical `kind` and `category`. The five
430
- user-facing creation categories are `backend`, `frontend`, `desktop`, `agent`, and `extension`;
431
- they remain visible in the Workspace Model and Knowledge Graph so consumers do
432
- not have to guess a project’s role from its runtime.
447
+ Every generated project receives a canonical `kind` and `category`. The
448
+ user-facing creation categories are `backend`, `frontend`, `desktop`, `agent`,
449
+ `gateway`, and `extension`; they remain visible in the Workspace Model and
450
+ Knowledge Graph so consumers do not have to guess a project’s role from its
451
+ runtime.
433
452
 
434
453
  Official generators may download packages and therefore need network access.
435
454
  Each available integration requests the upstream latest stable channel rather
@@ -775,10 +775,15 @@ These fields are designed for release gates and extension timeline cards that mu
775
775
  - Supports Workspai, legacy RapidKit, and non-Workspai projects when project metadata is missing.
776
776
  - Evidence: `.workspai/reports/doctor-project-last-run.json`.
777
777
  - `--fix`, `--plan`, and `--apply` apply only project-scoped fixes.
778
- - Governed Microsoft Agent Framework projects keep `kind`/`framework` as `agent` /
779
- `microsoft-agent-framework`. Doctor discovers nested environment examples and
780
- dependency manifests under `agents/primary` and aims Python/`uv` or .NET
781
- repair commands at that runtime, not at a phantom project-root manifest.
778
+ - Governed Microsoft Agent Framework and OpenAI Agents SDK projects keep
779
+ `kind` as `agent`. Microsoft retains `microsoft-agent-framework`; OpenAI
780
+ retains `openai-agents`. Doctor discovers nested environment examples and
781
+ dependency manifests under `agents/primary` and aims Python/`uv`, Node
782
+ `npm --prefix`, or .NET repair commands at that runtime, not at a phantom
783
+ project-root manifest.
784
+ - OpenRouter AI Gateway projects keep `kind` as `gateway` and `framework` as
785
+ `openrouter`. Doctor uses the project-root Node or Python runtime, not the
786
+ Agent Framework nested layout.
782
787
 
783
788
  ## Project JSON fields (AI/automation)
784
789