klaus-ai 0.1.13 → 0.1.14

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.
@@ -4,6 +4,7 @@
4
4
  import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
5
5
  import { join } from "path";
6
6
  import { homedir } from "os";
7
+ import { randomBytes } from "crypto";
7
8
  import yaml from "js-yaml";
8
9
  var CONFIG_DIR = join(homedir(), ".klaus");
9
10
  var CONFIG_FILE = join(CONFIG_DIR, "config.yaml");
@@ -40,10 +41,18 @@ function loadWeComConfig() {
40
41
  }
41
42
  function loadWebConfig() {
42
43
  const cfg = loadConfig().web ?? {};
44
+ let token = cfg.token ?? process.env.KLAUS_WEB_TOKEN ?? "";
45
+ if (!token || token === "(auto-generate)") {
46
+ token = randomBytes(24).toString("hex");
47
+ console.log(`[Web] Auto-generated token: ${token}`);
48
+ }
43
49
  return {
44
- token: cfg.token ?? process.env.KLAUS_WEB_TOKEN ?? "",
50
+ token,
45
51
  port: Number(cfg.port ?? process.env.KLAUS_WEB_PORT ?? 3e3),
46
- tunnel: Boolean(cfg.tunnel ?? process.env.KLAUS_WEB_TUNNEL === "true")
52
+ tunnel: Boolean(cfg.tunnel ?? process.env.KLAUS_WEB_TUNNEL === "true"),
53
+ permissions: Boolean(
54
+ cfg.permissions ?? process.env.KLAUS_WEB_PERMISSIONS === "true"
55
+ )
47
56
  };
48
57
  }
