@bolloon/bolloon-agent 0.3.44 → 0.3.45

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 (214) hide show
  1. package/README.md +135 -135
  2. package/bin/bolloon-cli.cjs +183 -183
  3. package/bin/bolloon-daemon.sh +207 -0
  4. package/bin/bolloon.cjs +0 -0
  5. package/dist/agents/constraint-layer.js +19 -19
  6. package/dist/agents/judgment-protocol.js +14 -14
  7. package/dist/agents/pi-sdk-types.js +12 -12
  8. package/dist/agents/pi-sdk.js +148 -89
  9. package/dist/agents/skill-writer.js +19 -0
  10. package/dist/agents/workflow-pivot-loop.js +2 -2
  11. package/dist/bollharness/src/scripts/deploy-guard.js +8 -8
  12. package/dist/bollharness-integration/context-router-judgment.js +4 -4
  13. package/dist/bollharness-integration/context-router.js +292 -292
  14. package/dist/bollharness-integration/gate-state-machine.js +13 -13
  15. package/dist/bollharness-integration/llm-judgment-engine.js +134 -134
  16. package/dist/bollharness-integration/skill-adapter.js +21 -21
  17. package/dist/bootstrap/chat-archiver.js +14 -14
  18. package/dist/bootstrap/context-os.js +21 -21
  19. package/dist/bootstrap/memory-compressor.js +29 -13
  20. package/dist/cli-entry.js +36 -36
  21. package/dist/constraint-runtime/reference_data/archive_surface_snapshot.json +63 -0
  22. package/dist/constraint-runtime/reference_data/commands_snapshot.json +1037 -0
  23. package/dist/constraint-runtime/reference_data/subsystems/assistant.json +8 -0
  24. package/dist/constraint-runtime/reference_data/subsystems/bootstrap.json +8 -0
  25. package/dist/constraint-runtime/reference_data/subsystems/bridge.json +32 -0
  26. package/dist/constraint-runtime/reference_data/subsystems/buddy.json +13 -0
  27. package/dist/constraint-runtime/reference_data/subsystems/cli.json +26 -0
  28. package/dist/constraint-runtime/reference_data/subsystems/components.json +32 -0
  29. package/dist/constraint-runtime/reference_data/subsystems/constants.json +28 -0
  30. package/dist/constraint-runtime/reference_data/subsystems/coordinator.json +8 -0
  31. package/dist/constraint-runtime/reference_data/subsystems/entrypoints.json +15 -0
  32. package/dist/constraint-runtime/reference_data/subsystems/hooks.json +32 -0
  33. package/dist/constraint-runtime/reference_data/subsystems/keybindings.json +21 -0
  34. package/dist/constraint-runtime/reference_data/subsystems/memdir.json +15 -0
  35. package/dist/constraint-runtime/reference_data/subsystems/migrations.json +18 -0
  36. package/dist/constraint-runtime/reference_data/subsystems/moreright.json +8 -0
  37. package/dist/constraint-runtime/reference_data/subsystems/native_ts.json +11 -0
  38. package/dist/constraint-runtime/reference_data/subsystems/outputStyles.json +8 -0
  39. package/dist/constraint-runtime/reference_data/subsystems/plugins.json +9 -0
  40. package/dist/constraint-runtime/reference_data/subsystems/remote.json +11 -0
  41. package/dist/constraint-runtime/reference_data/subsystems/schemas.json +8 -0
  42. package/dist/constraint-runtime/reference_data/subsystems/screens.json +10 -0
  43. package/dist/constraint-runtime/reference_data/subsystems/server.json +10 -0
  44. package/dist/constraint-runtime/reference_data/subsystems/services.json +32 -0
  45. package/dist/constraint-runtime/reference_data/subsystems/skills.json +27 -0
  46. package/dist/constraint-runtime/reference_data/subsystems/state.json +13 -0
  47. package/dist/constraint-runtime/reference_data/subsystems/types.json +18 -0
  48. package/dist/constraint-runtime/reference_data/subsystems/upstreamproxy.json +9 -0
  49. package/dist/constraint-runtime/reference_data/subsystems/utils.json +32 -0
  50. package/dist/constraint-runtime/reference_data/subsystems/vim.json +12 -0
  51. package/dist/constraint-runtime/reference_data/subsystems/voice.json +8 -0
  52. package/dist/constraint-runtime/reference_data/tools_snapshot.json +922 -0
  53. package/dist/constraint-runtime/setup.js +1 -1
  54. package/dist/constraint-runtime/tools/PolymarketSDK/cancelOrder.d.ts +13 -3
  55. package/dist/constraint-runtime/tools/PolymarketSDK/cancelOrder.js +16 -4
  56. package/dist/constraint-runtime/tools/PolymarketSDK/clobShared.d.ts +50 -0
  57. package/dist/constraint-runtime/tools/PolymarketSDK/clobShared.js +78 -0
  58. package/dist/constraint-runtime/tools/PolymarketSDK/createOrder.d.ts +24 -3
  59. package/dist/constraint-runtime/tools/PolymarketSDK/createOrder.js +31 -4
  60. package/dist/constraint-runtime/tools/PolymarketSDK/getMarket.d.ts +1 -0
  61. package/dist/constraint-runtime/tools/PolymarketSDK/getMarket.js +14 -3
  62. package/dist/constraint-runtime/tools/PolymarketSDK/getOrders.d.ts +11 -2
  63. package/dist/constraint-runtime/tools/PolymarketSDK/getOrders.js +23 -4
  64. package/dist/constraint-runtime/tools/PolymarketSDK/listMarkets.d.ts +4 -0
  65. package/dist/constraint-runtime/tools/PolymarketSDK/listMarkets.js +22 -2
  66. package/dist/context-compaction/auto-compact.js +7 -7
  67. package/dist/electron/config.js.map +1 -0
  68. package/dist/electron/dialogs.js.map +1 -0
  69. package/dist/electron/first-run.js +54 -54
  70. package/dist/electron/first-run.js.map +1 -0
  71. package/dist/electron/ipc.js.map +1 -0
  72. package/dist/electron/logger.js.map +1 -0
  73. package/dist/electron/main.js.map +1 -0
  74. package/dist/electron/menu.js.map +1 -0
  75. package/dist/electron/paths.js.map +1 -0
  76. package/dist/electron/server.js.map +1 -0
  77. package/dist/electron/tray.js.map +1 -0
  78. package/dist/electron/window.js.map +1 -0
  79. package/dist/electron-build/electron/first-run.js +54 -54
  80. package/dist/electron-preload.js.map +1 -1
  81. package/dist/electron.js.map +1 -1
  82. package/dist/index.js +113 -113
  83. package/dist/llm/llm-judgment-client.js +102 -102
  84. package/dist/llm/pi-ai.js +48 -48
  85. package/dist/llm/system-prompt/layers/channel/human-async.md +41 -41
  86. package/dist/llm/system-prompt/layers/channel/local.md +14 -14
  87. package/dist/llm/system-prompt/layers/channel/p2p-agent.md +18 -18
  88. package/dist/llm/system-prompt/layers/channel/p2p-peer-sync.md +51 -51
  89. package/dist/llm/system-prompt/layers/channel/p2p-proactive.md +43 -43
  90. package/dist/llm/system-prompt/layers/channel/p2p-visitor.md +19 -19
  91. package/dist/llm/system-prompt/layers/channel/session-handoff.md +61 -61
  92. package/dist/llm/system-prompt/layers/core/artifacts_storage.md +89 -89
  93. package/dist/llm/system-prompt/layers/core/evenhandedness.md +21 -21
  94. package/dist/llm/system-prompt/layers/core/external-engagement.md +73 -73
  95. package/dist/llm/system-prompt/layers/core/hibs_reminders.md +15 -15
  96. package/dist/llm/system-prompt/layers/core/identity.md +48 -48
  97. package/dist/llm/system-prompt/layers/core/knowledge.md +17 -17
  98. package/dist/llm/system-prompt/layers/core/memory_system.md +12 -12
  99. package/dist/llm/system-prompt/layers/core/network_filesystem.md +28 -28
  100. package/dist/llm/system-prompt/layers/core/refusal.md +37 -37
  101. package/dist/llm/system-prompt/layers/core/tone.md +31 -31
  102. package/dist/llm/system-prompt/layers/core/tools.thin.md +13 -13
  103. package/dist/llm/system-prompt/layers/core/wellbeing.md +41 -41
  104. package/dist/llm/system-prompt/layers/role/architect.md +20 -20
  105. package/dist/llm/system-prompt/layers/role/expert.md +19 -19
  106. package/dist/llm/system-prompt/layers/role/implementer.md +15 -15
  107. package/dist/llm/system-prompt/layers/role/security.md +15 -15
  108. package/dist/llm/system-prompt/layers/tool/artifacts.md +72 -72
  109. package/dist/llm/system-prompt/layers/tool/bash.md +25 -25
  110. package/dist/llm/system-prompt/layers/tool/goal_handoff.md +77 -77
  111. package/dist/llm/system-prompt/layers/tool/hibs_api.md +171 -171
  112. package/dist/llm/system-prompt/layers/tool/image_search.md +70 -70
  113. package/dist/llm/system-prompt/layers/tool/manifest.md +89 -89
  114. package/dist/llm/system-prompt/layers/tool/mcp_apps.md +53 -53
  115. package/dist/llm/system-prompt/layers/tool/p2p_request.md +61 -61
  116. package/dist/llm/system-prompt/layers/tool/web_search.md +83 -83
  117. package/dist/llm/tool-manifest/ask_user_input.js +1 -1
  118. package/dist/llm/tool-manifest/bash.js +3 -3
  119. package/dist/llm/tool-manifest/create_file.js +4 -4
  120. package/dist/llm/tool-manifest/fetch_sports_data.js +3 -3
  121. package/dist/llm/tool-manifest/image_search.js +2 -2
  122. package/dist/llm/tool-manifest/index.js +59 -0
  123. package/dist/llm/tool-manifest/mcp.js +2 -2
  124. package/dist/llm/tool-manifest/message_compose.js +3 -3
  125. package/dist/llm/tool-manifest/places.js +2 -2
  126. package/dist/llm/tool-manifest/present_files.js +1 -1
  127. package/dist/llm/tool-manifest/recipe.js +2 -2
  128. package/dist/llm/tool-manifest/str_replace.js +5 -5
  129. package/dist/llm/tool-manifest/view.js +3 -3
  130. package/dist/llm/tool-manifest/weather.js +4 -4
  131. package/dist/llm/tool-manifest/web.js +4 -4
  132. package/dist/orbitdb/cid-database.js +41 -0
  133. package/dist/orbitdb/did-catalog-replication.js +199 -0
  134. package/dist/orbitdb/trajectory-store.js +150 -0
  135. package/dist/pi-ecosystem-judgment/causal-judge.js +51 -51
  136. package/dist/pi-ecosystem-judgment/distill-prompt.js +42 -42
  137. package/dist/pi-ecosystem-judgment/distillation.js +14 -14
  138. package/dist/pi-ecosystem-judgment/monitor-gate.js +28 -28
  139. package/dist/pi-ecosystem-judgment/value-injection.js +102 -102
  140. package/dist/security/context-router-tool.js +15 -15
  141. package/dist/storage/did-catalog-bridge.js +271 -0
  142. package/dist/utils/auto-update.js.map +1 -0
  143. package/dist/web/api-config.html +779 -779
  144. package/dist/web/client-hearth.js +10 -10
  145. package/dist/web/client.js.map +7 -0
  146. package/dist/web/components/wallet-viem.mjs +118 -118
  147. package/dist/web/index.html +424 -424
  148. package/dist/web/manifest.json +20 -20
  149. package/dist/web/server.js +165 -13
  150. package/dist/web/style.css +4914 -4914
  151. package/package.json +193 -193
  152. package/scripts/build-cli.js +215 -215
  153. package/scripts/build-web.ts +130 -130
  154. package/scripts/postinstall.js +152 -152
  155. package/bin/bolloon.js +0 -157
  156. package/dist/pi-ecosystem-colony/index.js +0 -365
  157. package/dist/social/ant-colony/AdaptiveHeartbeat.js +0 -101
  158. package/dist/social/ant-colony/PheromoneEngine.js +0 -227
  159. package/dist/social/ant-colony/index.js +0 -6
  160. package/dist/social/ant-colony/types.js +0 -24
  161. package/dist/test/ai-judgment-test.js +0 -80
  162. package/dist/test/bollharness-integration.test.js +0 -318
  163. package/dist/test/channel-agent-multi-dialogue.js +0 -205
  164. package/dist/test/channel-heartbeat-agent-test.js +0 -201
  165. package/dist/test/constraint-layer.test.js +0 -164
  166. package/dist/test/diap-identity-test.js +0 -172
  167. package/dist/test/diap-quick-test.js +0 -62
  168. package/dist/test/global-shared-context.test.js +0 -315
  169. package/dist/test/harness-judgment-injection.test.js +0 -246
  170. package/dist/test/harness-workflow-integrator-test.js +0 -228
  171. package/dist/test/human-value-store.test.js +0 -243
  172. package/dist/test/hybrid-integration-test.js +0 -118
  173. package/dist/test/hybrid-messenger-verify.js +0 -55
  174. package/dist/test/iroh-bistream-debug.js +0 -38
  175. package/dist/test/iroh-communication.test.js +0 -66
  176. package/dist/test/iroh-debug-test.js +0 -57
  177. package/dist/test/iroh-diap-test.js +0 -71
  178. package/dist/test/iroh-direct-connect.js +0 -55
  179. package/dist/test/iroh-e2e-fixed.js +0 -89
  180. package/dist/test/iroh-e2e-same-process.js +0 -63
  181. package/dist/test/iroh-e2e.js +0 -66
  182. package/dist/test/iroh-final-e2e.js +0 -72
  183. package/dist/test/iroh-relay-test.js +0 -37
  184. package/dist/test/iroh-simple-test.js +0 -41
  185. package/dist/test/iroh-transport-verify.js +0 -54
  186. package/dist/test/iroh-transport.test.js +0 -37
  187. package/dist/test/iroh-two-nodes.js +0 -70
  188. package/dist/test/iroh-verify.js +0 -44
  189. package/dist/test/judgment-decision.test.js +0 -219
  190. package/dist/test/llm-judgment-integration.test.js +0 -220
  191. package/dist/test/p2p-agent-complex-dialogue.js +0 -385
  192. package/dist/test/p2p-agent-dialogue.js +0 -341
  193. package/dist/test/p2p-agent-full-bidirectional.js +0 -510
  194. package/dist/test/p2p-agent-harness-flow.js +0 -437
  195. package/dist/test/p2p-agent-harness-single.js +0 -143
  196. package/dist/test/p2p-ai-dialogue-test.js +0 -318
  197. package/dist/test/p2p-cid-connect-test.js +0 -195
  198. package/dist/test/p2p-connect-receiver.js +0 -69
  199. package/dist/test/p2p-doc-transfer.js +0 -110
  200. package/dist/test/p2p-identity-page-test.js +0 -77
  201. package/dist/test/p2p-iroh-test.js +0 -171
  202. package/dist/test/p2p-minimal-test.js +0 -241
  203. package/dist/test/p2p-node-1.js +0 -148
  204. package/dist/test/p2p-node-2.js +0 -148
  205. package/dist/test/p2p-server.js +0 -281
  206. package/dist/test/p2p-two-nodes-test.js +0 -438
  207. package/dist/test/pi-sdk.test.js +0 -44
  208. package/dist/test/set-persona.js +0 -40
  209. package/dist/test/simple.test.js +0 -9
  210. package/dist/test/storage-integration.test.js +0 -150
  211. package/dist/test/subagent-manager.test.js +0 -276
  212. package/dist/test/test-gate-flow.test.js +0 -81
  213. package/dist/test/workflow-engine.test.js +0 -87
  214. package/dist/test/workflow-pivot-loop.test.js +0 -246
