fi-pool-server 0.1.0
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 +26 -0
- package/dist/db/index.d.ts +18 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +58 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate.d.ts +11 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +42 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/schema.d.ts +1101 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +149 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/services/analysis.d.ts +62 -0
- package/dist/services/analysis.d.ts.map +1 -0
- package/dist/services/analysis.js +74 -0
- package/dist/services/analysis.js.map +1 -0
- package/dist/services/daily-info.d.ts +150 -0
- package/dist/services/daily-info.d.ts.map +1 -0
- package/dist/services/daily-info.js +293 -0
- package/dist/services/daily-info.js.map +1 -0
- package/dist/services/embedding.d.ts +89 -0
- package/dist/services/embedding.d.ts.map +1 -0
- package/dist/services/embedding.js +227 -0
- package/dist/services/embedding.js.map +1 -0
- package/dist/services/llm.d.ts +64 -0
- package/dist/services/llm.d.ts.map +1 -0
- package/dist/services/llm.js +109 -0
- package/dist/services/llm.js.map +1 -0
- package/dist/services/pipeline.d.ts +161 -0
- package/dist/services/pipeline.d.ts.map +1 -0
- package/dist/services/pipeline.js +844 -0
- package/dist/services/pipeline.js.map +1 -0
- package/dist/services/pool.d.ts +142 -0
- package/dist/services/pool.d.ts.map +1 -0
- package/dist/services/pool.js +208 -0
- package/dist/services/pool.js.map +1 -0
- package/dist/services/sentiment.d.ts +31 -0
- package/dist/services/sentiment.d.ts.map +1 -0
- package/dist/services/sentiment.js +76 -0
- package/dist/services/sentiment.js.map +1 -0
- package/dist/services/session.d.ts +117 -0
- package/dist/services/session.d.ts.map +1 -0
- package/dist/services/session.js +176 -0
- package/dist/services/session.js.map +1 -0
- package/dist/services/stock.d.ts +82 -0
- package/dist/services/stock.d.ts.map +1 -0
- package/dist/services/stock.js +99 -0
- package/dist/services/stock.js.map +1 -0
- package/dist/services/word-count.d.ts +61 -0
- package/dist/services/word-count.d.ts.map +1 -0
- package/dist/services/word-count.js +120 -0
- package/dist/services/word-count.js.map +1 -0
- package/dist/tools/auxiliary.d.ts +93 -0
- package/dist/tools/auxiliary.d.ts.map +1 -0
- package/dist/tools/auxiliary.js +204 -0
- package/dist/tools/auxiliary.js.map +1 -0
- package/dist/tools/command.d.ts +193 -0
- package/dist/tools/command.d.ts.map +1 -0
- package/dist/tools/command.js +263 -0
- package/dist/tools/command.js.map +1 -0
- package/dist/tools/execute.d.ts +109 -0
- package/dist/tools/execute.d.ts.map +1 -0
- package/dist/tools/execute.js +112 -0
- package/dist/tools/execute.js.map +1 -0
- package/dist/tools/manager.d.ts +150 -0
- package/dist/tools/manager.d.ts.map +1 -0
- package/dist/tools/manager.js +200 -0
- package/dist/tools/manager.js.map +1 -0
- package/dist/tools/query.d.ts +163 -0
- package/dist/tools/query.d.ts.map +1 -0
- package/dist/tools/query.js +190 -0
- package/dist/tools/query.js.map +1 -0
- package/dist/utils/http-client.d.ts +87 -0
- package/dist/utils/http-client.d.ts.map +1 -0
- package/dist/utils/http-client.js +211 -0
- package/dist/utils/http-client.js.map +1 -0
- package/dist/utils/indicators.d.ts +194 -0
- package/dist/utils/indicators.d.ts.map +1 -0
- package/dist/utils/indicators.js +395 -0
- package/dist/utils/indicators.js.map +1 -0
- package/dist/utils/signals.d.ts +65 -0
- package/dist/utils/signals.d.ts.map +1 -0
- package/dist/utils/signals.js +171 -0
- package/dist/utils/signals.js.map +1 -0
- package/drizzle/0000_equal_marvel_apes.sql +124 -0
- package/drizzle/meta/0000_snapshot.json +858 -0
- package/drizzle/meta/_journal.json +13 -0
- package/package.json +58 -0
package/README.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# @fi-pool/server
|
|
2
|
+
|
|
3
|
+
Fi-Pool-Manager 核心服务层。
|
|
4
|
+
|
|
5
|
+
## 职责
|
|
6
|
+
|
|
7
|
+
- **数据获取**:通过腾讯财经接口获取 A 股日行情数据
|
|
8
|
+
- **本地分析**:计算技术指标(MA、MACD、RSI、KDJ、布林带)
|
|
9
|
+
- **LLM 分析**:调用本地 LM Studio 进行多角色分析和报告生成
|
|
10
|
+
- **向量检索**:通过 sqlite-vec 进行语义搜索
|
|
11
|
+
- **舆情搜索**:获取股票相关市场信息
|
|
12
|
+
- **数据访问**:通过 Drizzle ORM 操作 SQLite 数据库
|
|
13
|
+
|
|
14
|
+
## 目录结构
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
src/
|
|
18
|
+
├── data/ # 数据获取模块
|
|
19
|
+
├── analysis/ # 本地分析引擎
|
|
20
|
+
├── llm/ # LLM 调用封装
|
|
21
|
+
├── vector/ # 向量检索
|
|
22
|
+
├── search/ # 舆情搜索
|
|
23
|
+
├── db/ # 数据库访问层
|
|
24
|
+
├── session/ # Session 管理
|
|
25
|
+
└── index.ts # 入口
|
|
26
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 数据库连接与初始化
|
|
3
|
+
*
|
|
4
|
+
* 职责:
|
|
5
|
+
* - 读取 .env 配置的 DB_PATH
|
|
6
|
+
* - 创建 better-sqlite3 数据库连接
|
|
7
|
+
* - 初始化时自动创建数据目录
|
|
8
|
+
* - 暴露 drizzle 实例供全局使用
|
|
9
|
+
*/
|
|
10
|
+
import Database from 'better-sqlite3';
|
|
11
|
+
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
12
|
+
import * as schema from './schema.js';
|
|
13
|
+
export declare function getDbPath(): string;
|
|
14
|
+
export declare function initDatabase(): ReturnType<typeof drizzle<typeof schema>>;
|
|
15
|
+
export declare function getDatabase(): ReturnType<typeof drizzle<typeof schema>>;
|
|
16
|
+
export declare function getSqlite(): Database.Database;
|
|
17
|
+
export declare function closeDatabase(): void;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAOtC,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,YAAY,IAAI,UAAU,CAAC,OAAO,OAAO,CAAC,OAAO,MAAM,CAAC,CAAC,CAoBxE;AAED,wBAAgB,WAAW,IAAI,UAAU,CAAC,OAAO,OAAO,CAAC,OAAO,MAAM,CAAC,CAAC,CAKvE;AAED,wBAAgB,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAK7C;AAED,wBAAgB,aAAa,IAAI,IAAI,CAMpC"}
|
package/dist/db/index.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 数据库连接与初始化
|
|
3
|
+
*
|
|
4
|
+
* 职责:
|
|
5
|
+
* - 读取 .env 配置的 DB_PATH
|
|
6
|
+
* - 创建 better-sqlite3 数据库连接
|
|
7
|
+
* - 初始化时自动创建数据目录
|
|
8
|
+
* - 暴露 drizzle 实例供全局使用
|
|
9
|
+
*/
|
|
10
|
+
import Database from 'better-sqlite3';
|
|
11
|
+
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
12
|
+
import * as schema from './schema.js';
|
|
13
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
14
|
+
import { dirname, resolve } from 'path';
|
|
15
|
+
let dbInstance = null;
|
|
16
|
+
let sqliteInstance = null;
|
|
17
|
+
export function getDbPath() {
|
|
18
|
+
return process.env.DB_PATH || './data/fi-pool.db';
|
|
19
|
+
}
|
|
20
|
+
export function initDatabase() {
|
|
21
|
+
if (dbInstance)
|
|
22
|
+
return dbInstance;
|
|
23
|
+
const dbPath = resolve(getDbPath());
|
|
24
|
+
const dbDir = dirname(dbPath);
|
|
25
|
+
if (!existsSync(dbDir)) {
|
|
26
|
+
try {
|
|
27
|
+
mkdirSync(dbDir, { recursive: true });
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
throw new Error(`数据库目录创建失败: ${dbDir} — ${err instanceof Error ? err.message : String(err)}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
sqliteInstance = new Database(dbPath);
|
|
34
|
+
sqliteInstance.pragma('journal_mode = WAL');
|
|
35
|
+
sqliteInstance.pragma('foreign_keys = ON');
|
|
36
|
+
dbInstance = drizzle(sqliteInstance, { schema });
|
|
37
|
+
return dbInstance;
|
|
38
|
+
}
|
|
39
|
+
export function getDatabase() {
|
|
40
|
+
if (!dbInstance) {
|
|
41
|
+
throw new Error('数据库未初始化,请先调用 initDatabase()');
|
|
42
|
+
}
|
|
43
|
+
return dbInstance;
|
|
44
|
+
}
|
|
45
|
+
export function getSqlite() {
|
|
46
|
+
if (!sqliteInstance) {
|
|
47
|
+
throw new Error('数据库未初始化,请先调用 initDatabase()');
|
|
48
|
+
}
|
|
49
|
+
return sqliteInstance;
|
|
50
|
+
}
|
|
51
|
+
export function closeDatabase() {
|
|
52
|
+
if (sqliteInstance) {
|
|
53
|
+
sqliteInstance.close();
|
|
54
|
+
sqliteInstance = null;
|
|
55
|
+
dbInstance = null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAExC,IAAI,UAAU,GAAqD,IAAI,CAAC;AACxE,IAAI,cAAc,GAA6B,IAAI,CAAC;AAEpD,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,mBAAmB,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,cAAc,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,cAAc,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC5C,cAAc,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE3C,UAAU,GAAG,OAAO,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,cAAc,GAAG,IAAI,CAAC;QACtB,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 数据库迁移运行器
|
|
3
|
+
*
|
|
4
|
+
* 启动时查找数据库文件:
|
|
5
|
+
* - 不存在 → 初始化数据库并执行迁移
|
|
6
|
+
* - 存在 → 直接连接
|
|
7
|
+
* - 版本更新 → 通过 Drizzle 迁移脚本变更表结构(不覆盖已有数据)
|
|
8
|
+
*/
|
|
9
|
+
import { initDatabase } from './index.js';
|
|
10
|
+
export declare function ensureDatabase(): ReturnType<typeof initDatabase>;
|
|
11
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,YAAY,EAA0B,MAAM,YAAY,CAAC;AAQlE,wBAAgB,cAAc,IAAI,UAAU,CAAC,OAAO,YAAY,CAAC,CA2BhE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 数据库迁移运行器
|
|
3
|
+
*
|
|
4
|
+
* 启动时查找数据库文件:
|
|
5
|
+
* - 不存在 → 初始化数据库并执行迁移
|
|
6
|
+
* - 存在 → 直接连接
|
|
7
|
+
* - 版本更新 → 通过 Drizzle 迁移脚本变更表结构(不覆盖已有数据)
|
|
8
|
+
*/
|
|
9
|
+
import { migrate } from 'drizzle-orm/better-sqlite3/migrator';
|
|
10
|
+
import { initDatabase, getDbPath } from './index.js';
|
|
11
|
+
import { existsSync } from 'fs';
|
|
12
|
+
import { resolve, dirname } from 'path';
|
|
13
|
+
import { fileURLToPath } from 'url';
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = dirname(__filename);
|
|
16
|
+
export function ensureDatabase() {
|
|
17
|
+
const dbPath = resolve(getDbPath());
|
|
18
|
+
const isNew = !existsSync(dbPath);
|
|
19
|
+
const db = initDatabase();
|
|
20
|
+
if (isNew) {
|
|
21
|
+
console.log(`[db] 数据库文件不存在,初始化: ${dbPath}`);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
console.log(`[db] 连接已有数据库: ${dbPath}`);
|
|
25
|
+
}
|
|
26
|
+
// 执行迁移 — 迁移文件夹路径相对于本文件位置
|
|
27
|
+
// 编译后:packages/server/dist/db/migrate.js → ../../drizzle
|
|
28
|
+
// 源码时:packages/server/src/db/migrate.ts → ../../drizzle
|
|
29
|
+
const migrationsFolder = resolve(__dirname, '../../drizzle');
|
|
30
|
+
try {
|
|
31
|
+
migrate(db, { migrationsFolder });
|
|
32
|
+
console.log('[db] 迁移执行完成');
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
36
|
+
console.error('[db] 迁移失败:', msg);
|
|
37
|
+
console.error('[db] 数据库处于不一致状态,终止进程');
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
return db;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAe,SAAS,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,UAAU,cAAc;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAElC,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAE1B,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,yBAAyB;IACzB,yDAAyD;IACzD,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,OAAO,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
|