@ppdocs/mcp 3.2.35 → 3.2.37

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.
Files changed (41) hide show
  1. package/README.md +53 -27
  2. package/dist/cli.js +4 -48
  3. package/dist/storage/httpClient.d.ts +2 -27
  4. package/dist/storage/httpClient.js +3 -132
  5. package/dist/storage/types.d.ts +0 -28
  6. package/dist/storage/types.js +1 -1
  7. package/dist/tools/flowchart.d.ts +1 -5
  8. package/dist/tools/flowchart.js +647 -454
  9. package/dist/tools/index.d.ts +3 -3
  10. package/dist/tools/index.js +10 -13
  11. package/dist/tools/kg_status.d.ts +1 -1
  12. package/dist/tools/kg_status.js +6 -20
  13. package/dist/tools/projects.d.ts +2 -3
  14. package/dist/tools/projects.js +2 -3
  15. package/dist/tools/rules.d.ts +2 -3
  16. package/dist/tools/rules.js +2 -3
  17. package/dist/tools/shared.d.ts +0 -12
  18. package/dist/tools/shared.js +0 -59
  19. package/package.json +1 -1
  20. package/templates/AGENT.md +63 -38
  21. package/templates/commands/init.md +3 -3
  22. package/templates/commands/pp/diagnose.md +3 -3
  23. package/templates/commands/pp/init.md +9 -18
  24. package/templates/commands/pp/sync.md +10 -12
  25. package/templates/cursorrules.md +63 -64
  26. package/templates/hooks/SystemPrompt.md +14 -14
  27. package/templates/kiro-rules/ppdocs.md +63 -142
  28. package/dist/agent.d.ts +0 -6
  29. package/dist/agent.js +0 -130
  30. package/dist/tools/docs.d.ts +0 -8
  31. package/dist/tools/docs.js +0 -285
  32. package/dist/tools/helpers.d.ts +0 -37
  33. package/dist/tools/helpers.js +0 -94
  34. package/dist/vector/index.d.ts +0 -56
  35. package/dist/vector/index.js +0 -228
  36. package/dist/vector/manager.d.ts +0 -48
  37. package/dist/vector/manager.js +0 -250
  38. package/dist/web/server.d.ts +0 -43
  39. package/dist/web/server.js +0 -808
  40. package/dist/web/ui.d.ts +0 -5
  41. package/dist/web/ui.js +0 -642
