@agentshouse/mdruntime 0.1.0-cbb8d8acc9d19 → 0.1.0-cbbae1fff01c6

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 (324) hide show
  1. package/README.md +24 -11
  2. package/dist/acceptance.d.ts +3 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +308 -0
  5. package/dist/actions.d.ts +20 -0
  6. package/dist/actions.d.ts.map +1 -0
  7. package/dist/actions.js +251 -0
  8. package/dist/adapter.d.ts +194 -90
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/attached-model.d.ts +7 -10
  11. package/dist/attached-model.d.ts.map +1 -1
  12. package/dist/attached-model.js +40 -41
  13. package/dist/attempt.d.ts +16 -0
  14. package/dist/attempt.d.ts.map +1 -0
  15. package/dist/attempt.js +70 -0
  16. package/dist/binary.d.ts +18 -0
  17. package/dist/binary.d.ts.map +1 -0
  18. package/dist/binary.js +8 -0
  19. package/dist/bootstrap.d.ts +37 -5
  20. package/dist/bootstrap.d.ts.map +1 -1
  21. package/dist/bootstrap.js +324 -52
  22. package/dist/cell.d.ts +6 -0
  23. package/dist/cell.d.ts.map +1 -0
  24. package/dist/cell.js +9 -0
  25. package/dist/chain.d.ts +12 -0
  26. package/dist/chain.d.ts.map +1 -0
  27. package/dist/chain.js +64 -0
  28. package/dist/change-set.d.ts +13 -14
  29. package/dist/change-set.d.ts.map +1 -1
  30. package/dist/change-set.js +17 -56
  31. package/dist/change.d.ts +46 -0
  32. package/dist/change.d.ts.map +1 -1
  33. package/dist/change.js +36 -0
  34. package/dist/chat-types.d.ts +5 -0
  35. package/dist/chat-types.d.ts.map +1 -0
  36. package/dist/chat-types.js +13 -0
  37. package/dist/client.d.ts +56 -18
  38. package/dist/client.d.ts.map +1 -1
  39. package/dist/client.js +164 -23
  40. package/dist/collection.d.ts +31 -14
  41. package/dist/collection.d.ts.map +1 -1
  42. package/dist/collection.js +61 -55
  43. package/dist/compile.d.ts +16 -0
  44. package/dist/compile.d.ts.map +1 -0
  45. package/dist/compile.js +711 -0
  46. package/dist/connection.d.ts +8 -104
  47. package/dist/connection.d.ts.map +1 -1
  48. package/dist/connection.js +107 -2094
  49. package/dist/context.d.ts +2 -0
  50. package/dist/context.d.ts.map +1 -0
  51. package/dist/context.js +7 -0
  52. package/dist/conversation-live.d.ts +135 -0
  53. package/dist/conversation-live.d.ts.map +1 -0
  54. package/dist/conversation-live.js +247 -0
  55. package/dist/conversation-row.d.ts +33 -0
  56. package/dist/conversation-row.d.ts.map +1 -0
  57. package/dist/conversation-row.js +53 -0
  58. package/dist/conversation.d.ts +67 -44
  59. package/dist/conversation.d.ts.map +1 -1
  60. package/dist/conversation.js +1010 -549
  61. package/dist/declaration.d.ts +10 -0
  62. package/dist/declaration.d.ts.map +1 -0
  63. package/dist/declaration.js +24 -0
  64. package/dist/digest.d.ts +7 -0
  65. package/dist/digest.d.ts.map +1 -0
  66. package/dist/digest.js +113 -0
  67. package/dist/discovery.d.ts +10 -0
  68. package/dist/discovery.d.ts.map +1 -0
  69. package/dist/discovery.js +148 -0
  70. package/dist/durability.d.ts +19 -1
  71. package/dist/durability.d.ts.map +1 -1
  72. package/dist/durability.js +5 -0
  73. package/dist/entry.d.ts +20 -0
  74. package/dist/entry.d.ts.map +1 -0
  75. package/dist/entry.js +161 -0
  76. package/dist/expectation.d.ts +23 -0
  77. package/dist/expectation.d.ts.map +1 -0
  78. package/dist/expectation.js +92 -0
  79. package/dist/failure.d.ts +14 -0
  80. package/dist/failure.d.ts.map +1 -0
  81. package/dist/failure.js +22 -0
  82. package/dist/figures.d.ts +49 -0
  83. package/dist/figures.d.ts.map +1 -0
  84. package/dist/figures.js +197 -0
  85. package/dist/file.d.ts +2 -19
  86. package/dist/file.d.ts.map +1 -1
  87. package/dist/file.js +7 -122
  88. package/dist/holdings.d.ts +29 -0
  89. package/dist/holdings.d.ts.map +1 -0
  90. package/dist/holdings.js +95 -0
  91. package/dist/host.d.ts +28 -4
  92. package/dist/host.d.ts.map +1 -1
  93. package/dist/host.js +149 -27
  94. package/dist/identity.d.ts +3 -0
  95. package/dist/identity.d.ts.map +1 -1
  96. package/dist/identity.js +13 -1
  97. package/dist/index.d.ts +40 -10
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +17 -0
  100. package/dist/install.d.ts +54 -0
  101. package/dist/install.d.ts.map +1 -0
  102. package/dist/install.js +538 -0
  103. package/dist/job.d.ts +5 -0
  104. package/dist/job.d.ts.map +1 -0
  105. package/dist/job.js +7 -0
  106. package/dist/lifecycle.d.ts +7 -0
  107. package/dist/lifecycle.d.ts.map +1 -0
  108. package/dist/lifecycle.js +272 -0
  109. package/dist/listing.d.ts +48 -0
  110. package/dist/listing.d.ts.map +1 -0
  111. package/dist/listing.js +139 -0
  112. package/dist/live.d.ts +23 -0
  113. package/dist/live.d.ts.map +1 -0
  114. package/dist/live.js +165 -0
  115. package/dist/locks.d.ts +7 -0
  116. package/dist/locks.d.ts.map +1 -0
  117. package/dist/locks.js +33 -0
  118. package/dist/log.d.ts +1 -0
  119. package/dist/log.d.ts.map +1 -1
  120. package/dist/lost.d.ts +5 -0
  121. package/dist/lost.d.ts.map +1 -0
  122. package/dist/lost.js +50 -0
  123. package/dist/media.d.ts +8 -0
  124. package/dist/media.d.ts.map +1 -0
  125. package/dist/media.js +218 -0
  126. package/dist/memory.d.ts +25 -8
  127. package/dist/memory.d.ts.map +1 -1
  128. package/dist/memory.js +295 -99
  129. package/dist/messages.d.ts +49 -0
  130. package/dist/messages.d.ts.map +1 -0
  131. package/dist/messages.js +148 -0
  132. package/dist/model.d.ts +13 -13
  133. package/dist/model.d.ts.map +1 -1
  134. package/dist/model.js +7 -15
  135. package/dist/models.d.ts +10 -0
  136. package/dist/models.d.ts.map +1 -0
  137. package/dist/models.js +156 -0
  138. package/dist/name.d.ts +4 -0
  139. package/dist/name.d.ts.map +1 -0
  140. package/dist/name.js +122 -0
  141. package/dist/observation.d.ts +22 -4
  142. package/dist/observation.d.ts.map +1 -1
  143. package/dist/observation.js +127 -26
  144. package/dist/open.d.ts +2 -0
  145. package/dist/open.d.ts.map +1 -0
  146. package/dist/open.js +1 -0
  147. package/dist/opened.d.ts +22 -0
  148. package/dist/opened.d.ts.map +1 -0
  149. package/dist/opened.js +107 -0
  150. package/dist/opening.d.ts +4 -0
  151. package/dist/opening.d.ts.map +1 -0
  152. package/dist/opening.js +59 -0
  153. package/dist/outcome.d.ts +75 -5
  154. package/dist/outcome.d.ts.map +1 -1
  155. package/dist/outcome.js +84 -1
  156. package/dist/overlay.d.ts +17 -5
  157. package/dist/overlay.d.ts.map +1 -1
  158. package/dist/overlay.js +168 -190
  159. package/dist/parts.d.ts +11 -0
  160. package/dist/parts.d.ts.map +1 -0
  161. package/dist/parts.js +21 -0
  162. package/dist/paths.d.ts +2 -0
  163. package/dist/paths.d.ts.map +1 -1
  164. package/dist/paths.js +26 -0
  165. package/dist/preparation.d.ts +20 -0
  166. package/dist/preparation.d.ts.map +1 -0
  167. package/dist/preparation.js +233 -0
  168. package/dist/presence.d.ts +52 -0
  169. package/dist/presence.d.ts.map +1 -0
  170. package/dist/presence.js +220 -0
  171. package/dist/queries.d.ts +16 -0
  172. package/dist/queries.d.ts.map +1 -0
  173. package/dist/queries.js +270 -0
  174. package/dist/query.d.ts +51 -181
  175. package/dist/query.d.ts.map +1 -1
  176. package/dist/query.js +3 -461
  177. package/dist/questions.d.ts +34 -0
  178. package/dist/questions.d.ts.map +1 -0
  179. package/dist/questions.js +122 -0
  180. package/dist/queue.d.ts +40 -0
  181. package/dist/queue.d.ts.map +1 -0
  182. package/dist/queue.js +455 -0
  183. package/dist/reach.d.ts +21 -5
  184. package/dist/reach.d.ts.map +1 -1
  185. package/dist/reach.js +305 -80
  186. package/dist/react.d.ts +43 -20
  187. package/dist/react.d.ts.map +1 -1
  188. package/dist/react.js +22 -21
  189. package/dist/read.d.ts +7 -0
  190. package/dist/read.d.ts.map +1 -0
  191. package/dist/read.js +17 -0
  192. package/dist/readiness.d.ts +49 -0
  193. package/dist/readiness.d.ts.map +1 -0
  194. package/dist/readiness.js +27 -0
  195. package/dist/reads.d.ts +37 -0
  196. package/dist/reads.d.ts.map +1 -0
  197. package/dist/reads.js +174 -0
  198. package/dist/recovery.d.ts +26 -0
  199. package/dist/recovery.d.ts.map +1 -0
  200. package/dist/recovery.js +232 -0
  201. package/dist/refresh.d.ts +20 -7
  202. package/dist/refresh.d.ts.map +1 -1
  203. package/dist/refresh.js +155 -59
  204. package/dist/refusal.d.ts +5 -0
  205. package/dist/refusal.d.ts.map +1 -0
  206. package/dist/refusal.js +57 -0
  207. package/dist/replica.d.ts +53 -33
  208. package/dist/replica.d.ts.map +1 -1
  209. package/dist/replica.js +361 -164
  210. package/dist/room-draft.d.ts +58 -12
  211. package/dist/room-draft.d.ts.map +1 -1
  212. package/dist/room-draft.js +270 -90
  213. package/dist/room-drafts.d.ts +24 -0
  214. package/dist/room-drafts.d.ts.map +1 -0
  215. package/dist/room-drafts.js +217 -0
  216. package/dist/rows.d.ts +32 -35
  217. package/dist/rows.d.ts.map +1 -1
  218. package/dist/rows.js +64 -124
  219. package/dist/runtime.d.ts +34 -0
  220. package/dist/runtime.d.ts.map +1 -0
  221. package/dist/runtime.js +1 -0
  222. package/dist/save.d.ts +46 -22
  223. package/dist/save.d.ts.map +1 -1
  224. package/dist/save.js +969 -171
  225. package/dist/saves.d.ts +32 -0
  226. package/dist/saves.d.ts.map +1 -0
  227. package/dist/saves.js +413 -0
  228. package/dist/search.d.ts +15 -54
  229. package/dist/search.d.ts.map +1 -1
  230. package/dist/search.js +10 -121
  231. package/dist/seed.d.ts +25 -0
  232. package/dist/seed.d.ts.map +1 -0
  233. package/dist/seed.js +145 -0
  234. package/dist/shared.d.ts +10 -0
  235. package/dist/shared.d.ts.map +1 -0
  236. package/dist/shared.js +339 -0
  237. package/dist/shown.d.ts +32 -0
  238. package/dist/shown.d.ts.map +1 -0
  239. package/dist/shown.js +290 -0
  240. package/dist/socket/admission.d.ts +7 -0
  241. package/dist/socket/admission.d.ts.map +1 -0
  242. package/dist/socket/admission.js +39 -0
  243. package/dist/socket/answers.d.ts +6 -0
  244. package/dist/socket/answers.d.ts.map +1 -0
  245. package/dist/socket/answers.js +20 -0
  246. package/dist/socket/lanes.d.ts +20 -0
  247. package/dist/socket/lanes.d.ts.map +1 -0
  248. package/dist/socket/lanes.js +77 -0
  249. package/dist/socket/reads.d.ts +10 -0
  250. package/dist/socket/reads.d.ts.map +1 -0
  251. package/dist/socket/reads.js +31 -0
  252. package/dist/socket/session.d.ts +38 -0
  253. package/dist/socket/session.d.ts.map +1 -0
  254. package/dist/socket/session.js +23 -0
  255. package/dist/socket.d.ts +67 -0
  256. package/dist/socket.d.ts.map +1 -0
  257. package/dist/socket.js +170 -0
  258. package/dist/source.d.ts +61 -0
  259. package/dist/source.d.ts.map +1 -0
  260. package/dist/source.js +82 -0
  261. package/dist/status.d.ts +7 -4
  262. package/dist/status.d.ts.map +1 -1
  263. package/dist/status.js +3 -15
  264. package/dist/store/installs.d.ts +30 -0
  265. package/dist/store/installs.d.ts.map +1 -0
  266. package/dist/store/installs.js +34 -0
  267. package/dist/store/readiness.d.ts +10 -0
  268. package/dist/store/readiness.d.ts.map +1 -0
  269. package/dist/store/readiness.js +52 -0
  270. package/dist/store/records.d.ts +210 -0
  271. package/dist/store/records.d.ts.map +1 -0
  272. package/dist/store/records.js +428 -0
  273. package/dist/store/room-held.d.ts +8 -0
  274. package/dist/store/room-held.d.ts.map +1 -0
  275. package/dist/store/room-held.js +17 -0
  276. package/dist/store/space.d.ts +11 -0
  277. package/dist/store/space.d.ts.map +1 -0
  278. package/dist/store/space.js +41 -0
  279. package/dist/store/watchers.d.ts +17 -0
  280. package/dist/store/watchers.d.ts.map +1 -0
  281. package/dist/store/watchers.js +56 -0
  282. package/dist/store/writes.d.ts +24 -0
  283. package/dist/store/writes.d.ts.map +1 -0
  284. package/dist/store/writes.js +125 -0
  285. package/dist/store.d.ts +109 -94
  286. package/dist/store.d.ts.map +1 -1
  287. package/dist/store.js +161 -384
  288. package/dist/stored.d.ts +156 -0
  289. package/dist/stored.d.ts.map +1 -0
  290. package/dist/stored.js +649 -0
  291. package/dist/surface.d.ts +88 -0
  292. package/dist/surface.d.ts.map +1 -0
  293. package/dist/surface.js +223 -0
  294. package/dist/sync.d.ts +19 -0
  295. package/dist/sync.d.ts.map +1 -0
  296. package/dist/sync.js +521 -0
  297. package/dist/tables.d.ts +412 -0
  298. package/dist/tables.d.ts.map +1 -0
  299. package/dist/tables.js +737 -0
  300. package/dist/tallies.d.ts +18 -0
  301. package/dist/tallies.d.ts.map +1 -0
  302. package/dist/tallies.js +129 -0
  303. package/dist/transfer.d.ts +0 -5
  304. package/dist/transfer.d.ts.map +1 -1
  305. package/dist/turn.d.ts +9 -0
  306. package/dist/turn.d.ts.map +1 -0
  307. package/dist/turn.js +75 -0
  308. package/dist/validation.d.ts +29 -0
  309. package/dist/validation.d.ts.map +1 -0
  310. package/dist/validation.js +104 -0
  311. package/dist/windows.d.ts +11 -0
  312. package/dist/windows.d.ts.map +1 -0
  313. package/dist/windows.js +16 -0
  314. package/dist/wire.d.ts +189 -37
  315. package/dist/wire.d.ts.map +1 -1
  316. package/dist/wire.js +77 -33
  317. package/package.json +27 -15
  318. package/AGENTS.md +0 -244
  319. package/dist/attachment.d.ts +0 -3
  320. package/dist/attachment.d.ts.map +0 -1
  321. package/dist/attachment.js +0 -8
  322. package/dist/read-side.d.ts +0 -18
  323. package/dist/read-side.d.ts.map +0 -1
  324. package/dist/read-side.js +0 -433
