stable-harness 0.0.140 → 0.0.144

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 (210) hide show
  1. package/README.md +30 -17
  2. package/dist/index.js +1 -1
  3. package/dist/runtime/skills/skill-metadata.js +1 -1
  4. package/dist/workspace/compile.js +1 -1
  5. package/docs/0.1.0-tool-guard-benchmark.zh.md +5 -5
  6. package/docs/architecture/system-architecture.zh.md +3 -3
  7. package/docs/evaluation/0.1.0-bfcl-targeted-model-matrix.zh.md +306 -306
  8. package/docs/evaluation/0.1.0-bfcl-targeted-review-matrix.zh.md +1 -1
  9. package/docs/evaluation/0.1.0-bfcl-tool-guard.zh.md +1 -1
  10. package/docs/granite-tool-calling-comparison.zh.md +8 -8
  11. package/docs/guides/getting-started.md +14 -6
  12. package/docs/guides/index.md +5 -3
  13. package/docs/guides/integration-guide.md +44 -43
  14. package/docs/guides/operator-runbook.md +51 -3
  15. package/docs/guides/runtime-governance-proof.md +4 -4
  16. package/docs/guides/workspace-authoring.md +2 -2
  17. package/docs/guides/workspace-docker-build.md +3 -3
  18. package/docs/memory/0.1.0-memory-design.zh.md +20 -0
  19. package/docs/memory/0.1.0-step-09-deepagents-native-memory.zh.md +1 -1
  20. package/docs/memory/0.1.0-step-09-langmem-shaped-provider.zh.md +1 -1
  21. package/docs/memory/0.1.0-step-09-memory-adapter-projection.zh.md +3 -3
  22. package/docs/memory/0.1.0-step-09-memory-contract.zh.md +1 -1
  23. package/docs/memory/0.1.0-step-09-memory-governance-approval.zh.md +1 -1
  24. package/docs/memory/0.1.0-step-09-memory-lifecycle-hooks.zh.md +1 -1
  25. package/docs/memory/0.1.0-step-09-memory-maintenance-boundary.zh.md +1 -1
  26. package/docs/memory/0.1.0-step-09-memory-persistence-boundary.zh.md +1 -1
  27. package/docs/protocols/coverage-matrix.md +114 -0
  28. package/docs/protocols/http-runtime.md +31 -8
  29. package/docs/protocols/langgraph-compatible.md +75 -17
  30. package/docs/protocols/openai-compatible.md +25 -7
  31. package/docs/protocols/{agent-protocols.md → protocol-facades.md} +76 -18
  32. package/node_modules/@stable-harness/adapter-deepagents/dist/src/adapter.js +1 -1
  33. package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/builtin/task-inventory.js +1 -1
  34. package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/builtin-call-repair.js +1 -1
  35. package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/builtin-tool-policy.js +1 -1
  36. package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/gateway/tool-failure-events.js +1 -1
  37. package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/raw-tool-call-parser.js +1 -1
  38. package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/stream-events.js +1 -1
  39. package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/substrate/checkpoint.js +1 -1
  40. package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/tool-repeat-visibility.js +1 -1
  41. package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/trace-projection.js +1 -1
  42. package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/vfs-backend.js +1 -1
  43. package/node_modules/@stable-harness/adapter-deepagents/package.json +2 -2
  44. package/node_modules/@stable-harness/adapter-langgraph/dist/src/graph.js +1 -1
  45. package/node_modules/@stable-harness/adapter-langgraph/dist/src/index.js +1 -1
  46. package/node_modules/@stable-harness/adapter-langgraph/dist/src/runtime.js +1 -1
  47. package/node_modules/@stable-harness/adapter-langgraph/dist/src/skill-providers.js +1 -1
  48. package/node_modules/@stable-harness/adapter-langgraph/dist/src/types.d.ts +1 -0
  49. package/node_modules/@stable-harness/adapter-langgraph/package.json +2 -2
  50. package/node_modules/@stable-harness/core/dist/boundary-scan.js +1 -1
  51. package/node_modules/@stable-harness/core/dist/index.d.ts +1 -0
  52. package/node_modules/@stable-harness/core/dist/index.js +1 -1
  53. package/node_modules/@stable-harness/core/dist/memory-plugins/shared.js +1 -1
  54. package/node_modules/@stable-harness/core/dist/memory-plugins.js +1 -1
  55. package/node_modules/@stable-harness/core/dist/quality/event-evidence.js +1 -1
  56. package/node_modules/@stable-harness/core/dist/quality/execution-review.js +1 -1
  57. package/node_modules/@stable-harness/core/dist/quality/synthesis/fields.js +1 -1
  58. package/node_modules/@stable-harness/core/dist/recovery/execution-contract.js +1 -1
  59. package/node_modules/@stable-harness/core/dist/recovery/tool-call-structure.js +1 -1
  60. package/node_modules/@stable-harness/core/dist/recovery/tool-call.js +1 -1
  61. package/node_modules/@stable-harness/core/dist/runtime/direct-tool-call.js +1 -1
  62. package/node_modules/@stable-harness/core/dist/runtime/inspection/methods.js +1 -1
  63. package/node_modules/@stable-harness/core/dist/runtime/inspection/replay.js +1 -1
  64. package/node_modules/@stable-harness/core/dist/runtime/persistence/artifacts.d.ts +4 -0
  65. package/node_modules/@stable-harness/core/dist/runtime/persistence/artifacts.js +1 -1
  66. package/node_modules/@stable-harness/core/dist/runtime/persistence/queue.d.ts +1 -0
  67. package/node_modules/@stable-harness/core/dist/runtime/persistence/queue.js +1 -1
  68. package/node_modules/@stable-harness/core/dist/runtime/persistence/stores.d.ts +1 -0
  69. package/node_modules/@stable-harness/core/dist/runtime/persistence/stores.js +1 -1
  70. package/node_modules/@stable-harness/core/dist/runtime/persistence/system-data.d.ts +34 -0
  71. package/node_modules/@stable-harness/core/dist/runtime/persistence/system-data.js +1 -0
  72. package/node_modules/@stable-harness/core/dist/runtime/recovery/adapter-result.js +1 -1
  73. package/node_modules/@stable-harness/core/dist/runtime/recovery/non-focused-recovery.js +1 -1
  74. package/node_modules/@stable-harness/core/dist/runtime.js +1 -1
  75. package/node_modules/@stable-harness/core/dist/workflows/index.d.ts +20 -0
  76. package/node_modules/@stable-harness/core/dist/workflows/index.js +1 -1
  77. package/node_modules/@stable-harness/core/package.json +3 -3
  78. package/node_modules/@stable-harness/governance/dist/src/approval-queue.d.ts +1 -0
  79. package/node_modules/@stable-harness/governance/dist/src/approval-queue.js +1 -1
  80. package/node_modules/@stable-harness/governance/dist/src/index.d.ts +1 -1
  81. package/node_modules/@stable-harness/governance/dist/src/index.js +1 -1
  82. package/node_modules/@stable-harness/governance/package.json +1 -1
  83. package/node_modules/@stable-harness/memory/package.json +1 -1
  84. package/node_modules/@stable-harness/protocols/dist/src/http-events.d.ts +2 -0
  85. package/node_modules/@stable-harness/protocols/dist/src/http-events.js +1 -1
  86. package/node_modules/@stable-harness/protocols/dist/src/http-server.d.ts +5 -1
  87. package/node_modules/@stable-harness/protocols/dist/src/http-server.js +1 -1
  88. package/node_modules/@stable-harness/protocols/dist/src/index.d.ts +3 -3
  89. package/node_modules/@stable-harness/protocols/dist/src/index.js +1 -1
  90. package/node_modules/@stable-harness/protocols/dist/src/openai-compatible.js +1 -1
  91. package/node_modules/@stable-harness/protocols/dist/src/openai-payload.d.ts +89 -0
  92. package/node_modules/@stable-harness/protocols/dist/src/openai-payload.js +1 -1
  93. package/node_modules/@stable-harness/protocols/dist/src/{agent-protocols.d.ts → protocol-facades.d.ts} +4 -10
  94. package/node_modules/@stable-harness/protocols/dist/src/protocol-facades.js +1 -0
  95. package/node_modules/@stable-harness/protocols/dist/src/protocol-utils.d.ts +505 -0
  96. package/node_modules/@stable-harness/protocols/dist/src/protocol-utils.js +1 -0
  97. package/node_modules/@stable-harness/protocols/package.json +2 -2
  98. package/node_modules/@stable-harness/tool-gateway/dist/src/argument-guard.js +1 -1
  99. package/node_modules/@stable-harness/tool-gateway/dist/src/schema-validation.js +1 -1
  100. package/node_modules/@stable-harness/tool-gateway/package.json +1 -1
  101. package/node_modules/@stable-harness/workspace-yaml/dist/boundary-scan.js +1 -1
  102. package/node_modules/@stable-harness/workspace-yaml/dist/discovery.js +1 -1
  103. package/node_modules/@stable-harness/workspace-yaml/dist/documents.js +1 -1
  104. package/node_modules/@stable-harness/workspace-yaml/dist/loader.js +1 -1
  105. package/node_modules/@stable-harness/workspace-yaml/dist/workflows.js +1 -1
  106. package/node_modules/@stable-harness/workspace-yaml/package.json +2 -2
  107. package/package.json +12 -11
  108. package/packages/adapter-deepagents/dist/src/adapter.js +1 -1
  109. package/packages/adapter-deepagents/dist/src/internal/builtin/task-inventory.js +1 -1
  110. package/packages/adapter-deepagents/dist/src/internal/builtin-call-repair.js +1 -1
  111. package/packages/adapter-deepagents/dist/src/internal/builtin-tool-policy.js +1 -1
  112. package/packages/adapter-deepagents/dist/src/internal/gateway/tool-failure-events.js +1 -1
  113. package/packages/adapter-deepagents/dist/src/internal/raw-tool-call-parser.js +1 -1
  114. package/packages/adapter-deepagents/dist/src/internal/stream-events.js +1 -1
  115. package/packages/adapter-deepagents/dist/src/internal/substrate/checkpoint.js +1 -1
  116. package/packages/adapter-deepagents/dist/src/internal/tool-repeat-visibility.js +1 -1
  117. package/packages/adapter-deepagents/dist/src/internal/trace-projection.js +1 -1
  118. package/packages/adapter-deepagents/dist/src/internal/vfs-backend.js +1 -1
  119. package/packages/adapter-deepagents/package.json +2 -2
  120. package/packages/adapter-langgraph/dist/src/graph.js +1 -1
  121. package/packages/adapter-langgraph/dist/src/index.js +1 -1
  122. package/packages/adapter-langgraph/dist/src/runtime.js +1 -1
  123. package/packages/adapter-langgraph/dist/src/skill-providers.js +1 -1
  124. package/packages/adapter-langgraph/dist/src/types.d.ts +1 -0
  125. package/packages/adapter-langgraph/package.json +2 -2
  126. package/packages/cli/dist/src/args.d.ts +3 -2
  127. package/packages/cli/dist/src/args.js +1 -1
  128. package/packages/cli/dist/src/build.js +1 -1
  129. package/packages/cli/dist/src/cli.js +1 -1
  130. package/packages/cli/dist/src/console/session.js +1 -1
  131. package/packages/cli/dist/src/daemon/client.d.ts +4 -3
  132. package/packages/cli/dist/src/daemon/client.js +1 -1
  133. package/packages/cli/dist/src/init.js +1 -1
  134. package/packages/cli/dist/src/langgraph/agent-server-compat.d.ts +8 -0
  135. package/packages/cli/dist/src/langgraph/agent-server-compat.js +1 -0
  136. package/packages/cli/dist/src/langgraph/store-projection.d.ts +1 -0
  137. package/packages/cli/dist/src/langgraph/store-projection.js +1 -0
  138. package/packages/cli/dist/src/langgraph-official.js +1 -1
  139. package/packages/cli/dist/src/memory/providers.js +1 -1
  140. package/packages/cli/dist/src/server/gateway.d.ts +12 -0
  141. package/packages/cli/dist/src/server/gateway.js +1 -0
  142. package/packages/cli/dist/src/server/protocol-defaults.d.ts +7 -0
  143. package/packages/cli/dist/src/server/protocol-defaults.js +1 -0
  144. package/packages/cli/dist/src/server/studio.d.ts +1 -0
  145. package/packages/cli/dist/src/server/studio.js +1 -0
  146. package/packages/cli/dist/src/server.js +1 -1
  147. package/packages/cli/package.json +8 -8
  148. package/packages/core/dist/boundary-scan.js +1 -1
  149. package/packages/core/dist/index.d.ts +1 -0
  150. package/packages/core/dist/index.js +1 -1
  151. package/packages/core/dist/memory-plugins/shared.js +1 -1
  152. package/packages/core/dist/memory-plugins.js +1 -1
  153. package/packages/core/dist/quality/event-evidence.js +1 -1
  154. package/packages/core/dist/quality/execution-review.js +1 -1
  155. package/packages/core/dist/quality/synthesis/fields.js +1 -1
  156. package/packages/core/dist/recovery/execution-contract.js +1 -1
  157. package/packages/core/dist/recovery/tool-call-structure.js +1 -1
  158. package/packages/core/dist/recovery/tool-call.js +1 -1
  159. package/packages/core/dist/runtime/direct-tool-call.js +1 -1
  160. package/packages/core/dist/runtime/inspection/methods.js +1 -1
  161. package/packages/core/dist/runtime/inspection/replay.js +1 -1
  162. package/packages/core/dist/runtime/persistence/artifacts.d.ts +4 -0
  163. package/packages/core/dist/runtime/persistence/artifacts.js +1 -1
  164. package/packages/core/dist/runtime/persistence/queue.d.ts +1 -0
  165. package/packages/core/dist/runtime/persistence/queue.js +1 -1
  166. package/packages/core/dist/runtime/persistence/stores.d.ts +1 -0
  167. package/packages/core/dist/runtime/persistence/stores.js +1 -1
  168. package/packages/core/dist/runtime/persistence/system-data.d.ts +34 -0
  169. package/packages/core/dist/runtime/persistence/system-data.js +1 -0
  170. package/packages/core/dist/runtime/recovery/adapter-result.js +1 -1
  171. package/packages/core/dist/runtime/recovery/non-focused-recovery.js +1 -1
  172. package/packages/core/dist/runtime.js +1 -1
  173. package/packages/core/dist/workflows/index.d.ts +20 -0
  174. package/packages/core/dist/workflows/index.js +1 -1
  175. package/packages/core/package.json +3 -3
  176. package/packages/evaluation/dist/src/benchmark.js +1 -1
  177. package/packages/evaluation/dist/src/run-record.js +1 -1
  178. package/packages/evaluation/dist/src/tool-call-metrics.js +1 -1
  179. package/packages/evaluation/package.json +2 -2
  180. package/packages/governance/dist/src/approval-queue.d.ts +1 -0
  181. package/packages/governance/dist/src/approval-queue.js +1 -1
  182. package/packages/governance/dist/src/index.d.ts +1 -1
  183. package/packages/governance/dist/src/index.js +1 -1
  184. package/packages/governance/package.json +1 -1
  185. package/packages/memory/package.json +1 -1
  186. package/packages/protocols/dist/src/http-events.d.ts +2 -0
  187. package/packages/protocols/dist/src/http-events.js +1 -1
  188. package/packages/protocols/dist/src/http-server.d.ts +5 -1
  189. package/packages/protocols/dist/src/http-server.js +1 -1
  190. package/packages/protocols/dist/src/index.d.ts +3 -3
  191. package/packages/protocols/dist/src/index.js +1 -1
  192. package/packages/protocols/dist/src/openai-compatible.js +1 -1
  193. package/packages/protocols/dist/src/openai-payload.d.ts +89 -0
  194. package/packages/protocols/dist/src/openai-payload.js +1 -1
  195. package/packages/protocols/dist/src/{agent-protocols.d.ts → protocol-facades.d.ts} +4 -10
  196. package/packages/protocols/dist/src/protocol-facades.js +1 -0
  197. package/packages/protocols/dist/src/protocol-utils.d.ts +505 -0
  198. package/packages/protocols/dist/src/protocol-utils.js +1 -0
  199. package/packages/protocols/package.json +2 -2
  200. package/packages/tool-gateway/dist/src/argument-guard.js +1 -1
  201. package/packages/tool-gateway/dist/src/schema-validation.js +1 -1
  202. package/packages/tool-gateway/package.json +1 -1
  203. package/packages/workspace-yaml/dist/boundary-scan.js +1 -1
  204. package/packages/workspace-yaml/dist/discovery.js +1 -1
  205. package/packages/workspace-yaml/dist/documents.js +1 -1
  206. package/packages/workspace-yaml/dist/loader.js +1 -1
  207. package/packages/workspace-yaml/dist/workflows.js +1 -1
  208. package/packages/workspace-yaml/package.json +2 -2
  209. package/node_modules/@stable-harness/protocols/dist/src/agent-protocols.js +0 -1
  210. package/packages/protocols/dist/src/agent-protocols.js +0 -1
