starmux 0.10.0 → 0.11.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/README.md CHANGED
@@ -4,14 +4,24 @@
4
4
 
5
5
  ### Your computer. Your tools. Connected to your AI.
6
6
 
7
- Connect remote AI clients to files, terminals and development tools on your own computer.
7
+ Connect remote AI clients to files, terminals and development tools on your own computer. **Keep your development environment. Choose what AI can do. Start, stop and revoke access on your terms.**
8
8
 
9
- **Self-hosted MCP · macOS / Linux / Windows CLI preview · MIT**
9
+ **Self-hosted MCP · Native macOS menu bar App · Cross-platform CLI preview · MIT**
10
10
 
11
11
  [Quick Start](#quick-start) · [Connect a client](docs/REMOTE_SETUP.md) · [Documentation](docs/README.md)
12
12
 
13
13
  </div>
14
14
 
15
+ ## Your AI client here. Your tools there.
16
+
17
+ Your repositories, runtimes and development tools already live on your computer. Starmux lets your AI client work with that environment through a self-hosted MCP connection: inspect a project in read-only mode, or enable coding to edit files, run tests and use Git.
18
+
19
+ - **Keep the tools you know.** Work with the files and software already installed on the host.
20
+ - **Choose your AI client.** Use a compatible remote MCP client through HTTPS or a protected Tunnel.
21
+ - **Stay in control.** Start safely with read-only access. Enable coding deliberately, give clients their own credentials and revoke access when needed.
22
+
23
+ Install Starmux on the **computer whose files and tools you want to use**. Your AI client can run elsewhere.
24
+
15
25
  ## Quick Start
16
26
 
17
27
  ### 1. Install
@@ -56,7 +66,10 @@ starmux auth key "My AI Client"
56
66
 
57
67
  This creates a key and enables API-key authentication immediately. Copy the key into your client's private configuration.
58
68
 
59
- ## Connect your AI client
69
+ ## How it connects
70
+
71
+ ![AI clients connect through HTTPS or a protected Tunnel to Starmux and workspace tools.](docs/assets/mcp-gateway-simple.svg)
72
+
60
73
 
61
74
  ```text
62
75
  AI client
@@ -66,7 +79,8 @@ AI client
66
79
  → your files and development tools
67
80
  ```
68
81
 
69
- The local service is ready after `up`. For remote access, choose a connection route:
82
+ HTTPS or a protected Tunnel carries the connection; authentication determines who can connect; the permission mode controls what tools can do. Start with the route your client supports:
83
+
70
84
 
71
85
  | Client or deployment | Next step |
72
86
  | --- | --- |
@@ -89,6 +103,17 @@ starmux down # Alias: stop
89
103
 
90
104
  After initialization, `up` reuses your saved workspace. Use `starmux up .` to switch it to your current directory, or pass another path. `--foreground` keeps the process in your terminal.
91
105
 
106
+ ## A quiet place to keep an eye on things
107
+
108
+ The native macOS menu bar App puts service health, workspace permissions, connection topology and recent tool activity in one compact panel. Start or stop the selected workspace, open its Access console, and keep the details close without leaving a management window open.
109
+
110
+ <div align="center">
111
+ <img src="docs/assets/starmux-app-en.png" width="430" alt="Starmux menu bar showing service status, controls, connection topology and recent tool activity" />
112
+ <p><sub>Native macOS menu bar App · English and Chinese · Development build</sub></p>
113
+ </div>
114
+
115
+ The App and CLI control the same instances. Quitting the App stops only instances it started; CLI background instances keep running. [App build instructions](app/README.md)
116
+
92
117
  ## More than one workspace
93
118
 
94
119
  ```bash
@@ -103,6 +128,36 @@ starmux config apply -i blog
103
128
 
104
129
  Instance names are your labels. Each instance has its own port, configuration, credentials, policies and logs. [Instances and configuration →](docs/INSTANCES.md)
105
130
 
131
+ ## AI client compatibility
132
+
133
+ These are recorded project workflows, including those validated before the Starmux rename. They are not a claim that every client, authentication mode and platform combination has passed the new release.
134
+
135
+ | Client | Recorded validation |
136
+ | --- | --- |
137
+ | **ChatGPT web** | Tunnel + OAuth, including coding and session revocation |
138
+ | **Codex** | Installed Gateway plugin through protected Tunnel |
139
+ | **WorkBuddy** | HTTPS + IPv6 + API-key file reads and writes on macOS |
140
+ | **Doubao (豆包)** | Owner-reported successful use; connection details not recorded |
141
+ | **Claude App** | Compatibility target; end-to-end validation pending |
142
+
143
+ [Exact test scope and client setup guides](docs/CLIENTS.md)
144
+
145
+ ## Platform support
146
+
147
+ | Tool host | Core / CLI | Native App |
148
+ | --- | --- | --- |
149
+ | **macOS** | Starmux 0.10.0 local and published-package workflow tested | SwiftUI development build |
150
+ | **Linux** | Preview; earlier Core tests passed on Ubuntu arm64; new CLI release acceptance pending | Not available |
151
+ | **Windows** | Preview implementation; native validation pending | Not available |
152
+
153
+ [Platform details](docs/PLATFORMS.md) · [Release status](docs/RELEASE_STATUS.md). The macOS App is currently an ad-hoc developer build; a signed, notarized public download is not yet available.
154
+
155
+ ## Where this is going
156
+
157
+ Starmux began with the [community request for a self-hosted Desktop Commander workbench](https://github.com/wonderwhy-er/DesktopCommanderMCP/issues/714). The first priority is a clear path from a local workspace to a real tool call in your preferred AI client.
158
+
159
+ The longer-term direction is a gateway for more MCP servers and clients, with programmable middleware. A public Middleware SDK and user-script plugins are not shipped. Contributions to first-user setup, client compatibility and platform testing are welcome.
160
+
106
161
  ## Documentation and support
107
162
 
108
163
  - [Installation](docs/INSTALL.md) and [documentation index](docs/README.md)
@@ -111,9 +166,7 @@ Instance names are your labels. Each instance has its own port, configuration, c
111
166
  - [Client compatibility](docs/CLIENTS.md), [platform support](docs/PLATFORMS.md), and [release status](docs/RELEASE_STATUS.md)
112
167
  - [Contributing](CONTRIBUTING.md) and [architecture](docs/ARCHITECTURE.md)
113
168
 
114
- Starmux 0.10.0 is a preview. The CLI supports macOS, Linux and Windows; the native macOS App is available as a development build. See the linked compatibility pages for tested combinations.
115
-
116
- ![Starmux native macOS instance manager](docs/assets/starmux-app-en.png)
169
+ Starmux 0.11.0 is a preview. The CLI supports macOS, Linux and Windows; the native macOS App is available as a development build. See the linked compatibility pages for tested combinations.
117
170
 
118
171
  ## Built with Desktop Commander
119
172
 
package/app/README.md CHANGED
@@ -1,7 +1,9 @@
1
1
  # App source (Apple Silicon)
2
2
 
3
- The menu bar App is written in Swift and controls the same local Gateway Core
4
- as the CLI. The individual Swift sources and build script are included here,
3
+ The Starmux menu bar App is written in Swift and controls the same local Core
4
+ as the CLI. Its main panel shows the selected workspace, service health, permissions,
5
+ connection topology and recent tool activity. Advanced instance management opens
6
+ from **Workspaces & settings**; launch does not open a management window. The individual Swift sources and build script are included here,
5
7
  without historical internal research reports.
6
8
 
7
9
  **Build a UI-only preview (not a self-contained public App)**:
@@ -23,3 +25,5 @@ The builder creates a separate temporary TypeScript build directory, runs a lock
23
25
  Ad-hoc signing is for developers. **No Developer ID / Apple notarization is
24
26
  provided**. Do not advertise this candidate as a notarized public binary;
25
27
  the App ZIP for GitHub Releases needs separate signing and end-user validation.
28
+
29
+ For visual acceptance, launch the built executable with `--show-monitor` to open the same menu view in a window. Normal launch stays in the menu bar; reopening the App also shows the monitor.
@@ -12,7 +12,7 @@ import { instanceStatus, instanceRequest, runInstance } from '../instance-runtim
12
12
  import { atomicPrivate, availablePort, changeRegistry, createInstance, ensureAccessReady, exists, instanceConfigSchema, instancePaths, loadInstanceConfig, parseConfig, patchInstanceConfig, readRegistry, readTrusted, resolveInstance, saveInstanceConfig, suggestPort, validateConfig } from '../instance-store.js';
13
13
  import { handle } from './instances.js';
14
14
  import { desktopCommanderEntry, packageRoot } from '../runtime-paths.js';
15
- const version = '0.10.0';
15
+ const version = '0.11.0';
16
16
  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'];
17
17
  const booleans = ['help', 'version', 'json', 'write', 'code', 'read', 'yes', 'foreground', 'follow', 'archived', 'all', 'effective', 'link', 'allow-loopback-http', 'token-stdin', 'no-open', 'token'];
18
18
  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,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,packageRoot} from '../runtime-paths.js';\n\nconst version='0.10.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 topic=command==='help'?positional[0]:command;\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 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|path|edit|validate|diff|apply|schema|recover\\n config import FILE [-i NAME] [--link] [-y]\\n config copy NEW_NAME -i SOURCE\\n config rename NEW_NAME -i SOURCE\\n config default NAME\\n config archive|restore -i NAME\\n config export --output FILE\\n config relink --file FILE | manage\\n config save --file FILE --revision REV\\n config patch --patch JSON --revision REV [-y]\\n config 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 and a directory 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 Dashboard.',\n ls:'ls [--archived]\\n List local instances.',\n down:'down (alias: stop)\\n Stop the selected instance.'\n };\n process.stdout.write(`Starmux ${version}\\n\\n${sections[topic??'']??'Connect AI clients to your computer’s files and development tools.\\n\\n starmux up [path] [--code] Start in the background\\n starmux init [path] Save settings\\n starmux status Show local endpoints\\n starmux verify | doctor Check tools or environment\\n starmux logs [-f] Read logs\\n starmux down Stop\\n starmux auth Manage client access\\n starmux dashboard Open local Access console\\n starmux ls List instances\\n starmux config Advanced configuration\\n starmux migrate Import an old installation'}\\n\\nGlobal: -i, --instance NAME_OR_ID --json -h, --help\\nUse starmux COMMAND --help for details.\\nDocumentation: ${path.join(packageRoot,'docs','README.md')}\\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 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(`\\nStarmux · ${instance.name} · ${status.phase}\\nWorkspace ${config?.projectRoot??'Unavailable'}\\nMode ${config?.accessRole==='trusted'?(config.writeScope==='home-only'?'Coding (Home sandbox)':'Coding (OS account)'):config?.mode==='read-write'?'File writes (restricted)':'Read-only'}\\nRuntime ${status.executionMode}\\n`);\n if(status.port&&status.phase==='running')process.stdout.write(`MCP http://127.0.0.1:${status.port}/mcp\\nDashboard http://127.0.0.1:${status.port}/access\\n`);\n if(status.configProblem||status.runtimeProblem)process.stdout.write(`Problem ${status.configProblem??status.runtimeProblem}\\n`);\n process.stdout.write(`Logs starmux logs -f -i ${JSON.stringify(instance.name)}\\n`);\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,...(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 transport=new StreamableHTTPClientTransport(new URL(`http://127.0.0.1:${status.port}/mcp`),{requestInit:{headers:token?{Authorization:'Bearer '+token}:{}}});\n try{await client.connect(transport as Transport);await client.listTools();const result=await client.callTool({name:'list_directory',arguments:{path:'.',depth:0}});if(result.isError)fail('Directory read failed.');}\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});else process.stdout.write('PASS · MCP handshake, tool discovery and workspace read.\\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){const state=await access.snapshot();if(json)print(state);else{process.stdout.write(`Authentication: ${state.mode}\\n`);for(const c of state.credentials)process.stdout.write(`${c.id} ${c.name} ${c.status}\\n`);for(const c of state.oauthConnections)process.stdout.write(`${c.id} OAuth ${c.clientId} ${c.revokedAt?'revoked':'active'}\\n`);}return;}\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'});else process.stdout.write(`API key enabled for ${result.name}\\nID: ${result.id}\\n\\n${result.key}\\n\\nCopy this key now; it is shown once.\\n`);return;\n }\n if(op==='mode'){\n const mode=positional[1];if(mode!=='ingress'&&mode!=='api-key'&&mode!=='oauth')fail('Choose 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 if(json)print(await access.snapshot());else process.stdout.write('Authentication: '+mode+'\\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 if(await exists(file)){const text=await readTrusted(file,true,32*1024*1024);offset=Buffer.byteLength(text);const output=text.split('\\n').slice(-count).join('\\n');if(json)print({instanceId:instance.id,output});else process.stdout.write(output);}\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==='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}\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'],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(['status','ls','down','stop','logs','doctor','verify','dashboard'].includes(command)&&positional.length)fail('Unexpected argument: '+positional[0]);\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();if(command==='up')await start(instance);else if(json)print({result:'SAVED',instance});else process.stdout.write(`Saved ${instance.name}. Start with starmux up -i ${JSON.stringify(instance.name)}\\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==='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});else process.stdout.write('PASS · Node, dependencies, workspace, configuration, port and authentication.\\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,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,packageRoot} from '../runtime-paths.js';\n\nconst version='0.11.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 topic=command==='help'?positional[0]:command;\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 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|path|edit|validate|diff|apply|schema|recover\\n config import FILE [-i NAME] [--link] [-y]\\n config copy NEW_NAME -i SOURCE\\n config rename NEW_NAME -i SOURCE\\n config default NAME\\n config archive|restore -i NAME\\n config export --output FILE\\n config relink --file FILE | manage\\n config save --file FILE --revision REV\\n config patch --patch JSON --revision REV [-y]\\n config 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 and a directory 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 Dashboard.',\n ls:'ls [--archived]\\n List local instances.',\n down:'down (alias: stop)\\n Stop the selected instance.'\n };\n process.stdout.write(`Starmux ${version}\\n\\n${sections[topic??'']??'Connect AI clients to your computer’s files and development tools.\\n\\n starmux up [path] [--code] Start in the background\\n starmux init [path] Save settings\\n starmux status Show local endpoints\\n starmux verify | doctor Check tools or environment\\n starmux logs [-f] Read logs\\n starmux down Stop\\n starmux auth Manage client access\\n starmux dashboard Open local Access console\\n starmux ls List instances\\n starmux config Advanced configuration\\n starmux migrate Import an old installation'}\\n\\nGlobal: -i, --instance NAME_OR_ID --json -h, --help\\nUse starmux COMMAND --help for details.\\nDocumentation: ${path.join(packageRoot,'docs','README.md')}\\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 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(`\\nStarmux · ${instance.name} · ${status.phase}\\nWorkspace ${config?.projectRoot??'Unavailable'}\\nMode ${config?.accessRole==='trusted'?(config.writeScope==='home-only'?'Coding (Home sandbox)':'Coding (OS account)'):config?.mode==='read-write'?'File writes (restricted)':'Read-only'}\\nRuntime ${status.executionMode}\\n`);\n if(status.port&&status.phase==='running')process.stdout.write(`MCP http://127.0.0.1:${status.port}/mcp\\nDashboard http://127.0.0.1:${status.port}/access\\n`);\n if(status.configProblem||status.runtimeProblem)process.stdout.write(`Problem ${status.configProblem??status.runtimeProblem}\\n`);\n process.stdout.write(`Logs starmux logs -f -i ${JSON.stringify(instance.name)}\\n`);\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,...(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 transport=new StreamableHTTPClientTransport(new URL(`http://127.0.0.1:${status.port}/mcp`),{requestInit:{headers:token?{Authorization:'Bearer '+token}:{}}});\n try{await client.connect(transport as Transport);await client.listTools();const result=await client.callTool({name:'list_directory',arguments:{path:'.',depth:0}});if(result.isError)fail('Directory read failed.');}\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});else process.stdout.write('PASS · MCP handshake, tool discovery and workspace read.\\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){const state=await access.snapshot();if(json)print(state);else{process.stdout.write(`Authentication: ${state.mode}\\n`);for(const c of state.credentials)process.stdout.write(`${c.id} ${c.name} ${c.status}\\n`);for(const c of state.oauthConnections)process.stdout.write(`${c.id} OAuth ${c.clientId} ${c.revokedAt?'revoked':'active'}\\n`);}return;}\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'});else process.stdout.write(`API key enabled for ${result.name}\\nID: ${result.id}\\n\\n${result.key}\\n\\nCopy this key now; it is shown once.\\n`);return;\n }\n if(op==='mode'){\n const mode=positional[1];if(mode!=='ingress'&&mode!=='api-key'&&mode!=='oauth')fail('Choose 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 if(json)print(await access.snapshot());else process.stdout.write('Authentication: '+mode+'\\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 if(await exists(file)){const text=await readTrusted(file,true,32*1024*1024);offset=Buffer.byteLength(text);const output=text.split('\\n').slice(-count).join('\\n');if(json)print({instanceId:instance.id,output});else process.stdout.write(output);}\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==='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}\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'],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(['status','ls','down','stop','logs','doctor','verify','dashboard'].includes(command)&&positional.length)fail('Unexpected argument: '+positional[0]);\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();if(command==='up')await start(instance);else if(json)print({result:'SAVED',instance});else process.stdout.write(`Saved ${instance.name}. Start with starmux up -i ${JSON.stringify(instance.name)}\\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==='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});else process.stdout.write('PASS · Node, dependencies, workspace, configuration, port and authentication.\\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,15 +1,24 @@
1
- # Starmux 0.10.0 preview
1
+ # Starmux 0.11.0 preview
2
2
 
3
- This release introduces the Starmux name, background `up`, CWD-based first setup, `--code` / `--write`, unified authentication commands and explicit migration from Mac MCP Gateway.
3
+ This release restores the product story, connection overview and native App showcase in the README, and includes the complete user documentation and a real screenshot of the restored status monitor in the npm package. It retains the CLI workflow introduced in 0.10.0: background `up`, CWD-based first setup, `--code` / `--write`, unified authentication and explicit migration.
4
4
 
5
- The release target is the public `starmux@0.10.0` npm package. Publication is complete only after installing that version from the public registry and passing the Quick Start. A local build or tarball alone does not establish registry availability.
5
+ The macOS App source restores the status monitor as the main interface, with advanced instance management behind a secondary entry. It shows the selected instance’s active configuration, actual port and anonymous tool activity. UI acceptance covered stopping a CLI instance, starting it under App ownership, opening permissions and advanced settings, and quitting the App while an independent CLI instance kept running.
6
+
7
+ The npm package includes the App screenshot and build guide; the native `.app` is distributed separately. Updating npm does not replace an installed macOS App.
6
8
 
7
9
  ## Included
8
10
 
9
11
  - TypeScript CLI/Core, automatic local initialization and supervised background processes.
10
12
  - Read-only and full OS-account coding modes, independent instances and JSONC configuration with apply/rollback.
11
13
  - Ingress, API-key and OAuth authentication; local Access console and persistent revocation.
12
- - macOS App source and development build tooling.
14
+ - Complete user guides, connection diagrams and the native App screenshot.
15
+ - macOS App source and development build tooling in the source repository.
16
+
17
+ ## Release validation
18
+
19
+ The 0.11.0 release workflow checks the final tarball contents, installs it in an isolated prefix and exercises startup, MCP verification, API-key authentication and shutdown. After publication, the same workflow is repeated from the public registry and the package integrity is compared with the tested archive.
20
+
21
+ The preceding public 0.10.0 package passed this install-and-run workflow on macOS. The restored App also passed its native build, self-tests and UI ownership checks.
13
22
 
14
23
  ## Tested deployment history
15
24
 
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "starmux",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Connect AI clients to files, terminals and development tools on your own computer.",
5
5
  "license": "MIT",
6
6
  "type": "module",