@agentshouse/mdruntime 0.1.0-ca4dc698bd0c4 → 0.1.0-ca69b8fe1fa9f

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 (231) hide show
  1. package/README.md +19 -16
  2. package/dist/adapter.d.ts +149 -75
  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 +38 -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 +27 -11
  11. package/dist/bootstrap.d.ts.map +1 -1
  12. package/dist/bootstrap.js +181 -99
  13. package/dist/chain.d.ts +12 -0
  14. package/dist/chain.d.ts.map +1 -0
  15. package/dist/chain.js +64 -0
  16. package/dist/change-set.d.ts +9 -16
  17. package/dist/change-set.d.ts.map +1 -1
  18. package/dist/change-set.js +11 -88
  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 +21 -11
  23. package/dist/client.d.ts.map +1 -1
  24. package/dist/client.js +96 -11
  25. package/dist/collection.d.ts +11 -21
  26. package/dist/collection.d.ts.map +1 -1
  27. package/dist/collection.js +39 -291
  28. package/dist/compile.d.ts +11 -0
  29. package/dist/compile.d.ts.map +1 -0
  30. package/dist/compile.js +589 -0
  31. package/dist/connection.d.ts +30 -16
  32. package/dist/connection.d.ts.map +1 -1
  33. package/dist/connection.js +3295 -1360
  34. package/dist/context.d.ts +2 -0
  35. package/dist/context.d.ts.map +1 -0
  36. package/dist/{chat/context.js → context.js} +1 -4
  37. package/dist/conversation.d.ts +31 -14
  38. package/dist/conversation.d.ts.map +1 -1
  39. package/dist/conversation.js +523 -203
  40. package/dist/digest.d.ts +7 -0
  41. package/dist/digest.d.ts.map +1 -0
  42. package/dist/digest.js +113 -0
  43. package/dist/durability.d.ts +2 -5
  44. package/dist/durability.d.ts.map +1 -1
  45. package/dist/durability.js +5 -0
  46. package/dist/entry.d.ts +5 -2
  47. package/dist/entry.d.ts.map +1 -1
  48. package/dist/entry.js +31 -27
  49. package/dist/file.d.ts +2 -19
  50. package/dist/file.d.ts.map +1 -1
  51. package/dist/file.js +7 -122
  52. package/dist/host.d.ts +6 -8
  53. package/dist/host.d.ts.map +1 -1
  54. package/dist/host.js +94 -24
  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 +20 -13
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +8 -1
  61. package/dist/job.d.ts +14 -0
  62. package/dist/job.d.ts.map +1 -0
  63. package/dist/job.js +28 -0
  64. package/dist/live.d.ts +23 -0
  65. package/dist/live.d.ts.map +1 -0
  66. package/dist/live.js +127 -0
  67. package/dist/media.d.ts +8 -0
  68. package/dist/media.d.ts.map +1 -0
  69. package/dist/media.js +218 -0
  70. package/dist/memory.d.ts +17 -7
  71. package/dist/memory.d.ts.map +1 -1
  72. package/dist/memory.js +209 -102
  73. package/dist/messages.d.ts +28 -0
  74. package/dist/messages.d.ts.map +1 -0
  75. package/dist/messages.js +89 -0
  76. package/dist/model.d.ts +10 -5
  77. package/dist/model.d.ts.map +1 -1
  78. package/dist/model.js +8 -14
  79. package/dist/name.d.ts +4 -0
  80. package/dist/name.d.ts.map +1 -0
  81. package/dist/name.js +122 -0
  82. package/dist/observation.d.ts +17 -2
  83. package/dist/observation.d.ts.map +1 -1
  84. package/dist/observation.js +100 -5
  85. package/dist/opened.d.ts +22 -0
  86. package/dist/opened.d.ts.map +1 -0
  87. package/dist/opened.js +107 -0
  88. package/dist/outcome.d.ts +45 -7
  89. package/dist/outcome.d.ts.map +1 -1
  90. package/dist/outcome.js +39 -0
  91. package/dist/overlay.d.ts +3 -5
  92. package/dist/overlay.d.ts.map +1 -1
  93. package/dist/overlay.js +95 -156
  94. package/dist/paths.d.ts +1 -0
  95. package/dist/paths.d.ts.map +1 -1
  96. package/dist/paths.js +4 -0
  97. package/dist/query.d.ts +18 -185
  98. package/dist/query.d.ts.map +1 -1
  99. package/dist/query.js +3 -464
  100. package/dist/reach.d.ts +16 -8
  101. package/dist/reach.d.ts.map +1 -1
  102. package/dist/reach.js +219 -90
  103. package/dist/react.d.ts +6 -4
  104. package/dist/react.d.ts.map +1 -1
  105. package/dist/react.js +7 -17
  106. package/dist/readiness.d.ts +14 -17
  107. package/dist/readiness.d.ts.map +1 -1
  108. package/dist/readiness.js +2 -8
  109. package/dist/recovery.d.ts +3 -2
  110. package/dist/recovery.d.ts.map +1 -1
  111. package/dist/recovery.js +34 -7
  112. package/dist/refresh.d.ts +17 -14
  113. package/dist/refresh.d.ts.map +1 -1
  114. package/dist/refresh.js +155 -52
  115. package/dist/replica.d.ts +56 -33
  116. package/dist/replica.d.ts.map +1 -1
  117. package/dist/replica.js +301 -182
  118. package/dist/room-draft.d.ts +36 -5
  119. package/dist/room-draft.d.ts.map +1 -1
  120. package/dist/room-draft.js +161 -74
  121. package/dist/rows.d.ts +22 -29
  122. package/dist/rows.d.ts.map +1 -1
  123. package/dist/rows.js +63 -112
  124. package/dist/save.d.ts +53 -14
  125. package/dist/save.d.ts.map +1 -1
  126. package/dist/save.js +529 -185
  127. package/dist/search.d.ts +15 -77
  128. package/dist/search.d.ts.map +1 -1
  129. package/dist/search.js +10 -184
  130. package/dist/seed.d.ts +16 -0
  131. package/dist/seed.d.ts.map +1 -0
  132. package/dist/seed.js +75 -0
  133. package/dist/shared.d.ts +7 -3
  134. package/dist/shared.d.ts.map +1 -1
  135. package/dist/shared.js +119 -66
  136. package/dist/status.d.ts +4 -3
  137. package/dist/status.d.ts.map +1 -1
  138. package/dist/status.js +3 -1
  139. package/dist/store.d.ts +101 -98
  140. package/dist/store.d.ts.map +1 -1
  141. package/dist/store.js +338 -661
  142. package/dist/stored.d.ts +162 -0
  143. package/dist/stored.d.ts.map +1 -0
  144. package/dist/stored.js +543 -0
  145. package/dist/tables.d.ts +353 -0
  146. package/dist/tables.d.ts.map +1 -0
  147. package/dist/tables.js +588 -0
  148. package/dist/transfer.d.ts +0 -5
  149. package/dist/transfer.d.ts.map +1 -1
  150. package/dist/turn.d.ts +5 -3
  151. package/dist/turn.d.ts.map +1 -1
  152. package/dist/turn.js +51 -21
  153. package/dist/validation.d.ts +29 -0
  154. package/dist/validation.d.ts.map +1 -0
  155. package/dist/validation.js +104 -0
  156. package/dist/windows.d.ts +11 -0
  157. package/dist/windows.d.ts.map +1 -0
  158. package/dist/windows.js +16 -0
  159. package/dist/wire.d.ts +164 -33
  160. package/dist/wire.d.ts.map +1 -1
  161. package/dist/wire.js +55 -32
  162. package/package.json +18 -19
  163. package/AGENTS.md +0 -300
  164. package/dist/acquisition.d.ts +0 -14
  165. package/dist/acquisition.d.ts.map +0 -1
  166. package/dist/acquisition.js +0 -24
  167. package/dist/chat/acts.d.ts +0 -33
  168. package/dist/chat/acts.d.ts.map +0 -1
  169. package/dist/chat/acts.js +0 -36
  170. package/dist/chat/context.d.ts +0 -3
  171. package/dist/chat/context.d.ts.map +0 -1
  172. package/dist/chat/input.d.ts +0 -9
  173. package/dist/chat/input.d.ts.map +0 -1
  174. package/dist/chat/input.js +0 -99
  175. package/dist/chat/kit.d.ts +0 -60
  176. package/dist/chat/kit.d.ts.map +0 -1
  177. package/dist/chat/kit.js +0 -123
  178. package/dist/chat/lasting.d.ts +0 -6
  179. package/dist/chat/lasting.d.ts.map +0 -1
  180. package/dist/chat/lasting.js +0 -19
  181. package/dist/chat/list.d.ts +0 -26
  182. package/dist/chat/list.d.ts.map +0 -1
  183. package/dist/chat/list.js +0 -62
  184. package/dist/chat/markdown.d.ts +0 -20
  185. package/dist/chat/markdown.d.ts.map +0 -1
  186. package/dist/chat/markdown.js +0 -188
  187. package/dist/chat/message.d.ts +0 -6
  188. package/dist/chat/message.d.ts.map +0 -1
  189. package/dist/chat/message.js +0 -192
  190. package/dist/chat/messages.d.ts +0 -21
  191. package/dist/chat/messages.d.ts.map +0 -1
  192. package/dist/chat/messages.js +0 -151
  193. package/dist/chat/name.d.ts +0 -6
  194. package/dist/chat/name.d.ts.map +0 -1
  195. package/dist/chat/name.js +0 -37
  196. package/dist/chat/opened.d.ts +0 -11
  197. package/dist/chat/opened.d.ts.map +0 -1
  198. package/dist/chat/opened.js +0 -17
  199. package/dist/chat/overlay.d.ts +0 -31
  200. package/dist/chat/overlay.d.ts.map +0 -1
  201. package/dist/chat/overlay.js +0 -97
  202. package/dist/chat/parts.d.ts +0 -57
  203. package/dist/chat/parts.d.ts.map +0 -1
  204. package/dist/chat/parts.js +0 -119
  205. package/dist/chat/process.d.ts +0 -20
  206. package/dist/chat/process.d.ts.map +0 -1
  207. package/dist/chat/process.js +0 -32
  208. package/dist/chat/provider.d.ts +0 -63
  209. package/dist/chat/provider.d.ts.map +0 -1
  210. package/dist/chat/provider.js +0 -620
  211. package/dist/chat/question.d.ts +0 -9
  212. package/dist/chat/question.d.ts.map +0 -1
  213. package/dist/chat/question.js +0 -80
  214. package/dist/chat/questions.d.ts +0 -31
  215. package/dist/chat/questions.d.ts.map +0 -1
  216. package/dist/chat/questions.js +0 -111
  217. package/dist/chat/read.d.ts +0 -5
  218. package/dist/chat/read.d.ts.map +0 -1
  219. package/dist/chat/read.js +0 -13
  220. package/dist/chat/ready.d.ts +0 -33
  221. package/dist/chat/ready.d.ts.map +0 -1
  222. package/dist/chat/ready.js +0 -91
  223. package/dist/chat/style.d.ts +0 -4
  224. package/dist/chat/style.d.ts.map +0 -1
  225. package/dist/chat/style.js +0 -302
  226. package/dist/chat.d.ts +0 -14
  227. package/dist/chat.d.ts.map +0 -1
  228. package/dist/chat.js +0 -8
  229. package/dist/read-side.d.ts +0 -25
  230. package/dist/read-side.d.ts.map +0 -1
  231. package/dist/read-side.js +0 -639