@@ -1,246 +0,0 @@
1
- import { config } from 'dotenv';
2
- import { describe, it, expect } from 'vitest';
3
- import { WorkflowPivotLoop, createDefaultPivotConfig, runPivotLoop } from '../agents/workflow-pivot-loop.js';
4
- config();
5
- const mockTools = [
6
- {
7
- name: 'read_document',
8
- description: '读取文档内容',
9
- parameters: { path: '文件路径' },
10
- execute: async (args) => {
11
- if (args.path === 'nonexistent.txt') {
12
- return { success: false, error: '文件不存在' };
13
- }
14
- return { success: true, output: `文件内容: ${args.path}` };
15
- }
16
- },
17
- {
18
- name: 'list_files',
19
- description: '列出文件',
20
- parameters: {},
21
- execute: async () => {
22
- return { success: true, output: 'file1.txt\nfile2.txt' };
23
- }
24
- },
25
- {
26
- name: 'get_time',
27
- description: '获取当前时间',
28
- parameters: {},
29
- execute: async () => {
30
- return { success: true, output: new Date().toISOString() };
31
- }
32
- }
33
- ];
34
- function createMockLLM(mock) {
35
- return {
36
- chat: async (context, systemPrompt) => {
37
- mock.callCount++;
38
- console.log(`[MockLLM] 调用 #${mock.callCount}, context长度: ${context.length}`);
39
- if (mock.shouldReturnFinal || mock.callCount >= 2) {
40
- return { reply: `${mock.finalResponse}\n\n<final gen>` };
41
- }
42
- if (context.includes('list_files') || context.includes('列出文件')) {
43
- return { reply: '调用工具: list_files()' };
44
- }
45
- if (context.includes('read_document') || context.includes('读取文档')) {
46
- const hasNonexistent = context.includes('nonexistent');
47
- if (hasNonexistent) {
48
- return {
49
- reply: '调用工具: read_document(path: nonexistent.txt)'
50
- };
51
- }
52
- return { reply: '调用工具: read_document(path: test.txt)' };
53
- }
54
- if (context.includes('get_time') || context.includes('时间')) {
55
- return { reply: '调用工具: get_time()' };
56
- }
57
- return { reply: '调用工具: list_files()' };
58
- }
59
- };
60
- }
61
- describe('WorkflowPivotLoop', () => {
62
- describe('基础功能', () => {
63
- it('应该正确初始化', () => {
64
- const loop = new WorkflowPivotLoop({ maxIterations: 10 });
65
- expect(loop).toBeDefined();
66
- expect(loop.getState().iteration).toBe(0);
67
- });
68
- it('应该注册工具', () => {
69
- const loop = new WorkflowPivotLoop({ maxIterations: 10 });
70
- loop.registerTool(mockTools[0]);
71
- loop.registerTools(mockTools.slice(1));
72
- const state = loop.getState();
73
- expect(state.pendingToolUses).toBeDefined();
74
- });
75
- });
76
- describe('工具调用', () => {
77
- it('应该正确解析工具调用', async () => {
78
- const loop = new WorkflowPivotLoop({ maxIterations: 10 });
79
- loop.registerTools(mockTools);
80
- const mock = {
81
- callCount: 0,
82
- shouldReturnFinal: false,
83
- finalResponse: '初始响应'
84
- };
85
- const llm = createMockLLM(mock);
86
- const systemPrompt = '测试系统提示';
87
- const result = await loop.execute('读取文件', llm, systemPrompt);
88
- console.log('[Test] 结果:', {
89
- iterations: result.iterations,
90
- toolCalls: result.toolCalls,
91
- exitReason: result.exitReason
92
- });
93
- expect(result.iterations).toBeGreaterThan(0);
94
- expect(result.toolCalls).toBeGreaterThan(0);
95
- });
96
- it('应该正确处理 final gen 标记', async () => {
97
- const loop = new WorkflowPivotLoop({
98
- maxIterations: 10,
99
- minIterations: 1,
100
- qualityThreshold: 0.5
101
- });
102
- loop.registerTools(mockTools);
103
- const mock = {
104
- callCount: 0,
105
- shouldReturnFinal: true,
106
- finalResponse: '这是最终答案'
107
- };
108
- const llm = createMockLLM(mock);
109
- const result = await loop.execute('简单任务', llm, '系统提示');
110
- console.log('[Test] 最终响应测试结果:', result);
111
- expect(result.exitReason).toMatch(/final|pending|quality/);
112
- });
113
- it('应该处理工具执行失败', async () => {
114
- const loop = new WorkflowPivotLoop({
115
- maxIterations: 10,
116
- maxConsecutiveNoProgress: 3
117
- });
118
- loop.registerTools(mockTools);
119
- const mock = {
120
- callCount: 0,
121
- shouldReturnFinal: false,
122
- finalResponse: '尝试读取'
123
- };
124
- const llm = createMockLLM(mock);
125
- const result = await loop.execute('读取不存在的文件', llm, '系统提示');
126
- console.log('[Test] 失败处理结果:', result);
127
- expect(result.iterations).toBeGreaterThan(0);
128
- });
129
- });
130
- describe('中断条件', () => {
131
- it('应该达到最大迭代次数时中断', async () => {
132
- const loop = new WorkflowPivotLoop({ maxIterations: 3 });
133
- loop.registerTools(mockTools);
134
- const mock = {
135
- callCount: 0,
136
- shouldReturnFinal: false,
137
- finalResponse: '继续'
138
- };
139
- const llm = createMockLLM(mock);
140
- const result = await loop.execute('需要多次迭代的任务', llm, '系统提示');
141
- console.log('[Test] 最大迭代结果:', result);
142
- expect(result.iterations).toBeLessThanOrEqual(3);
143
- });
144
- it('应该在质量达标时提前结束', async () => {
145
- const loop = new WorkflowPivotLoop({
146
- maxIterations: 50,
147
- qualityThreshold: 0.4 // 0.55 quality score will exceed this
148
- });
149
- loop.registerTools(mockTools);
150
- const mock = {
151
- callCount: 0,
152
- shouldReturnFinal: true,
153
- finalResponse: '这是一个高质量的完整回答,包含足够的细节和结构化内容。'
154
- };
155
- const llm = createMockLLM(mock);
156
- const result = await loop.execute('需要高质量回答的任务', llm, '系统提示');
157
- console.log('[Test] 质量达标结果:', result);
158
- expect(result.exitReason).toBe('quality_threshold_met');
159
- });
160
- });
161
- describe('任务复杂度分析', () => {
162
- it('应该识别简单任务', async () => {
163
- const loop = new WorkflowPivotLoop(createDefaultPivotConfig('simple'));
164
- loop.registerTools(mockTools);
165
- const mock = {
166
- callCount: 0,
167
- shouldReturnFinal: true,
168
- finalResponse: '简单回答'
169
- };
170
- const llm = createMockLLM(mock);
171
- const result = await loop.execute('查看当前时间', llm, '系统提示');
172
- console.log('[Test] 简单任务结果:', result);
173
- expect(result.iterations).toBeLessThanOrEqual(15);
174
- });
175
- it('应该识别复杂任务', async () => {
176
- const loop = new WorkflowPivotLoop(createDefaultPivotConfig('complex'));
177
- loop.registerTools(mockTools);
178
- const mock = {
179
- callCount: 0,
180
- shouldReturnFinal: true,
181
- finalResponse: '复杂的分析结果'
182
- };
183
- const llm = createMockLLM(mock);
184
- const result = await loop.execute('分析并比较这个项目的所有文档,设计优化方案并实现重构', llm, '系统提示');
185
- console.log('[Test] 复杂任务结果:', result);
186
- expect(result.iterations).toBeLessThanOrEqual(60);
187
- });
188
- });
189
- describe('runPivotLoop 快捷函数', () => {
190
- it('应该使用默认配置运行', async () => {
191
- const mock = {
192
- callCount: 0,
193
- shouldReturnFinal: true,
194
- finalResponse: '快速回答'
195
- };
196
- const llm = createMockLLM(mock);
197
- const result = await runPivotLoop('查看时间', llm, mockTools, '你是一个助手');
198
- console.log('[Test] 快捷函数结果:', result);
199
- expect(result.success).toBe(true);
200
- });
201
- });
202
- describe('状态重置', () => {
203
- it('应该正确重置状态', async () => {
204
- const loop = new WorkflowPivotLoop({ maxIterations: 10 });
205
- loop.registerTools(mockTools);
206
- const mock = {
207
- callCount: 0,
208
- shouldReturnFinal: true,
209
- finalResponse: '回答'
210
- };
211
- const llm = createMockLLM(mock);
212
- await loop.execute('任务1', llm, '提示');
213
- const state1 = loop.getState();
214
- loop.reset();
215
- const state2 = loop.getState();
216
- expect(state1.iteration).toBeGreaterThan(0);
217
- expect(state2.iteration).toBe(0);
218
- });
219
- });
220
- });
221
- describe('PiSDK PivotLoop Integration', () => {
222
- it('should export promptWithPivotLoop method', async () => {
223
- const { createAgentSession } = await import('../agents/pi-sdk.js');
224
- const session = await createAgentSession({
225
- cwd: process.cwd(),
226
- usePivotLoop: true
227
- });
228
- expect(typeof session.promptWithPivotLoop).toBe('function');
229
- });
230
- it('should use pivot loop when configured', async () => {
231
- const { createAgentSession } = await import('../agents/pi-sdk.js');
232
- const session = await createAgentSession({
233
- cwd: process.cwd(),
234
- usePivotLoop: true,
235
- pivotLoopConfig: createDefaultPivotConfig('simple')
236
- });
237
- const result = await session.promptWithPivotLoop('你好');
238
- console.log('[Test] Pivot Loop 集成测试结果:', {
239
- success: result.success,
240
- iterations: result.iterations,
241
- exitReason: result.exitReason
242
- });
243
- expect(result).toBeDefined();
244
- expect(result.exitReason).toBeDefined();
245
- });
246
- });