@agentshouse/mdruntime 0.1.0-cb2e390ee7b89 → 0.1.0-cb3bb3b233fa1

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 (407) hide show
  1. package/README.md +24 -19
  2. package/dist/acceptance.d.ts +3 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +299 -0
  5. package/dist/act-lanes.d.ts +30 -0
  6. package/dist/act-lanes.d.ts.map +1 -0
  7. package/dist/act-lanes.js +225 -0
  8. package/dist/actions.d.ts +26 -0
  9. package/dist/actions.d.ts.map +1 -0
  10. package/dist/actions.js +302 -0
  11. package/dist/adapter.d.ts +214 -123
  12. package/dist/adapter.d.ts.map +1 -1
  13. package/dist/attached-model.d.ts +6 -10
  14. package/dist/attached-model.d.ts.map +1 -1
  15. package/dist/attached-model.js +35 -41
  16. package/dist/authored.d.ts +88 -0
  17. package/dist/authored.d.ts.map +1 -0
  18. package/dist/authored.js +345 -0
  19. package/dist/binary.d.ts +0 -5
  20. package/dist/binary.d.ts.map +1 -1
  21. package/dist/binary.js +1 -1
  22. package/dist/bootstrap.d.ts +30 -11
  23. package/dist/bootstrap.d.ts.map +1 -1
  24. package/dist/bootstrap.js +309 -113
  25. package/dist/cell.d.ts +6 -0
  26. package/dist/cell.d.ts.map +1 -0
  27. package/dist/cell.js +9 -0
  28. package/dist/chain.d.ts +12 -0
  29. package/dist/chain.d.ts.map +1 -0
  30. package/dist/chain.js +64 -0
  31. package/dist/change-set.d.ts +13 -16
  32. package/dist/change-set.d.ts.map +1 -1
  33. package/dist/change-set.js +17 -89
  34. package/dist/change.d.ts +36 -1
  35. package/dist/change.d.ts.map +1 -1
  36. package/dist/change.js +17 -3
  37. package/dist/chat-types.d.ts +3 -0
  38. package/dist/chat-types.d.ts.map +1 -0
  39. package/dist/chat-types.js +11 -0
  40. package/dist/client.d.ts +39 -25
  41. package/dist/client.d.ts.map +1 -1
  42. package/dist/client.js +117 -23
  43. package/dist/collection.d.ts +32 -21
  44. package/dist/collection.d.ts.map +1 -1
  45. package/dist/collection.js +53 -288
  46. package/dist/column.d.ts +5 -0
  47. package/dist/column.d.ts.map +1 -0
  48. package/dist/column.js +9 -0
  49. package/dist/compile.d.ts +18 -0
  50. package/dist/compile.d.ts.map +1 -0
  51. package/dist/compile.js +723 -0
  52. package/dist/connection.d.ts +7 -134
  53. package/dist/connection.d.ts.map +1 -1
  54. package/dist/connection.js +109 -3606
  55. package/dist/context.d.ts +2 -0
  56. package/dist/context.d.ts.map +1 -0
  57. package/dist/{chat/context.js → context.js} +2 -5
  58. package/dist/conversation-live.d.ts +150 -0
  59. package/dist/conversation-live.d.ts.map +1 -0
  60. package/dist/conversation-live.js +259 -0
  61. package/dist/conversation-row.d.ts +40 -0
  62. package/dist/conversation-row.d.ts.map +1 -0
  63. package/dist/conversation-row.js +66 -0
  64. package/dist/conversation.d.ts +80 -50
  65. package/dist/conversation.d.ts.map +1 -1
  66. package/dist/conversation.js +1037 -793
  67. package/dist/declaration.d.ts +10 -0
  68. package/dist/declaration.d.ts.map +1 -0
  69. package/dist/declaration.js +24 -0
  70. package/dist/digest.d.ts +7 -0
  71. package/dist/digest.d.ts.map +1 -0
  72. package/dist/digest.js +113 -0
  73. package/dist/discovery.d.ts +10 -0
  74. package/dist/discovery.d.ts.map +1 -0
  75. package/dist/discovery.js +150 -0
  76. package/dist/durability.d.ts +20 -4
  77. package/dist/durability.d.ts.map +1 -1
  78. package/dist/durability.js +9 -0
  79. package/dist/entry.d.ts +5 -2
  80. package/dist/entry.d.ts.map +1 -1
  81. package/dist/entry.js +33 -28
  82. package/dist/expectation.d.ts +26 -13
  83. package/dist/expectation.d.ts.map +1 -1
  84. package/dist/expectation.js +72 -19
  85. package/dist/failure.d.ts +3 -0
  86. package/dist/failure.d.ts.map +1 -1
  87. package/dist/failure.js +6 -0
  88. package/dist/figures.d.ts +49 -0
  89. package/dist/figures.d.ts.map +1 -0
  90. package/dist/figures.js +199 -0
  91. package/dist/file.d.ts +2 -19
  92. package/dist/file.d.ts.map +1 -1
  93. package/dist/file.js +8 -122
  94. package/dist/holdings.d.ts +29 -0
  95. package/dist/holdings.d.ts.map +1 -0
  96. package/dist/holdings.js +95 -0
  97. package/dist/host.d.ts +21 -11
  98. package/dist/host.d.ts.map +1 -1
  99. package/dist/host.js +126 -53
  100. package/dist/identity.d.ts +0 -2
  101. package/dist/identity.d.ts.map +1 -1
  102. package/dist/identity.js +0 -6
  103. package/dist/index.d.ts +41 -16
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +19 -4
  106. package/dist/install.d.ts +60 -0
  107. package/dist/install.d.ts.map +1 -0
  108. package/dist/install.js +537 -0
  109. package/dist/lifecycle.d.ts +7 -0
  110. package/dist/lifecycle.d.ts.map +1 -0
  111. package/dist/lifecycle.js +282 -0
  112. package/dist/listing.d.ts +52 -0
  113. package/dist/listing.d.ts.map +1 -0
  114. package/dist/listing.js +152 -0
  115. package/dist/live.d.ts +25 -0
  116. package/dist/live.d.ts.map +1 -0
  117. package/dist/live.js +206 -0
  118. package/dist/loaded.d.ts +5 -0
  119. package/dist/loaded.d.ts.map +1 -0
  120. package/dist/loaded.js +40 -0
  121. package/dist/locks.d.ts +7 -0
  122. package/dist/locks.d.ts.map +1 -0
  123. package/dist/locks.js +32 -0
  124. package/dist/lost.d.ts +5 -0
  125. package/dist/lost.d.ts.map +1 -0
  126. package/dist/lost.js +49 -0
  127. package/dist/media.d.ts +13 -0
  128. package/dist/media.d.ts.map +1 -0
  129. package/dist/media.js +269 -0
  130. package/dist/memory.d.ts +20 -8
  131. package/dist/memory.d.ts.map +1 -1
  132. package/dist/memory.js +311 -121
  133. package/dist/messages.d.ts +58 -0
  134. package/dist/messages.d.ts.map +1 -0
  135. package/dist/messages.js +160 -0
  136. package/dist/model.d.ts +8 -11
  137. package/dist/model.d.ts.map +1 -1
  138. package/dist/model.js +6 -23
  139. package/dist/models.d.ts +10 -0
  140. package/dist/models.d.ts.map +1 -0
  141. package/dist/models.js +153 -0
  142. package/dist/name.d.ts +4 -0
  143. package/dist/name.d.ts.map +1 -0
  144. package/dist/name.js +122 -0
  145. package/dist/observation.d.ts +38 -10
  146. package/dist/observation.d.ts.map +1 -1
  147. package/dist/observation.js +232 -44
  148. package/dist/opened.d.ts +22 -0
  149. package/dist/opened.d.ts.map +1 -0
  150. package/dist/opened.js +107 -0
  151. package/dist/opening.d.ts +4 -0
  152. package/dist/opening.d.ts.map +1 -0
  153. package/dist/opening.js +53 -0
  154. package/dist/outcome.d.ts +57 -10
  155. package/dist/outcome.d.ts.map +1 -1
  156. package/dist/outcome.js +71 -2
  157. package/dist/overlay.d.ts +8 -6
  158. package/dist/overlay.d.ts.map +1 -1
  159. package/dist/overlay.js +121 -182
  160. package/dist/page-metadata.d.ts +8 -0
  161. package/dist/page-metadata.d.ts.map +1 -0
  162. package/dist/page-metadata.js +19 -0
  163. package/dist/parts.d.ts +4 -0
  164. package/dist/parts.d.ts.map +1 -0
  165. package/dist/parts.js +13 -0
  166. package/dist/paths.d.ts +2 -0
  167. package/dist/paths.d.ts.map +1 -1
  168. package/dist/paths.js +26 -0
  169. package/dist/preparation.d.ts +41 -0
  170. package/dist/preparation.d.ts.map +1 -0
  171. package/dist/preparation.js +314 -0
  172. package/dist/presence.d.ts +58 -0
  173. package/dist/presence.d.ts.map +1 -0
  174. package/dist/presence.js +231 -0
  175. package/dist/queries.d.ts +16 -0
  176. package/dist/queries.d.ts.map +1 -0
  177. package/dist/queries.js +308 -0
  178. package/dist/query.d.ts +21 -203
  179. package/dist/query.d.ts.map +1 -1
  180. package/dist/query.js +3 -491
  181. package/dist/{chat/questions.d.ts → questions.d.ts} +6 -7
  182. package/dist/questions.d.ts.map +1 -0
  183. package/dist/{chat/questions.js → questions.js} +12 -7
  184. package/dist/queue.d.ts +40 -0
  185. package/dist/queue.d.ts.map +1 -0
  186. package/dist/queue.js +480 -0
  187. package/dist/reach.d.ts +21 -11
  188. package/dist/reach.d.ts.map +1 -1
  189. package/dist/reach.js +358 -111
  190. package/dist/react.d.ts +19 -5
  191. package/dist/react.d.ts.map +1 -1
  192. package/dist/react.js +35 -15
  193. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  194. package/dist/read.d.ts.map +1 -0
  195. package/dist/{chat/read.js → read.js} +4 -0
  196. package/dist/readiness.d.ts +22 -20
  197. package/dist/readiness.d.ts.map +1 -1
  198. package/dist/readiness.js +5 -13
  199. package/dist/reads.d.ts +38 -10
  200. package/dist/reads.d.ts.map +1 -1
  201. package/dist/reads.js +163 -83
  202. package/dist/recovery.d.ts +5 -2
  203. package/dist/recovery.d.ts.map +1 -1
  204. package/dist/recovery.js +65 -8
  205. package/dist/refresh.d.ts +18 -15
  206. package/dist/refresh.d.ts.map +1 -1
  207. package/dist/refresh.js +145 -60
  208. package/dist/refusal.d.ts +5 -0
  209. package/dist/refusal.d.ts.map +1 -0
  210. package/dist/refusal.js +55 -0
  211. package/dist/replica.d.ts +49 -36
  212. package/dist/replica.d.ts.map +1 -1
  213. package/dist/replica.js +322 -198
  214. package/dist/retried.d.ts +30 -0
  215. package/dist/retried.d.ts.map +1 -0
  216. package/dist/retried.js +72 -0
  217. package/dist/room-draft.d.ts +55 -13
  218. package/dist/room-draft.d.ts.map +1 -1
  219. package/dist/room-draft.js +416 -122
  220. package/dist/room-drafts.d.ts +24 -0
  221. package/dist/room-drafts.d.ts.map +1 -0
  222. package/dist/room-drafts.js +220 -0
  223. package/dist/room-list.d.ts +10 -0
  224. package/dist/room-list.d.ts.map +1 -0
  225. package/dist/room-list.js +45 -0
  226. package/dist/rows.d.ts +32 -30
  227. package/dist/rows.d.ts.map +1 -1
  228. package/dist/rows.js +60 -120
  229. package/dist/runtime.d.ts +34 -0
  230. package/dist/runtime.d.ts.map +1 -0
  231. package/dist/runtime.js +1 -0
  232. package/dist/save.d.ts +43 -49
  233. package/dist/save.d.ts.map +1 -1
  234. package/dist/save.js +736 -304
  235. package/dist/saves.d.ts +34 -0
  236. package/dist/saves.d.ts.map +1 -0
  237. package/dist/saves.js +437 -0
  238. package/dist/search.d.ts +12 -95
  239. package/dist/search.d.ts.map +1 -1
  240. package/dist/search.js +10 -266
  241. package/dist/seed.d.ts +11 -2
  242. package/dist/seed.d.ts.map +1 -1
  243. package/dist/seed.js +71 -1
  244. package/dist/shared.d.ts +6 -7
  245. package/dist/shared.d.ts.map +1 -1
  246. package/dist/shared.js +75 -104
  247. package/dist/shown.d.ts +33 -0
  248. package/dist/shown.d.ts.map +1 -0
  249. package/dist/shown.js +309 -0
  250. package/dist/socket/admission.d.ts +7 -0
  251. package/dist/socket/admission.d.ts.map +1 -0
  252. package/dist/socket/admission.js +39 -0
  253. package/dist/socket/answers.d.ts +6 -0
  254. package/dist/socket/answers.d.ts.map +1 -0
  255. package/dist/socket/answers.js +20 -0
  256. package/dist/socket/lanes.d.ts +28 -0
  257. package/dist/socket/lanes.d.ts.map +1 -0
  258. package/dist/socket/lanes.js +103 -0
  259. package/dist/socket/reads.d.ts +10 -0
  260. package/dist/socket/reads.d.ts.map +1 -0
  261. package/dist/socket/reads.js +31 -0
  262. package/dist/socket/session.d.ts +38 -0
  263. package/dist/socket/session.d.ts.map +1 -0
  264. package/dist/socket/session.js +23 -0
  265. package/dist/socket.d.ts +67 -0
  266. package/dist/socket.d.ts.map +1 -0
  267. package/dist/socket.js +164 -0
  268. package/dist/source.d.ts +59 -0
  269. package/dist/source.d.ts.map +1 -0
  270. package/dist/source.js +93 -0
  271. package/dist/status.d.ts +4 -5
  272. package/dist/status.d.ts.map +1 -1
  273. package/dist/status.js +3 -7
  274. package/dist/store/installs.d.ts +30 -0
  275. package/dist/store/installs.d.ts.map +1 -0
  276. package/dist/store/installs.js +40 -0
  277. package/dist/store/readiness.d.ts +11 -0
  278. package/dist/store/readiness.d.ts.map +1 -0
  279. package/dist/store/readiness.js +68 -0
  280. package/dist/store/records.d.ts +223 -0
  281. package/dist/store/records.d.ts.map +1 -0
  282. package/dist/store/records.js +465 -0
  283. package/dist/store/room-held.d.ts +8 -0
  284. package/dist/store/room-held.d.ts.map +1 -0
  285. package/dist/store/room-held.js +17 -0
  286. package/dist/store/rooms-shown.d.ts +8 -0
  287. package/dist/store/rooms-shown.d.ts.map +1 -0
  288. package/dist/store/rooms-shown.js +13 -0
  289. package/dist/store/space.d.ts +11 -0
  290. package/dist/store/space.d.ts.map +1 -0
  291. package/dist/store/space.js +41 -0
  292. package/dist/store/watchers.d.ts +17 -0
  293. package/dist/store/watchers.d.ts.map +1 -0
  294. package/dist/store/watchers.js +56 -0
  295. package/dist/store/writes.d.ts +24 -0
  296. package/dist/store/writes.d.ts.map +1 -0
  297. package/dist/store/writes.js +125 -0
  298. package/dist/store.d.ts +114 -163
  299. package/dist/store.d.ts.map +1 -1
  300. package/dist/store.js +163 -754
  301. package/dist/stored.d.ts +167 -0
  302. package/dist/stored.d.ts.map +1 -0
  303. package/dist/stored.js +700 -0
  304. package/dist/surface.d.ts +90 -0
  305. package/dist/surface.d.ts.map +1 -0
  306. package/dist/surface.js +225 -0
  307. package/dist/sync.d.ts +19 -0
  308. package/dist/sync.d.ts.map +1 -0
  309. package/dist/sync.js +536 -0
  310. package/dist/tables.d.ts +376 -0
  311. package/dist/tables.d.ts.map +1 -0
  312. package/dist/tables.js +499 -0
  313. package/dist/tallies.d.ts +18 -0
  314. package/dist/tallies.d.ts.map +1 -0
  315. package/dist/tallies.js +128 -0
  316. package/dist/transfer.d.ts +0 -5
  317. package/dist/transfer.d.ts.map +1 -1
  318. package/dist/turn.d.ts +5 -3
  319. package/dist/turn.d.ts.map +1 -1
  320. package/dist/turn.js +51 -21
  321. package/dist/validation.d.ts +29 -0
  322. package/dist/validation.d.ts.map +1 -0
  323. package/dist/validation.js +98 -0
  324. package/dist/windows.d.ts +9 -16
  325. package/dist/windows.d.ts.map +1 -1
  326. package/dist/windows.js +11 -75
  327. package/dist/wire.d.ts +91 -9
  328. package/dist/wire.d.ts.map +1 -1
  329. package/dist/wire.js +31 -6
  330. package/package.json +19 -19
  331. package/AGENTS.md +0 -299
  332. package/dist/acquisition.d.ts +0 -14
  333. package/dist/acquisition.d.ts.map +0 -1
  334. package/dist/acquisition.js +0 -24
  335. package/dist/attempt.d.ts +0 -16
  336. package/dist/attempt.d.ts.map +0 -1
  337. package/dist/attempt.js +0 -70
  338. package/dist/chat/acts.d.ts +0 -33
  339. package/dist/chat/acts.d.ts.map +0 -1
  340. package/dist/chat/acts.js +0 -36
  341. package/dist/chat/context.d.ts +0 -3
  342. package/dist/chat/context.d.ts.map +0 -1
  343. package/dist/chat/earlier.d.ts +0 -10
  344. package/dist/chat/earlier.d.ts.map +0 -1
  345. package/dist/chat/earlier.js +0 -54
  346. package/dist/chat/input.d.ts +0 -9
  347. package/dist/chat/input.d.ts.map +0 -1
  348. package/dist/chat/input.js +0 -99
  349. package/dist/chat/kit.d.ts +0 -61
  350. package/dist/chat/kit.d.ts.map +0 -1
  351. package/dist/chat/kit.js +0 -123
  352. package/dist/chat/lasting.d.ts +0 -6
  353. package/dist/chat/lasting.d.ts.map +0 -1
  354. package/dist/chat/lasting.js +0 -19
  355. package/dist/chat/list.d.ts +0 -27
  356. package/dist/chat/list.d.ts.map +0 -1
  357. package/dist/chat/list.js +0 -99
  358. package/dist/chat/markdown.d.ts +0 -20
  359. package/dist/chat/markdown.d.ts.map +0 -1
  360. package/dist/chat/markdown.js +0 -188
  361. package/dist/chat/message.d.ts +0 -6
  362. package/dist/chat/message.d.ts.map +0 -1
  363. package/dist/chat/message.js +0 -192
  364. package/dist/chat/messages.d.ts +0 -22
  365. package/dist/chat/messages.d.ts.map +0 -1
  366. package/dist/chat/messages.js +0 -155
  367. package/dist/chat/name.d.ts +0 -6
  368. package/dist/chat/name.d.ts.map +0 -1
  369. package/dist/chat/name.js +0 -37
  370. package/dist/chat/opened.d.ts +0 -11
  371. package/dist/chat/opened.d.ts.map +0 -1
  372. package/dist/chat/opened.js +0 -17
  373. package/dist/chat/overlay.d.ts +0 -31
  374. package/dist/chat/overlay.d.ts.map +0 -1
  375. package/dist/chat/overlay.js +0 -97
  376. package/dist/chat/parts.d.ts +0 -57
  377. package/dist/chat/parts.d.ts.map +0 -1
  378. package/dist/chat/parts.js +0 -119
  379. package/dist/chat/process.d.ts +0 -20
  380. package/dist/chat/process.d.ts.map +0 -1
  381. package/dist/chat/process.js +0 -32
  382. package/dist/chat/provider.d.ts +0 -63
  383. package/dist/chat/provider.d.ts.map +0 -1
  384. package/dist/chat/provider.js +0 -635
  385. package/dist/chat/question.d.ts +0 -9
  386. package/dist/chat/question.d.ts.map +0 -1
  387. package/dist/chat/question.js +0 -69
  388. package/dist/chat/questions.d.ts.map +0 -1
  389. package/dist/chat/read.d.ts.map +0 -1
  390. package/dist/chat/ready.d.ts +0 -34
  391. package/dist/chat/ready.d.ts.map +0 -1
  392. package/dist/chat/ready.js +0 -91
  393. package/dist/chat/style.d.ts +0 -4
  394. package/dist/chat/style.d.ts.map +0 -1
  395. package/dist/chat/style.js +0 -302
  396. package/dist/chat.d.ts +0 -14
  397. package/dist/chat.d.ts.map +0 -1
  398. package/dist/chat.js +0 -8
  399. package/dist/fence.d.ts +0 -6
  400. package/dist/fence.d.ts.map +0 -1
  401. package/dist/fence.js +0 -10
  402. package/dist/log.d.ts +0 -5
  403. package/dist/log.d.ts.map +0 -1
  404. package/dist/log.js +0 -14
  405. package/dist/read-side.d.ts +0 -25
  406. package/dist/read-side.d.ts.map +0 -1
  407. package/dist/read-side.js +0 -761
