@seat-mesh/core 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/dist/chatfile/chatfile.test.d.ts +2 -0
  2. package/dist/chatfile/chatfile.test.d.ts.map +1 -0
  3. package/dist/chatfile/chatfile.test.js +86 -0
  4. package/dist/chatfile/chatfile.test.js.map +1 -0
  5. package/dist/chatfile/index.d.ts +5 -0
  6. package/dist/chatfile/index.d.ts.map +1 -0
  7. package/dist/chatfile/index.js +5 -0
  8. package/dist/chatfile/index.js.map +1 -0
  9. package/dist/chatfile/record.d.ts +12 -0
  10. package/dist/chatfile/record.d.ts.map +1 -0
  11. package/dist/chatfile/record.js +38 -0
  12. package/dist/chatfile/record.js.map +1 -0
  13. package/dist/chatfile/slot.d.ts +4 -0
  14. package/dist/chatfile/slot.d.ts.map +1 -0
  15. package/dist/chatfile/slot.js +14 -0
  16. package/dist/chatfile/slot.js.map +1 -0
  17. package/dist/chatfile/store.d.ts +23 -0
  18. package/dist/chatfile/store.d.ts.map +1 -0
  19. package/dist/chatfile/store.js +92 -0
  20. package/dist/chatfile/store.js.map +1 -0
  21. package/dist/chatfile/types.d.ts +47 -0
  22. package/dist/chatfile/types.d.ts.map +1 -0
  23. package/dist/chatfile/types.js +16 -0
  24. package/dist/chatfile/types.js.map +1 -0
  25. package/dist/chatroom/agent-id.d.ts +7 -0
  26. package/dist/chatroom/agent-id.d.ts.map +1 -0
  27. package/dist/chatroom/agent-id.js +18 -0
  28. package/dist/chatroom/agent-id.js.map +1 -0
  29. package/dist/chatroom/calls.d.ts +30 -0
  30. package/dist/chatroom/calls.d.ts.map +1 -0
  31. package/dist/chatroom/calls.js +75 -0
  32. package/dist/chatroom/calls.js.map +1 -0
  33. package/dist/chatroom/calls.test.d.ts +2 -0
  34. package/dist/chatroom/calls.test.d.ts.map +1 -0
  35. package/dist/chatroom/calls.test.js +54 -0
  36. package/dist/chatroom/calls.test.js.map +1 -0
  37. package/dist/chatroom/checkback-hint.d.ts +51 -0
  38. package/dist/chatroom/checkback-hint.d.ts.map +1 -0
  39. package/dist/chatroom/checkback-hint.js +140 -0
  40. package/dist/chatroom/checkback-hint.js.map +1 -0
  41. package/dist/chatroom/checkback-hint.test.d.ts +2 -0
  42. package/dist/chatroom/checkback-hint.test.d.ts.map +1 -0
  43. package/dist/chatroom/checkback-hint.test.js +9 -0
  44. package/dist/chatroom/checkback-hint.test.js.map +1 -0
  45. package/dist/chatroom/checkback.d.ts +21 -0
  46. package/dist/chatroom/checkback.d.ts.map +1 -0
  47. package/dist/chatroom/checkback.js +58 -0
  48. package/dist/chatroom/checkback.js.map +1 -0
  49. package/dist/chatroom/comms-checkback.d.ts +25 -0
  50. package/dist/chatroom/comms-checkback.d.ts.map +1 -0
  51. package/dist/chatroom/comms-checkback.js +41 -0
  52. package/dist/chatroom/comms-checkback.js.map +1 -0
  53. package/dist/chatroom/duration.d.ts +4 -0
  54. package/dist/chatroom/duration.d.ts.map +1 -0
  55. package/dist/chatroom/duration.js +18 -0
  56. package/dist/chatroom/duration.js.map +1 -0
  57. package/dist/chatroom/fanout-routing.d.ts +27 -0
  58. package/dist/chatroom/fanout-routing.d.ts.map +1 -0
  59. package/dist/chatroom/fanout-routing.js +131 -0
  60. package/dist/chatroom/fanout-routing.js.map +1 -0
  61. package/dist/chatroom/fanout-routing.test.d.ts +2 -0
  62. package/dist/chatroom/fanout-routing.test.d.ts.map +1 -0
  63. package/dist/chatroom/fanout-routing.test.js +125 -0
  64. package/dist/chatroom/fanout-routing.test.js.map +1 -0
  65. package/dist/chatroom/global.d.ts +6 -0
  66. package/dist/chatroom/global.d.ts.map +1 -0
  67. package/dist/chatroom/global.js +13 -0
  68. package/dist/chatroom/global.js.map +1 -0
  69. package/dist/chatroom/inbox-client.d.ts +49 -0
  70. package/dist/chatroom/inbox-client.d.ts.map +1 -0
  71. package/dist/chatroom/inbox-client.js +73 -0
  72. package/dist/chatroom/inbox-client.js.map +1 -0
  73. package/dist/chatroom/index.d.ts +13 -0
  74. package/dist/chatroom/index.d.ts.map +1 -0
  75. package/dist/chatroom/index.js +13 -0
  76. package/dist/chatroom/index.js.map +1 -0
  77. package/dist/chatroom/mentions.d.ts +4 -0
  78. package/dist/chatroom/mentions.d.ts.map +1 -0
  79. package/dist/chatroom/mentions.js +20 -0
  80. package/dist/chatroom/mentions.js.map +1 -0
  81. package/dist/chatroom/mentions.test.d.ts +2 -0
  82. package/dist/chatroom/mentions.test.d.ts.map +1 -0
  83. package/dist/chatroom/mentions.test.js +12 -0
  84. package/dist/chatroom/mentions.test.js.map +1 -0
  85. package/dist/chatroom/read-state.d.ts +17 -0
  86. package/dist/chatroom/read-state.d.ts.map +1 -0
  87. package/dist/chatroom/read-state.js +84 -0
  88. package/dist/chatroom/read-state.js.map +1 -0
  89. package/dist/chatroom/room.d.ts +66 -0
  90. package/dist/chatroom/room.d.ts.map +1 -0
  91. package/dist/chatroom/room.js +249 -0
  92. package/dist/chatroom/room.js.map +1 -0
  93. package/dist/chatroom/room.test.d.ts +2 -0
  94. package/dist/chatroom/room.test.d.ts.map +1 -0
  95. package/dist/chatroom/room.test.js +169 -0
  96. package/dist/chatroom/room.test.js.map +1 -0
  97. package/dist/chatroom/types.d.ts +71 -0
  98. package/dist/chatroom/types.d.ts.map +1 -0
  99. package/dist/chatroom/types.js +37 -0
  100. package/dist/chatroom/types.js.map +1 -0
  101. package/dist/comms/envelope.d.ts +134 -0
  102. package/dist/comms/envelope.d.ts.map +1 -0
  103. package/dist/comms/envelope.js +33 -0
  104. package/dist/comms/envelope.js.map +1 -0
  105. package/dist/contracts/index.d.ts +2 -0
  106. package/dist/contracts/index.d.ts.map +1 -0
  107. package/dist/contracts/index.js +2 -0
  108. package/dist/contracts/index.js.map +1 -0
  109. package/dist/contracts/supervise-contract.test.d.ts +2 -0
  110. package/dist/contracts/supervise-contract.test.d.ts.map +1 -0
  111. package/dist/contracts/supervise-contract.test.js +49 -0
  112. package/dist/contracts/supervise-contract.test.js.map +1 -0
  113. package/dist/contracts/supervise.d.ts +54 -0
  114. package/dist/contracts/supervise.d.ts.map +1 -0
  115. package/dist/contracts/supervise.js +86 -0
  116. package/dist/contracts/supervise.js.map +1 -0
  117. package/dist/dotdir.d.ts +11 -0
  118. package/dist/dotdir.d.ts.map +1 -0
  119. package/dist/dotdir.js +30 -0
  120. package/dist/dotdir.js.map +1 -0
  121. package/dist/dotdir.test.d.ts +2 -0
  122. package/dist/dotdir.test.d.ts.map +1 -0
  123. package/dist/dotdir.test.js +26 -0
  124. package/dist/dotdir.test.js.map +1 -0
  125. package/dist/index.d.ts +28 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +28 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/jsonl/index.d.ts +2 -0
  130. package/dist/jsonl/index.d.ts.map +1 -0
  131. package/dist/jsonl/index.js +2 -0
  132. package/dist/jsonl/index.js.map +1 -0
  133. package/dist/jsonl/store.d.ts +7 -0
  134. package/dist/jsonl/store.d.ts.map +1 -0
  135. package/dist/jsonl/store.js +61 -0
  136. package/dist/jsonl/store.js.map +1 -0
  137. package/dist/layout/enabled.d.ts +6 -0
  138. package/dist/layout/enabled.d.ts.map +1 -0
  139. package/dist/layout/enabled.js +10 -0
  140. package/dist/layout/enabled.js.map +1 -0
  141. package/dist/layout/enabled.test.d.ts +2 -0
  142. package/dist/layout/enabled.test.d.ts.map +1 -0
  143. package/dist/layout/enabled.test.js +30 -0
  144. package/dist/layout/enabled.test.js.map +1 -0
  145. package/dist/layout/minis.d.ts +17 -0
  146. package/dist/layout/minis.d.ts.map +1 -0
  147. package/dist/layout/minis.js +55 -0
  148. package/dist/layout/minis.js.map +1 -0
  149. package/dist/layout/stack.d.ts +5 -0
  150. package/dist/layout/stack.d.ts.map +1 -0
  151. package/dist/layout/stack.js +8 -0
  152. package/dist/layout/stack.js.map +1 -0
  153. package/dist/layout/stack.test.d.ts +2 -0
  154. package/dist/layout/stack.test.d.ts.map +1 -0
  155. package/dist/layout/stack.test.js +20 -0
  156. package/dist/layout/stack.test.js.map +1 -0
  157. package/dist/mesh-state-merge.d.ts +7 -0
  158. package/dist/mesh-state-merge.d.ts.map +1 -0
  159. package/dist/mesh-state-merge.js +48 -0
  160. package/dist/mesh-state-merge.js.map +1 -0
  161. package/dist/mesh-state-merge.test.d.ts +2 -0
  162. package/dist/mesh-state-merge.test.d.ts.map +1 -0
  163. package/dist/mesh-state-merge.test.js +36 -0
  164. package/dist/mesh-state-merge.test.js.map +1 -0
  165. package/dist/pane-ops/types.d.ts +14 -0
  166. package/dist/pane-ops/types.d.ts.map +1 -0
  167. package/dist/pane-ops/types.js +2 -0
  168. package/dist/pane-ops/types.js.map +1 -0
  169. package/dist/paths-manifest.d.ts +34 -0
  170. package/dist/paths-manifest.d.ts.map +1 -0
  171. package/dist/paths-manifest.js +79 -0
  172. package/dist/paths-manifest.js.map +1 -0
  173. package/dist/paths-manifest.test.d.ts +2 -0
  174. package/dist/paths-manifest.test.d.ts.map +1 -0
  175. package/dist/paths-manifest.test.js +57 -0
  176. package/dist/paths-manifest.test.js.map +1 -0
  177. package/dist/paths.d.ts +5 -0
  178. package/dist/paths.d.ts.map +1 -0
  179. package/dist/paths.js +17 -0
  180. package/dist/paths.js.map +1 -0
  181. package/dist/profile.d.ts +54 -0
  182. package/dist/profile.d.ts.map +1 -0
  183. package/dist/profile.js +93 -0
  184. package/dist/profile.js.map +1 -0
  185. package/dist/profile.test.d.ts +2 -0
  186. package/dist/profile.test.d.ts.map +1 -0
  187. package/dist/profile.test.js +25 -0
  188. package/dist/profile.test.js.map +1 -0
  189. package/dist/providers/registry.d.ts +3 -0
  190. package/dist/providers/registry.d.ts.map +1 -0
  191. package/dist/providers/registry.js +24 -0
  192. package/dist/providers/registry.js.map +1 -0
  193. package/dist/providers/types.d.ts +82 -0
  194. package/dist/providers/types.d.ts.map +1 -0
  195. package/dist/providers/types.js +5 -0
  196. package/dist/providers/types.js.map +1 -0
  197. package/dist/queue/types.d.ts +38 -0
  198. package/dist/queue/types.d.ts.map +1 -0
  199. package/dist/queue/types.js +5 -0
  200. package/dist/queue/types.js.map +1 -0
  201. package/dist/role-index.d.ts +30 -0
  202. package/dist/role-index.d.ts.map +1 -0
  203. package/dist/role-index.js +97 -0
  204. package/dist/role-index.js.map +1 -0
  205. package/dist/runtime-paths.d.ts +43 -0
  206. package/dist/runtime-paths.d.ts.map +1 -0
  207. package/dist/runtime-paths.js +94 -0
  208. package/dist/runtime-paths.js.map +1 -0
  209. package/dist/runtime-paths.test.d.ts +2 -0
  210. package/dist/runtime-paths.test.d.ts.map +1 -0
  211. package/dist/runtime-paths.test.js +86 -0
  212. package/dist/runtime-paths.test.js.map +1 -0
  213. package/dist/schema/agents.d.ts +809 -0
  214. package/dist/schema/agents.d.ts.map +1 -0
  215. package/dist/schema/agents.js +133 -0
  216. package/dist/schema/agents.js.map +1 -0
  217. package/dist/schema/layout-manager2.test.d.ts +2 -0
  218. package/dist/schema/layout-manager2.test.d.ts.map +1 -0
  219. package/dist/schema/layout-manager2.test.js +19 -0
  220. package/dist/schema/layout-manager2.test.js.map +1 -0
  221. package/dist/schema/layout.d.ts +215 -0
  222. package/dist/schema/layout.d.ts.map +1 -0
  223. package/dist/schema/layout.js +96 -0
  224. package/dist/schema/layout.js.map +1 -0
  225. package/dist/schema/profile.d.ts +1148 -0
  226. package/dist/schema/profile.d.ts.map +1 -0
  227. package/dist/schema/profile.js +199 -0
  228. package/dist/schema/profile.js.map +1 -0
  229. package/dist/schema/ux.d.ts +359 -0
  230. package/dist/schema/ux.d.ts.map +1 -0
  231. package/dist/schema/ux.js +53 -0
  232. package/dist/schema/ux.js.map +1 -0
  233. package/dist/session/config.d.ts +3 -0
  234. package/dist/session/config.d.ts.map +1 -0
  235. package/dist/session/config.js +5 -0
  236. package/dist/session/config.js.map +1 -0
  237. package/dist/session/exec.d.ts +5 -0
  238. package/dist/session/exec.d.ts.map +1 -0
  239. package/dist/session/exec.js +29 -0
  240. package/dist/session/exec.js.map +1 -0
  241. package/dist/session/index.d.ts +3 -0
  242. package/dist/session/index.d.ts.map +1 -0
  243. package/dist/session/index.js +3 -0
  244. package/dist/session/index.js.map +1 -0
  245. package/dist/session/session.test.d.ts +2 -0
  246. package/dist/session/session.test.d.ts.map +1 -0
  247. package/dist/session/session.test.js +12 -0
  248. package/dist/session/session.test.js.map +1 -0
  249. package/dist/slot/guards.d.ts +5 -0
  250. package/dist/slot/guards.d.ts.map +1 -0
  251. package/dist/slot/guards.js +53 -0
  252. package/dist/slot/guards.js.map +1 -0
  253. package/dist/slot/types.d.ts +54 -0
  254. package/dist/slot/types.d.ts.map +1 -0
  255. package/dist/slot/types.js +38 -0
  256. package/dist/slot/types.js.map +1 -0
  257. package/dist/stack/config.d.ts +8 -0
  258. package/dist/stack/config.d.ts.map +1 -0
  259. package/dist/stack/config.js +8 -0
  260. package/dist/stack/config.js.map +1 -0
  261. package/dist/stack/exec.d.ts +6 -0
  262. package/dist/stack/exec.d.ts.map +1 -0
  263. package/dist/stack/exec.js +52 -0
  264. package/dist/stack/exec.js.map +1 -0
  265. package/dist/stack/index.d.ts +3 -0
  266. package/dist/stack/index.d.ts.map +1 -0
  267. package/dist/stack/index.js +3 -0
  268. package/dist/stack/index.js.map +1 -0
  269. package/dist/stack/stack.test.d.ts +2 -0
  270. package/dist/stack/stack.test.d.ts.map +1 -0
  271. package/dist/stack/stack.test.js +55 -0
  272. package/dist/stack/stack.test.js.map +1 -0
  273. package/dist/ux/defaults.d.ts +4 -0
  274. package/dist/ux/defaults.d.ts.map +1 -0
  275. package/dist/ux/defaults.js +98 -0
  276. package/dist/ux/defaults.js.map +1 -0
  277. package/dist/ux/evaluate.d.ts +22 -0
  278. package/dist/ux/evaluate.d.ts.map +1 -0
  279. package/dist/ux/evaluate.js +160 -0
  280. package/dist/ux/evaluate.js.map +1 -0
  281. package/dist/ux/evaluate.test.d.ts +2 -0
  282. package/dist/ux/evaluate.test.d.ts.map +1 -0
  283. package/dist/ux/evaluate.test.js +64 -0
  284. package/dist/ux/evaluate.test.js.map +1 -0
  285. package/dist/ux/index.d.ts +3 -0
  286. package/dist/ux/index.d.ts.map +1 -0
  287. package/dist/ux/index.js +3 -0
  288. package/dist/ux/index.js.map +1 -0
  289. package/package.json +38 -0