49
58
  function positiveNumber(raw, fallback) {
@@ -70,4 +79,4 @@ export {
70
79
  loadWebConfig,
71
80
  loadSessionConfig
72
81
  };
73
- //# sourceMappingURL=chunk-UF5RURQG.js.map
82
+ //# sourceMappingURL=chunk-L2GX3LVO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config.ts"],"sourcesContent":["import { readFileSync, writeFileSync, mkdirSync, existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { randomBytes } from \"node:crypto\";\nimport yaml from \"js-yaml\";\nimport type {\n QQBotConfig,\n WeComConfig,\n WebConfig,\n SessionConfig,\n} from \"./types.js\";\n\nexport const CONFIG_DIR = join(homedir(), \".klaus\");\nexport const CONFIG_FILE = join(CONFIG_DIR, \"config.yaml\");\n\nexport function loadConfig(): Record<string, unknown> {\n if (!existsSync(CONFIG_FILE)) return {};\n const content = readFileSync(CONFIG_FILE, \"utf-8\");\n return (yaml.load(content) as Record<string, unknown>) ?? {};\n}\n\nexport function saveConfig(data: Record<string, unknown>): void {\n mkdirSync(CONFIG_DIR, { recursive: true });\n writeFileSync(CONFIG_FILE, yaml.dump(data, { flowLevel: -1 }), \"utf-8\");\n}\n\nexport function getChannelName(): string {\n const cfg = loadConfig();\n return (cfg.channel as string) ?? \"qq\";\n}\n\nexport function loadQQBotConfig(): QQBotConfig {\n const cfg = (loadConfig().qq as Record<string, string>) ?? {};\n return {\n appid: cfg.appid ?? process.env.QQ_BOT_APPID ?? \"\",\n secret: cfg.secret ?? process.env.QQ_BOT_SECRET ?? \"\",\n };\n}\n\nexport function loadWeComConfig(): WeComConfig {\n const cfg = (loadConfig().wecom as Record<string, unknown>) ?? {};\n return {\n corpId: (cfg.corp_id as string) ?? process.env.WECOM_CORP_ID ?? \"\",\n corpSecret:\n (cfg.corp_secret as string) ?? process.env.WECOM_CORP_SECRET ?? \"\",\n agentId: Number(cfg.agent_id ?? process.env.WECOM_AGENT_ID ?? 0),\n token: (cfg.token as string) ?? process.env.WECOM_TOKEN ?? \"\",\n encodingAesKey:\n (cfg.encoding_aes_key as string) ??\n process.env.WECOM_ENCODING_AES_KEY ??\n \"\",\n port: Number(cfg.port ?? process.env.WECOM_PORT ?? 8080),\n };\n}\n\nexport function loadWebConfig(): WebConfig {\n const cfg = (loadConfig().web as Record<string, unknown>) ?? {};\n let token = (cfg.token as string) ?? process.env.KLAUS_WEB_TOKEN ?? \"\";\n // Guard: auto-generate if token is empty or a placeholder value\n if (!token || token === \"(auto-generate)\") {\n token = randomBytes(24).toString(\"hex\");\n console.log(`[Web] Auto-generated token: ${token}`);\n }\n return {\n token,\n port: Number(cfg.port ?? process.env.KLAUS_WEB_PORT ?? 3000),\n tunnel: Boolean(cfg.tunnel ?? process.env.KLAUS_WEB_TUNNEL === \"true\"),\n permissions: Boolean(\n cfg.permissions ?? process.env.KLAUS_WEB_PERMISSIONS === \"true\",\n ),\n };\n}\n\nfunction positiveNumber(raw: unknown, fallback: number): number {\n const n = Number(raw ?? fallback);\n return Number.isFinite(n) && n > 0 ? n : fallback;\n}\n\nexport function loadSessionConfig(): SessionConfig {\n const cfg = (loadConfig().session as Record<string, unknown>) ?? {};\n return {\n idleMs: positiveNumber(cfg.idle_minutes, 240) * 60 * 1000,\n maxEntries: Math.floor(positiveNumber(cfg.max_entries, 100)),\n maxAgeMs: positiveNumber(cfg.max_age_days, 7) * 24 * 60 * 60 * 1000,\n };\n}\n"],"mappings":";;;AAAA,SAAS,cAAc,eAAe,WAAW,kBAAkB;AACnE,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,OAAO,UAAU;AAQV,IAAM,aAAa,KAAK,QAAQ,GAAG,QAAQ;AAC3C,IAAM,cAAc,KAAK,YAAY,aAAa;AAElD,SAAS,aAAsC;AACpD,MAAI,CAAC,WAAW,WAAW,EAAG,QAAO,CAAC;AACtC,QAAM,UAAU,aAAa,aAAa,OAAO;AACjD,SAAQ,KAAK,KAAK,OAAO,KAAiC,CAAC;AAC7D;AAEO,SAAS,WAAW,MAAqC;AAC9D,YAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AACzC,gBAAc,aAAa,KAAK,KAAK,MAAM,EAAE,WAAW,GAAG,CAAC,GAAG,OAAO;AACxE;AAEO,SAAS,iBAAyB;AACvC,QAAM,MAAM,WAAW;AACvB,SAAQ,IAAI,WAAsB;AACpC;AAEO,SAAS,kBAA+B;AAC7C,QAAM,MAAO,WAAW,EAAE,MAAiC,CAAC;AAC5D,SAAO;AAAA,IACL,OAAO,IAAI,SAAS,QAAQ,IAAI,gBAAgB;AAAA,IAChD,QAAQ,IAAI,UAAU,QAAQ,IAAI,iBAAiB;AAAA,EACrD;AACF;AAEO,SAAS,kBAA+B;AAC7C,QAAM,MAAO,WAAW,EAAE,SAAqC,CAAC;AAChE,SAAO;AAAA,IACL,QAAS,IAAI,WAAsB,QAAQ,IAAI,iBAAiB;AAAA,IAChE,YACG,IAAI,eAA0B,QAAQ,IAAI,qBAAqB;AAAA,IAClE,SAAS,OAAO,IAAI,YAAY,QAAQ,IAAI,kBAAkB,CAAC;AAAA,IAC/D,OAAQ,IAAI,SAAoB,QAAQ,IAAI,eAAe;AAAA,IAC3D,gBACG,IAAI,oBACL,QAAQ,IAAI,0BACZ;AAAA,IACF,MAAM,OAAO,IAAI,QAAQ,QAAQ,IAAI,cAAc,IAAI;AAAA,EACzD;AACF;AAEO,SAAS,gBAA2B;AACzC,QAAM,MAAO,WAAW,EAAE,OAAmC,CAAC;AAC9D,MAAI,QAAS,IAAI,SAAoB,QAAQ,IAAI,mBAAmB;AAEpE,MAAI,CAAC,SAAS,UAAU,mBAAmB;AACzC,YAAQ,YAAY,EAAE,EAAE,SAAS,KAAK;AACtC,YAAQ,IAAI,+BAA+B,KAAK,EAAE;AAAA,EACpD;AACA,SAAO;AAAA,IACL;AAAA,IACA,MAAM,OAAO,IAAI,QAAQ,QAAQ,IAAI,kBAAkB,GAAI;AAAA,IAC3D,QAAQ,QAAQ,IAAI,UAAU,QAAQ,IAAI,qBAAqB,MAAM;AAAA,IACrE,aAAa;AAAA,MACX,IAAI,eAAe,QAAQ,IAAI,0BAA0B;AAAA,IAC3D;AAAA,EACF;AACF;AAEA,SAAS,eAAe,KAAc,UAA0B;AAC9D,QAAM,IAAI,OAAO,OAAO,QAAQ;AAChC,SAAO,OAAO,SAAS,CAAC,KAAK,IAAI,IAAI,IAAI;AAC3C;AAEO,SAAS,oBAAmC;AACjD,QAAM,MAAO,WAAW,EAAE,WAAuC,CAAC;AAClE,SAAO;AAAA,IACL,QAAQ,eAAe,IAAI,cAAc,GAAG,IAAI,KAAK;AAAA,IACrD,YAAY,KAAK,MAAM,eAAe,IAAI,aAAa,GAAG,CAAC;AAAA,IAC3D,UAAU,eAAe,IAAI,cAAc,CAAC,IAAI,KAAK,KAAK,KAAK;AAAA,EACjE;AACF;","names":[]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CONFIG_FILE
4
- } from "./chunk-UF5RURQG.js";
4
+ } from "./chunk-L2GX3LVO.js";
5
5
 
6
6
  // src/channels/types.ts
7
7
  var registry = /* @__PURE__ */ new Map();
@@ -211,4 +211,4 @@ export {
211
211
  formatValidationIssues,
212
212
  ensureConfigValid
213
213
  };
214
- //# sourceMappingURL=chunk-ZGVKVCVT.js.map
214
+ //# sourceMappingURL=chunk-LDUQDPLU.js.map
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  formatValidationIssues,
4
4
  validateConfig
5
- } from "./chunk-ZGVKVCVT.js";
5
+ } from "./chunk-LDUQDPLU.js";
6
6
  import {
7
7
  CONFIG_FILE
8
- } from "./chunk-UF5RURQG.js";
8
+ } from "./chunk-L2GX3LVO.js";
9
9
 
10
10
  // src/doctor.ts
11
11
  import { execSync } from "child_process";
@@ -69,4 +69,4 @@ function runDoctor() {
69
69
  export {
70
70
  runDoctor
71
71
  };
72
- //# sourceMappingURL=doctor-JPDQZHYJ.js.map
72
+ //# sourceMappingURL=doctor-FDGRZF6Q.js.map