@agentshouse/mdruntime 0.1.0-c0bed82db8d73 → 0.1.0-c0c0511ef12ee

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 (292) hide show
  1. package/README.md +3 -2
  2. package/dist/acceptance.d.ts +6 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +385 -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 +107 -71
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/attached-model.d.ts +4 -10
  11. package/dist/attached-model.d.ts.map +1 -1
  12. package/dist/attached-model.js +35 -46
  13. package/dist/bootstrap.d.ts +16 -15
  14. package/dist/bootstrap.d.ts.map +1 -1
  15. package/dist/bootstrap.js +274 -131
  16. package/dist/cell.d.ts +6 -0
  17. package/dist/cell.d.ts.map +1 -0
  18. package/dist/cell.js +9 -0
  19. package/dist/chain.d.ts +2 -1
  20. package/dist/chain.d.ts.map +1 -1
  21. package/dist/change.d.ts +1 -0
  22. package/dist/change.d.ts.map +1 -1
  23. package/dist/change.js +4 -2
  24. package/dist/chat-types.d.ts +5 -0
  25. package/dist/chat-types.d.ts.map +1 -0
  26. package/dist/chat-types.js +13 -0
  27. package/dist/client.d.ts +25 -10
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +56 -7
  30. package/dist/collection.d.ts +7 -4
  31. package/dist/collection.d.ts.map +1 -1
  32. package/dist/collection.js +24 -19
  33. package/dist/compile.d.ts +6 -6
  34. package/dist/compile.d.ts.map +1 -1
  35. package/dist/compile.js +287 -297
  36. package/dist/connection.d.ts +6 -141
  37. package/dist/connection.d.ts.map +1 -1
  38. package/dist/connection.js +103 -5016
  39. package/dist/context.d.ts +2 -0
  40. package/dist/context.d.ts.map +1 -0
  41. package/dist/context.js +7 -0
  42. package/dist/conversation-live.d.ts +136 -0
  43. package/dist/conversation-live.d.ts.map +1 -0
  44. package/dist/conversation-live.js +248 -0
  45. package/dist/conversation-row.d.ts +33 -0
  46. package/dist/conversation-row.d.ts.map +1 -0
  47. package/dist/conversation-row.js +53 -0
  48. package/dist/conversation.d.ts +41 -45
  49. package/dist/conversation.d.ts.map +1 -1
  50. package/dist/conversation.js +870 -786
  51. package/dist/discovery.d.ts +10 -0
  52. package/dist/discovery.d.ts.map +1 -0
  53. package/dist/discovery.js +175 -0
  54. package/dist/durability.d.ts +15 -1
  55. package/dist/durability.d.ts.map +1 -1
  56. package/dist/entry.d.ts +3 -2
  57. package/dist/entry.d.ts.map +1 -1
  58. package/dist/entry.js +18 -8
  59. package/dist/figures.d.ts +49 -0
  60. package/dist/figures.d.ts.map +1 -0
  61. package/dist/figures.js +197 -0
  62. package/dist/file.d.ts +2 -11
  63. package/dist/file.d.ts.map +1 -1
  64. package/dist/file.js +6 -4
  65. package/dist/holdings.d.ts +29 -0
  66. package/dist/holdings.d.ts.map +1 -0
  67. package/dist/holdings.js +95 -0
  68. package/dist/host.d.ts +4 -7
  69. package/dist/host.d.ts.map +1 -1
  70. package/dist/host.js +33 -33
  71. package/dist/identity.d.ts +0 -1
  72. package/dist/identity.d.ts.map +1 -1
  73. package/dist/identity.js +0 -3
  74. package/dist/index.d.ts +27 -10
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +8 -1
  77. package/dist/install.d.ts +56 -0
  78. package/dist/install.d.ts.map +1 -0
  79. package/dist/install.js +554 -0
  80. package/dist/job.d.ts +33 -0
  81. package/dist/job.d.ts.map +1 -0
  82. package/dist/job.js +54 -0
  83. package/dist/lifecycle.d.ts +7 -0
  84. package/dist/lifecycle.d.ts.map +1 -0
  85. package/dist/lifecycle.js +268 -0
  86. package/dist/listing.d.ts +53 -0
  87. package/dist/listing.d.ts.map +1 -0
  88. package/dist/listing.js +176 -0
  89. package/dist/live.d.ts +5 -4
  90. package/dist/live.d.ts.map +1 -1
  91. package/dist/live.js +61 -21
  92. package/dist/locks.d.ts +9 -0
  93. package/dist/locks.d.ts.map +1 -0
  94. package/dist/locks.js +61 -0
  95. package/dist/log.d.ts +1 -0
  96. package/dist/log.d.ts.map +1 -1
  97. package/dist/lost.d.ts +5 -0
  98. package/dist/lost.d.ts.map +1 -0
  99. package/dist/lost.js +61 -0
  100. package/dist/media.d.ts +8 -0
  101. package/dist/media.d.ts.map +1 -0
  102. package/dist/media.js +218 -0
  103. package/dist/memory.d.ts +13 -6
  104. package/dist/memory.d.ts.map +1 -1
  105. package/dist/memory.js +219 -91
  106. package/dist/messages.d.ts +27 -3
  107. package/dist/messages.d.ts.map +1 -1
  108. package/dist/messages.js +103 -31
  109. package/dist/model.d.ts +8 -10
  110. package/dist/model.d.ts.map +1 -1
  111. package/dist/model.js +6 -18
  112. package/dist/models.d.ts +14 -0
  113. package/dist/models.d.ts.map +1 -0
  114. package/dist/models.js +195 -0
  115. package/dist/observation.d.ts +3 -2
  116. package/dist/observation.d.ts.map +1 -1
  117. package/dist/observation.js +15 -15
  118. package/dist/opened.js +3 -3
  119. package/dist/opening.d.ts +4 -0
  120. package/dist/opening.d.ts.map +1 -0
  121. package/dist/opening.js +57 -0
  122. package/dist/outcome.d.ts +17 -6
  123. package/dist/outcome.d.ts.map +1 -1
  124. package/dist/outcome.js +19 -2
  125. package/dist/overlay.d.ts +1 -0
  126. package/dist/overlay.d.ts.map +1 -1
  127. package/dist/overlay.js +11 -0
  128. package/dist/parts.d.ts +60 -0
  129. package/dist/parts.d.ts.map +1 -0
  130. package/dist/parts.js +126 -0
  131. package/dist/paths.d.ts +2 -0
  132. package/dist/paths.d.ts.map +1 -1
  133. package/dist/paths.js +26 -0
  134. package/dist/preparation.d.ts +20 -0
  135. package/dist/preparation.d.ts.map +1 -0
  136. package/dist/preparation.js +226 -0
  137. package/dist/queries.d.ts +16 -0
  138. package/dist/queries.d.ts.map +1 -0
  139. package/dist/queries.js +272 -0
  140. package/dist/query.d.ts +18 -208
  141. package/dist/query.d.ts.map +1 -1
  142. package/dist/query.js +3 -505
  143. package/dist/questions.d.ts +34 -0
  144. package/dist/questions.d.ts.map +1 -0
  145. package/dist/questions.js +122 -0
  146. package/dist/reach.d.ts +20 -11
  147. package/dist/reach.d.ts.map +1 -1
  148. package/dist/reach.js +206 -126
  149. package/dist/react.d.ts +10 -2
  150. package/dist/react.d.ts.map +1 -1
  151. package/dist/read.d.ts +7 -0
  152. package/dist/read.d.ts.map +1 -0
  153. package/dist/read.js +17 -0
  154. package/dist/readiness.d.ts +3 -18
  155. package/dist/readiness.d.ts.map +1 -1
  156. package/dist/readiness.js +4 -10
  157. package/dist/reads.d.ts +36 -10
  158. package/dist/reads.d.ts.map +1 -1
  159. package/dist/reads.js +157 -86
  160. package/dist/recovery.d.ts +1 -0
  161. package/dist/recovery.d.ts.map +1 -1
  162. package/dist/recovery.js +35 -1
  163. package/dist/refresh.d.ts +7 -5
  164. package/dist/refresh.d.ts.map +1 -1
  165. package/dist/refresh.js +34 -10
  166. package/dist/refusal.d.ts +5 -0
  167. package/dist/refusal.d.ts.map +1 -0
  168. package/dist/refusal.js +55 -0
  169. package/dist/replica.d.ts +11 -12
  170. package/dist/replica.d.ts.map +1 -1
  171. package/dist/replica.js +56 -23
  172. package/dist/room-draft.d.ts +21 -7
  173. package/dist/room-draft.d.ts.map +1 -1
  174. package/dist/room-draft.js +101 -54
  175. package/dist/room-drafts.d.ts +24 -0
  176. package/dist/room-drafts.d.ts.map +1 -0
  177. package/dist/room-drafts.js +217 -0
  178. package/dist/rows.d.ts +18 -16
  179. package/dist/rows.d.ts.map +1 -1
  180. package/dist/rows.js +45 -153
  181. package/dist/runtime.d.ts +43 -0
  182. package/dist/runtime.d.ts.map +1 -0
  183. package/dist/runtime.js +1 -0
  184. package/dist/save.d.ts +7 -1
  185. package/dist/save.d.ts.map +1 -1
  186. package/dist/save.js +31 -24
  187. package/dist/saves.d.ts +70 -0
  188. package/dist/saves.d.ts.map +1 -0
  189. package/dist/saves.js +1005 -0
  190. package/dist/search.d.ts +12 -63
  191. package/dist/search.d.ts.map +1 -1
  192. package/dist/search.js +9 -52
  193. package/dist/seed.d.ts +11 -2
  194. package/dist/seed.d.ts.map +1 -1
  195. package/dist/seed.js +71 -1
  196. package/dist/shared.d.ts +1 -7
  197. package/dist/shared.d.ts.map +1 -1
  198. package/dist/shared.js +13 -105
  199. package/dist/shown.d.ts +31 -0
  200. package/dist/shown.d.ts.map +1 -0
  201. package/dist/shown.js +292 -0
  202. package/dist/socket/admission.d.ts +7 -0
  203. package/dist/socket/admission.d.ts.map +1 -0
  204. package/dist/socket/admission.js +39 -0
  205. package/dist/socket/answers.d.ts +6 -0
  206. package/dist/socket/answers.d.ts.map +1 -0
  207. package/dist/socket/answers.js +20 -0
  208. package/dist/socket/lanes.d.ts +20 -0
  209. package/dist/socket/lanes.d.ts.map +1 -0
  210. package/dist/socket/lanes.js +77 -0
  211. package/dist/socket/reads.d.ts +10 -0
  212. package/dist/socket/reads.d.ts.map +1 -0
  213. package/dist/socket/reads.js +31 -0
  214. package/dist/socket/rooms.d.ts +44 -0
  215. package/dist/socket/rooms.d.ts.map +1 -0
  216. package/dist/socket/rooms.js +90 -0
  217. package/dist/socket/session.d.ts +38 -0
  218. package/dist/socket/session.d.ts.map +1 -0
  219. package/dist/socket/session.js +23 -0
  220. package/dist/socket.d.ts +70 -0
  221. package/dist/socket.d.ts.map +1 -0
  222. package/dist/socket.js +175 -0
  223. package/dist/source.d.ts +61 -0
  224. package/dist/source.d.ts.map +1 -0
  225. package/dist/source.js +82 -0
  226. package/dist/status.d.ts +4 -5
  227. package/dist/status.d.ts.map +1 -1
  228. package/dist/status.js +3 -7
  229. package/dist/store/fences.d.ts +16 -0
  230. package/dist/store/fences.d.ts.map +1 -0
  231. package/dist/store/fences.js +26 -0
  232. package/dist/store/installs.d.ts +30 -0
  233. package/dist/store/installs.d.ts.map +1 -0
  234. package/dist/store/installs.js +34 -0
  235. package/dist/store/readiness.d.ts +10 -0
  236. package/dist/store/readiness.d.ts.map +1 -0
  237. package/dist/store/readiness.js +52 -0
  238. package/dist/store/records.d.ts +212 -0
  239. package/dist/store/records.d.ts.map +1 -0
  240. package/dist/store/records.js +431 -0
  241. package/dist/store/room-held.d.ts +8 -0
  242. package/dist/store/room-held.d.ts.map +1 -0
  243. package/dist/store/room-held.js +17 -0
  244. package/dist/store/space.d.ts +11 -0
  245. package/dist/store/space.d.ts.map +1 -0
  246. package/dist/store/space.js +41 -0
  247. package/dist/store/watchers.d.ts +17 -0
  248. package/dist/store/watchers.d.ts.map +1 -0
  249. package/dist/store/watchers.js +56 -0
  250. package/dist/store/writes.d.ts +24 -0
  251. package/dist/store/writes.d.ts.map +1 -0
  252. package/dist/store/writes.js +125 -0
  253. package/dist/store.d.ts +105 -158
  254. package/dist/store.d.ts.map +1 -1
  255. package/dist/store.js +143 -401
  256. package/dist/stored.d.ts +66 -55
  257. package/dist/stored.d.ts.map +1 -1
  258. package/dist/stored.js +355 -273
  259. package/dist/surface.d.ts +88 -0
  260. package/dist/surface.d.ts.map +1 -0
  261. package/dist/surface.js +223 -0
  262. package/dist/sync.d.ts +19 -0
  263. package/dist/sync.d.ts.map +1 -0
  264. package/dist/sync.js +532 -0
  265. package/dist/tables.d.ts +131 -69
  266. package/dist/tables.d.ts.map +1 -1
  267. package/dist/tables.js +221 -105
  268. package/dist/tallies.d.ts +18 -0
  269. package/dist/tallies.d.ts.map +1 -0
  270. package/dist/tallies.js +129 -0
  271. package/dist/transfer.d.ts +0 -5
  272. package/dist/transfer.d.ts.map +1 -1
  273. package/dist/validation.d.ts +3 -4
  274. package/dist/validation.d.ts.map +1 -1
  275. package/dist/validation.js +42 -100
  276. package/dist/windows.d.ts +1 -12
  277. package/dist/windows.d.ts.map +1 -1
  278. package/dist/windows.js +2 -75
  279. package/dist/wire.d.ts +25 -9
  280. package/dist/wire.d.ts.map +1 -1
  281. package/dist/wire.js +9 -2
  282. package/package.json +2 -3
  283. package/AGENTS.md +0 -312
  284. package/dist/fence.d.ts +0 -6
  285. package/dist/fence.d.ts.map +0 -1
  286. package/dist/fence.js +0 -10
  287. package/dist/fulltext.d.ts +0 -27
  288. package/dist/fulltext.d.ts.map +0 -1
  289. package/dist/fulltext.js +0 -368
  290. package/dist/words.d.ts +0 -19
  291. package/dist/words.d.ts.map +0 -1
  292. package/dist/words.js +0 -150
