Rename project [stage]

This commit is contained in:
crschnick 2023-05-20 14:23:36 +00:00
parent 19f4b0abc4
commit 623d6be4ad
40 changed files with 165 additions and 165 deletions

View file

@ -5,28 +5,28 @@ There are no real formal contribution guidelines right now, they will maybe come
## Repository Structure
- [core](core) - Shared core classes of the X-Pipe Java API, X-Pipe extensions, and the X-Pipe daemon implementation
- [beacon](beacon) - The X-Pipe beacon component is responsible for handling all communications between the X-Pipe
- [core](core) - Shared core classes of the XPipe Java API, XPipe extensions, and the XPipe daemon implementation
- [beacon](beacon) - The XPipe beacon component is responsible for handling all communications between the XPipe
daemon
and the client applications, for example the various programming language APIs and the CLI
- [app](app) - Contains the X-Pipe daemon implementation, the X-Pipe desktop application, and an
API to create all different kinds of extensions for the X-Pipe platform
- [dist](dist) - Tools to create a distributable package of X-Pipe
- [ext](ext) - Available X-Pipe extensions. Essentially every feature is implemented as an extension
- [app](app) - Contains the XPipe daemon implementation, the XPipe desktop application, and an
API to create all different kinds of extensions for the XPipe platform
- [dist](dist) - Tools to create a distributable package of XPipe
- [ext](ext) - Available XPipe extensions. Essentially every feature is implemented as an extension
### Open source model
X-Pipe utilizes an open core model, which essentially means that
XPipe utilizes an open core model, which essentially means that
the main application is open source while certain other components are not.
Select parts are not open source yet, but may be added to this repository in the future.
Some tests and especially test environments and that run on private servers
are also not included in this repository (Don't want to leak server information).
Finally, scripts and workflows to create and publish installers and packages
are also not included to prevent attackers from easily impersonating the X-Pipe application.
are also not included to prevent attackers from easily impersonating the XPipe application.
## Modularity
All X-Pipe components target [JDK 19](https://openjdk.java.net/projects/jdk/19/) and make full use of the Java Module System (JPMS).
All XPipe components target [JDK 19](https://openjdk.java.net/projects/jdk/19/) and make full use of the Java Module System (JPMS).
All components are modularized, including all their dependencies.
In case a dependency is (sadly) not modularized yet, module information is manually added using [moditect](https://github.com/moditect/moditect-gradle-plugin).
Further, note that as this is a pretty complicated Java project that fully utilizes modularity,
@ -36,10 +36,10 @@ The tested and recommended IDE is IntelliJ.
## Setup
You need to have an up-to-date version of X-Pipe installed on your local system in order to properly
run X-Pipe in a development environment.
You need to have an up-to-date version of XPipe installed on your local system in order to properly
run XPipe in a development environment.
This is due to the fact that some components are only included in the release version and not in this repository.
X-Pipe is able to automatically detect your local installation and fetch the required
XPipe is able to automatically detect your local installation and fetch the required
components from it when it is run in a development environment.
## Building and Running
@ -54,5 +54,5 @@ You are also able to properly debug the built production application through two
- The `app/scripts/xpiped_debug_attach` script attaches a debugger with the help of [AttachMe](https://plugins.jetbrains.com/plugin/13263-attachme).
Just make sure that the attachme process is running within IntelliJ, and the debugger should launch automatically once you start up the application.
Note that when any unit test is run using a debugger, the X-Pipe daemon process that is started will also attempt
Note that when any unit test is run using a debugger, the XPipe daemon process that is started will also attempt
to connect to that debugger through [AttachMe](https://plugins.jetbrains.com/plugin/13263-attachme) as well.

32
FAQ.md
View file

@ -6,13 +6,13 @@ Compared to other existing tools, the fundamental approach of how to
connect and how to communicate with the remote system differs.
Other tools utilize the established protocol-based approach, i.e. connect and communicate with a
server via a certain protocol like SSH, SFTP, and many more.
X-Pipe utilizes a shell-based approach that works on top of command-line programs.
XPipe utilizes a shell-based approach that works on top of command-line programs.
Let's use the example of SSH.
Protocol-based programs come with an included SSH library that allows them to interact with a remote system via SSH.
This requires an SSH server implementation to be running on the remote system.
X-Pipe does not ship with any sort of SSH library or similar.
Instead, X-Pipe creates a new process using your local `ssh` executable, which is usually the OpenSSH client.
XPipe does not ship with any sort of SSH library or similar.
Instead, XPipe creates a new process using your local `ssh` executable, which is usually the OpenSSH client.
I.e. it launches the process `ssh user@host` in the background and communicates
with the opened remote shell through the stdout, stderr, stdin of the process.
From there, it detects what kind of server and environment,
@ -20,13 +20,13 @@ e.g. shell type, os, etc. you have logged into with that shell connection,
and adjusts how it talks to the remote system from there.
It effectively delegates everything protocol and connection related to your external programs.
As a result of this approach, you can do stuff with X-Pipe that you can't do with other tools.
As a result of this approach, you can do stuff with XPipe that you can't do with other tools.
One example would be connecting and accessing files on a
docker container as there's no real protocol to formally connect here by default.
X-Pipe can simply execute `docker exec -i <name> sh` to open a shell into the container
XPipe can simply execute `docker exec -i <name> sh` to open a shell into the container
and handle this shell exactly the same way as any other shell connection.
More broadly, X-Pipe can work on any shell connection, regardless of how it is established.
More broadly, XPipe can work on any shell connection, regardless of how it is established.
From its perspective, there's no visible difference between a
remote ssh connection and a shell to a local docker container.
@ -37,32 +37,32 @@ Windows/Linux/macOS system that has been released in the last ten years.
## What else do I need to use this?
As mentioned previously, X-Pipe itself does not ship with any sort of libraries for connection handling
As mentioned previously, XPipe itself does not ship with any sort of libraries for connection handling
and instead delegates this to your existing command-line tools.
For this approach to work however, you need to have the required tools installed.
For example, if you want to connect to a remote system via SSH with X-Pipe,
For example, if you want to connect to a remote system via SSH with XPipe,
you need to have an `ssh` client installed and added to your PATH.
The exact vendor and version of this `ssh` command-line
tool doesn't matter as long as the standard options are supported.
If a required program is attempted to be used but can not be found, X-Pipe will notify you.
If a required program is attempted to be used but can not be found, XPipe will notify you.
## Is this secure / Can I entrust my sensitive information to this?
Due to its nature, X-Pipe has to handle a lot of sensitive information like passwords, keys, and more.
Due to its nature, XPipe has to handle a lot of sensitive information like passwords, keys, and more.
As security plays a very important role here, there exists a dedicated [security page](/SECURITY.md)
that should contain all relevant information for you to make your decision.
## How does X-Pipe handle privacy?
## How does XPipe handle privacy?
X-Pipe does not collect any sort of data like usage or tracking data.
XPipe does not collect any sort of data like usage or tracking data.
The only case in which some sort of data is collected is when you choose to
use the built-in error reporter to submit a report.
This report data is limited to general system and error information, no sensitive information is submitted.
For those people who like to read legalese, there's the [privacy policy](/PRIVACY.md).
## How does X-Pipe handle updates?
## How does XPipe handle updates?
Especially in its early development stage, it can be pretty important to frequently distribute new releases.
How exactly the update process is handled depends on your distribution:
@ -87,9 +87,9 @@ So you can assume that the code is tested and the release is automated!
There are several to reach out, so you can choose whatever you like best:
- [X-Pipe Discord Server](https://discord.gg/8y89vS8cRb)
- [X-Pipe Slack Server](https://join.slack.com/t/x-pipe/shared_invite/zt-1awjq0t5j-5i4UjNJfNe1VN4b_auu6Cg)
- [X-Pipe Issue Tracker](https://github.com/xpipe-io/xpipe/issues)
- [XPipe Discord Server](https://discord.gg/8y89vS8cRb)
- [XPipe Slack Server](https://join.slack.com/t/XPipe/shared_invite/zt-1awjq0t5j-5i4UjNJfNe1VN4b_auu6Cg)
- [XPipe Issue Tracker](https://github.com/xpipe-io/xpipe/issues)
## I want to be the first to test use new features. How can I do that?

View file

@ -2,12 +2,12 @@
**Last updated April 21, 2023**
This privacy notice for X-Pipe, in which ("**we**," "**us**," or "**our**") refers to Christopher Schnick, describes how
This privacy notice for XPipe, in which ("**we**," "**us**," or "**our**") refers to Christopher Schnick, describes how
and why we
might collect, store, use, and/or share ("**process**") your information when you use our services ("**Services**"),
such as when you:
* Download and use our application (X-Pipe), or any other application of ours that links to this privacy notice
* Download and use our application (XPipe), or any other application of ours that links to this privacy notice
**Questions or concerns?** Reading this privacy notice will help you understand your privacy rights and choices. If you
do not agree with our policies and practices, please do not use our Services. If you still have any questions or

View file

@ -2,7 +2,7 @@
### A flexible connection manager and remote file explorer
X-Pipe is a brand-new type of connection manager and remote file explorer that works by only interacting with command-line
XPipe is a brand-new type of connection manager and remote file explorer that works by only interacting with command-line
tools on local and remote shell connections.
This approach makes it much more flexible as it doesn't have to deal with file system APIs or remote file handling
protocols at all.
@ -16,7 +16,7 @@ It currently supports:
- Any other custom remote connection methods that works through the command-line
- Arbitrary types of proxies to establish connections
Furthermore, X-Pipe integrates with your existing tools and workflows
Furthermore, XPipe integrates with your existing tools and workflows
by outsourcing as many tasks as possible to your favourite
text/code editors, terminals, shells, command-line tools and more.
The platform is designed to be extensible, allowing anyone
@ -61,11 +61,11 @@ Head over to the [releases page](https://github.com/xpipe-io/xpipe/releases/late
In case you're interested in development, check out the [development page](/DEVELOPMENT.md).
For information about the security model of X-Pipe, see the [security page](/SECURITY.md).
For information about the security model of XPipe, see the [security page](/SECURITY.md).
For information about the privacy policy of X-Pipe, see the [privacy page](/PRIVACY.md).
For information about the privacy policy of XPipe, see the [privacy page](/PRIVACY.md).
If you want to talk you can also join:
- The [X-Pipe Discord Server](https://discord.gg/8y89vS8cRb)
- The [X-Pipe Slack Server](https://join.slack.com/t/x-pipe/shared_invite/zt-1awjq0t5j-5i4UjNJfNe1VN4b_auu6Cg)
- The [XPipe Discord Server](https://discord.gg/8y89vS8cRb)
- The [XPipe Slack Server](https://join.slack.com/t/XPipe/shared_invite/zt-1awjq0t5j-5i4UjNJfNe1VN4b_auu6Cg)

View file

@ -1,63 +1,63 @@
# Security
Due to its nature, X-Pipe has to handle a lot of sensitive information.
Due to its nature, XPipe has to handle a lot of sensitive information.
This can range from passwords for all kinds of servers, to SSH keys, and more.
Therefore, the security model of X-Pipe plays a very important role.
Therefore, the security model of XPipe plays a very important role.
This document summarizes the approach of X-Pipe when it comes to the security of your sensitive information.
This document summarizes the approach of XPipe when it comes to the security of your sensitive information.
If any of your questions are left unanswered by this document, feel free to file an
issue report so your question can be answered individually and can also potentially be included in this document.
## Reporting a security vulnerability
If you believe that you found a security vulnerability in X-Pipe,
If you believe that you found a security vulnerability in XPipe,
you can make use of
the [private security report feature](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability)
of GitHub.
## Security assumptions
The general assumption is that the system on which X-Pipe runs on is not badly infected.
This refers to your local system on which you installed X-Pipe, not any remote systems that you then connect to.
The general assumption is that the system on which XPipe runs on is not badly infected.
This refers to your local system on which you installed XPipe, not any remote systems that you then connect to.
If your local system is infected to an extent where malicious programs can modify the
file system and other installed programs like X-Pipe,
then there is no technical way of preventing malicious programs to also infect X-Pipe and the connected systems as well.
file system and other installed programs like XPipe,
then there is no technical way of preventing malicious programs to also infect XPipe and the connected systems as well.
## Reliance on other programs
X-Pipe essentially outsources any form of connection and shell handling to your existing command-line tools.
XPipe essentially outsources any form of connection and shell handling to your existing command-line tools.
It does not come with any remote handling capabilities of its own.
Therefore, any used command-line program should be secure.
If for example your `ssh` command-line program or its connections are susceptible to MITM attacks or
vulnerable in any other way, there is no way for X-Pipe to keep the sensitive information secure.
vulnerable in any other way, there is no way for XPipe to keep the sensitive information secure.
It is your responsibility to use the programs in a secure environment and keep them up to date with security patches and
more.
X-Pipe can only be as secure as your underlying command-line tools itself.
XPipe can only be as secure as your underlying command-line tools itself.
X-Pipe calls these programs almost exactly as you would do manually in your terminal
XPipe calls these programs almost exactly as you would do manually in your terminal
with some a few additional parameters to automatically pass login information
and adapt the environment to make it work properly.
The called program therefore automatically uses your
system configuration for it, e.g. your system SSH configs.
X-Pipe does not perform any validation or version checking for the programs it calls.
For example, when establishing an ssh connection through X-Pipe, it will straight up call `ssh user@host <options>`.
XPipe does not perform any validation or version checking for the programs it calls.
For example, when establishing an ssh connection through XPipe, it will straight up call `ssh user@host <options>`.
It is assumed that this `ssh` executable is secure and the one that you actually want to use.
## Data security and privacy
The general approach of X-Pipe can be summarized as follows:
The general approach of XPipe can be summarized as follows:
- Any sensitive information should be kept as secure as possible exclusively on your local machine,
both while X-Pipe is running and also not running
- When sensitive information is required on another remote system that is connected through X-Pipe, that information
both while XPipe is running and also not running
- When sensitive information is required on another remote system that is connected through XPipe, that information
should be transferred and
remain there as briefly and securely as possible
- No sensitive information should be sent to any other server outside your network of trusted connections
### Storage of sensitive information
All X-Pipe data is exclusively stored on your local machine at `~/.xpipe/storage`.
All XPipe data is exclusively stored on your local machine at `~/.xpipe/storage`.
You can choose to change this storage location in the settings menu.
All sensitive information is encrypted when it is saved to disk on your local machine using AES
@ -82,7 +82,7 @@ Then the passed sensitive information is just written into the stdin of the prog
or file system.
When a program only accepts password input via an environment variable or an askpass program,
a self deleting password supplier script file is generated by X-Pipe.
a self deleting password supplier script file is generated by XPipe.
This script contains the encrypted password and will supply
the password to the target program exactly once when invoked and immediately deletes itself afterwards.
This behavior ensures that there is no leftover password script after an operation is performed.
@ -94,7 +94,7 @@ up in any kind of shell history or on any file system.
### The purpose of shell scripts
Whenever you open a remote connection in a terminal from X-Pipe, you will notice that your terminal shows
Whenever you open a remote connection in a terminal from XPipe, you will notice that your terminal shows
the name of a script located in your temp directory in the title bar to indicate that you're currently executing it.
The naming scheme of these scripts is usually something like `xpipe/exec-<id>.(bat|sh|ps1)`
This is intended as these scripts contain all commands that are required
@ -111,21 +111,21 @@ instantly so any attacker doesn't obtain any sensitive information from it.
### Logging
By default, X-Pipe creates log files located in `~/.xpipe/logs`.
By default, XPipe creates log files located in `~/.xpipe/logs`.
Under normal conditions these log files do not contain any sensitive information.
If you choose to alter the log level in the settings menu or launch X-Pipe in debug mode,
If you choose to alter the log level in the settings menu or launch XPipe in debug mode,
these log files will contain a lot more and finer grained information, some of which might be sensitive.
### Issue reports
Whenever an error occurs within X-Pipe or you choose to open the error reporter dialog,
Whenever an error occurs within XPipe or you choose to open the error reporter dialog,
you have the option to automatically send an error report with optional feedback and attachments.
This error report does not contain any sensitive information unless
you explicitly choose to attach debug mode log files (See above).
## Isolation
Any infected remote system should be isolated enough such that any infection can't spread through X-Pipe.
Any infected remote system should be isolated enough such that any infection can't spread through XPipe.
### User isolation
@ -135,22 +135,22 @@ Any other user on a system can't read or write them unless they have root/Admini
### Isolation of remote systems
When you add a remote system as a host within X-Pipe, it is implicitly assumed that you trust this system.
When you add a remote system as a host within XPipe, it is implicitly assumed that you trust this system.
Any required login information is sent to and handled on that remote host when required,
so it would be possible for malicious program with sufficient privileges to obtain any information sent to that host.
This would require an attacker to be able to access files of the user that is used to log into the remote system.
It should however not be possible for any malicious program on the remote host to obtain
other information stored by X-Pipe that is not explicitly sent to that host.
other information stored by XPipe that is not explicitly sent to that host.
## Antivirus programs
### Windows
It may occasionally happen that Windows Defender warns and
even sometimes deletes X-Pipe due to it identifying the application as malware.
even sometimes deletes XPipe due to it identifying the application as malware.
The reason for this is simple: The application is not signed with an EV code signing
certificate as this would require a company for X-Pipe to be set up and would also cost around 600$+ per year.
If X-Pipe was signed with such a certificate, as are most Windows applications distributed by companies, all warnings
certificate as this would require a company for XPipe to be set up and would also cost around 600$+ per year.
If XPipe was signed with such a certificate, as are most Windows applications distributed by companies, all warnings
would go away automatically.
The Windows Defender / Windows SmartScreen system is essentially pay-to-win here.
Just paying the appropriate amount will automatically whitelist your application (even it is unsafe / essentially
@ -166,7 +166,7 @@ In summary, don't rely on Windows Defender to be accurate when it comes to false
All artifacts of every release are automatically analyzed on VirusTotal
and you can find the results linked at the bottom of every release.
From there you should be able to get a better overview over the actual
threat level of X-Pipe instead of purely relying on Windows Defender.
threat level of XPipe instead of purely relying on Windows Defender.
### macOS

View file

@ -1,9 +1,9 @@
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.xpipe/xpipe-api/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.xpipe/xpipe-api)
[![javadoc](https://javadoc.io/badge2/io.xpipe/xpipe-api/javadoc.svg)](https://javadoc.io/doc/io.xpipe/xpipe-api)
## X-Pipe Java API
## XPipe Java API
The X-Pipe API for Java allows you to use most of the X-Pipe functionality from Java applications:
The XPipe API for Java allows you to use most of the XPipe functionality from Java applications:
- Create data stores and data sources
- Query and work with the contents of data sources

View file

@ -13,8 +13,8 @@ publishing {
}
pom {
name = 'X-Pipe Java API'
description = 'Contains everything necessary to interact with X-Pipe from Java applications.'
name = 'XPipe Java API'
description = 'Contains everything necessary to interact with XPipe from Java applications.'
url = 'https://github.com/xpipe-io/xpipe/api'
licenses {
license {

View file

@ -14,13 +14,13 @@ import java.nio.file.Files;
import java.nio.file.Path;
/**
* Represents a reference to a data source that is managed by X-Pipe.
* Represents a reference to a data source that is managed by XPipe.
* <p>
* The actual data is only queried when required and is not cached.
* Therefore, the queried data is always up-to-date at the point of calling a method that queries the data.
* <p>
* As soon a data source reference is created, the data source is locked
* within X-Pipe to prevent concurrent modification and the problems that can arise from it.
* within XPipe to prevent concurrent modification and the problems that can arise from it.
* By default, the lock is held until the calling program terminates and prevents
* other applications from modifying the data source in any way.
* To unlock the data source earlier, you can make use the {@link #unlock()} method.

View file

@ -108,7 +108,7 @@ List<String> jvmRunArgs = [
"--enable-preview",
// "-XX:+ExitOnOutOfMemoryError",
"-Dfile.encoding=UTF-8",
"-Dvisualvm.display.name=X-Pipe"
"-Dvisualvm.display.name=XPipe"
]

View file

@ -52,7 +52,7 @@ public class BrowseDirectoryComp extends SimpleComp {
if (sc.getOsType().equals(OsType.WINDOWS)) {
sc.executeSimpleCommand(ScriptHelper.createDetachCommand(sc, "\"" + script + "\""));
} else {
TerminalHelper.open("X-Pipe Debug", "\"" + script + "\"");
TerminalHelper.open("XPipe Debug", "\"" + script + "\"");
}
}
});

View file

@ -37,7 +37,7 @@ public class App extends Application {
icon = AppImages.image("logo.png");
// Set dock icon explicitly on mac
// This is necessary in case X-Pipe was started through a script as it will have no icon otherwise
// This is necessary in case XPipe was started through a script as it will have no icon otherwise
if (OsType.getLocal().equals(OsType.MACOS)) {
try {
var iconUrl = Main.class.getResourceAsStream("resources/img/logo.png");

View file

@ -69,7 +69,7 @@ public class AppExtensionManager {
Path p = Path.of(localInstallation);
if (!Files.exists(p)) {
throw new IllegalStateException(
"Required local X-Pipe installation was not found but is required for development");
"Required local XPipe installation was not found but is required for development");
}
var extensions = XPipeInstallation.getLocalExtensionsDirectory(p);

View file

@ -41,7 +41,7 @@ public class AppTray {
.menuItem(AppI18n.get("quit"), e -> {
OperationMode.close();
})
.toolTip("X-Pipe")
.toolTip("XPipe")
.build();
this.errorHandler = new TrayErrorHandler();
}

View file

@ -21,7 +21,7 @@ import java.util.List;
import java.util.concurrent.Callable;
@CommandLine.Command(
header = "Launches the X-Pipe daemon.",
header = "Launches the XPipe daemon.",
sortOptions = false,
showEndOfOptionsDelimiterInUsageHelp = true)
public class LauncherCommand implements Callable<Integer> {

View file

@ -110,7 +110,7 @@ public interface ExternalTerminalType extends PrefsChoiceValue {
@Override
protected String toCommand(String name, String file) {
// Note for later: When debugging konsole launches, it will always open as a child process of
// IntelliJ/X-Pipe even though we try to detach it.
// IntelliJ/XPipe even though we try to detach it.
// This is not the case for production where it works as expected
return "--new-tab -e \"" + file + "\"";
}

View file

@ -204,7 +204,7 @@ public class AppInstaller {
exec || read -rsp "Update failed ..."$'\\n' -n 1 key
""",
file, file));
TerminalHelper.open("X-Pipe Updater", command);
TerminalHelper.open("XPipe Updater", command);
}
}
@ -241,7 +241,7 @@ public class AppInstaller {
exec || read -rsp "Update failed ..."$'\\n' -n 1 key
""",
file, file));
TerminalHelper.open("X-Pipe Updater", command);
TerminalHelper.open("XPipe Updater", command);
}
}
@ -279,7 +279,7 @@ public class AppInstaller {
exec || read -rsp "Update failed ..."$'\\n' -n 1 key
""",
file, file));
TerminalHelper.open("X-Pipe Updater", command);
TerminalHelper.open("XPipe Updater", command);
}
}
}

View file

@ -32,7 +32,7 @@ public class DesktopShortcuts {
[Desktop Entry]
Type=Application
Name=%s
Comment=Open with X-Pipe
Comment=Open with XPipe
Exec="%s" open %s
Icon=%s
Terminal=false

View file

@ -11,7 +11,7 @@ public class Hyperlinks {
public static final String SECURITY = "https://github.com/xpipe-io/xpipe/blob/master/SECURITY.md";
public static final String DISCORD = "https://discord.gg/8y89vS8cRb";
public static final String SLACK =
"https://join.slack.com/t/x-pipe/shared_invite/zt-1awjq0t5j-5i4UjNJfNe1VN4b_auu6Cg";
"https://join.slack.com/t/XPipe/shared_invite/zt-1awjq0t5j-5i4UjNJfNe1VN4b_auu6Cg";
public static final String DOCS_PRIVACY = "https://xpipe.io/docs/privacy";
static final String[] browsers = {

View file

@ -19,12 +19,12 @@ public class XPipeSession {
boolean isNewBuildSession;
/**
* Unique identifier that resets on every X-Pipe restart.
* Unique identifier that resets on every XPipe restart.
*/
UUID sessionId;
/**
* Unique identifier that resets on every X-Pipe update.
* Unique identifier that resets on every XPipe update.
*/
UUID buildSessionId;

View file

@ -2,11 +2,11 @@ introTitle=Data sources
introDescription=Pipe, manage, and store many different types of data.
introCollection=Data source collections allow you to store and\norganize all your data sources for later use.
introPipe=Pipe data from any origin to any destination\nacross formats while maintaining compatibility.
introDocumentation=In case you prefer a more structured approach to\nfamiliarizing yourself with X-Pipe, check out the documentation:
introDocumentation=In case you prefer a more structured approach to\nfamiliarizing yourself with XPipe, check out the documentation:
introEntry=Once you have done that, you can add a new data source to it.\nThere are different types of data sources to choose from:
introTableDataSource=Tabular data sources, for example a database table, an excel sheet, or a csv file.
dataSourceIntroTitle=Categories of Data Sources
dataSourceIntroDescription=The next step is to add a data sources to this collection (See above). X-Pipe\ndifferentiates between several categories of data sources for different purposes.
dataSourceIntroDescription=The next step is to add a data sources to this collection (See above). XPipe\ndifferentiates between several categories of data sources for different purposes.
dataSourceIntroTable=Tabular data sources contain data represented by some kind of table.\nExamples are database tables, Excel sheets, or .csv files.
dataSourceIntroStructure=Structure data sources contain some form of object structure.\nExamples are .json files, .xml files, or certain types of NoSQL databases.
dataSourceIntroText=Text data sources contain readable text that can\ncome in a variety of different encodings and simple formats.
@ -18,4 +18,4 @@ storeStreamDescription=Stream connections produce raw byte data\nthat can be use
storeMachineDescription=You can quickly search for available remote connections automatically.\nAlternatively, you can also of course add them manually.
detectConnections=Search for connections
storeDatabaseDescription=Database connections allow you to connect to\na database server and interact with its contained data.
storeDocumentation=In case you prefer a more structured approach to\nfamiliarizing yourself with X-Pipe, check out the documentation:
storeDocumentation=In case you prefer a more structured approach to\nfamiliarizing yourself with XPipe, check out the documentation:

View file

@ -8,8 +8,8 @@ useSystemFont=Use system font
updates=Updates
advanced=Advanced
workspaceLock=Workspace lock
workspaceLockDescription=Sets a custom password to encrypt your stored information in X-Pipe. This results in increased security as it provides an additional layer of encryption for your stored sensitive information. You will then be prompted to enter the password when X-Pipe starts.
useSystemFontDescription=Controls whether to use your system font or the default font used by X-Pipe (Roboto).
workspaceLockDescription=Sets a custom password to encrypt your stored information in XPipe. This results in increased security as it provides an additional layer of encryption for your stored sensitive information. You will then be prompted to enter the password when XPipe starts.
useSystemFontDescription=Controls whether to use your system font or the default font used by XPipe (Roboto).
tooltipDelay=Tooltip delay
tooltipDelayDescription=The amount of milliseconds to wait until a tooltip is displayed.
fontSize=Font size
@ -23,19 +23,19 @@ updateToPrereleasesDescription=When enabled, the update check will also look for
storage=Storage
runOnStartup=Run on startup
closeBehaviour=Close behaviour
closeBehaviourDescription=Controls how X-Pipe should proceed upon closing its main window.
closeBehaviourDescription=Controls how XPipe should proceed upon closing its main window.
language=Language
lightTheme=Light Theme
darkTheme=Dark Theme
exit=Quit X-Pipe
exit=Quit XPipe
continueInBackground=Continue in background
minimizeToTray=Minimize to tray
closeBehaviourAlertTitle=Set closing behaviour
closeBehaviourAlertTitleHeader=Select what should happen when closing the window.
externalStartupBehaviour=External startup behaviour
externalStartupBehaviourDescription=Controls the behavior of the desktop application when X-Pipe is started from for example the CLI or an API.
externalStartupBehaviourDescription=Controls the behavior of the desktop application when XPipe is started from for example the CLI or an API.
clearCachesAlertTitle=Clean Cache
clearCachesAlertTitleHeader=Do you want to clean all X-Pipe caches?
clearCachesAlertTitleHeader=Do you want to clean all XPipe caches?
clearCachesAlertTitleContent=Note that this will delete all the data that is stored to improve the user experience, for example file usage histories.
startGui=Start GUI
startInTray=Start in tray
@ -48,11 +48,11 @@ notAnAbsolutePath=Not an absolute path
notADirectory=Not a directory
notAnEmptyDirectory=Not an empty directory
automaticallyUpdate=Check for updates
automaticallyUpdateDescription=When enabled, new release information is automatically fetched in the background while X-Pipe is running.
automaticallyUpdateDescription=When enabled, new release information is automatically fetched in the background while XPipe is running.
sendAnonymousErrorReports=Send anonymous error reports
sendUsageStatistics=Send anonymous usage statistics
storageDirectory=Storage directory
storageDirectoryDescription=The location where X-Pipe should store all connection and data source information.
storageDirectoryDescription=The location where XPipe should store all connection and data source information.
logLevel=Log level
appBehaviour=Application behaviour
logLevelDescription=The log level that should be used when writing log files.
@ -79,7 +79,7 @@ developerShowHiddenEntriesDescription=When enabled, hidden and internal data sou
developerShowHiddenProviders=Show hidden providers
developerShowHiddenProvidersDescription=Controls whether hidden and internal connection and data source providers will be shown in the creation dialog.
developerDisableConnectorInstallationVersionCheck=Disable Connector Version Check
developerDisableConnectorInstallationVersionCheckDescription=Controls whether the update checker will ignore the version number when inspecting the version of an X-Pipe connector installed on a remote machine.
developerDisableConnectorInstallationVersionCheckDescription=Controls whether the update checker will ignore the version number when inspecting the version of an XPipe connector installed on a remote machine.
konsole=Konsole
xfce=Xfce
macosTerminal=Terminal.app

View file

@ -56,15 +56,15 @@ appendDescription=Appends the new content to the existing content
prependDescription=Prepends the new content to the existing content
yes=Yes
no=No
connectorInstallationTitle=X-Pipe Connector
connectorInstallationHeader=Would you like to install the X-Pipe connector on that host?
connectorInstallationContent=Some operations require the X-Pipe connector to be installed on the host. Note that this operation may take some time.
connectorInstallationTitle=XPipe Connector
connectorInstallationHeader=Would you like to install the XPipe connector on that host?
connectorInstallationContent=Some operations require the XPipe connector to be installed on the host. Note that this operation may take some time.
errorOccured=An error occured
terminalErrorOccured=A terminal error occured
errorTypeOccured=An exception of type $TYPE$ was thrown
permissionsAlertTitle=Permissions required
permissionsAlertHeader=Additional permissions are required to perform this operation.
permissionsAlertContent=Please follow the pop-up to give X-Pipe the required permissions in the privacy settings menu.
permissionsAlertContent=Please follow the pop-up to give XPipe the required permissions in the privacy settings menu.
errorDetails=Show details
target=Target
data=Data
@ -72,14 +72,14 @@ more=More
pipeDataSource=Pipe Data Source
updateReadyAlertTitle=Update Ready
updateReadyAlertHeader=An update to version $VERSION$ is ready to be installed
updateReadyAlertContent=This will install the new version and restart X-Pipe once the installation finished.
updateReadyAlertContent=This will install the new version and restart XPipe once the installation finished.
errorNoDetail=No error details are available
updateAvailableTitle=Update Available
updateAvailableHeader=An X-Pipe update to version $VERSION$ is available to install
updateAvailableContent=Even though X-Pipe could not be started, you can attempt to install the update to potentially fix the issue.
updateAvailableHeader=An XPipe update to version $VERSION$ is available to install
updateAvailableContent=Even though XPipe could not be started, you can attempt to install the update to potentially fix the issue.
clipboardActionDetectedTitle=Clipboard Action detected
clipboardActionDetectedHeader=Do you want to import your clipboard content?
clipboardActionDetectedContent=X-Pipe detected content in your clipboard that can be opened. Do you want to open it now?
clipboardActionDetectedContent=XPipe detected content in your clipboard that can be opened. Do you want to open it now?
install=Install ...
ignore=Ignore
possibleActions=Possible actions
@ -168,7 +168,7 @@ slack=Slack
support=Support
github=GitHub
openSourceNotices=Open Source Notices
xPipeClient=X-Pipe Desktop
xPipeClient=XPipe Desktop
checkForUpdates=Check for updates
lastChecked=Last checked
version=Version
@ -184,7 +184,7 @@ legalAccept=I accept the EULA and the privacy policy
confirm=Confirm
whatsNew=What's new in version $VERSION$?
updateChangelogAlertTitle=Changelog
greetingsAlertTitle=Welcome to X-Pipe
greetingsAlertTitle=Welcome to XPipe
gotIt=Got It
eula=End-user license agreement
introduction=Introduction
@ -202,7 +202,7 @@ installationFiles=Installation Files
openInstallationDirectory=Open installation directory
launchDebugMode=Launch debug mode
extensionInstallTitle=Download
extensionInstallDescription=This action requires additional third party libraries that are not distributed by X-Pipe. You can automatically install them here. The components are then downloaded from the vendor website:
extensionInstallDescription=This action requires additional third party libraries that are not distributed by XPipe. You can automatically install them here. The components are then downloaded from the vendor website:
extensionInstallLicenseNote=By performing the download and automatic installation you agree to the terms of the third party licenses:
license=License
installRequired=Installation Required

View file

@ -1,7 +1,7 @@
## END-USER LICENSE AGREEMENT
This End-User License Agreement (EULA) is a legal agreement between you (either as an individual or on behalf of an
entity) and Christopher Schnick regarding your use of X-Pipe's desktop applications, and associated documentation (the "
entity) and Christopher Schnick regarding your use of XPipe's desktop applications, and associated documentation (the "
Software"). IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS EULA, DO NOT INSTALL, USE OR COPY THE SOFTWARE.
### Summary

View file

@ -1,10 +1,10 @@
## Welcome to X-Pipe!
## Welcome to XPipe!
Thank you for trying out the X-Pipe Alpha.
Thank you for trying out the XPipe Alpha.
You can overview the development status, report issues, and more at the following places:
#### [GitHub Repository](https://github.com/xpipe-io/xpipe/)
#### [Discord Server](https://discord.gg/8y89vS8cRb)
#### [Slack Server](https://join.slack.com/t/x-pipe/shared_invite/zt-1awjq0t5j-5i4UjNJfNe1VN4b_auu6Cg)
#### [Slack Server](https://join.slack.com/t/XPipe/shared_invite/zt-1awjq0t5j-5i4UjNJfNe1VN4b_auu6Cg)

View file

@ -1,9 +1,9 @@
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.xpipe/xpipe-beacon/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.xpipe/xpipe-beacon)
[![javadoc](https://javadoc.io/badge2/io.xpipe/xpipe-beacon/javadoc.svg)](https://javadoc.io/doc/io.xpipe/xpipe-beacon)
## X-Pipe Beacon
## XPipe Beacon
The X-Pipe beacon component is responsible for handling all communications between the X-Pipe daemon
The XPipe beacon component is responsible for handling all communications between the XPipe daemon
and the various programming language APIs and the CLI. It provides an API that supports all kinds
of different operations.
@ -15,7 +15,7 @@ of different operations.
- The data structures and exchange protocols are specified in the
[io.xpipe.beacon.exchange package](src/main/java/io/xpipe/beacon/exchange).
- Every exchange is initiated from the outside by sending a request message to the X-Pipe daemon.
- Every exchange is initiated from the outside by sending a request message to the XPipe daemon.
The daemon then always sends a response message.
- The header information of a message is formatted in the json format.
@ -39,7 +39,7 @@ Note that if both sides do not have the same port setting, they won't be able to
#### Custom launch command
The beacon API also supports launching the daemon automatically in case it is not started yet.
By default, it launches the daemon of the local X-Pipe installation.
By default, it launches the daemon of the local XPipe installation.
It is possible to pass a custom launch command with the property `io.xpipe.beacon.customDaemonCommand=<cmd>`
and pass arguments to it using the property `io.xpipe.beacon.daemonArgs=<args>`.
This allows for a custom launch behaviour in a testing/development environment.

View file

@ -14,8 +14,8 @@ publishing {
pom {
name = 'X-Pipe Beacon'
description = 'The socket-based implementation used for the communication with the X-Pipe daemon.'
name = 'XPipe Beacon'
description = 'The socket-based implementation used for the communication with the XPipe daemon.'
url = 'https://github.com/xpipe-io/xpipe/beacon'
licenses {
license {

View file

@ -55,7 +55,7 @@ public class BeaconClient implements AutoCloseable {
public static BeaconClient connectProxy(ShellStore proxy) throws Exception {
var control = proxy.control().start();
if (!ProxyManagerProvider.get().setup(control)) {
throw new IOException("X-Pipe connector required to perform operation");
throw new IOException("XPipe connector required to perform operation");
}
var command = control.command("xpipe beacon --raw").start();
command.discardErr();
@ -316,7 +316,7 @@ public class BeaconClient implements AutoCloseable {
@Override
public String toDisplayString() {
return "X-Pipe CLI";
return "XPipe CLI";
}
}
@ -357,7 +357,7 @@ public class BeaconClient implements AutoCloseable {
@Override
public String toDisplayString() {
return "X-Pipe Gateway " + version;
return "XPipe Gateway " + version;
}
}
@ -373,7 +373,7 @@ public class BeaconClient implements AutoCloseable {
@Override
public String toDisplayString() {
return String.format("X-Pipe %s API v%s", language, version);
return String.format("XPipe %s API v%s", language, version);
}
}
}

View file

@ -1,17 +1,17 @@
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.xpipe/xpipe-core/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.xpipe/xpipe-core)
[![javadoc](https://javadoc.io/badge2/io.xpipe/xpipe-core/javadoc.svg)](https://javadoc.io/doc/io.xpipe/xpipe-core)
## X-Pipe Core
## XPipe Core
The X-Pipe core module contains all the shared core classes used by the API, beacon, and daemon implementation.
The XPipe core module contains all the shared core classes used by the API, beacon, and daemon implementation.
It contains the following packages:
- [charsetter](src/main/java/io/xpipe/core/charsetter): Classes for handling all things charset
related such as detection and handling of data streams with BOMs.
- [data](src/main/java/io/xpipe/core/data): Contains all definitions of the
internal X-Pipe data model and all the IO functionality to read and write these data structures.
For more information, see [X-Pipe data model](https://xpipe-io.readthedocs.io/en/latest/dev/model.html)
internal XPipe data model and all the IO functionality to read and write these data structures.
For more information, see [XPipe data model](https://xpipe-io.readthedocs.io/en/latest/dev/model.html)
- [dialog](src/main/java/io/xpipe/core/dialog): In API to create server/daemon side CLI dialogs.
These are used by extensions for data source and data store configuration from the command line.

View file

@ -6,8 +6,8 @@ publishing {
from components.java
pom {
name = 'X-Pipe Core'
description = 'Core classes used by all X-Pipe components.'
name = 'XPipe Core'
description = 'Core classes used by all XPipe components.'
url = 'https://github.com/xpipe-io/xpipe/core'
licenses {
license {

View file

@ -10,7 +10,7 @@ import java.time.Instant;
import java.util.Optional;
/**
* A store that refers to another store in the X-Pipe storage.
* A store that refers to another store in the XPipe storage.
* The referenced store has to be resolved by the caller manually, as this class does not act as a resolver.
*/
@JsonTypeName("named")

View file

@ -7,11 +7,11 @@ import lombok.Value;
import java.util.Objects;
/**
* Represents a reference to an X-Pipe data source.
* Represents a reference to an XPipe data source.
* Using {@link DataSourceReference} instances instead of {@link DataSourceId}
* instances is mainly done for user convenience purposes.
* <p>
* While a {@link DataSourceId} represents a unique and canonical identifier for an X-Pipe data source,
* While a {@link DataSourceId} represents a unique and canonical identifier for an XPipe data source,
* there also exist easier and shorter ways to address a data source.
* This convenience comes at the price of ambiguity and instability for other types of references.
*/

View file

@ -91,7 +91,7 @@ public interface TableReadConnection extends DataSourceReadConnection {
}
/**
* Writes the rows to an OutputStream in the X-Pipe binary format.
* Writes the rows to an OutputStream in the XPipe binary format.
*/
default void forwardRows(OutputStream out, int maxLines) throws Exception {
if (maxLines == 0) {

View file

@ -67,7 +67,7 @@ public class JacksonMapper {
}
/**
* Constructs a new ObjectMapper that is able to map all required X-Pipe classes and also possible extensions.
* Constructs a new ObjectMapper that is able to map all required XPipe classes and also possible extensions.
*/
public static ObjectMapper newMapper() {
if (!JacksonMapper.isInit()) {

View file

@ -209,11 +209,11 @@ public class XPipeInstallation {
String path = null;
if (OsType.getLocal().equals(OsType.WINDOWS)) {
var base = System.getenv("LOCALAPPDATA");
path = FileNames.join(base, "X-Pipe");
path = FileNames.join(base, "XPipe");
} else if (OsType.getLocal().equals(OsType.LINUX)) {
path = "/opt/xpipe";
} else {
path = "/Applications/X-Pipe.app";
path = "/Applications/XPipe.app";
}
return path;
@ -231,11 +231,11 @@ public class XPipeInstallation {
String path = null;
if (p.getOsType().equals(OsType.WINDOWS)) {
var base = p.executeSimpleStringCommand(p.getShellDialect().getPrintVariableCommand("LOCALAPPDATA"));
path = FileNames.join(base, "X-Pipe");
path = FileNames.join(base, "XPipe");
} else if (p.getOsType().equals(OsType.LINUX)) {
path = "/opt/xpipe";
} else {
path = "/Applications/X-Pipe.app";
path = "/Applications/XPipe.app";
}
return path;

30
dist/base.gradle vendored
View file

@ -142,54 +142,54 @@ if (org.gradle.internal.os.OperatingSystem.current().isWindows()) {
doLast {
copy {
from "$distDir/jpackage/xpiped.app/Contents"
into "$distDir/X-Pipe.app/Contents/"
into "$distDir/XPipe.app/Contents/"
}
copy {
from "$projectDir/logo/logo.icns"
into "$distDir/X-Pipe.app/Contents/Resources/"
into "$distDir/XPipe.app/Contents/Resources/"
}
copy {
from "$distDir/cli/xpipe"
into "$distDir/X-Pipe.app/Contents/MacOS/"
into "$distDir/XPipe.app/Contents/MacOS/"
}
copy {
from "$distDir/licenses"
into "$distDir/X-Pipe.app/Contents/Resources/licenses"
into "$distDir/XPipe.app/Contents/Resources/licenses"
}
copy {
from "$distDir/docs/html5"
into "$distDir/X-Pipe.app/Contents/Resources/cli/docs"
into "$distDir/XPipe.app/Contents/Resources/cli/docs"
}
copy {
from "$distDir/docs/manpage"
into "$distDir/X-Pipe.app/Contents/Resources/cli/man"
into "$distDir/XPipe.app/Contents/Resources/cli/man"
}
copy {
from "$distDir/cli/xpipe_completion"
into "$distDir/X-Pipe.app/Contents/Resources/cli/"
into "$distDir/XPipe.app/Contents/Resources/cli/"
}
copy {
from "$projectDir/PkgInstaller/darwin/Resources/uninstall.sh"
into "$distDir/X-Pipe.app/Contents/Resources/scripts/"
into "$distDir/XPipe.app/Contents/Resources/scripts/"
}
file("$distDir/X-Pipe.app/Contents/Resources/scripts/uninstall.sh").text = file("$distDir/X-Pipe.app/Contents/Resources/scripts/uninstall.sh").text
.replaceAll("__PRODUCT__", "X-Pipe")
file("$distDir/XPipe.app/Contents/Resources/scripts/uninstall.sh").text = file("$distDir/XPipe.app/Contents/Resources/scripts/uninstall.sh").text
.replaceAll("__PRODUCT__", "XPipe")
.replaceAll("__VERSION__", version.toString())
def debugArguments = file("$projectDir/debug/debug_arguments.txt").text.lines().map(s -> '"' + s + '"').collect(Collectors.joining(
' '))
def debugAttachArguments = file("$projectDir/debug/mac/debug_attach_arguments.txt").text.lines().map(s -> '"' + s + '"').collect(
Collectors.joining(' '))
file("$distDir/X-Pipe.app/Contents/Resources/scripts").mkdirs()
file("$distDir/X-Pipe.app/Contents/Resources/scripts/xpiped_debug.sh").text = file("$projectDir/debug/mac/xpiped_debug.sh").text.replace(
file("$distDir/XPipe.app/Contents/Resources/scripts").mkdirs()
file("$distDir/XPipe.app/Contents/Resources/scripts/xpiped_debug.sh").text = file("$projectDir/debug/mac/xpiped_debug.sh").text.replace(
'JVM-ARGS',
debugArguments)
file("$distDir/X-Pipe.app/Contents/Resources/scripts/xpiped_debug.sh").executable = true
file("$distDir/X-Pipe.app/Contents/Resources/scripts/xpiped_debug_attach.sh").text = file("$projectDir/debug/mac/xpiped_debug.sh").text.replace(
file("$distDir/XPipe.app/Contents/Resources/scripts/xpiped_debug.sh").executable = true
file("$distDir/XPipe.app/Contents/Resources/scripts/xpiped_debug_attach.sh").text = file("$projectDir/debug/mac/xpiped_debug.sh").text.replace(
'JVM-ARGS',
debugAttachArguments + ' ' + debugArguments)
file("$distDir/X-Pipe.app/Contents/Resources/scripts/xpiped_debug_attach.sh").executable = true
file("$distDir/XPipe.app/Contents/Resources/scripts/xpiped_debug_attach.sh").executable = true
if (System.getenv("MACOS_DEVELOPER_ID_APPLICATION_CERTIFICATE_NAME") != null) {
exec {

View file

@ -13,7 +13,7 @@ def releaseArguments = distJvmArgs + [
]
if (org.gradle.internal.os.OperatingSystem.current().isMacOsX()) {
releaseArguments += '-Xdock:name=X-Pipe'
releaseArguments += '-Xdock:name=XPipe'
}
// To remove warnings, the plugin probably does not expect the JPackage tasks to be in a separate project
@ -74,7 +74,7 @@ jlink {
imageOptions += [
'--mac-sign',
'--mac-package-signing-prefix', 'io.xpipe.app',
'--mac-package-name', "X-Pipe Desktop",
'--mac-package-name', "XPipe Desktop",
'--mac-app-category', 'productivity',
// '--mac-entitlements', "$projectDir/misc/mac/Entitlements.plist"
]
@ -89,7 +89,7 @@ jlink {
appVersion = modifiedVersion
}
skipInstaller = true
applicationName = 'X-Pipe'
applicationName = 'XPipe'
}
}

View file

@ -64,7 +64,7 @@ public class SampleAction implements ActionProvider {
}
// Commands can also be more complex and span multiple lines.
// In this case, X-Pipe will internally write a command to a script file and then execute the script
// In this case, XPipe will internally write a command to a script file and then execute the script
try (CommandControl cc = sc.command(
"""
VAR="value"
@ -77,7 +77,7 @@ public class SampleAction implements ActionProvider {
// More customization options
// If the command should be run as root, the command will be executed with
// sudo and the optional sudo password automatically provided by X-Pipe
// sudo and the optional sudo password automatically provided by XPipe
// by using the information from the connection store.
// You can also set a custom working directory.
try (CommandControl cc = sc.command("kill <pid>").elevated().workingDirectory("/").start()) {

View file

@ -99,9 +99,9 @@ uninstall() {
fi
;;
Darwin)
if [ -d "/Applications/X-Pipe.app" ]; then
if [ -d "/Applications/XPipe.app" ]; then
info "Uninstalling previous version"
sudo /Applications/X-Pipe.app/Contents/Resources/scripts/uninstall.sh
sudo /Applications/XPipe.app/Contents/Resources/scripts/uninstall.sh
fi
;;
*)
@ -165,7 +165,7 @@ check_architecture() {
;;
esac
error "Sorry! X-Pipe currently does not provide your processor architecture."
error "Sorry! XPipe currently does not provide your processor architecture."
return 1
}
@ -180,7 +180,7 @@ download_archive="$(
)"
exit_status="$?"
if [ "$exit_status" != 0 ]; then
error "Could not download X-Pipe release."
error "Could not download XPipe release."
exit "$exit_status"
fi

View file

@ -1,6 +1,6 @@
## Gradle Scripts
This directory contains helper scripts and Java module generation rules for dependencies used by various X-Pipe gradle projects.
This directory contains helper scripts and Java module generation rules for dependencies used by various XPipe gradle projects.
It also contains various other types of shared build script components that are useful.
As the [jlink](https://docs.oracle.com/en/java/javase/17/docs/specs/man/jlink.html) tool

View file

@ -34,7 +34,7 @@ test {
// Use cmd window for tests
if (!rootProject.ci && DefaultNativePlatform.currentOperatingSystem.isWindows()) {
systemProperty "io.xpipe.beacon.customDaemonCommand",
"cmd.exe /c start \"\"X-Pipe Debug\"\" /i \"$rootDir\\gradlew.bat\" --console=plain $daemonCommand"
"cmd.exe /c start \"\"XPipe Debug\"\" /i \"$rootDir\\gradlew.bat\" --console=plain $daemonCommand"
}