@casimesh/sdk 0.1.0 → 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.
Files changed (4) hide show
  1. package/index.d.ts +1490 -30
  2. package/index.js +300 -15
  3. package/index.js.map +1 -1
  4. package/package.json +1 -1
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../contracts/src/capability.ts","../../contracts/src/common.ts","../../contracts/src/ids.ts","../../contracts/src/agent.ts","../../contracts/src/auth.ts","../../contracts/src/link.ts","../../contracts/src/node.ts","../../contracts/src/organization.ts","../../contracts/src/task.ts","../../contracts/src/events.ts","../../contracts/src/health.ts","../../contracts/src/identity.ts","../../contracts/src/mesh.ts","../../contracts/src/projection.ts","../../contracts/src/mesh-state.ts","../../contracts/src/page.ts","../../contracts/src/problem.ts","../../contracts/src/realtime.ts","../src/errors.ts","../src/http.ts","../src/realtime.ts","../src/client.ts"],"names":["z","id","event","options"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\n/** Dotted, lowercase capability name, e.g. `vision` or `terrain.analysis` (deck slide 07). */\nexport const CapabilityName = z\n .string()\n .regex(/^[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)*$/, \"Dotted lowercase name, e.g. terrain.analysis\")\n .max(100);\nexport type CapabilityName = z.infer<typeof CapabilityName>;\n\nexport const Capability = z\n .object({\n name: CapabilityName,\n version: z.string().max(32).default(\"1.0.0\"),\n description: z.string().max(500).optional(),\n })\n .meta({ id: \"Capability\", description: \"A machine-discoverable description of what an agent can perform.\" });\nexport type Capability = z.infer<typeof Capability>;\n","import { z } from \"zod\";\n\n/** ISO-8601 UTC timestamp with milliseconds, e.g. `2026-09-28T09:28:12.123Z`. */\nexport const Timestamp = z.iso.datetime().meta({ example: \"2026-09-28T09:28:12.123Z\" });\nexport type Timestamp = z.infer<typeof Timestamp>;\n\n/** Monotonic per-entity version used for replication and optimistic concurrency (ADR-0004). */\nexport const Version = z.int().min(1).meta({ description: \"Monotonic per-entity version\" });\nexport type Version = z.infer<typeof Version>;\n\n/** Human-readable display name. */\nexport const DisplayName = z.string().trim().min(1).max(120);\n\n/** URL-safe identifier, unique within its parent (e.g. an organization within a node). */\nexport const Slug = z\n .string()\n .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, \"Lowercase letters, digits and single hyphens\")\n .max(63);\nexport type Slug = z.infer<typeof Slug>;\n\n/** Free-form, JSON-serialisable metadata. */\nexport const Metadata = z.record(z.string(), z.unknown());\nexport type Metadata = z.infer<typeof Metadata>;\n\n/** Fields every replicated entity carries. */\nexport const EntityAudit = {\n version: Version,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n};\n","import { z } from \"zod\";\n\n/** Prefixes for time-sortable ULID identifiers (ROADMAP §2.3). */\nexport const ID_PREFIX = {\n node: \"node\",\n organization: \"org\",\n agent: \"agt\",\n link: \"lnk\",\n event: \"evt\",\n command: \"cmd\",\n principal: \"prn\",\n roleBinding: \"rol\",\n apiKey: \"key\",\n task: \"tsk\",\n} as const;\n\nexport type IdKind = keyof typeof ID_PREFIX;\n\n/** Crockford base32 ULID body (26 chars, no I, L, O, U). */\nexport const ULID_PATTERN = \"[0-9A-HJKMNP-TV-Z]{26}\";\n\n/** Builds a Zod schema that validates `<prefix>_<ULID>` identifiers. */\nexport const prefixedId = <K extends IdKind>(kind: K) =>\n z\n .string()\n .regex(new RegExp(`^${ID_PREFIX[kind]}_${ULID_PATTERN}$`), `Expected a ${kind} id (${ID_PREFIX[kind]}_<ULID>)`)\n .meta({ description: `${kind} identifier`, example: `${ID_PREFIX[kind]}_01J9Z3K7Q8R5T2V4W6X8Y0A1B2` });\n\nexport const NodeId = prefixedId(\"node\");\nexport const OrganizationId = prefixedId(\"organization\");\nexport const AgentId = prefixedId(\"agent\");\nexport const LinkId = prefixedId(\"link\");\nexport const EventId = prefixedId(\"event\");\nexport const CommandId = prefixedId(\"command\");\nexport const PrincipalId = prefixedId(\"principal\");\nexport const RoleBindingId = prefixedId(\"roleBinding\");\nexport const TaskId = prefixedId(\"task\");\n\nexport type NodeId = z.infer<typeof NodeId>;\nexport type OrganizationId = z.infer<typeof OrganizationId>;\nexport type AgentId = z.infer<typeof AgentId>;\nexport type LinkId = z.infer<typeof LinkId>;\nexport type EventId = z.infer<typeof EventId>;\nexport type CommandId = z.infer<typeof CommandId>;\nexport type PrincipalId = z.infer<typeof PrincipalId>;\nexport type RoleBindingId = z.infer<typeof RoleBindingId>;\nexport type TaskId = z.infer<typeof TaskId>;\n","import { z } from \"zod\";\nimport { Capability } from \"./capability.ts\";\nimport { DisplayName, EntityAudit, Metadata } from \"./common.ts\";\nimport { AgentId, NodeId, OrganizationId } from \"./ids.ts\";\n\n/** `mesh` marks the organization's Mesh Agent — exactly one per organization (ADR-0003). */\nexport const AgentKind = z.enum([\"standard\", \"mesh\"]);\nexport type AgentKind = z.infer<typeof AgentKind>;\n\nexport const AgentStatus = z.enum([\"created\", \"starting\", \"running\", \"stopped\", \"error\"]);\nexport type AgentStatus = z.infer<typeof AgentStatus>;\n\nconst capabilityList = z\n .array(Capability)\n .max(64)\n .refine((caps) => new Set(caps.map((c) => c.name)).size === caps.length, \"Capability names must be unique\");\n\nexport const Agent = z\n .object({\n id: AgentId,\n organizationId: OrganizationId,\n nodeId: NodeId,\n name: DisplayName,\n kind: AgentKind,\n status: AgentStatus,\n capabilities: capabilityList,\n /** Model backing the agent, e.g. `claude-sonnet-5`; null for rule-based agents. */\n model: z.string().max(100).nullable(),\n metadata: Metadata,\n ...EntityAudit,\n })\n .meta({ id: \"Agent\", description: \"An autonomous software entity with identity, capabilities and policies.\" });\nexport type Agent = z.infer<typeof Agent>;\n\nexport const CreateAgentRequest = z\n .object({\n name: DisplayName,\n capabilities: capabilityList.default([]),\n model: z.string().max(100).nullable().default(null),\n metadata: Metadata.optional(),\n })\n .meta({ id: \"CreateAgentRequest\" });\n/** Parsed request (defaults applied) — what use cases receive. */\nexport type CreateAgentRequest = z.infer<typeof CreateAgentRequest>;\n/** What callers may send — capabilities and model are optional. */\nexport type CreateAgentRequestInput = z.input<typeof CreateAgentRequest>;\n\nexport const UpdateAgentRequest = z\n .object({\n name: DisplayName.optional(),\n capabilities: capabilityList.optional(),\n model: z.string().max(100).nullable().optional(),\n metadata: Metadata.optional(),\n })\n .refine((body) => Object.keys(body).length > 0, \"At least one field must be provided\")\n .meta({ id: \"UpdateAgentRequest\" });\nexport type UpdateAgentRequest = z.infer<typeof UpdateAgentRequest>;\n","import { z } from \"zod\";\nimport { DisplayName, Timestamp } from \"./common.ts\";\nimport { NodeId, OrganizationId, PrincipalId, RoleBindingId } from \"./ids.ts\";\n\nexport const PrincipalKind = z.enum([\"user\", \"service\"]);\nexport type PrincipalKind = z.infer<typeof PrincipalKind>;\n\nexport const Principal = z\n .object({\n id: PrincipalId,\n kind: PrincipalKind,\n name: DisplayName,\n publicKey: z.string().nullable(),\n createdAt: Timestamp,\n })\n .meta({ id: \"Principal\", description: \"A user or service that can be authenticated and granted roles.\" });\nexport type Principal = z.infer<typeof Principal>;\n\n/** Ownership roles (ADR-0010). */\nexport const Role = z.enum([\"node_owner\", \"org_owner\"]);\nexport type Role = z.infer<typeof Role>;\n\nexport const RoleScope = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"node\"), nodeId: NodeId }),\n z.object({ type: z.literal(\"organization\"), organizationId: OrganizationId, nodeId: NodeId }),\n]);\nexport type RoleScope = z.infer<typeof RoleScope>;\n\nexport const RoleBinding = z\n .object({\n id: RoleBindingId,\n principalId: PrincipalId,\n role: Role,\n scope: RoleScope,\n createdAt: Timestamp,\n })\n .refine(\n (b) => (b.role === \"node_owner\" ? b.scope.type === \"node\" : b.scope.type === \"organization\"),\n \"node_owner must be node-scoped and org_owner organization-scoped\",\n )\n .meta({ id: \"RoleBinding\" });\nexport type RoleBinding = z.infer<typeof RoleBinding>;\n\nexport const GrantOwnerRequest = z.object({ principalId: PrincipalId }).meta({ id: \"GrantOwnerRequest\" });\nexport type GrantOwnerRequest = z.infer<typeof GrantOwnerRequest>;\n","import { z } from \"zod\";\nimport { EntityAudit, Timestamp } from \"./common.ts\";\nimport { LinkId, NodeId } from \"./ids.ts\";\n\nexport const TransportKind = z.enum([\"memory\", \"ws-peer\", \"tcp\", \"mqtt\", \"meshtastic\", \"meshcore\"]);\nexport type TransportKind = z.infer<typeof TransportKind>;\n\n/** `requested` = an owner drew the edge in the Monitor and the peer has not accepted yet (ADR-0008). */\nexport const LinkState = z.enum([\"requested\", \"up\", \"down\"]);\nexport type LinkState = z.infer<typeof LinkState>;\n\nexport const LinkQuality = z.object({\n latencyMs: z.number().nonnegative().optional(),\n rssi: z.number().optional(),\n});\nexport type LinkQuality = z.infer<typeof LinkQuality>;\n\nexport const Link = z\n .object({\n id: LinkId,\n aNodeId: NodeId,\n bNodeId: NodeId,\n transport: TransportKind,\n state: LinkState,\n quality: LinkQuality,\n lastSeenAt: Timestamp.nullable(),\n ...EntityAudit,\n })\n .refine((link) => link.aNodeId !== link.bNodeId, \"A link must connect two different nodes\")\n .meta({ id: \"Link\", description: \"Transport-level adjacency between two nodes — the edges of the topology.\" });\nexport type Link = z.infer<typeof Link>;\n\nexport const CreateLinkRequest = z\n .object({ aNodeId: NodeId, bNodeId: NodeId, transport: TransportKind })\n .refine((body) => body.aNodeId !== body.bNodeId, \"A link must connect two different nodes\")\n .meta({ id: \"CreateLinkRequest\" });\nexport type CreateLinkRequest = z.infer<typeof CreateLinkRequest>;\n","import { z } from \"zod\";\nimport { DisplayName, EntityAudit, Metadata, Timestamp } from \"./common.ts\";\nimport { NodeId } from \"./ids.ts\";\n\nexport const NodeStatus = z.enum([\"online\", \"degraded\", \"offline\"]);\nexport type NodeStatus = z.infer<typeof NodeStatus>;\n\nexport const Node = z\n .object({\n id: NodeId,\n name: DisplayName,\n publicKey: z.string().min(1),\n /** Base URL where other nodes and clients reach this node, e.g. `https://node-a.example:7700` (ADR-0017). */\n endpoint: z.url().nullable(),\n status: NodeStatus,\n metadata: Metadata,\n lastSeenAt: Timestamp.nullable(),\n ...EntityAudit,\n })\n .meta({ id: \"Node\", description: \"A physical or virtual endpoint connected to the mesh.\" });\nexport type Node = z.infer<typeof Node>;\n\nexport const UpdateNodeRequest = z\n .object({\n name: DisplayName.optional(),\n endpoint: z.url().nullable().optional(),\n metadata: Metadata.optional(),\n })\n .refine((body) => Object.keys(body).length > 0, \"At least one field must be provided\")\n .meta({ id: \"UpdateNodeRequest\" });\nexport type UpdateNodeRequest = z.infer<typeof UpdateNodeRequest>;\n","import { z } from \"zod\";\nimport { DisplayName, EntityAudit, Metadata, Slug } from \"./common.ts\";\nimport { NodeId, OrganizationId, PrincipalId } from \"./ids.ts\";\n\nexport const Organization = z\n .object({\n id: OrganizationId,\n nodeId: NodeId,\n name: DisplayName,\n slug: Slug,\n metadata: Metadata,\n ...EntityAudit,\n })\n .meta({ id: \"Organization\", description: \"A logical boundary on a node that owns policies, identities and agents.\" });\nexport type Organization = z.infer<typeof Organization>;\n\nexport const CreateOrganizationRequest = z\n .object({\n name: DisplayName,\n /** Derived from `name` when omitted. */\n slug: Slug.optional(),\n metadata: Metadata.optional(),\n /** Principal to make the first org owner; defaults to the caller. */\n ownerPrincipalId: PrincipalId.optional(),\n })\n .meta({ id: \"CreateOrganizationRequest\" });\nexport type CreateOrganizationRequest = z.infer<typeof CreateOrganizationRequest>;\n\nexport const UpdateOrganizationRequest = z\n .object({\n name: DisplayName.optional(),\n metadata: Metadata.optional(),\n })\n .refine((body) => Object.keys(body).length > 0, \"At least one field must be provided\")\n .meta({ id: \"UpdateOrganizationRequest\" });\nexport type UpdateOrganizationRequest = z.infer<typeof UpdateOrganizationRequest>;\n","import { z } from \"zod\";\nimport { CapabilityName } from \"./capability.ts\";\nimport { Metadata, Timestamp, Version } from \"./common.ts\";\nimport { AgentId, NodeId, OrganizationId, TaskId } from \"./ids.ts\";\n\n/**\n * A capability request between agents (ADR-0020, deck slides 06/07). Created by the requester's node; every later\n * change is written by the assignee's node only.\n */\nexport const TaskStatus = z.enum([\"requested\", \"accepted\", \"completed\", \"failed\"]);\nexport type TaskStatus = z.infer<typeof TaskStatus>;\n\nexport const TERMINAL_TASK_STATUSES: readonly TaskStatus[] = [\"completed\", \"failed\"];\n\n/** An agent taking part in a task, with where it lives. */\nexport const TaskParty = z.object({ agentId: AgentId, organizationId: OrganizationId, nodeId: NodeId });\nexport type TaskParty = z.infer<typeof TaskParty>;\n\n/** The organization a task was routed to, through its Mesh Agent. */\nexport const TaskAssignee = z.object({ organizationId: OrganizationId, nodeId: NodeId, meshAgentId: AgentId });\nexport type TaskAssignee = z.infer<typeof TaskAssignee>;\n\n/** One stage of the observe → reason → act → verify pipeline (deck slide 05). */\nexport const TaskStep = z.object({\n name: z.enum([\"observe\", \"reason\", \"act\", \"verify\"]),\n at: Timestamp,\n summary: z.string().max(1000),\n});\nexport type TaskStep = z.infer<typeof TaskStep>;\n\nexport const TaskError = z.object({ code: z.string().max(64), message: z.string().max(1000) });\nexport type TaskError = z.infer<typeof TaskError>;\n\nexport const Task = z\n .object({\n id: TaskId,\n capability: CapabilityName,\n input: Metadata,\n status: TaskStatus,\n requester: TaskParty,\n /** The requester organization's Mesh Agent, the first hop of the route. */\n requesterMeshAgentId: AgentId,\n assignee: TaskAssignee,\n /** The agent that does the work, chosen by the assignee's Mesh Agent on acceptance. */\n provider: TaskParty.nullable(),\n output: Metadata.nullable(),\n error: TaskError.nullable(),\n steps: z.array(TaskStep).max(32),\n /** Model that produced the result; null when a rule-based model did. */\n model: z.string().max(100).nullable(),\n version: Version,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n })\n .meta({\n id: \"Task\",\n description: \"A capability request routed through Mesh Agents, with its result and provenance (ADR-0020).\",\n });\nexport type Task = z.infer<typeof Task>;\n\nexport const RequestTaskRequest = z\n .object({\n capability: CapabilityName,\n input: Metadata.default({}),\n })\n .meta({ id: \"RequestTaskRequest\" });\nexport type RequestTaskRequest = z.infer<typeof RequestTaskRequest>;\nexport type RequestTaskRequestInput = z.input<typeof RequestTaskRequest>;\n\n/** An agent offering a capability, as listed by the capability directory. */\nexport const CapabilityProvider = z\n .object({\n agentId: AgentId,\n agentName: z.string(),\n organizationId: OrganizationId,\n organizationName: z.string(),\n nodeId: NodeId,\n /** Running, on a node that is not offline — i.e. a task could be routed to it now. */\n available: z.boolean(),\n })\n .meta({ id: \"CapabilityProvider\" });\nexport type CapabilityProvider = z.infer<typeof CapabilityProvider>;\n","import { z } from \"zod\";\nimport { Agent, AgentStatus } from \"./agent.ts\";\nimport { RoleBinding } from \"./auth.ts\";\nimport { Timestamp, Version } from \"./common.ts\";\nimport {\n AgentId,\n CommandId,\n EventId,\n LinkId,\n NodeId,\n OrganizationId,\n PrincipalId,\n RoleBindingId,\n TaskId,\n} from \"./ids.ts\";\nimport { Link } from \"./link.ts\";\nimport { Node, NodeStatus } from \"./node.ts\";\nimport { Organization } from \"./organization.ts\";\nimport { Task } from \"./task.ts\";\n\n/**\n * Event catalog (ROADMAP §2.4). Every state change in the mesh is one of these events.\n *\n * A *domain event* is what the domain produces: `type`, `subject` and `payload`.\n * A *mesh event* wraps it in the envelope (id, seq, origin, causation, timestamp, signature)\n * when it is committed, replicated and pushed to clients.\n */\n\nconst subject = <K extends string, S extends z.ZodType<string>>(kind: K, id: S) =>\n z.object({ kind: z.literal(kind), id, version: Version });\n\nconst NodeSubject = subject(\"node\", NodeId);\nconst OrganizationSubject = subject(\"organization\", OrganizationId);\nconst AgentSubject = subject(\"agent\", AgentId);\nconst LinkSubject = subject(\"link\", LinkId);\nconst RoleBindingSubject = subject(\"roleBinding\", RoleBindingId);\nconst TaskSubject = subject(\"task\", TaskId);\n\nconst event = <T extends string, S extends z.ZodType, P extends z.ZodType>(type: T, subjectSchema: S, payload: P) =>\n z.object({ type: z.literal(type), subject: subjectSchema, payload });\n\nconst AgentRegistration = z.object({\n meshAgentId: AgentId,\n agentId: AgentId,\n organizationId: OrganizationId,\n nodeId: NodeId,\n});\n\nexport const NodeCreated = event(\"node.created\", NodeSubject, z.object({ node: Node }));\nexport const NodeUpdated = event(\"node.updated\", NodeSubject, z.object({ node: Node }));\nexport const NodeRemoved = event(\"node.removed\", NodeSubject, z.object({ nodeId: NodeId }));\n/** Derived locally by each node's presence detector; does not bump the owned entity version. */\nexport const NodeStatusChanged = event(\n \"node.status_changed\",\n NodeSubject,\n z.object({ nodeId: NodeId, status: NodeStatus, previousStatus: NodeStatus, lastSeenAt: Timestamp.nullable() }),\n);\n/** Mesh-only liveness signal; aggregated into `lastSeenAt`, never forwarded to UI clients. */\nexport const NodeHeartbeat = event(\"node.heartbeat\", NodeSubject, z.object({ nodeId: NodeId, at: Timestamp }));\n\nexport const OrganizationCreated = event(\n \"organization.created\",\n OrganizationSubject,\n z.object({ organization: Organization }),\n);\nexport const OrganizationUpdated = event(\n \"organization.updated\",\n OrganizationSubject,\n z.object({ organization: Organization }),\n);\nexport const OrganizationRemoved = event(\n \"organization.removed\",\n OrganizationSubject,\n z.object({ organizationId: OrganizationId, nodeId: NodeId }),\n);\n\nexport const AgentCreated = event(\"agent.created\", AgentSubject, z.object({ agent: Agent }));\nexport const AgentUpdated = event(\"agent.updated\", AgentSubject, z.object({ agent: Agent }));\nexport const AgentStatusChanged = event(\n \"agent.status_changed\",\n AgentSubject,\n z.object({ agent: Agent, previousStatus: AgentStatus }),\n);\nexport const AgentRemoved = event(\n \"agent.removed\",\n AgentSubject,\n z.object({ agentId: AgentId, organizationId: OrganizationId, nodeId: NodeId }),\n);\n\nexport const MeshAgentAgentRegistered = event(\"mesh_agent.agent_registered\", AgentSubject, AgentRegistration);\nexport const MeshAgentAgentDeregistered = event(\"mesh_agent.agent_deregistered\", AgentSubject, AgentRegistration);\n\nexport const LinkRequested = event(\"link.requested\", LinkSubject, z.object({ link: Link }));\nexport const LinkUp = event(\"link.up\", LinkSubject, z.object({ link: Link }));\nexport const LinkUpdated = event(\"link.updated\", LinkSubject, z.object({ link: Link }));\nexport const LinkDown = event(\"link.down\", LinkSubject, z.object({ link: Link }));\nexport const LinkRemoved = event(\"link.removed\", LinkSubject, z.object({ linkId: LinkId }));\n\nexport const RoleGranted = event(\"role.granted\", RoleBindingSubject, z.object({ binding: RoleBinding }));\nexport const RoleRevoked = event(\"role.revoked\", RoleBindingSubject, z.object({ binding: RoleBinding }));\n\n/** Committed by the requester's node; the task's later events come from the assignee's node only (ADR-0020). */\nexport const TaskRequested = event(\"task.requested\", TaskSubject, z.object({ task: Task }));\nexport const TaskAccepted = event(\"task.accepted\", TaskSubject, z.object({ task: Task }));\nexport const TaskCompleted = event(\"task.completed\", TaskSubject, z.object({ task: Task }));\nexport const TaskFailed = event(\"task.failed\", TaskSubject, z.object({ task: Task }));\n\nexport const DomainEvent = z\n .discriminatedUnion(\"type\", [\n NodeCreated,\n NodeUpdated,\n NodeRemoved,\n NodeStatusChanged,\n NodeHeartbeat,\n OrganizationCreated,\n OrganizationUpdated,\n OrganizationRemoved,\n AgentCreated,\n AgentUpdated,\n AgentStatusChanged,\n AgentRemoved,\n MeshAgentAgentRegistered,\n MeshAgentAgentDeregistered,\n LinkRequested,\n LinkUp,\n LinkUpdated,\n LinkDown,\n LinkRemoved,\n RoleGranted,\n RoleRevoked,\n TaskRequested,\n TaskAccepted,\n TaskCompleted,\n TaskFailed,\n ])\n .meta({ id: \"DomainEvent\" });\nexport type DomainEvent = z.infer<typeof DomainEvent>;\nexport type DomainEventType = DomainEvent[\"type\"];\nexport type DomainEventOf<T extends DomainEventType> = Extract<DomainEvent, { type: T }>;\n\nexport const DOMAIN_EVENT_TYPES = DomainEvent.options.map((o) => o.shape.type.value) as readonly DomainEventType[];\n\n/** Envelope schema version (ADR-0009). */\nexport const ENVELOPE_VERSION = 1 as const;\n\nexport const EnvelopeMeta = z.object({\n v: z.literal(ENVELOPE_VERSION),\n id: EventId,\n /** Monotonic per origin node; `(origin.nodeId, seq)` is the replication cursor. */\n seq: z.int().min(1),\n origin: z.object({ nodeId: NodeId, principalId: PrincipalId.nullable() }),\n /** Groups the events produced by one command, e.g. a cascade (ADR-0005). */\n causationId: CommandId,\n timestamp: Timestamp,\n /** Ed25519 signature over the canonical encoding; attached by the protocol layer (Phase 5). */\n sig: z.string().nullable(),\n});\nexport type EnvelopeMeta = z.infer<typeof EnvelopeMeta>;\n\nexport const MeshEvent = z.intersection(EnvelopeMeta, DomainEvent).meta({ id: \"MeshEvent\" });\nexport type MeshEvent = z.infer<typeof MeshEvent>;\n","import { z } from \"zod\";\nimport { NodeId } from \"./ids.ts\";\n\nexport const HealthResponse = z\n .object({\n status: z.enum([\"ok\", \"degraded\"]),\n service: z.literal(\"node-server\"),\n /** The node this server runs as — clients use it to know where their writes are accepted (ADR-0004). */\n nodeId: NodeId,\n version: z.string(),\n uptimeSeconds: z.number().nonnegative(),\n timestamp: z.iso.datetime(),\n })\n .meta({ id: \"HealthResponse\", description: \"Liveness and version information for a Node Server.\" });\n\nexport type HealthResponse = z.infer<typeof HealthResponse>;\n","import { z } from \"zod\";\nimport { Principal, PrincipalKind, RoleBinding } from \"./auth.ts\";\nimport { DisplayName, Timestamp } from \"./common.ts\";\n\n/** Who the caller is and which ownership roles they hold — drives the Monitor's controls (ADR-0010). */\nexport const Me = z\n .object({ principal: Principal, roles: z.array(RoleBinding) })\n .meta({ id: \"Me\", description: \"The authenticated principal and its role bindings.\" });\nexport type Me = z.infer<typeof Me>;\n\nexport const CreatePrincipalRequest = z\n .object({ name: DisplayName, kind: PrincipalKind.default(\"user\") })\n .meta({ id: \"CreatePrincipalRequest\" });\nexport type CreatePrincipalRequest = z.infer<typeof CreatePrincipalRequest>;\n\n/** Shown exactly once. Users get a bearer token; services get a long-lived API key. */\nexport const Credential = z\n .discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"token\"), token: z.string(), expiresAt: Timestamp }),\n z.object({ type: z.literal(\"apiKey\"), apiKey: z.string() }),\n ])\n .meta({ id: \"Credential\" });\nexport type Credential = z.infer<typeof Credential>;\n\nexport const CreatePrincipalResponse = z\n .object({ principal: Principal, credential: Credential })\n .meta({ id: \"CreatePrincipalResponse\" });\nexport type CreatePrincipalResponse = z.infer<typeof CreatePrincipalResponse>;\n","import { z } from \"zod\";\nimport { Agent } from \"./agent.ts\";\nimport { Capability } from \"./capability.ts\";\nimport { NodeId } from \"./ids.ts\";\nimport { Link } from \"./link.ts\";\nimport { Node } from \"./node.ts\";\nimport { Organization } from \"./organization.ts\";\nimport { Task } from \"./task.ts\";\n\n/** Per-origin-node sequence reached by a replica: `{ [nodeId]: seq }`. */\nexport const MeshCursor = z.record(NodeId, z.int().min(0)).meta({ id: \"MeshCursor\" });\nexport type MeshCursor = z.infer<typeof MeshCursor>;\n\nexport const MeshSnapshot = z\n .object({\n nodes: z.array(Node),\n organizations: z.array(Organization),\n agents: z.array(Agent),\n links: z.array(Link),\n /** The most recent tasks, newest first (ADR-0020). */\n tasks: z.array(Task),\n cursor: MeshCursor,\n })\n .meta({ id: \"MeshSnapshot\", description: \"Full mesh state plus the cursor to resume the event stream from.\" });\nexport type MeshSnapshot = z.infer<typeof MeshSnapshot>;\n\nexport const MeshStats = z\n .object({\n nodes: z.int().min(0),\n online: z.int().min(0),\n degraded: z.int().min(0),\n offline: z.int().min(0),\n organizations: z.int().min(0),\n agents: z.int().min(0),\n })\n .meta({ id: \"MeshStats\", description: \"Counters shown in the Monitor's mesh summary.\" });\nexport type MeshStats = z.infer<typeof MeshStats>;\n\nexport const NodeDetail = z\n .object({\n node: Node,\n organizations: z.array(Organization),\n agents: z.array(Agent),\n /** Distinct capabilities offered by the node's agents. */\n capabilities: z.array(Capability),\n })\n .meta({ id: \"NodeDetail\", description: \"Everything the Monitor's node detail panel shows (ui.md).\" });\nexport type NodeDetail = z.infer<typeof NodeDetail>;\n\n/** Encodes a cursor for URLs (`?cursor=`): base64url of its JSON. */\nexport function encodeCursor(cursor: MeshCursor): string {\n const bytes = new TextEncoder().encode(JSON.stringify(cursor));\n return btoa(String.fromCharCode(...bytes))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\n/** Decodes a cursor produced by `encodeCursor`. Throws on malformed input. */\nexport function decodeCursor(encoded: string): MeshCursor {\n const base64 = encoded.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const bytes = Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n return MeshCursor.parse(JSON.parse(new TextDecoder().decode(bytes)));\n}\n","import type { Agent } from \"./agent.ts\";\nimport type { RoleBinding } from \"./auth.ts\";\nimport type { DomainEvent } from \"./events.ts\";\nimport type { Link } from \"./link.ts\";\nimport type { Node, NodeStatus } from \"./node.ts\";\nimport type { Organization } from \"./organization.ts\";\nimport type { Task } from \"./task.ts\";\n\n/**\n * Translates an event into the state change it implies. The node server's persistence applies these operations\n * atomically with the event append, replication (Phase 5) applies them for remote events, and clients (the SDK's\n * mesh mirror, the Monitor) apply them to their local copy — so nobody can disagree about what an event means.\n */\nexport type ProjectionOp =\n | { readonly op: \"upsert\"; readonly kind: \"node\"; readonly entity: Node }\n | { readonly op: \"upsert\"; readonly kind: \"organization\"; readonly entity: Organization }\n | { readonly op: \"upsert\"; readonly kind: \"agent\"; readonly entity: Agent }\n | { readonly op: \"upsert\"; readonly kind: \"link\"; readonly entity: Link }\n | { readonly op: \"upsert\"; readonly kind: \"roleBinding\"; readonly entity: RoleBinding }\n /** Tasks have two writers in turn (ADR-0020), so replicas apply only newer versions. */\n | { readonly op: \"upsert\"; readonly kind: \"task\"; readonly entity: Task }\n | {\n readonly op: \"delete\";\n readonly kind: \"node\" | \"organization\" | \"agent\" | \"link\" | \"roleBinding\";\n readonly id: string;\n }\n | {\n readonly op: \"presence\";\n readonly nodeId: string;\n readonly status: NodeStatus;\n readonly lastSeenAt: string | null;\n }\n | { readonly op: \"none\" };\n\nexport function project(event: DomainEvent): ProjectionOp {\n switch (event.type) {\n case \"node.created\":\n case \"node.updated\":\n return { op: \"upsert\", kind: \"node\", entity: event.payload.node };\n case \"node.removed\":\n return { op: \"delete\", kind: \"node\", id: event.payload.nodeId };\n case \"node.status_changed\":\n return {\n op: \"presence\",\n nodeId: event.payload.nodeId,\n status: event.payload.status,\n lastSeenAt: event.payload.lastSeenAt,\n };\n case \"organization.created\":\n case \"organization.updated\":\n return { op: \"upsert\", kind: \"organization\", entity: event.payload.organization };\n case \"organization.removed\":\n return { op: \"delete\", kind: \"organization\", id: event.payload.organizationId };\n case \"agent.created\":\n case \"agent.updated\":\n case \"agent.status_changed\":\n return { op: \"upsert\", kind: \"agent\", entity: event.payload.agent };\n case \"agent.removed\":\n return { op: \"delete\", kind: \"agent\", id: event.payload.agentId };\n case \"link.requested\":\n case \"link.up\":\n case \"link.updated\":\n case \"link.down\":\n return { op: \"upsert\", kind: \"link\", entity: event.payload.link };\n case \"link.removed\":\n return { op: \"delete\", kind: \"link\", id: event.payload.linkId };\n case \"role.granted\":\n return { op: \"upsert\", kind: \"roleBinding\", entity: event.payload.binding };\n case \"role.revoked\":\n return { op: \"delete\", kind: \"roleBinding\", id: event.payload.binding.id };\n case \"task.requested\":\n case \"task.accepted\":\n case \"task.completed\":\n case \"task.failed\":\n return { op: \"upsert\", kind: \"task\", entity: event.payload.task };\n // Registration is implied by organization membership; heartbeats are handled by the presence detector.\n case \"mesh_agent.agent_registered\":\n case \"mesh_agent.agent_deregistered\":\n case \"node.heartbeat\":\n return { op: \"none\" };\n }\n}\n","import type { Agent } from \"./agent.ts\";\nimport type { MeshEvent } from \"./events.ts\";\nimport type { Link } from \"./link.ts\";\nimport type { MeshCursor, MeshSnapshot } from \"./mesh.ts\";\nimport type { Node } from \"./node.ts\";\nimport type { Organization } from \"./organization.ts\";\nimport { project } from \"./projection.ts\";\nimport type { Task } from \"./task.ts\";\n\n/** A client-side mirror of the mesh, kept current by applying events to a snapshot. */\nexport interface MeshState {\n readonly nodes: Readonly<Record<string, Node>>;\n readonly organizations: Readonly<Record<string, Organization>>;\n readonly agents: Readonly<Record<string, Agent>>;\n readonly links: Readonly<Record<string, Link>>;\n readonly tasks: Readonly<Record<string, Task>>;\n readonly cursor: MeshCursor;\n}\n\nconst byId = <T extends { id: string }>(items: readonly T[]): Record<string, T> =>\n Object.fromEntries(items.map((item) => [item.id, item]));\n\nexport function meshStateFromSnapshot(snapshot: MeshSnapshot): MeshState {\n return {\n nodes: byId(snapshot.nodes),\n organizations: byId(snapshot.organizations),\n agents: byId(snapshot.agents),\n links: byId(snapshot.links),\n // Nodes from before Phase 6 send no tasks; tolerate them during rolling upgrades.\n tasks: byId(snapshot.tasks ?? []),\n cursor: { ...snapshot.cursor },\n };\n}\n\n/**\n * Applies one event immutably. Events at or below the cursor for their origin are ignored, so replays\n * and duplicates are harmless. Role bindings are not mirrored (they are not part of the snapshot).\n */\nexport function applyMeshEvent(state: MeshState, event: MeshEvent): MeshState {\n const seen = state.cursor[event.origin.nodeId] ?? 0;\n if (event.seq <= seen) return state;\n const cursor = { ...state.cursor, [event.origin.nodeId]: event.seq };\n const op = project(event);\n\n switch (op.op) {\n case \"upsert\":\n switch (op.kind) {\n case \"node\":\n return { ...state, cursor, nodes: { ...state.nodes, [op.entity.id]: op.entity } };\n case \"organization\":\n return { ...state, cursor, organizations: { ...state.organizations, [op.entity.id]: op.entity } };\n case \"agent\":\n return { ...state, cursor, agents: { ...state.agents, [op.entity.id]: op.entity } };\n case \"link\":\n return { ...state, cursor, links: { ...state.links, [op.entity.id]: op.entity } };\n case \"roleBinding\":\n return { ...state, cursor };\n case \"task\": {\n // Two writers in turn (ADR-0020): an older version arriving late must not win.\n const current = state.tasks[op.entity.id];\n if (current && current.version >= op.entity.version) return { ...state, cursor };\n return { ...state, cursor, tasks: { ...state.tasks, [op.entity.id]: op.entity } };\n }\n }\n break;\n case \"delete\": {\n if (op.kind === \"roleBinding\") return { ...state, cursor };\n const table = { node: \"nodes\", organization: \"organizations\", agent: \"agents\", link: \"links\" } as const;\n const key = table[op.kind];\n const { [op.id]: _removed, ...rest } = state[key];\n return { ...state, cursor, [key]: rest };\n }\n case \"presence\": {\n const node = state.nodes[op.nodeId];\n if (!node) return { ...state, cursor };\n return {\n ...state,\n cursor,\n nodes: { ...state.nodes, [node.id]: { ...node, status: op.status, lastSeenAt: op.lastSeenAt } },\n };\n }\n case \"none\":\n return { ...state, cursor };\n }\n}\n","import { z } from \"zod\";\n\n/** Cursor pagination query (ROADMAP §2.6). `cursor` is opaque to clients. */\nexport const PageQuery = z.object({\n limit: z.coerce.number().int().min(1).max(200).default(50),\n cursor: z.string().min(1).optional(),\n});\nexport type PageQuery = z.infer<typeof PageQuery>;\n\n/** A page of results; `nextCursor` is null on the last page. */\nexport const Page = <T extends z.ZodType>(item: T, id: string) =>\n z.object({ items: z.array(item), nextCursor: z.string().nullable() }).meta({ id });\n\nexport interface PageOf<T> {\n readonly items: T[];\n readonly nextCursor: string | null;\n}\n","import { z } from \"zod\";\n\n/** RFC 9457 problem details — every API error uses this shape. */\nexport const ProblemDetails = z\n .object({\n type: z.string().meta({ example: \"/problems/forbidden\" }),\n title: z.string(),\n status: z.int().min(400).max(599),\n detail: z.string().optional(),\n instance: z.string().optional(),\n code: z.string().meta({ description: \"Stable machine-readable error code\" }),\n errors: z.array(z.object({ path: z.string(), message: z.string() })).optional(),\n })\n .meta({ id: \"ProblemDetails\" });\nexport type ProblemDetails = z.infer<typeof ProblemDetails>;\n","import { z } from \"zod\";\nimport { MeshEvent } from \"./events.ts\";\nimport { PrincipalId } from \"./ids.ts\";\nimport { MeshCursor } from \"./mesh.ts\";\n\n/**\n * Realtime protocol over `WS /v1/realtime` (ADR-0014). JSON text frames.\n *\n * client → hello { token, cursor?, topics? } first frame, within 5 s\n * server → event { event }* replay of everything after `cursor`\n * server → welcome { principalId, cursor } replay done; live events follow\n * server → event { event }* live\n * server → resync.required { reason } the client must fetch a fresh snapshot and reconnect\n */\n\n/** Subject kinds a client can subscribe to. Default: everything. */\nexport const Topic = z.enum([\"node\", \"organization\", \"agent\", \"link\", \"roleBinding\", \"task\"]);\nexport type Topic = z.infer<typeof Topic>;\n\nexport const ClientMessage = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"hello\"),\n /** Bearer token or API key — sent in the first frame because browsers cannot set WebSocket headers. */\n token: z.string().min(1),\n /** Resume point, usually the cursor of the snapshot the client just loaded. */\n cursor: MeshCursor.optional(),\n topics: z.array(Topic).optional(),\n }),\n z.object({ type: z.literal(\"subscribe\"), topics: z.array(Topic) }),\n]);\nexport type ClientMessage = z.infer<typeof ClientMessage>;\n\nexport const ServerMessage = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"welcome\"), principalId: PrincipalId, cursor: MeshCursor }),\n z.object({ type: z.literal(\"event\"), event: MeshEvent }),\n z.object({ type: z.literal(\"resync.required\"), reason: z.string() }),\n z.object({ type: z.literal(\"error\"), code: z.string(), message: z.string() }),\n]);\nexport type ServerMessage = z.infer<typeof ServerMessage>;\n\n/** WebSocket close codes used by the node server. */\nexport const RealtimeCloseCode = {\n normal: 1000,\n goingAway: 1001,\n badMessage: 4400,\n unauthenticated: 4401,\n helloTimeout: 4408,\n resyncRequired: 4409,\n} as const;\n","import type { ProblemDetails } from \"@casimesh/contracts\";\n\n/** An API error. `problem` is the server's RFC 9457 body when it sent one. */\nexport class MeshApiError extends Error {\n constructor(\n readonly status: number,\n message: string,\n readonly problem?: ProblemDetails & Record<string, unknown>,\n ) {\n super(message);\n this.name = \"MeshApiError\";\n }\n\n /** Stable machine-readable code, e.g. `forbidden`, `version_conflict`, `not_owner`. */\n get code(): string {\n return this.problem?.code ?? `http_${this.status}`;\n }\n}\n","import type { ProblemDetails } from \"@casimesh/contracts\";\nimport { MeshApiError } from \"./errors.ts\";\n\n/** A static credential, or a function for callers that refresh tokens. */\nexport type TokenSource = string | (() => string | Promise<string>);\n\nexport interface HttpOptions {\n readonly baseUrl: string;\n readonly token?: TokenSource | undefined;\n readonly timeoutMs?: number | undefined;\n readonly fetch?: typeof fetch | undefined;\n}\n\nexport interface RequestOptions {\n readonly query?: Record<string, string | number | undefined> | undefined;\n readonly body?: unknown;\n /** Expected entity version for conditional writes (sent as `If-Match`). */\n readonly ifMatch?: number | undefined;\n /** Makes a POST safe to retry (sent as `Idempotency-Key`). */\n readonly idempotencyKey?: string | undefined;\n readonly signal?: AbortSignal | undefined;\n}\n\nexport const DEFAULT_TIMEOUT_MS = 10_000;\n\nexport async function resolveToken(token: TokenSource | undefined): Promise<string | undefined> {\n return typeof token === \"function\" ? token() : token;\n}\n\n/** Minimal JSON-over-HTTP core shared by every resource. */\nexport class HttpClient {\n readonly baseUrl: string;\n private readonly doFetch: typeof fetch;\n\n constructor(private readonly options: HttpOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/+$/, \"\");\n this.doFetch = options.fetch ?? globalThis.fetch.bind(globalThis);\n }\n\n token(): Promise<string | undefined> {\n return resolveToken(this.options.token);\n }\n\n async request<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const headers: Record<string, string> = { accept: \"application/json\" };\n const token = await this.token();\n if (token) headers[\"authorization\"] = `Bearer ${token}`;\n if (options.body !== undefined) headers[\"content-type\"] = \"application/json\";\n if (options.ifMatch !== undefined) headers[\"if-match\"] = `\"${options.ifMatch}\"`;\n if (options.idempotencyKey !== undefined) headers[\"idempotency-key\"] = options.idempotencyKey;\n\n const timeout = AbortSignal.timeout(this.options.timeoutMs ?? DEFAULT_TIMEOUT_MS);\n const response = await this.doFetch(`${this.baseUrl}${path}${queryString(options.query)}`, {\n method,\n headers,\n ...(options.body !== undefined && { body: JSON.stringify(options.body) }),\n signal: options.signal ? AbortSignal.any([options.signal, timeout]) : timeout,\n });\n\n if (!response.ok) throw await toError(method, path, response);\n if (response.status === 204) return undefined as T;\n return (await response.json()) as T;\n }\n}\n\nfunction queryString(query: RequestOptions[\"query\"]): string {\n if (!query) return \"\";\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) if (value !== undefined) params.set(key, String(value));\n const text = params.toString();\n return text ? `?${text}` : \"\";\n}\n\nasync function toError(method: string, path: string, response: Response): Promise<MeshApiError> {\n const text = await response.text();\n let problem: (ProblemDetails & Record<string, unknown>) | undefined;\n try {\n const parsed = JSON.parse(text) as ProblemDetails & Record<string, unknown>;\n if (parsed && typeof parsed.code === \"string\") problem = parsed;\n } catch {\n // not a problem+json body\n }\n const message = problem?.detail ?? problem?.title ?? `${method} ${path} failed with ${response.status}`;\n return new MeshApiError(response.status, message, problem);\n}\n","import {\n applyMeshEvent,\n type DomainEventType,\n type MeshCursor,\n type MeshEvent,\n type MeshSnapshot,\n type MeshState,\n meshStateFromSnapshot,\n RealtimeCloseCode,\n type ServerMessage,\n type Topic,\n} from \"@casimesh/contracts\";\n\n/** The subset of the WebSocket API the client needs — satisfied by browsers, Bun and Node 22+. */\nexport interface WebSocketLike {\n onopen: ((event: unknown) => void) | null;\n onmessage: ((event: { data: unknown }) => void) | null;\n onclose: ((event: { code: number; reason: string }) => void) | null;\n onerror: ((event: unknown) => void) | null;\n send(data: string): void;\n close(code?: number, reason?: string): void;\n}\n\nexport type WebSocketFactory = new (url: string) => WebSocketLike;\n\nexport type RealtimeStatus = \"connecting\" | \"live\" | \"reconnecting\" | \"closed\";\n\nexport interface RealtimeOptions {\n /** Subject kinds to receive. Default: all. */\n readonly topics?: readonly Topic[] | undefined;\n /**\n * Resume from this cursor without loading a snapshot (no `state` mirror until a resync).\n * Default: load a snapshot first and keep `state` current.\n */\n readonly cursor?: MeshCursor | undefined;\n /** Reconnect with full-jitter exponential backoff, or `false` to stay closed after a disconnect. */\n readonly reconnect?: { readonly initialDelayMs?: number; readonly maxDelayMs?: number } | false | undefined;\n /** Randomness source for backoff jitter (tests). */\n readonly random?: (() => number) | undefined;\n}\n\nexport interface RealtimeDeps {\n readonly baseUrl: string;\n readonly token: () => Promise<string | undefined>;\n readonly snapshot: () => Promise<MeshSnapshot>;\n readonly WebSocket?: WebSocketFactory | undefined;\n}\n\ntype EventHandler = (event: MeshEvent) => void;\ntype Listener<T> = (value: T) => void;\n\n/** Thrown to `onError` listeners; `fatal` errors stop reconnection (e.g. invalid credentials). */\nexport class RealtimeError extends Error {\n constructor(\n message: string,\n readonly fatal: boolean,\n ) {\n super(message);\n this.name = \"RealtimeError\";\n }\n}\n\n/**\n * Live connection to a node's realtime stream (ADR-0014). Delivers every event exactly once and in order,\n * across reconnects, by resuming from the last cursor it saw.\n */\nexport class MeshRealtime {\n private currentStatus: RealtimeStatus = \"connecting\";\n private currentState: MeshState | undefined;\n private currentCursor: MeshCursor;\n private needsSnapshot: boolean;\n private socket: WebSocketLike | undefined;\n private attempt = 0;\n private stopped = false;\n private timer: ReturnType<typeof setTimeout> | undefined;\n\n private readonly handlers = new Map<DomainEventType | \"*\", Set<EventHandler>>();\n private readonly statusListeners = new Set<Listener<RealtimeStatus>>();\n private readonly stateListeners = new Set<Listener<MeshState>>();\n private readonly errorListeners = new Set<Listener<RealtimeError>>();\n\n constructor(\n private readonly deps: RealtimeDeps,\n private readonly options: RealtimeOptions = {},\n ) {\n this.currentCursor = { ...(options.cursor ?? {}) };\n this.needsSnapshot = options.cursor === undefined;\n }\n\n get status(): RealtimeStatus {\n return this.currentStatus;\n }\n\n /** The mirrored mesh, when the stream started from (or resynced to) a snapshot. */\n get state(): MeshState | undefined {\n return this.currentState;\n }\n\n /** Last sequence received per origin node. */\n get cursor(): MeshCursor {\n return { ...this.currentCursor };\n }\n\n start(): void {\n void this.connect();\n }\n\n /** Subscribes to one event type, or `\"*\"` for all. Returns an unsubscribe function. */\n on<T extends DomainEventType>(type: T | \"*\", handler: (event: Extract<MeshEvent, { type: T }>) => void): () => void {\n const set = this.handlers.get(type) ?? new Set<EventHandler>();\n set.add(handler as EventHandler);\n this.handlers.set(type, set);\n return () => set.delete(handler as EventHandler);\n }\n\n onStatus(listener: Listener<RealtimeStatus>): () => void {\n return subscribe(this.statusListeners, listener);\n }\n\n onState(listener: Listener<MeshState>): () => void {\n return subscribe(this.stateListeners, listener);\n }\n\n onError(listener: Listener<RealtimeError>): () => void {\n return subscribe(this.errorListeners, listener);\n }\n\n /** Resolves once the stream is caught up and live; rejects if it closes for good first. */\n ready(): Promise<void> {\n if (this.currentStatus === \"live\") return Promise.resolve();\n return new Promise((resolve, reject) => {\n const off = this.onStatus((status) => {\n if (status === \"live\") {\n off();\n resolve();\n } else if (status === \"closed\") {\n off();\n reject(new RealtimeError(\"The realtime connection closed\", true));\n }\n });\n });\n }\n\n close(): void {\n this.stopped = true;\n clearTimeout(this.timer);\n this.socket?.close(RealtimeCloseCode.normal, \"client closed\");\n this.socket = undefined;\n this.setStatus(\"closed\");\n }\n\n private async connect(): Promise<void> {\n if (this.stopped) return;\n this.setStatus(this.attempt === 0 ? \"connecting\" : \"reconnecting\");\n try {\n if (this.needsSnapshot) await this.loadSnapshot();\n const token = await this.deps.token();\n if (!token) throw new RealtimeError(\"A token is required for the realtime stream\", true);\n if (this.stopped) return;\n this.open(token);\n } catch (error) {\n const realtimeError =\n error instanceof RealtimeError\n ? error\n : new RealtimeError(error instanceof Error ? error.message : String(error), false);\n this.emitError(realtimeError);\n if (realtimeError.fatal) this.close();\n else this.scheduleReconnect(false);\n }\n }\n\n private async loadSnapshot(): Promise<void> {\n const snapshot = await this.deps.snapshot();\n this.currentState = meshStateFromSnapshot(snapshot);\n this.currentCursor = { ...snapshot.cursor };\n this.needsSnapshot = false;\n this.emitState();\n }\n\n private open(token: string): void {\n const Socket = this.deps.WebSocket ?? (globalThis.WebSocket as unknown as WebSocketFactory | undefined);\n if (!Socket) throw new RealtimeError(\"No WebSocket implementation available; pass one in the client options\", true);\n\n const socket = new Socket(`${this.deps.baseUrl.replace(/^http/, \"ws\")}/v1/realtime`);\n this.socket = socket;\n socket.onopen = () =>\n socket.send(\n JSON.stringify({\n type: \"hello\",\n token,\n cursor: this.currentCursor,\n ...(this.options.topics && { topics: this.options.topics }),\n }),\n );\n socket.onmessage = (event) => this.onMessage(String(event.data));\n socket.onclose = (event) => {\n if (this.socket === socket) this.onClose(event.code);\n };\n socket.onerror = () => {\n // A close event always follows; reconnection is handled there.\n };\n }\n\n private onMessage(raw: string): void {\n let message: ServerMessage;\n try {\n message = JSON.parse(raw) as ServerMessage;\n } catch {\n this.emitError(new RealtimeError(\"Received a malformed message\", false));\n return;\n }\n switch (message.type) {\n case \"event\":\n this.onEvent(message.event);\n break;\n case \"welcome\":\n this.attempt = 0;\n this.setStatus(\"live\");\n break;\n case \"resync.required\":\n // Too far behind to replay: start over from a fresh snapshot on the next connection.\n this.needsSnapshot = true;\n break;\n case \"error\":\n this.emitError(new RealtimeError(`${message.code}: ${message.message}`, message.code === \"unauthenticated\"));\n break;\n }\n }\n\n private onEvent(event: MeshEvent): void {\n const seen = this.currentCursor[event.origin.nodeId] ?? 0;\n if (event.seq <= seen) return;\n this.currentCursor = { ...this.currentCursor, [event.origin.nodeId]: event.seq };\n if (this.currentState) this.currentState = applyMeshEvent(this.currentState, event);\n\n for (const handler of [...(this.handlers.get(event.type) ?? []), ...(this.handlers.get(\"*\") ?? [])]) handler(event);\n this.emitState();\n }\n\n private onClose(code: number): void {\n this.socket = undefined;\n if (this.stopped) return;\n if (code === RealtimeCloseCode.unauthenticated) {\n this.emitError(new RealtimeError(\"The node rejected the credential\", true));\n this.close();\n return;\n }\n this.scheduleReconnect(code === RealtimeCloseCode.resyncRequired);\n }\n\n private scheduleReconnect(immediately: boolean): void {\n if (this.options.reconnect === false) {\n this.close();\n return;\n }\n const { initialDelayMs = 500, maxDelayMs = 30_000 } = this.options.reconnect ?? {};\n const ceiling = Math.min(maxDelayMs, initialDelayMs * 2 ** this.attempt);\n const delay = immediately ? 0 : Math.round((this.options.random ?? Math.random)() * ceiling);\n this.attempt += 1;\n this.setStatus(\"reconnecting\");\n this.timer = setTimeout(() => void this.connect(), delay);\n }\n\n private setStatus(status: RealtimeStatus): void {\n if (status === this.currentStatus) return;\n this.currentStatus = status;\n for (const listener of this.statusListeners) listener(status);\n }\n\n private emitState(): void {\n const state = this.currentState;\n if (state) for (const listener of this.stateListeners) listener(state);\n }\n\n private emitError(error: RealtimeError): void {\n for (const listener of this.errorListeners) listener(error);\n }\n}\n\nfunction subscribe<T>(set: Set<Listener<T>>, listener: Listener<T>): () => void {\n set.add(listener);\n return () => set.delete(listener);\n}\n","import type {\n Agent,\n AgentStatus,\n Capability,\n CapabilityProvider,\n CreateAgentRequestInput,\n CreateOrganizationRequest,\n CreatePrincipalResponse,\n HealthResponse,\n Link,\n Me,\n MeshSnapshot,\n MeshStats,\n Node,\n NodeDetail,\n Organization,\n PageOf,\n PrincipalKind,\n RequestTaskRequestInput,\n RoleBinding,\n Task,\n TaskStatus,\n UpdateAgentRequest,\n UpdateNodeRequest,\n UpdateOrganizationRequest,\n} from \"@casimesh/contracts\";\nimport { HttpClient, type TokenSource } from \"./http.ts\";\nimport { MeshRealtime, type RealtimeOptions, type WebSocketFactory } from \"./realtime.ts\";\n\nexport interface MeshClientOptions {\n /** Base URL of any Node Server, e.g. `http://localhost:7700`. */\n readonly baseUrl: string;\n /** Bearer token or API key of the caller (ROADMAP §2.9), or a function returning one. */\n readonly token?: TokenSource | undefined;\n /** Per-request timeout in milliseconds. Defaults to 10 000. */\n readonly timeoutMs?: number | undefined;\n /** Injectable for tests and non-standard runtimes. */\n readonly fetch?: typeof fetch | undefined;\n /** WebSocket constructor for runtimes without a global one. */\n readonly WebSocket?: WebSocketFactory | undefined;\n}\n\nexport interface PageParams {\n readonly limit?: number | undefined;\n readonly cursor?: string | undefined;\n}\n\n/** Options for conditional writes: pass the `version` you read to fail with 412 if it changed. */\nexport interface WriteOptions {\n readonly ifMatch?: number | undefined;\n}\n\nexport interface CreateOptions {\n /** Makes the POST safe to retry; the first response is replayed for 24 hours. */\n readonly idempotencyKey?: string | undefined;\n}\n\nexport interface AgentFilter extends PageParams {\n readonly nodeId?: string | undefined;\n readonly organizationId?: string | undefined;\n readonly status?: AgentStatus | undefined;\n /** Exact capability name or dotted prefix, e.g. `terrain`. */\n readonly capability?: string | undefined;\n}\n\nexport interface TaskFilter extends PageParams {\n readonly status?: TaskStatus | undefined;\n /** Tasks this agent requested or provided. */\n readonly agentId?: string | undefined;\n /** Tasks this organization requested or was assigned. */\n readonly organizationId?: string | undefined;\n readonly capability?: string | undefined;\n}\n\nexport interface WaitOptions {\n /** Give up after this long (default 30 s). */\n readonly timeoutMs?: number | undefined;\n /** Polling interval (default 250 ms). Use the realtime stream to follow many tasks at once. */\n readonly intervalMs?: number | undefined;\n}\n\nconst id = encodeURIComponent;\n\n/** Iterates every item of a paginated endpoint, following `nextCursor`. */\nasync function* all<T>(fetchPage: (cursor: string | undefined) => Promise<PageOf<T>>): AsyncGenerator<T> {\n let cursor: string | undefined;\n do {\n const page = await fetchPage(cursor);\n yield* page.items;\n cursor = page.nextCursor ?? undefined;\n } while (cursor);\n}\n\nfunction ownersOf(http: HttpClient, base: string) {\n return {\n list: async (): Promise<RoleBinding[]> =>\n (await http.request<{ items: RoleBinding[] }>(\"GET\", `${base}/owners`)).items,\n grant: (principalId: string, options: CreateOptions = {}) =>\n http.request<RoleBinding>(\"POST\", `${base}/owners`, { body: { principalId }, ...options }),\n revoke: (principalId: string) => http.request<void>(\"DELETE\", `${base}/owners/${id(principalId)}`),\n };\n}\n\n/** Typed client for a mesh Node Server. Types come from `@casimesh/contracts`, the API's single source of truth. */\nexport function createMeshClient(options: MeshClientOptions) {\n const http = new HttpClient(options);\n\n const client = {\n /** Liveness and version (public). */\n health: () => http.request<HealthResponse>(\"GET\", \"/v1/health\"),\n /** The caller and their ownership roles. */\n me: () => http.request<Me>(\"GET\", \"/v1/me\"),\n snapshot: () => http.request<MeshSnapshot>(\"GET\", \"/v1/mesh/snapshot\"),\n stats: () => http.request<MeshStats>(\"GET\", \"/v1/mesh/stats\"),\n capabilities: async (search?: string): Promise<Capability[]> =>\n (await http.request<{ items: Capability[] }>(\"GET\", \"/v1/capabilities\", { query: { q: search } })).items,\n\n /** Agents offering a capability, available ones first (ADR-0020). */\n capabilityProviders: async (name: string): Promise<CapabilityProvider[]> =>\n (await http.request<{ items: CapabilityProvider[] }>(\"GET\", `/v1/capabilities/${id(name)}/providers`)).items,\n\n principals: {\n /** Node owners only. The credential is returned exactly once. */\n create: (input: { name: string; kind?: PrincipalKind }, options: CreateOptions = {}) =>\n http.request<CreatePrincipalResponse>(\"POST\", \"/v1/principals\", { body: input, ...options }),\n },\n\n nodes: {\n list: (page: PageParams = {}) => http.request<PageOf<Node>>(\"GET\", \"/v1/nodes\", { query: { ...page } }),\n all: () => all((cursor) => client.nodes.list({ cursor })),\n get: (nodeId: string) => http.request<Node>(\"GET\", `/v1/nodes/${id(nodeId)}`),\n detail: (nodeId: string) => http.request<NodeDetail>(\"GET\", `/v1/nodes/${id(nodeId)}/detail`),\n organizations: (nodeId: string, page: PageParams = {}) =>\n http.request<PageOf<Organization>>(\"GET\", `/v1/nodes/${id(nodeId)}/organizations`, { query: { ...page } }),\n update: (nodeId: string, changes: UpdateNodeRequest, options: WriteOptions = {}) =>\n http.request<Node>(\"PATCH\", `/v1/nodes/${id(nodeId)}`, { body: changes, ...options }),\n /** Removes the node and, children first, everything on it. */\n remove: (nodeId: string, options: WriteOptions = {}) =>\n http.request<void>(\"DELETE\", `/v1/nodes/${id(nodeId)}`, options),\n owners: (nodeId: string) => ownersOf(http, `/v1/nodes/${id(nodeId)}`),\n /** Forgets an offline remote node, with its organizations, agents and links (owners of this node). */\n forget: (nodeId: string) => http.request<void>(\"POST\", `/v1/nodes/${id(nodeId)}/forget`),\n },\n\n links: {\n list: async (): Promise<Link[]> => (await http.request<{ items: Link[] }>(\"GET\", \"/v1/links\")).items,\n /** Connects the node this client talks to with a peer, by URL or by the peer's node id (its advertised endpoint). */\n connect: (target: { url: string } | { nodeId: string }, options: CreateOptions = {}) =>\n http.request<{ url: string }>(\"POST\", \"/v1/links\", { body: target, ...options }),\n /** Disconnects the peer at the other end and removes the link. */\n remove: (linkId: string) => http.request<void>(\"DELETE\", `/v1/links/${id(linkId)}`),\n },\n\n organizations: {\n /** Creates an organization (and its Mesh Agent) on the node this client talks to. */\n create: (input: CreateOrganizationRequest, options: CreateOptions = {}) =>\n http.request<Organization>(\"POST\", \"/v1/organizations\", { body: input, ...options }),\n list: (filter: PageParams & { nodeId?: string | undefined } = {}) =>\n http.request<PageOf<Organization>>(\"GET\", \"/v1/organizations\", { query: { ...filter } }),\n all: (filter: { nodeId?: string | undefined } = {}) =>\n all((cursor) => client.organizations.list({ ...filter, cursor })),\n get: (organizationId: string) => http.request<Organization>(\"GET\", `/v1/organizations/${id(organizationId)}`),\n update: (organizationId: string, changes: UpdateOrganizationRequest, options: WriteOptions = {}) =>\n http.request<Organization>(\"PATCH\", `/v1/organizations/${id(organizationId)}`, { body: changes, ...options }),\n /** Removes the organization and all of its agents. */\n remove: (organizationId: string, options: WriteOptions = {}) =>\n http.request<void>(\"DELETE\", `/v1/organizations/${id(organizationId)}`, options),\n owners: (organizationId: string) => ownersOf(http, `/v1/organizations/${id(organizationId)}`),\n },\n\n agents: {\n /** Creates an agent; it is registered with its organization's Mesh Agent automatically. */\n create: (organizationId: string, input: CreateAgentRequestInput, options: CreateOptions = {}) =>\n http.request<Agent>(\"POST\", `/v1/organizations/${id(organizationId)}/agents`, { body: input, ...options }),\n list: (filter: AgentFilter = {}) => http.request<PageOf<Agent>>(\"GET\", \"/v1/agents\", { query: { ...filter } }),\n all: (filter: Omit<AgentFilter, \"cursor\"> = {}) => all((cursor) => client.agents.list({ ...filter, cursor })),\n get: (agentId: string) => http.request<Agent>(\"GET\", `/v1/agents/${id(agentId)}`),\n update: (agentId: string, changes: UpdateAgentRequest, options: WriteOptions = {}) =>\n http.request<Agent>(\"PATCH\", `/v1/agents/${id(agentId)}`, { body: changes, ...options }),\n /** Deregisters the agent from its Mesh Agent, then removes it. */\n remove: (agentId: string, options: WriteOptions = {}) =>\n http.request<void>(\"DELETE\", `/v1/agents/${id(agentId)}`, options),\n start: (agentId: string) => http.request<Agent>(\"POST\", `/v1/agents/${id(agentId)}/start`),\n stop: (agentId: string) => http.request<Agent>(\"POST\", `/v1/agents/${id(agentId)}/stop`),\n },\n\n tasks: {\n /**\n * Asks the mesh for a capability on behalf of `agentId` (node or org owners). The agent's Mesh Agent routes the\n * request; the returned task is `requested`, and the provider's node completes it (ADR-0020).\n */\n request: (agentId: string, input: RequestTaskRequestInput, options: CreateOptions = {}) =>\n http.request<Task>(\"POST\", `/v1/agents/${id(agentId)}/tasks`, { body: input, ...options }),\n /** Newest first. */\n list: (filter: TaskFilter = {}) => http.request<PageOf<Task>>(\"GET\", \"/v1/tasks\", { query: { ...filter } }),\n all: (filter: Omit<TaskFilter, \"cursor\"> = {}) => all((cursor) => client.tasks.list({ ...filter, cursor })),\n get: (taskId: string) => http.request<Task>(\"GET\", `/v1/tasks/${id(taskId)}`),\n /** Resolves with the task once it is `completed` or `failed`; rejects after `timeoutMs`. */\n wait: async (taskId: string, waitOptions: WaitOptions = {}): Promise<Task> => {\n const deadline = Date.now() + (waitOptions.timeoutMs ?? 30_000);\n for (;;) {\n const task = await client.tasks.get(taskId);\n if (task.status === \"completed\" || task.status === \"failed\") return task;\n if (Date.now() >= deadline) throw new Error(`Task ${taskId} still ${task.status} after waiting`);\n await new Promise((resolve) => setTimeout(resolve, waitOptions.intervalMs ?? 250));\n }\n },\n },\n\n realtime: {\n /**\n * Opens the realtime stream. Without a `cursor` it first loads a snapshot and keeps `state` current;\n * it reconnects with backoff and resumes from the last event it saw.\n */\n connect: (realtimeOptions: RealtimeOptions = {}) => {\n const realtime = new MeshRealtime(\n { baseUrl: http.baseUrl, token: () => http.token(), snapshot: client.snapshot, WebSocket: options.WebSocket },\n realtimeOptions,\n );\n realtime.start();\n return realtime;\n },\n },\n };\n\n return client;\n}\n\nexport type MeshClient = ReturnType<typeof createMeshClient>;\n"]}
1
+ {"version":3,"sources":["../../contracts/src/capability.ts","../../contracts/src/common.ts","../../contracts/src/ids.ts","../../contracts/src/agent.ts","../../contracts/src/audit.ts","../../contracts/src/auth.ts","../../contracts/src/link.ts","../../contracts/src/trust.ts","../../contracts/src/node.ts","../../contracts/src/policy.ts","../../contracts/src/organization.ts","../../contracts/src/task.ts","../../contracts/src/events.ts","../../contracts/src/health.ts","../../contracts/src/identity.ts","../../contracts/src/mesh.ts","../../contracts/src/projection.ts","../../contracts/src/writers.ts","../../contracts/src/mesh-state.ts","../../contracts/src/page.ts","../../contracts/src/problem.ts","../../contracts/src/realtime.ts","../src/errors.ts","../src/http.ts","../src/realtime.ts","../src/client.ts"],"names":["z","id","event","options"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\n/** Dotted, lowercase capability name, e.g. `vision` or `terrain.analysis` (deck slide 07). */\nexport const CapabilityName = z\n .string()\n .regex(/^[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)*$/, \"Dotted lowercase name, e.g. terrain.analysis\")\n .max(100);\nexport type CapabilityName = z.infer<typeof CapabilityName>;\n\nexport const Capability = z\n .object({\n name: CapabilityName,\n version: z.string().max(32).default(\"1.0.0\"),\n description: z.string().max(500).optional(),\n })\n .meta({ id: \"Capability\", description: \"A machine-discoverable description of what an agent can perform.\" });\nexport type Capability = z.infer<typeof Capability>;\n","import { z } from \"zod\";\n\n/** ISO-8601 UTC timestamp with milliseconds, e.g. `2026-09-28T09:28:12.123Z`. */\nexport const Timestamp = z.iso.datetime().meta({ example: \"2026-09-28T09:28:12.123Z\" });\nexport type Timestamp = z.infer<typeof Timestamp>;\n\n/** Monotonic per-entity version used for replication and optimistic concurrency (ADR-0004). */\nexport const Version = z.int().min(1).meta({ description: \"Monotonic per-entity version\" });\nexport type Version = z.infer<typeof Version>;\n\n/** Human-readable display name. */\nexport const DisplayName = z.string().trim().min(1).max(120);\n\n/** URL-safe identifier, unique within its parent (e.g. an organization within a node). */\nexport const Slug = z\n .string()\n .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, \"Lowercase letters, digits and single hyphens\")\n .max(63);\nexport type Slug = z.infer<typeof Slug>;\n\n/** Free-form, JSON-serialisable metadata. */\nexport const Metadata = z.record(z.string(), z.unknown());\nexport type Metadata = z.infer<typeof Metadata>;\n\n/** Fields every replicated entity carries. */\nexport const EntityAudit = {\n version: Version,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n};\n","import { z } from \"zod\";\n\n/** Prefixes for time-sortable ULID identifiers (ROADMAP §2.3). */\nexport const ID_PREFIX = {\n node: \"node\",\n organization: \"org\",\n agent: \"agt\",\n link: \"lnk\",\n event: \"evt\",\n command: \"cmd\",\n principal: \"prn\",\n roleBinding: \"rol\",\n apiKey: \"key\",\n task: \"tsk\",\n token: \"tok\",\n audit: \"aud\",\n revocation: \"rev\",\n} as const;\n\nexport type IdKind = keyof typeof ID_PREFIX;\n\n/** Crockford base32 ULID body (26 chars, no I, L, O, U). */\nexport const ULID_PATTERN = \"[0-9A-HJKMNP-TV-Z]{26}\";\n\n/** Builds a Zod schema that validates `<prefix>_<ULID>` identifiers. */\nexport const prefixedId = <K extends IdKind>(kind: K) =>\n z\n .string()\n .regex(new RegExp(`^${ID_PREFIX[kind]}_${ULID_PATTERN}$`), `Expected a ${kind} id (${ID_PREFIX[kind]}_<ULID>)`)\n .meta({ description: `${kind} identifier`, example: `${ID_PREFIX[kind]}_01J9Z3K7Q8R5T2V4W6X8Y0A1B2` });\n\nexport const NodeId = prefixedId(\"node\");\nexport const OrganizationId = prefixedId(\"organization\");\nexport const AgentId = prefixedId(\"agent\");\nexport const LinkId = prefixedId(\"link\");\nexport const EventId = prefixedId(\"event\");\nexport const CommandId = prefixedId(\"command\");\nexport const PrincipalId = prefixedId(\"principal\");\nexport const RoleBindingId = prefixedId(\"roleBinding\");\nexport const TaskId = prefixedId(\"task\");\nexport const TokenId = prefixedId(\"token\");\nexport const AuditId = prefixedId(\"audit\");\nexport const RevocationId = prefixedId(\"revocation\");\nexport const ApiKeyId = prefixedId(\"apiKey\");\n\nexport type NodeId = z.infer<typeof NodeId>;\nexport type OrganizationId = z.infer<typeof OrganizationId>;\nexport type AgentId = z.infer<typeof AgentId>;\nexport type LinkId = z.infer<typeof LinkId>;\nexport type EventId = z.infer<typeof EventId>;\nexport type CommandId = z.infer<typeof CommandId>;\nexport type PrincipalId = z.infer<typeof PrincipalId>;\nexport type RoleBindingId = z.infer<typeof RoleBindingId>;\nexport type TaskId = z.infer<typeof TaskId>;\n","import { z } from \"zod\";\nimport { Capability } from \"./capability.ts\";\nimport { DisplayName, EntityAudit, Metadata } from \"./common.ts\";\nimport { AgentId, NodeId, OrganizationId } from \"./ids.ts\";\n\n/** `mesh` marks the organization's Mesh Agent — exactly one per organization (ADR-0003). */\nexport const AgentKind = z.enum([\"standard\", \"mesh\"]);\nexport type AgentKind = z.infer<typeof AgentKind>;\n\nexport const AgentStatus = z.enum([\"created\", \"starting\", \"running\", \"stopped\", \"error\"]);\nexport type AgentStatus = z.infer<typeof AgentStatus>;\n\nconst capabilityList = z\n .array(Capability)\n .max(64)\n .refine((caps) => new Set(caps.map((c) => c.name)).size === caps.length, \"Capability names must be unique\");\n\nexport const Agent = z\n .object({\n id: AgentId,\n organizationId: OrganizationId,\n nodeId: NodeId,\n name: DisplayName,\n kind: AgentKind,\n status: AgentStatus,\n capabilities: capabilityList,\n /** Model backing the agent, e.g. `claude-sonnet-5`; null for rule-based agents. */\n model: z.string().max(100).nullable(),\n metadata: Metadata,\n ...EntityAudit,\n })\n .meta({ id: \"Agent\", description: \"An autonomous software entity with identity, capabilities and policies.\" });\nexport type Agent = z.infer<typeof Agent>;\n\nexport const CreateAgentRequest = z\n .object({\n name: DisplayName,\n capabilities: capabilityList.default([]),\n model: z.string().max(100).nullable().default(null),\n metadata: Metadata.optional(),\n })\n .meta({ id: \"CreateAgentRequest\" });\n/** Parsed request (defaults applied) — what use cases receive. */\nexport type CreateAgentRequest = z.infer<typeof CreateAgentRequest>;\n/** What callers may send — capabilities and model are optional. */\nexport type CreateAgentRequestInput = z.input<typeof CreateAgentRequest>;\n\nexport const UpdateAgentRequest = z\n .object({\n name: DisplayName.optional(),\n capabilities: capabilityList.optional(),\n model: z.string().max(100).nullable().optional(),\n metadata: Metadata.optional(),\n })\n .refine((body) => Object.keys(body).length > 0, \"At least one field must be provided\")\n .meta({ id: \"UpdateAgentRequest\" });\nexport type UpdateAgentRequest = z.infer<typeof UpdateAgentRequest>;\n","import { z } from \"zod\";\nimport { Timestamp } from \"./common.ts\";\nimport { AuditId, PrincipalId } from \"./ids.ts\";\n\n/**\n * The node's audit log (ADR-0024): append-only, hash-chained and signed with the node key. Each entry records a\n * security-relevant decision or event on this node; it is local, never replicated.\n */\nexport const AuditKind = z.enum([\n \"authorization\",\n \"authentication\",\n \"credential\",\n \"principal\",\n \"policy\",\n \"replication\",\n]);\nexport type AuditKind = z.infer<typeof AuditKind>;\n\n/** `allowed` / `denied` for decisions; `done` for changes that simply happened (a token issued). */\nexport const AuditOutcome = z.enum([\"allowed\", \"denied\", \"done\"]);\nexport type AuditOutcome = z.infer<typeof AuditOutcome>;\n\nexport const AuditTarget = z.object({\n nodeId: z.string().optional(),\n organizationId: z.string().optional(),\n /** The entity, credential or event concerned, when there is one. */\n id: z.string().optional(),\n});\nexport type AuditTarget = z.infer<typeof AuditTarget>;\n\nexport const AuditEntry = z\n .object({\n /** 1, 2, 3… with no gaps: a missing number is a removed entry. */\n seq: z.int().min(1),\n id: AuditId,\n at: Timestamp,\n kind: AuditKind,\n /** What was attempted or done, e.g. `agent.create`, `token.issue`, `event.refused`. */\n action: z.string().max(64),\n outcome: AuditOutcome,\n principalId: PrincipalId.nullable(),\n credentialId: z.string().nullable(),\n target: AuditTarget,\n detail: z.string().max(500),\n /** SHA-256 (hex) of the previous entry; 64 zeros for the first. */\n prevHash: z.string().regex(/^[0-9a-f]{64}$/),\n /** SHA-256 (hex) of this entry's canonical JSON without `hash` and `sig`. */\n hash: z.string().regex(/^[0-9a-f]{64}$/),\n /** The node key's Ed25519 signature over `hash`. */\n sig: z.string(),\n /** The node key that signed (keys rotate; ADR-0025). Not part of `hash`; null for entries from before rotation. */\n signer: z.string().nullable(),\n })\n .meta({ id: \"AuditEntry\", description: \"One signed, hash-chained record of the node's audit log.\" });\nexport type AuditEntry = z.infer<typeof AuditEntry>;\n\nexport const AuditVerification = z\n .object({\n valid: z.boolean(),\n entries: z.int().min(0),\n /** The first entry that failed, or null when the whole chain holds. */\n brokenAt: z.int().nullable(),\n reason: z.string().nullable(),\n /** The node's current key; entries may also be signed by its earlier keys. */\n publicKey: z.string(),\n })\n .meta({ id: \"AuditVerification\" });\nexport type AuditVerification = z.infer<typeof AuditVerification>;\n\nexport const GENESIS_HASH = \"0\".repeat(64);\n","import { z } from \"zod\";\nimport { DisplayName, Timestamp } from \"./common.ts\";\nimport { NodeId, OrganizationId, PrincipalId, RoleBindingId } from \"./ids.ts\";\n\nexport const PrincipalKind = z.enum([\"user\", \"service\"]);\nexport type PrincipalKind = z.infer<typeof PrincipalKind>;\n\nexport const Principal = z\n .object({\n id: PrincipalId,\n kind: PrincipalKind,\n name: DisplayName,\n publicKey: z.string().nullable(),\n createdAt: Timestamp,\n })\n .meta({ id: \"Principal\", description: \"A user or service that can be authenticated and granted roles.\" });\nexport type Principal = z.infer<typeof Principal>;\n\n/**\n * Roles (ADR-0010, ADR-0022). Node-scoped: `node_owner` manages the node; `viewer` reads the mesh; `auditor` reads the\n * mesh and the audit log. Organization-scoped: `org_owner` manages the organization; `agent_operator` starts and stops\n * its agents and requests capabilities for them, without creating or removing anything.\n */\nexport const Role = z.enum([\"node_owner\", \"org_owner\", \"viewer\", \"auditor\", \"agent_operator\"]);\nexport type Role = z.infer<typeof Role>;\n\nexport const NODE_ROLES: readonly Role[] = [\"node_owner\", \"viewer\", \"auditor\"];\nexport const ORGANIZATION_ROLES: readonly Role[] = [\"org_owner\", \"agent_operator\"];\n/** Roles whose last holder cannot be removed, so every node and organization stays manageable. */\nexport const OWNER_ROLES: readonly Role[] = [\"node_owner\", \"org_owner\"];\n\n/** What a credential may be used for (ADR-0022). A token can never do more than its principal's roles allow. */\nexport const TokenScope = z.enum([\"read\", \"write\", \"admin\"]);\nexport type TokenScope = z.infer<typeof TokenScope>;\nexport const ALL_SCOPES: readonly TokenScope[] = [\"read\", \"write\", \"admin\"];\n\nexport const RoleScope = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"node\"), nodeId: NodeId }),\n z.object({ type: z.literal(\"organization\"), organizationId: OrganizationId, nodeId: NodeId }),\n]);\nexport type RoleScope = z.infer<typeof RoleScope>;\n\nexport const RoleBinding = z\n .object({\n id: RoleBindingId,\n principalId: PrincipalId,\n role: Role,\n scope: RoleScope,\n createdAt: Timestamp,\n })\n .refine(\n (b) => (NODE_ROLES.includes(b.role) ? b.scope.type === \"node\" : b.scope.type === \"organization\"),\n \"node_owner, viewer and auditor are node-scoped; org_owner and agent_operator organization-scoped\",\n )\n .meta({ id: \"RoleBinding\" });\nexport type RoleBinding = z.infer<typeof RoleBinding>;\n\nexport const GrantOwnerRequest = z.object({ principalId: PrincipalId }).meta({ id: \"GrantOwnerRequest\" });\nexport type GrantOwnerRequest = z.infer<typeof GrantOwnerRequest>;\n\n/** Where a role applies, as callers name it; the server fills in the node of an organization. */\nexport const RoleTarget = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"node\"), nodeId: NodeId }),\n z.object({ type: z.literal(\"organization\"), organizationId: OrganizationId }),\n]);\nexport type RoleTarget = z.infer<typeof RoleTarget>;\n\nexport const GrantRoleRequest = z\n .object({ principalId: PrincipalId, role: Role, target: RoleTarget })\n .meta({ id: \"GrantRoleRequest\" });\nexport type GrantRoleRequest = z.infer<typeof GrantRoleRequest>;\n","import { z } from \"zod\";\nimport { EntityAudit, Timestamp } from \"./common.ts\";\nimport { LinkId, NodeId } from \"./ids.ts\";\n\nexport const TransportKind = z.enum([\"memory\", \"ws-peer\", \"tcp\", \"mqtt\", \"meshtastic\", \"meshcore\"]);\nexport type TransportKind = z.infer<typeof TransportKind>;\n\n/** `requested` = an owner drew the edge in the Monitor and the peer has not accepted yet (ADR-0008). */\nexport const LinkState = z.enum([\"requested\", \"up\", \"down\"]);\nexport type LinkState = z.infer<typeof LinkState>;\n\nexport const LinkQuality = z.object({\n latencyMs: z.number().nonnegative().optional(),\n rssi: z.number().optional(),\n});\nexport type LinkQuality = z.infer<typeof LinkQuality>;\n\nexport const Link = z\n .object({\n id: LinkId,\n aNodeId: NodeId,\n bNodeId: NodeId,\n transport: TransportKind,\n state: LinkState,\n quality: LinkQuality,\n lastSeenAt: Timestamp.nullable(),\n ...EntityAudit,\n })\n .refine((link) => link.aNodeId !== link.bNodeId, \"A link must connect two different nodes\")\n .meta({ id: \"Link\", description: \"Transport-level adjacency between two nodes — the edges of the topology.\" });\nexport type Link = z.infer<typeof Link>;\n\nexport const CreateLinkRequest = z\n .object({ aNodeId: NodeId, bNodeId: NodeId, transport: TransportKind })\n .refine((body) => body.aNodeId !== body.bNodeId, \"A link must connect two different nodes\")\n .meta({ id: \"CreateLinkRequest\" });\nexport type CreateLinkRequest = z.infer<typeof CreateLinkRequest>;\n","import { z } from \"zod\";\nimport { Timestamp } from \"./common.ts\";\nimport { NodeId } from \"./ids.ts\";\n\n/**\n * The mesh's trust hierarchy (ADR-0025, deck slide 09): an offline **mesh root** key certifies node keys, and revokes\n * them. A mesh configured with the root's public key admits and trusts only certified, unrevoked node keys.\n */\nconst Ed25519Key = z.string().startsWith(\"ed25519:\");\n\n/** \"This node id owns this key until `expiresAt`\", signed by the mesh root. */\nexport const NodeCertificate = z\n .object({\n v: z.literal(1),\n nodeId: NodeId,\n publicKey: Ed25519Key,\n issuedAt: Timestamp,\n expiresAt: Timestamp,\n /** The mesh root's public key. */\n rootKey: Ed25519Key,\n /** The root's signature over the canonical JSON of every other field. */\n sig: z.string(),\n })\n .meta({ id: \"NodeCertificate\", description: \"A node key certified by the mesh root (ADR-0025).\" });\nexport type NodeCertificate = z.infer<typeof NodeCertificate>;\n\n/** \"Stop trusting this key\", signed by the mesh root. */\nexport const KeyRevocation = z\n .object({\n v: z.literal(1),\n publicKey: Ed25519Key,\n nodeId: NodeId,\n revokedAt: Timestamp,\n reason: z.string().max(500),\n rootKey: Ed25519Key,\n sig: z.string(),\n })\n .meta({ id: \"KeyRevocation\", description: \"A node key revoked by the mesh root (ADR-0025).\" });\nexport type KeyRevocation = z.infer<typeof KeyRevocation>;\n","import { z } from \"zod\";\nimport { DisplayName, EntityAudit, Metadata, Timestamp } from \"./common.ts\";\nimport { NodeId } from \"./ids.ts\";\nimport { NodeCertificate } from \"./trust.ts\";\n\nexport const NodeStatus = z.enum([\"online\", \"degraded\", \"offline\"]);\nexport type NodeStatus = z.infer<typeof NodeStatus>;\n\nexport const Node = z\n .object({\n id: NodeId,\n name: DisplayName,\n publicKey: z.string().min(1),\n /** Base URL where other nodes and clients reach this node, e.g. `https://node-a.example:7700` (ADR-0017). */\n endpoint: z.url().nullable(),\n status: NodeStatus,\n metadata: Metadata,\n lastSeenAt: Timestamp.nullable(),\n /** The mesh root's certificate for `publicKey`, in a rooted mesh (ADR-0025). */\n certificate: NodeCertificate.nullable().default(null),\n ...EntityAudit,\n })\n .meta({ id: \"Node\", description: \"A physical or virtual endpoint connected to the mesh.\" });\nexport type Node = z.infer<typeof Node>;\n\nexport const UpdateNodeRequest = z\n .object({\n name: DisplayName.optional(),\n endpoint: z.url().nullable().optional(),\n metadata: Metadata.optional(),\n })\n .refine((body) => Object.keys(body).length > 0, \"At least one field must be provided\")\n .meta({ id: \"UpdateNodeRequest\" });\nexport type UpdateNodeRequest = z.infer<typeof UpdateNodeRequest>;\n","import { z } from \"zod\";\nimport { AgentId, NodeId, OrganizationId } from \"./ids.ts\";\n\n/**\n * Organization policies (ADR-0023): declarative rules on who may ask the organization for which capabilities\n * (`inbound`), whom its agents may ask (`outbound`), and which tools its agents may use (`tools`). A policy is part of\n * its organization, so it replicates with it and every node evaluates it the same way.\n *\n * Evaluation: among the rules that match, a `deny` wins over an `allow`; with no matching rule the section's default\n * applies. Patterns are an exact name, a dotted prefix ending in `.*` (`terrain.*` matches `terrain.analysis`), or `*`.\n */\nexport const Effect = z.enum([\"allow\", \"deny\"]);\nexport type Effect = z.infer<typeof Effect>;\n\nexport const NamePattern = z\n .string()\n .regex(/^(\\*|[a-z][a-z0-9_-]*(?:\\.[a-z][a-z0-9_-]*)*(?:\\.\\*)?)$/i, \"An exact name, `prefix.*` or `*`\")\n .max(100);\nexport type NamePattern = z.infer<typeof NamePattern>;\n\n/** A capability rule. `organizationId` / `nodeId` name the other side: the requester (inbound) or provider (outbound). */\nexport const CapabilityRule = z.object({\n effect: Effect,\n capability: NamePattern,\n organizationId: OrganizationId.optional(),\n nodeId: NodeId.optional(),\n});\nexport type CapabilityRule = z.infer<typeof CapabilityRule>;\n\nexport const ToolRule = z.object({ effect: Effect, tool: NamePattern, agentId: AgentId.optional() });\nexport type ToolRule = z.infer<typeof ToolRule>;\n\nconst section = <R extends z.ZodType>(rule: R) =>\n z.object({ default: Effect.default(\"allow\"), rules: z.array(rule).max(100).default([]) });\n\nexport const OrganizationPolicy = z\n .object({\n inbound: section(CapabilityRule).default({ default: \"allow\", rules: [] }),\n outbound: section(CapabilityRule).default({ default: \"allow\", rules: [] }),\n tools: section(ToolRule).default({ default: \"allow\", rules: [] }),\n })\n .meta({\n id: \"OrganizationPolicy\",\n description: \"Who may request which capabilities, whom its agents may ask, and which tools they may use.\",\n });\nexport type OrganizationPolicy = z.infer<typeof OrganizationPolicy>;\n\n/** Allows everything: the policy of every organization until its owners set one. */\nexport const OPEN_POLICY: OrganizationPolicy = {\n inbound: { default: \"allow\", rules: [] },\n outbound: { default: \"allow\", rules: [] },\n tools: { default: \"allow\", rules: [] },\n};\n\nexport function matchesPattern(pattern: string, name: string): boolean {\n if (pattern === \"*\") return true;\n if (pattern.endsWith(\".*\")) return name.startsWith(pattern.slice(0, -1));\n return pattern === name;\n}\n\nexport interface PolicyDecision {\n readonly allowed: boolean;\n /** The rule that decided, or undefined when the section's default did. */\n readonly rule: CapabilityRule | ToolRule | undefined;\n}\n\nfunction decide<R extends CapabilityRule | ToolRule>(\n policySection: { default: Effect; rules: readonly R[] },\n matches: (rule: R) => boolean,\n): PolicyDecision {\n const matching = policySection.rules.filter(matches);\n const deny = matching.find((r) => r.effect === \"deny\");\n if (deny) return { allowed: false, rule: deny };\n const allow = matching.find((r) => r.effect === \"allow\");\n if (allow) return { allowed: true, rule: allow };\n return { allowed: policySection.default === \"allow\", rule: undefined };\n}\n\nconst party = (rule: CapabilityRule, other: { organizationId: string; nodeId: string }) =>\n (rule.organizationId === undefined || rule.organizationId === other.organizationId) &&\n (rule.nodeId === undefined || rule.nodeId === other.nodeId);\n\n/** Minimal organization shape the evaluators need (a contracts `Organization` satisfies it). */\nexport interface PolicyHolder {\n readonly id: string;\n readonly nodeId: string;\n readonly policy: OrganizationPolicy;\n}\n\n/**\n * May `requester`'s agents ask `provider` for `capability`? Both sides must agree: the requester's outbound policy and\n * the provider's inbound policy. Within one organization, policy never applies (internal collaboration).\n */\nexport function mayRequest(requester: PolicyHolder, provider: PolicyHolder, capability: string): PolicyDecision {\n if (requester.id === provider.id) return { allowed: true, rule: undefined };\n const outbound = decide(\n requester.policy.outbound,\n (r) =>\n matchesPattern(r.capability, capability) && party(r, { organizationId: provider.id, nodeId: provider.nodeId }),\n );\n if (!outbound.allowed) return outbound;\n return decide(\n provider.policy.inbound,\n (r) =>\n matchesPattern(r.capability, capability) && party(r, { organizationId: requester.id, nodeId: requester.nodeId }),\n );\n}\n\n/**\n * The provider's side alone: does its inbound policy let `requester` ask for `capability`? The assignee's node checks\n * this again on acceptance — it has the final say over its own organization (ADR-0023).\n */\nexport function inboundAllows(\n provider: PolicyHolder,\n requester: { readonly organizationId: string; readonly nodeId: string },\n capability: string,\n): PolicyDecision {\n if (requester.organizationId === provider.id) return { allowed: true, rule: undefined };\n return decide(provider.policy.inbound, (r) => matchesPattern(r.capability, capability) && party(r, requester));\n}\n\n/** May this agent of the organization use the tool? */\nexport function mayUseTool(organization: PolicyHolder, agentId: string, tool: string): PolicyDecision {\n return decide(\n organization.policy.tools,\n (r) => matchesPattern(r.tool, tool) && (r.agentId === undefined || r.agentId === agentId),\n );\n}\n","import { z } from \"zod\";\nimport { DisplayName, EntityAudit, Metadata, Slug } from \"./common.ts\";\nimport { NodeId, OrganizationId, PrincipalId } from \"./ids.ts\";\nimport { OPEN_POLICY, OrganizationPolicy } from \"./policy.ts\";\n\nexport const Organization = z\n .object({\n id: OrganizationId,\n nodeId: NodeId,\n name: DisplayName,\n slug: Slug,\n metadata: Metadata,\n /** Capability and tool policy (ADR-0023). Organizations from before it have the open policy. */\n policy: OrganizationPolicy.default(OPEN_POLICY),\n ...EntityAudit,\n })\n .meta({ id: \"Organization\", description: \"A logical boundary on a node that owns policies, identities and agents.\" });\nexport type Organization = z.infer<typeof Organization>;\n\nexport const CreateOrganizationRequest = z\n .object({\n name: DisplayName,\n /** Derived from `name` when omitted. */\n slug: Slug.optional(),\n metadata: Metadata.optional(),\n /** Principal to make the first org owner; defaults to the caller. */\n ownerPrincipalId: PrincipalId.optional(),\n })\n .meta({ id: \"CreateOrganizationRequest\" });\nexport type CreateOrganizationRequest = z.infer<typeof CreateOrganizationRequest>;\n\nexport const UpdateOrganizationRequest = z\n .object({\n name: DisplayName.optional(),\n metadata: Metadata.optional(),\n policy: OrganizationPolicy.optional(),\n })\n .refine((body) => Object.keys(body).length > 0, \"At least one field must be provided\")\n .meta({ id: \"UpdateOrganizationRequest\" });\nexport type UpdateOrganizationRequest = z.infer<typeof UpdateOrganizationRequest>;\n","import { z } from \"zod\";\nimport { CapabilityName } from \"./capability.ts\";\nimport { Metadata, Timestamp, Version } from \"./common.ts\";\nimport { AgentId, NodeId, OrganizationId, TaskId } from \"./ids.ts\";\n\n/**\n * A capability request between agents (ADR-0020, deck slides 06/07). Created by the requester's node; every later\n * change is written by the assignee's node only.\n */\nexport const TaskStatus = z.enum([\"requested\", \"accepted\", \"completed\", \"failed\"]);\nexport type TaskStatus = z.infer<typeof TaskStatus>;\n\nexport const TERMINAL_TASK_STATUSES: readonly TaskStatus[] = [\"completed\", \"failed\"];\n\n/** An agent taking part in a task, with where it lives. */\nexport const TaskParty = z.object({ agentId: AgentId, organizationId: OrganizationId, nodeId: NodeId });\nexport type TaskParty = z.infer<typeof TaskParty>;\n\n/** The organization a task was routed to, through its Mesh Agent. */\nexport const TaskAssignee = z.object({ organizationId: OrganizationId, nodeId: NodeId, meshAgentId: AgentId });\nexport type TaskAssignee = z.infer<typeof TaskAssignee>;\n\n/** One stage of the observe → reason → act → verify pipeline (deck slide 05). */\nexport const TaskStep = z.object({\n name: z.enum([\"observe\", \"reason\", \"act\", \"verify\"]),\n at: Timestamp,\n summary: z.string().max(1000),\n});\nexport type TaskStep = z.infer<typeof TaskStep>;\n\nexport const TaskError = z.object({ code: z.string().max(64), message: z.string().max(1000) });\nexport type TaskError = z.infer<typeof TaskError>;\n\nexport const Task = z\n .object({\n id: TaskId,\n capability: CapabilityName,\n input: Metadata,\n status: TaskStatus,\n requester: TaskParty,\n /** The requester organization's Mesh Agent, the first hop of the route. */\n requesterMeshAgentId: AgentId,\n assignee: TaskAssignee,\n /** The agent that does the work, chosen by the assignee's Mesh Agent on acceptance. */\n provider: TaskParty.nullable(),\n output: Metadata.nullable(),\n error: TaskError.nullable(),\n steps: z.array(TaskStep).max(32),\n /** Model that produced the result; null when a rule-based model did. */\n model: z.string().max(100).nullable(),\n version: Version,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n })\n .meta({\n id: \"Task\",\n description: \"A capability request routed through Mesh Agents, with its result and provenance (ADR-0020).\",\n });\nexport type Task = z.infer<typeof Task>;\n\nexport const RequestTaskRequest = z\n .object({\n capability: CapabilityName,\n input: Metadata.default({}),\n })\n .meta({ id: \"RequestTaskRequest\" });\nexport type RequestTaskRequest = z.infer<typeof RequestTaskRequest>;\nexport type RequestTaskRequestInput = z.input<typeof RequestTaskRequest>;\n\n/** An agent offering a capability, as listed by the capability directory. */\nexport const CapabilityProvider = z\n .object({\n agentId: AgentId,\n agentName: z.string(),\n organizationId: OrganizationId,\n organizationName: z.string(),\n nodeId: NodeId,\n /** Running, on a node that is not offline — i.e. a task could be routed to it now. */\n available: z.boolean(),\n /** Whether both organizations' policies let the agent named by `forAgent` ask this provider (ADR-0023); null without it. */\n permitted: z.boolean().nullable(),\n })\n .meta({ id: \"CapabilityProvider\" });\nexport type CapabilityProvider = z.infer<typeof CapabilityProvider>;\n","import { z } from \"zod\";\nimport { Agent, AgentStatus } from \"./agent.ts\";\nimport { RoleBinding } from \"./auth.ts\";\nimport { Timestamp, Version } from \"./common.ts\";\nimport {\n AgentId,\n CommandId,\n EventId,\n LinkId,\n NodeId,\n OrganizationId,\n PrincipalId,\n RevocationId,\n RoleBindingId,\n TaskId,\n} from \"./ids.ts\";\nimport { Link } from \"./link.ts\";\nimport { Node, NodeStatus } from \"./node.ts\";\nimport { Organization } from \"./organization.ts\";\nimport { Task } from \"./task.ts\";\nimport { KeyRevocation } from \"./trust.ts\";\n\n/**\n * Event catalog (ROADMAP §2.4). Every state change in the mesh is one of these events.\n *\n * A *domain event* is what the domain produces: `type`, `subject` and `payload`.\n * A *mesh event* wraps it in the envelope (id, seq, origin, causation, timestamp, signature)\n * when it is committed, replicated and pushed to clients.\n */\n\nconst subject = <K extends string, S extends z.ZodType<string>>(kind: K, id: S) =>\n z.object({ kind: z.literal(kind), id, version: Version });\n\nconst NodeSubject = subject(\"node\", NodeId);\nconst OrganizationSubject = subject(\"organization\", OrganizationId);\nconst AgentSubject = subject(\"agent\", AgentId);\nconst LinkSubject = subject(\"link\", LinkId);\nconst RoleBindingSubject = subject(\"roleBinding\", RoleBindingId);\nconst TaskSubject = subject(\"task\", TaskId);\nconst RevocationSubject = subject(\"revocation\", RevocationId);\n\nconst event = <T extends string, S extends z.ZodType, P extends z.ZodType>(type: T, subjectSchema: S, payload: P) =>\n z.object({ type: z.literal(type), subject: subjectSchema, payload });\n\nconst AgentRegistration = z.object({\n meshAgentId: AgentId,\n agentId: AgentId,\n organizationId: OrganizationId,\n nodeId: NodeId,\n});\n\nexport const NodeCreated = event(\"node.created\", NodeSubject, z.object({ node: Node }));\nexport const NodeUpdated = event(\"node.updated\", NodeSubject, z.object({ node: Node }));\nexport const NodeRemoved = event(\"node.removed\", NodeSubject, z.object({ nodeId: NodeId }));\n/** Derived locally by each node's presence detector; does not bump the owned entity version. */\nexport const NodeStatusChanged = event(\n \"node.status_changed\",\n NodeSubject,\n z.object({ nodeId: NodeId, status: NodeStatus, previousStatus: NodeStatus, lastSeenAt: Timestamp.nullable() }),\n);\n/** Mesh-only liveness signal; aggregated into `lastSeenAt`, never forwarded to UI clients. */\nexport const NodeHeartbeat = event(\"node.heartbeat\", NodeSubject, z.object({ nodeId: NodeId, at: Timestamp }));\n\nexport const OrganizationCreated = event(\n \"organization.created\",\n OrganizationSubject,\n z.object({ organization: Organization }),\n);\nexport const OrganizationUpdated = event(\n \"organization.updated\",\n OrganizationSubject,\n z.object({ organization: Organization }),\n);\nexport const OrganizationRemoved = event(\n \"organization.removed\",\n OrganizationSubject,\n z.object({ organizationId: OrganizationId, nodeId: NodeId }),\n);\n\nexport const AgentCreated = event(\"agent.created\", AgentSubject, z.object({ agent: Agent }));\nexport const AgentUpdated = event(\"agent.updated\", AgentSubject, z.object({ agent: Agent }));\nexport const AgentStatusChanged = event(\n \"agent.status_changed\",\n AgentSubject,\n z.object({ agent: Agent, previousStatus: AgentStatus }),\n);\nexport const AgentRemoved = event(\n \"agent.removed\",\n AgentSubject,\n z.object({ agentId: AgentId, organizationId: OrganizationId, nodeId: NodeId }),\n);\n\nexport const MeshAgentAgentRegistered = event(\"mesh_agent.agent_registered\", AgentSubject, AgentRegistration);\nexport const MeshAgentAgentDeregistered = event(\"mesh_agent.agent_deregistered\", AgentSubject, AgentRegistration);\n\nexport const LinkRequested = event(\"link.requested\", LinkSubject, z.object({ link: Link }));\nexport const LinkUp = event(\"link.up\", LinkSubject, z.object({ link: Link }));\nexport const LinkUpdated = event(\"link.updated\", LinkSubject, z.object({ link: Link }));\nexport const LinkDown = event(\"link.down\", LinkSubject, z.object({ link: Link }));\nexport const LinkRemoved = event(\"link.removed\", LinkSubject, z.object({ linkId: LinkId }));\n\nexport const RoleGranted = event(\"role.granted\", RoleBindingSubject, z.object({ binding: RoleBinding }));\nexport const RoleRevoked = event(\"role.revoked\", RoleBindingSubject, z.object({ binding: RoleBinding }));\n\n/** Committed by the requester's node; the task's later events come from the assignee's node only (ADR-0020). */\nexport const TaskRequested = event(\"task.requested\", TaskSubject, z.object({ task: Task }));\nexport const TaskAccepted = event(\"task.accepted\", TaskSubject, z.object({ task: Task }));\nexport const TaskCompleted = event(\"task.completed\", TaskSubject, z.object({ task: Task }));\nexport const TaskFailed = event(\"task.failed\", TaskSubject, z.object({ task: Task }));\n\n/**\n * A mesh-root revocation, published through any node so it gossips (ADR-0025). Its authority is the root's signature\n * inside, not the publishing node: any node may publish one, and every node checks it against its own root key.\n */\nexport const MeshKeyRevoked = event(\"mesh.key_revoked\", RevocationSubject, z.object({ revocation: KeyRevocation }));\n\nexport const DomainEvent = z\n .discriminatedUnion(\"type\", [\n NodeCreated,\n NodeUpdated,\n NodeRemoved,\n NodeStatusChanged,\n NodeHeartbeat,\n OrganizationCreated,\n OrganizationUpdated,\n OrganizationRemoved,\n AgentCreated,\n AgentUpdated,\n AgentStatusChanged,\n AgentRemoved,\n MeshAgentAgentRegistered,\n MeshAgentAgentDeregistered,\n LinkRequested,\n LinkUp,\n LinkUpdated,\n LinkDown,\n LinkRemoved,\n RoleGranted,\n RoleRevoked,\n TaskRequested,\n TaskAccepted,\n TaskCompleted,\n TaskFailed,\n MeshKeyRevoked,\n ])\n .meta({ id: \"DomainEvent\" });\nexport type DomainEvent = z.infer<typeof DomainEvent>;\nexport type DomainEventType = DomainEvent[\"type\"];\nexport type DomainEventOf<T extends DomainEventType> = Extract<DomainEvent, { type: T }>;\n\nexport const DOMAIN_EVENT_TYPES = DomainEvent.options.map((o) => o.shape.type.value) as readonly DomainEventType[];\n\n/** Envelope schema version (ADR-0009). */\nexport const ENVELOPE_VERSION = 1 as const;\n\nexport const EnvelopeMeta = z.object({\n v: z.literal(ENVELOPE_VERSION),\n id: EventId,\n /** Monotonic per origin node; `(origin.nodeId, seq)` is the replication cursor. */\n seq: z.int().min(1),\n origin: z.object({ nodeId: NodeId, principalId: PrincipalId.nullable() }),\n /** Groups the events produced by one command, e.g. a cascade (ADR-0005). */\n causationId: CommandId,\n timestamp: Timestamp,\n /** Ed25519 signature over the canonical encoding; attached by the protocol layer (Phase 5). */\n sig: z.string().nullable(),\n});\nexport type EnvelopeMeta = z.infer<typeof EnvelopeMeta>;\n\nexport const MeshEvent = z.intersection(EnvelopeMeta, DomainEvent).meta({ id: \"MeshEvent\" });\nexport type MeshEvent = z.infer<typeof MeshEvent>;\n","import { z } from \"zod\";\nimport { NodeId } from \"./ids.ts\";\n\nexport const HealthResponse = z\n .object({\n status: z.enum([\"ok\", \"degraded\"]),\n service: z.literal(\"node-server\"),\n /** The node this server runs as — clients use it to know where their writes are accepted (ADR-0004). */\n nodeId: NodeId,\n version: z.string(),\n uptimeSeconds: z.number().nonnegative(),\n timestamp: z.iso.datetime(),\n })\n .meta({ id: \"HealthResponse\", description: \"Liveness and version information for a Node Server.\" });\n\nexport type HealthResponse = z.infer<typeof HealthResponse>;\n","import { z } from \"zod\";\nimport { Principal, PrincipalKind, RoleBinding, TokenScope } from \"./auth.ts\";\nimport { DisplayName, Timestamp } from \"./common.ts\";\nimport { ApiKeyId, PrincipalId, TokenId } from \"./ids.ts\";\n\n/** Who the caller is and which ownership roles they hold — drives the Monitor's controls (ADR-0010). */\nexport const Me = z\n .object({\n principal: Principal,\n roles: z.array(RoleBinding),\n /** What the credential used for this request may do (ADR-0022). */\n scopes: z.array(TokenScope),\n })\n .meta({ id: \"Me\", description: \"The authenticated principal and its role bindings.\" });\nexport type Me = z.infer<typeof Me>;\n\nexport const CreatePrincipalRequest = z\n .object({ name: DisplayName, kind: PrincipalKind.default(\"user\") })\n .meta({ id: \"CreatePrincipalRequest\" });\nexport type CreatePrincipalRequest = z.infer<typeof CreatePrincipalRequest>;\n\n/** Shown exactly once. Users get a bearer token; services get a long-lived API key. */\nexport const Credential = z\n .discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"token\"), token: z.string(), expiresAt: Timestamp }),\n z.object({ type: z.literal(\"apiKey\"), apiKey: z.string() }),\n ])\n .meta({ id: \"Credential\" });\nexport type Credential = z.infer<typeof Credential>;\n\nexport const CreatePrincipalResponse = z\n .object({ principal: Principal, credential: Credential })\n .meta({ id: \"CreatePrincipalResponse\" });\nexport type CreatePrincipalResponse = z.infer<typeof CreatePrincipalResponse>;\n\n/** Longest lifetime a bearer token may be issued for. */\nexport const MAX_TOKEN_TTL_SECONDS = 365 * 24 * 60 * 60;\n\nexport const IssueTokenRequest = z\n .object({\n /** Defaults to all scopes the caller's own credential has. */\n scopes: z.array(TokenScope).min(1).optional(),\n ttlSeconds: z\n .int()\n .min(60)\n .max(MAX_TOKEN_TTL_SECONDS)\n .default(30 * 24 * 60 * 60),\n label: z.string().trim().max(120).optional(),\n })\n .meta({ id: \"IssueTokenRequest\" });\nexport type IssueTokenRequest = z.infer<typeof IssueTokenRequest>;\nexport type IssueTokenRequestInput = z.input<typeof IssueTokenRequest>;\n\n/** A new bearer token, shown exactly once. */\nexport const IssuedToken = z\n .object({ id: TokenId, token: z.string(), scopes: z.array(TokenScope), expiresAt: Timestamp })\n .meta({ id: \"IssuedToken\" });\nexport type IssuedToken = z.infer<typeof IssuedToken>;\n\n/** A credential's metadata — never its secret. */\nexport const CredentialInfo = z\n .object({\n id: z.union([TokenId, ApiKeyId]),\n type: z.enum([\"token\", \"apiKey\"]),\n principalId: PrincipalId,\n scopes: z.array(TokenScope),\n label: z.string().nullable(),\n createdAt: Timestamp,\n expiresAt: Timestamp.nullable(),\n revokedAt: Timestamp.nullable(),\n lastUsedAt: Timestamp.nullable(),\n })\n .meta({ id: \"CredentialInfo\" });\nexport type CredentialInfo = z.infer<typeof CredentialInfo>;\n","import { z } from \"zod\";\nimport { Agent } from \"./agent.ts\";\nimport { Capability } from \"./capability.ts\";\nimport { NodeId } from \"./ids.ts\";\nimport { Link } from \"./link.ts\";\nimport { Node } from \"./node.ts\";\nimport { Organization } from \"./organization.ts\";\nimport { Task } from \"./task.ts\";\n\n/** Per-origin-node sequence reached by a replica: `{ [nodeId]: seq }`. */\nexport const MeshCursor = z.record(NodeId, z.int().min(0)).meta({ id: \"MeshCursor\" });\nexport type MeshCursor = z.infer<typeof MeshCursor>;\n\nexport const MeshSnapshot = z\n .object({\n nodes: z.array(Node),\n organizations: z.array(Organization),\n agents: z.array(Agent),\n links: z.array(Link),\n /** The most recent tasks, newest first (ADR-0020). */\n tasks: z.array(Task),\n cursor: MeshCursor,\n })\n .meta({ id: \"MeshSnapshot\", description: \"Full mesh state plus the cursor to resume the event stream from.\" });\nexport type MeshSnapshot = z.infer<typeof MeshSnapshot>;\n\nexport const MeshStats = z\n .object({\n nodes: z.int().min(0),\n online: z.int().min(0),\n degraded: z.int().min(0),\n offline: z.int().min(0),\n organizations: z.int().min(0),\n agents: z.int().min(0),\n })\n .meta({ id: \"MeshStats\", description: \"Counters shown in the Monitor's mesh summary.\" });\nexport type MeshStats = z.infer<typeof MeshStats>;\n\nexport const NodeDetail = z\n .object({\n node: Node,\n organizations: z.array(Organization),\n agents: z.array(Agent),\n /** Distinct capabilities offered by the node's agents. */\n capabilities: z.array(Capability),\n })\n .meta({ id: \"NodeDetail\", description: \"Everything the Monitor's node detail panel shows (ui.md).\" });\nexport type NodeDetail = z.infer<typeof NodeDetail>;\n\n/** Encodes a cursor for URLs (`?cursor=`): base64url of its JSON. */\nexport function encodeCursor(cursor: MeshCursor): string {\n const bytes = new TextEncoder().encode(JSON.stringify(cursor));\n return btoa(String.fromCharCode(...bytes))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\n/** Decodes a cursor produced by `encodeCursor`. Throws on malformed input. */\nexport function decodeCursor(encoded: string): MeshCursor {\n const base64 = encoded.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const bytes = Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n return MeshCursor.parse(JSON.parse(new TextDecoder().decode(bytes)));\n}\n","import type { Agent } from \"./agent.ts\";\nimport type { RoleBinding } from \"./auth.ts\";\nimport type { DomainEvent } from \"./events.ts\";\nimport type { Link } from \"./link.ts\";\nimport type { Node, NodeStatus } from \"./node.ts\";\nimport type { Organization } from \"./organization.ts\";\nimport type { Task } from \"./task.ts\";\nimport type { KeyRevocation } from \"./trust.ts\";\n\n/**\n * Translates an event into the state change it implies. The node server's persistence applies these operations\n * atomically with the event append, replication (Phase 5) applies them for remote events, and clients (the SDK's\n * mesh mirror, the Monitor) apply them to their local copy — so nobody can disagree about what an event means.\n */\nexport type ProjectionOp =\n | { readonly op: \"upsert\"; readonly kind: \"node\"; readonly entity: Node }\n | { readonly op: \"upsert\"; readonly kind: \"organization\"; readonly entity: Organization }\n | { readonly op: \"upsert\"; readonly kind: \"agent\"; readonly entity: Agent }\n | { readonly op: \"upsert\"; readonly kind: \"link\"; readonly entity: Link }\n | { readonly op: \"upsert\"; readonly kind: \"roleBinding\"; readonly entity: RoleBinding }\n /** Tasks have two writers in turn (ADR-0020), so replicas apply only newer versions. */\n | { readonly op: \"upsert\"; readonly kind: \"task\"; readonly entity: Task }\n /** Stored as published; each node decides whether it is genuine against its own mesh root (ADR-0025). */\n | { readonly op: \"upsert\"; readonly kind: \"revocation\"; readonly entity: KeyRevocation & { readonly id: string } }\n | {\n readonly op: \"delete\";\n readonly kind: \"node\" | \"organization\" | \"agent\" | \"link\" | \"roleBinding\";\n readonly id: string;\n }\n | {\n readonly op: \"presence\";\n readonly nodeId: string;\n readonly status: NodeStatus;\n readonly lastSeenAt: string | null;\n }\n | { readonly op: \"none\" };\n\nexport function project(event: DomainEvent): ProjectionOp {\n switch (event.type) {\n case \"node.created\":\n case \"node.updated\":\n return { op: \"upsert\", kind: \"node\", entity: event.payload.node };\n case \"node.removed\":\n return { op: \"delete\", kind: \"node\", id: event.payload.nodeId };\n case \"node.status_changed\":\n return {\n op: \"presence\",\n nodeId: event.payload.nodeId,\n status: event.payload.status,\n lastSeenAt: event.payload.lastSeenAt,\n };\n case \"organization.created\":\n case \"organization.updated\":\n return { op: \"upsert\", kind: \"organization\", entity: event.payload.organization };\n case \"organization.removed\":\n return { op: \"delete\", kind: \"organization\", id: event.payload.organizationId };\n case \"agent.created\":\n case \"agent.updated\":\n case \"agent.status_changed\":\n return { op: \"upsert\", kind: \"agent\", entity: event.payload.agent };\n case \"agent.removed\":\n return { op: \"delete\", kind: \"agent\", id: event.payload.agentId };\n case \"link.requested\":\n case \"link.up\":\n case \"link.updated\":\n case \"link.down\":\n return { op: \"upsert\", kind: \"link\", entity: event.payload.link };\n case \"link.removed\":\n return { op: \"delete\", kind: \"link\", id: event.payload.linkId };\n case \"role.granted\":\n return { op: \"upsert\", kind: \"roleBinding\", entity: event.payload.binding };\n case \"role.revoked\":\n return { op: \"delete\", kind: \"roleBinding\", id: event.payload.binding.id };\n case \"task.requested\":\n case \"task.accepted\":\n case \"task.completed\":\n case \"task.failed\":\n return { op: \"upsert\", kind: \"task\", entity: event.payload.task };\n case \"mesh.key_revoked\":\n return { op: \"upsert\", kind: \"revocation\", entity: { ...event.payload.revocation, id: event.subject.id } };\n // Registration is implied by organization membership; heartbeats are handled by the presence detector.\n case \"mesh_agent.agent_registered\":\n case \"mesh_agent.agent_deregistered\":\n case \"node.heartbeat\":\n return { op: \"none\" };\n }\n}\n","import type { DomainEvent } from \"./events.ts\";\n\n/**\n * Who may commit an event (ADR-0021): the single writer of the entity it creates or changes (ADR-0004), read from the\n * event itself so every replica — server or client — decides the same way without extra state.\n *\n * - Creations and updates come only from the owning node: a node for itself, an organization's or agent's node, the\n * lower node id for links (ADR-0017), the scope's node for role grants, and for tasks the requester's node\n * (`task.requested`) then the assignee's node (ADR-0020).\n * - Removals may come from any node: forgetting an offline node (ADR-0017) removes its organizations, agents, links\n * and bindings under the forgetting node's signature. Revocable trust for that comes with mesh-root certificates.\n * - Presence observations (`node.status_changed`) are each node's own and never applied by replicas (ADR-0018).\n */\nexport type Writers = { readonly kind: \"owner\"; readonly nodeIds: readonly string[] } | { readonly kind: \"any\" };\n\nconst owner = (...nodeIds: string[]): Writers => ({ kind: \"owner\", nodeIds });\nconst ANY: Writers = { kind: \"any\" };\n\nexport function writersOf(event: DomainEvent): Writers {\n switch (event.type) {\n case \"node.created\":\n case \"node.updated\":\n return owner(event.payload.node.id);\n case \"node.heartbeat\":\n return owner(event.payload.nodeId);\n case \"organization.created\":\n case \"organization.updated\":\n return owner(event.payload.organization.nodeId);\n case \"agent.created\":\n case \"agent.updated\":\n case \"agent.status_changed\":\n return owner(event.payload.agent.nodeId);\n case \"mesh_agent.agent_registered\":\n return owner(event.payload.nodeId);\n case \"link.up\":\n case \"link.updated\":\n case \"link.down\":\n return owner(event.payload.link.aNodeId);\n case \"link.requested\":\n return owner(event.payload.link.aNodeId, event.payload.link.bNodeId);\n case \"role.granted\":\n return owner(event.payload.binding.scope.nodeId);\n case \"task.requested\":\n return owner(event.payload.task.requester.nodeId);\n case \"task.accepted\":\n case \"task.completed\":\n case \"task.failed\":\n return owner(event.payload.task.assignee.nodeId);\n case \"node.removed\":\n case \"node.status_changed\":\n case \"organization.removed\":\n case \"agent.removed\":\n case \"mesh_agent.agent_deregistered\":\n case \"link.removed\":\n case \"role.revoked\":\n case \"mesh.key_revoked\":\n return ANY;\n }\n}\n\n/** True when `originNodeId` may have committed `event`. Events that fail are kept in the log but never applied. */\nexport function isAuthorizedWriter(event: DomainEvent, originNodeId: string): boolean {\n const writers = writersOf(event);\n return writers.kind === \"any\" || writers.nodeIds.includes(originNodeId);\n}\n","import type { Agent } from \"./agent.ts\";\nimport type { MeshEvent } from \"./events.ts\";\nimport type { Link } from \"./link.ts\";\nimport type { MeshCursor, MeshSnapshot } from \"./mesh.ts\";\nimport type { Node } from \"./node.ts\";\nimport type { Organization } from \"./organization.ts\";\nimport { project } from \"./projection.ts\";\nimport type { Task } from \"./task.ts\";\nimport { isAuthorizedWriter } from \"./writers.ts\";\n\n/** A client-side mirror of the mesh, kept current by applying events to a snapshot. */\nexport interface MeshState {\n readonly nodes: Readonly<Record<string, Node>>;\n readonly organizations: Readonly<Record<string, Organization>>;\n readonly agents: Readonly<Record<string, Agent>>;\n readonly links: Readonly<Record<string, Link>>;\n readonly tasks: Readonly<Record<string, Task>>;\n readonly cursor: MeshCursor;\n}\n\nconst byId = <T extends { id: string }>(items: readonly T[]): Record<string, T> =>\n Object.fromEntries(items.map((item) => [item.id, item]));\n\nexport function meshStateFromSnapshot(snapshot: MeshSnapshot): MeshState {\n return {\n nodes: byId(snapshot.nodes),\n organizations: byId(snapshot.organizations),\n agents: byId(snapshot.agents),\n links: byId(snapshot.links),\n // Nodes from before Phase 6 send no tasks; tolerate them during rolling upgrades.\n tasks: byId(snapshot.tasks ?? []),\n cursor: { ...snapshot.cursor },\n };\n}\n\n/**\n * Applies one event immutably. Events at or below the cursor for their origin are ignored, so replays\n * and duplicates are harmless. Role bindings are not mirrored (they are not part of the snapshot).\n */\nexport function applyMeshEvent(state: MeshState, event: MeshEvent): MeshState {\n const seen = state.cursor[event.origin.nodeId] ?? 0;\n if (event.seq <= seen) return state;\n const cursor = { ...state.cursor, [event.origin.nodeId]: event.seq };\n // An event its origin was not allowed to write is part of the log, but never changes the view (ADR-0021).\n if (!isAuthorizedWriter(event, event.origin.nodeId)) return { ...state, cursor };\n const op = project(event);\n\n switch (op.op) {\n case \"upsert\":\n switch (op.kind) {\n case \"node\":\n return { ...state, cursor, nodes: { ...state.nodes, [op.entity.id]: op.entity } };\n case \"organization\":\n return { ...state, cursor, organizations: { ...state.organizations, [op.entity.id]: op.entity } };\n case \"agent\":\n return { ...state, cursor, agents: { ...state.agents, [op.entity.id]: op.entity } };\n case \"link\":\n return { ...state, cursor, links: { ...state.links, [op.entity.id]: op.entity } };\n case \"roleBinding\":\n case \"revocation\":\n return { ...state, cursor };\n case \"task\": {\n // Two writers in turn (ADR-0020): an older version arriving late must not win.\n const current = state.tasks[op.entity.id];\n if (current && current.version >= op.entity.version) return { ...state, cursor };\n return { ...state, cursor, tasks: { ...state.tasks, [op.entity.id]: op.entity } };\n }\n }\n break;\n case \"delete\": {\n if (op.kind === \"roleBinding\") return { ...state, cursor };\n const table = { node: \"nodes\", organization: \"organizations\", agent: \"agents\", link: \"links\" } as const;\n const key = table[op.kind];\n const { [op.id]: _removed, ...rest } = state[key];\n return { ...state, cursor, [key]: rest };\n }\n case \"presence\": {\n const node = state.nodes[op.nodeId];\n if (!node) return { ...state, cursor };\n return {\n ...state,\n cursor,\n nodes: { ...state.nodes, [node.id]: { ...node, status: op.status, lastSeenAt: op.lastSeenAt } },\n };\n }\n case \"none\":\n return { ...state, cursor };\n }\n}\n","import { z } from \"zod\";\n\n/** Cursor pagination query (ROADMAP §2.6). `cursor` is opaque to clients. */\nexport const PageQuery = z.object({\n limit: z.coerce.number().int().min(1).max(200).default(50),\n cursor: z.string().min(1).optional(),\n});\nexport type PageQuery = z.infer<typeof PageQuery>;\n\n/** A page of results; `nextCursor` is null on the last page. */\nexport const Page = <T extends z.ZodType>(item: T, id: string) =>\n z.object({ items: z.array(item), nextCursor: z.string().nullable() }).meta({ id });\n\nexport interface PageOf<T> {\n readonly items: T[];\n readonly nextCursor: string | null;\n}\n","import { z } from \"zod\";\n\n/** RFC 9457 problem details — every API error uses this shape. */\nexport const ProblemDetails = z\n .object({\n type: z.string().meta({ example: \"/problems/forbidden\" }),\n title: z.string(),\n status: z.int().min(400).max(599),\n detail: z.string().optional(),\n instance: z.string().optional(),\n code: z.string().meta({ description: \"Stable machine-readable error code\" }),\n errors: z.array(z.object({ path: z.string(), message: z.string() })).optional(),\n })\n .meta({ id: \"ProblemDetails\" });\nexport type ProblemDetails = z.infer<typeof ProblemDetails>;\n","import { z } from \"zod\";\nimport { MeshEvent } from \"./events.ts\";\nimport { PrincipalId } from \"./ids.ts\";\nimport { MeshCursor } from \"./mesh.ts\";\n\n/**\n * Realtime protocol over `WS /v1/realtime` (ADR-0014). JSON text frames.\n *\n * client → hello { token, cursor?, topics? } first frame, within 5 s\n * server → event { event }* replay of everything after `cursor`\n * server → welcome { principalId, cursor } replay done; live events follow\n * server → event { event }* live\n * server → resync.required { reason } the client must fetch a fresh snapshot and reconnect\n */\n\n/** Subject kinds a client can subscribe to. Default: everything. */\nexport const Topic = z.enum([\"node\", \"organization\", \"agent\", \"link\", \"roleBinding\", \"task\", \"revocation\"]);\nexport type Topic = z.infer<typeof Topic>;\n\nexport const ClientMessage = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"hello\"),\n /** Bearer token or API key — sent in the first frame because browsers cannot set WebSocket headers. */\n token: z.string().min(1),\n /** Resume point, usually the cursor of the snapshot the client just loaded. */\n cursor: MeshCursor.optional(),\n topics: z.array(Topic).optional(),\n }),\n z.object({ type: z.literal(\"subscribe\"), topics: z.array(Topic) }),\n]);\nexport type ClientMessage = z.infer<typeof ClientMessage>;\n\nexport const ServerMessage = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"welcome\"), principalId: PrincipalId, cursor: MeshCursor }),\n z.object({ type: z.literal(\"event\"), event: MeshEvent }),\n z.object({ type: z.literal(\"resync.required\"), reason: z.string() }),\n z.object({ type: z.literal(\"error\"), code: z.string(), message: z.string() }),\n]);\nexport type ServerMessage = z.infer<typeof ServerMessage>;\n\n/** WebSocket close codes used by the node server. */\nexport const RealtimeCloseCode = {\n normal: 1000,\n goingAway: 1001,\n badMessage: 4400,\n unauthenticated: 4401,\n /** Authenticated, but without a role on this node (ADR-0022). */\n forbidden: 4403,\n helloTimeout: 4408,\n resyncRequired: 4409,\n} as const;\n","import type { ProblemDetails } from \"@casimesh/contracts\";\n\n/** An API error. `problem` is the server's RFC 9457 body when it sent one. */\nexport class MeshApiError extends Error {\n constructor(\n readonly status: number,\n message: string,\n readonly problem?: ProblemDetails & Record<string, unknown>,\n ) {\n super(message);\n this.name = \"MeshApiError\";\n }\n\n /** Stable machine-readable code, e.g. `forbidden`, `version_conflict`, `not_owner`. */\n get code(): string {\n return this.problem?.code ?? `http_${this.status}`;\n }\n}\n","import type { ProblemDetails } from \"@casimesh/contracts\";\nimport { MeshApiError } from \"./errors.ts\";\n\n/** A static credential, or a function for callers that refresh tokens. */\nexport type TokenSource = string | (() => string | Promise<string>);\n\nexport interface HttpOptions {\n readonly baseUrl: string;\n readonly token?: TokenSource | undefined;\n readonly timeoutMs?: number | undefined;\n readonly fetch?: typeof fetch | undefined;\n}\n\nexport interface RequestOptions {\n readonly query?: Record<string, string | number | undefined> | undefined;\n readonly body?: unknown;\n /** Expected entity version for conditional writes (sent as `If-Match`). */\n readonly ifMatch?: number | undefined;\n /** Makes a POST safe to retry (sent as `Idempotency-Key`). */\n readonly idempotencyKey?: string | undefined;\n readonly signal?: AbortSignal | undefined;\n}\n\nexport const DEFAULT_TIMEOUT_MS = 10_000;\n\nexport async function resolveToken(token: TokenSource | undefined): Promise<string | undefined> {\n return typeof token === \"function\" ? token() : token;\n}\n\n/** Minimal JSON-over-HTTP core shared by every resource. */\nexport class HttpClient {\n readonly baseUrl: string;\n private readonly doFetch: typeof fetch;\n\n constructor(private readonly options: HttpOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/+$/, \"\");\n this.doFetch = options.fetch ?? globalThis.fetch.bind(globalThis);\n }\n\n token(): Promise<string | undefined> {\n return resolveToken(this.options.token);\n }\n\n async request<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const headers: Record<string, string> = { accept: \"application/json\" };\n const token = await this.token();\n if (token) headers[\"authorization\"] = `Bearer ${token}`;\n if (options.body !== undefined) headers[\"content-type\"] = \"application/json\";\n if (options.ifMatch !== undefined) headers[\"if-match\"] = `\"${options.ifMatch}\"`;\n if (options.idempotencyKey !== undefined) headers[\"idempotency-key\"] = options.idempotencyKey;\n\n const timeout = AbortSignal.timeout(this.options.timeoutMs ?? DEFAULT_TIMEOUT_MS);\n const response = await this.doFetch(`${this.baseUrl}${path}${queryString(options.query)}`, {\n method,\n headers,\n ...(options.body !== undefined && { body: JSON.stringify(options.body) }),\n signal: options.signal ? AbortSignal.any([options.signal, timeout]) : timeout,\n });\n\n if (!response.ok) throw await toError(method, path, response);\n if (response.status === 204) return undefined as T;\n return (await response.json()) as T;\n }\n}\n\nfunction queryString(query: RequestOptions[\"query\"]): string {\n if (!query) return \"\";\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) if (value !== undefined) params.set(key, String(value));\n const text = params.toString();\n return text ? `?${text}` : \"\";\n}\n\nasync function toError(method: string, path: string, response: Response): Promise<MeshApiError> {\n const text = await response.text();\n let problem: (ProblemDetails & Record<string, unknown>) | undefined;\n try {\n const parsed = JSON.parse(text) as ProblemDetails & Record<string, unknown>;\n if (parsed && typeof parsed.code === \"string\") problem = parsed;\n } catch {\n // not a problem+json body\n }\n const message = problem?.detail ?? problem?.title ?? `${method} ${path} failed with ${response.status}`;\n return new MeshApiError(response.status, message, problem);\n}\n","import {\n applyMeshEvent,\n type DomainEventType,\n type MeshCursor,\n type MeshEvent,\n type MeshSnapshot,\n type MeshState,\n meshStateFromSnapshot,\n RealtimeCloseCode,\n type ServerMessage,\n type Topic,\n} from \"@casimesh/contracts\";\n\n/** The subset of the WebSocket API the client needs — satisfied by browsers, Bun and Node 22+. */\nexport interface WebSocketLike {\n onopen: ((event: unknown) => void) | null;\n onmessage: ((event: { data: unknown }) => void) | null;\n onclose: ((event: { code: number; reason: string }) => void) | null;\n onerror: ((event: unknown) => void) | null;\n send(data: string): void;\n close(code?: number, reason?: string): void;\n}\n\nexport type WebSocketFactory = new (url: string) => WebSocketLike;\n\nexport type RealtimeStatus = \"connecting\" | \"live\" | \"reconnecting\" | \"closed\";\n\nexport interface RealtimeOptions {\n /** Subject kinds to receive. Default: all. */\n readonly topics?: readonly Topic[] | undefined;\n /**\n * Resume from this cursor without loading a snapshot (no `state` mirror until a resync).\n * Default: load a snapshot first and keep `state` current.\n */\n readonly cursor?: MeshCursor | undefined;\n /** Reconnect with full-jitter exponential backoff, or `false` to stay closed after a disconnect. */\n readonly reconnect?: { readonly initialDelayMs?: number; readonly maxDelayMs?: number } | false | undefined;\n /** Randomness source for backoff jitter (tests). */\n readonly random?: (() => number) | undefined;\n}\n\nexport interface RealtimeDeps {\n readonly baseUrl: string;\n readonly token: () => Promise<string | undefined>;\n readonly snapshot: () => Promise<MeshSnapshot>;\n readonly WebSocket?: WebSocketFactory | undefined;\n}\n\ntype EventHandler = (event: MeshEvent) => void;\ntype Listener<T> = (value: T) => void;\n\n/** Thrown to `onError` listeners; `fatal` errors stop reconnection (e.g. invalid credentials). */\nexport class RealtimeError extends Error {\n constructor(\n message: string,\n readonly fatal: boolean,\n ) {\n super(message);\n this.name = \"RealtimeError\";\n }\n}\n\n/**\n * Live connection to a node's realtime stream (ADR-0014). Delivers every event exactly once and in order,\n * across reconnects, by resuming from the last cursor it saw.\n */\nexport class MeshRealtime {\n private currentStatus: RealtimeStatus = \"connecting\";\n private currentState: MeshState | undefined;\n private currentCursor: MeshCursor;\n private needsSnapshot: boolean;\n private socket: WebSocketLike | undefined;\n private attempt = 0;\n private stopped = false;\n private timer: ReturnType<typeof setTimeout> | undefined;\n\n private readonly handlers = new Map<DomainEventType | \"*\", Set<EventHandler>>();\n private readonly statusListeners = new Set<Listener<RealtimeStatus>>();\n private readonly stateListeners = new Set<Listener<MeshState>>();\n private readonly errorListeners = new Set<Listener<RealtimeError>>();\n\n constructor(\n private readonly deps: RealtimeDeps,\n private readonly options: RealtimeOptions = {},\n ) {\n this.currentCursor = { ...(options.cursor ?? {}) };\n this.needsSnapshot = options.cursor === undefined;\n }\n\n get status(): RealtimeStatus {\n return this.currentStatus;\n }\n\n /** The mirrored mesh, when the stream started from (or resynced to) a snapshot. */\n get state(): MeshState | undefined {\n return this.currentState;\n }\n\n /** Last sequence received per origin node. */\n get cursor(): MeshCursor {\n return { ...this.currentCursor };\n }\n\n start(): void {\n void this.connect();\n }\n\n /** Subscribes to one event type, or `\"*\"` for all. Returns an unsubscribe function. */\n on<T extends DomainEventType>(type: T | \"*\", handler: (event: Extract<MeshEvent, { type: T }>) => void): () => void {\n const set = this.handlers.get(type) ?? new Set<EventHandler>();\n set.add(handler as EventHandler);\n this.handlers.set(type, set);\n return () => set.delete(handler as EventHandler);\n }\n\n onStatus(listener: Listener<RealtimeStatus>): () => void {\n return subscribe(this.statusListeners, listener);\n }\n\n onState(listener: Listener<MeshState>): () => void {\n return subscribe(this.stateListeners, listener);\n }\n\n onError(listener: Listener<RealtimeError>): () => void {\n return subscribe(this.errorListeners, listener);\n }\n\n /** Resolves once the stream is caught up and live; rejects if it closes for good first. */\n ready(): Promise<void> {\n if (this.currentStatus === \"live\") return Promise.resolve();\n return new Promise((resolve, reject) => {\n const off = this.onStatus((status) => {\n if (status === \"live\") {\n off();\n resolve();\n } else if (status === \"closed\") {\n off();\n reject(new RealtimeError(\"The realtime connection closed\", true));\n }\n });\n });\n }\n\n close(): void {\n this.stopped = true;\n clearTimeout(this.timer);\n this.socket?.close(RealtimeCloseCode.normal, \"client closed\");\n this.socket = undefined;\n this.setStatus(\"closed\");\n }\n\n private async connect(): Promise<void> {\n if (this.stopped) return;\n this.setStatus(this.attempt === 0 ? \"connecting\" : \"reconnecting\");\n try {\n if (this.needsSnapshot) await this.loadSnapshot();\n const token = await this.deps.token();\n if (!token) throw new RealtimeError(\"A token is required for the realtime stream\", true);\n if (this.stopped) return;\n this.open(token);\n } catch (error) {\n const realtimeError =\n error instanceof RealtimeError\n ? error\n : new RealtimeError(error instanceof Error ? error.message : String(error), false);\n this.emitError(realtimeError);\n if (realtimeError.fatal) this.close();\n else this.scheduleReconnect(false);\n }\n }\n\n private async loadSnapshot(): Promise<void> {\n const snapshot = await this.deps.snapshot();\n this.currentState = meshStateFromSnapshot(snapshot);\n this.currentCursor = { ...snapshot.cursor };\n this.needsSnapshot = false;\n this.emitState();\n }\n\n private open(token: string): void {\n const Socket = this.deps.WebSocket ?? (globalThis.WebSocket as unknown as WebSocketFactory | undefined);\n if (!Socket) throw new RealtimeError(\"No WebSocket implementation available; pass one in the client options\", true);\n\n const socket = new Socket(`${this.deps.baseUrl.replace(/^http/, \"ws\")}/v1/realtime`);\n this.socket = socket;\n socket.onopen = () =>\n socket.send(\n JSON.stringify({\n type: \"hello\",\n token,\n cursor: this.currentCursor,\n ...(this.options.topics && { topics: this.options.topics }),\n }),\n );\n socket.onmessage = (event) => this.onMessage(String(event.data));\n socket.onclose = (event) => {\n if (this.socket === socket) this.onClose(event.code);\n };\n socket.onerror = () => {\n // A close event always follows; reconnection is handled there.\n };\n }\n\n private onMessage(raw: string): void {\n let message: ServerMessage;\n try {\n message = JSON.parse(raw) as ServerMessage;\n } catch {\n this.emitError(new RealtimeError(\"Received a malformed message\", false));\n return;\n }\n switch (message.type) {\n case \"event\":\n this.onEvent(message.event);\n break;\n case \"welcome\":\n this.attempt = 0;\n this.setStatus(\"live\");\n break;\n case \"resync.required\":\n // Too far behind to replay: start over from a fresh snapshot on the next connection.\n this.needsSnapshot = true;\n break;\n case \"error\":\n this.emitError(\n new RealtimeError(\n `${message.code}: ${message.message}`,\n message.code === \"unauthenticated\" || message.code === \"forbidden\",\n ),\n );\n break;\n }\n }\n\n private onEvent(event: MeshEvent): void {\n const seen = this.currentCursor[event.origin.nodeId] ?? 0;\n if (event.seq <= seen) return;\n this.currentCursor = { ...this.currentCursor, [event.origin.nodeId]: event.seq };\n if (this.currentState) this.currentState = applyMeshEvent(this.currentState, event);\n\n for (const handler of [...(this.handlers.get(event.type) ?? []), ...(this.handlers.get(\"*\") ?? [])]) handler(event);\n this.emitState();\n }\n\n private onClose(code: number): void {\n this.socket = undefined;\n if (this.stopped) return;\n if (code === RealtimeCloseCode.unauthenticated || code === RealtimeCloseCode.forbidden) {\n this.emitError(\n new RealtimeError(\n code === RealtimeCloseCode.forbidden\n ? \"The credential has no role on this node\"\n : \"The node rejected the credential\",\n true,\n ),\n );\n this.close();\n return;\n }\n this.scheduleReconnect(code === RealtimeCloseCode.resyncRequired);\n }\n\n private scheduleReconnect(immediately: boolean): void {\n if (this.options.reconnect === false) {\n this.close();\n return;\n }\n const { initialDelayMs = 500, maxDelayMs = 30_000 } = this.options.reconnect ?? {};\n const ceiling = Math.min(maxDelayMs, initialDelayMs * 2 ** this.attempt);\n const delay = immediately ? 0 : Math.round((this.options.random ?? Math.random)() * ceiling);\n this.attempt += 1;\n this.setStatus(\"reconnecting\");\n this.timer = setTimeout(() => void this.connect(), delay);\n }\n\n private setStatus(status: RealtimeStatus): void {\n if (status === this.currentStatus) return;\n this.currentStatus = status;\n for (const listener of this.statusListeners) listener(status);\n }\n\n private emitState(): void {\n const state = this.currentState;\n if (state) for (const listener of this.stateListeners) listener(state);\n }\n\n private emitError(error: RealtimeError): void {\n for (const listener of this.errorListeners) listener(error);\n }\n}\n\nfunction subscribe<T>(set: Set<Listener<T>>, listener: Listener<T>): () => void {\n set.add(listener);\n return () => set.delete(listener);\n}\n","import type {\n Agent,\n AgentStatus,\n AuditEntry,\n AuditKind,\n AuditOutcome,\n AuditVerification,\n Capability,\n CapabilityProvider,\n CreateAgentRequestInput,\n CreateOrganizationRequest,\n CreatePrincipalResponse,\n CredentialInfo,\n GrantRoleRequest,\n HealthResponse,\n IssuedToken,\n IssueTokenRequestInput,\n KeyRevocation,\n Link,\n Me,\n MeshSnapshot,\n MeshStats,\n Node,\n NodeDetail,\n Organization,\n PageOf,\n Principal,\n PrincipalKind,\n RequestTaskRequestInput,\n RoleBinding,\n Task,\n TaskStatus,\n UpdateAgentRequest,\n UpdateNodeRequest,\n UpdateOrganizationRequest,\n} from \"@casimesh/contracts\";\nimport { HttpClient, type TokenSource } from \"./http.ts\";\nimport { MeshRealtime, type RealtimeOptions, type WebSocketFactory } from \"./realtime.ts\";\n\nexport interface MeshClientOptions {\n /** Base URL of any Node Server, e.g. `http://localhost:7700`. */\n readonly baseUrl: string;\n /** Bearer token or API key of the caller (ROADMAP §2.9), or a function returning one. */\n readonly token?: TokenSource | undefined;\n /** Per-request timeout in milliseconds. Defaults to 10 000. */\n readonly timeoutMs?: number | undefined;\n /** Injectable for tests and non-standard runtimes. */\n readonly fetch?: typeof fetch | undefined;\n /** WebSocket constructor for runtimes without a global one. */\n readonly WebSocket?: WebSocketFactory | undefined;\n}\n\nexport interface PageParams {\n readonly limit?: number | undefined;\n readonly cursor?: string | undefined;\n}\n\n/** Options for conditional writes: pass the `version` you read to fail with 412 if it changed. */\nexport interface WriteOptions {\n readonly ifMatch?: number | undefined;\n}\n\nexport interface CreateOptions {\n /** Makes the POST safe to retry; the first response is replayed for 24 hours. */\n readonly idempotencyKey?: string | undefined;\n}\n\nexport interface AgentFilter extends PageParams {\n readonly nodeId?: string | undefined;\n readonly organizationId?: string | undefined;\n readonly status?: AgentStatus | undefined;\n /** Exact capability name or dotted prefix, e.g. `terrain`. */\n readonly capability?: string | undefined;\n}\n\nexport interface TaskFilter extends PageParams {\n readonly status?: TaskStatus | undefined;\n /** Tasks this agent requested or provided. */\n readonly agentId?: string | undefined;\n /** Tasks this organization requested or was assigned. */\n readonly organizationId?: string | undefined;\n readonly capability?: string | undefined;\n}\n\nexport interface WaitOptions {\n /** Give up after this long (default 30 s). */\n readonly timeoutMs?: number | undefined;\n /** Polling interval (default 250 ms). Use the realtime stream to follow many tasks at once. */\n readonly intervalMs?: number | undefined;\n}\n\nconst id = encodeURIComponent;\n\n/** Iterates every item of a paginated endpoint, following `nextCursor`. */\nasync function* all<T>(fetchPage: (cursor: string | undefined) => Promise<PageOf<T>>): AsyncGenerator<T> {\n let cursor: string | undefined;\n do {\n const page = await fetchPage(cursor);\n yield* page.items;\n cursor = page.nextCursor ?? undefined;\n } while (cursor);\n}\n\nfunction ownersOf(http: HttpClient, base: string) {\n return {\n list: async (): Promise<RoleBinding[]> =>\n (await http.request<{ items: RoleBinding[] }>(\"GET\", `${base}/owners`)).items,\n grant: (principalId: string, options: CreateOptions = {}) =>\n http.request<RoleBinding>(\"POST\", `${base}/owners`, { body: { principalId }, ...options }),\n revoke: (principalId: string) => http.request<void>(\"DELETE\", `${base}/owners/${id(principalId)}`),\n };\n}\n\n/** Typed client for a mesh Node Server. Types come from `@casimesh/contracts`, the API's single source of truth. */\nexport function createMeshClient(options: MeshClientOptions) {\n const http = new HttpClient(options);\n\n const client = {\n /** Liveness and version (public). */\n health: () => http.request<HealthResponse>(\"GET\", \"/v1/health\"),\n /** The caller and their ownership roles. */\n me: () => http.request<Me>(\"GET\", \"/v1/me\"),\n snapshot: () => http.request<MeshSnapshot>(\"GET\", \"/v1/mesh/snapshot\"),\n stats: () => http.request<MeshStats>(\"GET\", \"/v1/mesh/stats\"),\n capabilities: async (search?: string): Promise<Capability[]> =>\n (await http.request<{ items: Capability[] }>(\"GET\", \"/v1/capabilities\", { query: { q: search } })).items,\n\n /** Agents offering a capability, available ones first (ADR-0020). */\n revocations: {\n /** Revocations published to the mesh, each with whether it holds under the node's root (ADR-0025). */\n list: async (): Promise<(KeyRevocation & { id: string; effective: boolean })[]> =>\n (\n await http.request<{ items: (KeyRevocation & { id: string; effective: boolean })[] }>(\n \"GET\",\n \"/v1/mesh/revocations\",\n )\n ).items,\n /** Publishes a root-signed revocation through this node (node owners). */\n publish: (revocation: KeyRevocation) =>\n http.request<{ id: string }>(\"POST\", \"/v1/mesh/revocations\", { body: revocation }),\n },\n\n /** With `forAgent`, each provider also says whether policy lets that agent ask it (ADR-0023). */\n capabilityProviders: async (name: string, options: { forAgent?: string } = {}): Promise<CapabilityProvider[]> =>\n (\n await http.request<{ items: CapabilityProvider[] }>(\"GET\", `/v1/capabilities/${id(name)}/providers`, {\n query: { ...options },\n })\n ).items,\n\n principals: {\n /** Node owners only. The credential is returned exactly once. */\n create: (input: { name: string; kind?: PrincipalKind }, options: CreateOptions = {}) =>\n http.request<CreatePrincipalResponse>(\"POST\", \"/v1/principals\", { body: input, ...options }),\n /** This node's principals (node owners only). */\n list: async (): Promise<Principal[]> =>\n (await http.request<{ items: Principal[] }>(\"GET\", \"/v1/principals\")).items,\n /** Deletes a principal and its credentials; revoke its roles first (node owners only). */\n remove: (principalId: string) => http.request<void>(\"DELETE\", `/v1/principals/${id(principalId)}`),\n /**\n * Issues a bearer token with scopes and an expiry (ADR-0022): for yourself, never with more scopes than the\n * credential you use, or — node owners — for anyone. The token is returned exactly once.\n */\n issueToken: (principalId: string, input: IssueTokenRequestInput = {}, options: CreateOptions = {}) =>\n http.request<IssuedToken>(\"POST\", `/v1/principals/${id(principalId)}/tokens`, { body: input, ...options }),\n /** A principal's tokens and API keys, metadata only (yourself, or node owners for anyone). */\n credentials: async (principalId: string): Promise<CredentialInfo[]> =>\n (await http.request<{ items: CredentialInfo[] }>(\"GET\", `/v1/principals/${id(principalId)}/credentials`)).items,\n /** Revokes every credential of the principal, including the one this client may be using. */\n revokeAllCredentials: (principalId: string) =>\n http.request<void>(\"DELETE\", `/v1/principals/${id(principalId)}/credentials`),\n },\n\n credentials: {\n /** Revokes one token (`tok_…`) or API key (`key_…`). */\n revoke: (credentialId: string) => http.request<void>(\"DELETE\", `/v1/credentials/${id(credentialId)}`),\n },\n\n audit: {\n /** Newest first; page backwards with `before` (node owners and auditors; ADR-0024). */\n list: (\n filter: {\n before?: number;\n limit?: number;\n kind?: AuditKind;\n outcome?: AuditOutcome;\n principalId?: string;\n action?: string;\n } = {},\n ) =>\n http.request<{ items: AuditEntry[]; nextBefore: number | null }>(\"GET\", \"/v1/audit\", { query: { ...filter } }),\n /** Recomputes the whole chain on the node: gaps, hashes and signatures. */\n verify: () => http.request<AuditVerification>(\"GET\", \"/v1/audit/verify\"),\n },\n\n roles: {\n /** A principal's bindings, or those of a node or organization; by default this node's and its organizations'. */\n list: async (\n filter: { principalId?: string; nodeId?: string; organizationId?: string } = {},\n ): Promise<RoleBinding[]> =>\n (await http.request<{ items: RoleBinding[] }>(\"GET\", \"/v1/role-bindings\", { query: { ...filter } })).items,\n /** Grants node_owner, viewer or auditor on a node, or org_owner or agent_operator on an organization. */\n grant: (request: GrantRoleRequest, options: CreateOptions = {}) =>\n http.request<RoleBinding>(\"POST\", \"/v1/role-bindings\", { body: request, ...options }),\n revoke: (bindingId: string) => http.request<void>(\"DELETE\", `/v1/role-bindings/${id(bindingId)}`),\n },\n\n nodes: {\n list: (page: PageParams = {}) => http.request<PageOf<Node>>(\"GET\", \"/v1/nodes\", { query: { ...page } }),\n all: () => all((cursor) => client.nodes.list({ cursor })),\n get: (nodeId: string) => http.request<Node>(\"GET\", `/v1/nodes/${id(nodeId)}`),\n detail: (nodeId: string) => http.request<NodeDetail>(\"GET\", `/v1/nodes/${id(nodeId)}/detail`),\n organizations: (nodeId: string, page: PageParams = {}) =>\n http.request<PageOf<Organization>>(\"GET\", `/v1/nodes/${id(nodeId)}/organizations`, { query: { ...page } }),\n update: (nodeId: string, changes: UpdateNodeRequest, options: WriteOptions = {}) =>\n http.request<Node>(\"PATCH\", `/v1/nodes/${id(nodeId)}`, { body: changes, ...options }),\n /** Removes the node and, children first, everything on it. */\n remove: (nodeId: string, options: WriteOptions = {}) =>\n http.request<void>(\"DELETE\", `/v1/nodes/${id(nodeId)}`, options),\n owners: (nodeId: string) => ownersOf(http, `/v1/nodes/${id(nodeId)}`),\n /** Forgets an offline remote node, with its organizations, agents and links (owners of this node). */\n forget: (nodeId: string) => http.request<void>(\"POST\", `/v1/nodes/${id(nodeId)}/forget`),\n },\n\n links: {\n list: async (): Promise<Link[]> => (await http.request<{ items: Link[] }>(\"GET\", \"/v1/links\")).items,\n /** Connects the node this client talks to with a peer, by URL or by the peer's node id (its advertised endpoint). */\n connect: (target: { url: string } | { nodeId: string }, options: CreateOptions = {}) =>\n http.request<{ url: string }>(\"POST\", \"/v1/links\", { body: target, ...options }),\n /** Disconnects the peer at the other end and removes the link. */\n remove: (linkId: string) => http.request<void>(\"DELETE\", `/v1/links/${id(linkId)}`),\n },\n\n organizations: {\n /** Creates an organization (and its Mesh Agent) on the node this client talks to. */\n create: (input: CreateOrganizationRequest, options: CreateOptions = {}) =>\n http.request<Organization>(\"POST\", \"/v1/organizations\", { body: input, ...options }),\n list: (filter: PageParams & { nodeId?: string | undefined } = {}) =>\n http.request<PageOf<Organization>>(\"GET\", \"/v1/organizations\", { query: { ...filter } }),\n all: (filter: { nodeId?: string | undefined } = {}) =>\n all((cursor) => client.organizations.list({ ...filter, cursor })),\n get: (organizationId: string) => http.request<Organization>(\"GET\", `/v1/organizations/${id(organizationId)}`),\n update: (organizationId: string, changes: UpdateOrganizationRequest, options: WriteOptions = {}) =>\n http.request<Organization>(\"PATCH\", `/v1/organizations/${id(organizationId)}`, { body: changes, ...options }),\n /** Removes the organization and all of its agents. */\n remove: (organizationId: string, options: WriteOptions = {}) =>\n http.request<void>(\"DELETE\", `/v1/organizations/${id(organizationId)}`, options),\n owners: (organizationId: string) => ownersOf(http, `/v1/organizations/${id(organizationId)}`),\n },\n\n agents: {\n /** Creates an agent; it is registered with its organization's Mesh Agent automatically. */\n create: (organizationId: string, input: CreateAgentRequestInput, options: CreateOptions = {}) =>\n http.request<Agent>(\"POST\", `/v1/organizations/${id(organizationId)}/agents`, { body: input, ...options }),\n list: (filter: AgentFilter = {}) => http.request<PageOf<Agent>>(\"GET\", \"/v1/agents\", { query: { ...filter } }),\n all: (filter: Omit<AgentFilter, \"cursor\"> = {}) => all((cursor) => client.agents.list({ ...filter, cursor })),\n get: (agentId: string) => http.request<Agent>(\"GET\", `/v1/agents/${id(agentId)}`),\n update: (agentId: string, changes: UpdateAgentRequest, options: WriteOptions = {}) =>\n http.request<Agent>(\"PATCH\", `/v1/agents/${id(agentId)}`, { body: changes, ...options }),\n /** Deregisters the agent from its Mesh Agent, then removes it. */\n remove: (agentId: string, options: WriteOptions = {}) =>\n http.request<void>(\"DELETE\", `/v1/agents/${id(agentId)}`, options),\n start: (agentId: string) => http.request<Agent>(\"POST\", `/v1/agents/${id(agentId)}/start`),\n stop: (agentId: string) => http.request<Agent>(\"POST\", `/v1/agents/${id(agentId)}/stop`),\n },\n\n tasks: {\n /**\n * Asks the mesh for a capability on behalf of `agentId` (node or org owners). The agent's Mesh Agent routes the\n * request; the returned task is `requested`, and the provider's node completes it (ADR-0020).\n */\n request: (agentId: string, input: RequestTaskRequestInput, options: CreateOptions = {}) =>\n http.request<Task>(\"POST\", `/v1/agents/${id(agentId)}/tasks`, { body: input, ...options }),\n /** Newest first. */\n list: (filter: TaskFilter = {}) => http.request<PageOf<Task>>(\"GET\", \"/v1/tasks\", { query: { ...filter } }),\n all: (filter: Omit<TaskFilter, \"cursor\"> = {}) => all((cursor) => client.tasks.list({ ...filter, cursor })),\n get: (taskId: string) => http.request<Task>(\"GET\", `/v1/tasks/${id(taskId)}`),\n /** Resolves with the task once it is `completed` or `failed`; rejects after `timeoutMs`. */\n wait: async (taskId: string, waitOptions: WaitOptions = {}): Promise<Task> => {\n const deadline = Date.now() + (waitOptions.timeoutMs ?? 30_000);\n for (;;) {\n const task = await client.tasks.get(taskId);\n if (task.status === \"completed\" || task.status === \"failed\") return task;\n if (Date.now() >= deadline) throw new Error(`Task ${taskId} still ${task.status} after waiting`);\n await new Promise((resolve) => setTimeout(resolve, waitOptions.intervalMs ?? 250));\n }\n },\n },\n\n realtime: {\n /**\n * Opens the realtime stream. Without a `cursor` it first loads a snapshot and keeps `state` current;\n * it reconnects with backoff and resumes from the last event it saw.\n */\n connect: (realtimeOptions: RealtimeOptions = {}) => {\n const realtime = new MeshRealtime(\n { baseUrl: http.baseUrl, token: () => http.token(), snapshot: client.snapshot, WebSocket: options.WebSocket },\n realtimeOptions,\n );\n realtime.start();\n return realtime;\n },\n },\n };\n\n return client;\n}\n\nexport type MeshClient = ReturnType<typeof createMeshClient>;\n"]}