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.
- package/README.md +2 -2
- package/contracts/agent-framework-capabilities.v1.json +2 -2
- package/contracts/cli-runtime-command-inventory.v1.snapshot.json +12 -0
- package/contracts/create-planner-capabilities.v1.json +48 -0
- package/contracts/extension-cli-compatibility.v1.json +4 -2
- package/contracts/published-contract-catalog.v1.json +10 -0
- package/contracts/runtime-command-surface.v1.json +5 -1
- package/contracts/workspace-intelligence/agent-framework-admission-candidate.v2.json +217 -0
- package/contracts/workspace-intelligence/agent-framework-conformance-report.v2.json +274 -0
- package/contracts/workspace-intelligence/workspace-model.v1.json +4 -0
- package/contracts/workspace-intelligence-architecture.v1.json +7 -3
- package/dist/analyze-TJM66CPF.js +1 -0
- package/dist/autopilot-release-C7Q4OTPY.js +1 -0
- package/dist/capabilities-command-TIBIKWPK.js +1 -0
- package/dist/{chunk-K52IQX3J.js → chunk-223SWPTL.js} +1 -1
- package/dist/chunk-3EMAC3MF.js +4 -0
- package/dist/{chunk-GDOO2YZW.js → chunk-3EPR3D5Q.js} +1 -1
- package/dist/chunk-3SQIV3F4.js +1 -0
- package/dist/{chunk-ZI54C2AO.js → chunk-475GQJ2D.js} +1 -1
- package/dist/{chunk-P36TACKN.js → chunk-47UR6ZH4.js} +1 -1
- package/dist/{chunk-VHMDWRDG.js → chunk-4BPZJR4Z.js} +4 -4
- package/dist/{chunk-VWBWDDU2.js → chunk-4CXV3PPV.js} +1 -1
- package/dist/chunk-4ZUBPFSO.js +6 -0
- package/dist/chunk-5KXOV7W4.js +1 -0
- package/dist/chunk-6BO4QHKA.js +1 -0
- package/dist/{chunk-OA2YJN22.js → chunk-DWDYLKVW.js} +1 -1
- package/dist/{chunk-KDVNRNDU.js → chunk-DWKCFHHL.js} +1 -1
- package/dist/{chunk-EP7SUMAX.js → chunk-E7WJ2QX7.js} +1 -1
- package/dist/{chunk-FNVWDXK2.js → chunk-GLBFY7AB.js} +5 -5
- package/dist/{chunk-ZGVODK5C.js → chunk-HRVHQBTA.js} +1 -1
- package/dist/{chunk-WHBKKJ7L.js → chunk-IAXRGH4Q.js} +1 -1
- package/dist/chunk-IDETNYCF.js +1 -0
- package/dist/chunk-IHWS3ALP.js +2 -0
- package/dist/{chunk-FZWLWFR4.js → chunk-J2MPBSQJ.js} +1 -1
- package/dist/{chunk-PFAGXI3G.js → chunk-JVZA35OL.js} +1 -1
- package/dist/chunk-LUPKDFQ3.js +7 -0
- package/dist/chunk-N7DOKE7V.js +2 -0
- package/dist/chunk-O3TVVQ6X.js +6 -0
- package/dist/chunk-P5LI5DL3.js +1 -0
- package/dist/{chunk-4JXJRIJM.js → chunk-QCX6BO2M.js} +1 -1
- package/dist/chunk-SC43A6LH.js +97 -0
- package/dist/chunk-SEZTSMRR.js +1 -0
- package/dist/{chunk-COOVCORC.js → chunk-SVO2GGTV.js} +1 -1
- package/dist/{chunk-5K4O3TAW.js → chunk-TGNPMOM6.js} +1 -1
- package/dist/chunk-UNEK3VVR.js +2684 -0
- package/dist/{chunk-IKBE3HOH.js → chunk-UP3UWAJV.js} +1 -1
- package/dist/{chunk-LFY7KTPD.js → chunk-UTIK3K3M.js} +1 -1
- package/dist/{chunk-WXUCAVFT.js → chunk-V6HVDVKJ.js} +8 -8
- package/dist/chunk-WC2K5QFI.js +10 -0
- package/dist/{chunk-DTNOF3MP.js → chunk-X5XFT5UZ.js} +1 -1
- package/dist/{chunk-ADHX7D3F.js → chunk-ZIWWE4BQ.js} +1 -1
- package/dist/{create-ZFSFWAW3.js → create-YPAZJYCE.js} +1 -1
- package/dist/{doctor-4KL4XUCS.js → doctor-W5PXJ5FL.js} +1 -1
- package/dist/{goal-lifecycle-EXQZD7IA.js → goal-lifecycle-5R55CA7H.js} +1 -1
- package/dist/{goal-pack-DKJU2DEP.js → goal-pack-IS6GGJPH.js} +1 -1
- package/dist/index.d.ts +12 -6
- package/dist/index.js +181 -171
- package/dist/{pipeline-4GVAOCEN.js → pipeline-LW3SW2WT.js} +1 -1
- package/dist/platform-capabilities-RWOWND5Q.js +1 -0
- package/dist/{project-agent-entry-7QKNEEXP.js → project-agent-entry-5TYKK5IV.js} +1 -1
- package/dist/{project-intelligence-lens-IHRYCLNU.js → project-intelligence-lens-TEOSTKNU.js} +1 -1
- package/dist/{project-test-coverage-3P5FH6E5.js → project-test-coverage-T4TIWGKN.js} +1 -1
- package/dist/proof-carrying-change-2TKRADCW.js +1 -0
- package/dist/{pythonRapidkitExec-UMFLDIYR.js → pythonRapidkitExec-S35OEIEF.js} +1 -1
- package/dist/{verified-goal-XI4RQESU.js → verified-goal-RN4TOV34.js} +1 -1
- package/dist/{workspace-EYXAKMVI.js → workspace-A33YMF2N.js} +1 -1
- package/dist/{workspace-agent-sync-SN55KT6N.js → workspace-agent-sync-VCA4G4DT.js} +1 -1
- package/dist/{workspace-context-PW6ESEHH.js → workspace-context-YBWLSKR6.js} +1 -1
- package/dist/{workspace-contract-FPLFL4G3.js → workspace-contract-3QUZDBMM.js} +1 -1
- package/dist/{workspace-explain-TVQ5IF5D.js → workspace-explain-NXYRAQFI.js} +1 -1
- package/dist/{workspace-foundation-DWIJPZRH.js → workspace-foundation-DZ52PECX.js} +1 -1
- package/dist/{workspace-graph-stream-RUTNWLQB.js → workspace-graph-stream-4VT46HZ7.js} +1 -1
- package/dist/{workspace-intelligence-4CA2CSPZ.js → workspace-intelligence-FKYQQDJ6.js} +1 -1
- package/dist/{workspace-intelligence-runner-VM5SXXAT.js → workspace-intelligence-runner-3K2JZH6Q.js} +1 -1
- package/dist/{workspace-knowledge-graph-JXN2ZOAF.js → workspace-knowledge-graph-CPBKNXQI.js} +1 -1
- package/dist/workspace-knowledge-graph-snapshot-67XDXUOT.js +1 -0
- package/dist/{workspace-mcp-serve-4WN4CSD7.js → workspace-mcp-serve-UXPKX7K6.js} +1 -1
- package/dist/{workspace-model-D4IECQML.js → workspace-model-POCPMNRT.js} +1 -1
- package/dist/{workspace-onboarding-6XWDKLM5.js → workspace-onboarding-KLG3GG7S.js} +1 -1
- package/dist/{workspace-registry-summary-Y3ET36NH.js → workspace-registry-summary-M4WMFDQ4.js} +1 -1
- package/dist/{workspace-repair-engine-HBUXRHDY.js → workspace-repair-engine-2VGN42QD.js} +1 -1
- package/dist/workspace-run-5YQR7GEZ.js +1 -0
- package/dist/{workspace-verify-OOAZ3NMZ.js → workspace-verify-PLAKTF3J.js} +1 -1
- package/dist/{workspace-watch-BNM5B6HU.js → workspace-watch-VNU4KVYN.js} +1 -1
- package/docs/README.md +4 -2
- package/docs/agent-framework-adapters.md +168 -39
- package/docs/ci-workflows.md +40 -22
- package/docs/commands-reference.md +19 -8
- package/docs/create-planner-capabilities.md +1 -0
- package/docs/creating-workspaces-and-projects.md +28 -9
- package/docs/doctor-command.md +9 -4
- package/docs/model-gateways.md +204 -0
- package/docs/native-kit-baselines.md +4 -2
- package/docs/workspace-run.md +3 -1
- package/package.json +5 -1
- package/scripts/enterprise-package-smoke.mjs +200 -5
- package/dist/analyze-6UEBC5OJ.js +0 -1
- package/dist/autopilot-release-H5TO6NYY.js +0 -1
- package/dist/capabilities-command-VK3LQLP2.js +0 -1
- package/dist/chunk-3N27P3KO.js +0 -7
- package/dist/chunk-3RNWBFRP.js +0 -4
- package/dist/chunk-66O62XNJ.js +0 -97
- package/dist/chunk-7NKM6EHE.js +0 -7
- package/dist/chunk-BR6QIYQS.js +0 -1
- package/dist/chunk-DFREJHG7.js +0 -1
- package/dist/chunk-E42IFQFR.js +0 -6
- package/dist/chunk-EWD6QTAM.js +0 -2
- package/dist/chunk-G5UCEXP6.js +0 -1
- package/dist/chunk-JKAAKE4Z.js +0 -6
- package/dist/chunk-LARREYZN.js +0 -1
- package/dist/chunk-RGNCL5OB.js +0 -1
- package/dist/chunk-SZHRPELL.js +0 -1
- package/dist/chunk-VXFIMEC6.js +0 -2
- package/dist/chunk-X7OI24LO.js +0 -418
- package/dist/platform-capabilities-DB4BZPTD.js +0 -1
- package/dist/proof-carrying-change-O37XUPIZ.js +0 -1
- package/dist/workspace-knowledge-graph-snapshot-KBNUXA64.js +0 -1
- 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
|
|
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
|
|
19
|
-
manifest
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
|
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
|
|
156
|
-
|
|
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
|
|
211
|
-
Agent** category
|
|
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.
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
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.
|
|
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
|
|
297
|
-
|
|
298
|
-
|
|
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.
|
package/docs/ci-workflows.md
CHANGED
|
@@ -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
|
|
8
|
-
|
|
|
9
|
-
| Build / test matrix
|
|
10
|
-
| Workspace E2E matrix
|
|
11
|
-
| Windows bridge E2E
|
|
12
|
-
| E2E smoke
|
|
13
|
-
| Official generator smoke
|
|
14
|
-
| Agent Framework matrix
|
|
15
|
-
| Agent Framework discovery| `.github/workflows/agent-framework-version-discovery.yml` | Weekly PyPI/NuGet candidate report; no commit, PR, or contract rewrite
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
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
|
|
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.
|
|
28
|
-
still has to pass `agent-framework-conformance` on
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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.
|
|
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
|
|
279
|
-
`1.18.0` and .NET `1.21.0`
|
|
280
|
-
|
|
281
|
-
|
|
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.
|
|
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,
|
|
20
|
-
API, Go service, Spring Boot service, .NET API, frontend application,
|
|
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**
|
|
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
|
|
430
|
-
user-facing creation categories are `backend`, `frontend`, `desktop`, `agent`,
|
|
431
|
-
they remain visible in the Workspace Model and
|
|
432
|
-
not have to guess a project’s role from its
|
|
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
|
package/docs/doctor-command.md
CHANGED
|
@@ -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
|
|
779
|
-
`microsoft-agent-framework
|
|
780
|
-
|
|
781
|
-
|
|
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
|
|