starmux 0.13.0 → 0.14.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/LICENSE +1 -1
- package/README.md +20 -30
- package/dist/src/access-control.js +1 -2
- package/dist/src/access-dashboard.js +2 -3
- package/dist/src/account-access-policy.js +54 -0
- package/dist/src/authorized-workspace-roots.js +0 -1
- package/dist/src/batch-read-policy.js +30 -0
- package/dist/src/cli/instances.js +6 -175
- package/dist/src/cli/oauth.js +0 -1
- package/dist/src/cli/starmux-status.js +10 -14
- package/dist/src/cli/starmux-supervisor.js +0 -1
- package/dist/src/cli/starmux.js +13 -25
- package/dist/src/config-schemas.js +0 -9
- package/dist/src/configured-mcp-upstreams.js +0 -1
- package/dist/src/contracts.js +0 -1
- package/dist/src/current-permission-probe.js +0 -1
- package/dist/src/dc-workspace-http.js +57 -33
- package/dist/src/deny-dashboard.js +2 -3
- package/dist/src/desktop-commander-facade.js +4 -4
- package/dist/src/explicit-deny-rules.js +2 -3
- package/dist/src/global-core-control.js +2 -3
- package/dist/src/home-write-sandbox.js +0 -1
- package/dist/src/http-host-policy.js +20 -0
- package/dist/src/instance-runtime.js +3 -3
- package/dist/src/instance-store.js +28 -22
- package/dist/src/instance-worker.js +2 -3
- package/dist/src/invocation.js +1 -2
- package/dist/src/local-desktop-read-probe.js +5 -88
- package/dist/src/managed-workspace-policy.js +38 -4
- package/dist/src/mcp-results.js +0 -1
- package/dist/src/mcp-upstream-router.js +0 -1
- package/dist/src/oauth-keycloak.js +0 -1
- package/dist/src/oauth-resource.js +0 -1
- package/dist/src/ops-dashboard.js +2 -179
- package/dist/src/permissions-dashboard.js +3 -4
- package/dist/src/platform.js +3 -4
- package/dist/src/privacy-diagnostics.js +0 -1
- package/dist/src/private-mcp-activity.js +0 -1
- package/dist/src/private-store-lock.js +0 -1
- package/dist/src/project-dev-presets.js +0 -1
- package/dist/src/project-git-workflow.js +0 -1
- package/dist/src/project-workspace-policy.js +10 -6
- package/dist/src/runtime-identity.js +0 -14
- package/dist/src/runtime-paths.js +0 -3
- package/dist/src/tool-dispatch.js +45 -46
- package/dist/src/validation.js +0 -1
- package/dist/src/workspace-grants.js +1 -2
- package/package.json +13 -17
- package/scripts/prepare.mjs +1 -1
- package/CONTRIBUTING.md +0 -18
- package/SECURITY.md +0 -7
- package/app/README.md +0 -29
- package/dist/src/access-control.js.map +0 -1
- package/dist/src/access-dashboard.js.map +0 -1
- package/dist/src/authorized-workspace-roots.js.map +0 -1
- package/dist/src/cli/access.js +0 -53
- package/dist/src/cli/access.js.map +0 -1
- package/dist/src/cli/community-remote-revoke.js +0 -32
- package/dist/src/cli/community-remote-revoke.js.map +0 -1
- package/dist/src/cli/instances.js.map +0 -1
- package/dist/src/cli/live-home-settings.js +0 -35
- package/dist/src/cli/live-home-settings.js.map +0 -1
- package/dist/src/cli/mac-mcp-gateway.js +0 -257
- package/dist/src/cli/mac-mcp-gateway.js.map +0 -1
- package/dist/src/cli/oauth.js.map +0 -1
- package/dist/src/cli/permissions-owner.js +0 -27
- package/dist/src/cli/permissions-owner.js.map +0 -1
- package/dist/src/cli/service-setup.js +0 -26
- package/dist/src/cli/service-setup.js.map +0 -1
- package/dist/src/cli/setup-wizard.js +0 -149
- package/dist/src/cli/setup-wizard.js.map +0 -1
- package/dist/src/cli/starmux-status.js.map +0 -1
- package/dist/src/cli/starmux-supervisor.js.map +0 -1
- package/dist/src/cli/starmux.js.map +0 -1
- package/dist/src/cli/verify-setup.js +0 -53
- package/dist/src/cli/verify-setup.js.map +0 -1
- package/dist/src/community-remote-revocations.js +0 -135
- package/dist/src/community-remote-revocations.js.map +0 -1
- package/dist/src/config-schemas.js.map +0 -1
- package/dist/src/configured-mcp-upstreams.js.map +0 -1
- package/dist/src/contracts.js.map +0 -1
- package/dist/src/current-permission-probe.js.map +0 -1
- package/dist/src/dc-workspace-http.js.map +0 -1
- package/dist/src/deny-dashboard.js.map +0 -1
- package/dist/src/desktop-commander-facade.js.map +0 -1
- package/dist/src/explicit-deny-rules.js.map +0 -1
- package/dist/src/gateway-status-format.js +0 -66
- package/dist/src/gateway-status-format.js.map +0 -1
- package/dist/src/global-core-control.js.map +0 -1
- package/dist/src/home-write-sandbox.js.map +0 -1
- package/dist/src/instance-migration.js +0 -138
- package/dist/src/instance-migration.js.map +0 -1
- package/dist/src/instance-runtime.js.map +0 -1
- package/dist/src/instance-store.js.map +0 -1
- package/dist/src/instance-worker.js.map +0 -1
- package/dist/src/invocation.js.map +0 -1
- package/dist/src/live-profile-home-settings.js +0 -80
- package/dist/src/live-profile-home-settings.js.map +0 -1
- package/dist/src/local-desktop-read-probe.js.map +0 -1
- package/dist/src/managed-workspace-policy.js.map +0 -1
- package/dist/src/mcp-results.js.map +0 -1
- package/dist/src/mcp-upstream-router.js.map +0 -1
- package/dist/src/oauth-keycloak.js.map +0 -1
- package/dist/src/oauth-resource.js.map +0 -1
- package/dist/src/operator-cli.js +0 -559
- package/dist/src/operator-cli.js.map +0 -1
- package/dist/src/ops-dashboard.js.map +0 -1
- package/dist/src/permissions-dashboard.js.map +0 -1
- package/dist/src/platform.js.map +0 -1
- package/dist/src/privacy-diagnostics.js.map +0 -1
- package/dist/src/private-mcp-activity.js.map +0 -1
- package/dist/src/private-store-lock.js.map +0 -1
- package/dist/src/project-dev-presets.js.map +0 -1
- package/dist/src/project-git-workflow.js.map +0 -1
- package/dist/src/project-workspace-policy.js.map +0 -1
- package/dist/src/read-scope.js +0 -44
- package/dist/src/read-scope.js.map +0 -1
- package/dist/src/release1-onboarding.js +0 -120
- package/dist/src/release1-onboarding.js.map +0 -1
- package/dist/src/release1-service.js +0 -131
- package/dist/src/release1-service.js.map +0 -1
- package/dist/src/remote-auth.js +0 -47
- package/dist/src/remote-auth.js.map +0 -1
- package/dist/src/runtime-identity.js.map +0 -1
- package/dist/src/runtime-paths.js.map +0 -1
- package/dist/src/starmux-migration.js +0 -172
- package/dist/src/starmux-migration.js.map +0 -1
- package/dist/src/tool-dispatch.js.map +0 -1
- package/dist/src/validation.js.map +0 -1
- package/dist/src/workspace-grants.js.map +0 -1
- package/docs/ACCESS_CONTROL.md +0 -51
- package/docs/CLIENTS.md +0 -22
- package/docs/CONNECT_CHATGPT.md +0 -148
- package/docs/INSTALL.md +0 -62
- package/docs/INSTANCES.md +0 -83
- package/docs/OAUTH.md +0 -116
- package/docs/PLATFORMS.md +0 -29
- package/docs/README.md +0 -16
- package/docs/REMOTE_SETUP.md +0 -280
- package/docs/SECURITY.md +0 -15
- package/docs/assets/starmux-app-en.png +0 -0
- package/docs/assets/starmux-architecture.svg +0 -315
- package/src/dc-workspace-http.mjs +0 -3
- package/test/fixtures/p1-fixture.txt +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instances.js","sourceRoot":"","sources":["../../../src/cli/instances.ts"],"names":[],"mappings":"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","sourcesContent":["import {createInterface} from 'node:readline/promises';\nimport {spawn} from 'node:child_process';\nimport {readFile,writeFile,mkdtemp,rm,realpath} from 'node:fs/promises';\nimport {tmpdir,homedir} from 'node:os';\nimport path from 'node:path';\nimport {createAccessControl} from '../access-control.js';\nimport {createWorkspaceGrants} from '../workspace-grants.js';\nimport {createDenyRules} from '../explicit-deny-rules.js';\nimport {createPrivateDirectory} from '../platform.js';\nimport {instanceStatus,instanceRequest,runInstance} from '../instance-runtime.js';\nimport {atomicPrivate,changeRegistry,configJSONSchema,sourceRevision,configTemplate,createInstance,exists,fingerprint,instanceConfigSchema,instanceEnv,instancePaths,instancesRoot,loadInstanceConfig,parseConfig,patchInstanceConfig,readRegistry,readTrusted,resolveInstance,saveInstanceConfig,suggestPort,validateConfig,withLock,type Instance,type InstanceConfig} from '../instance-store.js';\n\nconst booleans=new Set(['--json','--all','--link','--archived','--approve-trusted-developer','--approve-unrestricted','--confirm','--effective','--allow-loopback-http']);\nfunction options(args:string[]){\n const flags=new Map<string,string>();const positional:string[]=[];\n for(let i=0;i<args.length;i++){const arg=args[i]!;if(!arg.startsWith('--')){positional.push(arg);continue;}\n if(flags.has(arg))throw Error('DUPLICATE_OPTION: '+arg);\n if(booleans.has(arg))flags.set(arg,'true');else {if(!args[i+1]||args[i+1]!.startsWith('--'))throw Error('MISSING_OPTION_VALUE: '+arg);flags.set(arg,args[++i]!);}\n }\n return {flags,positional};\n}\nconst message=(error:unknown)=>error instanceof Error?error.message:'UNKNOWN_ERROR';\nasync function readInput(){let text='';for await(const chunk of process.stdin){text+=String(chunk);if(text.length>262144)throw Error('CONFIG_TOO_LARGE');}return text;}\nfunction output(value:unknown){process.stdout.write(JSON.stringify(value,null,2)+'\\n');}\nfunction requireApprovals(config:InstanceConfig,flags:Map<string,string>){\n if(config.accessRole==='trusted'&&!flags.has('--approve-trusted-developer'))throw Error('TRUSTED_APPROVAL_REQUIRED: add --approve-trusted-developer');\n if(config.accessRole==='trusted'&&process.platform!=='darwin'&&!flags.has('--approve-unrestricted'))throw Error('UNRESTRICTED_APPROVAL_REQUIRED: add --approve-unrestricted');\n}\nasync function wizard(flags:Map<string,string>,current?:InstanceConfig){\n let project=flags.get('--project')??current?.projectRoot;let role=flags.get('--access-role')??current?.accessRole??'restricted';\n let port=Number(flags.get('--port')??current?.port??await suggestPort());\n if(!project){\n if(!process.stdin.isTTY)throw Error('PROJECT_REQUIRED: use --project /absolute/directory');\n const rl=createInterface({input:process.stdin,output:process.stderr});\n try{project=await rl.question('Work directory: ');role=(await rl.question('Capability (restricted / trusted) [restricted]: '))||'restricted';\n if(role==='trusted'&&(await rl.question('Enable native tools and Shell as your OS account? Type yes: '))==='yes'){\n flags.set('--approve-trusted-developer','true');if(process.platform!=='darwin')flags.set('--approve-unrestricted','true');\n }\n port=Number((await rl.question(`Local port [${port}]: `))||port);\n }finally{rl.close();}\n }\n const config=instanceConfigSchema.parse({...current,schemaVersion:1,projectRoot:await realpath(path.resolve(project)),port,\n accessRole:role,mode:current?.accessRole===role?current.mode:role==='trusted'?'read-write':'read-only',writeScope:current?.accessRole===role?current.writeScope:role==='trusted'&&process.platform==='darwin'?'home-only':'unrestricted',connection:flags.get('--connection')??current?.connection??'local'});\n requireApprovals(config,flags);return validateConfig(config);\n}\nexport async function maybeHandleInstances(argv:string[]):Promise<boolean>{\n let command=argv[0]??'help';\n if(command==='start-setup'&&!process.env.MAC_MCP_INTERNAL_SETUP_OWNER_PID){command='run';argv=['run','--profile','setup',...argv.slice(1)];}\n if(command==='doctor-setup'){command='doctor';argv=['doctor','--profile','setup',...argv.slice(1)];}\n const supported=['instance','config','run','status','stop','restart','logs','doctor','verify','access','permissions','privacy','setup'];\n if(!supported.includes(command))return false;\n try {\n const explicit=argv.includes('--instance');const registry=await readRegistry();\n const managed=registry.instances.length>0;\n const firstWizard=command==='setup'&&argv.length===1&&process.stdin.isTTY;\n if(!['instance','config'].includes(command)&&!explicit&&!managed&&!firstWizard)return false;\n // A retained legacy profile remains available until the owner migrates it.\n const profileIndex=argv.indexOf('--profile');\n if(profileIndex>=0&&!registry.instances.some(i=>i.legacy===argv[profileIndex+1])&&argv[profileIndex+1]!=='auto'){\n if(registry.instances.some(i=>i.legacy))throw Error('LEGACY_PROFILE_NOT_MIGRATED_USE_INSTANCE: select --instance explicitly');\n return false;\n }\n await handle(command,argv.slice(1));}catch(error){\n if(argv.includes('--json'))output({schemaVersion:1,error:message(error)});\n else process.stderr.write(message(error)+'\\n');process.exitCode=1;\n }\n return true;\n}\nexport async function handle(command:string,args:string[]){\n const {flags,positional}=options(args);const json=flags.has('--json');\n const known=new Set([...booleans,'--instance','--name','--project','--port','--access-role','--connection','--profile','--app-parent-pid','--revision','--patch','--file','--output','--lines','--expires','--issuer','--resource','--resource-aliases','--client-id','--subjects','--registration','--token-auth','--callback','--target','--mode']);\n for(const flag of flags.keys())if(!known.has(flag))throw Error('UNKNOWN_OPTION: '+flag);\n if(command==='instance'){\n const op=positional[0]??'list';\n if(op==='list'){\n const registry=await readRegistry();const filtered=registry.instances.filter(i=>flags.has('--archived')||!i.archived);\n const instances=await Promise.all(filtered.map(i=>instanceStatus(i)));\n if(json)output({schemaVersion:1,defaultInstanceId:registry.defaultInstanceId,instances});\n else {\n if(!instances.length){\n process.stdout.write(registry.instances.length\n ?'No active instances. Run: starmux ls --archived\\nRestore an instance with: starmux config restore -i NAME\\n'\n :'No instances. Run: starmux up\\n');\n return;\n }\n const rows=await Promise.all(instances.map(async(s,idx)=>{\n const raw=filtered[idx]!;\n const cfg=s.active?.config??(await loadInstanceConfig(raw).catch(()=>null))?.config;\n const mark=s.instanceId===registry.defaultInstanceId?'*':' ';\n const state=s.archived?'archived':s.configState==='pending'?`${s.phase} (pending)`:s.phase;\n const mode=cfg?.accessRole==='trusted'?'coding':(s.workspaceMode??'read-only');\n const port=String(s.port??'—');\n const workspace=cfg?.projectRoot??s.source.path;\n return {mark,name:s.name,state,mode,port,workspace};\n }));\n const wName=Math.max(4,...rows.map(r=>r.name.length));\n const wState=Math.max(6,...rows.map(r=>r.state.length));\n const wMode=Math.max(4,...rows.map(r=>r.mode.length));\n const wPort=Math.max(4,...rows.map(r=>r.port.length));\n process.stdout.write(` ${'NAME'.padEnd(wName)} ${'STATUS'.padEnd(wState)} ${'MODE'.padEnd(wMode)} ${'PORT'.padEnd(wPort)} WORKSPACE\\n`);\n for(const r of rows){\n process.stdout.write(`${r.mark} ${r.name.padEnd(wName)} ${r.state.padEnd(wState)} ${r.mode.padEnd(wMode)} ${r.port.padEnd(wPort)} ${r.workspace}\\n`);\n }\n }return;\n }\n if(op==='create'){\n const config=await wizard(flags);const instance=await createInstance(positional[1]??flags.get('--name')??'default',{config});\n output({instance,message:'Saved. Start with: starmux up -i '+JSON.stringify(instance.name)});return;\n }\n if(op==='import'){\n const file=positional[1];if(!file)throw Error('IMPORT_FILE_REQUIRED');\n const config=await validateConfig(parseConfig(await readTrusted(path.resolve(file),false)));requireApprovals(config,flags);\n output({instance:await createInstance(flags.get('--name')??path.basename(file,path.extname(file)),{file,link:flags.has('--link')}),\n message:flags.has('--link')?'Bound to original file. Changes require apply.':'Imported a private copy. The original file is no longer used.'});return;\n }\n if(op==='migrate'){\n const {migrateLegacy}=await import('../instance-migration.js');output(await migrateLegacy(positional[1],flags.has('--confirm'),flags.get('--name')));return;\n }\n const instance=await resolveInstance(positional[1]??flags.get('--instance'),homedir(),op==='restore');\n if(op==='copy'){\n const config={...(await loadInstanceConfig(instance)).config,port:await suggestPort()};\n const access=await createAccessControl(instancePaths(instance).access);const mode=(await access.snapshot()).mode;\n const created=await createInstance(positional[2]??flags.get('--name')??instance.name+' copy',{config,requiredAccess:instance.requiredAccess!=='ingress'?instance.requiredAccess:mode});\n if(json)output({instance:created,message:'Copied settings only. Credentials and sessions were not copied.'});\n else process.stdout.write(`Copied '${instance.name}' to '${created.name}' (port ${config.port}). Credentials and sessions were not copied.\\n`);\n return;\n }\n await changeRegistry(async registry=>{\n const item=registry.instances.find(i=>i.id===instance.id)!;\n if(op==='rename'){\n const name=positional[2];if(!name)throw Error('NAME_REQUIRED');if(registry.instances.some(i=>i.name===name))throw Error('INSTANCE_NAME_EXISTS');item.name=name;\n }else if(op==='default')registry.defaultInstanceId=item.id;\n else if(op==='archive'||op==='remove'){const stopped=await instanceRequest(instance,'stop');if(stopped&&stopped.phase!=='stopped')throw Error('INSTANCE_STILL_RUNNING');item.archived=true;if(registry.defaultInstanceId===item.id)registry.defaultInstanceId=null;}\n else if(op==='restore')item.archived=false;\n else throw Error('INSTANCE_ACTION_INVALID');\n });\n if(json)output({result:'OK',instanceId:instance.id});\n else if(op==='rename')process.stdout.write(`Renamed '${instance.name}' to '${positional[2]}'.\\n`);\n else if(op==='default')process.stdout.write(`Default instance set to '${instance.name}'.\\n`);\n else if(op==='archive'||op==='remove')process.stdout.write(`Archived instance '${instance.name}'.\\n`);\n else if(op==='restore')process.stdout.write(`Restored instance '${instance.name}'.\\n`);\n return;\n }\n if(command==='status'&&!flags.has('--instance')&&(!json||flags.has('--all')))return handle('instance',['list',...(json?['--json']:[])]);\n const profile=flags.get('--profile');\n let selector=flags.get('--instance');\n if(profile&&profile!=='auto'){\n const legacy=(await readRegistry()).instances.find(i=>i.legacy===profile);if(!legacy)throw Error('LEGACY_PROFILE_NOT_MIGRATED');selector=legacy.id;\n }\n if(command==='setup'&&!(await readRegistry()).instances.length){await handle('instance',['create','default',...args]);return;}\n const instance=await resolveInstance(selector);const p=instancePaths(instance);\n if(command==='status'){output(await instanceStatus(instance));return;}\n if(command==='run'){\n if(flags.has('--port'))throw Error('INSTANCE_PORT_OVERRIDE_DENIED: edit configuration and apply');\n await runInstance(instance,{json,...(flags.has('--app-parent-pid')?{appParentPid:Number(flags.get('--app-parent-pid'))}:{})});return;\n }\n if(command==='stop'){output({result:(await instanceRequest(instance,'stop'))?'STOPPED':'ALREADY_STOPPED',instanceId:instance.id});return;}\n if(command==='restart'){await handle('config',['apply','--instance',instance.id,...(json?['--json']:[])]);return;}\n if(command==='setup'){\n const current=await loadInstanceConfig(instance);const config=await wizard(flags,current.config);\n await patchInstanceConfig(instance,config,current.revision);output({result:'SAVED',instanceId:instance.id,message:'Apply changes to restart the running instance.'});return;\n }\n if(command==='config'){\n const op=positional[0]??'show';\n if(op==='path'){if(json)output({instanceId:instance.id,...p,source:instance.source});else process.stdout.write(instance.source.path+'\\n');return;}\n if(op==='schema'){output(configJSONSchema());return;}\n if(op==='show'){\n if(flags.has('--effective')){\n const active=(await instanceStatus(instance)).active;\n if(json)output(active);\n else if(!active)process.stdout.write(`Instance ${instance.name} has no active running configuration.\\n`);\n else process.stdout.write(\n `Instance ${instance.name} (effective running config)\\n`+\n `Workspace ${active.config.projectRoot}\\n`+\n `Port ${active.config.port}\\n`+\n `Mode ${active.config.accessRole==='trusted'?'Coding (read-write, shell & git)':active.config.mode}\\n`+\n `Git workflow ${active.config.gitMode}\\n`+\n `Extra MCPs ${active.config.upstreams.length}\\n`\n );\n }else{\n const text=await readTrusted(instance.source.path,instance.source.kind==='managed');\n let config:InstanceConfig|null=null;let problem:string|null=null;\n try{config=await validateConfig(parseConfig(text));}catch(e){problem=message(e);}\n if(json)output({instanceId:instance.id,text,config,problem,revision:sourceRevision(instance.source.path,text),source:instance.source});\n else if(problem||!config)process.stdout.write(`Instance ${instance.name}\\nConfig file ${instance.source.path}\\nProblem ${problem??'Invalid configuration'}\\n`);\n else process.stdout.write(\n `Instance ${instance.name}\\n`+\n `Config file ${instance.source.path} (${instance.source.kind})\\n`+\n `Workspace ${config.projectRoot}\\n`+\n `Port ${config.port}\\n`+\n `Mode ${config.accessRole==='trusted'?'Coding (read-write, shell & git)':config.mode}\\n`+\n `Git workflow ${config.gitMode}\\n`+\n `Extra MCPs ${config.upstreams.length}\\n\\n`+\n `Commands\\n`+\n ` Edit config starmux config edit${instance.name==='default'?'':` -i ${instance.name}`}\\n`+\n ` Apply starmux config apply${instance.name==='default'?'':` -i ${instance.name}`}\\n`\n );\n }return;\n }\n if(op==='recover'){\n const snapshot=(await instanceStatus(instance)).active;if(!snapshot)throw Error('NO_SUCCESSFUL_CONFIG_SNAPSHOT');\n await validateConfig(snapshot.config);\n const target=path.join(p.root,'config.jsonc');\n await changeRegistry(async registry=>{\n if(await exists(target))throw Error('CONFIG_RECOVERY_WOULD_OVERWRITE: repair the existing file instead');\n await atomicPrivate(target,configTemplate(snapshot.config));\n registry.instances.find(i=>i.id===instance.id)!.source={kind:'managed',path:target};\n });output({result:'RECOVERED_MANAGED_CONFIG',path:target});return;\n }\n if(op==='secret'){\n const action=positional[1];const name=positional[2];if(!name||! /^[A-Za-z][A-Za-z0-9_-]{0,79}$/.test(name))throw Error('SECRET_NAME_REQUIRED');\n const file=path.join(p.state,'secrets.json');\n await withLock(file+'.lock',async()=>{\n const secrets:Record<string,string>=await exists(file)?JSON.parse(await readTrusted(file)) as Record<string,string>:{};\n if(action==='set')secrets[name]=(await readInput()).replace(/\\r?\\n$/,'');\n else if(action==='remove')delete secrets[name];else throw Error('SECRET_ACTION_INVALID');\n await atomicPrivate(file,JSON.stringify(secrets));\n });output({result:'SECRET_UPDATED',name});return;\n }\n if(op==='relink'||op==='manage'){\n const file=flags.get('--file')??positional[1];const loaded=op==='manage'?await loadInstanceConfig(instance):null;\n if(op==='relink'&&!file)throw Error('CONFIG_FILE_REQUIRED');\n const target=op==='manage'?path.join(p.root,'config.jsonc'):path.resolve(file!);\n if(op==='relink')await validateConfig(parseConfig(await readTrusted(target,false)));\n await changeRegistry(async registry=>{\n if(registry.instances.some(i=>i.id!==instance.id&&i.source.path===target))throw Error('CONFIG_ALREADY_BOUND');\n if(loaded)await atomicPrivate(target,loaded.text);\n registry.instances.find(i=>i.id===instance.id)!.source={kind:op==='manage'?'managed':'linked',path:target};\n });output({result:'SOURCE_UPDATED',path:target});return;\n }\n if(op==='save'){\n const text=flags.get('--file')?await readTrusted(path.resolve(flags.get('--file')!),false):await readInput();\n const saved=await saveInstanceConfig(instance,text,flags.get('--revision')??'');output({result:'SAVED',revision:saved.revision});return;\n }\n if(op==='patch'){\n const patch=JSON.parse(flags.get('--patch')??await readInput()) as Record<string,unknown>;\n if(patch.accessRole==='trusted'&&(await loadInstanceConfig(instance)).config.accessRole!=='trusted')requireApprovals(parseConfig(JSON.stringify({...((await loadInstanceConfig(instance)).config),...patch})),flags);\n output({result:'SAVED',revision:(await patchInstanceConfig(instance,patch,flags.get('--revision')??'')).revision});return;\n }\n const loaded=await loadInstanceConfig(instance);\n if(op==='validate'){\n if(json)output({result:'VALID',revision:loaded.revision,source:instance.source});\n else process.stdout.write(`✓ Configuration is valid (${instance.source.path})\\n`);\n return;\n }\n if(op==='diff'){\n const active=(await instanceStatus(instance)).active?.config??null;\n const changes=Object.entries(loaded.config).filter(([key,value])=>JSON.stringify(value)!==JSON.stringify(active?.[key as keyof InstanceConfig])).map(([field,value])=>({field,before:active?.[field as keyof InstanceConfig]??null,after:value}));\n if(json)output({instanceId:instance.id,revision:loaded.revision,changes});\n else if(!changes.length)process.stdout.write('No pending configuration changes.\\n');\n else{\n for(const c of changes)process.stdout.write(`${c.field}: ${JSON.stringify(c.before)} -> ${JSON.stringify(c.after)}\\n`);\n }\n return;\n }\n if(op==='apply'){\n const state=await instanceRequest(instance,'apply',flags.get('--revision')??loaded.revision);\n if(json)output({result:state?'APPLIED':'VALID_ON_NEXT_START',instanceId:instance.id,runtime:state});\n else process.stdout.write(state?`Applied configuration to '${instance.name}'.\\n`:`Configuration validated; will take effect on next 'starmux up'.\\n`);\n return;\n }\n if(op==='export'){\n const file=flags.get('--output');const text=configTemplate(loaded.config);\n if(file){await writeFile(path.resolve(file),text,{flag:'wx',mode:0o600});output({result:'EXPORTED',file:path.resolve(file)});}else process.stdout.write(text);return;\n }\n if(op==='edit'){\n const editor=process.env.VISUAL||process.env.EDITOR;if(!editor)throw Error('EDITOR_REQUIRED: set EDITOR to an executable, or use config path');\n const temp=await mkdtemp(path.join(await realpath(tmpdir()),'gateway-edit-'));const file=path.join(temp,'config.jsonc');\n try{await writeFile(file,loaded.text,{mode:0o600});await new Promise<void>((resolve,reject)=>{const child=spawn(editor,[file],{stdio:'inherit'});child.once('error',reject);child.once('exit',code=>code===0?resolve():reject(Error('EDITOR_FAILED')));});\n const text=await readFile(file,'utf8');await saveInstanceConfig(instance,text,loaded.revision);output({result:'SAVED',message:'Use config diff, then config apply.'});\n }finally{await rm(temp,{recursive:true,force:true});}return;\n }\n throw Error('CONFIG_ACTION_INVALID');\n }\n if(command==='logs'){\n const file=path.join(p.logs,'core.log');const lines=Math.min(200,Math.max(1,Number(flags.get('--lines')??60)));\n if(!Number.isSafeInteger(Number(flags.get('--lines')??60))||Number(flags.get('--lines')??60)<1||Number(flags.get('--lines')??60)>200)throw Error('INVALID_LINES: expected 1..200');\n const text=await exists(file)?(await readTrusted(file,true,32*1024*1024)).split('\\n').slice(-lines).join('\\n'):'No logs yet.';\n if(json)output({instanceId:instance.id,output:text});else process.stdout.write(text+'\\n');return;\n }\n if(command==='access'){\n process.env.MAC_MCP_ACCESS_FILE=p.access;\n const clean=args.filter((_,i)=>args[i]!=='--instance'&&args[i-1]!=='--instance'&&args[i]!=='--profile'&&args[i-1]!=='--profile');\n await (await import('./access.js')).accessCommand(clean);\n if(positional[0]==='mode'){const mode=positional[1];if(mode==='ingress'||mode==='api-key'||mode==='oauth')await changeRegistry(async r=>{r.instances.find(i=>i.id===instance.id)!.requiredAccess=mode;});}\n return;\n }\n if(command==='permissions'){\n const grants=await createWorkspaceGrants({file:p.grants});const deny=await createDenyRules({file:p.deny});const op=positional[0]??'status';\n if(op==='token')output({token:await readTrusted(grants.tokenFile)});\n else if(op==='status')output({grants:await grants.snapshot(),denied:await deny.snapshot()});\n else if(['disable-tool','enable-tool','deny-directory','allow-directory'].includes(op))output(await deny.update(op,flags.get('--target')??positional[1]));\n else {output(await grants.update(op,{target:flags.get('--target'),mode:flags.get('--mode')}));}return;\n }\n const loaded=await loadInstanceConfig(instance);\n if(command==='doctor'){\n const {ensureAccessReady}=await import('../instance-store.js');await ensureAccessReady(instance);\n const status=await instanceStatus(instance);\n output({result:'PASS',instanceId:instance.id,source:instance.source,config:loaded.config,configState:status.configState,\n message:'Configuration and access state validated. Run verify after starting to check real tools.'});return;\n }\n if(command==='privacy'){\n const status=await instanceStatus(instance);if(!status.runtime?.port)throw Error('INSTANCE_NOT_RUNNING');\n output(await (await import('../privacy-diagnostics.js')).privacyReport({port:status.runtime.port,home:homedir(),all:flags.has('--all'),target:flags.get('--target')??null}));return;\n }\n if(command==='verify'){\n const state=await instanceRequest(instance,'status');if(state?.phase!=='running'||!state.port)throw Error('INSTANCE_NOT_RUNNING');\n const endpoint=`http://127.0.0.1:${state.port}`;\n const health=await fetch(endpoint+'/healthz',{signal:AbortSignal.timeout(3000)}).then(r=>r.json()) as {instanceId?:string};\n if(health.instanceId!==instance.id)throw Error('INSTANCE_HEALTH_IDENTITY_MISMATCH');\n const request=async(method:string,params:unknown)=>{\n const reply=await fetch(endpoint+'/mcp',{method:'POST',headers:{'content-type':'application/json',accept:'application/json, text/event-stream',...(process.env.MAC_MCP_API_KEY?{authorization:'Bearer '+process.env.MAC_MCP_API_KEY}:{})},body:JSON.stringify({jsonrpc:'2.0',id:1,method,params}),signal:AbortSignal.timeout(15000)});\n if(!reply.ok)throw Error(reply.status===401?'VERIFICATION_CREDENTIAL_REQUIRED: set MAC_MCP_API_KEY':'MCP_VERIFICATION_FAILED');\n const data=await reply.json() as {error?:unknown;result?:{isError?:boolean}};if(data.error||data.result?.isError)throw Error('MCP_VERIFICATION_FAILED');return data.result;\n };\n await request('tools/list',{});await request('tools/call',{name:'list_directory',arguments:{path:'.',depth:0}});\n output({result:'PASS',instanceId:instance.id,port:state.port,remoteClientVerified:false});return;\n }\n}\n"]}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { cliEntry } from "../runtime-paths.js";
|
|
3
|
-
import { errorCode, parseJSON, record } from "../validation.js";
|
|
4
|
-
// Executed only by the owner's installed App after global Core Stop.
|
|
5
|
-
import { execFile } from "node:child_process";
|
|
6
|
-
import { homedir } from "node:os";
|
|
7
|
-
import { promisify } from "node:util";
|
|
8
|
-
import { applyLiveHomeScope } from "../live-profile-home-settings.js";
|
|
9
|
-
const exec = promisify(execFile);
|
|
10
|
-
const home = homedir();
|
|
11
|
-
const cli = cliEntry();
|
|
12
|
-
function emit(value) { process.stdout.write(JSON.stringify(value) + "\n"); }
|
|
13
|
-
async function stopped() {
|
|
14
|
-
try {
|
|
15
|
-
const { stdout } = await exec(process.execPath, [cli, "status", "--profile", "live", "--json"], { timeout: 10000, maxBuffer: 20000, env: { ...process.env, HOME: home } });
|
|
16
|
-
const status = record(parseJSON(stdout));
|
|
17
|
-
return status.profile === "live" && status.health === "not-running" &&
|
|
18
|
-
status.executionMode === "stopped" && status.listenerPid === null &&
|
|
19
|
-
status.coreControl === "unavailable";
|
|
20
|
-
}
|
|
21
|
-
catch {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
try {
|
|
26
|
-
if (process.argv.slice(2).join(" ") !== "--apply --confirm-home-write-scope")
|
|
27
|
-
throw Error("LIVE_APPROVAL_REQUIRED");
|
|
28
|
-
emit(await applyLiveHomeScope({ home, verifyStopped: stopped }));
|
|
29
|
-
}
|
|
30
|
-
catch (e) {
|
|
31
|
-
emit({ event: "LIVE_HOME_SCOPE_FAILED", code: /^[A-Z0-9_]+$/.test(errorCode(e) || "") ?
|
|
32
|
-
errorCode(e) : "LIVE_APPLY_FAILED" });
|
|
33
|
-
process.exitCode = 1;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=live-home-settings.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"live-home-settings.js","sourceRoot":"","sources":["../../../src/cli/live-home-settings.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAC,SAAS,EAAC,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9D,qEAAqE;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,MAAM,IAAI,GAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC/B,MAAM,IAAI,GAAC,OAAO,EAAE,CAAC;AACrB,MAAM,GAAG,GAAC,QAAQ,EAAE,CAAC;AACrB,SAAS,IAAI,CAAC,KAAc,IAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAC,IAAI,CAAC,CAAC,CAAA,CAAC;AAChF,KAAK,UAAU,OAAO;IACpB,IAAG,CAAC;QACF,MAAM,EAAC,MAAM,EAAC,GAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAC,CAAC,GAAG,EAAC,QAAQ,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,CAAC,EACnF,EAAC,OAAO,EAAC,KAAK,EAAC,SAAS,EAAC,KAAK,EAAC,GAAG,EAAC,EAAC,GAAG,OAAO,CAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,CAAC,CAAC;QAClE,MAAM,MAAM,GAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC,OAAO,KAAG,MAAM,IAAE,MAAM,CAAC,MAAM,KAAG,aAAa;YAC3D,MAAM,CAAC,aAAa,KAAG,SAAS,IAAE,MAAM,CAAC,WAAW,KAAG,IAAI;YAC3D,MAAM,CAAC,WAAW,KAAG,aAAa,CAAC;IACvC,CAAC;IAAA,MAAK,CAAC;QAAA,OAAO,KAAK,CAAC;IAAA,CAAC;AACvB,CAAC;AACD,IAAG,CAAC;IACH,IAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAG,oCAAoC;QACvE,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,kBAAkB,CAAC,EAAC,IAAI,EAAC,aAAa,EAAC,OAAO,EAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAAA,OAAM,CAAC,EAAC,CAAC;IACT,IAAI,CAAC,EAAC,KAAK,EAAC,wBAAwB,EAAC,IAAI,EAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAE,EAAE,CAAC,CAAA,CAAC;YAC9E,SAAS,CAAC,CAAC,CAAC,CAAA,CAAC,CAAA,mBAAmB,EAAC,CAAC,CAAC;IACrC,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC;AACpB,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { cliEntry } from \"../runtime-paths.js\";\nimport { errorCode,parseJSON,record } from \"../validation.js\";\n// Executed only by the owner's installed App after global Core Stop.\nimport { execFile } from \"node:child_process\";\nimport { homedir } from \"node:os\";\nimport { promisify } from \"node:util\";\nimport { applyLiveHomeScope } from \"../live-profile-home-settings.js\";\nconst exec=promisify(execFile);\nconst home=homedir();\nconst cli=cliEntry();\nfunction emit(value: unknown){process.stdout.write(JSON.stringify(value)+\"\\n\");}\nasync function stopped(){\n try{\n const {stdout}=await exec(process.execPath,[cli,\"status\",\"--profile\",\"live\",\"--json\"],\n {timeout:10000,maxBuffer:20000,env:{...process.env,HOME:home}});\n const status=record(parseJSON(stdout));\n return status.profile===\"live\"&&status.health===\"not-running\"&&\n status.executionMode===\"stopped\"&&status.listenerPid===null&&\n status.coreControl===\"unavailable\";\n }catch{return false;}\n}\ntry{\n if(process.argv.slice(2).join(\" \")!==\"--apply --confirm-home-write-scope\")\n throw Error(\"LIVE_APPROVAL_REQUIRED\");\n emit(await applyLiveHomeScope({home,verifyStopped:stopped}));\n}catch(e){\n emit({event:\"LIVE_HOME_SCOPE_FAILED\",code:/^[A-Z0-9_]+$/.test(errorCode(e)||\"\")?\n errorCode(e):\"LIVE_APPLY_FAILED\"});\n process.exitCode=1;\n}\n"]}
|
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
import { supportedHost } from "../platform.js";
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
import { legacyCliEntry as cliEntry, packageRoot, desktopCommanderEntry, desktopCommanderPackageJson } from "../runtime-paths.js";
|
|
4
|
-
import { errorCode, errorMessage, isInteger, parseJSON } from "../validation.js";
|
|
5
|
-
const packageSchema = z.object({ version: z.string(), dependencies: z.record(z.string()), devDependencies: z.record(z.string()).optional() });
|
|
6
|
-
// Minimal, portable local Gateway entrypoint. No implicit public network binding.
|
|
7
|
-
import { access, readFile } from "node:fs/promises";
|
|
8
|
-
import path from "node:path";
|
|
9
|
-
const project = packageRoot;
|
|
10
|
-
const pkg = packageSchema.parse(parseJSON(await readFile(path.join(project, "package.json"), "utf8")));
|
|
11
|
-
const command = process.argv[2] || "help";
|
|
12
|
-
function help() {
|
|
13
|
-
process.stdout.write(`Mac MCP Gateway ${pkg.version}
|
|
14
|
-
|
|
15
|
-
Usage:
|
|
16
|
-
mac-mcp-gateway instance create NAME --project /absolute/path
|
|
17
|
-
mac-mcp-gateway instance list [--json]
|
|
18
|
-
mac-mcp-gateway instance import FILE --name NAME [--link]
|
|
19
|
-
mac-mcp-gateway instance copy|rename NAME NEW_NAME
|
|
20
|
-
mac-mcp-gateway instance default|archive|restore NAME
|
|
21
|
-
mac-mcp-gateway instance migrate [setup|live] [--confirm]
|
|
22
|
-
mac-mcp-gateway config path|show|edit|validate|diff|apply --instance NAME
|
|
23
|
-
mac-mcp-gateway run|stop|status|doctor|verify|logs --instance NAME
|
|
24
|
-
mac-mcp-gateway status --all --json
|
|
25
|
-
|
|
26
|
-
mac-mcp-gateway run [--port N] Foreground; Ctrl+C stops; current OS account
|
|
27
|
-
mac-mcp-gateway run --app-parent-pid PID App-owned foreground; stops if GUI parent exits
|
|
28
|
-
mac-mcp-gateway stop Stop the Core at the configured local endpoint
|
|
29
|
-
mac-mcp-gateway status Human-readable health for the configured Core
|
|
30
|
-
mac-mcp-gateway status --json Original structured status for scripts/agents
|
|
31
|
-
mac-mcp-gateway logs [--lines N] Inspect local Gateway logs (owner only)
|
|
32
|
-
mac-mcp-gateway privacy [--all] [--target /absolute/path]
|
|
33
|
-
macOS only: compare terminal and Gateway protected-directory access
|
|
34
|
-
|
|
35
|
-
mac-mcp-gateway access Show access mode and client credentials
|
|
36
|
-
mac-mcp-gateway access create "Name" Create a key (displayed once)
|
|
37
|
-
mac-mcp-gateway access mode api-key Require a key on every MCP request
|
|
38
|
-
mac-mcp-gateway access mode ingress Delegate access control to ingress
|
|
39
|
-
mac-mcp-gateway access revoke ID Revoke one credential immediately
|
|
40
|
-
mac-mcp-gateway access oauth configure --issuer URL --resource URL --client-id ID --subjects SUBJECT
|
|
41
|
-
Discover and save OAuth settings; does not enable auth
|
|
42
|
-
mac-mcp-gateway access oauth doctor Check OAuth discovery and PKCE support
|
|
43
|
-
mac-mcp-gateway access mode oauth Require OAuth on MCP requests
|
|
44
|
-
mac-mcp-gateway access revoke-oauth ID Revoke an OAuth session locally
|
|
45
|
-
mac-mcp-gateway access owner-token Show the local Dashboard management token
|
|
46
|
-
|
|
47
|
-
mac-mcp-gateway setup Configure local access and connection preference
|
|
48
|
-
mac-mcp-gateway doctor Check saved configuration and Desktop Commander
|
|
49
|
-
mac-mcp-gateway verify Verify the running local MCP endpoint
|
|
50
|
-
|
|
51
|
-
--profile auto|live|setup Advanced configuration selection only
|
|
52
|
-
run --json Structured startup identity and lifecycle events
|
|
53
|
-
|
|
54
|
-
Configuration:
|
|
55
|
-
Saved onboarding settings take precedence over legacy installation settings.
|
|
56
|
-
run always starts the Core shipped with this CLI and displays its build identity.
|
|
57
|
-
|
|
58
|
-
Advanced environment-based doctor:
|
|
59
|
-
MAC_MCP_PROJECT_ROOT=/absolute/canonical/project
|
|
60
|
-
|
|
61
|
-
Optional:
|
|
62
|
-
MAC_MCP_WORKSPACE_MODE=read-only|read-write (default read-only)
|
|
63
|
-
MAC_MCP_PROJECT_PORT=8793 (127.0.0.1 only)
|
|
64
|
-
MAC_MCP_DEV_COMMANDS=presets|trusted-project (default presets)
|
|
65
|
-
MAC_MCP_GIT_MODE=off|review|write|push (default off)
|
|
66
|
-
MAC_MCP_WORKTREE_MODE=off|linked (default off)
|
|
67
|
-
|
|
68
|
-
IMPORTANT: trusted-project Shell inherits the current OS account's permissions.
|
|
69
|
-
The Core binds loopback. Configure protected HTTPS or Tunnel for remote access.
|
|
70
|
-
Gateway key authentication is optional; access defaults to managed by ingress.
|
|
71
|
-
`);
|
|
72
|
-
}
|
|
73
|
-
async function doctor() {
|
|
74
|
-
const vendorPkg = await readFile(desktopCommanderPackageJson, "utf8").then(t => z.object({ version: z.string() }).parse(parseJSON(t))).catch(() => null);
|
|
75
|
-
const facts = { event: "GATEWAY_DOCTOR", node: process.version, platform: process.platform,
|
|
76
|
-
workspaceConfigured: Boolean(process.env.MAC_MCP_PROJECT_ROOT),
|
|
77
|
-
mode: process.env.MAC_MCP_WORKSPACE_MODE || "read-only",
|
|
78
|
-
devCommands: process.env.MAC_MCP_DEV_COMMANDS || "presets",
|
|
79
|
-
upstreamVersion: vendorPkg?.version || pkg.dependencies?.["@wonderwhy-er/desktop-commander"] || pkg.devDependencies?.["@wonderwhy-er/desktop-commander"] || null };
|
|
80
|
-
let code = 0;
|
|
81
|
-
try {
|
|
82
|
-
const { createProjectPolicy } = await import("../project-workspace-policy.js");
|
|
83
|
-
const { LocalDesktopReadProbe } = await import("../local-desktop-read-probe.js");
|
|
84
|
-
supportedHost();
|
|
85
|
-
if (!facts.workspaceConfigured)
|
|
86
|
-
throw Error("MAC_MCP_PROJECT_ROOT_REQUIRED");
|
|
87
|
-
const nativeAccessMode = process.env.MAC_MCP_DC_ACCESS_MODE || "workspace";
|
|
88
|
-
if (!["workspace", "native"].includes(nativeAccessMode) ||
|
|
89
|
-
(nativeAccessMode === "native" &&
|
|
90
|
-
(facts.devCommands !== "trusted-project" || facts.mode !== "read-write")))
|
|
91
|
-
throw Error("NATIVE_ACCESS_REQUIRES_OWNER_TRUSTED_DEVELOPER_PROFILE");
|
|
92
|
-
const policy = await createProjectPolicy({
|
|
93
|
-
root: process.env.MAC_MCP_PROJECT_ROOT,
|
|
94
|
-
mode: facts.mode, developerCommands: facts.devCommands,
|
|
95
|
-
allowTrustedHomeRoot: nativeAccessMode === "native" && facts.devCommands === "trusted-project"
|
|
96
|
-
});
|
|
97
|
-
facts.workspaceValidated = true;
|
|
98
|
-
facts.workspaceMode = policy.mode;
|
|
99
|
-
const desiredPort = Number(process.env.MAC_MCP_PROJECT_PORT || 8793);
|
|
100
|
-
if (!isInteger(desiredPort) || desiredPort < 0 || desiredPort > 65535)
|
|
101
|
-
throw Error("INVALID_PROJECT_PORT");
|
|
102
|
-
const gitMode = process.env.MAC_MCP_GIT_MODE || "off";
|
|
103
|
-
if (!["off", "review", "write", "push"].includes(gitMode))
|
|
104
|
-
throw Error("INVALID_GIT_MODE");
|
|
105
|
-
facts.gitMode = gitMode;
|
|
106
|
-
const worktreeMode = process.env.MAC_MCP_WORKTREE_MODE || "off";
|
|
107
|
-
if (!["off", "linked"].includes(worktreeMode))
|
|
108
|
-
throw Error("INVALID_WORKTREE_MODE");
|
|
109
|
-
facts.worktreeMode = worktreeMode;
|
|
110
|
-
await access(desktopCommanderEntry);
|
|
111
|
-
const dc = new LocalDesktopReadProbe({
|
|
112
|
-
writeScope: process.env.MAC_MCP_DC_WRITE_SCOPE || "unrestricted"
|
|
113
|
-
});
|
|
114
|
-
try {
|
|
115
|
-
await dc.connect();
|
|
116
|
-
facts.desktopCommanderTools = dc.upstreamCatalog.length;
|
|
117
|
-
if (!dc.upstreamCatalog.some(t => t.name === "start_process"))
|
|
118
|
-
throw Error("DESKTOP_COMMANDER_START_PROCESS_MISSING");
|
|
119
|
-
facts.result = "PASS";
|
|
120
|
-
}
|
|
121
|
-
finally {
|
|
122
|
-
await dc.close().catch(() => { });
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
facts.result = "FAIL";
|
|
127
|
-
facts.reason = String(errorCode(error) || errorMessage(error) || "UNKNOWN").slice(0, 100);
|
|
128
|
-
code = 1;
|
|
129
|
-
}
|
|
130
|
-
// Never include access tokens, project paths, command arguments or private filenames.
|
|
131
|
-
process.stdout.write(JSON.stringify(facts) + "\n");
|
|
132
|
-
process.exitCode = code;
|
|
133
|
-
}
|
|
134
|
-
if (await (await import("./instances.js")).maybeHandleInstances(process.argv.slice(2))) {
|
|
135
|
-
// Shared named-instance commands own their complete lifecycle.
|
|
136
|
-
}
|
|
137
|
-
else if (command === "setup") {
|
|
138
|
-
process.argv.splice(2, 1);
|
|
139
|
-
await import("./setup-wizard.js");
|
|
140
|
-
}
|
|
141
|
-
else if (command === "access") {
|
|
142
|
-
try {
|
|
143
|
-
await (await import("./access.js")).accessCommand(process.argv.slice(3));
|
|
144
|
-
}
|
|
145
|
-
catch (error) {
|
|
146
|
-
process.stderr.write("GATEWAY_ACCESS_ERROR " + errorMessage(error) + "\n");
|
|
147
|
-
process.exitCode = 1;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
else if (command === "verify") {
|
|
151
|
-
await import("./verify-setup.js");
|
|
152
|
-
}
|
|
153
|
-
else if (command === "help" || command === "--help" || command === "-h") {
|
|
154
|
-
help();
|
|
155
|
-
}
|
|
156
|
-
else if (command === "doctor") {
|
|
157
|
-
if (process.env.MAC_MCP_PROJECT_ROOT)
|
|
158
|
-
await doctor();
|
|
159
|
-
else {
|
|
160
|
-
try {
|
|
161
|
-
const { loadSetupConfig, setupRuntimeEnv } = await import("../release1-onboarding.js");
|
|
162
|
-
Object.assign(process.env, setupRuntimeEnv(await loadSetupConfig()));
|
|
163
|
-
await doctor();
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
if (errorCode(error) === "ENOENT")
|
|
167
|
-
await doctor();
|
|
168
|
-
else
|
|
169
|
-
process.stdout.write(JSON.stringify({ event: "GATEWAY_DOCTOR", result: "FAIL",
|
|
170
|
-
reason: errorCode(error) || errorMessage(error) }) + "\n");
|
|
171
|
-
process.stderr.write("Run mac-mcp-gateway setup to configure local access.\n");
|
|
172
|
-
process.exitCode = 1;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
else if (["run", "install", "start", "stop", "restart", "status", "logs", "privacy"].includes(command)) {
|
|
177
|
-
try {
|
|
178
|
-
const { parseArgs, operatorCommand } = await import("../operator-cli.js");
|
|
179
|
-
const { options } = parseArgs(process.argv.slice(2));
|
|
180
|
-
const result = await operatorCommand(command, {
|
|
181
|
-
...options, entry: cliEntry()
|
|
182
|
-
});
|
|
183
|
-
if (result.event === "GATEWAY_LOGS")
|
|
184
|
-
process.stdout.write(result.output);
|
|
185
|
-
else if (result.event === "GATEWAY_RUN_EXIT" && !options.json && options.appParentPid === undefined)
|
|
186
|
-
process.stdout.write(result.code === 0 ? " Gateway stopped.\n" : ` Gateway exited with code ${result.code}.\n`);
|
|
187
|
-
else if (result.event === "GATEWAY_STATUS" && !options.json) {
|
|
188
|
-
const { formatGatewayStatus } = await import("../gateway-status-format.js");
|
|
189
|
-
process.stdout.write(formatGatewayStatus(result, {
|
|
190
|
-
version: pkg.version, color: Boolean(process.stdout.isTTY) && !process.env.NO_COLOR
|
|
191
|
-
}));
|
|
192
|
-
}
|
|
193
|
-
else
|
|
194
|
-
process.stdout.write(JSON.stringify(result) + "\n");
|
|
195
|
-
if (result.event === "GATEWAY_RUN_EXIT")
|
|
196
|
-
process.exitCode = result.code;
|
|
197
|
-
}
|
|
198
|
-
catch (error) {
|
|
199
|
-
process.stderr.write("GATEWAY_CLI_ERROR " +
|
|
200
|
-
String(errorCode(error) || errorMessage(error) || "UNKNOWN").slice(0, 240) + "\n");
|
|
201
|
-
process.exitCode = 1;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
else if (command === "start-raw") {
|
|
205
|
-
// Legacy direct entry bypassed global one-Core arbitration. Never allow
|
|
206
|
-
// a public subprocess to start a second ungoverned production Core.
|
|
207
|
-
process.stderr.write("LEGACY_DIRECT_BOOTSTRAP_DISABLED_USE_SETUP\n");
|
|
208
|
-
process.exitCode = 2;
|
|
209
|
-
}
|
|
210
|
-
else if (command === "doctor-setup" || command === "start-setup") {
|
|
211
|
-
try {
|
|
212
|
-
const { loadSetupConfig, setupRuntimeEnv } = await import("../release1-onboarding.js");
|
|
213
|
-
if (command === "start-setup") {
|
|
214
|
-
const ownerPid = Number(process.env.MAC_MCP_INTERNAL_SETUP_OWNER_PID);
|
|
215
|
-
const runId = process.env.MAC_MCP_INTERNAL_SETUP_RUN_ID;
|
|
216
|
-
const token = process.env.MAC_MCP_INTERNAL_SETUP_TOKEN;
|
|
217
|
-
const internallyLaunched = Boolean(ownerPid && runId && token);
|
|
218
|
-
if (!internallyLaunched) {
|
|
219
|
-
// Legacy user command is now an alias for supervised CLI Run.
|
|
220
|
-
const { operatorCommand } = await import("../operator-cli.js");
|
|
221
|
-
const result = await operatorCommand("run", {
|
|
222
|
-
profile: "setup", entry: cliEntry()
|
|
223
|
-
});
|
|
224
|
-
process.stdout.write(JSON.stringify(result) + "\n");
|
|
225
|
-
if (result.event === "GATEWAY_RUN_EXIT")
|
|
226
|
-
process.exitCode = result.code;
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
const { verifyInternalSetupWorker } = await import("../global-core-control.js");
|
|
230
|
-
const config = await loadSetupConfig(process.env.MAC_MCP_SETUP_FILE);
|
|
231
|
-
verifyInternalSetupWorker({
|
|
232
|
-
port: config.port, ownerPid, runId, token
|
|
233
|
-
});
|
|
234
|
-
Object.assign(process.env, setupRuntimeEnv(config));
|
|
235
|
-
delete process.env.MAC_MCP_UPSTREAMS_FILE;
|
|
236
|
-
const { runGateway } = await import("../dc-workspace-http.js");
|
|
237
|
-
await runGateway();
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
const config = await loadSetupConfig(process.env.MAC_MCP_SETUP_FILE);
|
|
242
|
-
Object.assign(process.env, setupRuntimeEnv(config));
|
|
243
|
-
delete process.env.MAC_MCP_UPSTREAMS_FILE;
|
|
244
|
-
await doctor();
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
catch (error) {
|
|
248
|
-
process.stderr.write("SETUP_PROFILE_INVALID " +
|
|
249
|
-
String(errorCode(error) || errorMessage(error) || "UNKNOWN").slice(0, 90) + "\n");
|
|
250
|
-
process.exitCode = 1;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
process.stderr.write("Unknown command. Use --help.\n");
|
|
255
|
-
process.exitCode = 2;
|
|
256
|
-
}
|
|
257
|
-
//# sourceMappingURL=mac-mcp-gateway.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mac-mcp-gateway.js","sourceRoot":"","sources":["../../../src/cli/mac-mcp-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAC,WAAW,EAAC,qBAAqB,EAAC,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAC/H,OAAO,EAAE,SAAS,EAAC,YAAY,EAAC,SAAS,EAAC,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9E,MAAM,aAAa,GAAC,CAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC,MAAM,EAAE,EAAC,YAAY,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAC,eAAe,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC;AACrI,kFAAkF;AAClF,OAAO,EAAE,MAAM,EAAC,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,OAAO,GAAC,WAAW,CAAC;AAC1B,MAAM,GAAG,GAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAC,cAAc,CAAC,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACnG,MAAM,OAAO,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAE,MAAM,CAAC;AAEtC,SAAS,IAAI;IACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DpD,CAAC,CAAC;AACH,CAAC;AACD,KAAK,UAAU,MAAM;IACnB,MAAM,SAAS,GAAC,MAAM,QAAQ,CAAC,2BAA2B,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC,MAAM,EAAE,EAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAE,EAAE,CAAA,IAAI,CAAC,CAAC;IAC/I,MAAM,KAAK,GAAuR,EAAC,KAAK,EAAC,gBAAgB,EAAC,IAAI,EAAC,OAAO,CAAC,OAAO,EAAC,QAAQ,EAAC,OAAO,CAAC,QAAQ;QACtW,mBAAmB,EAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC7D,IAAI,EAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAE,WAAW;QACpD,WAAW,EAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAE,SAAS;QACvD,eAAe,EAAC,SAAS,EAAE,OAAO,IAAE,GAAG,CAAC,YAAY,EAAE,CAAC,iCAAiC,CAAC,IAAE,GAAG,CAAC,eAAe,EAAE,CAAC,iCAAiC,CAAC,IAAE,IAAI,EAAC,CAAC;IAC7J,IAAI,IAAI,GAAC,CAAC,CAAC;IACX,IAAG,CAAC;QACF,MAAM,EAAC,mBAAmB,EAAC,GAAC,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QAC3E,MAAM,EAAC,qBAAqB,EAAC,GAAC,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QAC7E,aAAa,EAAE,CAAC;QAChB,IAAG,CAAC,KAAK,CAAC,mBAAmB;YAAC,MAAM,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC3E,MAAM,gBAAgB,GAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAE,WAAW,CAAC;QACvE,IAAG,CAAC,CAAC,WAAW,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAClD,CAAC,gBAAgB,KAAG,QAAQ;gBAC3B,CAAC,KAAK,CAAC,WAAW,KAAG,iBAAiB,IAAE,KAAK,CAAC,IAAI,KAAG,YAAY,CAAC,CAAC;YACrE,MAAM,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxE,MAAM,MAAM,GAAC,MAAM,mBAAmB,CAAC;YACrC,IAAI,EAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB;YACrC,IAAI,EAAC,KAAK,CAAC,IAAI,EAAC,iBAAiB,EAAC,KAAK,CAAC,WAAW;YACnD,oBAAoB,EAAC,gBAAgB,KAAG,QAAQ,IAAE,KAAK,CAAC,WAAW,KAAG,iBAAiB;SACxF,CAAC,CAAC;QACH,KAAK,CAAC,kBAAkB,GAAC,IAAI,CAAC;QAC9B,KAAK,CAAC,aAAa,GAAC,MAAM,CAAC,IAAI,CAAC;QAChC,MAAM,WAAW,GAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAE,IAAI,CAAC,CAAC;QACjE,IAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAE,WAAW,GAAC,CAAC,IAAE,WAAW,GAAC,KAAK;YAC1D,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACtC,MAAM,OAAO,GAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAE,KAAK,CAAC;QAClD,IAAG,CAAC,CAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAC,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtF,KAAK,CAAC,OAAO,GAAC,OAAO,CAAC;QACtB,MAAM,YAAY,GAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAE,KAAK,CAAC;QAC5D,IAAG,CAAC,CAAC,KAAK,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAC,MAAM,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACjF,KAAK,CAAC,YAAY,GAAC,YAAY,CAAC;QAChC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACpC,MAAM,EAAE,GAAC,IAAI,qBAAqB,CAAC;YACjC,UAAU,EAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAE,cAAc;SAC9D,CAAC,CAAC;QACH,IAAG,CAAC;YACF,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,CAAC,qBAAqB,GAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;YACtD,IAAG,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,IAAI,KAAG,eAAe,CAAC;gBACtD,MAAM,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACzD,KAAK,CAAC,MAAM,GAAC,MAAM,CAAC;QACtB,CAAC;gBAAO,CAAC;YAAA,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAE,EAAE,GAAC,CAAC,CAAC,CAAC;QAAA,CAAC;IAC3C,CAAC;IAAA,OAAM,KAAK,EAAC,CAAC;QACZ,KAAK,CAAC,MAAM,GAAC,MAAM,CAAC;QACpB,KAAK,CAAC,MAAM,GAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAE,YAAY,CAAC,KAAK,CAAC,IAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC;QACnF,IAAI,GAAC,CAAC,CAAC;IACT,CAAC;IACD,sFAAsF;IACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAC,IAAI,CAAC,CAAC;IACjD,OAAO,CAAC,QAAQ,GAAC,IAAI,CAAC;AACxB,CAAC;AACD,IAAG,MAAM,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC;IACrF,+DAA+D;AACjE,CAAC;KAAK,IAAG,OAAO,KAAG,OAAO,EAAC,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;IACzB,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACpC,CAAC;KAAK,IAAG,OAAO,KAAG,QAAQ,EAAC,CAAC;IAC3B,IAAG,CAAC;QAAA,MAAM,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAAA,CAAC;IAC9E,OAAM,KAAK,EAAC,CAAC;QAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,GAAC,YAAY,CAAC,KAAK,CAAC,GAAC,IAAI,CAAC,CAAC;QAAA,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC;IAAA,CAAC;AAC1G,CAAC;KAAK,IAAG,OAAO,KAAG,QAAQ,EAAC,CAAC;IAC3B,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACpC,CAAC;KAAK,IAAG,OAAO,KAAG,MAAM,IAAE,OAAO,KAAG,QAAQ,IAAE,OAAO,KAAG,IAAI,EAAC,CAAC;IAC7D,IAAI,EAAE,CAAC;AACT,CAAC;KAAK,IAAG,OAAO,KAAG,QAAQ,EAAC,CAAC;IAC3B,IAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAAC,MAAM,MAAM,EAAE,CAAC;SAC/C,CAAC;QACH,IAAG,CAAC;YACF,MAAM,EAAC,eAAe,EAAC,eAAe,EAAC,GAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAClF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAC,eAAe,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC,CAAC;YACpE,MAAM,MAAM,EAAE,CAAC;QACjB,CAAC;QAAA,OAAM,KAAK,EAAC,CAAC;YACZ,IAAG,SAAS,CAAC,KAAK,CAAC,KAAG,QAAQ;gBAAC,MAAM,MAAM,EAAE,CAAC;;gBACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,KAAK,EAAC,gBAAgB,EAAC,MAAM,EAAC,MAAM;oBAC5E,MAAM,EAAC,SAAS,CAAC,KAAK,CAAC,IAAE,YAAY,CAAC,KAAK,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,CAAC;YACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC/E,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;AACF,CAAC;KAAK,IAAG,CAAC,KAAK,EAAC,SAAS,EAAC,OAAO,EAAC,MAAM,EAAC,SAAS,EAAC,QAAQ,EAAC,MAAM,EAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAC,CAAC;IAChG,IAAG,CAAC;QACF,MAAM,EAAC,SAAS,EAAC,eAAe,EAAC,GAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrE,MAAM,EAAC,OAAO,EAAC,GAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,MAAM,GAAC,MAAM,eAAe,CAAC,OAAO,EAAC;YACzC,GAAG,OAAO,EAAC,KAAK,EAAC,QAAQ,EAAE;SAC5B,CAAC,CAAC;QACH,IAAG,MAAM,CAAC,KAAK,KAAG,cAAc;YAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aAChE,IAAG,MAAM,CAAC,KAAK,KAAG,kBAAkB,IAAE,CAAC,OAAO,CAAC,IAAI,IAAE,OAAO,CAAC,YAAY,KAAG,SAAS;YACxF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAG,CAAC,CAAA,CAAC,CAAA,sBAAsB,CAAA,CAAC,CAAA,8BAA8B,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC;aACzG,IAAG,MAAM,CAAC,KAAK,KAAG,gBAAgB,IAAE,CAAC,OAAO,CAAC,IAAI,EAAC,CAAC;YACtD,MAAM,EAAC,mBAAmB,EAAC,GAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAC;gBAC9C,OAAO,EAAC,GAAG,CAAC,OAAO,EAAC,KAAK,EAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ;aAC/E,CAAC,CAAC,CAAC;QACN,CAAC;;YAAK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAC,IAAI,CAAC,CAAC;QACxD,IAAG,MAAM,CAAC,KAAK,KAAG,kBAAkB;YAAC,OAAO,CAAC,QAAQ,GAAC,MAAM,CAAC,IAAI,CAAC;IACpE,CAAC;IAAA,OAAM,KAAK,EAAC,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB;YACvC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAE,YAAY,CAAC,KAAK,CAAC,IAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,GAAG,CAAC,GAAC,IAAI,CAAC,CAAC;QAC9E,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;KAAK,IAAG,OAAO,KAAG,WAAW,EAAC,CAAC;IAC9B,wEAAwE;IACxE,oEAAoE;IACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACrE,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC;AACrB,CAAC;KAAK,IAAG,OAAO,KAAG,cAAc,IAAE,OAAO,KAAG,aAAa,EAAC,CAAC;IAC1D,IAAG,CAAC;QACF,MAAM,EAAC,eAAe,EAAC,eAAe,EAAC,GAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAClF,IAAG,OAAO,KAAG,aAAa,EAAC,CAAC;YAC1B,MAAM,QAAQ,GAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YACpE,MAAM,KAAK,GAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;YACtD,MAAM,KAAK,GAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;YACrD,MAAM,kBAAkB,GAAC,OAAO,CAAC,QAAQ,IAAE,KAAK,IAAE,KAAK,CAAC,CAAC;YACzD,IAAG,CAAC,kBAAkB,EAAC,CAAC;gBACtB,8DAA8D;gBAC9D,MAAM,EAAC,eAAe,EAAC,GAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBAC3D,MAAM,MAAM,GAAC,MAAM,eAAe,CAAC,KAAK,EAAC;oBACvC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,QAAQ,EAAE;iBACjC,CAAC,CAAC;gBACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAC,IAAI,CAAC,CAAC;gBAClD,IAAG,MAAM,CAAC,KAAK,KAAG,kBAAkB;oBAAC,OAAO,CAAC,QAAQ,GAAC,MAAM,CAAC,IAAI,CAAC;YACpE,CAAC;iBAAI,CAAC;gBACJ,MAAM,EAAC,yBAAyB,EAAC,GAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;gBAC5E,MAAM,MAAM,GAAC,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBACnE,yBAAyB,CAAC;oBACxB,IAAI,EAAC,MAAM,CAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,KAAK;iBACtC,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnD,OAAO,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;gBAC1C,MAAM,EAAC,UAAU,EAAC,GAAC,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;gBAC3D,MAAM,UAAU,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;aAAI,CAAC;YACJ,MAAM,MAAM,GAAC,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YACnD,OAAO,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;YAC1C,MAAM,MAAM,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAAA,OAAM,KAAK,EAAC,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB;YAC3C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAE,YAAY,CAAC,KAAK,CAAC,IAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,GAAC,IAAI,CAAC,CAAC;QAC7E,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;KAAI,CAAC;IACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACvD,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC;AACrB,CAAC","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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/cli/oauth.ts"],"names":[],"mappings":"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","sourcesContent":["import {createAccessControl} from '../access-control.js';\nimport {discoverOAuth,metadataUrl,validateOAuthConfig} from '../oauth-resource.js';\nimport {keycloakRealm} from '../oauth-keycloak.js';\nexport async function oauthCommand(args:string[]){\n const action=args.shift()||'status';const json=args.includes('--json');args=args.filter(a=>a!=='--json');\n const options=new Map<string,string>();\n for(let i=0;i<args.length;i++){\n const name=args[i]!;\n if(name==='--allow-loopback-http'){options.set(name,'true');continue;}\n if(!['--issuer','--resource','--resource-aliases','--client-id','--subjects','--registration','--token-auth','--callback'].includes(name)||!args[i+1]||options.has(name))throw Error('OAUTH_ARGUMENT_INVALID');\n options.set(name,args[++i]!);\n }\n if(action==='keycloak-realm'){\n const realm=keycloakRealm(options.get('--resource')||'',options.get('--callback')||'',options.get('--allow-loopback-http')==='true');\n process.stdout.write(JSON.stringify(realm,null,2)+'\\n');return;\n }\n const access=await createAccessControl();\n if(action==='configure'){\n const registration=options.get('--registration')||'provided';\n const method=options.get('--token-auth')||'none';\n if(!['provided','cimd','dcr'].includes(registration)||!['none','client_secret_basic','client_secret_post','private_key_jwt'].includes(method))throw Error('OAUTH_CLIENT_METHOD_INVALID');\n const config=await discoverOAuth({issuer:options.get('--issuer')||'',resource:options.get('--resource')||'',\n clientId:options.get('--client-id')||'',allowedSubjects:(options.get('--subjects')||'').split(',').filter(Boolean),\n clientRegistration:registration as 'provided'|'cimd'|'dcr',tokenEndpointAuthMethod:method as 'none'|'client_secret_basic'|'client_secret_post'|'private_key_jwt',\n allowLoopbackHttp:options.get('--allow-loopback-http')==='true'});\n await access.configureOAuth(validateOAuthConfig({...config,...(options.has('--resource-aliases')?\n {resourceAliases:options.get('--resource-aliases')!.split(',')}: {})}));\n }else if(action==='doctor'){\n const config=(await access.snapshot()).oauth;if(!config)throw Error('OAUTH_CONFIGURATION_REQUIRED');\n const fresh=await discoverOAuth({issuer:config.issuer,resource:config.resource,clientId:config.clientId,\n allowedSubjects:config.allowedSubjects,clientRegistration:config.clientRegistration,\n tokenEndpointAuthMethod:config.tokenEndpointAuthMethod,allowLoopbackHttp:config.allowLoopbackHttp});\n // Resource aliases are owner configuration, not authorization-server metadata.\n const {resourceAliases: _aliases,...discoveredConfig}=config;\n if(JSON.stringify(fresh)!==JSON.stringify(discoveredConfig))throw Error('OAUTH_METADATA_CHANGED_RECONFIGURE');\n process.stdout.write(JSON.stringify({event:'OAUTH_DOCTOR',result:'PASS',issuer:config.issuer,\n scope:config.scope,pkce:'S256',remoteClientVerified:false,note:'Discovery verified; actual login, refresh and remote reachability require end-to-end testing.'})+'\\n');return;\n }else if(action!=='status')throw Error('Usage: access oauth configure|status|doctor|keycloak-realm');\n const state=await access.snapshot();\n if(json){process.stdout.write(JSON.stringify(state)+'\\n');return;}\n const c=state.oauth;\n process.stdout.write('\\n Gateway OAuth\\n ────────────────────────────────────────────────\\n');\n if(!c){process.stdout.write(' Not configured.\\n\\n');return;}\n if(c.resourceAliases?.length)process.stdout.write(` Resource aliases: ${c.resourceAliases.join(', ')}\\n`);\n process.stdout.write(` Mode ${state.mode}\\n Issuer ${c.issuer}\\n Resource ${c.resource}\\n Discovery ${metadataUrl(c)}\\n Registration ${c.clientRegistration}\\n Client ID ${c.clientId}\\n Token auth ${c.tokenEndpointAuthMethod}\\n Scope ${c.scope}\\n Permission Owner default\\n Transport ${c.allowLoopbackHttp?'Development: loopback HTTP allowed':'HTTPS required'}\\n\\n`);\n for(const connection of state.oauthConnections)process.stdout.write(` ${connection.revokedAt?'Revoked':'Active'} · ${connection.clientId}\\n ID: ${connection.id}\\n Last used: ${connection.lastUsedAt}\\n`);\n if(action==='configure')process.stdout.write(' Configuration saved. Enable explicitly: starmux auth mode oauth\\n');\n process.stdout.write(' Remote ChatGPT authorization is not verified by this command.\\n\\n');\n}\n"]}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { errorCode, errorMessage } from "../validation.js";
|
|
3
|
-
// Run on the owner's Mac terminal only. Never send this token to an MCP client.
|
|
4
|
-
import { readFile } from "node:fs/promises";
|
|
5
|
-
import { createWorkspaceGrants, defaultGrantsPath } from "../workspace-grants.js";
|
|
6
|
-
try {
|
|
7
|
-
const store = await createWorkspaceGrants({
|
|
8
|
-
file: process.env.MAC_MCP_GRANTS_FILE || defaultGrantsPath()
|
|
9
|
-
});
|
|
10
|
-
if (process.argv[2] === "token") {
|
|
11
|
-
const token = (await readFile(store.tokenFile, "utf8")).trim();
|
|
12
|
-
process.stdout.write("Owner-only Dashboard key (do not send to AI): " + token + "\n");
|
|
13
|
-
}
|
|
14
|
-
else if (process.argv[2] === "status") {
|
|
15
|
-
const { homeRead, outsideRead, custom } = await store.snapshot();
|
|
16
|
-
process.stdout.write(JSON.stringify({ homeRead, outsideRead, custom }) + "\n");
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
process.stdout.write("Usage: node bin/permissions-owner.mjs token|status\n");
|
|
20
|
-
process.exitCode = 2;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
catch (e) {
|
|
24
|
-
process.stderr.write("PERMISSIONS_FAILED " + String(errorCode(e) || errorMessage(e)).slice(0, 90) + "\n");
|
|
25
|
-
process.exitCode = 1;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=permissions-owner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"permissions-owner.js","sourceRoot":"","sources":["../../../src/cli/permissions-owner.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAC,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC1D,gFAAgF;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAC,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjF,IAAG,CAAC;IACF,MAAM,KAAK,GAAC,MAAM,qBAAqB,CAAC;QACtC,IAAI,EAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAE,iBAAiB,EAAE;KAC1D,CAAC,CAAC;IACH,IAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,EAAC,CAAC;QAC5B,MAAM,KAAK,GAAC,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,GAAC,KAAK,GAAC,IAAI,CAAC,CAAC;IACpF,CAAC;SAAK,IAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAG,QAAQ,EAAC,CAAC;QACnC,MAAM,EAAC,QAAQ,EAAC,WAAW,EAAC,MAAM,EAAC,GAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,QAAQ,EAAC,WAAW,EAAC,MAAM,EAAC,CAAC,GAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;SAAI,CAAC;QACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC7E,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAAA,OAAM,CAAC,EAAC,CAAC;IACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,GAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,GAAC,IAAI,CAAC,CAAC;IACnG,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC;AACrB,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { errorCode,errorMessage } from \"../validation.js\";\n// Run on the owner's Mac terminal only. Never send this token to an MCP client.\nimport { readFile } from \"node:fs/promises\";\nimport { createWorkspaceGrants,defaultGrantsPath } from \"../workspace-grants.js\";\ntry{\n const store=await createWorkspaceGrants({\n file:process.env.MAC_MCP_GRANTS_FILE||defaultGrantsPath()\n });\n if(process.argv[2]===\"token\"){\n const token=(await readFile(store.tokenFile,\"utf8\")).trim();\n process.stdout.write(\"Owner-only Dashboard key (do not send to AI): \"+token+\"\\n\");\n }else if(process.argv[2]===\"status\"){\n const {homeRead,outsideRead,custom}=await store.snapshot();\n process.stdout.write(JSON.stringify({homeRead,outsideRead,custom})+\"\\n\");\n }else{\n process.stdout.write(\"Usage: node bin/permissions-owner.mjs token|status\\n\");\n process.exitCode=2;\n }\n}catch(e){\n process.stderr.write(\"PERMISSIONS_FAILED \"+String(errorCode(e)||errorMessage(e)).slice(0,90)+\"\\n\");\n process.exitCode=1;\n}\n"]}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { serviceCommand } from "../release1-service.js";
|
|
3
|
-
import { cliEntry } from "../runtime-paths.js";
|
|
4
|
-
import { errorCode, errorMessage } from "../validation.js";
|
|
5
|
-
const action = process.argv[2] || "help";
|
|
6
|
-
const allowed = ["plan", "install", "start", "stop", "status", "uninstall"];
|
|
7
|
-
if (!allowed.includes(action)) {
|
|
8
|
-
process.stdout.write("Usage: service-setup.mjs " + allowed.join("|") + "\n");
|
|
9
|
-
if (action !== "help")
|
|
10
|
-
process.exitCode = 2;
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
try {
|
|
14
|
-
const result = await serviceCommand(action, {
|
|
15
|
-
entry: cliEntry(),
|
|
16
|
-
configFile: process.env.MAC_MCP_SETUP_FILE
|
|
17
|
-
});
|
|
18
|
-
process.stdout.write(JSON.stringify({ event: "RELEASE1_SERVICE", ...result }) + "\n");
|
|
19
|
-
}
|
|
20
|
-
catch (e) {
|
|
21
|
-
process.stderr.write("SERVICE_FAILED " +
|
|
22
|
-
String(errorCode(e) || errorMessage(e) || "UNKNOWN").slice(0, 80) + "\n");
|
|
23
|
-
process.exitCode = 1;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=service-setup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service-setup.js","sourceRoot":"","sources":["../../../src/cli/service-setup.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAC,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC1D,MAAM,MAAM,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAE,MAAM,CAAC;AACrC,MAAM,OAAO,GAAC,CAAC,MAAM,EAAC,SAAS,EAAC,OAAO,EAAC,MAAM,EAAC,QAAQ,EAAC,WAAW,CAAC,CAAC;AACrE,IAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAC,CAAC;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,GAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAC,IAAI,CAAC,CAAC;IACzE,IAAG,MAAM,KAAG,MAAM;QAAC,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC;AACxC,CAAC;KAAI,CAAC;IACJ,IAAG,CAAC;QACF,MAAM,MAAM,GAAC,MAAM,cAAc,CAAC,MAAM,EAAC;YACvC,KAAK,EAAC,QAAQ,EAAE;YAChB,UAAU,EAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB;SAC1C,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,KAAK,EAAC,kBAAkB,EAAC,GAAG,MAAM,EAAC,CAAC,GAAC,IAAI,CAAC,CAAC;IAClF,CAAC;IAAA,OAAM,CAAC,EAAC,CAAC;QACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB;YACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAE,YAAY,CAAC,CAAC,CAAC,IAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,GAAC,IAAI,CAAC,CAAC;QACrE,OAAO,CAAC,QAAQ,GAAC,CAAC,CAAC;IACrB,CAAC;AACH,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { serviceCommand } from \"../release1-service.js\";\nimport { cliEntry } from \"../runtime-paths.js\";\nimport { errorCode,errorMessage } from \"../validation.js\";\nconst action=process.argv[2]||\"help\";\nconst allowed=[\"plan\",\"install\",\"start\",\"stop\",\"status\",\"uninstall\"];\nif(!allowed.includes(action)){\n process.stdout.write(\"Usage: service-setup.mjs \"+allowed.join(\"|\")+\"\\n\");\n if(action!==\"help\")process.exitCode=2;\n}else{\n try{\n const result=await serviceCommand(action,{\n entry:cliEntry(),\n configFile:process.env.MAC_MCP_SETUP_FILE\n });\n process.stdout.write(JSON.stringify({event:\"RELEASE1_SERVICE\",...result})+\"\\n\");\n }catch(e){\n process.stderr.write(\"SERVICE_FAILED \"+\n String(errorCode(e)||errorMessage(e)||\"UNKNOWN\").slice(0,80)+\"\\n\");\n process.exitCode=1;\n }\n}\n"]}
|