{"_id":"@autenai/sdk","_rev":"31-a16631767ebfa793e0513c93aae499f7","name":"@autenai/sdk","dist-tags":{"latest":"1.0.5"},"versions":{"0.1.0":{"name":"@autenai/sdk","version":"0.1.0","keywords":["auten","ai","oauth","integrations","agents","automation"],"license":"MIT","_id":"@autenai/sdk@0.1.0","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"dist":{"shasum":"ddf58a4206d92eb71fdada39c6e4dc24cbbeb15f","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.1.0.tgz","fileCount":5,"integrity":"sha512-ns8H+/zWSNcap61bTFSEobQ8JH32z9uh3Nf9FA876jgrQRJt317nfQZtA1OIs+VWHpuwhxKm85qk8ZfgfhlSxg==","signatures":[{"sig":"MEQCIF3nxWCjxbWf8buHZ5vdC30BUpsv9+w4gLrnwv3HgDOBAiA/o5DDVlF4SrywYC7lEYuWfjDDJyRrNPcAvCNaOndmWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34199},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","build":"tsup src/index.ts --format cjs,esm --dts --clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.2","description":"Auten.ai SDK — AI-native integrations with managed OAuth","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.0_1773566129539_0.05852890132719146","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@autenai/sdk","version":"0.2.0","keywords":["auten","ai","oauth","integrations","agents","automation"],"license":"MIT","_id":"@autenai/sdk@0.2.0","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"dist":{"shasum":"0062c4793de6512ed8ed4f9bcbbd3180489b60f3","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.2.0.tgz","fileCount":5,"integrity":"sha512-IjXWL8XMMiXGzoTIXpv36vjW/T5pVR2PaAVG6FPJOAtPqqv4NljQGZB7VIAfNDn9csqaeAT3WhtmilGRPNjLnA==","signatures":[{"sig":"MEUCIQDigFyCeyQpxiK0tq7cRTYIyZYnhZvpeK9ZLwgBDf3STwIgJ6PahXXlqXYceAul2tEjzTdCwDYhqoQy9hdWN1GaNyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37419},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","build":"tsup src/index.ts --format cjs,esm --dts --clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.2","description":"Auten.ai SDK — AI-native integrations with managed OAuth","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.2.0_1773603766090_0.9702619760169517","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@autenai/sdk","version":"0.3.0","keywords":["auten","ai","oauth","integrations","agents","automation"],"license":"MIT","_id":"@autenai/sdk@0.3.0","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"dist":{"shasum":"3d5ab9024461579a3169ca810de07538d2871b16","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.3.0.tgz","fileCount":5,"integrity":"sha512-7tKTOEZeyAmswqHY+CpgraNY5Phenlm23Zr9z+ZSE03P6V/zzOMEV0CPgRyiYKMuavCZqf+DBM63eFH1vDFrFQ==","signatures":[{"sig":"MEYCIQDM3+FO3YP4cn5pS0kN9iC+wPYhKKC9OikLF5KPzt5/4QIhANU7L8rhpK+p2g13OljfMKBQCtnAZIVJyGEW5+J22hej","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45363},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","build":"tsup src/index.ts --format cjs,esm --dts --clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.2","description":"Auten.ai SDK — AI-native integrations with managed OAuth","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.3.0_1773605326550_0.8336436016867674","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@autenai/sdk","version":"0.4.0","keywords":["auten","ai","oauth","integrations","agents","automation"],"license":"MIT","_id":"@autenai/sdk@0.4.0","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"dist":{"shasum":"8a9b2679048caf6ae18e07f957fc2078c694d3b0","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.4.0.tgz","fileCount":5,"integrity":"sha512-7C0bqXnj0fAIe5OMVZ+vAv1FE6QVjAK2LIG27FbBKdZnooB/PaCNwKBlOoalTDxWDwtBc3UA+SMHg1EqQSo6sQ==","signatures":[{"sig":"MEQCIB0k+B87jnKlws1ehh4WnSezYmDI52hcqmz/8FLDcvtsAiAc6Rpnoi/rQcJobiTVKGcRI96Dp5MRMlMvREYm2KadFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52731},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","build":"tsup src/index.ts --format cjs,esm --dts --clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.2","description":"Auten.ai SDK — AI-native integrations with managed OAuth","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.4.0_1773607194235_0.2063394468126316","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@autenai/sdk","version":"0.5.0","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.5.0","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"8c782a479ed956fe49107a3e4cd62bab068c8d94","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.5.0.tgz","fileCount":84,"integrity":"sha512-YIqH2twDu0JPpek8wPrTQaGmfD9PKlxjYqA5NfopS5L3DgQHmKlWrCQTulpQ0b/adFQ963hF/R9rsAJt4+f6Mg==","signatures":[{"sig":"MEQCIGv0yWbCI7McJPmee0gEvO/5CDLvajgUXHx+rOlCfBSNAiAV+mysU9VaHDwmrtCJtOwQg6+bZlQpgsqc7FbLcX1zuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":198902},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"gitHead":"95975d893cbf09300d7fa9897d51180f994965c4","scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.8.2","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.5.0_1777886059501_0.998262996944862","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@autenai/sdk","version":"0.6.0","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.6.0","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"de1366f670a6c59cd3125367554b19349a792d9b","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.6.0.tgz","fileCount":84,"integrity":"sha512-9ctsSunaSBxlnSKOhtmvF8//vuCLosQ+9Am0dFSjICaxSXwjm4DASRrHTEYvixStRzvQNt0Qwr41DxwTKRZ9YQ==","signatures":[{"sig":"MEUCIEDO3GdXABpzfYblsgMRdb+m9x4hF4l5vfkkjpRUFps5AiEA+95KblCAbam5FQVO+jP1J30kRG6F4ED7npQeXyBfYY4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227557},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"gitHead":"ea365c1b8b2aaa4d1bd322a8f27cb50e59f8189a","scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.8.2","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.6.0_1777892019080_0.8750340626677366","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@autenai/sdk","version":"0.7.0","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.7.0","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"f7983320f5fb73725e96c8ebfaff58d5c9a57ac4","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.7.0.tgz","fileCount":84,"integrity":"sha512-E/ybYV0IlksLAJY2SlqfBXBP/V4nvdd4qmAtdO3AvEh6siaWnWoKCj/c5owlT//EOYfsIegB9wuRjcyPu2W8ZA==","signatures":[{"sig":"MEYCIQDTF9rXSqGDWW2kABe0uag/Rb+w/XnO185MP/B3f54O/AIhAOLdSqKfw/u7Dld6rvEYeL/TLrMhd9AE/9UestmO9kBM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235374},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"gitHead":"a052439930fe8202fec01d36e3e897ae9a469abc","scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.8.2","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.0_1777907930759_0.983679947312267","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@autenai/sdk","version":"0.7.1","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.7.1","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"1937b9641706062b725c3ac7b52a329676042650","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.7.1.tgz","fileCount":84,"integrity":"sha512-m4cCnjpch9QSaSYtGRwYjEmv4ZCFBd+Z5RWWo44ZmlSp5t8+PgUeVq+Aai3J3LThDR7q3c6jgF7/a5Wah40a9A==","signatures":[{"sig":"MEYCIQCjHiwZZWOKnhtWxC/fv/v9G+Fc2Oo5KVTmS9V7Hzo6XgIhAOB5RUyJqpzcMbQbRPRAwBy5s/kgeY4Qkao0vZu/9PTi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238626},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.1_1778942163587_0.024902905221712457","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@autenai/sdk","version":"0.7.2","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.7.2","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"0c8bbc18ead8f7f5b7390db0d14d823b21225cfa","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.7.2.tgz","fileCount":84,"integrity":"sha512-kPq4/7tET9l0OKBjT77NGQbUESpgMV1ydA6sVHASZc8SzyuoCvUhHzhsgJ9UVkPfAZlTzu+LnzjsevdrkcKx3g==","signatures":[{"sig":"MEUCIQD4gQg1p1GdtDyetzuixbvM3RoJ6Q5jJmlV9njdt+rz8gIgeMGxQ5gzDm9xxH1B8UhxpkLPlZgogiiL3MLtvYCZBkw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":240268},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.2_1778942457303_0.8431516700964767","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@autenai/sdk","version":"0.7.3","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.7.3","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"4bf2d6527e541459572da120b4f441cd1b595204","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.7.3.tgz","fileCount":84,"integrity":"sha512-qwbk5X6shRoOyNH1a9CXoghCdk8gCoLzxCiV8ULZYS3zVAfIaBuXXCIm3z/EKgKFgNw+C++dIS5cVkaEVqv/5Q==","signatures":[{"sig":"MEQCIGmDDBqRs1gfaYquip2nl1RJslUq/uxR1falUN5qiQUhAiA+CUdUee7FBhO6U7XCp69etPsTpCamS4VzwEO+HdgKDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242728},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.3_1778942994019_0.850218647877548","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@autenai/sdk","version":"0.7.4","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.7.4","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"6f3e0c6376cb9c8fca7cc3a81860cb003c496edb","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.7.4.tgz","fileCount":84,"integrity":"sha512-cm63J/2kRqpR/NC7lxBuVd3Lx7HVlQI3Y8lGWpisggfLQLOr5+OsUmmyBKrGkWGICT+PmPDaS4M89NcGZRYL3Q==","signatures":[{"sig":"MEQCIEutMmTcbdkAIDLdwVfr6q0DZ7sjwOHPcMOFtWuPpbbgAiBq1NKTojMyL4XLFt5lIQKJavvVV41uMyE/m5K7UWwuhg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242602},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.4_1778943368320_0.8152201215695558","host":"s3://npm-registry-packages-npm-production"}},"0.7.5":{"name":"@autenai/sdk","version":"0.7.5","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.7.5","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"15ebbcdcb1842897174ebad244e6bc3b39fa129d","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.7.5.tgz","fileCount":84,"integrity":"sha512-nyCdXFVrse/mmDoRXGl7jBj+y9EK13VPobSILO4Q8pNgBgcGO7ks65au3tTdhEGZJtM7OGRzCO9fAL8O+Er3XQ==","signatures":[{"sig":"MEUCIQD5b25aymjmYmOseTdrtGpsHTOvguawgmQL5fvE6LttuQIgN3QDgn5gJkzvC4GyiMi4VDOIDAa7iNRXt6dyCF1lfIs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243180},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.5_1778943514751_0.05691069944275351","host":"s3://npm-registry-packages-npm-production"}},"0.7.6":{"name":"@autenai/sdk","version":"0.7.6","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.7.6","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"4c5db9d3a1a77bb856b0224dbfaff345e6786996","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.7.6.tgz","fileCount":84,"integrity":"sha512-tdVHRqnofwzj7EnrR0x7zbP+k7wmSrPovvkAbhGLov7JFJ0/ZmGvurnU7ehCZRHolna5+NzARABs8utKLKIH6g==","signatures":[{"sig":"MEQCIFtdz1dsxwIztYfMBOFhtWACZbbMYgZlW6DEGa09t91uAiA3El08U9LYj9Ow0LVb89xGMdIqo7/CUhSLaD0ZdUKUBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244419},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.6_1778945192754_0.3320123647223594","host":"s3://npm-registry-packages-npm-production"}},"0.7.7":{"name":"@autenai/sdk","version":"0.7.7","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.7.7","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"fc9f22cc96f38e95800b34304a903c23c8f3215d","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.7.7.tgz","fileCount":84,"integrity":"sha512-HoQwsuRZ53OjPKnoO7N5uygxLn5DiNt9z/TMYFK2YrmCKF4K6WIYWKwf5rUKiVuk9NSlH6x/+uRA24k8zZ1EaQ==","signatures":[{"sig":"MEUCICtm7EIGz0fjT97CmOhq1H8YBTZHvQLcO+zK/3+Mk77nAiEAqXsYyg5MaLVH0Q5TwmtX4H5XRt63BG5rZ+bT4T0nSqM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252436},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.7_1778949442274_0.7768039674076888","host":"s3://npm-registry-packages-npm-production"}},"0.7.8":{"name":"@autenai/sdk","version":"0.7.8","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.7.8","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"6646a5135b0a9a3abe930b1093d92626b0f0dae0","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.7.8.tgz","fileCount":84,"integrity":"sha512-UZ5RcNxSJx5vw57aPjRuSceEJaGDX3PPe9yRU7MMst9inmqSok1HB2Yewzoq2J+/s/IHnwLIJOApFvNMvLs1Aw==","signatures":[{"sig":"MEQCIHnR9eonlNDeR4lEl+tKXrI0M/XDkhmG5vWBvVQM18qeAiAYmOAuk7Y9jeZF3G5nRHDql03yyMyHx6qK/q2jsXr2Aw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":269495},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.8_1778975179684_0.13962190491703907","host":"s3://npm-registry-packages-npm-production"}},"0.7.9":{"name":"@autenai/sdk","version":"0.7.9","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.7.9","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"da2fafa2352620379326c4ff0fdfc18d7dcdac5d","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.7.9.tgz","fileCount":84,"integrity":"sha512-BYfvH35CXB5m5XEA321KaOAODbHL5d0axScC+x4oYcFANlmjmxz/mxBWEtPfJldhMwDqys/jfcYexymyWEXtzQ==","signatures":[{"sig":"MEQCIESvllhrrYFj2o5S6wdK+oawuC7OUrUzGMBjogewxdQhAiArtcgXO58JMUgAKpl9sA7D2Z8TSvDehqpPI2ZiKCqVmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":270608},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.9_1778975580540_0.8634760729632889","host":"s3://npm-registry-packages-npm-production"}},"0.7.10":{"name":"@autenai/sdk","version":"0.7.10","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.7.10","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"d52a7cd010dddc8956146e00d69c24876035319b","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.7.10.tgz","fileCount":84,"integrity":"sha512-uRBDMQt6kR8CYzWWoFqh/x2YKUcKMoDlVMc2gDUZtrQMXIHz2gr0YeqiTnP9MUkjjw/nXpgbK+gcMrtG/MTI9g==","signatures":[{"sig":"MEYCIQCUXHR1xY0cAiH5FXqkw20Ws4FAreWIAnNf8aWAaYDacAIhAL5UX/tsqe/dy34dNJ5Ugg4A6OItjPYPbsIzfjBmZZre","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":271156},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.10_1778976224492_0.9426956352569758","host":"s3://npm-registry-packages-npm-production"}},"0.7.11":{"name":"@autenai/sdk","version":"0.7.11","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai"],"license":"MIT","_id":"@autenai/sdk@0.7.11","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"bb6ca600bdbdcce6693a5f4252a1c4a2a77a4119","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.7.11.tgz","fileCount":84,"integrity":"sha512-4gaqweHI58VUcAFu+IUGDXYxK9jw2YYu/VTU6w1lnnInvKrM3H5sPMhIzLtw9Wg8d/3IuHqNtsL4NTw31C7Iww==","signatures":[{"sig":"MEYCIQDgiC2jN8cbcmQRQauurVTgbRmOMdsEtXlIgDUtnBGJigIhAOzJhVvmGo3LjVl2m67uOenPqAnrMfhahv2uYEVS7lPT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272460},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ws":"^8.18.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","pngjs":"^7.0.0","@types/ws":"^8.5.0","typescript":"^5.6.0","@types/node":"^22.0.0","@types/pngjs":"^6.0.5","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.11_1779001745886_0.6427649613200821","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@autenai/sdk","version":"0.8.0","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai","sdk","cli"],"author":{"name":"Auten","email":"hello@auten.ai"},"license":"MIT","_id":"@autenai/sdk@0.8.0","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"homepage":"https://auten.ai","bugs":{"url":"https://github.com/auten-ai/sdk/issues"},"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"a15ddc4297d5ecc36186061c94d3a992c3e0b864","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-0.8.0.tgz","fileCount":73,"integrity":"sha512-/CF5tgm7W7pBodbER0N56pF66LswepAxxtMZiCbuZUXGUDYRgehPjYo7LEh+AlEANLXY4AvwMgKtrSSLiTEZeQ==","signatures":[{"sig":"MEQCICaVUk6mV/qGxTxK/o81dHxvS0jJBkTIT2MBSibNNxRjAiBECo7xI6vJ6uzAOwVt/Es3TzTVVjoj2gVWKEuSVg2oqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223123},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"deprecated":"Pre-1.0 development build with known issues. Upgrade to 1.0.0+.","repository":{"url":"git+https://github.com/auten-ai/sdk.git","type":"git"},"_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.8.0_1779007636462_0.16694831828710965","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@autenai/sdk","version":"1.0.0","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai","sdk","cli"],"author":{"name":"Auten","email":"hello@auten.ai"},"license":"MIT","_id":"@autenai/sdk@1.0.0","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"homepage":"https://auten.ai","bugs":{"url":"https://github.com/auten-ai/sdk/issues"},"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"550d38d745cf72953df6a53584f9753627d70bfd","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-1.0.0.tgz","fileCount":73,"integrity":"sha512-eAgF9ooIee5ZJAxYCTlNDATfzymRhMvm1e/oiMU00I+3s5XRwlYuWbS0XGh5fsjfsLuE5K6jnzpqiZvw3OoEsA==","signatures":[{"sig":"MEUCIFZ535LCGpqO4XdArTJgOLNzlMsTcTDRN9MNoT4RUR6kAiEA++OSydXs6+R+i9vzAroy5BBTb4IE3a4pumZ54UHpB2c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223123},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"repository":{"url":"git+https://github.com/auten-ai/sdk.git","type":"git"},"_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.0_1779007900933_0.39584545656440695","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@autenai/sdk","version":"1.0.1","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai","sdk","cli"],"author":{"name":"Auten","email":"hello@auten.ai"},"license":"MIT","_id":"@autenai/sdk@1.0.1","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"homepage":"https://auten.ai","bugs":{"url":"https://github.com/AutenAI/auten-sdk/issues"},"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"daa9c2b6d7c87d551eec6a4d21a1c8a18adbc73e","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-1.0.1.tgz","fileCount":73,"integrity":"sha512-5tobjOhwSca509/Lc+Yo/VKRqNJMp3EAFTQbDDRagZ1qgqfyO84m88aZGSPK5cusfd4jG0slgTuxTUA6Kd0SOA==","signatures":[{"sig":"MEQCIErFIFC8uVjoLaPXOfkp6lawIsKCxAlv1U+muOrOCQrQAiAnF/+DrVKFALMsF8Lmx/6O3ZDNzIb2gFNe0uD81uaxsQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227190},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"gitHead":"e2e4ee96e266f950ea1d8f1afe2c08b3441901a5","scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"repository":{"url":"git+https://github.com/AutenAI/auten-sdk.git","type":"git"},"_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.1_1779220826826_0.9883873671514858","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@autenai/sdk","version":"1.0.2","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai","sdk","cli"],"author":{"name":"Auten","email":"hello@auten.ai"},"license":"MIT","_id":"@autenai/sdk@1.0.2","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"homepage":"https://auten.ai","bugs":{"url":"https://github.com/AutenAI/auten-sdk/issues"},"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"ce46597ed54a4849b3365e2d12c7d4e508bfde04","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-1.0.2.tgz","fileCount":73,"integrity":"sha512-rxiSQz9WWeZxi2QOD+/EWv4/ZIXb5gyisWzal4jLT0vH/vhGy8weqsGcMU8hw5aj0j/vgVd0I40mfkSDHpKR/w==","signatures":[{"sig":"MEQCICtgjkPpfirp41jH2cJ7tv8517R3A4kzJwN+pftxqjstAiAjUzm/zcf8NNaArh1dI+KhyujU9JahBIqu8oRVxZxCFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232847},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"gitHead":"e2e4ee96e266f950ea1d8f1afe2c08b3441901a5","scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"repository":{"url":"git+https://github.com/AutenAI/auten-sdk.git","type":"git"},"_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.2_1779221067435_0.19068212200493573","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@autenai/sdk","version":"1.0.3","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai","sdk","cli"],"author":{"name":"Auten","email":"hello@auten.ai"},"license":"MIT","_id":"@autenai/sdk@1.0.3","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"homepage":"https://auten.ai","bugs":{"url":"https://github.com/AutenAI/auten-sdk/issues"},"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"9d6426349f84af8f37bf9b72f6b95e34cdfae6cd","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-1.0.3.tgz","fileCount":73,"integrity":"sha512-McnAtE3T3BCdE4TX2qSEekLo7/CeVe6hEHATQ1lkY7201welkX7knCXbrrNPpV2cdTluMbZQW66nQbc2ZaK81w==","signatures":[{"sig":"MEYCIQDFrHKJk15gpVPONcjPHd2xBtFMJwhAo7671LqE4znnogIhAMXApbJtqQqLivAwn5zV9PZX8hrHb3gQkR2R+VCWwvN2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":234509},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"gitHead":"e2e4ee96e266f950ea1d8f1afe2c08b3441901a5","scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"repository":{"url":"git+https://github.com/AutenAI/auten-sdk.git","type":"git"},"_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.3_1779221534061_0.18727691292775894","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@autenai/sdk","version":"1.0.4","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai","sdk","cli"],"author":{"name":"Auten","email":"hello@auten.ai"},"license":"MIT","_id":"@autenai/sdk@1.0.4","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"homepage":"https://auten.ai","bugs":{"url":"https://github.com/AutenAI/auten-sdk/issues"},"bin":{"auten":"bin/auten.js"},"dist":{"shasum":"82ac693a6fe01fe48caa0454b1fa485ad8a7ad0b","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-1.0.4.tgz","fileCount":73,"integrity":"sha512-ntKXk5Jg1GfWHo1sdNtDdhqdEOvnIYTy0kBkOPZF9R5t4eqtmEpvjbUTVbSWVzNJHIPj/6E1M/EfelLT7P21Pw==","signatures":[{"sig":"MEUCIQCP4ratVAUXkSYN0Zpq10A+7uE2cF8wbFsxsfqigyIdIAIgDTcWASfwXQobe/Hzs9B4tXqJboxyM6jG9ELJJkXaHgA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":236027},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"gitHead":"e2e4ee96e266f950ea1d8f1afe2c08b3441901a5","scripts":{"build":"tsc","watch":"tsc --watch","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"repository":{"url":"git+https://github.com/AutenAI/auten-sdk.git","type":"git"},"_npmVersion":"10.9.7","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","directories":{},"_nodeVersion":"22.22.2","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.4_1779222083966_0.05306796514548462","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@autenai/sdk","version":"1.0.5","description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","license":"MIT","author":{"name":"Auten","email":"hello@auten.ai"},"homepage":"https://auten.ai","repository":{"type":"git","url":"git+https://github.com/AutenAI/auten-sdk.git"},"bugs":{"url":"https://github.com/AutenAI/auten-sdk/issues"},"type":"module","main":"dist/src/index.js","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","default":"./dist/src/index.js"}},"bin":{"auten":"bin/auten.js"},"engines":{"node":">=18.17"},"scripts":{"build":"tsc","watch":"tsc --watch","typecheck":"tsc --noEmit","prepack":"npm run build"},"dependencies":{},"devDependencies":{"@types/node":"^22.0.0","tsx":"^4.19.0","typescript":"^5.6.0"},"keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai","sdk","cli"],"_id":"@autenai/sdk@1.0.5","gitHead":"e2e4ee96e266f950ea1d8f1afe2c08b3441901a5","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-RsslLwANQueEelf3MD/WEU60V7RnDl+kqPwqg18iY9eWrKYUz3BZLNj1DWVqo0gx+CNyGMwHqdnUgWPdqFjAxw==","shasum":"c2492ab3cddc9145e3b07fef5b0abec5e3250778","tarball":"https://registry.npmjs.org/@autenai/sdk/-/sdk-1.0.5.tgz","fileCount":73,"unpackedSize":236997,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBUA33l413/aRqklKpMUuDwZNjX4e4t5nHoqRhXj8jTJAiAvoPVijd6FBwgLM9HOrFrZ2FgnsrfXENqu36IoQ0RgBQ=="}]},"_npmUser":{"name":"autenai","email":"hello@auten.ai"},"directories":{},"maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_1.0.5_1779222760010_0.6997298931953713"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-15T09:15:29.438Z","modified":"2026-05-19T20:32:40.292Z","0.1.0":"2026-03-15T09:15:29.681Z","0.2.0":"2026-03-15T19:42:46.228Z","0.3.0":"2026-03-15T20:08:46.689Z","0.4.0":"2026-03-15T20:39:54.372Z","0.5.0":"2026-05-04T09:14:19.626Z","0.6.0":"2026-05-04T10:53:39.252Z","0.7.0":"2026-05-04T15:18:50.970Z","0.7.1":"2026-05-16T14:36:03.757Z","0.7.2":"2026-05-16T14:40:57.459Z","0.7.3":"2026-05-16T14:49:54.171Z","0.7.4":"2026-05-16T14:56:08.458Z","0.7.5":"2026-05-16T14:58:34.889Z","0.7.6":"2026-05-16T15:26:32.939Z","0.7.7":"2026-05-16T16:37:22.413Z","0.7.8":"2026-05-16T23:46:19.853Z","0.7.9":"2026-05-16T23:53:00.703Z","0.7.10":"2026-05-17T00:03:44.649Z","0.7.11":"2026-05-17T07:09:06.032Z","0.8.0":"2026-05-17T08:47:16.610Z","1.0.0":"2026-05-17T08:51:41.073Z","1.0.1":"2026-05-19T20:00:26.999Z","1.0.2":"2026-05-19T20:04:27.577Z","1.0.3":"2026-05-19T20:12:14.213Z","1.0.4":"2026-05-19T20:21:24.268Z","1.0.5":"2026-05-19T20:32:40.162Z"},"bugs":{"url":"https://github.com/AutenAI/auten-sdk/issues"},"author":{"name":"Auten","email":"hello@auten.ai"},"license":"MIT","homepage":"https://auten.ai","keywords":["android","automation","mobile","accessibility","agent","auten","phone-control","ai","sdk","cli"],"repository":{"type":"git","url":"git+https://github.com/AutenAI/auten-sdk.git"},"description":"SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.","maintainers":[{"name":"autenai","email":"hello@auten.ai"}],"readme":"<p align=\"center\">\n  <a href=\"https://auten.ai\">\n    <img src=\"https://auten.ai/logos/logo-512.png\" alt=\"Auten\" width=\"120\" height=\"120\" />\n  </a>\n</p>\n\n<h1 align=\"center\">@autenai/sdk</h1>\n\n<p align=\"center\">\n  Programmatic control of Android phones via the Auten relay — send tasks in\n  plain English, query device state, manage encrypted credentials, watch live\n  screens. SDK + CLI in one package.\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@autenai/sdk\"><img src=\"https://img.shields.io/npm/v/@autenai/sdk?color=2ea44f&label=npm\" alt=\"npm version\" /></a>\n  <a href=\"https://www.npmjs.com/package/@autenai/sdk\"><img src=\"https://img.shields.io/npm/dm/@autenai/sdk?color=2ea44f\" alt=\"npm downloads\" /></a>\n  <img src=\"https://img.shields.io/badge/license-MIT-blue\" alt=\"MIT\" />\n  <img src=\"https://img.shields.io/badge/node-%3E%3D18.17-brightgreen\" alt=\"Node 18.17+\" />\n</p>\n\n```bash\nnpm install @autenai/sdk\n```\n\n```ts\nimport { Auten } from \"@autenai/sdk\";\n\nconst auten = new Auten({ apiKey: process.env.AUTEN_API_KEY! });\n\nconst phone = await auten.devices.firstOnline();\nconst result = await auten.tasks.run({\n  device: phone!.serial,\n  prompt: \"Open Calculator and compute 999 ÷ 3\",\n  speed: \"lightning\",\n});\nconsole.log(result.verified, result.result?.summary);\n// → true, \"Calculator displays 333.\"\n```\n\n---\n\n## Table of contents\n\n- [Concepts](#concepts)\n- [Setup](#setup)\n- [Quickstart](#quickstart)\n- [SDK reference](#sdk-reference)\n  - [`new Auten(config)`](#new-autenconfig)\n  - [`auten.me()`](#autenme)\n  - [`auten.devices`](#autendevices)\n  - [`auten.tasks`](#autentasks)\n  - [`auten.keys`](#autenkeys)\n  - [`auten.phone(serial)`](#autenphoneserial)\n- [CLI reference](#cli-reference)\n- [REST API reference](#rest-api-reference)\n- [Recipes](#recipes)\n- [Errors](#errors)\n- [Pitfalls](#pitfalls)\n- [For AI agents](#for-ai-agents)\n- [Versioning](#versioning)\n\n---\n\n## Concepts\n\n| Term | Meaning |\n|---|---|\n| **Relay** | Server (`https://relay.auten.ai` by default) that sits between your code and the phones. Phones connect outbound (so they work behind NAT). |\n| **Owner** | The principal an API key belongs to. All resources (devices, tasks, sessions, credentials) are filtered by `ownerId` server-side — your key only sees your stuff. |\n| **Device** | A physical Android phone running the Auten APK. Registered to one owner. |\n| **Task** | A natural-language goal dispatched to a phone (\"open Chrome and search for X\"). The agent on the relay decomposes it into per-tap actions. |\n| **Plan** | Cleaned-up action sequence extracted from a verified-successful task. Future tasks with similar prompts replay the plan deterministically (cheap + fast) before invoking the LLM. |\n| **Screen graph** | Per-device DAG of `(fromFP, action, toFP)` edges learned from every successful tap. Powers cached replay on familiar screens. |\n| **Speed preset** | One knob (`fast` / `instant` / `lightning`) that drives every artificial delay during replay. See [speed table](#speed-presets). |\n\nTasks resolve in this order, cheapest first:\n\n1. **Synthesize** from the per-screen Step KB if every required label was observed before. No LLM call.\n2. **Replay** a similar past task's `cleanPlanJson`. Deterministic, label-based; auto-scrolls to find off-screen targets.\n3. **Delegate** to Claude Opus 4.7 via the engine loop — only when the first two miss.\n\nYou don't pick which path runs; the relay does. Your code just calls `auten.tasks.create` or `.run` and gets a result.\n\n---\n\n## Setup\n\n### 1. Get a key\n\nSign up at <https://auten.ai> and mint a key from **Settings → API Keys**. Keys look like `sk_live_<48 hex>`.\n\n### 2. Save it\n\n```bash\n$ npx @autenai/sdk login\nRelay base URL [https://relay.auten.ai]:\nAPI key: ********************************\n  ✓ Authenticated as my-team — 1 device(s), 0 task(s).\n  ✓ Saved to ~/.autenrc\n```\n\nThe CLI also reads `AUTEN_API_KEY` and `AUTEN_BASE_URL` from the environment, so CI doesn't need an `.autenrc`.\n\n### 3. Pair a phone\n\n```bash\nauten add-phone   # USB-tethered Samsung-style wizard\n```\n\nOr have the operator pre-pair phones for you and share the serials.\n\n---\n\n## Quickstart\n\n### Run a task and wait\n\n```ts\nimport { Auten } from \"@autenai/sdk\";\n\nconst auten = new Auten({ apiKey: process.env.AUTEN_API_KEY! });\n\nconst result = await auten.tasks.run({\n  device: \"a4e0eff201d020fd\",\n  prompt: \"Open Instagram and like the latest 5 posts on the feed\",\n  speed: \"fast\",\n  timeout_seconds: 300,\n});\n\nif (result.verified) {\n  console.log(\"Done:\", result.result?.summary);\n} else {\n  console.warn(\"Verifier flagged failure:\", result.result?.verify_reason);\n}\n```\n\n### Fire-and-forget + poll later\n\n```ts\nconst { task_id, watch_url } = await auten.tasks.create({\n  device,\n  prompt: \"Translate the article on news.tv3.lt and save the title to clipboard\",\n});\n\n// browser-renderable live view\nconsole.log(`Watch: ${auten.baseUrl}${watch_url}`);\n\n// later:\nconst final = await auten.tasks.wait(task_id, { timeoutMs: 10 * 60_000 });\n```\n\n### Direct phone control\n\n```ts\nconst phone = auten.phone(device);\n\nconst screen = await phone.look();           // SoM screenshot + element list\nconst submit = screen.elements.find(e => /sign in/i.test(e.text ?? \"\"));\nif (submit) await phone.tap(submit.x, submit.y);\n\nawait phone.openUrl(\"https://news.tv3.lt\");\nawait phone.type(\"hello\", { x: 540, y: 800 }); // accessibility ACTION_SET_TEXT, no keyboard\nawait phone.key(\"back\");\n```\n\n---\n\n## SDK reference\n\n### `new Auten(config)`\n\n```ts\ntype AutenConfig = {\n  apiKey: string;       // required\n  baseUrl?: string;     // default: https://relay.auten.ai\n  timeoutMs?: number;   // per-request, default 60_000\n};\n```\n\nConstruct one client per process. The `Transport` underneath uses `fetch` (Node 18.17+ has it built in). Bearer auth is applied to every request.\n\n`auten.baseUrl` getter returns the resolved base URL.\n\n### `auten.me()`\n\n```ts\nauten.me(): Promise<{\n  owner_id: string;\n  key_id: string;\n  is_root: boolean;       // env-key admin (sees all owners)\n  device_count: number;   // owner's devices\n  task_count: number;     // owner's tasks ever\n}>\n```\n\nIdentity probe. Use after login to verify the key is valid and to log who's running.\n\n### `auten.devices`\n\n```ts\nauten.devices.list(): Promise<Device[]>\nauten.devices.get(serial: string): Promise<Device | null>\nauten.devices.firstOnline(): Promise<Device | null>\nauten.devices.stats(serial: string): Promise<{\n  serial: string;\n  online: boolean;\n  graph_edges: number;\n  task_count: number;\n  cache_hit_rate: number;   // 0..1, fraction of past turns served from graph cache\n}>\n```\n\n```ts\ntype Device = {\n  serial: string;\n  model: string | null;\n  online: boolean;\n  type: string;                  // \"physical\" | \"emulator\"\n  lastSeenAt: string | null;     // ISO timestamp\n  androidVersion: string | null;\n  screenW: number | null;\n  screenH: number | null;\n};\n```\n\n`online` flips when the phone disconnects from the relay's WS reverse tunnel. Pollable; the relay updates it within a few seconds of disconnect.\n\n### `auten.tasks`\n\n```ts\ntype Speed = \"fast\" | \"instant\" | \"lightning\";\ntype TaskMode = \"task\" | \"explore\";\ntype TaskStatus = \"queued\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\";\n\nauten.tasks.create(input: {\n  device: string;\n  prompt: string;\n  mode?: TaskMode;\n  speed?: Speed;\n  webhook_url?: string;\n  webhook_secret?: string;       // HMAC-SHA256 signing for webhook deliveries\n  timeout_seconds?: number;      // default 300; 0 = no limit (explore mode)\n}): Promise<{ task_id: string; status: string; watch_url: string }>\n\nauten.tasks.get(id: string): Promise<Task>\nauten.tasks.list(opts?: {\n  device?: string;\n  status?: TaskStatus;\n  limit?: number;                // 1..100, default 25\n}): Promise<Task[]>\nauten.tasks.cancel(id: string): Promise<{ task_id: string; status: string }>\n\n// Poll until terminal state. Returns the final Task.\nauten.tasks.wait(id: string, opts?: {\n  intervalMs?: number;           // default 1000\n  timeoutMs?: number;            // default 300_000\n}): Promise<Task>\n\n// Sugar: create + wait. Same options as create + wait.\nauten.tasks.run(input: CreateTaskInput, waitOpts?: WaitOpts): Promise<Task>\n```\n\n```ts\ntype Task = {\n  task_id: string;\n  device_serial: string;\n  prompt: string;\n  status: TaskStatus;\n  mode: TaskMode;\n  verified?: boolean | null;\n  result?: {\n    summary?: string;\n    cost_usd?: number;\n    duration_ms?: number;\n    verify_reason?: string;      // verifier's explanation when verified=false\n  } | null;\n  error?: { code?: string; message?: string; retryable?: boolean } | null;\n  created_at?: string;\n  started_at?: string | null;\n  completed_at?: string | null;\n  turns?: TaskTurn[];            // present in get(), not list()\n  artifacts?: TaskArtifact[];    // screenshots, recordings, files saved during run\n};\n\ntype TaskTurn = {\n  index: number;\n  source: string;                // \"cached\" | \"decide\" | \"delegate\" | \"replay\"\n  label: string | null;\n  ok: boolean;\n  cost_usd: number;\n  duration_ms: number | null;\n};\n```\n\n#### Speed presets\n\n| Preset | settle | postAction | look-after-each | Use when |\n|---|---|---|---|---|\n| `fast` | 120ms | 180ms | yes | First runs of unfamiliar tasks; debugging. |\n| `instant` (default) | 50ms | 100ms | yes | Familiar flows. Most tasks. |\n| `lightning` | 10ms | 30ms | **no** | Production replay of plans you trust. Skips per-step look — fastest, less verifiable mid-flight. |\n\n`lightning` is the \"this plan worked yesterday, just run it\" knob. Don't use it for the first run of anything novel.\n\n### `auten.keys`\n\n```ts\nauten.keys.list(): Promise<ApiKey[]>           // never reveals full secrets\nauten.keys.create(input?: {\n  name?: string;\n  ownerId?: string;                            // root-only override\n}): Promise<ApiKeyWithSecret>                  // .key contains the full secret — printed once\nauten.keys.revoke(id: string): Promise<{ ok: boolean; id: string }>\n```\n\nSelf-service rotation: mint a new key, deploy it, revoke the old one. Cache invalidates within 30s server-side.\n\n### `auten.phone(serial)`\n\nReturns a `Phone` handle. All methods route through the relay's owner-scoped phone-proxy endpoint, which forwards via the WS reverse tunnel to the APK. The phone doesn't need to be reachable from your IP — only from the relay.\n\n#### Vision\n\n```ts\nphone.look(): Promise<LookResult>              // SoM annotated screenshot + element list (accessibility tree)\nphone.screenshot(): Promise<{ jpeg: string; width: number; height: number; durationMs: number }>\n                                               // raw pixels, no SoM, ~280ms faster than look()\n```\n\n```ts\ntype LookResult = {\n  annotated: string;                           // base64 JPEG with numbered markers\n  elements: SomElement[];\n  width: number;\n  height: number;\n};\n\ntype SomElement = {\n  id: number;                                  // SoM marker number, matches the image overlay\n  x: number; y: number; w: number; h: number;  // pixel coords (center)\n  text?: string;\n  desc?: string;                               // content-description (accessibility label)\n  cls?: string;                                // class name (e.g. \"android.widget.Button\")\n  res?: string;                                // resource id (e.g. \"com.app:id/submit_button\")\n  clickable?: boolean;\n  editable?: boolean;\n  scrollable?: boolean;\n  via_ocr?: boolean;                           // synthesized from on-device OCR (Compose / Flutter / canvas UIs)\n};\n```\n\n#### Input\n\n```ts\nphone.tap(x: number, y: number): Promise<{ ok: boolean }>\nphone.longPress(x: number, y: number, durationMs?: number): Promise<{ ok: boolean }>\nphone.swipe(x1: number, y1: number, x2: number, y2: number, durationMs?: number): Promise<{ ok: boolean }>\n\n// `target` of an editable element bypasses the soft keyboard via accessibility\n// ACTION_SET_TEXT — instant, no layout shift. Without target, routes through IME.\nphone.type(text: string, target?: { x: number; y: number }): Promise<{ ok: boolean }>\n\nphone.key(name: KeyName): Promise<{ ok: boolean }>\n// KeyName: \"back\" | \"home\" | \"recents\" | \"enter\" | \"delete\" | \"tab\" | \"menu\"\n//        | \"search\" | \"volume_up\" | \"volume_down\" | \"power\"\n```\n\n#### Apps\n\n```ts\nphone.launch(packageName: string): Promise<{ ok: boolean }>     // force-stops then launches\nphone.stop(packageName: string): Promise<{ ok: boolean }>\nphone.openUrl(url: string, pkg?: string): Promise<{ ok: boolean; url: string; package?: string }>\n                                                                // ACTION_VIEW intent\n```\n\n#### Other\n\n```ts\nphone.status(): Promise<unknown>                   // APK health: { ok, service, version, accessibility }\nphone.info(): Promise<unknown>\nphone.reset(): Promise<{ ok: boolean; killedCount: number }>    // kill all 3rd-party + key:home\nphone.notifications(): Promise<unknown[]>\nphone.clearNotifications(): Promise<{ ok: boolean }>\n```\n\n#### Clipboard *(varies by APK build — see [Pitfalls](#pitfalls))*\n\n```ts\nphone.clipboardSet(text: string): Promise<{ ok: boolean }>\nphone.clipboardGet(): Promise<{ ok: boolean; text: string }>\nphone.pasteClipboard(target?: { x: number; y: number }): Promise<{ ok: boolean }>\n                                               // ACTION_PASTE on focused or coord-targeted editable\n```\n\n#### Task sugar\n\n```ts\nphone.task(prompt: string, opts?: {\n  speed?: Speed;\n  mode?: TaskMode;\n  timeout_seconds?: number;\n  webhook_url?: string;\n  webhook_secret?: string;\n}): Promise<{ task_id: string; status: string; watch_url: string }>\n```\n\nEquivalent to `auten.tasks.create({ device: this.serial, prompt, ...opts })`.\n\n#### Credentials\n\nEncrypted server-side with AES; only ever decrypted into the agent's runtime when it actually needs to fill a form. Per-device.\n\n```ts\nphone.credentials.save(input: {\n  service: string;\n  username?: string;\n  password?: string;\n  totp_secret?: string;\n  notes?: string;\n  [k: string]: unknown;                                // any extra fields are encrypted with the rest\n}): Promise<{ ok: boolean; service: string }>\n\nphone.credentials.list(): Promise<Credential[]>                                // each row carries `id` (UUID) + `deviceSerial`\nphone.credentials.reveal<T>(service: string): Promise<T>                       // full payload, decrypted\nphone.credentials.delete(service: string): Promise<{ ok: boolean }>            // by service name\nphone.credentials.deleteById(id: string): Promise<{ ok: boolean; id: string }> // by UUID\n\n// Cross-device variants on the top-level client:\nauten.credentials.list(): Promise<Credential[]>                                // every credential the owner has, across all devices\nauten.credentials.deleteById(id: string): Promise<{ ok: boolean; id: string }> // by UUID, any device the owner has\n```\n\n#### Escape hatch\n\n```ts\nphone.proxy<T>(method: \"GET\" | \"POST\", path: string, body?: unknown, timeoutMs?: number): Promise<T>\n```\n\nFor APK endpoints not yet wrapped by the SDK. Forwards `{method, path, body}` through the WS tunnel as-is. Useful if the APK ships a new route before the SDK does.\n\n---\n\n## CLI reference\n\nInstalled as `auten` when the package is global, or via `npx @autenai/sdk <cmd>`.\n\n| Command | Aliases | Description |\n|---|---|---|\n| `auten login` | | Save API key + relay URL to `~/.autenrc` (chmod 600). |\n| `auten me` | `whoami` | Show whoami + counts for the calling key. |\n| `auten devices` | `list`, `ls` | List devices belonging to your owner. |\n| `auten add-phone` | `add` | Interactive USB-pair wizard. |\n| `auten task \"<prompt>\"` | `run` | Dispatch a task and follow until done. |\n| `auten task --no-follow` | | Fire-and-forget; returns task id. |\n| `auten task --device <serial>` | | Pin to a specific phone. |\n| `auten task --speed lightning\\|instant\\|fast` | | Speed preset. |\n| `auten tasks` | | List recent tasks. |\n| `auten tasks <id>` | | Show one task in detail. |\n| `auten creds add` | `save` | Save a service login (interactive — password input is masked). |\n| `auten creds ls` | `list` | List saved services for a device. |\n| `auten creds show <service>` | `reveal` | Print the full credential JSON (passwords included). |\n| `auten creds rm <service>` | `delete` | Delete a credential. |\n| `auten keys` | | List your API keys. |\n| `auten keys create [name]` | `add`, `new` | Mint a new key — secret printed once. |\n| `auten keys revoke <id>` | `rm`, `delete` | Disable a key (instant). |\n| `auten version` | `-v` | Print package version. |\n| `auten help` | `-h` | Print usage. |\n\nCommon flags across `creds`/`task`: `--device <serial>` to pin (defaults to `lastSerial` from `~/.autenrc`, then first online).\n\n---\n\n## REST API reference\n\nThe SDK is a thin wrapper over a small REST surface. If you're not using Node, hit it directly.\n\n### Auth\n\n`Authorization: Bearer <api-key>` header on every request. Or `?apiKey=<key>` query param if you can't set headers (e.g. WS).\n\n### Endpoints\n\n| Method | Path | Description |\n|---|---|---|\n| `GET` | `/v1/me` | Identity. |\n| `GET` | `/v1/keys` | List your keys (no full secrets). |\n| `POST` | `/v1/keys` | Mint a new key. Body: `{name?, ownerId?}`. Returns full secret once. |\n| `DELETE` | `/v1/keys/:id` | Revoke a key. |\n| `GET` | `/v1/devices` | List your devices. |\n| `GET` | `/v1/devices/:serial/stats` | Per-device counters (graph edges, cache hit rate). |\n| `GET` | `/v1/devices/:serial/graph` | Top 500 screen-transition edges for the device. |\n| `POST` | `/v1/devices/:serial/proxy` | Forward `{method, path, body, timeout_ms?}` to the APK over the WS tunnel. The SDK's `phone.*` methods all route through this. |\n| `GET` | `/v1/tasks` | List tasks. Query: `device`, `status`, `limit`. |\n| `POST` | `/v1/tasks` | Create a task. Body: `{device_serial, prompt, mode?, speed?, webhook_url?, webhook_secret?, timeout_seconds?}`. |\n| `GET` | `/v1/tasks/:id` | Get one task with turns + artifacts. |\n| `POST` | `/v1/tasks/:id/cancel` | Cancel a running task. |\n| `GET` | `/v1/credentials` | Every credential the caller owns, across all their devices. Each row has `id` + `deviceSerial`. |\n| `DELETE` | `/v1/credentials/:id` | Delete one by UUID (any device the caller owns). |\n| `POST` | `/v1/devices/:serial/credentials` | Save a credential. |\n| `GET` | `/v1/devices/:serial/credentials` | One device's credentials (now includes `id`). |\n| `GET` | `/v1/devices/:serial/credentials/:service/reveal` | Decrypt + return one by service name. |\n| `DELETE` | `/v1/devices/:serial/credentials/:service` | Delete by service name. |\n| `POST` | `/v1/transitions` | Used by APK to record passive learning edges. |\n| `GET` | `/health` | Liveness probe (no auth). |\n| `GET` | `/w/:serial?t=<watch-token>` | HTML viewer for the live phone screen + chat. |\n\n### curl example\n\n```bash\ncurl -X POST https://relay.auten.ai/v1/tasks \\\n  -H \"Authorization: Bearer $AUTEN_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"device_serial\": \"a4e0eff201d020fd\",\n    \"prompt\": \"Compute 999 ÷ 3 in the calculator\",\n    \"speed\": \"lightning\"\n  }'\n# → {\"task_id\":\"...\",\"status\":\"running\",\"watch_url\":\"/w/.../?t=...\"}\n```\n\n### Webhook deliveries\n\nIf `webhook_url` was set on `tasks.create`, the relay POSTs to it on every status change with body:\n\n```json\n{\n  \"task_id\": \"...\",\n  \"status\": \"completed\",\n  \"result\": { \"summary\": \"...\", \"cost_usd\": 0.03, \"duration_ms\": 12000, \"verified\": true },\n  \"error\": null\n}\n```\n\nHeaders:\n- `Content-Type: application/json`\n- `X-Auten-Signature: sha256=<hex>` if `webhook_secret` was provided. Body is HMAC-SHA256-signed.\n\nVerify with:\n\n```ts\nimport crypto from \"node:crypto\";\nconst expected = \"sha256=\" + crypto.createHmac(\"sha256\", secret).update(rawBody).digest(\"hex\");\nif (!crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) reject();\n```\n\n---\n\n## Recipes\n\n### Run a complex multi-step task\n\n```ts\nconst result = await auten.tasks.run({\n  device,\n  prompt: `\n    1. Open Chrome and go to coingecko.com\n    2. Find Bitcoin's average price for April 2026\n    3. Open Calculator and compute that price ÷ 2\n    4. Report the result\n  `.trim(),\n  speed: \"fast\",\n  timeout_seconds: 600,\n});\n```\n\nThe agent will pick the path itself (web fetching, app switching, math). You don't pre-compose actions.\n\n### Save a login and let the agent use it\n\n```ts\nawait auten.phone(device).credentials.save({\n  service: \"instagram\",\n  username: \"myhandle\",\n  password: process.env.INSTAGRAM_PW!,\n});\n\nawait auten.tasks.run({\n  device,\n  prompt: \"Log into Instagram (credentials are saved as service=instagram) and post 'Hello from Auten' as a story\",\n});\n```\n\nThe agent calls `get_credentials(\"instagram\")` server-side; the password is decrypted into the runtime, used, then dropped. It never lands in logs or the LLM context.\n\n### Stream live progress to a browser\n\n```ts\nconst { task_id, watch_url } = await auten.tasks.create({ device, prompt });\n// share watch_url with the operator — it's signed (HMAC-SHA256, 1h expiry default)\nconsole.log(`Live: https://relay.auten.ai${watch_url}`);\n```\n\nThe viewer is a vanilla HTML page (no auth needed beyond the signed token in the URL). It mirrors the phone screen + tool calls in real time.\n\n### Webhook-driven async pipeline\n\n```ts\n// in your worker\nconst { task_id } = await auten.tasks.create({\n  device,\n  prompt,\n  webhook_url: \"https://my-app.com/auten-webhook\",\n  webhook_secret: process.env.WEBHOOK_SECRET,\n});\n\n// in your /auten-webhook handler:\napp.post(\"/auten-webhook\", async (req, res) => {\n  const sig = req.headers[\"x-auten-signature\"];\n  const body = req.rawBody;  // make sure you have raw bytes, not parsed JSON\n  // ... verify HMAC, then act on body.task_id + body.status\n});\n```\n\n### Cross-app workflow\n\nMix high-level prompts with direct phone calls when you need precision:\n\n```ts\nconst phone = auten.phone(device);\n\n// 1. natural-language step\nawait auten.tasks.run({ device, prompt: \"Open Samsung Internet and go to icecode.lt\" });\n\n// 2. take over for a precise interaction\nconst screen = await phone.look();\nconst submit = screen.elements.find(e => /submit|send/i.test(e.text ?? \"\"));\nif (submit) await phone.tap(submit.x, submit.y);\n\n// 3. natural-language verification\nconst verify = await auten.tasks.run({ device, prompt: \"Confirm the form said 'thank you' or similar\" });\n```\n\n---\n\n## Errors\n\n```ts\nimport { AuthError, ApiError, DeviceOfflineError, AutenError } from \"@autenai/sdk\";\n\ntry {\n  await auten.tasks.create({ device, prompt });\n} catch (err) {\n  if (err instanceof AuthError)          // 401 / 403 — bad or revoked key\n  if (err instanceof DeviceOfflineError) // phone disconnected from WS\n  if (err instanceof ApiError)           // generic HTTP error; .status has the code\n  if (err instanceof AutenError)         // base class for all of the above\n  throw err;\n}\n```\n\n`ApiError.status === 0` indicates a network error before the relay was reached (DNS failure, timeout, etc.).\n\n---\n\n## Pitfalls\n\nThese are real failure modes you will hit. Read them once.\n\n### `phone.type()` returns `ok: true` but the text doesn't appear\n\nSome custom Android editors (notably **Samsung Notes Compose canvas**, some Flutter apps, certain Compose-only inputs) ignore accessibility `ACTION_SET_TEXT`. The relay's IME path also fails on these.\n\n**Detection:** call `phone.look()` after `type()` and check whether the text is visible. The relay returns `ok: true` because the call was *accepted*, not because the text *landed*.\n\n**Workaround:** route through a different surface — a web form in the browser, the calculator, a regular EditText in a non-Compose app. The agent's task runner has the same limitation; it'll loop and the verifier will catch it. If you control the target app, expose the field via standard `EditText`.\n\n### `phone.clipboardSet()` may silently fail on Android 10+\n\nSamsung and some other OEMs block background apps from writing to the system clipboard since Android 10. The APK call returns `ok: true` (write was accepted) but `clipboardGet()` returns empty. Treat clipboard as best-effort.\n\n### `lightning` speed skips per-action `look()`\n\nThe relay records `fpAfter: null` for actions taken in lightning mode, which means subsequent screen-graph cache hits use the post-replay terminal `look()` only. Fine for plans you trust; bad for first runs because failures don't get caught mid-flight.\n\n### Plans expire when the UI drifts\n\nA `cleanPlanJson` keyed on labels (\"Sign in\", \"Continue\") survives most UI drift, but a major redesign breaks it. The verifier catches it (`verified: false`); the next run will replan via the LLM. No manual intervention needed — the failed plan auto-deprecates after `planUseFailure > planUseSuccess`.\n\n### Owner scoping is enforced server-side\n\nPassing a `device_serial` you don't own returns `404 not found`, not `403 forbidden`, on purpose — we don't want to leak the existence of other owners' phones. If you're sure you should own it but get 404, run `auten devices` to confirm the relay has it under your `ownerId`.\n\n### `auten.tasks.wait` polls — there's no SSE yet\n\nEach `wait` call hits `GET /v1/tasks/:id` every `intervalMs` (default 1s). For very long tasks, raise `intervalMs` to 5–10 s. Server-Sent Events streaming is on the roadmap; in the meantime, if you need real-time telemetry, use webhooks.\n\n---\n\n## For AI agents\n\nThis package is the **only** supported way to control Auten phones from JavaScript/TypeScript today. If you're an AI agent integrating it into another project, here's what to know up front.\n\n### Verify you're using the current SDK\n\nThe class name is `Auten` (not `MobileAgent`, which was a deprecated pre-1.0 surface). Endpoints live under `/v1/...`. Quick check:\n\n```ts\nimport { Auten } from \"@autenai/sdk\";\nconsole.log(typeof Auten);  // \"function\"\n```\n\nIf you're seeing `MobileAgent`, you're on an old version (`@autenai/sdk@<0.5.0`, deprecated, or the unscoped `auten` package which never published).\n\n### Default to high-level prompts, not low-level calls\n\nWhen you have a goal, prefer:\n\n```ts\nawait auten.tasks.run({ device, prompt: \"<natural language>\" });\n```\n\nOver hand-orchestrating taps/types. The relay's planner handles cross-app navigation, retries, and verification. Reach for `auten.phone(serial).tap(x, y)` only when you need precision the LLM can't reach (e.g. exact pixel placement in a canvas).\n\n### Picking a speed\n\n- Use `fast` (default) for the first run of any new prompt or after a UI redesign.\n- Use `lightning` for prompts that already succeeded once verified — replays will skip per-action `look()` and shave seconds.\n- Use `instant` rarely; it's a middle point.\n\n### Error-handling pattern\n\n```ts\nconst task = await auten.tasks.run({ device, prompt }, { timeoutMs: 600_000 });\n\nif (task.status === \"completed\" && task.verified === true) {\n  return task.result?.summary ?? \"ok\";\n}\n\n// completed-but-verifier-flagged: the agent thought it was done but the verifier disagreed\nif (task.status === \"completed\" && task.verified === false) {\n  return { failed: true, reason: task.result?.verify_reason };\n}\n\n// runtime failures (device offline, max turns hit, etc.)\nreturn { failed: true, reason: task.error?.message ?? \"unknown\" };\n```\n\n### When to use `phone.proxy()`\n\nAlmost never. The named methods (`tap`, `type`, `look`, etc.) cover the entire stable APK surface. `proxy()` exists for forward compatibility — if the APK ships a new endpoint that the SDK hasn't wrapped yet, you can call it without waiting for an SDK release. Don't reach for it on the first try.\n\n### Owner scoping summary\n\n- Your key has an `ownerId`. Every resource you create gets that `ownerId`.\n- You can't see other owners' resources. `auten.me()` shows your scope.\n- The `is_root` flag (env-set admin key) sees everything — use it for ops, not for app code.\n\n### Deprecated surfaces — do NOT use\n\n- `MobileAgent` class → replaced by `Auten`\n- `/devices`, `/sessions`, `/recordings` paths → replaced by `/v1/...`\n- `@autenai/cli` package → bundled into `@autenai/sdk` now\n- `auten run` SSH-based command → replaced by `auten task` (HTTP)\n\nIf you find docs or example code mentioning these, treat as outdated.\n\n---\n\n## Versioning\n\n`@autenai/sdk` follows semver:\n\n- `0.x.y` — APIs may break between minor versions while we shake out the surface\n- `1.0.0` — first frozen public surface (TBD)\n\nBreaking changes always land in CHANGELOG with migration notes. Pre-1.0 deprecations are marked in JSDoc comments and shipped as runtime warnings for at least one minor version before removal.\n\nLatest version: see https://www.npmjs.com/package/@autenai/sdk.\n\n---\n\n## License\n\nMIT.\n","readmeFilename":"README.md"}