wjx-cli 0.1.10 → 0.1.12

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 (34) hide show
  1. package/README.md +887 -889
  2. package/bundled/wjx-cli-expert.md +102 -0
  3. package/bundled/wjx-cli-use/SKILL.md +111 -0
  4. package/bundled/wjx-cli-use/references/analytics-commands.md +159 -0
  5. package/bundled/wjx-cli-use/references/contacts-commands.md +330 -0
  6. package/bundled/wjx-cli-use/references/dsl-syntax.md +160 -0
  7. package/bundled/wjx-cli-use/references/question-types.md +102 -0
  8. package/bundled/wjx-cli-use/references/response-commands.md +164 -0
  9. package/bundled/wjx-cli-use/references/survey-commands.md +194 -0
  10. package/dist/commands/init.js +129 -62
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/reference.js +332 -328
  13. package/dist/commands/reference.js.map +1 -1
  14. package/dist/commands/response.js +17 -50
  15. package/dist/commands/response.js.map +1 -1
  16. package/dist/commands/skill.d.ts +2 -0
  17. package/dist/commands/skill.js +46 -0
  18. package/dist/commands/skill.js.map +1 -0
  19. package/dist/commands/survey.js +1 -1
  20. package/dist/commands/survey.js.map +1 -1
  21. package/dist/commands/update.d.ts +2 -0
  22. package/dist/commands/update.js +76 -0
  23. package/dist/commands/update.js.map +1 -0
  24. package/dist/commands/user-system.js +4 -27
  25. package/dist/commands/user-system.js.map +1 -1
  26. package/dist/index.js +4 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/lib/command-helpers.d.ts +2 -0
  29. package/dist/lib/command-helpers.js +2 -1
  30. package/dist/lib/command-helpers.js.map +1 -1
  31. package/dist/lib/install-skill.d.ts +23 -0
  32. package/dist/lib/install-skill.js +96 -0
  33. package/dist/lib/install-skill.js.map +1 -0
  34. package/package.json +3 -2
@@ -3,74 +3,141 @@ import { stdin, stderr } from "node:process";
3
3
  import { listSurveys } from "wjx-api-sdk";
4
4
  import { loadConfig, saveConfig, CONFIG_PATH } from "../lib/config.js";
5
5
  import { maskApiKey } from "../lib/mask.js";
6
+ import { installSkill } from "../lib/install-skill.js";
6
7
  const DEFAULT_BASE_URL = "https://www.wjx.cn";
