@signalcore/ui 0.1.0 → 1.0.0-beta.0

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 (611) hide show
  1. package/README.md +896 -513
  2. package/dist/AgentAbout.d.ts +186 -0
  3. package/dist/AgentAbout.js +1020 -0
  4. package/dist/AgentAbout.js.map +1 -0
  5. package/dist/AgentCard.d.ts +49 -0
  6. package/dist/AgentCard.js +77 -0
  7. package/dist/AgentCard.js.map +1 -0
  8. package/dist/AgentChat.d.ts +233 -0
  9. package/dist/AgentChat.js +1119 -0
  10. package/dist/AgentChat.js.map +1 -0
  11. package/dist/AgentSpace.d.ts +112 -0
  12. package/dist/AgentSpace.js +339 -0
  13. package/dist/AgentSpace.js.map +1 -0
  14. package/dist/AgentTasks.d.ts +48 -0
  15. package/dist/AgentTasks.js +120 -0
  16. package/dist/AgentTasks.js.map +1 -0
  17. package/dist/BrowserView.d.ts +52 -0
  18. package/dist/BrowserView.js +328 -0
  19. package/dist/BrowserView.js.map +1 -0
  20. package/dist/FileView.d.ts +63 -0
  21. package/dist/FileView.js +449 -0
  22. package/dist/FileView.js.map +1 -0
  23. package/dist/Modes.d.ts +13 -0
  24. package/dist/Modes.js +75 -0
  25. package/dist/Modes.js.map +1 -0
  26. package/dist/VoiceCall.d.ts +91 -0
  27. package/dist/VoiceCall.js +302 -0
  28. package/dist/VoiceCall.js.map +1 -0
  29. package/dist/about.d.ts +212 -0
  30. package/dist/about.js +136 -0
  31. package/dist/about.js.map +1 -0
  32. package/dist/agentIcons.d.ts +33 -0
  33. package/dist/agentIcons.js +36 -0
  34. package/dist/agentIcons.js.map +1 -0
  35. package/dist/automation/Automation.d.ts +35 -0
  36. package/dist/automation/Automation.js +268 -0
  37. package/dist/automation/Automation.js.map +1 -0
  38. package/dist/automation/RunView.d.ts +25 -0
  39. package/dist/automation/RunView.js +187 -0
  40. package/dist/automation/RunView.js.map +1 -0
  41. package/dist/automation/cron.d.ts +41 -0
  42. package/dist/automation/cron.js +169 -0
  43. package/dist/automation/cron.js.map +1 -0
  44. package/dist/automation/marks.js +121 -0
  45. package/dist/automation/marks.js.map +1 -0
  46. package/dist/automation/messages.d.ts +113 -0
  47. package/dist/automation/messages.js +113 -0
  48. package/dist/automation/messages.js.map +1 -0
  49. package/dist/automation/record.d.ts +47 -0
  50. package/dist/automation/record.js +177 -0
  51. package/dist/automation/record.js.map +1 -0
  52. package/dist/automation/types.d.ts +143 -0
  53. package/dist/automation/when.d.ts +36 -0
  54. package/dist/automation/when.js +168 -0
  55. package/dist/automation/when.js.map +1 -0
  56. package/dist/blocks.d.ts +185 -0
  57. package/dist/browser.js +292 -0
  58. package/dist/browser.js.map +1 -0
  59. package/dist/call.d.ts +89 -0
  60. package/dist/call.js +218 -0
  61. package/dist/call.js.map +1 -0
  62. package/dist/channelParts.js +26 -0
  63. package/dist/channelParts.js.map +1 -0
  64. package/dist/classes.js +8 -3
  65. package/dist/classes.js.map +1 -0
  66. package/dist/client.d.ts +146 -54
  67. package/dist/client.js +204 -1
  68. package/dist/client.js.map +1 -0
  69. package/dist/conversationFiles.js +46 -0
  70. package/dist/conversationFiles.js.map +1 -0
  71. package/dist/credentials.d.ts +45 -0
  72. package/dist/credentials.js +98 -0
  73. package/dist/credentials.js.map +1 -0
  74. package/dist/dev.js +17 -0
  75. package/dist/dev.js.map +1 -0
  76. package/dist/es.d.ts +17 -0
  77. package/dist/es.js +382 -0
  78. package/dist/es.js.map +1 -0
  79. package/dist/files.d.ts +21 -0
  80. package/dist/files.js +214 -0
  81. package/dist/files.js.map +1 -0
  82. package/dist/frames.d.ts +115 -0
  83. package/dist/frames.js +219 -0
  84. package/dist/frames.js.map +1 -0
  85. package/dist/icons.js +29 -0
  86. package/dist/icons.js.map +1 -0
  87. package/dist/index.d.ts +63 -60
  88. package/dist/index.js +59 -45
  89. package/dist/kit/AudioPlayer.d.ts +20 -0
  90. package/dist/kit/AudioPlayer.js +116 -0
  91. package/dist/kit/AudioPlayer.js.map +1 -0
  92. package/dist/kit/Button.d.ts +29 -0
  93. package/dist/kit/Button.js +59 -0
  94. package/dist/kit/Button.js.map +1 -0
  95. package/dist/kit/Card.d.ts +16 -0
  96. package/dist/kit/Card.js +36 -0
  97. package/dist/kit/Card.js.map +1 -0
  98. package/dist/kit/Chart.js +152 -0
  99. package/dist/kit/Chart.js.map +1 -0
  100. package/dist/kit/Choices.d.ts +21 -0
  101. package/dist/kit/Choices.js +99 -0
  102. package/dist/kit/Choices.js.map +1 -0
  103. package/dist/kit/Combobox.d.ts +26 -0
  104. package/dist/kit/Combobox.js +190 -0
  105. package/dist/kit/Combobox.js.map +1 -0
  106. package/dist/kit/DateField.d.ts +17 -0
  107. package/dist/kit/DateField.js +133 -0
  108. package/dist/kit/DateField.js.map +1 -0
  109. package/dist/kit/Field.d.ts +40 -0
  110. package/dist/kit/Field.js +98 -0
  111. package/dist/kit/Field.js.map +1 -0
  112. package/dist/kit/FileField.d.ts +113 -0
  113. package/dist/kit/FileField.js +341 -0
  114. package/dist/kit/FileField.js.map +1 -0
  115. package/dist/kit/FileMark.d.ts +15 -0
  116. package/dist/kit/FileMark.js +39 -0
  117. package/dist/kit/FileMark.js.map +1 -0
  118. package/dist/kit/Inputs.d.ts +59 -0
  119. package/dist/kit/Inputs.js +205 -0
  120. package/dist/kit/Inputs.js.map +1 -0
  121. package/dist/kit/List.d.ts +47 -0
  122. package/dist/kit/List.js +85 -0
  123. package/dist/kit/List.js.map +1 -0
  124. package/dist/kit/Mark.d.ts +30 -0
  125. package/dist/kit/Mark.js +27 -0
  126. package/dist/kit/Mark.js.map +1 -0
  127. package/dist/kit/MarkStack.d.ts +15 -0
  128. package/dist/kit/MarkStack.js +26 -0
  129. package/dist/kit/MarkStack.js.map +1 -0
  130. package/dist/kit/Note.d.ts +11 -0
  131. package/dist/kit/Note.js +31 -0
  132. package/dist/kit/Note.js.map +1 -0
  133. package/dist/kit/Popover.js +90 -0
  134. package/dist/kit/Popover.js.map +1 -0
  135. package/dist/kit/RangeField.d.ts +14 -0
  136. package/dist/kit/RangeField.js +47 -0
  137. package/dist/kit/RangeField.js.map +1 -0
  138. package/dist/kit/RatingField.d.ts +14 -0
  139. package/dist/kit/RatingField.js +50 -0
  140. package/dist/kit/RatingField.js.map +1 -0
  141. package/dist/kit/Stat.d.ts +26 -0
  142. package/dist/kit/Stat.js +46 -0
  143. package/dist/kit/Stat.js.map +1 -0
  144. package/dist/kit/Switch.d.ts +14 -0
  145. package/dist/kit/Switch.js +21 -0
  146. package/dist/kit/Switch.js.map +1 -0
  147. package/dist/kit/Tag.d.ts +16 -0
  148. package/dist/kit/Tag.js +20 -0
  149. package/dist/kit/Tag.js.map +1 -0
  150. package/dist/kit/Tile.d.ts +34 -0
  151. package/dist/kit/Tile.js +52 -0
  152. package/dist/kit/Tile.js.map +1 -0
  153. package/dist/kit/TimeField.d.ts +31 -0
  154. package/dist/kit/TimeField.js +109 -0
  155. package/dist/kit/TimeField.js.map +1 -0
  156. package/dist/kit/context.d.ts +22 -0
  157. package/dist/kit/context.js +46 -0
  158. package/dist/kit/context.js.map +1 -0
  159. package/dist/kit/dates.d.ts +14 -0
  160. package/dist/kit/dates.js +129 -0
  161. package/dist/kit/dates.js.map +1 -0
  162. package/dist/kit/messages.d.ts +99 -0
  163. package/dist/kit/messages.js +66 -0
  164. package/dist/kit/messages.js.map +1 -0
  165. package/dist/kit/numbers.d.ts +12 -0
  166. package/dist/kit/numbers.js +40 -0
  167. package/dist/kit/numbers.js.map +1 -0
  168. package/dist/kit/options.d.ts +10 -0
  169. package/dist/kit/options.js +23 -0
  170. package/dist/kit/options.js.map +1 -0
  171. package/dist/kit/uploads.d.ts +42 -0
  172. package/dist/kit/uploads.js +165 -0
  173. package/dist/kit/uploads.js.map +1 -0
  174. package/dist/kit/waveform.js +76 -0
  175. package/dist/kit/waveform.js.map +1 -0
  176. package/dist/locale.d.ts +1 -0
  177. package/dist/locale.js +1 -0
  178. package/dist/markdown.js +84 -0
  179. package/dist/markdown.js.map +1 -0
  180. package/dist/marks.js +217 -0
  181. package/dist/marks.js.map +1 -0
  182. package/dist/reveal.js +48 -0
  183. package/dist/reveal.js.map +1 -0
  184. package/dist/stepGlyphs.js +62 -0
  185. package/dist/stepGlyphs.js.map +1 -0
  186. package/dist/surface/Form.js +264 -0
  187. package/dist/surface/Form.js.map +1 -0
  188. package/dist/surface/Markdown.js +42 -0
  189. package/dist/surface/Markdown.js.map +1 -0
  190. package/dist/surface/Surface.d.ts +31 -17
  191. package/dist/surface/Surface.js +480 -57
  192. package/dist/surface/Surface.js.map +1 -0
  193. package/dist/surface/scope.d.ts +32 -0
  194. package/dist/surface/scope.js +23 -0
  195. package/dist/surface/scope.js.map +1 -0
  196. package/dist/surface/values.d.ts +44 -0
  197. package/dist/surface/values.js +237 -0
  198. package/dist/surface/values.js.map +1 -0
  199. package/dist/tint.d.ts +10 -0
  200. package/dist/tint.js +19 -0
  201. package/dist/tint.js.map +1 -0
  202. package/dist/types.d.ts +534 -0
  203. package/dist/types.js +16 -0
  204. package/dist/types.js.map +1 -0
  205. package/dist/useAgentFace.d.ts +18 -0
  206. package/dist/useAgentFace.js +45 -0
  207. package/dist/useAgentFace.js.map +1 -0
  208. package/dist/useCall.d.ts +39 -0
  209. package/dist/useCall.js +273 -0
  210. package/dist/useCall.js.map +1 -0
  211. package/dist/useConversation.d.ts +77 -0
  212. package/dist/useConversation.js +523 -0
  213. package/dist/useConversation.js.map +1 -0
  214. package/dist/useDictation.d.ts +17 -0
  215. package/dist/useDictation.js +68 -0
  216. package/dist/useDictation.js.map +1 -0
  217. package/dist/useLive.d.ts +26 -0
  218. package/dist/useLive.js +88 -0
  219. package/dist/useLive.js.map +1 -0
  220. package/dist/usePolled.js +68 -0
  221. package/dist/usePolled.js.map +1 -0
  222. package/dist/voice/Orb.d.ts +10 -9
  223. package/dist/voice/Orb.js +43 -39
  224. package/dist/voice/Orb.js.map +1 -0
  225. package/dist/voice/StillOrb.js +33 -0
  226. package/dist/voice/StillOrb.js.map +1 -0
  227. package/dist/voice/WebGLOrb.js +98 -0
  228. package/dist/voice/WebGLOrb.js.map +1 -0
  229. package/dist/voice/fluidDots.js +161 -0
  230. package/dist/voice/fluidDots.js.map +1 -0
  231. package/dist/voice/motion.js +84 -0
  232. package/dist/voice/motion.js.map +1 -0
  233. package/dist/voice/orbs.d.ts +32 -0
  234. package/dist/voice/orbs.js +16 -0
  235. package/dist/voice/orbs.js.map +1 -0
  236. package/dist/voice/useReducedMotion.js +16 -16
  237. package/dist/voice/useReducedMotion.js.map +1 -0
  238. package/dist/voice/wave.js +116 -0
  239. package/dist/voice/wave.js.map +1 -0
  240. package/dist/voice/webgl.js +177 -0
  241. package/dist/voice/webgl.js.map +1 -0
  242. package/dist/widget.js +284 -8
  243. package/package.json +49 -39
  244. package/src/AgentAbout.tsx +1621 -0
  245. package/src/AgentCard.tsx +123 -0
  246. package/src/AgentChat.tsx +1795 -0
  247. package/src/AgentSpace.tsx +540 -0
  248. package/src/AgentTasks.tsx +163 -0
  249. package/src/BrowserView.tsx +442 -0
  250. package/src/FileView.tsx +620 -0
  251. package/src/Modes.tsx +112 -0
  252. package/src/VoiceCall.tsx +411 -0
  253. package/src/about.ts +355 -0
  254. package/src/agentIcons.ts +56 -0
  255. package/src/automation/Automation.tsx +308 -0
  256. package/src/automation/RunView.tsx +213 -0
  257. package/src/automation/cron.ts +196 -0
  258. package/src/automation/marks.tsx +144 -0
  259. package/src/automation/messages.ts +231 -0
  260. package/src/automation/record.ts +206 -0
  261. package/src/automation/types.ts +146 -0
  262. package/src/automation/when.ts +195 -0
  263. package/src/blocks.ts +249 -0
  264. package/src/browser.ts +334 -0
  265. package/src/call.ts +300 -0
  266. package/src/channelParts.ts +17 -0
  267. package/src/classes.ts +10 -0
  268. package/src/client.ts +397 -0
  269. package/src/conversationFiles.ts +54 -0
  270. package/src/credentials.ts +158 -0
  271. package/src/dev.ts +20 -0
  272. package/src/es.ts +423 -0
  273. package/src/files.ts +238 -0
  274. package/src/frames.ts +291 -0
  275. package/src/icons.tsx +49 -0
  276. package/src/index.ts +270 -0
  277. package/src/kit/AudioPlayer.tsx +129 -0
  278. package/src/kit/Button.tsx +97 -0
  279. package/src/kit/Card.tsx +47 -0
  280. package/src/kit/Chart.tsx +129 -0
  281. package/src/kit/Choices.tsx +131 -0
  282. package/src/kit/Combobox.tsx +247 -0
  283. package/src/kit/DateField.tsx +156 -0
  284. package/src/kit/Field.tsx +137 -0
  285. package/src/kit/FileField.tsx +492 -0
  286. package/src/kit/FileMark.tsx +56 -0
  287. package/src/kit/Inputs.tsx +250 -0
  288. package/src/kit/List.tsx +135 -0
  289. package/src/kit/Mark.tsx +64 -0
  290. package/src/kit/MarkStack.tsx +29 -0
  291. package/src/kit/Note.tsx +42 -0
  292. package/src/kit/Popover.tsx +121 -0
  293. package/src/kit/RangeField.tsx +53 -0
  294. package/src/kit/RatingField.tsx +62 -0
  295. package/src/kit/Stat.tsx +60 -0
  296. package/src/kit/Switch.tsx +28 -0
  297. package/src/kit/Tag.tsx +32 -0
  298. package/src/kit/Tile.tsx +74 -0
  299. package/src/kit/TimeField.tsx +157 -0
  300. package/src/kit/context.tsx +246 -0
  301. package/src/kit/dates.ts +150 -0
  302. package/src/kit/messages.ts +160 -0
  303. package/src/kit/numbers.ts +44 -0
  304. package/src/kit/options.ts +30 -0
  305. package/src/kit/uploads.ts +244 -0
  306. package/src/kit/waveform.ts +84 -0
  307. package/src/locale.ts +6 -0
  308. package/src/markdown.ts +69 -0
  309. package/src/marks.tsx +328 -0
  310. package/src/reveal.ts +52 -0
  311. package/src/stepGlyphs.ts +83 -0
  312. package/src/styles.css +6961 -0
  313. package/src/surface/Form.tsx +299 -0
  314. package/src/surface/Markdown.tsx +55 -0
  315. package/src/surface/Surface.tsx +605 -0
  316. package/src/surface/scope.ts +82 -0
  317. package/src/surface/values.ts +361 -0
  318. package/src/tint.ts +14 -0
  319. package/src/types.ts +596 -0
  320. package/src/useAgentFace.ts +47 -0
  321. package/src/useCall.ts +292 -0
  322. package/src/useConversation.ts +627 -0
  323. package/src/useDictation.ts +83 -0
  324. package/src/useLive.ts +115 -0
  325. package/src/usePolled.ts +60 -0
  326. package/src/voice/Orb.tsx +45 -0
  327. package/src/voice/StillOrb.tsx +29 -0
  328. package/src/voice/WebGLOrb.tsx +98 -0
  329. package/src/voice/fluidDots.tsx +171 -0
  330. package/src/voice/motion.ts +112 -0
  331. package/src/voice/orbs.ts +39 -0
  332. package/src/voice/useReducedMotion.ts +24 -0
  333. package/src/voice/wave.tsx +129 -0
  334. package/src/voice/webgl.ts +209 -0
  335. package/src/widget/css.d.ts +5 -0
  336. package/src/widget/element.tsx +535 -0
  337. package/src/widget/index.ts +10 -0
  338. package/src/widget/mount.ts +27 -0
  339. package/src/widget/widget.css +253 -0
  340. package/dist/SignalcoreProvider.d.ts +0 -113
  341. package/dist/SignalcoreProvider.js +0 -84
  342. package/dist/automations/AppMarks.d.ts +0 -11
  343. package/dist/automations/AppMarks.js +0 -18
  344. package/dist/automations/AutomationCard.d.ts +0 -27
  345. package/dist/automations/AutomationCard.js +0 -53
  346. package/dist/automations/AutomationsWindow.d.ts +0 -38
  347. package/dist/automations/AutomationsWindow.js +0 -57
  348. package/dist/automations/Card.d.ts +0 -46
  349. package/dist/automations/Card.js +0 -45
  350. package/dist/automations/ScheduleMarks.d.ts +0 -13
  351. package/dist/automations/ScheduleMarks.js +0 -24
  352. package/dist/automations/presentationIcons.d.ts +0 -7
  353. package/dist/automations/presentationIcons.js +0 -67
  354. package/dist/automations/schedule.d.ts +0 -25
  355. package/dist/automations/schedule.js +0 -59
  356. package/dist/automations/time.d.ts +0 -3
  357. package/dist/automations/time.js +0 -25
  358. package/dist/browser/BrowserView.d.ts +0 -43
  359. package/dist/browser/BrowserView.js +0 -94
  360. package/dist/browser/room.d.ts +0 -21
  361. package/dist/browser/room.js +0 -33
  362. package/dist/browser/useBrowserSession.d.ts +0 -17
  363. package/dist/browser/useBrowserSession.js +0 -67
  364. package/dist/builder/BuilderChat.d.ts +0 -32
  365. package/dist/builder/BuilderChat.js +0 -41
  366. package/dist/builder/BuilderTranscript.d.ts +0 -49
  367. package/dist/builder/BuilderTranscript.js +0 -62
  368. package/dist/builder/StatusLine.d.ts +0 -8
  369. package/dist/builder/StatusLine.js +0 -17
  370. package/dist/builder/answer.d.ts +0 -7
  371. package/dist/builder/answer.js +0 -8
  372. package/dist/builder/blocks.d.ts +0 -31
  373. package/dist/builder/blocks.js +0 -74
  374. package/dist/builder/items.d.ts +0 -15
  375. package/dist/builder/items.js +0 -21
  376. package/dist/builder/steps.d.ts +0 -20
  377. package/dist/builder/steps.js +0 -120
  378. package/dist/builder/time.d.ts +0 -4
  379. package/dist/builder/time.js +0 -24
  380. package/dist/builder/useBuildSession.d.ts +0 -36
  381. package/dist/builder/useBuildSession.js +0 -130
  382. package/dist/builder/workingOn.d.ts +0 -7
  383. package/dist/builder/workingOn.js +0 -15
  384. package/dist/chat/AgentChat.d.ts +0 -37
  385. package/dist/chat/AgentChat.js +0 -21
  386. package/dist/chat/ChatView.d.ts +0 -25
  387. package/dist/chat/ChatView.js +0 -34
  388. package/dist/chat/Composer.d.ts +0 -20
  389. package/dist/chat/Composer.js +0 -22
  390. package/dist/chat/MessageRow.d.ts +0 -22
  391. package/dist/chat/MessageRow.js +0 -32
  392. package/dist/chat/arrival.d.ts +0 -15
  393. package/dist/chat/arrival.js +0 -25
  394. package/dist/chat/history.d.ts +0 -24
  395. package/dist/chat/history.js +0 -45
  396. package/dist/chat/moments.d.ts +0 -25
  397. package/dist/chat/moments.js +0 -72
  398. package/dist/chat/types.d.ts +0 -12
  399. package/dist/chat/types.js +0 -1
  400. package/dist/chat/useComposer.d.ts +0 -46
  401. package/dist/chat/useComposer.js +0 -62
  402. package/dist/chat/useConversation.d.ts +0 -35
  403. package/dist/chat/useConversation.js +0 -71
  404. package/dist/chat/useStickToBottom.d.ts +0 -9
  405. package/dist/chat/useStickToBottom.js +0 -33
  406. package/dist/chat/useTurns.d.ts +0 -49
  407. package/dist/chat/useTurns.js +0 -111
  408. package/dist/classes.d.ts +0 -2
  409. package/dist/development.d.ts +0 -5
  410. package/dist/development.js +0 -8
  411. package/dist/flow/FlowWindow.d.ts +0 -42
  412. package/dist/flow/FlowWindow.js +0 -126
  413. package/dist/flow/index.d.ts +0 -16
  414. package/dist/flow/index.js +0 -16
  415. package/dist/flow/kinds.d.ts +0 -23
  416. package/dist/flow/kinds.js +0 -48
  417. package/dist/flow/map.d.ts +0 -44
  418. package/dist/flow/map.js +0 -225
  419. package/dist/flow/nodePaths.d.ts +0 -7
  420. package/dist/flow/nodePaths.js +0 -17
  421. package/dist/flow/relations.d.ts +0 -42
  422. package/dist/flow/relations.js +0 -174
  423. package/dist/host.d.ts +0 -124
  424. package/dist/host.js +0 -1
  425. package/dist/live/LiveView.d.ts +0 -28
  426. package/dist/live/LiveView.js +0 -55
  427. package/dist/live/capture.d.ts +0 -20
  428. package/dist/live/capture.js +0 -100
  429. package/dist/live/follow.d.ts +0 -26
  430. package/dist/live/follow.js +0 -72
  431. package/dist/live/paint.d.ts +0 -13
  432. package/dist/live/paint.js +0 -77
  433. package/dist/live/useLiveStream.d.ts +0 -16
  434. package/dist/live/useLiveStream.js +0 -57
  435. package/dist/look.d.ts +0 -33
  436. package/dist/look.js +0 -241
  437. package/dist/messages/en.d.ts +0 -3
  438. package/dist/messages/en.js +0 -251
  439. package/dist/messages/es.d.ts +0 -3
  440. package/dist/messages/es.js +0 -251
  441. package/dist/messages/index.d.ts +0 -16
  442. package/dist/messages/index.js +0 -33
  443. package/dist/messages/types.d.ts +0 -246
  444. package/dist/messages/types.js +0 -1
  445. package/dist/parts/Button.d.ts +0 -18
  446. package/dist/parts/Button.js +0 -17
  447. package/dist/parts/Icon.d.ts +0 -39
  448. package/dist/parts/Icon.js +0 -37
  449. package/dist/parts/Input.d.ts +0 -6
  450. package/dist/parts/Input.js +0 -11
  451. package/dist/parts/Spinner.d.ts +0 -2
  452. package/dist/parts/Spinner.js +0 -7
  453. package/dist/patterns.d.ts +0 -15
  454. package/dist/patterns.js +0 -5
  455. package/dist/presets.d.ts +0 -82
  456. package/dist/presets.js +0 -81
  457. package/dist/primitives.d.ts +0 -22
  458. package/dist/primitives.js +0 -58
  459. package/dist/request/RequestCard.d.ts +0 -34
  460. package/dist/request/RequestCard.js +0 -101
  461. package/dist/request/approval/ApprovalPreview.d.ts +0 -5
  462. package/dist/request/approval/ApprovalPreview.js +0 -27
  463. package/dist/request/approval/shapes.d.ts +0 -32
  464. package/dist/request/approval/shapes.js +0 -68
  465. package/dist/request/apps.d.ts +0 -11
  466. package/dist/request/apps.js +0 -27
  467. package/dist/request/cards.d.ts +0 -12
  468. package/dist/request/cards.js +0 -24
  469. package/dist/request/deliver.d.ts +0 -12
  470. package/dist/request/deliver.js +0 -21
  471. package/dist/request/handOver.d.ts +0 -18
  472. package/dist/request/handOver.js +0 -33
  473. package/dist/request/kinds/Approval.d.ts +0 -3
  474. package/dist/request/kinds/Approval.js +0 -9
  475. package/dist/request/kinds/Choice.d.ts +0 -3
  476. package/dist/request/kinds/Choice.js +0 -8
  477. package/dist/request/kinds/Connect.d.ts +0 -9
  478. package/dist/request/kinds/Connect.js +0 -119
  479. package/dist/request/kinds/FreeText.d.ts +0 -3
  480. package/dist/request/kinds/FreeText.js +0 -20
  481. package/dist/request/kinds/HandOver.d.ts +0 -13
  482. package/dist/request/kinds/HandOver.js +0 -20
  483. package/dist/request/kinds/Secret.d.ts +0 -7
  484. package/dist/request/kinds/Secret.js +0 -49
  485. package/dist/request/kinds/Upload.d.ts +0 -6
  486. package/dist/request/kinds/Upload.js +0 -47
  487. package/dist/request/types.d.ts +0 -83
  488. package/dist/request/types.js +0 -1
  489. package/dist/safeUrl.d.ts +0 -6
  490. package/dist/safeUrl.js +0 -8
  491. package/dist/stream/builder.d.ts +0 -176
  492. package/dist/stream/builder.js +0 -202
  493. package/dist/stream/reduce.d.ts +0 -51
  494. package/dist/stream/reduce.js +0 -58
  495. package/dist/stream/untilAborted.d.ts +0 -7
  496. package/dist/stream/untilAborted.js +0 -32
  497. package/dist/stream/useRunStream.d.ts +0 -26
  498. package/dist/stream/useRunStream.js +0 -137
  499. package/dist/styles.css +0 -2318
  500. package/dist/surface/HostNode.d.ts +0 -14
  501. package/dist/surface/HostNode.js +0 -30
  502. package/dist/surface/Node.d.ts +0 -7
  503. package/dist/surface/Node.js +0 -49
  504. package/dist/surface/SurfaceBoundary.d.ts +0 -26
  505. package/dist/surface/SurfaceBoundary.js +0 -20
  506. package/dist/surface/bindings.d.ts +0 -14
  507. package/dist/surface/bindings.js +0 -37
  508. package/dist/surface/check.d.ts +0 -27
  509. package/dist/surface/check.js +0 -102
  510. package/dist/surface/format.d.ts +0 -10
  511. package/dist/surface/format.js +0 -32
  512. package/dist/surface/hosts.d.ts +0 -6
  513. package/dist/surface/hosts.js +0 -11
  514. package/dist/surface/scene.d.ts +0 -21
  515. package/dist/surface/scene.js +0 -8
  516. package/dist/surface/templates/Browser.d.ts +0 -6
  517. package/dist/surface/templates/Browser.js +0 -11
  518. package/dist/surface/templates/Chart.d.ts +0 -6
  519. package/dist/surface/templates/Chart.js +0 -13
  520. package/dist/surface/templates/Choices.d.ts +0 -3
  521. package/dist/surface/templates/Choices.js +0 -12
  522. package/dist/surface/templates/Form.d.ts +0 -3
  523. package/dist/surface/templates/Form.js +0 -44
  524. package/dist/surface/templates/KeyValue.d.ts +0 -3
  525. package/dist/surface/templates/KeyValue.js +0 -7
  526. package/dist/surface/templates/Layout.d.ts +0 -5
  527. package/dist/surface/templates/Layout.js +0 -16
  528. package/dist/surface/templates/Live.d.ts +0 -6
  529. package/dist/surface/templates/Live.js +0 -9
  530. package/dist/surface/templates/Media.d.ts +0 -5
  531. package/dist/surface/templates/Media.js +0 -13
  532. package/dist/surface/templates/Slots.d.ts +0 -3
  533. package/dist/surface/templates/Slots.js +0 -19
  534. package/dist/surface/templates/Table.d.ts +0 -3
  535. package/dist/surface/templates/Table.js +0 -12
  536. package/dist/surface/templates/Text.d.ts +0 -4
  537. package/dist/surface/templates/Text.js +0 -15
  538. package/dist/surface/templates/index.d.ts +0 -7
  539. package/dist/surface/templates/index.js +0 -32
  540. package/dist/surface/types.d.ts +0 -68
  541. package/dist/surface/types.js +0 -6
  542. package/dist/theme.d.ts +0 -62
  543. package/dist/theme.js +0 -9
  544. package/dist/useTokens.d.ts +0 -7
  545. package/dist/useTokens.js +0 -41
  546. package/dist/voice/VoiceWindow.d.ts +0 -18
  547. package/dist/voice/VoiceWindow.js +0 -35
  548. package/dist/voice/index.d.ts +0 -13
  549. package/dist/voice/index.js +0 -12
  550. package/dist/voice/meter.d.ts +0 -16
  551. package/dist/voice/meter.js +0 -52
  552. package/dist/voice/orbColors.d.ts +0 -16
  553. package/dist/voice/orbColors.js +0 -75
  554. package/dist/voice/pushable.d.ts +0 -16
  555. package/dist/voice/pushable.js +0 -56
  556. package/dist/voice/useDictation.d.ts +0 -24
  557. package/dist/voice/useDictation.js +0 -60
  558. package/dist/voice/useReducedMotion.d.ts +0 -5
  559. package/dist/voice/useVoice.d.ts +0 -70
  560. package/dist/voice/useVoice.js +0 -197
  561. package/dist/voice/useVoicePrimitives.d.ts +0 -7
  562. package/dist/voice/useVoicePrimitives.js +0 -11
  563. package/dist/voice/voice.d.ts +0 -55
  564. package/dist/voice/voice.js +0 -9
  565. package/dist/voice/webSpeech.d.ts +0 -33
  566. package/dist/voice/webSpeech.js +0 -258
  567. package/dist/widget.js.map +0 -1
  568. package/dist/windows/AgentSpace.d.ts +0 -78
  569. package/dist/windows/AgentSpace.js +0 -135
  570. package/dist/windows/Captions.d.ts +0 -13
  571. package/dist/windows/Captions.js +0 -22
  572. package/dist/windows/Dock.d.ts +0 -37
  573. package/dist/windows/Dock.js +0 -22
  574. package/dist/windows/Journal.d.ts +0 -15
  575. package/dist/windows/Journal.js +0 -19
  576. package/dist/windows/KindMark.d.ts +0 -7
  577. package/dist/windows/KindMark.js +0 -31
  578. package/dist/windows/Pending.d.ts +0 -8
  579. package/dist/windows/Pending.js +0 -17
  580. package/dist/windows/Stage.d.ts +0 -18
  581. package/dist/windows/Stage.js +0 -21
  582. package/dist/windows/StatusLabel.d.ts +0 -9
  583. package/dist/windows/StatusLabel.js +0 -7
  584. package/dist/windows/Strip.d.ts +0 -17
  585. package/dist/windows/Strip.js +0 -42
  586. package/dist/windows/SurfaceWindow.d.ts +0 -20
  587. package/dist/windows/SurfaceWindow.js +0 -12
  588. package/dist/windows/WindowFrame.d.ts +0 -23
  589. package/dist/windows/WindowFrame.js +0 -22
  590. package/dist/windows/hearing.d.ts +0 -11
  591. package/dist/windows/hearing.js +0 -26
  592. package/dist/windows/kinds.d.ts +0 -47
  593. package/dist/windows/kinds.js +0 -28
  594. package/dist/windows/reduce.d.ts +0 -98
  595. package/dist/windows/reduce.js +0 -151
  596. package/dist/windows/registry.d.ts +0 -18
  597. package/dist/windows/registry.js +0 -61
  598. package/dist/windows/reveal.d.ts +0 -9
  599. package/dist/windows/reveal.js +0 -6
  600. package/dist/windows/space.d.ts +0 -21
  601. package/dist/windows/space.js +0 -6
  602. package/dist/windows/status.d.ts +0 -11
  603. package/dist/windows/status.js +0 -30
  604. package/dist/windows/types.d.ts +0 -15
  605. package/dist/windows/types.js +0 -1
  606. package/dist/windows/useLoaded.d.ts +0 -44
  607. package/dist/windows/useLoaded.js +0 -58
  608. package/dist/windows/useUnread.d.ts +0 -7
  609. package/dist/windows/useUnread.js +0 -21
  610. package/dist/windows/useWindows.d.ts +0 -70
  611. package/dist/windows/useWindows.js +0 -60