@@ -0,0 +1,114 @@
1
+ # Protocol Feature Coverage Matrix
2
+
3
+ This page is the side-by-side support contract for Stable Harness protocols.
4
+ It shows which runtime features and APIs are available through each protocol,
5
+ where support is native, and where a protocol cannot expose the full Stable
6
+ Runtime control-plane feature.
7
+
8
+ The Stable Harness gateway is the public API entry point. It listens on
9
+ `http://127.0.0.1:56789` by default, exposes first-party runtime APIs at
10
+ `/runtime/v1`, and groups external protocol-compatible surfaces under
11
+ `/protocols/*`.
12
+
13
+ ## Legend
14
+
15
+ | Status | Meaning |
16
+ | --- | --- |
17
+ | Native | The protocol directly implements this feature with its own endpoint or method. |
18
+ | Bridge | The feature is available through the first-party `/runtime/v1` API. |
19
+ | Extension | Stable Harness exposes the feature through a typed extension field in the protocol payload. |
20
+ | Partial | The protocol exposes a related concept, but not the full Stable Runtime contract. |
21
+ | No | Not supported on that protocol. The reason is listed in the notes. |
22
+
23
+ ## Protocol Entry Points
24
+
25
+ | Protocol surface | Default endpoint | Primary clients | Owner | Notes |
26
+ | --- | --- | --- | --- | --- |
27
+ | Gateway manifest | `http://127.0.0.1:56789/manifest` | Stable Harness Studio, SDKs, operators | Stable Harness | Declares product version, runtime API version, protocol base paths, capabilities, and known limitations. |
28
+ | Protocol index | `http://127.0.0.1:56789/protocols` | Stable Harness Studio, SDKs, operators | Stable Harness | Lists protocol base paths and protocol/path versions. Each protocol also exposes `GET /protocols/<id>/version`. |
29
+ | Stable Runtime HTTP + SSE | `http://127.0.0.1:56789/runtime/v1` | Stable Harness Studio, operator dashboards, SDKs, CLI daemon clients | Stable Harness | Canonical runtime and control-plane API. |
30
+ | OpenAI-compatible | `http://127.0.0.1:56789/protocols/openai/v1` | OpenAI SDK-compatible chat clients | Stable Harness facade | Chat API is OpenAI-shaped; runtime control plane remains `/runtime/v1`. |
31
+ | LangGraph-compatible | `http://127.0.0.1:56789/protocols/langgraph` | LangSmith Studio, LangGraph SDK, LangGraph CLI clients | LangGraph Agent Server | Stable Harness generates the workspace graph and environment; the internal HTTP router is upstream-owned. |
32
+ | MCP | `http://127.0.0.1:56789/protocols/mcp` | MCP streamable HTTP clients | Stable Harness LangGraph facade | Exposes workspace tools, exposed agents, and reachable nested subagents as MCP tools for LangSmith Agent Server compatibility. |
33
+ | ACP | `http://127.0.0.1:56789/protocols/acp` | ACP JSON-RPC clients and `stable-harness acp-stdio` | Stable Harness facade | Prompt/session APIs are native ACP. |
34
+ | A2A | `http://127.0.0.1:56789/protocols/a2a` | A2A JSON-RPC clients | Stable Harness facade | Message/task APIs are native A2A. |
35
+ | AG-UI | `http://127.0.0.1:56789/protocols/ag-ui` | AG-UI clients | Stable Harness facade | Run/event APIs are native AG-UI. |
36
+
37
+ ## System Data Support
38
+
39
+ The protocol APIs read the same daemon control-plane state. `stable-harness
40
+ start` resolves `runtime.dataRoot` and defaults to `.stable-harness`:
41
+
42
+ | Data family | Default location | Source of truth | Protocol visibility |
43
+ | --- | --- | --- | --- |
44
+ | Runs, events, sessions, approvals, queue, recovery intents, artifact metadata | `.stable-harness/control-plane/stable.sqlite` | Stable Harness | Stable Runtime native; protocol facades project the same records where their standards allow it. |
45
+ | Artifact content | `.stable-harness/artifacts/` | Stable Harness | Stable Runtime native; replay and protocol task/run projections include metadata and supported content reads. |
46
+ | LangMem records and vector recall index | `.stable-harness/memory/langmem/langmem.sqlite` | LangMem provider under Stable Harness lifecycle | Stable Runtime memory APIs; other protocols use the Stable Runtime bridge. |
47
+ | DeepAgents checkpoints | `.stable-harness/checkpoints/deepagents.sqlite` | DeepAgents substrate | Used for backend execution lifecycle, not exposed as a protocol data API. |
48
+ | DeepAgents/LangGraph Store | `.stable-harness/store/deepagents.sqlite` | Upstream store substrate | LangGraph-compatible Store can see projected memory/resource files. |
49
+ | LangGraph compatibility files | `.stable-harness/langgraph/` | Generated projection | LangGraph/LangSmith clients load the projection; Stable Harness source of truth remains the runtime stores. |
50
+
51
+ ## Feature Coverage
52
+
53
+ | Feature or API family | Stable Runtime HTTP + SSE | OpenAI-compatible | LangGraph-compatible | ACP | A2A | AG-UI | Notes |
54
+ | --- | --- | --- | --- | --- | --- | --- | --- |
55
+ | Health check | Native `GET /health` | Bridge | Partial | Native plus Bridge | Native plus Bridge | Native plus Bridge | LangGraph has upstream health and info routes, not the Stable Runtime health object. |
56
+ | Workspace inspection | Native `GET /inspect` | Native `/v1/stable-harness/inspect` plus Bridge | Partial | Native `runtime/inspect` plus Bridge | Native `/a2a/inspect` plus Bridge | Native `/ag-ui/inspect` plus Bridge | LangGraph exposes graph and schema metadata; Stable Runtime inventory is first-party on Stable Harness protocol facades. |
57
+ | Submit prompt run | Native `POST /runs` plus `/requests` alias | Native `POST /v1/chat/completions`, `POST /v1/responses` | Native runs and threads | Native `session/prompt` | Native `message:send` and `message:stream` | Native `POST /ag-ui/runs` | All paths execute real Stable Harness workspace requests or upstream graph runs. |
58
+ | Streaming prompt output | Native `GET /events` | Native chat stream plus Bridge | Native upstream run stream | Native protocol stream plus Bridge | Native `message/stream` plus Bridge | Native event stream with tool events plus Bridge | OpenAI streams are scoped to one chat completion; Stable Runtime SSE is the full control-plane event source. |
59
+ | Explicit agent selection | Native `agentId` | Native model-to-agent mapping | Native graph or assistant id | Extension `agentId` | Extension `agentId` | Extension `agentId` | Protocol facades do not infer agents from user prose. |
60
+ | Explicit tool call | Native `toolCall` | Bridge | No | Extension plus Bridge | Extension plus Bridge | Extension plus Bridge | OpenAI client `tools` and `tool_choice` are not replayed as Stable Harness tool calls; use the typed runtime request. |
61
+ | Workflow run | Native `workflow` | Bridge | Partial | Extension plus Bridge | Extension plus Bridge | Extension plus Bridge | LangGraph runs execute graphs; Stable Harness workflow dispatch remains a Stable Runtime request. |
62
+ | Request list, inspect, cancel, delete | Native `/runs/*` plus `/requests/*` alias | Native `/v1/responses/:id`, delete, cancel plus Bridge | Partial | Bridge | Native task list/get/history/cancel plus Bridge | Native AG-UI run state plus Bridge | A2A task APIs now include runtime-backed history; Stable Runtime delete remains bridged. |
63
+ | Session list, delete, and history | Native `/sessions/*` | Bridge | Partial | Native list/load/close plus Bridge | Partial plus Bridge | Partial plus Bridge | ACP sessions, A2A context/task ids, and AG-UI thread ids do not replace full runtime session history. |
64
+ | Runtime event replay and filters | Native `GET /events`, `GET /runs/:id/events` | Native `/v1/stable-harness/runs/:id/events` plus Bridge | Partial | Bridge | Native stream partial plus Bridge | Native run replay with resume cursor plus Bridge | LangGraph has upstream run streams; Stable Runtime filtered replay is on the Stable Runtime port. |
65
+ | Trace timeline | Native `GET /runs/:id/trace` | Native `/v1/stable-harness/runs/:id/trace` plus Bridge | Partial | Native `runtime/trace` plus Bridge | Native `/a2a/tasks/:id/trace` plus Bridge | Native `/ag-ui/runs/:id/trace` plus Bridge | LangGraph traces can be viewed through LangSmith separately; Stable Harness trace records are first-party runtime data. |
66
+ | Span tree projection | Native `GET /runs/:id/spans` | Native `/v1/stable-harness/runs/:id/spans` plus Bridge | Partial | Native `runtime/spans` plus Bridge | Native `/a2a/tasks/:id/spans` plus Bridge | Native `/ag-ui/runs/:id/spans` plus Bridge | Span tree rendering is Stable Runtime-owned. |
67
+ | Approval queues and decisions | Native `/approvals/*` | Native `/v1/approvals/*` plus Bridge | No | Native `/approvals/*` plus Bridge | Native `/approvals/*` plus Bridge | Native `/approvals/*` plus Bridge | LangGraph server does not expose Stable Harness approval queue routes. |
68
+ | Memory administration and recall | Native `/memories/*` | Bridge | Partial | Bridge | Bridge | Bridge | LangGraph has its own store concepts; the bridge projects Stable Harness memory profiles into Agent Server Store files and reads edited Store memory back as run context. Stable Runtime memory lifecycle is available from Stable Runtime. |
69
+ | Artifact import, read, and replay | Native `/artifacts/*`, `/requests/:id/replay` | Native `/v1/stable-harness/runs/:id/replay` plus Bridge | No | Native `runtime/replay` plus Bridge | Native task artifacts and `/a2a/tasks/:id/replay` plus Bridge | Native `/ag-ui/runs/:id/replay` plus Bridge | A2A exposes final output, stored runtime artifacts, and replay bundles on tasks; artifact content reads and imports remain bridged. |
70
+ | Workflow inventory and render | Native `/workflows/*` | Bridge | Partial | Bridge | Bridge | Bridge | LangGraph can expose graph schemas; Stable Harness workflow Mermaid and plan views are Stable Runtime APIs. |
71
+ | Metrics | Native `GET /metrics` | Native `GET /metrics` plus Bridge | Partial | Native `GET /metrics` plus Bridge | Native `GET /metrics` plus Bridge | Native `GET /metrics` plus Bridge | LangGraph observability is upstream-owned; Stable Runtime metrics are served by Stable Harness. |
72
+ | Bearer-token auth | Native | Native | Upstream-dependent | Native | Native | Native | Stable Runtime and protocol facades can protect native routes with bearer tokens. LangGraph auth remains upstream-owned. |
73
+ | Browser CORS helper | No | Native loopback CORS | Upstream-dependent | No | No | No | OpenAI-compatible browser clients are the current built-in CORS target. |
74
+ | Stdio transport | No | No | No | Native `acp-stdio` | No | No | Only ACP has a Stable Harness stdio command. |
75
+
76
+ ## Native Stable Runtime API Families
77
+
78
+ These APIs are available under `/runtime/v1` on the Stable Harness gateway.
79
+
80
+ | API family | Endpoints |
81
+ | --- | --- |
82
+ | Runtime health and inventory | `GET /health`, `GET /metrics`, `GET /inspect` |
83
+ | Requests and runs | `POST /runs`, `GET /runs`, `GET /runs/:id`, `POST /runs/:id/cancel`, `DELETE /runs/:id`, plus `/requests` aliases |
84
+ | Trace and spans | `GET /runs/:id/trace`, `GET /runs/:id/spans` |
85
+ | Runtime events | `GET /events?...`, `GET /runs/:id/events?...` |
86
+ | Sessions | `GET /sessions`, `DELETE /sessions/:id` |
87
+ | Workflows | `GET /workflows`, `GET /workflows/:id/mermaid`, `GET /workflows/:id/plan` |
88
+ | Approvals | `GET /approvals?status=...`, `POST /approvals/:id/approve`, `POST /approvals/:id/reject` |
89
+ | Memory | `POST /memories`, `GET /memories?namespace=...`, `POST /memories/recall`, `PATCH /memories/:id`, `POST /memories/:id/archive` |
90
+ | Artifacts and replay | `GET /artifacts`, `POST /artifacts`, `GET /artifacts/:id`, `GET /artifacts/:id/content`, `GET /runs/:id/replay`, plus `/requests/:id/replay` alias |
91
+
92
+ ## Native Facade API Families
93
+
94
+ | Protocol | Native APIs | Full-control-plane path |
95
+ | --- | --- | --- |
96
+ | OpenAI-compatible | `/protocols/openai/v1/models`, `/protocols/openai/v1/chat/completions`, `/protocols/openai/v1/responses`, `/protocols/openai/v1/responses/:id`, `/protocols/openai/v1/responses/:id/cancel`, `/protocols/openai/v1/capabilities` | `/runtime/v1` |
97
+ | LangGraph-compatible | `/protocols/langgraph` upstream Agent Server assistant, thread, run, stream, store, and schema routes; Stable Harness projects memory, skills, subagents, and tools into Store files | `/runtime/v1` |
98
+ | MCP | `/protocols/mcp` initialize, `tools/list`, and `tools/call` for workspace tools, agents, and reachable nested subagents, with stable aliases for name collisions | `/runtime/v1` |
99
+ | ACP | `/protocols/acp` JSON-RPC initialize, session, prompt, cancel, workspace inspection, runtime inspection, approvals, metrics, and stdio methods | `/runtime/v1` |
100
+ | A2A | `/protocols/a2a` agent card, workspace inspection, task, message, stream, cancel, approvals, and metrics methods | `/runtime/v1` |
101
+ | AG-UI | `/protocols/ag-ui` workspace inspection, run, event stream, trace, span, replay, approvals, and metrics methods | `/runtime/v1` |
102
+
103
+ ## Unsupported Or Limited Areas
104
+
105
+ | Area | Status | Reason |
106
+ | --- | --- | --- |
107
+ | LangGraph in-router Stable Runtime bridge | Not supported | The official LangGraph Agent Server owns its HTTP router. Stable Runtime control-plane APIs are grouped at `/runtime/v1` on the gateway. |
108
+ | LangGraph cron routes | Not implemented upstream | Current JS LangGraph Agent Server cron endpoints are not faked by Stable Harness. Use Stable Runtime scheduling or an external scheduler when needed. |
109
+ | LangGraph Agent Server MCP full session semantics | Partial | Stable Harness supports stateless `/mcp` initialization, `tools/list`, and `tools/call` for workspace tools, exposed agents, and reachable nested subagents. The current LangGraph MCP implementation is documented as stateless, so Stable Harness does not add MCP session state. |
110
+ | OpenAI client-supplied `tools` and `tool_choice` | Not mapped to runtime tool execution | Stable Harness tool execution is governed by typed workspace inventory and explicit `RuntimeRequest.toolCall`, not arbitrary client-side tool definitions. |
111
+ | ACP client file and terminal requests | Not implemented | Stable Harness does not ask ACP clients to perform local filesystem or terminal operations. Use governed workspace tools instead. |
112
+ | A2A push notifications | Supported | Stable Harness stores task push notification config and posts task update payloads to the configured webhook. |
113
+ | AG-UI reconnect resume | Supported | AG-UI run state and replayable run event endpoints are available with SSE event IDs and `Last-Event-ID` or query cursor resume. |
114
+ | LangGraph auth | Upstream-dependent | LangGraph Agent Server authentication is owned by upstream LangGraph deployment settings, not Stable Harness protocol code. |
@@ -8,12 +8,15 @@ OpenAI-compatible `/v1`, LangGraph-compatible, ACP, A2A, and AG-UI servers are
8
8
  ecosystem facades. They adapt external protocols to this contract rather than
