starmux 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cli/mac-mcp-gateway.js +4 -3
- package/dist/src/cli/mac-mcp-gateway.js.map +1 -1
- package/dist/src/cli/starmux.js +1 -1
- package/dist/src/cli/starmux.js.map +1 -1
- package/dist/src/runtime-paths.js +3 -3
- package/dist/src/runtime-paths.js.map +1 -1
- package/dist/vendor/desktop-commander/LICENSE +21 -0
- package/dist/vendor/desktop-commander/dist/bootstrap.js +22 -0
- package/dist/vendor/desktop-commander/dist/command-manager.js +246 -0
- package/dist/vendor/desktop-commander/dist/config-field-definitions.js +37 -0
- package/dist/vendor/desktop-commander/dist/config-manager.js +634 -0
- package/dist/vendor/desktop-commander/dist/config-recovery.js +81 -0
- package/dist/vendor/desktop-commander/dist/config.js +19 -0
- package/dist/vendor/desktop-commander/dist/custom-stdio.js +358 -0
- package/dist/vendor/desktop-commander/dist/error-handlers.js +15 -0
- package/dist/vendor/desktop-commander/dist/handlers/edit-search-handlers.js +6 -0
- package/dist/vendor/desktop-commander/dist/handlers/filesystem-handlers.js +450 -0
- package/dist/vendor/desktop-commander/dist/handlers/history-handlers.js +67 -0
- package/dist/vendor/desktop-commander/dist/handlers/index.js +7 -0
- package/dist/vendor/desktop-commander/dist/handlers/process-handlers.js +15 -0
- package/dist/vendor/desktop-commander/dist/handlers/search-answers.js +172 -0
- package/dist/vendor/desktop-commander/dist/handlers/search-handlers.js +136 -0
- package/dist/vendor/desktop-commander/dist/handlers/terminal-handlers.js +35 -0
- package/dist/vendor/desktop-commander/dist/index.js +88 -0
- package/dist/vendor/desktop-commander/dist/search-manager.js +1262 -0
- package/dist/vendor/desktop-commander/dist/server.js +1414 -0
- package/dist/vendor/desktop-commander/dist/terminal-manager.js +757 -0
- package/dist/vendor/desktop-commander/dist/tools/config.js +211 -0
- package/dist/vendor/desktop-commander/dist/tools/edit.js +455 -0
- package/dist/vendor/desktop-commander/dist/tools/feedback.js +10 -0
- package/dist/vendor/desktop-commander/dist/tools/filesystem.js +1047 -0
- package/dist/vendor/desktop-commander/dist/tools/fuzzySearch.js +74 -0
- package/dist/vendor/desktop-commander/dist/tools/fuzzySearchCore.js +125 -0
- package/dist/vendor/desktop-commander/dist/tools/improved-process-tools.js +726 -0
- package/dist/vendor/desktop-commander/dist/tools/mime-types.js +28 -0
- package/dist/vendor/desktop-commander/dist/tools/pdf/extract-images.js +131 -0
- package/dist/vendor/desktop-commander/dist/tools/pdf/index.js +4 -0
- package/dist/vendor/desktop-commander/dist/tools/pdf/lib/pdf2md.js +78 -0
- package/dist/vendor/desktop-commander/dist/tools/pdf/manipulations.js +112 -0
- package/dist/vendor/desktop-commander/dist/tools/pdf/markdown.js +30 -0
- package/dist/vendor/desktop-commander/dist/tools/pdf/utils.js +45 -0
- package/dist/vendor/desktop-commander/dist/tools/process.js +90 -0
- package/dist/vendor/desktop-commander/dist/tools/prompts.js +259 -0
- package/dist/vendor/desktop-commander/dist/tools/schemas.js +242 -0
- package/dist/vendor/desktop-commander/dist/tools/usage.js +24 -0
- package/dist/vendor/desktop-commander/dist/types.js +1 -0
- package/dist/vendor/desktop-commander/dist/ui/config-editor/config-editor-runtime.js +150 -0
- package/dist/vendor/desktop-commander/dist/ui/config-editor/index.html +13 -0
- package/dist/vendor/desktop-commander/dist/ui/config-editor/styles.css +587 -0
- package/dist/vendor/desktop-commander/dist/ui/contracts.js +57 -0
- package/dist/vendor/desktop-commander/dist/ui/file-preview/index.html +16 -0
- package/dist/vendor/desktop-commander/dist/ui/file-preview/preview-runtime.js +471 -0
- package/dist/vendor/desktop-commander/dist/ui/file-preview/shared/preview-file-types.js +59 -0
- package/dist/vendor/desktop-commander/dist/ui/file-preview/styles.css +1631 -0
- package/dist/vendor/desktop-commander/dist/ui/resources.js +93 -0
- package/dist/vendor/desktop-commander/dist/utils/ab-test.js +122 -0
- package/dist/vendor/desktop-commander/dist/utils/atomic-write.js +80 -0
- package/dist/vendor/desktop-commander/dist/utils/capture.js +40 -0
- package/dist/vendor/desktop-commander/dist/utils/dockerPrompt.js +9 -0
- package/dist/vendor/desktop-commander/dist/utils/exit-process.js +31 -0
- package/dist/vendor/desktop-commander/dist/utils/feature-flags.js +18 -0
- package/dist/vendor/desktop-commander/dist/utils/files/base.js +5 -0
- package/dist/vendor/desktop-commander/dist/utils/files/binary.js +65 -0
- package/dist/vendor/desktop-commander/dist/utils/files/docx.js +694 -0
- package/dist/vendor/desktop-commander/dist/utils/files/excel.js +497 -0
- package/dist/vendor/desktop-commander/dist/utils/files/factory.js +168 -0
- package/dist/vendor/desktop-commander/dist/utils/files/image.js +89 -0
- package/dist/vendor/desktop-commander/dist/utils/files/index.js +14 -0
- package/dist/vendor/desktop-commander/dist/utils/files/pdf.js +124 -0
- package/dist/vendor/desktop-commander/dist/utils/files/text.js +423 -0
- package/dist/vendor/desktop-commander/dist/utils/fuzzySearchLogger.js +126 -0
- package/dist/vendor/desktop-commander/dist/utils/internal-facts.js +23 -0
- package/dist/vendor/desktop-commander/dist/utils/lazy-package.js +44 -0
- package/dist/vendor/desktop-commander/dist/utils/lineEndingHandler.js +77 -0
- package/dist/vendor/desktop-commander/dist/utils/logger.js +72 -0
- package/dist/vendor/desktop-commander/dist/utils/mcp-ui-ab-test.js +62 -0
- package/dist/vendor/desktop-commander/dist/utils/open-browser.js +2 -0
- package/dist/vendor/desktop-commander/dist/utils/process-detection.js +260 -0
- package/dist/vendor/desktop-commander/dist/utils/process-tree.js +223 -0
- package/dist/vendor/desktop-commander/dist/utils/rename.js +74 -0
- package/dist/vendor/desktop-commander/dist/utils/ripgrep-resolver.js +69 -0
- package/dist/vendor/desktop-commander/dist/utils/shell.js +187 -0
- package/dist/vendor/desktop-commander/dist/utils/system-info.js +727 -0
- package/dist/vendor/desktop-commander/dist/utils/terminal-timestamps.js +18 -0
- package/dist/vendor/desktop-commander/dist/utils/toolHistory.js +309 -0
- package/dist/vendor/desktop-commander/dist/utils/trackTools.js +55 -0
- package/dist/vendor/desktop-commander/dist/utils/unsupportedParams.js +66 -0
- package/dist/vendor/desktop-commander/dist/utils/usageTracker.js +225 -0
- package/dist/vendor/desktop-commander/dist/utils/welcome-onboarding.js +2 -0
- package/dist/vendor/desktop-commander/dist/utils/withTimeout.js +85 -0
- package/dist/vendor/desktop-commander/dist/version.js +1 -0
- package/dist/vendor/desktop-commander/package.json +15 -0
- package/package.json +14 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { supportedHost } from "../platform.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import { legacyCliEntry as cliEntry, packageRoot, desktopCommanderEntry } from "../runtime-paths.js";
|
|
3
|
+
import { legacyCliEntry as cliEntry, packageRoot, desktopCommanderEntry, desktopCommanderPackageJson } from "../runtime-paths.js";
|
|
4
4
|
import { errorCode, errorMessage, isInteger, parseJSON } from "../validation.js";
|
|
5
|
-
const packageSchema = z.object({ version: z.string(), dependencies: z.record(z.string()) });
|
|
5
|
+
const packageSchema = z.object({ version: z.string(), dependencies: z.record(z.string()), devDependencies: z.record(z.string()).optional() });
|
|
6
6
|
// Minimal, portable local Gateway entrypoint. No implicit public network binding.
|
|
7
7
|
import { access, readFile } from "node:fs/promises";
|
|
8
8
|
import path from "node:path";
|
|
@@ -71,11 +71,12 @@ Gateway key authentication is optional; access defaults to managed by ingress.
|
|
|
71
71
|
`);
|
|
72
72
|
}
|
|
73
73
|
async function doctor() {
|
|
74
|
+
const vendorPkg = await readFile(desktopCommanderPackageJson, "utf8").then(t => z.object({ version: z.string() }).parse(parseJSON(t))).catch(() => null);
|
|
74
75
|
const facts = { event: "GATEWAY_DOCTOR", node: process.version, platform: process.platform,
|
|
75
76
|
workspaceConfigured: Boolean(process.env.MAC_MCP_PROJECT_ROOT),
|
|
76
77
|
mode: process.env.MAC_MCP_WORKSPACE_MODE || "read-only",
|
|
77
78
|
devCommands: process.env.MAC_MCP_DEV_COMMANDS || "presets",
|
|
78
|
-
upstreamVersion: pkg.dependencies?.["@wonderwhy-er/desktop-commander"] || null };
|
|
79
|
+
upstreamVersion: vendorPkg?.version || pkg.dependencies?.["@wonderwhy-er/desktop-commander"] || pkg.devDependencies?.["@wonderwhy-er/desktop-commander"] || null };
|
|
79
80
|
let code = 0;
|
|
80
81
|
try {
|
|
81
82
|
const { createProjectPolicy } = await import("../project-workspace-policy.js");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mac-mcp-gateway.js","sourceRoot":"","sources":["../../../src/cli/mac-mcp-gateway.ts"],"names":[],"mappings":"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","sourcesContent":["import {supportedHost} from \"../platform.js\";\nimport { z } from \"zod\";\nimport { legacyCliEntry as cliEntry,packageRoot,desktopCommanderEntry } from \"../runtime-paths.js\";\nimport { errorCode,errorMessage,isInteger,parseJSON } from \"../validation.js\";\nconst packageSchema=z.object({version:z.string(),dependencies:z.record(z.string())});\n// Minimal, portable local Gateway entrypoint. No implicit public network binding.\nimport { access,readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nconst project=packageRoot;\nconst pkg=packageSchema.parse(parseJSON(await readFile(path.join(project,\"package.json\"),\"utf8\")));\nconst command=process.argv[2]||\"help\";\n\nfunction help(){\n process.stdout.write(`Mac MCP Gateway ${pkg.version}\n\nUsage:\n mac-mcp-gateway instance create NAME --project /absolute/path\n mac-mcp-gateway instance list [--json]\n mac-mcp-gateway instance import FILE --name NAME [--link]\n mac-mcp-gateway instance copy|rename NAME NEW_NAME\n mac-mcp-gateway instance default|archive|restore NAME\n mac-mcp-gateway instance migrate [setup|live] [--confirm]\n mac-mcp-gateway config path|show|edit|validate|diff|apply --instance NAME\n mac-mcp-gateway run|stop|status|doctor|verify|logs --instance NAME\n mac-mcp-gateway status --all --json\n\n mac-mcp-gateway run [--port N] Foreground; Ctrl+C stops; current OS account\n mac-mcp-gateway run --app-parent-pid PID App-owned foreground; stops if GUI parent exits\n mac-mcp-gateway stop Stop the Core at the configured local endpoint\n mac-mcp-gateway status Human-readable health for the configured Core\n mac-mcp-gateway status --json Original structured status for scripts/agents\n mac-mcp-gateway logs [--lines N] Inspect local Gateway logs (owner only)\n mac-mcp-gateway privacy [--all] [--target /absolute/path]\n macOS only: compare terminal and Gateway protected-directory access\n\n mac-mcp-gateway access Show access mode and client credentials\n mac-mcp-gateway access create \"Name\" Create a key (displayed once)\n mac-mcp-gateway access mode api-key Require a key on every MCP request\n mac-mcp-gateway access mode ingress Delegate access control to ingress\n mac-mcp-gateway access revoke ID Revoke one credential immediately\n mac-mcp-gateway access oauth configure --issuer URL --resource URL --client-id ID --subjects SUBJECT\n Discover and save OAuth settings; does not enable auth\n mac-mcp-gateway access oauth doctor Check OAuth discovery and PKCE support\n mac-mcp-gateway access mode oauth Require OAuth on MCP requests\n mac-mcp-gateway access revoke-oauth ID Revoke an OAuth session locally\n mac-mcp-gateway access owner-token Show the local Dashboard management token\n\n mac-mcp-gateway setup Configure local access and connection preference\n mac-mcp-gateway doctor Check saved configuration and Desktop Commander\n mac-mcp-gateway verify Verify the running local MCP endpoint\n\n --profile auto|live|setup Advanced configuration selection only\n run --json Structured startup identity and lifecycle events\n\nConfiguration:\n Saved onboarding settings take precedence over legacy installation settings.\n run always starts the Core shipped with this CLI and displays its build identity.\n\nAdvanced environment-based doctor:\n MAC_MCP_PROJECT_ROOT=/absolute/canonical/project\n\nOptional:\n MAC_MCP_WORKSPACE_MODE=read-only|read-write (default read-only)\n MAC_MCP_PROJECT_PORT=8793 (127.0.0.1 only)\n MAC_MCP_DEV_COMMANDS=presets|trusted-project (default presets)\n MAC_MCP_GIT_MODE=off|review|write|push (default off)\n MAC_MCP_WORKTREE_MODE=off|linked (default off)\n\nIMPORTANT: trusted-project Shell inherits the current OS account's permissions.\nThe Core binds loopback. Configure protected HTTPS or Tunnel for remote access.\nGateway key authentication is optional; access defaults to managed by ingress.\n`);\n}\nasync function doctor(){\n const facts: {event:string;node:string;platform:string;workspaceConfigured:boolean;mode:string;devCommands:string;upstreamVersion:string|null;workspaceValidated?:boolean;workspaceMode?:string;gitMode?:string;worktreeMode?:string;desktopCommanderTools?:number;result?:string;reason?:string}={event:\"GATEWAY_DOCTOR\",node:process.version,platform:process.platform,\n workspaceConfigured:Boolean(process.env.MAC_MCP_PROJECT_ROOT),\n mode:process.env.MAC_MCP_WORKSPACE_MODE||\"read-only\",\n devCommands:process.env.MAC_MCP_DEV_COMMANDS||\"presets\",\n upstreamVersion:pkg.dependencies?.[\"@wonderwhy-er/desktop-commander\"]||null};\n let code=0;\n try{\n const {createProjectPolicy}=await import(\"../project-workspace-policy.js\");\n const {LocalDesktopReadProbe}=await import(\"../local-desktop-read-probe.js\");\n supportedHost();\n if(!facts.workspaceConfigured)throw Error(\"MAC_MCP_PROJECT_ROOT_REQUIRED\");\n const nativeAccessMode=process.env.MAC_MCP_DC_ACCESS_MODE||\"workspace\";\n if(![\"workspace\",\"native\"].includes(nativeAccessMode)||\n (nativeAccessMode===\"native\"&&\n (facts.devCommands!==\"trusted-project\"||facts.mode!==\"read-write\")))\n throw Error(\"NATIVE_ACCESS_REQUIRES_OWNER_TRUSTED_DEVELOPER_PROFILE\");\n const policy=await createProjectPolicy({\n root:process.env.MAC_MCP_PROJECT_ROOT,\n mode:facts.mode,developerCommands:facts.devCommands,\n allowTrustedHomeRoot:nativeAccessMode===\"native\"&&facts.devCommands===\"trusted-project\"\n });\n facts.workspaceValidated=true;\n facts.workspaceMode=policy.mode;\n const desiredPort=Number(process.env.MAC_MCP_PROJECT_PORT||8793);\n if(!isInteger(desiredPort)||desiredPort<0||desiredPort>65535)\n throw Error(\"INVALID_PROJECT_PORT\");\n const gitMode=process.env.MAC_MCP_GIT_MODE||\"off\";\n if(![\"off\",\"review\",\"write\",\"push\"].includes(gitMode))throw Error(\"INVALID_GIT_MODE\");\n facts.gitMode=gitMode;\n const worktreeMode=process.env.MAC_MCP_WORKTREE_MODE||\"off\";\n if(![\"off\",\"linked\"].includes(worktreeMode))throw Error(\"INVALID_WORKTREE_MODE\");\n facts.worktreeMode=worktreeMode;\n await access(desktopCommanderEntry);\n const dc=new LocalDesktopReadProbe({\n writeScope:process.env.MAC_MCP_DC_WRITE_SCOPE||\"unrestricted\"\n });\n try{\n await dc.connect();\n facts.desktopCommanderTools=dc.upstreamCatalog.length;\n if(!dc.upstreamCatalog.some(t=>t.name===\"start_process\"))\n throw Error(\"DESKTOP_COMMANDER_START_PROCESS_MISSING\");\n facts.result=\"PASS\";\n }finally{await dc.close().catch(()=>{});}\n }catch(error){\n facts.result=\"FAIL\";\n facts.reason=String(errorCode(error)||errorMessage(error)||\"UNKNOWN\").slice(0,100);\n code=1;\n }\n // Never include access tokens, project paths, command arguments or private filenames.\n process.stdout.write(JSON.stringify(facts)+\"\\n\");\n process.exitCode=code;\n}\nif(await (await import(\"./instances.js\")).maybeHandleInstances(process.argv.slice(2))){\n // Shared named-instance commands own their complete lifecycle.\n}else if(command===\"setup\"){\n process.argv.splice(2,1);\n await import(\"./setup-wizard.js\");\n}else if(command===\"access\"){\n try{await (await import(\"./access.js\")).accessCommand(process.argv.slice(3));}\n catch(error){process.stderr.write(\"GATEWAY_ACCESS_ERROR \"+errorMessage(error)+\"\\n\");process.exitCode=1;}\n}else if(command===\"verify\"){\n await import(\"./verify-setup.js\");\n}else if(command===\"help\"||command===\"--help\"||command===\"-h\"){\n help();\n}else if(command===\"doctor\"){\n if(process.env.MAC_MCP_PROJECT_ROOT)await doctor();\n else{\n try{\n const {loadSetupConfig,setupRuntimeEnv}=await import(\"../release1-onboarding.js\");\n Object.assign(process.env,setupRuntimeEnv(await loadSetupConfig()));\n await doctor();\n }catch(error){\n if(errorCode(error)===\"ENOENT\")await doctor();\n else process.stdout.write(JSON.stringify({event:\"GATEWAY_DOCTOR\",result:\"FAIL\",\n reason:errorCode(error)||errorMessage(error)})+\"\\n\");\n process.stderr.write(\"Run mac-mcp-gateway setup to configure local access.\\n\");\n process.exitCode=1;\n }\n }\n }else if([\"run\",\"install\",\"start\",\"stop\",\"restart\",\"status\",\"logs\",\"privacy\"].includes(command)){\n try{\n const {parseArgs,operatorCommand}=await import(\"../operator-cli.js\");\n const {options}=parseArgs(process.argv.slice(2));\n const result=await operatorCommand(command,{\n ...options,entry:cliEntry()\n });\n if(result.event===\"GATEWAY_LOGS\")process.stdout.write(result.output);\n else if(result.event===\"GATEWAY_RUN_EXIT\"&&!options.json&&options.appParentPid===undefined)\n process.stdout.write(result.code===0?\" Gateway stopped.\\n\":` Gateway exited with code ${result.code}.\\n`);\n else if(result.event===\"GATEWAY_STATUS\"&&!options.json){\n const {formatGatewayStatus}=await import(\"../gateway-status-format.js\");\n process.stdout.write(formatGatewayStatus(result,{\n version:pkg.version,color:Boolean(process.stdout.isTTY)&&!process.env.NO_COLOR\n }));\n }else process.stdout.write(JSON.stringify(result)+\"\\n\");\n if(result.event===\"GATEWAY_RUN_EXIT\")process.exitCode=result.code;\n }catch(error){\n process.stderr.write(\"GATEWAY_CLI_ERROR \"+\n String(errorCode(error)||errorMessage(error)||\"UNKNOWN\").slice(0,240)+\"\\n\");\n process.exitCode=1;\n }\n}else if(command===\"start-raw\"){\n // Legacy direct entry bypassed global one-Core arbitration. Never allow\n // a public subprocess to start a second ungoverned production Core.\n process.stderr.write(\"LEGACY_DIRECT_BOOTSTRAP_DISABLED_USE_SETUP\\n\");\n process.exitCode=2;\n}else if(command===\"doctor-setup\"||command===\"start-setup\"){\n try{\n const {loadSetupConfig,setupRuntimeEnv}=await import(\"../release1-onboarding.js\");\n if(command===\"start-setup\"){\n const ownerPid=Number(process.env.MAC_MCP_INTERNAL_SETUP_OWNER_PID);\n const runId=process.env.MAC_MCP_INTERNAL_SETUP_RUN_ID;\n const token=process.env.MAC_MCP_INTERNAL_SETUP_TOKEN;\n const internallyLaunched=Boolean(ownerPid&&runId&&token);\n if(!internallyLaunched){\n // Legacy user command is now an alias for supervised CLI Run.\n const {operatorCommand}=await import(\"../operator-cli.js\");\n const result=await operatorCommand(\"run\",{\n profile:\"setup\",entry:cliEntry()\n });\n process.stdout.write(JSON.stringify(result)+\"\\n\");\n if(result.event===\"GATEWAY_RUN_EXIT\")process.exitCode=result.code;\n }else{\n const {verifyInternalSetupWorker}=await import(\"../global-core-control.js\");\n const config=await loadSetupConfig(process.env.MAC_MCP_SETUP_FILE);\n verifyInternalSetupWorker({\n port:config.port,ownerPid,runId,token\n });\n Object.assign(process.env,setupRuntimeEnv(config));\n delete process.env.MAC_MCP_UPSTREAMS_FILE;\n const {runGateway}=await import(\"../dc-workspace-http.js\");\n await runGateway();\n }\n }else{\n const config=await loadSetupConfig(process.env.MAC_MCP_SETUP_FILE);\n Object.assign(process.env,setupRuntimeEnv(config));\n delete process.env.MAC_MCP_UPSTREAMS_FILE;\n await doctor();\n }\n }catch(error){\n process.stderr.write(\"SETUP_PROFILE_INVALID \"+\n String(errorCode(error)||errorMessage(error)||\"UNKNOWN\").slice(0,90)+\"\\n\");\n process.exitCode=1;\n }\n}else{\n process.stderr.write(\"Unknown command. Use --help.\\n\");\n process.exitCode=2;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mac-mcp-gateway.js","sourceRoot":"","sources":["../../../src/cli/mac-mcp-gateway.ts"],"names":[],"mappings":"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","sourcesContent":["import {supportedHost} from \"../platform.js\";\nimport { z } from \"zod\";\nimport { legacyCliEntry as cliEntry,packageRoot,desktopCommanderEntry,desktopCommanderPackageJson } from \"../runtime-paths.js\";\nimport { errorCode,errorMessage,isInteger,parseJSON } from \"../validation.js\";\nconst packageSchema=z.object({version:z.string(),dependencies:z.record(z.string()),devDependencies:z.record(z.string()).optional()});\n// Minimal, portable local Gateway entrypoint. No implicit public network binding.\nimport { access,readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nconst project=packageRoot;\nconst pkg=packageSchema.parse(parseJSON(await readFile(path.join(project,\"package.json\"),\"utf8\")));\nconst command=process.argv[2]||\"help\";\n\nfunction help(){\n process.stdout.write(`Mac MCP Gateway ${pkg.version}\n\nUsage:\n mac-mcp-gateway instance create NAME --project /absolute/path\n mac-mcp-gateway instance list [--json]\n mac-mcp-gateway instance import FILE --name NAME [--link]\n mac-mcp-gateway instance copy|rename NAME NEW_NAME\n mac-mcp-gateway instance default|archive|restore NAME\n mac-mcp-gateway instance migrate [setup|live] [--confirm]\n mac-mcp-gateway config path|show|edit|validate|diff|apply --instance NAME\n mac-mcp-gateway run|stop|status|doctor|verify|logs --instance NAME\n mac-mcp-gateway status --all --json\n\n mac-mcp-gateway run [--port N] Foreground; Ctrl+C stops; current OS account\n mac-mcp-gateway run --app-parent-pid PID App-owned foreground; stops if GUI parent exits\n mac-mcp-gateway stop Stop the Core at the configured local endpoint\n mac-mcp-gateway status Human-readable health for the configured Core\n mac-mcp-gateway status --json Original structured status for scripts/agents\n mac-mcp-gateway logs [--lines N] Inspect local Gateway logs (owner only)\n mac-mcp-gateway privacy [--all] [--target /absolute/path]\n macOS only: compare terminal and Gateway protected-directory access\n\n mac-mcp-gateway access Show access mode and client credentials\n mac-mcp-gateway access create \"Name\" Create a key (displayed once)\n mac-mcp-gateway access mode api-key Require a key on every MCP request\n mac-mcp-gateway access mode ingress Delegate access control to ingress\n mac-mcp-gateway access revoke ID Revoke one credential immediately\n mac-mcp-gateway access oauth configure --issuer URL --resource URL --client-id ID --subjects SUBJECT\n Discover and save OAuth settings; does not enable auth\n mac-mcp-gateway access oauth doctor Check OAuth discovery and PKCE support\n mac-mcp-gateway access mode oauth Require OAuth on MCP requests\n mac-mcp-gateway access revoke-oauth ID Revoke an OAuth session locally\n mac-mcp-gateway access owner-token Show the local Dashboard management token\n\n mac-mcp-gateway setup Configure local access and connection preference\n mac-mcp-gateway doctor Check saved configuration and Desktop Commander\n mac-mcp-gateway verify Verify the running local MCP endpoint\n\n --profile auto|live|setup Advanced configuration selection only\n run --json Structured startup identity and lifecycle events\n\nConfiguration:\n Saved onboarding settings take precedence over legacy installation settings.\n run always starts the Core shipped with this CLI and displays its build identity.\n\nAdvanced environment-based doctor:\n MAC_MCP_PROJECT_ROOT=/absolute/canonical/project\n\nOptional:\n MAC_MCP_WORKSPACE_MODE=read-only|read-write (default read-only)\n MAC_MCP_PROJECT_PORT=8793 (127.0.0.1 only)\n MAC_MCP_DEV_COMMANDS=presets|trusted-project (default presets)\n MAC_MCP_GIT_MODE=off|review|write|push (default off)\n MAC_MCP_WORKTREE_MODE=off|linked (default off)\n\nIMPORTANT: trusted-project Shell inherits the current OS account's permissions.\nThe Core binds loopback. Configure protected HTTPS or Tunnel for remote access.\nGateway key authentication is optional; access defaults to managed by ingress.\n`);\n}\nasync function doctor(){\n const vendorPkg=await readFile(desktopCommanderPackageJson,\"utf8\").then(t=>z.object({version:z.string()}).parse(parseJSON(t))).catch(()=>null);\n const facts: {event:string;node:string;platform:string;workspaceConfigured:boolean;mode:string;devCommands:string;upstreamVersion:string|null;workspaceValidated?:boolean;workspaceMode?:string;gitMode?:string;worktreeMode?:string;desktopCommanderTools?:number;result?:string;reason?:string}={event:\"GATEWAY_DOCTOR\",node:process.version,platform:process.platform,\n workspaceConfigured:Boolean(process.env.MAC_MCP_PROJECT_ROOT),\n mode:process.env.MAC_MCP_WORKSPACE_MODE||\"read-only\",\n devCommands:process.env.MAC_MCP_DEV_COMMANDS||\"presets\",\n upstreamVersion:vendorPkg?.version||pkg.dependencies?.[\"@wonderwhy-er/desktop-commander\"]||pkg.devDependencies?.[\"@wonderwhy-er/desktop-commander\"]||null};\n let code=0;\n try{\n const {createProjectPolicy}=await import(\"../project-workspace-policy.js\");\n const {LocalDesktopReadProbe}=await import(\"../local-desktop-read-probe.js\");\n supportedHost();\n if(!facts.workspaceConfigured)throw Error(\"MAC_MCP_PROJECT_ROOT_REQUIRED\");\n const nativeAccessMode=process.env.MAC_MCP_DC_ACCESS_MODE||\"workspace\";\n if(![\"workspace\",\"native\"].includes(nativeAccessMode)||\n (nativeAccessMode===\"native\"&&\n (facts.devCommands!==\"trusted-project\"||facts.mode!==\"read-write\")))\n throw Error(\"NATIVE_ACCESS_REQUIRES_OWNER_TRUSTED_DEVELOPER_PROFILE\");\n const policy=await createProjectPolicy({\n root:process.env.MAC_MCP_PROJECT_ROOT,\n mode:facts.mode,developerCommands:facts.devCommands,\n allowTrustedHomeRoot:nativeAccessMode===\"native\"&&facts.devCommands===\"trusted-project\"\n });\n facts.workspaceValidated=true;\n facts.workspaceMode=policy.mode;\n const desiredPort=Number(process.env.MAC_MCP_PROJECT_PORT||8793);\n if(!isInteger(desiredPort)||desiredPort<0||desiredPort>65535)\n throw Error(\"INVALID_PROJECT_PORT\");\n const gitMode=process.env.MAC_MCP_GIT_MODE||\"off\";\n if(![\"off\",\"review\",\"write\",\"push\"].includes(gitMode))throw Error(\"INVALID_GIT_MODE\");\n facts.gitMode=gitMode;\n const worktreeMode=process.env.MAC_MCP_WORKTREE_MODE||\"off\";\n if(![\"off\",\"linked\"].includes(worktreeMode))throw Error(\"INVALID_WORKTREE_MODE\");\n facts.worktreeMode=worktreeMode;\n await access(desktopCommanderEntry);\n const dc=new LocalDesktopReadProbe({\n writeScope:process.env.MAC_MCP_DC_WRITE_SCOPE||\"unrestricted\"\n });\n try{\n await dc.connect();\n facts.desktopCommanderTools=dc.upstreamCatalog.length;\n if(!dc.upstreamCatalog.some(t=>t.name===\"start_process\"))\n throw Error(\"DESKTOP_COMMANDER_START_PROCESS_MISSING\");\n facts.result=\"PASS\";\n }finally{await dc.close().catch(()=>{});}\n }catch(error){\n facts.result=\"FAIL\";\n facts.reason=String(errorCode(error)||errorMessage(error)||\"UNKNOWN\").slice(0,100);\n code=1;\n }\n // Never include access tokens, project paths, command arguments or private filenames.\n process.stdout.write(JSON.stringify(facts)+\"\\n\");\n process.exitCode=code;\n}\nif(await (await import(\"./instances.js\")).maybeHandleInstances(process.argv.slice(2))){\n // Shared named-instance commands own their complete lifecycle.\n}else if(command===\"setup\"){\n process.argv.splice(2,1);\n await import(\"./setup-wizard.js\");\n}else if(command===\"access\"){\n try{await (await import(\"./access.js\")).accessCommand(process.argv.slice(3));}\n catch(error){process.stderr.write(\"GATEWAY_ACCESS_ERROR \"+errorMessage(error)+\"\\n\");process.exitCode=1;}\n}else if(command===\"verify\"){\n await import(\"./verify-setup.js\");\n}else if(command===\"help\"||command===\"--help\"||command===\"-h\"){\n help();\n}else if(command===\"doctor\"){\n if(process.env.MAC_MCP_PROJECT_ROOT)await doctor();\n else{\n try{\n const {loadSetupConfig,setupRuntimeEnv}=await import(\"../release1-onboarding.js\");\n Object.assign(process.env,setupRuntimeEnv(await loadSetupConfig()));\n await doctor();\n }catch(error){\n if(errorCode(error)===\"ENOENT\")await doctor();\n else process.stdout.write(JSON.stringify({event:\"GATEWAY_DOCTOR\",result:\"FAIL\",\n reason:errorCode(error)||errorMessage(error)})+\"\\n\");\n process.stderr.write(\"Run mac-mcp-gateway setup to configure local access.\\n\");\n process.exitCode=1;\n }\n }\n }else if([\"run\",\"install\",\"start\",\"stop\",\"restart\",\"status\",\"logs\",\"privacy\"].includes(command)){\n try{\n const {parseArgs,operatorCommand}=await import(\"../operator-cli.js\");\n const {options}=parseArgs(process.argv.slice(2));\n const result=await operatorCommand(command,{\n ...options,entry:cliEntry()\n });\n if(result.event===\"GATEWAY_LOGS\")process.stdout.write(result.output);\n else if(result.event===\"GATEWAY_RUN_EXIT\"&&!options.json&&options.appParentPid===undefined)\n process.stdout.write(result.code===0?\" Gateway stopped.\\n\":` Gateway exited with code ${result.code}.\\n`);\n else if(result.event===\"GATEWAY_STATUS\"&&!options.json){\n const {formatGatewayStatus}=await import(\"../gateway-status-format.js\");\n process.stdout.write(formatGatewayStatus(result,{\n version:pkg.version,color:Boolean(process.stdout.isTTY)&&!process.env.NO_COLOR\n }));\n }else process.stdout.write(JSON.stringify(result)+\"\\n\");\n if(result.event===\"GATEWAY_RUN_EXIT\")process.exitCode=result.code;\n }catch(error){\n process.stderr.write(\"GATEWAY_CLI_ERROR \"+\n String(errorCode(error)||errorMessage(error)||\"UNKNOWN\").slice(0,240)+\"\\n\");\n process.exitCode=1;\n }\n}else if(command===\"start-raw\"){\n // Legacy direct entry bypassed global one-Core arbitration. Never allow\n // a public subprocess to start a second ungoverned production Core.\n process.stderr.write(\"LEGACY_DIRECT_BOOTSTRAP_DISABLED_USE_SETUP\\n\");\n process.exitCode=2;\n}else if(command===\"doctor-setup\"||command===\"start-setup\"){\n try{\n const {loadSetupConfig,setupRuntimeEnv}=await import(\"../release1-onboarding.js\");\n if(command===\"start-setup\"){\n const ownerPid=Number(process.env.MAC_MCP_INTERNAL_SETUP_OWNER_PID);\n const runId=process.env.MAC_MCP_INTERNAL_SETUP_RUN_ID;\n const token=process.env.MAC_MCP_INTERNAL_SETUP_TOKEN;\n const internallyLaunched=Boolean(ownerPid&&runId&&token);\n if(!internallyLaunched){\n // Legacy user command is now an alias for supervised CLI Run.\n const {operatorCommand}=await import(\"../operator-cli.js\");\n const result=await operatorCommand(\"run\",{\n profile:\"setup\",entry:cliEntry()\n });\n process.stdout.write(JSON.stringify(result)+\"\\n\");\n if(result.event===\"GATEWAY_RUN_EXIT\")process.exitCode=result.code;\n }else{\n const {verifyInternalSetupWorker}=await import(\"../global-core-control.js\");\n const config=await loadSetupConfig(process.env.MAC_MCP_SETUP_FILE);\n verifyInternalSetupWorker({\n port:config.port,ownerPid,runId,token\n });\n Object.assign(process.env,setupRuntimeEnv(config));\n delete process.env.MAC_MCP_UPSTREAMS_FILE;\n const {runGateway}=await import(\"../dc-workspace-http.js\");\n await runGateway();\n }\n }else{\n const config=await loadSetupConfig(process.env.MAC_MCP_SETUP_FILE);\n Object.assign(process.env,setupRuntimeEnv(config));\n delete process.env.MAC_MCP_UPSTREAMS_FILE;\n await doctor();\n }\n }catch(error){\n process.stderr.write(\"SETUP_PROFILE_INVALID \"+\n String(errorCode(error)||errorMessage(error)||\"UNKNOWN\").slice(0,90)+\"\\n\");\n process.exitCode=1;\n }\n}else{\n process.stderr.write(\"Unknown command. Use --help.\\n\");\n process.exitCode=2;\n}\n"]}
|
package/dist/src/cli/starmux.js
CHANGED
|
@@ -14,7 +14,7 @@ import { handle } from './instances.js';
|
|
|
14
14
|
import { desktopCommanderEntry } from '../runtime-paths.js';
|
|
15
15
|
import { shellQuote } from '../platform.js';
|
|
16
16
|
import { formatStarmuxStatus } from './starmux-status.js';
|
|
17
|
-
const version = '0.
|
|
17
|
+
const version = '0.13.0';
|
|
18
18
|
const strings = ['instance', 'port', 'lines', 'expires', 'issuer', 'resource', 'resource-aliases', 'client-id', 'subject', 'subjects', 'registration', 'token-auth', 'callback', 'revision', 'patch', 'file', 'output', 'name', 'target', 'mode', 'app-parent-pid'];
|
|
19
19
|
const booleans = ['help', 'version', 'json', 'write', 'code', 'read', 'yes', 'foreground', 'follow', 'archived', 'all', 'effective', 'link', 'allow-loopback-http', 'token-stdin', 'no-open', 'token'];
|
|
20
20
|
const options = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"starmux.js","sourceRoot":"","sources":["../../../src/cli/starmux.ts"],"names":[],"mappings":"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","sourcesContent":["import {parseArgs} from 'node:util';\nimport {spawn} from 'node:child_process';\nimport {createInterface} from 'node:readline/promises';\nimport {open,realpath,readFile,stat} from 'node:fs/promises';\nimport {homedir} from 'node:os';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport type {Transport} from '@modelcontextprotocol/sdk/shared/transport.js';\nimport {Client} from '@modelcontextprotocol/sdk/client/index.js';\nimport {StreamableHTTPClientTransport} from '@modelcontextprotocol/sdk/client/streamableHttp.js';\nimport {createAccessControl} from '../access-control.js';\nimport {instanceStatus,instanceRequest,runInstance} from '../instance-runtime.js';\nimport {atomicPrivate,availablePort,changeRegistry,configJSONSchema,createInstance,ensureAccessReady,exists,instanceConfigSchema,instancePaths,loadInstanceConfig,parseConfig,patchInstanceConfig,readRegistry,readTrusted,resolveInstance,saveInstanceConfig,suggestPort,validateConfig,type Instance,type InstanceConfig} from '../instance-store.js';\nimport {handle} from './instances.js';\nimport {desktopCommanderEntry} from '../runtime-paths.js';\nimport {shellQuote} from '../platform.js';\nimport {formatStarmuxStatus} from './starmux-status.js';\n\nconst version='0.12.0';\nconst strings=['instance','port','lines','expires','issuer','resource','resource-aliases','client-id','subject','subjects','registration','token-auth','callback','revision','patch','file','output','name','target','mode','app-parent-pid'];\nconst booleans=['help','version','json','write','code','read','yes','foreground','follow','archived','all','effective','link','allow-loopback-http','token-stdin','no-open','token'];\nconst options:Record<string,{type:'string'|'boolean';short?:string}>={};\nfor(const k of strings)options[k]={type:'string',...(k==='instance'?{short:'i'}:{})};\nfor(const k of booleans)options[k]={type:'boolean',...(k==='yes'?{short:'y'}:k==='follow'?{short:'f'}:k==='help'?{short:'h'}:k==='version'?{short:'v'}:{})};\nlet parsed:ReturnType<typeof parseArgs>;\ntry{parsed=parseArgs({args:process.argv.slice(2),options,allowPositionals:true,strict:true});}catch(error){process.stderr.write((error instanceof Error?error.message:String(error))+'\\n');process.exit(1);}\nconst flags=parsed.values;const positional=parsed.positionals;const command=positional.shift()??'help';\nconst string=(key:string)=>typeof flags[key]==='string'?flags[key] as string:undefined;\nconst yes=()=>flags.yes===true;const json=flags.json===true;\nconst print=(value:unknown)=>process.stdout.write(JSON.stringify(value,null,2)+'\\n');\nfunction fail(message:string):never{throw Error(message);}\nconst absolute=(value:string)=>path.resolve(value==='~'?homedir():value.startsWith('~/')?path.join(homedir(),value.slice(2)):value);\nconst pause=(ms:number)=>new Promise(resolve=>setTimeout(resolve,ms));\n\nfunction help(){\n const requested=command==='help'?positional[0]:command;\n const topic=requested==='stop'?'down':requested;\n const sections:Record<string,string>={\n up:'up [path] [--read | --write | --code] [-y] [--port N] [--foreground]\\n Initialize and start. First use defaults to CWD; later starts reuse saved settings.',\n init:'init [path] [--read | --write | --code] [-y] [--port N]\\n Save settings without starting. --write and --code enable full account coding permissions.',\n auth:'auth\\n auth key \"Client name\" [--expires 30d]\\n auth mode none|ingress|api-key|oauth\\n auth revoke ID\\n auth oauth init-keycloak --resource URL --callback URL\\n auth oauth setup --issuer URL --resource URL --client-id ID --subject USER_ID\\n auth oauth doctor',\n config:'config [show] [--effective]\\n config edit | diff | apply | validate | path | schema | recover\\n config default NAME | rename NEW_NAME -i SOURCE | copy NEW_NAME -i SOURCE\\n config archive -i NAME | restore -i NAME | import FILE [-i NAME] [--link]\\n config export [--output FILE] | secret set|remove NAME',\n dashboard:'dashboard [--no-open | --token]\\n Open the local Access console. --no-open prints a private login link.',\n verify:'verify [--token-stdin]\\n Test MCP initialization, tool discovery and workspace read. Authenticated instances use STARMUX_TOKEN or stdin.',\n doctor:'doctor\\n Check Node, bundled dependencies, workspace, configuration, port and authentication.',\n logs:'logs [-f | --follow] [--lines 1..200]\\n Follow continues across restarts. Ctrl+C exits the follower only.',\n migrate:'migrate [registry|setup|live] [-y]\\n No source: preview. Select a source to migrate, retaining originals.',\n status:'status [--all]\\n Show the selected instance, its actual endpoint and connection guide.',\n ls:'ls [--archived]\\n List local workspace instances.',\n rm:'rm [NAME] (alias for: config archive)\\n Stop and archive an instance.',\n down:'down (alias: stop)\\n Stop the selected instance.',\n permissions:'permissions [status | token]\\n permissions disable-tool|enable-tool|deny-directory|allow-directory TARGET\\n Manage the selected instance’s tool and directory permissions.',\n privacy:'privacy [--all] [--target PATH]\\n Check privacy access through the running instance.'\n };\n if(topic&&topic!=='help'&&!sections[topic])fail('Unknown command: '+topic+'. Run starmux --help.');\n const overview=[\n 'Connect AI clients to your computer’s files, shell and development tools.',\n '',\n 'Workspace Lifecycle:',\n ' starmux up [path] [--code] Start in the background (default: Read-only)',\n ' starmux down Stop the running instance (alias: stop)',\n ' starmux status Show health, endpoint and connection guide',\n ' starmux logs [-f] View or stream gateway logs',\n '',\n 'Access & Verification:',\n ' starmux auth Manage auth mode, API keys and OAuth',\n ' starmux dashboard Open the local Web Access Console',\n ' starmux verify Test local MCP handshake and workspace read',\n ' starmux doctor Check runtime, config, port and auth state',\n '',\n 'Multi-Instance & Config:',\n ' starmux ls List workspace instances',\n ' starmux rm [name] Stop and archive an instance',\n ' starmux init [path] Save instance settings without starting',\n ' starmux config Inspect, edit or apply configuration',\n ' starmux migrate Import settings from a legacy installation'\n ].join('\\n');\n process.stdout.write(`Starmux ${version}\\n\\n${sections[topic??'']??overview}\\n\\nGlobal: -i, --instance NAME_OR_ID --json -h, --help\\nUse starmux COMMAND --help for details.\\n`);\n}\nasync function confirm(message:string){\n if(yes())return;\n if(!process.stdin.isTTY)fail(message+' Re-run with -y to confirm.');\n const rl=createInterface({input:process.stdin,output:process.stderr});\n try{if(!/^y(es)?$/i.test((await rl.question(message+' [y/N] ')).trim()))fail('Cancelled.');}finally{rl.close();}\n}\nasync function consent(instance:Instance|undefined,config:InstanceConfig){\n if(config.accessRole!=='trusted'||config.writeScope!=='unrestricted')return;\n if(instance&&await exists(path.join(instancePaths(instance).state,'coding-consent.json'))){\n const record=JSON.parse(await readTrusted(path.join(instancePaths(instance).state,'coding-consent.json'))) as {version?:number;scope?:string};\n if(record.version===1&&record.scope==='os-account')return;\n }\n await confirm('Coding mode can modify files accessible to your OS account and execute Shell and Git. Enable?');\n}\nasync function rememberConsent(instance:Instance,config:InstanceConfig){\n if(config.accessRole==='trusted'&&config.writeScope==='unrestricted'&&!await exists(path.join(instancePaths(instance).state,'coding-consent.json')))await atomicPrivate(path.join(instancePaths(instance).state,'coding-consent.json'),JSON.stringify({version:1,scope:'os-account',approvedAt:new Date().toISOString()}));\n}\nasync function selected(){return resolveInstance(string('instance'));}\nasync function configure(){\n if(positional.length>1)fail('Usage: starmux '+command+' [path]');\n const registry=await readRegistry();let instance:Instance|undefined;\n const selector=string('instance');\n if(selector)instance=registry.instances.find(i=>i.id===selector||i.name===selector);\n else if(registry.instances.length)instance=await resolveInstance();\n if(instance?.archived)fail('Instance is archived. Use starmux config restore -i '+instance.name);\n if(!instance&&await exists(path.join(homedir(),'.config','mac-mcp-gateway'))&&!registry.instances.length)fail('Existing installation found. Run starmux migrate first.');\n const loaded=instance?await loadInstanceConfig(instance):undefined;\n const writing=flags.write||flags.code;\n if(flags.read&&writing)fail('--read cannot be combined with --write or --code.');\n const project=positional[0]??loaded?.config.projectRoot??process.cwd();\n const config=await validateConfig(instanceConfigSchema.parse({...loaded?.config,\n projectRoot:await realpath(absolute(project)),schemaVersion:1,\n port:string('port')?Number(string('port')):loaded?.config.port??(selector?await suggestPort():18893),\n ...(writing?{accessRole:'trusted',mode:'read-write',writeScope:'unrestricted'}:{}),\n ...(flags.read?{accessRole:'restricted',mode:'read-only',writeScope:'unrestricted',gitMode:'off',worktreeMode:'off',upstreams:[]}:{}),\n }));\n await consent(instance,config);\n if(!instance)instance=await createInstance(selector??'default',{config});\n else if(JSON.stringify(config)!==JSON.stringify(loaded!.config))await patchInstanceConfig(instance,config,loaded!.revision);\n await rememberConsent(instance,config);return instance;\n}\nasync function isDefaultInstance(instance:Instance){\n const registry=await readRegistry().catch(()=>({defaultInstanceId:null,instances:[] as Instance[]}));\n return instance.name==='default'&&(registry.defaultInstanceId===instance.id||registry.instances.filter(i=>!i.archived).length<=1);\n}\nasync function instanceFlag(instance:Instance){\n if(await isDefaultInstance(instance))return '';\n const selector=/^[A-Za-z0-9_.-]+$/.test(instance.name)&&!instance.name.startsWith('-')?instance.name:shellQuote(instance.name);\n return instance.name.startsWith('-')?`--instance=${selector}`:`-i ${selector}`;\n}\nasync function show(instance:Instance){\n const status=await instanceStatus(instance);\n if(json){print(status);return;}\n const config=status.phase==='running'?status.active?.config:(await loadInstanceConfig(instance).catch(()=>null))?.config;\n process.stdout.write(await formatStarmuxStatus(instance,status,config,{isDefault:await isDefaultInstance(instance)}));\n}\nasync function start(instance:Instance){\n const state=await instanceStatus(instance);\n if(state.phase==='running'){\n if(state.configState==='pending')await instanceRequest(instance,'apply',(await loadInstanceConfig(instance)).revision);\n await show(instance);return;\n }\n await ensureAccessReady(instance);\n const config=(await loadInstanceConfig(instance)).config;\n if(!await availablePort(config.port))fail(`Port ${config.port} is in use. Choose another with starmux up --port PORT.`);\n if(flags.foreground||string('app-parent-pid')){\n await runInstance(instance,{json,...(!json?{onReady:()=>show(instance)}:{}),...(string('app-parent-pid')?{appParentPid:Number(string('app-parent-pid'))}:{})});return;\n }\n const log=path.join(instancePaths(instance).logs,'supervisor.log');\n if(await exists(log))await readTrusted(log,true,32*1024*1024);\n const fd=await open(log,'a',0o600);\n const child=spawn(process.execPath,[fileURLToPath(new URL('./starmux-supervisor.js',import.meta.url)),instance.id],{detached:true,stdio:['ignore',fd.fd,fd.fd],env:process.env,windowsHide:true});\n let launchError:Error|undefined;child.once('error',e=>{launchError=e;});await fd.close();child.unref();\n for(let n=0;n<150;n++){\n if(launchError)throw launchError;\n const status=await instanceStatus(instance);\n if(status.phase==='running'&&status.health==='ok'){await show(instance);return;}\n if(child.exitCode!==null||child.signalCode!==null)fail('Startup failed. Inspect '+log);\n await pause(200);\n }\n child.kill('SIGTERM');fail('Startup timed out. Inspect '+log);\n}\nasync function bearer(){\n if(!flags['token-stdin'])return process.env.STARMUX_TOKEN;\n let value='';for await(const part of process.stdin){value+=String(part);if(value.length>16384)fail('Token input too large.');}return value.trim();\n}\nasync function verify(instance:Instance){\n const status=await instanceStatus(instance);if(status.phase!=='running'||!status.port)fail('Start this instance with starmux up first.');\n const token=await bearer();const client=new Client({name:'starmux-verify',version});\n const endpoint=`http://127.0.0.1:${status.port}/mcp`;\n const transport=new StreamableHTTPClientTransport(new URL(endpoint),{requestInit:{headers:token?{Authorization:'Bearer '+token}:{}}});\n let toolCount=0;\n try{\n await client.connect(transport as Transport);\n const listed=await client.listTools();toolCount=listed.tools.length;\n const result=await client.callTool({name:'list_directory',arguments:{path:'.',depth:0}});\n if(result.isError)fail('Directory read failed.');\n }\n catch(e){throw Error('Verification failed: '+String(e)+'. For authenticated instances provide STARMUX_TOKEN or --token-stdin.');}\n finally{await client.close();}\n if(json)print({result:'PASS',instanceId:instance.id,port:status.port,remoteClientVerified:false});\n else{\n const cfg=status.active?.config;\n const mode=cfg?.accessRole==='trusted'?'Coding mode':'Read-only mode';\n const root=cfg?.projectRoot??'.';\n process.stdout.write(\n `✓ MCP handshake ${endpoint}\\n`+\n `✓ Tool discovery ${toolCount} tools available (${mode})\\n`+\n `✓ Workspace read ${root}\\n`+\n `PASS · MCP handshake, tool discovery and workspace read.\\n`\n );\n }\n}\nfunction expires(value:string|undefined){\n if(!value)return null;\n const match=/^([1-9]\\d*)([mhdw])$/.exec(value);\n const date=match?new Date(Date.now()+Number(match[1])*({m:60000,h:3600000,d:86400000,w:604800000}[match[2]!]??0)):new Date(value);\n if(!Number.isFinite(date.getTime())||date.getTime()<=Date.now())fail('Expiry must be a future ISO timestamp or positive duration such as 30d.');\n return date.toISOString();\n}\nasync function auth(instance:Instance){\n const access=await createAccessControl(instancePaths(instance).access);const op=positional[0];\n if(!op){\n const state=await access.snapshot();\n if(json){print(state);return;}\n const flag=await instanceFlag(instance);\n const cmd=(action:string)=>`starmux ${action}${flag?' '+flag:''}`;\n const activeKeys=state.credentials.filter(c=>c.status==='active').length;\n const modeDesc=state.mode==='ingress'\n ?'None (no Starmux token · local or ingress proxy)'\n :state.mode==='api-key'\n ?`API key (Bearer token · ${activeKeys} active)`\n :'OAuth (browser sign-in)';\n const lines=[\n ...(flag?[`Instance ${instance.name}`]:[]),\n `Auth mode ${modeDesc}`,\n `API keys ${activeKeys} active (${state.credentials.length} total)`,\n `OAuth ${state.oauth?`${state.oauth.issuer} (${state.oauthConnections.filter(c=>!c.revokedAt).length} active sessions)`:'Not configured'}`\n ];\n if(state.credentials.length){\n lines.push('','API Keys');\n for(const c of state.credentials){\n const exp=c.expiresAt?` expires ${c.expiresAt.slice(0,10)}`:'';\n lines.push(` ${c.id.padEnd(26)} ${c.name.padEnd(20)} ${c.status}${exp}`);\n }\n }\n if(state.oauthConnections.length){\n lines.push('','OAuth Sessions');\n for(const c of state.oauthConnections){\n lines.push(` ${c.id.padEnd(26)} OAuth ${c.clientId.padEnd(14)} ${c.revokedAt?'revoked':'active'}`);\n }\n }\n lines.push(\n '',\n 'Commands',\n ` Create API key ${cmd('auth key \"My AI Client\"')}`,\n ` Switch mode ${cmd('auth mode <none|api-key|oauth>')}`,\n ...(activeKeys>0||state.oauthConnections.some(c=>!c.revokedAt)?[` Revoke access ${cmd('auth revoke <ID>')}`]:[])\n );\n process.stdout.write(lines.join('\\n')+'\\n');\n return;\n }\n if(op==='key'){\n const result=await access.create(positional[1]??'',expires(string('expires')),true);\n await changeRegistry(async r=>{r.instances.find(i=>i.id===instance.id)!.requiredAccess='api-key';});\n if(json){print({...result,mode:'api-key'});return;}\n const cfg=(await loadInstanceConfig(instance).catch(()=>null))?.config;\n const port=cfg?.port??18893;\n process.stdout.write(\n `API key enabled for ${result.name} (ID: ${result.id})\\n`+\n `Copy this key now; it is shown only once:\\n\\n`+\n ` ${result.key}\\n\\n`+\n `Option A — Fill in AI client form UI:\\n`+\n ` Transport Streamable HTTP\\n`+\n ` URL (Local) http://127.0.0.1:${port}/mcp\\n`+\n ` URL (Remote) https://<your-domain-or-tunnel>/mcp\\n`+\n ` Authentication Bearer API key\\n`+\n ` Header Authorization: Bearer ${result.key}\\n\\n`+\n `Option B — Or paste JSON config (mcpServers):\\n`+\n ` {\\n`+\n ` \"mcpServers\": {\\n`+\n ` \"starmux\": {\\n`+\n ` \"type\": \"streamable-http\",\\n`+\n ` \"url\": \"https://<your-domain-or-tunnel>/mcp\",\\n`+\n ` \"headers\": {\\n`+\n ` \"Authorization\": \"Bearer ${result.key}\"\\n`+\n ` }\\n`+\n ` }\\n`+\n ` }\\n`+\n ` }\\n`\n );\n return;\n }\n if(op==='mode'){\n const raw=positional[1];\n const mode=raw==='none'?'ingress':raw;\n if(mode!=='ingress'&&mode!=='api-key'&&mode!=='oauth')fail('Choose none (or ingress), api-key or oauth.');\n await access.setMode(mode);await changeRegistry(async r=>{r.instances.find(i=>i.id===instance.id)!.requiredAccess=mode;});\n const label=mode==='ingress'?'none (ingress)':mode;\n if(json)print(await access.snapshot());else process.stdout.write('Authentication: '+label+'\\n');return;\n }\n if(op==='revoke'){\n const id=positional[1]??'';const state=await access.snapshot();\n if(state.credentials.some(c=>c.id===id))await access.revoke(id);\n else if(state.oauthConnections.some(c=>c.id===id))await access.revokeOAuth(id);else fail('Credential or OAuth session not found: '+id);\n if(json)print({result:'REVOKED',id});else process.stdout.write('Revoked '+id+'\\n');return;\n }\n if(op==='oauth'){\n process.env.MAC_MCP_ACCESS_FILE=instancePaths(instance).access;\n const action=positional[1]??'status';const map:Record<string,string>={'init-keycloak':'keycloak-realm',setup:'configure',doctor:'doctor',status:'status'};\n if(!map[action])fail('Unknown OAuth command. See starmux auth --help.');\n const args=[map[action]!];for(const key of ['issuer','resource','resource-aliases','client-id','subject','subjects','registration','token-auth','callback','allow-loopback-http'])if(flags[key]!==undefined)args.push('--'+(key==='subject'?'subjects':key),...(typeof flags[key]==='string'?[flags[key] as string]:[]));\n if(json)args.push('--json');await (await import('./oauth.js')).oauthCommand(args);return;\n }\n fail('Unknown auth command. See starmux auth --help.');\n}\nasync function dashboard(instance:Instance){\n const access=await createAccessControl(instancePaths(instance).access);const token=await access.ownerToken();\n if(flags.token){if(json)print({token});else process.stdout.write(token+'\\n');return;}\n const status=await instanceStatus(instance);if(status.phase!=='running'||!status.port)fail('Start this instance with starmux up first.');\n const url=`http://127.0.0.1:${status.port}/access#token=${token}`;\n if(flags['no-open']){if(json)print({url});else process.stdout.write(url+'\\n');return;}\n const executable=process.platform==='darwin'?'open':process.platform==='win32'?'rundll32.exe':'xdg-open';\n const child=spawn(executable,process.platform==='win32'?['url.dll,FileProtocolHandler',url]:[url],{stdio:'ignore'});\n await new Promise<void>((resolve,reject)=>{child.once('error',()=>reject(Error('Browser unavailable. Use starmux dashboard --no-open.')));child.once('exit',code=>code===0?resolve():reject(Error('Browser failed. Use starmux dashboard --no-open.')));});\n if(json)print({result:'OPENED'});else process.stdout.write('Opened local Access console.\\n');\n}\nasync function logs(instance:Instance){\n const count=Number(string('lines')??60);if(!Number.isInteger(count)||count<1||count>200)fail('--lines must be 1..200.');\n const file=path.join(instancePaths(instance).logs,'core.log');let offset=0;\n const text=await exists(file)?await readTrusted(file,true,32*1024*1024):'';offset=Buffer.byteLength(text);\n const lines=text.split('\\n');if(text.endsWith('\\n'))lines.pop();\n const output=lines.slice(-count).join('\\n')+(text.endsWith('\\n')?'\\n':'');\n if(json)print({instanceId:instance.id,output});else process.stdout.write(output||'No logs yet.\\n');\n if(!flags.follow)return;\n let done=false;const stop=()=>{done=true;};process.once('SIGINT',stop);process.once('SIGTERM',stop);\n try{while(!done){await pause(300);if(!await exists(file))continue;const size=(await stat(file)).size;if(size<offset)offset=0;if(size===offset)continue;const f=await open(file,'r');try{const buffer=Buffer.alloc(Math.min(size-offset,65536));const {bytesRead}=await f.read(buffer,0,buffer.length,offset);offset+=bytesRead;const output=buffer.subarray(0,bytesRead).toString();if(json)print({instanceId:instance.id,output});else process.stdout.write(output);}finally{await f.close();}}}finally{process.off('SIGINT',stop);process.off('SIGTERM',stop);}\n}\nasync function configCommand(){\n const op=positional[0]??'show';const selector=string('instance');\n if(op==='schema'){print(configJSONSchema());return;}\n if(op==='import'){\n const file=positional[1];if(!file)fail('config import requires a file.');const config=await validateConfig(parseConfig(await readTrusted(absolute(file),false)));await consent(undefined,config);\n const instance=await createInstance(selector??string('name')??path.basename(file,path.extname(file)),{file:absolute(file),link:flags.link===true});await rememberConsent(instance,config);print({instance});return;\n }\n if(['copy','rename','default','archive','restore'].includes(op)){\n const target=op==='default'?positional[1]:selector??(await selected()).id;\n const args=[op,target??''];if(op==='copy'||op==='rename')args.push(positional[1]??'');if(json)args.push('--json');await handle('instance',args);return;\n }\n const instance=await selected();\n if(op==='save'){\n let text=string('file')?await readTrusted(absolute(string('file')!),false):'';\n if(!string('file'))for await(const part of process.stdin){text+=String(part);if(text.length>262144)fail('Config input too large.');}\n const config=await validateConfig(parseConfig(text));await consent(instance,config);\n const saved=await saveInstanceConfig(instance,text,string('revision')??'');await rememberConsent(instance,config);print({result:'SAVED',revision:saved.revision});return;\n }\n if(op==='patch'&&!string('patch')){\n let text='';for await(const part of process.stdin){text+=String(part);if(text.length>262144)fail('Config input too large.');}flags.patch=text;\n }\n if(op==='apply'||op==='patch'){\n let config=(await loadInstanceConfig(instance)).config;\n if(op==='patch'&&string('patch'))config=await validateConfig(instanceConfigSchema.parse({...config,...JSON.parse(string('patch')!)}));\n await consent(instance,config);await rememberConsent(instance,config);\n }\n const args=[...positional,'--instance',instance.id];\n for(const [key,value] of Object.entries(flags))if(!['instance','help','yes'].includes(key)&&value!==undefined)args.push('--'+key,...(typeof value==='string'?[value]:[]));\n // The shared operation layer retains its internal approval contract.\n if(op==='patch')args.push('--approve-trusted-developer','--approve-unrestricted');\n await handle('config',args);\n}\nfunction validateSubcommand(){\n if(command!=='config'&&command!=='auth')return;\n const op=positional[0]??(command==='config'?'show':'');\n let name=command+(op?' '+op:'');let count=positional.length-(positional.length?1:0);\n let minimum=0;let maximum=0;let supported:string[]|undefined;\n if(command==='config'){\n const commands:Record<string,string[]>={show:['effective'],path:[],edit:[],validate:[],diff:[],apply:['revision','yes'],schema:[],recover:[],\n import:['name','link','yes'],copy:[],rename:[],default:[],archive:[],restore:[],export:['output'],relink:['file'],manage:[],\n save:['file','revision','yes'],patch:['patch','revision','yes'],secret:[]};\n supported=commands[op];\n if(['import','copy','rename','default'].includes(op))minimum=maximum=1;\n if(op==='relink'){minimum=string('file')?0:1;maximum=minimum;}\n if(op==='secret'){minimum=maximum=2;if(!['set','remove'].includes(positional[1]??''))fail('Usage: starmux config secret set|remove NAME');}\n }else if(op==='oauth'){\n const action=positional[1]??'status';name+=' '+action;count=Math.max(0,positional.length-2);\n const actions:Record<string,string[]>={status:[],doctor:[],\n 'init-keycloak':['resource','callback','allow-loopback-http'],\n setup:['issuer','resource','resource-aliases','client-id','subject','subjects','registration','token-auth','allow-loopback-http']};\n supported=actions[action];\n if(flags.subject!==undefined&&flags.subjects!==undefined)fail('Use either --subject or --subjects.');\n }else{\n const commands:Record<string,string[]>={'':[],key:['expires'],mode:[],revoke:[]};supported=commands[op];\n if(['key','mode','revoke'].includes(op))minimum=maximum=1;\n }\n if(!supported)fail('Unknown command: '+name+'. See starmux '+command+' --help.');\n if(count<minimum||count>maximum||positional.slice(1).some(value=>!value.trim()))fail('Invalid arguments for starmux '+name+'. See starmux '+command+' --help.');\n for(const key of Object.keys(flags))if(!['instance','json','help','version'].includes(key)&&!supported.includes(key))fail('Option --'+key+' is not supported by '+name+'.');\n}\nasync function main(){\n if(flags.version){process.stdout.write(version+'\\n');return;}\n if(command==='help'||flags.help){help();return;}\n const allowed:Record<string,string[]>={\n up:['port','read','write','code','yes','foreground','app-parent-pid'],init:['port','read','write','code','yes'],\n status:['all'],ls:['archived'],rm:[],down:[],stop:[],logs:['lines','follow'],doctor:[],verify:['token-stdin'],dashboard:['token','no-open'],migrate:['yes'],\n auth:['expires','issuer','resource','resource-aliases','client-id','subject','subjects','registration','token-auth','callback','allow-loopback-http'],\n config:['yes','archived','effective','link','name','revision','patch','file','output'],permissions:['target','mode'],privacy:['all','target']\n };\n for(const key of Object.keys(flags))if(!['instance','json','help','version'].includes(key)&&!allowed[command]?.includes(key))fail('Option --'+key+' is not supported by '+command+'.');\n if(string('instance')!==undefined&&!string('instance')!.trim())fail('--instance requires a non-empty name or ID.');\n validateSubcommand();\n if(['status','ls','down','stop','logs','doctor','verify','dashboard'].includes(command)&&positional.length)fail('Unexpected argument: '+positional[0]);\n if(command==='rm'&&positional.length>1)fail('Usage: starmux rm [NAME]');\n if(command==='auth'&&['key','mode','revoke'].includes(positional[0]??'')&&positional.length!==2)fail('Usage: starmux auth '+positional[0]+' VALUE');\n if(command==='migrate'&&positional.length>1)fail('Usage: starmux migrate [registry|setup|live] [-y]');\n // Public commands never inherit old environment overlays. Core's private protocol is retained.\n for(const key of Object.keys(process.env))if(key.startsWith('MAC_MCP_'))delete process.env[key];\n for(const [key,value] of Object.entries(process.env))if(key.startsWith('STARMUX_')&&key!=='STARMUX_TOKEN')process.env['MAC_MCP_'+key.slice(8)]=value;\n if(command==='up'||command==='init'){\n const instance=await configure();\n if(command==='up')await start(instance);\n else if(json)print({result:'SAVED',instance});\n else{\n const flag=await instanceFlag(instance);\n process.stdout.write(`Saved ${instance.name}. Start with starmux up${flag?' '+flag:''}\\n`);\n }\n return;\n }\n if(command==='migrate'){await (await import('../starmux-migration.js')).migrate(positional[0],yes(),json);return;}\n if(command==='ls'||command==='status'&&flags.all){await handle('instance',['list',...(flags.archived?['--archived']:[]),...(json?['--json']:[])]);return;}\n if(command==='rm'){\n const target=positional[0]??string('instance')??(await selected()).id;\n await handle('instance',['archive',target,...(json?['--json']:[])]);return;\n }\n if(command==='config'){await configCommand();return;}\n if(!['status','down','stop','auth','dashboard','verify','doctor','logs','permissions','privacy'].includes(command))fail('Unknown command: '+command+'. Run starmux --help.');\n if(!(await readRegistry()).instances.length){if(command==='status'||command==='down'||command==='stop'){if(json)print({phase:'stopped',initialized:false});else process.stdout.write('Not initialized. Run starmux up in your project.\\n');return;}}\n const instance=await selected();\n if(command==='status')await show(instance);\n else if(command==='down'||command==='stop'){await instanceRequest(instance,'stop');if(json)print({result:'STOPPED',instanceId:instance.id});else process.stdout.write('Stopped '+instance.name+'\\n');}\n else if(command==='auth')await auth(instance);\n else if(command==='dashboard')await dashboard(instance);\n else if(command==='verify')await verify(instance);\n else if(command==='logs')await logs(instance);\n else if(command==='doctor'){\n if(Number(process.versions.node.split('.')[0])<22||(process.versions.node.startsWith('22.')&&Number(process.versions.node.split('.')[1])<12))fail('Node 22.12 or newer is required.');\n await stat(desktopCommanderEntry);const loaded=await loadInstanceConfig(instance);await ensureAccessReady(instance);const state=await instanceStatus(instance);\n if(state.phase!=='running'&&!await availablePort(loaded.config.port))fail('Configured port is in use: '+loaded.config.port);\n if(json)print({result:'PASS',node:process.version,instanceId:instance.id,configState:state.configState});\n else{\n const isDef=await isDefaultInstance(instance);\n const access=await (await createAccessControl(instancePaths(instance).access,{initialize:false})).snapshot();\n const modeLabel=loaded.config.accessRole==='trusted'?'Coding mode':'Read-only mode';\n const authLabel=access.mode==='ingress'?'None (no token required)':access.mode==='api-key'?`API key (${access.credentials.filter(c=>c.status==='active').length} active)`:'OAuth';\n const portState=state.phase==='running'?`Running on 127.0.0.1:${state.port}`:`Stopped · port ${loaded.config.port} available`;\n process.stdout.write(\n `✓ Runtime Node ${process.version} & Desktop Commander engine ready\\n`+\n `✓ Service ${portState}${isDef?'':` (instance: ${instance.name})`}\\n`+\n `✓ Workspace ${loaded.config.projectRoot} (${modeLabel})\\n`+\n `✓ Configuration ${instance.source.path} (${state.configState})\\n`+\n `✓ Authentication ${authLabel}\\n`+\n `PASS · Node, dependencies, workspace, configuration, port and authentication.\\n`\n );\n }\n }else{\n const args=[...positional,'--instance',instance.id];for(const [key,value] of Object.entries(flags))if(key!=='instance'&&value!==undefined)args.push('--'+key,...(typeof value==='string'?[value]:[]));await handle(command,args);\n }\n}\ntry{await main();}catch(error){const message=error instanceof Error?error.message:String(error);if(json)print({schemaVersion:1,error:message});else process.stderr.write(message+'\\n');process.exitCode=1;}\n"]}
|
|
1
|
+
{"version":3,"file":"starmux.js","sourceRoot":"","sources":["../../../src/cli/starmux.ts"],"names":[],"mappings":"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","sourcesContent":["import {parseArgs} from 'node:util';\nimport {spawn} from 'node:child_process';\nimport {createInterface} from 'node:readline/promises';\nimport {open,realpath,readFile,stat} from 'node:fs/promises';\nimport {homedir} from 'node:os';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport type {Transport} from '@modelcontextprotocol/sdk/shared/transport.js';\nimport {Client} from '@modelcontextprotocol/sdk/client/index.js';\nimport {StreamableHTTPClientTransport} from '@modelcontextprotocol/sdk/client/streamableHttp.js';\nimport {createAccessControl} from '../access-control.js';\nimport {instanceStatus,instanceRequest,runInstance} from '../instance-runtime.js';\nimport {atomicPrivate,availablePort,changeRegistry,configJSONSchema,createInstance,ensureAccessReady,exists,instanceConfigSchema,instancePaths,loadInstanceConfig,parseConfig,patchInstanceConfig,readRegistry,readTrusted,resolveInstance,saveInstanceConfig,suggestPort,validateConfig,type Instance,type InstanceConfig} from '../instance-store.js';\nimport {handle} from './instances.js';\nimport {desktopCommanderEntry} from '../runtime-paths.js';\nimport {shellQuote} from '../platform.js';\nimport {formatStarmuxStatus} from './starmux-status.js';\n\nconst version='0.13.0';\nconst strings=['instance','port','lines','expires','issuer','resource','resource-aliases','client-id','subject','subjects','registration','token-auth','callback','revision','patch','file','output','name','target','mode','app-parent-pid'];\nconst booleans=['help','version','json','write','code','read','yes','foreground','follow','archived','all','effective','link','allow-loopback-http','token-stdin','no-open','token'];\nconst options:Record<string,{type:'string'|'boolean';short?:string}>={};\nfor(const k of strings)options[k]={type:'string',...(k==='instance'?{short:'i'}:{})};\nfor(const k of booleans)options[k]={type:'boolean',...(k==='yes'?{short:'y'}:k==='follow'?{short:'f'}:k==='help'?{short:'h'}:k==='version'?{short:'v'}:{})};\nlet parsed:ReturnType<typeof parseArgs>;\ntry{parsed=parseArgs({args:process.argv.slice(2),options,allowPositionals:true,strict:true});}catch(error){process.stderr.write((error instanceof Error?error.message:String(error))+'\\n');process.exit(1);}\nconst flags=parsed.values;const positional=parsed.positionals;const command=positional.shift()??'help';\nconst string=(key:string)=>typeof flags[key]==='string'?flags[key] as string:undefined;\nconst yes=()=>flags.yes===true;const json=flags.json===true;\nconst print=(value:unknown)=>process.stdout.write(JSON.stringify(value,null,2)+'\\n');\nfunction fail(message:string):never{throw Error(message);}\nconst absolute=(value:string)=>path.resolve(value==='~'?homedir():value.startsWith('~/')?path.join(homedir(),value.slice(2)):value);\nconst pause=(ms:number)=>new Promise(resolve=>setTimeout(resolve,ms));\n\nfunction help(){\n const requested=command==='help'?positional[0]:command;\n const topic=requested==='stop'?'down':requested;\n const sections:Record<string,string>={\n up:'up [path] [--read | --write | --code] [-y] [--port N] [--foreground]\\n Initialize and start. First use defaults to CWD; later starts reuse saved settings.',\n init:'init [path] [--read | --write | --code] [-y] [--port N]\\n Save settings without starting. --write and --code enable full account coding permissions.',\n auth:'auth\\n auth key \"Client name\" [--expires 30d]\\n auth mode none|ingress|api-key|oauth\\n auth revoke ID\\n auth oauth init-keycloak --resource URL --callback URL\\n auth oauth setup --issuer URL --resource URL --client-id ID --subject USER_ID\\n auth oauth doctor',\n config:'config [show] [--effective]\\n config edit | diff | apply | validate | path | schema | recover\\n config default NAME | rename NEW_NAME -i SOURCE | copy NEW_NAME -i SOURCE\\n config archive -i NAME | restore -i NAME | import FILE [-i NAME] [--link]\\n config export [--output FILE] | secret set|remove NAME',\n dashboard:'dashboard [--no-open | --token]\\n Open the local Access console. --no-open prints a private login link.',\n verify:'verify [--token-stdin]\\n Test MCP initialization, tool discovery and workspace read. Authenticated instances use STARMUX_TOKEN or stdin.',\n doctor:'doctor\\n Check Node, bundled dependencies, workspace, configuration, port and authentication.',\n logs:'logs [-f | --follow] [--lines 1..200]\\n Follow continues across restarts. Ctrl+C exits the follower only.',\n migrate:'migrate [registry|setup|live] [-y]\\n No source: preview. Select a source to migrate, retaining originals.',\n status:'status [--all]\\n Show the selected instance, its actual endpoint and connection guide.',\n ls:'ls [--archived]\\n List local workspace instances.',\n rm:'rm [NAME] (alias for: config archive)\\n Stop and archive an instance.',\n down:'down (alias: stop)\\n Stop the selected instance.',\n permissions:'permissions [status | token]\\n permissions disable-tool|enable-tool|deny-directory|allow-directory TARGET\\n Manage the selected instance’s tool and directory permissions.',\n privacy:'privacy [--all] [--target PATH]\\n Check privacy access through the running instance.'\n };\n if(topic&&topic!=='help'&&!sections[topic])fail('Unknown command: '+topic+'. Run starmux --help.');\n const overview=[\n 'Connect AI clients to your computer’s files, shell and development tools.',\n '',\n 'Workspace Lifecycle:',\n ' starmux up [path] [--code] Start in the background (default: Read-only)',\n ' starmux down Stop the running instance (alias: stop)',\n ' starmux status Show health, endpoint and connection guide',\n ' starmux logs [-f] View or stream gateway logs',\n '',\n 'Access & Verification:',\n ' starmux auth Manage auth mode, API keys and OAuth',\n ' starmux dashboard Open the local Web Access Console',\n ' starmux verify Test local MCP handshake and workspace read',\n ' starmux doctor Check runtime, config, port and auth state',\n '',\n 'Multi-Instance & Config:',\n ' starmux ls List workspace instances',\n ' starmux rm [name] Stop and archive an instance',\n ' starmux init [path] Save instance settings without starting',\n ' starmux config Inspect, edit or apply configuration',\n ' starmux migrate Import settings from a legacy installation'\n ].join('\\n');\n process.stdout.write(`Starmux ${version}\\n\\n${sections[topic??'']??overview}\\n\\nGlobal: -i, --instance NAME_OR_ID --json -h, --help\\nUse starmux COMMAND --help for details.\\n`);\n}\nasync function confirm(message:string){\n if(yes())return;\n if(!process.stdin.isTTY)fail(message+' Re-run with -y to confirm.');\n const rl=createInterface({input:process.stdin,output:process.stderr});\n try{if(!/^y(es)?$/i.test((await rl.question(message+' [y/N] ')).trim()))fail('Cancelled.');}finally{rl.close();}\n}\nasync function consent(instance:Instance|undefined,config:InstanceConfig){\n if(config.accessRole!=='trusted'||config.writeScope!=='unrestricted')return;\n if(instance&&await exists(path.join(instancePaths(instance).state,'coding-consent.json'))){\n const record=JSON.parse(await readTrusted(path.join(instancePaths(instance).state,'coding-consent.json'))) as {version?:number;scope?:string};\n if(record.version===1&&record.scope==='os-account')return;\n }\n await confirm('Coding mode can modify files accessible to your OS account and execute Shell and Git. Enable?');\n}\nasync function rememberConsent(instance:Instance,config:InstanceConfig){\n if(config.accessRole==='trusted'&&config.writeScope==='unrestricted'&&!await exists(path.join(instancePaths(instance).state,'coding-consent.json')))await atomicPrivate(path.join(instancePaths(instance).state,'coding-consent.json'),JSON.stringify({version:1,scope:'os-account',approvedAt:new Date().toISOString()}));\n}\nasync function selected(){return resolveInstance(string('instance'));}\nasync function configure(){\n if(positional.length>1)fail('Usage: starmux '+command+' [path]');\n const registry=await readRegistry();let instance:Instance|undefined;\n const selector=string('instance');\n if(selector)instance=registry.instances.find(i=>i.id===selector||i.name===selector);\n else if(registry.instances.length)instance=await resolveInstance();\n if(instance?.archived)fail('Instance is archived. Use starmux config restore -i '+instance.name);\n if(!instance&&await exists(path.join(homedir(),'.config','mac-mcp-gateway'))&&!registry.instances.length)fail('Existing installation found. Run starmux migrate first.');\n const loaded=instance?await loadInstanceConfig(instance):undefined;\n const writing=flags.write||flags.code;\n if(flags.read&&writing)fail('--read cannot be combined with --write or --code.');\n const project=positional[0]??loaded?.config.projectRoot??process.cwd();\n const config=await validateConfig(instanceConfigSchema.parse({...loaded?.config,\n projectRoot:await realpath(absolute(project)),schemaVersion:1,\n port:string('port')?Number(string('port')):loaded?.config.port??(selector?await suggestPort():18893),\n ...(writing?{accessRole:'trusted',mode:'read-write',writeScope:'unrestricted'}:{}),\n ...(flags.read?{accessRole:'restricted',mode:'read-only',writeScope:'unrestricted',gitMode:'off',worktreeMode:'off',upstreams:[]}:{}),\n }));\n await consent(instance,config);\n if(!instance)instance=await createInstance(selector??'default',{config});\n else if(JSON.stringify(config)!==JSON.stringify(loaded!.config))await patchInstanceConfig(instance,config,loaded!.revision);\n await rememberConsent(instance,config);return instance;\n}\nasync function isDefaultInstance(instance:Instance){\n const registry=await readRegistry().catch(()=>({defaultInstanceId:null,instances:[] as Instance[]}));\n return instance.name==='default'&&(registry.defaultInstanceId===instance.id||registry.instances.filter(i=>!i.archived).length<=1);\n}\nasync function instanceFlag(instance:Instance){\n if(await isDefaultInstance(instance))return '';\n const selector=/^[A-Za-z0-9_.-]+$/.test(instance.name)&&!instance.name.startsWith('-')?instance.name:shellQuote(instance.name);\n return instance.name.startsWith('-')?`--instance=${selector}`:`-i ${selector}`;\n}\nasync function show(instance:Instance){\n const status=await instanceStatus(instance);\n if(json){print(status);return;}\n const config=status.phase==='running'?status.active?.config:(await loadInstanceConfig(instance).catch(()=>null))?.config;\n process.stdout.write(await formatStarmuxStatus(instance,status,config,{isDefault:await isDefaultInstance(instance)}));\n}\nasync function start(instance:Instance){\n const state=await instanceStatus(instance);\n if(state.phase==='running'){\n if(state.configState==='pending')await instanceRequest(instance,'apply',(await loadInstanceConfig(instance)).revision);\n await show(instance);return;\n }\n await ensureAccessReady(instance);\n const config=(await loadInstanceConfig(instance)).config;\n if(!await availablePort(config.port))fail(`Port ${config.port} is in use. Choose another with starmux up --port PORT.`);\n if(flags.foreground||string('app-parent-pid')){\n await runInstance(instance,{json,...(!json?{onReady:()=>show(instance)}:{}),...(string('app-parent-pid')?{appParentPid:Number(string('app-parent-pid'))}:{})});return;\n }\n const log=path.join(instancePaths(instance).logs,'supervisor.log');\n if(await exists(log))await readTrusted(log,true,32*1024*1024);\n const fd=await open(log,'a',0o600);\n const child=spawn(process.execPath,[fileURLToPath(new URL('./starmux-supervisor.js',import.meta.url)),instance.id],{detached:true,stdio:['ignore',fd.fd,fd.fd],env:process.env,windowsHide:true});\n let launchError:Error|undefined;child.once('error',e=>{launchError=e;});await fd.close();child.unref();\n for(let n=0;n<150;n++){\n if(launchError)throw launchError;\n const status=await instanceStatus(instance);\n if(status.phase==='running'&&status.health==='ok'){await show(instance);return;}\n if(child.exitCode!==null||child.signalCode!==null)fail('Startup failed. Inspect '+log);\n await pause(200);\n }\n child.kill('SIGTERM');fail('Startup timed out. Inspect '+log);\n}\nasync function bearer(){\n if(!flags['token-stdin'])return process.env.STARMUX_TOKEN;\n let value='';for await(const part of process.stdin){value+=String(part);if(value.length>16384)fail('Token input too large.');}return value.trim();\n}\nasync function verify(instance:Instance){\n const status=await instanceStatus(instance);if(status.phase!=='running'||!status.port)fail('Start this instance with starmux up first.');\n const token=await bearer();const client=new Client({name:'starmux-verify',version});\n const endpoint=`http://127.0.0.1:${status.port}/mcp`;\n const transport=new StreamableHTTPClientTransport(new URL(endpoint),{requestInit:{headers:token?{Authorization:'Bearer '+token}:{}}});\n let toolCount=0;\n try{\n await client.connect(transport as Transport);\n const listed=await client.listTools();toolCount=listed.tools.length;\n const result=await client.callTool({name:'list_directory',arguments:{path:'.',depth:0}});\n if(result.isError)fail('Directory read failed.');\n }\n catch(e){throw Error('Verification failed: '+String(e)+'. For authenticated instances provide STARMUX_TOKEN or --token-stdin.');}\n finally{await client.close();}\n if(json)print({result:'PASS',instanceId:instance.id,port:status.port,remoteClientVerified:false});\n else{\n const cfg=status.active?.config;\n const mode=cfg?.accessRole==='trusted'?'Coding mode':'Read-only mode';\n const root=cfg?.projectRoot??'.';\n process.stdout.write(\n `✓ MCP handshake ${endpoint}\\n`+\n `✓ Tool discovery ${toolCount} tools available (${mode})\\n`+\n `✓ Workspace read ${root}\\n`+\n `PASS · MCP handshake, tool discovery and workspace read.\\n`\n );\n }\n}\nfunction expires(value:string|undefined){\n if(!value)return null;\n const match=/^([1-9]\\d*)([mhdw])$/.exec(value);\n const date=match?new Date(Date.now()+Number(match[1])*({m:60000,h:3600000,d:86400000,w:604800000}[match[2]!]??0)):new Date(value);\n if(!Number.isFinite(date.getTime())||date.getTime()<=Date.now())fail('Expiry must be a future ISO timestamp or positive duration such as 30d.');\n return date.toISOString();\n}\nasync function auth(instance:Instance){\n const access=await createAccessControl(instancePaths(instance).access);const op=positional[0];\n if(!op){\n const state=await access.snapshot();\n if(json){print(state);return;}\n const flag=await instanceFlag(instance);\n const cmd=(action:string)=>`starmux ${action}${flag?' '+flag:''}`;\n const activeKeys=state.credentials.filter(c=>c.status==='active').length;\n const modeDesc=state.mode==='ingress'\n ?'None (no Starmux token · local or ingress proxy)'\n :state.mode==='api-key'\n ?`API key (Bearer token · ${activeKeys} active)`\n :'OAuth (browser sign-in)';\n const lines=[\n ...(flag?[`Instance ${instance.name}`]:[]),\n `Auth mode ${modeDesc}`,\n `API keys ${activeKeys} active (${state.credentials.length} total)`,\n `OAuth ${state.oauth?`${state.oauth.issuer} (${state.oauthConnections.filter(c=>!c.revokedAt).length} active sessions)`:'Not configured'}`\n ];\n if(state.credentials.length){\n lines.push('','API Keys');\n for(const c of state.credentials){\n const exp=c.expiresAt?` expires ${c.expiresAt.slice(0,10)}`:'';\n lines.push(` ${c.id.padEnd(26)} ${c.name.padEnd(20)} ${c.status}${exp}`);\n }\n }\n if(state.oauthConnections.length){\n lines.push('','OAuth Sessions');\n for(const c of state.oauthConnections){\n lines.push(` ${c.id.padEnd(26)} OAuth ${c.clientId.padEnd(14)} ${c.revokedAt?'revoked':'active'}`);\n }\n }\n lines.push(\n '',\n 'Commands',\n ` Create API key ${cmd('auth key \"My AI Client\"')}`,\n ` Switch mode ${cmd('auth mode <none|api-key|oauth>')}`,\n ...(activeKeys>0||state.oauthConnections.some(c=>!c.revokedAt)?[` Revoke access ${cmd('auth revoke <ID>')}`]:[])\n );\n process.stdout.write(lines.join('\\n')+'\\n');\n return;\n }\n if(op==='key'){\n const result=await access.create(positional[1]??'',expires(string('expires')),true);\n await changeRegistry(async r=>{r.instances.find(i=>i.id===instance.id)!.requiredAccess='api-key';});\n if(json){print({...result,mode:'api-key'});return;}\n const cfg=(await loadInstanceConfig(instance).catch(()=>null))?.config;\n const port=cfg?.port??18893;\n process.stdout.write(\n `API key enabled for ${result.name} (ID: ${result.id})\\n`+\n `Copy this key now; it is shown only once:\\n\\n`+\n ` ${result.key}\\n\\n`+\n `Option A — Fill in AI client form UI:\\n`+\n ` Transport Streamable HTTP\\n`+\n ` URL (Local) http://127.0.0.1:${port}/mcp\\n`+\n ` URL (Remote) https://<your-domain-or-tunnel>/mcp\\n`+\n ` Authentication Bearer API key\\n`+\n ` Header Authorization: Bearer ${result.key}\\n\\n`+\n `Option B — Or paste JSON config (mcpServers):\\n`+\n ` {\\n`+\n ` \"mcpServers\": {\\n`+\n ` \"starmux\": {\\n`+\n ` \"type\": \"streamable-http\",\\n`+\n ` \"url\": \"https://<your-domain-or-tunnel>/mcp\",\\n`+\n ` \"headers\": {\\n`+\n ` \"Authorization\": \"Bearer ${result.key}\"\\n`+\n ` }\\n`+\n ` }\\n`+\n ` }\\n`+\n ` }\\n`\n );\n return;\n }\n if(op==='mode'){\n const raw=positional[1];\n const mode=raw==='none'?'ingress':raw;\n if(mode!=='ingress'&&mode!=='api-key'&&mode!=='oauth')fail('Choose none (or ingress), api-key or oauth.');\n await access.setMode(mode);await changeRegistry(async r=>{r.instances.find(i=>i.id===instance.id)!.requiredAccess=mode;});\n const label=mode==='ingress'?'none (ingress)':mode;\n if(json)print(await access.snapshot());else process.stdout.write('Authentication: '+label+'\\n');return;\n }\n if(op==='revoke'){\n const id=positional[1]??'';const state=await access.snapshot();\n if(state.credentials.some(c=>c.id===id))await access.revoke(id);\n else if(state.oauthConnections.some(c=>c.id===id))await access.revokeOAuth(id);else fail('Credential or OAuth session not found: '+id);\n if(json)print({result:'REVOKED',id});else process.stdout.write('Revoked '+id+'\\n');return;\n }\n if(op==='oauth'){\n process.env.MAC_MCP_ACCESS_FILE=instancePaths(instance).access;\n const action=positional[1]??'status';const map:Record<string,string>={'init-keycloak':'keycloak-realm',setup:'configure',doctor:'doctor',status:'status'};\n if(!map[action])fail('Unknown OAuth command. See starmux auth --help.');\n const args=[map[action]!];for(const key of ['issuer','resource','resource-aliases','client-id','subject','subjects','registration','token-auth','callback','allow-loopback-http'])if(flags[key]!==undefined)args.push('--'+(key==='subject'?'subjects':key),...(typeof flags[key]==='string'?[flags[key] as string]:[]));\n if(json)args.push('--json');await (await import('./oauth.js')).oauthCommand(args);return;\n }\n fail('Unknown auth command. See starmux auth --help.');\n}\nasync function dashboard(instance:Instance){\n const access=await createAccessControl(instancePaths(instance).access);const token=await access.ownerToken();\n if(flags.token){if(json)print({token});else process.stdout.write(token+'\\n');return;}\n const status=await instanceStatus(instance);if(status.phase!=='running'||!status.port)fail('Start this instance with starmux up first.');\n const url=`http://127.0.0.1:${status.port}/access#token=${token}`;\n if(flags['no-open']){if(json)print({url});else process.stdout.write(url+'\\n');return;}\n const executable=process.platform==='darwin'?'open':process.platform==='win32'?'rundll32.exe':'xdg-open';\n const child=spawn(executable,process.platform==='win32'?['url.dll,FileProtocolHandler',url]:[url],{stdio:'ignore'});\n await new Promise<void>((resolve,reject)=>{child.once('error',()=>reject(Error('Browser unavailable. Use starmux dashboard --no-open.')));child.once('exit',code=>code===0?resolve():reject(Error('Browser failed. Use starmux dashboard --no-open.')));});\n if(json)print({result:'OPENED'});else process.stdout.write('Opened local Access console.\\n');\n}\nasync function logs(instance:Instance){\n const count=Number(string('lines')??60);if(!Number.isInteger(count)||count<1||count>200)fail('--lines must be 1..200.');\n const file=path.join(instancePaths(instance).logs,'core.log');let offset=0;\n const text=await exists(file)?await readTrusted(file,true,32*1024*1024):'';offset=Buffer.byteLength(text);\n const lines=text.split('\\n');if(text.endsWith('\\n'))lines.pop();\n const output=lines.slice(-count).join('\\n')+(text.endsWith('\\n')?'\\n':'');\n if(json)print({instanceId:instance.id,output});else process.stdout.write(output||'No logs yet.\\n');\n if(!flags.follow)return;\n let done=false;const stop=()=>{done=true;};process.once('SIGINT',stop);process.once('SIGTERM',stop);\n try{while(!done){await pause(300);if(!await exists(file))continue;const size=(await stat(file)).size;if(size<offset)offset=0;if(size===offset)continue;const f=await open(file,'r');try{const buffer=Buffer.alloc(Math.min(size-offset,65536));const {bytesRead}=await f.read(buffer,0,buffer.length,offset);offset+=bytesRead;const output=buffer.subarray(0,bytesRead).toString();if(json)print({instanceId:instance.id,output});else process.stdout.write(output);}finally{await f.close();}}}finally{process.off('SIGINT',stop);process.off('SIGTERM',stop);}\n}\nasync function configCommand(){\n const op=positional[0]??'show';const selector=string('instance');\n if(op==='schema'){print(configJSONSchema());return;}\n if(op==='import'){\n const file=positional[1];if(!file)fail('config import requires a file.');const config=await validateConfig(parseConfig(await readTrusted(absolute(file),false)));await consent(undefined,config);\n const instance=await createInstance(selector??string('name')??path.basename(file,path.extname(file)),{file:absolute(file),link:flags.link===true});await rememberConsent(instance,config);print({instance});return;\n }\n if(['copy','rename','default','archive','restore'].includes(op)){\n const target=op==='default'?positional[1]:selector??(await selected()).id;\n const args=[op,target??''];if(op==='copy'||op==='rename')args.push(positional[1]??'');if(json)args.push('--json');await handle('instance',args);return;\n }\n const instance=await selected();\n if(op==='save'){\n let text=string('file')?await readTrusted(absolute(string('file')!),false):'';\n if(!string('file'))for await(const part of process.stdin){text+=String(part);if(text.length>262144)fail('Config input too large.');}\n const config=await validateConfig(parseConfig(text));await consent(instance,config);\n const saved=await saveInstanceConfig(instance,text,string('revision')??'');await rememberConsent(instance,config);print({result:'SAVED',revision:saved.revision});return;\n }\n if(op==='patch'&&!string('patch')){\n let text='';for await(const part of process.stdin){text+=String(part);if(text.length>262144)fail('Config input too large.');}flags.patch=text;\n }\n if(op==='apply'||op==='patch'){\n let config=(await loadInstanceConfig(instance)).config;\n if(op==='patch'&&string('patch'))config=await validateConfig(instanceConfigSchema.parse({...config,...JSON.parse(string('patch')!)}));\n await consent(instance,config);await rememberConsent(instance,config);\n }\n const args=[...positional,'--instance',instance.id];\n for(const [key,value] of Object.entries(flags))if(!['instance','help','yes'].includes(key)&&value!==undefined)args.push('--'+key,...(typeof value==='string'?[value]:[]));\n // The shared operation layer retains its internal approval contract.\n if(op==='patch')args.push('--approve-trusted-developer','--approve-unrestricted');\n await handle('config',args);\n}\nfunction validateSubcommand(){\n if(command!=='config'&&command!=='auth')return;\n const op=positional[0]??(command==='config'?'show':'');\n let name=command+(op?' '+op:'');let count=positional.length-(positional.length?1:0);\n let minimum=0;let maximum=0;let supported:string[]|undefined;\n if(command==='config'){\n const commands:Record<string,string[]>={show:['effective'],path:[],edit:[],validate:[],diff:[],apply:['revision','yes'],schema:[],recover:[],\n import:['name','link','yes'],copy:[],rename:[],default:[],archive:[],restore:[],export:['output'],relink:['file'],manage:[],\n save:['file','revision','yes'],patch:['patch','revision','yes'],secret:[]};\n supported=commands[op];\n if(['import','copy','rename','default'].includes(op))minimum=maximum=1;\n if(op==='relink'){minimum=string('file')?0:1;maximum=minimum;}\n if(op==='secret'){minimum=maximum=2;if(!['set','remove'].includes(positional[1]??''))fail('Usage: starmux config secret set|remove NAME');}\n }else if(op==='oauth'){\n const action=positional[1]??'status';name+=' '+action;count=Math.max(0,positional.length-2);\n const actions:Record<string,string[]>={status:[],doctor:[],\n 'init-keycloak':['resource','callback','allow-loopback-http'],\n setup:['issuer','resource','resource-aliases','client-id','subject','subjects','registration','token-auth','allow-loopback-http']};\n supported=actions[action];\n if(flags.subject!==undefined&&flags.subjects!==undefined)fail('Use either --subject or --subjects.');\n }else{\n const commands:Record<string,string[]>={'':[],key:['expires'],mode:[],revoke:[]};supported=commands[op];\n if(['key','mode','revoke'].includes(op))minimum=maximum=1;\n }\n if(!supported)fail('Unknown command: '+name+'. See starmux '+command+' --help.');\n if(count<minimum||count>maximum||positional.slice(1).some(value=>!value.trim()))fail('Invalid arguments for starmux '+name+'. See starmux '+command+' --help.');\n for(const key of Object.keys(flags))if(!['instance','json','help','version'].includes(key)&&!supported.includes(key))fail('Option --'+key+' is not supported by '+name+'.');\n}\nasync function main(){\n if(flags.version){process.stdout.write(version+'\\n');return;}\n if(command==='help'||flags.help){help();return;}\n const allowed:Record<string,string[]>={\n up:['port','read','write','code','yes','foreground','app-parent-pid'],init:['port','read','write','code','yes'],\n status:['all'],ls:['archived'],rm:[],down:[],stop:[],logs:['lines','follow'],doctor:[],verify:['token-stdin'],dashboard:['token','no-open'],migrate:['yes'],\n auth:['expires','issuer','resource','resource-aliases','client-id','subject','subjects','registration','token-auth','callback','allow-loopback-http'],\n config:['yes','archived','effective','link','name','revision','patch','file','output'],permissions:['target','mode'],privacy:['all','target']\n };\n for(const key of Object.keys(flags))if(!['instance','json','help','version'].includes(key)&&!allowed[command]?.includes(key))fail('Option --'+key+' is not supported by '+command+'.');\n if(string('instance')!==undefined&&!string('instance')!.trim())fail('--instance requires a non-empty name or ID.');\n validateSubcommand();\n if(['status','ls','down','stop','logs','doctor','verify','dashboard'].includes(command)&&positional.length)fail('Unexpected argument: '+positional[0]);\n if(command==='rm'&&positional.length>1)fail('Usage: starmux rm [NAME]');\n if(command==='auth'&&['key','mode','revoke'].includes(positional[0]??'')&&positional.length!==2)fail('Usage: starmux auth '+positional[0]+' VALUE');\n if(command==='migrate'&&positional.length>1)fail('Usage: starmux migrate [registry|setup|live] [-y]');\n // Public commands never inherit old environment overlays. Core's private protocol is retained.\n for(const key of Object.keys(process.env))if(key.startsWith('MAC_MCP_'))delete process.env[key];\n for(const [key,value] of Object.entries(process.env))if(key.startsWith('STARMUX_')&&key!=='STARMUX_TOKEN')process.env['MAC_MCP_'+key.slice(8)]=value;\n if(command==='up'||command==='init'){\n const instance=await configure();\n if(command==='up')await start(instance);\n else if(json)print({result:'SAVED',instance});\n else{\n const flag=await instanceFlag(instance);\n process.stdout.write(`Saved ${instance.name}. Start with starmux up${flag?' '+flag:''}\\n`);\n }\n return;\n }\n if(command==='migrate'){await (await import('../starmux-migration.js')).migrate(positional[0],yes(),json);return;}\n if(command==='ls'||command==='status'&&flags.all){await handle('instance',['list',...(flags.archived?['--archived']:[]),...(json?['--json']:[])]);return;}\n if(command==='rm'){\n const target=positional[0]??string('instance')??(await selected()).id;\n await handle('instance',['archive',target,...(json?['--json']:[])]);return;\n }\n if(command==='config'){await configCommand();return;}\n if(!['status','down','stop','auth','dashboard','verify','doctor','logs','permissions','privacy'].includes(command))fail('Unknown command: '+command+'. Run starmux --help.');\n if(!(await readRegistry()).instances.length){if(command==='status'||command==='down'||command==='stop'){if(json)print({phase:'stopped',initialized:false});else process.stdout.write('Not initialized. Run starmux up in your project.\\n');return;}}\n const instance=await selected();\n if(command==='status')await show(instance);\n else if(command==='down'||command==='stop'){await instanceRequest(instance,'stop');if(json)print({result:'STOPPED',instanceId:instance.id});else process.stdout.write('Stopped '+instance.name+'\\n');}\n else if(command==='auth')await auth(instance);\n else if(command==='dashboard')await dashboard(instance);\n else if(command==='verify')await verify(instance);\n else if(command==='logs')await logs(instance);\n else if(command==='doctor'){\n if(Number(process.versions.node.split('.')[0])<22||(process.versions.node.startsWith('22.')&&Number(process.versions.node.split('.')[1])<12))fail('Node 22.12 or newer is required.');\n await stat(desktopCommanderEntry);const loaded=await loadInstanceConfig(instance);await ensureAccessReady(instance);const state=await instanceStatus(instance);\n if(state.phase!=='running'&&!await availablePort(loaded.config.port))fail('Configured port is in use: '+loaded.config.port);\n if(json)print({result:'PASS',node:process.version,instanceId:instance.id,configState:state.configState});\n else{\n const isDef=await isDefaultInstance(instance);\n const access=await (await createAccessControl(instancePaths(instance).access,{initialize:false})).snapshot();\n const modeLabel=loaded.config.accessRole==='trusted'?'Coding mode':'Read-only mode';\n const authLabel=access.mode==='ingress'?'None (no token required)':access.mode==='api-key'?`API key (${access.credentials.filter(c=>c.status==='active').length} active)`:'OAuth';\n const portState=state.phase==='running'?`Running on 127.0.0.1:${state.port}`:`Stopped · port ${loaded.config.port} available`;\n process.stdout.write(\n `✓ Runtime Node ${process.version} & Desktop Commander engine ready\\n`+\n `✓ Service ${portState}${isDef?'':` (instance: ${instance.name})`}\\n`+\n `✓ Workspace ${loaded.config.projectRoot} (${modeLabel})\\n`+\n `✓ Configuration ${instance.source.path} (${state.configState})\\n`+\n `✓ Authentication ${authLabel}\\n`+\n `PASS · Node, dependencies, workspace, configuration, port and authentication.\\n`\n );\n }\n }else{\n const args=[...positional,'--instance',instance.id];for(const [key,value] of Object.entries(flags))if(key!=='instance'&&value!==undefined)args.push('--'+key,...(typeof value==='string'?[value]:[]));await handle(command,args);\n }\n}\ntry{await main();}catch(error){const message=error instanceof Error?error.message:String(error);if(json)print({schemaVersion:1,error:message});else process.stderr.write(message+'\\n');process.exitCode=1;}\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import { createRequire } from 'node:module';
|
|
3
2
|
import { fileURLToPath } from 'node:url';
|
|
4
3
|
// This module executes from <installation>/dist/src, never directly as TS.
|
|
5
4
|
export const packageRoot = fileURLToPath(new URL('../../', import.meta.url));
|
|
6
5
|
export const cliEntry = (name = 'starmux') => path.join(packageRoot, 'bin', name + '.mjs');
|
|
7
|
-
//
|
|
8
|
-
export const desktopCommanderEntry =
|
|
6
|
+
// Vendored zero-telemetry build of Desktop Commander bundled inside dist/vendor.
|
|
7
|
+
export const desktopCommanderEntry = path.join(packageRoot, 'dist', 'vendor', 'desktop-commander', 'dist', 'index.js');
|
|
8
|
+
export const desktopCommanderPackageJson = path.join(packageRoot, 'dist', 'vendor', 'desktop-commander', 'package.json');
|
|
9
9
|
export const fixtureRoot = path.join(packageRoot, 'test', 'fixtures');
|
|
10
10
|
export const legacyCliEntry = () => path.join(packageRoot, 'dist/src/cli/mac-mcp-gateway.js');
|
|
11
11
|
//# sourceMappingURL=runtime-paths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-paths.js","sourceRoot":"","sources":["../../src/runtime-paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"runtime-paths.js","sourceRoot":"","sources":["../../src/runtime-paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAI,GAAG,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;AAC3F,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACvH,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC;AACzH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,cAAc,GAAC,GAAE,EAAE,CAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAC,iCAAiC,CAAC,CAAC","sourcesContent":["import path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n// This module executes from <installation>/dist/src, never directly as TS.\nexport const packageRoot = fileURLToPath(new URL('../../', import.meta.url));\nexport const cliEntry = (name = 'starmux') => path.join(packageRoot, 'bin', name + '.mjs');\n// Vendored zero-telemetry build of Desktop Commander bundled inside dist/vendor.\nexport const desktopCommanderEntry = path.join(packageRoot, 'dist', 'vendor', 'desktop-commander', 'dist', 'index.js');\nexport const desktopCommanderPackageJson = path.join(packageRoot, 'dist', 'vendor', 'desktop-commander', 'package.json');\nexport const fixtureRoot = path.join(packageRoot, 'test', 'fixtures');\n\nexport const legacyCliEntry=()=>path.join(packageRoot,'dist/src/cli/mac-mcp-gateway.js');\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024-2025 Eduard Ruzga and Desktop Commander Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Threadpool bootstrap. MUST be the first import in index.ts.
|
|
3
|
+
*
|
|
4
|
+
* Every fs operation (read_file, write_file, edit_block, config/history/log
|
|
5
|
+
* persistence) runs on libuv's threadpool, which defaults to only 4 threads.
|
|
6
|
+
* Under heavy parallel load — e.g. several agents reading/writing files on a
|
|
7
|
+
* slow or cloud-synced filesystem — 4 stalled operations exhaust the pool, and
|
|
8
|
+
* because a stalled syscall keeps its thread until the OS returns (a JS-level
|
|
9
|
+
* timeout does not cancel it), every subsequent fs op queues for minutes. That
|
|
10
|
+
* surfaced as multi-minute tool-call hangs under parallel `claude -p` load.
|
|
11
|
+
*
|
|
12
|
+
* Raising the pool size gives enough headroom that a burst of slow reads no
|
|
13
|
+
* longer starves the rest. libuv reads UV_THREADPOOL_SIZE only when the pool is
|
|
14
|
+
* first initialized (on first submitted work), so this assignment has to happen
|
|
15
|
+
* before ANY threadpool work — hence "first import". A user-provided value is
|
|
16
|
+
* always respected.
|
|
17
|
+
*/
|
|
18
|
+
const DEFAULT_THREADPOOL_SIZE = 16;
|
|
19
|
+
if (!process.env.UV_THREADPOOL_SIZE) {
|
|
20
|
+
process.env.UV_THREADPOOL_SIZE = String(DEFAULT_THREADPOOL_SIZE);
|
|
21
|
+
}
|
|
22
|
+
export {};
|