@agentshouse/mdruntime 0.1.0-cc5745cd9af96 → 0.1.0-ccbb89b0ca151

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 (225) hide show
  1. package/README.md +18 -15
  2. package/dist/adapter.d.ts +56 -32
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/attached-model.d.ts +5 -1
  5. package/dist/attached-model.d.ts.map +1 -1
  6. package/dist/attached-model.js +21 -4
  7. package/dist/binary.d.ts +0 -5
  8. package/dist/binary.d.ts.map +1 -1
  9. package/dist/binary.js +1 -1
  10. package/dist/bootstrap.d.ts +30 -8
  11. package/dist/bootstrap.d.ts.map +1 -1
  12. package/dist/bootstrap.js +186 -85
  13. package/dist/chain.d.ts +11 -0
  14. package/dist/chain.d.ts.map +1 -0
  15. package/dist/chain.js +64 -0
  16. package/dist/change-set.d.ts +6 -16
  17. package/dist/change-set.d.ts.map +1 -1
  18. package/dist/change-set.js +11 -94
  19. package/dist/change.d.ts +31 -1
  20. package/dist/change.d.ts.map +1 -1
  21. package/dist/change.js +10 -1
  22. package/dist/client.d.ts +9 -5
  23. package/dist/client.d.ts.map +1 -1
  24. package/dist/client.js +80 -6
  25. package/dist/collection.d.ts +6 -20
  26. package/dist/collection.d.ts.map +1 -1
  27. package/dist/collection.js +31 -354
  28. package/dist/compile.d.ts +16 -0
  29. package/dist/compile.d.ts.map +1 -0
  30. package/dist/compile.js +765 -0
  31. package/dist/connection.d.ts +16 -9
  32. package/dist/connection.d.ts.map +1 -1
  33. package/dist/connection.js +2399 -952
  34. package/dist/conversation.d.ts +3 -3
  35. package/dist/conversation.d.ts.map +1 -1
  36. package/dist/conversation.js +80 -68
  37. package/dist/digest.d.ts +7 -0
  38. package/dist/digest.d.ts.map +1 -0
  39. package/dist/digest.js +113 -0
  40. package/dist/durability.d.ts +3 -5
  41. package/dist/durability.d.ts.map +1 -1
  42. package/dist/durability.js +5 -0
  43. package/dist/entry.d.ts +3 -1
  44. package/dist/entry.d.ts.map +1 -1
  45. package/dist/entry.js +18 -24
  46. package/dist/file.d.ts +2 -19
  47. package/dist/file.d.ts.map +1 -1
  48. package/dist/file.js +7 -122
  49. package/dist/fulltext.d.ts +27 -0
  50. package/dist/fulltext.d.ts.map +1 -0
  51. package/dist/fulltext.js +368 -0
  52. package/dist/host.d.ts +4 -4
  53. package/dist/host.d.ts.map +1 -1
  54. package/dist/host.js +45 -15
  55. package/dist/identity.d.ts +0 -1
  56. package/dist/identity.d.ts.map +1 -1
  57. package/dist/identity.js +0 -3
  58. package/dist/index.d.ts +11 -9
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +4 -1
  61. package/dist/live.d.ts +22 -0
  62. package/dist/live.d.ts.map +1 -0
  63. package/dist/live.js +124 -0
  64. package/dist/media.d.ts +8 -0
  65. package/dist/media.d.ts.map +1 -0
  66. package/dist/media.js +195 -0
  67. package/dist/memory.d.ts +2 -1
  68. package/dist/memory.d.ts.map +1 -1
  69. package/dist/memory.js +63 -22
  70. package/dist/messages.d.ts +28 -0
  71. package/dist/messages.d.ts.map +1 -0
  72. package/dist/messages.js +90 -0
  73. package/dist/model.d.ts.map +1 -1
  74. package/dist/model.js +1 -1
  75. package/dist/name.d.ts +4 -0
  76. package/dist/name.d.ts.map +1 -0
  77. package/dist/name.js +122 -0
  78. package/dist/observation.d.ts +12 -0
  79. package/dist/observation.d.ts.map +1 -1
  80. package/dist/observation.js +84 -0
  81. package/dist/opened.d.ts +22 -0
  82. package/dist/opened.d.ts.map +1 -0
  83. package/dist/opened.js +107 -0
  84. package/dist/outcome.d.ts +40 -5
  85. package/dist/outcome.d.ts.map +1 -1
  86. package/dist/outcome.js +36 -2
  87. package/dist/overlay.d.ts +1 -4
  88. package/dist/overlay.d.ts.map +1 -1
  89. package/dist/overlay.js +22 -148
  90. package/dist/query.d.ts +11 -1
  91. package/dist/query.d.ts.map +1 -1
  92. package/dist/query.js +13 -1
  93. package/dist/reach.d.ts +11 -3
  94. package/dist/reach.d.ts.map +1 -1
  95. package/dist/reach.js +198 -69
  96. package/dist/readiness.d.ts +20 -9
  97. package/dist/readiness.d.ts.map +1 -1
  98. package/dist/readiness.js +6 -6
  99. package/dist/reads.d.ts.map +1 -1
  100. package/dist/reads.js +4 -2
  101. package/dist/recovery.d.ts +2 -2
  102. package/dist/recovery.d.ts.map +1 -1
  103. package/dist/recovery.js +8 -7
  104. package/dist/refresh.d.ts +15 -14
  105. package/dist/refresh.d.ts.map +1 -1
  106. package/dist/refresh.js +113 -75
  107. package/dist/replica.d.ts +56 -39
  108. package/dist/replica.d.ts.map +1 -1
  109. package/dist/replica.js +277 -197
  110. package/dist/room-draft.d.ts +4 -1
  111. package/dist/room-draft.d.ts.map +1 -1
  112. package/dist/room-draft.js +54 -13
  113. package/dist/rows.d.ts +38 -31
  114. package/dist/rows.d.ts.map +1 -1
  115. package/dist/rows.js +173 -101
  116. package/dist/save.d.ts +49 -14
  117. package/dist/save.d.ts.map +1 -1
  118. package/dist/save.js +352 -98
  119. package/dist/search.d.ts +11 -43
  120. package/dist/search.d.ts.map +1 -1
  121. package/dist/search.js +0 -213
  122. package/dist/shared.d.ts +4 -3
  123. package/dist/shared.d.ts.map +1 -1
  124. package/dist/shared.js +67 -34
  125. package/dist/store.d.ts +83 -95
  126. package/dist/store.d.ts.map +1 -1
  127. package/dist/store.js +317 -720
  128. package/dist/stored.d.ts +152 -0
  129. package/dist/stored.d.ts.map +1 -0
  130. package/dist/stored.js +607 -0
  131. package/dist/tables.d.ts +352 -0
  132. package/dist/tables.d.ts.map +1 -0
  133. package/dist/tables.js +624 -0
  134. package/dist/turn.d.ts +1 -1
  135. package/dist/turn.d.ts.map +1 -1
  136. package/dist/turn.js +31 -20
  137. package/dist/validation.d.ts +30 -0
  138. package/dist/validation.d.ts.map +1 -0
  139. package/dist/validation.js +162 -0
  140. package/dist/windows.d.ts +2 -6
  141. package/dist/windows.d.ts.map +1 -1
  142. package/dist/windows.js +30 -34
  143. package/dist/wire.d.ts +17 -1
  144. package/dist/wire.d.ts.map +1 -1
  145. package/dist/wire.js +5 -1
  146. package/dist/words.d.ts +19 -0
  147. package/dist/words.d.ts.map +1 -0
  148. package/dist/words.js +150 -0
  149. package/package.json +18 -19
  150. package/AGENTS.md +0 -299
  151. package/dist/chat/acts.d.ts +0 -33
  152. package/dist/chat/acts.d.ts.map +0 -1
  153. package/dist/chat/acts.js +0 -36
  154. package/dist/chat/context.d.ts +0 -3
  155. package/dist/chat/context.d.ts.map +0 -1
  156. package/dist/chat/context.js +0 -10
  157. package/dist/chat/earlier.d.ts +0 -10
  158. package/dist/chat/earlier.d.ts.map +0 -1
  159. package/dist/chat/earlier.js +0 -54
  160. package/dist/chat/input.d.ts +0 -9
  161. package/dist/chat/input.d.ts.map +0 -1
  162. package/dist/chat/input.js +0 -99
  163. package/dist/chat/kit.d.ts +0 -61
  164. package/dist/chat/kit.d.ts.map +0 -1
  165. package/dist/chat/kit.js +0 -123
  166. package/dist/chat/lasting.d.ts +0 -6
  167. package/dist/chat/lasting.d.ts.map +0 -1
  168. package/dist/chat/lasting.js +0 -19
  169. package/dist/chat/list.d.ts +0 -28
  170. package/dist/chat/list.d.ts.map +0 -1
  171. package/dist/chat/list.js +0 -103
  172. package/dist/chat/markdown.d.ts +0 -21
  173. package/dist/chat/markdown.d.ts.map +0 -1
  174. package/dist/chat/markdown.js +0 -246
  175. package/dist/chat/message.d.ts +0 -7
  176. package/dist/chat/message.d.ts.map +0 -1
  177. package/dist/chat/message.js +0 -202
  178. package/dist/chat/messages.d.ts +0 -24
  179. package/dist/chat/messages.d.ts.map +0 -1
  180. package/dist/chat/messages.js +0 -187
  181. package/dist/chat/name.d.ts +0 -6
  182. package/dist/chat/name.d.ts.map +0 -1
  183. package/dist/chat/name.js +0 -37
  184. package/dist/chat/opened.d.ts +0 -11
  185. package/dist/chat/opened.d.ts.map +0 -1
  186. package/dist/chat/opened.js +0 -17
  187. package/dist/chat/overlay.d.ts +0 -32
  188. package/dist/chat/overlay.d.ts.map +0 -1
  189. package/dist/chat/overlay.js +0 -107
  190. package/dist/chat/parts.d.ts +0 -57
  191. package/dist/chat/parts.d.ts.map +0 -1
  192. package/dist/chat/parts.js +0 -119
  193. package/dist/chat/pieces.d.ts +0 -62
  194. package/dist/chat/pieces.d.ts.map +0 -1
  195. package/dist/chat/pieces.js +0 -1110
  196. package/dist/chat/process.d.ts +0 -20
  197. package/dist/chat/process.d.ts.map +0 -1
  198. package/dist/chat/process.js +0 -32
  199. package/dist/chat/provider.d.ts +0 -64
  200. package/dist/chat/provider.d.ts.map +0 -1
  201. package/dist/chat/provider.js +0 -638
  202. package/dist/chat/question.d.ts +0 -9
  203. package/dist/chat/question.d.ts.map +0 -1
  204. package/dist/chat/question.js +0 -69
  205. package/dist/chat/questions.d.ts +0 -31
  206. package/dist/chat/questions.d.ts.map +0 -1
  207. package/dist/chat/questions.js +0 -111
  208. package/dist/chat/read.d.ts +0 -5
  209. package/dist/chat/read.d.ts.map +0 -1
  210. package/dist/chat/read.js +0 -13
  211. package/dist/chat/ready.d.ts +0 -34
  212. package/dist/chat/ready.d.ts.map +0 -1
  213. package/dist/chat/ready.js +0 -91
  214. package/dist/chat/steady.d.ts +0 -3
  215. package/dist/chat/steady.d.ts.map +0 -1
  216. package/dist/chat/steady.js +0 -26
  217. package/dist/chat/style.d.ts +0 -4
  218. package/dist/chat/style.d.ts.map +0 -1
  219. package/dist/chat/style.js +0 -302
  220. package/dist/chat.d.ts +0 -14
  221. package/dist/chat.d.ts.map +0 -1
  222. package/dist/chat.js +0 -8
  223. package/dist/read-side.d.ts +0 -27
  224. package/dist/read-side.d.ts.map +0 -1
  225. package/dist/read-side.js +0 -826