9
9
  adding new runtime semantics.
10
10
 
11
+ For the side-by-side feature and API support list, see the
12
+ [Protocol Feature Coverage Matrix](./coverage-matrix.md).
13
+
11
14
  ## HTTP Commands And Queries
12
15
 
13
16
  `stable-harness start` exposes this protocol by default at:
14
17
 
15
18
  ```text
16
- http://127.0.0.1:8641
19
+ http://127.0.0.1:56789/runtime/v1
17
20
  ```
18
21
 
19
22
  Configure it from runtime YAML:
@@ -23,14 +26,21 @@ apiVersion: stable-harness.dev/v1
23
26
  kind: Runtime
24
27
  spec:
25
28
  protocols:
26
- stableRuntime:
29
+ gateway:
27
30
  enabled: true
28
31
  host: 127.0.0.1
29
- port: 8641
32
+ port: 56789
33
+ bearerToken: ${env:STABLE_HARNESS_API_KEY}
30
34
  ```
31
35
 
32
- `POST /requests` is a protocol adapter over `RuntimeRequest`. It may pass these
33
- stable fields through to the runtime:
36
+ When `bearerToken` or `apiKey` is configured, every native Stable Runtime
37
+ route requires `Authorization: Bearer <token>`. The CLI daemon client reads the
38
+ same runtime setting, and `--api-key` can override it for local commands.
39
+
40
+ `POST /runs` is the recommended HTTP entrypoint for creating a Stable Runtime
41
+ execution. `POST /requests` remains a compatibility alias over the same
42
+ `RuntimeRequest` contract. Both forms may pass these stable fields through to
43
+ the runtime:
34
44
 
35
45
  - `input`
36
46
  - `agentId`
@@ -46,15 +56,25 @@ The endpoint must not infer backend behavior, choose tools from prose, or
46
56
  rewrite workflow routes. Tool execution and workflow dispatch remain explicit
47
57
  runtime requests.
48
58
 
49
- Inspection endpoints expose normalized runtime state:
59
+ Inspection endpoints expose normalized runtime state. Prefer `/runs` for new
60
+ Studio and SDK clients; `/requests` remains supported for existing low-level
61
+ runtime clients:
50
62
 
51
63
  - `GET /inspect`
64
+ - `POST /runs`
65
+ - `GET /runs?sessionId=...&agentId=...&state=...`
66
+ - `GET /runs/:id`
67
+ - `POST /runs/:id/cancel`
68
+ - `DELETE /runs/:id`
69
+ - `GET /runs/:id/events`
70
+ - `GET /runs/:id/replay`
71
+ - `GET /runs/:id/trace`
72
+ - `GET /runs/:id/spans`
52
73
  - `GET /requests?sessionId=...&agentId=...&state=...`
53
74
  - `GET /requests/:id`
54
75
  - `POST /requests/:id/cancel`
55
76
  - `DELETE /requests/:id`
56
- - `GET /runs/:id/trace`
57
- - `GET /runs/:id/spans`
77
+ - `GET /requests/:id/replay`
58
78
  - `GET /sessions`
59
79
  - `DELETE /sessions/:id`
60
80
  - `GET /workflows`
@@ -93,6 +113,8 @@ display labels.
93
113
  `GET /events` streams normalized `RuntimeEvent` records as Server-Sent Events.
94
114
  It replays matching stored events first, then streams new events from
95
115
  `runtime.subscribe`.
116
+ `GET /runs/:id/events` is the run-scoped alias for the same stream and accepts
117
+ the same query filters except `requestId`, which comes from the path.
96
118
 
97
119
  Supported filters:
98
120
 
@@ -107,6 +129,7 @@ Example:
107
129
 
108
130
  ```text