@@ -1,46 +0,0 @@
1
- import { type ChangeEvent, type KeyboardEvent, type RefObject } from "react";
2
- export interface ComposerOptions {
3
- /** The person sent what is written (not trimmed: the one who receives it decides). */
4
- onSend: (text: string) => void;
5
- /** A turn is running and can be stopped: Esc in the box stops it. */
6
- onStop?: (() => void) | undefined;
7
- /** A turn is running: nothing more can be sent. */
8
- live?: boolean | undefined;
9
- /** Nothing can be sent for now (the history is being read). The box stays free to write in. */
10
- disabled?: boolean | undefined;
11
- /** The text, when the host holds it (to add dictated words); else the hook keeps it. */
12
- value?: string | undefined;
13
- onValueChange?: ((value: string) => void) | undefined;
14
- /** Something other than text is ready to go (a file attached), so an empty message may be sent. */
15
- ready?: boolean | undefined;
16
- /** Sending must wait for something (a file still uploading). */
17
- blocked?: boolean | undefined;
18
- /** Take the focus whenever this changes. */
19
- focusSignal?: number | undefined;
20
- /** Whether Esc in the box stops a running turn (default). A host that listens to Esc itself turns it off. */
21
- escapeStops?: boolean | undefined;
22
- }
23
- export interface Composer {
24
- text: string;
25
- /** There is something to send, and nothing in the way. */
26
- canSend: boolean;
27
- /** Sends what is written, and empties the box. Nothing when it cannot be sent. */
28
- send: () => void;
29
- focus: () => void;
30
- /** What to spread onto the `<textarea>`: it grows with the text, Enter sends, Shift+Enter breaks the line. */
31
- input: {
32
- ref: RefObject<HTMLTextAreaElement | null>;
33
- rows: 1;
34
- value: string;
35
- onChange: (event: ChangeEvent<HTMLTextAreaElement>) => void;
36
- onKeyDown: (event: KeyboardEvent<HTMLTextAreaElement>) => void;
37
- };
38
- }
39
- /**
40
- * The behavior of the message box, without its look: what is written (held here or by the host),
41
- * when it can be sent, a box that grows with its text and takes the focus when asked, Enter to
42
- * send (never in the middle of an IME composition), Shift+Enter for a new line, and Esc to stop a
43
- * running turn. `Composer` is this with the package's markup; a host with its own look uses it
44
- * with its own.
45
- */
46
- export declare function useComposer({ onSend, onStop, live, disabled, value, onValueChange, ready, blocked, focusSignal, escapeStops, }: ComposerOptions): Composer;
@@ -1,62 +0,0 @@
1
- import { useEffect, useLayoutEffect, useRef, useState, } from "react";
2
- /** How tall the box may grow with what is written before it scrolls. */
3
- const MAX_HEIGHT_PX = 200;
4
- /**
5
- * The behavior of the message box, without its look: what is written (held here or by the host),
6
- * when it can be sent, a box that grows with its text and takes the focus when asked, Enter to
7
- * send (never in the middle of an IME composition), Shift+Enter for a new line, and Esc to stop a
8
- * running turn. `Composer` is this with the package's markup; a host with its own look uses it
9
- * with its own.
10
- */
11
- export function useComposer({ onSend, onStop, live = false, disabled = false, value, onValueChange, ready = false, blocked = false, focusSignal, escapeStops = true, }) {
12
- const [own, setOwn] = useState("");
13
- const input = useRef(null);
14
- const text = value ?? own;
15
- const canSend = (text.trim() !== "" || ready) && !blocked && !live && !disabled;
16
- const change = (next) => {
17
- setOwn(next);
18
- onValueChange?.(next);
19
- };
20
- const send = () => {
21
- if (!canSend)
22
- return;
23
- onSend(text);
24
- change("");
25
- };
26
- useLayoutEffect(() => {
27
- const el = input.current;
28
- if (!el)
29
- return;
30
- el.style.height = "auto";
31
- el.style.height = `${Math.min(el.scrollHeight, MAX_HEIGHT_PX)}px`;
32
- }, [text]);
33
- useEffect(() => {
34
- if (focusSignal)
35
- input.current?.focus();
36
- }, [focusSignal]);
37
- return {
38
- text,
39
- canSend,
40
- send,
41
- focus: () => {
42
- input.current?.focus();
43
- },
44
- input: {
45
- ref: input,
46
- rows: 1,
47
- value: text,
48
- onChange: (event) => {
49
- change(event.target.value);
50
- },
51
- onKeyDown: (event) => {
52
- if (event.key === "Enter" && !event.shiftKey && !event.nativeEvent.isComposing) {
53
- event.preventDefault();
54
- send();
55
- }
56
- else if (event.key === "Escape" && live && escapeStops) {
57
- onStop?.();
58
- }
59
- },
60
- },
61
- };
62
- }
@@ -1,35 +0,0 @@
1
- import type { SurfaceAction } from "../surface/types.js";
2
- import type { ChatMessage } from "./types.js";
3
- export interface ConversationOptions {
4
- agentId: string;
5
- /** The conversation to speak in; the agent remembers it across messages. */
6
- thread?: string | undefined;
7
- /**
8
- * The messages already said in this thread, when the host can read them. Without it the chat
9
- * reads the caller's own conversation if the client can (`endUsers.myConversation`).
10
- */
11
- loadHistory?: ((thread: string | undefined) => Promise<ChatMessage[]>) | undefined;
12
- /** The person did something on a surface; it has already gone to the agent. */
13
- onSurfaceAction?: ((action: SurfaceAction) => void) | undefined;
14
- }
15
- export interface Conversation {
16
- messages: ChatMessage[];
17
- /** The history is being read. */
18
- loading: boolean;
19
- /** The agent is writing its answer. */
20
- answering: boolean;
21
- /** The run paused for the owner to confirm something, and goes on when they do. */
22
- waiting: boolean;
23
- /** Something went wrong; the text is for the person, not for a developer. */
24
- problem: string | undefined;
25
- /** What the agent just said, in words, for whoever cannot see the page; empty before it speaks. */
26
- announcement: string;
27
- send: (text: string) => void;
28
- /** The person picked or submitted something on a surface. */
29
- act: (action: SurfaceAction) => void;
30
- }
31
- /**
32
- * The conversation between a person and an agent: what was said before (the history), then each
33
- * message and its answer (`useTurns`, which the voice window sends its turns with too).
34
- */
35
- export declare function useConversation(options: ConversationOptions): Conversation;
@@ -1,71 +0,0 @@
1
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
- import { useMessages, useSignalcore } from "../SignalcoreProvider.js";
3
- import { historyOf } from "./history.js";
4
- import { useTurns } from "./useTurns.js";
5
- /**
6
- * The conversation between a person and an agent: what was said before (the history), then each
7
- * message and its answer (`useTurns`, which the voice window sends its turns with too).
8
- */
9
- export function useConversation(options) {
10
- const { agentId, thread } = options;
11
- const { client } = useSignalcore();
12
- const copy = useMessages();
13
- const turns = useTurns({ agentId, thread });
14
- const [past, setPast] = useState([]);
15
- const [cannotLoad, setCannotLoad] = useState();
16
- // The host's loader, else the caller's own conversation if the client can read it.
17
- const loader = options.loadHistory ?? historyOf(client, agentId);
18
- const [reading, setReading] = useState(loader !== undefined);
19
- const latest = useRef({ options, loader, copy });
20
- useEffect(() => {
21
- latest.current = { options, loader, copy };
22
- });
23
- // What was said before comes first, whatever the person typed while it was being read.
24
- useEffect(() => {
25
- const load = latest.current.loader;
26
- if (!load)
27
- return undefined;
28
- let current = true;
29
- load(thread).then((before) => {
30
- if (!current)
31
- return;
32
- setPast(before);
33
- setReading(false);
34
- }, () => {
35
- if (!current)
36
- return;
37
- setCannotLoad(latest.current.copy.cannotLoadConversation);
38
- setReading(false);
39
- });
40
- return () => {
41
- current = false;
42
- };
43
- }, [thread]);
44
- const { ask } = turns;
45
- const say = useCallback((body, shown) => {
46
- if (reading || !ask(body, shown))
47
- return false;
48
- setCannotLoad(undefined);
49
- return true;
50
- }, [ask, reading]);
51
- const send = useCallback((text) => {
52
- const input = text.trim();
53
- if (input)
54
- say({ input }, input);
55
- }, [say]);
56
- const act = useCallback((action) => {
57
- if (say({ action }, action.label))
58
- latest.current.options.onSurfaceAction?.(action);
59
- }, [say]);
60
- const messages = useMemo(() => [...past, ...turns.said], [past, turns.said]);
61
- return {
62
- messages,
63
- loading: reading,
64
- answering: turns.answering,
65
- waiting: turns.waiting,
66
- problem: turns.problem ?? cannotLoad,
67
- announcement: turns.announcement,
68
- send,
69
- act,
70
- };
71
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * Keeps a scroll container pinned to the bottom while its content grows, unless the reader has
3
- * scrolled up to look at something; scrolling back down pins it again. `scroller` goes on the
4
- * element that scrolls, `content` on the one inside it that grows.
5
- */
6
- export declare function useStickToBottom<S extends HTMLElement, C extends HTMLElement>(): {
7
- scroller: import("react").RefObject<S | null>;
8
- content: import("react").RefObject<C | null>;
9
- };
@@ -1,33 +0,0 @@
1
- import { useEffect, useRef } from "react";
2
- const NEAR_BOTTOM_PX = 80;
3
- /**
4
- * Keeps a scroll container pinned to the bottom while its content grows, unless the reader has
5
- * scrolled up to look at something; scrolling back down pins it again. `scroller` goes on the
6
- * element that scrolls, `content` on the one inside it that grows.
7
- */
8
- export function useStickToBottom() {
9
- const scroller = useRef(null);
10
- const content = useRef(null);
11
- const pinned = useRef(true);
12
- useEffect(() => {
13
- const el = scroller.current;
14
- const inner = content.current;
15
- // Where there is nothing to watch the size with, the page simply does not follow.
16
- if (!el || !inner || typeof ResizeObserver === "undefined")
17
- return undefined;
18
- const onScroll = () => {
19
- pinned.current = el.scrollHeight - el.scrollTop - el.clientHeight < NEAR_BOTTOM_PX;
20
- };
21
- const observer = new ResizeObserver(() => {
22
- if (pinned.current)
23
- el.scrollTop = el.scrollHeight;
24
- });
25
- el.addEventListener("scroll", onScroll, { passive: true });
26
- observer.observe(inner);
27
- return () => {
28
- el.removeEventListener("scroll", onScroll);
29
- observer.disconnect();
30
- };
31
- }, []);
32
- return { scroller, content };
33
- }
@@ -1,49 +0,0 @@
1
- import type { Schemas } from "@signalcore/sdk";
2
- import type { ChatMessage } from "./types.js";
3
- /** What `POST /v1/agents/{id}/invoke` takes. */
4
- type Invoke = Schemas["Invoke"];
5
- /**
6
- * How the person talks to the agent: by writing, or by voice (ADR 0011). A voice turn tells the
7
- * agent the person is listening, so it keeps its answer short and puts detail in a window.
8
- */
9
- export type Modality = NonNullable<Invoke["modality"]>;
10
- /** What a turn carries: the person's words or what they did on a surface. */
11
- export type TurnBody = Omit<Invoke, "thread" | "modality">;
12
- export interface TurnsOptions {
13
- agentId: string;
14
- /** The conversation to speak in; the agent remembers it across messages. */
15
- thread?: string | undefined;
16
- /**
17
- * How the person talks to the agent. Left out, the API takes it as written; `"voice"` tells
18
- * the agent they are listening.
19
- */
20
- modality?: Modality | undefined;
21
- }
22
- export interface Turns {
23
- /**
24
- * What was said since the turns began, oldest first: the person's messages and, after each,
25
- * the agent's answer (and what a run said once it went on after pausing).
26
- */
27
- said: ChatMessage[];
28
- /** The agent is writing its answer. */
29
- answering: boolean;
30
- /** The run paused for the owner to confirm something, and goes on when they do. */
31
- waiting: boolean;
32
- /** Something went wrong; the text is for the person, not for a developer. */
33
- problem: string | undefined;
34
- /** What the agent just said, in words, for whoever cannot see the page; empty before it speaks. */
35
- announcement: string;
36
- /**
37
- * Sends a turn to the agent: `shown` is how it reads in the conversation. Nothing is sent, and
38
- * this says so, while a turn is still under way or the client cannot invoke an agent.
39
- */
40
- ask: (body: TurnBody, shown: string) => boolean;
41
- }
42
- /**
43
- * The turns between a person and an agent, the one way both the chat and the voice window have:
44
- * a message goes out (`agents.invoke`, in the thread), the answer comes back, and a run that
45
- * paused for the owner to confirm something is followed until it ends and then shown. The
46
- * person never sees what was asked of the owner, only that the answer is waiting for it.
47
- */
48
- export declare function useTurns({ agentId, thread, modality }: TurnsOptions): Turns;
49
- export {};
@@ -1,111 +0,0 @@
1
- import { useCallback, useRef, useState } from "react";
2
- import { useMessages, useSignalcore } from "../SignalcoreProvider.js";
3
- import { surfaceOf } from "../surface/check.js";
4
- import { useRunStream } from "../stream/useRunStream.js";
5
- import { arrivalOf } from "./arrival.js";
6
- const IDLE = { kind: "idle" };
7
- /**
8
- * The turns between a person and an agent, the one way both the chat and the voice window have:
9
- * a message goes out (`agents.invoke`, in the thread), the answer comes back, and a run that
10
- * paused for the owner to confirm something is followed until it ends and then shown. The
11
- * person never sees what was asked of the owner, only that the answer is waiting for it.
12
- */
13
- export function useTurns({ agentId, thread, modality }) {
14
- const { client } = useSignalcore();
15
- const copy = useMessages();
16
- const invoke = client?.agents?.invoke;
17
- const [said, setSaid] = useState([]);
18
- const [phase, setPhase] = useState(IDLE);
19
- const [problem, setProblem] = useState();
20
- const [announcement, setAnnouncement] = useState("");
21
- const counter = useRef(0);
22
- const run = useRunStream(phase.kind === "following" ? phase.runId : undefined, { cards: false });
23
- if (phase.kind === "following" && (run.status === "done" || run.status === "failed")) {
24
- // The run is over: what it said after it paused joins the conversation (once, whatever
25
- // the number of times this renders), and the person can speak again.
26
- const arrival = arrivalOf(run.events);
27
- const failed = run.status === "failed" || arrival.failed;
28
- const id = `run-${phase.runId}`;
29
- if (arrival.text !== "" || arrival.surfaces.length > 0) {
30
- const message = {
31
- id,
32
- role: "agent",
33
- text: arrival.text,
34
- surfaces: arrival.surfaces,
35
- at: undefined,
36
- };
37
- setSaid((now) => (now.some((each) => each.id === id) ? now : [...now, message]));
38
- setAnnouncement(announce(message, copy));
39
- }
40
- if (failed)
41
- setProblem(copy.cannotFinishAnswer);
42
- setPhase(IDLE);
43
- }
44
- const ask = useCallback((body, shown) => {
45
- if (!invoke || phase.kind !== "idle")
46
- return false;
47
- counter.current += 1;
48
- const person = {
49
- id: `person-${counter.current}`,
50
- role: "person",
51
- text: shown,
52
- surfaces: [],
53
- at: new Date().toISOString(),
54
- };
55
- setSaid((now) => [...now, person]);
56
- setPhase({ kind: "answering" });
57
- setProblem(undefined);
58
- const turn = {
59
- ...body,
60
- ...(thread === undefined ? {} : { thread }),
61
- ...(modality === undefined ? {} : { modality }),
62
- };
63
- invoke(agentId, turn).then((answer) => {
64
- counter.current += 1;
65
- const reply = replyOf(answer, `agent-${counter.current}`, copy);
66
- if (reply) {
67
- setSaid((now) => [...now, reply]);
68
- setAnnouncement(announce(reply, copy));
69
- }
70
- setPhase(answer.waiting_for !== null && answer.run_id !== null
71
- ? { kind: "following", runId: answer.run_id }
72
- : IDLE);
73
- }, () => {
74
- setProblem(copy.cannotSendMessage);
75
- setPhase(IDLE);
76
- });
77
- return true;
78
- }, [invoke, phase.kind, agentId, thread, modality, copy]);
79
- return {
80
- said,
81
- answering: phase.kind === "answering",
82
- waiting: phase.kind === "following",
83
- problem,
84
- announcement,
85
- ask,
86
- };
87
- }
88
- /** What the agent answered, as a message; nothing when it said nothing at all. */
89
- function replyOf(answer, id, copy) {
90
- const surfaces = (answer.surfaces ?? []).flatMap((raw) => surfaceOf(raw) ?? []);
91
- // An escalated message has no answer from the agent: a person on the team will give it.
92
- const text = answer.text !== "" ? answer.text : answer.escalated ? copy.handedToPerson : "";
93
- if (text === "" && surfaces.length === 0)
94
- return undefined;
95
- return {
96
- id: answer.message_id ?? id,
97
- role: "agent",
98
- text,
99
- surfaces,
100
- at: new Date().toISOString(),
101
- };
102
- }
103
- /** A message in words alone: who said it, its text, and what its surfaces say in theirs. */
104
- function announce(message, copy) {
105
- const parts = [message.text, ...message.surfaces.map((surface) => surface.fallback_text)]
106
- .map((part) => part.trim())
107
- .filter((part) => part !== "");
108
- // Each part is a sentence: a pause between them, but not a second full stop.
109
- const words = parts.map((part) => (/[.!?…:]$/.test(part) ? part : `${part}.`)).join(" ");
110
- return `${copy.theAgent}: ${words}`;
111
- }
package/dist/classes.d.ts DELETED
@@ -1,2 +0,0 @@
1
- /** A class attribute from the parts that apply: falsy ones are skipped. */
2
- export declare function classes(...parts: (string | false | null | undefined)[]): string;
@@ -1,5 +0,0 @@
1
- /**
2
- * Tells the developer something the people using their page must never see: it is said in a
3
- * development build and kept quiet in a production one.
4
- */
5
- export declare function warnInDevelopment(message: string): void;
@@ -1,8 +0,0 @@
1
- /**
2
- * Tells the developer something the people using their page must never see: it is said in a
3
- * development build and kept quiet in a production one.
4
- */
5
- export function warnInDevelopment(message) {
6
- if (process.env.NODE_ENV !== "production")
7
- console.warn(message);
8
- }
@@ -1,42 +0,0 @@
1
- import "@xyflow/react/dist/base.css";
2
- import type { AppDirectory } from "../request/types.js";
3
- import type { Overview, PackageFiles } from "../windows/types.js";
4
- import { type MapNode } from "./map.js";
5
- export interface FlowWindowProps {
6
- /**
7
- * The agent as its owner sees it: its channels, automations, skills and the apps they use. It
8
- * is what is drawn when given. Without it, the window asks for the overview of `agentId`
9
- * through the provider's client (`agents.overview`).
10
- */
11
- overview?: Overview | undefined;
12
- /**
13
- * The agent's package, by path (`draft_files` of the agent): the map reads from its code which
14
- * action each automation calls, which record it keeps, which app it uses, whom it reaches.
15
- * Without it, the window asks for the files of `agentId` (`agents.get`).
16
- */
17
- files?: PackageFiles | undefined;
18
- /** The agent to ask about for whichever of `overview` and `files` is not given. */
19
- agentId?: string | undefined;
20
- /** The part that is picked, by its id (`automation:<id>`, a file's path…). Without it the window keeps its own. */
21
- selectedId?: string | null | undefined;
22
- /** A part was picked, or (with `null`) the empty canvas was. */
23
- onSelect?: ((part: MapNode | null) => void) | undefined;
24
- /** A second press on a part (Enter, from the keyboard): the host shows what it does. */
25
- onOpen?: ((part: MapNode) => void) | undefined;
26
- /** How the host knows its apps (names and logos); without it an app is a monogram. */
27
- apps?: AppDirectory | undefined;
28
- /** What the map is called to someone who cannot see it. */
29
- label?: string | undefined;
30
- className?: string | undefined;
31
- }
32
- /**
33
- * The agent as a map (ADR 0011's `flow` window): its channels, automations, skills, actions,
34
- * records and apps as parts in columns from what starts things to what they reach, with a line
35
- * for each call, read from its package. It is drawn from facts and never generated, and it is a
36
- * window of the owner: what it reads (the package's code) needs an owner's credential.
37
- *
38
- * Pan and zoom, pick a part by pressing it; a second press (a double click, or Enter on the part
39
- * with the keyboard) tells the host to open it. It lives in its own entry,
40
- * `@signalcore/ui/flow`, because the graph it is drawn with is not small.
41
- */
42
- export declare function FlowWindow(props: FlowWindowProps): import("react").JSX.Element;
@@ -1,126 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import "@xyflow/react/dist/base.css";
3
- import { Background, BackgroundVariant, Controls, Handle, MarkerType, Position, ReactFlow, ReactFlowProvider, useReactFlow, } from "@xyflow/react";
4
- import { memo, useEffect, useMemo, useState } from "react";
5
- import { Mark } from "../parts/Icon.js";
6
- import { AppLogo } from "../request/apps.js";
7
- import { Scoped, useMessages, useParts } from "../SignalcoreProvider.js";
8
- import { Pending } from "../windows/Pending.js";
9
- import { automationStatus, channelStatus } from "../windows/status.js";
10
- import { both, useOverview, usePackageFiles } from "../windows/useLoaded.js";
11
- import { agentMap, NODE_H, NODE_W } from "./map.js";
12
- import { NODE_PATHS } from "./nodePaths.js";
13
- /**
14
- * The agent as a map (ADR 0011's `flow` window): its channels, automations, skills, actions,
15
- * records and apps as parts in columns from what starts things to what they reach, with a line
16
- * for each call, read from its package. It is drawn from facts and never generated, and it is a
17
- * window of the owner: what it reads (the package's code) needs an owner's credential.
18
- *
19
- * Pan and zoom, pick a part by pressing it; a second press (a double click, or Enter on the part
20
- * with the keyboard) tells the host to open it. It lives in its own entry,
21
- * `@signalcore/ui/flow`, because the graph it is drawn with is not small.
22
- */
23
- export function FlowWindow(props) {
24
- return (_jsx(Scoped, { children: _jsx(Frame, { ...props }) }));
25
- }
26
- function Frame({ overview, files, agentId, label, className, ...rest }) {
27
- const part = useParts();
28
- const copy = useMessages();
29
- const loaded = both(useOverview(overview, agentId), usePackageFiles(files, agentId));
30
- return (_jsx("section", { ...part("flow", [], className), "aria-label": label ?? copy.flow.label, "aria-busy": loaded.state === "loading", children: loaded.state === "ready" ? (_jsx(Drawing, { overview: loaded.value[0], files: loaded.value[1], ...rest })) : (_jsx(Pending, { state: loaded.state, failed: copy.flow.cannotLoad })) }));
31
- }
32
- /** The map of an agent that has been read: the nodes, and which of them is picked. */
33
- function Drawing({ overview, files, selectedId, onSelect, onOpen, apps }) {
34
- const part = useParts();
35
- const copy = useMessages();
36
- const [picked, setPicked] = useState(null);
37
- const selected = selectedId === undefined ? picked : selectedId;
38
- const map = useMemo(() => agentMap(overview, files, copy.flow), [overview, files, copy.flow]);
39
- if (map.nodes.length === 0)
40
- return _jsx("p", { ...part("flow__empty"), children: copy.flow.empty });
41
- return (_jsx(ReactFlowProvider, { children: _jsx(Graph, { map: map, copy: copy, apps: apps, selectedId: selected, onSelect: (node) => {
42
- setPicked(node?.id ?? null);
43
- onSelect?.(node);
44
- }, onOpen: onOpen }) }));
45
- }
46
- const NODE_TYPES = { part: memo(PartCard) };
47
- function Graph({ map, copy, apps, selectedId, onSelect, onOpen }) {
48
- const nodes = useMemo(() => map.nodes.map((node) => ({
49
- id: node.id,
50
- type: "part",
51
- position: { x: node.x, y: node.y },
52
- data: { node, apps, copy },
53
- selected: node.id === selectedId,
54
- })), [map, apps, copy, selectedId]);
55
- const edges = useMemo(() => map.edges.map((edge) => ({
56
- id: edge.id,
57
- source: edge.from,
58
- target: edge.to,
59
- type: "smoothstep",
60
- markerEnd: { type: MarkerType.ArrowClosed, width: 16, height: 16 },
61
- ...(edge.label
62
- ? {
63
- label: edge.label,
64
- labelBgPadding: [6, 3],
65
- labelBgBorderRadius: 6,
66
- }
67
- : {}),
68
- })), [map]);
69
- const { fitView } = useReactFlow();
70
- const shape = map.nodes.map((node) => node.id).join("|");
71
- useEffect(() => {
72
- const timer = setTimeout(() => {
73
- void fitView({ padding: 0.18, duration: 300, maxZoom: 1 });
74
- }, 60);
75
- return () => {
76
- clearTimeout(timer);
77
- };
78
- }, [shape, fitView]);
79
- /**
80
- * Enter on a part that has the focus opens it. The key bubbles up from the part's wrapper
81
- * (xyflow makes parts focusable and uses Space and Enter to pick them), so it is read here.
82
- */
83
- const openFromKeyboard = (event) => {
84
- const target = event.target;
85
- if (event.key !== "Enter" || !(target instanceof HTMLElement))
86
- return;
87
- if (!target.classList.contains("react-flow__node"))
88
- return;
89
- const node = map.nodes.find((candidate) => candidate.id === target.dataset.id);
90
- if (node)
91
- onOpen?.(node);
92
- };
93
- return (_jsxs(ReactFlow, { onKeyDown: openFromKeyboard, nodes: nodes, edges: edges, nodeTypes: NODE_TYPES, nodesDraggable: false, nodesConnectable: false, edgesFocusable: false, fitView: true, fitViewOptions: { padding: 0.18, maxZoom: 1 }, minZoom: 0.3, maxZoom: 1.5, proOptions: { hideAttribution: true }, zoomOnDoubleClick: false, onNodeClick: (_, node) => {
94
- onSelect(node.data.node);
95
- }, onNodeDoubleClick: (_, node) => {
96
- onOpen?.(node.data.node);
97
- }, onPaneClick: () => {
98
- onSelect(null);
99
- }, children: [_jsx(Background, { variant: BackgroundVariant.Dots, gap: 18, size: 1.2 }), _jsx(Controls, { showInteractive: false, position: "bottom-right" })] }));
100
- }
101
- /** What a part's state is, for its dot and for those who cannot see the dot. */
102
- function statusOf(node, copy) {
103
- if (!node.status)
104
- return null;
105
- if (node.kind === "automation")
106
- return automationStatus(node.status, copy);
107
- if (node.kind === "channel")
108
- return channelStatus(node.status, copy);
109
- if (node.kind === "app") {
110
- const connected = node.status === "active";
111
- return {
112
- word: connected ? copy.flow.detail.connected : copy.flow.detail.notConnected,
113
- tone: connected ? "ok" : "neutral",
114
- };
115
- }
116
- return null;
117
- }
118
- /** One part of the agent: its mark, its name, a word under it, its state. */
119
- function PartCard({ data, selected }) {
120
- const part = useParts();
121
- const { node, apps, copy } = data;
122
- const status = statusOf(node, copy);
123
- const brand = node.provider && (node.kind === "channel" || node.kind === "app");
124
- const strong = node.kind === "automation" || node.kind === "skill";
125
- return (_jsxs("div", { ...part("flow__node", [node.kind, strong && "strong", selected && "selected"]), style: { width: NODE_W, height: NODE_H }, children: [_jsx(Handle, { type: "target", position: Position.Left, ...part("flow__handle") }), _jsx("span", { ...part("flow__mark", [strong && "strong"]), children: brand ? (_jsx(AppLogo, { apps: apps, mark: { provider: node.provider, name: node.label, icon: null, size: 22 } })) : (_jsx(Mark, { path: NODE_PATHS[node.kind], slot: "flow__glyph" })) }), _jsxs("span", { ...part("flow__text"), children: [_jsx("span", { ...part("flow__name"), children: node.label }), _jsxs("span", { ...part("flow__detail"), children: [node.trigger && _jsxs("span", { ...part("flow__trigger"), children: [node.trigger, " \u00B7 "] }), node.detail] })] }), status && (_jsxs(_Fragment, { children: [_jsx("span", { "aria-hidden": true, ...part("status__dot", [status.tone]) }), _jsx("span", { ...part("sr-only"), children: status.word })] })), _jsx(Handle, { type: "source", position: Position.Right, ...part("flow__handle") })] }));
126
- }
@@ -1,16 +0,0 @@
1
- /**
2
- * The windows that carry a graph library, as a second entry of the package so a host that never
3
- * draws a map does not load one:
4
- *
5
- * import { FlowWindow } from "@signalcore/ui/flow";
6
- *
7
- * It is the agent as a map of its parts, and the pure functions that read the map from the
8
- * agent's overview and its package: `agentMap` lays it out, `relationsOf` finds who calls,
9
- * keeps, uses and reaches what in the code, and `kindOf`, `partName` and `kindLabel` name the
10
- * package's parts the way the owner reads them. Everything else is in `@signalcore/ui`, which
11
- * imports nothing from here except types.
12
- */
13
- export { FlowWindow, type FlowWindowProps } from "./FlowWindow.js";
14
- export { KINDS, kindLabel, kindOf, partName, type FlowWords, type PartKind } from "./kinds.js";
15
- export { agentMap, ownerOf, type MapEdge, type MapNode, type NodeKind } from "./map.js";
16
- export { relationsOf, triggerOf, type Edge, type EdgeKind, type PartNode, type Trigger, } from "./relations.js";
@@ -1,16 +0,0 @@
1
- /**
2
- * The windows that carry a graph library, as a second entry of the package so a host that never
3
- * draws a map does not load one:
4
- *
5
- * import { FlowWindow } from "@signalcore/ui/flow";
6
- *
7
- * It is the agent as a map of its parts, and the pure functions that read the map from the
8
- * agent's overview and its package: `agentMap` lays it out, `relationsOf` finds who calls,
9
- * keeps, uses and reaches what in the code, and `kindOf`, `partName` and `kindLabel` name the
10
- * package's parts the way the owner reads them. Everything else is in `@signalcore/ui`, which
11
- * imports nothing from here except types.
12
- */
13
- export { FlowWindow } from "./FlowWindow.js";
14
- export { KINDS, kindLabel, kindOf, partName } from "./kinds.js";
15
- export { agentMap, ownerOf } from "./map.js";
16
- export { relationsOf, triggerOf, } from "./relations.js";