@easonwumac/computer-linker 0.1.3 → 0.1.4
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/CHANGELOG.md +8 -0
- package/README.md +9 -8
- package/dist/cli.js +40 -11
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,14 @@ All notable changes to Computer Linker will be documented in this file.
|
|
|
5
5
|
This project follows a small pre-1.0 changelog: breaking contract changes are
|
|
6
6
|
called out even when the package version is still `0.x`.
|
|
7
7
|
|
|
8
|
+
## 0.1.4 - 2026-06-27
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Added `computer-linker check` as the productized install check command. It
|
|
13
|
+
runs the existing isolated self-test flow while keeping `self-test` as a
|
|
14
|
+
compatibility/advanced command.
|
|
15
|
+
|
|
8
16
|
## 0.1.3 - 2026-06-27
|
|
9
17
|
|
|
10
18
|
### Added
|
package/README.md
CHANGED
|
@@ -16,10 +16,11 @@ computer; Cloudflare, Tailscale, or OpenAI tunnel exposure is optional.
|
|
|
16
16
|
|
|
17
17
|
Install the CLI, expose one folder, and keep the server running:
|
|
18
18
|
|
|
19
|
-
```powershell
|
|
20
|
-
npm install -g @easonwumac/computer-linker
|
|
21
|
-
computer-linker
|
|
22
|
-
|
|
19
|
+
```powershell
|
|
20
|
+
npm install -g @easonwumac/computer-linker
|
|
21
|
+
computer-linker check
|
|
22
|
+
computer-linker start C:\Projects\my-app
|
|
23
|
+
```
|
|
23
24
|
|
|
24
25
|
Leave that terminal running. In another terminal, copy the MCP client settings
|
|
25
26
|
and verify the connection:
|
|
@@ -65,10 +66,10 @@ File content reads and text searches block common sensitive files by default,
|
|
|
65
66
|
including `.env*`, private keys, credential JSON files, and cloud CLI credential
|
|
66
67
|
directories. Keep real secrets outside exposed folders.
|
|
67
68
|
|
|
68
|
-
`
|
|
69
|
-
config and workspace, starts a loopback HTTP MCP server, verifies `/healthz`,
|
|
70
|
-
the local JSON API, MCP initialize, tools/list, `get_computer_info`, and one
|
|
71
|
-
read-only `computer_operation`, then removes the temporary files.
|
|
69
|
+
`check` is safe to run before exposing real folders. It creates a temporary
|
|
70
|
+
config and workspace, starts a loopback HTTP MCP server, verifies `/healthz`,
|
|
71
|
+
the local JSON API, MCP initialize, tools/list, `get_computer_info`, and one
|
|
72
|
+
read-only `computer_operation`, then removes the temporary files.
|
|
72
73
|
|
|
73
74
|
There is no web dashboard in the product path. Human setup and management are
|
|
74
75
|
CLI-first; MCP and the JSON API are only protocol surfaces for clients,
|
package/dist/cli.js
CHANGED
|
@@ -84,6 +84,9 @@ async function main(argv) {
|
|
|
84
84
|
case "status":
|
|
85
85
|
status(args);
|
|
86
86
|
return;
|
|
87
|
+
case "check":
|
|
88
|
+
await selfTest(args, "check");
|
|
89
|
+
return;
|
|
87
90
|
case "self-test":
|
|
88
91
|
await selfTest(args);
|
|
89
92
|
return;
|
|
@@ -143,7 +146,7 @@ function normalizeCommand(command) {
|
|
|
143
146
|
throw new Error("connect-profile was removed; use `computer-linker client chatgpt profile` only when ChatGPT asks for connector-specific fields.");
|
|
144
147
|
if (command === "chatgpt")
|
|
145
148
|
throw new Error("chatgpt was removed; use `computer-linker client chatgpt <subcommand>` only when ChatGPT asks for connector-specific fields.");
|
|
146
|
-
if (command === "init" || command === "start" || command === "quickstart" || command === "status" || command === "self-test" || command === "expose" || command === "tunnel" || command === "service" || command === "workspace" || command === "process" || command === "screen" || command === "doctor" || command === "diagnose" || command === "history" || command === "profile" || command === "client" || command === "config" || command === "setup")
|
|
149
|
+
if (command === "init" || command === "start" || command === "quickstart" || command === "status" || command === "check" || command === "self-test" || command === "expose" || command === "tunnel" || command === "service" || command === "workspace" || command === "process" || command === "screen" || command === "doctor" || command === "diagnose" || command === "history" || command === "profile" || command === "client" || command === "config" || command === "setup")
|
|
147
150
|
return command;
|
|
148
151
|
if (command === "version" || command === "--version" || command === "-v")
|
|
149
152
|
return "version";
|
|
@@ -166,9 +169,12 @@ function status(args) {
|
|
|
166
169
|
}
|
|
167
170
|
process.stdout.write(args.includes("--details") ? formatDetailedCliStatus(report) : formatCliStatus(report));
|
|
168
171
|
}
|
|
169
|
-
async function selfTest(args) {
|
|
172
|
+
async function selfTest(args, commandLabel = "self-test") {
|
|
170
173
|
if (hasHelpFlag(args)) {
|
|
171
|
-
|
|
174
|
+
if (commandLabel === "check")
|
|
175
|
+
printCheckHelp();
|
|
176
|
+
else
|
|
177
|
+
printSelfTestHelp();
|
|
172
178
|
return;
|
|
173
179
|
}
|
|
174
180
|
const unknown = args.filter((arg, index) => (arg !== "--json" &&
|
|
@@ -176,8 +182,8 @@ async function selfTest(args) {
|
|
|
176
182
|
arg !== "--timeout-ms" &&
|
|
177
183
|
args[index - 1] !== "--timeout-ms"));
|
|
178
184
|
if (unknown.length > 0)
|
|
179
|
-
throw new Error(`Unknown
|
|
180
|
-
const timeoutMs = readOptionalIntegerOption(args, "--timeout-ms",
|
|
185
|
+
throw new Error(`Unknown ${commandLabel} option: ${unknown[0]}`);
|
|
186
|
+
const timeoutMs = readOptionalIntegerOption(args, "--timeout-ms", `${commandLabel} --timeout-ms`) ?? 15000;
|
|
181
187
|
const keepTemp = args.includes("--keep-temp");
|
|
182
188
|
const tempRoot = mkdtempSync(join(tmpdir(), "computer-linker-self-test-"));
|
|
183
189
|
const configDir = join(tempRoot, "config");
|
|
@@ -3484,7 +3490,7 @@ function buildQuickstartReport(options) {
|
|
|
3484
3490
|
"Use the startup check printed by start as the first readiness signal.",
|
|
3485
3491
|
"Run client setup --show-token only on a trusted local screen when configuring client auth.",
|
|
3486
3492
|
"Use client setup --details when the MCP client or agent needs full setup instructions.",
|
|
3487
|
-
"Use
|
|
3493
|
+
"Use check only when you want an isolated install check.",
|
|
3488
3494
|
];
|
|
3489
3495
|
if (options.tunnelProvider) {
|
|
3490
3496
|
nextActions.push("Use tunnel status and connection history to confirm traffic reaches /mcp only.");
|
|
@@ -3507,7 +3513,7 @@ function buildQuickstartReport(options) {
|
|
|
3507
3513
|
openaiTunnelId: options.tunnelProvider === "openai" ? options.openaiTunnelId ?? "tunnel_..." : null,
|
|
3508
3514
|
},
|
|
3509
3515
|
commands: {
|
|
3510
|
-
selfTest: formatCliCommand([...commandParts, "
|
|
3516
|
+
selfTest: formatCliCommand([...commandParts, "check"]),
|
|
3511
3517
|
start: formatCliCommand(startParts),
|
|
3512
3518
|
status: formatCliCommand([...commandParts, "status"]),
|
|
3513
3519
|
token: formatCliCommand([...commandParts, "client", "setup", "--show-token"]),
|
|
@@ -3667,6 +3673,10 @@ function printHelp(args = []) {
|
|
|
3667
3673
|
printStatusHelp();
|
|
3668
3674
|
return;
|
|
3669
3675
|
}
|
|
3676
|
+
if (topic === "check" && rest.length === 0) {
|
|
3677
|
+
printCheckHelp();
|
|
3678
|
+
return;
|
|
3679
|
+
}
|
|
3670
3680
|
if ((topic === "self-test" || topic === "selftest") && rest.length === 0) {
|
|
3671
3681
|
printSelfTestHelp();
|
|
3672
3682
|
return;
|
|
@@ -3753,14 +3763,16 @@ function printCoreHelp() {
|
|
|
3753
3763
|
"Usage:",
|
|
3754
3764
|
" computer-linker start <workspace-path>",
|
|
3755
3765
|
" computer-linker start <workspace-path> --tunnel openai|tailscale|cloudflare",
|
|
3766
|
+
" computer-linker check",
|
|
3756
3767
|
" computer-linker client setup",
|
|
3757
3768
|
" computer-linker status",
|
|
3758
3769
|
" computer-linker help advanced",
|
|
3759
3770
|
"",
|
|
3760
3771
|
"First run:",
|
|
3761
|
-
" 1.
|
|
3762
|
-
" 2.
|
|
3763
|
-
" 3.
|
|
3772
|
+
" 1. Optional install check: computer-linker check",
|
|
3773
|
+
" 2. Start local: computer-linker start C:\\Projects\\my-app",
|
|
3774
|
+
" 3. Connect client: computer-linker client setup",
|
|
3775
|
+
" 4. Check state: computer-linker status",
|
|
3764
3776
|
"",
|
|
3765
3777
|
"Cloud client:",
|
|
3766
3778
|
" computer-linker start C:\\Projects\\my-app --tunnel openai --tunnel-id tunnel_...",
|
|
@@ -3777,7 +3789,7 @@ function printCoreHelp() {
|
|
|
3777
3789
|
" By default, start allows file edits and approved project commands for normal development work.",
|
|
3778
3790
|
" Use --read-only to inspect only; use --full-trust only when Codex and screen capture are intended.",
|
|
3779
3791
|
" Tokens stay hidden by default; use client setup --show-token only on a trusted local setup screen.",
|
|
3780
|
-
" Details: computer-linker help start | computer-linker help client setup | computer-linker help advanced",
|
|
3792
|
+
" Details: computer-linker help check | computer-linker help start | computer-linker help client setup | computer-linker help advanced",
|
|
3781
3793
|
]);
|
|
3782
3794
|
}
|
|
3783
3795
|
function printStartHelp() {
|
|
@@ -4063,6 +4075,22 @@ function printSelfTestHelp() {
|
|
|
4063
4075
|
" computer-linker self-test",
|
|
4064
4076
|
].join("\n"));
|
|
4065
4077
|
}
|
|
4078
|
+
function printCheckHelp() {
|
|
4079
|
+
console.log([
|
|
4080
|
+
"Computer Linker check",
|
|
4081
|
+
"",
|
|
4082
|
+
"Usage:",
|
|
4083
|
+
" computer-linker check [--json] [--keep-temp] [--timeout-ms ms]",
|
|
4084
|
+
"",
|
|
4085
|
+
"What it does:",
|
|
4086
|
+
" Runs an isolated install check without touching your real config or folders.",
|
|
4087
|
+
" Creates a temporary config and workspace, starts a loopback MCP server,",
|
|
4088
|
+
" verifies health, MCP initialize, tools/list, get_computer_info, and one read-only computer_operation.",
|
|
4089
|
+
"",
|
|
4090
|
+
"Example:",
|
|
4091
|
+
" computer-linker check",
|
|
4092
|
+
].join("\n"));
|
|
4093
|
+
}
|
|
4066
4094
|
function printDoctorHelp() {
|
|
4067
4095
|
console.log([
|
|
4068
4096
|
"Computer Linker doctor",
|
|
@@ -4462,6 +4490,7 @@ function printAdvancedHelp() {
|
|
|
4462
4490
|
" computer-linker start --tunnel tailscale",
|
|
4463
4491
|
" computer-linker start --tunnel openai --tunnel-id tunnel_...",
|
|
4464
4492
|
" computer-linker status [--details] [--json]",
|
|
4493
|
+
" computer-linker check [--json] [--keep-temp] [--timeout-ms ms]",
|
|
4465
4494
|
" computer-linker self-test [--json] [--keep-temp] [--timeout-ms ms]",
|
|
4466
4495
|
" computer-linker process list <workspace-id> [--json]",
|
|
4467
4496
|
" computer-linker process read <workspace-id> <process-id> [--json]",
|