borgmcp-shared 0.3.0 → 0.4.2
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 +46 -26
- package/SECURITY.md +6 -5
- package/dist/conformance/adapter.d.ts +62 -11
- package/dist/conformance/adapter.d.ts.map +1 -1
- package/dist/conformance/adapter.js +273 -55
- package/dist/conformance/adapter.js.map +1 -1
- package/dist/protocol/contract.d.ts +56 -25
- package/dist/protocol/contract.d.ts.map +1 -1
- package/dist/protocol/contract.js +147 -116
- package/dist/protocol/contract.js.map +1 -1
- package/dist/protocol/coordination.d.ts +25 -0
- package/dist/protocol/coordination.d.ts.map +1 -1
- package/dist/protocol/coordination.js +44 -0
- package/dist/protocol/coordination.js.map +1 -1
- package/dist/protocol/errors.d.ts +2 -4
- package/dist/protocol/errors.d.ts.map +1 -1
- package/dist/protocol/errors.js +1 -1
- package/dist/protocol/errors.js.map +1 -1
- package/dist/protocol/version.d.ts +2 -10
- package/dist/protocol/version.d.ts.map +1 -1
- package/dist/protocol/version.js +1 -18
- package/dist/protocol/version.js.map +1 -1
- package/dist/templates.d.ts +1 -1
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +9 -11
- package/dist/templates.js.map +1 -1
- package/docs/compatibility.md +38 -50
- package/docs/enrollment.md +27 -17
- package/docs/releasing.md +61 -33
- package/package.json +2 -2
- package/src/conformance/adapter.ts +618 -82
- package/src/protocol/contract.ts +250 -160
- package/src/protocol/coordination.ts +82 -0
- package/src/protocol/errors.ts +7 -3
- package/src/protocol/version.ts +3 -35
- package/src/templates.ts +9 -11
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ import { ADAPTER_CONFORMANCE_FIXTURES } from 'borgmcp-shared/conformance';
|
|
|
41
41
|
The supported subpaths are:
|
|
42
42
|
|
|
43
43
|
- `borgmcp-shared/protocol`: wire entities, requests, responses, errors, and
|
|
44
|
-
protocol
|
|
44
|
+
the exact protocol version tag.
|
|
45
45
|
- `borgmcp-shared/domain`: pure role-section, address, and high-water-mark
|
|
46
46
|
helpers plus shared domain types.
|
|
47
47
|
- `borgmcp-shared/conformance`: test-runner-independent behavior vectors and
|
|
@@ -67,24 +67,34 @@ The first-slice HTTP contract has four shared paths:
|
|
|
67
67
|
credential-proven retry is non-mutating, and a mismatched replay fails
|
|
68
68
|
uniformly. Secrets never belong in a response, URL, query string, command-line
|
|
69
69
|
argument, diagnostic, or serializable domain entity.
|
|
70
|
-
- `GET /api/protocol`
|
|
71
|
-
package version,
|
|
70
|
+
- `GET /api/protocol` is credential-free and mutation-free. It returns ONLY the
|
|
71
|
+
exact protocol tag — no package version, limits, server identity, or other
|
|
72
|
+
fingerprint surface — so a client verifies pinned TLS and the exact tag before
|
|
73
|
+
it creates or sends any credential.
|
|
72
74
|
- `POST /api/cubes` requires an active parent client with `create_cube`. Its
|
|
73
75
|
strict, idempotent request selects a server-owned template; one atomic success
|
|
74
76
|
creates a cube, two initial roles, and the creator's cube-scoped `manage`
|
|
75
77
|
grant. Exact retries return the same non-secret identities without mutation.
|
|
76
78
|
|
|
77
|
-
`
|
|
78
|
-
|
|
79
|
-
|
|
79
|
+
`decodeProtocolTagPreflight` fails closed on any tag other than the exact
|
|
80
|
+
expected version, on any extra field, or on a non-object body — before any
|
|
81
|
+
credential is created or sent. The exact protocol tag is the sole acceptance
|
|
82
|
+
authority: there is no capability negotiation, and client and server ship and
|
|
83
|
+
update together as one clean-slate product. The attach request envelope still
|
|
84
|
+
decodes its version before any payload as defense in depth.
|
|
80
85
|
|
|
81
86
|
Every JSON coordination request and successful JSON response is carried inside
|
|
82
87
|
`ProtocolEnvelope<T>`. Failures use `ProtocolErrorEnvelope`. The only bodyless
|
|
83
88
|
exceptions are the `204` liveness and acknowledgement responses. Payload codecs
|
|
84
89
|
are exported separately so adapters can validate the envelope first and then
|
|
85
90
|
validate the operation-specific payload without accepting ambiguous fields.
|
|
91
|
+
Cube managers reassign a seat with `PATCH /api/cubes/:cubeId/drones/:droneId`
|
|
92
|
+
and evict one with `DELETE` on the same path. Both operations use strict
|
|
93
|
+
versioned request and success envelopes. An evicted seat's former bearer receives
|
|
94
|
+
the terminal `410 DRONE_EVICTED` signal; revoked or expired sessions remain the
|
|
95
|
+
generic `401 SESSION_REVOKED` case.
|
|
86
96
|
See [docs/enrollment.md](docs/enrollment.md) for purpose-bound owner enrollment,
|
|
87
|
-
ordinary ungranted enrollment, cube creation, pending
|
|
97
|
+
ordinary ungranted enrollment, cube creation, pending enrollment, and retry contracts.
|
|
88
98
|
|
|
89
99
|
## Conformance
|
|
90
100
|
|
|
@@ -94,15 +104,19 @@ readonly data rather than Vitest-specific helpers, so they work with any test
|
|
|
94
104
|
runner and in any JavaScript runtime. Cases cover HTTP and canonical errors,
|
|
95
105
|
credential misuse, isolation and revocation, SSE framing/replay/cursor ordering,
|
|
96
106
|
executable enrollment authority/retry/mismatch/redaction and cube-create
|
|
97
|
-
idempotency, acks, claims, decisions,
|
|
98
|
-
|
|
107
|
+
idempotency, acks, claims, decisions, cube-scoped drone reassignment, role-class
|
|
108
|
+
and single-seat invariants, eviction exclusion, and terminal bearer signaling.
|
|
109
|
+
Manage-scoped cube, role, taxonomy, decision, and drone operations also share an
|
|
110
|
+
authority matrix: managing parents may mutate; known same-cube read/write
|
|
111
|
+
parents receive `403 ACCESS_DENIED`; drone sessions remain non-managing; and
|
|
112
|
+
no-grant, foreign, or unknown cubes remain hidden behind `404 NOT_FOUND`.
|
|
99
113
|
|
|
100
114
|
Implement `AdapterConformanceDriver` with raw responses from the target adapter,
|
|
101
115
|
then call `runAdapterConformance`. The runner creates and decodes envelopes,
|
|
102
116
|
drives state transitions, and decides pass/fail; adapters do not submit expected
|
|
103
|
-
results.
|
|
104
|
-
|
|
105
|
-
|
|
117
|
+
results. Each server or client adapter runs this single portable suite against
|
|
118
|
+
its local/self-hosted implementation. The package does not define a second
|
|
119
|
+
authority, migration target, or fallback implementation.
|
|
106
120
|
|
|
107
121
|
The package's own suite covers built-in templates, role-section patching,
|
|
108
122
|
broadcast high-water-mark ordering, drone-address formatting, and current public
|
|
@@ -110,24 +124,30 @@ response shapes.
|
|
|
110
124
|
|
|
111
125
|
## Compatibility
|
|
112
126
|
|
|
113
|
-
`PROTOCOL_VERSION
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
127
|
+
`PROTOCOL_VERSION` is the sole acceptance authority: every envelope carries the
|
|
128
|
+
protocol tag, and each decoder fails closed on any value other than the exact
|
|
129
|
+
expected tag. There is no capability negotiation, supported-version list,
|
|
130
|
+
compatibility matrix, or version-range fallback. The client and server are one
|
|
131
|
+
clean-slate product — a wire change increments the tag and both adopt it
|
|
132
|
+
together in a coordinated release, with no mixed-version window.
|
|
119
133
|
|
|
120
|
-
See [docs/compatibility.md](docs/compatibility.md) for the
|
|
121
|
-
the
|
|
134
|
+
See [docs/compatibility.md](docs/compatibility.md) for the exact-tag policy and
|
|
135
|
+
the coordinated rollout order for introducing protocol changes.
|
|
122
136
|
|
|
123
137
|
## Distribution
|
|
124
138
|
|
|
125
|
-
`borgmcp-shared@0.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
`
|
|
130
|
-
|
|
139
|
+
`borgmcp-shared@0.4.0` is the published clean-slate v2 baseline and is
|
|
140
|
+
immutable, but its artifact predates the local/self-hosted package cleanup. The
|
|
141
|
+
immutable `v0.4.1` verification artifact exposed a platform-dependent SBOM audit
|
|
142
|
+
and must never be published, moved, reused, rerun, or substituted.
|
|
143
|
+
This source now identifies the still-unpublished `0.4.2` recovery release: its
|
|
144
|
+
package manifest, lockfile, exported identity, and SBOM and packed-artifact
|
|
145
|
+
verifiers all read `0.4.2`. The protocol tag and runtime behavior are unchanged.
|
|
146
|
+
This reviewed version bump grants no tag or publish authority; creating the
|
|
147
|
+
annotated `v0.4.2` tag and publishing its exact reviewed artifact remain separate,
|
|
148
|
+
independently gated steps. After that release, consumers pin exact
|
|
149
|
+
`borgmcp-shared@0.4.2` and commit registry lockfiles. No registry token belongs in
|
|
150
|
+
this repository, package metadata, lockfiles, or a committed `.npmrc`;
|
|
131
151
|
publishing uses protected external credentials and provenance.
|
|
132
152
|
|
|
133
153
|
The first client and server releases must consume the reviewed registry release,
|
package/SECURITY.md
CHANGED
|
@@ -6,10 +6,10 @@ Please report suspected vulnerabilities privately through GitHub Security
|
|
|
6
6
|
Advisories for this repository. Open the repository's **Security** tab, select
|
|
7
7
|
**Advisories**, and choose **Report a vulnerability**.
|
|
8
8
|
|
|
9
|
-
If GitHub's private reporting interface is unavailable,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
If GitHub's private reporting interface is unavailable, do not open a public
|
|
10
|
+
issue containing vulnerability details. Wait until private repository reporting
|
|
11
|
+
is available. Do not include credentials, access tokens, user data, or other
|
|
12
|
+
secrets unless the maintainers explicitly request them through a secure channel.
|
|
13
13
|
|
|
14
14
|
Do not disclose the issue publicly until the maintainers confirm that a fix is
|
|
15
15
|
available and coordinated disclosure is appropriate.
|
|
@@ -18,7 +18,8 @@ available and coordinated disclosure is appropriate.
|
|
|
18
18
|
|
|
19
19
|
Security reports may concern this package's published artifacts, protocol
|
|
20
20
|
contracts, conformance data, dependency chain, or documentation. Vulnerabilities
|
|
21
|
-
in
|
|
21
|
+
in the client or self-hosted server belong in those repositories' private
|
|
22
|
+
security-reporting channels.
|
|
22
23
|
|
|
23
24
|
Only supported package versions receive security fixes. The latest published
|
|
24
25
|
version is always supported; older versions may receive fixes when a safe
|
|
@@ -9,6 +9,25 @@ export interface ConformancePrincipal {
|
|
|
9
9
|
export interface ConformanceCube {
|
|
10
10
|
readonly id: string;
|
|
11
11
|
}
|
|
12
|
+
export interface ConformanceRole {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ConformanceDrone {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
}
|
|
18
|
+
export type ConformanceCubeAccess = 'read' | 'write' | 'manage';
|
|
19
|
+
export interface ConformanceCubeManagementState {
|
|
20
|
+
readonly directive: string;
|
|
21
|
+
readonly taxonomy_marker: string | null;
|
|
22
|
+
readonly role_ids: readonly string[];
|
|
23
|
+
readonly active_decision_ids: readonly string[];
|
|
24
|
+
readonly drones: ReadonlyArray<{
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly role_id: string;
|
|
27
|
+
readonly evicted: boolean;
|
|
28
|
+
readonly session_revoked: boolean;
|
|
29
|
+
}>;
|
|
30
|
+
}
|
|
12
31
|
export interface ConformanceAuthorityState {
|
|
13
32
|
enrolled_clients: number;
|
|
14
33
|
enrollment_claims: number;
|
|
@@ -29,6 +48,7 @@ export interface ConformanceCreatedCubeState {
|
|
|
29
48
|
export interface ConformanceEnrollmentPrincipalState {
|
|
30
49
|
response_client_matches: boolean;
|
|
31
50
|
active_credential_bindings: number;
|
|
51
|
+
bound_credential_matches_enrollment: boolean;
|
|
32
52
|
}
|
|
33
53
|
export interface ConformanceReplayBarrier {
|
|
34
54
|
readonly reached: Promise<void>;
|
|
@@ -41,7 +61,21 @@ export interface ConformanceAdmin {
|
|
|
41
61
|
reset(): Promise<void>;
|
|
42
62
|
createPrincipal(name: string): Promise<ConformancePrincipal>;
|
|
43
63
|
createCube(name: string): Promise<ConformanceCube>;
|
|
44
|
-
grantCube(principal: ConformancePrincipal, cube: ConformanceCube): Promise<void>;
|
|
64
|
+
grantCube(principal: ConformancePrincipal, cube: ConformanceCube, access?: ConformanceCubeAccess): Promise<void>;
|
|
65
|
+
createRole(cube: ConformanceCube, input: {
|
|
66
|
+
readonly roleClass: 'queen' | 'worker';
|
|
67
|
+
readonly isHumanSeat: boolean;
|
|
68
|
+
}): Promise<ConformanceRole>;
|
|
69
|
+
createDrone(principal: ConformancePrincipal, cube: ConformanceCube, role: ConformanceRole): Promise<ConformanceDrone>;
|
|
70
|
+
issueManagedDroneSession(drone: ConformanceDrone): Promise<string>;
|
|
71
|
+
revokeManagedDroneSession(drone: ConformanceDrone): Promise<void>;
|
|
72
|
+
expireManagedDroneSession(drone: ConformanceDrone): Promise<void>;
|
|
73
|
+
inspectManagedDrone(drone: ConformanceDrone): Promise<{
|
|
74
|
+
readonly role_id: string;
|
|
75
|
+
readonly evicted: boolean;
|
|
76
|
+
readonly session_revoked: boolean;
|
|
77
|
+
}>;
|
|
78
|
+
inspectCubeManagementState(cube: ConformanceCube): Promise<ConformanceCubeManagementState>;
|
|
45
79
|
grantCreateCubeCapability(principal: ConformancePrincipal): Promise<void>;
|
|
46
80
|
issueDroneSession(principal: ConformancePrincipal): Promise<string>;
|
|
47
81
|
issueSingleUseInvitation(principal: ConformancePrincipal, purpose: 'owner' | 'client'): Promise<string>;
|
|
@@ -61,8 +95,14 @@ export interface ConformanceOperations {
|
|
|
61
95
|
appendRaw(credential: string, cube: ConformanceCube, body: string): Promise<ConformanceHttpResponse>;
|
|
62
96
|
read(credential: string, cube: ConformanceCube, request: unknown): Promise<ConformanceHttpResponse>;
|
|
63
97
|
ack(credential: string, cube: ConformanceCube, request: unknown): Promise<ConformanceHttpResponse>;
|
|
98
|
+
updateCube(credential: string, cube: ConformanceCube, request: unknown): Promise<ConformanceHttpResponse>;
|
|
99
|
+
createRole(credential: string, cube: ConformanceCube, request: unknown): Promise<ConformanceHttpResponse>;
|
|
100
|
+
patchTaxonomy(credential: string, cube: ConformanceCube, request: unknown): Promise<ConformanceHttpResponse>;
|
|
64
101
|
recordDecision(credential: string, cube: ConformanceCube, request: unknown): Promise<ConformanceHttpResponse>;
|
|
65
102
|
listDecisions(credential: string, cube: ConformanceCube, request: unknown): Promise<ConformanceHttpResponse>;
|
|
103
|
+
listDrones(credential: string, cube: ConformanceCube): Promise<ConformanceHttpResponse>;
|
|
104
|
+
reassignDrone(credential: string, cube: ConformanceCube, drone: ConformanceDrone, request: unknown): Promise<ConformanceHttpResponse>;
|
|
105
|
+
evictDrone(credential: string, cube: ConformanceCube, drone: ConformanceDrone, request: unknown): Promise<ConformanceHttpResponse>;
|
|
66
106
|
openStream(credential: string, cube: ConformanceCube, cursor: LogCursor | null): Promise<ConformanceStreamResponse>;
|
|
67
107
|
}
|
|
68
108
|
export interface ConformanceEnvironment {
|
|
@@ -73,8 +113,11 @@ export declare const ADAPTER_CONFORMANCE_FIXTURES: readonly [{
|
|
|
73
113
|
readonly id: "http.unauthenticated-liveness";
|
|
74
114
|
readonly area: "http";
|
|
75
115
|
}, {
|
|
76
|
-
readonly id: "protocol.
|
|
116
|
+
readonly id: "protocol.credential-free-preflight";
|
|
77
117
|
readonly area: "protocol";
|
|
118
|
+
}, {
|
|
119
|
+
readonly id: "enrollment.retry-authority";
|
|
120
|
+
readonly area: "enrollment";
|
|
78
121
|
}, {
|
|
79
122
|
readonly id: "security.adapter-boundary-injection";
|
|
80
123
|
readonly area: "security";
|
|
@@ -103,8 +146,23 @@ export declare const ADAPTER_CONFORMANCE_FIXTURES: readonly [{
|
|
|
103
146
|
readonly id: "decisions.topic-supersession";
|
|
104
147
|
readonly area: "decisions";
|
|
105
148
|
}, {
|
|
106
|
-
readonly id: "
|
|
107
|
-
readonly area: "
|
|
149
|
+
readonly id: "security.drone-management-authorization";
|
|
150
|
+
readonly area: "security";
|
|
151
|
+
}, {
|
|
152
|
+
readonly id: "security.manage-access-matrix";
|
|
153
|
+
readonly area: "security";
|
|
154
|
+
}, {
|
|
155
|
+
readonly id: "drones.reassign-invariants";
|
|
156
|
+
readonly area: "drones";
|
|
157
|
+
}, {
|
|
158
|
+
readonly id: "security.cross-cube-drone-management";
|
|
159
|
+
readonly area: "security";
|
|
160
|
+
}, {
|
|
161
|
+
readonly id: "drones.evict-terminal-signal";
|
|
162
|
+
readonly area: "drones";
|
|
163
|
+
}, {
|
|
164
|
+
readonly id: "security.drone-session-rejection-causes";
|
|
165
|
+
readonly area: "security";
|
|
108
166
|
}, {
|
|
109
167
|
readonly id: "security.active-stream-revocation";
|
|
110
168
|
readonly area: "security";
|
|
@@ -124,16 +182,9 @@ export interface AdapterConformanceReport {
|
|
|
124
182
|
observations: Record<string, unknown>;
|
|
125
183
|
}>;
|
|
126
184
|
}
|
|
127
|
-
export interface EquivalentAdapterConformanceReport {
|
|
128
|
-
ok: boolean;
|
|
129
|
-
cloud: AdapterConformanceReport;
|
|
130
|
-
local: AdapterConformanceReport;
|
|
131
|
-
equivalent: boolean;
|
|
132
|
-
}
|
|
133
185
|
export interface AdapterConformanceOptions {
|
|
134
186
|
streamDeadlineMs?: number;
|
|
135
187
|
pendingProbeMs?: number;
|
|
136
188
|
}
|
|
137
189
|
export declare function runAdapterConformance(environment: ConformanceEnvironment, options?: AdapterConformanceOptions): Promise<AdapterConformanceReport>;
|
|
138
|
-
export declare function runEquivalentAdapterConformance(cloud: ConformanceEnvironment, local: ConformanceEnvironment, options?: AdapterConformanceOptions): Promise<EquivalentAdapterConformanceReport>;
|
|
139
190
|
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/conformance/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/conformance/adapter.ts"],"names":[],"mappings":"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"}
|