109
131
  GET /events?sessionId=customer-123&types=runtime.request.*,runtime.approval.*
132
+ GET /runs/request-123/events?types=runtime.request.completed
110
133
  ```
111
134
 
112
135
  Event format:
@@ -14,16 +14,23 @@ upstream LangGraph.
14
14
  - keep OpenAI-compatible and LangGraph-compatible services under one runtime
15
15
  start command
16
16
 
17
+ For side-by-side support across all protocol surfaces, see the
18
+ [Protocol Feature Coverage Matrix](./coverage-matrix.md).
19
+
17
20
  ## Defaults
18
21
 
19
- `stable-harness start` starts the Stable Runtime control plane plus both
20
- ecosystem facades by default:
22
+ `stable-harness start` starts one public gateway by default:
21
23
 
22
- | Service | Default host | Default port |
23
- | --- | --- | --- |
24
- | Stable Runtime HTTP + SSE | `127.0.0.1` | `8641` |
25
- | OpenAI-compatible | `127.0.0.1` | `8642` |
26
- | LangGraph-compatible | `127.0.0.1` | `2024` |
24
+ | Surface | Default endpoint |
25
+ | --- | --- |
26
+ | Gateway manifest | `http://127.0.0.1:56789/manifest` |
27
+ | Stable Runtime HTTP + SSE | `http://127.0.0.1:56789/runtime/v1` |
28
+ | OpenAI-compatible | `http://127.0.0.1:56789/protocols/openai/v1` |
29
+ | LangGraph-compatible | `http://127.0.0.1:56789/protocols/langgraph` |
30
+ | MCP | `http://127.0.0.1:56789/protocols/mcp` |
31
+ | ACP | `http://127.0.0.1:56789/protocols/acp` |
32
+ | A2A | `http://127.0.0.1:56789/protocols/a2a` |
33
+ | AG-UI | `http://127.0.0.1:56789/protocols/ag-ui` |
27
34
 