8
+ /** Validate API Key by calling listSurveys. Returns true if valid. */
9
+ async function validateApiKey(apiKey) {
10
+ stderr.write("验证 API Key...");
11
+ try {
12
+ const result = await listSurveys({ page_index: 1, page_size: 1 }, { apiKey });
13
+ if (result.result === false) {
14
+ stderr.write(` 失败 (${result.errormsg})\n`);
15
+ stderr.write(" 配置仍将保存,请检查 Key 是否正确。\n");
16
+ return false;
17
+ }
18
+ stderr.write(" OK\n");
19
+ return true;
20
+ }
21
+ catch (err) {
22
+ stderr.write(` 失败 (${err instanceof Error ? err.message : String(err)})\n`);
23
+ stderr.write(" 配置仍将保存。\n");
24
+ return false;
25
+ }
26
+ }
27
+ /** Save config and print confirmation. */
28
+ function saveAndReport(apiKey, baseUrl, corpId) {
29
+ const newConfig = { apiKey };
30
+ if (baseUrl !== DEFAULT_BASE_URL)
31
+ newConfig.baseUrl = baseUrl;
32
+ if (corpId)
33
+ newConfig.corpId = corpId;
34
+ saveConfig(newConfig);
35
+ stderr.write(`已保存到 ${CONFIG_PATH}\n`);
36
+ }
37
+ /** Non-interactive init: wjx init --api-key <key> [--base-url <url>] [--corp-id <id>] */
38
+ async function initWithArgs(opts) {
39
+ const apiKey = opts.apiKey;
40
+ const baseUrl = opts.baseUrl || DEFAULT_BASE_URL;
41
+ const corpId = opts.corpId || undefined;
42
+ // Apply base URL for validation
43
+ if (baseUrl !== DEFAULT_BASE_URL) {
44
+ process.env.WJX_BASE_URL = baseUrl;
45
+ }
46
+ else {
47
+ delete process.env.WJX_BASE_URL;
48
+ }
49
+ await validateApiKey(apiKey);
50
+ saveAndReport(apiKey, baseUrl, corpId);
51
+ if (opts.installSkill) {
52
+ const result = installSkill(process.cwd(), { force: true });
53
+ if (result.status === "error") {
54
+ stderr.write(`技能安装失败: ${result.message}\n`);
55
+ }
56
+ }
57
+ }
58
+ /** Interactive init wizard (original behavior). */
59
+ async function initInteractive() {
60
+ const config = loadConfig();
61
+ const currentApiKey = process.env.WJX_API_KEY || config?.apiKey || "";
62
+ const currentBaseUrl = process.env.WJX_BASE_URL || config?.baseUrl || "";
63
+ const currentCorpId = process.env.WJX_CORP_ID || config?.corpId || "";
64
+ stderr.write("问卷星 CLI 配置向导\n");
65
+ stderr.write(`配置文件: ${CONFIG_PATH}\n\n`);
66
+ const rl = createInterface({ input: stdin, output: stderr });
67
+ try {
68
+ // 1. API Key (required *)
69
+ let apiKey = "";
70
+ while (!apiKey) {
71
+ const hint = currentApiKey ? ` [${maskApiKey(currentApiKey)}]` : "";
72
+ const input = await rl.question(`* WJX_API_KEY${hint}: `);
73
+ apiKey = input.trim() || currentApiKey;
74
+ if (!apiKey) {
75
+ stderr.write(" API Key 不能为空,请输入。\n");
76
+ }
77
+ }
78
+ // 2. Base URL (optional)
79
+ const defaultUrl = currentBaseUrl || DEFAULT_BASE_URL;
80
+ const baseUrlInput = await rl.question(` WJX_BASE_URL [${defaultUrl}]: `);
81
+ const baseUrl = baseUrlInput.trim() || defaultUrl;
82
+ // 3. Corp ID (optional)
83
+ const corpHint = currentCorpId ? ` [${currentCorpId}]` : "";
84
+ const corpIdInput = await rl.question(` WJX_CORP_ID${corpHint}: `);
85
+ const corpId = corpIdInput.trim() || currentCorpId || undefined;
86
+ // Apply base URL before validation so SDK uses the correct endpoint
87
+ if (baseUrl !== DEFAULT_BASE_URL) {
88
+ process.env.WJX_BASE_URL = baseUrl;
89
+ }
90
+ else {
91
+ delete process.env.WJX_BASE_URL;
92
+ }
93
+ await validateApiKey(apiKey);
94
+ stderr.write("\n");
95
+ saveAndReport(apiKey, baseUrl, corpId);
96
+ stderr.write("提示: 也可以直接编辑该文件修改配置。\n");
97
+ // 4. Skill installation
98
+ stderr.write("\n");
99
+ const installAnswer = await rl.question("推荐安装 wjx-cli-use 技能以获取完整体验?(y/n) ");
100
+ if (installAnswer.trim().toLowerCase() === "y") {
101
+ const result = installSkill(process.cwd(), { force: true });
102
+ if (result.status === "error") {
103
+ stderr.write(`技能安装失败: ${result.message}\n`);
104
+ }
105
+ }
106
+ }
107
+ finally {
108
+ rl.close();
109
+ }
110
+ }
7
111
  export function registerInitCommands(program) {
8
112
  program
9
113
  .command("init")
10
- .description("初始化配置(交互式设置 API Key、Base URL、Corp ID)")
11
- .action(async () => {
12
- const config = loadConfig();
13
- const currentApiKey = process.env.WJX_API_KEY || config?.apiKey || "";
14
- const currentBaseUrl = process.env.WJX_BASE_URL || config?.baseUrl || "";
15
- const currentCorpId = process.env.WJX_CORP_ID || config?.corpId || "";
16
- stderr.write("问卷星 CLI 配置向导\n");
17
- stderr.write(`配置文件: ${CONFIG_PATH}\n\n`);
18
- const rl = createInterface({ input: stdin, output: stderr });
19
- try {
20
- // 1. API Key (required *)
21
- let apiKey = "";
22
- while (!apiKey) {
23
- const hint = currentApiKey ? ` [${maskApiKey(currentApiKey)}]` : "";
24
- const input = await rl.question(`* WJX_API_KEY${hint}: `);
25
- apiKey = input.trim() || currentApiKey;
26
- if (!apiKey) {
27
- stderr.write(" API Key 不能为空,请输入。\n");
28
- }
29
- }
30
- // 2. Base URL (optional)
31
- const defaultUrl = currentBaseUrl || DEFAULT_BASE_URL;
32
- const baseUrlInput = await rl.question(` WJX_BASE_URL [${defaultUrl}]: `);
33
- const baseUrl = baseUrlInput.trim() || defaultUrl;
34
- // 3. Corp ID (optional)
35
- const corpHint = currentCorpId ? ` [${currentCorpId}]` : "";
36
- const corpIdInput = await rl.question(` WJX_CORP_ID${corpHint}: `);
37
- const corpId = corpIdInput.trim() || currentCorpId || undefined;
38
- // Apply base URL before validation so SDK uses the correct endpoint
39
- if (baseUrl !== DEFAULT_BASE_URL) {
40
- process.env.WJX_BASE_URL = baseUrl;
41
- }
42
- else {
43
- delete process.env.WJX_BASE_URL;
44
- }
45
- // Validate API Key
46
- stderr.write("\n验证 API Key...");
47
- try {
48
- const result = await listSurveys({ page_index: 1, page_size: 1 }, { apiKey });
49
- if (result.result === false) {
50
- stderr.write(` 失败 (${result.errormsg})\n`);
51
- stderr.write(" 配置仍将保存,请检查 Key 是否正确。\n");
52
- }
53
- else {
54
- stderr.write(" OK\n");
55
- }
56
- }
57
- catch (err) {
58
- stderr.write(` 失败 (${err instanceof Error ? err.message : String(err)})\n`);
59
- stderr.write(" 配置仍将保存。\n");
60
- }
61
- // Save
62
- const newConfig = { apiKey };
63
- if (baseUrl !== DEFAULT_BASE_URL)
64
- newConfig.baseUrl = baseUrl;
65
- if (corpId)
66
- newConfig.corpId = corpId;
67
- saveConfig(newConfig);
68
- stderr.write(`\n已保存到 ${CONFIG_PATH}\n`);
69
- stderr.write("提示: 也可以直接编辑该文件修改配置。\n");
114
+ .description("初始化配置(交互式向导,或 --api-key 参数模式跳过交互)")
115
+ .option("--base-url <url>", "Base URL")
116
+ .option("--corp-id <id>", "Corp ID")
117
+ .option("--no-install-skill", "跳过技能安装(参数模式下默认安装)")
118
+ .action(async (opts, cmd) => {
119
+ // --api-key is a global option on the root program; read from parent
120
+ const apiKey = cmd.parent?.opts().apiKey;
121
+ if (apiKey) {
122
+ // 参数模式:直接配置,不弹交互
123
+ await initWithArgs({ apiKey, ...opts });
124
+ return;
70
125
  }
71
- finally {
72
- rl.close();
126
+ // 非 TTY 且无 --api-key:无法交互
127
+ if (!stdin.isTTY) {
128
+ const config = loadConfig();
129
+ if (config?.apiKey) {
130
+ stderr.write(`已有配置 (${CONFIG_PATH}),API Key: ${maskApiKey(config.apiKey)}\n`);
131
+ stderr.write("如需更新,请使用参数模式: wjx init --api-key <key>\n");
132
+ return;
133
+ }
134
+ stderr.write("非交互环境下请使用参数模式:\n");
135
+ stderr.write(" wjx init --api-key <key> [--base-url <url>] [--corp-id <id>]\n");
136
+ process.exitCode = 1;
137
+ return;
73
138
  }
139
+ // 交互模式
140
+ await initInteractive();
74
141
  });
75
142
  }
76
143
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}