@agentshouse/mdruntime 0.1.0-cbe358f60d1d3 → 0.1.0-cc00e9289ddf4

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 (297) hide show
  1. package/README.md +18 -16
  2. package/dist/acceptance.d.ts +3 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +299 -0
  5. package/dist/act-lanes.d.ts +30 -0
  6. package/dist/act-lanes.d.ts.map +1 -0
  7. package/dist/act-lanes.js +225 -0
  8. package/dist/actions.d.ts +26 -0
  9. package/dist/actions.d.ts.map +1 -0
  10. package/dist/actions.js +302 -0
  11. package/dist/adapter.d.ts +68 -72
  12. package/dist/adapter.d.ts.map +1 -1
  13. package/dist/attached-model.d.ts +3 -11
  14. package/dist/attached-model.d.ts.map +1 -1
  15. package/dist/attached-model.js +20 -60
  16. package/dist/bootstrap.d.ts +9 -5
  17. package/dist/bootstrap.d.ts.map +1 -1
  18. package/dist/bootstrap.js +204 -86
  19. package/dist/cell.d.ts +6 -0
  20. package/dist/cell.d.ts.map +1 -0
  21. package/dist/cell.js +9 -0
  22. package/dist/change-set.d.ts +4 -0
  23. package/dist/change-set.d.ts.map +1 -1
  24. package/dist/change-set.js +6 -0
  25. package/dist/change.d.ts +1 -0
  26. package/dist/change.d.ts.map +1 -1
  27. package/dist/change.js +4 -2
  28. package/dist/chat-types.d.ts +3 -0
  29. package/dist/chat-types.d.ts.map +1 -0
  30. package/dist/chat-types.js +11 -0
  31. package/dist/client.d.ts +23 -20
  32. package/dist/client.d.ts.map +1 -1
  33. package/dist/client.js +34 -19
  34. package/dist/collection.d.ts +22 -4
  35. package/dist/collection.d.ts.map +1 -1
  36. package/dist/collection.js +12 -2
  37. package/dist/compile.d.ts +7 -0
  38. package/dist/compile.d.ts.map +1 -1
  39. package/dist/compile.js +216 -78
  40. package/dist/connection.d.ts +5 -143
  41. package/dist/connection.d.ts.map +1 -1
  42. package/dist/connection.js +110 -5026
  43. package/dist/conversation-live.d.ts +150 -0
  44. package/dist/conversation-live.d.ts.map +1 -0
  45. package/dist/conversation-live.js +259 -0
  46. package/dist/conversation-row.d.ts +35 -0
  47. package/dist/conversation-row.d.ts.map +1 -0
  48. package/dist/conversation-row.js +55 -0
  49. package/dist/conversation.d.ts +56 -41
  50. package/dist/conversation.d.ts.map +1 -1
  51. package/dist/conversation.js +981 -881
  52. package/dist/declaration.d.ts +10 -0
  53. package/dist/declaration.d.ts.map +1 -0
  54. package/dist/declaration.js +24 -0
  55. package/dist/discovery.d.ts +10 -0
  56. package/dist/discovery.d.ts.map +1 -0
  57. package/dist/discovery.js +150 -0
  58. package/dist/durability.d.ts +13 -0
  59. package/dist/durability.d.ts.map +1 -1
  60. package/dist/durability.js +4 -0
  61. package/dist/entry.d.ts.map +1 -1
  62. package/dist/entry.js +5 -3
  63. package/dist/expectation.d.ts +26 -13
  64. package/dist/expectation.d.ts.map +1 -1
  65. package/dist/expectation.js +72 -19
  66. package/dist/failure.d.ts +3 -0
  67. package/dist/failure.d.ts.map +1 -1
  68. package/dist/failure.js +6 -0
  69. package/dist/figures.d.ts +49 -0
  70. package/dist/figures.d.ts.map +1 -0
  71. package/dist/figures.js +199 -0
  72. package/dist/file.d.ts.map +1 -1
  73. package/dist/file.js +2 -1
  74. package/dist/holdings.d.ts +29 -0
  75. package/dist/holdings.d.ts.map +1 -0
  76. package/dist/holdings.js +95 -0
  77. package/dist/host.d.ts +19 -2
  78. package/dist/host.d.ts.map +1 -1
  79. package/dist/host.js +62 -19
  80. package/dist/index.d.ts +30 -11
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +14 -5
  83. package/dist/install.d.ts +60 -0
  84. package/dist/install.d.ts.map +1 -0
  85. package/dist/install.js +537 -0
  86. package/dist/lifecycle.d.ts +7 -0
  87. package/dist/lifecycle.d.ts.map +1 -0
  88. package/dist/lifecycle.js +278 -0
  89. package/dist/listing.d.ts +52 -0
  90. package/dist/listing.d.ts.map +1 -0
  91. package/dist/listing.js +152 -0
  92. package/dist/live.d.ts +8 -6
  93. package/dist/live.d.ts.map +1 -1
  94. package/dist/live.js +110 -31
  95. package/dist/locks.d.ts +7 -0
  96. package/dist/locks.d.ts.map +1 -0
  97. package/dist/locks.js +32 -0
  98. package/dist/lost.d.ts +5 -0
  99. package/dist/lost.d.ts.map +1 -0
  100. package/dist/lost.js +49 -0
  101. package/dist/media.d.ts +1 -1
  102. package/dist/media.d.ts.map +1 -1
  103. package/dist/media.js +10 -13
  104. package/dist/memory.d.ts +9 -3
  105. package/dist/memory.d.ts.map +1 -1
  106. package/dist/memory.js +97 -27
  107. package/dist/messages.d.ts +33 -3
  108. package/dist/messages.d.ts.map +1 -1
  109. package/dist/messages.js +95 -22
  110. package/dist/model.d.ts +1 -8
  111. package/dist/model.d.ts.map +1 -1
  112. package/dist/model.js +0 -11
  113. package/dist/models.d.ts +10 -0
  114. package/dist/models.d.ts.map +1 -0
  115. package/dist/models.js +153 -0
  116. package/dist/observation.d.ts +27 -12
  117. package/dist/observation.d.ts.map +1 -1
  118. package/dist/observation.js +184 -85
  119. package/dist/opened.d.ts +1 -1
  120. package/dist/opened.d.ts.map +1 -1
  121. package/dist/opened.js +5 -5
  122. package/dist/opening.d.ts +4 -0
  123. package/dist/opening.d.ts.map +1 -0
  124. package/dist/opening.js +53 -0
  125. package/dist/outcome.d.ts +11 -1
  126. package/dist/outcome.d.ts.map +1 -1
  127. package/dist/outcome.js +26 -2
  128. package/dist/overlay.d.ts +6 -1
  129. package/dist/overlay.d.ts.map +1 -1
  130. package/dist/overlay.js +47 -21
  131. package/dist/page-metadata.d.ts +8 -0
  132. package/dist/page-metadata.d.ts.map +1 -0
  133. package/dist/page-metadata.js +19 -0
  134. package/dist/parts.d.ts +4 -0
  135. package/dist/parts.d.ts.map +1 -0
  136. package/dist/parts.js +13 -0
  137. package/dist/paths.d.ts +1 -0
  138. package/dist/paths.d.ts.map +1 -1
  139. package/dist/paths.js +22 -0
  140. package/dist/preparation.d.ts +41 -0
  141. package/dist/preparation.d.ts.map +1 -0
  142. package/dist/preparation.js +314 -0
  143. package/dist/presence.d.ts +58 -0
  144. package/dist/presence.d.ts.map +1 -0
  145. package/dist/presence.js +233 -0
  146. package/dist/queries.d.ts +16 -0
  147. package/dist/queries.d.ts.map +1 -0
  148. package/dist/queries.js +308 -0
  149. package/dist/query.d.ts +10 -1
  150. package/dist/query.d.ts.map +1 -1
  151. package/dist/questions.d.ts +29 -0
  152. package/dist/questions.d.ts.map +1 -0
  153. package/dist/questions.js +115 -0
  154. package/dist/queue.d.ts +40 -0
  155. package/dist/queue.d.ts.map +1 -0
  156. package/dist/queue.js +450 -0
  157. package/dist/reach.d.ts +9 -8
  158. package/dist/reach.d.ts.map +1 -1
  159. package/dist/reach.js +223 -111
  160. package/dist/react.d.ts +14 -2
  161. package/dist/react.d.ts.map +1 -1
  162. package/dist/react.js +33 -1
  163. package/dist/read.d.ts +7 -0
  164. package/dist/read.d.ts.map +1 -0
  165. package/dist/read.js +17 -0
  166. package/dist/readiness.d.ts +9 -4
  167. package/dist/readiness.d.ts.map +1 -1
  168. package/dist/readiness.js +3 -5
  169. package/dist/reads.d.ts +39 -0
  170. package/dist/reads.d.ts.map +1 -0
  171. package/dist/reads.js +178 -0
  172. package/dist/recovery.d.ts +3 -1
  173. package/dist/recovery.d.ts.map +1 -1
  174. package/dist/recovery.js +38 -8
  175. package/dist/refresh.d.ts +1 -1
  176. package/dist/refresh.d.ts.map +1 -1
  177. package/dist/refresh.js +9 -2
  178. package/dist/refusal.d.ts +5 -0
  179. package/dist/refusal.d.ts.map +1 -0
  180. package/dist/refusal.js +55 -0
  181. package/dist/replica.d.ts +10 -16
  182. package/dist/replica.d.ts.map +1 -1
  183. package/dist/replica.js +63 -30
  184. package/dist/retried.d.ts +30 -0
  185. package/dist/retried.d.ts.map +1 -0
  186. package/dist/retried.js +72 -0
  187. package/dist/room-draft.d.ts +4 -6
  188. package/dist/room-draft.d.ts.map +1 -1
  189. package/dist/room-draft.js +48 -59
  190. package/dist/room-drafts.d.ts +24 -0
  191. package/dist/room-drafts.d.ts.map +1 -0
  192. package/dist/room-drafts.js +217 -0
  193. package/dist/rows.d.ts +15 -4
  194. package/dist/rows.d.ts.map +1 -1
  195. package/dist/rows.js +54 -55
  196. package/dist/runtime.d.ts +34 -0
  197. package/dist/runtime.d.ts.map +1 -0
  198. package/dist/runtime.js +1 -0
  199. package/dist/save.d.ts +42 -86
  200. package/dist/save.d.ts.map +1 -1
  201. package/dist/save.js +339 -166
  202. package/dist/saves.d.ts +32 -0
  203. package/dist/saves.d.ts.map +1 -0
  204. package/dist/saves.js +410 -0
  205. package/dist/seed.d.ts +11 -2
  206. package/dist/seed.d.ts.map +1 -1
  207. package/dist/seed.js +71 -1
  208. package/dist/shared.d.ts +1 -6
  209. package/dist/shared.d.ts.map +1 -1
  210. package/dist/shared.js +13 -95
  211. package/dist/shown.d.ts +33 -0
  212. package/dist/shown.d.ts.map +1 -0
  213. package/dist/shown.js +309 -0
  214. package/dist/socket/admission.d.ts +7 -0
  215. package/dist/socket/admission.d.ts.map +1 -0
  216. package/dist/socket/admission.js +39 -0
  217. package/dist/socket/answers.d.ts +6 -0
  218. package/dist/socket/answers.d.ts.map +1 -0
  219. package/dist/socket/answers.js +20 -0
  220. package/dist/socket/lanes.d.ts +28 -0
  221. package/dist/socket/lanes.d.ts.map +1 -0
  222. package/dist/socket/lanes.js +103 -0
  223. package/dist/socket/reads.d.ts +10 -0
  224. package/dist/socket/reads.d.ts.map +1 -0
  225. package/dist/socket/reads.js +31 -0
  226. package/dist/socket/session.d.ts +38 -0
  227. package/dist/socket/session.d.ts.map +1 -0
  228. package/dist/socket/session.js +23 -0
  229. package/dist/socket.d.ts +67 -0
  230. package/dist/socket.d.ts.map +1 -0
  231. package/dist/socket.js +164 -0
  232. package/dist/source.d.ts +54 -0
  233. package/dist/source.d.ts.map +1 -0
  234. package/dist/source.js +82 -0
  235. package/dist/status.d.ts +0 -2
  236. package/dist/status.d.ts.map +1 -1
  237. package/dist/status.js +0 -6
  238. package/dist/store/installs.d.ts +30 -0
  239. package/dist/store/installs.d.ts.map +1 -0
  240. package/dist/store/installs.js +40 -0
  241. package/dist/store/readiness.d.ts +11 -0
  242. package/dist/store/readiness.d.ts.map +1 -0
  243. package/dist/store/readiness.js +68 -0
  244. package/dist/store/records.d.ts +217 -0
  245. package/dist/store/records.d.ts.map +1 -0
  246. package/dist/store/records.js +464 -0
  247. package/dist/store/room-held.d.ts +8 -0
  248. package/dist/store/room-held.d.ts.map +1 -0
  249. package/dist/store/room-held.js +17 -0
  250. package/dist/store/rooms-shown.d.ts +8 -0
  251. package/dist/store/rooms-shown.d.ts.map +1 -0
  252. package/dist/store/rooms-shown.js +13 -0
  253. package/dist/store/space.d.ts +11 -0
  254. package/dist/store/space.d.ts.map +1 -0
  255. package/dist/store/space.js +41 -0
  256. package/dist/store/watchers.d.ts +17 -0
  257. package/dist/store/watchers.d.ts.map +1 -0
  258. package/dist/store/watchers.js +56 -0
  259. package/dist/store/writes.d.ts +24 -0
  260. package/dist/store/writes.d.ts.map +1 -0
  261. package/dist/store/writes.js +125 -0
  262. package/dist/store.d.ts +113 -142
  263. package/dist/store.d.ts.map +1 -1
  264. package/dist/store.js +171 -360
  265. package/dist/stored.d.ts +72 -34
  266. package/dist/stored.d.ts.map +1 -1
  267. package/dist/stored.js +316 -106
  268. package/dist/surface.d.ts +89 -0
  269. package/dist/surface.d.ts.map +1 -0
  270. package/dist/surface.js +222 -0
  271. package/dist/sync.d.ts +19 -0
  272. package/dist/sync.d.ts.map +1 -0
  273. package/dist/sync.js +535 -0
  274. package/dist/tables.d.ts +116 -25
  275. package/dist/tables.d.ts.map +1 -1
  276. package/dist/tables.js +222 -51
  277. package/dist/tallies.d.ts +18 -0
  278. package/dist/tallies.d.ts.map +1 -0
  279. package/dist/tallies.js +128 -0
  280. package/dist/validation.d.ts.map +1 -1
  281. package/dist/validation.js +5 -5
  282. package/dist/wire.d.ts +52 -8
  283. package/dist/wire.d.ts.map +1 -1
  284. package/dist/wire.js +18 -4
  285. package/package.json +3 -2
  286. package/dist/attempt.d.ts +0 -16
  287. package/dist/attempt.d.ts.map +0 -1
  288. package/dist/attempt.js +0 -70
  289. package/dist/fence.d.ts +0 -6
  290. package/dist/fence.d.ts.map +0 -1
  291. package/dist/fence.js +0 -10
  292. package/dist/job.d.ts +0 -14
  293. package/dist/job.d.ts.map +0 -1
  294. package/dist/job.js +0 -28
  295. package/dist/log.d.ts +0 -5
  296. package/dist/log.d.ts.map +0 -1
  297. package/dist/log.js +0 -14
