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.
- package/README.md +30 -17
- package/dist/index.js +1 -1
- package/dist/runtime/skills/skill-metadata.js +1 -1
- package/dist/workspace/compile.js +1 -1
- package/docs/0.1.0-tool-guard-benchmark.zh.md +5 -5
- package/docs/architecture/system-architecture.zh.md +3 -3
- package/docs/evaluation/0.1.0-bfcl-targeted-model-matrix.zh.md +306 -306
- package/docs/evaluation/0.1.0-bfcl-targeted-review-matrix.zh.md +1 -1
- package/docs/evaluation/0.1.0-bfcl-tool-guard.zh.md +1 -1
- package/docs/granite-tool-calling-comparison.zh.md +8 -8
- package/docs/guides/getting-started.md +14 -6
- package/docs/guides/index.md +5 -3
- package/docs/guides/integration-guide.md +44 -43
- package/docs/guides/operator-runbook.md +51 -3
- package/docs/guides/runtime-governance-proof.md +4 -4
- package/docs/guides/workspace-authoring.md +2 -2
- package/docs/guides/workspace-docker-build.md +3 -3
- package/docs/memory/0.1.0-memory-design.zh.md +20 -0
- package/docs/memory/0.1.0-step-09-deepagents-native-memory.zh.md +1 -1
- package/docs/memory/0.1.0-step-09-langmem-shaped-provider.zh.md +1 -1
- package/docs/memory/0.1.0-step-09-memory-adapter-projection.zh.md +3 -3
- package/docs/memory/0.1.0-step-09-memory-contract.zh.md +1 -1
- package/docs/memory/0.1.0-step-09-memory-governance-approval.zh.md +1 -1
- package/docs/memory/0.1.0-step-09-memory-lifecycle-hooks.zh.md +1 -1
- package/docs/memory/0.1.0-step-09-memory-maintenance-boundary.zh.md +1 -1
- package/docs/memory/0.1.0-step-09-memory-persistence-boundary.zh.md +1 -1
- package/docs/protocols/coverage-matrix.md +114 -0
- package/docs/protocols/http-runtime.md +31 -8
- package/docs/protocols/langgraph-compatible.md +75 -17
- package/docs/protocols/openai-compatible.md +25 -7
- package/docs/protocols/{agent-protocols.md → protocol-facades.md} +76 -18
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/adapter.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/builtin/task-inventory.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/builtin-call-repair.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/builtin-tool-policy.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/gateway/tool-failure-events.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/raw-tool-call-parser.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/stream-events.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/substrate/checkpoint.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/tool-repeat-visibility.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/trace-projection.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/vfs-backend.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/package.json +2 -2
- package/node_modules/@stable-harness/adapter-langgraph/dist/src/graph.js +1 -1
- package/node_modules/@stable-harness/adapter-langgraph/dist/src/index.js +1 -1
- package/node_modules/@stable-harness/adapter-langgraph/dist/src/runtime.js +1 -1
- package/node_modules/@stable-harness/adapter-langgraph/dist/src/skill-providers.js +1 -1
- package/node_modules/@stable-harness/adapter-langgraph/dist/src/types.d.ts +1 -0
- package/node_modules/@stable-harness/adapter-langgraph/package.json +2 -2
- package/node_modules/@stable-harness/core/dist/boundary-scan.js +1 -1
- package/node_modules/@stable-harness/core/dist/index.d.ts +1 -0
- package/node_modules/@stable-harness/core/dist/index.js +1 -1
- package/node_modules/@stable-harness/core/dist/memory-plugins/shared.js +1 -1
- package/node_modules/@stable-harness/core/dist/memory-plugins.js +1 -1
- package/node_modules/@stable-harness/core/dist/quality/event-evidence.js +1 -1
- package/node_modules/@stable-harness/core/dist/quality/execution-review.js +1 -1
- package/node_modules/@stable-harness/core/dist/quality/synthesis/fields.js +1 -1
- package/node_modules/@stable-harness/core/dist/recovery/execution-contract.js +1 -1
- package/node_modules/@stable-harness/core/dist/recovery/tool-call-structure.js +1 -1
- package/node_modules/@stable-harness/core/dist/recovery/tool-call.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime/direct-tool-call.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime/inspection/methods.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime/inspection/replay.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime/persistence/artifacts.d.ts +4 -0
- package/node_modules/@stable-harness/core/dist/runtime/persistence/artifacts.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime/persistence/queue.d.ts +1 -0
- package/node_modules/@stable-harness/core/dist/runtime/persistence/queue.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime/persistence/stores.d.ts +1 -0
- package/node_modules/@stable-harness/core/dist/runtime/persistence/stores.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime/persistence/system-data.d.ts +34 -0
- package/node_modules/@stable-harness/core/dist/runtime/persistence/system-data.js +1 -0
- package/node_modules/@stable-harness/core/dist/runtime/recovery/adapter-result.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime/recovery/non-focused-recovery.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime.js +1 -1
- package/node_modules/@stable-harness/core/dist/workflows/index.d.ts +20 -0
- package/node_modules/@stable-harness/core/dist/workflows/index.js +1 -1
- package/node_modules/@stable-harness/core/package.json +3 -3
- package/node_modules/@stable-harness/governance/dist/src/approval-queue.d.ts +1 -0
- package/node_modules/@stable-harness/governance/dist/src/approval-queue.js +1 -1
- package/node_modules/@stable-harness/governance/dist/src/index.d.ts +1 -1
- package/node_modules/@stable-harness/governance/dist/src/index.js +1 -1
- package/node_modules/@stable-harness/governance/package.json +1 -1
- package/node_modules/@stable-harness/memory/package.json +1 -1
- package/node_modules/@stable-harness/protocols/dist/src/http-events.d.ts +2 -0
- package/node_modules/@stable-harness/protocols/dist/src/http-events.js +1 -1
- package/node_modules/@stable-harness/protocols/dist/src/http-server.d.ts +5 -1
- package/node_modules/@stable-harness/protocols/dist/src/http-server.js +1 -1
- package/node_modules/@stable-harness/protocols/dist/src/index.d.ts +3 -3
- package/node_modules/@stable-harness/protocols/dist/src/index.js +1 -1
- package/node_modules/@stable-harness/protocols/dist/src/openai-compatible.js +1 -1
- package/node_modules/@stable-harness/protocols/dist/src/openai-payload.d.ts +89 -0
- package/node_modules/@stable-harness/protocols/dist/src/openai-payload.js +1 -1
- package/node_modules/@stable-harness/protocols/dist/src/{agent-protocols.d.ts → protocol-facades.d.ts} +4 -10
- package/node_modules/@stable-harness/protocols/dist/src/protocol-facades.js +1 -0
- package/node_modules/@stable-harness/protocols/dist/src/protocol-utils.d.ts +505 -0
- package/node_modules/@stable-harness/protocols/dist/src/protocol-utils.js +1 -0
- package/node_modules/@stable-harness/protocols/package.json +2 -2
- package/node_modules/@stable-harness/tool-gateway/dist/src/argument-guard.js +1 -1
- package/node_modules/@stable-harness/tool-gateway/dist/src/schema-validation.js +1 -1
- package/node_modules/@stable-harness/tool-gateway/package.json +1 -1
- package/node_modules/@stable-harness/workspace-yaml/dist/boundary-scan.js +1 -1
- package/node_modules/@stable-harness/workspace-yaml/dist/discovery.js +1 -1
- package/node_modules/@stable-harness/workspace-yaml/dist/documents.js +1 -1
- package/node_modules/@stable-harness/workspace-yaml/dist/loader.js +1 -1
- package/node_modules/@stable-harness/workspace-yaml/dist/workflows.js +1 -1
- package/node_modules/@stable-harness/workspace-yaml/package.json +2 -2
- package/package.json +12 -11
- package/packages/adapter-deepagents/dist/src/adapter.js +1 -1
- package/packages/adapter-deepagents/dist/src/internal/builtin/task-inventory.js +1 -1
- package/packages/adapter-deepagents/dist/src/internal/builtin-call-repair.js +1 -1
- package/packages/adapter-deepagents/dist/src/internal/builtin-tool-policy.js +1 -1
- package/packages/adapter-deepagents/dist/src/internal/gateway/tool-failure-events.js +1 -1
- package/packages/adapter-deepagents/dist/src/internal/raw-tool-call-parser.js +1 -1
- package/packages/adapter-deepagents/dist/src/internal/stream-events.js +1 -1
- package/packages/adapter-deepagents/dist/src/internal/substrate/checkpoint.js +1 -1
- package/packages/adapter-deepagents/dist/src/internal/tool-repeat-visibility.js +1 -1
- package/packages/adapter-deepagents/dist/src/internal/trace-projection.js +1 -1
- package/packages/adapter-deepagents/dist/src/internal/vfs-backend.js +1 -1
- package/packages/adapter-deepagents/package.json +2 -2
- package/packages/adapter-langgraph/dist/src/graph.js +1 -1
- package/packages/adapter-langgraph/dist/src/index.js +1 -1
- package/packages/adapter-langgraph/dist/src/runtime.js +1 -1
- package/packages/adapter-langgraph/dist/src/skill-providers.js +1 -1
- package/packages/adapter-langgraph/dist/src/types.d.ts +1 -0
- package/packages/adapter-langgraph/package.json +2 -2
- package/packages/cli/dist/src/args.d.ts +3 -2
- package/packages/cli/dist/src/args.js +1 -1
- package/packages/cli/dist/src/build.js +1 -1
- package/packages/cli/dist/src/cli.js +1 -1
- package/packages/cli/dist/src/console/session.js +1 -1
- package/packages/cli/dist/src/daemon/client.d.ts +4 -3
- package/packages/cli/dist/src/daemon/client.js +1 -1
- package/packages/cli/dist/src/init.js +1 -1
- package/packages/cli/dist/src/langgraph/agent-server-compat.d.ts +8 -0
- package/packages/cli/dist/src/langgraph/agent-server-compat.js +1 -0
- package/packages/cli/dist/src/langgraph/store-projection.d.ts +1 -0
- package/packages/cli/dist/src/langgraph/store-projection.js +1 -0
- package/packages/cli/dist/src/langgraph-official.js +1 -1
- package/packages/cli/dist/src/memory/providers.js +1 -1
- package/packages/cli/dist/src/server/gateway.d.ts +12 -0
- package/packages/cli/dist/src/server/gateway.js +1 -0
- package/packages/cli/dist/src/server/protocol-defaults.d.ts +7 -0
- package/packages/cli/dist/src/server/protocol-defaults.js +1 -0
- package/packages/cli/dist/src/server/studio.d.ts +1 -0
- package/packages/cli/dist/src/server/studio.js +1 -0
- package/packages/cli/dist/src/server.js +1 -1
- package/packages/cli/package.json +8 -8
- package/packages/core/dist/boundary-scan.js +1 -1
- package/packages/core/dist/index.d.ts +1 -0
- package/packages/core/dist/index.js +1 -1
- package/packages/core/dist/memory-plugins/shared.js +1 -1
- package/packages/core/dist/memory-plugins.js +1 -1
- package/packages/core/dist/quality/event-evidence.js +1 -1
- package/packages/core/dist/quality/execution-review.js +1 -1
- package/packages/core/dist/quality/synthesis/fields.js +1 -1
- package/packages/core/dist/recovery/execution-contract.js +1 -1
- package/packages/core/dist/recovery/tool-call-structure.js +1 -1
- package/packages/core/dist/recovery/tool-call.js +1 -1
- package/packages/core/dist/runtime/direct-tool-call.js +1 -1
- package/packages/core/dist/runtime/inspection/methods.js +1 -1
- package/packages/core/dist/runtime/inspection/replay.js +1 -1
- package/packages/core/dist/runtime/persistence/artifacts.d.ts +4 -0
- package/packages/core/dist/runtime/persistence/artifacts.js +1 -1
- package/packages/core/dist/runtime/persistence/queue.d.ts +1 -0
- package/packages/core/dist/runtime/persistence/queue.js +1 -1
- package/packages/core/dist/runtime/persistence/stores.d.ts +1 -0
- package/packages/core/dist/runtime/persistence/stores.js +1 -1
- package/packages/core/dist/runtime/persistence/system-data.d.ts +34 -0
- package/packages/core/dist/runtime/persistence/system-data.js +1 -0
- package/packages/core/dist/runtime/recovery/adapter-result.js +1 -1
- package/packages/core/dist/runtime/recovery/non-focused-recovery.js +1 -1
- package/packages/core/dist/runtime.js +1 -1
- package/packages/core/dist/workflows/index.d.ts +20 -0
- package/packages/core/dist/workflows/index.js +1 -1
- package/packages/core/package.json +3 -3
- package/packages/evaluation/dist/src/benchmark.js +1 -1
- package/packages/evaluation/dist/src/run-record.js +1 -1
- package/packages/evaluation/dist/src/tool-call-metrics.js +1 -1
- package/packages/evaluation/package.json +2 -2
- package/packages/governance/dist/src/approval-queue.d.ts +1 -0
- package/packages/governance/dist/src/approval-queue.js +1 -1
- package/packages/governance/dist/src/index.d.ts +1 -1
- package/packages/governance/dist/src/index.js +1 -1
- package/packages/governance/package.json +1 -1
- package/packages/memory/package.json +1 -1
- package/packages/protocols/dist/src/http-events.d.ts +2 -0
- package/packages/protocols/dist/src/http-events.js +1 -1
- package/packages/protocols/dist/src/http-server.d.ts +5 -1
- package/packages/protocols/dist/src/http-server.js +1 -1
- package/packages/protocols/dist/src/index.d.ts +3 -3
- package/packages/protocols/dist/src/index.js +1 -1
- package/packages/protocols/dist/src/openai-compatible.js +1 -1
- package/packages/protocols/dist/src/openai-payload.d.ts +89 -0
- package/packages/protocols/dist/src/openai-payload.js +1 -1
- package/packages/protocols/dist/src/{agent-protocols.d.ts → protocol-facades.d.ts} +4 -10
- package/packages/protocols/dist/src/protocol-facades.js +1 -0
- package/packages/protocols/dist/src/protocol-utils.d.ts +505 -0
- package/packages/protocols/dist/src/protocol-utils.js +1 -0
- package/packages/protocols/package.json +2 -2
- package/packages/tool-gateway/dist/src/argument-guard.js +1 -1
- package/packages/tool-gateway/dist/src/schema-validation.js +1 -1
- package/packages/tool-gateway/package.json +1 -1
- package/packages/workspace-yaml/dist/boundary-scan.js +1 -1
- package/packages/workspace-yaml/dist/discovery.js +1 -1
- package/packages/workspace-yaml/dist/documents.js +1 -1
- package/packages/workspace-yaml/dist/loader.js +1 -1
- package/packages/workspace-yaml/dist/workflows.js +1 -1
- package/packages/workspace-yaml/package.json +2 -2
- package/node_modules/@stable-harness/protocols/dist/src/agent-protocols.js +0 -1
- 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:
|
|
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
|
-
|
|
29
|
+
gateway:
|
|
27
30
|
enabled: true
|
|
28
31
|
host: 127.0.0.1
|
|
29
|
-
port:
|
|
32
|
+
port: 56789
|
|
33
|
+
bearerToken: ${env:STABLE_HARNESS_API_KEY}
|
|
30
34
|
```
|
|
31
35
|
|
|
32
|
-
`
|
|
33
|
-
|
|
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 /
|
|
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
|
|
20
|
-
ecosystem facades by default:
|
|
22
|
+
`stable-harness start` starts one public gateway by default:
|
|
21
23
|
|
|
22
|
-
|
|
|
23
|
-
| --- | --- |
|
|
24
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
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
|
-
|
|
36
|
-
enabled: true
|
|
42
|
+
gateway:
|
|
37
43
|
host: 127.0.0.1
|
|
38
|
-
port:
|
|
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
|
|
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:
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
22
|
+
gateway:
|
|
16
23
|
enabled: true
|
|
17
24
|
host: 127.0.0.1
|
|
18
|
-
port:
|
|
19
|
-
|
|
25
|
+
port: 56789
|
|
26
|
+
acp:
|
|
27
|
+
enabled: true
|
|
28
|
+
a2a:
|
|
29
|
+
enabled: true
|
|
30
|
+
agui:
|
|
31
|
+
enabled: true
|
|
20
32
|
```
|
|
21
33
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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.
|
|
38
|
-
|
|
39
|
-
requests, managing memory, approvals, artifacts,
|
|
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;
|
|
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
|
|
89
|
-
| Task subscription |
|
|
90
|
-
|
|
|
91
|
-
|
|
|
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 |
|
|
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
|
-
|
|
|
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. |
|