@@ -0,0 +1,54 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { afterEach, describe, expect, it } from "vitest";
5
+ import { MeshProfileSchema } from "../schema/profile.js";
6
+ import { resolveSessionName, workspaceScopeId, } from "../profile.js";
7
+ import { callsPath, createPendingCall, findCallByShortId, peerRoomSlug, updateCall, } from "./calls.js";
8
+ function testLoaded(workspace) {
9
+ const profile = MeshProfileSchema.parse({
10
+ name: "test",
11
+ workspace: ".",
12
+ session: { name: "mesh" },
13
+ seats: { root: "tasks/agent-seats" },
14
+ state: { meshAgentsJson: "mesh-agents.json" },
15
+ roles: { dir: "roles" },
16
+ });
17
+ return {
18
+ profile,
19
+ profileDir: workspace,
20
+ profilePath: path.join(workspace, ".sm/mesh.config.yaml"),
21
+ workspace,
22
+ workspaceId: workspaceScopeId(workspace),
23
+ sessionName: resolveSessionName(profile, workspace),
24
+ };
25
+ }
26
+ describe("room calls", () => {
27
+ let workspace = "";
28
+ afterEach(() => {
29
+ if (workspace && fs.existsSync(workspace)) {
30
+ fs.rmSync(workspace, { recursive: true, force: true });
31
+ }
32
+ });
33
+ it("creates pending call with stable peer slug", () => {
34
+ workspace = fs.mkdtempSync(path.join(os.tmpdir(), "sm-calls-"));
35
+ const loaded = testLoaded(workspace);
36
+ const row = createPendingCall(loaded, {
37
+ fromAgent: "worker-3",
38
+ toAgent: "worker-6",
39
+ fromSlot: "3",
40
+ toSlot: "6",
41
+ topic: "debug consoles",
42
+ });
43
+ expect(row.shortId).toHaveLength(8);
44
+ expect(row.roomSlug).toBe(peerRoomSlug("3", "6", row.shortId));
45
+ expect(fs.existsSync(callsPath(loaded))).toBe(true);
46
+ const found = findCallByShortId(loaded, row.shortId);
47
+ expect(found?.status).toBe("pending");
48
+ row.status = "accepted";
49
+ row.resolvedAt = new Date().toISOString();
50
+ updateCall(loaded, row);
51
+ expect(findCallByShortId(loaded, row.shortId)?.status).toBe("accepted");
52
+ });
53
+ });
54
+ //# sourceMappingURL=calls.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calls.test.js","sourceRoot":"","sources":["../../src/chatroom/calls.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /** Parse expect from room say checkback arm: `chat-room:<slug> peer update (<kind>)`. */
2
+ export declare function parseRoomCommsExpect(expect: string): {
3
+ slug: string;
4
+ kind: string;
5
+ } | null;
6
+ export interface RoomCommsReplyContext {
7
+ role: string;
8
+ slot?: string | number | null;
9
+ mini?: string | number | null;
10
+ ports?: string | null;
11
+ workerCount?: number;
12
+ miniMax?: number;
13
+ }
14
+ /** Compact seat token (harness `worker_inject_stamp` spirit: `slot-N ports P/P`). */
15
+ export declare function formatCompactSeat(ctx?: RoomCommsReplyContext): string;
16
+ /** @deprecated Prefer formatCompactSeat — kept for whoami/tests. */
17
+ export declare function formatSeatStamp(ctx?: RoomCommsReplyContext): string;
18
+ /**
19
+ * Harness-aligned inject envelope (dense — patterns.md).
20
+ * Manager mail: `[mesh-inbox] secretary: body` (like harness `[INBOX who]:`).
21
+ * Peers: `[agent-worker-slot-N] TO-SLOT-M (ports): …` passthrough, or one-line header.
22
+ */
23
+ export declare function formatMeshSteeringInject(ctx: RoomCommsReplyContext, tag: string, body: string): string;
24
+ /** Worker prompt lead stamp for inject prefix. */
25
+ export declare function formatWorkerInjectStamp(ctx: RoomCommsReplyContext): string;
26
+ /** Room reply one-liner (receiver copies, replaces `<msg>`). */
27
+ export declare function formatRoomSayReplyCmd(slug: string): string;
28
+ /** Peer to-slot reply one-liner (`fromSlot` = sender to answer). */
29
+ export declare function formatToSlotReplyCmd(fromSlot: string | number): string;
30
+ /** Short checkback / patience nudge (not a full playbook). */
31
+ export declare function formatCheckNudge(ctx: RoomCommsReplyContext, expect: string, hint: string): string;
32
+ /** Engineering reply block for room-comms checkback injects (compact). */
33
+ export declare function formatRoomCommsCheckback(expect: string, ctx?: RoomCommsReplyContext): string;
34
+ export interface RoomPeerNotifyOpts {
35
+ unseen?: number;
36
+ }
37
+ /** Thin PEER wake-up for multi-member rooms (3+). Ledger is truth — no body relay. */
38
+ export declare function formatRoomPeerNotify(slug: string, kind: string, from: string, _body: string, ctx?: RoomCommsReplyContext, opts?: RoomPeerNotifyOpts): string;
39
+ /** Rich PEER for manager / secretary / mini-leads / lead-workers — includes claim body snippet. */
40
+ export declare function formatRoomCoordNotify(slug: string, kind: string, from: string, body: string, ctx?: RoomCommsReplyContext, opts?: RoomPeerNotifyOpts): string;
41
+ /** Harness-style direct room line (2-member rooms, @mentions). */
42
+ export declare function formatRoomDirectPm(slug: string, from: string, fromSlot: string, fromPorts: string, body: string, _ctx?: RoomCommsReplyContext): string;
43
+ export declare function parseRoomCallExpect(expect: string): {
44
+ callId: string;
45
+ phase: "resolved" | "accept|decline";
46
+ } | null;
47
+ export declare function formatRoomCallCheckback(expect: string, ctx?: RoomCommsReplyContext): string;
48
+ export declare function formatRoomCallInvite(callShortId: string, fromAgent: string, topic: string, ctx?: RoomCommsReplyContext): string;
49
+ export declare function formatRoomCallResolved(status: "accepted" | "declined", peerAgent: string, roomSlug: string | null, callShortId: string, reason?: string, ctx?: RoomCommsReplyContext): string;
50
+ export declare function formatGenericCheckback(expect: string, ctx?: RoomCommsReplyContext): string;
51
+ //# sourceMappingURL=checkback-hint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkback-hint.d.ts","sourceRoot":"","sources":["../../src/chatroom/checkback-hint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ /** Parse expect from room say checkback arm: `chat-room:<slug> peer update (<kind>)`. */
2
+ export function parseRoomCommsExpect(expect) {
3
+ const m = expect.match(/^chat-room:([^\s]+) peer update \(([^)]+)\)$/);
4
+ if (!m)
5
+ return null;
6
+ return { slug: m[1], kind: m[2] };
7
+ }
8
+ /** Compact seat token (harness `worker_inject_stamp` spirit: `slot-N ports P/P`). */
9
+ export function formatCompactSeat(ctx = { role: "worker" }) {
10
+ const role = ctx.role || "worker";
11
+ if (role === "manager")
12
+ return "manager";
13
+ if (role === "secretary")
14
+ return "secretary";
15
+ if (role === "manager-mini" || ctx.mini)
16
+ return `mini-${ctx.mini ?? "?"}`;
17
+ const slot = ctx.slot;
18
+ if (slot != null && String(slot).length > 0) {
19
+ const ports = ctx.ports?.trim();
20
+ return ports ? `slot-${slot} ${ports}` : `slot-${slot}`;
21
+ }
22
+ return "unknown";
23
+ }
24
+ /** @deprecated Prefer formatCompactSeat — kept for whoami/tests. */
25
+ export function formatSeatStamp(ctx = { role: "worker" }) {
26
+ return formatCompactSeat(ctx);
27
+ }
28
+ /**
29
+ * Harness-aligned inject envelope (dense — patterns.md).
30
+ * Manager mail: `[mesh-inbox] secretary: body` (like harness `[INBOX who]:`).
31
+ * Peers: `[agent-worker-slot-N] TO-SLOT-M (ports): …` passthrough, or one-line header.
32
+ */
33
+ export function formatMeshSteeringInject(ctx, tag, body) {
34
+ const text = body.trim();
35
+ if (!text)
36
+ return `[mesh-inbox] ${tag}`;
37
+ if (ctx.role === "manager" && /^TO-MASTER from /i.test(tag)) {
38
+ const from = tag.replace(/^TO-MASTER from /i, "").trim();
39
+ return `[mesh-inbox] ${from}: ${text}`;
40
+ }
41
+ if (ctx.role === "manager" && /DIGEST/i.test(tag)) {
42
+ return `[mesh-inbox] DIGEST: ${text}`;
43
+ }
44
+ if (/^\[agent-worker-slot-/m.test(text)) {
45
+ return text;
46
+ }
47
+ const seat = formatCompactSeat(ctx);
48
+ if (!text.includes("\n")) {
49
+ return `${seat} | [mesh-inbox] ${tag}: ${text}`;
50
+ }
51
+ return `${seat} | [mesh-inbox] ${tag}\n${text}`;
52
+ }
53
+ /** Worker prompt lead stamp for inject prefix. */
54
+ export function formatWorkerInjectStamp(ctx) {
55
+ const seat = formatCompactSeat(ctx);
56
+ return `${seat} -`;
57
+ }
58
+ /** Room reply one-liner (receiver copies, replaces `<msg>`). */
59
+ export function formatRoomSayReplyCmd(slug) {
60
+ const roomFlag = slug === "global" ? "" : ` -r ${slug}`;
61
+ return `./sm.sh room say${roomFlag} "<msg>"`;
62
+ }
63
+ /** Peer to-slot reply one-liner (`fromSlot` = sender to answer). */
64
+ export function formatToSlotReplyCmd(fromSlot) {
65
+ return `./sm.sh to-slot ${fromSlot} "<msg>"`;
66
+ }
67
+ /** Short checkback / patience nudge (not a full playbook). */
68
+ export function formatCheckNudge(ctx, expect, hint) {
69
+ return `${formatCompactSeat(ctx)} | Check: ${expect} — ${hint}`;
70
+ }
71
+ /** Engineering reply block for room-comms checkback injects (compact). */
72
+ export function formatRoomCommsCheckback(expect, ctx = { role: "worker" }) {
73
+ const parsed = parseRoomCommsExpect(expect);
74
+ const slug = parsed?.slug ?? "global";
75
+ const roomFlag = slug === "global" ? "" : ` -r ${slug}`;
76
+ const tailCmd = `./sm.sh room tail${roomFlag} -n 30`;
77
+ return formatCheckNudge(ctx, expect, `${tailCmd} | reply ${formatRoomSayReplyCmd(slug)}`);
78
+ }
79
+ /** Thin PEER wake-up for multi-member rooms (3+). Ledger is truth — no body relay. */
80
+ export function formatRoomPeerNotify(slug, kind, from, _body, ctx = { role: "worker" }, opts = {}) {
81
+ const roomFlag = slug === "global" ? "" : ` -r ${slug}`;
82
+ const unseen = opts.unseen ?? 0;
83
+ const unseenPart = unseen > 0 ? ` ${unseen} unseen` : "";
84
+ const tail = `./sm.sh room tail${roomFlag} -n 15`;
85
+ const seat = formatCompactSeat(ctx);
86
+ const tag = `${slug} | ${from} | ${kind}${unseenPart}`;
87
+ return `${seat} | [mesh-inbox-room] ${tag}\nVerify: ${tail} (no chat reply — continue FOCUS/TASKS hub)`;
88
+ }
89
+ /** Rich PEER for manager / secretary / mini-leads / lead-workers — includes claim body snippet. */
90
+ export function formatRoomCoordNotify(slug, kind, from, body, ctx = { role: "worker" }, opts = {}) {
91
+ const roomFlag = slug === "global" ? "" : ` -r ${slug}`;
92
+ const unseen = opts.unseen ?? 0;
93
+ const unseenPart = unseen > 1 ? ` (+${unseen - 1} more unseen)` : "";
94
+ const seat = formatCompactSeat(ctx);
95
+ const text = body.trim();
96
+ const snippet = text.length > 480 ? `${text.slice(0, 477)}...` : text;
97
+ const tail = `./sm.sh room tail${roomFlag} -n 15`;
98
+ return `${seat} | [mesh-inbox-room] ${slug} | ${from} | ${kind}${unseenPart}\n${snippet}\nVerify: ${tail} (no chat reply — continue FOCUS/TASKS hub)`;
99
+ }
100
+ /** Harness-style direct room line (2-member rooms, @mentions). */
101
+ export function formatRoomDirectPm(slug, from, fromSlot, fromPorts, body, _ctx = { role: "worker" }) {
102
+ const text = body.trim();
103
+ return `[agent-worker-slot-${fromSlot}] room ${slug} (${fromPorts}) from ${from}: ${text} — reply ${formatRoomSayReplyCmd(slug)}`;
104
+ }
105
+ export function parseRoomCallExpect(expect) {
106
+ const m = expect.match(/^room-call:([^\s]+) (resolved|accept\|decline)$/);
107
+ if (!m)
108
+ return null;
109
+ return { callId: m[1], phase: m[2] };
110
+ }
111
+ export function formatRoomCallCheckback(expect, ctx = { role: "worker" }) {
112
+ const parsed = parseRoomCallExpect(expect);
113
+ const callId = parsed?.callId ?? "?";
114
+ if (parsed?.phase === "accept|decline") {
115
+ return formatCheckNudge(ctx, expect, `./sm.sh room accept ${callId} | ./sm.sh room decline ${callId}`);
116
+ }
117
+ return formatCheckNudge(ctx, expect, `./sm.sh room calls (${callId})`);
118
+ }
119
+ export function formatRoomCallInvite(callShortId, fromAgent, topic, ctx = { role: "worker" }) {
120
+ const topicLine = topic.length > 120 ? `${topic.slice(0, 117)}...` : topic;
121
+ return formatMeshSteeringInject(ctx, `CALL ${fromAgent}`, `${topicLine} — ./sm.sh room accept ${callShortId} | decline ${callShortId}`);
122
+ }
123
+ export function formatRoomCallResolved(status, peerAgent, roomSlug, callShortId, reason, ctx = { role: "worker" }) {
124
+ if (status === "accepted" && roomSlug) {
125
+ return formatMeshSteeringInject(ctx, `ACCEPTED ${peerAgent}`, `./sm.sh room tail -r ${roomSlug} -n 10`);
126
+ }
127
+ const why = reason?.trim() ? ` (${reason.trim().slice(0, 80)})` : "";
128
+ return formatMeshSteeringInject(ctx, `DECLINED ${callShortId}`, `${peerAgent}${why}`);
129
+ }
130
+ export function formatGenericCheckback(expect, ctx = { role: "worker" }) {
131
+ const digestId = expect.match(/digest queued ([a-f0-9-]+)/i)?.[1];
132
+ if (digestId) {
133
+ return formatCheckNudge(ctx, expect, `./sm.sh inbox list | grep ${digestId.slice(0, 8)}`);
134
+ }
135
+ if (/proxy ipify|OC-LIMIT|Cannot connect/i.test(expect)) {
136
+ return formatCheckNudge(ctx, expect, "./sm.sh proxy status");
137
+ }
138
+ return formatCheckNudge(ctx, expect, "./sm.sh checkback list | cancel <id>");
139
+ }
140
+ //# sourceMappingURL=checkback-hint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkback-hint.js","sourceRoot":"","sources":["../../src/chatroom/checkback-hint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=checkback-hint.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkback-hint.test.d.ts","sourceRoot":"","sources":["../../src/chatroom/checkback-hint.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { formatCompactSeat, formatWorkerInjectStamp } from "./checkback-hint.js";
3
+ describe("formatCompactSeat", () => {
4
+ it("labels manager coord pane", () => {
5
+ expect(formatCompactSeat({ role: "manager" })).toBe("manager");
6
+ expect(formatWorkerInjectStamp({ role: "manager" })).toBe("manager -");
7
+ });
8
+ });
9
+ //# sourceMappingURL=checkback-hint.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkback-hint.test.js","sourceRoot":"","sources":["../../src/chatroom/checkback-hint.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface ArmCheckbackInput {
2
+ inboxBase: string;
3
+ ownerPane: string;
4
+ expect: string;
5
+ duration: string;
6
+ renew?: string;
7
+ kind?: string;
8
+ senderPane?: string;
9
+ ownerMini?: string | number | null;
10
+ ownerSlot?: string | number | null;
11
+ }
12
+ export interface ArmCheckbackResult {
13
+ ok: boolean;
14
+ skipped?: boolean;
15
+ reason?: string;
16
+ response?: unknown;
17
+ }
18
+ /** Arm inbox checkback (poll-later). Default on comms so agents keep working instead of human POV chat-wait. */
19
+ export declare function armCheckback(input: ArmCheckbackInput): Promise<ArmCheckbackResult>;
20
+ export declare function inboxHealthy(inboxBase: string): Promise<boolean>;
21
+ //# sourceMappingURL=checkback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkback.d.ts","sourceRoot":"","sources":["../../src/chatroom/checkback.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,gHAAgH;AAChH,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgDxF;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOtE"}
@@ -0,0 +1,58 @@
1
+ import { parseDuration, expiresAtUtc } from "./duration.js";
2
+ /** Arm inbox checkback (poll-later). Default on comms so agents keep working instead of human POV chat-wait. */
3
+ export async function armCheckback(input) {
4
+ if (process.env.SEAT_MESH_CHECKBACK === "0") {
5
+ return { ok: true, skipped: true, reason: "SEAT_MESH_CHECKBACK=0" };
6
+ }
7
+ if (!input.ownerPane) {
8
+ return { ok: false, reason: "no owner pane (--here / tmux pane required)" };
9
+ }
10
+ const secs = parseDuration(input.duration);
11
+ if (secs == null) {
12
+ return { ok: false, reason: `bad duration: ${input.duration}` };
13
+ }
14
+ let renewSec = null;
15
+ if (input.renew) {
16
+ renewSec = parseDuration(input.renew);
17
+ if (renewSec == null) {
18
+ return { ok: false, reason: `bad renew: ${input.renew}` };
19
+ }
20
+ }
21
+ const payload = {
22
+ expect: input.expect,
23
+ ownerPane: input.ownerPane,
24
+ expiresAt: expiresAtUtc(secs),
25
+ kind: input.kind ?? "comms",
26
+ renewSec,
27
+ ownerMini: input.ownerMini != null && String(input.ownerMini) !== "" ? input.ownerMini : null,
28
+ ownerSlot: input.ownerSlot != null && String(input.ownerSlot) !== "" ? input.ownerSlot : null,
29
+ senderPane: input.senderPane ?? null,
30
+ };
31
+ const base = input.inboxBase.replace(/\/$/, "");
32
+ try {
33
+ const res = await fetch(`${base}/patience`, {
34
+ method: "POST",
35
+ headers: { "Content-Type": "application/json" },
36
+ body: JSON.stringify(payload),
37
+ });
38
+ if (!res.ok) {
39
+ const text = await res.text();
40
+ return { ok: false, reason: `inbox POST ${res.status}: ${text.slice(0, 200)}` };
41
+ }
42
+ const json = await res.json().catch(() => null);
43
+ return { ok: true, response: json };
44
+ }
45
+ catch (e) {
46
+ return { ok: false, reason: e.message };
47
+ }
48
+ }
49
+ export async function inboxHealthy(inboxBase) {
50
+ try {
51
+ const res = await fetch(`${inboxBase.replace(/\/$/, "")}/health`, { signal: AbortSignal.timeout(2000) });
52
+ return res.ok;
53
+ }
54
+ catch {
55
+ return false;
56
+ }
57
+ }
58
+ //# sourceMappingURL=checkback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkback.js","sourceRoot":"","sources":["../../src/chatroom/checkback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { ChatRoomConfig } from "./room.js";
2
+ import { type ArmCheckbackResult } from "./inbox-client.js";
3
+ export interface ArmCommsCheckbackInput {
4
+ cfg: ChatRoomConfig;
5
+ ownerPane: string;
6
+ expect: string;
7
+ kind?: string;
8
+ ownerSlot?: string | number | null;
9
+ ownerMini?: string | number | null;
10
+ senderPane?: string;
11
+ duration?: string;
12
+ renew?: string;
13
+ }
14
+ export declare function isRoomCallExpect(expect: string): boolean;
15
+ export declare function checkbackTimingForExpect(cfg: ChatRoomConfig, expect: string): {
16
+ duration: string;
17
+ renew: string;
18
+ };
19
+ /** Default poll-later on every comms send/receive (patience / checkback). */
20
+ export declare function armCommsCheckback(input: ArmCommsCheckbackInput): Promise<ArmCheckbackResult>;
21
+ export declare function expectPeerSlotReply(fromSlot: string): string;
22
+ export declare function expectRoomPeerReply(slug: string): string;
23
+ export declare function expectRoomCallResolved(shortId: string): string;
24
+ export declare function expectRoomCallPending(shortId: string): string;
25
+ //# sourceMappingURL=comms-checkback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comms-checkback.d.ts","sourceRoot":"","sources":["../../src/chatroom/comms-checkback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE1E,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,cAAc,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,GACb;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAQrC;AAED,6EAA6E;AAC7E,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAa7B;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7D"}
@@ -0,0 +1,41 @@
1
+ import { armCheckback } from "./inbox-client.js";
2
+ export function isRoomCallExpect(expect) {
3
+ return expect.startsWith("room-call:");
4
+ }
5
+ export function checkbackTimingForExpect(cfg, expect) {
6
+ if (isRoomCallExpect(expect)) {
7
+ return {
8
+ duration: cfg.checkbackCallPendingDuration,
9
+ renew: cfg.checkbackCallPendingRenew,
10
+ };
11
+ }
12
+ return { duration: cfg.checkbackDuration, renew: cfg.checkbackRenew };
13
+ }
14
+ /** Default poll-later on every comms send/receive (patience / checkback). */
15
+ export async function armCommsCheckback(input) {
16
+ const timing = checkbackTimingForExpect(input.cfg, input.expect);
17
+ return armCheckback({
18
+ inboxBase: input.cfg.inboxBase,
19
+ ownerPane: input.ownerPane,
20
+ expect: input.expect,
21
+ duration: input.duration ?? timing.duration,
22
+ renew: input.renew ?? timing.renew,
23
+ kind: input.kind ?? "comms",
24
+ senderPane: input.senderPane ?? input.ownerPane,
25
+ ownerSlot: input.ownerSlot,
26
+ ownerMini: input.ownerMini,
27
+ });
28
+ }
29
+ export function expectPeerSlotReply(fromSlot) {
30
+ return `peer slot-${fromSlot} reply`;
31
+ }
32
+ export function expectRoomPeerReply(slug) {
33
+ return `chat-room:${slug} peer reply`;
34
+ }
35
+ export function expectRoomCallResolved(shortId) {
36
+ return `room-call:${shortId} resolved`;
37
+ }
38
+ export function expectRoomCallPending(shortId) {
39
+ return `room-call:${shortId} accept|decline`;
40
+ }
41
+ //# sourceMappingURL=comms-checkback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comms-checkback.js","sourceRoot":"","sources":["../../src/chatroom/comms-checkback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAA2B,MAAM,mBAAmB,CAAC;AAc1E,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,GAAmB,EACnB,MAAc;IAEd,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,QAAQ,EAAE,GAAG,CAAC,4BAA4B;YAC1C,KAAK,EAAE,GAAG,CAAC,yBAAyB;SACrC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC;AACxE,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAA6B;IAE7B,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,YAAY,CAAC;QAClB,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;QAC3C,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;QAClC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,OAAO;QAC3B,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,SAAS;QAC/C,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,OAAO,aAAa,QAAQ,QAAQ,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,aAAa,IAAI,aAAa,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,aAAa,OAAO,WAAW,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,aAAa,OAAO,iBAAiB,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Parse duration strings (5m, 30s, 1h) to seconds — uses `ms` package, not hand-rolled regex. */
2
+ export declare function parseDurationToSeconds(input: string): number | null;
3
+ export declare function expiresAtUtcFromDuration(duration: string): string | null;
4
+ //# sourceMappingURL=duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/chatroom/duration.ts"],"names":[],"mappings":"AAEA,kGAAkG;AAClG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMnE;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIxE"}
@@ -0,0 +1,18 @@
1
+ import ms from "ms";
2
+ /** Parse duration strings (5m, 30s, 1h) to seconds — uses `ms` package, not hand-rolled regex. */
3
+ export function parseDurationToSeconds(input) {
4
+ const raw = input.trim();
5
+ if (!raw)
6
+ return null;
7
+ const millis = ms(raw);
8
+ if (millis == null || typeof millis !== "number" || millis < 0)
9
+ return null;
10
+ return Math.round(millis / 1000);
11
+ }
12
+ export function expiresAtUtcFromDuration(duration) {
13
+ const millis = ms(duration.trim());
14
+ if (millis == null || typeof millis !== "number")
15
+ return null;
16
+ return new Date(Date.now() + millis).toISOString();
17
+ }
18
+ //# sourceMappingURL=duration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.js","sourceRoot":"","sources":["../../src/chatroom/duration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,kGAAkG;AAClG,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,MAAM,GAAG,EAAE,CAAC,GAAqB,CAAC,CAAC;IACzC,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACvD,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAoB,CAAC,CAAC;IACrD,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC9D,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AACrD,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { RoomMessageKind, RoomProfile } from "./types.js";
2
+ export type FanoutDelivery = "rich" | "thin" | "skip";
3
+ export interface FanoutRoutingInput {
4
+ targetId: string;
5
+ from: string;
6
+ kind: RoomMessageKind;
7
+ body: string;
8
+ profile: RoomProfile;
9
+ /** Contract room with explicit members; global passes null profile members. */
10
+ miniGrid?: string;
11
+ miniMax?: number;
12
+ miniLeads?: number[];
13
+ }
14
+ export declare function normalizeRoomAgentId(id: string): string;
15
+ /** Global room default audience: coord panes only — workers opt in via @mention. */
16
+ export declare function buildGlobalRoomAudience(miniMax: number): Set<string>;
17
+ export declare function isSubstanceRoomMessage(kind: RoomMessageKind, body: string): boolean;
18
+ /** ACK / standing-by / test noise — not manager or secretary inbox. */
19
+ export declare function isAckOrNoise(body: string, kind: RoomMessageKind): boolean;
20
+ /** Row lead for a mini in a 4x2 (leads-left) grid — e.g. mini-7 -> mini-2. */
21
+ export declare function rowLeadForMiniId(miniId: string, grid: string, max: number, leads: number[]): string | null;
22
+ /**
23
+ * Supervise-style contract rooms: row minis -> row lead; secretary digests substance;
24
+ * manager only sees lead/supervisor substance (not row-mini ACK/test/msg).
25
+ */
26
+ export declare function resolveFanoutDelivery(input: FanoutRoutingInput): FanoutDelivery;
27
+ //# sourceMappingURL=fanout-routing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fanout-routing.d.ts","sourceRoot":"","sources":["../../src/chatroom/fanout-routing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,oFAAoF;AACpF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAMpE;AAUD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnF;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CASzE;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,GACd,MAAM,GAAG,IAAI,CAWf;AAYD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,cAAc,CAuD/E"}