28
35
  Configure or disable services from runtime YAML:
29
36
 
@@ -32,19 +39,13 @@ apiVersion: stable-harness.dev/v1
32
39
  kind: Runtime
33
40
  spec:
34
41
  protocols:
35
- stableRuntime:
36
- enabled: true
42
+ gateway:
37
43
  host: 127.0.0.1
38
- port: 8641
44
+ port: 56789
39
45
  openaiCompatible:
40
46
  enabled: true
41
- host: 127.0.0.1
42
- port: 8642
43
- bearerToken: ${env:STABLE_HARNESS_OPENAI_API_KEY:-}
44
47
  langgraph:
45
48
  enabled: true
46
- host: 127.0.0.1
47
- port: 2024
48
49
  nWorkers: 10
49
50
  env: .env
50
51
  exposeAgents:
@@ -67,11 +68,68 @@ The LangGraph service is started through the official
67
68
  upstream LangGraph behavior. `stable-harness` only loads the environment before
68
69
  that server starts.
69
70
 
71
+ Current Agent Server compatibility is intentionally passthrough-first:
72
+
73
+ | Agent Server surface | Status | Notes |
74
+ | --- | --- | --- |
75
+ | System/info | Supported | Served by the official LangGraph server. |
76
+ | Assistants | Supported | YAML agents are projected as graph IDs. |
77
+ | Threads | Supported | Thread creation, state, and thread runs are handled upstream. |
78
+ | Stateful runs | Supported | `threads/{thread_id}/runs/stream` calls the generated Stable Harness bridge graph. |
79
+ | Stateless runs | Supported | `/runs/stream` calls the same generated bridge graph without a thread. |
80
+ | Store | Supported | The upstream namespaced store endpoints are available to LangSmith Studio/Fleet clients. Stable Harness projects agent memory files, skill files, subagent summaries, and tool inventory into the Agent Server Store. |
81
+ | Graph inspection | Supported | The generated graph exposes tools, subagents, skills, and memory nodes for Studio inspection, and graph inspection seeds the matching Store files so Studio can discover them before the first run. |
82
+ | MCP | Supported | `/mcp` exposes Stable Harness workspace tools, exposed agents, and exposed agents' reachable subagents as MCP tools on the LangGraph-compatible Agent Server port. Tool calls execute through the Stable Harness runtime. |
83
+ | A2A | Supported | `/.well-known/agent-card.json?assistant_id=...` and `/a2a/{assistant_id}` expose LangSmith Agent Server-style A2A access for each projected agent. |
84
+ | Crons | Upstream unavailable | The current `@langchain/langgraph-api` JS server exposes cron routes but returns `Not implemented`; Stable Harness does not fake a cron surface. |
85
+
70
86
  Native Stable Harness spans can also be exported to LangSmith. This is separate
