@autenai/sdk 0.4.0 → 0.5.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.
Files changed (88) hide show
  1. package/README.md +154 -0
  2. package/bin/auten.js +2 -0
  3. package/dist/cli/add-phone.d.ts +2 -0
  4. package/dist/cli/add-phone.d.ts.map +1 -0
  5. package/dist/cli/add-phone.js +254 -0
  6. package/dist/cli/add-phone.js.map +1 -0
  7. package/dist/cli/autocomplete.d.ts +31 -0
  8. package/dist/cli/autocomplete.d.ts.map +1 -0
  9. package/dist/cli/autocomplete.js +438 -0
  10. package/dist/cli/autocomplete.js.map +1 -0
  11. package/dist/cli/build-apk.d.ts +2 -0
  12. package/dist/cli/build-apk.d.ts.map +1 -0
  13. package/dist/cli/build-apk.js +97 -0
  14. package/dist/cli/build-apk.js.map +1 -0
  15. package/dist/cli/creds.d.ts +2 -0
  16. package/dist/cli/creds.d.ts.map +1 -0
  17. package/dist/cli/creds.js +147 -0
  18. package/dist/cli/creds.js.map +1 -0
  19. package/dist/cli/devices.d.ts +2 -0
  20. package/dist/cli/devices.d.ts.map +1 -0
  21. package/dist/cli/devices.js +38 -0
  22. package/dist/cli/devices.js.map +1 -0
  23. package/dist/cli/index.d.ts +2 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +111 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/keys.d.ts +2 -0
  28. package/dist/cli/keys.d.ts.map +1 -0
  29. package/dist/cli/keys.js +88 -0
  30. package/dist/cli/keys.js.map +1 -0
  31. package/dist/cli/login.d.ts +2 -0
  32. package/dist/cli/login.d.ts.map +1 -0
  33. package/dist/cli/login.js +35 -0
  34. package/dist/cli/login.js.map +1 -0
  35. package/dist/cli/logo.d.ts +2 -0
  36. package/dist/cli/logo.d.ts.map +1 -0
  37. package/dist/cli/logo.js +11 -0
  38. package/dist/cli/logo.js.map +1 -0
  39. package/dist/cli/me.d.ts +2 -0
  40. package/dist/cli/me.d.ts.map +1 -0
  41. package/dist/cli/me.js +19 -0
  42. package/dist/cli/me.js.map +1 -0
  43. package/dist/cli/shell.d.ts +2 -0
  44. package/dist/cli/shell.d.ts.map +1 -0
  45. package/dist/cli/shell.js +22 -0
  46. package/dist/cli/shell.js.map +1 -0
  47. package/dist/cli/task.d.ts +2 -0
  48. package/dist/cli/task.d.ts.map +1 -0
  49. package/dist/cli/task.js +148 -0
  50. package/dist/cli/task.js.map +1 -0
  51. package/dist/cli/tasks.d.ts +2 -0
  52. package/dist/cli/tasks.d.ts.map +1 -0
  53. package/dist/cli/tasks.js +76 -0
  54. package/dist/cli/tasks.js.map +1 -0
  55. package/dist/cli/util.d.ts +46 -0
  56. package/dist/cli/util.d.ts.map +1 -0
  57. package/dist/cli/util.js +134 -0
  58. package/dist/cli/util.js.map +1 -0
  59. package/dist/package.json +56 -0
  60. package/dist/src/client.d.ts +81 -0
  61. package/dist/src/client.d.ts.map +1 -0
  62. package/dist/src/client.js +116 -0
  63. package/dist/src/client.js.map +1 -0
  64. package/dist/src/errors.d.ts +16 -0
  65. package/dist/src/errors.d.ts.map +1 -0
  66. package/dist/src/errors.js +31 -0
  67. package/dist/src/errors.js.map +1 -0
  68. package/dist/src/index.d.ts +7 -0
  69. package/dist/src/index.d.ts.map +1 -0
  70. package/dist/src/index.js +5 -0
  71. package/dist/src/index.js.map +1 -0
  72. package/dist/src/phone.d.ts +115 -0
  73. package/dist/src/phone.d.ts.map +1 -0
  74. package/dist/src/phone.js +123 -0
  75. package/dist/src/phone.js.map +1 -0
  76. package/dist/src/transport.d.ts +14 -0
  77. package/dist/src/transport.d.ts.map +1 -0
  78. package/dist/src/transport.js +71 -0
  79. package/dist/src/transport.js.map +1 -0
  80. package/dist/src/types.d.ts +138 -0
  81. package/dist/src/types.d.ts.map +1 -0
  82. package/dist/src/types.js +2 -0
  83. package/dist/src/types.js.map +1 -0
  84. package/package.json +43 -26
  85. package/dist/index.d.mts +0 -500
  86. package/dist/index.d.ts +0 -500
  87. package/dist/index.js +0 -450
  88. package/dist/index.mjs +0 -418