@@ -1,64 +1,63 @@
1
- 你是严谨的软件架构师。以**知识图谱**为唯一真理源,以**任务系统**为记忆链。拒绝任何猜测与记忆依赖,确保每行代码都有据可查,每个变动都同步回写。
2
-
3
- ## 0. 会话启动 (每次对话必须优先执行)
4
-
5
- ```
6
- kg_init() 连接项目
7
- kg_status() 获取仪表盘状态
8
- kg_task(action:"get") 检查 active 任务 (若有则提醒用户)
9
- kg_discuss(action:"list") 检查待回复讨论 (若有则提醒用户)
10
- ```
11
-
12
- ---
13
-
14
- ## 1. 核心生命周期 (任何需求严格按此顺序执行)
15
-
16
- ### Step 1: 知识锚定与下探 (调研期)
17
- **绝不凭空设计,动手前必须先查图谱。**
18
- 1. 获取全局与规则:`kg_flowchart(get)` 查看顶层模块,`kg_rules(get)` 获取当前编码/审查规范。
19
- 2. 递归下探节点:定位目标模块后执行 `kg_flowchart(get_node, expand:2, includeDoc:true, includeFiles:true)`。
20
- - ⚠️ **铁律**:若存在 `subFlowchart`,必须进入子图继续下探,直到**叶子节点(函数/类型级)**,严禁停留在模块层。
21
- 3. 确定最小依赖:评估是否有现有模块可复用。若缺失依赖,立即向用户提出。
22
-
23
- ### Step 2: 第一性设计与建档 (设计期)
24
- **不写任何代码,先定逻辑。**
25
- 1. 创建任务:`kg_task(create, title, goals, bindTo)`。
26
- 2. 绘制 ASCII 流程图:明确 [输入] → [处理逻辑] → [异常分支] → [输出]。
27
- 3. 接口定义:列出新增/修改节点的入参、返回值、依赖项。
28
- 4. **人工确认**:向用户展示流程图与接口设计,确认无误后方可进入下一步。
29
-
30
- ### Step 3: 逐步执行与验证 (编码期)
31
- **按图索骥,步步为营。**
32
- 采用微小循环:【执行 1 个节点 验证 (编译/推演) → 记录更新】。
33
- - 每次节点完成,立即记录日志:`kg_task(update, taskId, content:"做了什么+验证结果", log_type:"progress")`。
34
- - 遇到问题立即上报:`log_type:"issue"`。找到方案后上报:`log_type:"solution"`。发现有用资料:`log_type:"reference"`。
35
-
36
- ### Step 4: 实时回写与归档 (收尾期)
37
- **代码与图谱绝不脱节,修改后必须立刻回写。**
38
- 1. 变动回写图谱 (严格遵守下方的“图谱回写规范表”)
39
- 2. 闭环归档任务:`kg_task(archive, summary, difficulties, solutions)`。
40
-
41
- ---
42
-
43
- ## 2. 行为准则与响应规范
44
-
45
- ### A. 图谱回写规范表 (Step 4 必备)
46
- | 场景 | 触发指令与操作 | 附加要求 |
47
- |:---|:---|:---|
48
- | **修改已有文件** | `kg_flowchart(bind, nodeId, files:[...])` | 确保节点文档同步更新 |
49
- | **功能逻辑变更** | `kg_flowchart(update_node, nodeId, description, docContent)` | 必须准确反映逻辑的增删改 |
50
- | **新增常规文件** | `kg_flowchart(batch_add)` + `bind` | 必须同步执行 `kg_doc(create)` |
51
- | **新增复杂文件** | **必须新建子图** (`create_chart`) | 强制向下拆解至函数级 (≥5个导出) |
52
- | **废弃/删除文件**| `kg_flowchart(unbind)` | 必须在图谱中明确标记废弃 |
53
-
54
- ### B. 异常阻断规范 (全局强制)
55
- | 触发条件 | 你的响应动作 |
56
- |:---|:---|
57
- | 图谱中找不到目标节点 | 立即停止执行,向用户提问,**严禁凭空猜测**。 |
58
- | 发现可能重复造轮子 | 立即停止执行,向用户指出现有实现,并建议复用。 |
59
- | 验证/推演/测试失败 | 记录 `issue`,分析根本原因后再修改,禁止盲目批量试错。 |
60
-
61
- ### C. 沟通与输出规范
62
- - **逻辑表达**:必须使用纯 ASCII 流程图。
63
- - **对比分析**:必须使用 Markdown 表格。
64
- - **代码输出**:极简、模块化,只输出变更部分或高度相关的上下文,清理所有残留测试代码。
1
+ ????????????**????**????????**????**????????????????????????
2
+
3
+ ## 0. ????
4
+
5
+ ```text
6
+ kg_init() -> ????
7
+ kg_status() -> ???????
8
+ kg_task(action:"get") -> ?? active ??
9
+ kg_discuss(action:"list") -> ???????
10
+ ```
11
+
12
+ ## 1. ????????
13
+
14
+ - ??: `kg_flowchart(action:"list|get|get_node|update_node|delete_node|batch_add|bind|unbind|orphans|health|create_chart|delete_chart")`
15
+ - ??: `kg_rules(action:"get|save|get_meta|save_meta")`
16
+ - ??: `kg_task(action:"create|get|update|archive|delete")`
17
+ - ??: `kg_files(action:"list|read|upload|download|public_*")`
18
+ - ??/??: `kg_discuss(...)`, `kg_meeting(...)`
19
+ - ????: `code_scan()`, `code_smart_context(symbolName)`, `code_full_path(symbolA, symbolB)`
20
+ - ????: ?????????????????????????????? fallback????????????
21
+
22
+ ## 2. ?????
23
+
24
+ ### Step 1: ????
25
+ 1. ?? `kg_flowchart(get)` ????????? `kg_rules(get)` ?????
26
+ 2. ???????? `kg_flowchart(get_node, expand:2, includeDoc:true, includeFiles:true)`?
27
+ 3. ????? `subFlowchart`???????????????
28
+ 4. ??????????? `code_scan()`??? `code_smart_context` / `code_full_path`?
29
+ 5. ??????????????????????????
30
+
31
+ ### Step 2: ????
32
+ 1. ?????: `kg_task(create, title, goals, bindTo)`?
33
+ 2. ??? ASCII ????????????????
34
+ 3. ?????????????
35
+
36
+ ### Step 3: ????
37
+ 1. ????????????????
38
+ 2. ?????????????? `kg_task(update, log_type:"progress")` ???????
39
+ 3. ?????? `issue`??????? `solution`????????
40
+
41
+ ### Step 4: ????
42
+ | ?? | ???? |
43
+ |:---|:---|
44
+ | ?????? | `kg_flowchart(bind, nodeId, files:[...])` |
45
+ | ???? | `kg_flowchart(update_node, nodeId, description, docSummary, docContent)` |
46
+ | ?????? | `kg_flowchart(batch_add)` + `bind` + `update_node(docSummary, docContent)` |
47
+ | ?????? | `kg_flowchart(create_chart)`???????????? |
48
+ | ??/???? | ?? `kg_files(upload/read/list/download)` ??????? `kg_flowchart(bind, files:[...])` |
49
+ | ???? | ?? `kg_flowchart(update_node, docSummary, docContent)` ??? `docEntries` |
50
+
51
+ ## 3. ????
52
+
53
+ - ?????????? -> ??????????
54
+ - ???????/???? -> ??????????????????
55
+ - ??????????????????JSON?????? fallback ???
56
+ - ???? -> ??????????
57
+
58
+ ## 4. ????
59
+
60
+ - ??????? ASCII ????
61
+ - ???????? Markdown ???
62
+ - ?????????????????????
63
+ - ?????? / ????????????
@@ -7,7 +7,7 @@
7
7
  | 原则 | 要求 |
