@agentshouse/mdruntime 0.1.0-c16fc8caac7ff → 0.1.0-c1a1221068331
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.
- package/AGENTS.md +289 -276
- package/README.md +16 -14
- package/dist/adapter.d.ts +97 -34
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +4 -1
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +13 -3
- package/dist/attempt.d.ts.map +1 -1
- package/dist/attempt.js +14 -1
- package/dist/binary.d.ts +0 -5
- package/dist/binary.d.ts.map +1 -1
- package/dist/binary.js +1 -1
- package/dist/bootstrap.d.ts +27 -8
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +155 -63
- package/dist/chain.d.ts +11 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +64 -0
- package/dist/change-set.d.ts +9 -14
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +11 -63
- package/dist/change.d.ts +31 -1
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +10 -1
- package/dist/client.d.ts +24 -12
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +49 -9
- package/dist/collection.d.ts +7 -6
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +31 -77
- package/dist/compile.d.ts +16 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +721 -0
- package/dist/connection.d.ts +42 -15
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +3336 -729
- package/dist/conversation.d.ts +30 -9
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +546 -181
- package/dist/digest.d.ts +7 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +113 -0
- package/dist/durability.d.ts +5 -1
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +5 -0
- package/dist/entry.d.ts +19 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +151 -0
- package/dist/fence.d.ts +6 -0
- package/dist/fence.d.ts.map +1 -0
- package/dist/fence.js +10 -0
- package/dist/file.d.ts +2 -10
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +3 -120
- package/dist/fulltext.d.ts +27 -0
- package/dist/fulltext.d.ts.map +1 -0
- package/dist/fulltext.js +368 -0
- package/dist/host.d.ts +14 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +124 -14
- package/dist/identity.d.ts +1 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +3 -0
- package/dist/index.d.ts +15 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/live.d.ts +22 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +123 -0
- package/dist/memory.d.ts +9 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +52 -20
- package/dist/messages.d.ts +28 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +90 -0
- package/dist/model.d.ts +4 -2
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +10 -1
- package/dist/name.d.ts +4 -0
- package/dist/name.d.ts.map +1 -0
- package/dist/name.js +122 -0
- package/dist/observation.d.ts +19 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +113 -12
- package/dist/opened.d.ts +22 -0
- package/dist/opened.d.ts.map +1 -0
- package/dist/opened.js +107 -0
- package/dist/outcome.d.ts +38 -4
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +26 -0
- package/dist/overlay.d.ts +3 -4
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +100 -182
- package/dist/query.d.ts +60 -4
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +48 -7
- package/dist/reach.d.ts +11 -6
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +182 -62
- package/dist/react.d.ts +8 -6
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +7 -17
- package/dist/readiness.d.ts +64 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +33 -0
- package/dist/reads.d.ts +11 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +100 -0
- package/dist/recovery.d.ts +25 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +198 -0
- package/dist/refresh.d.ts +16 -15
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +112 -44
- package/dist/replica.d.ts +57 -33
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +295 -149
- package/dist/room-draft.d.ts +17 -2
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +65 -25
- package/dist/rows.d.ts +28 -37
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +113 -72
- package/dist/save.d.ts +50 -9
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +528 -166
- package/dist/search.d.ts +39 -28
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +37 -105
- package/dist/seed.d.ts +16 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +75 -0
- package/dist/shared.d.ts +16 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +431 -0
- package/dist/status.d.ts +4 -0
- package/dist/status.d.ts.map +1 -1
- package/dist/store.d.ts +116 -76
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +349 -480
- package/dist/stored.d.ts +145 -0
- package/dist/stored.d.ts.map +1 -0
- package/dist/stored.js +567 -0
- package/dist/tables.d.ts +354 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +624 -0
- package/dist/turn.d.ts +9 -0
- package/dist/turn.d.ts.map +1 -0
- package/dist/turn.js +75 -0
- package/dist/validation.d.ts +30 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +162 -0
- package/dist/windows.d.ts +22 -0
- package/dist/windows.d.ts.map +1 -0
- package/dist/windows.js +89 -0
- package/dist/wire.d.ts +164 -32
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +55 -31
- package/dist/words.d.ts +19 -0
- package/dist/words.d.ts.map +1 -0
- package/dist/words.js +150 -0
- package/package.json +17 -18
- package/dist/chat/acts.d.ts +0 -34
- package/dist/chat/acts.d.ts.map +0 -1
- package/dist/chat/acts.js +0 -36
- package/dist/chat/context.d.ts +0 -3
- package/dist/chat/context.d.ts.map +0 -1
- package/dist/chat/context.js +0 -10
- package/dist/chat/input.d.ts +0 -9
- package/dist/chat/input.d.ts.map +0 -1
- package/dist/chat/input.js +0 -99
- package/dist/chat/kit.d.ts +0 -60
- package/dist/chat/kit.d.ts.map +0 -1
- package/dist/chat/kit.js +0 -123
- package/dist/chat/lasting.d.ts +0 -6
- package/dist/chat/lasting.d.ts.map +0 -1
- package/dist/chat/lasting.js +0 -19
- package/dist/chat/list.d.ts +0 -26
- package/dist/chat/list.d.ts.map +0 -1
- package/dist/chat/list.js +0 -62
- package/dist/chat/markdown.d.ts +0 -20
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -188
- package/dist/chat/message.d.ts +0 -6
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -192
- package/dist/chat/messages.d.ts +0 -21
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -151
- package/dist/chat/name.d.ts +0 -6
- package/dist/chat/name.d.ts.map +0 -1
- package/dist/chat/name.js +0 -37
- package/dist/chat/opened.d.ts +0 -11
- package/dist/chat/opened.d.ts.map +0 -1
- package/dist/chat/opened.js +0 -17
- package/dist/chat/overlay.d.ts +0 -31
- package/dist/chat/overlay.d.ts.map +0 -1
- package/dist/chat/overlay.js +0 -97
- package/dist/chat/parts.d.ts +0 -57
- package/dist/chat/parts.d.ts.map +0 -1
- package/dist/chat/parts.js +0 -119
- package/dist/chat/process.d.ts +0 -20
- package/dist/chat/process.d.ts.map +0 -1
- package/dist/chat/process.js +0 -32
- package/dist/chat/provider.d.ts +0 -63
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -645
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -80
- package/dist/chat/questions.d.ts +0 -31
- package/dist/chat/questions.d.ts.map +0 -1
- package/dist/chat/questions.js +0 -111
- package/dist/chat/read.d.ts +0 -5
- package/dist/chat/read.d.ts.map +0 -1
- package/dist/chat/read.js +0 -13
- package/dist/chat/ready.d.ts +0 -33
- package/dist/chat/ready.d.ts.map +0 -1
- package/dist/chat/ready.js +0 -91
- package/dist/chat/style.d.ts +0 -4
- package/dist/chat/style.d.ts.map +0 -1
- package/dist/chat/style.js +0 -302
- package/dist/chat.d.ts +0 -14
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -8
- package/dist/read-side.d.ts +0 -18
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -440
package/dist/wire.js
CHANGED
|
@@ -1,37 +1,47 @@
|
|
|
1
|
+
import { UNCERTAIN } from './outcome.js';
|
|
1
2
|
const MEMBERS = {
|
|
2
|
-
rooms: 'within',
|
|
3
|
-
query: 'within',
|
|
4
|
-
search: 'within',
|
|
5
|
-
types: 'within',
|
|
6
|
-
save: 'within',
|
|
7
|
-
|
|
8
|
-
'
|
|
9
|
-
'
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
'
|
|
16
|
-
'
|
|
17
|
-
'
|
|
18
|
-
'
|
|
19
|
-
'
|
|
20
|
-
'
|
|
21
|
-
'
|
|
22
|
-
'
|
|
23
|
-
'
|
|
24
|
-
'
|
|
25
|
-
'
|
|
26
|
-
'
|
|
27
|
-
'conversation.
|
|
28
|
-
'conversation.
|
|
29
|
-
'conversation.
|
|
30
|
-
'
|
|
31
|
-
'
|
|
3
|
+
rooms: { reach: 'within', effect: 'read' },
|
|
4
|
+
query: { reach: 'within', effect: 'read' },
|
|
5
|
+
search: { reach: 'within', effect: 'read' },
|
|
6
|
+
types: { reach: 'within', effect: 'read' },
|
|
7
|
+
save: { reach: 'within', effect: 'write' },
|
|
8
|
+
saveParts: { reach: 'within', effect: 'write' },
|
|
9
|
+
history: { reach: 'within', effect: 'read' },
|
|
10
|
+
resolve: { reach: 'within', effect: 'read' },
|
|
11
|
+
'binaryFile.read': { reach: 'within', effect: 'read' },
|
|
12
|
+
'binaryFile.link': { reach: 'within', effect: 'read' },
|
|
13
|
+
'binaryFile.part': { reach: 'within', effect: 'read' },
|
|
14
|
+
call: { reach: 'actions', effect: 'action' },
|
|
15
|
+
reached: { reach: 'within', effect: 'read' },
|
|
16
|
+
log: { reach: 'whole', effect: 'read' },
|
|
17
|
+
cleanUp: { reach: 'whole', effect: 'write' },
|
|
18
|
+
persistence: { reach: 'runtime', effect: 'read' },
|
|
19
|
+
retry: { reach: 'runtime', effect: 'write' },
|
|
20
|
+
reauthorize: { reach: 'runtime', effect: 'write' },
|
|
21
|
+
'roomDraft.list': { reach: 'within', effect: 'read' },
|
|
22
|
+
'roomDraft.read': { reach: 'within', effect: 'read' },
|
|
23
|
+
'roomDraft.write': { reach: 'within', effect: 'write' },
|
|
24
|
+
'roomDraft.discard': { reach: 'within', effect: 'write' },
|
|
25
|
+
'presentation.read': { reach: 'app', effect: 'read' },
|
|
26
|
+
'presentation.write': { reach: 'app', effect: 'write' },
|
|
27
|
+
'presentation.edit': { reach: 'app', effect: 'write' },
|
|
28
|
+
'conversation.list': { reach: 'within', effect: 'read' },
|
|
29
|
+
'conversation.read': { reach: 'within', effect: 'read' },
|
|
30
|
+
'conversation.create': { reach: 'within', effect: 'action' },
|
|
31
|
+
'conversation.send': { reach: 'within', effect: 'action' },
|
|
32
|
+
'conversation.attach': { reach: 'within', effect: 'action' },
|
|
33
|
+
'conversation.answer': { reach: 'within', effect: 'action' },
|
|
34
|
+
'conversation.interrupt': { reach: 'within', effect: 'action' },
|
|
35
|
+
'conversation.kill': { reach: 'within', effect: 'action' },
|
|
36
|
+
'conversation.cancel': { reach: 'within', effect: 'action' },
|
|
37
|
+
'conversation.delete': { reach: 'within', effect: 'action' },
|
|
38
|
+
'chatDraft.write': { reach: 'within', effect: 'write' },
|
|
39
|
+
'chatDraft.prepend': { reach: 'within', effect: 'write' },
|
|
40
|
+
'chatDraft.discard': { reach: 'within', effect: 'write' },
|
|
32
41
|
};
|
|
33
42
|
const TOPICS = {
|
|
34
43
|
rooms: 'within',
|
|
44
|
+
readiness: 'within',
|
|
35
45
|
'connection-refusal': 'runtime',
|
|
36
46
|
'storage-loss': 'runtime',
|
|
37
47
|
'deployment-facts': 'runtime',
|
|
@@ -46,7 +56,21 @@ const TOPICS = {
|
|
|
46
56
|
conversations: 'within',
|
|
47
57
|
agents: 'within',
|
|
48
58
|
};
|
|
49
|
-
export const
|
|
59
|
+
export const WIRE = { members: MEMBERS, topics: TOPICS };
|
|
60
|
+
export function unanswered(call) {
|
|
61
|
+
const { effect } = MEMBERS[call.member];
|
|
62
|
+
if (effect === 'read')
|
|
63
|
+
return null;
|
|
64
|
+
if (effect === 'action')
|
|
65
|
+
return { kind: 'result', id: call.id, value: UNCERTAIN };
|
|
66
|
+
return {
|
|
67
|
+
kind: 'failure',
|
|
68
|
+
id: call.id,
|
|
69
|
+
message: UNCERTAIN.code,
|
|
70
|
+
code: UNCERTAIN.code,
|
|
71
|
+
retryable: UNCERTAIN.retryable,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
50
74
|
export const AUTHORIZATION_ENDED = 'the host authorization ended';
|
|
51
75
|
export const PORT_CLOSED = 'the port closed';
|
|
52
76
|
function body(message) {
|
package/dist/words.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type Clause = {
|
|
2
|
+
readonly text: string;
|
|
3
|
+
readonly kind: 'term' | 'stem' | 'prefix' | 'phrase';
|
|
4
|
+
readonly term: string;
|
|
5
|
+
};
|
|
6
|
+
export type Located = {
|
|
7
|
+
readonly start: number;
|
|
8
|
+
readonly end: number;
|
|
9
|
+
};
|
|
10
|
+
export declare function indexed(text: string): string;
|
|
11
|
+
export declare function matchClauses(text: string): Clause[] | null;
|
|
12
|
+
export declare function matchExpression(clauses: readonly Clause[]): string;
|
|
13
|
+
export declare function queryTerms(text: string): string[];
|
|
14
|
+
export declare function snippet(part: string, terms: readonly string[], reach: number): {
|
|
15
|
+
readonly text: string;
|
|
16
|
+
readonly at: readonly [number, number];
|
|
17
|
+
} | null;
|
|
18
|
+
export declare function matched(part: string, terms: readonly string[]): string[];
|
|
19
|
+
//# sourceMappingURL=words.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"words.d.ts","sourceRoot":"","sources":["../src/words.ts"],"names":[],"mappings":"AAwBA,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAYvE,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAgBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAiB1D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAElE;AAMD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjD;AAyDD,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,KAAK,EAAE,MAAM,GACZ;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAW1E;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAQxE"}
|
package/dist/words.js
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
const SPACELESS = /(?:[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Thai}\p{Script=Lao}\p{Script=Khmer}\p{Script=Myanmar}\p{Script=Hangul}]\p{M}*)+/gu;
|
|
2
|
+
const SPACELESS_TERM = /[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Thai}\p{Script=Lao}\p{Script=Khmer}\p{Script=Myanmar}\p{Script=Hangul}]/u;
|
|
3
|
+
const TOKEN = /[\p{L}\p{N}\p{M}\p{Co}]+/gu;
|
|
4
|
+
const MARKED = /([\p{Script=Latin}\p{Script=Greek}\p{Script=Cyrillic}])\p{M}+/gu;
|
|
5
|
+
const INFLECTED = /^[\p{Script=Cyrillic}\p{Script=Greek}]+$/u;
|
|
6
|
+
const FOLD = /\p{M}+/gu;
|
|
7
|
+
const ASCII = /^[\x00-\x7f]$/;
|
|
8
|
+
const PREFIXED_LETTERS = 2;
|
|
9
|
+
const INFLECTED_LETTERS = 4;
|
|
10
|
+
const PHRASE_TERMS = { least: 2, most: 6 };
|
|
11
|
+
const GRAPHEMES = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
12
|
+
function bigrams(run) {
|
|
13
|
+
const characters = Array.from(run);
|
|
14
|
+
if (characters.length < 2)
|
|
15
|
+
return ` ${run} `;
|
|
16
|
+
const pairs = [];
|
|
17
|
+
for (let index = 0; index + 1 < characters.length; index += 1) {
|
|
18
|
+
pairs.push(characters[index] + characters[index + 1]);
|
|
19
|
+
}
|
|
20
|
+
return ` ${pairs.join(' ')} `;
|
|
21
|
+
}
|
|
22
|
+
export function indexed(text) {
|
|
23
|
+
return text.normalize('NFKD').replace(MARKED, '$1').normalize('NFKC').replace(SPACELESS, bigrams);
|
|
24
|
+
}
|
|
25
|
+
function tokens(text) {
|
|
26
|
+
return [...text.matchAll(TOKEN)].map(([token]) => token.toLowerCase());
|
|
27
|
+
}
|
|
28
|
+
function quoted(token) {
|
|
29
|
+
return `"${token.replaceAll('"', '""')}"`;
|
|
30
|
+
}
|
|
31
|
+
function truncated(term) {
|
|
32
|
+
const letters = Array.from(term);
|
|
33
|
+
if (!INFLECTED.test(term) || letters.length < INFLECTED_LETTERS)
|
|
34
|
+
return null;
|
|
35
|
+
return letters.slice(0, letters.length - (letters.length >= 6 ? 2 : 1)).join('');
|
|
36
|
+
}
|
|
37
|
+
export function matchClauses(text) {
|
|
38
|
+
const terms = tokens(indexed(text));
|
|
39
|
+
if (terms.length === 0)
|
|
40
|
+
return null;
|
|
41
|
+
const unique = [...new Set(terms)];
|
|
42
|
+
const clauses = unique.map((term) => ({ text: quoted(term), kind: 'term', term }));
|
|
43
|
+
for (const term of unique) {
|
|
44
|
+
const stem = truncated(term);
|
|
45
|
+
if (stem !== null)
|
|
46
|
+
clauses.push({ text: `${quoted(stem)}*`, kind: 'stem', term });
|
|
47
|
+
}
|
|
48
|
+
const last = terms[terms.length - 1];
|
|
49
|
+
if (!/\s$/u.test(text) && Array.from(last).length >= PREFIXED_LETTERS) {
|
|
50
|
+
clauses.push({ text: `${quoted(last)}*`, kind: 'prefix', term: last });
|
|
51
|
+
}
|
|
52
|
+
if (terms.length >= PHRASE_TERMS.least && terms.length <= PHRASE_TERMS.most) {
|
|
53
|
+
clauses.push({ text: quoted(terms.join(' ')), kind: 'phrase', term: terms.join(' ') });
|
|
54
|
+
}
|
|
55
|
+
return clauses;
|
|
56
|
+
}
|
|
57
|
+
export function matchExpression(clauses) {
|
|
58
|
+
return clauses.map(({ text }) => text).join(' OR ');
|
|
59
|
+
}
|
|
60
|
+
function folded(text) {
|
|
61
|
+
return text.normalize('NFKD').replace(FOLD, '').toLowerCase();
|
|
62
|
+
}
|
|
63
|
+
export function queryTerms(text) {
|
|
64
|
+
return [...new Set(tokens(text.normalize('NFKC')).map(folded))];
|
|
65
|
+
}
|
|
66
|
+
function agrees(token, term) {
|
|
67
|
+
if (SPACELESS_TERM.test(term))
|
|
68
|
+
return token.includes(term);
|
|
69
|
+
if (token.startsWith(term))
|
|
70
|
+
return true;
|
|
71
|
+
return token.length >= 3 && term.startsWith(token.slice(0, Math.max(3, token.length - 2)));
|
|
72
|
+
}
|
|
73
|
+
function inside(token, offset, term) {
|
|
74
|
+
const pieces = [...GRAPHEMES.segment(token)];
|
|
75
|
+
const owner = [];
|
|
76
|
+
let joined = '';
|
|
77
|
+
for (const [at, { segment }] of pieces.entries()) {
|
|
78
|
+
const part = folded(segment);
|
|
79
|
+
joined += part;
|
|
80
|
+
for (let index = 0; index < part.length; index += 1)
|
|
81
|
+
owner.push(at);
|
|
82
|
+
}
|
|
83
|
+
const found = joined.indexOf(term);
|
|
84
|
+
if (found < 0)
|
|
85
|
+
return null;
|
|
86
|
+
const first = pieces[owner[found]];
|
|
87
|
+
const last = pieces[owner[found + term.length - 1]];
|
|
88
|
+
return { start: offset + first.index, end: offset + last.index + last.segment.length };
|
|
89
|
+
}
|
|
90
|
+
function locate(part, terms) {
|
|
91
|
+
for (const match of part.matchAll(TOKEN)) {
|
|
92
|
+
const token = folded(match[0]);
|
|
93
|
+
for (const term of terms) {
|
|
94
|
+
if (!agrees(token, term))
|
|
95
|
+
continue;
|
|
96
|
+
if (!SPACELESS_TERM.test(term)) {
|
|
97
|
+
return { start: match.index, end: match.index + match[0].length };
|
|
98
|
+
}
|
|
99
|
+
const found = inside(match[0], match.index, term);
|
|
100
|
+
if (found !== null)
|
|
101
|
+
return found;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
function settled(part, index) {
|
|
107
|
+
if (index <= 0 || index >= part.length)
|
|
108
|
+
return true;
|
|
109
|
+
const before = part[index - 1];
|
|
110
|
+
const after = part[index];
|
|
111
|
+
if (before === '\n')
|
|
112
|
+
return true;
|
|
113
|
+
return ASCII.test(before) && ASCII.test(after) && !(before === '\r' && after === '\n');
|
|
114
|
+
}
|
|
115
|
+
function edgesAround(part, low, high) {
|
|
116
|
+
let from = Math.max(0, low);
|
|
117
|
+
while (!settled(part, from))
|
|
118
|
+
from -= 1;
|
|
119
|
+
let to = Math.min(part.length, high);
|
|
120
|
+
while (!settled(part, to))
|
|
121
|
+
to += 1;
|
|
122
|
+
const edges = [...GRAPHEMES.segment(part.slice(from, to))].map(({ index }) => from + index);
|
|
123
|
+
edges.push(to);
|
|
124
|
+
return edges;
|
|
125
|
+
}
|
|
126
|
+
export function snippet(part, terms, reach) {
|
|
127
|
+
const located = locate(part, terms);
|
|
128
|
+
if (located === null)
|
|
129
|
+
return null;
|
|
130
|
+
const edges = edgesAround(part, located.start - 2 * reach, located.end + 2 * reach);
|
|
131
|
+
const last = (limit) => edges.filter((edge) => edge <= limit).at(-1) ?? edges[0];
|
|
132
|
+
const first = (limit) => edges.find((edge) => edge >= limit) ?? edges[edges.length - 1];
|
|
133
|
+
const from = last(located.start);
|
|
134
|
+
const to = Math.max(first(Math.min(located.end, from + reach)), first(from + 1));
|
|
135
|
+
const start = first(Math.max(0, from - reach));
|
|
136
|
+
const end = last(Math.min(part.length, to + reach));
|
|
137
|
+
return { text: part.slice(start, end), at: [from - start, to - start] };
|
|
138
|
+
}
|
|
139
|
+
export function matched(part, terms) {
|
|
140
|
+
const found = new Set();
|
|
141
|
+
for (const match of part.matchAll(TOKEN)) {
|
|
142
|
+
const token = folded(match[0]);
|
|
143
|
+
for (const term of terms)
|
|
144
|
+
if (agrees(token, term))
|
|
145
|
+
found.add(term);
|
|
146
|
+
if (found.size === terms.length)
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
return [...found];
|
|
150
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentshouse/mdruntime",
|
|
3
|
-
"version": "0.1.0-
|
|
3
|
+
"version": "0.1.0-c1a1221068331",
|
|
4
4
|
"description": "The headless core of MD App",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"access": "public"
|
|
10
10
|
},
|
|
11
11
|
"engines": {
|
|
12
|
-
"node": ">=24.
|
|
12
|
+
"node": ">=24.22.1"
|
|
13
13
|
},
|
|
14
14
|
"exports": {
|
|
15
15
|
".": {
|
|
@@ -24,41 +24,40 @@
|
|
|
24
24
|
"types": "./dist/client.d.ts",
|
|
25
25
|
"default": "./dist/client.js"
|
|
26
26
|
},
|
|
27
|
+
"./entry": {
|
|
28
|
+
"types": "./dist/entry.d.ts",
|
|
29
|
+
"default": "./dist/entry.js"
|
|
30
|
+
},
|
|
27
31
|
"./memory": {
|
|
28
32
|
"types": "./dist/memory.d.ts",
|
|
29
33
|
"default": "./dist/memory.js"
|
|
30
34
|
},
|
|
35
|
+
"./tables": {
|
|
36
|
+
"types": "./dist/tables.d.ts",
|
|
37
|
+
"default": "./dist/tables.js"
|
|
38
|
+
},
|
|
31
39
|
"./react": {
|
|
32
40
|
"types": "./dist/react.d.ts",
|
|
33
41
|
"default": "./dist/react.js"
|
|
34
42
|
},
|
|
35
|
-
"./
|
|
36
|
-
"types": "./dist/
|
|
37
|
-
"default": "./dist/
|
|
43
|
+
"./digest": {
|
|
44
|
+
"types": "./dist/digest.d.ts",
|
|
45
|
+
"default": "./dist/digest.js"
|
|
38
46
|
},
|
|
39
47
|
"./package.json": "./package.json"
|
|
40
48
|
},
|
|
41
49
|
"files": [
|
|
42
50
|
"dist",
|
|
51
|
+
"!dist/chat.*",
|
|
52
|
+
"!dist/chat/",
|
|
43
53
|
"AGENTS.md",
|
|
44
54
|
"README.md",
|
|
45
55
|
"LICENSE"
|
|
46
56
|
],
|
|
47
57
|
"dependencies": {
|
|
48
|
-
"@agentshouse/mdmodel": "0.1.0-
|
|
49
|
-
"@assistant-ui/react-markdown": "0.14.20",
|
|
50
|
-
"@tanstack/db": "0.9.2",
|
|
51
|
-
"lucide-react": "1.47.0",
|
|
52
|
-
"mdast-util-from-markdown": "2.0.3",
|
|
53
|
-
"mdast-util-gfm": "3.1.0",
|
|
54
|
-
"micromark-extension-gfm": "3.0.0",
|
|
55
|
-
"minisearch": "7.2.0",
|
|
56
|
-
"radix-ui": "1.8.0",
|
|
57
|
-
"remark-gfm": "4.0.1"
|
|
58
|
+
"@agentshouse/mdmodel": "0.1.0-c4f4d37bc9d6a"
|
|
58
59
|
},
|
|
59
60
|
"peerDependencies": {
|
|
60
|
-
"
|
|
61
|
-
"react": ">=18",
|
|
62
|
-
"react-dom": ">=18"
|
|
61
|
+
"react": ">=18"
|
|
63
62
|
}
|
|
64
63
|
}
|
package/dist/chat/acts.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { type Answered } from '../attempt.js';
|
|
2
|
-
import { type CallResult } from '../outcome.js';
|
|
3
|
-
import type { Expected } from './overlay.js';
|
|
4
|
-
export type ChatResult = CallResult | {
|
|
5
|
-
readonly kind: 'offline';
|
|
6
|
-
};
|
|
7
|
-
export type ChatOutcome = {
|
|
8
|
-
readonly state: 'sending';
|
|
9
|
-
} | {
|
|
10
|
-
readonly state: 'offline';
|
|
11
|
-
} | {
|
|
12
|
-
readonly state: 'failed';
|
|
13
|
-
readonly result: CallResult;
|
|
14
|
-
};
|
|
15
|
-
export declare function accepted(result: ChatResult): result is Extract<CallResult, {
|
|
16
|
-
readonly kind: 'action';
|
|
17
|
-
}>;
|
|
18
|
-
export declare function unanswered(result: ChatResult): boolean;
|
|
19
|
-
export declare function outcomeOf(result: ChatResult): ChatOutcome | null;
|
|
20
|
-
export declare function answeredOf(result: ChatResult): Answered;
|
|
21
|
-
export type Sender = {
|
|
22
|
-
carried(name: string, about: unknown, sending: (operation: string) => Promise<CallResult>): Promise<ChatResult>;
|
|
23
|
-
expect(expected: Expected): void;
|
|
24
|
-
draw(expected: Expected): void;
|
|
25
|
-
};
|
|
26
|
-
type Senders = {
|
|
27
|
-
readonly online: boolean;
|
|
28
|
-
identity(intent: string): string;
|
|
29
|
-
expect(expected: Expected): void;
|
|
30
|
-
draw(expected: Expected): void;
|
|
31
|
-
};
|
|
32
|
-
export declare function sender({ online, identity, expect, draw }: Senders): Sender;
|
|
33
|
-
export {};
|
|
34
|
-
//# sourceMappingURL=acts.d.ts.map
|
package/dist/chat/acts.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acts.d.ts","sourceRoot":"","sources":["../../src/chat/acts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAE9D,wBAAgB,QAAQ,CACtB,MAAM,EAAE,UAAU,GACjB,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAE5D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAEtD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CAGhE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAIvD;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,GAClD,OAAO,CAAC,UAAU,CAAC,CAAC;IACvB,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,GAAG,MAAM,CAa1E"}
|
package/dist/chat/acts.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { intentOf } from '../attempt.js';
|
|
2
|
-
import { UNCERTAIN } from '../outcome.js';
|
|
3
|
-
export function accepted(result) {
|
|
4
|
-
return result.kind === 'action';
|
|
5
|
-
}
|
|
6
|
-
export function unanswered(result) {
|
|
7
|
-
return result.kind === 'transport-uncertainty';
|
|
8
|
-
}
|
|
9
|
-
export function outcomeOf(result) {
|
|
10
|
-
if (accepted(result))
|
|
11
|
-
return null;
|
|
12
|
-
return result.kind === 'offline' ? { state: 'offline' } : { state: 'failed', result };
|
|
13
|
-
}
|
|
14
|
-
export function answeredOf(result) {
|
|
15
|
-
if (accepted(result))
|
|
16
|
-
return 'accepted';
|
|
17
|
-
if (result.kind === 'offline')
|
|
18
|
-
return 'offline';
|
|
19
|
-
return unanswered(result) ? 'unanswered' : 'refused';
|
|
20
|
-
}
|
|
21
|
-
export function sender({ online, identity, expect, draw }) {
|
|
22
|
-
return {
|
|
23
|
-
async carried(name, about, sending) {
|
|
24
|
-
if (!online)
|
|
25
|
-
return { kind: 'offline' };
|
|
26
|
-
try {
|
|
27
|
-
return await sending(identity(intentOf(name, about)));
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
return UNCERTAIN;
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
expect,
|
|
34
|
-
draw,
|
|
35
|
-
};
|
|
36
|
-
}
|
package/dist/chat/context.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/chat/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAQjD,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAExD"}
|
package/dist/chat/context.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
function figure(tokens) {
|
|
2
|
-
if (tokens >= 1_000_000)
|
|
3
|
-
return `${(tokens / 1_000_000).toFixed(1).replace(/\.0$/, '')}M`;
|
|
4
|
-
if (tokens >= 1_000)
|
|
5
|
-
return `${Math.round(tokens / 1_000)}k`;
|
|
6
|
-
return String(tokens);
|
|
7
|
-
}
|
|
8
|
-
export function contextText(context) {
|
|
9
|
-
return `${figure(context.used)}/${figure(context.window)}`;
|
|
10
|
-
}
|
package/dist/chat/input.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type ReactElement, type ReactNode } from 'react';
|
|
2
|
-
import { type ChatNoteProps } from './kit.js';
|
|
3
|
-
export type ChatInputProps = {
|
|
4
|
-
readonly messageLength?: number;
|
|
5
|
-
readonly note?: (note: ChatNoteProps) => ReactNode;
|
|
6
|
-
readonly autoFocus?: boolean;
|
|
7
|
-
};
|
|
8
|
-
export declare function ChatInput({ messageLength, note, autoFocus, }: ChatInputProps): ReactElement;
|
|
9
|
-
//# sourceMappingURL=input.d.ts.map
|
package/dist/chat/input.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/chat/input.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAqBlG,OAAO,EAAsD,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAMlG,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,SAAS,CAAC;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAiGF,wBAAgB,SAAS,CAAC,EACxB,aAAa,EACb,IAAY,EACZ,SAAiB,GAClB,EAAE,cAAc,GAAG,YAAY,CA+K/B"}
|
package/dist/chat/input.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useContext, useEffect, useMemo, useRef } from 'react';
|
|
3
|
-
import { ComposerPrimitive, useAui, useAuiState, } from '@assistant-ui/react';
|
|
4
|
-
import { DropdownMenu } from 'radix-ui';
|
|
5
|
-
import ArrowUp from 'lucide-react/dist/esm/icons/arrow-up.mjs';
|
|
6
|
-
import Check from 'lucide-react/dist/esm/icons/check.mjs';
|
|
7
|
-
import ChevronDown from 'lucide-react/dist/esm/icons/chevron-down.mjs';
|
|
8
|
-
import CornerDownRight from 'lucide-react/dist/esm/icons/corner-down-right.mjs';
|
|
9
|
-
import ListEnd from 'lucide-react/dist/esm/icons/list-end.mjs';
|
|
10
|
-
import Paperclip from 'lucide-react/dist/esm/icons/paperclip.mjs';
|
|
11
|
-
import Pencil from 'lucide-react/dist/esm/icons/pencil.mjs';
|
|
12
|
-
import Plus from 'lucide-react/dist/esm/icons/plus.mjs';
|
|
13
|
-
import Square from 'lucide-react/dist/esm/icons/square.mjs';
|
|
14
|
-
import X from 'lucide-react/dist/esm/icons/x.mjs';
|
|
15
|
-
import { contextText } from './context.js';
|
|
16
|
-
import { Button, ChatNote, IconButton, Name, Portal, Scoped } from './kit.js';
|
|
17
|
-
import { COMMAND } from './process.js';
|
|
18
|
-
import { useChat, useChatScope } from './provider.js';
|
|
19
|
-
import { forgetAnswers } from './question.js';
|
|
20
|
-
import { useOpened } from './opened.js';
|
|
21
|
-
const commanded = {
|
|
22
|
-
serialize: (item) => `${COMMAND}${item.id}`,
|
|
23
|
-
parse: (said) => [{ kind: 'text', text: said }],
|
|
24
|
-
};
|
|
25
|
-
const atStart = (said, char, cursor) => {
|
|
26
|
-
const typed = said.slice(0, cursor);
|
|
27
|
-
return typed.startsWith(char) && !/\s/.test(typed)
|
|
28
|
-
? { query: typed.slice(char.length), offset: 0, endOffset: cursor }
|
|
29
|
-
: null;
|
|
30
|
-
};
|
|
31
|
-
function commandItem(command) {
|
|
32
|
-
return {
|
|
33
|
-
id: command.name,
|
|
34
|
-
type: 'command',
|
|
35
|
-
label: `${COMMAND}${command.name}`,
|
|
36
|
-
description: command.description,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
function commandsFound(commands, query) {
|
|
40
|
-
const asked = query.toLowerCase();
|
|
41
|
-
const named = commands.filter((one) => one.name.toLowerCase().startsWith(asked));
|
|
42
|
-
const within = commands.filter((one) => !named.includes(one) && one.name.toLowerCase().includes(asked));
|
|
43
|
-
return [...named, ...within].map(commandItem);
|
|
44
|
-
}
|
|
45
|
-
function Attached({ id, name }) {
|
|
46
|
-
const aui = useAui();
|
|
47
|
-
return (_jsxs("span", { className: "ahc-chip ahc-chip--removable", children: [_jsx(Paperclip, { "aria-hidden": "true" }), _jsx(Name, { text: name }), _jsx(IconButton, { label: `Remove ${name}`, compact: true, onClick: () => void aui.composer().attachment({ id }).remove(), children: _jsx(X, { "aria-hidden": "true" }) })] }));
|
|
48
|
-
}
|
|
49
|
-
function Picker({ option, choose, }) {
|
|
50
|
-
const container = useContext(Portal);
|
|
51
|
-
return (_jsxs(DropdownMenu.Root, { modal: false, children: [_jsxs(DropdownMenu.Trigger, { className: "ahc-btn ahc-picker", "aria-label": option.name, title: option.name, children: [_jsx(Name, { text: option.values.find((one) => one.value === option.value)?.name ?? option.value }), _jsx(ChevronDown, { "aria-hidden": "true" })] }), _jsx(DropdownMenu.Portal, { container: container, children: _jsxs(DropdownMenu.Content, { className: "ahc-menu", side: "top", align: "start", children: [_jsx(DropdownMenu.Label, { className: "ahc-menu__heading", children: option.name }), _jsx(DropdownMenu.RadioGroup, { value: option.value, onValueChange: (value) => {
|
|
52
|
-
if (value !== option.value)
|
|
53
|
-
void choose(option.id, value);
|
|
54
|
-
}, children: option.values.map((one) => (_jsxs(DropdownMenu.RadioItem, { value: one.value, className: "ahc-row", children: [_jsx("span", { className: "ahc-row__label", children: one.name }), _jsx(DropdownMenu.ItemIndicator, { asChild: true, children: _jsx(Check, { "aria-hidden": "true" }) })] }, one.value))) })] }) })] }));
|
|
55
|
-
}
|
|
56
|
-
function noted(note) {
|
|
57
|
-
return _jsx(ChatNote, { ...note });
|
|
58
|
-
}
|
|
59
|
-
export function ChatInput({ messageLength, note = noted, autoFocus = false, }) {
|
|
60
|
-
const chat = useChat();
|
|
61
|
-
const { client } = useChatScope();
|
|
62
|
-
const aui = useAui();
|
|
63
|
-
const opened = useOpened();
|
|
64
|
-
const { lone, commands, context, queued, running } = opened;
|
|
65
|
-
const conversation = chat.conversation ?? '';
|
|
66
|
-
const input = useRef(null);
|
|
67
|
-
const picker = useRef(null);
|
|
68
|
-
const thread = chat.conversation ?? `new:${chat.agent ?? ''}`;
|
|
69
|
-
useEffect(() => {
|
|
70
|
-
if (autoFocus)
|
|
71
|
-
input.current?.focus();
|
|
72
|
-
}, [autoFocus, thread]);
|
|
73
|
-
const typed = useAuiState((s) => s.composer.text);
|
|
74
|
-
const attached = useAuiState((s) => s.composer.attachments.length > 0);
|
|
75
|
-
const fault = messageLength !== undefined && typed.length > messageLength
|
|
76
|
-
? `Keep it to ${messageLength} characters.`
|
|
77
|
-
: null;
|
|
78
|
-
const listed = useMemo(() => ({
|
|
79
|
-
categories: () => [],
|
|
80
|
-
categoryItems: () => [],
|
|
81
|
-
search: (query) => commandsFound(commands, query),
|
|
82
|
-
}), [commands]);
|
|
83
|
-
const interrupt = () => void chat.stop().then((stopped) => {
|
|
84
|
-
if (stopped)
|
|
85
|
-
void forgetAnswers(client, conversation);
|
|
86
|
-
});
|
|
87
|
-
const edit = (id) => {
|
|
88
|
-
chat.edit(id);
|
|
89
|
-
input.current?.focus();
|
|
90
|
-
};
|
|
91
|
-
const drafted = typed.trim() !== '' || attached;
|
|
92
|
-
const readOnly = opened.deleted;
|
|
93
|
-
return (_jsx(Scoped, { children: _jsxs("div", { className: "ahc-input-area", children: [readOnly || queued.length === 0 ? null : (_jsxs("div", { role: "group", "aria-label": "Queued messages", className: "ahc-queue", children: [_jsxs("div", { className: "ahc-queue__head", children: [_jsx(ListEnd, { "aria-hidden": "true" }), _jsx("span", { className: "ahc-queue__said", children: `${queued.length} ${queued.length === 1 ? 'message waits' : 'messages wait'} for ${opened.name} to finish` }), running ? (_jsx(Button, { variant: "outline", compact: true, onClick: interrupt, children: "Send now" })) : null] }), queued.map((item) => (_jsxs("div", { className: "ahc-queue-row", children: [_jsx(CornerDownRight, { "aria-hidden": "true", className: "ahc-muted" }), _jsx("span", { className: "ahc-queue-row__text", children: item.text }), _jsx(IconButton, { label: "Edit queued message", compact: true, onClick: () => edit(item.id), children: _jsx(Pencil, { "aria-hidden": "true" }) }), _jsx(IconButton, { label: "Remove queued message", compact: true, onClick: () => chat.unqueue(item.id), children: _jsx(X, { "aria-hidden": "true" }) })] }, item.id)))] })), readOnly ? null : (_jsx(ComposerPrimitive.Root, { className: "ahc-composer", children: _jsxs(ComposerPrimitive.Unstable_TriggerPopoverRoot, { children: [commands.length === 0 ? null : (_jsxs(ComposerPrimitive.Unstable_TriggerPopover, { char: COMMAND, matcher: atStart, adapter: listed, "aria-label": "Commands", className: "ahc-menu ahc-commands", children: [_jsx(ComposerPrimitive.Unstable_TriggerPopover.Directive, { formatter: commanded }), _jsx(ComposerPrimitive.Unstable_TriggerPopoverItems, { children: (items) => items.map((item, index) => (_jsx(ComposerPrimitive.Unstable_TriggerPopoverItem, { item: item, index: index, className: "ahc-row ahc-row--two", children: _jsxs("span", { className: "ahc-row__label", children: [_jsx("span", { className: "ahc-row__title ahc-mono", children: item.label }), _jsx("span", { className: "ahc-row__sub", children: item.description })] }) }, item.id))) })] })), attached ? (_jsx("div", { className: "ahc-chips", children: _jsx(ComposerPrimitive.Attachments, { children: ({ attachment }) => _jsx(Attached, { id: attachment.id, name: attachment.name }) }) })) : null, _jsx(ComposerPrimitive.Input, { asChild: true, "aria-label": "Message", placeholder: lone === null ? `Message ${opened.name}` : lone.field.prompt, submitMode: fault === null ? 'enter' : 'none', children: _jsx("textarea", { ref: input, className: "ahc-composer__input", rows: 1 }) }), _jsxs("div", { className: "ahc-composer__bar", children: [_jsx(IconButton, { label: "Add files", onClick: () => picker.current?.click(), children: _jsx(Plus, { size: 20, "aria-hidden": "true" }) }), _jsx("input", { ref: picker, type: "file", multiple: true, hidden: true, onChange: (event) => {
|
|
94
|
-
const chosen = [...(event.target.files ?? [])];
|
|
95
|
-
event.target.value = '';
|
|
96
|
-
for (const file of chosen)
|
|
97
|
-
void aui.composer().addAttachment(file);
|
|
98
|
-
} }), opened.options.map((option) => (_jsx(Picker, { option: option, choose: chat.choose }, option.id))), _jsx("span", { className: "ahc-spacer" }), context === null ? null : (_jsx("span", { title: "Context in use", className: "ahc-meta", children: contextText(context) })), running ? (_jsx("button", { type: "button", className: `ahc-btn ahc-btn--icon ${drafted ? 'ahc-btn--outline' : 'ahc-btn--ink'}`, "aria-label": "Stop", title: "Stop", onClick: interrupt, children: _jsx(Square, { "aria-hidden": "true" }) })) : null, running && !drafted ? null : (_jsx(ComposerPrimitive.Send, { className: "ahc-btn ahc-btn--icon ahc-btn--ink", "aria-label": running ? 'Queue message' : 'Send', disabled: fault !== null, children: _jsx(ArrowUp, { size: 20, "aria-hidden": "true" }) }))] })] }) })), fault === null ? null : (_jsx("p", { className: "ahc-note", role: "status", "data-state": "refused", children: fault })), note({ outcome: chat.acting.outcome }), note({ outcome: chat.sending.outcome, again: chat.sending.again ?? undefined })] }) }));
|
|
99
|
-
}
|
package/dist/chat/kit.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { type ComponentPropsWithRef, type ReactElement, type ReactNode } from 'react';
|
|
2
|
-
import type { ChatOutcome } from './acts.js';
|
|
3
|
-
export type Variant = 'quiet' | 'ink' | 'outline' | 'danger' | 'danger-outline';
|
|
4
|
-
export declare const Portal: import("react").Context<HTMLElement | null>;
|
|
5
|
-
export declare function Within({ root, children, }: {
|
|
6
|
-
root: HTMLElement;
|
|
7
|
-
children: ReactNode;
|
|
8
|
-
}): ReactElement;
|
|
9
|
-
export declare function Scoped({ children }: {
|
|
10
|
-
children: ReactNode;
|
|
11
|
-
}): ReactElement;
|
|
12
|
-
export declare function buttonClass(variant: Variant, compact: boolean, icon: boolean): string;
|
|
13
|
-
type Native = Omit<ComponentPropsWithRef<'button'>, 'className'>;
|
|
14
|
-
export declare function Button({ variant, compact, type, children, ...rest }: Native & {
|
|
15
|
-
variant?: Variant;
|
|
16
|
-
compact?: boolean;
|
|
17
|
-
}): ReactElement;
|
|
18
|
-
export declare function IconButton({ label, variant, compact, type, ...rest }: Native & {
|
|
19
|
-
label: string;
|
|
20
|
-
variant?: Variant;
|
|
21
|
-
compact?: boolean;
|
|
22
|
-
}): ReactElement;
|
|
23
|
-
export declare function Name({ text, className }: {
|
|
24
|
-
text: string;
|
|
25
|
-
className?: string;
|
|
26
|
-
}): ReactElement;
|
|
27
|
-
export declare function Menu({ trigger, children, }: {
|
|
28
|
-
trigger: ReactElement;
|
|
29
|
-
children: ReactNode;
|
|
30
|
-
}): ReactElement;
|
|
31
|
-
export declare function MenuGap(): ReactElement;
|
|
32
|
-
export declare function MenuItem({ icon, danger, onSelect, children, }: {
|
|
33
|
-
icon: ReactNode;
|
|
34
|
-
danger?: boolean;
|
|
35
|
-
onSelect: () => void;
|
|
36
|
-
children: ReactNode;
|
|
37
|
-
}): ReactElement;
|
|
38
|
-
export declare function Confirm({ title, text, action, onConfirm, onClose, }: {
|
|
39
|
-
title: string;
|
|
40
|
-
text: string;
|
|
41
|
-
action: string;
|
|
42
|
-
onConfirm: () => void;
|
|
43
|
-
onClose: () => void;
|
|
44
|
-
}): ReactElement;
|
|
45
|
-
export declare function ItemRow({ lead, title, sub, trailing, }: {
|
|
46
|
-
lead: ReactNode;
|
|
47
|
-
title: ReactNode;
|
|
48
|
-
sub: ReactNode;
|
|
49
|
-
trailing: ReactNode;
|
|
50
|
-
}): ReactElement;
|
|
51
|
-
export declare function Working({ step }: {
|
|
52
|
-
step?: string | undefined;
|
|
53
|
-
}): ReactElement;
|
|
54
|
-
export type ChatNoteProps = {
|
|
55
|
-
readonly outcome: ChatOutcome | null;
|
|
56
|
-
readonly again?: (() => void) | undefined;
|
|
57
|
-
};
|
|
58
|
-
export declare function ChatNote({ outcome, again }: ChatNoteProps): ReactElement | null;
|
|
59
|
-
export {};
|
|
60
|
-
//# sourceMappingURL=kit.d.ts.map
|
package/dist/chat/kit.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kit.d.ts","sourceRoot":"","sources":["../../src/chat/kit.tsx"],"names":[],"mappings":"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"}
|