galaxy-opc-plugin 0.2.2 → 0.2.3

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
@@ -2,9 +2,10 @@
2
2
 
3
3
  > 一人公司(OPC)孵化与赋能平台,基于 [OpenClaw](https://github.com/openclaw/openclaw) 构建的 AI 员工全套解决方案。
4
4
 
5
- ![版本](https://img.shields.io/badge/version-0.1.0-blue)
5
+ ![版本](https://img.shields.io/badge/version-0.4.0-blue)
6
6
  ![License](https://img.shields.io/badge/license-MIT-green)
7
7
  ![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.x-orange)
8
+ ![Tests](https://img.shields.io/badge/tests-199/199-brightgreen)
8
9
 
9
10
  ---
10
11
 
@@ -14,7 +15,7 @@
14
15
  |------|--------|------|
15
16
  | 核心管理 | `opc_core` | 公司注册、客户管理、收支记录 |
16
17
  | AI 员工 | `opc_staff` | 行政/财务/HR/法务/市场/运营岗位配置 |
17
- | 财税管理 | `opc_finance` | 发票、增值税、所得税、纳税申报 |
18
+ | 财税管理 | `opc_finance` | 发票、增值税、所得税、纳税申报、**应收应付管理** |
18
19
  | 法务合同 | `opc_legal` | 合同管理、风险评估、到期提醒 |
19
20
  | 人力资源 | `opc_hr` | 员工档案、薪资、社保、公积金 |
20
21
  | 新媒体运营 | `opc_media` | 内容创建、发布排期、数据分析 |
@@ -23,10 +24,14 @@
23
24
  | 服务采购 | `opc_procurement` | 服务项目、采购订单、费用统计 |
24
25
  | 生命周期 | `opc_lifecycle` | 里程碑、大事记、时间线报告 |
25
26
  | 运营监控 | `opc_monitoring` | 指标记录、告警管理、KPI 看板 |
27
+ | **订单中台** | `opc_order` | **报价管理、合同流转、里程碑跟踪** |
28
+ | **新功能** | **v0.3: 5大功能 + v0.4: 订单闭环** | **见下方新增功能部分** |
26
29
 
27
30
  **自动提醒服务**(后台每小时扫描):
28
31
  - 税务申报到期提醒(7天内)
29
32
  - 合同到期提醒(30天内)
33
+ - **里程碑到期提醒(7天内)** ← 新增
34
+ - **应收风险分层(normal/warning/critical)** ← 新增
30
35
  - 现金流预警(净流出超 5000 元)
31
36
  - 融资轮次截止跟进
32
37
 
@@ -37,6 +42,164 @@
37
42
 
38
43
  ---
39
44
 
45
+ ## 🎯 v0.3 新增功能
46
+
47
+ ### 1. 智能新手引导 (Onboarding Flow)
48
+
49
+ 首次使用时自动触发个性化引导,通过 3 个问题了解用户需求:
50
+
51
+ - **业务阶段**: 想法阶段 / 准备注册 / 已注册 / 运营中
52
+ - **业务类型**: 内容创作 / 技术服务 / 产品销售 / 其他
53
+ - **预计年收入**: <10万 / 10-50万 / >50万
54
+
55
+ 根据回答自动生成个性化启动清单,支持清单项目勾选和中断后继续。
56
+
57
+ **文件**: `src/opc/briefing-builder.ts`
58
+
59
+ ### 2. 每日智能简报 (Daily Brief)
60
+
61
+ 每天 9:00 主动推送实时简报,包含:
62
+
63
+ - **待办提醒**: 逾期款项催收、合同到期、税务申报、客户回访
64
+ - **经营数据**: 本周/本月收入、支出、利润、现金余额
65
+ - **AI 员工汇报**: 财务顾问现金流预警、法务合规提醒、运营进度汇报
66
+ - **推送渠道**: OpenClaw 对话 + 飞书 Webhook
67
+
68
+ **文件**: `src/opc/proactive-service.ts`, `src/opc/briefing-builder.ts`
69
+
70
+ ### 3. 监控中心 Dashboard
71
+
72
+ 一屏看清公司运营状态,包含:
73
+
74
+ - **关键指标卡片**: 本月收入/利润、现金余额、应收账款
75
+ - **风险预警列表**: 现金流预警(<2月)、合同到期(30天内)、逾期款项、税务提醒
76
+ - **今日待办**: 按优先级(紧急/重要/一般)排序,支持快速操作
77
+ - **AI 建议**: 基于数据分析的可执行建议,包含行动按钮
78
+
79
+ **访问方式**: `http://localhost:18789/opc/admin` → Dashboard 页签
80
+
81
+ **文件**: `src/api/dashboard.ts`, `src/web/config-ui.ts`
82
+
83
+ ### 4. 应收应付管理 (Payment Management)
84
+
85
+ 专业的应收应付账款管理系统:
86
+
87
+ **CRUD 操作**:
88
+ - 创建应收/应付记录(含客户、金额、到期日期)
89
+ - 查询列表(按方向/状态/客户筛选)
90
+ - 更新到账金额和状态(支持部分到账)
91
+ - 删除记录和批量操作
92
+
93
+ **核心功能**:
94
+ - 自动逾期检测(超期自动标记)
95
+ - 应收应付汇总统计(待收/待付总额、逾期笔数)
96
+ - 发票和合同关联
97
+ - 催款提醒和对账
98
+
99
+ **访问方式**: OpenClaw 对话或管理后台"收付款" Tab
100
+
101
+ **文件**: `src/tools/finance-tool.ts` (扩展 5 个新 action)
102
+
103
+ ### 5. 智能记账 (Smart Accounting)
104
+
105
+ 自然语言记账,智能分类和提醒:
106
+
107
+ **功能**:
108
+ - **自然语言解析**: 支持"记一笔支出,今天请客户吃饭花了500块"
109
+ - **自动分类**: 业务招待费/办公费用/固定资产/生活支出等
110
+ - **智能提醒**: "记得保存发票可抵税"、"超出本月预算"、"需要开发票吗?"
111
+ - **连续记账**: 支持多笔账目连续输入和修改
112
+
113
+ **使用场景**:
114
+ ```
115
+ 用户: "记一笔支出,买了办公用品,150块"
116
+ AI: ✓ 已记录
117
+ - 类型: 支出
118
+ - 金额: ¥150
119
+ - 分类: 办公费用 (可抵扣)
120
+ - 提醒: 记得申报时扣除,需要保存发票吗?
121
+ ```
122
+
123
+ **文件**: `src/tools/finance-tool.ts`, `src/opc/intelligence-engine.ts`
124
+
125
+ ---
126
+
127
+ ## 🎯 v0.4 新增功能(订单闭环)
128
+
129
+ ### 6. 订单中台 (Order Management)
130
+
131
+ 签单到回款的全流程管理,**每个单子有状态、有金额、有责任时间**:
132
+
133
+ **核心流程**:
134
+ ```
135
+ 客户咨询 → 创建报价 → 报价转合同 → 签约确认 → 里程碑跟踪 → 款项到账 → 自动记账
136
+ ```
137
+
138
+ **主要功能**:
139
+ - **报价管理**: 创建报价单(自动编号 QT-YYYYMM-NNN),支持多明细行
140
+ - **报价转合同**: 一键转合同,**自动创建里程碑和应收记录**
141
+ - **里程碑跟踪**: 签约→初稿→终稿,自动流转状态
142
+ - **到期提醒**: 7天内到期的里程碑自动推送
143
+ - **进行中订单**: 查看所有活跃合同及进度
144
+
145
+ **自动化亮点**:
146
+ - ✅ 报价转合同 → 自动创建 N 个里程碑 + N 条应收
147
+ - ✅ 签约确认 → 自动启动第一个里程碑
148
+ - ✅ 里程碑完成 → 自动启动下一个里程碑
149
+ - ✅ 到账登记 → 自动创建交易记录 + 更新里程碑
150
+
151
+ **工具名**: `opc_order`
152
+
153
+ **文件**: `src/tools/order-tool.ts`
154
+
155
+ **使用指南**: 查看 [ORDER_WORKFLOW_GUIDE.md](ORDER_WORKFLOW_GUIDE.md)
156
+
157
+ ### 7. 回款助手增强 (Collection Assistant)
158
+
159
+ AI 赋能的应收催款和风险管理:
160
+
161
+ **核心功能**:
162
+ - **AI 催款文案**: 自动生成礼貌/坚定/紧急三种语气的催款邮件、微信、短信
163
+ - **风险分层**: 自动分类 normal(≤7天)/ warning(8-30天)/ critical(>30天)
164
+ - **一键到账**: 登记收款,自动创建交易记录,自动完成里程碑
165
+ - **自动提醒**: 到期前 3/7 天、逾期 7/15/30 天自动推送
166
+
167
+ **风险分层规则**:
168
+ | 风险等级 | 逾期天数 | 自动操作 |
169
+ |----------|----------|----------|
170
+ | normal | ≤ 7 天 | 常规跟进 |
171
+ | warning | 8-30 天 | 电话催收 |
172
+ | critical | > 30 天 | 创建告警,建议升级催收 |
173
+
174
+ **示例对话**:
175
+ ```
176
+ 你: "客户A逾期15天了,帮我生成催款文案"
177
+ AI: [调用 generate_collection_notice]
178
+ 已生成礼貌催款文案:
179
+ - 邮件:【友情提醒】XX项目款项到期提醒
180
+ - 微信:张总好!初稿款3600已到期,麻烦核对一下~
181
+ - 短信:【XX公司】尊敬的客户,您有一笔3600元...
182
+ ```
183
+
184
+ **工具名**: `opc_finance` (扩展 4 个新 action)
185
+
186
+ **文件**: `src/tools/finance-tool.ts`
187
+
188
+ ### 8. 数据闭环追溯
189
+
190
+ 完整的业务数据链:
191
+
192
+ ```
193
+ 报价单 ID → 合同 ID → 里程碑 ID → 应收 ID → 交易 ID
194
+ ```
195
+
196
+ 每一笔钱都有完整的来龙去脉,支持:
197
+ - 从报价单追溯到最终收款
198
+ - 从交易记录反查对应的合同和里程碑
199
+ - 生成客户价值分析报告
200
+
201
+ ---
202
+
40
203
  ## 📦 安装
41
204
 
42
205
  ### 前提条件
@@ -89,23 +252,57 @@ npm install
89
252
 
90
253
  ## 🚀 快速开始
91
254
 
255
+ ### 第一次使用(自动触发新手引导)
256
+
92
257
  重启 OpenClaw Gateway 后,对 AI 说:
93
258
 
94
259
  ```
95
- 注册一家公司,名称"极光科技有限公司",行业"软件开发",注册资金50万
260
+ 我想创建一家一人公司,帮我注册吧
96
261
  ```
97
262
 
98
- 然后访问管理后台:`http://localhost:18789/opc/admin`
263
+ 系统会自动触发新手引导:
264
+ 1. 询问你的业务阶段、业务类型、预计年收入
265
+ 2. 生成个性化启动清单
266
+ 3. 引导你完成首个任务
99
267
 
100
268
  ### 典型 SOP 流程
101
269
 
102
270
  ```
103
- 1. 注册公司opc_core: register_company
104
- 2. 激活公司 → opc_core: activate_company
105
- 3. 配置 AI 员工 opc_staff: init_default_staff
106
- 4. 日常运营 告诉 AI 助手记录收支、合同、员工等
107
- 5. 融资管理opc_investment: create_round
108
- 6. 生命周期报告 opc_lifecycle: generate_report
271
+ 1. 新手引导首次使用自动触发,生成启动清单
272
+ 2. 公司注册 → opc_core: register_company
273
+ 3. 激活公司 opc_core: activate_company
274
+ 4. 配置 AI 员工 opc_staff: init_default_staff
275
+ 5. 日常运营智能记账、应收应付管理、定期简报
276
+ 6. 监控仪表盘 访问 Dashboard 查看关键指标和风险预警
277
+ 7. 融资管理 → opc_investment: create_round
278
+ 8. 生命周期报告 → opc_lifecycle: generate_report
279
+ ```
280
+
281
+ ### 使用新增功能
282
+
283
+ #### 查看每日简报
284
+ ```
285
+ AI: 给我发送今天的经营简报
286
+ ```
287
+ (系统也会在每天 9:00 自动推送)
288
+
289
+ #### 管理应收应付
290
+ ```
291
+ AI: 记录一笔应收账款,客户是张三,金额5000,3月15号到期
292
+ AI: 列出所有逾期的应收款项
293
+ AI: 更新张三的应收账款状态为已到账
294
+ ```
295
+
296
+ #### 智能记账
297
+ ```
298
+ AI: 记一笔支出,今天请客户吃饭花了800块
299
+ AI: 记录一笔收入,某某客户付款了2万
300
+ ```
301
+
302
+ #### 访问 Dashboard
303
+ ```
304
+ 浏览器打开: http://localhost:18789/opc/admin
305
+ 点击"监控中心"查看关键指标、风险预警和今日待办
109
306
  ```
110
307
 
111
308
  ---
package/index.ts CHANGED
@@ -18,6 +18,7 @@ import { startProactiveService } from "./src/opc/proactive-service.js";
18
18
  import { runIntelligenceScanForCompany } from "./src/opc/intelligence-engine.js";
19
19
  import { detectMilestones } from "./src/opc/milestone-detector.js";
20
20
  import { updateCompanyStage } from "./src/opc/stage-detector.js";
21
+ import { generateDailyBrief } from "./src/opc/daily-brief.js";
21
22
  import {
22
23
  registerSpawnedSession,
23
24
  getSessionTaskMapping,
@@ -40,6 +41,9 @@ import { registerProjectTool } from "./src/tools/project-tool.js";
40
41
  import { registerSearchTool } from "./src/tools/search-tool.js";
41
42
  import { registerStaffTool } from "./src/tools/staff-tool.js";
42
43
  import { registerDocumentTool } from "./src/tools/document-tool.js";
44
+ import { registerSmartAccountingTool } from "./src/tools/smart-accounting-tool.js";
45
+ import { registerOnboardingTool } from "./src/tools/onboarding-tool.js";
46
+ import { registerOrderTool } from "./src/tools/order-tool.js";
43
47
  import { registerOpcCommand } from "./src/commands/opc-command.js";
44
48
  import { triggerEventRules } from "./src/opc/event-triggers.js";
45
49
  import { registerConfigUi } from "./src/web/config-ui.js";
@@ -97,6 +101,7 @@ const plugin = {
97
101
  registerOpcTool(api, db);
98
102
  registerStaffTool(api, db);
99
103
  registerOpbTool(api, db);
104
+ registerOnboardingTool(api, db);
100
105
  registerSearchTool(api);
101
106
 
102
107
  // 注册 Phase 2 专业工具(可通过管理后台禁用)
@@ -115,6 +120,12 @@ const plugin = {
115
120
  // 文档生成工具(始终启用)
116
121
  registerDocumentTool(api, db);
117
122
 
123
+ // 智能记账工具(始终启用)
124
+ registerSmartAccountingTool(api, db);
125
+
126
+ // 订单中台工具(始终启用,核心签单闭环)
127
+ registerOrderTool(api, db);
128
+
118
129
  // 资金闭环工具(始终启用,核心商业模式)
119
130
  registerAcquisitionTool(api, db);
120
131
  registerAssetPackageTool(api, db);
@@ -349,6 +360,101 @@ const plugin = {
349
360
  }
350
361
  });
351
362
 
363
+ // ── heartbeat 钩子 — 每日简报推送 ──
364
+ api.on("heartbeat", async (event, ctx) => {
365
+ try {
366
+ const hour = new Date().getHours();
367
+
368
+ // 每天早上 9:00 推送简报
369
+ if (hour === 9) {
370
+ const companies = db!.query(
371
+ "SELECT * FROM opc_companies WHERE status = 'active'",
372
+ ) as { id: string; name: string }[];
373
+
374
+ for (const company of companies) {
375
+ try {
376
+ const brief = generateDailyBrief(db!, company.id);
377
+
378
+ // 格式化简报内容
379
+ const briefContent = formatDailyBrief(company.name, brief);
380
+
381
+ // 通过 Agent 消息推送(假设有 sendMessage API)
382
+ // 注意:根据实际 SDK API 调整
383
+ api.logger.info(`opc: 生成每日简报 - ${company.name}`);
384
+ api.logger.info(`opc: 简报摘要 - ${brief.summary}`);
385
+
386
+ // TODO: 如果 SDK 支持主动推送,在此调用
387
+ // await ctx.sendMessage({
388
+ // agentId: `opc-${company.id}`,
389
+ // content: briefContent
390
+ // });
391
+ } catch (err) {
392
+ api.logger.info(
393
+ `opc: 生成简报失败 (${company.name}): ${err instanceof Error ? err.message : String(err)}`,
394
+ );
395
+ }
396
+ }
397
+ }
398
+ } catch (err) {
399
+ api.logger.info(`opc: heartbeat 处理失败: ${err instanceof Error ? err.message : String(err)}`);
400
+ }
401
+ });
402
+
403
+ // 格式化每日简报为消息内容
404
+ function formatDailyBrief(
405
+ companyName: string,
406
+ brief: {
407
+ todos: Array<{ type: string; title: string; priority: string; dueDate?: string; description: string }>;
408
+ metrics: Array<{ label: string; value: number | string; trend?: string; unit?: string }>;
409
+ staffReports: Array<{ role: string; roleName: string; observations: string[]; suggestions: string[]; tasks: Array<{ title: string; status: string }> }>;
410
+ summary: string;
411
+ },
412
+ ): string {
413
+ let content = `【${companyName} - 每日简报】\n\n`;
414
+ content += `${brief.summary}\n\n`;
415
+
416
+ // 待办事项
417
+ if (brief.todos.length > 0) {
418
+ content += `📋 今日待办 (${brief.todos.length} 项):\n`;
419
+ brief.todos.forEach((todo, i) => {
420
+ const priority = todo.priority === "urgent" ? "🔴" : todo.priority === "high" ? "🟠" : "🟢";
421
+ content += `${i + 1}. ${priority} ${todo.title}\n`;
422
+ if (todo.dueDate) content += ` 到期: ${todo.dueDate}\n`;
423
+ });
424
+ content += "\n";
425
+ }
426
+
427
+ // 关键指标
428
+ if (brief.metrics.length > 0) {
429
+ content += `📊 关键指标:\n`;
430
+ brief.metrics.forEach((metric) => {
431
+ content += `- ${metric.label}: ${metric.value}${metric.unit || ""}`;
432
+ if (metric.trend) content += ` (${metric.trend})`;
433
+ content += "\n";
434
+ });
435
+ content += "\n";
436
+ }
437
+
438
+ // AI 员工汇报
439
+ if (brief.staffReports.length > 0) {
440
+ content += `🤖 AI 员工汇报:\n`;
441
+ brief.staffReports.forEach((report) => {
442
+ content += `\n[${report.roleName}]\n`;
443
+ if (report.observations.length > 0) {
444
+ content += `观察: ${report.observations.join("; ")}\n`;
445
+ }
446
+ if (report.suggestions.length > 0) {
447
+ content += `建议: ${report.suggestions.join("; ")}\n`;
448
+ }
449
+ if (report.tasks.length > 0) {
450
+ content += `任务: ${report.tasks.map(t => `${t.title}(${t.status})`).join(", ")}\n`;
451
+ }
452
+ });
453
+ }
454
+
455
+ return content;
456
+ }
457
+
352
458
  // 注册后台服务(数据库生命周期 + 主动智能)
353
459
  let stopProactive: (() => void) | null = null;
354
460
  api.registerService({
@@ -2,7 +2,7 @@
2
2
  "id": "galaxy-opc-plugin",
3
3
  "name": "OPC Platform",
4
4
  "description": "星环OPC中心 — 一人公司孵化与赋能平台",
5
- "version": "0.2.0",
5
+ "version": "0.2.3",
6
6
  "skills": ["./skills"],
7
7
  "configSchema": {
8
8
  "type": "object",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "galaxy-opc-plugin",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "星环 Galaxy OPC — 一人公司孵化与赋能平台 OpenClaw 插件",
5
5
  "keywords": [
6
6
  "openclaw",
@@ -197,6 +197,10 @@ export function registerCompanyRoutes(api: OpenClawPluginApi, db: OpcDatabase, g
197
197
  return true;
198
198
  }
199
199
  } catch (err) {
200
+ console.error('[OPC Companies API] Error:', err);
201
+ if (err instanceof Error) {
202
+ console.error('Stack trace:', err.stack);
203
+ }
200
204
  sendError(res, err instanceof Error ? err.message : String(err), 500);
201
205
  return true;
202
206
  }