autodev-cli 1.4.127 → 1.4.129
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -0
- package/out/cli.js +2 -0
- package/out/cli.js.map +1 -1
- package/out/commands/login.d.ts +2 -0
- package/out/commands/login.js +242 -0
- package/out/commands/login.js.map +1 -0
- package/out/commands/office.js +128 -102
- package/out/commands/office.js.map +1 -1
- package/out/core/officeAuth.d.ts +17 -0
- package/out/core/officeAuth.js +147 -0
- package/out/core/officeAuth.js.map +1 -0
- package/out/core/userConfig.d.ts +14 -0
- package/out/core/userConfig.js +85 -0
- package/out/core/userConfig.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,6 +4,31 @@
|
|
|
4
4
|
either run an autonomous loop that works through `TODO.md` with the provider of your choice,
|
|
5
5
|
or wire the folder up as an MCP-only operator so a plain chat client becomes a live office agent.
|
|
6
6
|
|
|
7
|
+
## Quickstart — run a whole office in one command
|
|
8
|
+
|
|
9
|
+
Create an office (with its characters) in the [pixel-office](https://app.pixeloffice.org)
|
|
10
|
+
web UI, then:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm i -g autodev-cli
|
|
14
|
+
autodev login # once: sign in, stores a token in ~/.autodev/config.json
|
|
15
|
+
autodev office <slug> # runs your WHOLE office — one loop per character
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`autodev office <slug>` binds and starts every character, and **auto-starts new
|
|
19
|
+
web agents** as they appear in the office. No `--url`/`--token` needed after
|
|
20
|
+
`autodev login` (flags still override). Press **Ctrl+C** to stop every loop.
|
|
21
|
+
|
|
22
|
+
- `autodev login` — email + password (mints a `pat_` token), or `--token pat_…`
|
|
23
|
+
to store a pasted one, or `--url` to point at a different server (default
|
|
24
|
+
`https://app.pixeloffice.org`). The token is **never printed**.
|
|
25
|
+
- Both `login` and `office` run a **preflight**: a green `✓ connected as <who> · N offices`
|
|
26
|
+
or a red `✗ <reason> — run \`autodev login\`` (non-zero exit).
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Single-workspace loop
|
|
31
|
+
|
|
7
32
|
```bash
|
|
8
33
|
npm install -g autodev-cli
|
|
9
34
|
autodev init . # scaffold TODO.md + .autodev/settings.json
|
|
@@ -131,6 +156,34 @@ Press **Ctrl+C** to stop gracefully.
|
|
|
131
156
|
> one per line, run top to bottom. The scaffolded template ships with no example task
|
|
132
157
|
> on purpose — a stray `[ ]` line is a real task the agent would execute first.
|
|
133
158
|
|
|
159
|
+
### `autodev login`
|
|
160
|
+
Authenticate to a pixel-office server once and store a `pat_` token in
|
|
161
|
+
`~/.autodev/config.json` (mode `0600`) so `autodev office` needs no `--url`/`--token`.
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
autodev login # prompts for URL/email/password
|
|
165
|
+
autodev login --email you@co.com --password … # non-interactive
|
|
166
|
+
autodev login --token pat_xxx # store a pasted token
|
|
167
|
+
autodev login --url https://my.office.host # a different server
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Flags: `--url`, `--email`, `--password`, `--token <pat_…>`, `--name <token-name>`.
|
|
171
|
+
The token is never printed; login runs a preflight and refuses to store a token it can't use.
|
|
172
|
+
|
|
173
|
+
### `autodev office <slug>`
|
|
174
|
+
Run a **whole office**: bind + start a loop for every character and auto-start new
|
|
175
|
+
web agents as they appear. Falls back to the stored `autodev login` config when
|
|
176
|
+
`--url`/`--token` are omitted (flags override).
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
autodev office my-team # uses stored login
|
|
180
|
+
autodev office my-team -p claude-cli # force one provider for every character
|
|
181
|
+
autodev office my-team --no-watch # don't keep watching for new characters
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Flags: `--url`, `--token`, `--base-dir <dir>`, `-p/--provider`, `--interval <sec>`, `--no-watch`.
|
|
185
|
+
Press **Ctrl+C** to stop all loops.
|
|
186
|
+
|
|
134
187
|
### `autodev connect [path]`
|
|
135
188
|
Bind the workspace to a pixel-office endpoint.
|
|
136
189
|
|
package/out/cli.js
CHANGED
|
@@ -48,6 +48,7 @@ const export_1 = require("./commands/export");
|
|
|
48
48
|
const import_1 = require("./commands/import");
|
|
49
49
|
const mcpOperate_1 = require("./commands/mcpOperate");
|
|
50
50
|
const office_1 = require("./commands/office");
|
|
51
|
+
const login_1 = require("./commands/login");
|
|
51
52
|
const connect_2 = require("./connect");
|
|
52
53
|
const logger_1 = require("./logger");
|
|
53
54
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
@@ -124,6 +125,7 @@ const program = new commander_1.Command()
|
|
|
124
125
|
(0, import_1.importCommand)(program);
|
|
125
126
|
(0, mcpOperate_1.mcpOperateCommand)(program);
|
|
126
127
|
(0, office_1.officeCommand)(program);
|
|
128
|
+
(0, login_1.loginCommand)(program);
|
|
127
129
|
program.parseAsync(process.argv).catch((err) => {
|
|
128
130
|
console.error(err.message);
|
|
129
131
|
process.exit(1);
|
package/out/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loginCommand = loginCommand;
|
|
37
|
+
const http = __importStar(require("http"));
|
|
38
|
+
const https = __importStar(require("https"));
|
|
39
|
+
const readline = __importStar(require("readline"));
|
|
40
|
+
const url_1 = require("url");
|
|
41
|
+
const logger_1 = require("../logger");
|
|
42
|
+
const userConfig_1 = require("../core/userConfig");
|
|
43
|
+
const officeAuth_1 = require("../core/officeAuth");
|
|
44
|
+
/** Raw request with a cookie jar + JSON body (built-in http/https, no deps). */
|
|
45
|
+
function request(urlStr, opts) {
|
|
46
|
+
return new Promise((resolve, reject) => {
|
|
47
|
+
let parsed;
|
|
48
|
+
try {
|
|
49
|
+
parsed = new url_1.URL(urlStr);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
reject(new Error(`Invalid URL: ${urlStr}`));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const lib = parsed.protocol === 'http:' ? http : https;
|
|
56
|
+
const req = lib.request(urlStr, {
|
|
57
|
+
method: opts.method ?? 'GET',
|
|
58
|
+
headers: { 'Accept': 'application/json', 'User-Agent': 'autodev-cli', ...opts.headers },
|
|
59
|
+
}, (res) => {
|
|
60
|
+
const chunks = [];
|
|
61
|
+
res.on('data', (c) => chunks.push(c));
|
|
62
|
+
res.on('end', () => resolve({
|
|
63
|
+
status: res.statusCode ?? 0,
|
|
64
|
+
headers: res.headers,
|
|
65
|
+
body: Buffer.concat(chunks).toString('utf8'),
|
|
66
|
+
}));
|
|
67
|
+
});
|
|
68
|
+
req.setTimeout(opts.timeoutMs ?? 15_000, () => { req.destroy(new Error(`Timed out fetching ${urlStr}`)); });
|
|
69
|
+
req.on('error', reject);
|
|
70
|
+
if (opts.body) {
|
|
71
|
+
req.write(opts.body);
|
|
72
|
+
}
|
|
73
|
+
req.end();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/** Fold set-cookie headers into a name→value jar. */
|
|
77
|
+
function absorbCookies(jar, res) {
|
|
78
|
+
const raw = res.headers['set-cookie'];
|
|
79
|
+
if (!raw) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
for (const line of Array.isArray(raw) ? raw : [raw]) {
|
|
83
|
+
const pair = line.split(';', 1)[0];
|
|
84
|
+
const eq = pair.indexOf('=');
|
|
85
|
+
if (eq > 0) {
|
|
86
|
+
jar.set(pair.slice(0, eq).trim(), pair.slice(eq + 1).trim());
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const cookieHeader = (jar) => [...jar.entries()].map(([k, v]) => `${k}=${v}`).join('; ');
|
|
91
|
+
/** Laravel expects the X-XSRF-TOKEN header to be the URL-DECODED cookie value. */
|
|
92
|
+
function xsrf(jar) {
|
|
93
|
+
const c = jar.get('XSRF-TOKEN');
|
|
94
|
+
if (!c) {
|
|
95
|
+
return '';
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
return decodeURIComponent(c);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return c;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/** Prompt for a line on the TTY (visible). */
|
|
105
|
+
function ask(question) {
|
|
106
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
107
|
+
return new Promise((resolve) => rl.question(question, (a) => { rl.close(); resolve(a.trim()); }));
|
|
108
|
+
}
|
|
109
|
+
/** Prompt for a secret without echoing it to the terminal. */
|
|
110
|
+
function askHidden(question) {
|
|
111
|
+
return new Promise((resolve) => {
|
|
112
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
113
|
+
// Mute echo: swallow everything except the prompt itself.
|
|
114
|
+
rl._writeToOutput = (s) => {
|
|
115
|
+
if (s.includes(question)) {
|
|
116
|
+
process.stdout.write(question);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
rl.question(question, (a) => { rl.close(); process.stdout.write('\n'); resolve(a); });
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/** Cookie-dance login → mint and return a pat_ personal-access token. */
|
|
123
|
+
async function mintToken(base, email, password, name) {
|
|
124
|
+
const jar = new Map();
|
|
125
|
+
// 1. Prime the CSRF cookie.
|
|
126
|
+
const csrfRes = await request(`${base}/api/csrf-token`, { headers: {} });
|
|
127
|
+
absorbCookies(jar, csrfRes);
|
|
128
|
+
if (!jar.get('XSRF-TOKEN')) {
|
|
129
|
+
throw new Error(`Could not obtain a CSRF token from ${base} (HTTP ${csrfRes.status}). Is --url correct?`);
|
|
130
|
+
}
|
|
131
|
+
// 2. Log in (session lives in the cookie jar; no token returned here).
|
|
132
|
+
const loginRes = await request(`${base}/api/auth/login`, {
|
|
133
|
+
method: 'POST',
|
|
134
|
+
headers: {
|
|
135
|
+
'Content-Type': 'application/json',
|
|
136
|
+
'X-XSRF-TOKEN': xsrf(jar),
|
|
137
|
+
'Cookie': cookieHeader(jar),
|
|
138
|
+
},
|
|
139
|
+
body: JSON.stringify({ email, password }),
|
|
140
|
+
});
|
|
141
|
+
absorbCookies(jar, loginRes);
|
|
142
|
+
if (loginRes.status === 401 || loginRes.status === 422) {
|
|
143
|
+
throw new Error('Login failed — check your email and password.');
|
|
144
|
+
}
|
|
145
|
+
if (loginRes.status < 200 || loginRes.status >= 300) {
|
|
146
|
+
throw new Error(`Login failed (HTTP ${loginRes.status}): ${loginRes.body.slice(0, 200)}`);
|
|
147
|
+
}
|
|
148
|
+
// 3. Mint a personal-access token (Bearer pat_…), shown once.
|
|
149
|
+
const tokRes = await request(`${base}/api/auth/tokens`, {
|
|
150
|
+
method: 'POST',
|
|
151
|
+
headers: {
|
|
152
|
+
'Content-Type': 'application/json',
|
|
153
|
+
'X-XSRF-TOKEN': xsrf(jar),
|
|
154
|
+
'Cookie': cookieHeader(jar),
|
|
155
|
+
},
|
|
156
|
+
body: JSON.stringify({ name }),
|
|
157
|
+
});
|
|
158
|
+
if (tokRes.status < 200 || tokRes.status >= 300) {
|
|
159
|
+
throw new Error(`Could not mint a token (HTTP ${tokRes.status}): ${tokRes.body.slice(0, 200)}`);
|
|
160
|
+
}
|
|
161
|
+
let token;
|
|
162
|
+
try {
|
|
163
|
+
const j = JSON.parse(tokRes.body);
|
|
164
|
+
token = j?.data?.token ?? j?.token;
|
|
165
|
+
}
|
|
166
|
+
catch { /* fall through to the missing-token error */ }
|
|
167
|
+
if (!token) {
|
|
168
|
+
throw new Error('Token endpoint returned no token.');
|
|
169
|
+
}
|
|
170
|
+
return token;
|
|
171
|
+
}
|
|
172
|
+
function loginCommand(program) {
|
|
173
|
+
program
|
|
174
|
+
.command('login')
|
|
175
|
+
.description('Authenticate to a pixel-office server and store a token so `autodev office` needs no --url/--token')
|
|
176
|
+
.option('--url <baseUrl>', 'Pixel-office base URL', process.env.AUTODEV_SERVER_URL)
|
|
177
|
+
.option('--email <email>', 'Account email (else prompted)')
|
|
178
|
+
.option('--password <password>', 'Account password (else prompted, hidden)')
|
|
179
|
+
.option('--token <pat_…>', 'Store a pasted personal-access token instead of email/password')
|
|
180
|
+
.option('--name <name>', 'Name for the minted token', 'autodev-cli')
|
|
181
|
+
.action(async (opts) => {
|
|
182
|
+
const stored = (0, userConfig_1.loadUserConfig)();
|
|
183
|
+
let base = String(opts.url ?? stored.baseUrl ?? userConfig_1.DEFAULT_BASE_URL).replace(/\/+$/, '');
|
|
184
|
+
if (!opts.url && !stored.baseUrl && process.stdin.isTTY) {
|
|
185
|
+
const typed = (await ask(`Pixel-office URL [${userConfig_1.DEFAULT_BASE_URL}]: `)).replace(/\/+$/, '');
|
|
186
|
+
if (typed) {
|
|
187
|
+
base = typed;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
logger_1.log.section('🔐 AutoAIDev — Login');
|
|
191
|
+
logger_1.log.info(`Server: ${base}`);
|
|
192
|
+
let token;
|
|
193
|
+
try {
|
|
194
|
+
if (opts.token) {
|
|
195
|
+
token = String(opts.token).trim();
|
|
196
|
+
if (!token) {
|
|
197
|
+
throw new Error('Empty --token.');
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
let email = opts.email;
|
|
202
|
+
let password = opts.password;
|
|
203
|
+
if (!email) {
|
|
204
|
+
if (!process.stdin.isTTY) {
|
|
205
|
+
throw new Error('No --email given and no TTY to prompt. Pass --email/--password or --token.');
|
|
206
|
+
}
|
|
207
|
+
email = await ask('Email: ');
|
|
208
|
+
}
|
|
209
|
+
if (!password) {
|
|
210
|
+
if (!process.stdin.isTTY) {
|
|
211
|
+
throw new Error('No --password given and no TTY to prompt. Pass --password or --token.');
|
|
212
|
+
}
|
|
213
|
+
password = await askHidden('Password: ');
|
|
214
|
+
}
|
|
215
|
+
if (!email || !password) {
|
|
216
|
+
throw new Error('Email and password are required.');
|
|
217
|
+
}
|
|
218
|
+
token = await mintToken(base, email, password, opts.name);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (err) {
|
|
222
|
+
logger_1.log.error(`✗ ${err.message}`);
|
|
223
|
+
process.exit(1);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
// Preflight BEFORE persisting: don't store a token we can't use.
|
|
227
|
+
const pf = await (0, officeAuth_1.preflight)(base, token);
|
|
228
|
+
if (!pf.ok) {
|
|
229
|
+
logger_1.log.error(`✗ ${pf.reason} — check --url and credentials.`);
|
|
230
|
+
process.exit(1);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
// Never print the token.
|
|
234
|
+
(0, userConfig_1.saveUserConfig)({ baseUrl: base, token });
|
|
235
|
+
const who = pf.who ? `as ${pf.who} ` : '';
|
|
236
|
+
const nOffices = typeof pf.offices === 'number' ? `· ${pf.offices} office${pf.offices === 1 ? '' : 's'}` : '';
|
|
237
|
+
logger_1.log.success(`✓ connected ${who}${nOffices}`.trim());
|
|
238
|
+
logger_1.log.gray(' saved to: ~/.autodev/config.json');
|
|
239
|
+
logger_1.log.gray(' next: autodev office <slug>');
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
package/out/commands/office.js
CHANGED
|
@@ -37,12 +37,12 @@ exports.officeCommand = officeCommand;
|
|
|
37
37
|
const os = __importStar(require("os"));
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
39
|
const path = __importStar(require("path"));
|
|
40
|
-
const http = __importStar(require("http"));
|
|
41
|
-
const https = __importStar(require("https"));
|
|
42
40
|
const url_1 = require("url");
|
|
43
41
|
const child_process_1 = require("child_process");
|
|
44
42
|
const logger_1 = require("../logger");
|
|
45
43
|
const connect_1 = require("../connect");
|
|
44
|
+
const officeAuth_1 = require("../core/officeAuth");
|
|
45
|
+
const userConfig_1 = require("../core/userConfig");
|
|
46
46
|
// ---------------------------------------------------------------------------
|
|
47
47
|
// `autodev office <slug>` — run a WHOLE office with one command.
|
|
48
48
|
//
|
|
@@ -90,51 +90,6 @@ function toAutodevProvider(provider) {
|
|
|
90
90
|
}
|
|
91
91
|
return 'claude-cli';
|
|
92
92
|
}
|
|
93
|
-
/** GET JSON with a `pat_` Bearer token (built-in http/https, no deps). */
|
|
94
|
-
function fetchJsonAuth(url, token, timeoutMs = 15_000) {
|
|
95
|
-
return new Promise((resolve, reject) => {
|
|
96
|
-
let parsed;
|
|
97
|
-
try {
|
|
98
|
-
parsed = new url_1.URL(url);
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
reject(new Error(`Invalid URL: ${url}`));
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
const lib = parsed.protocol === 'http:' ? http : https;
|
|
105
|
-
const req = lib.request(url, {
|
|
106
|
-
method: 'GET',
|
|
107
|
-
headers: {
|
|
108
|
-
'Accept': 'application/json',
|
|
109
|
-
'Authorization': `Bearer ${token}`,
|
|
110
|
-
'User-Agent': 'autodev-cli',
|
|
111
|
-
},
|
|
112
|
-
}, (res) => {
|
|
113
|
-
const chunks = [];
|
|
114
|
-
res.on('data', (c) => chunks.push(c));
|
|
115
|
-
res.on('end', () => {
|
|
116
|
-
const body = Buffer.concat(chunks).toString('utf8');
|
|
117
|
-
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
|
118
|
-
try {
|
|
119
|
-
resolve(JSON.parse(body));
|
|
120
|
-
}
|
|
121
|
-
catch (e) {
|
|
122
|
-
reject(new Error(`Invalid JSON from ${url}: ${e.message}`));
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
else if (res.statusCode === 401 || res.statusCode === 403) {
|
|
126
|
-
reject(new Error(`Auth failed (HTTP ${res.statusCode}) — check --token. ${body.slice(0, 200)}`));
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
reject(new Error(`HTTP ${res.statusCode} from ${url}: ${body.slice(0, 300)}`));
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
req.setTimeout(timeoutMs, () => { req.destroy(new Error(`Timed out after ${timeoutMs}ms fetching ${url}`)); });
|
|
134
|
-
req.on('error', reject);
|
|
135
|
-
req.end();
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
93
|
/** Normalise the /agents roster response (data[] | data.agents[] | agents[] | bare array). */
|
|
139
94
|
function normalizeRoster(json) {
|
|
140
95
|
const raw = json;
|
|
@@ -192,14 +147,13 @@ function officeCommand(program) {
|
|
|
192
147
|
.option('--interval <seconds>', 'Watcher poll interval for new characters (default 15; 0 disables the watcher)', '15')
|
|
193
148
|
.option('--no-watch', 'Do not keep watching for new characters after the initial launch')
|
|
194
149
|
.action(async (slug, opts) => {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
}
|
|
150
|
+
// Flags (and their env defaults) win; otherwise fall back to the stored
|
|
151
|
+
// `autodev login` config (~/.autodev/config.json), then the prod default URL.
|
|
152
|
+
const stored = (0, userConfig_1.loadUserConfig)();
|
|
153
|
+
const base = String(opts.url ?? stored.baseUrl ?? userConfig_1.DEFAULT_BASE_URL).replace(/\/+$/, '');
|
|
154
|
+
const token = String(opts.token ?? stored.token ?? '');
|
|
201
155
|
if (!token) {
|
|
202
|
-
logger_1.log.error('
|
|
156
|
+
logger_1.log.error('Not logged in. Run `autodev login` first, or pass --token=<pat_…> (and --url).');
|
|
203
157
|
process.exit(1);
|
|
204
158
|
}
|
|
205
159
|
const officeSlug = safeSeg(slug);
|
|
@@ -207,7 +161,18 @@ function officeCommand(program) {
|
|
|
207
161
|
? path.resolve(opts.baseDir)
|
|
208
162
|
: path.join(os.homedir(), '.autodev', 'offices', officeSlug);
|
|
209
163
|
fs.mkdirSync(root, { recursive: true, mode: 0o700 });
|
|
210
|
-
|
|
164
|
+
// Only an explicit 0 disables the watcher; a malformed value warns and falls
|
|
165
|
+
// back to the default cadence rather than silently turning polling off.
|
|
166
|
+
let intervalSec = 15;
|
|
167
|
+
if (opts.interval !== undefined) {
|
|
168
|
+
const n = parseInt(opts.interval, 10);
|
|
169
|
+
if (Number.isNaN(n)) {
|
|
170
|
+
logger_1.log.warn(`Invalid --interval '${opts.interval}' — using ${intervalSec}s.`);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
intervalSec = Math.max(0, n);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
211
176
|
const watch = opts.watch && intervalSec > 0;
|
|
212
177
|
// Locate the compiled CLI entry so children reliably run THIS build's
|
|
213
178
|
// `autodev start` even when `autodev` is not on PATH (dev/source runs).
|
|
@@ -219,76 +184,137 @@ function officeCommand(program) {
|
|
|
219
184
|
logger_1.log.info(`Workspaces: ${root}`);
|
|
220
185
|
logger_1.log.info(watch ? `Watcher : every ${intervalSec}s (auto-starts new characters)` : 'Watcher : off');
|
|
221
186
|
logger_1.log.plain('');
|
|
187
|
+
// Preflight: confirm the server is reachable and the token is valid before
|
|
188
|
+
// spawning any loops. Green ✓ on success, red ✗ + non-zero exit otherwise.
|
|
189
|
+
const pf = await (0, officeAuth_1.preflight)(base, token);
|
|
190
|
+
if (!pf.ok) {
|
|
191
|
+
logger_1.log.error(`✗ ${pf.reason} — run \`autodev login\``);
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
const who = pf.who ? `as ${pf.who} ` : '';
|
|
195
|
+
const nOffices = typeof pf.offices === 'number' ? `· ${pf.offices} office${pf.offices === 1 ? '' : 's'}` : '';
|
|
196
|
+
logger_1.log.success(`✓ connected ${who}${nOffices}`.trim());
|
|
197
|
+
logger_1.log.plain('');
|
|
222
198
|
// agentId → running child loop. Presence in this map means "we started it";
|
|
223
199
|
// it gates both duplicate spawns and the block-if-already-running check.
|
|
224
200
|
const children = new Map();
|
|
201
|
+
// Reserved WHILE a character's async bind is in flight (before it lands in
|
|
202
|
+
// `children`). The watcher's setInterval does not await the prior poll, so a
|
|
203
|
+
// slow creds fetch could let the next poll see children.has()===false and
|
|
204
|
+
// spawn a SECOND loop in the same workspace. `starting` is the synchronous
|
|
205
|
+
// reservation that closes that TOCTOU window.
|
|
206
|
+
const starting = new Set();
|
|
225
207
|
const notedOnline = new Set();
|
|
226
208
|
let stopping = false;
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
209
|
+
// Never send the agent token to a host the user didn't point us at. Mirrors
|
|
210
|
+
// the app's safeWsUrl: force the ws host to the trusted --url base, require
|
|
211
|
+
// wss for any non-local host (no plaintext token off-box). A malicious office
|
|
212
|
+
// response therefore can't redirect the token-bearing presence socket.
|
|
213
|
+
const safeWsUrl = (rawWs) => {
|
|
214
|
+
let ws, b;
|
|
215
|
+
try {
|
|
216
|
+
ws = new url_1.URL(rawWs);
|
|
217
|
+
b = new url_1.URL(base);
|
|
234
218
|
}
|
|
235
|
-
|
|
219
|
+
catch {
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
if (ws.protocol !== 'ws:' && ws.protocol !== 'wss:')
|
|
223
|
+
return null;
|
|
224
|
+
if (ws.host !== b.host)
|
|
225
|
+
ws.host = b.host; // pin to the trusted base host
|
|
226
|
+
const isLocal = ws.hostname === 'localhost' || ws.hostname === '127.0.0.1' || ws.hostname === '::1';
|
|
227
|
+
if (ws.protocol === 'ws:' && (!isLocal || b.protocol === 'https:'))
|
|
228
|
+
ws.protocol = 'wss:';
|
|
229
|
+
return ws.toString();
|
|
230
|
+
};
|
|
231
|
+
const startAgent = async (a) => {
|
|
232
|
+
if (children.has(a.id) || starting.has(a.id))
|
|
233
|
+
return; // already running / in flight
|
|
234
|
+
starting.add(a.id);
|
|
236
235
|
try {
|
|
237
|
-
|
|
238
|
-
//
|
|
239
|
-
const
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
logger_1.log.error(` ${a.name}: no credentials (${credsRes?.error ?? 'missing wsUrl'})`);
|
|
236
|
+
const dir = path.join(root, safeSeg(a.slug));
|
|
237
|
+
// Sandbox-escape guard: the workspace must stay under root.
|
|
238
|
+
const resolved = path.resolve(dir);
|
|
239
|
+
if (resolved !== root && !resolved.startsWith(root + path.sep)) {
|
|
240
|
+
logger_1.log.error(` ${a.name}: refused workspace path outside base dir (${resolved})`);
|
|
243
241
|
return;
|
|
244
242
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
243
|
+
const provider = opts.provider ? toAutodevProvider(opts.provider) : toAutodevProvider(a.provider);
|
|
244
|
+
try {
|
|
245
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
246
|
+
// Fetch this character's credentials → ready-made wsUrl (token+endpoint).
|
|
247
|
+
const credsRes = await (0, officeAuth_1.fetchJsonAuth)(`${base}/api/offices/${encodeURIComponent(slug)}/agents/${encodeURIComponent(a.id)}/credentials`, token);
|
|
248
|
+
const rawWs = credsRes?.data?.wsUrl;
|
|
249
|
+
if (!credsRes?.success || !rawWs) {
|
|
250
|
+
logger_1.log.error(` ${a.name}: no credentials (${credsRes?.error ?? 'missing wsUrl'})`);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
const wsUrl = safeWsUrl(rawWs);
|
|
254
|
+
if (!wsUrl) {
|
|
255
|
+
logger_1.log.error(` ${a.name}: refused unsafe wsUrl (not ws/wss)`);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
// Bind the workspace with the EXISTING single-agent machinery: writes
|
|
259
|
+
// .autodev/settings.json, installs hooks, wires the office MCP server,
|
|
260
|
+
// grants MCP permissions AND marks the workspace Claude-trusted.
|
|
261
|
+
(0, connect_1.applyWsUrl)(dir, wsUrl);
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
logger_1.log.error(` ${a.name}: bind failed — ${err.message}`);
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
// Spawn the EXISTING start loop as its own process (blocking singleton).
|
|
268
|
+
// AUTODEV_EXIT_WITH_PARENT=1 ⇒ the child reaps itself if we die.
|
|
269
|
+
const child = (0, child_process_1.spawn)(process.execPath, [cliJs, 'start', dir, '-p', provider], {
|
|
270
|
+
env: { ...process.env, AUTODEV_EXIT_WITH_PARENT: '1' },
|
|
271
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
272
|
+
});
|
|
273
|
+
children.set(a.id, { child, name: a.name });
|
|
274
|
+
logger_1.log.success(` ▶ ${a.name} (${provider}) → ${dir}`);
|
|
275
|
+
pipePrefixed(child.stdout, a.name, (line) => logger_1.log.plain(line));
|
|
276
|
+
pipePrefixed(child.stderr, a.name, (line) => logger_1.log.gray(line));
|
|
277
|
+
child.on('exit', (code, sig) => {
|
|
278
|
+
children.delete(a.id);
|
|
279
|
+
if (!stopping) {
|
|
280
|
+
logger_1.log.warn(` ⏹ ${a.name} loop exited (${sig ?? code}). It will be re-started on the next poll if still offline.`);
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
child.on('error', (e) => {
|
|
284
|
+
children.delete(a.id);
|
|
285
|
+
logger_1.log.error(` ${a.name}: failed to spawn loop — ${e.message}`);
|
|
286
|
+
});
|
|
249
287
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
288
|
+
finally {
|
|
289
|
+
// Release the reservation: from here `children` (or its absence on failure)
|
|
290
|
+
// is the source of truth again.
|
|
291
|
+
starting.delete(a.id);
|
|
253
292
|
}
|
|
254
|
-
// Spawn the EXISTING start loop as its own process (blocking singleton).
|
|
255
|
-
// AUTODEV_EXIT_WITH_PARENT=1 ⇒ the child reaps itself if we die.
|
|
256
|
-
const child = (0, child_process_1.spawn)(process.execPath, [cliJs, 'start', dir, '-p', provider], {
|
|
257
|
-
env: { ...process.env, AUTODEV_EXIT_WITH_PARENT: '1' },
|
|
258
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
259
|
-
});
|
|
260
|
-
children.set(a.id, { child, name: a.name });
|
|
261
|
-
logger_1.log.success(` ▶ ${a.name} (${provider}) → ${dir}`);
|
|
262
|
-
pipePrefixed(child.stdout, a.name, (line) => logger_1.log.plain(line));
|
|
263
|
-
pipePrefixed(child.stderr, a.name, (line) => logger_1.log.gray(line));
|
|
264
|
-
child.on('exit', (code, sig) => {
|
|
265
|
-
children.delete(a.id);
|
|
266
|
-
if (!stopping) {
|
|
267
|
-
logger_1.log.warn(` ⏹ ${a.name} loop exited (${sig ?? code}). It will be re-started on the next poll if still offline.`);
|
|
268
|
-
}
|
|
269
|
-
});
|
|
270
|
-
child.on('error', (e) => {
|
|
271
|
-
children.delete(a.id);
|
|
272
|
-
logger_1.log.error(` ${a.name}: failed to spawn loop — ${e.message}`);
|
|
273
|
-
});
|
|
274
293
|
};
|
|
275
|
-
const poll = async () => {
|
|
294
|
+
const poll = async (initial = false) => {
|
|
276
295
|
if (stopping) {
|
|
277
296
|
return;
|
|
278
297
|
}
|
|
279
298
|
let roster;
|
|
280
299
|
try {
|
|
281
|
-
const json = await fetchJsonAuth(`${base}/api/offices/${encodeURIComponent(slug)}/agents`, token);
|
|
300
|
+
const json = await (0, officeAuth_1.fetchJsonAuth)(`${base}/api/offices/${encodeURIComponent(slug)}/agents`, token);
|
|
282
301
|
roster = normalizeRoster(json);
|
|
283
302
|
}
|
|
284
303
|
catch (err) {
|
|
285
|
-
|
|
304
|
+
const msg = err.message;
|
|
305
|
+
// A bad/expired token is permanent — fail loudly on the FIRST fetch rather
|
|
306
|
+
// than reporting a clean exit (no-watch) or retrying a dead credential forever.
|
|
307
|
+
if (initial && /HTTP 40[13]|Auth failed|Unauthor|Forbidden/i.test(msg)) {
|
|
308
|
+
logger_1.log.error(`${msg}\nCheck --token (or AUTODEV_OFFICE_TOKEN) and --url.`);
|
|
309
|
+
process.exit(1);
|
|
310
|
+
}
|
|
311
|
+
logger_1.log.warn(`Roster fetch failed (will retry): ${msg}`);
|
|
286
312
|
return;
|
|
287
313
|
}
|
|
288
314
|
for (const a of roster) {
|
|
289
|
-
if (children.has(a.id)) {
|
|
315
|
+
if (children.has(a.id) || starting.has(a.id)) {
|
|
290
316
|
continue;
|
|
291
|
-
} //
|
|
317
|
+
} // running / in flight
|
|
292
318
|
if (a.isConnected) { // online elsewhere — don't flap its WS
|
|
293
319
|
if (!notedOnline.has(a.id)) {
|
|
294
320
|
logger_1.log.gray(` • ${a.name} already online elsewhere — skipping.`);
|
|
@@ -317,7 +343,7 @@ function officeCommand(program) {
|
|
|
317
343
|
};
|
|
318
344
|
process.on('SIGINT', shutdown);
|
|
319
345
|
process.on('SIGTERM', shutdown);
|
|
320
|
-
await poll();
|
|
346
|
+
await poll(true);
|
|
321
347
|
if (children.size === 0 && !watch) {
|
|
322
348
|
logger_1.log.warn('No characters started. Nothing to run.');
|
|
323
349
|
process.exit(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"office.js","sourceRoot":"","sources":["../../src/commands/office.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyIA,sCAuJC;AAhSD,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,2CAA6B;AAC7B,6CAA+B;AAC/B,6BAA0B;AAC1B,iDAAoD;AAEpD,sCAAgC;AAChC,wCAAwC;AAExC,8EAA8E;AAC9E,iEAAiE;AACjE,EAAE;AACF,iFAAiF;AACjF,iFAAiF;AACjF,oEAAoE;AACpE,yEAAyE;AACzE,oEAAoE;AACpE,6EAA6E;AAC7E,uEAAuE;AACvE,8EAA8E;AAC9E,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,EAAE;AACF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,gFAAgF;AAChF,8EAA8E;AAC9E,4EAA4E;AAC5E,yCAAyC;AACzC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa;IACxD,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU;CACvD,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,QAAiB;IAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1B,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAM,CAAC;QAAC,OAAO,UAAU,CAAC;IAAC,CAAC;IACpD,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAI,CAAC;QAAC,OAAO,YAAY,CAAC;IAAC,CAAC;IACtD,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAAC,OAAO,cAAc,CAAC;IAAC,CAAC;IACxD,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAG,CAAC;QAAC,OAAO,aAAa,CAAC;IAAC,CAAC;IACvD,OAAO,YAAY,CAAC;AACtB,CAAC;AAgBD,0EAA0E;AAC1E,SAAS,aAAa,CAAI,GAAW,EAAE,KAAa,EAAE,SAAS,GAAG,MAAM;IACtE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAW,CAAC;QAChB,IAAI,CAAC;YAAC,MAAM,GAAG,IAAI,SAAG,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QAC9B,MAAM,CAAC;YAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACvD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,QAAQ,EAAE,kBAAkB;gBAC5B,eAAe,EAAE,UAAU,KAAK,EAAE;gBAClC,YAAY,EAAE,aAAa;aAC5B;SACF,EAAE,CAAC,GAAG,EAAE,EAAE;YACT,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACpD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;oBACpE,IAAI,CAAC;wBAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC,CAAC;oBAAC,CAAC;oBACvC,OAAO,CAAC,EAAE,CAAC;wBAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,GAAG,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAAC,CAAC;gBACvF,CAAC;qBAAM,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;oBAC5D,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,UAAU,sBAAsB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnG,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,UAAU,SAAS,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,mBAAmB,SAAS,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/G,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8FAA8F;AAC9F,SAAS,eAAe,CAAC,IAAa;IACpC,MAAM,GAAG,GAAG,IAA4C,CAAC;IACzD,IAAI,IAAI,GAAY,EAAE,CAAC;IACvB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAAC,CAAC;SAC7C,IAAI,KAAK,CAAC,OAAO,CAAE,GAAG,EAAE,IAA6B,EAAE,MAAM,CAAC,EAAE,CAAC;QAAC,IAAI,GAAI,GAAG,CAAC,IAA8B,CAAC,MAAM,CAAC;IAAC,CAAC;SACtH,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;IAAC,CAAC;SACtD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,IAAI,GAAG,IAAI,CAAC;IAAC,CAAC;IAC9C,OAAQ,IAAkC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;QACtC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,IAAK,CAA0B,CAAC,MAAM,CAAC;QACzE,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9D,CAAC,CAAC,CAAC;AACN,CAAC;AAED,gEAAgE;AAChE,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC;AAC9F,CAAC;AAED,qEAAqE;AACrE,SAAS,YAAY,CAAC,MAAoC,EAAE,IAAY,EAAE,IAA4B;IACpG,IAAI,CAAC,MAAM,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IACxB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QAClC,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,EAAU,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACtC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAAC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAgB,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,gGAAgG,CAAC;SAC7G,MAAM,CAAC,iBAAiB,EAAE,0DAA0D,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;SACrH,MAAM,CAAC,iBAAiB,EAAE,0DAA0D,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;SAClJ,MAAM,CAAC,kBAAkB,EAAE,+EAA+E,CAAC;SAC3G,MAAM,CAAC,2BAA2B,EAAE,sFAAsF,CAAC;SAC3H,MAAM,CAAC,sBAAsB,EAAE,+EAA+E,EAAE,IAAI,CAAC;SACrH,MAAM,CAAC,YAAY,EAAE,kEAAkE,CAAC;SACxF,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAE5B,EAAE,EAAE;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,YAAG,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QACjH,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,YAAG,CAAC,KAAK,CAAC,4HAA4H,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAEzK,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;YACvB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC/D,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAErD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,WAAW,GAAG,CAAC,CAAC;QAE5C,sEAAsE;QACtE,wEAAwE;QACxE,yEAAyE;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEnD,YAAG,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACnD,YAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAChC,YAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAChC,YAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAChC,YAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,WAAW,gCAAgC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACvG,YAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEd,4EAA4E;QAC5E,yEAAyE;QACzE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiD,CAAC;QAC1E,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,UAAU,GAAG,KAAK,EAAE,CAAc,EAAiB,EAAE;YACzD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,4DAA4D;YAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/D,YAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,8CAA8C,QAAQ,GAAG,CAAC,CAAC;gBAChF,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAClG,IAAI,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACpD,0EAA0E;gBAC1E,MAAM,QAAQ,GAAG,MAAM,aAAa,CAClC,GAAG,IAAI,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,WAAW,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,EAChG,KAAK,CACN,CAAC;gBACF,MAAM,KAAK,GAAG,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC;gBACpC,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;oBACjC,YAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,qBAAqB,QAAQ,EAAE,KAAK,IAAI,eAAe,GAAG,CAAC,CAAC;oBACjF,OAAO;gBACT,CAAC;gBACD,sEAAsE;gBACtE,uEAAuE;gBACvE,iEAAiE;gBACjE,IAAA,oBAAU,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,YAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,mBAAoB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClE,OAAO;YACT,CAAC;YAED,yEAAyE;YACzE,iEAAiE;YACjE,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;gBAC3E,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,wBAAwB,EAAE,GAAG,EAAE;gBACtD,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;YACH,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,YAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,OAAO,GAAG,EAAE,CAAC,CAAC;YACpD,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9D,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gBAC7B,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,YAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,iBAAiB,GAAG,IAAI,IAAI,6DAA6D,CAAC,CAAC;gBACnH,CAAC;YACH,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gBACtB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtB,YAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,4BAA4B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;YACrC,IAAI,QAAQ,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YACzB,IAAI,MAAqB,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,aAAa,CAAU,GAAG,IAAI,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC3G,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,YAAG,CAAC,IAAI,CAAC,qCAAsC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBACxE,OAAO;YACT,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBAAC,SAAS;gBAAC,CAAC,CAAS,oBAAoB;gBAClE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAA2B,uCAAuC;oBACpF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC3B,YAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,uCAAuC,CAAC,CAAC;wBAC/D,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACxB,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzB,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;QAEF,kEAAkE;QAClE,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,IAAI,QAAQ,EAAE,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;YACpC,QAAQ,GAAG,IAAI,CAAC;YAChB,YAAG,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,IAAI,kBAAkB,CAAC,CAAC;YAC3D,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1C,IAAI,CAAC;oBAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACtD,CAAC;YACD,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAClD,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhC,MAAM,IAAI,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,YAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,YAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gEAAgE,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;QAEzH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC;YACtE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAChB,gEAAgE;YAChE,MAAM,IAAI,OAAO,CAAQ,GAAG,EAAE,GAA2B,CAAC,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,qEAAqE;YACrE,MAAM,IAAI,OAAO,CAAQ,GAAG,EAAE,GAA2B,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"office.js","sourceRoot":"","sources":["../../src/commands/office.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** GET JSON with a `pat_` Bearer token (built-in http/https, no deps). */
|
|
2
|
+
export declare function fetchJsonAuth<T>(url: string, token: string, timeoutMs?: number): Promise<T>;
|
|
3
|
+
export interface PreflightResult {
|
|
4
|
+
ok: boolean;
|
|
5
|
+
/** Who we're authenticated as (best-effort). */
|
|
6
|
+
who?: string;
|
|
7
|
+
/** Office count on success. */
|
|
8
|
+
offices?: number;
|
|
9
|
+
/** Human reason on failure. */
|
|
10
|
+
reason?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Cheap authed check that the server is reachable and the token is valid.
|
|
14
|
+
* The hard gate is GET /api/offices (401/403/network ⇒ not ok). The signed-in
|
|
15
|
+
* identity is a best-effort GET /api/user — its absence never fails preflight.
|
|
16
|
+
*/
|
|
17
|
+
export declare function preflight(baseUrl: string, token: string, timeoutMs?: number): Promise<PreflightResult>;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.fetchJsonAuth = fetchJsonAuth;
|
|
37
|
+
exports.preflight = preflight;
|
|
38
|
+
const http = __importStar(require("http"));
|
|
39
|
+
const https = __importStar(require("https"));
|
|
40
|
+
const url_1 = require("url");
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
// Shared pixel-office admin-API helpers (no deps): an authed GET and a cheap
|
|
43
|
+
// green/red preflight used by both `autodev login` and `autodev office`.
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
/** GET JSON with a `pat_` Bearer token (built-in http/https, no deps). */
|
|
46
|
+
function fetchJsonAuth(url, token, timeoutMs = 15_000) {
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
let parsed;
|
|
49
|
+
try {
|
|
50
|
+
parsed = new url_1.URL(url);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
reject(new Error(`Invalid URL: ${url}`));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const lib = parsed.protocol === 'http:' ? http : https;
|
|
57
|
+
const req = lib.request(url, {
|
|
58
|
+
method: 'GET',
|
|
59
|
+
headers: {
|
|
60
|
+
'Accept': 'application/json',
|
|
61
|
+
'Authorization': `Bearer ${token}`,
|
|
62
|
+
'User-Agent': 'autodev-cli',
|
|
63
|
+
},
|
|
64
|
+
}, (res) => {
|
|
65
|
+
const chunks = [];
|
|
66
|
+
res.on('data', (c) => chunks.push(c));
|
|
67
|
+
res.on('end', () => {
|
|
68
|
+
const body = Buffer.concat(chunks).toString('utf8');
|
|
69
|
+
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
|
70
|
+
try {
|
|
71
|
+
resolve(JSON.parse(body));
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
reject(new Error(`Invalid JSON from ${url}: ${e.message}`));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (res.statusCode === 401 || res.statusCode === 403) {
|
|
78
|
+
reject(new Error(`Auth failed (HTTP ${res.statusCode}) — token invalid or expired. ${body.slice(0, 200)}`));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
reject(new Error(`HTTP ${res.statusCode} from ${url}: ${body.slice(0, 300)}`));
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
req.setTimeout(timeoutMs, () => { req.destroy(new Error(`Timed out after ${timeoutMs}ms fetching ${url}`)); });
|
|
86
|
+
req.on('error', reject);
|
|
87
|
+
req.end();
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/** Count offices from the assorted shapes /api/offices can return. */
|
|
91
|
+
function countOffices(json) {
|
|
92
|
+
const raw = json;
|
|
93
|
+
let list;
|
|
94
|
+
if (Array.isArray(raw?.data)) {
|
|
95
|
+
list = raw.data;
|
|
96
|
+
}
|
|
97
|
+
else if (Array.isArray(raw?.data?.offices)) {
|
|
98
|
+
list = raw.data.offices;
|
|
99
|
+
}
|
|
100
|
+
else if (Array.isArray(raw?.offices)) {
|
|
101
|
+
list = raw.offices;
|
|
102
|
+
}
|
|
103
|
+
else if (Array.isArray(json)) {
|
|
104
|
+
list = json;
|
|
105
|
+
}
|
|
106
|
+
return Array.isArray(list) ? list.length : undefined;
|
|
107
|
+
}
|
|
108
|
+
/** Best-effort human identity from a /api/user-style payload. */
|
|
109
|
+
function pickWho(json) {
|
|
110
|
+
const u = json?.data ?? json;
|
|
111
|
+
if (!u || typeof u !== 'object') {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
const name = u.name;
|
|
115
|
+
const email = u.email;
|
|
116
|
+
const s = (v) => (typeof v === 'string' && v.trim() ? v.trim() : undefined);
|
|
117
|
+
return s(name) ?? s(email);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Cheap authed check that the server is reachable and the token is valid.
|
|
121
|
+
* The hard gate is GET /api/offices (401/403/network ⇒ not ok). The signed-in
|
|
122
|
+
* identity is a best-effort GET /api/user — its absence never fails preflight.
|
|
123
|
+
*/
|
|
124
|
+
async function preflight(baseUrl, token, timeoutMs = 12_000) {
|
|
125
|
+
const base = String(baseUrl ?? '').replace(/\/+$/, '');
|
|
126
|
+
if (!base) {
|
|
127
|
+
return { ok: false, reason: 'no server URL configured' };
|
|
128
|
+
}
|
|
129
|
+
if (!token) {
|
|
130
|
+
return { ok: false, reason: 'no token configured' };
|
|
131
|
+
}
|
|
132
|
+
let offices;
|
|
133
|
+
try {
|
|
134
|
+
const json = await fetchJsonAuth(`${base}/api/offices`, token, timeoutMs);
|
|
135
|
+
offices = countOffices(json);
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
return { ok: false, reason: err.message };
|
|
139
|
+
}
|
|
140
|
+
let who;
|
|
141
|
+
try {
|
|
142
|
+
who = pickWho(await fetchJsonAuth(`${base}/api/user`, token, 8_000));
|
|
143
|
+
}
|
|
144
|
+
catch { /* identity is best-effort */ }
|
|
145
|
+
return { ok: true, who, offices };
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=officeAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"officeAuth.js","sourceRoot":"","sources":["../../src/core/officeAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Default pixel-office server used when the user passes no --url. */
|
|
2
|
+
export declare const DEFAULT_BASE_URL = "https://app.pixeloffice.org";
|
|
3
|
+
export interface UserConfig {
|
|
4
|
+
/** Pixel-office base URL (no trailing slash), e.g. https://app.pixeloffice.org */
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
/** Personal-access token (pat_…) minted by `autodev login`. */
|
|
7
|
+
token?: string;
|
|
8
|
+
}
|
|
9
|
+
/** Absolute path to the user login config (~/.autodev/config.json). */
|
|
10
|
+
export declare function userConfigPath(): string;
|
|
11
|
+
/** Load the stored login config; returns {} if none/invalid. */
|
|
12
|
+
export declare function loadUserConfig(): UserConfig;
|
|
13
|
+
/** Persist the login config owner-only (0600). Never logged. */
|
|
14
|
+
export declare function saveUserConfig(cfg: UserConfig): void;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.DEFAULT_BASE_URL = void 0;
|
|
37
|
+
exports.userConfigPath = userConfigPath;
|
|
38
|
+
exports.loadUserConfig = loadUserConfig;
|
|
39
|
+
exports.saveUserConfig = saveUserConfig;
|
|
40
|
+
const os = __importStar(require("os"));
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const secureFile_1 = require("./secureFile");
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// User-level login config — ~/.autodev/config.json (mode 0600).
|
|
46
|
+
//
|
|
47
|
+
// `autodev login` mints/stores a pixel-office `pat_` personal-access token here
|
|
48
|
+
// so `autodev office <slug>` works with no --url/--token afterwards. This file
|
|
49
|
+
// carries a live secret, so it is ALWAYS written owner-only via writeFileSecure.
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
/** Default pixel-office server used when the user passes no --url. */
|
|
52
|
+
exports.DEFAULT_BASE_URL = 'https://app.pixeloffice.org';
|
|
53
|
+
/** Absolute path to the user login config (~/.autodev/config.json). */
|
|
54
|
+
function userConfigPath() {
|
|
55
|
+
return path.join(os.homedir(), '.autodev', 'config.json');
|
|
56
|
+
}
|
|
57
|
+
/** Load the stored login config; returns {} if none/invalid. */
|
|
58
|
+
function loadUserConfig() {
|
|
59
|
+
try {
|
|
60
|
+
const raw = fs.readFileSync(userConfigPath(), 'utf8');
|
|
61
|
+
const obj = JSON.parse(raw);
|
|
62
|
+
if (obj && typeof obj === 'object') {
|
|
63
|
+
return {
|
|
64
|
+
baseUrl: typeof obj.baseUrl === 'string' ? obj.baseUrl.replace(/\/+$/, '') : undefined,
|
|
65
|
+
token: typeof obj.token === 'string' ? obj.token : undefined,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch { /* missing / unreadable / bad JSON → treat as unconfigured */ }
|
|
70
|
+
return {};
|
|
71
|
+
}
|
|
72
|
+
/** Persist the login config owner-only (0600). Never logged. */
|
|
73
|
+
function saveUserConfig(cfg) {
|
|
74
|
+
const file = userConfigPath();
|
|
75
|
+
const dir = path.dirname(file);
|
|
76
|
+
if (!fs.existsSync(dir)) {
|
|
77
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
78
|
+
}
|
|
79
|
+
const clean = {
|
|
80
|
+
baseUrl: cfg.baseUrl ? cfg.baseUrl.replace(/\/+$/, '') : undefined,
|
|
81
|
+
token: cfg.token,
|
|
82
|
+
};
|
|
83
|
+
(0, secureFile_1.writeFileSecure)(file, JSON.stringify(clean, null, 2) + '\n');
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=userConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userConfig.js","sourceRoot":"","sources":["../../src/core/userConfig.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,wCAEC;AAGD,wCAYC;AAGD,wCASC;AArDD,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,6CAA+C;AAE/C,8EAA8E;AAC9E,gEAAgE;AAChE,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,iFAAiF;AACjF,8EAA8E;AAE9E,sEAAsE;AACzD,QAAA,gBAAgB,GAAG,6BAA6B,CAAC;AAS9D,uEAAuE;AACvE,SAAgB,cAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAC5D,CAAC;AAED,gEAAgE;AAChE,SAAgB,cAAc;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;QAC1C,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO;gBACL,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;gBACtF,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aAC7D,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,6DAA6D,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,gEAAgE;AAChE,SAAgB,cAAc,CAAC,GAAe;IAC5C,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAAC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAAC,CAAC;IACjF,MAAM,KAAK,GAAe;QACxB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QAClE,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC;IACF,IAAA,4BAAe,EAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/D,CAAC"}
|