71
87
  from LangGraph's upstream tracing path: it projects stored runtime events through
72
88
  `projectRuntimeTraceSpans(run)` and writes the resulting run tree to LangSmith at
73
89
  request completion.
74
90
 
91
+ ### Store projection for LangSmith Studio
92
+
93
+ LangSmith Studio and Fleet treat long-term memory as Agent Server Store data.
94
+ Stable Harness therefore projects workspace-owned inventory into the upstream
95
+ Store when the bridge graph is inspected or executed:
96
+
97
+ - `/AGENTS.md` summarizes the selected Stable Harness agent.
98
+ - `/memories/*.md` exposes configured Stable Harness memory profiles.
99
+ - `/skills/*/SKILL.md` exposes workspace skills when they are attached to the
100
+ agent.
101
+ - `/subagents/*.md` exposes declared subagent inventory.
102
+ - `/tools.json` exposes model-visible tool metadata.
103
+
104
+ These Store files are compatibility projections. Stable Harness remains the
105
+ native owner for memory governance, memory providers, approvals, lifecycle
106
+ events, replay, and diagnostics. If a LangSmith client edits Store memory files,
107
+ the bridge reads those files back as Agent Server long-term memory context on
108
+ subsequent LangGraph runs.
109
+
110
+ ### MCP and A2A compatibility routes
111
+
112
+ The current JS `@langchain/langgraph-api` server package does not mount the
113
+ LangSmith Agent Server `/mcp` or `/a2a/{assistant_id}` routes that are documented
114
+ for Agent Server deployments. Stable Harness registers a small custom HTTP app on
115
+ the same official LangGraph server so these routes are available without
116
+ replacing the upstream assistant, thread, run, stream, store, or schema router.
117
+
118
+ - `/mcp` supports JSON-RPC initialization, `tools/list`, and `tools/call`.
119
+ `tools/list` includes workspace tools, exposed Stable Harness agents, and the
120
+ nested subagents reachable from those exposed agents. Workspace tool calls run
121
+ as native Stable Harness direct tool calls; agent and subagent calls run as
122
+ runtime agent requests. Unique tool, agent, and subagent IDs are exposed under
123
+ their Stable Harness IDs; collisions remain visible with stable aliases such as
124
+ `tool__{id}`, `agent__{id}`, or `subagent__{id}`.
125
+ - `/.well-known/agent-card.json?assistant_id=...` returns an A2A agent card for
126
+ the selected projected agent.
127
+ - `/a2a/{assistant_id}` supports `message/send`, `message/stream`, and
128
+ `tasks/get` over JSON-RPC.
129
+
130
+ These routes execute through Stable Harness runtime requests and preserve
131
+ `metadata.protocol` as `langgraph-mcp` or `langgraph-a2a`.
132
+
75
133
  Enable native export in runtime YAML:
76
134
 
77
135
  ```yaml
@@ -115,10 +173,10 @@ spec:
115
173
  # LANGSMITH_PROJECT: local-studio
116
174
  ```
117
175
 
118
- When the server prints the LangGraph URL, open Studio with:
176
+ When the server prints the gateway URL, open Studio with the LangGraph path:
119
177
 
120
178
  ```text
121
- https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2024
179
+ https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:56789/protocols/langgraph
122
180
  ```
123
181
 
124
182
  ## Generated Bridge
@@ -4,23 +4,39 @@
4
4
 
5
5
  This surface is for client compatibility. It is not a model provider, a backend adapter, or a new execution framework.
6
6
 
7
+ For side-by-side support across all protocol surfaces, see the
8
+ [Protocol Feature Coverage Matrix](./coverage-matrix.md).
9
+
7
10
  ## Supported MVP Surface
8
11
 
9
12
  - `GET /v1/models`
10
13
  - `GET /v1/capabilities`
11
14
  - `POST /v1/chat/completions`
15
+ - `POST /v1/responses`
16
+ - `GET /v1/responses/:response_id`
17
+ - `DELETE /v1/responses/:response_id`
18
+ - `POST /v1/responses/:response_id/cancel`
19
+ - `GET /v1/stable-harness/inspect`
12
20
  - `stream: true` Server-Sent Events for chat completion chunks