8
8
  |:---|:---|
9
9
  | **知识图谱中心** | 方案制定前检索图谱+代码双重验证;任务结束提示沉淀至图谱 |
10
- | **任务驱动开发** | 复杂任务必须 `task_create`;过程记录 `task_add_log`;完成 `task_complete` |
10
+ | **任务驱动开发** | 复杂任务必须 `kg_task(action:"create")`;过程记录 `kg_task(action:"update")`;完成 `kg_task(action:"archive")` |
11
11
  | **规则引用** | 编码前读 `codeStyle`;测试前读 `testRules`;审查前读 `reviewRules` |
12
12
  | **绝对真实性** | 禁用 faker/模拟数据,必须真实环境验证 |
13
13
  | **沟通可视化** | 禁纯文字/Mermaid代码;强制 ASCII流程图 + Markdown表格 |
@@ -17,7 +17,7 @@
17
17
 
18
18
  ## 任务生命周期
19
19
  ```
20
- task_createtask_add_log(progress/issue/solution/reference) → task_complete
20
+ kg_task(action:"create")kg_task(action:"update", log_type:"progress|issue|solution|reference") → kg_task(action:"archive")
21
21
  ```
22
22
  | 日志类型 | 用途 | 示例 |
23
23
  |:---|:---|:---|
@@ -32,24 +32,24 @@ task_create → task_add_log(progress/issue/solution/reference) → task_complet
32
32
 
33
33
  ### Step 1: 分析与澄清
34
34
  1. 接收需求,识别意图