@@ -0,0 +1,2 @@
1
+ export declare function contextFigure(tokens: number): string;
2
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIpD"}
@@ -0,0 +1,7 @@
1
+ export function contextFigure(tokens) {
2
+ if (tokens >= 1_000_000)
3
+ return `${(tokens / 1_000_000).toFixed(1).replace(/\.0$/, '')}M`;
4
+ if (tokens >= 1_000)
5
+ return `${Math.round(tokens / 1_000)}k`;
6
+ return String(tokens);
7
+ }
@@ -0,0 +1,135 @@
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 { ChatDraftRecord, RuntimeStore } from './store.js';
9
+ export type ConversationDependencies = {
10
+ call(name: ConversationAction, input: unknown): Promise<CallResult>;
11
+ history(request: ConversationHistoryRequest): Promise<CallResult>;
12
+ durably<T>(work: (local: RuntimeStore) => Promise<T>): Promise<T>;
13
+ local(): Promise<RuntimeStore>;
14
+ again(): void;
15
+ settled(): void;
16
+ stream(): ConversationStream | undefined;
17
+ publish(set: ChangeSet): void;
18
+ online(): boolean;
19
+ full(): boolean;
20
+ closed(): boolean;
21
+ unanswered(): void;
22
+ readonly recovery: Recovery;
23
+ };
24
+ export type Live = {
25
+ turn: RunningTurn | null;
26
+ questions: readonly unknown[];
27
+ process: {
28
+ running: boolean;
29
+ } | null;
30
+ commands: readonly ProcessCommand[];
31
+ options: readonly SessionOption[];
32
+ starting: string | null;
33
+ state: SessionState | null;
34
+ link: {
35
+ connected: boolean;
36
+ } | null;
37
+ deliveryUnknown: readonly string[];
38
+ };
39
+ export declare const QUIET: Live;
40
+ export type Fact = Exclude<keyof Live, 'turn'>;
41
+ export declare const FACTS: readonly Fact[];
42
+ type Watcher = {
43
+ readonly notify: (view: ConversationView) => void;
44
+ };
45
+ type HeldWindow = {
46
+ readonly window: readonly AcceptedMessage[] | null;
47
+ readonly draft: ChatDraftRecord | null;
48
+ readonly ended: string | null;
49
+ readonly more: boolean;
50
+ readonly total: number | null;
51
+ };
52
+ export type SharedView = {
53
+ readonly conversation: string;
54
+ readonly asked: Asked;
55
+ readonly held: Cell<HeldWindow>;
56
+ ready(): readonly Watcher[];
57
+ join(watcher: Watcher): void;
58
+ admit(watcher: Watcher): boolean;
59
+ leave(watcher: Watcher): boolean;
60
+ empty(): boolean;
61
+ };
62
+ type Listing<T> = (value: T) => void;
63
+ export type Audience<T> = {
64
+ waiting(): boolean;
65
+ told(): boolean;
66
+ join(watcher: Listing<T>): void;
67
+ leave(watcher: Listing<T>): void;
68
+ tell(value: T): void;
69
+ welcome(value: T): void;
70
+ clear(): void;
71
+ };
72
+ type HeldFacts = {
73
+ readonly listKnown: boolean;
74
+ readonly listOwed: boolean;
75
+ readonly listTelling: boolean;
76
+ readonly agentsShown: string | null;
77
+ readonly listedAgents: readonly ListedAgent[] | null;
78
+ readonly agentsReading: boolean;
79
+ readonly replicated: ReadonlySet<string>;
80
+ readonly handedReplicated: string | undefined;
81
+ };
82
+ export type Dispatch = Cell<{
83
+ readonly answered: boolean;
84
+ }>;
85
+ export type LiveConversations = {
86
+ readonly deps: ConversationDependencies;
87
+ readonly held: Cell<HeldFacts>;
88
+ readonly closing: AbortSignal;
89
+ readonly listeners: Audience<readonly ConversationEntry[]>;
90
+ readonly agentListeners: Audience<readonly ConversationAgent[]>;
91
+ views(): Iterable<SharedView>;
92
+ viewJoined(key: string, conversation: string, asked: Asked, notify: (view: ConversationView) => void): {
93
+ readonly view: SharedView;
94
+ readonly watcher: Watcher;
95
+ };
96
+ viewLeft(key: string, view: SharedView, watcher: Watcher): void;
97
+ liveOf(conversation: string): Live;
98
+ liveHeld(conversation: string): Live | undefined;
99
+ holdLive(conversation: string, next: Live | null): void;
100
+ factsOwed(conversation: string): void;
101
+ factsHeard(conversation: string, facts: readonly Fact[]): void;
102
+ factsTaken(): readonly (readonly [string, ReadonlySet<Fact>])[];
103
+ behind(conversation: string): boolean;
104
+ behindAll(): readonly string[];
105
+ fellBehind(conversation: string): void;
106
+ caughtUpTo(conversation: string): void;
107
+ gapOpened(conversation: string): void;
108
+ generation(conversation: string): number;
109
+ heardAt(conversation: string, position: string): void;
110
+ newestHeard(conversation: string): string | undefined;
111
+ catching(conversation: string): Promise<void> | undefined;
112
+ catchingUntil(conversation: string, ended: Promise<void>): void;
113
+ creating(conversation: string): void;
114
+ created(conversation: string): void;
115
+ isCreating(conversation: string): boolean;
116
+ relisting(): boolean;
117
+ relistBegun(): void;
118
+ relistHeard(entries: readonly ListedConversation[]): void;
119
+ relistDropped(conversation: string): void;
120
+ relistTaken(): ReadonlyMap<string, ListedConversation> | null;
121
+ sendingBegan(operation: string): Dispatch;
122
+ sendingEnded(operation: string, dispatch: Dispatch): void;
123
+ sending(operation: string): boolean;
124
+ rowSoon(tell: () => void): void;
125
+ inOrder(work: () => Promise<void>): void;
126
+ forget(conversation: string): void;
127
+ current(): boolean;
128
+ known(): boolean;
129
+ reopened(): void;
130
+ lost(): void;
131
+ close(): void;
132
+ };
133
+ export declare function createLiveConversations(deps: ConversationDependencies): LiveConversations;
134
+ export {};
135
+ //# 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,247 @@
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
+ deliveryUnknown: [],
12
+ };
13
+ export const FACTS = [
14
+ 'questions',
15
+ 'process',
16
+ 'commands',
17
+ 'options',
18
+ 'starting',
19
+ 'state',
20
+ 'link',
21
+ 'deliveryUnknown',
22
+ ];
23
+ // 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.
24
+ const ROW_INTERVAL_MS = 1_000;
25
+ function createAudience() {
26
+ const told = new Set();
27
+ const waiting = new Set();
28
+ return {
29
+ waiting: () => waiting.size > 0,
30
+ told: () => told.size > 0,
31
+ join(watcher) {
32
+ waiting.add(watcher);
33
+ },
34
+ leave(watcher) {
35
+ waiting.delete(watcher);
36
+ told.delete(watcher);
37
+ },
38
+ tell(value) {
39
+ for (const watcher of told)
40
+ watcher(value);
41
+ },
42
+ welcome(value) {
43
+ for (const watcher of [...waiting]) {
44
+ waiting.delete(watcher);
45
+ told.add(watcher);
46
+ watcher(value);
47
+ }
48
+ },
49
+ clear() {
50
+ told.clear();
51
+ waiting.clear();
52
+ },
53
+ };
54
+ }
55
+ function sharedView(conversation, asked) {
56
+ const watchers = new Map();
57
+ return {
58
+ conversation,
59
+ asked,
60
+ held: createCell({
61
+ window: null,
62
+ draft: null,
63
+ ended: null,
64
+ more: false,
65
+ total: null,
66
+ }),
67
+ ready: () => [...watchers].filter(([, ready]) => ready).map(([watcher]) => watcher),
68
+ join(watcher) {
69
+ watchers.set(watcher, false);
70
+ },
71
+ admit(watcher) {
72
+ if (!watchers.has(watcher))
73
+ return false;
74
+ watchers.set(watcher, true);
75
+ return true;
76
+ },
77
+ leave: (watcher) => watchers.delete(watcher),
78
+ empty: () => watchers.size === 0,
79
+ };
80
+ }
81
+ export function createLiveConversations(deps) {
82
+ const sending = new Map();
83
+ const behind = new Set();
84
+ const catching = new Map();
85
+ const gaps = new Map();
86
+ const lives = new Map();
87
+ const unsent = new Map();
88
+ const views = new Map();
89
+ const heardNewest = new Map();
90
+ const creations = new Set();
91
+ const closing = new AbortController();
92
+ const listeners = createAudience();
93
+ const agentListeners = createAudience();
94
+ const held = createCell({
95
+ listKnown: false,
96
+ listOwed: false,
97
+ listTelling: false,
98
+ agentsShown: null,
99
+ listedAgents: null,
100
+ agentsReading: false,
101
+ replicated: new Set(),
102
+ handedReplicated: undefined,
103
+ });
104
+ let relisting = null;
105
+ let rowTimer = null;
106
+ let ordered = Promise.resolve();
107
+ return {
108
+ deps,
109
+ held,
110
+ closing: closing.signal,
111
+ listeners,
112
+ agentListeners,
113
+ views: () => views.values(),
114
+ viewJoined(key, conversation, asked, notify) {
115
+ const view = views.get(key) ?? sharedView(conversation, asked);
116
+ views.set(key, view);
117
+ const watcher = { notify };
118
+ view.join(watcher);
119
+ return { view, watcher };
120
+ },
121
+ viewLeft(key, view, watcher) {
122
+ if (!view.leave(watcher))
123
+ return;
124
+ if (view.empty())
125
+ views.delete(key);
126
+ },
127
+ liveOf: (conversation) => lives.get(conversation) ?? QUIET,
128
+ liveHeld: (conversation) => lives.get(conversation),
129
+ holdLive(conversation, next) {
130
+ if (next === null)
131
+ lives.delete(conversation);
132
+ else
133
+ lives.set(conversation, next);
134
+ },
135
+ factsOwed(conversation) {
136
+ unsent.set(conversation, new Set(FACTS));
137
+ },
138
+ factsHeard(conversation, facts) {
139
+ const owed = unsent.get(conversation);
140
+ for (const fact of facts)
141
+ owed?.delete(fact);
142
+ },
143
+ factsTaken() {
144
+ const owed = [...unsent];
145
+ unsent.clear();
146
+ return owed;
147
+ },
148
+ behind: (conversation) => behind.has(conversation),
149
+ behindAll: () => [...behind],
150
+ fellBehind(conversation) {
151
+ behind.add(conversation);
152
+ },
153
+ caughtUpTo(conversation) {
154
+ behind.delete(conversation);
155
+ },
156
+ gapOpened(conversation) {
157
+ gaps.set(conversation, (gaps.get(conversation) ?? 0) + 1);
158
+ behind.add(conversation);
159
+ },
160
+ generation: (conversation) => gaps.get(conversation) ?? 0,
161
+ heardAt(conversation, position) {
162
+ const heard = heardNewest.get(conversation);
163
+ if (heard === undefined || position > heard)
164
+ heardNewest.set(conversation, position);
165
+ },
166
+ newestHeard: (conversation) => heardNewest.get(conversation),
167
+ catching: (conversation) => catching.get(conversation),
168
+ catchingUntil(conversation, ended) {
169
+ catching.set(conversation, ended);
170
+ void ended.then(() => {
171
+ if (catching.get(conversation) === ended)
172
+ catching.delete(conversation);
173
+ });
174
+ },
175
+ creating(conversation) {
176
+ creations.add(conversation);
177
+ },
178
+ created(conversation) {
179
+ creations.delete(conversation);
180
+ },
181
+ isCreating: (conversation) => creations.has(conversation),
182
+ relisting: () => relisting !== null,
183
+ relistBegun() {
184
+ relisting ??= new Map();
185
+ },
186
+ relistHeard(entries) {
187
+ for (const entry of entries)
188
+ relisting?.set(entry.conversation, { ...entry });
189
+ },
190
+ relistDropped(conversation) {
191
+ relisting?.delete(conversation);
192
+ },
193
+ relistTaken() {
194
+ const whole = relisting;
195
+ relisting = null;
196
+ return whole;
197
+ },
198
+ sendingBegan(operation) {
199
+ const dispatch = createCell({ answered: false });
200
+ sending.set(operation, dispatch);
201
+ return dispatch;
202
+ },
203
+ sendingEnded(operation, dispatch) {
204
+ if (sending.get(operation) === dispatch)
205
+ sending.delete(operation);
206
+ },
207
+ sending: (operation) => sending.has(operation),
208
+ rowSoon(tell) {
209
+ if (rowTimer !== null)
210
+ return;
211
+ rowTimer = setTimeout(() => {
212
+ rowTimer = null;
213
+ tell();
214
+ }, ROW_INTERVAL_MS);
215
+ },
216
+ inOrder(work) {
217
+ ordered = ordered.then(work);
218
+ },
219
+ forget(conversation) {
220
+ behind.delete(conversation);
221
+ heardNewest.delete(conversation);
222
+ unsent.delete(conversation);
223
+ },
224
+ current: () => behind.size === 0,
225
+ known: () => held.now().listKnown,
226
+ reopened() {
227
+ relisting = null;
228
+ for (const [operation, dispatch] of sending)
229
+ if (!dispatch.now().answered)
230
+ sending.delete(operation);
231
+ },
232
+ lost() {
233
+ catching.clear();
234
+ },
235
+ close() {
236
+ closing.abort();
237
+ if (rowTimer !== null)
238
+ clearTimeout(rowTimer);
239
+ rowTimer = null;
240
+ views.clear();
241
+ lives.clear();
242
+ unsent.clear();
243
+ listeners.clear();
244
+ agentListeners.clear();
245
+ },
246
+ };
247
+ }
@@ -0,0 +1,33 @@
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 failure: string | null;
26
+ readonly startedBy: ConversationStart | null;
27
+ readonly asks: ConversationAsk | null;
28
+ };
29
+ export declare function heldFacts(held: HeldRow | undefined, listed: {
30
+ readonly outcome: string | null;
31
+ readonly waiting: boolean;
32
+ }): ConversationHeld;
33
+ //# 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,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,CAQlB"}
@@ -0,0 +1,53 @@
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
+ failure: listed.outcome === 'failed' ? (held?.failure ?? null) : null,
50
+ startedBy,
51
+ asks: asksOf(held?.asking ?? null, startedBy, listed.waiting),
52
+ };
53
+ }
@@ -1,90 +1,113 @@
1
- import type { ConversationAction, ConversationAgents, ConversationEvent, ConversationMessage, ConversationStream, ProcessCommand, SessionOption, TurnContext } from './adapter.js';
1
+ import { type Part, type SessionState } from '@agentshouse/session-content';
2
+ import type { ConversationEvent, ConversationMessage, ProcessCommand, SessionOption } from './adapter.js';
2
3
  import { type ChangeSet } from './change-set.js';
