@bolloon/bolloon-agent 0.3.43 → 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 (215) 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/storage/did-catalog.js +231 -0
  143. package/dist/utils/auto-update.js.map +1 -0
  144. package/dist/web/api-config.html +779 -779
  145. package/dist/web/client-hearth.js +10 -10
  146. package/dist/web/client.js.map +7 -0
  147. package/dist/web/components/wallet-viem.mjs +118 -118
  148. package/dist/web/index.html +424 -424
  149. package/dist/web/manifest.json +20 -20
  150. package/dist/web/server.js +240 -13
  151. package/dist/web/style.css +4914 -4914
  152. package/package.json +193 -193
  153. package/scripts/build-cli.js +215 -215
  154. package/scripts/build-web.ts +130 -130
  155. package/scripts/postinstall.js +152 -152
  156. package/bin/bolloon.js +0 -157
  157. package/dist/pi-ecosystem-colony/index.js +0 -365
  158. package/dist/social/ant-colony/AdaptiveHeartbeat.js +0 -101
  159. package/dist/social/ant-colony/PheromoneEngine.js +0 -227
  160. package/dist/social/ant-colony/index.js +0 -6
  161. package/dist/social/ant-colony/types.js +0 -24
  162. package/dist/test/ai-judgment-test.js +0 -80
  163. package/dist/test/bollharness-integration.test.js +0 -318
  164. package/dist/test/channel-agent-multi-dialogue.js +0 -205
  165. package/dist/test/channel-heartbeat-agent-test.js +0 -201
  166. package/dist/test/constraint-layer.test.js +0 -164
  167. package/dist/test/diap-identity-test.js +0 -172
  168. package/dist/test/diap-quick-test.js +0 -62
  169. package/dist/test/global-shared-context.test.js +0 -315
  170. package/dist/test/harness-judgment-injection.test.js +0 -246
  171. package/dist/test/harness-workflow-integrator-test.js +0 -228
  172. package/dist/test/human-value-store.test.js +0 -243
  173. package/dist/test/hybrid-integration-test.js +0 -118
  174. package/dist/test/hybrid-messenger-verify.js +0 -55
  175. package/dist/test/iroh-bistream-debug.js +0 -38
  176. package/dist/test/iroh-communication.test.js +0 -66
  177. package/dist/test/iroh-debug-test.js +0 -57
  178. package/dist/test/iroh-diap-test.js +0 -71
  179. package/dist/test/iroh-direct-connect.js +0 -55
  180. package/dist/test/iroh-e2e-fixed.js +0 -89
  181. package/dist/test/iroh-e2e-same-process.js +0 -63
  182. package/dist/test/iroh-e2e.js +0 -66
  183. package/dist/test/iroh-final-e2e.js +0 -72
  184. package/dist/test/iroh-relay-test.js +0 -37
  185. package/dist/test/iroh-simple-test.js +0 -41
  186. package/dist/test/iroh-transport-verify.js +0 -54
  187. package/dist/test/iroh-transport.test.js +0 -37
  188. package/dist/test/iroh-two-nodes.js +0 -70
  189. package/dist/test/iroh-verify.js +0 -44
  190. package/dist/test/judgment-decision.test.js +0 -219
  191. package/dist/test/llm-judgment-integration.test.js +0 -220
  192. package/dist/test/p2p-agent-complex-dialogue.js +0 -385
  193. package/dist/test/p2p-agent-dialogue.js +0 -341
  194. package/dist/test/p2p-agent-full-bidirectional.js +0 -510
  195. package/dist/test/p2p-agent-harness-flow.js +0 -437
  196. package/dist/test/p2p-agent-harness-single.js +0 -143
  197. package/dist/test/p2p-ai-dialogue-test.js +0 -318
  198. package/dist/test/p2p-cid-connect-test.js +0 -195
  199. package/dist/test/p2p-connect-receiver.js +0 -69
  200. package/dist/test/p2p-doc-transfer.js +0 -110
  201. package/dist/test/p2p-identity-page-test.js +0 -77
  202. package/dist/test/p2p-iroh-test.js +0 -171
  203. package/dist/test/p2p-minimal-test.js +0 -241
  204. package/dist/test/p2p-node-1.js +0 -148
  205. package/dist/test/p2p-node-2.js +0 -148
  206. package/dist/test/p2p-server.js +0 -281
  207. package/dist/test/p2p-two-nodes-test.js +0 -438
  208. package/dist/test/pi-sdk.test.js +0 -44
  209. package/dist/test/set-persona.js +0 -40
  210. package/dist/test/simple.test.js +0 -9
  211. package/dist/test/storage-integration.test.js +0 -150
  212. package/dist/test/subagent-manager.test.js +0 -276
  213. package/dist/test/test-gate-flow.test.js +0 -81
  214. package/dist/test/workflow-engine.test.js +0 -87
  215. 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
- });