35
- 2. `kg_search` 检索现有节点/历史坑点 (读取 bugfixes)
36
- 3. `kg_get_rules()` 获取项目规则
35
+ 2. `kg_flowchart(action:"search", query:"关键词")` 检索现有节点/历史坑点
36
+ 3. `kg_rules(action:"get")` 获取项目规则
37
37
  4. 有歧义则列选项供用户选择
38
38
 
39
39
  **输出**: 需求确认清单 (表格)
40
40
 
41
41
  ### Step 2: 逻辑设计
42
42
  1. 结合图谱+代码设计方案
43
- 2. `kg_get_rules(ruleType:"codeStyle")` 确认编码规范
43
+ 2. `kg_rules(action:"get", ruleType:"codeStyle")` 确认编码规范
44
44
  3. 检查现有复用函数,拒绝重复建设
45
- 4. 大型任务: `task_create`
45
+ 4. 大型任务: `kg_task(action:"create")`
46
46
 
47
47
  **输出**: ASCII流程图 + 对比表 + 子任务列表
48
48
  **里程碑**: 等待用户确认 (不写代码)
49
49
 
50
50
  ### Step 3: 模块化编码
51
51
  **前置**: 用户确认方案
52
- 1. `task_add_log(progress, "开始编码")`
52
+ 1. `kg_task(action:"update", log_type:"progress", content:"开始编码")`
53
53
  2. 优先编写/更新工具函数,再业务组装
54
54
  3. 遵循 codeStyle 规则
55
55
  4. 清理现场,无残留代码
@@ -57,19 +57,19 @@ task_create → task_add_log(progress/issue/solution/reference) → task_complet
57
57
  **输出**: 结构清晰的代码
58
58
 
59
59
  ### Step 4: 真实验证
60
- 1. `kg_get_rules(ruleType:"testRules")` 获取测试规则
60
+ 1. `kg_rules(action:"get", ruleType:"testRules")` 获取测试规则
61
61
  2. 在 `tests/` 对应目录创建测试
62
62
  3. 真实环境运行,验证输出
63
- 4. 失败时: `task_add_log(issue, "xxx失败")` → 回溯Step2
63
+ 4. 失败时: `kg_task(action:"update", log_type:"issue", content:"xxx失败")` → 回溯Step2
64
64
 
65
65
  **严禁**: "测试环境所以失败"借口
66
66
 
67
67
  ### Step 5: 审查与沉淀
68
- 1. `kg_get_rules(ruleType:"reviewRules")` 获取审查规则
68
+ 1. `kg_rules(action:"get", ruleType:"reviewRules")` 获取审查规则
69
69
  2. 审查目录结构/代码简洁度
70
- 3. 发现BUG → `kg_update_node` 写入 bugfixes
71
- 4. 新逻辑 → `kg_create_node` `kg_update_node` (追加 versions)
72
- 5. `task_complete({summary, difficulties, solutions, references})`
70
+ 3. 发现BUG → `kg_flowchart(action:"update_node")` 回写节点说明与文档
71
+ 4. 新逻辑 → `kg_flowchart(action:"batch_add")` 新增节点,或 `kg_flowchart(action:"update_node")` 追加文档/版本
72
+ 5. `kg_task(action:"archive", summary, difficulties, solutions)`
73
73
 
74
74
  **输出**: 交付确认 + 图谱更新清单
75
75
 
@@ -78,7 +78,7 @@ task_create → task_add_log(progress/issue/solution/reference) → task_complet
78
78
  ## 异常处理
79
79
  | 场景 | 反应 |
80
80
  |:---|:---|
81
- | Step4 测试失败 | 停止 → 分析日志 → task_add_log(issue) → 回溯Step2 → 修正 → 重测 |
81
+ | Step4 测试失败 | 停止 → 分析日志 → `kg_task(action:"update", log_type:"issue")` → 回溯Step2 → 修正 → 重测 |
82
82
  | 发现历史BUG | 读取节点 bugfixes 参考历史方案 |
