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,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress File Utilities
|
|
3
|
+
* Manages the claude-progress.txt file for session continuity.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
6
|
+
import { agentConfig } from "../config/agent-config.js";
|
|
7
|
+
/**
|
|
8
|
+
* Load the progress file content
|
|
9
|
+
*/
|
|
10
|
+
export function loadProgressFile() {
|
|
11
|
+
const path = agentConfig.paths.progressFile;
|
|
12
|
+
if (!existsSync(path)) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
return readFileSync(path, "utf-8");
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
console.error("Error loading progress file:", error);
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create a new progress file from template
|
|
25
|
+
*/
|
|
26
|
+
export function createProgressFile(projectName, projectDescription) {
|
|
27
|
+
const path = agentConfig.paths.progressFile;
|
|
28
|
+
const now = new Date().toISOString();
|
|
29
|
+
const content = `================================================================================
|
|
30
|
+
PROJECT: ${projectName}
|
|
31
|
+
CREATED: ${now}
|
|
32
|
+
LAST SESSION: ${now}
|
|
33
|
+
================================================================================
|
|
34
|
+
|
|
35
|
+
## PROJECT OVERVIEW
|
|
36
|
+
${projectDescription}
|
|
37
|
+
|
|
38
|
+
## CURRENT STATE
|
|
39
|
+
- Total Features: 0
|
|
40
|
+
- Completed: 0
|
|
41
|
+
- Remaining: 0
|
|
42
|
+
- Last Feature Worked On: None
|
|
43
|
+
|
|
44
|
+
## SESSION LOG
|
|
45
|
+
### ${now}
|
|
46
|
+
- Agent: initializer
|
|
47
|
+
- Actions taken:
|
|
48
|
+
* Created project environment
|
|
49
|
+
* Generated feature list
|
|
50
|
+
* Set up progress tracking
|
|
51
|
+
- Features completed: []
|
|
52
|
+
- Issues encountered: []
|
|
53
|
+
- Next steps:
|
|
54
|
+
* Begin implementing features
|
|
55
|
+
* Start with highest priority items
|
|
56
|
+
|
|
57
|
+
## KNOWN ISSUES
|
|
58
|
+
- None yet
|
|
59
|
+
|
|
60
|
+
## NOTES FOR NEXT SESSION
|
|
61
|
+
- Project has been initialized
|
|
62
|
+
- All features are marked as failing initially
|
|
63
|
+
- Use browser automation for testing
|
|
64
|
+
================================================================================
|
|
65
|
+
`;
|
|
66
|
+
try {
|
|
67
|
+
writeFileSync(path, content, "utf-8");
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.error("Error creating progress file:", error);
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Append a session log entry to the progress file
|
|
77
|
+
*/
|
|
78
|
+
export function appendSessionLog(entry) {
|
|
79
|
+
const path = agentConfig.paths.progressFile;
|
|
80
|
+
if (!existsSync(path)) {
|
|
81
|
+
console.error("Progress file does not exist");
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
const logContent = `
|
|
85
|
+
### ${entry.timestamp}
|
|
86
|
+
- Agent: ${entry.agentType}
|
|
87
|
+
- Actions taken:
|
|
88
|
+
${entry.actions.map(a => ` * ${a}`).join("\n")}
|
|
89
|
+
- Features completed: [${entry.featuresCompleted.join(", ")}]
|
|
90
|
+
- Issues encountered: [${entry.issuesEncountered.join(", ")}]
|
|
91
|
+
- Next steps:
|
|
92
|
+
${entry.nextSteps.map(s => ` * ${s}`).join("\n")}
|
|
93
|
+
`;
|
|
94
|
+
try {
|
|
95
|
+
// Read current content
|
|
96
|
+
let content = readFileSync(path, "utf-8");
|
|
97
|
+
// Update LAST SESSION timestamp
|
|
98
|
+
content = content.replace(/LAST SESSION: .*/, `LAST SESSION: ${entry.timestamp}`);
|
|
99
|
+
// Find the SESSION LOG section and append
|
|
100
|
+
const sessionLogIndex = content.indexOf("## SESSION LOG");
|
|
101
|
+
if (sessionLogIndex !== -1) {
|
|
102
|
+
const nextSectionIndex = content.indexOf("\n## ", sessionLogIndex + 1);
|
|
103
|
+
if (nextSectionIndex !== -1) {
|
|
104
|
+
content =
|
|
105
|
+
content.slice(0, nextSectionIndex) +
|
|
106
|
+
logContent +
|
|
107
|
+
content.slice(nextSectionIndex);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// SESSION LOG is the last section, append before the closing line
|
|
111
|
+
const closingIndex = content.lastIndexOf("================================================================================");
|
|
112
|
+
if (closingIndex !== -1) {
|
|
113
|
+
content =
|
|
114
|
+
content.slice(0, closingIndex) +
|
|
115
|
+
logContent + "\n" +
|
|
116
|
+
content.slice(closingIndex);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
writeFileSync(path, content, "utf-8");
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error("Error appending session log:", error);
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Update the current state section in the progress file
|
|
130
|
+
*/
|
|
131
|
+
export function updateCurrentState(totalFeatures, completed, lastFeature) {
|
|
132
|
+
const path = agentConfig.paths.progressFile;
|
|
133
|
+
if (!existsSync(path)) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
let content = readFileSync(path, "utf-8");
|
|
138
|
+
// Update the CURRENT STATE section
|
|
139
|
+
const stateRegex = /## CURRENT STATE[\s\S]*?(?=\n## )/;
|
|
140
|
+
const newState = `## CURRENT STATE
|
|
141
|
+
- Total Features: ${totalFeatures}
|
|
142
|
+
- Completed: ${completed}
|
|
143
|
+
- Remaining: ${totalFeatures - completed}
|
|
144
|
+
- Last Feature Worked On: ${lastFeature || "None"}
|
|
145
|
+
|
|
146
|
+
`;
|
|
147
|
+
content = content.replace(stateRegex, newState);
|
|
148
|
+
writeFileSync(path, content, "utf-8");
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
console.error("Error updating current state:", error);
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Add a known issue to the progress file
|
|
158
|
+
*/
|
|
159
|
+
export function addKnownIssue(issue) {
|
|
160
|
+
const path = agentConfig.paths.progressFile;
|
|
161
|
+
if (!existsSync(path)) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
let content = readFileSync(path, "utf-8");
|
|
166
|
+
// Find KNOWN ISSUES section
|
|
167
|
+
const issuesIndex = content.indexOf("## KNOWN ISSUES");
|
|
168
|
+
if (issuesIndex !== -1) {
|
|
169
|
+
const nextSectionIndex = content.indexOf("\n## ", issuesIndex + 1);
|
|
170
|
+
const insertPoint = nextSectionIndex !== -1
|
|
171
|
+
? nextSectionIndex
|
|
172
|
+
: content.lastIndexOf("================================================================================");
|
|
173
|
+
content =
|
|
174
|
+
content.slice(0, insertPoint) +
|
|
175
|
+
`- ${issue}\n` +
|
|
176
|
+
content.slice(insertPoint);
|
|
177
|
+
}
|
|
178
|
+
writeFileSync(path, content, "utf-8");
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.error("Error adding known issue:", error);
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get a summary of the last session from the progress file
|
|
188
|
+
*/
|
|
189
|
+
export function getLastSessionSummary() {
|
|
190
|
+
const content = loadProgressFile();
|
|
191
|
+
if (!content) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
// Extract the most recent session log entry
|
|
195
|
+
const sessionLogMatch = content.match(/### (\d{4}-\d{2}-\d{2}T[\d:.]+Z)[\s\S]*?(?=\n### |\n## |$)/);
|
|
196
|
+
if (sessionLogMatch) {
|
|
197
|
+
return sessionLogMatch[0];
|
|
198
|
+
}
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
export default {
|
|
202
|
+
loadProgressFile,
|
|
203
|
+
createProgressFile,
|
|
204
|
+
appendSessionLog,
|
|
205
|
+
updateCurrentState,
|
|
206
|
+
addKnownIssue,
|
|
207
|
+
getLastSessionSummary,
|
|
208
|
+
};
|
|
209
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,IAAI,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAcxD;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC;IAE5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,kBAA0B;IAChF,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,OAAO,GAAG;WACP,WAAW;WACX,GAAG;gBACE,GAAG;;;;EAIjB,kBAAkB;;;;;;;;;MASd,GAAG;;;;;;;;;;;;;;;;;;;;CAoBR,CAAC;IAEA,IAAI,CAAC;QACH,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IACrD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC;IAE5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG;MACf,KAAK,CAAC,SAAS;WACV,KAAK,CAAC,SAAS;;EAExB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;yBACtB,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;yBAClC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;;EAEzD,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAChD,CAAC;IAEA,IAAI,CAAC;QACH,uBAAuB;QACvB,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE1C,gCAAgC;QAChC,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,kBAAkB,EAClB,iBAAiB,KAAK,CAAC,SAAS,EAAE,CACnC,CAAC;QAEF,0CAA0C;QAC1C,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC1D,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3B,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;YACvE,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC5B,OAAO;oBACL,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC;wBAClC,UAAU;wBACV,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,kEAAkE;gBAClE,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,kFAAkF,CAAC,CAAC;gBAC7H,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;oBACxB,OAAO;wBACL,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;4BAC9B,UAAU,GAAG,IAAI;4BACjB,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;QAED,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,aAAqB,EACrB,SAAiB,EACjB,WAA0B;IAE1B,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC;IAE5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE1C,mCAAmC;QACnC,MAAM,UAAU,GAAG,mCAAmC,CAAC;QACvD,MAAM,QAAQ,GAAG;oBACD,aAAa;eAClB,SAAS;eACT,aAAa,GAAG,SAAS;4BACZ,WAAW,IAAI,MAAM;;CAEhD,CAAC;QAEE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAChD,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC;IAE5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE1C,4BAA4B;QAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACvD,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;YACnE,MAAM,WAAW,GAAG,gBAAgB,KAAK,CAAC,CAAC;gBACzC,CAAC,CAAC,gBAAgB;gBAClB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,kFAAkF,CAAC,CAAC;YAE5G,OAAO;gBACL,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;oBAC7B,KAAK,KAAK,IAAI;oBACd,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4CAA4C;IAC5C,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAEpG,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,eAAe;IACb,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,aAAa;IACb,qBAAqB;CACtB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Detection Utilities
|
|
3
|
+
* Automatically detects project type, framework, and technology stack.
|
|
4
|
+
* Enables the agent to adapt its behavior based on the project context.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Detected project information
|
|
8
|
+
*/
|
|
9
|
+
export interface ProjectInfo {
|
|
10
|
+
type: "react" | "nextjs" | "vue" | "svelte" | "angular" | "vanilla" | "unknown";
|
|
11
|
+
framework: string | null;
|
|
12
|
+
packageManager: "npm" | "yarn" | "pnpm" | "bun" | "unknown";
|
|
13
|
+
language: "typescript" | "javascript" | "both";
|
|
14
|
+
buildTool: "vite" | "webpack" | "rollup" | "turbopack" | "unknown";
|
|
15
|
+
testingFramework: "vitest" | "jest" | "playwright" | "cypress" | "none" | "unknown";
|
|
16
|
+
backend: "supabase" | "express" | "fastify" | "nextjs-api" | "none" | "unknown";
|
|
17
|
+
database: "supabase" | "postgres" | "mysql" | "mongodb" | "sqlite" | "none" | "unknown";
|
|
18
|
+
styling: "tailwind" | "css-modules" | "styled-components" | "emotion" | "sass" | "css" | "unknown";
|
|
19
|
+
monorepo: boolean;
|
|
20
|
+
rootPath: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Detect project information
|
|
24
|
+
*/
|
|
25
|
+
export declare function detectProject(): ProjectInfo;
|
|
26
|
+
/**
|
|
27
|
+
* Get project-specific recommendations
|
|
28
|
+
*/
|
|
29
|
+
export declare function getProjectRecommendations(info: ProjectInfo): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Generate a project summary string for agent prompts
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateProjectSummary(): string;
|
|
34
|
+
declare const _default: {
|
|
35
|
+
detectProject: typeof detectProject;
|
|
36
|
+
getProjectRecommendations: typeof getProjectRecommendations;
|
|
37
|
+
generateProjectSummary: typeof generateProjectSummary;
|
|
38
|
+
};
|
|
39
|
+
export default _default;
|
|
40
|
+
//# sourceMappingURL=project-detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-detection.d.ts","sourceRoot":"","sources":["../../src/utils/project-detection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAChF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAC5D,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,MAAM,CAAC;IAC/C,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IACnE,gBAAgB,EAAE,QAAQ,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACpF,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;IAChF,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACxF,OAAO,EAAE,UAAU,GAAG,aAAa,GAAG,mBAAmB,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IACnG,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAwID;;GAEG;AACH,wBAAgB,aAAa,IAAI,WAAW,CA+B3C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAoBrE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAuB/C;;;;;;AAED,wBAIE"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Detection Utilities
|
|
3
|
+
* Automatically detects project type, framework, and technology stack.
|
|
4
|
+
* Enables the agent to adapt its behavior based on the project context.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, readFileSync } from "fs";
|
|
7
|
+
import { resolve, join } from "path";
|
|
8
|
+
import { agentConfig } from "../config/agent-config.js";
|
|
9
|
+
/**
|
|
10
|
+
* Detect project type from package.json
|
|
11
|
+
*/
|
|
12
|
+
function detectFromPackageJson(packageJsonPath) {
|
|
13
|
+
const info = {};
|
|
14
|
+
try {
|
|
15
|
+
const content = readFileSync(packageJsonPath, "utf-8");
|
|
16
|
+
const pkg = JSON.parse(content);
|
|
17
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
18
|
+
// Detect framework
|
|
19
|
+
if (deps["next"]) {
|
|
20
|
+
info.type = "nextjs";
|
|
21
|
+
info.framework = "Next.js";
|
|
22
|
+
info.buildTool = "turbopack"; // Next.js 13+ uses Turbopack
|
|
23
|
+
}
|
|
24
|
+
else if (deps["react"]) {
|
|
25
|
+
info.type = "react";
|
|
26
|
+
info.framework = "React";
|
|
27
|
+
}
|
|
28
|
+
else if (deps["vue"]) {
|
|
29
|
+
info.type = "vue";
|
|
30
|
+
info.framework = "Vue.js";
|
|
31
|
+
}
|
|
32
|
+
else if (deps["svelte"]) {
|
|
33
|
+
info.type = "svelte";
|
|
34
|
+
info.framework = "Svelte";
|
|
35
|
+
}
|
|
36
|
+
else if (deps["@angular/core"]) {
|
|
37
|
+
info.type = "angular";
|
|
38
|
+
info.framework = "Angular";
|
|
39
|
+
}
|
|
40
|
+
// Detect build tool
|
|
41
|
+
if (deps["vite"]) {
|
|
42
|
+
info.buildTool = "vite";
|
|
43
|
+
}
|
|
44
|
+
else if (deps["webpack"]) {
|
|
45
|
+
info.buildTool = "webpack";
|
|
46
|
+
}
|
|
47
|
+
else if (deps["rollup"]) {
|
|
48
|
+
info.buildTool = "rollup";
|
|
49
|
+
}
|
|
50
|
+
// Detect testing framework
|
|
51
|
+
if (deps["vitest"]) {
|
|
52
|
+
info.testingFramework = "vitest";
|
|
53
|
+
}
|
|
54
|
+
else if (deps["jest"]) {
|
|
55
|
+
info.testingFramework = "jest";
|
|
56
|
+
}
|
|
57
|
+
else if (deps["@playwright/test"]) {
|
|
58
|
+
info.testingFramework = "playwright";
|
|
59
|
+
}
|
|
60
|
+
else if (deps["cypress"]) {
|
|
61
|
+
info.testingFramework = "cypress";
|
|
62
|
+
}
|
|
63
|
+
// Detect backend
|
|
64
|
+
if (deps["@supabase/supabase-js"]) {
|
|
65
|
+
info.backend = "supabase";
|
|
66
|
+
}
|
|
67
|
+
else if (deps["express"]) {
|
|
68
|
+
info.backend = "express";
|
|
69
|
+
}
|
|
70
|
+
else if (deps["fastify"]) {
|
|
71
|
+
info.backend = "fastify";
|
|
72
|
+
}
|
|
73
|
+
else if (info.type === "nextjs") {
|
|
74
|
+
info.backend = "nextjs-api";
|
|
75
|
+
}
|
|
76
|
+
// Detect database
|
|
77
|
+
if (deps["@supabase/supabase-js"]) {
|
|
78
|
+
info.database = "supabase";
|
|
79
|
+
}
|
|
80
|
+
else if (deps["pg"] || deps["postgres"]) {
|
|
81
|
+
info.database = "postgres";
|
|
82
|
+
}
|
|
83
|
+
else if (deps["mysql2"] || deps["mysql"]) {
|
|
84
|
+
info.database = "mysql";
|
|
85
|
+
}
|
|
86
|
+
else if (deps["mongodb"]) {
|
|
87
|
+
info.database = "mongodb";
|
|
88
|
+
}
|
|
89
|
+
else if (deps["better-sqlite3"] || deps["sqlite3"]) {
|
|
90
|
+
info.database = "sqlite";
|
|
91
|
+
}
|
|
92
|
+
// Detect styling
|
|
93
|
+
if (deps["tailwindcss"]) {
|
|
94
|
+
info.styling = "tailwind";
|
|
95
|
+
}
|
|
96
|
+
else if (deps["styled-components"]) {
|
|
97
|
+
info.styling = "styled-components";
|
|
98
|
+
}
|
|
99
|
+
else if (deps["@emotion/react"] || deps["@emotion/styled"]) {
|
|
100
|
+
info.styling = "emotion";
|
|
101
|
+
}
|
|
102
|
+
else if (deps["sass"] || deps["node-sass"]) {
|
|
103
|
+
info.styling = "sass";
|
|
104
|
+
}
|
|
105
|
+
else if (existsSync(resolve(agentConfig.paths.projectRoot, "src", "index.module.css"))) {
|
|
106
|
+
info.styling = "css-modules";
|
|
107
|
+
}
|
|
108
|
+
// Detect language
|
|
109
|
+
const hasTS = existsSync(resolve(agentConfig.paths.projectRoot, "tsconfig.json"));
|
|
110
|
+
const hasJS = existsSync(resolve(agentConfig.paths.projectRoot, "jsconfig.json")) ||
|
|
111
|
+
deps["@babel/core"] !== undefined;
|
|
112
|
+
if (hasTS && hasJS) {
|
|
113
|
+
info.language = "both";
|
|
114
|
+
}
|
|
115
|
+
else if (hasTS) {
|
|
116
|
+
info.language = "typescript";
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
info.language = "javascript";
|
|
120
|
+
}
|
|
121
|
+
// Detect monorepo
|
|
122
|
+
info.monorepo = existsSync(resolve(agentConfig.paths.projectRoot, "pnpm-workspace.yaml")) ||
|
|
123
|
+
existsSync(resolve(agentConfig.paths.projectRoot, "lerna.json")) ||
|
|
124
|
+
existsSync(resolve(agentConfig.paths.projectRoot, "turbo.json")) ||
|
|
125
|
+
(pkg.workspaces !== undefined);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
// Silently fail
|
|
129
|
+
}
|
|
130
|
+
return info;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Detect package manager from lock files
|
|
134
|
+
*/
|
|
135
|
+
function detectPackageManager() {
|
|
136
|
+
const root = agentConfig.paths.projectRoot;
|
|
137
|
+
if (existsSync(join(root, "pnpm-lock.yaml"))) {
|
|
138
|
+
return "pnpm";
|
|
139
|
+
}
|
|
140
|
+
if (existsSync(join(root, "yarn.lock"))) {
|
|
141
|
+
return "yarn";
|
|
142
|
+
}
|
|
143
|
+
if (existsSync(join(root, "bun.lockb"))) {
|
|
144
|
+
return "bun";
|
|
145
|
+
}
|
|
146
|
+
if (existsSync(join(root, "package-lock.json"))) {
|
|
147
|
+
return "npm";
|
|
148
|
+
}
|
|
149
|
+
return "unknown";
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Detect project information
|
|
153
|
+
*/
|
|
154
|
+
export function detectProject() {
|
|
155
|
+
const root = agentConfig.paths.projectRoot;
|
|
156
|
+
const packageJsonPath = resolve(root, "package.json");
|
|
157
|
+
const defaults = {
|
|
158
|
+
type: "unknown",
|
|
159
|
+
framework: null,
|
|
160
|
+
packageManager: "unknown",
|
|
161
|
+
language: "javascript",
|
|
162
|
+
buildTool: "unknown",
|
|
163
|
+
testingFramework: "unknown",
|
|
164
|
+
backend: "unknown",
|
|
165
|
+
database: "unknown",
|
|
166
|
+
styling: "unknown",
|
|
167
|
+
monorepo: false,
|
|
168
|
+
rootPath: root,
|
|
169
|
+
};
|
|
170
|
+
if (!existsSync(packageJsonPath)) {
|
|
171
|
+
return defaults;
|
|
172
|
+
}
|
|
173
|
+
const detected = detectFromPackageJson(packageJsonPath);
|
|
174
|
+
const packageManager = detectPackageManager();
|
|
175
|
+
return {
|
|
176
|
+
...defaults,
|
|
177
|
+
...detected,
|
|
178
|
+
packageManager,
|
|
179
|
+
rootPath: root,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get project-specific recommendations
|
|
184
|
+
*/
|
|
185
|
+
export function getProjectRecommendations(info) {
|
|
186
|
+
const recommendations = [];
|
|
187
|
+
if (info.type === "unknown") {
|
|
188
|
+
recommendations.push("Project type could not be detected - ensure package.json exists");
|
|
189
|
+
}
|
|
190
|
+
if (info.testingFramework === "none" || info.testingFramework === "unknown") {
|
|
191
|
+
recommendations.push("Consider adding a testing framework (Vitest, Jest, or Playwright)");
|
|
192
|
+
}
|
|
193
|
+
if (info.language === "javascript" && info.type !== "unknown") {
|
|
194
|
+
recommendations.push("Consider migrating to TypeScript for better type safety");
|
|
195
|
+
}
|
|
196
|
+
if (info.buildTool === "unknown" && info.type !== "vanilla") {
|
|
197
|
+
recommendations.push("Build tool not detected - ensure build configuration exists");
|
|
198
|
+
}
|
|
199
|
+
return recommendations;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Generate a project summary string for agent prompts
|
|
203
|
+
*/
|
|
204
|
+
export function generateProjectSummary() {
|
|
205
|
+
const info = detectProject();
|
|
206
|
+
const recommendations = getProjectRecommendations(info);
|
|
207
|
+
let summary = "\n## PROJECT DETECTION\n\n";
|
|
208
|
+
summary += `Type: ${info.type}${info.framework ? ` (${info.framework})` : ""}\n`;
|
|
209
|
+
summary += `Package Manager: ${info.packageManager}\n`;
|
|
210
|
+
summary += `Language: ${info.language}\n`;
|
|
211
|
+
summary += `Build Tool: ${info.buildTool}\n`;
|
|
212
|
+
summary += `Testing: ${info.testingFramework}\n`;
|
|
213
|
+
summary += `Backend: ${info.backend}\n`;
|
|
214
|
+
summary += `Database: ${info.database}\n`;
|
|
215
|
+
summary += `Styling: ${info.styling}\n`;
|
|
216
|
+
summary += `Monorepo: ${info.monorepo ? "Yes" : "No"}\n`;
|
|
217
|
+
if (recommendations.length > 0) {
|
|
218
|
+
summary += "\n💡 Recommendations:\n";
|
|
219
|
+
recommendations.forEach(r => {
|
|
220
|
+
summary += ` - ${r}\n`;
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
return summary;
|
|
224
|
+
}
|
|
225
|
+
export default {
|
|
226
|
+
detectProject,
|
|
227
|
+
getProjectRecommendations,
|
|
228
|
+
generateProjectSummary,
|
|
229
|
+
};
|
|
230
|
+
//# sourceMappingURL=project-detection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-detection.js","sourceRoot":"","sources":["../../src/utils/project-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
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
|
+
/**
|
|
9
|
+
* Session state for persistence
|
|
10
|
+
*/
|
|
11
|
+
export interface SessionState {
|
|
12
|
+
session_id: string;
|
|
13
|
+
parent_session_id: string | null;
|
|
14
|
+
created_at: string;
|
|
15
|
+
last_active: string;
|
|
16
|
+
status: 'active' | 'completed' | 'interrupted' | 'forked';
|
|
17
|
+
current_feature: string | null;
|
|
18
|
+
completed_features: string[];
|
|
19
|
+
failed_features: string[];
|
|
20
|
+
context_summary: string;
|
|
21
|
+
important_decisions: string[];
|
|
22
|
+
tools_initialized: string[];
|
|
23
|
+
mcp_servers_active: string[];
|
|
24
|
+
checkpoints: CheckpointInfo[];
|
|
25
|
+
current_checkpoint: string | null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Checkpoint information
|
|
29
|
+
*/
|
|
30
|
+
export interface CheckpointInfo {
|
|
31
|
+
id: string;
|
|
32
|
+
created_at: string;
|
|
33
|
+
description: string;
|
|
34
|
+
feature_id: string | null;
|
|
35
|
+
files_snapshot: FileSnapshot[];
|
|
36
|
+
can_restore: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* File snapshot for checkpointing
|
|
40
|
+
*/
|
|
41
|
+
export interface FileSnapshot {
|
|
42
|
+
path: string;
|
|
43
|
+
hash: string;
|
|
44
|
+
size: number;
|
|
45
|
+
backed_up: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate unique session ID
|
|
49
|
+
*/
|
|
50
|
+
export declare function generateSessionId(): string;
|
|
51
|
+
/**
|
|
52
|
+
* Generate checkpoint ID
|
|
53
|
+
*/
|
|
54
|
+
export declare function generateCheckpointId(): string;
|
|
55
|
+
/**
|
|
56
|
+
* Create new session state
|
|
57
|
+
*/
|
|
58
|
+
export declare function createSessionState(parentSessionId?: string | null): SessionState;
|
|
59
|
+
/**
|
|
60
|
+
* Save session state
|
|
61
|
+
*/
|
|
62
|
+
export declare function saveSessionState(agentDir: string, state: SessionState): void;
|
|
63
|
+
/**
|
|
64
|
+
* Load session state
|
|
65
|
+
*/
|
|
66
|
+
export declare function loadSessionState(agentDir: string): SessionState | null;
|
|
67
|
+
/**
|
|
68
|
+
* Load specific session by ID
|
|
69
|
+
*/
|
|
70
|
+
export declare function loadSessionById(agentDir: string, sessionId: string): SessionState | null;
|
|
71
|
+
/**
|
|
72
|
+
* Fork session for A/B testing
|
|
73
|
+
*/
|
|
74
|
+
export declare function forkSession(agentDir: string, parentState: SessionState): SessionState;
|
|
75
|
+
/**
|
|
76
|
+
* List all sessions
|
|
77
|
+
*/
|
|
78
|
+
export declare function listSessions(agentDir: string): SessionState[];
|
|
79
|
+
/**
|
|
80
|
+
* Create checkpoint
|
|
81
|
+
*/
|
|
82
|
+
export declare function createCheckpoint(agentDir: string, projectRoot: string, description: string, featureId?: string | null): CheckpointInfo;
|
|
83
|
+
/**
|
|
84
|
+
* Restore checkpoint
|
|
85
|
+
*/
|
|
86
|
+
export declare function restoreCheckpoint(agentDir: string, projectRoot: string, checkpointId: string): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* List checkpoints
|
|
89
|
+
*/
|
|
90
|
+
export declare function listCheckpoints(agentDir: string): CheckpointInfo[];
|
|
91
|
+
/**
|
|
92
|
+
* Clean old checkpoints (keep last N)
|
|
93
|
+
*/
|
|
94
|
+
export declare function cleanOldCheckpoints(agentDir: string, keepCount?: number): void;
|
|
95
|
+
/**
|
|
96
|
+
* Get session resume options for SDK
|
|
97
|
+
*/
|
|
98
|
+
export declare function getResumeOptions(sessionState: SessionState): object;
|
|
99
|
+
/**
|
|
100
|
+
* Generate session summary for context preservation
|
|
101
|
+
*/
|
|
102
|
+
export declare function generateSessionSummary(state: SessionState): string;
|
|
103
|
+
declare const _default: {
|
|
104
|
+
generateSessionId: typeof generateSessionId;
|
|
105
|
+
createSessionState: typeof createSessionState;
|
|
106
|
+
saveSessionState: typeof saveSessionState;
|
|
107
|
+
loadSessionState: typeof loadSessionState;
|
|
108
|
+
loadSessionById: typeof loadSessionById;
|
|
109
|
+
forkSession: typeof forkSession;
|
|
110
|
+
listSessions: typeof listSessions;
|
|
111
|
+
createCheckpoint: typeof createCheckpoint;
|
|
112
|
+
restoreCheckpoint: typeof restoreCheckpoint;
|
|
113
|
+
listCheckpoints: typeof listCheckpoints;
|
|
114
|
+
cleanOldCheckpoints: typeof cleanOldCheckpoints;
|
|
115
|
+
getResumeOptions: typeof getResumeOptions;
|
|
116
|
+
generateSessionSummary: typeof generateSessionSummary;
|
|
117
|
+
};
|
|
118
|
+
export default _default;
|
|
119
|
+
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/utils/session-manager.ts"],"names":[],"mappings":"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"}
|