21
+ - `stream: true` Server-Sent Events for Responses API events
13
22
  - `stable_harness.tool.progress` SSE events for runtime tool progress
14
23
  - `stable_harness.progress.narration` SSE events for runtime progress narration
24
+ - `GET /v1/stable-harness/runs/:id/trace`
25
+ - `GET /v1/stable-harness/runs/:id/spans`
26
+ - `GET /v1/stable-harness/runs/:id/replay`
27
+ - `GET /v1/stable-harness/runs/:id/events`
28
+ - `/runtime/v1/*` gateway route to the native Stable Runtime control plane
15
29
 
16
30
  The `model` field maps to workspace agent IDs. `/v1/models` lists all workspace agents by default.
31
+ `GET /v1/capabilities` lists every native OpenAI-compatible endpoint above,
32
+ including the Stable Harness run inspection APIs and supported event filters.
17
33
 
18
34
  ## Local Launch
19
35
 
20
36
  From a workspace checkout:
21
37
 
22
38
  ```sh
23
- stable-harness start -w "$PWD" --port 8642 --api-key change-me-local-dev
39
+ stable-harness start -w "$PWD" --port 56789 --api-key change-me-local-dev
24
40
  ```
25
41
 
26
42
  For embedded applications, the server can read auth settings from runtime YAML:
@@ -32,7 +48,7 @@ metadata:
32
48
  name: app-runtime
33
49
  spec:
34
50
  protocols:
35
- openaiCompatible:
51
+ gateway:
36
52
  bearerToken: ${env:STABLE_HARNESS_API_KEY}
37
53
  ```
38
54
 
@@ -46,7 +62,7 @@ const server = createOpenAiCompatibleHttpServer(runtime);
46
62
  Then point OpenAI-compatible clients at:
47
63
 
48
64
  ```text
