@zds-ai/cli 0.1.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 +497 -0
- package/dist/agent/grok-agent.d.ts +250 -0
- package/dist/agent/grok-agent.js +2480 -0
- package/dist/agent/grok-agent.js.map +1 -0
- package/dist/agent/index.d.ts +14 -0
- package/dist/agent/index.js +136 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/commands/mcp.d.ts +2 -0
- package/dist/commands/mcp.js +239 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/grok/client.d.ts +55 -0
- package/dist/grok/client.js +276 -0
- package/dist/grok/client.js.map +1 -0
- package/dist/grok/tools.d.ts +8 -0
- package/dist/grok/tools.js +878 -0
- package/dist/grok/tools.js.map +1 -0
- package/dist/hooks/use-enhanced-input.d.ts +38 -0
- package/dist/hooks/use-enhanced-input.js +228 -0
- package/dist/hooks/use-enhanced-input.js.map +1 -0
- package/dist/hooks/use-input-handler.d.ts +36 -0
- package/dist/hooks/use-input-handler.js +1099 -0
- package/dist/hooks/use-input-handler.js.map +1 -0
- package/dist/hooks/use-input-history.d.ts +9 -0
- package/dist/hooks/use-input-history.js +61 -0
- package/dist/hooks/use-input-history.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +869 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +41 -0
- package/dist/mcp/client.js +224 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config.d.ts +13 -0
- package/dist/mcp/config.js +56 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/transports.d.ts +53 -0
- package/dist/mcp/transports.js +256 -0
- package/dist/mcp/transports.js.map +1 -0
- package/dist/tools/character-tool.d.ts +27 -0
- package/dist/tools/character-tool.js +194 -0
- package/dist/tools/character-tool.js.map +1 -0
- package/dist/tools/clear-cache-tool.d.ts +14 -0
- package/dist/tools/clear-cache-tool.js +82 -0
- package/dist/tools/clear-cache-tool.js.map +1 -0
- package/dist/tools/confirmation-tool.d.ts +16 -0
- package/dist/tools/confirmation-tool.js +72 -0
- package/dist/tools/confirmation-tool.js.map +1 -0
- package/dist/tools/env-tool.d.ts +17 -0
- package/dist/tools/env-tool.js +89 -0
- package/dist/tools/env-tool.js.map +1 -0
- package/dist/tools/file-conversion-tool.d.ts +16 -0
- package/dist/tools/file-conversion-tool.js +181 -0
- package/dist/tools/file-conversion-tool.js.map +1 -0
- package/dist/tools/image-tool.d.ts +22 -0
- package/dist/tools/image-tool.js +268 -0
- package/dist/tools/image-tool.js.map +1 -0
- package/dist/tools/index.d.ts +14 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/internet-tool.d.ts +11 -0
- package/dist/tools/internet-tool.js +108 -0
- package/dist/tools/internet-tool.js.map +1 -0
- package/dist/tools/introspect-tool.d.ts +11 -0
- package/dist/tools/introspect-tool.js +243 -0
- package/dist/tools/introspect-tool.js.map +1 -0
- package/dist/tools/morph-editor.d.ts +38 -0
- package/dist/tools/morph-editor.js +318 -0
- package/dist/tools/morph-editor.js.map +1 -0
- package/dist/tools/restart-tool.d.ts +7 -0
- package/dist/tools/restart-tool.js +24 -0
- package/dist/tools/restart-tool.js.map +1 -0
- package/dist/tools/search.d.ts +71 -0
- package/dist/tools/search.js +340 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/task-tool.d.ts +19 -0
- package/dist/tools/task-tool.js +115 -0
- package/dist/tools/task-tool.js.map +1 -0
- package/dist/tools/text-editor.d.ts +35 -0
- package/dist/tools/text-editor.js +669 -0
- package/dist/tools/text-editor.js.map +1 -0
- package/dist/tools/tool-discovery.d.ts +20 -0
- package/dist/tools/tool-discovery.js +45 -0
- package/dist/tools/tool-discovery.js.map +1 -0
- package/dist/tools/zsh.d.ts +13 -0
- package/dist/tools/zsh.js +168 -0
- package/dist/tools/zsh.js.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/app.d.ts +7 -0
- package/dist/ui/app.js +99 -0
- package/dist/ui/app.js.map +1 -0
- package/dist/ui/components/active-task-status.d.ts +7 -0
- package/dist/ui/components/active-task-status.js +37 -0
- package/dist/ui/components/active-task-status.js.map +1 -0
- package/dist/ui/components/api-key-input.d.ts +7 -0
- package/dist/ui/components/api-key-input.js +80 -0
- package/dist/ui/components/api-key-input.js.map +1 -0
- package/dist/ui/components/backend-status.d.ts +7 -0
- package/dist/ui/components/backend-status.js +85 -0
- package/dist/ui/components/backend-status.js.map +1 -0
- package/dist/ui/components/chat-history.d.ts +8 -0
- package/dist/ui/components/chat-history.js +187 -0
- package/dist/ui/components/chat-history.js.map +1 -0
- package/dist/ui/components/chat-input.d.ts +9 -0
- package/dist/ui/components/chat-input.js +63 -0
- package/dist/ui/components/chat-input.js.map +1 -0
- package/dist/ui/components/chat-interface.d.ts +9 -0
- package/dist/ui/components/chat-interface.js +389 -0
- package/dist/ui/components/chat-interface.js.map +1 -0
- package/dist/ui/components/command-suggestions.d.ts +17 -0
- package/dist/ui/components/command-suggestions.js +22 -0
- package/dist/ui/components/command-suggestions.js.map +1 -0
- package/dist/ui/components/confirmation-dialog.d.ts +11 -0
- package/dist/ui/components/confirmation-dialog.js +105 -0
- package/dist/ui/components/confirmation-dialog.js.map +1 -0
- package/dist/ui/components/context-status.d.ts +7 -0
- package/dist/ui/components/context-status.js +36 -0
- package/dist/ui/components/context-status.js.map +1 -0
- package/dist/ui/components/diff-renderer.d.ts +13 -0
- package/dist/ui/components/diff-renderer.js +206 -0
- package/dist/ui/components/diff-renderer.js.map +1 -0
- package/dist/ui/components/loading-spinner.d.ts +8 -0
- package/dist/ui/components/loading-spinner.js +64 -0
- package/dist/ui/components/loading-spinner.js.map +1 -0
- package/dist/ui/components/mcp-status.d.ts +5 -0
- package/dist/ui/components/mcp-status.js +57 -0
- package/dist/ui/components/mcp-status.js.map +1 -0
- package/dist/ui/components/model-selection.d.ts +12 -0
- package/dist/ui/components/model-selection.js +17 -0
- package/dist/ui/components/model-selection.js.map +1 -0
- package/dist/ui/components/mood-status.d.ts +7 -0
- package/dist/ui/components/mood-status.js +34 -0
- package/dist/ui/components/mood-status.js.map +1 -0
- package/dist/ui/components/persona-status.d.ts +7 -0
- package/dist/ui/components/persona-status.js +34 -0
- package/dist/ui/components/persona-status.js.map +1 -0
- package/dist/ui/shared/max-sized-box.d.ts +8 -0
- package/dist/ui/shared/max-sized-box.js +6 -0
- package/dist/ui/shared/max-sized-box.js.map +1 -0
- package/dist/ui/utils/code-colorizer.d.ts +2 -0
- package/dist/ui/utils/code-colorizer.js +7 -0
- package/dist/ui/utils/code-colorizer.js.map +1 -0
- package/dist/ui/utils/colors.d.ts +14 -0
- package/dist/ui/utils/colors.js +15 -0
- package/dist/ui/utils/colors.js.map +1 -0
- package/dist/ui/utils/markdown-renderer.d.ts +4 -0
- package/dist/ui/utils/markdown-renderer.js +40 -0
- package/dist/ui/utils/markdown-renderer.js.map +1 -0
- package/dist/utils/auth-helper.d.ts +63 -0
- package/dist/utils/auth-helper.js +129 -0
- package/dist/utils/auth-helper.js.map +1 -0
- package/dist/utils/chat-history-manager-sqlite.d.ts +92 -0
- package/dist/utils/chat-history-manager-sqlite.js +334 -0
- package/dist/utils/chat-history-manager-sqlite.js.map +1 -0
- package/dist/utils/chat-history-manager.d.ts +87 -0
- package/dist/utils/chat-history-manager.js +273 -0
- package/dist/utils/chat-history-manager.js.map +1 -0
- package/dist/utils/chat-history-manager.json-backup.d.ts +69 -0
- package/dist/utils/chat-history-manager.json-backup.js +215 -0
- package/dist/utils/chat-history-manager.json-backup.js.map +1 -0
- package/dist/utils/confirmation-service.d.ts +46 -0
- package/dist/utils/confirmation-service.js +165 -0
- package/dist/utils/confirmation-service.js.map +1 -0
- package/dist/utils/custom-instructions.d.ts +1 -0
- package/dist/utils/custom-instructions.js +30 -0
- package/dist/utils/custom-instructions.js.map +1 -0
- package/dist/utils/database-connection.d.ts +27 -0
- package/dist/utils/database-connection.js +81 -0
- package/dist/utils/database-connection.js.map +1 -0
- package/dist/utils/database-schema.d.ts +17 -0
- package/dist/utils/database-schema.js +93 -0
- package/dist/utils/database-schema.js.map +1 -0
- package/dist/utils/error-logger.d.ts +13 -0
- package/dist/utils/error-logger.js +56 -0
- package/dist/utils/error-logger.js.map +1 -0
- package/dist/utils/hook-executor.d.ts +59 -0
- package/dist/utils/hook-executor.js +351 -0
- package/dist/utils/hook-executor.js.map +1 -0
- package/dist/utils/model-config.d.ts +28 -0
- package/dist/utils/model-config.js +42 -0
- package/dist/utils/model-config.js.map +1 -0
- package/dist/utils/path-utils.d.ts +4 -0
- package/dist/utils/path-utils.js +12 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/dist/utils/settings-manager.d.ts +169 -0
- package/dist/utils/settings-manager.js +403 -0
- package/dist/utils/settings-manager.js.map +1 -0
- package/dist/utils/settings.d.ts +1 -0
- package/dist/utils/settings.js +4 -0
- package/dist/utils/settings.js.map +1 -0
- package/dist/utils/slash-commands.d.ts +25 -0
- package/dist/utils/slash-commands.js +454 -0
- package/dist/utils/slash-commands.js.map +1 -0
- package/dist/utils/startup-hook.d.ts +13 -0
- package/dist/utils/startup-hook.js +44 -0
- package/dist/utils/startup-hook.js.map +1 -0
- package/dist/utils/text-utils.d.ts +80 -0
- package/dist/utils/text-utils.js +182 -0
- package/dist/utils/text-utils.js.map +1 -0
- package/dist/utils/token-counter.d.ts +33 -0
- package/dist/utils/token-counter.js +78 -0
- package/dist/utils/token-counter.js.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-history-manager-sqlite.js","sourceRoot":"","sources":["../../src/utils/chat-history-manager-sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { ChatEntry } from "../agent/grok-agent.js";
|
|
2
|
+
export interface SessionState {
|
|
3
|
+
session: string;
|
|
4
|
+
persona: string;
|
|
5
|
+
personaColor: string;
|
|
6
|
+
mood: string;
|
|
7
|
+
moodColor: string;
|
|
8
|
+
activeTask: string;
|
|
9
|
+
activeTaskAction: string;
|
|
10
|
+
activeTaskColor: string;
|
|
11
|
+
cwd: string;
|
|
12
|
+
contextCurrent: number;
|
|
13
|
+
contextMax: number;
|
|
14
|
+
backend: string;
|
|
15
|
+
baseUrl: string;
|
|
16
|
+
apiKeyEnvVar: string;
|
|
17
|
+
model: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ContextData {
|
|
20
|
+
systemPrompt: string;
|
|
21
|
+
chatHistory: ChatEntry[];
|
|
22
|
+
sessionState?: SessionState;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Manages chat history persistence to ~/.grok/chat-history.json or custom path
|
|
26
|
+
*/
|
|
27
|
+
export declare class ChatHistoryManager {
|
|
28
|
+
private static instance;
|
|
29
|
+
private static customHistoryFilePath;
|
|
30
|
+
private historyFilePath;
|
|
31
|
+
private constructor();
|
|
32
|
+
/**
|
|
33
|
+
* Set a custom history file path (must be called before getInstance)
|
|
34
|
+
*/
|
|
35
|
+
static setCustomHistoryPath(filePath: string): void;
|
|
36
|
+
static getInstance(): ChatHistoryManager;
|
|
37
|
+
/**
|
|
38
|
+
* Get the context file path (main history JSON file)
|
|
39
|
+
*/
|
|
40
|
+
getContextFilePath(): string;
|
|
41
|
+
private ensureHistoryDirExists;
|
|
42
|
+
/**
|
|
43
|
+
* Deserialize chat entries from parsed JSON
|
|
44
|
+
*/
|
|
45
|
+
private deserializeChatEntries;
|
|
46
|
+
/**
|
|
47
|
+
* Load context (system prompt + chat history)
|
|
48
|
+
* Supports both old format (array) and new format (object)
|
|
49
|
+
*/
|
|
50
|
+
loadContext(): ContextData;
|
|
51
|
+
/**
|
|
52
|
+
* Serialize chat entries for JSON storage
|
|
53
|
+
*/
|
|
54
|
+
private serializeChatEntries;
|
|
55
|
+
/**
|
|
56
|
+
* Save context (system prompt + chat history + session state) in new format
|
|
57
|
+
*/
|
|
58
|
+
saveContext(systemPrompt: string, chatHistory: ChatEntry[], sessionState?: SessionState): void;
|
|
59
|
+
/**
|
|
60
|
+
* Save raw messages log to file (OpenAI format messages)
|
|
61
|
+
*/
|
|
62
|
+
saveMessages(messages: any[]): void;
|
|
63
|
+
/**
|
|
64
|
+
* Create a backup of all session files (history, messages, state, debug log)
|
|
65
|
+
*/
|
|
66
|
+
backupHistory(): string | null;
|
|
67
|
+
/**
|
|
68
|
+
* Clear all session files (history, messages, state, debug log) with automatic backup
|
|
69
|
+
*/
|
|
70
|
+
clearHistory(): void;
|
|
71
|
+
/**
|
|
72
|
+
* Save session state (persona, mood, task, cwd) to file
|
|
73
|
+
*/
|
|
74
|
+
saveSessionState(state: SessionState): void;
|
|
75
|
+
/**
|
|
76
|
+
* Load session state from file
|
|
77
|
+
*/
|
|
78
|
+
loadSessionState(): SessionState | null;
|
|
79
|
+
/**
|
|
80
|
+
* Get the debug log file path based on the context file
|
|
81
|
+
*/
|
|
82
|
+
getDebugLogPath(): string;
|
|
83
|
+
/**
|
|
84
|
+
* Static method to get debug log path (for use before agent is created)
|
|
85
|
+
*/
|
|
86
|
+
static getDebugLogPath(): string;
|
|
87
|
+
}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import * as os from "os";
|
|
4
|
+
const HISTORY_FILE_NAME = "chat-history.json";
|
|
5
|
+
const HISTORY_DIR = path.join(os.homedir(), ".grok");
|
|
6
|
+
/**
|
|
7
|
+
* Manages chat history persistence to ~/.grok/chat-history.json or custom path
|
|
8
|
+
*/
|
|
9
|
+
export class ChatHistoryManager {
|
|
10
|
+
static instance;
|
|
11
|
+
static customHistoryFilePath = null;
|
|
12
|
+
historyFilePath;
|
|
13
|
+
constructor() {
|
|
14
|
+
this.historyFilePath = ChatHistoryManager.customHistoryFilePath || path.join(HISTORY_DIR, HISTORY_FILE_NAME);
|
|
15
|
+
this.ensureHistoryDirExists();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Set a custom history file path (must be called before getInstance)
|
|
19
|
+
*/
|
|
20
|
+
static setCustomHistoryPath(filePath) {
|
|
21
|
+
ChatHistoryManager.customHistoryFilePath = filePath;
|
|
22
|
+
}
|
|
23
|
+
static getInstance() {
|
|
24
|
+
if (!ChatHistoryManager.instance) {
|
|
25
|
+
ChatHistoryManager.instance = new ChatHistoryManager();
|
|
26
|
+
}
|
|
27
|
+
return ChatHistoryManager.instance;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get the context file path (main history JSON file)
|
|
31
|
+
*/
|
|
32
|
+
getContextFilePath() {
|
|
33
|
+
return this.historyFilePath;
|
|
34
|
+
}
|
|
35
|
+
ensureHistoryDirExists() {
|
|
36
|
+
const dir = path.dirname(this.historyFilePath);
|
|
37
|
+
if (!fs.existsSync(dir)) {
|
|
38
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Deserialize chat entries from parsed JSON
|
|
43
|
+
*/
|
|
44
|
+
deserializeChatEntries(entries) {
|
|
45
|
+
return entries
|
|
46
|
+
.map((entry) => {
|
|
47
|
+
try {
|
|
48
|
+
if (!entry.type || !entry.timestamp) {
|
|
49
|
+
console.warn("Skipping invalid chat entry:", entry);
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
...entry,
|
|
54
|
+
timestamp: new Date(entry.timestamp),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (entryError) {
|
|
58
|
+
console.warn("Failed to parse chat entry:", entry, entryError);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
.filter((entry) => entry !== null);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Load context (system prompt + chat history)
|
|
66
|
+
* Supports both old format (array) and new format (object)
|
|
67
|
+
*/
|
|
68
|
+
loadContext() {
|
|
69
|
+
try {
|
|
70
|
+
if (!fs.existsSync(this.historyFilePath)) {
|
|
71
|
+
return { systemPrompt: "", chatHistory: [] };
|
|
72
|
+
}
|
|
73
|
+
const data = fs.readFileSync(this.historyFilePath, "utf-8");
|
|
74
|
+
const parsed = JSON.parse(data);
|
|
75
|
+
// New format: {systemPrompt: string, chatHistory: ChatEntry[], sessionState?: SessionState}
|
|
76
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed) && 'systemPrompt' in parsed) {
|
|
77
|
+
const contextData = {
|
|
78
|
+
systemPrompt: parsed.systemPrompt || "",
|
|
79
|
+
chatHistory: this.deserializeChatEntries(parsed.chatHistory || []),
|
|
80
|
+
};
|
|
81
|
+
// Load session state from context if present, otherwise try .state.json
|
|
82
|
+
if (parsed.sessionState) {
|
|
83
|
+
contextData.sessionState = parsed.sessionState;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const legacySessionState = this.loadSessionState();
|
|
87
|
+
if (legacySessionState) {
|
|
88
|
+
contextData.sessionState = legacySessionState;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return contextData;
|
|
92
|
+
}
|
|
93
|
+
// Old format: array of ChatEntry (system message at index 0 is systemPrompt)
|
|
94
|
+
if (Array.isArray(parsed)) {
|
|
95
|
+
const entries = this.deserializeChatEntries(parsed);
|
|
96
|
+
const contextData = {
|
|
97
|
+
systemPrompt: "",
|
|
98
|
+
chatHistory: entries,
|
|
99
|
+
};
|
|
100
|
+
// Only extract system prompt if it's at index 0
|
|
101
|
+
if (entries.length > 0 && entries[0].type === "system") {
|
|
102
|
+
contextData.systemPrompt = entries[0].content;
|
|
103
|
+
contextData.chatHistory = entries.slice(1); // Everything after index 0
|
|
104
|
+
}
|
|
105
|
+
// Load session state from .state.json for backward compatibility
|
|
106
|
+
const legacySessionState = this.loadSessionState();
|
|
107
|
+
if (legacySessionState) {
|
|
108
|
+
contextData.sessionState = legacySessionState;
|
|
109
|
+
}
|
|
110
|
+
return contextData;
|
|
111
|
+
}
|
|
112
|
+
console.warn("Unknown context file format");
|
|
113
|
+
return { systemPrompt: "", chatHistory: [] };
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
console.warn("Failed to load context:", error);
|
|
117
|
+
return { systemPrompt: "", chatHistory: [] };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Serialize chat entries for JSON storage
|
|
122
|
+
*/
|
|
123
|
+
serializeChatEntries(entries) {
|
|
124
|
+
return entries.map(entry => ({
|
|
125
|
+
...entry,
|
|
126
|
+
timestamp: entry.timestamp instanceof Date
|
|
127
|
+
? entry.timestamp.toISOString()
|
|
128
|
+
: entry.timestamp, // Already a string
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Save context (system prompt + chat history + session state) in new format
|
|
133
|
+
*/
|
|
134
|
+
saveContext(systemPrompt, chatHistory, sessionState) {
|
|
135
|
+
try {
|
|
136
|
+
const contextData = {
|
|
137
|
+
systemPrompt,
|
|
138
|
+
chatHistory: this.serializeChatEntries(chatHistory),
|
|
139
|
+
};
|
|
140
|
+
// Include session state if provided
|
|
141
|
+
if (sessionState) {
|
|
142
|
+
contextData.sessionState = sessionState;
|
|
143
|
+
}
|
|
144
|
+
fs.writeFileSync(this.historyFilePath, JSON.stringify(contextData, null, 2));
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
console.warn("Failed to save context:", error);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Save raw messages log to file (OpenAI format messages)
|
|
152
|
+
*/
|
|
153
|
+
saveMessages(messages) {
|
|
154
|
+
try {
|
|
155
|
+
const messagesFilePath = this.historyFilePath.replace('.json', '.messages.json');
|
|
156
|
+
fs.writeFileSync(messagesFilePath, JSON.stringify(messages, null, 2));
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
console.warn("Failed to save messages log:", error);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Create a backup of all session files (history, messages, state, debug log)
|
|
164
|
+
*/
|
|
165
|
+
backupHistory() {
|
|
166
|
+
try {
|
|
167
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
168
|
+
const backupSuffix = `.backup-${timestamp}.json`;
|
|
169
|
+
let backupPath = null;
|
|
170
|
+
// Backup main history file
|
|
171
|
+
if (fs.existsSync(this.historyFilePath)) {
|
|
172
|
+
backupPath = this.historyFilePath.replace('.json', backupSuffix);
|
|
173
|
+
fs.copyFileSync(this.historyFilePath, backupPath);
|
|
174
|
+
}
|
|
175
|
+
// Backup messages file
|
|
176
|
+
const messagesFilePath = this.historyFilePath.replace('.json', '.messages.json');
|
|
177
|
+
if (fs.existsSync(messagesFilePath)) {
|
|
178
|
+
const messagesBackupPath = messagesFilePath.replace('.json', backupSuffix);
|
|
179
|
+
fs.copyFileSync(messagesFilePath, messagesBackupPath);
|
|
180
|
+
}
|
|
181
|
+
// Backup state file
|
|
182
|
+
const stateFilePath = this.historyFilePath.replace('.json', '.state.json');
|
|
183
|
+
if (fs.existsSync(stateFilePath)) {
|
|
184
|
+
const stateBackupPath = stateFilePath.replace('.json', backupSuffix);
|
|
185
|
+
fs.copyFileSync(stateFilePath, stateBackupPath);
|
|
186
|
+
}
|
|
187
|
+
// Backup debug log file
|
|
188
|
+
const debugLogPath = this.historyFilePath.replace('.json', '.debug.log');
|
|
189
|
+
if (fs.existsSync(debugLogPath)) {
|
|
190
|
+
const debugBackupPath = debugLogPath.replace('.log', `.backup-${timestamp}.log`);
|
|
191
|
+
fs.copyFileSync(debugLogPath, debugBackupPath);
|
|
192
|
+
}
|
|
193
|
+
return backupPath;
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
console.warn("Failed to backup chat history:", error);
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Clear all session files (history, messages, state, debug log) with automatic backup
|
|
202
|
+
*/
|
|
203
|
+
clearHistory() {
|
|
204
|
+
try {
|
|
205
|
+
// First, create a backup
|
|
206
|
+
const backupPath = this.backupHistory();
|
|
207
|
+
// Then clear the files
|
|
208
|
+
if (fs.existsSync(this.historyFilePath)) {
|
|
209
|
+
fs.unlinkSync(this.historyFilePath);
|
|
210
|
+
}
|
|
211
|
+
const messagesFilePath = this.historyFilePath.replace('.json', '.messages.json');
|
|
212
|
+
if (fs.existsSync(messagesFilePath)) {
|
|
213
|
+
fs.unlinkSync(messagesFilePath);
|
|
214
|
+
}
|
|
215
|
+
// Also clear session state
|
|
216
|
+
const stateFilePath = this.historyFilePath.replace('.json', '.state.json');
|
|
217
|
+
if (fs.existsSync(stateFilePath)) {
|
|
218
|
+
fs.unlinkSync(stateFilePath);
|
|
219
|
+
}
|
|
220
|
+
// Also clear debug log
|
|
221
|
+
const debugLogPath = this.historyFilePath.replace('.json', '.debug.log');
|
|
222
|
+
if (fs.existsSync(debugLogPath)) {
|
|
223
|
+
fs.unlinkSync(debugLogPath);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
console.warn("Failed to clear chat history:", error);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Save session state (persona, mood, task, cwd) to file
|
|
232
|
+
*/
|
|
233
|
+
saveSessionState(state) {
|
|
234
|
+
try {
|
|
235
|
+
const stateFilePath = this.historyFilePath.replace('.json', '.state.json');
|
|
236
|
+
fs.writeFileSync(stateFilePath, JSON.stringify(state, null, 2) + '\n');
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
console.warn("Failed to save session state:", error);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Load session state from file
|
|
244
|
+
*/
|
|
245
|
+
loadSessionState() {
|
|
246
|
+
try {
|
|
247
|
+
const stateFilePath = this.historyFilePath.replace('.json', '.state.json');
|
|
248
|
+
if (!fs.existsSync(stateFilePath)) {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
const data = fs.readFileSync(stateFilePath, "utf-8");
|
|
252
|
+
return JSON.parse(data);
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
console.warn("Failed to load session state:", error);
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Get the debug log file path based on the context file
|
|
261
|
+
*/
|
|
262
|
+
getDebugLogPath() {
|
|
263
|
+
return this.historyFilePath.replace('.json', '.debug.log');
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Static method to get debug log path (for use before agent is created)
|
|
267
|
+
*/
|
|
268
|
+
static getDebugLogPath() {
|
|
269
|
+
const instance = ChatHistoryManager.getInstance();
|
|
270
|
+
return instance.getDebugLogPath();
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=chat-history-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-history-manager.js","sourceRoot":"","sources":["../../src/utils/chat-history-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { ChatEntry } from "../agent/grok-agent.js";
|
|
2
|
+
export interface SessionState {
|
|
3
|
+
session: string;
|
|
4
|
+
persona: string;
|
|
5
|
+
personaColor: string;
|
|
6
|
+
mood: string;
|
|
7
|
+
moodColor: string;
|
|
8
|
+
activeTask: string;
|
|
9
|
+
activeTaskAction: string;
|
|
10
|
+
activeTaskColor: string;
|
|
11
|
+
cwd: string;
|
|
12
|
+
contextCurrent: number;
|
|
13
|
+
contextMax: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Manages chat history persistence to ~/.grok/chat-history.json or custom path
|
|
17
|
+
*/
|
|
18
|
+
export declare class ChatHistoryManager {
|
|
19
|
+
private static instance;
|
|
20
|
+
private static customHistoryFilePath;
|
|
21
|
+
private historyFilePath;
|
|
22
|
+
private constructor();
|
|
23
|
+
/**
|
|
24
|
+
* Set a custom history file path (must be called before getInstance)
|
|
25
|
+
*/
|
|
26
|
+
static setCustomHistoryPath(filePath: string): void;
|
|
27
|
+
static getInstance(): ChatHistoryManager;
|
|
28
|
+
/**
|
|
29
|
+
* Get the context file path (main history JSON file)
|
|
30
|
+
*/
|
|
31
|
+
getContextFilePath(): string;
|
|
32
|
+
private ensureHistoryDirExists;
|
|
33
|
+
/**
|
|
34
|
+
* Load chat history from file
|
|
35
|
+
*/
|
|
36
|
+
loadHistory(): ChatEntry[];
|
|
37
|
+
/**
|
|
38
|
+
* Save chat history to file
|
|
39
|
+
*/
|
|
40
|
+
saveHistory(history: ChatEntry[]): void;
|
|
41
|
+
/**
|
|
42
|
+
* Save raw messages log to file (OpenAI format messages)
|
|
43
|
+
*/
|
|
44
|
+
saveMessages(messages: any[]): void;
|
|
45
|
+
/**
|
|
46
|
+
* Create a backup of all session files (history, messages, state, debug log)
|
|
47
|
+
*/
|
|
48
|
+
backupHistory(): string | null;
|
|
49
|
+
/**
|
|
50
|
+
* Clear all session files (history, messages, state, debug log) with automatic backup
|
|
51
|
+
*/
|
|
52
|
+
clearHistory(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Save session state (persona, mood, task, cwd) to file
|
|
55
|
+
*/
|
|
56
|
+
saveSessionState(state: SessionState): void;
|
|
57
|
+
/**
|
|
58
|
+
* Load session state from file
|
|
59
|
+
*/
|
|
60
|
+
loadSessionState(): SessionState | null;
|
|
61
|
+
/**
|
|
62
|
+
* Get the debug log file path based on the context file
|
|
63
|
+
*/
|
|
64
|
+
getDebugLogPath(): string;
|
|
65
|
+
/**
|
|
66
|
+
* Static method to get debug log path (for use before agent is created)
|
|
67
|
+
*/
|
|
68
|
+
static getDebugLogPath(): string;
|
|
69
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import * as os from "os";
|
|
4
|
+
const HISTORY_FILE_NAME = "chat-history.json";
|
|
5
|
+
const HISTORY_DIR = path.join(os.homedir(), ".grok");
|
|
6
|
+
/**
|
|
7
|
+
* Manages chat history persistence to ~/.grok/chat-history.json or custom path
|
|
8
|
+
*/
|
|
9
|
+
export class ChatHistoryManager {
|
|
10
|
+
static instance;
|
|
11
|
+
static customHistoryFilePath = null;
|
|
12
|
+
historyFilePath;
|
|
13
|
+
constructor() {
|
|
14
|
+
this.historyFilePath = ChatHistoryManager.customHistoryFilePath || path.join(HISTORY_DIR, HISTORY_FILE_NAME);
|
|
15
|
+
this.ensureHistoryDirExists();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Set a custom history file path (must be called before getInstance)
|
|
19
|
+
*/
|
|
20
|
+
static setCustomHistoryPath(filePath) {
|
|
21
|
+
ChatHistoryManager.customHistoryFilePath = filePath;
|
|
22
|
+
}
|
|
23
|
+
static getInstance() {
|
|
24
|
+
if (!ChatHistoryManager.instance) {
|
|
25
|
+
ChatHistoryManager.instance = new ChatHistoryManager();
|
|
26
|
+
}
|
|
27
|
+
return ChatHistoryManager.instance;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get the context file path (main history JSON file)
|
|
31
|
+
*/
|
|
32
|
+
getContextFilePath() {
|
|
33
|
+
return this.historyFilePath;
|
|
34
|
+
}
|
|
35
|
+
ensureHistoryDirExists() {
|
|
36
|
+
const dir = path.dirname(this.historyFilePath);
|
|
37
|
+
if (!fs.existsSync(dir)) {
|
|
38
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Load chat history from file
|
|
43
|
+
*/
|
|
44
|
+
loadHistory() {
|
|
45
|
+
try {
|
|
46
|
+
if (!fs.existsSync(this.historyFilePath)) {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
const data = fs.readFileSync(this.historyFilePath, "utf-8");
|
|
50
|
+
const parsed = JSON.parse(data);
|
|
51
|
+
// Deserialize dates and validate entries
|
|
52
|
+
return parsed
|
|
53
|
+
.map((entry) => {
|
|
54
|
+
try {
|
|
55
|
+
if (!entry.type || !entry.timestamp) {
|
|
56
|
+
console.warn("Skipping invalid chat entry:", entry);
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
...entry,
|
|
61
|
+
timestamp: new Date(entry.timestamp),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (entryError) {
|
|
65
|
+
console.warn("Failed to parse chat entry:", entry, entryError);
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
.filter((entry) => entry !== null);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.warn("Failed to load chat history:", error);
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Save chat history to file
|
|
78
|
+
*/
|
|
79
|
+
saveHistory(history) {
|
|
80
|
+
try {
|
|
81
|
+
// Serialize dates
|
|
82
|
+
const serialized = history.map(entry => ({
|
|
83
|
+
...entry,
|
|
84
|
+
timestamp: entry.timestamp.toISOString(),
|
|
85
|
+
}));
|
|
86
|
+
fs.writeFileSync(this.historyFilePath, JSON.stringify(serialized, null, 2));
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
console.warn("Failed to save chat history:", error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Save raw messages log to file (OpenAI format messages)
|
|
94
|
+
*/
|
|
95
|
+
saveMessages(messages) {
|
|
96
|
+
try {
|
|
97
|
+
const messagesFilePath = this.historyFilePath.replace('.json', '.messages.json');
|
|
98
|
+
fs.writeFileSync(messagesFilePath, JSON.stringify(messages, null, 2));
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.warn("Failed to save messages log:", error);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Create a backup of all session files (history, messages, state, debug log)
|
|
106
|
+
*/
|
|
107
|
+
backupHistory() {
|
|
108
|
+
try {
|
|
109
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
110
|
+
const backupSuffix = `.backup-${timestamp}.json`;
|
|
111
|
+
let backupPath = null;
|
|
112
|
+
// Backup main history file
|
|
113
|
+
if (fs.existsSync(this.historyFilePath)) {
|
|
114
|
+
backupPath = this.historyFilePath.replace('.json', backupSuffix);
|
|
115
|
+
fs.copyFileSync(this.historyFilePath, backupPath);
|
|
116
|
+
}
|
|
117
|
+
// Backup messages file
|
|
118
|
+
const messagesFilePath = this.historyFilePath.replace('.json', '.messages.json');
|
|
119
|
+
if (fs.existsSync(messagesFilePath)) {
|
|
120
|
+
const messagesBackupPath = messagesFilePath.replace('.json', backupSuffix);
|
|
121
|
+
fs.copyFileSync(messagesFilePath, messagesBackupPath);
|
|
122
|
+
}
|
|
123
|
+
// Backup state file
|
|
124
|
+
const stateFilePath = this.historyFilePath.replace('.json', '.state.json');
|
|
125
|
+
if (fs.existsSync(stateFilePath)) {
|
|
126
|
+
const stateBackupPath = stateFilePath.replace('.json', backupSuffix);
|
|
127
|
+
fs.copyFileSync(stateFilePath, stateBackupPath);
|
|
128
|
+
}
|
|
129
|
+
// Backup debug log file
|
|
130
|
+
const debugLogPath = this.historyFilePath.replace('.json', '.debug.log');
|
|
131
|
+
if (fs.existsSync(debugLogPath)) {
|
|
132
|
+
const debugBackupPath = debugLogPath.replace('.log', `.backup-${timestamp}.log`);
|
|
133
|
+
fs.copyFileSync(debugLogPath, debugBackupPath);
|
|
134
|
+
}
|
|
135
|
+
return backupPath;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.warn("Failed to backup chat history:", error);
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Clear all session files (history, messages, state, debug log) with automatic backup
|
|
144
|
+
*/
|
|
145
|
+
clearHistory() {
|
|
146
|
+
try {
|
|
147
|
+
// First, create a backup
|
|
148
|
+
const backupPath = this.backupHistory();
|
|
149
|
+
// Then clear the files
|
|
150
|
+
if (fs.existsSync(this.historyFilePath)) {
|
|
151
|
+
fs.unlinkSync(this.historyFilePath);
|
|
152
|
+
}
|
|
153
|
+
const messagesFilePath = this.historyFilePath.replace('.json', '.messages.json');
|
|
154
|
+
if (fs.existsSync(messagesFilePath)) {
|
|
155
|
+
fs.unlinkSync(messagesFilePath);
|
|
156
|
+
}
|
|
157
|
+
// Also clear session state
|
|
158
|
+
const stateFilePath = this.historyFilePath.replace('.json', '.state.json');
|
|
159
|
+
if (fs.existsSync(stateFilePath)) {
|
|
160
|
+
fs.unlinkSync(stateFilePath);
|
|
161
|
+
}
|
|
162
|
+
// Also clear debug log
|
|
163
|
+
const debugLogPath = this.historyFilePath.replace('.json', '.debug.log');
|
|
164
|
+
if (fs.existsSync(debugLogPath)) {
|
|
165
|
+
fs.unlinkSync(debugLogPath);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
console.warn("Failed to clear chat history:", error);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Save session state (persona, mood, task, cwd) to file
|
|
174
|
+
*/
|
|
175
|
+
saveSessionState(state) {
|
|
176
|
+
try {
|
|
177
|
+
const stateFilePath = this.historyFilePath.replace('.json', '.state.json');
|
|
178
|
+
fs.writeFileSync(stateFilePath, JSON.stringify(state, null, 2));
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
console.warn("Failed to save session state:", error);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Load session state from file
|
|
186
|
+
*/
|
|
187
|
+
loadSessionState() {
|
|
188
|
+
try {
|
|
189
|
+
const stateFilePath = this.historyFilePath.replace('.json', '.state.json');
|
|
190
|
+
if (!fs.existsSync(stateFilePath)) {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
const data = fs.readFileSync(stateFilePath, "utf-8");
|
|
194
|
+
return JSON.parse(data);
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
console.warn("Failed to load session state:", error);
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get the debug log file path based on the context file
|
|
203
|
+
*/
|
|
204
|
+
getDebugLogPath() {
|
|
205
|
+
return this.historyFilePath.replace('.json', '.debug.log');
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Static method to get debug log path (for use before agent is created)
|
|
209
|
+
*/
|
|
210
|
+
static getDebugLogPath() {
|
|
211
|
+
const instance = ChatHistoryManager.getInstance();
|
|
212
|
+
return instance.getDebugLogPath();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=chat-history-manager.json-backup.js.map
|