@zhongqian97-code/ecode 0.5.38 → 0.5.40

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.
@@ -5,6 +5,12 @@ const _ew=process.emitWarning.bind(process);process.emitWarning=function(w,...a)
5
5
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
6
6
  import { homedir } from "os";
7
7
  import { join } from "path";
8
+ function expandTilde(p) {
9
+ if (p === "~" || p.startsWith("~/") || p.startsWith("~\\")) {
10
+ return join(homedir(), p.slice(1));
11
+ }
12
+ return p;
13
+ }
8
14
  var MODEL_CONTEXT_LIMITS = {
9
15
  // OpenAI GPT 系列
10
16
  "gpt-4o": 128e3,
@@ -87,7 +93,11 @@ function loadConfig() {
87
93
  // 容易引入歧义,因此仅支持配置文件覆盖
88
94
  dangerousPatterns: fileConfig.dangerousPatterns ?? DEFAULTS.dangerousPatterns,
89
95
  // logDir: ECODE_LOG_DIR 环境变量 > 配置文件 > undefined(禁用日志)
90
- logDir: process.env.ECODE_LOG_DIR ?? fileConfig.logDir ?? DEFAULTS.logDir,
96
+ // expandTilde ~ 替换为 homedir(),Node.js 不执行 shell 的 ~ 展开
97
+ logDir: (() => {
98
+ const raw = process.env.ECODE_LOG_DIR ?? fileConfig.logDir ?? DEFAULTS.logDir;
99
+ return raw ? expandTilde(raw) : raw;
100
+ })(),
91
101
  // contextLimit 仅支持配置文件配置:数值类型在文件中更直观,
92
102
  // 环境变量还需要 parseInt 转换,增加出错风险
93
103
  contextLimit: fileConfig.contextLimit,
@@ -97,7 +107,10 @@ function loadConfig() {
97
107
  systemPrompt: process.env.ECODE_SYSTEM_PROMPT ?? fileConfig.systemPrompt,
98
108
  // providers/defaultProvider 仅支持配置文件配置,不支持环境变量注入
99
109
  providers: fileConfig.providers,
100
- defaultProvider: fileConfig.defaultProvider
110
+ defaultProvider: fileConfig.defaultProvider,
111
+ // ECODE_WEB_TOKEN 环境变量优先;未设时从配置文件读取;
112
+ // 两者均未设时保持 undefined,运行时由 generateAccessToken() 生成随机令牌
113
+ webToken: process.env.ECODE_WEB_TOKEN ?? fileConfig.webToken
101
114
  };
102
115
  }
103
116
  function saveConfig(partial) {
@@ -4,7 +4,7 @@ import {
4
4
  createSessionMetadata,
5
5
  updateSessionMetadata,
6
6
  writeSessionMetadata
7
- } from "./chunk-O4YFKL3N.js";
7
+ } from "./chunk-72HNTRAP.js";
8
8
 
9
9
  // src/providers/openai.ts
10
10
  import OpenAI from "openai";
@@ -3,7 +3,7 @@ const _ew=process.emitWarning.bind(process);process.emitWarning=function(w,...a)
3
3
  import {
4
4
  findSession,
5
5
  listSessions
6
- } from "./chunk-O4YFKL3N.js";
6
+ } from "./chunk-72HNTRAP.js";
7
7
 
8
8
  // src/sessions/command.ts
9
9
  import * as path from "path";
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  cmdSessionsInspect,
6
6
  cmdSessionsList,
7
7
  cmdSessionsReplay