@@ -1,80 +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 { inTurn } from '../client.js';
6
- import { useObserve } from '../react.js';
7
- import { Button, Scoped } from './kit.js';
8
- import { Markdown } from './markdown.js';
9
- import { Linked, Undelivered } from './message.js';
10
- import { useChat, useChatScope } from './provider.js';
11
- import { record, text } from './read.js';
12
- const TYPED = 'typed';
13
- function answerKey(conversation, interaction) {
14
- return `answer:${conversation}:${interaction}`;
15
- }
16
- function changeTyped(client, update) {
17
- return inTurn(client, async () => {
18
- const held = record(await client.presentation.read());
19
- const typed = update(record(held[TYPED]));
20
- if (typed !== null)
21
- await client.presentation.write({ ...held, [TYPED]: typed });
22
- });
23
- }
24
- export function forgetAnswers(client, conversation, interaction = '') {
25
- const at = answerKey(conversation, interaction);
26
- return changeTyped(client, (typed) => {
27
- const kept = Object.entries(typed).filter(([key]) => interaction === '' ? !key.startsWith(at) : key !== at);
28
- return kept.length === Object.keys(typed).length ? null : Object.fromEntries(kept);
29
- });
30
- }
31
- function useTyped(client, key) {
32
- const held = useObserve(client, 'presentation');
33
- const kept = record(record(record(held.state === 'ready' ? held.value : null)[TYPED])[key]);
34
- const [local, setLocal] = useState(null);
35
- return [
36
- local !== null && local.key === key ? local.value : kept,
37
- (next) => {
38
- setLocal({ key, value: next });
39
- void changeTyped(client, (typed) => ({ ...typed, [key]: next }));
40
- },
41
- ];
42
- }
43
- export function ChatQuestionCard({ question }) {
44
- const chat = useChat();
45
- const { client } = useChatScope();
46
- const onLink = useContext(Linked);
47
- const conversation = chat.conversation ?? '';
48
- const [values, setValues] = useTyped(client, answerKey(conversation, question.interaction));
49
- const lone = chat.lone?.question.interaction === question.interaction;
50
- const reply = (response) => void chat.answer(question, response).then((answered) => {
51
- if (answered)
52
- void forgetAnswers(client, conversation, question.interaction);
53
- });
54
- const single = question.fields.length === 1;
55
- const answers = !question.secret && !(single && question.fields[0]?.kind !== 'multi-select');
56
- const declines = !question.secret && question.decline !== null;
57
- const pick = (field, value) => {
58
- if (single && field.kind !== 'multi-select') {
59
- reply(question.accept({ [field.name]: value }));
60
- return;
61
- }
62
- if (field.kind !== 'multi-select') {
63
- setValues({ ...values, [field.name]: value });
64
- return;
65
- }
66
- const held = Array.isArray(values[field.name]) ? values[field.name] : [];
67
- setValues({
68
- ...values,
69
- [field.name]: held.includes(value) ? held.filter((one) => one !== value) : [...held, value],
70
- });
71
- };
72
- const chosen = (field, value) => {
73
- const held = values[field.name];
74
- return Array.isArray(held) ? held.includes(value) : held === value;
75
- };
76
- 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));
77
- 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
78
- ? null
79
- : 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] }) }));
80
- }
@@ -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,33 +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 messageLength?: number;
21
- readonly autoFocus?: boolean;
22
- };
23
- export declare function Chat({ client, conversation, agent, onOpen, ...look }: ChatProps): ReactElement;
24
- export type MountedChat = {
25
- update(props: ChatProps & {
26
- readonly client: MdRuntimeClient;
27
- }): void;
28
- unmount(): void;
29
- };
30
- export declare function mountChat(element: Element, props: ChatProps & {
31
- readonly client: MdRuntimeClient;
32
- }): MountedChat;
33
- //# 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,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAiQF,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, 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 }), 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,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"}