@bolloon/bolloon-agent 0.1.41 → 0.2.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.
Files changed (47) hide show
  1. package/.comm/README.md +21 -0
  2. package/.comm/default/2026-06-17T08-23-00-017Z-8a735de8.md +7 -0
  3. package/CLAUDE.md +3 -0
  4. package/build/icon.icns +0 -0
  5. package/build/icon.ico +0 -0
  6. package/build/icon.png +0 -0
  7. package/build/tray.png +0 -0
  8. package/build/trayTemplate.png +0 -0
  9. package/dist/agents/intent-classifier.js +99 -0
  10. package/dist/agents/pi-sdk.js +1418 -67
  11. package/dist/agents/pre-tool-validator.js +2 -1
  12. package/dist/agents/shell-guard.js +9 -3
  13. package/dist/agents/shell-tool.js +28 -13
  14. package/dist/agents/task-state.js +224 -0
  15. package/dist/agents/workflow-pivot-loop.js +30 -0
  16. package/dist/bollharness-integration/gate-state-machine.js +13 -0
  17. package/dist/bollharness-integration/integration.js +71 -0
  18. package/dist/bollharness-integration/skill-adapter.js +52 -127
  19. package/dist/bootstrap/context-hierarchy.js +6 -4
  20. package/dist/cli/interface.js +28 -0
  21. package/dist/documents/reader.js +14 -0
  22. package/dist/electron/config.js +21 -0
  23. package/dist/electron/dialogs.js +108 -0
  24. package/dist/electron/first-run.js +170 -0
  25. package/dist/electron/ipc.js +20 -0
  26. package/dist/electron/logger.js +114 -0
  27. package/dist/electron/main.js +63 -0
  28. package/dist/electron/menu.js +145 -0
  29. package/dist/electron/paths.js +75 -0
  30. package/dist/electron/server.js +112 -0
  31. package/dist/electron/tray.js +111 -0
  32. package/dist/electron/window.js +108 -0
  33. package/dist/git-transport/chat-render.js +155 -0
  34. package/dist/git-transport/chat-repo.js +370 -0
  35. package/dist/git-transport/chat-types.js +23 -0
  36. package/dist/git-transport/chat-watch.js +102 -0
  37. package/dist/index.js +477 -28
  38. package/dist/llm/pi-ai.js +103 -27
  39. package/dist/network/local-inbox-bus.js +73 -0
  40. package/dist/network/p2p-direct.js +3 -4
  41. package/dist/pi-ecosystem-judgment/adaptive-scan.js +6 -2
  42. package/dist/pi-ecosystem-judgment/causal-judge.js +3 -3
  43. package/dist/pi-ecosystem-judgment/index.js +1 -1
  44. package/dist/security/tool-gate.js +11 -0
  45. package/dist/web/server.js +68 -4
  46. package/package.json +8 -3
  47. package/scripts/lefthook-helper.sh +69 -0