@@ -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,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,17 +1,19 @@
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 ChosenFile } 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;
@@ -20,6 +22,9 @@ export type ConversationEntry = {
20
22
  waiting: boolean;
21
23
  state: ConversationState;
22
24
  started: string | null;
25
+ line: string | null;
26
+ question: string | null;
27
+ asked: string | null;
23
28
  };
24
29
  export type ConversationAgent = {
25
30
  identity: string;
@@ -39,6 +44,9 @@ export type ConversationOptions = {
39
44
  after?: string;
40
45
  total?: true;
41
46
  };
47
+ export type ConversationRead = ConversationOptions & {
48
+ text?: string;
49
+ };
42
50
  export type ConversationView = {
43
51
  conversation: string;
44
52
  messages: readonly ConversationMessage[];
@@ -49,9 +57,11 @@ export type ConversationView = {
49
57
  process: {
50
58
  running: boolean;
51
59
  } | null;
60
+ processEnded: string | null;
52
61
  commands: readonly ProcessCommand[];
53
62
  options: readonly SessionOption[];
54
63
  starting: string | null;
64
+ subagents: readonly RunningSubagent[];
55
65
  link: {
56
66
  connected: boolean;
57
67
  } | null;
@@ -59,61 +69,47 @@ export type ConversationView = {
59
69
  chatDraft: (ChatDraft & {
60
70
  readonly revision: string;
61
71
  }) | null;
72
+ jobs: readonly OpenJob[];
62
73
  };
63
74
  export type ConversationSurface = {
64
75
  list(): Promise<readonly ConversationEntry[]>;
65
- read(conversation: string, options?: ConversationOptions): Promise<ConversationView>;
76
+ read(conversation: string, options?: ConversationRead): Promise<ConversationView>;
66
77
  create(input: unknown): Promise<CallResult>;
67
78
  send(conversation: string, operation?: string, draft?: ChatDraft): Promise<CallResult | Offline>;
68
- attach(room: string, file: ChosenFile): Promise<CallResult | Offline>;
69
- answer(conversation: string, answer: unknown): Promise<CallResult>;
79
+ answer(conversation: string, answer: ConversationAnswer): Promise<CallResult>;
70
80
  interrupt(conversation: string): Promise<CallResult>;
71
81
  kill(conversation: string): Promise<CallResult>;
72
- cancel(conversation: string, turn: string): Promise<CallResult>;
73
82
  delete(conversation: string): Promise<CallResult>;
74
83
  };
84
+ export type ConversationAnswer = {
85
+ interaction_id: string;
86
+ response: unknown;
87
+ };
75
88
  export type ChatDraftSurface = {
76
89
  write(conversation: string, draft: ChatDraft, revision?: string): Promise<void>;
77
90
  prepend(conversation: string, draft: ChatDraft): Promise<void>;
78
91
  discard(conversation: string): Promise<void>;
79
92
  };
80
- export type ConversationDependencies = {
81
- agents(): ConversationAgents | undefined;
82
- documents(agents: ConversationAgents, after: string | undefined): Promise<DocumentResult | PendingResult>;
83
- call(name: ConversationAction, input: unknown): Promise<CallResult>;
84
- durably<T>(work: (local: RuntimeStore) => Promise<T>): Promise<T>;
85
- stream(): ConversationStream | undefined;
86
- publish(set: ChangeSet): void;
87
- online(): boolean;
88
- full(): boolean;
89
- closed(): boolean;
90
- unanswered(): void;
91
- expired(operation: string): boolean;
92
- };
93
- export type ConversationStore = {
94
- surface: ConversationSurface;
95
- chatDraft: ChatDraftSurface;
96
- hydrate(held: readonly HeldConversation[], drafts: readonly ChatDraftRecord[]): void;
97
- reconcile(): Promise<void>;
98
- catchUp(progress: CycleProgress): Promise<void>;
99
- resend(progress: CycleProgress): Promise<void>;
100
- current(): boolean;
101
- known(): boolean;
102
- reconnected(): void;
103
- reopened(): void;
104
- lost(): void;
105
- watch(conversation: string, options: ConversationOptions, deliver: (view: ConversationView) => void): () => void;
106
- watchList(deliver: (entries: readonly ConversationEntry[]) => void): () => void;
107
- watchAgents(deliver: (agents: readonly ConversationAgent[]) => void): () => void;
108
- changed(set: ChangeSet): void;
109
- receive(event: ConversationEvent): boolean;
110
- searchable(): readonly string[];
111
- acquired(conversation: string): boolean;
112
- close(): void;
113
- };
114
93
  export declare function unheldView(conversation: string): ConversationView;
115
94
  export declare const SESSION_STARTED = "Session started";
116
95
  export declare const HISTORY_CONVERSATIONS = 64;
117
96
  export declare function newChat(agent: string): string;
118
- 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;
119
115
  //# sourceMappingURL=conversation.d.ts.map