@cotal-ai/core 0.4.0 → 0.6.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/dist/acls.d.ts +45 -0
- package/dist/acls.d.ts.map +1 -0
- package/dist/acls.js +86 -0
- package/dist/acls.js.map +1 -0
- package/dist/agent-file.d.ts +7 -0
- package/dist/agent-file.d.ts.map +1 -1
- package/dist/agent-file.js +29 -2
- package/dist/agent-file.js.map +1 -1
- package/dist/channels.d.ts +13 -2
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +24 -1
- package/dist/channels.js.map +1 -1
- package/dist/command.d.ts +3 -0
- package/dist/command.d.ts.map +1 -1
- package/dist/endpoint.d.ts +341 -61
- package/dist/endpoint.d.ts.map +1 -1
- package/dist/endpoint.js +1178 -205
- package/dist/endpoint.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lease.d.ts +40 -0
- package/dist/lease.d.ts.map +1 -0
- package/dist/lease.js +64 -0
- package/dist/lease.js.map +1 -0
- package/dist/members.d.ts +93 -0
- package/dist/members.d.ts.map +1 -0
- package/dist/members.js +193 -0
- package/dist/members.js.map +1 -0
- package/dist/provision.d.ts +38 -13
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +121 -17
- package/dist/provision.js.map +1 -1
- package/dist/streams.d.ts +48 -23
- package/dist/streams.d.ts.map +1 -1
- package/dist/streams.js +101 -32
- package/dist/streams.js.map +1 -1
- package/dist/subjects.d.ts +85 -4
- package/dist/subjects.d.ts.map +1 -1
- package/dist/subjects.js +134 -4
- package/dist/subjects.js.map +1 -1
- package/dist/types.d.ts +128 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/acls.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable read-ACL registry — read/write helpers over the per-space ACL KV bucket
|
|
3
|
+
* (`cotal_acl_<space>`). One {@link AclRecord} per OWNER under {@link aclKey}, holding that owner's
|
|
4
|
+
* current read ACL (`allowSubscribe`). This is the **keystone** that lets the Plane-3 trusted reader
|
|
5
|
+
* run in a stateless, server-side **delivery daemon**: the reader re-authorizes every durable entry
|
|
6
|
+
* against the owner's ACL read FRESH from here (not the manager's in-memory ledger), so a daemon
|
|
7
|
+
* restart re-reads the truth instead of nak-looping every unknown owner to `term()`.
|
|
8
|
+
*
|
|
9
|
+
* Writes are **privileged** — the manager records an agent's ACL at mint time (the same act as baking
|
|
10
|
+
* it into the JWT); agent-authored ACLs are forbidden (they would self-authorize reads). Every write
|
|
11
|
+
* is a single ATOMIC CAS put of the whole value, so a present record is always complete: a present
|
|
12
|
+
* `allowSubscribe: []` is a known "reads nothing" policy (the reader DROPS), distinct from an ABSENT
|
|
13
|
+
* record (a genuinely-unknown owner — the reader DEFERS, never drops).
|
|
14
|
+
*/
|
|
15
|
+
import { type KV } from "@nats-io/kv";
|
|
16
|
+
import type { AclRecord } from "./types.js";
|
|
17
|
+
/** Open the ACL registry bucket. Auth mode OPENs the bucket pre-created at `cotal up`; a privileged
|
|
18
|
+
* caller may pass `{ create: true }` to lazily CREATE it. Mirrors {@link openMembersRegistry}. */
|
|
19
|
+
export declare function openAclRegistry(nc: import("@nats-io/transport-node").NatsConnection, space: string, opts?: {
|
|
20
|
+
create?: boolean;
|
|
21
|
+
}): Promise<KV>;
|
|
22
|
+
/**
|
|
23
|
+
* Read one owner's read-ACL record, or `undefined` if there is NO usable record — absent, deleted,
|
|
24
|
+
* undecodable, or missing the `allowSubscribe` array. The reader maps that `undefined` to DEFER (an
|
|
25
|
+
* unknown owner, e.g. a pre-provision race — never dropped). A PRESENT record returns its
|
|
26
|
+
* `allowSubscribe` as-is, **including `[]`** (a known no-read policy → DROP). The CAS revision is
|
|
27
|
+
* returned alongside for a read-modify-write.
|
|
28
|
+
*/
|
|
29
|
+
export declare function readAcl(kv: KV, owner: string): Promise<{
|
|
30
|
+
record: AclRecord;
|
|
31
|
+
revision: number;
|
|
32
|
+
} | undefined>;
|
|
33
|
+
/**
|
|
34
|
+
* Record (set) an owner's read ACL — a single ATOMIC CAS put of the full value, never
|
|
35
|
+
* create-then-populate, so a present record is always complete and `[]` always means "no-read", never
|
|
36
|
+
* "not yet written". Bumps `revision`. Retries a revision conflict by re-reading. Idempotent in
|
|
37
|
+
* effect: writing the same `allowSubscribe` is harmless. Use `allowSubscribe: []` to revoke all reads
|
|
38
|
+
* (the reader then DROPS the owner's entries) — distinct from {@link deleteAcl}, which removes the row.
|
|
39
|
+
*/
|
|
40
|
+
export declare function commitAcl(kv: KV, owner: string, allowSubscribe: string[]): Promise<AclRecord>;
|
|
41
|
+
/** Permanently remove an owner's ACL row (GC / footprint deletion — revocation deletes the footprint
|
|
42
|
+
* AFTER invalidating creds). Distinct from a `commitAcl(kv, owner, [])` write, which keeps a present
|
|
43
|
+
* "no-read" record so the reader DROPS (vs. DEFER for an absent owner). */
|
|
44
|
+
export declare function deleteAcl(kv: KV, owner: string): Promise<void>;
|
|
45
|
+
//# sourceMappingURL=acls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acls.d.ts","sourceRoot":"","sources":["../src/acls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAO,KAAK,EAAE,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;mGACmG;AACnG,wBAAsB,eAAe,CACnC,EAAE,EAAE,OAAO,yBAAyB,EAAE,cAAc,EACpD,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9B,OAAO,CAAC,EAAE,CAAC,CAGb;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAC3B,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAU9D;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CA0BnG;AAED;;4EAE4E;AAC5E,wBAAsB,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE"}
|
package/dist/acls.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable read-ACL registry — read/write helpers over the per-space ACL KV bucket
|
|
3
|
+
* (`cotal_acl_<space>`). One {@link AclRecord} per OWNER under {@link aclKey}, holding that owner's
|
|
4
|
+
* current read ACL (`allowSubscribe`). This is the **keystone** that lets the Plane-3 trusted reader
|
|
5
|
+
* run in a stateless, server-side **delivery daemon**: the reader re-authorizes every durable entry
|
|
6
|
+
* against the owner's ACL read FRESH from here (not the manager's in-memory ledger), so a daemon
|
|
7
|
+
* restart re-reads the truth instead of nak-looping every unknown owner to `term()`.
|
|
8
|
+
*
|
|
9
|
+
* Writes are **privileged** — the manager records an agent's ACL at mint time (the same act as baking
|
|
10
|
+
* it into the JWT); agent-authored ACLs are forbidden (they would self-authorize reads). Every write
|
|
11
|
+
* is a single ATOMIC CAS put of the whole value, so a present record is always complete: a present
|
|
12
|
+
* `allowSubscribe: []` is a known "reads nothing" policy (the reader DROPS), distinct from an ABSENT
|
|
13
|
+
* record (a genuinely-unknown owner — the reader DEFERS, never drops).
|
|
14
|
+
*/
|
|
15
|
+
import { Kvm } from "@nats-io/kv";
|
|
16
|
+
import { aclBucket, aclKey } from "./subjects.js";
|
|
17
|
+
/** Open the ACL registry bucket. Auth mode OPENs the bucket pre-created at `cotal up`; a privileged
|
|
18
|
+
* caller may pass `{ create: true }` to lazily CREATE it. Mirrors {@link openMembersRegistry}. */
|
|
19
|
+
export async function openAclRegistry(nc, space, opts = {}) {
|
|
20
|
+
const kvm = new Kvm(nc);
|
|
21
|
+
return opts.create ? kvm.create(aclBucket(space)) : kvm.open(aclBucket(space));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Read one owner's read-ACL record, or `undefined` if there is NO usable record — absent, deleted,
|
|
25
|
+
* undecodable, or missing the `allowSubscribe` array. The reader maps that `undefined` to DEFER (an
|
|
26
|
+
* unknown owner, e.g. a pre-provision race — never dropped). A PRESENT record returns its
|
|
27
|
+
* `allowSubscribe` as-is, **including `[]`** (a known no-read policy → DROP). The CAS revision is
|
|
28
|
+
* returned alongside for a read-modify-write.
|
|
29
|
+
*/
|
|
30
|
+
export async function readAcl(kv, owner) {
|
|
31
|
+
const e = await kv.get(aclKey(owner));
|
|
32
|
+
if (!e || e.operation === "DEL" || e.operation === "PURGE")
|
|
33
|
+
return undefined;
|
|
34
|
+
try {
|
|
35
|
+
const record = e.json();
|
|
36
|
+
if (!Array.isArray(record.allowSubscribe))
|
|
37
|
+
return undefined; // half/garbled — treat as unknown (DEFER)
|
|
38
|
+
return { record, revision: e.revision };
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Record (set) an owner's read ACL — a single ATOMIC CAS put of the full value, never
|
|
46
|
+
* create-then-populate, so a present record is always complete and `[]` always means "no-read", never
|
|
47
|
+
* "not yet written". Bumps `revision`. Retries a revision conflict by re-reading. Idempotent in
|
|
48
|
+
* effect: writing the same `allowSubscribe` is harmless. Use `allowSubscribe: []` to revoke all reads
|
|
49
|
+
* (the reader then DROPS the owner's entries) — distinct from {@link deleteAcl}, which removes the row.
|
|
50
|
+
*/
|
|
51
|
+
export async function commitAcl(kv, owner, allowSubscribe) {
|
|
52
|
+
const key = aclKey(owner);
|
|
53
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
54
|
+
const cur = await readAcl(kv, owner);
|
|
55
|
+
const next = {
|
|
56
|
+
allowSubscribe: [...allowSubscribe],
|
|
57
|
+
revision: (cur?.record.revision ?? 0) + 1,
|
|
58
|
+
updatedAt: Date.now(),
|
|
59
|
+
};
|
|
60
|
+
const data = new TextEncoder().encode(JSON.stringify(next));
|
|
61
|
+
if (!cur) {
|
|
62
|
+
try {
|
|
63
|
+
await kv.create(key, data);
|
|
64
|
+
return next;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
continue; // lost the create race — re-read and try as an update
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
await kv.update(key, data, cur.revision);
|
|
72
|
+
return next;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
continue; // revision moved under us — re-read and retry
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
throw new Error(`acl CAS exhausted retries for ${owner}`);
|
|
79
|
+
}
|
|
80
|
+
/** Permanently remove an owner's ACL row (GC / footprint deletion — revocation deletes the footprint
|
|
81
|
+
* AFTER invalidating creds). Distinct from a `commitAcl(kv, owner, [])` write, which keeps a present
|
|
82
|
+
* "no-read" record so the reader DROPS (vs. DEFER for an absent owner). */
|
|
83
|
+
export async function deleteAcl(kv, owner) {
|
|
84
|
+
await kv.purge(aclKey(owner));
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=acls.js.map
|
package/dist/acls.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acls.js","sourceRoot":"","sources":["../src/acls.ts"],"names":[],"mappings":"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"}
|
package/dist/agent-file.d.ts
CHANGED
|
@@ -17,6 +17,13 @@ export interface AgentDef {
|
|
|
17
17
|
* ACLs). Entries may be wildcard subtrees (`team.>`). Omitted ⇒ **deny** (default-deny):
|
|
18
18
|
* publishing is the dangerous capability, so it must be declared explicitly. */
|
|
19
19
|
allowPublish?: string[];
|
|
20
|
+
/** Per-channel attention DEFAULT: channels delivered but never waking this agent — per-channel
|
|
21
|
+
* `dnd`. Concrete channels within the read ACL (`allowSubscribe`). One-way operator default; the runtime toggle is
|
|
22
|
+
* connector state, never written back here (the file is a shared template). */
|
|
23
|
+
quiet?: string[];
|
|
24
|
+
/** Per-channel attention DEFAULT: channels dropped on receive (incl. `@`-mentions) — "don't receive
|
|
25
|
+
* this channel". Same one-way default semantics as {@link quiet}. */
|
|
26
|
+
muted?: string[];
|
|
20
27
|
/** Model override handed to the agent CLI (e.g. `claude --model`). */
|
|
21
28
|
model?: string;
|
|
22
29
|
/** Capabilities this agent may exercise on the control plane (auth mode → minted into the
|
package/dist/agent-file.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-file.d.ts","sourceRoot":"","sources":["../src/agent-file.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;6GACyG;IACzG,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;yCAGqC;IACrC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;qFAEiF;IACjF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;oGAIgG;IAChG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;oGAIgG;IAChG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;yGACqG;IACrG,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmCD,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"agent-file.d.ts","sourceRoot":"","sources":["../src/agent-file.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;6GACyG;IACzG,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;yCAGqC;IACrC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;qFAEiF;IACjF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;oFAEgF;IAChF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;0EACsE;IACtE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;oGAIgG;IAChG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;oGAIgG;IAChG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;yGACqG;IACrG,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmCD,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAmGpD;AAED;;;8CAG8C;AAC9C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAqB/D;AAmBD;;mDAEmD;AACnD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAItE;AAED;;;kGAGkG;AAClG,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAMpF"}
|
package/dist/agent-file.js
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
26
26
|
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
27
27
|
import { assertValidName } from "./resolve.js";
|
|
28
|
-
import { assertValidChannel, channelInAllow } from "./subjects.js";
|
|
28
|
+
import { assertValidChannel, channelInAllow, isConcreteChannel } from "./subjects.js";
|
|
29
29
|
/** Strip wrapping quotes from a scalar value. */
|
|
30
30
|
function unquote(v) {
|
|
31
31
|
if ((v.startsWith('"') && v.endsWith('"')) || (v.startsWith("'") && v.endsWith("'")))
|
|
@@ -97,6 +97,8 @@ export function loadAgentFile(path) {
|
|
|
97
97
|
const subscribe = list("subscribe");
|
|
98
98
|
const allowSubscribe = list("allowSubscribe");
|
|
99
99
|
const allowPublish = list("allowPublish");
|
|
100
|
+
const quiet = list("quiet");
|
|
101
|
+
const muted = list("muted");
|
|
100
102
|
// Reject channel names the wire layer would silently rewrite — a policy name must equal its wire
|
|
101
103
|
// token, or the ACL aliases (see assertValidChannel). Covers all three scope fields.
|
|
102
104
|
for (const ch of [...(subscribe ?? []), ...(allowSubscribe ?? []), ...(allowPublish ?? [])])
|
|
@@ -113,9 +115,28 @@ export function loadAgentFile(path) {
|
|
|
113
115
|
for (const ch of effSubscribe)
|
|
114
116
|
if (!channelInAllow(effAllow, ch))
|
|
115
117
|
throw new Error(`agent file ${path}: subscribe channel "${ch}" is not within allowSubscribe [${effAllow.join(", ")}]`);
|
|
118
|
+
// Per-channel attention defaults (quiet/muted): concrete channels within the read ACL (allowSubscribe)
|
|
119
|
+
// — silencing a channel you can't read, or with a wildcard the ingest match would never hit, is a config error. A
|
|
120
|
+
// channel can't be both at once. Fail loud (no silent no-op), matching the checks above.
|
|
121
|
+
const both = (quiet ?? []).filter((c) => (muted ?? []).includes(c));
|
|
122
|
+
if (both.length)
|
|
123
|
+
throw new Error(`agent file ${path}: channel(s) [${both.join(", ")}] are in both quiet and muted — pick one`);
|
|
124
|
+
for (const [field, chans] of [["quiet", quiet], ["muted", muted]])
|
|
125
|
+
for (const ch of chans ?? []) {
|
|
126
|
+
try {
|
|
127
|
+
assertValidChannel(ch);
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
throw new Error(`agent file ${path}: ${e.message}`);
|
|
131
|
+
}
|
|
132
|
+
if (!isConcreteChannel(ch))
|
|
133
|
+
throw new Error(`agent file ${path}: ${field} channel "${ch}" must be a concrete channel (no wildcard)`);
|
|
134
|
+
if (!channelInAllow(effAllow, ch))
|
|
135
|
+
throw new Error(`agent file ${path}: ${field} channel "${ch}" is not within your read ACL / allowSubscribe [${effAllow.join(", ")}]`);
|
|
136
|
+
}
|
|
116
137
|
// Sweep every scalar frontmatter key we don't model into meta, verbatim — connector hints
|
|
117
138
|
// (face, etc.) ride here so core stays ignorant of surface-specific keys.
|
|
118
|
-
const known = new Set(["name", "role", "kind", "description", "tags", "subscribe", "allowSubscribe", "allowPublish", "model", "capabilities", "owner"]);
|
|
139
|
+
const known = new Set(["name", "role", "kind", "description", "tags", "subscribe", "allowSubscribe", "allowPublish", "quiet", "muted", "model", "capabilities", "owner"]);
|
|
119
140
|
const meta = {};
|
|
120
141
|
for (const [k, v] of Object.entries(fm))
|
|
121
142
|
if (!known.has(k) && typeof v === "string")
|
|
@@ -129,6 +150,8 @@ export function loadAgentFile(path) {
|
|
|
129
150
|
subscribe,
|
|
130
151
|
allowSubscribe,
|
|
131
152
|
allowPublish,
|
|
153
|
+
quiet,
|
|
154
|
+
muted,
|
|
132
155
|
model: str("model"),
|
|
133
156
|
capabilities: list("capabilities"),
|
|
134
157
|
owner: str("owner"),
|
|
@@ -159,6 +182,10 @@ export function saveAgentFile(path, def) {
|
|
|
159
182
|
lines.push(`allowSubscribe: [${def.allowSubscribe.map(fmItem).join(", ")}]`);
|
|
160
183
|
if (def.allowPublish?.length)
|
|
161
184
|
lines.push(`allowPublish: [${def.allowPublish.map(fmItem).join(", ")}]`);
|
|
185
|
+
if (def.quiet?.length)
|
|
186
|
+
lines.push(`quiet: [${def.quiet.map(fmItem).join(", ")}]`);
|
|
187
|
+
if (def.muted?.length)
|
|
188
|
+
lines.push(`muted: [${def.muted.map(fmItem).join(", ")}]`);
|
|
162
189
|
if (def.model)
|
|
163
190
|
lines.push(`model: ${fmScalar(def.model)}`);
|
|
164
191
|
if (def.capabilities?.length)
|
package/dist/agent-file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-file.js","sourceRoot":"","sources":["../src/agent-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-file.js","sourceRoot":"","sources":["../src/agent-file.ts"],"names":[],"mappings":"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"}
|
package/dist/channels.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { type KV } from "@nats-io/kv";
|
|
11
11
|
import { type NatsConnection } from "@nats-io/transport-node";
|
|
12
|
-
import type { ChannelConfig, ChannelDefaults } from "./types.js";
|
|
12
|
+
import type { ChannelConfig, ChannelDefaults, DeliveryClass } from "./types.js";
|
|
13
13
|
/** The declarative channel-config file read at `cotal up` to seed the registry. */
|
|
14
14
|
export interface ChannelRegistryFile {
|
|
15
15
|
defaults?: ChannelDefaults;
|
|
@@ -23,6 +23,10 @@ export declare const MAX_CHANNEL_INSTRUCTIONS = 2000;
|
|
|
23
23
|
/** Throw if a config is invalid: oversize text (rejected, never clamped — a write past the cap
|
|
24
24
|
* is a caller bug) or an unparseable `replayWindow`. */
|
|
25
25
|
export declare function validateChannelConfig(cfg: ChannelConfig): void;
|
|
26
|
+
/** Validate a defaults patch the same way per-channel config is — the space default feeds
|
|
27
|
+
* {@link effectiveDeliveryClass} as a co-equal input, so a bad value must fail loud here, not
|
|
28
|
+
* silently become the space-wide effective class. */
|
|
29
|
+
export declare function validateChannelDefaults(d: ChannelDefaults): void;
|
|
26
30
|
/** Parse a duration like `"24h"`, `"30m"`, `"7d"`, `"90s"` into milliseconds. Throws on a bad
|
|
27
31
|
* format — a typo'd window must fail loud, not silently mean "no window". */
|
|
28
32
|
export declare function parseDuration(s: string): number;
|
|
@@ -32,6 +36,12 @@ export declare function effectiveReplay(cfg: ChannelConfig | undefined, defaults
|
|
|
32
36
|
/** Effective backfill window in ms (per-channel ?? space default), or undefined for "the full
|
|
33
37
|
* retained window". Only meaningful when {@link effectiveReplay} is true. */
|
|
34
38
|
export declare function effectiveReplayWindowMs(cfg: ChannelConfig | undefined, defaults: ChannelDefaults | undefined): number | undefined;
|
|
39
|
+
/** Effective delivery class for a channel (SPEC §4): per-channel override ?? space default ??
|
|
40
|
+
* `"durable"`. Default-durable keeps persistence on when a space declares no default — the safe
|
|
41
|
+
* fallback; a space sets `defaults.deliveryClass` at creation per deployment profile. The SAME
|
|
42
|
+
* resolution MUST drive live join, durable fan-out, history read, and membership surfacing, so
|
|
43
|
+
* every path agrees on a channel's class. */
|
|
44
|
+
export declare function effectiveDeliveryClass(cfg: ChannelConfig | undefined, defaults: ChannelDefaults | undefined): DeliveryClass;
|
|
35
45
|
/** Open the channels registry bucket. Auth mode (creds present) OPENs the bucket pre-created
|
|
36
46
|
* at `cotal up`; open dev mode lazily CREATEs it. Mirrors the presence-bucket open/create
|
|
37
47
|
* split (and, like presence, agents are denied KV stream-create so they must OPEN). */
|
|
@@ -45,7 +55,8 @@ export declare function readChannelDefaults(kv: KV): Promise<ChannelDefaults | u
|
|
|
45
55
|
/** Privileged write of a channel's config. **Merges** over any existing entry so a partial
|
|
46
56
|
* set (e.g. `--desc` only) doesn't wipe `replay`. Validated before the put. */
|
|
47
57
|
export declare function writeChannelConfig(kv: KV, channel: string, patch: ChannelConfig): Promise<void>;
|
|
48
|
-
/** Privileged write of the space-wide defaults (merged over any existing).
|
|
58
|
+
/** Privileged write of the space-wide defaults (merged over any existing). Validated before the
|
|
59
|
+
* put — a bad default would otherwise feed {@link effectiveDeliveryClass} silently. */
|
|
49
60
|
export declare function writeChannelDefaults(kv: KV, patch: ChannelDefaults): Promise<void>;
|
|
50
61
|
/** Connect (with the given privileged creds, or open if none), seed the registry from a
|
|
51
62
|
* declarative {@link ChannelRegistryFile} (defaults + per-channel config, merged), disconnect.
|
package/dist/channels.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAO,KAAK,EAAE,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE3F,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAO,KAAK,EAAE,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE3F,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhF,mFAAmF;AACnF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC1C;AAED;iFACiF;AACjF,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;yDACyD;AACzD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAgB9D;AAED;;sDAEsD;AACtD,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAIhE;AAED;8EAC8E;AAC9E,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED;8EAC8E;AAC9E,wBAAgB,eAAe,CAC7B,GAAG,EAAE,aAAa,GAAG,SAAS,EAC9B,QAAQ,EAAE,eAAe,GAAG,SAAS,GACpC,OAAO,CAET;AAED;8EAC8E;AAC9E,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,aAAa,GAAG,SAAS,EAC9B,QAAQ,EAAE,eAAe,GAAG,SAAS,GACpC,MAAM,GAAG,SAAS,CAGpB;AAED;;;;8CAI8C;AAC9C,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,aAAa,GAAG,SAAS,EAC9B,QAAQ,EAAE,eAAe,GAAG,SAAS,GACpC,aAAa,CAEf;AAED;;wFAEwF;AACxF,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9B,OAAO,CAAC,EAAE,CAAC,CAGb;AAED,iEAAiE;AACjE,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAEpC;AAED,4DAA4D;AAC5D,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAEtF;AAED;gFACgF;AAChF,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;wFACwF;AACxF,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxF;AAYD;;;iGAGiG;AACjG,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,mBAAmB,CAAC;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBhB;AAED;;qCAEqC;AACrC,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuB/B"}
|
package/dist/channels.js
CHANGED
|
@@ -23,6 +23,19 @@ export function validateChannelConfig(cfg) {
|
|
|
23
23
|
throw new Error(`channel instructions too long (${cfg.instructions.length} > ${MAX_CHANNEL_INSTRUCTIONS} chars)`);
|
|
24
24
|
if (cfg.replayWindow !== undefined)
|
|
25
25
|
parseDuration(cfg.replayWindow); // throws if unparseable
|
|
26
|
+
if (cfg.deliveryClass !== undefined &&
|
|
27
|
+
cfg.deliveryClass !== "live" &&
|
|
28
|
+
cfg.deliveryClass !== "durable")
|
|
29
|
+
throw new Error(`invalid deliveryClass "${cfg.deliveryClass}" — expected "live" or "durable"`);
|
|
30
|
+
}
|
|
31
|
+
/** Validate a defaults patch the same way per-channel config is — the space default feeds
|
|
32
|
+
* {@link effectiveDeliveryClass} as a co-equal input, so a bad value must fail loud here, not
|
|
33
|
+
* silently become the space-wide effective class. */
|
|
34
|
+
export function validateChannelDefaults(d) {
|
|
35
|
+
if (d.replayWindow !== undefined)
|
|
36
|
+
parseDuration(d.replayWindow); // throws if unparseable
|
|
37
|
+
if (d.deliveryClass !== undefined && d.deliveryClass !== "live" && d.deliveryClass !== "durable")
|
|
38
|
+
throw new Error(`invalid deliveryClass "${d.deliveryClass}" — expected "live" or "durable"`);
|
|
26
39
|
}
|
|
27
40
|
/** Parse a duration like `"24h"`, `"30m"`, `"7d"`, `"90s"` into milliseconds. Throws on a bad
|
|
28
41
|
* format — a typo'd window must fail loud, not silently mean "no window". */
|
|
@@ -45,6 +58,14 @@ export function effectiveReplayWindowMs(cfg, defaults) {
|
|
|
45
58
|
const w = cfg?.replayWindow ?? defaults?.replayWindow;
|
|
46
59
|
return w === undefined ? undefined : parseDuration(w);
|
|
47
60
|
}
|
|
61
|
+
/** Effective delivery class for a channel (SPEC §4): per-channel override ?? space default ??
|
|
62
|
+
* `"durable"`. Default-durable keeps persistence on when a space declares no default — the safe
|
|
63
|
+
* fallback; a space sets `defaults.deliveryClass` at creation per deployment profile. The SAME
|
|
64
|
+
* resolution MUST drive live join, durable fan-out, history read, and membership surfacing, so
|
|
65
|
+
* every path agrees on a channel's class. */
|
|
66
|
+
export function effectiveDeliveryClass(cfg, defaults) {
|
|
67
|
+
return cfg?.deliveryClass ?? defaults?.deliveryClass ?? "durable";
|
|
68
|
+
}
|
|
48
69
|
/** Open the channels registry bucket. Auth mode (creds present) OPENs the bucket pre-created
|
|
49
70
|
* at `cotal up`; open dev mode lazily CREATEs it. Mirrors the presence-bucket open/create
|
|
50
71
|
* split (and, like presence, agents are denied KV stream-create so they must OPEN). */
|
|
@@ -67,8 +88,10 @@ export async function writeChannelConfig(kv, channel, patch) {
|
|
|
67
88
|
const merged = { ...(await readChannelConfig(kv, channel)), ...patch };
|
|
68
89
|
await kv.put(channel, JSON.stringify(merged));
|
|
69
90
|
}
|
|
70
|
-
/** Privileged write of the space-wide defaults (merged over any existing).
|
|
91
|
+
/** Privileged write of the space-wide defaults (merged over any existing). Validated before the
|
|
92
|
+
* put — a bad default would otherwise feed {@link effectiveDeliveryClass} silently. */
|
|
71
93
|
export async function writeChannelDefaults(kv, patch) {
|
|
94
|
+
validateChannelDefaults(patch);
|
|
72
95
|
const merged = { ...(await readChannelDefaults(kv)), ...patch };
|
|
73
96
|
await kv.put(CHANNEL_DEFAULTS_KEY, JSON.stringify(merged));
|
|
74
97
|
}
|
package/dist/channels.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,GAAG,EAAW,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAuB,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAUpE;iFACiF;AACjF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C;yDACyD;AACzD,MAAM,UAAU,qBAAqB,CAAC,GAAkB;IACtD,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,uBAAuB;QACnF,MAAM,IAAI,KAAK,CACb,iCAAiC,GAAG,CAAC,WAAW,CAAC,MAAM,MAAM,uBAAuB,SAAS,CAC9F,CAAC;IACJ,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,wBAAwB;QACtF,MAAM,IAAI,KAAK,CACb,kCAAkC,GAAG,CAAC,YAAY,CAAC,MAAM,MAAM,wBAAwB,SAAS,CACjG,CAAC;IACJ,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS;QAAE,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,wBAAwB;
|
|
1
|
+
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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"}
|
package/dist/command.d.ts
CHANGED
|
@@ -28,6 +28,9 @@ export interface Command extends Extension {
|
|
|
28
28
|
/** One-line usage shown by `cotal <cmd> --help` and on an invalid-argument error.
|
|
29
29
|
* Falls back to `summary` when unset. */
|
|
30
30
|
readonly usage?: string;
|
|
31
|
+
/** Hide from the top-level help listing while keeping it runnable — for dev/test aids
|
|
32
|
+
* (e.g. `demo`) that clutter the surface but stay documented and invocable. */
|
|
33
|
+
readonly hidden?: boolean;
|
|
31
34
|
run(argv: string[]): Promise<void>;
|
|
32
35
|
/** Optional shell-completion provider, owned by the command exactly as `run` is. Given the
|
|
33
36
|
* args typed so far (everything after the command name; the last element is the word being
|
package/dist/command.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C;0FAC0F;AAC1F,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;uFAIuF;AACvF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;CAC/C;AAED;;;;GAIG;AACH,MAAM,WAAW,OAAQ,SAAQ,SAAS;IACxC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;8CAC0C;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC;;;;2FAIuF;IACvF,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACzE"}
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C;0FAC0F;AAC1F,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;uFAIuF;AACvF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;CAC/C;AAED;;;;GAIG;AACH,MAAM,WAAW,OAAQ,SAAQ,SAAS;IACxC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;8CAC0C;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;oFACgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC;;;;2FAIuF;IACvF,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACzE"}
|