@agentshouse/mdruntime 0.1.0-c97456d63baba → 0.1.0-c9873d788cfb6

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