autoglm.js 0.0.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/dist/cli.d.mts ADDED
@@ -0,0 +1 @@
1
+ export { };
package/dist/cli.mjs ADDED
@@ -0,0 +1,372 @@
1
+ #!/usr/bin/env node
2
+ import { _ as __commonJSMin, c as Se, d as xe, f as pD, g as cyan, h as bold, i as spinner_default, l as he, m as setAgentConfig, n as checkSystemRequirements, o as Ce, p as $t, r as PhoneAgent, s as Ie, t as checkModelApi, u as ve, v as __toESM } from "./check-Ox_8ktAc.mjs";
3
+ import path from "node:path";
4
+ import process from "node:process";
5
+ import fs from "node:fs";
6
+ import cfonts from "cfonts";
7
+
8
+ //#region node_modules/.pnpm/minimist@1.2.8/node_modules/minimist/index.js
9
+ var require_minimist = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10
+ function hasKey(obj, keys) {
11
+ var o = obj;
12
+ keys.slice(0, -1).forEach(function(key) {
13
+ o = o[key] || {};
14
+ });
15
+ return keys[keys.length - 1] in o;
16
+ }
17
+ function isNumber(x) {
18
+ if (typeof x === "number") return true;
19
+ if (/^0x[0-9a-f]+$/i.test(x)) return true;
20
+ return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
21
+ }
22
+ function isConstructorOrProto(obj, key) {
23
+ return key === "constructor" && typeof obj[key] === "function" || key === "__proto__";
24
+ }
25
+ module.exports = function(args, opts) {
26
+ if (!opts) opts = {};
27
+ var flags = {
28
+ bools: {},
29
+ strings: {},
30
+ unknownFn: null
31
+ };
32
+ if (typeof opts.unknown === "function") flags.unknownFn = opts.unknown;
33
+ if (typeof opts.boolean === "boolean" && opts.boolean) flags.allBools = true;
34
+ else [].concat(opts.boolean).filter(Boolean).forEach(function(key$1) {
35
+ flags.bools[key$1] = true;
36
+ });
37
+ var aliases = {};
38
+ function aliasIsBoolean(key$1) {
39
+ return aliases[key$1].some(function(x) {
40
+ return flags.bools[x];
41
+ });
42
+ }
43
+ Object.keys(opts.alias || {}).forEach(function(key$1) {
44
+ aliases[key$1] = [].concat(opts.alias[key$1]);
45
+ aliases[key$1].forEach(function(x) {
46
+ aliases[x] = [key$1].concat(aliases[key$1].filter(function(y) {
47
+ return x !== y;
48
+ }));
49
+ });
50
+ });
51
+ [].concat(opts.string).filter(Boolean).forEach(function(key$1) {
52
+ flags.strings[key$1] = true;
53
+ if (aliases[key$1]) [].concat(aliases[key$1]).forEach(function(k) {
54
+ flags.strings[k] = true;
55
+ });
56
+ });
57
+ var defaults = opts.default || {};
58
+ var argv = { _: [] };
59
+ function argDefined(key$1, arg$1) {
60
+ return flags.allBools && /^--[^=]+$/.test(arg$1) || flags.strings[key$1] || flags.bools[key$1] || aliases[key$1];
61
+ }
62
+ function setKey(obj, keys, value$1) {
63
+ var o = obj;
64
+ for (var i$1 = 0; i$1 < keys.length - 1; i$1++) {
65
+ var key$1 = keys[i$1];
66
+ if (isConstructorOrProto(o, key$1)) return;
67
+ if (o[key$1] === void 0) o[key$1] = {};
68
+ if (o[key$1] === Object.prototype || o[key$1] === Number.prototype || o[key$1] === String.prototype) o[key$1] = {};
69
+ if (o[key$1] === Array.prototype) o[key$1] = [];
70
+ o = o[key$1];
71
+ }
72
+ var lastKey = keys[keys.length - 1];
73
+ if (isConstructorOrProto(o, lastKey)) return;
74
+ if (o === Object.prototype || o === Number.prototype || o === String.prototype) o = {};
75
+ if (o === Array.prototype) o = [];
76
+ if (o[lastKey] === void 0 || flags.bools[lastKey] || typeof o[lastKey] === "boolean") o[lastKey] = value$1;
77
+ else if (Array.isArray(o[lastKey])) o[lastKey].push(value$1);
78
+ else o[lastKey] = [o[lastKey], value$1];
79
+ }
80
+ function setArg(key$1, val, arg$1) {
81
+ if (arg$1 && flags.unknownFn && !argDefined(key$1, arg$1)) {
82
+ if (flags.unknownFn(arg$1) === false) return;
83
+ }
84
+ var value$1 = !flags.strings[key$1] && isNumber(val) ? Number(val) : val;
85
+ setKey(argv, key$1.split("."), value$1);
86
+ (aliases[key$1] || []).forEach(function(x) {
87
+ setKey(argv, x.split("."), value$1);
88
+ });
89
+ }
90
+ Object.keys(flags.bools).forEach(function(key$1) {
91
+ setArg(key$1, defaults[key$1] === void 0 ? false : defaults[key$1]);
92
+ });
93
+ var notFlags = [];
94
+ if (args.indexOf("--") !== -1) {
95
+ notFlags = args.slice(args.indexOf("--") + 1);
96
+ args = args.slice(0, args.indexOf("--"));
97
+ }
98
+ for (var i = 0; i < args.length; i++) {
99
+ var arg = args[i];
100
+ var key;
101
+ var next;
102
+ if (/^--.+=/.test(arg)) {
103
+ var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
104
+ key = m[1];
105
+ var value = m[2];
106
+ if (flags.bools[key]) value = value !== "false";
107
+ setArg(key, value, arg);
108
+ } else if (/^--no-.+/.test(arg)) {
109
+ key = arg.match(/^--no-(.+)/)[1];
110
+ setArg(key, false, arg);
111
+ } else if (/^--.+/.test(arg)) {
112
+ key = arg.match(/^--(.+)/)[1];
113
+ next = args[i + 1];
114
+ if (next !== void 0 && !/^(-|--)[^-]/.test(next) && !flags.bools[key] && !flags.allBools && (aliases[key] ? !aliasIsBoolean(key) : true)) {
115
+ setArg(key, next, arg);
116
+ i += 1;
117
+ } else if (/^(true|false)$/.test(next)) {
118
+ setArg(key, next === "true", arg);
119
+ i += 1;
120
+ } else setArg(key, flags.strings[key] ? "" : true, arg);
121
+ } else if (/^-[^-]+/.test(arg)) {
122
+ var letters = arg.slice(1, -1).split("");
123
+ var broken = false;
124
+ for (var j = 0; j < letters.length; j++) {
125
+ next = arg.slice(j + 2);
126
+ if (next === "-") {
127
+ setArg(letters[j], next, arg);
128
+ continue;
129
+ }
130
+ if (/[A-Za-z]/.test(letters[j]) && next[0] === "=") {
131
+ setArg(letters[j], next.slice(1), arg);
132
+ broken = true;
133
+ break;
134
+ }
135
+ if (/[A-Za-z]/.test(letters[j]) && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
136
+ setArg(letters[j], next, arg);
137
+ broken = true;
138
+ break;
139
+ }
140
+ if (letters[j + 1] && letters[j + 1].match(/\W/)) {
141
+ setArg(letters[j], arg.slice(j + 2), arg);
142
+ broken = true;
143
+ break;
144
+ } else setArg(letters[j], flags.strings[letters[j]] ? "" : true, arg);
145
+ }
146
+ key = arg.slice(-1)[0];
147
+ if (!broken && key !== "-") if (args[i + 1] && !/^(-|--)[^-]/.test(args[i + 1]) && !flags.bools[key] && (aliases[key] ? !aliasIsBoolean(key) : true)) {
148
+ setArg(key, args[i + 1], arg);
149
+ i += 1;
150
+ } else if (args[i + 1] && /^(true|false)$/.test(args[i + 1])) {
151
+ setArg(key, args[i + 1] === "true", arg);
152
+ i += 1;
153
+ } else setArg(key, flags.strings[key] ? "" : true, arg);
154
+ } else {
155
+ if (!flags.unknownFn || flags.unknownFn(arg) !== false) argv._.push(flags.strings._ || !isNumber(arg) ? arg : Number(arg));
156
+ if (opts.stopEarly) {
157
+ argv._.push.apply(argv._, args.slice(i + 1));
158
+ break;
159
+ }
160
+ }
161
+ }
162
+ Object.keys(defaults).forEach(function(k) {
163
+ if (!hasKey(argv, k.split("."))) {
164
+ setKey(argv, k.split("."), defaults[k]);
165
+ (aliases[k] || []).forEach(function(x) {
166
+ setKey(argv, x.split("."), defaults[k]);
167
+ });
168
+ }
169
+ });
170
+ if (opts["--"]) argv["--"] = notFlags.slice();
171
+ else notFlags.forEach(function(k) {
172
+ argv._.push(k);
173
+ });
174
+ return argv;
175
+ };
176
+ }));
177
+
178
+ //#endregion
179
+ //#region package.json
180
+ var import_minimist = /* @__PURE__ */ __toESM(require_minimist(), 1);
181
+ var version = "0.0.1";
182
+
183
+ //#endregion
184
+ //#region src/cli/helpMessage.ts
185
+ const helpMessage = `
186
+ AutoGLM.js CLI v${version}
187
+
188
+ Usage:
189
+ $ autoglm [options] <message>
190
+
191
+ Options:
192
+ --help, -h Show this help message
193
+ --config, -c Path to configuration file (JSON format)
194
+ `;
195
+
196
+ //#endregion
197
+ //#region src/cli/config/loader.ts
198
+ /**
199
+ * 加载并解析配置文件
200
+ */
201
+ function loadConfigFile(configPath) {
202
+ let resolvedPath;
203
+ if (path.isAbsolute(configPath)) resolvedPath = configPath;
204
+ else resolvedPath = path.resolve(process.cwd(), configPath);
205
+ if (!fs.existsSync(resolvedPath)) throw new Error($t("config.errors.fileNotFound") + resolvedPath);
206
+ const ext = path.extname(resolvedPath).toLowerCase();
207
+ if (ext !== ".json") throw new Error($t("config.errors.invalidFormat") + ext);
208
+ try {
209
+ const fileContent = fs.readFileSync(resolvedPath, "utf-8");
210
+ return JSON.parse(fileContent);
211
+ } catch (error) {
212
+ throw new Error($t("config.errors.genericReadError") + (error instanceof Error ? error.message : String(error)));
213
+ }
214
+ }
215
+
216
+ //#endregion
217
+ //#region src/cli/action.ts
218
+ const actions = {
219
+ help: () => {
220
+ console.log(helpMessage);
221
+ process.exit(0);
222
+ },
223
+ config: (configPath) => {
224
+ return loadConfigFile(configPath);
225
+ }
226
+ };
227
+ function commandAction(argv) {
228
+ if (argv.help) actions.help();
229
+ if (argv.config) return actions.config(argv.config);
230
+ }
231
+
232
+ //#endregion
233
+ //#region src/cli/banner.ts
234
+ function printBanner() {
235
+ cfonts.say("AutoGLM.js", {
236
+ font: "block",
237
+ align: "left",
238
+ colors: ["blue", "cyan"],
239
+ background: "transparent",
240
+ letterSpacing: 1,
241
+ lineHeight: 1,
242
+ space: true,
243
+ maxLength: "0",
244
+ gradient: false,
245
+ independentGradient: false,
246
+ transitionGradient: false,
247
+ rawMode: false,
248
+ env: "node"
249
+ });
250
+ }
251
+
252
+ //#endregion
253
+ //#region src/cli/config/prompts/agent.ts
254
+ async function maxSteps() {
255
+ const result = await he({
256
+ message: $t("prompt.maxSteps"),
257
+ placeholder: "100",
258
+ defaultValue: "100"
259
+ });
260
+ return typeof result === "string" ? Number.parseInt(result, 10) : 100;
261
+ }
262
+
263
+ //#endregion
264
+ //#region src/cli/config/prompts/cancel.ts
265
+ function printCancel() {
266
+ xe($t("prompt.cancel"));
267
+ process.exit(0);
268
+ }
269
+
270
+ //#endregion
271
+ //#region src/cli/config/prompts/language.ts
272
+ var language_default = async () => {
273
+ const lang = await ve({
274
+ message: "Please select the language:",
275
+ options: [{
276
+ value: "cn",
277
+ label: "中文"
278
+ }, {
279
+ value: "en",
280
+ label: "English"
281
+ }]
282
+ });
283
+ setAgentConfig({ lang });
284
+ return lang;
285
+ };
286
+
287
+ //#endregion
288
+ //#region src/cli/config/prompts/model.ts
289
+ function model() {
290
+ return he({
291
+ message: $t("prompt.model"),
292
+ placeholder: "autoglm-phone",
293
+ defaultValue: "autoglm-phone"
294
+ });
295
+ }
296
+ function baseUrl() {
297
+ return he({
298
+ message: $t("prompt.baseURL"),
299
+ placeholder: "https://open.bigmodel.cn/api/paas/v4/",
300
+ defaultValue: "https://open.bigmodel.cn/api/paas/v4/"
301
+ });
302
+ }
303
+ function apiKey() {
304
+ return he({
305
+ message: $t("prompt.apiKey"),
306
+ placeholder: ""
307
+ });
308
+ }
309
+
310
+ //#endregion
311
+ //#region src/cli/config/prompts/index.ts
312
+ async function getConfig() {
313
+ Ie(cyan(`Config Your AutoGLM.js`));
314
+ const config = await Ce({
315
+ lang: language_default,
316
+ model,
317
+ baseUrl,
318
+ apiKey,
319
+ maxSteps
320
+ }, { onCancel() {
321
+ printCancel();
322
+ } });
323
+ spinner_default.start($t("prompt.checking"));
324
+ return config;
325
+ }
326
+
327
+ //#endregion
328
+ //#region src/cli.ts
329
+ /**
330
+ * AutoGLM.js CLI
331
+ */
332
+ async function main() {
333
+ printBanner();
334
+ const config = commandAction((0, import_minimist.default)(process.argv.slice(2), { alias: {
335
+ help: "h",
336
+ config: "c"
337
+ } })) || await getConfig();
338
+ setAgentConfig({
339
+ ...config,
340
+ mode: "cli"
341
+ });
342
+ await checkSystemRequirements();
343
+ await checkModelApi();
344
+ if (!config) {
345
+ spinner_default.stop($t("prompt.checking"));
346
+ Se($t("prompt.done"));
347
+ }
348
+ const agent = new PhoneAgent();
349
+ Ie(bold(cyan(`🤖 ${$t("prompt.interactiveMode")}`)));
350
+ let isFirstTask = true;
351
+ while (true) {
352
+ const task = await he({
353
+ message: bold(`💬 ${$t("prompt.task")}`),
354
+ placeholder: isFirstTask ? $t("prompt.placeholder") : void 0
355
+ });
356
+ if (pD(task)) {
357
+ xe($t("prompt.cancel"));
358
+ process.exit(0);
359
+ }
360
+ if (task) {
361
+ await agent.run(task);
362
+ isFirstTask = false;
363
+ }
364
+ }
365
+ }
366
+ main().catch((error) => {
367
+ console.error("CLI执行错误:", error);
368
+ process.exit(1);
369
+ });
370
+
371
+ //#endregion
372
+ export { };
@@ -0,0 +1,42 @@
1
+ import * as mitt0 from "mitt";
2
+
3
+ //#region src/utils/events.d.ts
4
+ interface EventData {
5
+ message: any;
6
+ time: string;
7
+ }
8
+ //#endregion
9
+ //#region src/config/types.d.ts
10
+ interface AgentConfigType {
11
+ mode: 'cli' | 'api';
12
+ maxSteps: number;
13
+ lang: 'cn' | 'en';
14
+ deviceId?: string;
15
+ systemPrompt?: string;
16
+ baseUrl: string;
17
+ apiKey: string;
18
+ model: string;
19
+ maxTokens: number;
20
+ temperature: number;
21
+ topP: number;
22
+ frequencyPenalty: number;
23
+ }
24
+ //#endregion
25
+ //#region src/index.d.ts
26
+ declare class AutoGLM {
27
+ private phoneAgent;
28
+ private constructor();
29
+ static createAgent(config: AgentConfigType): Promise<AutoGLM>;
30
+ run(task: string): mitt0.Emitter<{
31
+ thinking: EventData;
32
+ action: EventData;
33
+ task_complete: EventData;
34
+ }>;
35
+ checkModelApi(): Promise<void>;
36
+ checkSystemRequirements(): Promise<{
37
+ success: boolean;
38
+ message: string;
39
+ } | undefined>;
40
+ }
41
+ //#endregion
42
+ export { AutoGLM };
package/dist/index.mjs ADDED
@@ -0,0 +1,36 @@
1
+ import { a as emitter, m as setAgentConfig, n as checkSystemRequirements, r as PhoneAgent, t as checkModelApi } from "./check-Ox_8ktAc.mjs";
2
+
3
+ //#region src/index.ts
4
+ var AutoGLM = class AutoGLM {
5
+ phoneAgent;
6
+ constructor(config) {
7
+ config && setAgentConfig({
8
+ ...config,
9
+ mode: "api"
10
+ });
11
+ this.phoneAgent = new PhoneAgent();
12
+ }
13
+ static async createAgent(config) {
14
+ setAgentConfig({
15
+ ...config,
16
+ mode: "api"
17
+ });
18
+ const instance = new AutoGLM();
19
+ await checkSystemRequirements();
20
+ await checkModelApi();
21
+ return instance;
22
+ }
23
+ run(task) {
24
+ this.phoneAgent.run(task);
25
+ return emitter;
26
+ }
27
+ checkModelApi() {
28
+ return checkModelApi();
29
+ }
30
+ checkSystemRequirements() {
31
+ return checkSystemRequirements();
32
+ }
33
+ };
34
+
35
+ //#endregion
36
+ export { AutoGLM };