@windowkit/agent-chat 0.0.0-stage → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +147 -2
- package/dist/core/driver.d.ts +183 -0
- package/dist/core/driver.d.ts.map +1 -0
- package/dist/core/driver.js +12 -0
- package/dist/core/driver.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +11 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/markdown.d.ts +7 -0
- package/dist/core/markdown.d.ts.map +1 -0
- package/dist/core/markdown.js +53 -0
- package/dist/core/markdown.js.map +1 -0
- package/dist/core/policy.d.ts +18 -0
- package/dist/core/policy.d.ts.map +1 -0
- package/dist/core/policy.js +67 -0
- package/dist/core/policy.js.map +1 -0
- package/dist/core/reducer.d.ts +61 -0
- package/dist/core/reducer.d.ts.map +1 -0
- package/dist/core/reducer.js +391 -0
- package/dist/core/reducer.js.map +1 -0
- package/dist/core/session.d.ts +105 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +648 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/tools.d.ts +120 -0
- package/dist/core/tools.d.ts.map +1 -0
- package/dist/core/tools.js +120 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/core/types.d.ts +295 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +21 -0
- package/dist/core/types.js.map +1 -0
- package/dist/drivers/claude/index.d.ts +20 -0
- package/dist/drivers/claude/index.d.ts.map +1 -0
- package/dist/drivers/claude/index.js +727 -0
- package/dist/drivers/claude/index.js.map +1 -0
- package/dist/drivers/claude/input.d.ts +7 -0
- package/dist/drivers/claude/input.d.ts.map +1 -0
- package/dist/drivers/claude/input.js +46 -0
- package/dist/drivers/claude/input.js.map +1 -0
- package/dist/drivers/claude/peers.d.ts +16 -0
- package/dist/drivers/claude/peers.d.ts.map +1 -0
- package/dist/drivers/claude/peers.js +137 -0
- package/dist/drivers/claude/peers.js.map +1 -0
- package/dist/drivers/claude/schema.d.ts +5 -0
- package/dist/drivers/claude/schema.d.ts.map +1 -0
- package/dist/drivers/claude/schema.js +77 -0
- package/dist/drivers/claude/schema.js.map +1 -0
- package/dist/drivers/claude/sdk.d.ts +86 -0
- package/dist/drivers/claude/sdk.d.ts.map +1 -0
- package/dist/drivers/claude/sdk.js +47 -0
- package/dist/drivers/claude/sdk.js.map +1 -0
- package/dist/drivers/claude/tools.d.ts +18 -0
- package/dist/drivers/claude/tools.d.ts.map +1 -0
- package/dist/drivers/claude/tools.js +119 -0
- package/dist/drivers/claude/tools.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/testing/fake.d.ts +63 -0
- package/dist/testing/fake.d.ts.map +1 -0
- package/dist/testing/fake.js +270 -0
- package/dist/testing/fake.js.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +4 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/view/AgentChat.d.ts +53 -0
- package/dist/view/AgentChat.d.ts.map +1 -0
- package/dist/view/AgentChat.js +87 -0
- package/dist/view/AgentChat.js.map +1 -0
- package/dist/view/CodeBlock.d.ts +9 -0
- package/dist/view/CodeBlock.d.ts.map +1 -0
- package/dist/view/CodeBlock.js +67 -0
- package/dist/view/CodeBlock.js.map +1 -0
- package/dist/view/Composer.d.ts +24 -0
- package/dist/view/Composer.d.ts.map +1 -0
- package/dist/view/Composer.js +144 -0
- package/dist/view/Composer.js.map +1 -0
- package/dist/view/Header.d.ts +3 -0
- package/dist/view/Header.d.ts.map +1 -0
- package/dist/view/Header.js +30 -0
- package/dist/view/Header.js.map +1 -0
- package/dist/view/MessageList.d.ts +9 -0
- package/dist/view/MessageList.d.ts.map +1 -0
- package/dist/view/MessageList.js +111 -0
- package/dist/view/MessageList.js.map +1 -0
- package/dist/view/QuestionCard.d.ts +6 -0
- package/dist/view/QuestionCard.d.ts.map +1 -0
- package/dist/view/QuestionCard.js +39 -0
- package/dist/view/QuestionCard.js.map +1 -0
- package/dist/view/TextBlock.d.ts +9 -0
- package/dist/view/TextBlock.d.ts.map +1 -0
- package/dist/view/TextBlock.js +25 -0
- package/dist/view/TextBlock.js.map +1 -0
- package/dist/view/ToolCard.d.ts +7 -0
- package/dist/view/ToolCard.d.ts.map +1 -0
- package/dist/view/ToolCard.js +155 -0
- package/dist/view/ToolCard.js.map +1 -0
- package/dist/view/Transcript.d.ts +5 -0
- package/dist/view/Transcript.d.ts.map +1 -0
- package/dist/view/Transcript.js +56 -0
- package/dist/view/Transcript.js.map +1 -0
- package/dist/view/context.d.ts +21 -0
- package/dist/view/context.d.ts.map +1 -0
- package/dist/view/context.js +37 -0
- package/dist/view/context.js.map +1 -0
- package/dist/view/fences.d.ts +13 -0
- package/dist/view/fences.d.ts.map +1 -0
- package/dist/view/fences.js +59 -0
- package/dist/view/fences.js.map +1 -0
- package/dist/view/files.d.ts +11 -0
- package/dist/view/files.d.ts.map +1 -0
- package/dist/view/files.js +109 -0
- package/dist/view/files.js.map +1 -0
- package/dist/view/look.d.ts +25 -0
- package/dist/view/look.d.ts.map +1 -0
- package/dist/view/look.js +47 -0
- package/dist/view/look.js.map +1 -0
- package/dist/view/types.d.ts +50 -0
- package/dist/view/types.d.ts.map +1 -0
- package/dist/view/types.js +14 -0
- package/dist/view/types.js.map +1 -0
- package/dist/view/use-agent.d.ts +11 -0
- package/dist/view/use-agent.d.ts.map +1 -0
- package/dist/view/use-agent.js +33 -0
- package/dist/view/use-agent.js.map +1 -0
- package/package.json +92 -4
- package/src/core/driver.ts +191 -0
- package/src/core/index.ts +54 -0
- package/src/core/markdown.ts +56 -0
- package/src/core/policy.ts +77 -0
- package/src/core/reducer.ts +490 -0
- package/src/core/session.ts +824 -0
- package/src/core/tools.ts +233 -0
- package/src/core/types.ts +321 -0
- package/src/drivers/claude/index.ts +825 -0
- package/src/drivers/claude/input.ts +47 -0
- package/src/drivers/claude/peers.ts +153 -0
- package/src/drivers/claude/schema.ts +99 -0
- package/src/drivers/claude/sdk.ts +138 -0
- package/src/drivers/claude/tools.ts +141 -0
- package/src/index.ts +51 -0
- package/src/testing/fake.ts +374 -0
- package/src/testing/index.ts +11 -0
- package/src/view/AgentChat.tsx +204 -0
- package/src/view/CodeBlock.tsx +115 -0
- package/src/view/Composer.tsx +230 -0
- package/src/view/Header.tsx +73 -0
- package/src/view/MessageList.tsx +290 -0
- package/src/view/QuestionCard.tsx +107 -0
- package/src/view/TextBlock.tsx +61 -0
- package/src/view/ToolCard.tsx +283 -0
- package/src/view/Transcript.tsx +91 -0
- package/src/view/context.ts +70 -0
- package/src/view/dom-globals.d.ts +10 -0
- package/src/view/fences.ts +73 -0
- package/src/view/files.ts +111 -0
- package/src/view/look.ts +70 -0
- package/src/view/types.ts +71 -0
- package/src/view/use-agent.ts +40 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Claude Code's built-in tools: which `coreTools` category each is in, its
|
|
2
|
+
// kind, and the one line its card shows.
|
|
3
|
+
/** The built-ins each category names. A name Claude Code no longer has is
|
|
4
|
+
* harmless in `disallowedTools`. */
|
|
5
|
+
export const CATEGORY_TOOLS = {
|
|
6
|
+
shell: ['Bash', 'BashOutput', 'KillShell'],
|
|
7
|
+
read: ['Read', 'Glob', 'Grep', 'LS'],
|
|
8
|
+
edit: ['Edit', 'MultiEdit', 'Write', 'NotebookEdit'],
|
|
9
|
+
web: ['WebFetch', 'WebSearch'],
|
|
10
|
+
agents: ['Agent', 'Task'],
|
|
11
|
+
todos: ['TodoWrite', 'TaskCreate', 'TaskUpdate', 'TaskList', 'TaskGet'],
|
|
12
|
+
};
|
|
13
|
+
/** The prefix in-process tools are named under: `mcp__app__openTicket`. */
|
|
14
|
+
export const APP_SERVER = 'app';
|
|
15
|
+
export const APP_PREFIX = `mcp__${APP_SERVER}__`;
|
|
16
|
+
const KINDS = {
|
|
17
|
+
Bash: 'execute',
|
|
18
|
+
BashOutput: 'execute',
|
|
19
|
+
KillShell: 'execute',
|
|
20
|
+
Read: 'read',
|
|
21
|
+
LS: 'read',
|
|
22
|
+
NotebookRead: 'read',
|
|
23
|
+
Glob: 'search',
|
|
24
|
+
Grep: 'search',
|
|
25
|
+
Edit: 'edit',
|
|
26
|
+
MultiEdit: 'edit',
|
|
27
|
+
Write: 'edit',
|
|
28
|
+
NotebookEdit: 'edit',
|
|
29
|
+
WebFetch: 'fetch',
|
|
30
|
+
WebSearch: 'fetch',
|
|
31
|
+
Agent: 'think',
|
|
32
|
+
Task: 'think',
|
|
33
|
+
ExitPlanMode: 'think',
|
|
34
|
+
};
|
|
35
|
+
/** The tools this driver draws as something other than a tool card. */
|
|
36
|
+
export const HIDDEN_TOOLS = new Set([
|
|
37
|
+
'TodoWrite',
|
|
38
|
+
'AskUserQuestion',
|
|
39
|
+
]);
|
|
40
|
+
export function labelOf(name) {
|
|
41
|
+
return name.startsWith(APP_PREFIX) ? name.slice(APP_PREFIX.length) : name;
|
|
42
|
+
}
|
|
43
|
+
export function isAppTool(name) {
|
|
44
|
+
return name.startsWith(APP_PREFIX);
|
|
45
|
+
}
|
|
46
|
+
export function kindOf(name) {
|
|
47
|
+
return KINDS[name] ?? 'other';
|
|
48
|
+
}
|
|
49
|
+
/** The card's line: `Read src/app.ts`, `make test`, `Fetch https://…`. */
|
|
50
|
+
export function titleOf(name, input) {
|
|
51
|
+
const label = labelOf(name);
|
|
52
|
+
const i = (input && typeof input === 'object' ? input : {});
|
|
53
|
+
const s = (k) => (typeof i[k] === 'string' ? i[k] : '');
|
|
54
|
+
switch (name) {
|
|
55
|
+
case 'Bash':
|
|
56
|
+
return s('description') || firstLine(s('command')) || 'Bash';
|
|
57
|
+
case 'Read':
|
|
58
|
+
case 'Edit':
|
|
59
|
+
case 'MultiEdit':
|
|
60
|
+
case 'Write':
|
|
61
|
+
return s('file_path') ? `${name} ${s('file_path')}` : name;
|
|
62
|
+
case 'NotebookEdit':
|
|
63
|
+
return s('notebook_path') ? `${name} ${s('notebook_path')}` : name;
|
|
64
|
+
case 'Glob':
|
|
65
|
+
return s('pattern') ? `Find ${s('pattern')}` : name;
|
|
66
|
+
case 'Grep':
|
|
67
|
+
return s('pattern') ? `Search for ${s('pattern')}` : name;
|
|
68
|
+
case 'LS':
|
|
69
|
+
return s('path') ? `List ${s('path')}` : name;
|
|
70
|
+
case 'WebFetch':
|
|
71
|
+
return s('url') ? `Fetch ${s('url')}` : name;
|
|
72
|
+
case 'WebSearch':
|
|
73
|
+
return s('query') ? `Search the web for ${s('query')}` : name;
|
|
74
|
+
case 'Agent':
|
|
75
|
+
case 'Task':
|
|
76
|
+
return s('description') || 'Agent';
|
|
77
|
+
case 'ExitPlanMode':
|
|
78
|
+
return 'Approve the plan';
|
|
79
|
+
default:
|
|
80
|
+
return label;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** What a finished built-in call shows, worked out from its input where the
|
|
84
|
+
* input says more than the result: an edit is its diff. */
|
|
85
|
+
export function outputOf(name, input, resultText, isError) {
|
|
86
|
+
const i = (input && typeof input === 'object' ? input : {});
|
|
87
|
+
if (!isError) {
|
|
88
|
+
if (name === 'Edit' && typeof i.file_path === 'string') {
|
|
89
|
+
return [
|
|
90
|
+
{
|
|
91
|
+
type: 'diff',
|
|
92
|
+
path: i.file_path,
|
|
93
|
+
oldText: String(i.old_string ?? ''),
|
|
94
|
+
newText: String(i.new_string ?? ''),
|
|
95
|
+
},
|
|
96
|
+
];
|
|
97
|
+
}
|
|
98
|
+
if (name === 'Write' && typeof i.file_path === 'string') {
|
|
99
|
+
return [
|
|
100
|
+
{
|
|
101
|
+
type: 'diff',
|
|
102
|
+
path: i.file_path,
|
|
103
|
+
oldText: null,
|
|
104
|
+
newText: String(i.content ?? ''),
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (!resultText)
|
|
110
|
+
return [];
|
|
111
|
+
if (kindOf(name) === 'execute')
|
|
112
|
+
return [{ type: 'terminal', text: resultText }];
|
|
113
|
+
return [{ type: 'text', text: resultText }];
|
|
114
|
+
}
|
|
115
|
+
function firstLine(text) {
|
|
116
|
+
const line = text.split('\n')[0] ?? '';
|
|
117
|
+
return line.length > 120 ? `${line.slice(0, 117)}…` : line;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/drivers/claude/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { AgentChat, type AgentChatProps, type AgentChatViewProps, } from './view/AgentChat.js';
|
|
2
|
+
export { useAgent, useSessionSnapshot } from './view/use-agent.js';
|
|
3
|
+
export type { ComposerOptions } from './view/Composer.js';
|
|
4
|
+
export { copyCode, defineTool, type CodeAction, type CodeActionContext, type ComponentEntry, type FenceEntry, type FenceInfo, type ToolRenderer, } from './view/types.js';
|
|
5
|
+
export { splitFences, type Segment } from './view/fences.js';
|
|
6
|
+
export { AgentUnavailableError, categoryOf, createAgentSession, describeRenderers, messageMarkdown, sourceLabel, transcriptMarkdown, type AgentDriver, type AgentOptions, type AgentSession, type AnyToolDef, type CoreToolSetting, type DriverConfig, type DriverEvent, type DriverHost, type DriverSession, type SessionSnapshot, type ToolContext, type ToolDef, type ToolParameters, type ToolRenderInfo, type ToolResult, } from './core/index.js';
|
|
7
|
+
export type * from './core/types.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,QAAQ,EACR,UAAU,EACV,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,YAAY,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,iBAAiB,CAAC;AACzB,mBAAmB,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// `@windowkit/agent-chat`: `<AgentChat>` and the hooks around it, with the
|
|
2
|
+
// core's types and helpers re-exported, so an app imports from one place.
|
|
3
|
+
//
|
|
4
|
+
// The drivers are not re-exported: each is its own subpath
|
|
5
|
+
// (`/drivers/claude`), loaded when a session starts, so a bundle carries the
|
|
6
|
+
// one it uses.
|
|
7
|
+
export { AgentChat, } from './view/AgentChat.js';
|
|
8
|
+
export { useAgent, useSessionSnapshot } from './view/use-agent.js';
|
|
9
|
+
export { copyCode, defineTool, } from './view/types.js';
|
|
10
|
+
export { splitFences } from './view/fences.js';
|
|
11
|
+
export { AgentUnavailableError, categoryOf, createAgentSession, describeRenderers, messageMarkdown, sourceLabel, transcriptMarkdown, } from './core/index.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,EAAE;AACF,2DAA2D;AAC3D,6EAA6E;AAC7E,eAAe;AAEf,OAAO,EACL,SAAS,GAGV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EACL,QAAQ,EACR,UAAU,GAOX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,kBAAkB,GAgBnB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { AgentDriver, DriverEvent, DriverHost, OutgoingMessage } from '../core/driver.js';
|
|
2
|
+
import { type Capabilities, type MessageSource, type Question, type SessionInfo, type ToolKind, type ToolOutput } from '../core/types.js';
|
|
3
|
+
export type FakeStep = DriverEvent
|
|
4
|
+
/** Pause the script. */
|
|
5
|
+
| {
|
|
6
|
+
type: 'wait';
|
|
7
|
+
ms: number;
|
|
8
|
+
}
|
|
9
|
+
/** Stream text in chunks of `chunk` characters, `delay` ms apart. */
|
|
10
|
+
| {
|
|
11
|
+
type: 'say';
|
|
12
|
+
text: string;
|
|
13
|
+
chunk?: number;
|
|
14
|
+
delay?: number;
|
|
15
|
+
reasoning?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A tool call, through the gate: an app tool (one in `tools`) runs the
|
|
19
|
+
* app's function; any other ends with `result`.
|
|
20
|
+
*/
|
|
21
|
+
| {
|
|
22
|
+
type: 'call';
|
|
23
|
+
id?: string;
|
|
24
|
+
name: string;
|
|
25
|
+
input?: unknown;
|
|
26
|
+
kind?: ToolKind;
|
|
27
|
+
title?: string;
|
|
28
|
+
result?: string | readonly ToolOutput[];
|
|
29
|
+
error?: string;
|
|
30
|
+
}
|
|
31
|
+
/** A question for the user; the script goes on once it is answered. */
|
|
32
|
+
| {
|
|
33
|
+
type: 'ask';
|
|
34
|
+
id?: string;
|
|
35
|
+
questions: readonly Question[];
|
|
36
|
+
};
|
|
37
|
+
export type FakeScript = (message: OutgoingMessage, turn: number) => readonly FakeStep[] | Promise<readonly FakeStep[]> | AsyncIterable<FakeStep>;
|
|
38
|
+
export interface FakeDriverOptions {
|
|
39
|
+
name?: string;
|
|
40
|
+
capabilities?: Partial<Capabilities>;
|
|
41
|
+
info?: Partial<SessionInfo>;
|
|
42
|
+
/** Throw this from `start`, as a harness that cannot run would. */
|
|
43
|
+
failStart?: Error;
|
|
44
|
+
}
|
|
45
|
+
export interface FakeDriver extends AgentDriver {
|
|
46
|
+
/** Every message the session sent. */
|
|
47
|
+
readonly sent: readonly OutgoingMessage[];
|
|
48
|
+
/** The host, once started. */
|
|
49
|
+
readonly host: DriverHost | null;
|
|
50
|
+
/** How many times `interrupt` was called. */
|
|
51
|
+
readonly interrupts: number;
|
|
52
|
+
/**
|
|
53
|
+
* A message from someone other than the user — another session, a
|
|
54
|
+
* channel — arriving as a harness reports one: the session draws it, and
|
|
55
|
+
* the script plays a turn for it after any turn under way, handed `from`
|
|
56
|
+
* where it is a peer.
|
|
57
|
+
*/
|
|
58
|
+
receive(text: string, from: MessageSource): void;
|
|
59
|
+
}
|
|
60
|
+
export declare function fakeDriver(script: FakeScript, options?: FakeDriverOptions): FakeDriver;
|
|
61
|
+
/** A script that answers turn `n` with `turns[n]`, and the last one after. */
|
|
62
|
+
export declare function scripted(...turns: ReadonlyArray<readonly FakeStep[]>): FakeScript;
|
|
63
|
+
//# sourceMappingURL=fake.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake.d.ts","sourceRoot":"","sources":["../../src/testing/fake.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,UAAU,EAEV,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,WAAW,EAEhB,KAAK,QAAQ,EACb,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,QAAQ,GAChB,WAAW;AACb,wBAAwB;GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAC9B,qEAAqE;GACnE;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AACH;;;GAGG;GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACH,uEAAuE;GACrE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAA;CAAE,CAAC;AAEjE,MAAM,MAAM,UAAU,GAAG,CACvB,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,MAAM,KAEZ,SAAS,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,QAAQ,EAAE,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;AAE/E,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5B,mEAAmE;IACnE,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,CAAC;IAC1C,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;CAClD;AAUD,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,iBAAsB,GAC9B,UAAU,CAkHZ;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CACtB,GAAG,KAAK,EAAE,aAAa,CAAC,SAAS,QAAQ,EAAE,CAAC,GAC3C,UAAU,CAEZ"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
// A driver that plays a script: no harness, no key, no network.
|
|
2
|
+
//
|
|
3
|
+
// It goes through the real session — the gate, the policy, the approval
|
|
4
|
+
// row, the app's tools — so a test of the UI tests what an app ships, and the
|
|
5
|
+
// demo example runs on a machine with nothing installed.
|
|
6
|
+
import { NO_CAPABILITIES, } from '../core/types.js';
|
|
7
|
+
const FAKE_CAPABILITIES = Object.freeze({
|
|
8
|
+
...NO_CAPABILITIES,
|
|
9
|
+
tools: 'in-process',
|
|
10
|
+
systemPrompt: Object.freeze({ replace: true, append: true }),
|
|
11
|
+
coreTools: 'remove',
|
|
12
|
+
gate: 'every-call',
|
|
13
|
+
});
|
|
14
|
+
export function fakeDriver(script, options = {}) {
|
|
15
|
+
const sent = [];
|
|
16
|
+
let host = null;
|
|
17
|
+
let interrupts = 0;
|
|
18
|
+
let take = null;
|
|
19
|
+
let received = 0;
|
|
20
|
+
const capabilities = {
|
|
21
|
+
...FAKE_CAPABILITIES,
|
|
22
|
+
...options.capabilities,
|
|
23
|
+
};
|
|
24
|
+
const driver = {
|
|
25
|
+
name: options.name ?? 'fake',
|
|
26
|
+
get sent() {
|
|
27
|
+
return sent;
|
|
28
|
+
},
|
|
29
|
+
get host() {
|
|
30
|
+
return host;
|
|
31
|
+
},
|
|
32
|
+
get interrupts() {
|
|
33
|
+
return interrupts;
|
|
34
|
+
},
|
|
35
|
+
receive(text, from) {
|
|
36
|
+
if (!take) {
|
|
37
|
+
throw new Error('fakeDriver: receive() before the session started');
|
|
38
|
+
}
|
|
39
|
+
take(text, from);
|
|
40
|
+
},
|
|
41
|
+
async start(h) {
|
|
42
|
+
if (options.failStart)
|
|
43
|
+
throw options.failStart;
|
|
44
|
+
host = h;
|
|
45
|
+
h.emit({
|
|
46
|
+
type: 'info',
|
|
47
|
+
info: {
|
|
48
|
+
agent: driver.name,
|
|
49
|
+
model: 'fake',
|
|
50
|
+
models: [],
|
|
51
|
+
...options.info,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
let turn = 0;
|
|
55
|
+
let running = null;
|
|
56
|
+
let chain = Promise.resolve();
|
|
57
|
+
/** A turn for `message`, after the one under way. One that arrived
|
|
58
|
+
* from elsewhere is reported as its turn begins, as a harness reports
|
|
59
|
+
* a message when it takes it. */
|
|
60
|
+
const playTurn = (message, arrived) => {
|
|
61
|
+
const n = turn++;
|
|
62
|
+
chain = chain.then(async () => {
|
|
63
|
+
if (arrived) {
|
|
64
|
+
h.emit({
|
|
65
|
+
type: 'message',
|
|
66
|
+
id: message.id,
|
|
67
|
+
text: message.text,
|
|
68
|
+
from: arrived,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
const abort = new AbortController();
|
|
72
|
+
running = abort;
|
|
73
|
+
try {
|
|
74
|
+
await play(h, script(message, n), n, abort.signal);
|
|
75
|
+
if (!abort.signal.aborted)
|
|
76
|
+
h.emit({ type: 'turn-end', reason: 'done' });
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
if (!abort.signal.aborted) {
|
|
80
|
+
h.emit({
|
|
81
|
+
type: 'turn-end',
|
|
82
|
+
reason: 'error',
|
|
83
|
+
error: err instanceof Error ? err.message : String(err),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
if (running === abort)
|
|
89
|
+
running = null;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
take = (text, from) => playTurn({
|
|
94
|
+
id: `r${++received}`,
|
|
95
|
+
text,
|
|
96
|
+
attachments: [],
|
|
97
|
+
steer: false,
|
|
98
|
+
...(from.kind === 'peer' ? { from } : {}),
|
|
99
|
+
}, from);
|
|
100
|
+
const session = {
|
|
101
|
+
capabilities,
|
|
102
|
+
send(message) {
|
|
103
|
+
sent.push(message);
|
|
104
|
+
if (message.steer)
|
|
105
|
+
return;
|
|
106
|
+
playTurn(message);
|
|
107
|
+
},
|
|
108
|
+
async interrupt() {
|
|
109
|
+
interrupts++;
|
|
110
|
+
running?.abort();
|
|
111
|
+
},
|
|
112
|
+
async setModel(id) {
|
|
113
|
+
h.emit({ type: 'info', info: { model: id } });
|
|
114
|
+
},
|
|
115
|
+
async setMode(id) {
|
|
116
|
+
h.emit({ type: 'info', info: { mode: id } });
|
|
117
|
+
},
|
|
118
|
+
async close() {
|
|
119
|
+
running?.abort();
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
return session;
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
return driver;
|
|
126
|
+
}
|
|
127
|
+
/** A script that answers turn `n` with `turns[n]`, and the last one after. */
|
|
128
|
+
export function scripted(...turns) {
|
|
129
|
+
return (_message, n) => turns[Math.min(n, turns.length - 1)] ?? [];
|
|
130
|
+
}
|
|
131
|
+
async function play(host, steps, turn, signal) {
|
|
132
|
+
const resolved = await steps;
|
|
133
|
+
let i = 0;
|
|
134
|
+
const iterable = Symbol.asyncIterator in resolved
|
|
135
|
+
? resolved
|
|
136
|
+
: resolved;
|
|
137
|
+
for await (const step of iterable) {
|
|
138
|
+
if (signal.aborted)
|
|
139
|
+
return;
|
|
140
|
+
await run(host, step, `f${turn}:${i++}`, signal);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async function run(host, step, key, signal) {
|
|
144
|
+
switch (step.type) {
|
|
145
|
+
case 'wait':
|
|
146
|
+
await sleep(step.ms, signal);
|
|
147
|
+
return;
|
|
148
|
+
case 'say': {
|
|
149
|
+
const size = Math.max(1, step.chunk ?? step.text.length);
|
|
150
|
+
for (let at = 0; at < step.text.length; at += size) {
|
|
151
|
+
if (signal.aborted)
|
|
152
|
+
return;
|
|
153
|
+
host.emit({
|
|
154
|
+
type: 'text',
|
|
155
|
+
id: key,
|
|
156
|
+
delta: step.text.slice(at, at + size),
|
|
157
|
+
...(step.reasoning ? { reasoning: true } : {}),
|
|
158
|
+
});
|
|
159
|
+
await sleep(step.delay ?? 0, signal);
|
|
160
|
+
}
|
|
161
|
+
host.emit({
|
|
162
|
+
type: 'text',
|
|
163
|
+
id: key,
|
|
164
|
+
text: step.text,
|
|
165
|
+
done: true,
|
|
166
|
+
...(step.reasoning ? { reasoning: true } : {}),
|
|
167
|
+
});
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
case 'call':
|
|
171
|
+
await call(host, step, step.id ?? key, signal);
|
|
172
|
+
return;
|
|
173
|
+
case 'ask': {
|
|
174
|
+
await host.ask(step.id ?? key, step.questions, signal);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
default:
|
|
178
|
+
host.emit(step);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async function call(host, step, id, signal) {
|
|
182
|
+
const app = host.config.tools.has(step.name);
|
|
183
|
+
const def = app ? host.config.tools.get(step.name) : undefined;
|
|
184
|
+
const kind = step.kind ?? def?.kind ?? 'other';
|
|
185
|
+
const title = step.title ??
|
|
186
|
+
(def?.title && step.input !== undefined
|
|
187
|
+
? def.title(step.input)
|
|
188
|
+
: step.name);
|
|
189
|
+
host.emit({
|
|
190
|
+
type: 'tool-start',
|
|
191
|
+
id,
|
|
192
|
+
name: step.name,
|
|
193
|
+
label: step.name,
|
|
194
|
+
kind,
|
|
195
|
+
title,
|
|
196
|
+
input: step.input ?? {},
|
|
197
|
+
app,
|
|
198
|
+
});
|
|
199
|
+
const toolCall = {
|
|
200
|
+
id,
|
|
201
|
+
name: step.name,
|
|
202
|
+
label: step.name,
|
|
203
|
+
kind,
|
|
204
|
+
title,
|
|
205
|
+
input: step.input ?? {},
|
|
206
|
+
app,
|
|
207
|
+
};
|
|
208
|
+
const gate = await host.gate(toolCall);
|
|
209
|
+
let input = step.input ?? {};
|
|
210
|
+
if (gate.behavior === 'deny') {
|
|
211
|
+
host.emit({ type: 'tool-end', id, state: 'denied', error: gate.message });
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
if (gate.behavior === 'allow' && gate.input !== undefined)
|
|
215
|
+
input = gate.input;
|
|
216
|
+
if (gate.behavior === 'ask') {
|
|
217
|
+
const approval = await host.approve(toolCall, signal);
|
|
218
|
+
if (approval.behavior === 'deny') {
|
|
219
|
+
if (!signal.aborted) {
|
|
220
|
+
host.emit({
|
|
221
|
+
type: 'tool-end',
|
|
222
|
+
id,
|
|
223
|
+
state: 'denied',
|
|
224
|
+
error: approval.message,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
if (approval.input !== undefined)
|
|
230
|
+
input = approval.input;
|
|
231
|
+
}
|
|
232
|
+
if (signal.aborted)
|
|
233
|
+
return;
|
|
234
|
+
host.emit({ type: 'tool-update', id, state: 'running' });
|
|
235
|
+
if (app) {
|
|
236
|
+
const result = await host.runTool(step.name, input, { callId: id, signal });
|
|
237
|
+
if (signal.aborted)
|
|
238
|
+
return;
|
|
239
|
+
const text = result.content
|
|
240
|
+
.map((c) => (c.type === 'text' ? c.text : ''))
|
|
241
|
+
.join('\n');
|
|
242
|
+
host.emit({
|
|
243
|
+
type: 'tool-end',
|
|
244
|
+
id,
|
|
245
|
+
state: result.isError ? 'error' : 'done',
|
|
246
|
+
...(result.isError ? { error: text } : {}),
|
|
247
|
+
});
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
if (step.error !== undefined) {
|
|
251
|
+
host.emit({ type: 'tool-end', id, state: 'error', error: step.error });
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
const output = typeof step.result === 'string'
|
|
255
|
+
? [{ type: 'text', text: step.result }]
|
|
256
|
+
: (step.result ?? []);
|
|
257
|
+
host.emit({ type: 'tool-end', id, state: 'done', output });
|
|
258
|
+
}
|
|
259
|
+
function sleep(ms, signal) {
|
|
260
|
+
if (ms <= 0)
|
|
261
|
+
return Promise.resolve();
|
|
262
|
+
return new Promise((resolve) => {
|
|
263
|
+
const timer = setTimeout(resolve, ms);
|
|
264
|
+
signal.addEventListener('abort', () => {
|
|
265
|
+
clearTimeout(timer);
|
|
266
|
+
resolve();
|
|
267
|
+
}, { once: true });
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=fake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake.js","sourceRoot":"","sources":["../../src/testing/fake.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EACV,QAAQ,EACR,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,QAAQ,GACd,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,2CAA2C;AAE3C,OAAO,EACL,UAAU,EACV,QAAQ,GAKT,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type ReactElement, type ReactNode } from 'react';
|
|
2
|
+
import type { StyleProp } from 'react-x11';
|
|
3
|
+
import { type AgentOptions, type AgentSession, type SessionSnapshot } from '../core/session.js';
|
|
4
|
+
import { type ComposerOptions } from './Composer.js';
|
|
5
|
+
import { type CodeAction, type ComponentEntry, type FenceEntry, type ToolRenderer } from './types.js';
|
|
6
|
+
/** What the view takes, whoever owns the session. */
|
|
7
|
+
export interface AgentChatViewProps {
|
|
8
|
+
/** Fenced blocks drawn by the app, by language. An entry with `describe`
|
|
9
|
+
* also tells the agent the format exists. */
|
|
10
|
+
fences?: Readonly<Record<string, FenceEntry>>;
|
|
11
|
+
/** Components a reply may name as a tag on its own line. */
|
|
12
|
+
components?: Readonly<Record<string, ComponentEntry>>;
|
|
13
|
+
/** Tool calls drawn by the app, by the tool's label; `'*'` for the rest.
|
|
14
|
+
* A tool's own `render` comes first. */
|
|
15
|
+
renderTool?: Readonly<Record<string, ToolRenderer>>;
|
|
16
|
+
/** Buttons on every fenced code block. Default `[copyCode]`. Nothing runs
|
|
17
|
+
* a block unless an action here does. */
|
|
18
|
+
codeActions?: readonly CodeAction[];
|
|
19
|
+
/** A link in a reply was pressed. Nothing navigates by itself. */
|
|
20
|
+
onLink?: (href: string) => void;
|
|
21
|
+
placeholder?: string;
|
|
22
|
+
/** How the message box behaves: what it draws as markdown while typing,
|
|
23
|
+
* the `@` file list, the `/` command list, pastes as attachments. */
|
|
24
|
+
composer?: ComposerOptions;
|
|
25
|
+
/** `true` for the session's line (agent, model, mode, cost, Copy), or a
|
|
26
|
+
* function of the session for the app's own. Default `true`. */
|
|
27
|
+
header?: boolean | ((session: AgentSession) => ReactNode);
|
|
28
|
+
/** Shown while the transcript is empty. */
|
|
29
|
+
empty?: ReactNode;
|
|
30
|
+
/** Shown instead of the chat when the harness cannot run here. Default: a
|
|
31
|
+
* line saying why. */
|
|
32
|
+
fallback?: ReactNode | ((snapshot: SessionSnapshot) => ReactNode);
|
|
33
|
+
/** Base text size. Default: the theme's. */
|
|
34
|
+
fontSize?: number;
|
|
35
|
+
autoFocus?: boolean;
|
|
36
|
+
style?: StyleProp;
|
|
37
|
+
}
|
|
38
|
+
type NoOptions = {
|
|
39
|
+
readonly [K in keyof AgentOptions]?: never;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Either the session's options — the chat owns its session — or a
|
|
43
|
+
* `session` from `useAgent`, and none of the options: they are the
|
|
44
|
+
* session's, and a chat handed one does not change it.
|
|
45
|
+
*/
|
|
46
|
+
export type AgentChatProps = AgentChatViewProps & ((AgentOptions & {
|
|
47
|
+
session?: undefined;
|
|
48
|
+
}) | (NoOptions & {
|
|
49
|
+
session: AgentSession;
|
|
50
|
+
}));
|
|
51
|
+
export declare function AgentChat(props: AgentChatProps): ReactElement;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=AgentChat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentChat.d.ts","sourceRoot":"","sources":["../../src/view/AgentChat.tsx"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAU/D,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AAGpB,qDAAqD;AACrD,MAAM,WAAW,kBAAkB;IACjC;kDAC8C;IAC9C,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAC9C,4DAA4D;IAC5D,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IACtD;6CACyC;IACzC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IACpD;8CAC0C;IAC1C,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACpC,kEAAkE;IAClE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;0EACsE;IACtE,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;qEACiE;IACjE,MAAM,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC;IAC1D,2CAA2C;IAC3C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;2BACuB;IACvB,QAAQ,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,QAAQ,EAAE,eAAe,KAAK,SAAS,CAAC,CAAC;IAClE,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,KAAK,SAAS,GAAG;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,EAAE,KAAK;CAAE,CAAC;AAEhE;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAC7C,CACI,CAAC,YAAY,GAAG;IAAE,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,GACxC,CAAC,SAAS,GAAG;IAAE,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAC1C,CAAC;AAEJ,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,CAM7D"}
|