@@ -1,54 +0,0 @@
1
- import { useCallback, useMemo, useState } from 'react';
2
- export const CHAT_WINDOW = 50;
3
- function slidOut(before, after) {
4
- if (before === null || before.conversation !== after.conversation)
5
- return [];
6
- const kept = new Set(after.messages.map((one) => one.identity));
7
- const left = [];
8
- for (const message of before.messages) {
9
- if (kept.has(message.identity))
10
- break;
11
- left.push(message);
12
- }
13
- return left;
14
- }
15
- function joined(held, earlier) {
16
- const { next: _live, ...view } = held;
17
- const live = new Set(held.messages.map((one) => one.identity));
18
- return {
19
- ...view,
20
- messages: [...earlier.messages.filter((one) => !live.has(one.identity)), ...held.messages],
21
- ...(earlier.next === undefined ? {} : { next: earlier.next }),
22
- };
23
- }
24
- export function useEarlier(client, thread, held) {
25
- const [earlier, setEarlier] = useState(null);
26
- const [seen, setSeen] = useState(held);
27
- const whole = held !== null && held.next === undefined;
28
- let current = earlier !== null && earlier.thread === thread && !whole ? earlier : null;
29
- if (current !== earlier)
30
- setEarlier(current);
31
- if (seen !== held) {
32
- setSeen(held);
33
- const carried = held === null ? [] : slidOut(seen, held);
34
- if (thread !== null && carried.length > 0) {
35
- const base = current ?? { thread, messages: [], next: seen?.next };
36
- current = { ...base, messages: [...base.messages, ...carried] };
37
- setEarlier(current);
38
- }
39
- }
40
- const view = useMemo(() => (held === null || current === null ? held : joined(held, current)), [held, current]);
41
- const next = current === null ? held?.next : current.next;
42
- const loadEarlier = useCallback(async () => {
43
- if (thread === null || next === undefined)
44
- return;
45
- const older = await client.conversation.read(thread, { limit: CHAT_WINDOW, after: next });
46
- setEarlier((now) => {
47
- const base = now !== null && now.thread === thread ? now : { thread, messages: [], next };
48
- if (base.next !== next)
49
- return now;
50
- return { thread, messages: [...older.messages, ...base.messages], next: older.next };
51
- });
52
- }, [client, thread, next]);
53
- return { view, hasEarlier: next !== undefined, loadEarlier };
54
- }
@@ -1,9 +0,0 @@
1
- import { type ReactElement, type ReactNode } from 'react';
2
- import { type ChatNoteProps } from './kit.js';
3
- export type ChatInputProps = {
4
- readonly messageLength?: number;
5
- readonly note?: (note: ChatNoteProps) => ReactNode;
6
- readonly autoFocus?: boolean;
7
- };
8
- export declare function ChatInput({ messageLength, note, autoFocus, }: ChatInputProps): ReactElement;
9
- //# sourceMappingURL=input.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/chat/input.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAqBlG,OAAO,EAAsD,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAMlG,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,SAAS,CAAC;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAiGF,wBAAgB,SAAS,CAAC,EACxB,aAAa,EACb,IAAY,EACZ,SAAiB,GAClB,EAAE,cAAc,GAAG,YAAY,CA+K/B"}
@@ -1,99 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useContext, useEffect, useMemo, useRef } from 'react';
3
- import { ComposerPrimitive, useAui, useAuiState, } from '@assistant-ui/react';
4
- import { DropdownMenu } from 'radix-ui';
5
- import ArrowUp from 'lucide-react/dist/esm/icons/arrow-up.mjs';
6
- import Check from 'lucide-react/dist/esm/icons/check.mjs';
7
- import ChevronDown from 'lucide-react/dist/esm/icons/chevron-down.mjs';
8
- import CornerDownRight from 'lucide-react/dist/esm/icons/corner-down-right.mjs';
9
- import ListEnd from 'lucide-react/dist/esm/icons/list-end.mjs';
10
- import Paperclip from 'lucide-react/dist/esm/icons/paperclip.mjs';
11
- import Pencil from 'lucide-react/dist/esm/icons/pencil.mjs';
12
- import Plus from 'lucide-react/dist/esm/icons/plus.mjs';
13
- import Square from 'lucide-react/dist/esm/icons/square.mjs';
14
- import X from 'lucide-react/dist/esm/icons/x.mjs';
15
- import { contextText } from './context.js';
16
- import { Button, ChatNote, IconButton, Name, Portal, Scoped } from './kit.js';
17
- import { COMMAND } from './process.js';
18
- import { useChat, useChatScope } from './provider.js';
19
- import { forgetAnswers } from './question.js';
20
- import { useOpened } from './opened.js';
21
- const commanded = {
22
- serialize: (item) => `${COMMAND}${item.id}`,
23
- parse: (said) => [{ kind: 'text', text: said }],
24
- };
25
- const atStart = (said, char, cursor) => {
26
- const typed = said.slice(0, cursor);
27
- return typed.startsWith(char) && !/\s/.test(typed)
28
- ? { query: typed.slice(char.length), offset: 0, endOffset: cursor }
29
- : null;
30
- };
31
- function commandItem(command) {
32
- return {
33
- id: command.name,
34
- type: 'command',
35
- label: `${COMMAND}${command.name}`,
36
- description: command.description,
37
- };
38
- }
39
- function commandsFound(commands, query) {
40
- const asked = query.toLowerCase();
41
- const named = commands.filter((one) => one.name.toLowerCase().startsWith(asked));
42
- const within = commands.filter((one) => !named.includes(one) && one.name.toLowerCase().includes(asked));
43
- return [...named, ...within].map(commandItem);
44
- }
45
- function Attached({ id, name }) {
46
- const aui = useAui();
47
- return (_jsxs("span", { className: "ahc-chip ahc-chip--removable", children: [_jsx(Paperclip, { "aria-hidden": "true" }), _jsx(Name, { text: name }), _jsx(IconButton, { label: `Remove ${name}`, compact: true, onClick: () => void aui.composer().attachment({ id }).remove(), children: _jsx(X, { "aria-hidden": "true" }) })] }));
48
- }
49
- function Picker({ option, choose, }) {
50
- const container = useContext(Portal);
51
- return (_jsxs(DropdownMenu.Root, { modal: false, children: [_jsxs(DropdownMenu.Trigger, { className: "ahc-btn ahc-picker", "aria-label": option.name, title: option.name, children: [_jsx(Name, { text: option.values.find((one) => one.value === option.value)?.name ?? option.value }), _jsx(ChevronDown, { "aria-hidden": "true" })] }), _jsx(DropdownMenu.Portal, { container: container, children: _jsxs(DropdownMenu.Content, { className: "ahc-menu", side: "top", align: "start", children: [_jsx(DropdownMenu.Label, { className: "ahc-menu__heading", children: option.name }), _jsx(DropdownMenu.RadioGroup, { value: option.value, onValueChange: (value) => {
52
- if (value !== option.value)
53
- void choose(option.id, value);
54
- }, children: option.values.map((one) => (_jsxs(DropdownMenu.RadioItem, { value: one.value, className: "ahc-row", children: [_jsx("span", { className: "ahc-row__label", children: one.name }), _jsx(DropdownMenu.ItemIndicator, { asChild: true, children: _jsx(Check, { "aria-hidden": "true" }) })] }, one.value))) })] }) })] }));
55
- }
56
- function noted(note) {
57
- return _jsx(ChatNote, { ...note });
58
- }
59
- export function ChatInput({ messageLength, note = noted, autoFocus = false, }) {
60
- const chat = useChat();
61
- const { client } = useChatScope();
62
- const aui = useAui();
63
- const opened = useOpened();
64
- const { lone, commands, context, queued, running } = opened;
65
- const conversation = chat.conversation ?? '';
66
- const input = useRef(null);
67
- const picker = useRef(null);
68
- const thread = chat.conversation ?? `new:${chat.agent ?? ''}`;
69
- useEffect(() => {
70
- if (autoFocus)
71
- input.current?.focus();
72
- }, [autoFocus, thread]);
73
- const typed = useAuiState((s) => s.composer.text);
74
- const attached = useAuiState((s) => s.composer.attachments.length > 0);
75
- const fault = messageLength !== undefined && typed.length > messageLength
76
- ? `Keep it to ${messageLength} characters.`
77
- : null;
78
- const listed = useMemo(() => ({
79
- categories: () => [],
80
- categoryItems: () => [],
81
- search: (query) => commandsFound(commands, query),
82
- }), [commands]);
83
- const interrupt = () => void chat.stop().then((stopped) => {
84
- if (stopped)
85
- void forgetAnswers(client, conversation);
86
- });
87
- const edit = (id) => {
88
- chat.edit(id);
89
- input.current?.focus();
90
- };
91
- const drafted = typed.trim() !== '' || attached;
92
- const readOnly = opened.deleted;
93
- return (_jsx(Scoped, { children: _jsxs("div", { className: "ahc-input-area", children: [readOnly || queued.length === 0 ? null : (_jsxs("div", { role: "group", "aria-label": "Queued messages", className: "ahc-queue", children: [_jsxs("div", { className: "ahc-queue__head", children: [_jsx(ListEnd, { "aria-hidden": "true" }), _jsx("span", { className: "ahc-queue__said", children: `${queued.length} ${queued.length === 1 ? 'message waits' : 'messages wait'} for ${opened.name} to finish` }), running ? (_jsx(Button, { variant: "outline", compact: true, onClick: interrupt, children: "Send now" })) : null] }), queued.map((item) => (_jsxs("div", { className: "ahc-queue-row", children: [_jsx(CornerDownRight, { "aria-hidden": "true", className: "ahc-muted" }), _jsx("span", { className: "ahc-queue-row__text", children: item.text }), _jsx(IconButton, { label: "Edit queued message", compact: true, onClick: () => edit(item.id), children: _jsx(Pencil, { "aria-hidden": "true" }) }), _jsx(IconButton, { label: "Remove queued message", compact: true, onClick: () => chat.unqueue(item.id), children: _jsx(X, { "aria-hidden": "true" }) })] }, item.id)))] })), readOnly ? null : (_jsx(ComposerPrimitive.Root, { className: "ahc-composer", children: _jsxs(ComposerPrimitive.Unstable_TriggerPopoverRoot, { children: [commands.length === 0 ? null : (_jsxs(ComposerPrimitive.Unstable_TriggerPopover, { char: COMMAND, matcher: atStart, adapter: listed, "aria-label": "Commands", className: "ahc-menu ahc-commands", children: [_jsx(ComposerPrimitive.Unstable_TriggerPopover.Directive, { formatter: commanded }), _jsx(ComposerPrimitive.Unstable_TriggerPopoverItems, { children: (items) => items.map((item, index) => (_jsx(ComposerPrimitive.Unstable_TriggerPopoverItem, { item: item, index: index, className: "ahc-row ahc-row--two", children: _jsxs("span", { className: "ahc-row__label", children: [_jsx("span", { className: "ahc-row__title ahc-mono", children: item.label }), _jsx("span", { className: "ahc-row__sub", children: item.description })] }) }, item.id))) })] })), attached ? (_jsx("div", { className: "ahc-chips", children: _jsx(ComposerPrimitive.Attachments, { children: ({ attachment }) => _jsx(Attached, { id: attachment.id, name: attachment.name }) }) })) : null, _jsx(ComposerPrimitive.Input, { asChild: true, "aria-label": "Message", placeholder: lone === null ? `Message ${opened.name}` : lone.field.prompt, submitMode: fault === null ? 'enter' : 'none', children: _jsx("textarea", { ref: input, className: "ahc-composer__input", rows: 1 }) }), _jsxs("div", { className: "ahc-composer__bar", children: [_jsx(IconButton, { label: "Add files", onClick: () => picker.current?.click(), children: _jsx(Plus, { size: 20, "aria-hidden": "true" }) }), _jsx("input", { ref: picker, type: "file", multiple: true, hidden: true, onChange: (event) => {
94
- const chosen = [...(event.target.files ?? [])];
95
- event.target.value = '';
96
- for (const file of chosen)
97
- void aui.composer().addAttachment(file);
98
- } }), opened.options.map((option) => (_jsx(Picker, { option: option, choose: chat.choose }, option.id))), _jsx("span", { className: "ahc-spacer" }), context === null ? null : (_jsx("span", { title: "Context in use", className: "ahc-meta", children: contextText(context) })), running ? (_jsx("button", { type: "button", className: `ahc-btn ahc-btn--icon ${drafted ? 'ahc-btn--outline' : 'ahc-btn--ink'}`, "aria-label": "Stop", title: "Stop", onClick: interrupt, children: _jsx(Square, { "aria-hidden": "true" }) })) : null, running && !drafted ? null : (_jsx(ComposerPrimitive.Send, { className: "ahc-btn ahc-btn--icon ahc-btn--ink", "aria-label": running ? 'Queue message' : 'Send', disabled: fault !== null, children: _jsx(ArrowUp, { size: 20, "aria-hidden": "true" }) }))] })] }) })), fault === null ? null : (_jsx("p", { className: "ahc-note", role: "status", "data-state": "refused", children: fault })), note({ outcome: chat.acting.outcome }), note({ outcome: chat.sending.outcome, again: chat.sending.again ?? undefined })] }) }));
99
- }
@@ -1,61 +0,0 @@
1
- import { type ComponentPropsWithRef, type ReactElement, type ReactNode } from 'react';
2
- import type { ChatOutcome } from './acts.js';
3
- export type Variant = 'quiet' | 'ink' | 'outline' | 'danger' | 'danger-outline';
4
- export declare const Portal: import("react").Context<HTMLElement | null>;
5
- export declare function Within({ root, children, }: {
6
- root: HTMLElement;
7
- children: ReactNode;
8
- }): ReactElement;
9
- export declare function Scoped({ children }: {
10
- children: ReactNode;
11
- }): ReactElement;
12
- export declare function buttonClass(variant: Variant, compact: boolean, icon: boolean): string;
13
- type Native = Omit<ComponentPropsWithRef<'button'>, 'className'>;
14
- export declare function Button({ variant, compact, type, children, ...rest }: Native & {
15
- variant?: Variant;
16
- compact?: boolean;
17
- }): ReactElement;
18
- export declare function IconButton({ label, variant, compact, type, ...rest }: Native & {
19
- label: string;
20
- variant?: Variant;
21
- compact?: boolean;
22
- }): ReactElement;
23
- export declare function Name({ text, className }: {
24
- text: string;
25
- className?: string;
26
- }): ReactElement;
27
- export declare function Menu({ trigger, children, }: {
28
- trigger: ReactElement;
29
- children: ReactNode;
30
- }): ReactElement;
31
- export declare function MenuGap(): ReactElement;
32
- export declare function MenuItem({ icon, danger, onSelect, children, }: {
33
- icon: ReactNode;
34
- danger?: boolean;
35
- onSelect: () => void;
36
- children: ReactNode;
37
- }): ReactElement;
38
- export declare function Confirm({ title, text, action, onConfirm, onClose, }: {
39
- title: string;
40
- text: string;
41
- action: string;
42
- onConfirm: () => void;
43
- onClose: () => void;
44
- }): ReactElement;
45
- export declare function ItemRow({ lead, title, sub, trailing, }: {
46
- lead: ReactNode;
47
- title: ReactNode;
48
- sub: ReactNode;
49
- trailing: ReactNode;
50
- }): ReactElement;
51
- export declare function Working({ label, step, }: {
52
- label?: string;
53
- step?: string | undefined;
54
- }): ReactElement;
55
- export type ChatNoteProps = {
56
- readonly outcome: ChatOutcome | null;
57
- readonly again?: (() => void) | undefined;
58
- };
59
- export declare function ChatNote({ outcome, again }: ChatNoteProps): ReactElement | null;
60
- export {};
61
- //# sourceMappingURL=kit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kit.d.ts","sourceRoot":"","sources":["../../src/chat/kit.tsx"],"names":[],"mappings":"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"}
package/dist/chat/kit.js DELETED
@@ -1,123 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Children, createContext, useCallback, useContext, useEffect, useState, } from 'react';
3
- import { Dialog, DropdownMenu } from 'radix-ui';
4
- import { LucideProvider } from 'lucide-react/dist/esm/context.mjs';
5
- import X from 'lucide-react/dist/esm/icons/x.mjs';
6
- import { adopted } from './style.js';
7
- export const Portal = createContext(null);
8
- export function Within({ root, children, }) {
9
- return (_jsx(Portal.Provider, { value: root, children: _jsx(LucideProvider, { size: 16, strokeWidth: 1.5, absoluteStrokeWidth: true, children: children }) }));
10
- }
11
- export function Scoped({ children }) {
12
- const inside = useContext(Portal);
13
- const [root, setRoot] = useState(null);
14
- const attach = useCallback((element) => {
15
- adopted(element);
16
- setRoot(element);
17
- }, []);
18
- if (inside !== null)
19
- return _jsx(_Fragment, { children: children });
20
- return (_jsx("div", { ref: attach, className: "ahc ahc-scope", children: root === null ? null : _jsx(Within, { root: root, children: children }) }));
21
- }
22
- export function buttonClass(variant, compact, icon) {
23
- return [
24
- 'ahc-btn',
25
- icon ? 'ahc-btn--icon' : null,
26
- variant === 'quiet' ? null : `ahc-btn--${variant}`,
27
- compact ? 'ahc-btn--compact' : null,
28
- ]
29
- .filter(Boolean)
30
- .join(' ');
31
- }
32
- function labelled(children) {
33
- const parts = [];
34
- let said = '';
35
- const flush = () => {
36
- if (said !== '') {
37
- parts.push(_jsx("span", { className: "ahc-name", children: said }, `text-${parts.length}`));
38
- }
39
- said = '';
40
- };
41
- for (const child of Children.toArray(children)) {
42
- if (typeof child === 'string' || typeof child === 'number')
43
- said += String(child);
44
- else {
45
- flush();
46
- parts.push(child);
47
- }
48
- }
49
- flush();
50
- return parts;
51
- }
52
- export function Button({ variant = 'quiet', compact = false, type = 'button', children, ...rest }) {
53
- return (_jsx("button", { type: type, className: buttonClass(variant, compact, false), ...rest, children: labelled(children) }));
54
- }
55
- export function IconButton({ label, variant = 'quiet', compact = false, type = 'button', ...rest }) {
56
- return (_jsx("button", { type: type, "aria-label": label, className: buttonClass(variant, compact, true), ...rest }));
57
- }
58
- export function Name({ text, className }) {
59
- return (_jsx("span", { className: className === undefined ? 'ahc-name' : `ahc-name ${className}`, title: text, children: text }));
60
- }
61
- export function Menu({ trigger, children, }) {
62
- const container = useContext(Portal);
63
- const [open, setOpen] = useState(false);
64
- return (_jsxs(DropdownMenu.Root, { modal: false, open: open, onOpenChange: setOpen, children: [_jsx(DropdownMenu.Trigger, { asChild: true, children: trigger }), open ? (_jsx(DropdownMenu.Portal, { forceMount: true, container: container, children: _jsx(DropdownMenu.Content, { forceMount: true, className: "ahc-menu", align: "end", sideOffset: 4, collisionPadding: 8, children: children }) })) : null] }));
65
- }
66
- export function MenuGap() {
67
- return _jsx(DropdownMenu.Separator, { className: "ahc-menu__gap" });
68
- }
69
- export function MenuItem({ icon, danger = false, onSelect, children, }) {
70
- return (_jsxs(DropdownMenu.Item, { className: danger ? 'ahc-row ahc-row--danger' : 'ahc-row', onSelect: onSelect, children: [_jsx("span", { className: "ahc-row__icon", children: icon }), _jsx("span", { className: "ahc-row__label", children: _jsx("span", { className: "ahc-row__title", children: children }) })] }));
71
- }
72
- export function Confirm({ title, text, action, onConfirm, onClose, }) {
73
- const container = useContext(Portal);
74
- useEffect(() => {
75
- const behind = container?.querySelector('.ahc-frame');
76
- if (behind === null || behind === undefined)
77
- return;
78
- behind.inert = true;
79
- return () => {
80
- behind.inert = false;
81
- };
82
- }, [container]);
83
- return (_jsx(Dialog.Root, { open: true, modal: false, onOpenChange: (open) => {
84
- if (!open)
85
- onClose();
86
- }, children: _jsxs(Dialog.Portal, { container: container, children: [_jsx("div", { className: "ahc-scrim", onClick: onClose }), _jsxs(Dialog.Content, { className: "ahc-dialog", role: "alertdialog", "aria-describedby": undefined, "aria-modal": true, onInteractOutside: (event) => event.preventDefault(), children: [_jsxs("div", { className: "ahc-dialog__head", children: [_jsx(Dialog.Title, { className: "ahc-dialog__title", children: title }), _jsx(Dialog.Close, { asChild: true, children: _jsx(IconButton, { label: "Close", compact: true, children: _jsx(X, { size: 20, "aria-hidden": "true" }) }) })] }), _jsx("div", { className: "ahc-dialog__body", children: _jsx("p", { className: "ahc-dialog__text", children: text }) }), _jsxs("div", { className: "ahc-dialog__actions", children: [_jsx(Button, { onClick: onClose, children: "Cancel" }), _jsx(Button, { variant: "danger", onClick: () => {
87
- onConfirm();
88
- onClose();
89
- }, children: action })] })] })] }) }));
90
- }
91
- export function ItemRow({ lead, title, sub, trailing, }) {
92
- return (_jsxs("div", { className: "ahc-row ahc-row--two ahc-item", children: [_jsx("span", { className: "ahc-item__lead", children: lead }), _jsxs("span", { className: "ahc-row__label", children: [_jsx("span", { className: "ahc-row__title ahc-item__title", children: title }), _jsx("span", { className: "ahc-row__sub", children: sub })] }), trailing] }));
93
- }
94
- function elapsed(seconds) {
95
- return seconds >= 60 ? `${Math.floor(seconds / 60)}m ${seconds % 60}s` : `${seconds}s`;
96
- }
97
- export function Working({ label = 'Working', step, }) {
98
- const [from] = useState(() => Date.now());
99
- const [now, setNow] = useState(from);
100
- useEffect(() => {
101
- // The elapsed time counts whole seconds, so it moves once a second.
102
- const tick = setInterval(() => setNow(Date.now()), 1000);
103
- return () => clearInterval(tick);
104
- }, []);
105
- return (_jsxs("div", { className: "ahc-toolline ahc-working", role: "status", children: [_jsx("span", { className: "ahc-shimmer", children: label }), _jsx("span", { className: "ahc-figure", "aria-hidden": "true", children: elapsed(Math.floor((now - from) / 1000)) }), step === undefined ? null : _jsx("span", { children: step })] }));
106
- }
107
- const SAID = {
108
- sending: 'Sending…',
109
- offline: 'House can’t be reached. Nothing was sent.',
110
- };
111
- const UNANSWERED = 'House did not answer.';
112
- export function ChatNote({ outcome, again }) {
113
- if (outcome === null)
114
- return null;
115
- const uncertain = outcome.state === 'failed' && outcome.result.kind === 'transport-uncertainty';
116
- const said = outcome.state !== 'failed'
117
- ? SAID[outcome.state]
118
- : uncertain
119
- ? 'House did not answer. Try again.'
120
- : 'House refused this.';
121
- const retried = again !== undefined && uncertain;
122
- return (_jsxs("p", { className: "ahc-note", role: "status", "data-state": uncertain ? 'uncertain' : outcome.state, children: [retried ? UNANSWERED : said, retried ? (_jsxs(_Fragment, { children: [' ', _jsx("button", { type: "button", className: "ahc-again", onClick: again, children: "Try again" })] })) : null] }));
123
- }
@@ -1,6 +0,0 @@
1
- import type { ReactElement } from 'react';
2
- import type { ChatWork } from './parts.js';
3
- export declare function StillRunning({ lasting }: {
4
- lasting: readonly ChatWork[];
5
- }): ReactElement;
6
- //# sourceMappingURL=lasting.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lasting.d.ts","sourceRoot":"","sources":["../../src/chat/lasting.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAM1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAiB3C,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAA;CAAE,GAAG,YAAY,CAyBxF"}
@@ -1,19 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import Bot from 'lucide-react/dist/esm/icons/bot.mjs';
3
- import CalendarClock from 'lucide-react/dist/esm/icons/calendar-clock.mjs';
4
- import RefreshCw from 'lucide-react/dist/esm/icons/refresh-cw.mjs';
5
- import Terminal from 'lucide-react/dist/esm/icons/terminal.mjs';
6
- import { ItemRow } from './kit.js';
7
- const SUB = {
8
- job: 'A background job',
9
- schedule: 'A schedule',
10
- subagent: 'A sub-agent',
11
- };
12
- function Icon({ kind }) {
13
- if (kind === 'schedule')
14
- return _jsx(CalendarClock, { size: 20, "aria-hidden": "true" });
15
- return kind === 'subagent' ? (_jsx(Bot, { size: 20, "aria-hidden": "true" })) : (_jsx(Terminal, { size: 20, "aria-hidden": "true" }));
16
- }
17
- export function StillRunning({ lasting }) {
18
- return (_jsxs("section", { "aria-label": "Still running", className: "ahc-lasting", children: [_jsxs("div", { className: "ahc-lasting__head", children: [_jsx("h2", { className: "ahc-lasting__title", children: "Still running" }), _jsx("span", { className: "ahc-secondary", children: "After this turn ended" })] }), lasting.map((one, at) => (_jsx(ItemRow, { lead: _jsx(Icon, { kind: one.kind }), title: one.title === '' ? SUB[one.kind] : one.title, sub: one.next === null ? SUB[one.kind] : `${SUB[one.kind]} · next run ${one.next}`, trailing: one.kind === 'schedule' ? null : (_jsxs("span", { className: "ahc-running", children: [_jsx(RefreshCw, { "aria-hidden": "true" }), "Running"] })) }, `${one.kind}:${one.title}:${at}`)))] }));
19
- }
@@ -1,27 +0,0 @@
1
- import { type ComponentType, type ReactElement, type ReactNode } from 'react';
2
- export type AgentLook = {
3
- readonly AgentLink?: ComponentType<{
4
- agent: string;
5
- className: string;
6
- children: ReactNode;
7
- 'aria-current': 'true' | undefined;
8
- }> | undefined;
9
- readonly agentMark?: ((agent: string, size: number) => ReactNode) | undefined;
10
- readonly agentDetail?: ((agent: string) => string) | undefined;
11
- };
12
- export declare const Described: import("react").Context<AgentLook>;
13
- export type ChatMessageListProps = {
14
- readonly components?: {
15
- readonly UserMessage?: ComponentType;
16
- readonly AssistantMessage?: ComponentType;
17
- };
18
- readonly onLink?: (href: string) => void;
19
- readonly footer?: ReactNode;
20
- readonly waiting?: string | null;
21
- readonly children?: ReactNode;
22
- };
23
- export declare function ChatMessageList({ components, onLink, footer, waiting, children, }: ChatMessageListProps): ReactElement;
24
- export declare function ChatList({ onChoose }: {
25
- onChoose: () => void;
26
- }): ReactElement;
27
- //# sourceMappingURL=list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/chat/list.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,SAAS,CAAC,EACf,aAAa,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,SAAS,CAAC;QACpB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;KACpC,CAAC,GACF,SAAS,CAAC;IACd,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IAC9E,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CAChE,CAAC;AAEF,eAAO,MAAM,SAAS,oCAA+B,CAAC;AAkEtD,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;QACrC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAC;KAC3C,CAAC;IACF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,UAAe,EACf,MAAM,EACN,MAAM,EACN,OAAO,EACP,QAAQ,GACT,EAAE,oBAAoB,GAAG,YAAY,CAsErC;AAoBD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,GAAG,YAAY,CAkD7E"}
package/dist/chat/list.js DELETED
@@ -1,99 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { createContext, useContext, useEffect, useRef, } from 'react';
3
- import { ThreadPrimitive, useAui } from '@assistant-ui/react';
4
- import Check from 'lucide-react/dist/esm/icons/check.mjs';
5
- import MessageSquare from 'lucide-react/dist/esm/icons/message-square.mjs';
6
- import SquarePen from 'lucide-react/dist/esm/icons/square-pen.mjs';
7
- import { Name, Scoped, Working } from './kit.js';
8
- import { AssistantMessage, Linked, UserMessage } from './message.js';
9
- import { awaitsTurn } from './messages.js';
10
- import { ChatName } from './name.js';
11
- import { useOpened } from './opened.js';
12
- import { ChatQuestionCard } from './question.js';
13
- export const Described = createContext({});
14
- const EARLIER_MARGIN = 240;
15
- function Chip({ agent, name, on, start, }) {
16
- const { agentMark, agentDetail, AgentLink } = useContext(Described);
17
- const content = (_jsxs(_Fragment, { children: [agentMark?.(agent, 16), _jsx(Name, { text: name }), agentDetail === undefined ? null : _jsx(Name, { text: agentDetail(agent), className: "ahc-meta" })] }));
18
- if (AgentLink !== undefined)
19
- return (_jsx(AgentLink, { agent: agent, className: "ahc-btn ahc-agent", "aria-current": on ? 'true' : undefined, children: content }));
20
- return (_jsx("button", { type: "button", className: "ahc-btn ahc-agent", "aria-pressed": on, onClick: () => start(agent), children: content }));
21
- }
22
- function Empty() {
23
- const chat = useOpened();
24
- return (_jsxs("div", { className: "ahc-empty", children: [_jsx("h2", { className: "ahc-empty__title", children: "What should we work on?" }), chat.conversation === null &&
25
- (chat.agents.length > 1 || !chat.agents.some((one) => one.identity === chat.by)) ? (_jsx("div", { role: "group", "aria-label": "Agent", className: "ahc-agents", children: chat.agents.map((one) => (_jsx(Chip, { agent: one.identity, name: one.name, on: one.identity === chat.by, start: chat.start }, one.identity))) })) : null] }));
26
- }
27
- export function ChatMessageList({ components = {}, onLink, footer, waiting, children, }) {
28
- const chat = useOpened();
29
- const linked = useContext(Linked);
30
- const aui = useAui();
31
- const viewport = useRef(null);
32
- const content = useRef(null);
33
- const anchor = useRef(null);
34
- const first = chat.view?.messages[0]?.identity;
35
- const shownFirst = useRef(first);
36
- shownFirst.current = first;
37
- useEffect(() => {
38
- const element = viewport.current;
39
- const inner = content.current;
40
- if (element === null || inner === null)
41
- return;
42
- const kept = new ResizeObserver(() => {
43
- const held = anchor.current;
44
- if (held === null || held.first === shownFirst.current)
45
- return;
46
- if (element.scrollHeight === held.height)
47
- return;
48
- anchor.current = null;
49
- element.scrollTop += element.scrollHeight - held.height;
50
- });
51
- kept.observe(inner);
52
- return () => kept.disconnect();
53
- }, []);
54
- const earlier = () => {
55
- const element = viewport.current;
56
- if (element === null || element.scrollTop > EARLIER_MARGIN)
57
- return;
58
- const thread = aui.thread();
59
- const state = thread.getState();
60
- if (!state.hasEarlier || state.isLoadingEarlier)
61
- return;
62
- anchor.current = { height: element.scrollHeight, first };
63
- void thread.loadEarlier();
64
- };
65
- const User = components.UserMessage ?? UserMessage;
66
- const Assistant = components.AssistantMessage ?? AssistantMessage;
67
- const silent = chat.view === null
68
- ? chat.conversation === null
69
- : chat.view.messages.length === 0 && chat.view.turn === null;
70
- return (_jsx(Scoped, { children: _jsx(Linked.Provider, { value: onLink ?? linked, children: _jsx(ThreadPrimitive.Root, { className: "ahc-thread", children: _jsxs(ThreadPrimitive.Viewport, { className: "ahc-viewport", ref: viewport, onScroll: earlier, children: [_jsxs("div", { className: "ahc-column ahc-messages", ref: content, children: [silent ? _jsx(Empty, {}) : null, _jsx(ThreadPrimitive.Messages, { children: ({ message }) => (message.role === 'user' ? _jsx(User, {}) : _jsx(Assistant, {})) }), waiting == null || !awaitsTurn(chat.view) ? null : (_jsx("div", { className: "ahc-turn", children: _jsx(Working, { label: waiting }) })), children === undefined
71
- ? chat.questions.map((question) => (_jsx(ChatQuestionCard, { question: question }, question.interaction)))
72
- : children] }), footer === undefined ? null : (_jsx(ThreadPrimitive.ViewportFooter, { className: "ahc-column ahc-footer", children: footer }))] }) }) }) }));
73
- }
74
- function stateOf(entry) {
75
- if (entry.state === 'asking') {
76
- return _jsx("span", { className: "ahc-chip ahc-chip--attention ahc-chip--small", children: "Waits for you" });
77
- }
78
- if (entry.state === 'working')
79
- return _jsx("span", { className: "ahc-row__meta", children: "Working" });
80
- if (entry.outcome === 'failed' && entry.finished === null) {
81
- return _jsx("span", { className: "ahc-row__meta", children: "Failed" });
82
- }
83
- if (entry.finished !== null) {
84
- return (_jsx("span", { className: "ahc-row__meta", role: "img", "aria-label": "Done", title: "Done", children: _jsx(Check, { "aria-hidden": "true" }) }));
85
- }
86
- return null;
87
- }
88
- export function ChatList({ onChoose }) {
89
- const chat = useOpened();
90
- const listed = [...chat.conversations].sort((left, right) => left.conversation < right.conversation ? 1 : -1);
91
- const fresh = (chat.agents.find((one) => one.identity === chat.by) ?? chat.agents[0])?.identity;
92
- return (_jsxs("nav", { "aria-label": "Chats", className: "ahc-list", children: [fresh === undefined ? null : (_jsxs("button", { type: "button", className: "ahc-row", "aria-current": chat.conversation === null ? 'page' : undefined, onClick: () => {
93
- chat.start(fresh);
94
- onChoose();
95
- }, children: [_jsx("span", { className: "ahc-row__icon", children: _jsx(SquarePen, { "aria-hidden": "true" }) }), _jsx("span", { className: "ahc-row__label", children: _jsx("span", { className: "ahc-row__title", children: "New chat" }) })] })), listed.map((entry) => (_jsxs("button", { type: "button", className: "ahc-row", "aria-current": entry.conversation === chat.conversation ? 'page' : undefined, onClick: () => {
96
- chat.open(entry.conversation);
97
- onChoose();
98
- }, children: [_jsx("span", { className: "ahc-row__icon", children: _jsx(MessageSquare, { "aria-hidden": "true" }) }), _jsx("span", { className: "ahc-row__label", children: _jsx("span", { className: "ahc-row__title", children: _jsx(ChatName, { name: entry.name }) }) }), stateOf(entry)] }, entry.conversation)))] }));
99
- }
@@ -1,20 +0,0 @@
1
- import { type ReactElement, type ReactNode } from 'react';
2
- export interface FileReference {
3
- readonly pattern: RegExp;
4
- readonly names?: (destination: string) => boolean;
5
- readonly draw: (reference: string, label: string, image: boolean) => ReactNode;
6
- }
7
- interface MarkdownOptions {
8
- readonly className?: string;
9
- readonly onLink?: (href: string) => void;
10
- readonly file?: FileReference;
11
- }
12
- export declare function slugOf(text: string): string;
13
- export declare function anchorOf(fragment: string): string;
14
- export declare function plainText(text: string): string;
15
- export type MarkdownProps = MarkdownOptions & {
16
- readonly text: string;
17
- };
18
- export declare function Markdown({ text, className, ...options }: MarkdownProps): ReactElement;
19
- export {};
20
- //# sourceMappingURL=markdown.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/chat/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAKnF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,SAAS,CAAC;CAChF;AAED,UAAU,eAAe;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;CAC/B;AAYD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM3C;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAoND,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,EAAE,aAAa,GAAG,YAAY,CAOrF"}