3
- import { type ChatDraftFile } from './file.js';
4
- import type { CallResult } from './outcome.js';
5
- import type { DocumentResult } from './query.js';
6
- import type { SearchedMessage } from './search.js';
4
+ import { type LiveConversations } from './conversation-live.js';
5
+ import { type ConversationHeld } from './conversation-row.js';
6
+ import type { Open } from './open.js';
7
+ import { type CallResult, type Offline } from './outcome.js';
7
8
  import type { CycleProgress } from './status.js';
8
- import type { ChatDraftRecord, HeldConversation, RuntimeStore } from './store.js';
9
- export type ConversationState = 'working' | 'asking' | 'idle';
10
- export type ConversationEntry = {
9
+ import type { RuntimeStore } from './store.js';
10
+ export type ConversationState = Open<'working' | 'asking' | 'idle'>;
11
+ export type ConversationEntry = ConversationHeld & {
11
12
  conversation: string;
12
13
  agent: {
13
14
  identity: string;
14
- name: string | null;
15
+ name: string;
16
+ retired: boolean;
15
17
  };
16
18
  name: string;
17
19
  created: string;
18
20
  finished: string | null;
19
21
  outcome: string | null;
22
+ waiting: boolean;
20
23
  state: ConversationState;
21
24
  started: string | null;
25
+ line: string | null;
26
+ question: string | null;
27
+ asked: string | null;
28
+ };
29
+ export type ConversationAgent = {
30
+ identity: string;
31
+ name: string;
22
32
  };
23
33
  export type RunningTurn = {
24
34
  turn: string;
25
35
  started: string | null;
26
- parts: readonly unknown[];
27
- context: TurnContext | null;
36
+ parts: readonly Part[];
28
37
  };
29
38
  export type ChatDraft = {
30
39
  text: string;
31
- files: readonly ChatDraftFile[];
32
40
  };
33
41
  export type ConversationOptions = {
34
42
  limit?: number;
43
+ after?: string;
44
+ total?: true;
45
+ };
46
+ export type ConversationRead = ConversationOptions & {
47
+ text?: string;
35
48
  };
36
49
  export type ConversationView = {
37
50
  conversation: string;
38
51
  messages: readonly ConversationMessage[];
52
+ next?: string;
53
+ total?: number;
39
54
  turn: RunningTurn | null;
40
55
  questions: readonly unknown[];
41
56
  process: {
42
57
  running: boolean;
43
58
  } | null;
59
+ processEnded: string | null;
44
60
  commands: readonly ProcessCommand[];
45
61
  options: readonly SessionOption[];
46
- chatDraft: ChatDraft | null;
62
+ starting: string | null;
63
+ state: SessionState | null;
64
+ link: {
65
+ connected: boolean;
66
+ } | null;
67
+ deliveryUnknown: readonly string[];
68
+ chatDraft: (ChatDraft & {
69
+ readonly revision: string;
70
+ }) | null;
47
71
  };
48
72
  export type ConversationSurface = {
49
73
  list(): Promise<readonly ConversationEntry[]>;
50
- read(conversation: string, options?: ConversationOptions): Promise<ConversationView>;
74
+ read(conversation: string, options?: ConversationRead): Promise<ConversationView>;
51
75
  create(input: unknown): Promise<CallResult>;
52
- send(conversation: string): Promise<CallResult>;
53
- answer(conversation: string, answer: unknown): Promise<CallResult>;
76
+ send(conversation: string, operation?: string, draft?: ChatDraft): Promise<CallResult | Offline>;
77
+ answer(conversation: string, answer: ConversationAnswer): Promise<CallResult>;
54
78
  interrupt(conversation: string): Promise<CallResult>;
55
79
  kill(conversation: string): Promise<CallResult>;
56
- cancel(conversation: string, turn: string): Promise<CallResult>;
57
80
  delete(conversation: string): Promise<CallResult>;
58
81
  };
82
+ export type ConversationAnswer = {
83
+ interaction_id: string;
84
+ response: unknown;
85
+ };
59
86
  export type ChatDraftSurface = {
60
- write(conversation: string, draft: ChatDraft): Promise<void>;
87
+ write(conversation: string, draft: ChatDraft, revision?: string): Promise<void>;
88
+ prepend(conversation: string, draft: ChatDraft): Promise<void>;
61
89
  discard(conversation: string): Promise<void>;
62
90
  };
63
- export type ConversationDependencies = {
64
- agents(): ConversationAgents | undefined;
65
- documents(locator: string): Promise<DocumentResult>;
66
- call(name: ConversationAction, input: unknown): Promise<CallResult>;
67
- durably<T>(work: (local: RuntimeStore) => Promise<T>): Promise<T>;
68
- stream(): ConversationStream | undefined;
69
- publish(set: ChangeSet): void;
70
- closed(): boolean;
71
- };
72
- export type ConversationStore = {
73
- surface: ConversationSurface;
74
- chatDraft: ChatDraftSurface;
75
- hydrate(held: readonly HeldConversation[], drafts: readonly ChatDraftRecord[]): void;
76
- reconcile(): Promise<void>;
77
- catchUp(progress: CycleProgress): Promise<void>;
78
- current(): boolean;
79
- reconnected(): void;
80
- watch(conversation: string, options: ConversationOptions, deliver: (view: ConversationView) => void): () => void;
81
- watchList(deliver: (entries: readonly ConversationEntry[]) => void): () => void;
82
- changed(set: ChangeSet): void;
83
- receive(event: ConversationEvent): boolean;
84
- messages(): readonly SearchedMessage[];
85
- message(conversation: string, identity: string): SearchedMessage | null;
86
- close(): void;
87
- };
88
91
  export declare function unheldView(conversation: string): ConversationView;
89
- export declare function createConversationStore(deps: ConversationDependencies): ConversationStore;
92
+ export declare const SESSION_STARTED = "Session started";
93
+ export declare const HISTORY_CONVERSATIONS = 64;
94
+ export declare function newChat(agent: string): string;
95
+ export type Asked = {
96
+ limit: number;
97
+ after: string | undefined;
98
+ before: readonly [string, string] | null;
99
+ total: boolean;
100
+ };
101
+ export declare function conversationsLearned(alive: LiveConversations): void;
102
+ export declare function conversationSurface(alive: LiveConversations): ConversationSurface;
103
+ export declare function chatDraftSurface(alive: LiveConversations): ChatDraftSurface;
104
+ export declare function conversationsOpened(alive: LiveConversations, local: RuntimeStore): Promise<void>;
105
+ export declare function reconcileConversations(alive: LiveConversations): Promise<void>;
106
+ export declare function catchUpConversations(alive: LiveConversations, progress: CycleProgress): Promise<void>;
107
+ export declare function resendConversations(alive: LiveConversations, progress: CycleProgress): Promise<void>;
108
+ export declare function watchConversation(alive: LiveConversations, conversation: string, options: ConversationOptions, deliver: (view: ConversationView) => void): () => void;
109
+ export declare function watchConversationList(alive: LiveConversations, deliver: (entries: readonly ConversationEntry[]) => void): () => void;
110
+ export declare function watchConversationAgents(alive: LiveConversations, deliver: (agents: readonly ConversationAgent[]) => void): () => void;
111
+ export declare function conversationsChanged(alive: LiveConversations, set: ChangeSet): void;
112
+ export declare function receiveConversationEvent(alive: LiveConversations, event: ConversationEvent): void;
90
113
  //# sourceMappingURL=conversation.d.ts.map