inkdrift 0.1.0 → 0.1.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 CHANGED
@@ -46,20 +46,6 @@ npm install
46
46
 
47
47
  ## 使用
48
48
 
49
- ### npx 运行(无需 clone)
50
-
51
- ```bash
52
- # 1. 在工作目录创建 .env 配置文件
53
- cp .env.example .env
54
- # 编辑 .env 填写 FLOWUS_TOKEN、FLOWUS_DATABASE_ID、GLM_API_KEY
55
-
56
- # 2. 启动 nmem 服务
57
- nmem serve &
58
-
59
- # 3. 运行
60
- npx inkdrift
61
- ```
62
-
63
49
  ### 本地开发
64
50
 
65
51
  ```bash
@@ -74,6 +60,42 @@ POLL_INTERVAL_MS=30000 npm run dev
74
60
 
75
61
  `Ctrl+C` 优雅退出。
76
62
 
63
+ ## 部署
64
+
65
+ ### 1. 创建配置文件
66
+
67
+ ```bash
68
+ cat > ~/.inkdrift << 'EOF'
69
+ FLOWUS_TOKEN=xxx
70
+ FLOWUS_DATABASE_ID=xxx
71
+ GLM_API_KEY=xxx
72
+ EOF
73
+ ```
74
+
75
+ 或从 Gitea secrets 下载:
76
+
77
+ ```bash
78
+ export GITEA_TOKEN=your_gitea_read_token
79
+ wget -q -O ~/.inkdrift \
80
+ "http://mini.totoro.studio:3000/api/v1/repos/goldyard/secrets/raw/inkdrift.env?token=$GITEA_TOKEN"
81
+ ```
82
+
83
+ ### 2. 启动
84
+
85
+ ```bash
86
+ nmem serve &
87
+ npx inkdrift
88
+ ```
89
+
90
+ ### 3. 更新配置
91
+
92
+ 修改 [secrets 仓库](http://mini.totoro.studio:3000/goldyard/secrets) 中的 `inkdrift.env` 并 push,然后在服务器重新下载:
93
+
94
+ ```bash
95
+ wget -q -O ~/.inkdrift \
96
+ "http://mini.totoro.studio:3000/api/v1/repos/goldyard/secrets/raw/inkdrift.env?token=$GITEA_TOKEN"
97
+ ```
98
+
77
99
  ## 项目结构
78
100
 
79
101
  ```
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;CAsBlB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAkCA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;CAsBlB,CAAC"}
@@ -1,23 +1,40 @@
1
1
  import dotenv from 'dotenv';
2
2
  import { existsSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
3
4
  import { fileURLToPath } from 'node:url';
4
5
  import path from 'node:path';
5
6
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
6
- // Prefer .env from current working directory (npx global usage),
7
- // fallback to project-root .env (development mode)
8
- const cwdEnv = path.resolve(process.cwd(), '.env');
7
+ // Config file priority:
8
+ // 1. ~/.inkdrift (npx global usage)
9
+ // 2. project-root .env (development mode)
10
+ const homeConfig = path.join(homedir(), '.inkdrift');
9
11
  const projectEnv = path.resolve(__dirname, '../../.env');
10
- const envPath = existsSync(cwdEnv) ? cwdEnv : projectEnv;
11
- dotenv.config({ path: envPath });
12
+ const configPath = existsSync(homeConfig)
13
+ ? homeConfig
14
+ : projectEnv;
15
+ if (existsSync(configPath)) {
16
+ dotenv.config({ path: configPath });
17
+ }
18
+ function requireEnv(name) {
19
+ const value = process.env[name];
20
+ if (!value) {
21
+ console.error(`Missing config. Create ~/.inkdrift with:
22
+ FLOWUS_TOKEN=xxx
23
+ FLOWUS_DATABASE_ID=xxx
24
+ GLM_API_KEY=xxx`);
25
+ process.exit(1);
26
+ }
27
+ return value;
28
+ }
12
29
  export const config = {
13
30
  flowus: {
14
31
  baseUrl: process.env.FLOWUS_BASE_URL || 'https://api.flowus.cn',
15
- token: process.env.FLOWUS_TOKEN || '',
16
- databaseId: process.env.FLOWUS_DATABASE_ID || '',
32
+ token: requireEnv('FLOWUS_TOKEN'),
33
+ databaseId: requireEnv('FLOWUS_DATABASE_ID'),
17
34
  },
18
35
  glm: {
19
36
  baseUrl: process.env.GLM_BASE_URL || 'https://aiping.cn/api/v1',
20
- apiKey: process.env.GLM_API_KEY || '',
37
+ apiKey: requireEnv('GLM_API_KEY'),
21
38
  model: process.env.GLM_MODEL || 'GLM-4.7',
22
39
  },
23
40
  web: {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,iEAAiE;AACjE,mDAAmD;AACnD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;AACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACzD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;AAEzD,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAEjC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB;QAC/D,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE;QACrC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACjD;IACD,GAAG,EAAE;QACH,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,0BAA0B;QAC/D,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;QACrC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,SAAS;KAC1C;IACD,GAAG,EAAE;QACH,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC;KACnD;IACD,KAAK,EAAE;QACL,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,EAAE,EAAE,CAAC;QAC/C,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,EAAE,EAAE,CAAC;KACnE;IACD,GAAG,EAAE;QACH,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;QACtC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ;KACrC;CACF,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,wBAAwB;AACxB,oCAAoC;AACpC,0CAA0C;AAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACrD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAEzD,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IACvC,CAAC,CAAC,UAAU;IACZ,CAAC,CAAC,UAAU,CAAC;AAEf,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;IAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC;;;kBAGA,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB;QAC/D,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC;QACjC,UAAU,EAAE,UAAU,CAAC,oBAAoB,CAAC;KAC7C;IACD,GAAG,EAAE;QACH,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,0BAA0B;QAC/D,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC;QACjC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,SAAS;KAC1C;IACD,GAAG,EAAE;QACH,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC;KACnD;IACD,KAAK,EAAE;QACL,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,EAAE,EAAE,CAAC;QAC/C,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,EAAE,EAAE,CAAC;KACnE;IACD,GAAG,EAAE;QACH,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;QACtC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ;KACrC;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inkdrift",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "WeChat public account article knowledge distiller bot",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -11,19 +11,11 @@
11
11
  "dist",
12
12
  ".env.example"
13
13
  ],
14
- "bin": {
15
- "inkdrift": "./dist/index.js"
16
- },
17
- "files": [
18
- "dist",
19
- ".env.example"
20
- ],
21
14
  "scripts": {
22
15
  "dev": "tsx src/index.ts",
23
16
  "dev:once": "tsx src/index-once.ts",
24
17
  "build": "tsc",
25
18
  "prepare": "npm run build",
26
- "prepare": "npm run build",
27
19
  "start": "node dist/index.js",
28
20
  "start:once": "node dist/index-once.js",
29
21
  "test": "echo \"Error: no test specified\" && exit 1"