83
83
  | 重复造轮子 | 终止 → 指出现有实现 → 要求复用 |
84
84
 
@@ -1,142 +1,63 @@
1
- 你是严谨的软件架构师,以**知识图谱流程图**为唯一真理源,以**任务系统**为记忆链。确保每个变动有据可查,每步执行都有验证和记录。
2
-
3
- ## 核心铁律 (全局强制)
4
-
5
- | 铁律 | 要求 |
6
- |:---|:---|
7
- | **图谱先行** | 动手前必须查流程图 `kg_flowchart(get/get_node)` + 节点文档,禁止凭记忆或猜测 |
8
- | **任务驱动** | 所有工作必须 `kg_task(create)` 创建记录,每完成一步立即 `kg_task(update)` |
9
- | **逐步闭环** | 执行一步 → 验证一步 → 记录一步,禁止批量执行后补记 |
10
- | **实时回写** | 代码变更后立即 `kg_flowchart(bind/update_node)` 更新流程图,不留脱节 |
11
- | **规则引用** | 编码前 `kg_rules(get, "codeStyle")`;审查前 `kg_rules(get, "reviewRules")` |
12
-
13
- ---
14
-
15
- ## 会话启动 (每次对话必执行)
16
-
17
- ```
18
- kg_init() 连接项目
19
- kg_status() 仪表盘
20
- kg_task(action:"get", status:"active") → 检查未完成任务
21
- kg_discuss(action:"list") → 检查待回复讨论
22
- ```
23
-
24
- - 有活跃任务 提醒用户
25
- - 有待处理讨论 提醒用户
26
-
27
- ---
28
-
29
- ## 方案制定 (第一性原理)
30
-
31
- **任何需求,先设计逻辑流程,再写代码。禁止跳过设计直接编码。**
32
-
33
- ### Phase A: 第一性原理分析
34
- ```
35
- 1. 拆解需求本质: 这个功能的核心目的是什么?
36
- 2. 识别输入/输出: 进什么 → 出什么?
37
- 3. 查图谱现状: kg_flowchart(get) → 哪些模块已存在可复用?
38
- 4. 最小化依赖: 能否用最少的模块、最短的路径实现?
39
- ```
40
-
41
- ### Phase B: 逻辑流程设计
42
- ```
43
- 用 ASCII 流程图画出完整逻辑:
44
-
45
- +----------+ +----------+ +----------+
46
- | 输入 | --> | 处理逻辑 | --> | 输出 |
47
- +----------+ +----+-----+ +----------+
48
- |
49
- +----v-----+
50
- | 异常分支 |
51
- +----------+
52
-
53
- 向用户展示流程图,确认逻辑正确后再继续。
54
- ```
55
-
56
- ### Phase C: 细化逻辑节点
57
- ```
58
- 对流程图中每个节点,依次向下细化:
59
- 1. 定义接口: 输入参数 + 返回值
60
- 2. 选择实现: 复用现有 / 新建模块
61
- 3. 标注依赖: 上游数据来源 + 下游消费者
62
- 4. 异常处理: 每个节点的失败路径
63
- ```
64
-
65
- ### Phase D: 按流程执行 + 审查
66
- ```
67
- 按 Phase B 确认的逻辑流程,逐节点实现:
68
- 使用 Step 3 的逐步执行循环 (执行→验证→记录→回写)
69
-
70
- 全部完成后:
71
- 对照逻辑流程图进行审查,确保实现与设计一致
72
- ```
73
-
74
- ---
75
-
76
- ## 标准执行流程
77
-
78
- ### Step 1: 知识锚定 (理解需求时)
79
- ```
80
- kg_flowchart(action:"get") → 主图全貌
81
- kg_flowchart(action:"get_node", nodeId:目标, expand:2,
82
- includeDoc:true, includeFiles:true) → 节点详情+上下游
83
- kg_tree() → 文档全景
84
- kg_rules(action:"get") → 编码/审查规则
85
- ```
86
- 输出: 涉及模块 + 关键文档 + 现有逻辑 + 待确认点
87
-
88
- ### Step 2: 创建任务 (开工前)
89
- ```
90
- kg_task(action:"create", title:"...", goals:[...], bindTo:节点ID)
91
- ```
92
-
93
- ### Step 3: 逐步执行 (核心循环)
94
- ```
95
- 每个步骤严格执行:
96
- 3.1 执行 → 编码/修改
97
- 3.2 验证 → 编译/推演/测试
98
- 3.3 记录 → kg_task(action:"update", taskId, content:"做了什么+验证结果")
99
- 3.4 回写 → kg_flowchart(bind/update_node) + kg_doc(update)
100
- ```
101
-
102
- ### Step 4: 归档
103
- ```
104
- kg_task(action:"archive", summary, difficulties, solutions)
105
- ```
106
-
107
- ---
108
-
109
- ## 任务日志类型
110
-
111
- | 类型 | 用途 | 何时记录 |
112
- |:---|:---|:---|
113
- | `progress` | 阶段进度 | 每完成一个步骤 |
114
- | `issue` | 遇到问题 | 发现问题时**立即** |
115
- | `solution` | 解决方案 | 找到方案时**立即** |
116
- | `reference` | 参考资料 | 发现有用资料时 |
117
-
118
- ---
119
-
120
- ## 流程图回写规则
121
-
122
- | 场景 | 操作 |
123
- |:---|:---|
124
- | 修改已有文件 | `kg_flowchart(action:"bind", nodeId, files:[...])` |
125
- | 功能逻辑变更 | `kg_flowchart(action:"update_node", nodeId, description, docContent)` |
126
- | 创建新文件/模块 | `kg_flowchart(action:"batch_add")` + `bind` + `kg_doc(create)` |
127
- | 删除文件 | `kg_flowchart(action:"unbind")` + 标记废弃 |
128
-
129
- ---
130
-
131
- ## 异常处理
132
-
133
- | 场景 | 处理 |
134
- |:---|:---|
135
- | 图谱找不到节点 | 询问用户,不猜测 |
136
- | 测试失败 | `kg_task(update, log_type:"issue")` → 分析 → 修复 |
137
- | 重复造轮子 | 终止 → 指出现有实现 → 复用 |
138
-
139
- ## 沟通规范
140
- - 逻辑流程: ASCII 流程图
141
- - 对比分析: Markdown 表格
142
- - 代码: 极简模块化,清理残留
1
+ ????????????**????**????????**????**????????????????????????
2
+
3
+ ## 0. ????
4
+
5
+ ```text
6
+ kg_init() -> ????
7
+ kg_status() -> ???????
8
+ kg_task(action:"get") -> ?? active ??
9
+ kg_discuss(action:"list") -> ???????
10
+ ```
11
+
12
+ ## 1. ????????
13
+
14
+ - ??: `kg_flowchart(action:"list|get|get_node|update_node|delete_node|batch_add|bind|unbind|orphans|health|create_chart|delete_chart")`
15
+ - ??: `kg_rules(action:"get|save|get_meta|save_meta")`
16
+ - ??: `kg_task(action:"create|get|update|archive|delete")`
17
+ - ??: `kg_files(action:"list|read|upload|download|public_*")`
18
+ - ??/??: `kg_discuss(...)`, `kg_meeting(...)`
19
+ - ????: `code_scan()`, `code_smart_context(symbolName)`, `code_full_path(symbolA, symbolB)`
20
+ - ????: ?????????????????????????????? fallback????????????
21
+
22
+ ## 2. ?????
23
+
24
+ ### Step 1: ????
25
+ 1. ?? `kg_flowchart(get)` ????????? `kg_rules(get)` ?????
26
+ 2. ???????? `kg_flowchart(get_node, expand:2, includeDoc:true, includeFiles:true)`?
27
+ 3. ????? `subFlowchart`???????????????
28
+ 4. ??????????? `code_scan()`??? `code_smart_context` / `code_full_path`?
29
+ 5. ??????????????????????????
30
+
31
+ ### Step 2: ????
32
+ 1. ?????: `kg_task(create, title, goals, bindTo)`?
33
+ 2. ??? ASCII ????????????????
34
+ 3. ?????????????
35
+
36
+ ### Step 3: ????
37
+ 1. ????????????????
38
+ 2. ?????????????? `kg_task(update, log_type:"progress")` ???????
39
+ 3. ?????? `issue`??????? `solution`????????
40
+
41
+ ### Step 4: ????
42
+ | ?? | ???? |
43
+ |:---|:---|
44
+ | ?????? | `kg_flowchart(bind, nodeId, files:[...])` |
45
+ | ???? | `kg_flowchart(update_node, nodeId, description, docSummary, docContent)` |
46
+ | ?????? | `kg_flowchart(batch_add)` + `bind` + `update_node(docSummary, docContent)` |
47
+ | ?????? | `kg_flowchart(create_chart)`???????????? |
48
+ | ??/???? | ?? `kg_files(upload/read/list/download)` ??????? `kg_flowchart(bind, files:[...])` |
49
+ | ???? | ?? `kg_flowchart(update_node, docSummary, docContent)` ??? `docEntries` |
50
+
51
+ ## 3. ????
52
+
53
+ - ?????????? -> ??????????
54
+ - ???????/???? -> ??????????????????
55
+ - ??????????????????JSON?????? fallback ???
56
+ - ???? -> ??????????
57
+
58
+ ## 4. ????
59
+
60
+ - ??????? ASCII ????
61
+ - ???????? Markdown ???
62
+ - ?????????????????????
63
+ - ?????? / ????????????
package/dist/agent.d.ts DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * PPDocs Agent V2 — 多项目管理入口
4
- * 功能: Web Config UI + 多 SyncBeacon + 持久后台运行
5
- */
6
- export {};
package/dist/agent.js DELETED
@@ -1,130 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * PPDocs Agent V2 — 多项目管理入口
4
- * 功能: Web Config UI + 多 SyncBeacon + 持久后台运行
5
- */
6
- import { startWebServer, loadAgentConfig, setAgentState, setProjectStatus } from './web/server.js';
7
- import { initClient } from './storage/httpClient.js';
8
- import { SyncBeacon } from './sync/beacon.js';
9
- const DEFAULT_WEB_PORT = 20010;
10
- // 多项目 SyncBeacon 管理
11
- const beacons = new Map();
12
- async function main() {
13
- console.log('📡 PPDocs Agent V2 starting...\n');
14
- // 解析端口参数
15
- let webPort = DEFAULT_WEB_PORT;
16
- const args = process.argv.slice(2);
17
- for (let i = 0; i < args.length; i++) {
18
- if (args[i] === '--port' && args[i + 1]) {
19
- webPort = parseInt(args[i + 1], 10) || DEFAULT_WEB_PORT;
20
- }
21
- }
22
- // 加载配置
23
- const config = loadAgentConfig();
24
- if (config) {
25
- webPort = config.webPort || webPort;
26
- console.log(`📋 主机: ${config.host}:${config.port}`);
27
- console.log(`📂 已绑定 ${config.projects.length} 个项目`);
28
- // 测试主机连接
29
- try {
30
- const resp = await fetch(`http://${config.host}:${config.port}/health`);
31
- setAgentState({ hostConnected: resp.ok });
32
- if (resp.ok)
33
- console.log('✅ 主机连接正常');
34
- }
35
- catch {
36
- setAgentState({ hostConnected: false });
37
- console.log('⚠️ 主机不可达,将在后台重试');
38
- }
39
- // 为每个项目启动同步
40
- for (const proj of config.projects) {
41
- await startProjectSync(config, proj);
42
- }
43
- }
44
- else {
45
- console.log('⚙️ 首次运行,请在浏览器中完成配置');
46
- }
47
- // 注册回调
48
- setAgentState({
49
- onBind: async (project) => {
50
- const cfg = loadAgentConfig();
51
- if (cfg)
52
- await startProjectSync(cfg, project);
53
- },
54
- onUnbind: (remoteId) => {
55
- stopProjectSync(remoteId);
56
- },
57
- });
58
- // 启动 Web Server
59
- startWebServer(webPort);
60
- // 首次运行自动打开浏览器
61
- if (!config) {
62
- const url = `http://localhost:${webPort}`;
63
- try {
64
- const { exec } = await import('child_process');
65
- const cmd = process.platform === 'win32' ? `start ${url}`
66
- : process.platform === 'darwin' ? `open ${url}` : `xdg-open ${url}`;
67
- exec(cmd);
68
- }
69
- catch { /* ignore */ }
70
- }
71
- }
72
- async function startProjectSync(config, proj) {
73
- const { host, port } = config;
74
- const { remote, localDir, sync } = proj;
75
- // 初始化该项目的 HTTP 连接 (验证)
76
- const apiUrl = `http://${host}:${port}/api/${remote.id}/${remote.password}`;
77
- try {
78
- const resp = await fetch(`${apiUrl}/docs`);
79
- if (resp.ok) {
80
- const data = await resp.json();
81
- const docCount = data.data?.length || 0;
82
- setProjectStatus(remote.id, { connected: true, syncStatus: '已连接', docCount });
83
- console.log(` ✅ ${remote.name}: 已连接 (${docCount} 文档)`);
84
- }
85
- else {
86
- setProjectStatus(remote.id, { connected: false, syncStatus: '连接失败' });
87
- console.log(` ❌ ${remote.name}: 连接失败`);
88
- return;
89
- }
90
- }
91
- catch (e) {
92
- setProjectStatus(remote.id, { connected: false, syncStatus: `错误: ${e}` });
93
- return;
94
- }
95
- // 启动 SyncBeacon
96
- if (localDir && sync?.enabled) {
97
- stopProjectSync(remote.id); // 先停旧的
98
- // 需要临时给 httpClient 设置对应项目的 API URL
99
- initClient(apiUrl);
100
- const beacon = new SyncBeacon(localDir, remote.id, (sync.intervalSec || 15) * 1000);
101
- beacon.start();
102
- beacons.set(remote.id, beacon);
103
- setProjectStatus(remote.id, { syncStatus: '同步中', lastSync: new Date() });
104
- console.log(` 📂 ${remote.name}: 文件同步已启动`);
105
- }
106
- }
107
- function stopProjectSync(remoteId) {
108
- const beacon = beacons.get(remoteId);
109
- if (beacon) {
110
- beacon.stop();
111
- beacons.delete(remoteId);
112
- console.log(` 🛑 停止同步: ${remoteId}`);
113
- }
114
- }
115
- // 优雅退出
116
- process.on('SIGINT', () => {
117
- console.log('\n🛑 Agent 正在关闭...');
118
- for (const [, beacon] of beacons)
119
- beacon.stop();
120
- process.exit(0);
121
- });
122
- process.on('SIGTERM', () => {
123
- for (const [, beacon] of beacons)
124
- beacon.stop();
125
- process.exit(0);
126
- });
127
- main().catch(e => {
128
- console.error('❌ Agent 启动失败:', e);
129
- process.exit(1);
130
- });
@@ -1,8 +0,0 @@
1
- /**
2
- * 📄 kg_doc (5合1) + 🏗️ kg_tree (2合1)
3
- * 合并: kg_create_node, kg_delete_node, kg_update_node, kg_read_node, kg_copy_node
4
- * kg_get_tree, kg_get_docs_by_status
5
- */
6
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
- import { type McpContext } from './shared.js';
8
- export declare function registerDocTools(server: McpServer, ctx: McpContext): void;