dev3000 0.0.131 → 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.js +202 -33
- 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 +37 -0
- package/dist/dev-environment.d.ts.map +1 -1
- package/dist/dev-environment.js +245 -106
- package/dist/dev-environment.js.map +1 -1
- package/dist/src/tui-interface-impl.tsx +32 -20
- 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 +20 -14
- 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.map +1 -1
- package/dist/utils/tmux-helpers.js +4 -2
- package/dist/utils/tmux-helpers.js.map +1 -1
- 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/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/package.json +11 -4
- package/src/tui-interface-impl.tsx +32 -20
- /package/mcp-server/.next/static/{i5SOhj7cf3JSMPksTBNpr → Fekb6bDxTd8hH8dFQNlIK}/_buildManifest.js +0 -0
- /package/mcp-server/.next/static/{i5SOhj7cf3JSMPksTBNpr → Fekb6bDxTd8hH8dFQNlIK}/_clientMiddlewareManifest.json +0 -0
- /package/mcp-server/.next/static/{i5SOhj7cf3JSMPksTBNpr → Fekb6bDxTd8hH8dFQNlIK}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AgentOption } from "../utils/agent-selection.js";
|
|
2
|
+
import type { AgentConfig } from "../utils/user-config.js";
|
|
3
|
+
interface AgentSelectorProps {
|
|
4
|
+
agents: AgentOption[];
|
|
5
|
+
defaultAgentName?: string;
|
|
6
|
+
onComplete: (result: {
|
|
7
|
+
agent: AgentConfig | null;
|
|
8
|
+
}) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function AgentSelector({ agents, defaultAgentName, onComplete }: AgentSelectorProps): import("react/jsx-runtime").JSX.Element | null;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=AgentSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentSelector.d.ts","sourceRoot":"","sources":["../../src/components/AgentSelector.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAS1D,UAAU,kBAAkB;IAC1B,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,CAAA;CAC5D;AAED,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,EAAE,kBAAkB,kDAuJzF"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useInput } from "ink";
|
|
3
|
+
import SelectInput from "ink-select-input";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
export function AgentSelector({ agents, defaultAgentName, onComplete }) {
|
|
6
|
+
const [step, setStep] = useState("select-agent");
|
|
7
|
+
const [customCommand, setCustomCommand] = useState("");
|
|
8
|
+
// Build items for agent selection, with default at top if it exists
|
|
9
|
+
const buildAgentItems = () => {
|
|
10
|
+
const items = [];
|
|
11
|
+
// Sort agents: available first (with default at very top), then unavailable
|
|
12
|
+
const sortedAgents = [...agents].sort((a, b) => {
|
|
13
|
+
// First, separate available from unavailable
|
|
14
|
+
if (a.available && !b.available)
|
|
15
|
+
return -1;
|
|
16
|
+
if (!a.available && b.available)
|
|
17
|
+
return 1;
|
|
18
|
+
// Within available agents, put default first
|
|
19
|
+
if (a.available && b.available) {
|
|
20
|
+
if (a.name === defaultAgentName)
|
|
21
|
+
return -1;
|
|
22
|
+
if (b.name === defaultAgentName)
|
|
23
|
+
return 1;
|
|
24
|
+
}
|
|
25
|
+
return 0;
|
|
26
|
+
});
|
|
27
|
+
for (const agent of sortedAgents) {
|
|
28
|
+
items.push({
|
|
29
|
+
label: agent.available ? agent.displayName : `${agent.displayName} (not installed)`,
|
|
30
|
+
value: agent.available ? agent.name : `disabled:${agent.name}`
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
items.push({ label: "Custom command...", value: "custom" });
|
|
34
|
+
items.push({ label: "d3k (no agent)", value: "none" });
|
|
35
|
+
items.push({ label: "d3k --debug", value: "debug" });
|
|
36
|
+
return items;
|
|
37
|
+
};
|
|
38
|
+
const agentItems = buildAgentItems();
|
|
39
|
+
// Handle agent selection
|
|
40
|
+
const handleAgentSelect = (item) => {
|
|
41
|
+
if (item.value.startsWith("disabled:")) {
|
|
42
|
+
return; // Ignore disabled items
|
|
43
|
+
}
|
|
44
|
+
if (item.value === "none") {
|
|
45
|
+
// User chose no agent
|
|
46
|
+
onComplete({ agent: null });
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (item.value === "debug") {
|
|
50
|
+
// User chose debug mode
|
|
51
|
+
onComplete({ agent: { name: "debug", command: "debug" } });
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (item.value === "custom") {
|
|
55
|
+
setStep("custom-input");
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Simple agent selection - complete immediately
|
|
59
|
+
const agent = agents.find((a) => a.name === item.value);
|
|
60
|
+
// Use custom command if specified, otherwise fall back to binary name
|
|
61
|
+
onComplete({ agent: { name: item.value, command: agent?.command || agent?.binary || item.value } });
|
|
62
|
+
};
|
|
63
|
+
// Handle custom command input
|
|
64
|
+
useInput((input, key) => {
|
|
65
|
+
if (step !== "custom-input")
|
|
66
|
+
return;
|
|
67
|
+
if (key.return) {
|
|
68
|
+
if (customCommand.trim()) {
|
|
69
|
+
onComplete({ agent: { name: "custom", command: customCommand.trim() } });
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (key.backspace || key.delete) {
|
|
74
|
+
setCustomCommand((prev) => prev.slice(0, -1));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (key.escape) {
|
|
78
|
+
setStep("select-agent");
|
|
79
|
+
setCustomCommand("");
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Regular character input
|
|
83
|
+
if (input && !key.ctrl && !key.meta) {
|
|
84
|
+
setCustomCommand((prev) => prev + input);
|
|
85
|
+
}
|
|
86
|
+
}, { isActive: step === "custom-input" });
|
|
87
|
+
// Render based on current step
|
|
88
|
+
if (step === "select-agent") {
|
|
89
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "#A18CE5", bold: true, children: "d3k Agent Selection" }) }), _jsx(Text, { dimColor: true, children: "Select an AI agent to run alongside d3k:" }), _jsx(Box, { marginTop: 1, children: _jsx(SelectInput, { items: agentItems, onSelect: handleAgentSelect, indicatorComponent: ({ isSelected }) => _jsx(Text, { color: "#A18CE5", children: isSelected ? "❯ " : " " }), itemComponent: ({ isSelected, label }) => {
|
|
90
|
+
const isDisabled = label.includes("not installed");
|
|
91
|
+
return (_jsx(Text, { color: isDisabled ? "gray" : isSelected ? "#A18CE5" : undefined, dimColor: isDisabled, children: label }));
|
|
92
|
+
} }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Use \u2191\u2193 to navigate, Enter to select" }) })] }));
|
|
93
|
+
}
|
|
94
|
+
if (step === "custom-input") {
|
|
95
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "#A18CE5", bold: true, children: "Custom Command" }) }), _jsx(Text, { dimColor: true, children: "Enter the command to run your agent:" }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "#A18CE5", children: "\u276F " }), _jsx(Text, { children: customCommand }), _jsx(Text, { color: "gray", children: "\u258C" })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Press Enter to confirm, Esc to go back" }) })] }));
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=AgentSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentSelector.js","sourceRoot":"","sources":["../../src/components/AgentSelector.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AvailableSkill } from "../utils/skill-installer.js";
|
|
2
|
+
interface SkillSelectorProps {
|
|
3
|
+
skills: AvailableSkill[];
|
|
4
|
+
onComplete: (selectedSkills: AvailableSkill[]) => void;
|
|
5
|
+
onSkip: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function SkillSelector({ skills, onComplete, onSkip }: SkillSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=SkillSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillSelector.d.ts","sourceRoot":"","sources":["../../src/components/SkillSelector.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEjE,UAAU,kBAAkB;IAC1B,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,KAAK,IAAI,CAAA;IACtD,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,kBAAkB,2CA8G/E"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useInput } from "ink";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
export function SkillSelector({ skills, onComplete, onSkip }) {
|
|
5
|
+
// Start with all skills selected
|
|
6
|
+
const [selectedSkills, setSelectedSkills] = useState(new Set(skills.map((s) => s.name)));
|
|
7
|
+
const [highlightedIndex, setHighlightedIndex] = useState(0);
|
|
8
|
+
// Item 0 is "All Skills", rest are individual skills
|
|
9
|
+
const totalItems = skills.length + 1; // +1 for "All Skills" option
|
|
10
|
+
const allSelected = selectedSkills.size === skills.length;
|
|
11
|
+
useInput((input, key) => {
|
|
12
|
+
if (key.escape) {
|
|
13
|
+
onSkip();
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (key.return) {
|
|
17
|
+
const selected = skills.filter((s) => selectedSkills.has(s.name));
|
|
18
|
+
onComplete(selected);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (key.upArrow) {
|
|
22
|
+
setHighlightedIndex((prev) => (prev > 0 ? prev - 1 : totalItems - 1));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (key.downArrow) {
|
|
26
|
+
setHighlightedIndex((prev) => (prev < totalItems - 1 ? prev + 1 : 0));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (input === " ") {
|
|
30
|
+
if (highlightedIndex === 0) {
|
|
31
|
+
// Toggle all
|
|
32
|
+
if (allSelected) {
|
|
33
|
+
setSelectedSkills(new Set());
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
setSelectedSkills(new Set(skills.map((s) => s.name)));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// Toggle individual skill
|
|
41
|
+
const skill = skills[highlightedIndex - 1];
|
|
42
|
+
const newSelected = new Set(selectedSkills);
|
|
43
|
+
if (newSelected.has(skill.name)) {
|
|
44
|
+
newSelected.delete(skill.name);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
newSelected.add(skill.name);
|
|
48
|
+
}
|
|
49
|
+
setSelectedSkills(newSelected);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
const renderCheckbox = (checked, highlighted) => {
|
|
54
|
+
const box = checked ? "[x]" : "[ ]";
|
|
55
|
+
return (_jsxs(Text, { color: highlighted ? "#A18CE5" : undefined, children: [highlighted ? ">" : " ", " ", box] }));
|
|
56
|
+
};
|
|
57
|
+
const truncateDescription = (desc, maxLen = 50) => {
|
|
58
|
+
if (desc.length <= maxLen)
|
|
59
|
+
return desc;
|
|
60
|
+
return `${desc.substring(0, maxLen - 3)}...`;
|
|
61
|
+
};
|
|
62
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "#A18CE5", bold: true, children: "d3k Skill Installer" }) }), _jsx(Text, { dimColor: true, children: "Skills available from Vercel:" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { children: [renderCheckbox(allSelected, highlightedIndex === 0), _jsxs(Text, { color: highlightedIndex === 0 ? "#A18CE5" : undefined, bold: true, children: [" ", "All Skills"] })] }), skills.map((skill, index) => {
|
|
63
|
+
const itemIndex = index + 1;
|
|
64
|
+
const isHighlighted = highlightedIndex === itemIndex;
|
|
65
|
+
const isSelected = selectedSkills.has(skill.name);
|
|
66
|
+
const label = skill.isNew ? "(new)" : "(update)";
|
|
67
|
+
return (_jsxs(Box, { children: [renderCheckbox(isSelected, isHighlighted), _jsxs(Text, { color: isHighlighted ? "#A18CE5" : undefined, children: [" ", skill.name, " ", _jsx(Text, { color: skill.isNew ? "green" : "yellow", children: label }), _jsxs(Text, { dimColor: true, children: [" - ", truncateDescription(skill.description)] })] })] }, skill.name));
|
|
68
|
+
})] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Space to toggle, Enter to install, Esc to skip" }) })] }));
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=SkillSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillSelector.js","sourceRoot":"","sources":["../../src/components/SkillSelector.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAShC,MAAM,UAAU,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAsB;IAC9E,iCAAiC;IACjC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAc,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrG,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAE3D,qDAAqD;IACrD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA,CAAC,6BAA6B;IAElE,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAA;IAEzD,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,EAAE,CAAA;YACR,OAAM;QACR,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;YACjE,UAAU,CAAC,QAAQ,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAA;YACrE,OAAM;QACR,CAAC;QAED,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACrE,OAAM;QACR,CAAC;QAED,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;gBAC3B,aAAa;gBACb,IAAI,WAAW,EAAE,CAAC;oBAChB,iBAAiB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;gBAC9B,CAAC;qBAAM,CAAC;oBACN,iBAAiB,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACvD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,0BAA0B;gBAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAA;gBAC1C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAA;gBAC3C,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAChC,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC7B,CAAC;gBACD,iBAAiB,CAAC,WAAW,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAE,WAAoB,EAAE,EAAE;QAChE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;QACnC,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,aAC7C,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAG,GAAG,IACzB,CACR,CAAA;IACH,CAAC,CAAA;IAED,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,SAAiB,EAAE,EAAU,EAAE;QACxE,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;YAAE,OAAO,IAAI,CAAA;QACtC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,CAAA;IAC9C,CAAC,CAAA;IAED,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACrC,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,0CAEnB,GACH,EACN,KAAC,IAAI,IAAC,QAAQ,oDAAqC,EACnD,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aAEvC,MAAC,GAAG,eACD,cAAc,CAAC,WAAW,EAAE,gBAAgB,KAAK,CAAC,CAAC,EACpD,MAAC,IAAI,IAAC,KAAK,EAAE,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,mBAC9D,GAAG,kBAEC,IACH,EAGL,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBAC3B,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAA;wBAC3B,MAAM,aAAa,GAAG,gBAAgB,KAAK,SAAS,CAAA;wBACpD,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;wBACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAA;wBAEhD,OAAO,CACL,MAAC,GAAG,eACD,cAAc,CAAC,UAAU,EAAE,aAAa,CAAC,EAC1C,MAAC,IAAI,IAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,aAC/C,GAAG,EACH,KAAK,CAAC,IAAI,OAAE,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,YAAG,KAAK,GAAQ,EAC1E,MAAC,IAAI,IAAC,QAAQ,0BAAK,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC,IAAQ,IAC5D,KANC,KAAK,CAAC,IAAI,CAOd,CACP,CAAA;oBACH,CAAC,CAAC,IACE,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,qEAAsD,GAChE,IACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -9,6 +9,43 @@ import { type McpConfigTarget } from "./utils/mcp-configs.js";
|
|
|
9
9
|
* @see cleanupOrphanedPlaywrightProcesses
|
|
10
10
|
*/
|
|
11
11
|
export declare const ORPHANED_PROCESS_CLEANUP_PATTERNS: readonly ["ms-playwright/mcp-chrome", "mcp-server-playwright"];
|
|
12
|
+
/**
|
|
13
|
+
* Options for graceful process termination.
|
|
14
|
+
*/
|
|
15
|
+
export interface GracefulKillOptions {
|
|
16
|
+
/** Process ID to terminate */
|
|
17
|
+
pid: number;
|
|
18
|
+
/** Delay in ms to wait for graceful shutdown (default: 500) */
|
|
19
|
+
gracePeriodMs?: number;
|
|
20
|
+
/** Function to send signals (for testing) */
|
|
21
|
+
killFn?: (pid: number, signal: NodeJS.Signals | number) => void;
|
|
22
|
+
/** Function to delay (for testing) */
|
|
23
|
+
delayFn?: (ms: number) => Promise<void>;
|
|
24
|
+
/** Optional debug logger */
|
|
25
|
+
debugLog?: (msg: string) => void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Result of graceful kill operation.
|
|
29
|
+
*/
|
|
30
|
+
export interface GracefulKillResult {
|
|
31
|
+
/** Whether the process was terminated */
|
|
32
|
+
terminated: boolean;
|
|
33
|
+
/** Whether graceful shutdown succeeded (SIGTERM was enough) */
|
|
34
|
+
graceful: boolean;
|
|
35
|
+
/** Whether force kill (SIGKILL) was needed */
|
|
36
|
+
forcedKill: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Gracefully terminate a process by first trying SIGTERM, waiting for graceful
|
|
40
|
+
* shutdown, then falling back to SIGKILL if needed.
|
|
41
|
+
*
|
|
42
|
+
* This is important for processes like Next.js dev server that need to clean up
|
|
43
|
+
* resources (like .next/dev/lock) before exiting.
|
|
44
|
+
*
|
|
45
|
+
* @param options - Kill options including PID and optional overrides for testing
|
|
46
|
+
* @returns Result indicating how the process was terminated
|
|
47
|
+
*/
|
|
48
|
+
export declare function gracefulKillProcess(options: GracefulKillOptions): Promise<GracefulKillResult>;
|
|
12
49
|
interface DevEnvironmentOptions {
|
|
13
50
|
port: string;
|
|
14
51
|
mcpPort?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-environment.d.ts","sourceRoot":"","sources":["../src/dev-environment.ts"],"names":[],"mappings":"AAwBA,OAAO,EAA8C,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"dev-environment.d.ts","sourceRoot":"","sources":["../src/dev-environment.ts"],"names":[],"mappings":"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"}
|