@cotal-ai/runtime 0.48.2 → 0.50.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.
@@ -1,13 +1,19 @@
1
- import { chatStream, chatSubject, subjectMatches, waitConsumerConfig, waitConsumerName } from "@cotal-ai/core";
1
+ import { assertAdmittedSubscribe, chatStream, chatSubject, subjectMatches, waitConsumerConfig, waitConsumerName } from "@cotal-ai/core";
2
2
  import { RunScopeAuthority, RunScopeDenied, WaitReceipts } from "./run-scope-authority.js";
3
- export function createRunWaitHost(broker, authority) {
3
+ export function createRunWaitHost(broker, authority, admission) {
4
4
  const stream = chatStream(broker.space);
5
5
  const receipts = new WaitReceipts();
6
+ // SPEC 14.8: the admitted READ ceiling is checked on every path that hands channel bytes to the
7
+ // run: the fresh open, each fetch (so a revocation lands within one poll and the consumer is
8
+ // closed by the wait's own ending), and the recovered re-read of a matched message. The
9
+ // admission is re-read leader-served each time; a failed read refuses.
10
+ const admitted = async (channel) => assertAdmittedSubscribe(await admission(), channel);
6
11
  return Object.freeze({
7
12
  async open(requestId, channel) {
8
13
  const entry = await authority.wait(requestId, "open");
9
14
  if (entry.external?.waitChannel !== channel)
10
15
  throw new RunScopeDenied(entry.run, channel, "open unrecorded wait channel");
16
+ await admitted(channel);
11
17
  await broker.jsm.consumers.add(stream, waitConsumerConfig(broker.space, requestId, channel));
12
18
  },
13
19
  async fetch(requestId) {
@@ -15,6 +21,7 @@ export function createRunWaitHost(broker, authority) {
15
21
  const channel = entry.external?.waitChannel;
16
22
  if (typeof channel !== "string")
17
23
  throw new RunScopeDenied(entry.run, requestId, "fetch unrecorded wait channel");
24
+ await admitted(channel);
18
25
  const consumer = await broker.js.consumers.get(stream, waitConsumerName(requestId));
19
26
  const info = await consumer.info();
20
27
  const expected = chatSubject(broker.space, "*", "*", channel);
@@ -58,6 +65,7 @@ export function createRunWaitHost(broker, authority) {
58
65
  const channel = entry.external?.waitChannel;
59
66
  if (typeof channel !== "string")
60
67
  throw new RunScopeDenied(entry.run, requestId, "read unrecorded wait channel");
68
+ await admitted(channel);
61
69
  const message = await broker.jsm.streams.getMessage(stream, { seq: sequence });
62
70
  if (message === null || message === undefined)
63
71
  throw new Error(`wait ${requestId}'s recorded message ${sequence} no longer exists`);
@@ -1 +1 @@
1
- {"version":3,"file":"run-wait-host.js","sourceRoot":"","sources":["../src/run-wait-host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-wait-host.js","sourceRoot":"","sources":["../src/run-wait-host.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cotal-ai/runtime",
3
3
  "description": "Cotal workflow runtime: hosts cotal-lang runs on the mesh — the durable step-journal store, the effect handler, and the run driver.",
4
- "version": "0.48.2",
4
+ "version": "0.50.0",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -21,13 +21,16 @@
21
21
  "@nats-io/jetstream": "^3.4.0",
22
22
  "@nats-io/kv": "^3.4.0",
23
23
  "@nats-io/transport-node": "^3.4.0",
24
- "@cotal-ai/core": "0.48.2",
25
- "@cotal-ai/lang": "0.48.2",
26
- "@cotal-ai/workspace": "0.48.2"
24
+ "@cotal-ai/core": "0.50.0",
25
+ "@cotal-ai/workspace": "0.50.0",
26
+ "@cotal-ai/lang": "0.50.0"
27
27
  },
28
28
  "files": [
29
29
  "dist"
30
30
  ],
31
+ "devDependencies": {
32
+ "@cotal-ai/smoke-kit": "0.0.0"
33
+ },
31
34
  "publishConfig": {
32
35
  "access": "public"
33
36
  },