@@ -0,0 +1,150 @@
1
+ import type { SessionState } from '@agentshouse/session-content';
2
+ import type { AcceptedMessage, ConversationAction, ConversationHistoryRequest, ConversationStream, ListedAgent, ListedConversation, ProcessCommand, SessionOption } from './adapter.js';
3
+ import { type Cell } from './cell.js';
4
+ import type { ChangeSet } from './change-set.js';
5
+ import type { Asked, ConversationAgent, ConversationEntry, ConversationView, RunningTurn } from './conversation.js';
6
+ import type { CallResult } from './outcome.js';
7
+ import type { Recovery } from './recovery.js';
8
+ import type { Attempt, Retries } from './retried.js';
9
+ import type { ChatDraftRecord, RuntimeStore } from './store.js';
10
+ export type ConversationDependencies = {
11
+ call(name: ConversationAction, input: unknown, attempt?: Attempt): Promise<CallResult>;
12
+ history(request: ConversationHistoryRequest): Promise<CallResult>;
13
+ durably<T>(work: (local: RuntimeStore) => Promise<T>): Promise<T>;
14
+ local(): Promise<RuntimeStore>;
15
+ again(): void;
16
+ settled(): void;
17
+ stream(): ConversationStream | undefined;
18
+ publish(set: ChangeSet): void;
19
+ online(): boolean;
20
+ full(): boolean;
21
+ closed(): boolean;
22
+ unanswered(): void;
23
+ heard(operation: string, lost: boolean): void;
24
+ readonly recovery: Recovery;
25
+ readonly retries: Retries;
26
+ };
27
+ export type Live = {
28
+ turn: RunningTurn | null;
29
+ questions: readonly unknown[];
30
+ process: {
31
+ running: boolean;
32
+ } | null;
33
+ commands: readonly ProcessCommand[];
34
+ options: readonly SessionOption[];
35
+ starting: string | null;
36
+ state: SessionState | null;
37
+ link: {
38
+ connected: boolean;
39
+ } | null;
40
+ deliveryWaiting: readonly string[];
41
+ deliveryUnknown: readonly string[];
42
+ };
43
+ export declare const QUIET: Live;
44
+ export type Fact = Exclude<keyof Live, 'turn'>;
45
+ export declare const FACTS: readonly Fact[];
46
+ type Watcher = {
47
+ readonly notify: (view: ConversationView) => void;
48
+ };
49
+ export type Kept = {
50
+ readonly draft: ChatDraftRecord | null;
51
+ readonly ended: string | null;
52
+ readonly dismissed: string | null;
53
+ readonly pins: readonly string[];
54
+ };
55
+ type HeldWindow = Kept & {
56
+ readonly window: readonly AcceptedMessage[] | null;
57
+ readonly more: boolean;
58
+ readonly total: number | null;
59
+ };
60
+ export type SharedView = {
61
+ readonly conversation: string;
62
+ readonly asked: Asked;
63
+ readonly held: Cell<HeldWindow>;
64
+ ready(): readonly Watcher[];
65
+ join(watcher: Watcher): void;
66
+ admit(watcher: Watcher): boolean;
67
+ leave(watcher: Watcher): boolean;
68
+ empty(): boolean;
69
+ };
70
+ type Listing<T> = (value: T) => void;
71
+ export type Audience<T> = {
72
+ waiting(): boolean;
73
+ told(): boolean;
74
+ join(watcher: Listing<T>): void;
75
+ leave(watcher: Listing<T>): void;
76
+ tell(value: T): void;
77
+ welcome(value: T): void;
78
+ clear(): void;
79
+ };
80
+ type HeldFacts = {
81
+ readonly listKnown: boolean;
82
+ readonly openingRead: boolean;
83
+ readonly openingListed: boolean;
84
+ readonly listOwed: boolean;
85
+ readonly listTelling: boolean;
86
+ readonly agentsShown: string | null;
87
+ readonly listedShown: string | null;
88
+ readonly replicated: ReadonlySet<string>;
89
+ readonly handedReplicated: string | undefined;
90
+ };
91
+ export type Dispatch = Cell<{
92
+ readonly answered: boolean;
93
+ }>;
94
+ export type Relisted = {
95
+ readonly conversations: ReadonlyMap<string, ListedConversation>;
96
+ readonly agents: ReadonlyMap<string, ListedAgent>;
97
+ };
98
+ export type LiveConversations = {
99
+ readonly deps: ConversationDependencies;
100
+ readonly held: Cell<HeldFacts>;
101
+ readonly closing: AbortSignal;
102
+ readonly listeners: Audience<readonly ConversationEntry[]>;
103
+ readonly agentListeners: Audience<readonly ConversationAgent[]>;
104
+ readonly listedListeners: Audience<readonly ListedAgent[]>;
105
+ views(): Iterable<SharedView>;
106
+ viewJoined(key: string, conversation: string, asked: Asked, notify: (view: ConversationView) => void): {
107
+ readonly view: SharedView;
108
+ readonly watcher: Watcher;
109
+ };
110
+ viewLeft(key: string, view: SharedView, watcher: Watcher): void;
111
+ liveOf(conversation: string): Live;
112
+ liveHeld(conversation: string): Live | undefined;
113
+ holdLive(conversation: string, next: Live | null): void;
114
+ factsOwed(conversation: string): void;
115
+ factsHeard(conversation: string, facts: readonly Fact[]): void;
116
+ factsTaken(): readonly (readonly [string, ReadonlySet<Fact>])[];
117
+ behind(conversation: string): boolean;
118
+ behindAll(): readonly string[];
119
+ fellBehind(conversation: string): void;
120
+ caughtUpTo(conversation: string): void;
121
+ gapOpened(conversation: string): void;
122
+ generation(conversation: string): number;
123
+ heardAt(conversation: string, change: string): void;
124
+ newestHeard(conversation: string): string | undefined;
125
+ catching(conversation: string): Promise<void> | undefined;
126
+ catchingUntil(conversation: string, ended: Promise<void>): void;
127
+ creating(conversation: string): void;
128
+ created(conversation: string): void;
129
+ isCreating(conversation: string): boolean;
130
+ relisting(): boolean;
131
+ relistBegun(): void;
132
+ relistHeard(entries: readonly ListedConversation[], agents: readonly ListedAgent[]): void;
133
+ relistDropped(conversation: string): void;
134
+ relistTaken(): Relisted | null;
135
+ sendingBegan(operation: string): Dispatch;
136
+ sendingEnded(operation: string, dispatch: Dispatch): void;
137
+ sending(operation: string): boolean;
138
+ rowSoon(tell: () => void): void;
139
+ inOrder(work: () => Promise<void>): void;
140
+ forget(conversation: string): void;
141
+ current(): boolean;
142
+ known(): boolean;
143
+ listed(): boolean;
144
+ reopened(): void;
145
+ lost(): void;
146
+ close(): void;
147
+ };
148
+ export declare function createLiveConversations(deps: ConversationDependencies): LiveConversations;
149
+ export {};
150
+ //# sourceMappingURL=conversation-live.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-live.d.ts","sourceRoot":"","sources":["../src/conversation-live.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,259 @@
1
+ import { createCell } from './cell.js';
2
+ export const QUIET = {
3
+ turn: null,
4
+ questions: [],
5
+ process: null,
6
+ commands: [],
7
+ options: [],
8
+ starting: null,
9
+ state: null,
10
+ link: null,
11
+ deliveryWaiting: [],
12
+ deliveryUnknown: [],
13
+ };
14
+ export const FACTS = [
15
+ 'questions',
16
+ 'process',
17
+ 'commands',
18
+ 'options',
19
+ 'starting',
20
+ 'state',
21
+ 'link',
22
+ 'deliveryWaiting',
23
+ 'deliveryUnknown',
24
+ ];
25
+ // A row is read at a glance and each telling clones the list to every observing tab, while a running line changes at each Kit flush.
26
+ const ROW_INTERVAL_MS = 1_000;
27
+ function createAudience() {
28
+ const told = new Set();
29
+ const waiting = new Set();
30
+ return {
31
+ waiting: () => waiting.size > 0,
32
+ told: () => told.size > 0,
33
+ join(watcher) {
34
+ waiting.add(watcher);
35
+ },
36
+ leave(watcher) {
37
+ waiting.delete(watcher);
38
+ told.delete(watcher);
39
+ },
40
+ tell(value) {
41
+ for (const watcher of told)
42
+ watcher(value);
43
+ },
44
+ welcome(value) {
45
+ for (const watcher of [...waiting]) {
46
+ waiting.delete(watcher);
47
+ told.add(watcher);
48
+ watcher(value);
49
+ }
50
+ },
51
+ clear() {
52
+ told.clear();
53
+ waiting.clear();
54
+ },
55
+ };
56
+ }
57
+ function sharedView(conversation, asked) {
58
+ const watchers = new Map();
59
+ return {
60
+ conversation,
61
+ asked,
62
+ held: createCell({
63
+ window: null,
64
+ draft: null,
65
+ ended: null,
66
+ dismissed: null,
67
+ pins: [],
68
+ more: false,
69
+ total: null,
70
+ }),
71
+ ready: () => [...watchers].filter(([, ready]) => ready).map(([watcher]) => watcher),
72
+ join(watcher) {
73
+ watchers.set(watcher, false);
74
+ },
75
+ admit(watcher) {
76
+ if (!watchers.has(watcher))
77
+ return false;
78
+ watchers.set(watcher, true);
79
+ return true;
80
+ },
81
+ leave: (watcher) => watchers.delete(watcher),
82
+ empty: () => watchers.size === 0,
83
+ };
84
+ }
85
+ export function createLiveConversations(deps) {
86
+ const sending = new Map();
87
+ const behind = new Set();
88
+ const catching = new Map();
89
+ const gaps = new Map();
90
+ const lives = new Map();
91
+ const unsent = new Map();
92
+ const views = new Map();
93
+ const heardNewest = new Map();
94
+ const creations = new Set();
95
+ const closing = new AbortController();
96
+ const listeners = createAudience();
97
+ const agentListeners = createAudience();
98
+ const listedListeners = createAudience();
99
+ const held = createCell({
100
+ listKnown: false,
101
+ openingRead: false,
102
+ openingListed: false,
103
+ listOwed: false,
104
+ listTelling: false,
105
+ agentsShown: null,
106
+ listedShown: null,
107
+ replicated: new Set(),
108
+ handedReplicated: undefined,
109
+ });
110
+ let relisting = null;
111
+ let rowTimer = null;
112
+ let ordered = Promise.resolve();
113
+ return {
114
+ deps,
115
+ held,
116
+ closing: closing.signal,
117
+ listeners,
118
+ agentListeners,
119
+ listedListeners,
120
+ views: () => views.values(),
121
+ viewJoined(key, conversation, asked, notify) {
122
+ const view = views.get(key) ?? sharedView(conversation, asked);
123
+ views.set(key, view);
124
+ const watcher = { notify };
125
+ view.join(watcher);
126
+ return { view, watcher };
127
+ },
128
+ viewLeft(key, view, watcher) {
129
+ if (!view.leave(watcher))
130
+ return;
131
+ if (view.empty())
132
+ views.delete(key);
133
+ },
134
+ liveOf: (conversation) => lives.get(conversation) ?? QUIET,
135
+ liveHeld: (conversation) => lives.get(conversation),
136
+ holdLive(conversation, next) {
137
+ if (next === null)
138
+ lives.delete(conversation);
139
+ else
140
+ lives.set(conversation, next);
141
+ },
142
+ factsOwed(conversation) {
143
+ unsent.set(conversation, new Set(FACTS));
144
+ },
145
+ factsHeard(conversation, facts) {
146
+ const owed = unsent.get(conversation);
147
+ for (const fact of facts)
148
+ owed?.delete(fact);
149
+ },
150
+ factsTaken() {
151
+ const owed = [...unsent];
152
+ unsent.clear();
153
+ return owed;
154
+ },
155
+ behind: (conversation) => behind.has(conversation),
156
+ behindAll: () => [...behind],
157
+ fellBehind(conversation) {
158
+ behind.add(conversation);
159
+ },
160
+ caughtUpTo(conversation) {
161
+ behind.delete(conversation);
162
+ },
163
+ gapOpened(conversation) {
164
+ gaps.set(conversation, (gaps.get(conversation) ?? 0) + 1);
165
+ behind.add(conversation);
166
+ },
167
+ generation: (conversation) => gaps.get(conversation) ?? 0,
168
+ heardAt(conversation, change) {
169
+ const heard = heardNewest.get(conversation);
170
+ if (heard === undefined || change > heard)
171
+ heardNewest.set(conversation, change);
172
+ },
173
+ newestHeard: (conversation) => heardNewest.get(conversation),
174
+ catching: (conversation) => catching.get(conversation),
175
+ catchingUntil(conversation, ended) {
176
+ catching.set(conversation, ended);
177
+ void ended.then(() => {
178
+ if (catching.get(conversation) === ended)
179
+ catching.delete(conversation);
180
+ });
181
+ },
182
+ creating(conversation) {
183
+ creations.add(conversation);
184
+ },
185
+ created(conversation) {
186
+ creations.delete(conversation);
187
+ },
188
+ isCreating: (conversation) => creations.has(conversation),
189
+ relisting: () => relisting !== null,
190
+ relistBegun() {
191
+ relisting ??= { conversations: new Map(), agents: new Map() };
192
+ },
193
+ relistHeard(entries, agents) {
194
+ for (const entry of entries)
195
+ relisting?.conversations.set(entry.conversation, { ...entry });
196
+ for (const agent of agents)
197
+ relisting?.agents.set(agent.id, { ...agent });
198
+ },
199
+ relistDropped(conversation) {
200
+ relisting?.conversations.delete(conversation);
201
+ },
202
+ relistTaken() {
203
+ const whole = relisting;
204
+ relisting = null;
205
+ return whole;
206
+ },
207
+ sendingBegan(operation) {
208
+ const dispatch = createCell({ answered: false });
209
+ sending.set(operation, dispatch);
210
+ return dispatch;
211
+ },
212
+ sendingEnded(operation, dispatch) {
213
+ if (sending.get(operation) === dispatch)
214
+ sending.delete(operation);
215
+ },
216
+ sending: (operation) => sending.has(operation),
217
+ rowSoon(tell) {
218
+ if (rowTimer !== null)
219
+ return;
220
+ rowTimer = setTimeout(() => {
221
+ rowTimer = null;
222
+ tell();
223
+ }, ROW_INTERVAL_MS);
224
+ },
225
+ inOrder(work) {
226
+ ordered = ordered.then(work);
227
+ },
228
+ forget(conversation) {
229
+ behind.delete(conversation);
230
+ heardNewest.delete(conversation);
231
+ unsent.delete(conversation);
232
+ },
233
+ current: () => behind.size === 0,
234
+ known: () => held.now().listKnown,
235
+ listed: () => deps.stream() === undefined || held.now().openingListed,
236
+ reopened() {
237
+ relisting = null;
238
+ held.set({ openingRead: false, openingListed: false });
239
+ for (const [operation, dispatch] of sending)
240
+ if (!dispatch.now().answered)
241
+ sending.delete(operation);
242
+ },
243
+ lost() {
244
+ catching.clear();
245
+ },
246
+ close() {
247
+ closing.abort();
248
+ if (rowTimer !== null)
249
+ clearTimeout(rowTimer);
250
+ rowTimer = null;
251
+ views.clear();
252
+ lives.clear();
253
+ unsent.clear();
254
+ listeners.clear();
255
+ agentListeners.clear();
256
+ listedListeners.clear();
257
+ },
258
+ };
259
+ }
@@ -0,0 +1,35 @@
1
+ import type { HeldRow } from './messages.js';
2
+ import { type HouseSource } from './source.js';
3
+ export type ConversationLast = {
4
+ readonly text: string;
5
+ readonly by: 'owner' | 'agent' | 'house';
6
+ readonly at: string;
7
+ };
8
+ export type ConversationStart = Extract<HouseSource, {
9
+ readonly kind: 'request' | 'trigger';
10
+ }>;
11
+ export type ConversationAsk = {
12
+ readonly who: string;
13
+ readonly agent: string | null;
14
+ readonly room: {
15
+ readonly ref: string;
16
+ readonly name: string;
17
+ };
18
+ readonly prompt: string;
19
+ readonly at: string;
20
+ readonly request: string;
21
+ readonly message?: string;
22
+ };
23
+ export type ConversationHeld = {
24
+ readonly last: ConversationLast | null;
25
+ readonly answered: string | null;
26
+ readonly opened: string | null;
27
+ readonly failure: string | null;
28
+ readonly startedBy: ConversationStart | null;
29
+ readonly asks: ConversationAsk | null;
30
+ };
31
+ export declare function heldFacts(held: HeldRow | undefined, listed: {
32
+ readonly outcome: string | null;
33
+ readonly waiting: boolean;
34
+ }): ConversationHeld;
35
+ //# sourceMappingURL=conversation-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-row.d.ts","sourceRoot":"","sources":["../src/conversation-row.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,CAAC,CAAC;AAE/F,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;CACvC,CAAC;AAiDF,wBAAgB,SAAS,CACvB,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,MAAM,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACrE,gBAAgB,CAUlB"}
@@ -0,0 +1,55 @@
1
+ import { sourceOf } from './source.js';
2
+ const SPEAKERS = {
3
+ user: 'owner',
4
+ assistant: 'agent',
5
+ house: 'house',
6
+ };
7
+ function lastOf(said) {
8
+ const by = SPEAKERS[said?.role ?? ''];
9
+ return said?.at == null || by === undefined ? null : { text: said.text, by, at: said.at };
10
+ }
11
+ function startOf(opened) {
12
+ const source = opened === null ? null : sourceOf(opened.source, opened.sender);
13
+ return source?.kind === 'request' || source?.kind === 'trigger' ? source : null;
14
+ }
15
+ const HOUSE_OPENING = 3;
16
+ function requested(text) {
17
+ return text.split('\n\n').slice(HOUSE_OPENING).join('\n\n');
18
+ }
19
+ function asksOf(asking, started, waiting) {
20
+ if (asking?.at == null)
21
+ return null;
22
+ const { at, text: prompt, identity } = asking;
23
+ const source = sourceOf(asking.source, asking.sender);
24
+ if (source?.kind === 'request') {
25
+ const { requester, room, request } = source;
26
+ return waiting
27
+ ? { who: requester.name, agent: null, room, prompt: requested(prompt), at, request }
28
+ : null;
29
+ }
30
+ if (source?.kind !== 'mail' || started?.kind !== 'request')
31
+ return null;
32
+ const { owner, agent, room, request } = source;
33
+ return started.request === request
34
+ ? {
35
+ who: owner,
36
+ agent,
37
+ room: { ref: room, name: started.room.name },
38
+ prompt,
39
+ at,
40
+ request,
41
+ message: identity,
42
+ }
43
+ : null;
44
+ }
45
+ export function heldFacts(held, listed) {
46
+ const startedBy = startOf(held?.opened ?? null);
47
+ return {
48
+ last: lastOf(held?.said ?? null),
49
+ answered: held?.answered ?? null,
50
+ opened: held?.openedTurn ?? null,
51
+ failure: listed.outcome === 'failed' ? (held?.failure ?? null) : null,
52
+ startedBy,
53
+ asks: asksOf(held?.asking ?? null, startedBy, listed.waiting),
54
+ };
55
+ }
@@ -1,33 +1,43 @@
1
- import type { ConversationAction, ConversationEvent, ConversationHistoryRequest, ConversationMessage, ConversationStream, ListedConversation, ProcessCommand, RunningSubagent, SessionOption, TurnContext } from './adapter.js';
1
+ import { type Part, type SessionState } from '@agentshouse/session-content';
2
+ import type { AgentEnvironment, ConversationEvent, ConversationMessage, ListedAgent, ProcessCommand, SessionOption } from './adapter.js';
2
3
  import { type ChangeSet } from './change-set.js';
