@nexagent-cli/cli 0.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/CHANGELOG.md +66 -0
- package/LICENSE +21 -0
- package/README.md +40 -0
- package/dist/agent/loop.d.ts +45 -0
- package/dist/agent/loop.d.ts.map +1 -0
- package/dist/agent/loop.js +270 -0
- package/dist/agent/loop.js.map +1 -0
- package/dist/agent/prompt.d.ts +3 -0
- package/dist/agent/prompt.d.ts.map +1 -0
- package/dist/agent/prompt.js +43 -0
- package/dist/agent/prompt.js.map +1 -0
- package/dist/commands/agent.d.ts +21 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +111 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/chat.d.ts +18 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +115 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/config.d.ts +10 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +96 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +201 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/memory.d.ts +13 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +97 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/models.d.ts +2 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +5 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/run.d.ts +13 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +74 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/server.d.ts +8 -0
- package/dist/commands/server.d.ts.map +1 -0
- package/dist/commands/server.js +73 -0
- package/dist/commands/server.js.map +1 -0
- package/dist/commands/session.d.ts +11 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +77 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/update.d.ts +17 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +320 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config/loader.d.ts +4 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +83 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/wizard.d.ts +4 -0
- package/dist/config/wizard.d.ts.map +1 -0
- package/dist/config/wizard.js +131 -0
- package/dist/config/wizard.js.map +1 -0
- package/dist/db/database.d.ts +4 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/database.js +130 -0
- package/dist/db/database.js.map +1 -0
- package/dist/db/session-store.d.ts +17 -0
- package/dist/db/session-store.d.ts.map +1 -0
- package/dist/db/session-store.js +117 -0
- package/dist/db/session-store.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +207 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/providers/anthropic.d.ts +21 -0
- package/dist/llm/providers/anthropic.d.ts.map +1 -0
- package/dist/llm/providers/anthropic.js +186 -0
- package/dist/llm/providers/anthropic.js.map +1 -0
- package/dist/llm/providers/google.d.ts +13 -0
- package/dist/llm/providers/google.d.ts.map +1 -0
- package/dist/llm/providers/google.js +83 -0
- package/dist/llm/providers/google.js.map +1 -0
- package/dist/llm/providers/ollama.d.ts +12 -0
- package/dist/llm/providers/ollama.d.ts.map +1 -0
- package/dist/llm/providers/ollama.js +110 -0
- package/dist/llm/providers/ollama.js.map +1 -0
- package/dist/llm/providers/openai.d.ts +15 -0
- package/dist/llm/providers/openai.d.ts.map +1 -0
- package/dist/llm/providers/openai.js +180 -0
- package/dist/llm/providers/openai.js.map +1 -0
- package/dist/llm/router.d.ts +20 -0
- package/dist/llm/router.d.ts.map +1 -0
- package/dist/llm/router.js +52 -0
- package/dist/llm/router.js.map +1 -0
- package/dist/memory/manager.d.ts +16 -0
- package/dist/memory/manager.d.ts.map +1 -0
- package/dist/memory/manager.js +114 -0
- package/dist/memory/manager.js.map +1 -0
- package/dist/safety/gate.d.ts +14 -0
- package/dist/safety/gate.d.ts.map +1 -0
- package/dist/safety/gate.js +102 -0
- package/dist/safety/gate.js.map +1 -0
- package/dist/subagents/orchestrator.d.ts +20 -0
- package/dist/subagents/orchestrator.d.ts.map +1 -0
- package/dist/subagents/orchestrator.js +151 -0
- package/dist/subagents/orchestrator.js.map +1 -0
- package/dist/tools/file-delete.d.ts +15 -0
- package/dist/tools/file-delete.d.ts.map +1 -0
- package/dist/tools/file-delete.js +94 -0
- package/dist/tools/file-delete.js.map +1 -0
- package/dist/tools/file-edit.d.ts +19 -0
- package/dist/tools/file-edit.d.ts.map +1 -0
- package/dist/tools/file-edit.js +182 -0
- package/dist/tools/file-edit.js.map +1 -0
- package/dist/tools/file-list.d.ts +13 -0
- package/dist/tools/file-list.d.ts.map +1 -0
- package/dist/tools/file-list.js +92 -0
- package/dist/tools/file-list.js.map +1 -0
- package/dist/tools/file-read.d.ts +13 -0
- package/dist/tools/file-read.d.ts.map +1 -0
- package/dist/tools/file-read.js +68 -0
- package/dist/tools/file-read.js.map +1 -0
- package/dist/tools/file-search.d.ts +14 -0
- package/dist/tools/file-search.d.ts.map +1 -0
- package/dist/tools/file-search.js +133 -0
- package/dist/tools/file-search.js.map +1 -0
- package/dist/tools/file-write.d.ts +14 -0
- package/dist/tools/file-write.d.ts.map +1 -0
- package/dist/tools/file-write.js +80 -0
- package/dist/tools/file-write.js.map +1 -0
- package/dist/tools/memory-read.d.ts +22 -0
- package/dist/tools/memory-read.d.ts.map +1 -0
- package/dist/tools/memory-read.js +114 -0
- package/dist/tools/memory-read.js.map +1 -0
- package/dist/tools/memory-write.d.ts +2 -0
- package/dist/tools/memory-write.d.ts.map +1 -0
- package/dist/tools/memory-write.js +5 -0
- package/dist/tools/memory-write.js.map +1 -0
- package/dist/tools/registry.d.ts +12 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +66 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/shell-exec.d.ts +14 -0
- package/dist/tools/shell-exec.d.ts.map +1 -0
- package/dist/tools/shell-exec.js +112 -0
- package/dist/tools/shell-exec.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +12 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +91 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +12 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +88 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/ui/ChatApp.d.ts +22 -0
- package/dist/ui/ChatApp.d.ts.map +1 -0
- package/dist/ui/ChatApp.js +94 -0
- package/dist/ui/ChatApp.js.map +1 -0
- package/dist/ui/ConfirmDialog.d.ts +20 -0
- package/dist/ui/ConfirmDialog.d.ts.map +1 -0
- package/dist/ui/ConfirmDialog.js +23 -0
- package/dist/ui/ConfirmDialog.js.map +1 -0
- package/dist/ui/InputBar.d.ts +15 -0
- package/dist/ui/InputBar.d.ts.map +1 -0
- package/dist/ui/InputBar.js +49 -0
- package/dist/ui/InputBar.js.map +1 -0
- package/dist/ui/MessageList.d.ts +21 -0
- package/dist/ui/MessageList.d.ts.map +1 -0
- package/dist/ui/MessageList.js +29 -0
- package/dist/ui/MessageList.js.map +1 -0
- package/dist/ui/Spinner.d.ts +8 -0
- package/dist/ui/Spinner.d.ts.map +1 -0
- package/dist/ui/Spinner.js +16 -0
- package/dist/ui/Spinner.js.map +1 -0
- package/dist/ui/StatusBar.d.ts +32 -0
- package/dist/ui/StatusBar.d.ts.map +1 -0
- package/dist/ui/StatusBar.js +42 -0
- package/dist/ui/StatusBar.js.map +1 -0
- package/dist/ui/ToolPanel.d.ts +2 -0
- package/dist/ui/ToolPanel.d.ts.map +1 -0
- package/dist/ui/ToolPanel.js +5 -0
- package/dist/ui/ToolPanel.js.map +1 -0
- package/dist/utils/changelog.d.ts +19 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +111 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/env.d.ts +9 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +37 -0
- package/dist/utils/env.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Database — SQLite with WAL mode via better-sqlite3
|
|
3
|
+
// Single connection shared across all stores
|
|
4
|
+
// ============================================================
|
|
5
|
+
import Database from 'better-sqlite3';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { mkdir } from 'node:fs/promises';
|
|
8
|
+
let _db = null;
|
|
9
|
+
export async function openDatabase(dataDir) {
|
|
10
|
+
if (_db)
|
|
11
|
+
return _db;
|
|
12
|
+
await mkdir(dataDir, { recursive: true });
|
|
13
|
+
const dbPath = join(dataDir, 'nexagent.db');
|
|
14
|
+
_db = new Database(dbPath);
|
|
15
|
+
// Performance + durability settings
|
|
16
|
+
_db.pragma('journal_mode = WAL');
|
|
17
|
+
_db.pragma('synchronous = NORMAL');
|
|
18
|
+
_db.pragma('cache_size = -32000'); // 32MB
|
|
19
|
+
_db.pragma('foreign_keys = ON');
|
|
20
|
+
_db.pragma('temp_store = MEMORY');
|
|
21
|
+
runMigrations(_db);
|
|
22
|
+
return _db;
|
|
23
|
+
}
|
|
24
|
+
export function getDatabase() {
|
|
25
|
+
if (!_db)
|
|
26
|
+
throw new Error('Database not initialised — call openDatabase() first');
|
|
27
|
+
return _db;
|
|
28
|
+
}
|
|
29
|
+
// ── Schema migrations ────────────────────────────────────────
|
|
30
|
+
function runMigrations(db) {
|
|
31
|
+
db.exec(`
|
|
32
|
+
CREATE TABLE IF NOT EXISTS schema_versions (
|
|
33
|
+
version INTEGER PRIMARY KEY,
|
|
34
|
+
applied_at INTEGER NOT NULL
|
|
35
|
+
);
|
|
36
|
+
`);
|
|
37
|
+
const applied = db.prepare('SELECT version FROM schema_versions').all()
|
|
38
|
+
.map(r => r.version);
|
|
39
|
+
const migrations = [
|
|
40
|
+
{ version: 1, sql: MIGRATION_1 },
|
|
41
|
+
{ version: 2, sql: MIGRATION_2 },
|
|
42
|
+
];
|
|
43
|
+
const insert = db.prepare('INSERT INTO schema_versions VALUES (?, ?)');
|
|
44
|
+
for (const { version, sql } of migrations) {
|
|
45
|
+
if (!applied.includes(version)) {
|
|
46
|
+
db.exec(sql);
|
|
47
|
+
insert.run(version, Date.now());
|
|
48
|
+
console.error(`[db] Applied migration v${version}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// ── Migration 1: Core schema ─────────────────────────────────
|
|
53
|
+
const MIGRATION_1 = `
|
|
54
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
55
|
+
id TEXT PRIMARY KEY,
|
|
56
|
+
agent_name TEXT NOT NULL,
|
|
57
|
+
model TEXT NOT NULL,
|
|
58
|
+
cwd TEXT NOT NULL,
|
|
59
|
+
started_at INTEGER NOT NULL,
|
|
60
|
+
ended_at INTEGER,
|
|
61
|
+
turn_count INTEGER NOT NULL DEFAULT 0,
|
|
62
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
63
|
+
total_cost_usd REAL NOT NULL DEFAULT 0,
|
|
64
|
+
tokens_in INTEGER NOT NULL DEFAULT 0,
|
|
65
|
+
tokens_out INTEGER NOT NULL DEFAULT 0
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
CREATE TABLE IF NOT EXISTS turns (
|
|
69
|
+
id TEXT PRIMARY KEY,
|
|
70
|
+
session_id TEXT NOT NULL REFERENCES sessions(id),
|
|
71
|
+
role TEXT NOT NULL,
|
|
72
|
+
content TEXT NOT NULL,
|
|
73
|
+
tool_calls TEXT,
|
|
74
|
+
tool_results TEXT,
|
|
75
|
+
model TEXT,
|
|
76
|
+
tokens_in INTEGER,
|
|
77
|
+
tokens_out INTEGER,
|
|
78
|
+
cost_usd REAL,
|
|
79
|
+
created_at INTEGER NOT NULL
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
CREATE TABLE IF NOT EXISTS memory_blocks (
|
|
83
|
+
id TEXT PRIMARY KEY,
|
|
84
|
+
agent_name TEXT NOT NULL,
|
|
85
|
+
block_type TEXT NOT NULL,
|
|
86
|
+
content TEXT NOT NULL,
|
|
87
|
+
version INTEGER NOT NULL DEFAULT 1,
|
|
88
|
+
token_estimate INTEGER NOT NULL DEFAULT 0,
|
|
89
|
+
updated_at INTEGER NOT NULL,
|
|
90
|
+
pinned INTEGER NOT NULL DEFAULT 0,
|
|
91
|
+
archived INTEGER NOT NULL DEFAULT 0,
|
|
92
|
+
tags TEXT NOT NULL DEFAULT '[]'
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
CREATE TABLE IF NOT EXISTS undo_stack (
|
|
96
|
+
id TEXT PRIMARY KEY,
|
|
97
|
+
session_id TEXT NOT NULL REFERENCES sessions(id),
|
|
98
|
+
tool_name TEXT NOT NULL,
|
|
99
|
+
operation TEXT NOT NULL,
|
|
100
|
+
file_path TEXT,
|
|
101
|
+
original_content TEXT,
|
|
102
|
+
created_at INTEGER NOT NULL
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
CREATE INDEX IF NOT EXISTS idx_turns_session_id ON turns(session_id);
|
|
106
|
+
CREATE INDEX IF NOT EXISTS idx_turns_created_at ON turns(created_at);
|
|
107
|
+
CREATE INDEX IF NOT EXISTS idx_memory_agent_name ON memory_blocks(agent_name);
|
|
108
|
+
CREATE INDEX IF NOT EXISTS idx_memory_block_type ON memory_blocks(block_type);
|
|
109
|
+
CREATE INDEX IF NOT EXISTS idx_undo_session_id ON undo_stack(session_id);
|
|
110
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_agent_name ON sessions(agent_name);
|
|
111
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_started_at ON sessions(started_at);
|
|
112
|
+
`;
|
|
113
|
+
// ── Migration 2: Memory proposals ────────────────────────────
|
|
114
|
+
const MIGRATION_2 = `
|
|
115
|
+
CREATE TABLE IF NOT EXISTS memory_proposals (
|
|
116
|
+
id TEXT PRIMARY KEY,
|
|
117
|
+
session_id TEXT NOT NULL REFERENCES sessions(id),
|
|
118
|
+
block_id TEXT,
|
|
119
|
+
block_type TEXT NOT NULL,
|
|
120
|
+
proposed_content TEXT NOT NULL,
|
|
121
|
+
rationale TEXT NOT NULL,
|
|
122
|
+
proposed_by TEXT NOT NULL,
|
|
123
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
124
|
+
created_at INTEGER NOT NULL
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
CREATE INDEX IF NOT EXISTS idx_proposals_session_id ON memory_proposals(session_id);
|
|
128
|
+
CREATE INDEX IF NOT EXISTS idx_proposals_status ON memory_proposals(status);
|
|
129
|
+
`;
|
|
130
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../../src/db/database.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,qDAAqD;AACrD,6CAA6C;AAC7C,+DAA+D;AAE/D,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAO,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,IAAI,GAAG,GAA6B,IAAI,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe;IAChD,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IAEpB,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAE5C,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE3B,oCAAoC;IACpC,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACjC,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACpC,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO;IAC5C,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAChC,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAEpC,aAAa,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAClF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gEAAgE;AAEhE,SAAS,aAAa,CAAC,EAAqB;IAC1C,EAAE,CAAC,IAAI,CAAC;;;;;GAKP,CAAC,CAAC;IAEH,MAAM,OAAO,GAAI,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAA4B;SAC/F,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEvB,MAAM,UAAU,GAA4C;QAC1D,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;KACjC,CAAC;IAEF,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;IAEvE,KAAK,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;AACH,CAAC;AAED,gEAAgE;AAEhE,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DnB,CAAC;AAEF,gEAAgE;AAEhE,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;CAenB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
import type { Session, AgentTurn, SessionSummary } from '@nexagent-cli/shared';
|
|
3
|
+
export declare class SessionStore {
|
|
4
|
+
private db;
|
|
5
|
+
constructor(db: Database.Database);
|
|
6
|
+
/** Expose raw DB for tools that need direct SQL access */
|
|
7
|
+
get database(): Database.Database;
|
|
8
|
+
createSession(agentName: string, model: string, cwd: string): Session;
|
|
9
|
+
endSession(sessionId: string, status: Session['status']): void;
|
|
10
|
+
updateSessionStats(sessionId: string, costUsd: number, tokensIn: number, tokensOut: number): void;
|
|
11
|
+
saveTurn(turn: AgentTurn): void;
|
|
12
|
+
getTurns(sessionId: string, limit?: number): AgentTurn[];
|
|
13
|
+
listSessions(agentName: string, limit?: number): SessionSummary[];
|
|
14
|
+
getSession(sessionId: string): Session | null;
|
|
15
|
+
deleteSession(sessionId: string): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=session-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../../src/db/session-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG/E,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC,0DAA0D;IAC1D,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAEhC;IAED,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAsBrE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IAM9D,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAWjG,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAmB/B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,SAAS,EAAE;IA0BrD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,cAAc,EAAE;IA6B7D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAuB7C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAIvC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// SessionStore — CRUD for sessions and turns
|
|
3
|
+
// ============================================================
|
|
4
|
+
import { generateId } from '@nexagent-cli/shared';
|
|
5
|
+
export class SessionStore {
|
|
6
|
+
db;
|
|
7
|
+
constructor(db) {
|
|
8
|
+
this.db = db;
|
|
9
|
+
}
|
|
10
|
+
/** Expose raw DB for tools that need direct SQL access */
|
|
11
|
+
get database() {
|
|
12
|
+
return this.db;
|
|
13
|
+
}
|
|
14
|
+
createSession(agentName, model, cwd) {
|
|
15
|
+
const session = {
|
|
16
|
+
id: generateId(),
|
|
17
|
+
agentName,
|
|
18
|
+
model,
|
|
19
|
+
cwd,
|
|
20
|
+
startedAt: Date.now(),
|
|
21
|
+
turnCount: 0,
|
|
22
|
+
status: 'active',
|
|
23
|
+
totalCostUsd: 0,
|
|
24
|
+
totalTokensIn: 0,
|
|
25
|
+
totalTokensOut: 0,
|
|
26
|
+
};
|
|
27
|
+
this.db.prepare(`
|
|
28
|
+
INSERT INTO sessions (id, agent_name, model, cwd, started_at, status, total_cost_usd, tokens_in, tokens_out, turn_count)
|
|
29
|
+
VALUES (?, ?, ?, ?, ?, 'active', 0, 0, 0, 0)
|
|
30
|
+
`).run(session.id, agentName, model, cwd, session.startedAt);
|
|
31
|
+
return session;
|
|
32
|
+
}
|
|
33
|
+
endSession(sessionId, status) {
|
|
34
|
+
this.db.prepare(`
|
|
35
|
+
UPDATE sessions SET status = ?, ended_at = ? WHERE id = ?
|
|
36
|
+
`).run(status, Date.now(), sessionId);
|
|
37
|
+
}
|
|
38
|
+
updateSessionStats(sessionId, costUsd, tokensIn, tokensOut) {
|
|
39
|
+
this.db.prepare(`
|
|
40
|
+
UPDATE sessions
|
|
41
|
+
SET total_cost_usd = total_cost_usd + ?,
|
|
42
|
+
tokens_in = tokens_in + ?,
|
|
43
|
+
tokens_out = tokens_out + ?,
|
|
44
|
+
turn_count = turn_count + 1
|
|
45
|
+
WHERE id = ?
|
|
46
|
+
`).run(costUsd, tokensIn, tokensOut, sessionId);
|
|
47
|
+
}
|
|
48
|
+
saveTurn(turn) {
|
|
49
|
+
this.db.prepare(`
|
|
50
|
+
INSERT INTO turns (id, session_id, role, content, tool_calls, tool_results, model, tokens_in, tokens_out, cost_usd, created_at)
|
|
51
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
52
|
+
`).run(turn.id, turn.sessionId, turn.role, turn.content, turn.toolCalls ? JSON.stringify(turn.toolCalls) : null, turn.toolResults ? JSON.stringify(turn.toolResults) : null, turn.model ?? null, turn.tokensIn ?? null, turn.tokensOut ?? null, turn.costUsd ?? null, turn.createdAt);
|
|
53
|
+
}
|
|
54
|
+
getTurns(sessionId, limit = 200) {
|
|
55
|
+
const rows = this.db.prepare(`
|
|
56
|
+
SELECT * FROM turns WHERE session_id = ? ORDER BY created_at ASC LIMIT ?
|
|
57
|
+
`).all(sessionId, limit);
|
|
58
|
+
return rows.map(r => ({
|
|
59
|
+
id: r.id,
|
|
60
|
+
sessionId: r.session_id,
|
|
61
|
+
role: r.role,
|
|
62
|
+
content: r.content,
|
|
63
|
+
toolCalls: r.tool_calls ? JSON.parse(r.tool_calls) : undefined,
|
|
64
|
+
toolResults: r.tool_results ? JSON.parse(r.tool_results) : undefined,
|
|
65
|
+
model: r.model ?? undefined,
|
|
66
|
+
tokensIn: r.tokens_in ?? undefined,
|
|
67
|
+
tokensOut: r.tokens_out ?? undefined,
|
|
68
|
+
costUsd: r.cost_usd ?? undefined,
|
|
69
|
+
createdAt: r.created_at,
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
listSessions(agentName, limit = 20) {
|
|
73
|
+
const rows = this.db.prepare(`
|
|
74
|
+
SELECT s.*
|
|
75
|
+
FROM sessions s
|
|
76
|
+
WHERE s.agent_name = ?
|
|
77
|
+
ORDER BY s.started_at DESC
|
|
78
|
+
LIMIT ?
|
|
79
|
+
`).all(agentName, limit);
|
|
80
|
+
return rows.map(r => ({
|
|
81
|
+
id: r.id,
|
|
82
|
+
agentName: r.agent_name,
|
|
83
|
+
model: r.model,
|
|
84
|
+
cwd: r.cwd,
|
|
85
|
+
startedAt: r.started_at,
|
|
86
|
+
endedAt: r.ended_at ?? undefined,
|
|
87
|
+
turnCount: r.turn_count,
|
|
88
|
+
status: r.status,
|
|
89
|
+
totalCostUsd: r.total_cost_usd,
|
|
90
|
+
totalTokensIn: r.tokens_in,
|
|
91
|
+
totalTokensOut: r.tokens_out,
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
getSession(sessionId) {
|
|
95
|
+
const row = this.db.prepare('SELECT * FROM sessions WHERE id = ?').get(sessionId);
|
|
96
|
+
if (!row)
|
|
97
|
+
return null;
|
|
98
|
+
return {
|
|
99
|
+
id: row.id,
|
|
100
|
+
agentName: row.agent_name,
|
|
101
|
+
model: row.model,
|
|
102
|
+
cwd: row.cwd,
|
|
103
|
+
startedAt: row.started_at,
|
|
104
|
+
endedAt: row.ended_at ?? undefined,
|
|
105
|
+
turnCount: row.turn_count,
|
|
106
|
+
status: row.status,
|
|
107
|
+
totalCostUsd: row.total_cost_usd,
|
|
108
|
+
totalTokensIn: row.tokens_in,
|
|
109
|
+
totalTokensOut: row.tokens_out,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
deleteSession(sessionId) {
|
|
113
|
+
this.db.prepare('DELETE FROM turns WHERE session_id = ?').run(sessionId);
|
|
114
|
+
this.db.prepare('DELETE FROM sessions WHERE id = ?').run(sessionId);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=session-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../../../src/db/session-store.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// ============================================================
|
|
3
|
+
// NexAgent CLI — Entry Point
|
|
4
|
+
// Commander.js command tree + startup checks
|
|
5
|
+
// ============================================================
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { NEXAGENT_VERSION } from '@nexagent-cli/shared';
|
|
8
|
+
import { checkNodeVersion } from './utils/env.js';
|
|
9
|
+
import { runChat } from './commands/chat.js';
|
|
10
|
+
import { runRun } from './commands/run.js';
|
|
11
|
+
import { runMemory } from './commands/memory.js';
|
|
12
|
+
import { runSession } from './commands/session.js';
|
|
13
|
+
import { runConfig } from './commands/config.js';
|
|
14
|
+
import { runAgent } from './commands/agent.js';
|
|
15
|
+
import { runModels } from './commands/models.js';
|
|
16
|
+
import { runUpdate, runChangelog } from './commands/update.js';
|
|
17
|
+
import { runDoctor } from './commands/doctor.js';
|
|
18
|
+
import { runServer } from './commands/server.js';
|
|
19
|
+
// ── Pre-flight checks ────────────────────────────────────────
|
|
20
|
+
checkNodeVersion();
|
|
21
|
+
// ── Root program ─────────────────────────────────────────────
|
|
22
|
+
const program = new Command();
|
|
23
|
+
program
|
|
24
|
+
.name('nexagent')
|
|
25
|
+
.description('Locally-runnable AI agent with file editing, tool execution, and beautiful TUI')
|
|
26
|
+
.version(NEXAGENT_VERSION, '-v, --version', 'Output current version')
|
|
27
|
+
.helpOption('-h, --help', 'Show help')
|
|
28
|
+
.addHelpCommand('help [command]', 'Show help for a command')
|
|
29
|
+
// Global flags
|
|
30
|
+
.option('--no-color', 'Disable colour output')
|
|
31
|
+
.option('--json', 'Output machine-readable JSON (pipe mode)')
|
|
32
|
+
.option('--debug', 'Enable verbose debug logging')
|
|
33
|
+
.option('--data-dir <path>', 'Override agent data directory (default: ~/.nexagent)');
|
|
34
|
+
// ── nexagent chat ─────────────────────────────────────────────
|
|
35
|
+
program
|
|
36
|
+
.command('chat')
|
|
37
|
+
.alias('c')
|
|
38
|
+
.description('Start an interactive chat session with the agent')
|
|
39
|
+
.option('-a, --agent <name>', 'Agent name to use (default: "default")', 'default')
|
|
40
|
+
.option('-m, --model <model>', 'LLM model override (e.g. gpt-4o)')
|
|
41
|
+
.option('-p, --provider <provider>', 'LLM provider override (openai|anthropic|google|ollama)')
|
|
42
|
+
.option('--no-memory', 'Disable memory for this session')
|
|
43
|
+
.option('--no-subagents', 'Disable subagents for this session')
|
|
44
|
+
.option('--safety <level>', 'Safety level: strict|standard|permissive', 'standard')
|
|
45
|
+
.option('--max-turns <n>', 'Maximum turns before auto-exit', '100')
|
|
46
|
+
.option('--cwd <dir>', 'Working directory for file tools (default: cwd)')
|
|
47
|
+
.option('--resume <sessionId>', 'Resume a previous session by ID')
|
|
48
|
+
.action(async (opts, cmd) => {
|
|
49
|
+
const globals = cmd.parent?.opts() ?? {};
|
|
50
|
+
await runChat({ ...opts, ...globals });
|
|
51
|
+
});
|
|
52
|
+
// ── nexagent run ──────────────────────────────────────────────
|
|
53
|
+
program
|
|
54
|
+
.command('run <prompt>')
|
|
55
|
+
.alias('r')
|
|
56
|
+
.description('Run a single prompt non-interactively and exit')
|
|
57
|
+
.option('-a, --agent <name>', 'Agent name', 'default')
|
|
58
|
+
.option('-m, --model <model>', 'LLM model override')
|
|
59
|
+
.option('--max-turns <n>', 'Max agent turns', '10')
|
|
60
|
+
.option('--cwd <dir>', 'Working directory for file tools')
|
|
61
|
+
.option('--dry-run', 'Show what tools WOULD do — no side effects')
|
|
62
|
+
.option('--json', 'Output result as JSON')
|
|
63
|
+
.action(async (prompt, opts, cmd) => {
|
|
64
|
+
const globals = cmd.parent?.opts() ?? {};
|
|
65
|
+
await runRun(prompt, { ...opts, ...globals });
|
|
66
|
+
});
|
|
67
|
+
// ── nexagent memory ───────────────────────────────────────────
|
|
68
|
+
const memCmd = program.command('memory').alias('mem').description('Manage agent memory blocks');
|
|
69
|
+
memCmd
|
|
70
|
+
.command('list')
|
|
71
|
+
.description('List all memory blocks for an agent')
|
|
72
|
+
.option('-a, --agent <name>', 'Agent name', 'default')
|
|
73
|
+
.option('--json', 'Output as JSON')
|
|
74
|
+
.action(async (opts) => runMemory('list', opts));
|
|
75
|
+
memCmd
|
|
76
|
+
.command('show <blockId>')
|
|
77
|
+
.description('Show a specific memory block')
|
|
78
|
+
.option('-a, --agent <name>', 'Agent name', 'default')
|
|
79
|
+
.action(async (blockId, opts) => runMemory('show', { ...opts, blockId }));
|
|
80
|
+
memCmd
|
|
81
|
+
.command('edit <blockId>')
|
|
82
|
+
.description('Open a memory block in $EDITOR')
|
|
83
|
+
.option('-a, --agent <name>', 'Agent name', 'default')
|
|
84
|
+
.action(async (blockId, opts) => runMemory('edit', { ...opts, blockId }));
|
|
85
|
+
memCmd
|
|
86
|
+
.command('delete <blockId>')
|
|
87
|
+
.description('Delete a memory block (requires confirmation)')
|
|
88
|
+
.option('-a, --agent <name>', 'Agent name', 'default')
|
|
89
|
+
.option('-f, --force', 'Skip confirmation prompt')
|
|
90
|
+
.action(async (blockId, opts) => runMemory('delete', { ...opts, blockId }));
|
|
91
|
+
memCmd
|
|
92
|
+
.command('export')
|
|
93
|
+
.description('Export all memory blocks to a .nxpkg file')
|
|
94
|
+
.option('-a, --agent <name>', 'Agent name', 'default')
|
|
95
|
+
.option('-o, --out <file>', 'Output file path')
|
|
96
|
+
.action(async (opts) => runMemory('export', opts));
|
|
97
|
+
memCmd
|
|
98
|
+
.command('import <file>')
|
|
99
|
+
.description('Import memory blocks from a .nxpkg file')
|
|
100
|
+
.option('-a, --agent <name>', 'Agent name', 'default')
|
|
101
|
+
.option('--merge', 'Merge with existing memory (default: replace)')
|
|
102
|
+
.action(async (file, opts) => runMemory('import', { ...opts, file }));
|
|
103
|
+
// ── nexagent session ──────────────────────────────────────────
|
|
104
|
+
const sessCmd = program.command('session').alias('sess').description('Manage chat sessions');
|
|
105
|
+
sessCmd
|
|
106
|
+
.command('list')
|
|
107
|
+
.description('List recent sessions')
|
|
108
|
+
.option('-a, --agent <name>', 'Filter by agent', 'default')
|
|
109
|
+
.option('-n, --limit <n>', 'Number of sessions to show', '20')
|
|
110
|
+
.option('--json', 'Output as JSON')
|
|
111
|
+
.action(async (opts) => runSession('list', opts));
|
|
112
|
+
sessCmd
|
|
113
|
+
.command('show <sessionId>')
|
|
114
|
+
.description('Show full conversation transcript for a session')
|
|
115
|
+
.option('--json', 'Output as JSON')
|
|
116
|
+
.action(async (sessionId, opts) => runSession('show', { ...opts, sessionId }));
|
|
117
|
+
sessCmd
|
|
118
|
+
.command('delete <sessionId>')
|
|
119
|
+
.description('Delete a session and its turns')
|
|
120
|
+
.option('-f, --force', 'Skip confirmation')
|
|
121
|
+
.action(async (sessionId, opts) => runSession('delete', { ...opts, sessionId }));
|
|
122
|
+
// ── nexagent agent ────────────────────────────────────────────
|
|
123
|
+
const agentCmd = program.command('agent').description('Manage agents');
|
|
124
|
+
agentCmd
|
|
125
|
+
.command('list')
|
|
126
|
+
.description('List all configured agents')
|
|
127
|
+
.option('--json', 'Output as JSON')
|
|
128
|
+
.action(async (opts) => runAgent('list', opts));
|
|
129
|
+
agentCmd
|
|
130
|
+
.command('create <name>')
|
|
131
|
+
.description('Create a new agent profile')
|
|
132
|
+
.option('-m, --model <model>', 'Default model')
|
|
133
|
+
.option('-p, --provider <provider>', 'Default provider')
|
|
134
|
+
.action(async (name, opts) => runAgent('create', { ...opts, name }));
|
|
135
|
+
agentCmd
|
|
136
|
+
.command('delete <name>')
|
|
137
|
+
.description('Delete an agent profile')
|
|
138
|
+
.option('-f, --force', 'Skip confirmation')
|
|
139
|
+
.action(async (name, opts) => runAgent('delete', { ...opts, name }));
|
|
140
|
+
// ── nexagent config ───────────────────────────────────────────
|
|
141
|
+
const cfgCmd = program.command('config').description('Manage NexAgent configuration');
|
|
142
|
+
cfgCmd
|
|
143
|
+
.command('show')
|
|
144
|
+
.description('Show current resolved configuration')
|
|
145
|
+
.option('--json', 'Output as JSON')
|
|
146
|
+
.action(async (opts) => runConfig('show', opts));
|
|
147
|
+
cfgCmd
|
|
148
|
+
.command('set <key> <value>')
|
|
149
|
+
.description('Set a config value (e.g. config set defaults.model gpt-4o)')
|
|
150
|
+
.action(async (key, value) => runConfig('set', { key, value }));
|
|
151
|
+
cfgCmd
|
|
152
|
+
.command('api-key <provider>')
|
|
153
|
+
.description('Set API key for a provider (stored in OS keychain)')
|
|
154
|
+
.action(async (provider) => runConfig('api-key', { provider }));
|
|
155
|
+
// ── nexagent models ───────────────────────────────────────────
|
|
156
|
+
program
|
|
157
|
+
.command('models')
|
|
158
|
+
.description('List available models for all configured providers')
|
|
159
|
+
.option('-p, --provider <name>', 'Filter by provider')
|
|
160
|
+
.option('--json', 'Output as JSON')
|
|
161
|
+
.action(async (opts) => runModels(opts));
|
|
162
|
+
// ── nexagent update ───────────────────────────────────────────
|
|
163
|
+
program
|
|
164
|
+
.command('update')
|
|
165
|
+
.description('Update NexAgent to the latest version')
|
|
166
|
+
.option('--check', 'Check for updates without installing')
|
|
167
|
+
.option('--changelog', 'Show changelog before confirming')
|
|
168
|
+
.option('--version <v>', 'Install a specific version')
|
|
169
|
+
.option('--preview', 'Preview what would change (dry-run)')
|
|
170
|
+
.option('--yes', 'Skip confirmation prompts')
|
|
171
|
+
.action(async (opts) => runUpdate(opts));
|
|
172
|
+
// ── nexagent changelog ────────────────────────────────────────
|
|
173
|
+
program
|
|
174
|
+
.command('changelog [version]')
|
|
175
|
+
.description('Show release notes for a version (default: latest)')
|
|
176
|
+
.option('--all', 'Show full changelog history')
|
|
177
|
+
.option('--json', 'Output as JSON')
|
|
178
|
+
.action(async (version, opts) => runChangelog(version, opts));
|
|
179
|
+
// ── nexagent doctor ───────────────────────────────────────────
|
|
180
|
+
program
|
|
181
|
+
.command('doctor')
|
|
182
|
+
.description('Diagnose NexAgent installation and runtime health')
|
|
183
|
+
.option('--fix', 'Attempt to auto-fix issues')
|
|
184
|
+
.option('--json', 'Output as JSON')
|
|
185
|
+
.action(async (opts, cmd) => {
|
|
186
|
+
const globals = cmd.parent?.opts() ?? {};
|
|
187
|
+
await runDoctor({ ...opts, ...globals });
|
|
188
|
+
});
|
|
189
|
+
// ?? nexagent server ??
|
|
190
|
+
program
|
|
191
|
+
.command('server')
|
|
192
|
+
.alias('srv')
|
|
193
|
+
.description('Start HTTP/WebSocket bridge for remote access')
|
|
194
|
+
.option('-p, --port <n>', 'Server port', '7373')
|
|
195
|
+
.option('-h, --host <addr>', 'Bind address', '127.0.0.1')
|
|
196
|
+
.option('--data-dir <path>', 'Override agent data directory')
|
|
197
|
+
.action(async (opts, cmd) => {
|
|
198
|
+
const globals = cmd.parent?.opts() ?? {};
|
|
199
|
+
await runServer({ ...opts, ...globals });
|
|
200
|
+
});
|
|
201
|
+
// ── Parse ─────────────────────────────────────────────────────
|
|
202
|
+
program.parseAsync(process.argv).catch((err) => {
|
|
203
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
204
|
+
console.error(`\n Fatal error: ${msg}\n`);
|
|
205
|
+
process.exit(1);
|
|
206
|
+
});
|
|
207
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { LLMProvider, LLMRequestOptions, LLMResponse, LLMStreamChunk, LLMCapabilities } from '@nexagent-cli/shared';
|
|
2
|
+
export declare class AnthropicProvider implements LLMProvider {
|
|
3
|
+
readonly name = "anthropic";
|
|
4
|
+
private client;
|
|
5
|
+
constructor(apiKey?: string);
|
|
6
|
+
complete(opts: LLMRequestOptions): Promise<LLMResponse>;
|
|
7
|
+
stream(opts: LLMRequestOptions): AsyncGenerator<LLMStreamChunk>;
|
|
8
|
+
countTokens(text: string, _model: string): number;
|
|
9
|
+
getCapabilities(model: string): LLMCapabilities;
|
|
10
|
+
listModels(): Promise<string[]>;
|
|
11
|
+
private splitSystemMessage;
|
|
12
|
+
/**
|
|
13
|
+
* Convert generic LLMMessage[] to Anthropic-native MessageParam[].
|
|
14
|
+
* - assistant with toolCalls → content blocks [text, tool_use...]
|
|
15
|
+
* - role=tool → user message with tool_result content block
|
|
16
|
+
* - merge consecutive user messages (Anthropic constraint)
|
|
17
|
+
*/
|
|
18
|
+
private toAnthropicMessages;
|
|
19
|
+
private estimateCost;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../../../src/llm/providers/anthropic.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,eAAe,EAGhB,MAAM,sBAAsB,CAAC;AAkB9B,qBAAa,iBAAkB,YAAW,WAAW;IACnD,QAAQ,CAAC,IAAI,eAAe;IAC5B,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,CAAC,EAAE,MAAM;IAIrB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAwCtD,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,CAAC,cAAc,CAAC;IA+CtE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAIjD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe;IAUzC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIrC,OAAO,CAAC,kBAAkB;IAS1B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAoD3B,OAAO,CAAC,YAAY;CAIrB"}
|