@formlm/cli 0.3.1 → 0.5.1
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 +326 -65
- package/dist/commands/app.d.ts.map +1 -1
- package/dist/commands/app.js +74 -16
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +186 -7
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/connect.js +3 -3
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/doctor.d.ts +11 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +109 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/expert.d.ts.map +1 -1
- package/dist/commands/expert.js +42 -18
- package/dist/commands/expert.js.map +1 -1
- package/dist/commands/field.d.ts.map +1 -1
- package/dist/commands/field.js +9 -11
- package/dist/commands/field.js.map +1 -1
- package/dist/commands/profile.js +1 -1
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +39 -12
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/scale.d.ts.map +1 -1
- package/dist/commands/scale.js +4 -1
- package/dist/commands/scale.js.map +1 -1
- package/dist/commands/share.d.ts.map +1 -1
- package/dist/commands/share.js +258 -28
- package/dist/commands/share.js.map +1 -1
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +2 -3
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/smart.d.ts.map +1 -1
- package/dist/commands/smart.js +336 -61
- package/dist/commands/smart.js.map +1 -1
- package/dist/commands/snapshot.d.ts +0 -11
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +168 -42
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/doctor.d.ts +51 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +202 -0
- package/dist/doctor.js.map +1 -0
- package/dist/exec.d.ts +39 -1
- package/dist/exec.d.ts.map +1 -1
- package/dist/exec.js +309 -4
- package/dist/exec.js.map +1 -1
- package/dist/index.js +55 -6
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +269 -49
- package/dist/mcp.js.map +1 -1
- package/dist/output.d.ts +23 -1
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +69 -7
- package/dist/output.js.map +1 -1
- package/dist/summary.d.ts +17 -0
- package/dist/summary.d.ts.map +1 -0
- package/dist/summary.js +64 -0
- package/dist/summary.js.map +1 -0
- package/dist/utils.d.ts +10 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +45 -6
- package/dist/utils.js.map +1 -1
- package/package.json +11 -2
package/dist/exec.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export interface ExecResult {
|
|
|
3
3
|
message: string;
|
|
4
4
|
data: any;
|
|
5
5
|
}
|
|
6
|
+
export declare function demoteFalseSuccess(res: ExecResult): ExecResult;
|
|
7
|
+
export declare function isReadOnlyCommand(cmd: string): boolean;
|
|
6
8
|
/**
|
|
7
9
|
* POST /api/v1/mcp/exec
|
|
8
10
|
* Send CLI command to server for execution.
|
|
@@ -12,12 +14,48 @@ export interface ExecResult {
|
|
|
12
14
|
* @param timeoutMs Request timeout in milliseconds.
|
|
13
15
|
* Default: 60_000 (60s) for most commands.
|
|
14
16
|
* Smart plan should use 120_000 (2min), smart execute 300_000 (5min).
|
|
17
|
+
* Override globally with FORMLM_TIMEOUT_MS (useful for slow/congested servers).
|
|
18
|
+
* @param retries Max attempts for transient failures. Override with FORMLM_RETRIES.
|
|
15
19
|
*/
|
|
16
|
-
export declare function execCommand(cmd: string, profileName?: string, timeoutMs?: number): Promise<ExecResult>;
|
|
20
|
+
export declare function execCommand(cmd: string, profileName?: string, timeoutMs?: number, retries?: number): Promise<ExecResult>;
|
|
17
21
|
/**
|
|
18
22
|
* POST /api/v1/mcp/auth/login
|
|
19
23
|
*/
|
|
20
24
|
export declare function authLogin(email: string, password: string): Promise<ExecResult>;
|
|
25
|
+
/**
|
|
26
|
+
* GET /api/v1/code/captcha/{account}
|
|
27
|
+
* 拉取图片验证码(GIF),供邮箱验证码登录流程展示给用户识别。
|
|
28
|
+
* 图片存服务端 60s 有效,一次性消费。
|
|
29
|
+
*/
|
|
30
|
+
export declare function fetchCaptchaImage(account: string): Promise<{
|
|
31
|
+
ok: boolean;
|
|
32
|
+
image?: Buffer;
|
|
33
|
+
message: string;
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* POST /api/v1/code/email
|
|
37
|
+
* 发送邮箱验证码(需先通过图片验证码)。服务端限制:同邮箱 60s 冷却、
|
|
38
|
+
* 每分钟 5 次/邮箱、每分钟 10 次/IP;验证码 5 分钟内有效。
|
|
39
|
+
*/
|
|
40
|
+
export declare function authSendEmailCode(email: string, captcha: string): Promise<ExecResult>;
|
|
41
|
+
/**
|
|
42
|
+
* POST /api/v1/mcp/auth/login
|
|
43
|
+
* 邮箱验证码登录(无密码账号主路径)。验证码 5 分钟内有效,输错不作废可重试
|
|
44
|
+
* (连续 5 次失败账号锁 30 分钟,见服务端 McpV1Api)。
|
|
45
|
+
*/
|
|
46
|
+
export declare function authLoginCode(email: string, code: string): Promise<ExecResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Lightweight reachability probe for a public URL (used by `share verify` / `doctor`).
|
|
49
|
+
* Returns only the HTTP status + whether the shell answers — NOTE a 200 on the share page
|
|
50
|
+
* does NOT by itself prove anonymous access (the SPA shell answers 200 even behind the
|
|
51
|
+
* login gate), so callers must combine this with the authoritative share type/perm/day.
|
|
52
|
+
*/
|
|
53
|
+
export interface ProbeResult {
|
|
54
|
+
ok: boolean;
|
|
55
|
+
status: number;
|
|
56
|
+
message: string;
|
|
57
|
+
}
|
|
58
|
+
export declare function probeUrl(url: string, timeoutMs?: number): Promise<ProbeResult>;
|
|
21
59
|
/**
|
|
22
60
|
* GET /api/v1/mcp/auth/me
|
|
23
61
|
*/
|
package/dist/exec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,GAAG,CAAC;CACX;AAWD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAO9D;AAuBD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgBtD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,GAAE,MAAwD,EACnE,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CA0BrB;AA0FD;;GAEG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAuDpF;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA6ClH;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsD3F;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsDpF;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBtF;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAyDtE"}
|
package/dist/exec.js
CHANGED
|
@@ -2,6 +2,74 @@ import * as crypto from 'node:crypto';
|
|
|
2
2
|
import * as http from 'node:http';
|
|
3
3
|
import * as https from 'node:https';
|
|
4
4
|
import { getBaseUrl, getToken } from './config.js';
|
|
5
|
+
// Connection reuse within one process. A single CLI invocation barely notices, but the
|
|
6
|
+
// MCP server, `snapshot`/`doctor` (6-7 parallel queries) and in-process batch drivers
|
|
7
|
+
// (loop execCommand over dozens of apps) otherwise pay a TLS handshake per request.
|
|
8
|
+
// Responses are destroyed after reading, so no keep-alive socket holds the loop open.
|
|
9
|
+
const httpAgent = new http.Agent({ keepAlive: true, keepAliveMsecs: 1000, maxSockets: 16 });
|
|
10
|
+
const httpsAgent = new https.Agent({ keepAlive: true, keepAliveMsecs: 1000, maxSockets: 16 });
|
|
11
|
+
function agentFor(url) {
|
|
12
|
+
return url.protocol === 'https:' ? httpsAgent : httpAgent;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Compatibility guard for servers that predate the "picocli validation failure → code 400"
|
|
16
|
+
* mapping: those builds return parameter errors as plain text in `data` while the envelope
|
|
17
|
+
* still says code=0/"ok", so a script checking ok/code alone silently no-ops (measured in
|
|
18
|
+
* the field: `expert config --enable …` reported success and wrote nothing).
|
|
19
|
+
* Recognise the stderr signatures here and surface them as a real error.
|
|
20
|
+
*/
|
|
21
|
+
const PICOCLI_ERROR_RE = /^\s*(Unknown option|Unknown options|Missing required option|Missing required argument|Invalid value for option|Too many positions|was specified once|Command failed with exit code)/m;
|
|
22
|
+
export function demoteFalseSuccess(res) {
|
|
23
|
+
if (res.code !== 0)
|
|
24
|
+
return res;
|
|
25
|
+
const text = typeof res.data === 'string' ? res.data : null;
|
|
26
|
+
if (text && PICOCLI_ERROR_RE.test(text)) {
|
|
27
|
+
return { code: 400, message: text.trim().slice(0, 500), data: null };
|
|
28
|
+
}
|
|
29
|
+
return res;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Read-only command registry for safe auto-retry.
|
|
33
|
+
* Exact command paths (module + action, up to 3 tokens deep) whose server methods only
|
|
34
|
+
* READ state — verified against the Java *Command classes, NOT inferred from names:
|
|
35
|
+
* form config / connect config = format documentation lookups (read)
|
|
36
|
+
* scale config / expert config = WRITE (excluded on purpose)
|
|
37
|
+
* scale keys|data groups contain add/update/remove → only their `list` leaf is read-only
|
|
38
|
+
* Only these are retried on 408/429/5xx; everything else (writes) stays single-shot.
|
|
39
|
+
*/
|
|
40
|
+
const READ_ONLY_COMMAND_PATHS = new Set([
|
|
41
|
+
'app list', 'app use', 'app current', 'app urls', 'app knowledge',
|
|
42
|
+
'form query', 'form find', 'form types', 'form config',
|
|
43
|
+
'scale query', 'scale find', 'scale keys list', 'scale data list',
|
|
44
|
+
'connect query', 'connect find', 'connect types', 'connect config',
|
|
45
|
+
'connect cover-page find', 'connect final-page find',
|
|
46
|
+
'report query', 'report find', 'report widget list', 'report widget find',
|
|
47
|
+
'report widget types', 'report widget config', 'report widget logic list',
|
|
48
|
+
'expert query', 'expert find',
|
|
49
|
+
'share query', 'share url',
|
|
50
|
+
]);
|
|
51
|
+
export function isReadOnlyCommand(cmd) {
|
|
52
|
+
const parts = cmd.trim().split(/\s+/);
|
|
53
|
+
if (parts[0] !== 'assess' || parts.length < 3)
|
|
54
|
+
return false;
|
|
55
|
+
// Take the leading non-option tokens (module + action path, up to 4 deep for
|
|
56
|
+
// report widget logic list), stop at the first flag
|
|
57
|
+
const path = [];
|
|
58
|
+
for (const t of parts.slice(1)) {
|
|
59
|
+
if (t.startsWith('-'))
|
|
60
|
+
break;
|
|
61
|
+
path.push(t);
|
|
62
|
+
if (path.length >= 4)
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
for (let n = path.length; n >= 2; n--) {
|
|
66
|
+
if (READ_ONLY_COMMAND_PATHS.has(path.slice(0, n).join(' ')))
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
if (path[0] === 'skill')
|
|
70
|
+
return true; // assess skill <id> is a documentation read
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
5
73
|
/**
|
|
6
74
|
* POST /api/v1/mcp/exec
|
|
7
75
|
* Send CLI command to server for execution.
|
|
@@ -11,12 +79,46 @@ import { getBaseUrl, getToken } from './config.js';
|
|
|
11
79
|
* @param timeoutMs Request timeout in milliseconds.
|
|
12
80
|
* Default: 60_000 (60s) for most commands.
|
|
13
81
|
* Smart plan should use 120_000 (2min), smart execute 300_000 (5min).
|
|
82
|
+
* Override globally with FORMLM_TIMEOUT_MS (useful for slow/congested servers).
|
|
83
|
+
* @param retries Max attempts for transient failures. Override with FORMLM_RETRIES.
|
|
14
84
|
*/
|
|
15
|
-
export async function execCommand(cmd, profileName, timeoutMs = 60_000) {
|
|
85
|
+
export async function execCommand(cmd, profileName, timeoutMs = Number(process.env.FORMLM_TIMEOUT_MS) || 60_000, retries) {
|
|
86
|
+
// Retry policy:
|
|
87
|
+
// 1) Pre-response transport errors (Request failed / Connection closed): the request was
|
|
88
|
+
// very likely NOT processed — safe to retry for ANY command.
|
|
89
|
+
// 2) Server congestion statuses (408 timeout / 429 / 5xx): only retried for READ-ONLY
|
|
90
|
+
// commands, because a timed-out WRITE may already have been applied server-side.
|
|
91
|
+
// Exponential backoff with jitter; honours FORMLM_RETRIES (default 3).
|
|
92
|
+
const envRetries = Number(process.env.FORMLM_RETRIES);
|
|
93
|
+
const maxAttempts = Math.max(1, retries ?? (Number.isInteger(envRetries) && envRetries > 0 ? envRetries : 3));
|
|
94
|
+
const readOnly = isReadOnlyCommand(cmd);
|
|
95
|
+
let last = { code: 500, message: 'not attempted', data: null };
|
|
96
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
97
|
+
last = await execOnce(cmd, profileName, timeoutMs);
|
|
98
|
+
if (last.code === 0)
|
|
99
|
+
return last;
|
|
100
|
+
const transport = /^(Request failed|Connection closed by server)/.test(last.message || '');
|
|
101
|
+
const congested = last.code === 408 || last.code === 429 || last.code >= 500;
|
|
102
|
+
const retryable = transport || (congested && readOnly);
|
|
103
|
+
if (!retryable || attempt === maxAttempts) {
|
|
104
|
+
if (congested && !readOnly && !transport) {
|
|
105
|
+
last = { ...last, message: `${last.message} (write command — NOT auto-retried to avoid double execution; re-run manually if safe)` };
|
|
106
|
+
}
|
|
107
|
+
return last;
|
|
108
|
+
}
|
|
109
|
+
await new Promise(r => setTimeout(r, Math.min(4000, 400 * (2 ** (attempt - 1))) + Math.floor(Math.random() * 200)));
|
|
110
|
+
}
|
|
111
|
+
return last;
|
|
112
|
+
}
|
|
113
|
+
async function execOnce(cmd, profileName, timeoutMs = 60_000) {
|
|
16
114
|
const baseUrl = getBaseUrl();
|
|
17
115
|
const token = getToken(profileName);
|
|
18
116
|
if (!token) {
|
|
19
|
-
return {
|
|
117
|
+
return {
|
|
118
|
+
code: 401,
|
|
119
|
+
message: 'Not logged in. Run: formlm-cli auth login (no password? copy your Access Token from formlm.me → Workspace → Account Settings, then: formlm-cli auth login --token <your-token>)',
|
|
120
|
+
data: null,
|
|
121
|
+
};
|
|
20
122
|
}
|
|
21
123
|
const url = new URL('/api/v1/mcp/exec', baseUrl);
|
|
22
124
|
const body = JSON.stringify({ cmd });
|
|
@@ -30,6 +132,7 @@ export async function execCommand(cmd, profileName, timeoutMs = 60_000) {
|
|
|
30
132
|
const mod = url.protocol === 'https:' ? https : http;
|
|
31
133
|
const req = mod.request(url, {
|
|
32
134
|
method: 'POST',
|
|
135
|
+
agent: agentFor(url),
|
|
33
136
|
headers: {
|
|
34
137
|
'Content-Type': 'application/json',
|
|
35
138
|
'Authorization': token,
|
|
@@ -42,11 +145,11 @@ export async function execCommand(cmd, profileName, timeoutMs = 60_000) {
|
|
|
42
145
|
res.on('end', () => {
|
|
43
146
|
try {
|
|
44
147
|
const parsed = JSON.parse(data);
|
|
45
|
-
settle({
|
|
148
|
+
settle(demoteFalseSuccess({
|
|
46
149
|
code: parsed.code ?? 0,
|
|
47
150
|
message: parsed.message ?? parsed.msg ?? 'ok',
|
|
48
151
|
data: parsed.data ?? null,
|
|
49
|
-
});
|
|
152
|
+
}));
|
|
50
153
|
}
|
|
51
154
|
catch {
|
|
52
155
|
settle({ code: 500, message: `Invalid response: ${data.substring(0, 200)}`, data: null });
|
|
@@ -104,6 +207,7 @@ export async function authLogin(email, password) {
|
|
|
104
207
|
const mod = url.protocol === 'https:' ? https : http;
|
|
105
208
|
const req = mod.request(url, {
|
|
106
209
|
method: 'POST',
|
|
210
|
+
agent: agentFor(url),
|
|
107
211
|
headers: {
|
|
108
212
|
'Content-Type': 'application/json',
|
|
109
213
|
'Content-Length': Buffer.byteLength(body),
|
|
@@ -144,6 +248,206 @@ export async function authLogin(email, password) {
|
|
|
144
248
|
req.end();
|
|
145
249
|
});
|
|
146
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* GET /api/v1/code/captcha/{account}
|
|
253
|
+
* 拉取图片验证码(GIF),供邮箱验证码登录流程展示给用户识别。
|
|
254
|
+
* 图片存服务端 60s 有效,一次性消费。
|
|
255
|
+
*/
|
|
256
|
+
export async function fetchCaptchaImage(account) {
|
|
257
|
+
const baseUrl = getBaseUrl();
|
|
258
|
+
const url = new URL('/api/v1/code/captcha/' + encodeURIComponent(account), baseUrl);
|
|
259
|
+
return new Promise((resolve) => {
|
|
260
|
+
let settled = false;
|
|
261
|
+
const settle = (r) => { if (!settled) {
|
|
262
|
+
settled = true;
|
|
263
|
+
resolve(r);
|
|
264
|
+
} };
|
|
265
|
+
const mod = url.protocol === 'https:' ? https : http;
|
|
266
|
+
const req = mod.request(url, {
|
|
267
|
+
method: 'GET',
|
|
268
|
+
agent: agentFor(url),
|
|
269
|
+
timeout: 15_000,
|
|
270
|
+
}, (res) => {
|
|
271
|
+
const chunks = [];
|
|
272
|
+
res.on('data', (chunk) => { chunks.push(chunk); });
|
|
273
|
+
res.on('end', () => {
|
|
274
|
+
const image = Buffer.concat(chunks);
|
|
275
|
+
const contentType = String(res.headers['content-type'] || '');
|
|
276
|
+
if (res.statusCode === 200 && contentType.startsWith('image/')) {
|
|
277
|
+
settle({ ok: true, image, message: 'ok' });
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
settle({ ok: false, message: `Unexpected response (${res.statusCode} ${contentType})` });
|
|
281
|
+
}
|
|
282
|
+
// 释放 keep-alive socket,避免事件循环挂起
|
|
283
|
+
res.destroy();
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
req.on('timeout', () => {
|
|
287
|
+
req.destroy();
|
|
288
|
+
settle({ ok: false, message: 'Captcha request timed out after 15s' });
|
|
289
|
+
});
|
|
290
|
+
req.on('error', (err) => {
|
|
291
|
+
if (settled)
|
|
292
|
+
return;
|
|
293
|
+
settle({ ok: false, message: `Request failed: ${err.message}` });
|
|
294
|
+
});
|
|
295
|
+
req.on('close', () => {
|
|
296
|
+
settle({ ok: false, message: 'Connection closed by server' });
|
|
297
|
+
});
|
|
298
|
+
req.end();
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* POST /api/v1/code/email
|
|
303
|
+
* 发送邮箱验证码(需先通过图片验证码)。服务端限制:同邮箱 60s 冷却、
|
|
304
|
+
* 每分钟 5 次/邮箱、每分钟 10 次/IP;验证码 5 分钟内有效。
|
|
305
|
+
*/
|
|
306
|
+
export async function authSendEmailCode(email, captcha) {
|
|
307
|
+
const baseUrl = getBaseUrl();
|
|
308
|
+
const url = new URL('/api/v1/code/email', baseUrl);
|
|
309
|
+
const body = JSON.stringify({ account: email, captcha, lang: 'en' });
|
|
310
|
+
return new Promise((resolve) => {
|
|
311
|
+
let settled = false;
|
|
312
|
+
const settle = (r) => { if (!settled) {
|
|
313
|
+
settled = true;
|
|
314
|
+
resolve(r);
|
|
315
|
+
} };
|
|
316
|
+
const mod = url.protocol === 'https:' ? https : http;
|
|
317
|
+
const req = mod.request(url, {
|
|
318
|
+
method: 'POST',
|
|
319
|
+
agent: agentFor(url),
|
|
320
|
+
headers: {
|
|
321
|
+
'Content-Type': 'application/json',
|
|
322
|
+
'Content-Length': Buffer.byteLength(body),
|
|
323
|
+
},
|
|
324
|
+
timeout: 30_000, // 邮件发送可能秒级耗时,留足余量
|
|
325
|
+
}, (res) => {
|
|
326
|
+
let data = '';
|
|
327
|
+
res.on('data', (chunk) => { data += chunk; });
|
|
328
|
+
res.on('end', () => {
|
|
329
|
+
try {
|
|
330
|
+
const parsed = JSON.parse(data);
|
|
331
|
+
settle({
|
|
332
|
+
code: parsed.code ?? 0,
|
|
333
|
+
message: parsed.message ?? parsed.msg ?? 'ok',
|
|
334
|
+
data: parsed.data ?? null,
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
settle({ code: 500, message: `Invalid response: ${data.substring(0, 200)}`, data: null });
|
|
339
|
+
}
|
|
340
|
+
// 释放 keep-alive socket,避免事件循环挂起
|
|
341
|
+
res.destroy();
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
req.on('timeout', () => {
|
|
345
|
+
req.destroy();
|
|
346
|
+
settle({ code: 408, message: 'Send code request timed out after 30s', data: null });
|
|
347
|
+
});
|
|
348
|
+
req.on('error', (err) => {
|
|
349
|
+
if (settled)
|
|
350
|
+
return;
|
|
351
|
+
settle({ code: 500, message: `Request failed: ${err.message}`, data: null });
|
|
352
|
+
});
|
|
353
|
+
req.on('close', () => {
|
|
354
|
+
settle({ code: 500, message: 'Connection closed by server', data: null });
|
|
355
|
+
});
|
|
356
|
+
req.write(body);
|
|
357
|
+
req.end();
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* POST /api/v1/mcp/auth/login
|
|
362
|
+
* 邮箱验证码登录(无密码账号主路径)。验证码 5 分钟内有效,输错不作废可重试
|
|
363
|
+
* (连续 5 次失败账号锁 30 分钟,见服务端 McpV1Api)。
|
|
364
|
+
*/
|
|
365
|
+
export async function authLoginCode(email, code) {
|
|
366
|
+
const baseUrl = getBaseUrl();
|
|
367
|
+
const url = new URL('/api/v1/mcp/auth/login', baseUrl);
|
|
368
|
+
const body = JSON.stringify({ email, code });
|
|
369
|
+
return new Promise((resolve) => {
|
|
370
|
+
let settled = false;
|
|
371
|
+
const settle = (r) => { if (!settled) {
|
|
372
|
+
settled = true;
|
|
373
|
+
resolve(r);
|
|
374
|
+
} };
|
|
375
|
+
const mod = url.protocol === 'https:' ? https : http;
|
|
376
|
+
const req = mod.request(url, {
|
|
377
|
+
method: 'POST',
|
|
378
|
+
agent: agentFor(url),
|
|
379
|
+
headers: {
|
|
380
|
+
'Content-Type': 'application/json',
|
|
381
|
+
'Content-Length': Buffer.byteLength(body),
|
|
382
|
+
},
|
|
383
|
+
timeout: 30_000,
|
|
384
|
+
}, (res) => {
|
|
385
|
+
let data = '';
|
|
386
|
+
res.on('data', (chunk) => { data += chunk; });
|
|
387
|
+
res.on('end', () => {
|
|
388
|
+
try {
|
|
389
|
+
const parsed = JSON.parse(data);
|
|
390
|
+
settle({
|
|
391
|
+
code: parsed.code ?? 0,
|
|
392
|
+
message: parsed.message ?? parsed.msg ?? 'ok',
|
|
393
|
+
data: parsed.data ?? null,
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
catch {
|
|
397
|
+
settle({ code: 500, message: `Invalid response: ${data.substring(0, 200)}`, data: null });
|
|
398
|
+
}
|
|
399
|
+
// 释放 keep-alive socket,避免事件循环挂起
|
|
400
|
+
res.destroy();
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
req.on('timeout', () => {
|
|
404
|
+
req.destroy();
|
|
405
|
+
settle({ code: 408, message: 'Login request timed out after 30s', data: null });
|
|
406
|
+
});
|
|
407
|
+
req.on('error', (err) => {
|
|
408
|
+
if (settled)
|
|
409
|
+
return;
|
|
410
|
+
settle({ code: 500, message: `Request failed: ${err.message}`, data: null });
|
|
411
|
+
});
|
|
412
|
+
req.on('close', () => {
|
|
413
|
+
settle({ code: 500, message: 'Connection closed by server', data: null });
|
|
414
|
+
});
|
|
415
|
+
req.write(body);
|
|
416
|
+
req.end();
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
export function probeUrl(url, timeoutMs = 15_000) {
|
|
420
|
+
return new Promise((resolve) => {
|
|
421
|
+
let settled = false;
|
|
422
|
+
const settle = (r) => { if (!settled) {
|
|
423
|
+
settled = true;
|
|
424
|
+
resolve(r);
|
|
425
|
+
} };
|
|
426
|
+
let target;
|
|
427
|
+
try {
|
|
428
|
+
target = new URL(url);
|
|
429
|
+
}
|
|
430
|
+
catch {
|
|
431
|
+
return settle({ ok: false, status: 0, message: `Invalid URL: ${url}` });
|
|
432
|
+
}
|
|
433
|
+
const mod = target.protocol === 'https:' ? https : http;
|
|
434
|
+
const req = mod.get(target, { timeout: timeoutMs }, (res) => {
|
|
435
|
+
const status = res.statusCode ?? 0;
|
|
436
|
+
// Drain a small prefix so the socket can finish cleanly, then destroy it
|
|
437
|
+
res.setEncoding('utf-8');
|
|
438
|
+
res.on('data', () => { });
|
|
439
|
+
res.on('end', () => {
|
|
440
|
+
settle({ ok: status >= 200 && status < 400, status, message: `HTTP ${status}` });
|
|
441
|
+
res.destroy();
|
|
442
|
+
});
|
|
443
|
+
});
|
|
444
|
+
req.on('timeout', () => { req.destroy(); settle({ ok: false, status: 0, message: `Probe timed out after ${Math.round(timeoutMs / 1000)}s` }); });
|
|
445
|
+
req.on('error', (err) => { if (!settled)
|
|
446
|
+
settle({ ok: false, status: 0, message: `Request failed: ${err.message}` }); });
|
|
447
|
+
// Safety net: peer closed without a response and no error event fired
|
|
448
|
+
req.on('close', () => { settle({ ok: false, status: 0, message: 'Connection closed by server' }); });
|
|
449
|
+
});
|
|
450
|
+
}
|
|
147
451
|
/**
|
|
148
452
|
* GET /api/v1/mcp/auth/me
|
|
149
453
|
*/
|
|
@@ -163,6 +467,7 @@ export async function authMe(profileName) {
|
|
|
163
467
|
const mod = url.protocol === 'https:' ? https : http;
|
|
164
468
|
const req = mod.request(url, {
|
|
165
469
|
method: 'GET',
|
|
470
|
+
agent: agentFor(url),
|
|
166
471
|
headers: {
|
|
167
472
|
'Authorization': token,
|
|
168
473
|
},
|
package/dist/exec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,12 +10,24 @@ import { registerReportCommand } from './commands/report.js';
|
|
|
10
10
|
import { registerExpertCommand } from './commands/expert.js';
|
|
11
11
|
import { registerSmartCommand } from './commands/smart.js';
|
|
12
12
|
import { registerSnapshotCommand } from './commands/snapshot.js';
|
|
13
|
+
import { registerDoctorCommand } from './commands/doctor.js';
|
|
13
14
|
import { registerSkillCommand } from './commands/skill.js';
|
|
14
15
|
import { VERSION } from './version.js';
|
|
16
|
+
// ── Global `--json` tolerance ────────────────────────────────────
|
|
17
|
+
// Accept `--json` at ANY position (before or after the subcommand) without every
|
|
18
|
+
// subcommand having to declare it. Commander would otherwise throw
|
|
19
|
+
// "unknown option '--json'" on subcommands that don't define it. We strip the
|
|
20
|
+
// token from argv before parsing and translate it into machine-output mode
|
|
21
|
+
// (FORMLM_JSON → the stable {ok,code,message,data} envelope in output.ts).
|
|
22
|
+
// Values are matched as whole argv tokens only, so `--plan <json>` is unaffected.
|
|
23
|
+
if (process.argv.includes('--json')) {
|
|
24
|
+
process.env.FORMLM_JSON = process.env.FORMLM_JSON || '1';
|
|
25
|
+
process.argv = process.argv.filter(a => a !== '--json');
|
|
26
|
+
}
|
|
15
27
|
const program = new Command();
|
|
16
28
|
program
|
|
17
29
|
.name('formlm-cli')
|
|
18
|
-
.description('The official CLI & MCP Server for FormLM — https://formlm.me\n\n Quick start:\n formlm-cli smart plan --input "a mental health screening questionnaire"\n formlm-cli snapshot --app <appId
|
|
30
|
+
.description('The official CLI & MCP Server for FormLM — https://formlm.me\n\n Quick start:\n formlm-cli smart plan --input "a mental health screening questionnaire" --save-plan plan.json\n formlm-cli smart execute --app <appId> --module form [--plan-file plan.json]\n formlm-cli smart generate --input "a mental health screening questionnaire" --publish --doctor (one-shot wrapper)\n formlm-cli snapshot --app <appId> --summary\n formlm-cli doctor --app <appId> --expect-lang en\n formlm-cli share publish --app <appId> --access visitor (anonymous; --access all needs login)\n formlm-cli skill form\n formlm-cli mcp (start MCP server for any MCP client: Claude / Cursor / Codex CLI / Windsurf / etc.)\n\n Steps: smart plan → smart execute per module. \"smart generate\" wraps both in one call.')
|
|
19
31
|
.version(VERSION)
|
|
20
32
|
.option('--profile <name>', 'Profile to use (overrides default)');
|
|
21
33
|
// ── Custom error handling (MUST be set BEFORE subcommand registration) ──────
|
|
@@ -45,23 +57,50 @@ program.exitOverride((err) => {
|
|
|
45
57
|
'commander.invalidArgument', // bad .choices() value (e.g. --plan-type)
|
|
46
58
|
'commander.conflictingOption',
|
|
47
59
|
];
|
|
60
|
+
// FORMLM_NO_EXIT=1: never kill the host process on a per-command input mistake —
|
|
61
|
+
// emit a parseable envelope (JSON mode) or a friendly error, then throw so the
|
|
62
|
+
// bottom-level catch swallows it. Batch drivers keep running.
|
|
63
|
+
if (process.env.FORMLM_NO_EXIT === '1') {
|
|
64
|
+
if (process.env.FORMLM_JSON === '1') {
|
|
65
|
+
console.log(JSON.stringify({ ok: false, code: 400, message: msg, data: null }));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
console.error();
|
|
69
|
+
console.error(`❌ ${msg}`);
|
|
70
|
+
const owning = err.commanderCommand || err.command || program;
|
|
71
|
+
const cmd = owning && typeof owning.helpInformation === 'function' ? owning : program;
|
|
72
|
+
if (inputMistakeCodes.includes(err.code) && cmd && cmd.helpInformation) {
|
|
73
|
+
console.error();
|
|
74
|
+
console.error('💡 Usage:');
|
|
75
|
+
const lines = cmd.helpInformation().split('\n').filter((l) => l.trim());
|
|
76
|
+
console.error(lines.slice(0, Math.min(lines.length, 12)).join('\n'));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
throw err;
|
|
80
|
+
}
|
|
81
|
+
// Resolve the command the error actually belongs to. Commander attaches the owning
|
|
82
|
+
// command on `commanderCommand` (e.g. `field add` for a missing required option);
|
|
83
|
+
// the legacy `command` property is often the root program, which used to print the
|
|
84
|
+
// whole top-level help instead of the subcommand usage (noisy, slow to act on).
|
|
48
85
|
console.error();
|
|
49
86
|
console.error(`❌ ${msg}`);
|
|
50
|
-
const
|
|
87
|
+
const owning = err.commanderCommand || err.command || program;
|
|
88
|
+
const cmd = owning && typeof owning.helpInformation === 'function' ? owning : program;
|
|
51
89
|
if (inputMistakeCodes.includes(err.code) && cmd && cmd.helpInformation) {
|
|
52
90
|
console.error();
|
|
53
91
|
console.error('💡 Usage:');
|
|
54
92
|
const help = cmd.helpInformation();
|
|
55
93
|
const lines = help.split('\n').filter((l) => l.trim());
|
|
56
|
-
const usageLines = lines.slice(0, Math.min(lines.length,
|
|
94
|
+
const usageLines = lines.slice(0, Math.min(lines.length, 12));
|
|
57
95
|
console.error(usageLines.join('\n'));
|
|
58
96
|
}
|
|
59
97
|
process.exit(err.exitCode ?? 1);
|
|
60
98
|
});
|
|
61
99
|
// ── Register command groups ────────────────────────────────────
|
|
62
|
-
// Order: high-level (smart) → query (snapshot/skill) → modules → auth/profile
|
|
100
|
+
// Order: high-level (smart) → query (snapshot/doctor/skill) → modules → auth/profile
|
|
63
101
|
registerSmartCommand(program);
|
|
64
102
|
registerSnapshotCommand(program);
|
|
103
|
+
registerDoctorCommand(program);
|
|
65
104
|
registerSkillCommand(program);
|
|
66
105
|
registerAppCommand(program);
|
|
67
106
|
registerFieldCommand(program);
|
|
@@ -91,11 +130,21 @@ program.hook('preAction', () => {
|
|
|
91
130
|
// parseAsync ensures all async action handlers complete before exiting.
|
|
92
131
|
// For regular commands: resolves after action completes → process.exit(0).
|
|
93
132
|
// For MCP server mode: never resolves (server keeps running) → process stays alive.
|
|
133
|
+
// FORMLM_NO_EXIT=1 (batch/library mode) suppresses BOTH forced exits, so a single
|
|
134
|
+
// failing command cannot kill the host loop — matching output.ts semantics.
|
|
94
135
|
program.parseAsync().then(() => {
|
|
136
|
+
if (process.env.FORMLM_NO_EXIT === '1')
|
|
137
|
+
return;
|
|
95
138
|
process.exit(0);
|
|
96
|
-
}).catch(() => {
|
|
139
|
+
}).catch((err) => {
|
|
97
140
|
// exitOverride already handles commander errors via process.exit(1).
|
|
98
|
-
// This catches any other unexpected errors.
|
|
141
|
+
// This catches any other unexpected errors (e.g. localFail throwing under NO_EXIT).
|
|
142
|
+
if (process.env.FORMLM_NO_EXIT === '1') {
|
|
143
|
+
// Envelope already printed by output()/localFail() in JSON mode; log detail for humans.
|
|
144
|
+
if (err && err.message && process.env.FORMLM_JSON !== '1')
|
|
145
|
+
console.error(`❌ ${err.message}`);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
99
148
|
process.exit(1);
|
|
100
149
|
});
|
|
101
150
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AA2EA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAinBpD"}
|