8
- } from "./chunk-GR5MASXF.js";
8
+ } from "./chunk-FPB3QTP5.js";
9
9
  import {
10
10
  APPLY_PATCH_TOOL,
11
11
  BASH_TOOL,
@@ -34,14 +34,14 @@ import {
34
34
  todo,
35
35
  webFetch,
36
36
  writeFile
37
- } from "./chunk-7DHMJ6NS.js";
37
+ } from "./chunk-7RQ4D4K6.js";
38
38
  import {
39
39
  createSessionMetadata,
40
40
  generateTitle,
41
41
  loadConfig,
42
42
  updateSessionMetadata,
43
43
  writeSessionMetadata
44
- } from "./chunk-O4YFKL3N.js";
44
+ } from "./chunk-72HNTRAP.js";
45
45
 
46
46
  // src/index.ts
47
47
  import { createRequire } from "module";
@@ -810,8 +810,8 @@ if (rawArgs[0] === "web") {
810
810
  webAutoApprove = true;
811
811
  }
812
812
  }
813
- const { buildServer, generateAccessToken } = await import("./web-7WWKTWTB.js");
814
- const token = generateAccessToken();
813
+ const { buildServer, generateAccessToken } = await import("./web-JLLCAFXF.js");
814
+ const token = finalConfig.webToken ?? generateAccessToken();
815
815
  const manager = new SessionManager(finalConfig);
816
816
  const server = await buildServer({
817
817
  config: finalConfig,
@@ -827,6 +827,9 @@ if (rawArgs[0] === "web") {
827
827
  ecode web admin started`);
828
828
  console.log(` Bind: ${webHost}:${webPort}`);
829
829
  console.log(` URL: ${accessUrl}`);
830
+ if (finalConfig.webToken) {
831
+ console.log(` Token: fixed (from config)`);
832
+ }
830
833
  console.log(`
831
834
  Press Ctrl+C to stop.
832
835
  `);
@@ -905,6 +908,6 @@ Node.js 16/18 \u8BF7\u4F7F\u7528 --web \u6216 --pipe \u6A21\u5F0F\u3002
905
908
  );
906
909
  process.exit(1);
907
910
  }
908
- const { App, React, render } = await import("./ui-XL5IDLH5.js");
911
+ const { App, React, render } = await import("./ui-3AW6W2SI.js");
909
912
  render(React.createElement(App, { config: finalConfig, version: VERSION, autoMode, registry, trustedSkillDirs, initialMessages }));
910
913
  }
@@ -26,7 +26,7 @@ import {
26
26
  todo,
27
27
  webFetch,
28
28
  writeFile
29
- } from "./chunk-7DHMJ6NS.js";
29
+ } from "./chunk-7RQ4D4K6.js";
30
30
  import {
31
31
  loadJobs,
32
32
  removeJob,
@@ -38,7 +38,7 @@ import {
38
38
  getContextLimit,
39
39
  updateSessionMetadata,
40
40
  writeSessionMetadata
41
- } from "./chunk-O4YFKL3N.js";
41
+ } from "./chunk-72HNTRAP.js";
42
42
 
43
43
  // src/ui/index.ts
44
44
  import { default as default2 } from "react";
@@ -3,7 +3,7 @@ const _ew=process.emitWarning.bind(process);process.emitWarning=function(w,...a)
3
3
  import {
4
4
  cmdSessionsFork,
5
5
  cmdSessionsReplay
6
- } from "./chunk-GR5MASXF.js";
6
+ } from "./chunk-FPB3QTP5.js";
7
7
  import {
8
8
  loadJobs,
9
9
  removeJob,
@@ -15,7 +15,7 @@ import {
15
15
  listSessions,
16
16
  loadMessagesFromJsonl,
17
17
  saveConfig
18
- } from "./chunk-O4YFKL3N.js";
18
+ } from "./chunk-72HNTRAP.js";
19
19
 
20
20
  // src/web/server.ts
21
21
  import Fastify from "fastify";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhongqian97-code/ecode",
3
- "version": "0.5.38",
3
+ "version": "0.5.40",
4
4
  "description": "A minimal Claude Code clone with REPL interface and bash tool calling",
5
5
  "type": "module",
6
6
  "author": "zhongqian97-code",