dev3000 0.0.130 → 0.0.134
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/bin/dev3000 +90 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +216 -51
- package/dist/cli.js.map +1 -1
- package/dist/commands/cloud-fix.js +8 -8
- package/dist/commands/cloud-fix.js.map +1 -1
- package/dist/components/AgentSelector.d.ts +12 -0
- package/dist/components/AgentSelector.d.ts.map +1 -0
- package/dist/components/AgentSelector.js +99 -0
- package/dist/components/AgentSelector.js.map +1 -0
- package/dist/components/SkillSelector.d.ts +9 -0
- package/dist/components/SkillSelector.d.ts.map +1 -0
- package/dist/components/SkillSelector.js +70 -0
- package/dist/components/SkillSelector.js.map +1 -0
- package/dist/dev-environment.d.ts +38 -0
- package/dist/dev-environment.d.ts.map +1 -1
- package/dist/dev-environment.js +350 -116
- package/dist/dev-environment.js.map +1 -1
- package/dist/src/tui-interface-impl.tsx +36 -22
- package/dist/tui-interface-impl.d.ts +10 -6
- package/dist/tui-interface-impl.d.ts.map +1 -1
- package/dist/tui-interface-impl.js +24 -16
- package/dist/tui-interface-impl.js.map +1 -1
- package/dist/tui-interface.d.ts +11 -7
- package/dist/tui-interface.d.ts.map +1 -1
- package/dist/tui-interface.js +6 -6
- package/dist/tui-interface.js.map +1 -1
- package/dist/utils/agent-selection.d.ts +24 -0
- package/dist/utils/agent-selection.d.ts.map +1 -0
- package/dist/utils/agent-selection.js +34 -0
- package/dist/utils/agent-selection.js.map +1 -0
- package/dist/utils/project-name.d.ts +6 -0
- package/dist/utils/project-name.d.ts.map +1 -1
- package/dist/utils/project-name.js +10 -0
- package/dist/utils/project-name.js.map +1 -1
- package/dist/utils/skill-installer.d.ts +29 -0
- package/dist/utils/skill-installer.d.ts.map +1 -0
- package/dist/utils/skill-installer.js +185 -0
- package/dist/utils/skill-installer.js.map +1 -0
- package/dist/utils/tmux-helpers.d.ts +35 -0
- package/dist/utils/tmux-helpers.d.ts.map +1 -0
- package/dist/utils/tmux-helpers.js +62 -0
- package/dist/utils/tmux-helpers.js.map +1 -0
- package/dist/utils/user-config.d.ts +6 -0
- package/dist/utils/user-config.d.ts.map +1 -1
- package/dist/utils/user-config.js +30 -5
- package/dist/utils/user-config.js.map +1 -1
- package/dist/utils/version-check.d.ts +10 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +60 -2
- package/dist/utils/version-check.js.map +1 -1
- package/mcp-server/.next/BUILD_ID +1 -1
- package/mcp-server/.next/build-manifest.json +2 -2
- package/mcp-server/.next/fallback-build-manifest.json +2 -2
- package/mcp-server/.next/next-minimal-server.js.nft.json +1 -1
- package/mcp-server/.next/next-server.js.nft.json +1 -1
- package/mcp-server/.next/prerender-manifest.json +3 -3
- package/mcp-server/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/_global-error.html +2 -2
- package/mcp-server/.next/server/app/_global-error.rsc +1 -1
- package/mcp-server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/mcp-server/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/mcp-server/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/mcp-server/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/mcp-server/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/mcp-server/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/_not-found.html +1 -1
- package/mcp-server/.next/server/app/_not-found.rsc +1 -1
- package/mcp-server/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/mcp-server/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/mcp-server/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/mcp-server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/mcp-server/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/mcp-server/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/mcp-server/.next/server/app/api/jank/[session]/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/logs/append/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/logs/head/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/logs/list/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/logs/rotate/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/logs/stream/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/logs/tail/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/orchestrator/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/screenshots/[filename]/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/screenshots/capture/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/screenshots/clear/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/screenshots/list/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/teams/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/tools/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/index.html +1 -1
- package/mcp-server/.next/server/app/index.rsc +1 -1
- package/mcp-server/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/mcp-server/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/mcp-server/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/mcp-server/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/mcp-server/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/mcp-server/.next/server/app/logs/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/mcp/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/video/[session]/page.js.nft.json +1 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__141a5bc7._.js.map +1 -1
- package/mcp-server/.next/server/pages/404.html +1 -1
- package/mcp-server/.next/server/pages/500.html +2 -2
- package/mcp-server/.next/server/server-reference-manifest.js +1 -1
- package/mcp-server/.next/server/server-reference-manifest.json +1 -1
- package/mcp-server/app/mcp/route.ts +2 -0
- package/package.json +11 -4
- package/src/tui-interface-impl.tsx +36 -22
- /package/mcp-server/.next/static/{YTIno5QuIO6mgeAWJ8zng → Fekb6bDxTd8hH8dFQNlIK}/_buildManifest.js +0 -0
- /package/mcp-server/.next/static/{YTIno5QuIO6mgeAWJ8zng → Fekb6bDxTd8hH8dFQNlIK}/_clientMiddlewareManifest.json +0 -0
- /package/mcp-server/.next/static/{YTIno5QuIO6mgeAWJ8zng → Fekb6bDxTd8hH8dFQNlIK}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { getProjectDir } from "./project-name.js";
|
|
4
|
+
const GITHUB_REPO = "vercel-labs/agent-skills";
|
|
5
|
+
const SKILLS_PATH = "dx/skills";
|
|
6
|
+
// Skills are installed to project's .claude/skills/ (where Claude Code expects them)
|
|
7
|
+
function getProjectSkillsDir() {
|
|
8
|
+
return path.join(process.cwd(), ".claude", "skills");
|
|
9
|
+
}
|
|
10
|
+
// Tracking data stored in ~/.d3k/{projectName}/skills.json
|
|
11
|
+
function getInstalledSkillsPath() {
|
|
12
|
+
return path.join(getProjectDir(), "skills.json");
|
|
13
|
+
}
|
|
14
|
+
export function loadInstalledSkills() {
|
|
15
|
+
const filePath = getInstalledSkillsPath();
|
|
16
|
+
if (!existsSync(filePath)) {
|
|
17
|
+
return { skills: {}, seenSkills: [] };
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const content = readFileSync(filePath, "utf-8");
|
|
21
|
+
return JSON.parse(content);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return { skills: {}, seenSkills: [] };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function saveInstalledSkills(data) {
|
|
28
|
+
const projectDir = getProjectDir();
|
|
29
|
+
if (!existsSync(projectDir)) {
|
|
30
|
+
mkdirSync(projectDir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
writeFileSync(getInstalledSkillsPath(), JSON.stringify(data, null, 2));
|
|
33
|
+
}
|
|
34
|
+
function parseSkillDescription(content) {
|
|
35
|
+
// Parse YAML frontmatter to extract description
|
|
36
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
37
|
+
if (!frontmatterMatch) {
|
|
38
|
+
return "";
|
|
39
|
+
}
|
|
40
|
+
const frontmatter = frontmatterMatch[1];
|
|
41
|
+
const descriptionMatch = frontmatter.match(/description:\s*(.+)/);
|
|
42
|
+
if (descriptionMatch) {
|
|
43
|
+
return descriptionMatch[1].trim();
|
|
44
|
+
}
|
|
45
|
+
return "";
|
|
46
|
+
}
|
|
47
|
+
export async function fetchAvailableSkills() {
|
|
48
|
+
try {
|
|
49
|
+
// Fetch list of skills from GitHub
|
|
50
|
+
const response = await fetch(`https://api.github.com/repos/${GITHUB_REPO}/contents/${SKILLS_PATH}`);
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
const items = (await response.json());
|
|
55
|
+
// Filter to only directories (actual skills, not .zip files)
|
|
56
|
+
const skillDirs = items.filter((item) => item.type === "dir");
|
|
57
|
+
// Fetch description for each skill
|
|
58
|
+
const skills = [];
|
|
59
|
+
for (const dir of skillDirs) {
|
|
60
|
+
try {
|
|
61
|
+
const skillMdUrl = `https://raw.githubusercontent.com/${GITHUB_REPO}/main/${dir.path}/SKILL.md`;
|
|
62
|
+
const skillMdResponse = await fetch(skillMdUrl);
|
|
63
|
+
let description = "";
|
|
64
|
+
if (skillMdResponse.ok) {
|
|
65
|
+
const content = await skillMdResponse.text();
|
|
66
|
+
description = parseSkillDescription(content);
|
|
67
|
+
}
|
|
68
|
+
skills.push({
|
|
69
|
+
name: dir.name,
|
|
70
|
+
description: description || `${dir.name} skill`,
|
|
71
|
+
path: dir.path,
|
|
72
|
+
sha: dir.sha,
|
|
73
|
+
isNew: false, // Will be set by getActionableSkills
|
|
74
|
+
isUpdate: false // Will be set by getActionableSkills
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Skip skills we can't fetch
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return skills;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Network error or API rate limit - return empty
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function getActionableSkills(available, installed) {
|
|
89
|
+
const actionable = [];
|
|
90
|
+
for (const skill of available) {
|
|
91
|
+
const installedInfo = installed.skills[skill.name];
|
|
92
|
+
const seenKey = `${skill.name}:${skill.sha}`;
|
|
93
|
+
if (!installedInfo) {
|
|
94
|
+
// New skill - check if user already skipped this version
|
|
95
|
+
if (!installed.seenSkills.includes(seenKey)) {
|
|
96
|
+
actionable.push({ ...skill, isNew: true, isUpdate: false });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else if (installedInfo.sha !== skill.sha) {
|
|
100
|
+
// Update available - check if user already skipped this version
|
|
101
|
+
if (!installed.seenSkills.includes(seenKey)) {
|
|
102
|
+
actionable.push({ ...skill, isNew: false, isUpdate: true });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// If sha matches, skill is up to date - skip
|
|
106
|
+
}
|
|
107
|
+
return actionable;
|
|
108
|
+
}
|
|
109
|
+
async function downloadDirectory(dirPath, targetDir) {
|
|
110
|
+
const response = await fetch(`https://api.github.com/repos/${GITHUB_REPO}/contents/${dirPath}`);
|
|
111
|
+
if (!response.ok) {
|
|
112
|
+
throw new Error(`Failed to fetch directory: ${dirPath}`);
|
|
113
|
+
}
|
|
114
|
+
const items = (await response.json());
|
|
115
|
+
for (const item of items) {
|
|
116
|
+
if (item.type === "file" && item.download_url) {
|
|
117
|
+
// Download file
|
|
118
|
+
const fileResponse = await fetch(item.download_url);
|
|
119
|
+
if (!fileResponse.ok) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const content = await fileResponse.text();
|
|
123
|
+
const filePath = path.join(targetDir, item.name);
|
|
124
|
+
writeFileSync(filePath, content);
|
|
125
|
+
}
|
|
126
|
+
else if (item.type === "dir") {
|
|
127
|
+
// Create subdirectory and recurse
|
|
128
|
+
const subDir = path.join(targetDir, item.name);
|
|
129
|
+
if (!existsSync(subDir)) {
|
|
130
|
+
mkdirSync(subDir, { recursive: true });
|
|
131
|
+
}
|
|
132
|
+
await downloadDirectory(item.path, subDir);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export async function installSkill(skill) {
|
|
137
|
+
const skillDir = path.join(getProjectSkillsDir(), skill.name);
|
|
138
|
+
// Create skill directory
|
|
139
|
+
if (!existsSync(skillDir)) {
|
|
140
|
+
mkdirSync(skillDir, { recursive: true });
|
|
141
|
+
}
|
|
142
|
+
// Download all files recursively
|
|
143
|
+
await downloadDirectory(skill.path, skillDir);
|
|
144
|
+
// Update installed.json
|
|
145
|
+
const installed = loadInstalledSkills();
|
|
146
|
+
installed.skills[skill.name] = {
|
|
147
|
+
installedAt: new Date().toISOString(),
|
|
148
|
+
sha: skill.sha
|
|
149
|
+
};
|
|
150
|
+
// Remove from seenSkills if it was there (user chose to install after skipping)
|
|
151
|
+
installed.seenSkills = installed.seenSkills.filter((s) => !s.startsWith(`${skill.name}:`));
|
|
152
|
+
saveInstalledSkills(installed);
|
|
153
|
+
}
|
|
154
|
+
export function markSkillsAsSeen(skills) {
|
|
155
|
+
const installed = loadInstalledSkills();
|
|
156
|
+
for (const skill of skills) {
|
|
157
|
+
const seenKey = `${skill.name}:${skill.sha}`;
|
|
158
|
+
if (!installed.seenSkills.includes(seenKey)) {
|
|
159
|
+
installed.seenSkills.push(seenKey);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
saveInstalledSkills(installed);
|
|
163
|
+
}
|
|
164
|
+
export async function checkForNewSkills() {
|
|
165
|
+
const available = await fetchAvailableSkills();
|
|
166
|
+
const installed = loadInstalledSkills();
|
|
167
|
+
return getActionableSkills(available, installed);
|
|
168
|
+
}
|
|
169
|
+
export async function installSelectedSkills(skills, onProgress) {
|
|
170
|
+
const success = [];
|
|
171
|
+
const failed = [];
|
|
172
|
+
for (let i = 0; i < skills.length; i++) {
|
|
173
|
+
const skill = skills[i];
|
|
174
|
+
onProgress?.(skill, i, skills.length);
|
|
175
|
+
try {
|
|
176
|
+
await installSkill(skill);
|
|
177
|
+
success.push(skill.name);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
failed.push(skill.name);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return { success, failed };
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=skill-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-installer.js","sourceRoot":"","sources":["../../src/utils/skill-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper functions for tmux split-screen mode with --with-agent flag.
|
|
3
|
+
* Extracted for testability.
|
|
4
|
+
*/
|
|
5
|
+
export interface TmuxSessionConfig {
|
|
6
|
+
sessionName: string;
|
|
7
|
+
d3kCommand: string;
|
|
8
|
+
agentCommand: string;
|
|
9
|
+
agentDelay: number;
|
|
10
|
+
paneWidthPercent: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Generate tmux commands for setting up split-screen mode.
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateTmuxCommands(config: TmuxSessionConfig): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Generate a unique session name for tmux.
|
|
18
|
+
*/
|
|
19
|
+
export declare function generateSessionName(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Check if tmux is installed by looking for the binary.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isTmuxInstalled(): Promise<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* Get installation instructions for tmux based on platform.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getTmuxInstallInstructions(): string[];
|
|
28
|
+
/**
|
|
29
|
+
* Default configuration for tmux split-screen.
|
|
30
|
+
*/
|
|
31
|
+
export declare const DEFAULT_TMUX_CONFIG: {
|
|
32
|
+
agentDelay: number;
|
|
33
|
+
paneWidthPercent: number;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=tmux-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/tmux-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CA6BxE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAQxD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,EAAE,CAErD;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;CAG/B,CAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper functions for tmux split-screen mode with --with-agent flag.
|
|
3
|
+
* Extracted for testability.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Generate tmux commands for setting up split-screen mode.
|
|
7
|
+
*/
|
|
8
|
+
export function generateTmuxCommands(config) {
|
|
9
|
+
const { sessionName, d3kCommand, agentCommand, agentDelay, paneWidthPercent } = config;
|
|
10
|
+
const agentWithDelay = agentDelay > 0 ? `sleep ${agentDelay} && ${agentCommand}` : agentCommand;
|
|
11
|
+
return [
|
|
12
|
+
// Create new session with d3k in the first pane (will be right side)
|
|
13
|
+
`tmux new-session -d -s "${sessionName}" "${d3kCommand}"`,
|
|
14
|
+
// Increase scrollback buffer for more history
|
|
15
|
+
`tmux set-option -t "${sessionName}" history-limit 10000`,
|
|
16
|
+
// Hide the tmux status bar for a cleaner look
|
|
17
|
+
`tmux set-option -t "${sessionName}" status off`,
|
|
18
|
+
// When any pane exits, kill the entire session (so Ctrl-C in either pane exits both)
|
|
19
|
+
`tmux set-hook -t "${sessionName}" pane-exited "kill-session -t ${sessionName}"`,
|
|
20
|
+
// Make inactive pane borders subtle gray, active pane border purple to show focus
|
|
21
|
+
`tmux set-option -t "${sessionName}" pane-border-style "fg=#333333"`,
|
|
22
|
+
`tmux set-option -t "${sessionName}" pane-active-border-style "fg=#A18CE5"`,
|
|
23
|
+
// Split horizontally and run agent in the new pane (left side)
|
|
24
|
+
// -b puts the new pane before (left of) the current one
|
|
25
|
+
`tmux split-window -h -b -p ${paneWidthPercent} -t "${sessionName}" "${agentWithDelay}"`,
|
|
26
|
+
// Focus on the agent pane (left side, pane 0 after split with -b)
|
|
27
|
+
`tmux select-pane -t "${sessionName}:0.0"`
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Generate a unique session name for tmux.
|
|
32
|
+
*/
|
|
33
|
+
export function generateSessionName() {
|
|
34
|
+
return `d3k-${Date.now()}`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if tmux is installed by looking for the binary.
|
|
38
|
+
*/
|
|
39
|
+
export async function isTmuxInstalled() {
|
|
40
|
+
const { execSync } = await import("child_process");
|
|
41
|
+
try {
|
|
42
|
+
execSync("which tmux", { stdio: "ignore" });
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get installation instructions for tmux based on platform.
|
|
51
|
+
*/
|
|
52
|
+
export function getTmuxInstallInstructions() {
|
|
53
|
+
return ["macOS: brew install tmux", "Ubuntu: sudo apt install tmux", "Fedora: sudo dnf install tmux"];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Default configuration for tmux split-screen.
|
|
57
|
+
*/
|
|
58
|
+
export const DEFAULT_TMUX_CONFIG = {
|
|
59
|
+
agentDelay: 5, // 5 seconds for MCP to start
|
|
60
|
+
paneWidthPercent: 65 // Agent gets 65% of width
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=tmux-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux-helpers.js","sourceRoot":"","sources":["../../src/utils/tmux-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAyB;IAC5D,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAA;IAEtF,MAAM,cAAc,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,OAAO,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAA;IAE/F,OAAO;QACL,qEAAqE;QACrE,2BAA2B,WAAW,MAAM,UAAU,GAAG;QAEzD,8CAA8C;QAC9C,uBAAuB,WAAW,uBAAuB;QAEzD,8CAA8C;QAC9C,uBAAuB,WAAW,cAAc;QAEhD,qFAAqF;QACrF,qBAAqB,WAAW,kCAAkC,WAAW,GAAG;QAEhF,kFAAkF;QAClF,uBAAuB,WAAW,kCAAkC;QACpE,uBAAuB,WAAW,yCAAyC;QAE3E,+DAA+D;QAC/D,wDAAwD;QACxD,8BAA8B,gBAAgB,QAAQ,WAAW,MAAM,cAAc,GAAG;QAExF,kEAAkE;QAClE,wBAAwB,WAAW,OAAO;KAC3C,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;IAClD,IAAI,CAAC;QACH,QAAQ,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC3C,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,CAAC,2BAA2B,EAAE,+BAA+B,EAAE,+BAA+B,CAAC,CAAA;AACxG,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU,EAAE,CAAC,EAAE,6BAA6B;IAC5C,gBAAgB,EAAE,EAAE,CAAC,0BAA0B;CAChD,CAAA"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
export interface AgentConfig {
|
|
2
|
+
name: string;
|
|
3
|
+
command: string;
|
|
4
|
+
}
|
|
1
5
|
export interface UserConfig {
|
|
2
6
|
disableMcpConfigs?: string;
|
|
7
|
+
defaultAgent?: AgentConfig;
|
|
3
8
|
}
|
|
4
9
|
export declare function getUserConfigPath(): string;
|
|
5
10
|
export declare function loadUserConfig(): UserConfig;
|
|
11
|
+
export declare function saveUserConfig(updates: Partial<UserConfig>): void;
|
|
6
12
|
//# sourceMappingURL=user-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-config.d.ts","sourceRoot":"","sources":["../../src/utils/user-config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,wBAAgB,iBAAiB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"user-config.d.ts","sourceRoot":"","sources":["../../src/utils/user-config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,WAAW,CAAA;CAC3B;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAcD,wBAAgB,cAAc,IAAI,UAAU,CA0B3C;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAmBjE"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "fs";
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
2
2
|
import { homedir } from "os";
|
|
3
|
-
import { join } from "path";
|
|
3
|
+
import { dirname, join } from "path";
|
|
4
4
|
export function getUserConfigPath() {
|
|
5
|
-
|
|
6
|
-
return join(configHome, "dev3000", "config.json");
|
|
5
|
+
return join(homedir(), ".d3k", "config.json");
|
|
7
6
|
}
|
|
8
7
|
function normalizeDisableList(value) {
|
|
9
8
|
if (typeof value === "string" && value.trim().length > 0) {
|
|
@@ -23,10 +22,36 @@ export function loadUserConfig() {
|
|
|
23
22
|
const content = readFileSync(configPath, "utf-8");
|
|
24
23
|
const parsed = JSON.parse(content);
|
|
25
24
|
const disableList = normalizeDisableList(parsed.disableMcpConfigs);
|
|
26
|
-
|
|
25
|
+
const config = {};
|
|
26
|
+
if (disableList) {
|
|
27
|
+
config.disableMcpConfigs = disableList;
|
|
28
|
+
}
|
|
29
|
+
if (parsed.defaultAgent && typeof parsed.defaultAgent === "object") {
|
|
30
|
+
const agent = parsed.defaultAgent;
|
|
31
|
+
if (typeof agent.name === "string" && typeof agent.command === "string") {
|
|
32
|
+
config.defaultAgent = { name: agent.name, command: agent.command };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return config;
|
|
27
36
|
}
|
|
28
37
|
catch {
|
|
29
38
|
return {};
|
|
30
39
|
}
|
|
31
40
|
}
|
|
41
|
+
export function saveUserConfig(updates) {
|
|
42
|
+
const configPath = getUserConfigPath();
|
|
43
|
+
const configDir = dirname(configPath);
|
|
44
|
+
// Ensure directory exists
|
|
45
|
+
if (!existsSync(configDir)) {
|
|
46
|
+
mkdirSync(configDir, { recursive: true });
|
|
47
|
+
}
|
|
48
|
+
// Load existing config and merge
|
|
49
|
+
const existing = loadUserConfig();
|
|
50
|
+
const merged = { ...existing, ...updates };
|
|
51
|
+
// Remove defaultAgent if set to undefined (user chose "No agent")
|
|
52
|
+
if (updates.defaultAgent === undefined && "defaultAgent" in updates) {
|
|
53
|
+
delete merged.defaultAgent;
|
|
54
|
+
}
|
|
55
|
+
writeFileSync(configPath, JSON.stringify(merged, null, 2));
|
|
56
|
+
}
|
|
32
57
|
//# sourceMappingURL=user-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-config.js","sourceRoot":"","sources":["../../src/utils/user-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"user-config.js","sourceRoot":"","sources":["../../src/utils/user-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,11 +33,20 @@ export declare function isNewerVersion(current: string, latest: string): boolean
|
|
|
33
33
|
*/
|
|
34
34
|
export declare function checkForUpdates(): Promise<VersionInfo>;
|
|
35
35
|
/**
|
|
36
|
-
* Perform the upgrade
|
|
36
|
+
* Perform the upgrade (blocking, with stdio output)
|
|
37
37
|
*/
|
|
38
38
|
export declare function performUpgrade(): {
|
|
39
39
|
success: boolean;
|
|
40
40
|
error?: string;
|
|
41
41
|
};
|
|
42
|
+
/**
|
|
43
|
+
* Perform the upgrade asynchronously (non-blocking, for background updates)
|
|
44
|
+
* Returns the new version on success, or null on failure
|
|
45
|
+
*/
|
|
46
|
+
export declare function performUpgradeAsync(): Promise<{
|
|
47
|
+
success: boolean;
|
|
48
|
+
newVersion?: string;
|
|
49
|
+
error?: string;
|
|
50
|
+
}>;
|
|
42
51
|
export {};
|
|
43
52
|
//# sourceMappingURL=version-check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../src/utils/version-check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../src/utils/version-check.ts"],"names":[],"mappings":"AASA,UAAU,WAAW;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CAC/C;AAuDD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAe1C;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0CjE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAyDrE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CASxF;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CA4BvE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CAgB5D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAoBrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgD9G"}
|
|
@@ -53,6 +53,10 @@ function writeCachedVersion(version) {
|
|
|
53
53
|
* Get the current installed version of dev3000
|
|
54
54
|
*/
|
|
55
55
|
export function getCurrentVersion() {
|
|
56
|
+
// Check for compile-time injected version first (for standalone binaries)
|
|
57
|
+
if (typeof __D3K_VERSION__ !== "undefined") {
|
|
58
|
+
return __D3K_VERSION__;
|
|
59
|
+
}
|
|
56
60
|
try {
|
|
57
61
|
const currentFile = fileURLToPath(import.meta.url);
|
|
58
62
|
const packageRoot = dirname(dirname(dirname(currentFile))); // Go up from dist/utils to package root
|
|
@@ -216,15 +220,19 @@ export async function checkForUpdates() {
|
|
|
216
220
|
const currentVersion = getCurrentVersion();
|
|
217
221
|
const latestVersion = await fetchLatestVersion();
|
|
218
222
|
const packageManager = detectPackageManager();
|
|
223
|
+
// Don't auto-update if on a canary/prerelease version
|
|
224
|
+
// Canary users should upgrade manually
|
|
225
|
+
const isCanary = currentVersion.includes("-");
|
|
226
|
+
const updateAvailable = !isCanary && latestVersion !== null && isNewerVersion(currentVersion, latestVersion);
|
|
219
227
|
return {
|
|
220
228
|
currentVersion,
|
|
221
229
|
latestVersion,
|
|
222
|
-
updateAvailable
|
|
230
|
+
updateAvailable,
|
|
223
231
|
packageManager
|
|
224
232
|
};
|
|
225
233
|
}
|
|
226
234
|
/**
|
|
227
|
-
* Perform the upgrade
|
|
235
|
+
* Perform the upgrade (blocking, with stdio output)
|
|
228
236
|
*/
|
|
229
237
|
export function performUpgrade() {
|
|
230
238
|
const packageManager = detectPackageManager();
|
|
@@ -245,4 +253,54 @@ export function performUpgrade() {
|
|
|
245
253
|
};
|
|
246
254
|
}
|
|
247
255
|
}
|
|
256
|
+
/**
|
|
257
|
+
* Perform the upgrade asynchronously (non-blocking, for background updates)
|
|
258
|
+
* Returns the new version on success, or null on failure
|
|
259
|
+
*/
|
|
260
|
+
export async function performUpgradeAsync() {
|
|
261
|
+
const packageManager = detectPackageManager();
|
|
262
|
+
const command = getUpgradeCommand(packageManager);
|
|
263
|
+
return new Promise((resolve) => {
|
|
264
|
+
try {
|
|
265
|
+
// Run upgrade silently in background
|
|
266
|
+
execSync(command, {
|
|
267
|
+
stdio: "ignore",
|
|
268
|
+
timeout: 120000 // 2 minute timeout
|
|
269
|
+
});
|
|
270
|
+
// After upgrade, fetch the new version by checking what's installed
|
|
271
|
+
// Clear the module cache and re-read package.json isn't reliable after global install
|
|
272
|
+
// Instead, use npm/pnpm to query the installed version
|
|
273
|
+
try {
|
|
274
|
+
const versionCommand = packageManager === "pnpm"
|
|
275
|
+
? "pnpm list -g dev3000 --json"
|
|
276
|
+
: packageManager === "yarn"
|
|
277
|
+
? "yarn global list --json"
|
|
278
|
+
: "npm list -g dev3000 --json";
|
|
279
|
+
const result = execSync(versionCommand, { encoding: "utf8", timeout: 5000 });
|
|
280
|
+
const parsed = JSON.parse(result);
|
|
281
|
+
// Extract version based on package manager format
|
|
282
|
+
let newVersion;
|
|
283
|
+
if (packageManager === "pnpm") {
|
|
284
|
+
// pnpm format: array of packages
|
|
285
|
+
newVersion = parsed?.[0]?.dependencies?.dev3000?.version;
|
|
286
|
+
}
|
|
287
|
+
else if (packageManager === "npm") {
|
|
288
|
+
// npm format: { dependencies: { dev3000: { version: "x.x.x" } } }
|
|
289
|
+
newVersion = parsed?.dependencies?.dev3000?.version;
|
|
290
|
+
}
|
|
291
|
+
resolve({ success: true, newVersion });
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
// Couldn't get version, but upgrade succeeded
|
|
295
|
+
resolve({ success: true });
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
resolve({
|
|
300
|
+
success: false,
|
|
301
|
+
error: error instanceof Error ? error.message : "Unknown error during upgrade"
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
}
|
|
248
306
|
//# sourceMappingURL=version-check.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../src/utils/version-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../src/utils/version-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
Fekb6bDxTd8hH8dFQNlIK
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
"static/chunks/a6dad97d9634a72d.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
10
|
+
"static/Fekb6bDxTd8hH8dFQNlIK/_ssgManifest.js",
|
|
11
|
+
"static/Fekb6bDxTd8hH8dFQNlIK/_buildManifest.js"
|
|
12
12
|
],
|
|
13
13
|
"rootMainFiles": [
|
|
14
14
|
"static/chunks/41c5312e59752fb5.js",
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"polyfillFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
8
|
+
"static/Fekb6bDxTd8hH8dFQNlIK/_ssgManifest.js",
|
|
9
|
+
"static/Fekb6bDxTd8hH8dFQNlIK/_buildManifest.js"
|
|
10
10
|
],
|
|
11
11
|
"rootMainFiles": []
|
|
12
12
|
}
|