monty-autonomous-fullstack-dev-multillm 1.0.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 +81 -0
- package/README.md +608 -0
- package/bin/cli.js +448 -0
- package/dist/agents/coding.d.ts +15 -0
- package/dist/agents/coding.d.ts.map +1 -0
- package/dist/agents/coding.js +189 -0
- package/dist/agents/coding.js.map +1 -0
- package/dist/agents/initializer.d.ts +15 -0
- package/dist/agents/initializer.d.ts.map +1 -0
- package/dist/agents/initializer.js +87 -0
- package/dist/agents/initializer.js.map +1 -0
- package/dist/agents/prompts/arbitrator.md +143 -0
- package/dist/agents/prompts/coding.md +247 -0
- package/dist/agents/prompts/initializer.md +98 -0
- package/dist/config/agent-config.d.ts +103 -0
- package/dist/config/agent-config.d.ts.map +1 -0
- package/dist/config/agent-config.js +138 -0
- package/dist/config/agent-config.js.map +1 -0
- package/dist/config/auth-config.d.ts +152 -0
- package/dist/config/auth-config.d.ts.map +1 -0
- package/dist/config/auth-config.js +139 -0
- package/dist/config/auth-config.js.map +1 -0
- package/dist/config/mcp-config.d.ts +109 -0
- package/dist/config/mcp-config.d.ts.map +1 -0
- package/dist/config/mcp-config.js +234 -0
- package/dist/config/mcp-config.js.map +1 -0
- package/dist/config/provider-config.d.ts +139 -0
- package/dist/config/provider-config.d.ts.map +1 -0
- package/dist/config/provider-config.js +344 -0
- package/dist/config/provider-config.js.map +1 -0
- package/dist/config/subagents-config.d.ts +85 -0
- package/dist/config/subagents-config.d.ts.map +1 -0
- package/dist/config/subagents-config.js +430 -0
- package/dist/config/subagents-config.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +385 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator/arbitrator.d.ts +93 -0
- package/dist/orchestrator/arbitrator.d.ts.map +1 -0
- package/dist/orchestrator/arbitrator.js +330 -0
- package/dist/orchestrator/arbitrator.js.map +1 -0
- package/dist/orchestrator/index.d.ts +113 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +217 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/review-coordinator.d.ts +143 -0
- package/dist/orchestrator/review-coordinator.d.ts.map +1 -0
- package/dist/orchestrator/review-coordinator.js +401 -0
- package/dist/orchestrator/review-coordinator.js.map +1 -0
- package/dist/orchestrator/task-classifier.d.ts +87 -0
- package/dist/orchestrator/task-classifier.d.ts.map +1 -0
- package/dist/orchestrator/task-classifier.js +250 -0
- package/dist/orchestrator/task-classifier.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +64 -0
- package/dist/providers/anthropic-provider.d.ts.map +1 -0
- package/dist/providers/anthropic-provider.js +264 -0
- package/dist/providers/anthropic-provider.js.map +1 -0
- package/dist/providers/base-provider.d.ts +219 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +143 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/cursor-provider.d.ts +82 -0
- package/dist/providers/cursor-provider.d.ts.map +1 -0
- package/dist/providers/cursor-provider.js +321 -0
- package/dist/providers/cursor-provider.js.map +1 -0
- package/dist/providers/google-provider.d.ts +75 -0
- package/dist/providers/google-provider.d.ts.map +1 -0
- package/dist/providers/google-provider.js +274 -0
- package/dist/providers/google-provider.js.map +1 -0
- package/dist/providers/index.d.ts +92 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +233 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +83 -0
- package/dist/providers/openai-provider.d.ts.map +1 -0
- package/dist/providers/openai-provider.js +295 -0
- package/dist/providers/openai-provider.js.map +1 -0
- package/dist/templates/feature_list.template.json +66 -0
- package/dist/templates/progress.template.txt +51 -0
- package/dist/utils/auth-manager.d.ts +121 -0
- package/dist/utils/auth-manager.d.ts.map +1 -0
- package/dist/utils/auth-manager.js +560 -0
- package/dist/utils/auth-manager.js.map +1 -0
- package/dist/utils/budget-enforcer.d.ts +181 -0
- package/dist/utils/budget-enforcer.d.ts.map +1 -0
- package/dist/utils/budget-enforcer.js +386 -0
- package/dist/utils/budget-enforcer.js.map +1 -0
- package/dist/utils/chatgpt-detector.d.ts +51 -0
- package/dist/utils/chatgpt-detector.d.ts.map +1 -0
- package/dist/utils/chatgpt-detector.js +274 -0
- package/dist/utils/chatgpt-detector.js.map +1 -0
- package/dist/utils/claude-code-detector.d.ts +39 -0
- package/dist/utils/claude-code-detector.d.ts.map +1 -0
- package/dist/utils/claude-code-detector.js +153 -0
- package/dist/utils/claude-code-detector.js.map +1 -0
- package/dist/utils/code-quality.d.ts +58 -0
- package/dist/utils/code-quality.d.ts.map +1 -0
- package/dist/utils/code-quality.js +258 -0
- package/dist/utils/code-quality.js.map +1 -0
- package/dist/utils/context-primer.d.ts +50 -0
- package/dist/utils/context-primer.d.ts.map +1 -0
- package/dist/utils/context-primer.js +429 -0
- package/dist/utils/context-primer.js.map +1 -0
- package/dist/utils/dependency-management.d.ts +40 -0
- package/dist/utils/dependency-management.d.ts.map +1 -0
- package/dist/utils/dependency-management.js +123 -0
- package/dist/utils/dependency-management.js.map +1 -0
- package/dist/utils/environment-validation.d.ts +33 -0
- package/dist/utils/environment-validation.d.ts.map +1 -0
- package/dist/utils/environment-validation.js +136 -0
- package/dist/utils/environment-validation.js.map +1 -0
- package/dist/utils/error-recovery.d.ts +60 -0
- package/dist/utils/error-recovery.d.ts.map +1 -0
- package/dist/utils/error-recovery.js +183 -0
- package/dist/utils/error-recovery.js.map +1 -0
- package/dist/utils/feature-list.d.ts +102 -0
- package/dist/utils/feature-list.d.ts.map +1 -0
- package/dist/utils/feature-list.js +191 -0
- package/dist/utils/feature-list.js.map +1 -0
- package/dist/utils/gemini-detector.d.ts +65 -0
- package/dist/utils/gemini-detector.d.ts.map +1 -0
- package/dist/utils/gemini-detector.js +340 -0
- package/dist/utils/gemini-detector.js.map +1 -0
- package/dist/utils/git-utils.d.ts +48 -0
- package/dist/utils/git-utils.d.ts.map +1 -0
- package/dist/utils/git-utils.js +110 -0
- package/dist/utils/git-utils.js.map +1 -0
- package/dist/utils/health-check.d.ts +32 -0
- package/dist/utils/health-check.d.ts.map +1 -0
- package/dist/utils/health-check.js +152 -0
- package/dist/utils/health-check.js.map +1 -0
- package/dist/utils/hooks-manager.d.ts +154 -0
- package/dist/utils/hooks-manager.d.ts.map +1 -0
- package/dist/utils/hooks-manager.js +359 -0
- package/dist/utils/hooks-manager.js.map +1 -0
- package/dist/utils/multi-auth-manager.d.ts +144 -0
- package/dist/utils/multi-auth-manager.d.ts.map +1 -0
- package/dist/utils/multi-auth-manager.js +588 -0
- package/dist/utils/multi-auth-manager.js.map +1 -0
- package/dist/utils/progress.d.ts +49 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +209 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/project-detection.d.ts +40 -0
- package/dist/utils/project-detection.d.ts.map +1 -0
- package/dist/utils/project-detection.js +230 -0
- package/dist/utils/project-detection.js.map +1 -0
- package/dist/utils/session-manager.d.ts +119 -0
- package/dist/utils/session-manager.d.ts.map +1 -0
- package/dist/utils/session-manager.js +389 -0
- package/dist/utils/session-manager.js.map +1 -0
- package/dist/utils/skills-manager.d.ts +113 -0
- package/dist/utils/skills-manager.d.ts.map +1 -0
- package/dist/utils/skills-manager.js +332 -0
- package/dist/utils/skills-manager.js.map +1 -0
- package/dist/utils/structured-output.d.ts +117 -0
- package/dist/utils/structured-output.d.ts.map +1 -0
- package/dist/utils/structured-output.js +191 -0
- package/dist/utils/structured-output.js.map +1 -0
- package/dist/utils/subagent-manager.d.ts +143 -0
- package/dist/utils/subagent-manager.d.ts.map +1 -0
- package/dist/utils/subagent-manager.js +326 -0
- package/dist/utils/subagent-manager.js.map +1 -0
- package/dist/utils/supabase-setup.d.ts +50 -0
- package/dist/utils/supabase-setup.d.ts.map +1 -0
- package/dist/utils/supabase-setup.js +151 -0
- package/dist/utils/supabase-setup.js.map +1 -0
- package/dist/utils/token-refresh.d.ts +21 -0
- package/dist/utils/token-refresh.d.ts.map +1 -0
- package/dist/utils/token-refresh.js +77 -0
- package/dist/utils/token-refresh.js.map +1 -0
- package/dist/utils/tos-warning.d.ts +115 -0
- package/dist/utils/tos-warning.d.ts.map +1 -0
- package/dist/utils/tos-warning.js +304 -0
- package/dist/utils/tos-warning.js.map +1 -0
- package/dist/utils/usage-monitor.d.ts +156 -0
- package/dist/utils/usage-monitor.d.ts.map +1 -0
- package/dist/utils/usage-monitor.js +296 -0
- package/dist/utils/usage-monitor.js.map +1 -0
- package/package.json +105 -0
- package/scripts/init.ps1 +73 -0
- package/scripts/init.sh +86 -0
- package/scripts/test-auth.sh +90 -0
- package/templates/feature_list.template.json +66 -0
- package/templates/progress.template.txt +51 -0
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Manager (Features A1, A6)
|
|
3
|
+
* Handles session persistence, resumption, and file checkpointing
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2025 Dobeu Tech Solutions LLC
|
|
6
|
+
* Licensed under CC BY-NC 4.0
|
|
7
|
+
*/
|
|
8
|
+
import { writeFileSync, readFileSync, existsSync, mkdirSync, copyFileSync, readdirSync, statSync, unlinkSync } from 'fs';
|
|
9
|
+
import { join, dirname, relative } from 'path';
|
|
10
|
+
import { createHash } from 'crypto';
|
|
11
|
+
/**
|
|
12
|
+
* Generate unique session ID
|
|
13
|
+
*/
|
|
14
|
+
export function generateSessionId() {
|
|
15
|
+
const timestamp = Date.now().toString(36);
|
|
16
|
+
const random = Math.random().toString(36).substring(2, 8);
|
|
17
|
+
return `session-${timestamp}-${random}`;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate checkpoint ID
|
|
21
|
+
*/
|
|
22
|
+
export function generateCheckpointId() {
|
|
23
|
+
const timestamp = Date.now().toString(36);
|
|
24
|
+
const random = Math.random().toString(36).substring(2, 6);
|
|
25
|
+
return `ckpt-${timestamp}-${random}`;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create new session state
|
|
29
|
+
*/
|
|
30
|
+
export function createSessionState(parentSessionId = null) {
|
|
31
|
+
return {
|
|
32
|
+
session_id: generateSessionId(),
|
|
33
|
+
parent_session_id: parentSessionId,
|
|
34
|
+
created_at: new Date().toISOString(),
|
|
35
|
+
last_active: new Date().toISOString(),
|
|
36
|
+
status: 'active',
|
|
37
|
+
current_feature: null,
|
|
38
|
+
completed_features: [],
|
|
39
|
+
failed_features: [],
|
|
40
|
+
context_summary: '',
|
|
41
|
+
important_decisions: [],
|
|
42
|
+
tools_initialized: [],
|
|
43
|
+
mcp_servers_active: [],
|
|
44
|
+
checkpoints: [],
|
|
45
|
+
current_checkpoint: null,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Save session state
|
|
50
|
+
*/
|
|
51
|
+
export function saveSessionState(agentDir, state) {
|
|
52
|
+
const sessionPath = join(agentDir, 'session_state.json');
|
|
53
|
+
const sessionsDir = join(agentDir, 'sessions');
|
|
54
|
+
// Ensure sessions directory exists
|
|
55
|
+
if (!existsSync(sessionsDir)) {
|
|
56
|
+
mkdirSync(sessionsDir, { recursive: true });
|
|
57
|
+
}
|
|
58
|
+
// Update last active
|
|
59
|
+
state.last_active = new Date().toISOString();
|
|
60
|
+
// Save current state
|
|
61
|
+
writeFileSync(sessionPath, JSON.stringify(state, null, 2));
|
|
62
|
+
// Also save to sessions history
|
|
63
|
+
const historyPath = join(sessionsDir, `${state.session_id}.json`);
|
|
64
|
+
writeFileSync(historyPath, JSON.stringify(state, null, 2));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Load session state
|
|
68
|
+
*/
|
|
69
|
+
export function loadSessionState(agentDir) {
|
|
70
|
+
const sessionPath = join(agentDir, 'session_state.json');
|
|
71
|
+
if (!existsSync(sessionPath))
|
|
72
|
+
return null;
|
|
73
|
+
try {
|
|
74
|
+
return JSON.parse(readFileSync(sessionPath, 'utf-8'));
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Load specific session by ID
|
|
82
|
+
*/
|
|
83
|
+
export function loadSessionById(agentDir, sessionId) {
|
|
84
|
+
const sessionsDir = join(agentDir, 'sessions');
|
|
85
|
+
const sessionPath = join(sessionsDir, `${sessionId}.json`);
|
|
86
|
+
if (!existsSync(sessionPath))
|
|
87
|
+
return null;
|
|
88
|
+
try {
|
|
89
|
+
return JSON.parse(readFileSync(sessionPath, 'utf-8'));
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Fork session for A/B testing
|
|
97
|
+
*/
|
|
98
|
+
export function forkSession(agentDir, parentState) {
|
|
99
|
+
const newState = createSessionState(parentState.session_id);
|
|
100
|
+
// Copy relevant state from parent
|
|
101
|
+
newState.completed_features = [...parentState.completed_features];
|
|
102
|
+
newState.context_summary = parentState.context_summary;
|
|
103
|
+
newState.important_decisions = [...parentState.important_decisions];
|
|
104
|
+
newState.checkpoints = [...parentState.checkpoints];
|
|
105
|
+
newState.current_checkpoint = parentState.current_checkpoint;
|
|
106
|
+
// Mark parent as forked
|
|
107
|
+
parentState.status = 'forked';
|
|
108
|
+
saveSessionState(agentDir, parentState);
|
|
109
|
+
// Save new session
|
|
110
|
+
saveSessionState(agentDir, newState);
|
|
111
|
+
return newState;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* List all sessions
|
|
115
|
+
*/
|
|
116
|
+
export function listSessions(agentDir) {
|
|
117
|
+
const sessionsDir = join(agentDir, 'sessions');
|
|
118
|
+
if (!existsSync(sessionsDir))
|
|
119
|
+
return [];
|
|
120
|
+
const sessions = [];
|
|
121
|
+
const files = readdirSync(sessionsDir).filter(f => f.endsWith('.json'));
|
|
122
|
+
for (const file of files) {
|
|
123
|
+
try {
|
|
124
|
+
const state = JSON.parse(readFileSync(join(sessionsDir, file), 'utf-8'));
|
|
125
|
+
sessions.push(state);
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Skip invalid files
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Sort by last active (newest first)
|
|
132
|
+
return sessions.sort((a, b) => new Date(b.last_active).getTime() - new Date(a.last_active).getTime());
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Calculate file hash
|
|
136
|
+
*/
|
|
137
|
+
function calculateFileHash(filePath) {
|
|
138
|
+
if (!existsSync(filePath))
|
|
139
|
+
return '';
|
|
140
|
+
const content = readFileSync(filePath);
|
|
141
|
+
return createHash('sha256').update(content).digest('hex').substring(0, 16);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Create checkpoint
|
|
145
|
+
*/
|
|
146
|
+
export function createCheckpoint(agentDir, projectRoot, description, featureId = null) {
|
|
147
|
+
const checkpointsDir = join(agentDir, 'checkpoints');
|
|
148
|
+
const checkpointId = generateCheckpointId();
|
|
149
|
+
const checkpointDir = join(checkpointsDir, checkpointId);
|
|
150
|
+
// Create checkpoint directory
|
|
151
|
+
mkdirSync(checkpointDir, { recursive: true });
|
|
152
|
+
// Find tracked files (src, config files, etc.)
|
|
153
|
+
const trackedPatterns = [
|
|
154
|
+
'src/**/*.ts',
|
|
155
|
+
'src/**/*.tsx',
|
|
156
|
+
'src/**/*.js',
|
|
157
|
+
'src/**/*.jsx',
|
|
158
|
+
'package.json',
|
|
159
|
+
'tsconfig.json',
|
|
160
|
+
'.env',
|
|
161
|
+
'.env.local',
|
|
162
|
+
];
|
|
163
|
+
const files = [];
|
|
164
|
+
// Simple file discovery (would use glob in production)
|
|
165
|
+
const srcDir = join(projectRoot, 'src');
|
|
166
|
+
if (existsSync(srcDir)) {
|
|
167
|
+
const srcFiles = findFilesRecursive(srcDir, ['.ts', '.tsx', '.js', '.jsx']);
|
|
168
|
+
for (const file of srcFiles) {
|
|
169
|
+
const relativePath = relative(projectRoot, file);
|
|
170
|
+
const hash = calculateFileHash(file);
|
|
171
|
+
const stats = statSync(file);
|
|
172
|
+
// Backup file
|
|
173
|
+
const backupPath = join(checkpointDir, relativePath);
|
|
174
|
+
const backupDir = dirname(backupPath);
|
|
175
|
+
if (!existsSync(backupDir)) {
|
|
176
|
+
mkdirSync(backupDir, { recursive: true });
|
|
177
|
+
}
|
|
178
|
+
copyFileSync(file, backupPath);
|
|
179
|
+
files.push({
|
|
180
|
+
path: relativePath,
|
|
181
|
+
hash,
|
|
182
|
+
size: stats.size,
|
|
183
|
+
backed_up: true,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Backup config files
|
|
188
|
+
const configFiles = ['package.json', 'tsconfig.json'];
|
|
189
|
+
for (const configFile of configFiles) {
|
|
190
|
+
const filePath = join(projectRoot, configFile);
|
|
191
|
+
if (existsSync(filePath)) {
|
|
192
|
+
const hash = calculateFileHash(filePath);
|
|
193
|
+
const stats = statSync(filePath);
|
|
194
|
+
copyFileSync(filePath, join(checkpointDir, configFile));
|
|
195
|
+
files.push({
|
|
196
|
+
path: configFile,
|
|
197
|
+
hash,
|
|
198
|
+
size: stats.size,
|
|
199
|
+
backed_up: true,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
const checkpoint = {
|
|
204
|
+
id: checkpointId,
|
|
205
|
+
created_at: new Date().toISOString(),
|
|
206
|
+
description,
|
|
207
|
+
feature_id: featureId,
|
|
208
|
+
files_snapshot: files,
|
|
209
|
+
can_restore: true,
|
|
210
|
+
};
|
|
211
|
+
// Save checkpoint metadata
|
|
212
|
+
writeFileSync(join(checkpointDir, 'checkpoint.json'), JSON.stringify(checkpoint, null, 2));
|
|
213
|
+
return checkpoint;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Restore checkpoint
|
|
217
|
+
*/
|
|
218
|
+
export function restoreCheckpoint(agentDir, projectRoot, checkpointId) {
|
|
219
|
+
const checkpointDir = join(agentDir, 'checkpoints', checkpointId);
|
|
220
|
+
const metadataPath = join(checkpointDir, 'checkpoint.json');
|
|
221
|
+
if (!existsSync(metadataPath)) {
|
|
222
|
+
console.error(`Checkpoint ${checkpointId} not found`);
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
try {
|
|
226
|
+
const checkpoint = JSON.parse(readFileSync(metadataPath, 'utf-8'));
|
|
227
|
+
if (!checkpoint.can_restore) {
|
|
228
|
+
console.error(`Checkpoint ${checkpointId} cannot be restored`);
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
// Restore each file
|
|
232
|
+
for (const file of checkpoint.files_snapshot) {
|
|
233
|
+
if (file.backed_up) {
|
|
234
|
+
const backupPath = join(checkpointDir, file.path);
|
|
235
|
+
const targetPath = join(projectRoot, file.path);
|
|
236
|
+
if (existsSync(backupPath)) {
|
|
237
|
+
const targetDir = dirname(targetPath);
|
|
238
|
+
if (!existsSync(targetDir)) {
|
|
239
|
+
mkdirSync(targetDir, { recursive: true });
|
|
240
|
+
}
|
|
241
|
+
copyFileSync(backupPath, targetPath);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
console.log(`Restored checkpoint: ${checkpoint.description}`);
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
console.error(`Failed to restore checkpoint: ${error}`);
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* List checkpoints
|
|
255
|
+
*/
|
|
256
|
+
export function listCheckpoints(agentDir) {
|
|
257
|
+
const checkpointsDir = join(agentDir, 'checkpoints');
|
|
258
|
+
if (!existsSync(checkpointsDir))
|
|
259
|
+
return [];
|
|
260
|
+
const checkpoints = [];
|
|
261
|
+
const dirs = readdirSync(checkpointsDir);
|
|
262
|
+
for (const dir of dirs) {
|
|
263
|
+
const metadataPath = join(checkpointsDir, dir, 'checkpoint.json');
|
|
264
|
+
if (existsSync(metadataPath)) {
|
|
265
|
+
try {
|
|
266
|
+
checkpoints.push(JSON.parse(readFileSync(metadataPath, 'utf-8')));
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
// Skip invalid checkpoints
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Sort by creation time (newest first)
|
|
274
|
+
return checkpoints.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Clean old checkpoints (keep last N)
|
|
278
|
+
*/
|
|
279
|
+
export function cleanOldCheckpoints(agentDir, keepCount = 10) {
|
|
280
|
+
const checkpoints = listCheckpoints(agentDir);
|
|
281
|
+
if (checkpoints.length <= keepCount)
|
|
282
|
+
return;
|
|
283
|
+
const toDelete = checkpoints.slice(keepCount);
|
|
284
|
+
const checkpointsDir = join(agentDir, 'checkpoints');
|
|
285
|
+
for (const checkpoint of toDelete) {
|
|
286
|
+
const checkpointDir = join(checkpointsDir, checkpoint.id);
|
|
287
|
+
if (existsSync(checkpointDir)) {
|
|
288
|
+
// Remove directory recursively
|
|
289
|
+
removeDirectoryRecursive(checkpointDir);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Helper: Find files recursively
|
|
295
|
+
*/
|
|
296
|
+
function findFilesRecursive(dir, extensions) {
|
|
297
|
+
const files = [];
|
|
298
|
+
if (!existsSync(dir))
|
|
299
|
+
return files;
|
|
300
|
+
const entries = readdirSync(dir);
|
|
301
|
+
for (const entry of entries) {
|
|
302
|
+
const fullPath = join(dir, entry);
|
|
303
|
+
const stat = statSync(fullPath);
|
|
304
|
+
if (stat.isDirectory()) {
|
|
305
|
+
// Skip node_modules and hidden directories
|
|
306
|
+
if (!entry.startsWith('.') && entry !== 'node_modules' && entry !== 'dist') {
|
|
307
|
+
files.push(...findFilesRecursive(fullPath, extensions));
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
else if (extensions.some(ext => entry.endsWith(ext))) {
|
|
311
|
+
files.push(fullPath);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return files;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Helper: Remove directory recursively
|
|
318
|
+
*/
|
|
319
|
+
function removeDirectoryRecursive(dir) {
|
|
320
|
+
if (!existsSync(dir))
|
|
321
|
+
return;
|
|
322
|
+
const entries = readdirSync(dir);
|
|
323
|
+
for (const entry of entries) {
|
|
324
|
+
const fullPath = join(dir, entry);
|
|
325
|
+
const stat = statSync(fullPath);
|
|
326
|
+
if (stat.isDirectory()) {
|
|
327
|
+
removeDirectoryRecursive(fullPath);
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
unlinkSync(fullPath);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
// Remove empty directory
|
|
334
|
+
try {
|
|
335
|
+
readdirSync(dir).length === 0 && unlinkSync(dir);
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
// Ignore errors
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Get session resume options for SDK
|
|
343
|
+
*/
|
|
344
|
+
export function getResumeOptions(sessionState) {
|
|
345
|
+
return {
|
|
346
|
+
resume: sessionState.session_id,
|
|
347
|
+
context_summary: sessionState.context_summary,
|
|
348
|
+
completed_features: sessionState.completed_features,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Generate session summary for context preservation
|
|
353
|
+
*/
|
|
354
|
+
export function generateSessionSummary(state) {
|
|
355
|
+
const completedCount = state.completed_features.length;
|
|
356
|
+
const failedCount = state.failed_features.length;
|
|
357
|
+
let summary = `Session ${state.session_id}\n`;
|
|
358
|
+
summary += `Started: ${state.created_at}\n`;
|
|
359
|
+
summary += `Features completed: ${completedCount}\n`;
|
|
360
|
+
if (failedCount > 0) {
|
|
361
|
+
summary += `Features failed: ${failedCount}\n`;
|
|
362
|
+
}
|
|
363
|
+
if (state.current_feature) {
|
|
364
|
+
summary += `Currently working on: ${state.current_feature}\n`;
|
|
365
|
+
}
|
|
366
|
+
if (state.important_decisions.length > 0) {
|
|
367
|
+
summary += `\nKey decisions:\n`;
|
|
368
|
+
for (const decision of state.important_decisions) {
|
|
369
|
+
summary += `- ${decision}\n`;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
return summary;
|
|
373
|
+
}
|
|
374
|
+
export default {
|
|
375
|
+
generateSessionId,
|
|
376
|
+
createSessionState,
|
|
377
|
+
saveSessionState,
|
|
378
|
+
loadSessionState,
|
|
379
|
+
loadSessionById,
|
|
380
|
+
forkSession,
|
|
381
|
+
listSessions,
|
|
382
|
+
createCheckpoint,
|
|
383
|
+
restoreCheckpoint,
|
|
384
|
+
listCheckpoints,
|
|
385
|
+
cleanOldCheckpoints,
|
|
386
|
+
getResumeOptions,
|
|
387
|
+
generateSessionSummary,
|
|
388
|
+
};
|
|
389
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/utils/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills Manager
|
|
3
|
+
* Implements skill loading and management for the Claude Agent SDK.
|
|
4
|
+
* Skills are specialized SKILL.md files that extend agent capabilities.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2025 Dobeu Tech Solutions LLC
|
|
7
|
+
* Licensed under CC BY-NC 4.0
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Skill metadata parsed from SKILL.md frontmatter
|
|
11
|
+
*/
|
|
12
|
+
export interface SkillMetadata {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
triggers?: string[];
|
|
16
|
+
category?: string;
|
|
17
|
+
version?: string;
|
|
18
|
+
author?: string;
|
|
19
|
+
priority?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Loaded skill with content and metadata
|
|
23
|
+
*/
|
|
24
|
+
export interface LoadedSkill {
|
|
25
|
+
path: string;
|
|
26
|
+
relativePath: string;
|
|
27
|
+
name: string;
|
|
28
|
+
content: string;
|
|
29
|
+
metadata: SkillMetadata;
|
|
30
|
+
source: 'workspace' | 'user' | 'system' | 'marketplace';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Skill search paths
|
|
34
|
+
*/
|
|
35
|
+
export declare const SKILL_SEARCH_PATHS: string[];
|
|
36
|
+
/**
|
|
37
|
+
* Parse YAML frontmatter from SKILL.md content
|
|
38
|
+
*/
|
|
39
|
+
export declare function parseSkillFrontmatter(content: string): SkillMetadata;
|
|
40
|
+
/**
|
|
41
|
+
* Get skill content without frontmatter
|
|
42
|
+
*/
|
|
43
|
+
export declare function getSkillContent(content: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Load a single skill from a path
|
|
46
|
+
*/
|
|
47
|
+
export declare function loadSkill(skillPath: string, baseDir: string, source: LoadedSkill['source']): LoadedSkill | null;
|
|
48
|
+
/**
|
|
49
|
+
* Recursively find SKILL.md files in a directory
|
|
50
|
+
*/
|
|
51
|
+
export declare function findSkillFiles(directory: string): string[];
|
|
52
|
+
/**
|
|
53
|
+
* Load all skills from search paths
|
|
54
|
+
*/
|
|
55
|
+
export declare function loadAllSkills(projectRoot?: string): LoadedSkill[];
|
|
56
|
+
/**
|
|
57
|
+
* Find skills that match a query or context
|
|
58
|
+
*/
|
|
59
|
+
export declare function findMatchingSkills(skills: LoadedSkill[], query: string): LoadedSkill[];
|
|
60
|
+
/**
|
|
61
|
+
* Format skills for inclusion in agent prompt
|
|
62
|
+
*/
|
|
63
|
+
export declare function formatSkillsForPrompt(skills: LoadedSkill[]): string;
|
|
64
|
+
/**
|
|
65
|
+
* Get skills summary for status display
|
|
66
|
+
*/
|
|
67
|
+
export declare function getSkillsSummary(skills: LoadedSkill[]): string;
|
|
68
|
+
/**
|
|
69
|
+
* Skills Manager class for stateful skill management
|
|
70
|
+
*/
|
|
71
|
+
export declare class SkillsManager {
|
|
72
|
+
private skills;
|
|
73
|
+
private projectRoot;
|
|
74
|
+
constructor(projectRoot?: string);
|
|
75
|
+
/**
|
|
76
|
+
* Load all available skills
|
|
77
|
+
*/
|
|
78
|
+
load(): LoadedSkill[];
|
|
79
|
+
/**
|
|
80
|
+
* Get all loaded skills
|
|
81
|
+
*/
|
|
82
|
+
getAll(): LoadedSkill[];
|
|
83
|
+
/**
|
|
84
|
+
* Find skills matching a query
|
|
85
|
+
*/
|
|
86
|
+
find(query: string): LoadedSkill[];
|
|
87
|
+
/**
|
|
88
|
+
* Get skills formatted for prompt inclusion
|
|
89
|
+
*/
|
|
90
|
+
formatForPrompt(): string;
|
|
91
|
+
/**
|
|
92
|
+
* Get summary for status display
|
|
93
|
+
*/
|
|
94
|
+
getSummary(): string;
|
|
95
|
+
/**
|
|
96
|
+
* Get skill by name
|
|
97
|
+
*/
|
|
98
|
+
getByName(name: string): LoadedSkill | undefined;
|
|
99
|
+
/**
|
|
100
|
+
* Get skills by category
|
|
101
|
+
*/
|
|
102
|
+
getByCategory(category: string): LoadedSkill[];
|
|
103
|
+
/**
|
|
104
|
+
* Get skills by source
|
|
105
|
+
*/
|
|
106
|
+
getBySource(source: LoadedSkill['source']): LoadedSkill[];
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Create a skills manager instance
|
|
110
|
+
*/
|
|
111
|
+
export declare function createSkillsManager(projectRoot?: string): SkillsManager;
|
|
112
|
+
export default SkillsManager;
|
|
113
|
+
//# sourceMappingURL=skills-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-manager.d.ts","sourceRoot":"","sources":["../../src/utils/skills-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAC;CACzD;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,UAU9B,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CA6DpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,GAC5B,WAAW,GAAG,IAAI,CAsBpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CA+B1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,GAAE,MAAsB,GAAG,WAAW,EAAE,CAuChF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EAAE,EACrB,KAAK,EAAE,MAAM,GACZ,WAAW,EAAE,CA8Bf;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CA4BnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAe9D;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,GAAE,MAAsB;IAI/C;;OAEG;IACH,IAAI,IAAI,WAAW,EAAE;IAKrB;;OAEG;IACH,MAAM,IAAI,WAAW,EAAE;IAIvB;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;IAIlC;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAMhD;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAM9C;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,WAAW,EAAE;CAG1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa,CAEvE;AAED,eAAe,aAAa,CAAC"}
|