Storymaker 的 TypeScript / Node.js 叙事服务。项目基于 Fastify,提供世界、NPC、日历事件、对话记忆与本地 RAG 检索 API,并保留原 Python 服务的主要 HTTP 与存储行为。
首次启用真实语义检索时,@huggingface/transformers 会下载嵌入和重排模型。模型缓存在 .hf_models/ 与 .hf_cache/,不会提交到 Git。
git clone git@github.com:ColdWu/storymaker-ts.git
cd storymaker-ts
npm ci
cp .env.example .env.local
npm run dev
Windows PowerShell 可使用:
Copy-Item .env.example .env.local
npm run dev
服务默认监听 http://127.0.0.1:8010。启动后可以访问:
GET /:本地 NPC 对话测试页GET /health:服务与 LLM 配置状态GET /api/worlds:世界列表GET /api/npcs:当前世界的 NPC 列表GET /api/calendar:当前日历状态完整接口定义见 docs/api-contract.md。默认请求世界为 bar,也可以通过 X-Storymaker-World-Id 请求头选择其他世界。
复制 .env.example 为 .env.local,按需填写:
STORYMAKER_PORT=8010
STORYMAKER_LLM_PROVIDER=deepseek
STORYMAKER_LLM_API_KEY=
STORYMAKER_LLM_ENDPOINT=
STORYMAKER_LLM_MODEL=
也可以使用服务商专用变量:DEEPSEEK_API_KEY、GEMINI_API_KEY、GOOGLE_API_KEY 或 LONGCAT_API_KEY。RAG 开关、模型与检索参数均记录在 .env.example 中。
如果只需离线运行测试或暂时不下载模型,可以设置:
STORYMAKER_RAG_EMBEDDINGS_ENABLED=false
STORYMAKER_RAG_RERANKER_ENABLED=false
npm run dev # 开发模式,监听源码变化
npm run build # 编译到 dist/
npm start # 运行已编译服务
npm run typecheck # TypeScript 类型检查
npm run test:offline # 不依赖外部服务的测试
npm test # 完整测试、契约检查与真实烟雾测试
npm run rag:rebuild # 重建本地 RAG 索引
完整测试会同步并调用 Python 参考运行时,且部分流程可能访问真实 LLM 或下载模型;日常开发优先使用 npm run test:offline。
src/ 服务、路由、存储、LLM 与 RAG 实现
tests/ 单元、集成、契约与一致性测试
data/ 随仓库提供的示例世界数据
public/ 本地浏览器测试页
scripts/ 迁移、契约、烟雾测试和审计工具
docs/ API、存储与 RAG 设计文档
reports/ 迁移验收及一致性审计结果
.env.example;仅保存在本机 .env.local。.env*(保留 .env.example)、私钥/证书、模型缓存、构建产物、日志与 SQLite 索引均已加入 .gitignore。本仓库暂未声明开源许可证。除非仓库所有者另行授权,否则保留所有权利。
1 commits
TypeScript
83.4%
HTML
8.1%
JavaScript
6.5%
Python
1.0%
Storymaker 的 TypeScript / Node.js 叙事服务。项目基于 Fastify,提供世界、NPC、日历事件、对话记忆与本地 RAG 检索 API,并保留原 Python 服务的主要 HTTP 与存储行为。
首次启用真实语义检索时,@huggingface/transformers 会下载嵌入和重排模型。模型缓存在 .hf_models/ 与 .hf_cache/,不会提交到 Git。
git clone git@github.com:ColdWu/storymaker-ts.git
cd storymaker-ts
npm ci
cp .env.example .env.local
npm run dev
Windows PowerShell 可使用:
Copy-Item .env.example .env.local
npm run dev
服务默认监听 http://127.0.0.1:8010。启动后可以访问:
GET /:本地 NPC 对话测试页GET /health:服务与 LLM 配置状态GET /api/worlds:世界列表GET /api/npcs:当前世界的 NPC 列表GET /api/calendar:当前日历状态完整接口定义见 docs/api-contract.md。默认请求世界为 bar,也可以通过 X-Storymaker-World-Id 请求头选择其他世界。
复制 .env.example 为 .env.local,按需填写:
STORYMAKER_PORT=8010
STORYMAKER_LLM_PROVIDER=deepseek
STORYMAKER_LLM_API_KEY=
STORYMAKER_LLM_ENDPOINT=
STORYMAKER_LLM_MODEL=
也可以使用服务商专用变量:DEEPSEEK_API_KEY、GEMINI_API_KEY、GOOGLE_API_KEY 或 LONGCAT_API_KEY。RAG 开关、模型与检索参数均记录在 .env.example 中。
如果只需离线运行测试或暂时不下载模型,可以设置:
STORYMAKER_RAG_EMBEDDINGS_ENABLED=false
STORYMAKER_RAG_RERANKER_ENABLED=false
npm run dev # 开发模式,监听源码变化
npm run build # 编译到 dist/
npm start # 运行已编译服务
npm run typecheck # TypeScript 类型检查
npm run test:offline # 不依赖外部服务的测试
npm test # 完整测试、契约检查与真实烟雾测试
npm run rag:rebuild # 重建本地 RAG 索引
完整测试会同步并调用 Python 参考运行时,且部分流程可能访问真实 LLM 或下载模型;日常开发优先使用 npm run test:offline。
src/ 服务、路由、存储、LLM 与 RAG 实现
tests/ 单元、集成、契约与一致性测试
data/ 随仓库提供的示例世界数据
public/ 本地浏览器测试页
scripts/ 迁移、契约、烟雾测试和审计工具
docs/ API、存储与 RAG 设计文档
reports/ 迁移验收及一致性审计结果
.env.example;仅保存在本机 .env.local。.env*(保留 .env.example)、私钥/证书、模型缓存、构建产物、日志与 SQLite 索引均已加入 .gitignore。本仓库暂未声明开源许可证。除非仓库所有者另行授权,否则保留所有权利。
1 commits
TypeScript
83.4%
HTML
8.1%
JavaScript
6.5%
Python
1.0%