@@ -0,0 +1,148 @@
1
+ /**
2
+ * `auten task "<prompt>"` — dispatch one task to a phone via the relay's
3
+ * REST API and tail its progress until completion. Replaces the old SSH-
4
+ * based `auten run` command.
5
+ */
6
+ import { Auten } from "../src/index.js";
7
+ import { C, banner, info, fail, ok, warn, loadConfig } from "./util.js";
8
+ function parseArgs(argv) {
9
+ const flags = {};
10
+ const positional = [];
11
+ for (let i = 0; i < argv.length; i++) {
12
+ const a = argv[i];
13
+ if (a.startsWith("--") && argv[i + 1] !== undefined && !argv[i + 1].startsWith("--")) {
14
+ flags[a.slice(2)] = argv[++i];
15
+ }
16
+ else if (a.startsWith("--")) {
17
+ flags[a.slice(2)] = "true";
18
+ }
19
+ else {
20
+ positional.push(a);
21
+ }
22
+ }
23
+ const speed = (flags["speed"] ?? undefined);
24
+ const mode = (flags["mode"] ?? undefined);
25
+ return {
26
+ serial: flags["device"] ?? flags["serial"],
27
+ prompt: flags["prompt"] ?? positional.join(" "),
28
+ speed,
29
+ mode,
30
+ timeoutSec: flags["timeout"] ? Number(flags["timeout"]) : undefined,
31
+ noFollow: flags["no-follow"] === "true",
32
+ webhook: flags["webhook"],
33
+ };
34
+ }
35
+ export async function taskCommand(argv) {
36
+ const opts = parseArgs(argv);
37
+ if (!opts.prompt) {
38
+ fail("Missing prompt.");
39
+ info('Usage: auten task [--device <serial>] [--speed lightning|instant|fast] [--no-follow] "<task>"');
40
+ info('Example: auten task --device a4e0eff... --speed lightning "999÷3"');
41
+ process.exit(1);
42
+ }
43
+ const cfg = loadConfig();
44
+ const auten = new Auten(cfg);
45
+ // Resolve device: explicit flag wins; otherwise pick first online phone.
46
+ let serial = opts.serial;
47
+ if (!serial) {
48
+ info(`No --device given; querying ${cfg.baseUrl} for first online phone...`);
49
+ const candidate = await auten.devices.firstOnline();
50
+ if (!candidate) {
51
+ fail("No online phone found. Run `auten devices` to list yours.");
52
+ process.exit(1);
53
+ }
54
+ serial = candidate.serial;
55
+ ok(`Using ${serial} (${candidate.model || "?"})`);
56
+ }
57
+ banner("auten task");
58
+ console.log(`${C.dim}Phone: ${serial}${C.reset}`);
59
+ if (opts.speed)
60
+ console.log(`${C.dim}Speed: ${opts.speed}${C.reset}`);
61
+ if (opts.mode)
62
+ console.log(`${C.dim}Mode: ${opts.mode}${C.reset}`);
63
+ console.log(`${C.dim}Prompt: ${opts.prompt.slice(0, 200)}${opts.prompt.length > 200 ? "…" : ""}${C.reset}`);
64
+ console.log("");
65
+ const created = await auten.tasks.create({
66
+ device: serial,
67
+ prompt: opts.prompt,
68
+ speed: opts.speed,
69
+ mode: opts.mode,
70
+ timeout_seconds: opts.timeoutSec,
71
+ webhook_url: opts.webhook,
72
+ });
73
+ ok(`Task ${C.bold}${created.task_id}${C.reset} dispatched.`);
74
+ if (created.watch_url) {
75
+ info(`Live: ${cfg.baseUrl}${created.watch_url}`);
76
+ }
77
+ if (opts.noFollow) {
78
+ console.log("");
79
+ console.log(`Run \`auten tasks ${created.task_id}\` to check status.`);
80
+ return;
81
+ }
82
+ // Poll until done. Print step-by-step progress as the BIOS records turns.
83
+ console.log("");
84
+ let lastTurnIndex = -1;
85
+ let lastStatus = "";
86
+ const start = Date.now();
87
+ const timeoutMs = (opts.timeoutSec ?? 600) * 1000;
88
+ while (true) {
89
+ if (Date.now() - start > timeoutMs) {
90
+ warn(`Local follow timed out after ${opts.timeoutSec ?? 600}s — task may still be running.`);
91
+ info(`Check later: auten tasks ${created.task_id}`);
92
+ process.exit(1);
93
+ }
94
+ let task;
95
+ try {
96
+ task = await auten.tasks.get(created.task_id);
97
+ }
98
+ catch (err) {
99
+ warn(`Status fetch failed: ${err.message}; retrying...`);
100
+ await sleep(2000);
101
+ continue;
102
+ }
103
+ // Stream new turns as they arrive (BIOS persists each one).
104
+ if (Array.isArray(task.turns)) {
105
+ for (const t of task.turns) {
106
+ if (t.index > lastTurnIndex) {
107
+ const cost = t.cost_usd ? `${C.dim} $${t.cost_usd.toFixed(4)}${C.reset}` : "";
108
+ const ms = t.duration_ms ? `${C.dim} ${t.duration_ms}ms${C.reset}` : "";
109
+ const flag = t.ok ? `${C.green}✓${C.reset}` : `${C.red}✗${C.reset}`;
110
+ console.log(` ${flag} [${t.source}] ${t.label ?? "(no label)"}${cost}${ms}`);
111
+ lastTurnIndex = t.index;
112
+ }
113
+ }
114
+ }
115
+ if (task.status !== lastStatus) {
116
+ lastStatus = task.status;
117
+ info(`status: ${task.status}`);
118
+ }
119
+ if (task.status === "completed" || task.status === "failed" || task.status === "cancelled") {
120
+ console.log("");
121
+ const r = task.result ?? null;
122
+ const ms = r?.duration_ms ?? Date.now() - start;
123
+ const cost = r?.cost_usd ?? 0;
124
+ if (task.status === "completed") {
125
+ const verified = r?.verified ?? task.verified;
126
+ if (verified === true)
127
+ ok(`done ${C.dim}(${ms}ms, $${cost.toFixed(4)})${C.reset} — ${r?.summary ?? ""}`);
128
+ else if (verified === false)
129
+ warn(`done but verifier flagged failure: ${r?.verify_reason ?? "(no reason)"}`);
130
+ else
131
+ ok(`done ${C.dim}(${ms}ms, $${cost.toFixed(4)})${C.reset}`);
132
+ }
133
+ else if (task.status === "cancelled") {
134
+ warn("cancelled");
135
+ }
136
+ else {
137
+ fail(`failed: ${task.error?.message ?? "(unknown)"}`);
138
+ process.exit(1);
139
+ }
140
+ return;
141
+ }
142
+ await sleep(1000);
143
+ }
144
+ }
145
+ function sleep(ms) {
146
+ return new Promise((r) => setTimeout(r, ms));
147
+ }
148
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../cli/task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function tasksCommand(argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../cli/tasks.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhE"}
@@ -0,0 +1,76 @@
1
+ import { Auten } from "../src/index.js";
2
+ import { C, loadConfig, fail } from "./util.js";
3
+ export async function tasksCommand(argv) {
4
+ const cfg = loadConfig();
5
+ const auten = new Auten(cfg);
6
+ // If first arg looks like a uuid → show one task. Otherwise list.
7
+ const arg = argv[0];
8
+ if (arg && /^[0-9a-f]{8}-/.test(arg)) {
9
+ return showTask(auten, arg);
10
+ }
11
+ return listTasks(auten, argv);
12
+ }
13
+ async function listTasks(auten, argv) {
14
+ const flags = {};
15
+ for (let i = 0; i < argv.length; i++) {
16
+ const a = argv[i];
17
+ if (a.startsWith("--") && argv[i + 1] !== undefined && !argv[i + 1].startsWith("--")) {
18
+ flags[a.slice(2)] = argv[++i];
19
+ }
20
+ }
21
+ try {
22
+ const list = await auten.tasks.list({
23
+ device: flags["device"],
24
+ status: flags["status"],
25
+ limit: flags["limit"] ? Number(flags["limit"]) : 25,
26
+ });
27
+ if (list.length === 0) {
28
+ console.log(`${C.dim}No tasks yet.${C.reset}`);
29
+ return;
30
+ }
31
+ for (const t of list) {
32
+ const status = t.status === "completed" && t.verified ? `${C.green}✓ done${C.reset}` :
33
+ t.status === "completed" ? `${C.yellow}○ done${C.reset}` :
34
+ t.status === "failed" ? `${C.red}✗ fail${C.reset}` :
35
+ t.status === "cancelled" ? `${C.dim}cancel${C.reset}` :
36
+ `${C.cyan}${t.status}${C.reset}`;
37
+ const when = t.completed_at ?? t.created_at ?? "";
38
+ const promptPreview = t.prompt.replace(/\s+/g, " ").slice(0, 80);
39
+ console.log(` ${status} ${C.dim}${t.task_id.slice(0, 8)}${C.reset} ${C.dim}${when?.slice(0, 19)}${C.reset} ${promptPreview}${t.prompt.length > 80 ? "…" : ""}`);
40
+ }
41
+ console.log(`\n${C.dim}${list.length} task(s).${C.reset}`);
42
+ }
43
+ catch (err) {
44
+ fail(err.message);
45
+ process.exit(1);
46
+ }
47
+ }
48
+ async function showTask(auten, id) {
49
+ try {
50
+ const t = await auten.tasks.get(id);
51
+ console.log(`${C.bold}Task${C.reset} ${t.task_id}`);
52
+ console.log(`${C.bold}Device${C.reset} ${t.device_serial}`);
53
+ console.log(`${C.bold}Status${C.reset} ${t.status}${t.verified === true ? ` ${C.green}(verified)${C.reset}` : t.verified === false ? ` ${C.yellow}(verify failed)${C.reset}` : ""}`);
54
+ console.log(`${C.bold}Prompt${C.reset} ${t.prompt}`);
55
+ if (t.result?.summary)
56
+ console.log(`${C.bold}Summary${C.reset} ${t.result.summary}`);
57
+ if (t.result?.cost_usd != null)
58
+ console.log(`${C.bold}Cost${C.reset} $${t.result.cost_usd.toFixed(4)}`);
59
+ if (t.result?.duration_ms != null)
60
+ console.log(`${C.bold}Duration${C.reset} ${t.result.duration_ms}ms`);
61
+ if (t.error)
62
+ console.log(`${C.bold}Error${C.reset} ${C.red}${t.error.message ?? "(no message)"}${C.reset}`);
63
+ if (t.turns && t.turns.length > 0) {
64
+ console.log(`\n${C.bold}Turns:${C.reset}`);
65
+ for (const turn of t.turns) {
66
+ const flag = turn.ok ? `${C.green}✓${C.reset}` : `${C.red}✗${C.reset}`;
67
+ console.log(` ${flag} [${turn.source}] ${turn.label ?? "(no label)"} ${C.dim}$${turn.cost_usd.toFixed(4)} ${turn.duration_ms ?? "?"}ms${C.reset}`);
68
+ }
69
+ }
70
+ }
71
+ catch (err) {
72
+ fail(err.message);
73
+ process.exit(1);
74
+ }
75
+ }
76
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../cli/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { type Interface } from "readline";
2
+ export declare const C: {
3
+ reset: string;
4
+ bold: string;
5
+ dim: string;
6
+ green: string;
7
+ yellow: string;
8
+ red: string;
9
+ cyan: string;
10
+ blue: string;
11
+ magenta: string;
12
+ bgDim: string;
13
+ };
14
+ export declare const banner: (s: string) => void;
15
+ export declare const step: (n: number, total: number, t: string) => void;
16
+ export declare const ok: (m: string) => void;
17
+ export declare const warn: (m: string) => void;
18
+ export declare const info: (m: string) => void;
19
+ export declare const fail: (m: string) => void;
20
+ export declare const sleep: (ms: number) => Promise<unknown>;
21
+ export interface Rc {
22
+ apiKey?: string;
23
+ baseUrl?: string;
24
+ lastSerial?: string;
25
+ model?: string;
26
+ budget?: string;
27
+ /** Speed multiplier for deterministic tiers (smart-replay, app-plan). */
28
+ speed?: number;
29
+ }
30
+ export declare function readRc(): Rc;
31
+ export declare function writeRc(rc: Rc): void;
32
+ export declare function rcPath(): string;
33
+ export declare function readHistory(): string[];
34
+ export declare function appendHistory(line: string): void;
35
+ /**
36
+ * Resolve config in this order: explicit args → env vars → ~/.sce-agentrc.
37
+ * Returns the API key + base URL or throws if no key is found.
38
+ */
39
+ export declare function loadConfig(): {
40
+ apiKey: string;
41
+ baseUrl: string;
42
+ };
43
+ export declare function rl(): Interface;
44
+ export declare function prompt(question: string): Promise<string>;
45
+ export declare function promptHidden(question: string): Promise<string>;
46
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../cli/util.ts"],"names":[],"mappings":"AAOA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAE3D,eAAO,MAAM,CAAC;;;;;;;;;;;CAMb,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,GAAG,MAAM,SAAsD,CAAC;AACvF,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,EAAE,OAAO,MAAM,EAAE,GAAG,MAAM,SAC8B,CAAC;AACvF,eAAO,MAAM,EAAE,GAAI,GAAG,MAAM,SAAgD,CAAC;AAC7E,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,SAAiD,CAAC;AAChF,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,SAA8C,CAAC;AAC7E,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,SAA8C,CAAC;AAC7E,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,qBAAwC,CAAC;AAOzE,MAAM,WAAW,EAAE;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,MAAM,IAAI,EAAE,CAO3B;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAGpC;AAED,wBAAgB,MAAM,IAAI,MAAM,CAAoB;AAEpD,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAMtC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAUhD;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAUhE;AAED,wBAAgB,EAAE,IAAI,SAAS,CAE9B;AAED,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxD;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCpE"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Shared CLI helpers — output formatting, config file location, prompts.
3
+ * Kept stdlib-only on purpose so the package has zero CLI deps beyond `ws`.
4
+ */
5
+ import { existsSync, readFileSync, writeFileSync, chmodSync } from "fs";
6
+ import { resolve } from "path";
7
+ import { homedir } from "os";
8
+ import { createInterface } from "readline";
9
+ export const C = {
10
+ reset: "\x1b[0m", bold: "\x1b[1m", dim: "\x1b[2m",
11
+ green: "\x1b[32m", yellow: "\x1b[33m", red: "\x1b[31m",
12
+ cyan: "\x1b[36m", blue: "\x1b[34m", magenta: "\x1b[35m",
13
+ // 256-colour mid-grey background, subtle on both light and dark themes.
14
+ bgDim: "\x1b[48;5;236m",
15
+ };
16
+ export const banner = (s) => console.log(`\n${C.cyan}${C.bold}${s}${C.reset}`);
17
+ export const step = (n, total, t) => console.log(`\n${C.cyan}${C.bold}[${n}/${total}]${C.reset} ${C.bold}${t}${C.reset}`);
18
+ export const ok = (m) => console.log(` ${C.green}✓${C.reset} ${m}`);
19
+ export const warn = (m) => console.log(` ${C.yellow}⚠${C.reset} ${m}`);
20
+ export const info = (m) => console.log(` ${C.dim}→${C.reset} ${m}`);
21
+ export const fail = (m) => console.log(` ${C.red}✗${C.reset} ${m}`);
22
+ export const sleep = (ms) => new Promise(r => setTimeout(r, ms));
23
+ const RC_PATH = resolve(homedir(), ".autenrc");
24
+ const LEGACY_RC_PATH = resolve(homedir(), ".sce-agentrc");
25
+ const HISTORY_PATH = resolve(homedir(), ".auten_history");
26
+ const HISTORY_MAX = 1000;
27
+ export function readRc() {
28
+ for (const p of [RC_PATH, LEGACY_RC_PATH]) {
29
+ if (existsSync(p)) {
30
+ try {
31
+ return JSON.parse(readFileSync(p, "utf-8"));
32
+ }
33
+ catch { /* keep going */ }
34
+ }
35
+ }
36
+ return {};
37
+ }
38
+ export function writeRc(rc) {
39
+ writeFileSync(RC_PATH, JSON.stringify(rc, null, 2));
40
+ try {
41
+ chmodSync(RC_PATH, 0o600);
42
+ }
43
+ catch { }
44
+ }
45
+ export function rcPath() { return RC_PATH; }
46
+ export function readHistory() {
47
+ if (!existsSync(HISTORY_PATH))
48
+ return [];
49
+ try {
50
+ const lines = readFileSync(HISTORY_PATH, "utf-8").split("\n").map(l => l.trim()).filter(Boolean);
51
+ return lines.slice(-HISTORY_MAX);
52
+ }
53
+ catch {
54
+ return [];
55
+ }
56
+ }
57
+ export function appendHistory(line) {
58
+ const trimmed = line.trim();
59
+ if (!trimmed)
60
+ return;
61
+ try {
62
+ const existing = readHistory();
63
+ if (existing[existing.length - 1] === trimmed)
64
+ return;
65
+ const next = [...existing, trimmed].slice(-HISTORY_MAX);
66
+ writeFileSync(HISTORY_PATH, next.join("\n") + "\n");
67
+ try {
68
+ chmodSync(HISTORY_PATH, 0o600);
69
+ }
70
+ catch { }
71
+ }
72
+ catch { /* not fatal */ }
73
+ }
74
+ /**
75
+ * Resolve config in this order: explicit args → env vars → ~/.sce-agentrc.
76
+ * Returns the API key + base URL or throws if no key is found.
77
+ */
78
+ export function loadConfig() {
79
+ const rc = readRc();
80
+ const apiKey = process.env.AUTEN_API_KEY || process.env.SCE_API_KEY || rc.apiKey;
81
+ const baseUrl = process.env.AUTEN_BASE_URL || process.env.SCE_BASE_URL || rc.baseUrl || "https://relay.auten.ai";
82
+ if (!apiKey) {
83
+ fail("No API key configured.");
84
+ info("Run `auten login` first, or set AUTEN_API_KEY in the environment.");
85
+ process.exit(1);
86
+ }
87
+ return { apiKey, baseUrl };
88
+ }
89
+ export function rl() {
90
+ return createInterface({ input: process.stdin, output: process.stdout });
91
+ }
92
+ export function prompt(question) {
93
+ const r = rl();
94
+ return new Promise(resolve => r.question(question, answer => { r.close(); resolve(answer.trim()); }));
95
+ }
96
+ export async function promptHidden(question) {
97
+ // Best-effort hidden input — masks characters as they're typed.
98
+ process.stdout.write(question);
99
+ return new Promise(resolve => {
100
+ const stdin = process.stdin;
101
+ let buf = "";
102
+ const wasRaw = stdin.isRaw === true;
103
+ stdin.setRawMode?.(true);
104
+ stdin.resume();
105
+ stdin.setEncoding("utf-8");
106
+ const onData = (ch) => {
107
+ switch (ch) {
108
+ case "\n":
109
+ case "\r":
110
+ case "":
111
+ stdin.setRawMode?.(wasRaw);
112
+ stdin.pause();
113
+ stdin.removeListener("data", onData);
114
+ process.stdout.write("\n");
115
+ resolve(buf);
116
+ return;
117
+ case "":
118
+ process.exit(130);
119
+ return;
120
+ case "":
121
+ if (buf.length > 0) {
122
+ buf = buf.slice(0, -1);
123
+ process.stdout.write("\b \b");
124
+ }
125
+ return;
126
+ default:
127
+ buf += ch;
128
+ process.stdout.write("*");
129
+ }
130
+ };
131
+ stdin.on("data", onData);
132
+ });
133
+ }
134
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../cli/util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@autenai/sdk",
3
+ "version": "0.5.0",
4
+ "description": "SDK + CLI for controlling Android phones through the Auten relay — send tasks, manage credentials, watch live screens.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "dist/src/index.js",
8
+ "types": "dist/src/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/src/index.d.ts",
12
+ "default": "./dist/src/index.js"
13
+ }
14
+ },
15
+ "bin": {
16
+ "auten": "bin/auten.js"
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "bin",
21
+ "README.md",
22
+ "LICENSE"
23
+ ],
24
+ "engines": {
25
+ "node": ">=18.17"
26
+ },
27
+ "scripts": {
28
+ "build": "tsc",
29
+ "watch": "tsc --watch",
30
+ "typecheck": "tsc --noEmit",
31
+ "prepack": "npm run build"
32
+ },
33
+ "dependencies": {
34
+ "qrcode-terminal": "^0.12.0",
35
+ "ws": "^8.18.0"
36
+ },
37
+ "devDependencies": {
38
+ "@types/node": "^22.0.0",
39
+ "@types/pngjs": "^6.0.5",
40
+ "@types/qrcode-terminal": "^0.12.2",
41
+ "@types/ws": "^8.5.0",
42
+ "pngjs": "^7.0.0",
43
+ "tsx": "^4.19.0",
44
+ "typescript": "^5.6.0"
45
+ },
46
+ "keywords": [
47
+ "android",
48
+ "automation",
49
+ "mobile",
50
+ "accessibility",
51
+ "agent",
52
+ "auten",
53
+ "phone-control",
54
+ "ai"
55
+ ]
56
+ }
@@ -0,0 +1,81 @@
1
+ import { Phone } from "./phone.js";
2
+ import type { Device, Task, ApiKey, ApiKeyWithSecret, Whoami, CreateTaskInput, CreateTaskResponse, ListTasksOptions, CreateKeyInput } from "./types.js";
3
+ export type AutenConfig = {
4
+ apiKey: string;
5
+ baseUrl?: string;
6
+ /** Per-request timeout in ms. Default 60s. */
7
+ timeoutMs?: number;
8
+ };
9
+ /**
10
+ * Auten — top-level SDK client. Wraps the relay's REST API with typed
11
+ * methods grouped by resource:
12
+ *
13
+ * const auten = new Auten({ apiKey: process.env.AUTEN_API_KEY });
14
+ * const me = await auten.me();
15
+ * const devices = await auten.devices.list();
16
+ * const { task_id } = await auten.tasks.create({ device: devices[0].serial, prompt: "open chrome" });
17
+ * const result = await auten.tasks.wait(task_id);
18
+ * const phone = auten.phone(devices[0].serial);
19
+ * await phone.tap(500, 800);
20
+ */
21
+ export declare class Auten {
22
+ private readonly t;
23
+ constructor(config: AutenConfig);
24
+ get baseUrl(): string;
25
+ /** Identity + counters for the calling key. */
26
+ me(): Promise<Whoami>;
27
+ readonly devices: {
28
+ list: () => Promise<Device[]>;
29
+ get: (serial: string) => Promise<Device | null>;
30
+ /** First device that's currently online, or null. */
31
+ firstOnline: () => Promise<Device | null>;
32
+ stats: (serial: string) => Promise<{
33
+ serial: string;
34
+ online: boolean;
35
+ graph_edges: number;
36
+ task_count: number;
37
+ cache_hit_rate: number;
38
+ }>;
39
+ };
40
+ readonly tasks: {
41
+ create: (input: CreateTaskInput) => Promise<CreateTaskResponse>;
42
+ get: (id: string) => Promise<Task>;
43
+ list: (opts?: ListTasksOptions) => Promise<Task[]>;
44
+ cancel: (id: string) => Promise<{
45
+ task_id: string;
46
+ status: string;
47
+ }>;
48
+ /**
49
+ * Poll until the task reaches a terminal state. Backs off from `intervalMs`
50
+ * (default 1s) and aborts at `timeoutMs` (default 5 min).
51
+ * Returns the final Task object.
52
+ */
53
+ wait: (id: string, opts?: {
54
+ intervalMs?: number;
55
+ timeoutMs?: number;
56
+ }) => Promise<Task>;
57
+ /**
58
+ * One-shot helper: create + wait. Returns the final Task.
59
+ *
60
+ * const result = await auten.tasks.run({ device, prompt: "999÷3", speed: "lightning" });
61
+ * console.log(result.verified, result.result?.summary);
62
+ */
63
+ run: (input: CreateTaskInput, waitOpts?: {
64
+ intervalMs?: number;
65
+ timeoutMs?: number;
66
+ }) => Promise<Task>;
67
+ };
68
+ readonly keys: {
69
+ list: () => Promise<ApiKey[]>;
70
+ /** Returns the new key with the FULL secret in `key`. Store it — the
71
+ * listing endpoint never reveals it again. */
72
+ create: (input?: CreateKeyInput) => Promise<ApiKeyWithSecret>;
73
+ revoke: (id: string) => Promise<{
74
+ ok: boolean;
75
+ id: string;
76
+ }>;
77
+ };
78
+ /** Phone handle for direct control / per-device credentials. */
79
+ phone(serial: string): Phone;
80
+ }
81
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EACV,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAC9C,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EACtE,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAY;gBAElB,MAAM,EAAE,WAAW;IAI/B,IAAI,OAAO,IAAI,MAAM,CAA2B;IAEhD,+CAA+C;IAC/C,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC;IAKrB,QAAQ,CAAC,OAAO;oBACE,OAAO,CAAC,MAAM,EAAE,CAAC;sBAIb,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QAInD,qDAAqD;2BAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;wBAI7B,MAAM,KAAG,OAAO,CAAC;YAC/B,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,OAAO,CAAC;YAChB,WAAW,EAAE,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC;YACnB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;MACF;IAGF,QAAQ,CAAC,KAAK;wBACI,eAAe,KAAG,OAAO,CAAC,kBAAkB,CAAC;kBAWnD,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;sBACb,gBAAgB,KAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;qBAS7C,MAAM,KAAG,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAGlE;;;;WAIG;mBACc,MAAM,SAAQ;YAAE,UAAU,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,KAAQ,OAAO,CAAC,IAAI,CAAC;QAgB/F;;;;;WAKG;qBACgB,eAAe,aAAa;YAAE,UAAU,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,KAAG,OAAO,CAAC,IAAI,CAAC;MAI1G;IAGF,QAAQ,CAAC,IAAI;oBACK,OAAO,CAAC,MAAM,EAAE,CAAC;QAIjC;uDAC+C;yBAC/B,cAAc,KAAQ,OAAO,CAAC,gBAAgB,CAAC;qBAElD,MAAM,KAAG,OAAO,CAAC;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;MAE1D;IAEF,gEAAgE;IAChE,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK;CAG7B"}