@@ -0,0 +1,21 @@
1
+ # .comm/ — 跨机聊天收件箱
2
+
3
+ Bolloon chat transport: commits-as-messages.
4
+ 每条消息 = 一个 markdown 文件 + 一次 git commit + push.
5
+
6
+ ## 目录约定
7
+
8
+ - `<role>/` — 每个 role 一个子目录, 里面是该角色发的所有消息
9
+ - `_state/` — 本地运行态 (cursor, seen, lock), 不 commit
10
+ - `_inbox/` — 看门狗把对方消息反写到本地, 不 commit
11
+
12
+ ## 子命令
13
+
14
+ ```
15
+ bolloon --chat-init
16
+ bolloon --chat-send "..."
17
+ bolloon --chat-pull
18
+ bolloon --chat-list
19
+ bolloon --chat-watch
20
+ bolloon --chat-status
21
+ ```
@@ -0,0 +1,7 @@
1
+ ---
2
+ v: 1
3
+ from: default
4
+ fromPk: d2e7473e4a2f8e6057d6c000f2146109585ed3bdb387233c5f9fecdd0c57d17d
5
+ ts: 2026-06-17T08:23:00.017Z
6
+ ---
7
+ 今天把 chat transport 装上了, 测试一下两台电脑能不能通过 github 同步消息
package/CLAUDE.md ADDED
@@ -0,0 +1,3 @@
1
+
2
+ <!-- bolloon-classify -->
3
+ **变更分类**: implementation | 修复用户登录页面样式 | 2026-06-18
Binary file
package/build/icon.ico ADDED
Binary file
package/build/icon.png ADDED
Binary file
package/build/tray.png ADDED
Binary file
Binary file
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Intent Classifier — 最小化用户请求分类 (M2.2, 2026-06-17)
3
+ *
4
+ * 目的: 让 agent 知道用户是问个问题, 还是让改代码, 还是让跑长任务.
5
+ * 不同 intent 注入不同 system prompt 片段, 行为更可预测.
6
+ *
7
+ * 设计: 不调 LLM (避免 5-10s 延迟) — 用 keyword + 长度 + 问号正则匹配.
8
+ * 简单但比之前完全没分类好.
9
+ *
10
+ * 未来升级: 用 LLM 分类 4-5 个 label, 但需要缓存 (相同 input 30min 内复用)
11
+ */
12
+ /**
13
+ * 优先级: code_edit > multi_step > document > question > chitchat
14
+ * 检测顺序重要 (强信号优先)
15
+ */
16
+ export function classifyIntent(input) {
17
+ const text = (input || '').trim();
18
+ if (text.length === 0)
19
+ return 'chitchat';
20
+ const lower = text.toLowerCase();
21
+ // 1. code_edit: 强信号 — 包含"改/修/加/删/编辑/refactor/实现/fix/bug"
22
+ // + 暗示一个具体目标 (函数名 / 文件名 / 报错)
23
+ const codeEditSignals = [
24
+ /\b(改|修|加|删|编辑|重写|重构|实现|写|写一个|添加|移除|fix|bug|patch|refactor|implement|add|remove|rewrite|edit)\b/i,
25
+ ];
26
+ const hasCodeTarget = /\b([\w-]+\.(ts|js|tsx|jsx|py|go|rs|md|json|yaml|yml))\b/.test(lower)
27
+ || /`[\w.]+\(/.test(text) // 提到函数调用
28
+ || /报错|错误信息|stack\s*trace|exception/i.test(text);
29
+ if (codeEditSignals.some(rx => rx.test(text)) && hasCodeTarget) {
30
+ return 'code_edit';
31
+ }
32
+ // 2. multi_step: "帮我做 X" + 多步暗示 ("然后/接着/之后/再/最后/first/then/next")
33
+ // 或长度 > 300 字
34
+ const multiStepSignals = /(然后|接着|之后|再|最后|首先.*然后|first.+then|step\s*\d|phase\s*\d|1\)|2\)|3\))/i;
35
+ if (text.length > 300 || multiStepSignals.test(text)) {
36
+ return 'multi_step';
37
+ }
38
+ // 3. document: 提到具体文件路径 + 读取/分析/总结
39
+ if (/(读|看|分析|总结|摘要|review|read|analyze|summarize)/i.test(text)
40
+ && /\.[a-z]{1,5}\b/i.test(text)) {
41
+ return 'document';
42
+ }
43
+ // 4. question: 问号 / 怎么/为什么/什么/是啥/how|why|what
44
+ if (/[??]/.test(text)
45
+ || /^(怎么|为什么|什么|哪些|是啥|如何|哪|how|why|what|which|where|when)\b/i.test(lower)) {
46
+ return 'question';
47
+ }
48
+ return 'chitchat';
49
+ }
50
+ /**
51
+ * 根据 intent 给出 system prompt 补充片段
52
+ * (注入到 system prompt 末尾, 不替换主提示)
53
+ */
54
+ export function intentHint(intent) {
55
+ switch (intent) {
56
+ case 'code_edit':
57
+ return `\n\n## 任务类型: code_edit
58
+ 当前请求是改代码任务. 你应该:
59
+ 1. 先 \`list_files\` 或 \`read_document\` 看目标文件当前内容
60
+ 2. 用 \`edit_file\` 精确定位改 (old_text 全文匹配) 或 \`write_file\` 整体覆写
61
+ 3. 改完跑 \`npx tsc --noEmit\` 和 \`npx vitest run --reporter=dot --bail=1\` 验证
62
+ 4. 用 \`git_commit\` 提交到当前分支 (分支名 agent/<task-id>)
63
+ 不要调用 \`<final gen>\` 标记除非任务真正完成 (commit + 测试通过).
64
+
65
+ ## 信息不足时主动查询
66
+ **重要**: 不要假设! 如果任何步骤信息不足 (路径不明确/命令参数不知道/分支策略不清楚/保护规则不明白), 用工具主动查:
67
+ - \`list_files\` 看目录结构
68
+ - \`read_document\` 读配置文件 / 源文件
69
+ - \`shell_exec\` 跑 \`git status\` / \`git branch\` / \`git log\` / \`git diff\` 等
70
+ - \`git_diff\` 看当前修改
71
+
72
+ 常见查询命令:
73
+ - \`shell_exec(command="git", args=["status"])\`
74
+ - \`shell_exec(command="git", args=["branch", "-a"])\`
75
+ - \`shell_exec(command="git", args=["log", "--oneline", "-5"])\`
76
+ - \`shell_exec(command="git", args=["diff"])\` (查看 staged + unstaged)
77
+ - \`shell_exec(command="git", args=["remote", "-v"])\`
78
+ - \`list_files(path="src/agents")\` 看 bolloon agent 模块
79
+ - \`read_document(path="~/.bolloon/self-improve-policy.json")\` 看你的护栏规则
80
+
81
+ 不要凭空推理, 查不到再问用户.`;
82
+ case 'multi_step':
83
+ return `\n\n## 任务类型: multi_step
84
+ 当前请求是多步任务. 你应该:
85
+ 1. 在响应开头写一个 [PLAN] 段, 列 3-7 步计划
86
+ 2. 每完成一步更新状态 ([STEP N/7] ... ✓)
87
+ 3. 中间失败要明确说明, 不要假装完成
88
+ 4. 用 \`git_commit\` 在每步结束或整个任务结束时提交`;
89
+ case 'document':
90
+ return `\n\n## 任务类型: document
91
+ 当前请求是文档/代码阅读分析. 优先用 \`read_document\` 读完整内容, 然后给出结构化分析.`;
92
+ case 'question':
93
+ return `\n\n## 任务类型: question
94
+ 当前请求是问问题. 直接给答案, 不要调用工具 (除非用户明确要查).`;
95
+ case 'chitchat':
96
+ default:
97
+ return ''; // chitchat 不加提示
98
+ }
99
+ }