4
+ import { type LiveConversations } from './conversation-live.js';
5
+ import { type ConversationHeld } from './conversation-row.js';
3
6
  import type { Open } from './open.js';
4
7
  import { type CallResult, type Offline } from './outcome.js';
8
+ import type { ChatRequest } from './source.js';
5
9
  import type { CycleProgress } from './status.js';
6
- import type { ChatDraftRecord, HeldConversation, RuntimeStore } from './store.js';
10
+ import type { RuntimeStore } from './store.js';
7
11
  export type ConversationState = Open<'working' | 'asking' | 'idle'>;
8
- export type ConversationEntry = {
12
+ export type ConversationEntry = ConversationHeld & {
9
13
  conversation: string;
10
14
  agent: {
11
15
  identity: string;
12
16
  name: string;
17
+ retired: boolean;
13
18
  };
14
19
  name: string;
15
20
  created: string;
16
21
  finished: string | null;
17
22
  outcome: string | null;
18
23
  waiting: boolean;
24
+ subject: string | null;
19
25
  state: ConversationState;
20
26
  started: string | null;
27
+ line: string | null;
28
+ question: string | null;
29
+ asked: string | null;
21
30
  };
22
31
  export type ConversationAgent = {
23
32
  identity: string;
24
33
  name: string;
34
+ cli: string;
35
+ environment: AgentEnvironment;
25
36
  };
26
37
  export type RunningTurn = {
27
38
  turn: string;
28
39
  started: string | null;
29
- parts: readonly unknown[];
30
- context: TurnContext | null;
40
+ parts: readonly Part[];
31
41
  };
32
42
  export type ChatDraft = {
33
43
  text: string;
@@ -54,24 +64,36 @@ export type ConversationView = {
54
64
  commands: readonly ProcessCommand[];
55
65
  options: readonly SessionOption[];
56
66
  starting: string | null;
57
- subagents: readonly RunningSubagent[];
67
+ state: SessionState | null;
58
68
  link: {
59
69
  connected: boolean;
60
70
  } | null;
71
+ deliveryWaiting: readonly string[];
61
72
  deliveryUnknown: readonly string[];
62
73
  chatDraft: (ChatDraft & {
63
74
  readonly revision: string;
64
75
  }) | null;
76
+ dismissedSuggestion: string | null;
77
+ pins: readonly string[];
65
78
  };
79
+ export type RequestDecision = 'approve' | 'decline';
66
80
  export type ConversationSurface = {
67
81
  list(): Promise<readonly ConversationEntry[]>;
68
82
  read(conversation: string, options?: ConversationRead): Promise<ConversationView>;
69
83
  create(input: unknown): Promise<CallResult>;
70
84
  send(conversation: string, operation?: string, draft?: ChatDraft): Promise<CallResult | Offline>;
71
- answer(conversation: string, answer: ConversationAnswer): Promise<CallResult>;
72
- interrupt(conversation: string): Promise<CallResult>;
73
- kill(conversation: string): Promise<CallResult>;
74
- delete(conversation: string): Promise<CallResult>;
85
+ answer(conversation: string, answer: ConversationAnswer, operation: string): Promise<CallResult>;
86
+ interrupt(conversation: string, operation: string): Promise<CallResult>;
87
+ kill(conversation: string, operation: string): Promise<CallResult>;
88
+ delete(conversation: string, operation: string): Promise<CallResult>;
89
+ takeOut(conversation: string, message: string, operation: string): Promise<CallResult>;
90
+ decide(request: ChatRequest, decision: RequestDecision, operation: string): Promise<CallResult>;
91
+ rename(conversation: string, name: string, operation: string): Promise<CallResult>;
92
+ option(conversation: string, option: string, value: string | boolean, operation: string): Promise<CallResult>;
93
+ retry(conversation: string, message: string, operation: string): Promise<CallResult>;
94
+ pin(figures: readonly string[]): Promise<void>;
95
+ openTurn(conversation: string, turn: string): Promise<void>;
96
+ dismissSuggestion(conversation: string, suggestion: string): Promise<void>;
75
97
  };
76
98
  export type ConversationAnswer = {
77
99
  interaction_id: string;
@@ -80,41 +102,34 @@ export type ConversationAnswer = {
80
102
  export type ChatDraftSurface = {
81
103
  write(conversation: string, draft: ChatDraft, revision?: string): Promise<void>;
82
104
  prepend(conversation: string, draft: ChatDraft): Promise<void>;
105
+ append(conversation: string, draft: ChatDraft): Promise<void>;
83
106
  discard(conversation: string): Promise<void>;
84
107
  };
85
- export type ConversationDependencies = {
86
- call(name: ConversationAction, input: unknown): Promise<CallResult>;
87
- history(request: ConversationHistoryRequest): Promise<CallResult>;
88
- durably<T>(work: (local: RuntimeStore) => Promise<T>): Promise<T>;
89
- stream(): ConversationStream | undefined;
90
- publish(set: ChangeSet): void;
91
- online(): boolean;
92
- full(): boolean;
93
- closed(): boolean;
94
- unanswered(): void;
95
- };
96
- export type ConversationStore = {
97
- surface: ConversationSurface;
98
- chatDraft: ChatDraftSurface;
99
- hydrate(held: readonly HeldConversation[], drafts: readonly ChatDraftRecord[], list: readonly ListedConversation[] | null, cursor: string | null): void;
100
- reconcile(): Promise<void>;
101
- catchUp(progress: CycleProgress): Promise<void>;
102
- resend(progress: CycleProgress): Promise<void>;
103
- current(): boolean;
104
- known(): boolean;
105
- learned(): void;
106
- reopened(): void;
107
- lost(): void;
108
- watch(conversation: string, options: ConversationOptions, deliver: (view: ConversationView) => void): () => void;
109
- watchList(deliver: (entries: readonly ConversationEntry[]) => void): () => void;
110
- watchAgents(deliver: (agents: readonly ConversationAgent[]) => void): () => void;
111
- changed(set: ChangeSet): void;
112
- receive(event: ConversationEvent): boolean;
113
- close(): void;
114
- };
115
108
  export declare function unheldView(conversation: string): ConversationView;
116
109
  export declare const SESSION_STARTED = "Session started";
110
+ export declare const CATCHING_UP = "catching-up";
117
111
  export declare const HISTORY_CONVERSATIONS = 64;
118
112
  export declare function newChat(agent: string): string;
119
- export declare function createConversationStore(deps: ConversationDependencies): ConversationStore;
113
+ export type Asked = {
114
+ limit: number;
115
+ after: string | undefined;
116
+ before: readonly [string, string] | null;
117
+ total: boolean;
118
+ };
119
+ export declare function joinedDraft(first: string, second: string): string;
120
+ export declare function conversationsLearned(alive: LiveConversations): void;
121
+ export declare function conversationSurface(alive: LiveConversations): ConversationSurface;
122
+ export declare function chatDraftSurface(alive: LiveConversations): ChatDraftSurface;
123
+ export declare function conversationsOpened(alive: LiveConversations, local: RuntimeStore): Promise<void>;
124
+ export declare function reconcileOpening(alive: LiveConversations): Promise<void>;
125
+ export declare function reconcileConversations(alive: LiveConversations): Promise<void>;
126
+ export declare function catchUpConversations(alive: LiveConversations, progress: CycleProgress): Promise<void>;
127
+ export declare function holdsSubmission(alive: LiveConversations, operation: string): Promise<boolean>;
128
+ export declare function resendConversations(alive: LiveConversations, progress: CycleProgress): Promise<void>;
129
+ export declare function watchConversation(alive: LiveConversations, conversation: string, options: ConversationOptions, deliver: (view: ConversationView) => void): () => void;
130
+ export declare function watchConversationList(alive: LiveConversations, deliver: (entries: readonly ConversationEntry[]) => void): () => void;
131
+ export declare function watchConversationAgents(alive: LiveConversations, deliver: (agents: readonly ConversationAgent[]) => void): () => void;
132
+ export declare function watchListedAgents(alive: LiveConversations, deliver: (agents: readonly ListedAgent[]) => void): () => void;
133
+ export declare function conversationsChanged(alive: LiveConversations, set: ChangeSet): void;
134
+ export declare function receiveConversationEvent(alive: LiveConversations, event: ConversationEvent): void;
120
135
  //# sourceMappingURL=conversation.d.ts.map