49
- http://127.0.0.1:8642/v1
65
+ http://127.0.0.1:56789/protocols/openai/v1
50
66
  ```
51
67
 
52
68
  For local-only development, auth is optional. When binding beyond loopback, run behind a trusted network boundary and set a bearer token in runtime YAML or pass `--api-key` as an override.
@@ -73,6 +89,12 @@ It must not:
73
89
 
74
90
  Client `tools` and `tool_choice` fields are ignored by this facade. Runtime tools still come from workspace inventory, governance policy, and the tool gateway.
75
91
 
92
+ The gateway also exposes the native Stable Runtime control plane at
93
+ `/runtime/v1/*`, protected by the same bearer-token setting. Use that route for
94
+ sessions, requests, traces, approvals, memory administration, artifacts,
95
+ workflows, replay bundles, metrics, and native event streams when an
96
+ application is connected through the OpenAI-compatible facade.
97
+
76
98
  ## Message Mapping
77
99
 
78
100
  `messages` are flattened into a text transcript:
@@ -112,10 +134,6 @@ the final assistant message.
112
134
 
113
135
  Add these only after the chat-completions subset is stable:
114
136
 
115
- - `POST /v1/responses`
116
- - `previous_response_id` state handling
117
- - persisted response lookup
118
- - run event polling endpoints
119
137
  - idempotency-key response caching
120
138
 
121
139
  Each addition should remain a protocol adapter over native runtime state.
@@ -5,38 +5,67 @@ Stable Runtime request, event, and inspection surfaces. These adapters must not
5
5
  add routing heuristics, backend execution semantics, or workspace-specific
6
6
  behavior.
7
7
 
8
- Enable the combined protocol server from runtime YAML:
8
+ For side-by-side support across all protocol surfaces, see the
9
+ [Protocol Feature Coverage Matrix](./coverage-matrix.md).
10
+
11
+ By default, `stable-harness start` / `stable-harness serve` exposes every
12
+ enabled protocol through the single Stable Harness gateway. Runtime YAML can
13
+ disable individual protocols or override the gateway host and port.
14
+
15
+ Enable individual protocol servers from runtime YAML:
9
16
 
10
17
  ```yaml
11
18
  apiVersion: stable-harness.dev/v1
12
19
  kind: Runtime
13
20
  spec:
14
21
  protocols:
15
- agentProtocols:
22
+ gateway:
16
23
  enabled: true
17
24
  host: 127.0.0.1
18
- port: 8650
19
- protocols: [acp, a2a, agui]
25
+ port: 56789
26
+ acp:
27
+ enabled: true
28
+ a2a:
29
+ enabled: true
30
+ agui:
31
+ enabled: true
20
32
  ```
21
33
 
22
- You can also enable a single protocol by configuring one of `acp`, `a2a`, or
23
- `agui` with `enabled: true`. The CLI starts one combined HTTP server for the
24
- enabled adapter set.
34
+ Protocol facades use stable gateway paths:
35
+
36
+ | Protocol | Default URL |
37
+ | --- | --- |
38
+ | ACP | `http://127.0.0.1:56789/protocols/acp` |
39
+ | A2A | `http://127.0.0.1:56789/protocols/a2a` |
40
+ | AG-UI | `http://127.0.0.1:56789/protocols/ag-ui` |
41
+
42
+ TCP ports must be between `0` and `65535`; the Stable Harness gateway default
43
+ is `56789`.
25
44
 
26
45
  Shared discovery endpoints:
27
46
 
28
47
  - `GET /health`
29
48
  - `GET /capabilities`
49
+ - `GET /metrics`
50
+ - `GET /approvals?status=pending`
51
+ - `POST /approvals/:id/approve`
52
+ - `POST /approvals/:id/reject`
30
53
 
31
54
  `/capabilities` returns a normalized manifest with enabled protocol IDs,
32
55
  transports, session mapping level, and whether the protocol exposes the full
33
56
  operator session API. ACP/A2A/AG-UI report `operatorApi: false`; Stable Runtime
34
- HTTP/SSE remains the first-party operator API.
57
+ HTTP/SSE remains the first-party operator API and is exposed by the gateway at
58
+ `/runtime/v1/*`.
59
+ `/metrics` returns the same Stable Runtime Prometheus metrics exposed by the
60
+ first-party runtime server.
61
+ The approval routes expose the same Stable Runtime governance queue and
62
+ decision operations as the first-party runtime server.
35
63
 
36
64
  These facades preserve protocol-native continuity, but they are not the full
37
- Stable Runtime operator API. Stable Runtime HTTP/SSE and the SDK remain the
38
- first-party surfaces for listing sessions, deleting session history, inspecting
39
- requests, managing memory, approvals, artifacts, and native event filters.
65
+ Stable Runtime operator API by themselves. The gateway also exposes the native
66
+ control plane under `/runtime/v1/*` for listing sessions, deleting session
67
+ history, inspecting requests, managing memory, approvals, artifacts, workflows,
68
+ replay bundles, metrics, and native event filters.
40
69
 
41
70
  Reconnect and replay behavior is intentionally layered:
42
71
 
@@ -45,7 +74,7 @@ Reconnect and replay behavior is intentionally layered:
45
74
  | Stable Runtime SSE | Replays stored runtime events when clients reconnect with request/session/type filters. |
46
75
  | A2A streaming | Emits live task status updates for a request stream. |
47
76
  | A2A task subscribe | Replays the current task snapshot and streams future updates when the task is still running. |
48
- | AG-UI stream | Emits one run stream; use Stable Runtime SSE for first-party replay/resume. |
77
+ | AG-UI stream | Emits one run stream; `GET /ag-ui/runs/:runId/events` replays stored run events and accepts `Last-Event-ID`, `afterEventId`, or `after` resume cursors. |
49
78
  | ACP stdio/HTTP | Session IDs resume prompt continuity; progress replay is not provided through ACP. |
50
79
 
51
80
  For external SDK compatibility status, see
@@ -57,6 +86,7 @@ A2A is exposed as an HTTP+JSON and SSE facade:
57
86
 
58
87
  - `GET /.well-known/agent-card.json`
59
88
  - `GET /a2a/agent-card.json`
89
+ - `GET /a2a/inspect`
60
90
  - `POST /a2a/message:send`
61
91
  - `POST /a2a/message:stream`
62
92
  - `POST /a2a/rpc`
@@ -64,6 +94,11 @@ A2A is exposed as an HTTP+JSON and SSE facade:
64
94
  - `GET /a2a/tasks/:id`
65
95
  - `POST /a2a/tasks/:id:cancel`
66
96
  - `GET /a2a/tasks/:id:subscribe`
97
+ - `GET /a2a/tasks/:id/trace`
98
+ - `GET /a2a/tasks/:id/spans`
99
+ - `GET /a2a/tasks/:id/replay`
100
+ - `GET /a2a/tasks/:id/pushNotificationConfig`
101
+ - `POST /a2a/tasks/:id/pushNotificationConfig:set`
67
102
 
68
103
  `message:send` and JSON-RPC `SendMessage` map to a native `RuntimeRequest`.
69
104
  Streaming responses subscribe to native runtime events and project them as A2A
@@ -82,20 +117,28 @@ Compliance notes:
82
117
  | Capability | Status | Notes |
83
118
  | --- | --- | --- |
84
119
  | Agent card | Supported | Exposed at `/.well-known/agent-card.json` and `/a2a/agent-card.json`. |
120
+ | Workspace inspection | Supported | `GET /a2a/inspect` exposes the Stable Runtime workspace inventory behind the A2A facade. |
85
121
  | Version header | Supported | Empty, `0.3`, and `1.0` are accepted; unsupported versions fail clearly. |
86
122
  | Send message | Supported | Returns a Task backed by a Stable Runtime request. |
87
123
  | Streaming message | Supported | Emits an initial Task snapshot, then task status update events, then closes on completion. |
88
- | Task artifacts | Supported | Final text output is exposed as an output artifact while status messages remain available. |
89
- | Task subscription | Partial | `GET /a2a/tasks/:id:subscribe` replays the current task and streams future runtime updates for running tasks. |
90
- | Push notifications | Not implemented | Capability advertises `pushNotifications: false`; use Stable Runtime SSE or A2A streaming. |
91
- | Full task history | Partial | Stable Runtime stores request records; A2A history projection is intentionally limited. |
124
+ | Task artifacts | Supported | Final text output and stored Stable Runtime artifacts are exposed as A2A task artifacts. Runtime artifact metadata is preserved on each artifact. |
125
+ | Task subscription | Supported | `GET /a2a/tasks/:id:subscribe` replays the current task, including history, and streams future runtime updates for running tasks. |
126
+ | Trace, spans, and replay | Supported | `GET /a2a/tasks/:id/trace`, `/spans`, and `/replay` expose the stored Stable Runtime run record behind the A2A task. |
127
+ | Push notifications | Supported | Task push notification config can be supplied with send requests or managed with task config endpoints; the server posts task update payloads to the configured webhook. |
128
+ | Full task history | Supported | `GET /a2a/tasks/:id` projects stored Stable Runtime timeline events as A2A task history messages and preserves the original runtime event in message metadata. |
92
129
 
93
130
  ## AG-UI
94
131
 
95
132
  AG-UI is exposed as an HTTP+SSE event stream:
96
133
 
97
134
  - `GET /ag-ui/capabilities`
135
+ - `GET /ag-ui/inspect`
98
136
  - `POST /ag-ui/runs`
137
+ - `GET /ag-ui/runs/:runId/state`
138
+ - `GET /ag-ui/runs/:runId/events`
139
+ - `GET /ag-ui/runs/:runId/trace`
140
+ - `GET /ag-ui/runs/:runId/spans`
141
+ - `GET /ag-ui/runs/:runId/replay`
99
142
 
100
143
  `POST /ag-ui/runs` emits canonical AG-UI event enum values: `RUN_STARTED`,
101
144
  `CUSTOM` events for Stable Runtime events, `TEXT_MESSAGE_START`,
@@ -112,10 +155,13 @@ Compliance notes:
112
155
  | Capability | Status | Notes |
113
156
  | --- | --- | --- |
114
157
  | Run lifecycle | Supported | Emits `RUN_STARTED`, `RUN_FINISHED`, and `RUN_ERROR`. |
158
+ | Workspace inspection | Supported | `GET /ag-ui/inspect` exposes the Stable Runtime workspace inventory behind the AG-UI facade. |
115
159
  | Text message lifecycle | Supported | Emits start/content/end events for final assistant text. |
116
- | Tool events | Partial | Direct runtime tool start/result events are projected to AG-UI tool events. |
160
+ | Tool events | Supported | Direct runtime tool start/result events and upstream adapter `agent.tool.*` events are projected to AG-UI tool events. |
117
161
  | Runtime events | Supported | Non-native events remain available through `CUSTOM` payloads. |
118
- | Reconnect/resume | Not implemented | Use Stable Runtime event replay when first-party resume behavior is required. |
162
+ | Run state | Supported | `GET /ag-ui/runs/:runId/state` projects stored runtime output and messages. |
163
+ | Trace, spans, and replay | Supported | `GET /ag-ui/runs/:runId/trace`, `/spans`, and `/replay` expose the same stored run record used by Stable Runtime inspection. |
164
+ | Reconnect/resume | Supported | `GET /ag-ui/runs/:runId/events` replays stored run events with SSE event IDs and accepts `Last-Event-ID`, `afterEventId`, or `after` resume cursors. |
119
165
 
120
166
  ## ACP
121
167
 
@@ -140,10 +186,19 @@ Supported methods:
140
186
  - `session/list`
141
187
  - `session/prompt`
142
188
  - `session/cancel`
189
+ - `session/close`
190
+ - `runtime/inspect`
191
+ - `runtime/trace`
192
+ - `runtime/spans`
193
+ - `runtime/replay`
143
194
 
144
195
  `session/prompt` maps to a native `RuntimeRequest` and returns the ACP stop
145
196
  reason plus Stable Harness request metadata. Stdio and HTTP use the same
146
197
  JSON-RPC method handler and do not change runtime semantics.
198
+ `runtime/inspect` exposes the Stable Runtime workspace inventory. `runtime/trace`,
199
+ `runtime/spans`, and `runtime/replay` are Stable Harness extensions that accept
200
+ `{ "requestId": "..." }` and expose the stored run record without leaving the
201
+ ACP JSON-RPC transport.
147
202
 
148
203
  Stable Harness clients may include `params.runtimeRequest` to carry explicit
149
204
  runtime fields through the ACP-shaped transport.
@@ -162,4 +217,7 @@ Compliance notes:
162
217
  | session/list | Supported | Projects Stable Runtime session summaries. |
163
218
  | session/prompt | Supported | Maps prompt turns to Stable Runtime requests. |
164
219
  | session/cancel | Supported | Cancels currently running requests in the session. |
220
+ | session/close | Supported | Deletes stored Stable Runtime session history for the requested session ID. |
221
+ | runtime/inspect | Supported | Stable Harness extension method exposes workspace inventory through ACP JSON-RPC. |
222
+ | runtime/trace, runtime/spans, runtime/replay | Supported | Stable Harness extension methods expose stored runtime inspection data for the requested run. |
165
223
  | client file/terminal requests | Not implemented | Stable Harness does not request client-side filesystem or terminal operations through ACP. |