@@ -1,69 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useContext, useState } from 'react';
3
- import Check from 'lucide-react/dist/esm/icons/check.mjs';
4
- import CircleHelp from 'lucide-react/dist/esm/icons/circle-help.mjs';
5
- import { useObserve } from '../react.js';
6
- import { Button, Scoped } from './kit.js';
7
- import { Markdown } from './markdown.js';
8
- import { Linked, Undelivered } from './message.js';
9
- import { useChat, useChatScope } from './provider.js';
10
- import { record, text } from './read.js';
11
- function answerKey(conversation, interaction) {
12
- return `typed:answer:${conversation}:${interaction}`;
13
- }
14
- export async function forgetAnswers(client, conversation, interaction = '') {
15
- const at = answerKey(conversation, interaction);
16
- const gone = Object.keys(record(await client.presentation.read())).filter((key) => interaction === '' ? key.startsWith(at) : key === at);
17
- if (gone.length > 0)
18
- await client.presentation.edit(Object.fromEntries(gone.map((key) => [key, null])));
19
- }
20
- function useTyped(client, key) {
21
- const held = useObserve(client, 'presentation');
22
- const kept = record(record(held.state === 'ready' ? held.value : null)[key]);
23
- const [local, setLocal] = useState(null);
24
- return [
25
- local !== null && local.key === key ? local.value : kept,
26
- (next) => {
27
- setLocal({ key, value: next });
28
- void client.presentation.edit({ [key]: next });
29
- },
30
- ];
31
- }
32
- export function ChatQuestionCard({ question }) {
33
- const chat = useChat();
34
- const { client } = useChatScope();
35
- const onLink = useContext(Linked);
36
- const conversation = chat.conversation ?? '';
37
- const [values, setValues] = useTyped(client, answerKey(conversation, question.interaction));
38
- const lone = chat.lone?.question.interaction === question.interaction;
39
- const reply = (response) => void chat.answer(question, response).then((answered) => {
40
- if (answered)
41
- void forgetAnswers(client, conversation, question.interaction);
42
- });
43
- const single = question.fields.length === 1;
44
- const answers = !question.secret && !(single && question.fields[0]?.kind !== 'multi-select');
45
- const declines = !question.secret && question.decline !== null;
46
- const pick = (field, value) => {
47
- if (single && field.kind !== 'multi-select') {
48
- reply(question.accept({ [field.name]: value }));
49
- return;
50
- }
51
- if (field.kind !== 'multi-select') {
52
- setValues({ ...values, [field.name]: value });
53
- return;
54
- }
55
- const held = Array.isArray(values[field.name]) ? values[field.name] : [];
56
- setValues({
57
- ...values,
58
- [field.name]: held.includes(value) ? held.filter((one) => one !== value) : [...held, value],
59
- });
60
- };
61
- const chosen = (field, value) => {
62
- const held = values[field.name];
63
- return Array.isArray(held) ? held.includes(value) : held === value;
64
- };
65
- const option = (field, value, label, about, at) => (_jsxs("button", { type: "button", className: "ahc-option", "aria-pressed": chosen(field, value), onClick: () => pick(field, value), children: [_jsx("span", { className: "ahc-option__key", "aria-hidden": "true", children: at + 1 }), _jsxs("span", { className: "ahc-option__body", children: [_jsx("span", { className: "ahc-option__label", children: label }), about === null ? null : _jsx("span", { className: "ahc-option__note", children: about })] }), chosen(field, value) ? _jsx(Check, { size: 20, "aria-hidden": "true" }) : null] }, label));
66
- return (_jsx(Scoped, { children: _jsxs("section", { className: "ahc-question", "aria-label": "Question", children: [_jsxs("div", { className: "ahc-question__head", children: [_jsxs("span", { className: "ahc-chip ahc-chip--attention", children: [_jsx(CircleHelp, { "aria-hidden": "true" }), "Needs your answer"] }), question.message === '' ? null : (_jsx(Markdown, { text: question.message, className: "ahc-question__text ahc-markdown", ...(onLink === null ? {} : { onLink }) }))] }), question.secret
67
- ? null
68
- : question.fields.map((field) => (_jsxs("div", { className: "ahc-field", children: [_jsx("p", { className: "ahc-question__text", children: field.prompt }), field.about === null ? null : (_jsx("span", { className: "ahc-option__note", children: field.about })), field.kind === 'boolean' ? (_jsxs(_Fragment, { children: [option(field, true, 'Yes', null, 0), option(field, false, 'No', null, 1)] })) : field.choices.length > 0 ? (field.choices.map((one, at) => option(field, one.value, one.label, one.about, at))) : lone ? (_jsx("span", { className: "ahc-option__note", children: "Answer it below." })) : (_jsx("input", { className: "ahc-input", "aria-label": field.prompt, inputMode: field.kind === 'string' ? 'text' : 'numeric', value: text(values, field.name) ?? '', onChange: (event) => setValues({ ...values, [field.name]: event.target.value }) }))] }, field.name))), question.undelivered ? _jsx(Undelivered, {}) : null, answers || declines ? (_jsxs("div", { className: "ahc-row-of", children: [answers ? (_jsx(Button, { variant: "ink", onClick: () => reply(question.accept(values)), children: "Answer" })) : null, declines ? _jsx(Button, { onClick: () => reply(question.decline), children: "Decline" }) : null] })) : null] }) }));
69
- }
@@ -1,31 +0,0 @@
1
- import type { ConversationView } from '../conversation.js';
2
- export type ChatChoice = {
3
- readonly value: string;
4
- readonly label: string;
5
- readonly about: string | null;
6
- };
7
- export type ChatField = {
8
- readonly name: string;
9
- readonly kind: 'string' | 'number' | 'integer' | 'boolean' | 'multi-select';
10
- readonly prompt: string;
11
- readonly about: string | null;
12
- readonly choices: readonly ChatChoice[];
13
- };
14
- export type ChatAnswer = Readonly<Record<string, unknown>>;
15
- export type ChatQuestion = {
16
- readonly interaction: string;
17
- readonly secret: boolean;
18
- readonly message: string;
19
- readonly fields: readonly ChatField[];
20
- readonly undelivered: boolean;
21
- accept(answer: ChatAnswer): unknown;
22
- readonly decline: unknown;
23
- };
24
- export declare function entered(field: ChatField): boolean;
25
- export declare function questionsOf(view: ConversationView | null): readonly ChatQuestion[];
26
- export type ChatLone = {
27
- readonly question: ChatQuestion;
28
- readonly field: ChatField;
29
- };
30
- export declare function loneOf(questions: readonly ChatQuestion[]): ChatLone | null;
31
- //# sourceMappingURL=questions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../src/chat/questions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAuCF,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEjD;AA2DD,wBAAgB,WAAW,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,YAAY,EAAE,CAgBlF;AAED,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAEtF,wBAAgB,MAAM,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,GAAG,QAAQ,GAAG,IAAI,CAM1E"}
@@ -1,111 +0,0 @@
1
- import { list, record, text } from './read.js';
2
- const OPTION = 'optionId';
3
- function choicesOf(schema) {
4
- const items = record(schema.items);
5
- const listed = [schema.oneOf, schema.enum, items.anyOf, items.enum].find(Array.isArray) ?? [];
6
- return listed.flatMap((one) => {
7
- if (typeof one === 'string')
8
- return [{ value: one, label: one, about: null }];
9
- const value = text(record(one), 'const');
10
- return value === null
11
- ? []
12
- : [
13
- {
14
- value,
15
- label: text(record(one), 'title') ?? value,
16
- about: text(record(one), 'description'),
17
- },
18
- ];
19
- });
20
- }
21
- function fieldOf(name, schema) {
22
- const type = text(schema, 'type');
23
- const kind = type === 'boolean' || type === 'number' || type === 'integer'
24
- ? type
25
- : type === 'array'
26
- ? 'multi-select'
27
- : 'string';
28
- return {
29
- name,
30
- kind,
31
- prompt: text(schema, 'title') ?? name,
32
- about: text(schema, 'description'),
33
- choices: kind === 'boolean' ? [] : choicesOf(schema),
34
- };
35
- }
36
- export function entered(field) {
37
- return field.kind !== 'boolean' && field.choices.length === 0;
38
- }
39
- function valueOf(field, raw) {
40
- return field.kind === 'number' || field.kind === 'integer' ? Number(raw) : raw;
41
- }
42
- function typed(fields, answer) {
43
- return Object.fromEntries(Object.entries(answer).map(([name, value]) => {
44
- const field = fields.find((one) => one.name === name);
45
- return [
46
- name,
47
- field !== undefined && entered(field) && typeof value === 'string'
48
- ? valueOf(field, value)
49
- : value,
50
- ];
51
- }));
52
- }
53
- function askedOf(request) {
54
- const params = record(request.params);
55
- const method = text(request, 'method');
56
- if (method === 'session/request_permission') {
57
- return {
58
- message: '',
59
- fields: [
60
- {
61
- name: OPTION,
62
- kind: 'string',
63
- prompt: text(record(params.toolCall), 'title') ?? '',
64
- about: null,
65
- choices: list(params, 'options').flatMap((entry) => {
66
- const one = record(entry);
67
- const value = text(one, OPTION);
68
- return value === null
69
- ? []
70
- : [{ value, label: text(one, 'name') ?? value, about: null }];
71
- }),
72
- },
73
- ],
74
- accept: (answer) => ({ outcome: { outcome: 'selected', optionId: answer[OPTION] } }),
75
- decline: null,
76
- };
77
- }
78
- if (method !== 'elicitation/create')
79
- return null;
80
- const fields = Object.entries(record(record(params.requestedSchema).properties)).map(([name, schema]) => fieldOf(name, record(schema)));
81
- return {
82
- message: text(params, 'message') ?? '',
83
- fields,
84
- accept: (answer) => ({ action: 'accept', content: typed(fields, answer) }),
85
- decline: { action: 'decline' },
86
- };
87
- }
88
- export function questionsOf(view) {
89
- return (view?.questions ?? []).flatMap((entry) => {
90
- const one = record(entry);
91
- const interaction = text(one, 'interaction_id');
92
- const asked = askedOf(record(one.request));
93
- return asked === null || interaction === null
94
- ? []
95
- : [
96
- {
97
- interaction,
98
- secret: one.secret === true,
99
- undelivered: one.telegram_undelivered === true,
100
- ...asked,
101
- },
102
- ];
103
- });
104
- }
105
- export function loneOf(questions) {
106
- const asked = questions.length === 1 && !questions[0]?.secret ? questions[0] : undefined;
107
- const only = asked?.fields.length === 1 ? asked.fields[0] : undefined;
108
- return asked !== undefined && only !== undefined && entered(only)
109
- ? { question: asked, field: only }
110
- : null;
111
- }
@@ -1,5 +0,0 @@
1
- export type Fields = Readonly<Record<string, unknown>>;
2
- export declare function record(entry: unknown): Fields;
3
- export declare function text(fields: Fields, name: string): string | null;
4
- export declare function list(fields: Fields, name: string): readonly unknown[];
5
- //# sourceMappingURL=read.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/chat/read.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAI7C;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhE;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE,CAGrE"}
package/dist/chat/read.js DELETED
@@ -1,13 +0,0 @@
1
- export function record(entry) {
2
- return typeof entry === 'object' && entry !== null && !Array.isArray(entry)
3
- ? entry
4
- : {};
5
- }
6
- export function text(fields, name) {
7
- const value = fields[name];
8
- return typeof value === 'string' && value !== '' ? value : null;
9
- }
10
- export function list(fields, name) {
11
- const value = fields[name];
12
- return Array.isArray(value) ? value : [];
13
- }
@@ -1,34 +0,0 @@
1
- import { type CSSProperties, type ReactElement, type ReactNode } from 'react';
2
- import type { MdRuntimeClient } from '../client.js';
3
- import { type ChatNoteProps } from './kit.js';
4
- import { type AgentLook } from './list.js';
5
- import { type ChatOpened, type ChatState } from './provider.js';
6
- export type ChatWidth = 'full' | '3/4' | '1/2' | '1/3';
7
- export type ChatProps = AgentLook & {
8
- readonly client?: MdRuntimeClient;
9
- readonly conversation?: string | null;
10
- readonly agent?: string | null;
11
- readonly onOpen?: (opened: ChatOpened) => void;
12
- readonly width?: ChatWidth;
13
- readonly showChats?: boolean;
14
- readonly className?: string;
15
- readonly style?: CSSProperties;
16
- readonly onLink?: (href: string) => void;
17
- readonly about?: (chat: ChatState) => ReactNode;
18
- readonly actions?: ReactNode;
19
- readonly note?: (note: ChatNoteProps) => ReactNode;
20
- readonly waiting?: (chat: ChatState) => string | null;
21
- readonly messageLength?: number;
22
- readonly autoFocus?: boolean;
23
- };
24
- export declare function Chat({ client, conversation, agent, onOpen, ...look }: ChatProps): ReactElement;
25
- export type MountedChat = {
26
- update(props: ChatProps & {
27
- readonly client: MdRuntimeClient;
28
- }): void;
29
- unmount(): void;
30
- };
31
- export declare function mountChat(element: Element, props: ChatProps & {
32
- readonly client: MdRuntimeClient;
33
- }): MountedChat;
34
- //# sourceMappingURL=ready.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ready.d.ts","sourceRoot":"","sources":["../../src/chat/ready.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAUf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGpD,OAAO,EASL,KAAK,aAAa,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAGjF,OAAO,EAA8B,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAI5F,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEvD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,SAAS,CAAC;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,SAAS,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,GAAG,IAAI,CAAC;IACtD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAmQF,wBAAgB,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,GAAG,YAAY,CAY9F;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG;QAAE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;KAAE,GAAG,IAAI,CAAC;IACtE,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF,wBAAgB,SAAS,CACvB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,SAAS,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GACtD,WAAW,CAOb"}
@@ -1,91 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useContext, useEffect, useState, } from 'react';
3
- import { createRoot } from 'react-dom/client';
4
- import Check from 'lucide-react/dist/esm/icons/check.mjs';
5
- import CircleStop from 'lucide-react/dist/esm/icons/circle-stop.mjs';
6
- import Ellipsis from 'lucide-react/dist/esm/icons/ellipsis.mjs';
7
- import Info from 'lucide-react/dist/esm/icons/info.mjs';
8
- import MessagesSquare from 'lucide-react/dist/esm/icons/messages-square.mjs';
9
- import OctagonX from 'lucide-react/dist/esm/icons/octagon-x.mjs';
10
- import Pencil from 'lucide-react/dist/esm/icons/pencil.mjs';
11
- import Trash2 from 'lucide-react/dist/esm/icons/trash-2.mjs';
12
- import { ChatInput } from './input.js';
13
- import { Button, Confirm, IconButton, Menu, MenuGap, MenuItem, Name, Within, } from './kit.js';
14
- import { ChatList, ChatMessageList, Described } from './list.js';
15
- import { readable } from './name.js';
16
- import { useOpened } from './opened.js';
17
- import { ChatProvider, useChatScope } from './provider.js';
18
- import { forgetAnswers } from './question.js';
19
- import { adopted } from './style.js';
20
- function Title({ name, renaming, onRename, onDone, }) {
21
- const [next, setNext] = useState(name);
22
- if (!renaming)
23
- return _jsx("h1", { className: "ahc-title", children: name });
24
- const finish = () => {
25
- const kept = next.trim();
26
- onDone();
27
- if (kept !== '' && kept !== name)
28
- onRename(kept);
29
- };
30
- return (_jsx("input", { className: "ahc-input ahc-rename", "aria-label": "Chat name", autoFocus: true, value: next, onFocus: (event) => event.currentTarget.select(), onChange: (event) => setNext(event.target.value), onBlur: finish, onKeyDown: (event) => {
31
- if (event.key === 'Enter')
32
- event.currentTarget.blur();
33
- if (event.key === 'Escape')
34
- onDone();
35
- } }));
36
- }
37
- function Head({ about, actions, listing, }) {
38
- const chat = useOpened();
39
- const { client } = useChatScope();
40
- const { agentMark } = useContext(Described);
41
- const fresh = chat.conversation === null;
42
- const [named, setNamed] = useState(chat.entry);
43
- useEffect(() => {
44
- if (chat.entry !== undefined)
45
- setNamed(chat.entry);
46
- }, [chat.entry]);
47
- const entry = chat.entry ?? named;
48
- const name = fresh ? 'New chat' : readable(entry?.name ?? chat.name);
49
- const [asking, setAsking] = useState(null);
50
- const [renaming, setRenaming] = useState(false);
51
- const forgotten = (ended) => {
52
- if (ended && chat.conversation !== null)
53
- void forgetAnswers(client, chat.conversation);
54
- };
55
- const line = about?.(chat) ??
56
- (chat.deleted ? (_jsx(Name, { text: `${chat.name}, deleted · read only`, className: "ahc-head__line" })) : (_jsx(Name, { text: [chat.name, chat.view?.process?.running === false ? 'not running' : null]
57
- .filter(Boolean)
58
- .join(' · '), className: "ahc-head__line" })));
59
- return (_jsxs("div", { className: "ahc-head", children: [_jsxs("div", { className: "ahc-head__column", children: [listing === null ? null : (_jsx("span", { className: "ahc-list-toggle", children: _jsx(IconButton, { label: "Chats", onClick: listing, children: _jsx(MessagesSquare, { size: 20, "aria-hidden": "true" }) }) })), chat.by === null ? null : agentMark?.(chat.by, 20), _jsxs("div", { className: "ahc-head__names", children: [_jsx(Title, { name: name, renaming: renaming, onRename: (next) => void chat.rename(next), onDone: () => setRenaming(false) }, name), line] }), fresh ? null : chat.deleted ? (_jsx(Button, { variant: "danger-outline", onClick: () => setAsking('delete'), children: "Delete chat\u2026" })) : (_jsxs(_Fragment, { children: [actions, _jsxs(Menu, { trigger: _jsx(IconButton, { label: "Conversation options", children: _jsx(Ellipsis, { size: 20, "aria-hidden": "true" }) }), children: [_jsx(MenuItem, { icon: _jsx(Check, { "aria-hidden": "true" }), onSelect: () => void chat.done(), children: "Done" }), _jsx(MenuItem, { icon: _jsx(Pencil, { "aria-hidden": "true" }), onSelect: () => setRenaming(true), children: "Rename" }), chat.busy ? (_jsxs(_Fragment, { children: [_jsx(MenuItem, { icon: _jsx(CircleStop, { "aria-hidden": "true" }), onSelect: () => void chat.stop().then(forgotten), children: "Stop" }), _jsx(MenuItem, { icon: _jsx(OctagonX, { "aria-hidden": "true" }), onSelect: () => setAsking('kill'), children: "Kill\u2026" })] })) : null, _jsx(MenuGap, {}), _jsx(MenuItem, { icon: _jsx(Trash2, { "aria-hidden": "true" }), danger: true, onSelect: () => setAsking('delete'), children: "Delete chat\u2026" })] })] }))] }), asking === 'delete' ? (_jsx(Confirm, { title: "Delete this chat?", text: `“${name}” is deleted from House with its history. Files ${chat.name} wrote stay in their Rooms.`, action: "Delete chat", onConfirm: () => void chat.remove(), onClose: () => setAsking(null) })) : null, asking === 'kill' ? (_jsx(Confirm, { title: `Kill ${chat.name}’s process?`, text: "Stop asks the turn to end. Kill ends the process at once, and nothing after its last saved step is kept.", action: "Kill", onConfirm: () => void chat.kill().then(forgotten), onClose: () => setAsking(null) })) : null] }));
60
- }
61
- function Deleted() {
62
- const chat = useOpened();
63
- return (_jsx("div", { className: "ahc-deleted", children: _jsxs("div", { role: "note", className: "ahc-column ahc-deleted__note", children: [_jsx("span", { className: "ahc-deleted__icon", children: _jsx(Info, { "aria-hidden": "true" }) }), _jsx("span", { children: `${chat.name} was deleted. Its chats stay here for you to read or delete.` })] }) }));
64
- }
65
- function Frame({ showChats, onLink, about, actions, note, waiting, messageLength, autoFocus, }) {
66
- const chat = useOpened();
67
- const [listed, setListed] = useState(false);
68
- const thread = chat.conversation ?? `new:${chat.agent ?? ''}`;
69
- return (_jsxs("div", { className: "ahc-frame", children: [showChats === true ? (_jsx("div", { className: "ahc-side", "data-open": listed ? '' : undefined, children: _jsx(ChatList, { onChoose: () => setListed(false) }) })) : null, _jsxs("div", { className: "ahc-pane", children: [_jsx(Head, { about: about, actions: actions, listing: showChats === true ? () => setListed((open) => !open) : null }, thread), chat.deleted ? _jsx(Deleted, {}) : null, _jsx(ChatMessageList, { ...(onLink === undefined ? {} : { onLink }), ...(waiting === undefined ? {} : { waiting }), footer: _jsx(ChatInput, { ...(messageLength === undefined ? {} : { messageLength }), ...(note === undefined ? {} : { note }), autoFocus: autoFocus === true }) })] })] }));
70
- }
71
- function Ready({ width = 'full', className, style, agentMark, agentDetail, AgentLink, ...rest }) {
72
- const [root, setRoot] = useState(null);
73
- const attach = useCallback((element) => {
74
- adopted(element);
75
- setRoot(element);
76
- }, []);
77
- return (_jsx("div", { ref: attach, className: className === undefined ? 'ahc ahc-chat' : `ahc ahc-chat ${className}`, "data-width": width, style: style, children: root === null ? null : (_jsx(Within, { root: root, children: _jsx(Described.Provider, { value: { agentMark, agentDetail, AgentLink }, children: _jsx(Frame, { ...rest }) }) })) }));
78
- }
79
- export function Chat({ client, conversation, agent, onOpen, ...look }) {
80
- if (client === undefined)
81
- return _jsx(Ready, { ...look });
82
- return (_jsx(ChatProvider, { client: client, ...(conversation === undefined ? {} : { conversation }), ...(agent === undefined ? {} : { agent }), ...(onOpen === undefined ? {} : { onOpen }), children: _jsx(Ready, { ...look }) }));
83
- }
84
- export function mountChat(element, props) {
85
- const root = createRoot(element);
86
- root.render(_jsx(Chat, { ...props }));
87
- return {
88
- update: (next) => root.render(_jsx(Chat, { ...next })),
89
- unmount: () => root.unmount(),
90
- };
91
- }
@@ -1,3 +0,0 @@
1
- import type { ConversationView } from '../conversation.js';
2
- export declare function useSteady(held: ConversationView | null): ConversationView | null;
3
- //# sourceMappingURL=steady.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"steady.d.ts","sourceRoot":"","sources":["../../src/chat/steady.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAwB3D,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,GAAG,gBAAgB,GAAG,IAAI,CAMhF"}
@@ -1,26 +0,0 @@
1
- import { useState } from 'react';
2
- function same(held, now) {
3
- return (held.turn === now.turn &&
4
- held.text === now.text &&
5
- JSON.stringify(held.message) === JSON.stringify(now.message));
6
- }
7
- function steadied(before, after) {
8
- if (before === null || before.conversation !== after.conversation)
9
- return after;
10
- const held = new Map(before.messages.map((one) => [one.identity, one]));
11
- return {
12
- ...after,
13
- messages: after.messages.map((one) => {
14
- const was = held.get(one.identity);
15
- return was !== undefined && same(was, one) ? was : one;
16
- }),
17
- };
18
- }
19
- export function useSteady(held) {
20
- const [steady, setSteady] = useState({ from: held, view: held });
21
- if (steady.from === held)
22
- return steady.view;
23
- const view = held === null ? null : steadied(steady.view, held);
24
- setSteady({ from: held, view });
25
- return view;
26
- }
@@ -1,4 +0,0 @@
1
- export declare const NARROWEST_SHARE = 360;
2
- export declare const WHOLE_WINDOW_BELOW: number;
3
- export declare function adopted(element: Element | null): void;
4
- //# sourceMappingURL=style.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/chat/style.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,eAAO,MAAM,kBAAkB,QAAsB,CAAC;AA2StD,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CASrD"}