@godspeedai/cognate-proto 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,20 +1,83 @@
1
1
  # @godspeedai/cognate-proto
2
2
 
3
- Generated TypeScript bindings for the canonical `proto/` sources (spec §21). Generated code
4
- (`src/gen/**`) is committed and never edited by hand; `src/index.ts` re-exports `RuntimeService`,
5
- every message and enum.
6
-
7
- Regenerate with `bun scripts/generate.ts [outDir]` (default `src/gen`). It runs `buf generate`
8
- against `buf.gen.yaml`, using the pinned local `protoc-gen-es` binary from `node_modules/.bin`,
9
- `target=ts`, reading `../../proto` (the canonical sources) via `buf.yaml`. Generation is
10
- deterministic: two runs into separate directories are byte-identical to each other and to the
11
- committed `src/gen`.
12
-
13
- ## Supported mode matrix
14
-
15
- | Concern | Support |
16
- | --- | --- |
17
- | Message/enum codegen | Full (all `proto/cognate/v1/*.proto`) |
18
- | `RuntimeService` methods | Unary + server-streaming only (DEBT-004); no client/bidi streaming methods exist in the schema |
19
- | Wire formats | JSON and binary (protobuf-es `Message` supports both; format choice is a transport concern) |
20
- | Codegen determinism | Verified by `test/codegen.test.ts` (two fresh generations + committed output, byte-for-byte) |
3
+ Generated TypeScript bindings for Cognate's canonical protobuf schemas (the `cognate.v1` package), produced with [buf](https://buf.build) and [protobuf-es](https://protobuf-es.buf.build).
4
+
5
+ **When to use this package:** you need the typed `RuntimeService` service descriptor and the generated message and enum classes for Cognate's wire format — for a custom transport, a gateway in another stack, or message-level tooling. Applications that simply call a Cognate runtime should use [`@godspeedai/cognate-client`](https://www.npmjs.com/package/@godspeedai/cognate-client) or the protocol adapters instead; they build on these bindings and handle the wire details for you.
6
+
7
+ ## Installation
8
+
9
+ ```sh
10
+ bun add @godspeedai/cognate-proto
11
+ ```
12
+
13
+ Requires [Bun](https://bun.sh) >= 1.4.0. The package depends on `@bufbuild/protobuf`; calling a runtime over HTTP additionally needs a Connect transport (`@connectrpc/connect`, plus `@connectrpc/connect-web` or the convenience exports of [`@godspeedai/cognate-protocol-connect-bun`](https://www.npmjs.com/package/@godspeedai/cognate-protocol-connect-bun)).
14
+
15
+ ## What it exports
16
+
17
+ The entry point re-exports everything generated from the canonical `cognate/v1` schemas:
18
+
19
+ - the `RuntimeService` service descriptor (run start/get/cancel/list, event streaming, continuations, capability invocation, artifacts, projections, shared state, remote capability offers);
20
+ - message types and their schemas — `Event`/`EventSchema`, `Run`, `Continuation`, `StateUpdate`, `RemoteCapabilityOffer`, `SemanticRef`, and the rest of the family;
21
+ - the enums `RunStatus`, `ContinuationStatus`, `ContinuationAction`, and `ResolveOutcome`.
22
+
23
+ ## Quick start
24
+
25
+ Messages are ordinary protobuf-es values — create them from JSON, then serialize to canonical JSON or binary protobuf:
26
+
27
+ ```ts
28
+ import { fromJson, toJson } from "@bufbuild/protobuf";
29
+ import { EventSchema } from "@godspeedai/cognate-proto";
30
+
31
+ const event = fromJson(EventSchema, {
32
+ eventId: "e-1",
33
+ streamId: "s-1",
34
+ streamSequence: "1", // uint64 fields are strings in canonical JSON
35
+ position: "1",
36
+ eventType: "run.started",
37
+ schemaVersion: 1,
38
+ occurredAt: new Date().toISOString(),
39
+ recordedAt: new Date().toISOString(),
40
+ tenant: "tenant-a",
41
+ correlationId: "c-1",
42
+ scopeId: "workspace-1",
43
+ });
44
+
45
+ const json = toJson(EventSchema, event); // canonical JSON
46
+ const bytes = event.toBinary(); // binary protobuf
47
+ ```
48
+
49
+ To call a served runtime with a typed client, hand the service descriptor to a Connect transport:
50
+
51
+ ```ts
52
+ import { createClient } from "@connectrpc/connect";
53
+ import { connectTransport } from "@godspeedai/cognate-protocol-connect-bun";
54
+ import { RuntimeService } from "@godspeedai/cognate-proto";
55
+
56
+ const client = createClient(RuntimeService, connectTransport("http://127.0.0.1:3000"));
57
+ const run = await client.getRun({ runId: "<run id>" });
58
+ ```
59
+
60
+ Prefer [`@godspeedai/cognate-protocol-connect`](https://www.npmjs.com/package/@godspeedai/cognate-protocol-connect)'s `createRemoteRuntimeService` when you call the runtime yourself: the generated client does not coerce plain JSON for `google.protobuf.Value` fields (such as the run `input`), and that adapter performs the conversion and maps error codes in both directions.
61
+
62
+ ## Regeneration
63
+
64
+ The generated files (`src/gen/**`) are committed and never edited by hand. Regeneration happens in the Cognate repository, not downstream: running `bun run generate` in this package executes `buf generate` with a pinned `protoc-gen-es` plugin against the canonical `proto/` sources. Consumers of the published package never run codegen — they import the committed output like any other module.
65
+
66
+ Generation is deterministic: two runs into separate directories are byte-identical to each other and to the committed output, and the package's own test suite keeps that true.
67
+
68
+ ## Limitations
69
+
70
+ - The generated `RuntimeService` declares unary and server-streaming methods only; the schema has no client-streaming or bidirectional methods.
71
+ - protobuf-es can serialize every message as JSON or binary; choosing a wire format is a transport decision, not something this package configures.
72
+ - Message and field shapes change only through a new release of this package, since there is no downstream codegen path.
73
+
74
+ ## Related packages
75
+
76
+ - [`@godspeedai/cognate-protocol-connect`](https://www.npmjs.com/package/@godspeedai/cognate-protocol-connect) — transport-neutral server routes and a remote `RuntimeService` built on these bindings.
77
+ - [`@godspeedai/cognate-protocol-connect-bun`](https://www.npmjs.com/package/@godspeedai/cognate-protocol-connect-bun) — serves the service on `Bun.serve` and provides the fetch transport.
78
+ - [`@godspeedai/cognate-client`](https://www.npmjs.com/package/@godspeedai/cognate-client) — the high-level client most applications should use instead.
79
+ - [`@godspeedai/cognate`](https://www.npmjs.com/package/@godspeedai/cognate) — the SDK umbrella.
80
+
81
+ ## License
82
+
83
+ Apache-2.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@godspeedai/cognate-proto",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Generated TypeScript bindings for the canonical proto/ sources. Generated files are never edited by hand (spec §21).",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -22,7 +22,7 @@ import type { Message } from "@bufbuild/protobuf";
22
22
  * Describes the file cognate/v1/runtime.proto.
23
23
  */
24
24
  export const file_cognate_v1_runtime: GenFile = /*@__PURE__*/
25
- fileDesc("Chhjb2duYXRlL3YxL3J1bnRpbWUucHJvdG8SCmNvZ25hdGUudjEipQEKE1N0cmVhbUV2ZW50c1JlcXVlc3QSGwoOYWZ0ZXJfcG9zaXRpb24YASABKARIAIgBARITCgZydW5faWQYAiABKAlIAYgBARIOCgZmb2xsb3cYAyABKAgSGwoOY29ycmVsYXRpb25faWQYBCABKAlIAogBAUIRCg9fYWZ0ZXJfcG9zaXRpb25CCQoHX3J1bl9pZEIRCg9fY29ycmVsYXRpb25faWQiKwoWUmVhZFNoYXJlZFN0YXRlUmVxdWVzdBIRCgl0aHJlYWRfaWQYASABKAkiUQoXUmVhZFNoYXJlZFN0YXRlUmVzcG9uc2USJQoFc3RhdGUYASABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUSDwoHdmVyc2lvbhgCIAEoBCKjAQoYVXBkYXRlU2hhcmVkU3RhdGVSZXF1ZXN0EhEKCXRocmVhZF9pZBgBIAEoCRInCgZ1cGRhdGUYAiABKAsyFy5jb2duYXRlLnYxLlN0YXRlVXBkYXRlEhcKD2lkZW1wb3RlbmN5X2tleRgDIAEoCRIdChBleHBlY3RlZF92ZXJzaW9uGAQgASgESACIAQFCEwoRX2V4cGVjdGVkX3ZlcnNpb24iUwoZVXBkYXRlU2hhcmVkU3RhdGVSZXNwb25zZRIlCgVzdGF0ZRgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRIPCgd2ZXJzaW9uGAIgASgEIiUKFVJlYWRQcm9qZWN0aW9uUmVxdWVzdBIMCgRuYW1lGAEgASgJIkUKD1Byb2plY3Rpb25FbnRyeRILCgNrZXkYASABKAkSJQoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUiRgoWUmVhZFByb2plY3Rpb25SZXNwb25zZRIsCgdlbnRyaWVzGAEgAygLMhsuY29nbmF0ZS52MS5Qcm9qZWN0aW9uRW50cnkizQIKFVJlbW90ZUNhcGFiaWxpdHlPZmZlchIKCgJpZBgBIAEoCRIQCghsZWFzZV9pZBgCIAEoCRINCgVhZ2VudBgDIAEoCRIQCghzY29wZV9pZBgEIAEoCRISCgpjYXBhYmlsaXR5GAUgASgJEhgKEGNvbnRyYWN0X3ZlcnNpb24YBiABKAkSKgoKYXR0cmlidXRlcxgHIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRITCgtkZXNjcmlwdGlvbhgIIAEoCRIsCgxpbnB1dF9zY2hlbWEYCSABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUSMgoNb3V0cHV0X3NjaGVtYRgKIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUgAiAEBEhIKCmV4cGlyZXNfYXQYCyABKARCEAoOX291dHB1dF9zY2hlbWEirwIKGVB1Ymxpc2hSZW1vdGVPZmZlclJlcXVlc3QSEAoIbGVhc2VfaWQYASABKAkSDQoFYWdlbnQYAiABKAkSEgoKY2FwYWJpbGl0eRgDIAEoCRIYChBjb250cmFjdF92ZXJzaW9uGAQgASgJEioKCmF0dHJpYnV0ZXMYBSABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUSEwoLZGVzY3JpcHRpb24YBiABKAkSLAoMaW5wdXRfc2NoZW1hGAcgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlEjIKDW91dHB1dF9zY2hlbWEYCCABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVIAIgBARIOCgZ0dGxfbXMYCSABKARCEAoOX291dHB1dF9zY2hlbWEiKAoXTGlzdFJlbW90ZU9mZmVyc1JlcXVlc3QSDQoFYWdlbnQYASABKAkiTQoYTGlzdFJlbW90ZU9mZmVyc1Jlc3BvbnNlEjEKBm9mZmVycxgBIAMoCzIhLmNvZ25hdGUudjEuUmVtb3RlQ2FwYWJpbGl0eU9mZmVyIiwKGFJldm9rZVJlbW90ZU9mZmVyUmVxdWVzdBIQCghvZmZlcl9pZBgBIAEoCSIbChlSZXZva2VSZW1vdGVPZmZlclJlc3BvbnNlMqEKCg5SdW50aW1lU2VydmljZRI4CghTdGFydFJ1bhIbLmNvZ25hdGUudjEuU3RhcnRSdW5SZXF1ZXN0Gg8uY29nbmF0ZS52MS5SdW4SNAoGR2V0UnVuEhkuY29nbmF0ZS52MS5HZXRSdW5SZXF1ZXN0Gg8uY29nbmF0ZS52MS5SdW4SOgoJQ2FuY2VsUnVuEhwuY29nbmF0ZS52MS5DYW5jZWxSdW5SZXF1ZXN0Gg8uY29nbmF0ZS52MS5SdW4SRAoMU3RyZWFtRXZlbnRzEh8uY29nbmF0ZS52MS5TdHJlYW1FdmVudHNSZXF1ZXN0GhEuY29nbmF0ZS52MS5FdmVudDABEmAKEUxpc3RDb250aW51YXRpb25zEiQuY29nbmF0ZS52MS5MaXN0Q29udGludWF0aW9uc1JlcXVlc3QaJS5jb2duYXRlLnYxLkxpc3RDb250aW51YXRpb25zUmVzcG9uc2USZgoTUmVzb2x2ZUNvbnRpbnVhdGlvbhImLmNvZ25hdGUudjEuUmVzb2x2ZUNvbnRpbnVhdGlvblJlcXVlc3QaJy5jb2duYXRlLnYxLlJlc29sdmVDb250aW51YXRpb25SZXNwb25zZRI/CgZJbnZva2USGS5jb2duYXRlLnYxLkludm9rZVJlcXVlc3QaGi5jb2duYXRlLnYxLkludm9rZVJlc3BvbnNlEkMKC0dldEFydGlmYWN0Eh4uY29nbmF0ZS52MS5HZXRBcnRpZmFjdFJlcXVlc3QaFC5jb2duYXRlLnYxLkFydGlmYWN0ElcKDlJlYWRQcm9qZWN0aW9uEiEuY29nbmF0ZS52MS5SZWFkUHJvamVjdGlvblJlcXVlc3QaIi5jb2duYXRlLnYxLlJlYWRQcm9qZWN0aW9uUmVzcG9uc2USRQoITGlzdFJ1bnMSGy5jb2duYXRlLnYxLkxpc3RSdW5zUmVxdWVzdBocLmNvZ25hdGUudjEuTGlzdFJ1bnNSZXNwb25zZRJOCgtVcGRhdGVTdGF0ZRIeLmNvZ25hdGUudjEuVXBkYXRlU3RhdGVSZXF1ZXN0Gh8uY29nbmF0ZS52MS5VcGRhdGVTdGF0ZVJlc3BvbnNlEloKD1JlYWRTaGFyZWRTdGF0ZRIiLmNvZ25hdGUudjEuUmVhZFNoYXJlZFN0YXRlUmVxdWVzdBojLmNvZ25hdGUudjEuUmVhZFNoYXJlZFN0YXRlUmVzcG9uc2USYAoRVXBkYXRlU2hhcmVkU3RhdGUSJC5jb2duYXRlLnYxLlVwZGF0ZVNoYXJlZFN0YXRlUmVxdWVzdBolLmNvZ25hdGUudjEuVXBkYXRlU2hhcmVkU3RhdGVSZXNwb25zZRJeChJQdWJsaXNoUmVtb3RlT2ZmZXISJS5jb2duYXRlLnYxLlB1Ymxpc2hSZW1vdGVPZmZlclJlcXVlc3QaIS5jb2duYXRlLnYxLlJlbW90ZUNhcGFiaWxpdHlPZmZlchJdChBMaXN0UmVtb3RlT2ZmZXJzEiMuY29nbmF0ZS52MS5MaXN0UmVtb3RlT2ZmZXJzUmVxdWVzdBokLmNvZ25hdGUudjEuTGlzdFJlbW90ZU9mZmVyc1Jlc3BvbnNlEmAKEVJldm9rZVJlbW90ZU9mZmVyEiQuY29nbmF0ZS52MS5SZXZva2VSZW1vdGVPZmZlclJlcXVlc3QaJS5jb2duYXRlLnYxLlJldm9rZVJlbW90ZU9mZmVyUmVzcG9uc2ViBnByb3RvMw", [file_google_protobuf_struct, file_cognate_v1_artifact, file_cognate_v1_capability, file_cognate_v1_continuation, file_cognate_v1_event, file_cognate_v1_execution]);
25
+ fileDesc("Chhjb2duYXRlL3YxL3J1bnRpbWUucHJvdG8SCmNvZ25hdGUudjEipQEKE1N0cmVhbUV2ZW50c1JlcXVlc3QSGwoOYWZ0ZXJfcG9zaXRpb24YASABKARIAIgBARITCgZydW5faWQYAiABKAlIAYgBARIOCgZmb2xsb3cYAyABKAgSGwoOY29ycmVsYXRpb25faWQYBCABKAlIAogBAUIRCg9fYWZ0ZXJfcG9zaXRpb25CCQoHX3J1bl9pZEIRCg9fY29ycmVsYXRpb25faWQiKwoWUmVhZFNoYXJlZFN0YXRlUmVxdWVzdBIRCgl0aHJlYWRfaWQYASABKAkiUQoXUmVhZFNoYXJlZFN0YXRlUmVzcG9uc2USJQoFc3RhdGUYASABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUSDwoHdmVyc2lvbhgCIAEoBCKjAQoYVXBkYXRlU2hhcmVkU3RhdGVSZXF1ZXN0EhEKCXRocmVhZF9pZBgBIAEoCRInCgZ1cGRhdGUYAiABKAsyFy5jb2duYXRlLnYxLlN0YXRlVXBkYXRlEhcKD2lkZW1wb3RlbmN5X2tleRgDIAEoCRIdChBleHBlY3RlZF92ZXJzaW9uGAQgASgESACIAQFCEwoRX2V4cGVjdGVkX3ZlcnNpb24iUwoZVXBkYXRlU2hhcmVkU3RhdGVSZXNwb25zZRIlCgVzdGF0ZRgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRIPCgd2ZXJzaW9uGAIgASgEIiUKFVJlYWRQcm9qZWN0aW9uUmVxdWVzdBIMCgRuYW1lGAEgASgJIkUKD1Byb2plY3Rpb25FbnRyeRILCgNrZXkYASABKAkSJQoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUingEKFFByb2plY3Rpb25DaGVja3BvaW50EgwKBG5hbWUYASABKAkSDwoHdmVyc2lvbhgCIAEoCRIQCghwb3NpdGlvbhgDIAEoBBIOCgZzdGF0dXMYBCABKAkSFgoOZXJyb3JfcG9zaXRpb24YBSABKAQSFgoOZXJyb3JfZXZlbnRfaWQYBiABKAkSFQoNZXJyb3JfbWVzc2FnZRgHIAEoCSJ8ChZSZWFkUHJvamVjdGlvblJlc3BvbnNlEiwKB2VudHJpZXMYASADKAsyGy5jb2duYXRlLnYxLlByb2plY3Rpb25FbnRyeRI0CgpjaGVja3BvaW50GAIgASgLMiAuY29nbmF0ZS52MS5Qcm9qZWN0aW9uQ2hlY2twb2ludCLNAgoVUmVtb3RlQ2FwYWJpbGl0eU9mZmVyEgoKAmlkGAEgASgJEhAKCGxlYXNlX2lkGAIgASgJEg0KBWFnZW50GAMgASgJEhAKCHNjb3BlX2lkGAQgASgJEhIKCmNhcGFiaWxpdHkYBSABKAkSGAoQY29udHJhY3RfdmVyc2lvbhgGIAEoCRIqCgphdHRyaWJ1dGVzGAcgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlEhMKC2Rlc2NyaXB0aW9uGAggASgJEiwKDGlucHV0X3NjaGVtYRgJIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRIyCg1vdXRwdXRfc2NoZW1hGAogASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlSACIAQESEgoKZXhwaXJlc19hdBgLIAEoBEIQCg5fb3V0cHV0X3NjaGVtYSKvAgoZUHVibGlzaFJlbW90ZU9mZmVyUmVxdWVzdBIQCghsZWFzZV9pZBgBIAEoCRINCgVhZ2VudBgCIAEoCRISCgpjYXBhYmlsaXR5GAMgASgJEhgKEGNvbnRyYWN0X3ZlcnNpb24YBCABKAkSKgoKYXR0cmlidXRlcxgFIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRITCgtkZXNjcmlwdGlvbhgGIAEoCRIsCgxpbnB1dF9zY2hlbWEYByABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUSMgoNb3V0cHV0X3NjaGVtYRgIIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUgAiAEBEg4KBnR0bF9tcxgJIAEoBEIQCg5fb3V0cHV0X3NjaGVtYSIoChdMaXN0UmVtb3RlT2ZmZXJzUmVxdWVzdBINCgVhZ2VudBgBIAEoCSJNChhMaXN0UmVtb3RlT2ZmZXJzUmVzcG9uc2USMQoGb2ZmZXJzGAEgAygLMiEuY29nbmF0ZS52MS5SZW1vdGVDYXBhYmlsaXR5T2ZmZXIiLAoYUmV2b2tlUmVtb3RlT2ZmZXJSZXF1ZXN0EhAKCG9mZmVyX2lkGAEgASgJIhsKGVJldm9rZVJlbW90ZU9mZmVyUmVzcG9uc2UyoQoKDlJ1bnRpbWVTZXJ2aWNlEjgKCFN0YXJ0UnVuEhsuY29nbmF0ZS52MS5TdGFydFJ1blJlcXVlc3QaDy5jb2duYXRlLnYxLlJ1bhI0CgZHZXRSdW4SGS5jb2duYXRlLnYxLkdldFJ1blJlcXVlc3QaDy5jb2duYXRlLnYxLlJ1bhI6CglDYW5jZWxSdW4SHC5jb2duYXRlLnYxLkNhbmNlbFJ1blJlcXVlc3QaDy5jb2duYXRlLnYxLlJ1bhJECgxTdHJlYW1FdmVudHMSHy5jb2duYXRlLnYxLlN0cmVhbUV2ZW50c1JlcXVlc3QaES5jb2duYXRlLnYxLkV2ZW50MAESYAoRTGlzdENvbnRpbnVhdGlvbnMSJC5jb2duYXRlLnYxLkxpc3RDb250aW51YXRpb25zUmVxdWVzdBolLmNvZ25hdGUudjEuTGlzdENvbnRpbnVhdGlvbnNSZXNwb25zZRJmChNSZXNvbHZlQ29udGludWF0aW9uEiYuY29nbmF0ZS52MS5SZXNvbHZlQ29udGludWF0aW9uUmVxdWVzdBonLmNvZ25hdGUudjEuUmVzb2x2ZUNvbnRpbnVhdGlvblJlc3BvbnNlEj8KBkludm9rZRIZLmNvZ25hdGUudjEuSW52b2tlUmVxdWVzdBoaLmNvZ25hdGUudjEuSW52b2tlUmVzcG9uc2USQwoLR2V0QXJ0aWZhY3QSHi5jb2duYXRlLnYxLkdldEFydGlmYWN0UmVxdWVzdBoULmNvZ25hdGUudjEuQXJ0aWZhY3QSVwoOUmVhZFByb2plY3Rpb24SIS5jb2duYXRlLnYxLlJlYWRQcm9qZWN0aW9uUmVxdWVzdBoiLmNvZ25hdGUudjEuUmVhZFByb2plY3Rpb25SZXNwb25zZRJFCghMaXN0UnVucxIbLmNvZ25hdGUudjEuTGlzdFJ1bnNSZXF1ZXN0GhwuY29nbmF0ZS52MS5MaXN0UnVuc1Jlc3BvbnNlEk4KC1VwZGF0ZVN0YXRlEh4uY29nbmF0ZS52MS5VcGRhdGVTdGF0ZVJlcXVlc3QaHy5jb2duYXRlLnYxLlVwZGF0ZVN0YXRlUmVzcG9uc2USWgoPUmVhZFNoYXJlZFN0YXRlEiIuY29nbmF0ZS52MS5SZWFkU2hhcmVkU3RhdGVSZXF1ZXN0GiMuY29nbmF0ZS52MS5SZWFkU2hhcmVkU3RhdGVSZXNwb25zZRJgChFVcGRhdGVTaGFyZWRTdGF0ZRIkLmNvZ25hdGUudjEuVXBkYXRlU2hhcmVkU3RhdGVSZXF1ZXN0GiUuY29nbmF0ZS52MS5VcGRhdGVTaGFyZWRTdGF0ZVJlc3BvbnNlEl4KElB1Ymxpc2hSZW1vdGVPZmZlchIlLmNvZ25hdGUudjEuUHVibGlzaFJlbW90ZU9mZmVyUmVxdWVzdBohLmNvZ25hdGUudjEuUmVtb3RlQ2FwYWJpbGl0eU9mZmVyEl0KEExpc3RSZW1vdGVPZmZlcnMSIy5jb2duYXRlLnYxLkxpc3RSZW1vdGVPZmZlcnNSZXF1ZXN0GiQuY29nbmF0ZS52MS5MaXN0UmVtb3RlT2ZmZXJzUmVzcG9uc2USYAoRUmV2b2tlUmVtb3RlT2ZmZXISJC5jb2duYXRlLnYxLlJldm9rZVJlbW90ZU9mZmVyUmVxdWVzdBolLmNvZ25hdGUudjEuUmV2b2tlUmVtb3RlT2ZmZXJSZXNwb25zZWIGcHJvdG8z", [file_google_protobuf_struct, file_cognate_v1_artifact, file_cognate_v1_capability, file_cognate_v1_continuation, file_cognate_v1_event, file_cognate_v1_execution]);
26
26
 
27
27
  /**
28
28
  * @generated from message cognate.v1.StreamEventsRequest
@@ -188,6 +188,59 @@ export type ProjectionEntry = Message<"cognate.v1.ProjectionEntry"> & {
188
188
  export const ProjectionEntrySchema: GenMessage<ProjectionEntry> = /*@__PURE__*/
189
189
  messageDesc(file_cognate_v1_runtime, 6);
190
190
 
191
+ /**
192
+ * The fold checkpoint describing how far the projection that produced `entries` has processed the
193
+ * store. Never ahead of the entries in the same response (DEBT-021): a client that has observed a
194
+ * store event at a position greater than `position` knows its view is stale and re-reads.
195
+ *
196
+ * @generated from message cognate.v1.ProjectionCheckpoint
197
+ */
198
+ export type ProjectionCheckpoint = Message<"cognate.v1.ProjectionCheckpoint"> & {
199
+ /**
200
+ * @generated from field: string name = 1;
201
+ */
202
+ name: string;
203
+
204
+ /**
205
+ * @generated from field: string version = 2;
206
+ */
207
+ version: string;
208
+
209
+ /**
210
+ * @generated from field: uint64 position = 3;
211
+ */
212
+ position: bigint;
213
+
214
+ /**
215
+ * "ok" or "error".
216
+ *
217
+ * @generated from field: string status = 4;
218
+ */
219
+ status: string;
220
+
221
+ /**
222
+ * @generated from field: uint64 error_position = 5;
223
+ */
224
+ errorPosition: bigint;
225
+
226
+ /**
227
+ * @generated from field: string error_event_id = 6;
228
+ */
229
+ errorEventId: string;
230
+
231
+ /**
232
+ * @generated from field: string error_message = 7;
233
+ */
234
+ errorMessage: string;
235
+ };
236
+
237
+ /**
238
+ * Describes the message cognate.v1.ProjectionCheckpoint.
239
+ * Use `create(ProjectionCheckpointSchema)` to create a new message.
240
+ */
241
+ export const ProjectionCheckpointSchema: GenMessage<ProjectionCheckpoint> = /*@__PURE__*/
242
+ messageDesc(file_cognate_v1_runtime, 7);
243
+
191
244
  /**
192
245
  * @generated from message cognate.v1.ReadProjectionResponse
193
246
  */
@@ -196,6 +249,11 @@ export type ReadProjectionResponse = Message<"cognate.v1.ReadProjectionResponse"
196
249
  * @generated from field: repeated cognate.v1.ProjectionEntry entries = 1;
197
250
  */
198
251
  entries: ProjectionEntry[];
252
+
253
+ /**
254
+ * @generated from field: cognate.v1.ProjectionCheckpoint checkpoint = 2;
255
+ */
256
+ checkpoint?: ProjectionCheckpoint | undefined;
199
257
  };
200
258
 
201
259
  /**
@@ -203,7 +261,7 @@ export type ReadProjectionResponse = Message<"cognate.v1.ReadProjectionResponse"
203
261
  * Use `create(ReadProjectionResponseSchema)` to create a new message.
204
262
  */
205
263
  export const ReadProjectionResponseSchema: GenMessage<ReadProjectionResponse> = /*@__PURE__*/
206
- messageDesc(file_cognate_v1_runtime, 7);
264
+ messageDesc(file_cognate_v1_runtime, 8);
207
265
 
208
266
  /**
209
267
  * @generated from message cognate.v1.RemoteCapabilityOffer
@@ -270,7 +328,7 @@ export type RemoteCapabilityOffer = Message<"cognate.v1.RemoteCapabilityOffer">
270
328
  * Use `create(RemoteCapabilityOfferSchema)` to create a new message.
271
329
  */
272
330
  export const RemoteCapabilityOfferSchema: GenMessage<RemoteCapabilityOffer> = /*@__PURE__*/
273
- messageDesc(file_cognate_v1_runtime, 8);
331
+ messageDesc(file_cognate_v1_runtime, 9);
274
332
 
275
333
  /**
276
334
  * @generated from message cognate.v1.PublishRemoteOfferRequest
@@ -327,7 +385,7 @@ export type PublishRemoteOfferRequest = Message<"cognate.v1.PublishRemoteOfferRe
327
385
  * Use `create(PublishRemoteOfferRequestSchema)` to create a new message.
328
386
  */
329
387
  export const PublishRemoteOfferRequestSchema: GenMessage<PublishRemoteOfferRequest> = /*@__PURE__*/
330
- messageDesc(file_cognate_v1_runtime, 9);
388
+ messageDesc(file_cognate_v1_runtime, 10);
331
389
 
332
390
  /**
333
391
  * @generated from message cognate.v1.ListRemoteOffersRequest
@@ -344,7 +402,7 @@ export type ListRemoteOffersRequest = Message<"cognate.v1.ListRemoteOffersReques
344
402
  * Use `create(ListRemoteOffersRequestSchema)` to create a new message.
345
403
  */
346
404
  export const ListRemoteOffersRequestSchema: GenMessage<ListRemoteOffersRequest> = /*@__PURE__*/
347
- messageDesc(file_cognate_v1_runtime, 10);
405
+ messageDesc(file_cognate_v1_runtime, 11);
348
406
 
349
407
  /**
350
408
  * @generated from message cognate.v1.ListRemoteOffersResponse
@@ -361,7 +419,7 @@ export type ListRemoteOffersResponse = Message<"cognate.v1.ListRemoteOffersRespo
361
419
  * Use `create(ListRemoteOffersResponseSchema)` to create a new message.
362
420
  */
363
421
  export const ListRemoteOffersResponseSchema: GenMessage<ListRemoteOffersResponse> = /*@__PURE__*/
364
- messageDesc(file_cognate_v1_runtime, 11);
422
+ messageDesc(file_cognate_v1_runtime, 12);
365
423
 
366
424
  /**
367
425
  * @generated from message cognate.v1.RevokeRemoteOfferRequest
@@ -378,7 +436,7 @@ export type RevokeRemoteOfferRequest = Message<"cognate.v1.RevokeRemoteOfferRequ
378
436
  * Use `create(RevokeRemoteOfferRequestSchema)` to create a new message.
379
437
  */
380
438
  export const RevokeRemoteOfferRequestSchema: GenMessage<RevokeRemoteOfferRequest> = /*@__PURE__*/
381
- messageDesc(file_cognate_v1_runtime, 12);
439
+ messageDesc(file_cognate_v1_runtime, 13);
382
440
 
383
441
  /**
384
442
  * @generated from message cognate.v1.RevokeRemoteOfferResponse
@@ -391,7 +449,7 @@ export type RevokeRemoteOfferResponse = Message<"cognate.v1.RevokeRemoteOfferRes
391
449
  * Use `create(RevokeRemoteOfferResponseSchema)` to create a new message.
392
450
  */
393
451
  export const RevokeRemoteOfferResponseSchema: GenMessage<RevokeRemoteOfferResponse> = /*@__PURE__*/
394
- messageDesc(file_cognate_v1_runtime, 13);
452
+ messageDesc(file_cognate_v1_runtime, 14);
395
453
 
396
454
  /**
397
455
  * Runtime service (ADR-0011). Caller identity comes from transport authentication, never from messages (§32).