cmdr-agent 2.1.2 → 2.2.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/dist/bin/cmdr.js +4 -0
- package/dist/bin/cmdr.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/cli/args.d.ts +4 -0
- package/dist/src/cli/args.d.ts.map +1 -1
- package/dist/src/cli/args.js +15 -0
- package/dist/src/cli/args.js.map +1 -1
- package/dist/src/cli/commands.js +20 -0
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/ink/App.d.ts.map +1 -1
- package/dist/src/cli/ink/App.js +15 -0
- package/dist/src/cli/ink/App.js.map +1 -1
- package/dist/src/cli/repl.d.ts +4 -0
- package/dist/src/cli/repl.d.ts.map +1 -1
- package/dist/src/cli/repl.js +48 -19
- package/dist/src/cli/repl.js.map +1 -1
- package/dist/src/core/agent-runner.d.ts +5 -0
- package/dist/src/core/agent-runner.d.ts.map +1 -1
- package/dist/src/core/agent-runner.js +12 -2
- package/dist/src/core/agent-runner.js.map +1 -1
- package/dist/src/core/agent.d.ts +2 -1
- package/dist/src/core/agent.d.ts.map +1 -1
- package/dist/src/core/agent.js +5 -1
- package/dist/src/core/agent.js.map +1 -1
- package/dist/src/core/content-replacement.d.ts +44 -0
- package/dist/src/core/content-replacement.d.ts.map +1 -0
- package/dist/src/core/content-replacement.js +67 -0
- package/dist/src/core/content-replacement.js.map +1 -0
- package/dist/src/core/event-bus.d.ts +129 -0
- package/dist/src/core/event-bus.d.ts.map +1 -0
- package/dist/src/core/event-bus.js +103 -0
- package/dist/src/core/event-bus.js.map +1 -0
- package/dist/src/core/orchestrator.d.ts +17 -1
- package/dist/src/core/orchestrator.d.ts.map +1 -1
- package/dist/src/core/orchestrator.js +95 -1
- package/dist/src/core/orchestrator.js.map +1 -1
- package/dist/src/core/permissions.d.ts +31 -3
- package/dist/src/core/permissions.d.ts.map +1 -1
- package/dist/src/core/permissions.js +122 -11
- package/dist/src/core/permissions.js.map +1 -1
- package/dist/src/core/presets.d.ts.map +1 -1
- package/dist/src/core/presets.js +1 -0
- package/dist/src/core/presets.js.map +1 -1
- package/dist/src/core/types.d.ts +17 -1
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/llm/anthropic.d.ts +27 -0
- package/dist/src/llm/anthropic.d.ts.map +1 -0
- package/dist/src/llm/anthropic.js +269 -0
- package/dist/src/llm/anthropic.js.map +1 -0
- package/dist/src/llm/ollama.d.ts.map +1 -1
- package/dist/src/llm/ollama.js +16 -4
- package/dist/src/llm/ollama.js.map +1 -1
- package/dist/src/llm/openai.d.ts +25 -0
- package/dist/src/llm/openai.d.ts.map +1 -0
- package/dist/src/llm/openai.js +299 -0
- package/dist/src/llm/openai.js.map +1 -0
- package/dist/src/llm/provider-factory.d.ts +35 -0
- package/dist/src/llm/provider-factory.d.ts.map +1 -0
- package/dist/src/llm/provider-factory.js +73 -0
- package/dist/src/llm/provider-factory.js.map +1 -0
- package/dist/src/memory/consolidation.d.ts +37 -0
- package/dist/src/memory/consolidation.d.ts.map +1 -0
- package/dist/src/memory/consolidation.js +148 -0
- package/dist/src/memory/consolidation.js.map +1 -0
- package/dist/src/memory/memory-manager.d.ts +39 -0
- package/dist/src/memory/memory-manager.d.ts.map +1 -0
- package/dist/src/memory/memory-manager.js +96 -0
- package/dist/src/memory/memory-manager.js.map +1 -0
- package/dist/src/plugins/mcp-client.d.ts +14 -5
- package/dist/src/plugins/mcp-client.d.ts.map +1 -1
- package/dist/src/plugins/mcp-client.js +197 -43
- package/dist/src/plugins/mcp-client.js.map +1 -1
- package/dist/src/scheduling/task-scheduler.d.ts +51 -0
- package/dist/src/scheduling/task-scheduler.d.ts.map +1 -0
- package/dist/src/scheduling/task-scheduler.js +127 -0
- package/dist/src/scheduling/task-scheduler.js.map +1 -0
- package/dist/src/session/prompt-builder.d.ts +6 -0
- package/dist/src/session/prompt-builder.d.ts.map +1 -1
- package/dist/src/session/prompt-builder.js +21 -2
- package/dist/src/session/prompt-builder.js.map +1 -1
- package/dist/src/session/prompt-cache.d.ts +33 -0
- package/dist/src/session/prompt-cache.d.ts.map +1 -0
- package/dist/src/session/prompt-cache.js +54 -0
- package/dist/src/session/prompt-cache.js.map +1 -0
- package/dist/src/tools/built-in/diagnostics.d.ts +12 -0
- package/dist/src/tools/built-in/diagnostics.d.ts.map +1 -0
- package/dist/src/tools/built-in/diagnostics.js +119 -0
- package/dist/src/tools/built-in/diagnostics.js.map +1 -0
- package/dist/src/tools/built-in/git-worktree.d.ts +13 -0
- package/dist/src/tools/built-in/git-worktree.d.ts.map +1 -0
- package/dist/src/tools/built-in/git-worktree.js +75 -0
- package/dist/src/tools/built-in/git-worktree.js.map +1 -0
- package/dist/src/tools/built-in/index.d.ts +5 -1
- package/dist/src/tools/built-in/index.d.ts.map +1 -1
- package/dist/src/tools/built-in/index.js +8 -2
- package/dist/src/tools/built-in/index.js.map +1 -1
- package/dist/src/tools/built-in/memory.d.ts +15 -0
- package/dist/src/tools/built-in/memory.d.ts.map +1 -0
- package/dist/src/tools/built-in/memory.js +58 -0
- package/dist/src/tools/built-in/memory.js.map +1 -0
- package/dist/src/tools/built-in/notebook.d.ts +22 -0
- package/dist/src/tools/built-in/notebook.d.ts.map +1 -0
- package/dist/src/tools/built-in/notebook.js +207 -0
- package/dist/src/tools/built-in/notebook.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskScheduler — cron-like background task automation for cmdr.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Interval-based tasks (run every N seconds/minutes)
|
|
6
|
+
* - One-shot delayed tasks (run after N seconds)
|
|
7
|
+
* - Named tasks with status tracking
|
|
8
|
+
* - Graceful shutdown
|
|
9
|
+
*/
|
|
10
|
+
let taskIdCounter = 0;
|
|
11
|
+
export class TaskScheduler {
|
|
12
|
+
tasks = new Map();
|
|
13
|
+
running = false;
|
|
14
|
+
/** Start the scheduler. */
|
|
15
|
+
start() {
|
|
16
|
+
this.running = true;
|
|
17
|
+
// Arm all pending tasks
|
|
18
|
+
for (const task of this.tasks.values()) {
|
|
19
|
+
if (task.status === 'pending')
|
|
20
|
+
this.arm(task);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Stop all scheduled tasks. */
|
|
24
|
+
stop() {
|
|
25
|
+
this.running = false;
|
|
26
|
+
for (const task of this.tasks.values()) {
|
|
27
|
+
if (task.timer) {
|
|
28
|
+
clearTimeout(task.timer);
|
|
29
|
+
clearInterval(task.timer);
|
|
30
|
+
task.timer = undefined;
|
|
31
|
+
}
|
|
32
|
+
if (task.status === 'pending' || task.status === 'running') {
|
|
33
|
+
task.status = 'cancelled';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Schedule a recurring task. */
|
|
38
|
+
scheduleInterval(name, intervalMs, handler) {
|
|
39
|
+
const id = `task_${++taskIdCounter}_${Date.now()}`;
|
|
40
|
+
const task = {
|
|
41
|
+
id, name, handler, intervalMs,
|
|
42
|
+
status: 'pending',
|
|
43
|
+
runCount: 0,
|
|
44
|
+
nextRun: new Date(Date.now() + intervalMs),
|
|
45
|
+
};
|
|
46
|
+
this.tasks.set(id, task);
|
|
47
|
+
if (this.running)
|
|
48
|
+
this.arm(task);
|
|
49
|
+
return id;
|
|
50
|
+
}
|
|
51
|
+
/** Schedule a one-shot delayed task. */
|
|
52
|
+
scheduleOnce(name, delayMs, handler) {
|
|
53
|
+
const id = `task_${++taskIdCounter}_${Date.now()}`;
|
|
54
|
+
const task = {
|
|
55
|
+
id, name, handler, delayMs,
|
|
56
|
+
status: 'pending',
|
|
57
|
+
runCount: 0,
|
|
58
|
+
nextRun: new Date(Date.now() + delayMs),
|
|
59
|
+
};
|
|
60
|
+
this.tasks.set(id, task);
|
|
61
|
+
if (this.running)
|
|
62
|
+
this.arm(task);
|
|
63
|
+
return id;
|
|
64
|
+
}
|
|
65
|
+
/** Cancel a specific task. */
|
|
66
|
+
cancel(id) {
|
|
67
|
+
const task = this.tasks.get(id);
|
|
68
|
+
if (!task)
|
|
69
|
+
return false;
|
|
70
|
+
if (task.timer) {
|
|
71
|
+
clearTimeout(task.timer);
|
|
72
|
+
clearInterval(task.timer);
|
|
73
|
+
task.timer = undefined;
|
|
74
|
+
}
|
|
75
|
+
task.status = 'cancelled';
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
/** List all scheduled tasks with their status. */
|
|
79
|
+
list() {
|
|
80
|
+
return Array.from(this.tasks.values()).map(t => ({
|
|
81
|
+
id: t.id,
|
|
82
|
+
name: t.name,
|
|
83
|
+
status: t.status,
|
|
84
|
+
runCount: t.runCount,
|
|
85
|
+
lastRun: t.lastRun,
|
|
86
|
+
nextRun: t.nextRun,
|
|
87
|
+
error: t.error,
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
/** Get a specific task by ID. */
|
|
91
|
+
get(id) {
|
|
92
|
+
return this.tasks.get(id);
|
|
93
|
+
}
|
|
94
|
+
/** Number of active (pending/running) tasks. */
|
|
95
|
+
get activeCount() {
|
|
96
|
+
return Array.from(this.tasks.values()).filter(t => t.status === 'pending' || t.status === 'running').length;
|
|
97
|
+
}
|
|
98
|
+
arm(task) {
|
|
99
|
+
const execute = async () => {
|
|
100
|
+
task.status = 'running';
|
|
101
|
+
task.lastRun = new Date();
|
|
102
|
+
try {
|
|
103
|
+
await task.handler();
|
|
104
|
+
task.runCount++;
|
|
105
|
+
task.error = undefined;
|
|
106
|
+
if (task.intervalMs) {
|
|
107
|
+
task.status = 'pending';
|
|
108
|
+
task.nextRun = new Date(Date.now() + task.intervalMs);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
task.status = 'completed';
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
task.error = err instanceof Error ? err.message : String(err);
|
|
116
|
+
task.status = 'failed';
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
if (task.intervalMs) {
|
|
120
|
+
task.timer = setInterval(execute, task.intervalMs);
|
|
121
|
+
}
|
|
122
|
+
else if (task.delayMs) {
|
|
123
|
+
task.timer = setTimeout(execute, task.delayMs);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=task-scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-scheduler.js","sourceRoot":"","sources":["../../../src/scheduling/task-scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Static modules are identical across turns, enabling Ollama KV cache reuse.
|
|
6
6
|
*/
|
|
7
7
|
import type { ProjectContext } from '../core/types.js';
|
|
8
|
+
import { type CacheStats } from './prompt-cache.js';
|
|
8
9
|
export interface PromptModule {
|
|
9
10
|
id: string;
|
|
10
11
|
content: string;
|
|
@@ -22,17 +23,22 @@ export declare const PROMPT_PRIORITIES: {
|
|
|
22
23
|
};
|
|
23
24
|
export declare class PromptBuilder {
|
|
24
25
|
private modules;
|
|
26
|
+
private readonly cache;
|
|
25
27
|
addModule(mod: PromptModule): void;
|
|
26
28
|
updateModule(id: string, content: string): void;
|
|
27
29
|
removeModule(id: string): void;
|
|
28
30
|
build(): string;
|
|
29
31
|
/** Returns only static modules — for KV cache prefix estimation. */
|
|
30
32
|
getStaticPrefix(): string;
|
|
33
|
+
/** Get prompt cache hit/miss statistics. */
|
|
34
|
+
getCacheStats(): CacheStats;
|
|
31
35
|
}
|
|
32
36
|
export interface PromptBuildOptions {
|
|
33
37
|
basePrompt: string;
|
|
34
38
|
projectContext: ProjectContext;
|
|
35
39
|
model: string;
|
|
40
|
+
/** Persistent memory content (from MemoryManager). */
|
|
41
|
+
memoryPrompt?: string;
|
|
36
42
|
}
|
|
37
43
|
export declare function buildSystemPrompt(options: PromptBuildOptions): string;
|
|
38
44
|
//# sourceMappingURL=prompt-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/session/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/session/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAIhE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAID,eAAO,MAAM,iBAAiB;;;;;;;;CAQpB,CAAA;AAIV,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAE1C,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAIlC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAO/C,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B,KAAK,IAAI,MAAM;IAcf,oEAAoE;IACpE,eAAe,IAAI,MAAM;IASzB,4CAA4C;IAC5C,aAAa,IAAI,UAAU;CAG5B;AAID,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,cAAc,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA6ErE"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Each module has a priority (lower = earlier) and a static flag.
|
|
5
5
|
* Static modules are identical across turns, enabling Ollama KV cache reuse.
|
|
6
6
|
*/
|
|
7
|
+
import { PromptCache } from './prompt-cache.js';
|
|
7
8
|
/* ── Priority constants ────────────────────────────────────────────── */
|
|
8
9
|
export const PROMPT_PRIORITIES = {
|
|
9
10
|
ROLE: 10,
|
|
@@ -17,6 +18,7 @@ export const PROMPT_PRIORITIES = {
|
|
|
17
18
|
/* ── PromptBuilder class ───────────────────────────────────────────── */
|
|
18
19
|
export class PromptBuilder {
|
|
19
20
|
modules = new Map();
|
|
21
|
+
cache = new PromptCache();
|
|
20
22
|
addModule(mod) {
|
|
21
23
|
this.modules.set(mod.id, mod);
|
|
22
24
|
}
|
|
@@ -30,8 +32,12 @@ export class PromptBuilder {
|
|
|
30
32
|
this.modules.delete(id);
|
|
31
33
|
}
|
|
32
34
|
build() {
|
|
33
|
-
|
|
34
|
-
.sort((a, b) => a.priority - b.priority)
|
|
35
|
+
const sorted = [...this.modules.values()]
|
|
36
|
+
.sort((a, b) => a.priority - b.priority);
|
|
37
|
+
// Track static prefix for KV cache hit detection
|
|
38
|
+
const staticPrefix = sorted.filter(m => m.isStatic).map(m => m.content).filter(c => c.length > 0).join('\n\n');
|
|
39
|
+
this.cache.checkPrefix(staticPrefix);
|
|
40
|
+
return sorted
|
|
35
41
|
.map(m => m.content)
|
|
36
42
|
.filter(c => c.length > 0)
|
|
37
43
|
.join('\n\n');
|
|
@@ -45,6 +51,10 @@ export class PromptBuilder {
|
|
|
45
51
|
.filter(c => c.length > 0)
|
|
46
52
|
.join('\n\n');
|
|
47
53
|
}
|
|
54
|
+
/** Get prompt cache hit/miss statistics. */
|
|
55
|
+
getCacheStats() {
|
|
56
|
+
return this.cache.getStats();
|
|
57
|
+
}
|
|
48
58
|
}
|
|
49
59
|
export function buildSystemPrompt(options) {
|
|
50
60
|
const builder = new PromptBuilder();
|
|
@@ -108,6 +118,15 @@ export function buildSystemPrompt(options) {
|
|
|
108
118
|
isStatic: false,
|
|
109
119
|
});
|
|
110
120
|
}
|
|
121
|
+
// 25: Persistent memory — cross-session learned context (STATIC per session)
|
|
122
|
+
if (options.memoryPrompt) {
|
|
123
|
+
builder.addModule({
|
|
124
|
+
id: 'memory',
|
|
125
|
+
content: `<persistent_memory>\nThese are your saved notes from previous sessions. Use them to inform your work. Update memory with memory_write when you learn something new about this project.\n\n${options.memoryPrompt}\n</persistent_memory>`,
|
|
126
|
+
priority: 25, // After role, before project instructions
|
|
127
|
+
isStatic: true,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
111
130
|
return builder.build();
|
|
112
131
|
}
|
|
113
132
|
//# sourceMappingURL=prompt-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/session/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/session/prompt-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PromptCache — tracks static prompt prefix hashes to enable KV cache reuse.
|
|
3
|
+
*
|
|
4
|
+
* When the static prefix (system prompt, project instructions, skills) doesn't
|
|
5
|
+
* change between turns, the LLM can reuse its KV cache for those tokens,
|
|
6
|
+
* dramatically reducing input token processing time.
|
|
7
|
+
*
|
|
8
|
+
* Works with PromptBuilder's getStaticPrefix() to detect cache hits/misses.
|
|
9
|
+
*/
|
|
10
|
+
export interface CacheStats {
|
|
11
|
+
hits: number;
|
|
12
|
+
misses: number;
|
|
13
|
+
estimatedTokensSaved: number;
|
|
14
|
+
lastPrefixHash: string | null;
|
|
15
|
+
}
|
|
16
|
+
export declare class PromptCache {
|
|
17
|
+
private lastPrefixHash;
|
|
18
|
+
private hits;
|
|
19
|
+
private misses;
|
|
20
|
+
private estimatedTokensSaved;
|
|
21
|
+
/**
|
|
22
|
+
* Check whether the static prefix has changed since last turn.
|
|
23
|
+
* Returns true if prefix is unchanged (cache hit).
|
|
24
|
+
*/
|
|
25
|
+
checkPrefix(staticPrefix: string): boolean;
|
|
26
|
+
/** Reset tracking (e.g. on model switch). */
|
|
27
|
+
reset(): void;
|
|
28
|
+
/** Get cache statistics. */
|
|
29
|
+
getStats(): CacheStats;
|
|
30
|
+
/** Hit rate as a percentage (0-100). */
|
|
31
|
+
get hitRate(): number;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=prompt-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-cache.d.ts","sourceRoot":"","sources":["../../../src/session/prompt-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,oBAAoB,EAAE,MAAM,CAAA;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,oBAAoB,CAAI;IAEhC;;;OAGG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAe1C,6CAA6C;IAC7C,KAAK,IAAI,IAAI;IAOb,4BAA4B;IAC5B,QAAQ,IAAI,UAAU;IAStB,wCAAwC;IACxC,IAAI,OAAO,IAAI,MAAM,CAGpB;CACF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PromptCache — tracks static prompt prefix hashes to enable KV cache reuse.
|
|
3
|
+
*
|
|
4
|
+
* When the static prefix (system prompt, project instructions, skills) doesn't
|
|
5
|
+
* change between turns, the LLM can reuse its KV cache for those tokens,
|
|
6
|
+
* dramatically reducing input token processing time.
|
|
7
|
+
*
|
|
8
|
+
* Works with PromptBuilder's getStaticPrefix() to detect cache hits/misses.
|
|
9
|
+
*/
|
|
10
|
+
import { createHash } from 'node:crypto';
|
|
11
|
+
export class PromptCache {
|
|
12
|
+
lastPrefixHash = null;
|
|
13
|
+
hits = 0;
|
|
14
|
+
misses = 0;
|
|
15
|
+
estimatedTokensSaved = 0;
|
|
16
|
+
/**
|
|
17
|
+
* Check whether the static prefix has changed since last turn.
|
|
18
|
+
* Returns true if prefix is unchanged (cache hit).
|
|
19
|
+
*/
|
|
20
|
+
checkPrefix(staticPrefix) {
|
|
21
|
+
const hash = createHash('sha256').update(staticPrefix).digest('hex').slice(0, 16);
|
|
22
|
+
if (this.lastPrefixHash === hash) {
|
|
23
|
+
this.hits++;
|
|
24
|
+
// Rough estimate: ~4 chars per token for English text
|
|
25
|
+
this.estimatedTokensSaved += Math.ceil(staticPrefix.length / 4);
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
this.misses++;
|
|
29
|
+
this.lastPrefixHash = hash;
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
/** Reset tracking (e.g. on model switch). */
|
|
33
|
+
reset() {
|
|
34
|
+
this.lastPrefixHash = null;
|
|
35
|
+
this.hits = 0;
|
|
36
|
+
this.misses = 0;
|
|
37
|
+
this.estimatedTokensSaved = 0;
|
|
38
|
+
}
|
|
39
|
+
/** Get cache statistics. */
|
|
40
|
+
getStats() {
|
|
41
|
+
return {
|
|
42
|
+
hits: this.hits,
|
|
43
|
+
misses: this.misses,
|
|
44
|
+
estimatedTokensSaved: this.estimatedTokensSaved,
|
|
45
|
+
lastPrefixHash: this.lastPrefixHash,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** Hit rate as a percentage (0-100). */
|
|
49
|
+
get hitRate() {
|
|
50
|
+
const total = this.hits + this.misses;
|
|
51
|
+
return total === 0 ? 0 : Math.round((this.hits / total) * 100);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=prompt-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-cache.js","sourceRoot":"","sources":["../../../src/session/prompt-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AASxC,MAAM,OAAO,WAAW;IACd,cAAc,GAAkB,IAAI,CAAA;IACpC,IAAI,GAAG,CAAC,CAAA;IACR,MAAM,GAAG,CAAC,CAAA;IACV,oBAAoB,GAAG,CAAC,CAAA;IAEhC;;;OAGG;IACH,WAAW,CAAC,YAAoB;QAC9B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAEjF,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAA;YACX,sDAAsD;YACtD,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YAC/D,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAA;QACb,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,6CAA6C;IAC7C,KAAK;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QACb,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QACf,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,4BAA4B;IAC5B,QAAQ;QACN,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAA;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,OAAO;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;QACrC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAA;IAChE,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in lsp tool — query Language Server Protocol for diagnostics, definitions, references.
|
|
3
|
+
*
|
|
4
|
+
* Uses a lightweight approach: shells out to language-specific CLIs
|
|
5
|
+
* (tsc, eslint, pyright, etc.) rather than maintaining a full LSP client.
|
|
6
|
+
* This covers the most common use cases without heavy dependencies.
|
|
7
|
+
*/
|
|
8
|
+
export declare const lspDiagnosticsTool: import("../registry.js").ToolDefinition<{
|
|
9
|
+
file?: string | undefined;
|
|
10
|
+
checker?: "auto" | "tsc" | "eslint" | "pyright" | "mypy" | "ruff" | undefined;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0CH,eAAO,MAAM,kBAAkB;;;EAkF7B,CAAA"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in lsp tool — query Language Server Protocol for diagnostics, definitions, references.
|
|
3
|
+
*
|
|
4
|
+
* Uses a lightweight approach: shells out to language-specific CLIs
|
|
5
|
+
* (tsc, eslint, pyright, etc.) rather than maintaining a full LSP client.
|
|
6
|
+
* This covers the most common use cases without heavy dependencies.
|
|
7
|
+
*/
|
|
8
|
+
import { spawn } from 'child_process';
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { defineTool } from '../registry.js';
|
|
11
|
+
import { existsSync } from 'node:fs';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
function runCommand(cmd, args, cwd, timeoutMs = 30_000) {
|
|
14
|
+
return new Promise((resolve) => {
|
|
15
|
+
const child = spawn(cmd, args, { cwd, stdio: ['ignore', 'pipe', 'pipe'] });
|
|
16
|
+
const chunks = [];
|
|
17
|
+
const errChunks = [];
|
|
18
|
+
const timeout = setTimeout(() => {
|
|
19
|
+
child.kill();
|
|
20
|
+
resolve({ stdout: '', stderr: 'Command timed out', code: 1 });
|
|
21
|
+
}, timeoutMs);
|
|
22
|
+
child.stdout.on('data', (c) => chunks.push(c));
|
|
23
|
+
child.stderr.on('data', (c) => errChunks.push(c));
|
|
24
|
+
child.on('close', (code) => {
|
|
25
|
+
clearTimeout(timeout);
|
|
26
|
+
resolve({
|
|
27
|
+
stdout: Buffer.concat(chunks).toString('utf-8').trim(),
|
|
28
|
+
stderr: Buffer.concat(errChunks).toString('utf-8').trim(),
|
|
29
|
+
code: code ?? 1,
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
child.on('error', (err) => {
|
|
33
|
+
clearTimeout(timeout);
|
|
34
|
+
resolve({ stdout: '', stderr: err.message, code: 1 });
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
export const lspDiagnosticsTool = defineTool({
|
|
39
|
+
name: 'diagnostics',
|
|
40
|
+
description: 'Get compiler/linter diagnostics (errors, warnings) for the project or a specific file. ' +
|
|
41
|
+
'Auto-detects the project type (TypeScript, Python, etc.) and runs the appropriate checker. ' +
|
|
42
|
+
'Useful for finding errors after making code changes.',
|
|
43
|
+
inputSchema: z.object({
|
|
44
|
+
file: z.string().optional().describe('Specific file to check. If omitted, checks the whole project.'),
|
|
45
|
+
checker: z.enum(['auto', 'tsc', 'eslint', 'pyright', 'mypy', 'ruff']).optional()
|
|
46
|
+
.describe('Which checker to use. Defaults to auto-detect.'),
|
|
47
|
+
}),
|
|
48
|
+
execute: async (input, context) => {
|
|
49
|
+
const cwd = context.cwd ?? process.cwd();
|
|
50
|
+
const checker = input.checker ?? 'auto';
|
|
51
|
+
const file = input.file;
|
|
52
|
+
// Auto-detect project type
|
|
53
|
+
let resolvedChecker = checker;
|
|
54
|
+
if (resolvedChecker === 'auto') {
|
|
55
|
+
if (existsSync(join(cwd, 'tsconfig.json')))
|
|
56
|
+
resolvedChecker = 'tsc';
|
|
57
|
+
else if (existsSync(join(cwd, 'pyproject.toml')) || existsSync(join(cwd, 'setup.py'))) {
|
|
58
|
+
resolvedChecker = 'pyright';
|
|
59
|
+
}
|
|
60
|
+
else if (existsSync(join(cwd, 'package.json')))
|
|
61
|
+
resolvedChecker = 'tsc';
|
|
62
|
+
else
|
|
63
|
+
resolvedChecker = 'tsc'; // fallback
|
|
64
|
+
}
|
|
65
|
+
let result;
|
|
66
|
+
switch (resolvedChecker) {
|
|
67
|
+
case 'tsc': {
|
|
68
|
+
const args = ['--noEmit', '--pretty'];
|
|
69
|
+
if (file)
|
|
70
|
+
args.push(file);
|
|
71
|
+
result = await runCommand('npx', ['tsc', ...args], cwd);
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
case 'eslint': {
|
|
75
|
+
const target = file ?? '.';
|
|
76
|
+
result = await runCommand('npx', ['eslint', '--format', 'compact', target], cwd);
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case 'pyright': {
|
|
80
|
+
const args = file ? [file] : [];
|
|
81
|
+
result = await runCommand('pyright', ['--outputjson', ...args], cwd);
|
|
82
|
+
// Parse pyright JSON output into readable format
|
|
83
|
+
if (result.code === 0 || result.stdout.startsWith('{')) {
|
|
84
|
+
try {
|
|
85
|
+
const data = JSON.parse(result.stdout);
|
|
86
|
+
const diags = data.generalDiagnostics ?? [];
|
|
87
|
+
if (diags.length === 0) {
|
|
88
|
+
result.stdout = 'No errors found.';
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
result.stdout = diags.map((d) => `${d.file}:${d.range.start.line}: [${d.severity === 1 ? 'error' : 'warning'}] ${d.message}`).join('\n');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch { /* use raw output */ }
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
case 'mypy': {
|
|
99
|
+
const target = file ?? '.';
|
|
100
|
+
result = await runCommand('mypy', [target], cwd);
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
case 'ruff': {
|
|
104
|
+
const target = file ?? '.';
|
|
105
|
+
result = await runCommand('ruff', ['check', target], cwd);
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
default:
|
|
109
|
+
return { data: `Unknown checker: ${resolvedChecker}`, isError: true };
|
|
110
|
+
}
|
|
111
|
+
const output = result.stdout || result.stderr;
|
|
112
|
+
if (result.code === 0 && !output) {
|
|
113
|
+
return { data: `No diagnostics found (${resolvedChecker}).` };
|
|
114
|
+
}
|
|
115
|
+
// Code != 0 is normal for diagnostics tools (means errors found)
|
|
116
|
+
return { data: output || 'No output from checker.' };
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../../src/tools/built-in/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in git_worktree tool — manage git worktrees for parallel branch work.
|
|
3
|
+
*
|
|
4
|
+
* Allows the agent to create, list, and remove worktrees, enabling
|
|
5
|
+
* work on multiple branches simultaneously without stashing.
|
|
6
|
+
*/
|
|
7
|
+
export declare const gitWorktreeTool: import("../registry.js").ToolDefinition<{
|
|
8
|
+
action: "list" | "add" | "remove";
|
|
9
|
+
path?: string | undefined;
|
|
10
|
+
branch?: string | undefined;
|
|
11
|
+
createBranch?: boolean | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=git-worktree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-worktree.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/git-worktree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6BH,eAAO,MAAM,eAAe;;;;;EA8C1B,CAAA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in git_worktree tool — manage git worktrees for parallel branch work.
|
|
3
|
+
*
|
|
4
|
+
* Allows the agent to create, list, and remove worktrees, enabling
|
|
5
|
+
* work on multiple branches simultaneously without stashing.
|
|
6
|
+
*/
|
|
7
|
+
import { spawn } from 'child_process';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { defineTool } from '../registry.js';
|
|
10
|
+
function runGit(args, cwd) {
|
|
11
|
+
return new Promise((resolve) => {
|
|
12
|
+
const child = spawn('git', args, { cwd, stdio: ['ignore', 'pipe', 'pipe'] });
|
|
13
|
+
const chunks = [];
|
|
14
|
+
const errChunks = [];
|
|
15
|
+
child.stdout.on('data', (c) => chunks.push(c));
|
|
16
|
+
child.stderr.on('data', (c) => errChunks.push(c));
|
|
17
|
+
child.on('close', (code) => {
|
|
18
|
+
resolve({
|
|
19
|
+
stdout: Buffer.concat(chunks).toString('utf-8').trim(),
|
|
20
|
+
stderr: Buffer.concat(errChunks).toString('utf-8').trim(),
|
|
21
|
+
code: code ?? 1,
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
child.on('error', (err) => {
|
|
25
|
+
resolve({ stdout: '', stderr: err.message, code: 1 });
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export const gitWorktreeTool = defineTool({
|
|
30
|
+
name: 'git_worktree',
|
|
31
|
+
description: 'Manage git worktrees for parallel branch work. ' +
|
|
32
|
+
'Actions: list (show worktrees), add (create new worktree), remove (delete worktree).',
|
|
33
|
+
inputSchema: z.object({
|
|
34
|
+
action: z.enum(['list', 'add', 'remove']).describe('Worktree action to perform.'),
|
|
35
|
+
path: z.string().optional().describe('Path for the new worktree (required for add/remove).'),
|
|
36
|
+
branch: z.string().optional().describe('Branch name for the worktree (for add). Created if -b is needed.'),
|
|
37
|
+
createBranch: z.boolean().optional().describe('Create a new branch for the worktree.'),
|
|
38
|
+
}),
|
|
39
|
+
execute: async (input, context) => {
|
|
40
|
+
const cwd = context.cwd ?? process.cwd();
|
|
41
|
+
switch (input.action) {
|
|
42
|
+
case 'list': {
|
|
43
|
+
const result = await runGit(['worktree', 'list', '--porcelain'], cwd);
|
|
44
|
+
if (result.code !== 0)
|
|
45
|
+
return { data: result.stderr || 'Failed to list worktrees', isError: true };
|
|
46
|
+
return { data: result.stdout || '(no worktrees)' };
|
|
47
|
+
}
|
|
48
|
+
case 'add': {
|
|
49
|
+
if (!input.path)
|
|
50
|
+
return { data: '"path" is required for add action', isError: true };
|
|
51
|
+
const args = ['worktree', 'add'];
|
|
52
|
+
if (input.createBranch && input.branch) {
|
|
53
|
+
args.push('-b', input.branch);
|
|
54
|
+
}
|
|
55
|
+
args.push(input.path);
|
|
56
|
+
if (input.branch && !input.createBranch) {
|
|
57
|
+
args.push(input.branch);
|
|
58
|
+
}
|
|
59
|
+
const result = await runGit(args, cwd);
|
|
60
|
+
if (result.code !== 0)
|
|
61
|
+
return { data: result.stderr || 'Failed to add worktree', isError: true };
|
|
62
|
+
return { data: result.stdout || `Worktree created at ${input.path}` };
|
|
63
|
+
}
|
|
64
|
+
case 'remove': {
|
|
65
|
+
if (!input.path)
|
|
66
|
+
return { data: '"path" is required for remove action', isError: true };
|
|
67
|
+
const result = await runGit(['worktree', 'remove', input.path], cwd);
|
|
68
|
+
if (result.code !== 0)
|
|
69
|
+
return { data: result.stderr || 'Failed to remove worktree', isError: true };
|
|
70
|
+
return { data: result.stdout || `Worktree at ${input.path} removed` };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=git-worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-worktree.js","sourceRoot":"","sources":["../../../../src/tools/built-in/git-worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,10 +12,14 @@ import { globTool } from './glob.js';
|
|
|
12
12
|
import { gitDiffTool } from './git-diff.js';
|
|
13
13
|
import { gitLogTool } from './git-log.js';
|
|
14
14
|
import { gitCommitTool, gitBranchTool } from './git-commit.js';
|
|
15
|
+
import { gitWorktreeTool } from './git-worktree.js';
|
|
15
16
|
import { thinkTool } from './think.js';
|
|
16
17
|
import { webFetchTool } from './web-fetch.js';
|
|
17
18
|
import { askUserTool } from './ask-user.js';
|
|
18
|
-
|
|
19
|
+
import { memoryReadTool, memoryWriteTool } from './memory.js';
|
|
20
|
+
import { lspDiagnosticsTool } from './diagnostics.js';
|
|
21
|
+
import { notebookReadTool, notebookEditTool, notebookRunTool } from './notebook.js';
|
|
22
|
+
export { bashTool, fileReadTool, fileWriteTool, fileEditTool, grepTool, globTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool, gitWorktreeTool, lspDiagnosticsTool, notebookReadTool, notebookEditTool, notebookRunTool, thinkTool, webFetchTool, askUserTool, memoryReadTool, memoryWriteTool, };
|
|
19
23
|
export declare const BUILT_IN_TOOLS: ToolDefinition<any>[];
|
|
20
24
|
export declare function registerBuiltInTools(registry: ToolRegistry): void;
|
|
21
25
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEnF,OAAO,EACL,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EACnD,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EACzE,eAAe,EAAE,kBAAkB,EACnC,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EACnD,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,GACtE,CAAA;AAGD,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,EAM/C,CAAA;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAMjE"}
|