@bolloon/bolloon-agent 0.2.12 → 0.2.14

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 (284) hide show
  1. package/README.md +495 -467
  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/bin/ipfs +0 -0
  6. package/dist/agents/agent-manifest-protocol.js +52 -0
  7. package/dist/agents/chat-segmenter.js +298 -0
  8. package/dist/agents/constraint-layer.js +19 -19
  9. package/dist/agents/judgment-protocol.js +479 -0
  10. package/dist/agents/parse-tool-call.js +304 -0
  11. package/dist/agents/peer-manifest-loader.js +210 -0
  12. package/dist/agents/pi-sdk-session-factory.js +110 -0
  13. package/dist/agents/pi-sdk-session-manager.js +297 -0
  14. package/dist/agents/pi-sdk-tools.js +1288 -0
  15. package/dist/agents/pi-sdk-types.js +13 -0
  16. package/dist/agents/pi-sdk.js +553 -1306
  17. package/dist/agents/react-loop.js +120 -0
  18. package/dist/agents/session-store.js +171 -0
  19. package/dist/agents/shell-guard.js +2 -2
  20. package/dist/agents/tool-registry.js +136 -0
  21. package/dist/agents/workflow-pivot-loop.js +200 -22
  22. package/dist/bollharness/src/scripts/context_router.js +7 -0
  23. package/dist/bollharness/src/scripts/deploy-guard.js +8 -8
  24. package/dist/bollharness-integration/context-router-judgment.js +4 -4
  25. package/dist/bollharness-integration/context-router.js +292 -292
  26. package/dist/bollharness-integration/gate-state-machine.js +26 -13
  27. package/dist/bollharness-integration/integration.js +71 -0
  28. package/dist/bollharness-integration/llm-judgment-engine.js +134 -134
  29. package/dist/bollharness-integration/skill-adapter.js +57 -127
  30. package/dist/bootstrap/chat-archiver.js +276 -0
  31. package/dist/bootstrap/context-collector.js +6 -3
  32. package/dist/bootstrap/event-log.js +160 -0
  33. package/dist/bootstrap/lifecycle-hooks.js +15 -1
  34. package/dist/bootstrap/memory-compressor.js +170 -0
  35. package/dist/bootstrap/persona-loader.js +94 -0
  36. package/dist/bootstrap/project-state.js +159 -0
  37. package/dist/bootstrap/remote-mirror.js +97 -0
  38. package/dist/bootstrap/session-window.js +121 -0
  39. package/dist/bootstrap/vector-index.js +248 -0
  40. package/dist/cli/loading-tui.js +40 -0
  41. package/dist/cli-entry.js +41 -37
  42. package/dist/context-compaction/auto-compact.js +7 -7
  43. package/dist/electron/config.js +21 -0
  44. package/dist/electron/config.js.map +1 -0
  45. package/dist/electron/dialogs.js +108 -0
  46. package/dist/electron/dialogs.js.map +1 -0
  47. package/dist/electron/first-run.js +170 -0
  48. package/dist/electron/first-run.js.map +1 -0
  49. package/dist/electron/ipc.js +20 -0
  50. package/dist/electron/ipc.js.map +1 -0
  51. package/dist/electron/logger.js +114 -0
  52. package/dist/electron/logger.js.map +1 -0
  53. package/dist/electron/main.js +63 -0
  54. package/dist/electron/main.js.map +1 -0
  55. package/dist/electron/menu.js +145 -0
  56. package/dist/electron/menu.js.map +1 -0
  57. package/dist/electron/paths.js +75 -0
  58. package/dist/electron/paths.js.map +1 -0
  59. package/dist/electron/server.js +119 -0
  60. package/dist/electron/server.js.map +1 -0
  61. package/dist/electron/tray.js +111 -0
  62. package/dist/electron/tray.js.map +1 -0
  63. package/dist/electron/window.js +111 -0
  64. package/dist/electron/window.js.map +1 -0
  65. package/dist/electron-preload.js +26 -6
  66. package/dist/electron-preload.js.map +1 -1
  67. package/dist/electron.js +6 -168
  68. package/dist/electron.js.map +1 -1
  69. package/dist/index.js +323 -266
  70. package/dist/llm/config-store.js +29 -8
  71. package/dist/llm/llm-judgment-client.js +102 -102
  72. package/dist/llm/pi-ai.js +139 -85
  73. package/dist/llm/system-prompt/layers/channel/local.md +14 -14
  74. package/dist/llm/system-prompt/layers/channel/p2p-agent.md +18 -18
  75. package/dist/llm/system-prompt/layers/channel/p2p-visitor.md +19 -19
  76. package/dist/llm/system-prompt/layers/core/artifacts_storage.md +89 -89
  77. package/dist/llm/system-prompt/layers/core/evenhandedness.md +21 -21
  78. package/dist/llm/system-prompt/layers/core/hibs_reminders.md +15 -15
  79. package/dist/llm/system-prompt/layers/core/identity.md +37 -37
  80. package/dist/llm/system-prompt/layers/core/knowledge.md +17 -17
  81. package/dist/llm/system-prompt/layers/core/memory_system.md +12 -12
  82. package/dist/llm/system-prompt/layers/core/network_filesystem.md +28 -28
  83. package/dist/llm/system-prompt/layers/core/refusal.md +37 -37
  84. package/dist/llm/system-prompt/layers/core/tone.md +31 -31
  85. package/dist/llm/system-prompt/layers/core/tools.thin.md +13 -13
  86. package/dist/llm/system-prompt/layers/core/wellbeing.md +41 -41
  87. package/dist/llm/system-prompt/layers/role/architect.md +20 -20
  88. package/dist/llm/system-prompt/layers/role/expert.md +19 -19
  89. package/dist/llm/system-prompt/layers/role/implementer.md +15 -15
  90. package/dist/llm/system-prompt/layers/role/security.md +15 -15
  91. package/dist/llm/system-prompt/layers/tool/artifacts.md +72 -72
  92. package/dist/llm/system-prompt/layers/tool/bash.md +25 -25
  93. package/dist/llm/system-prompt/layers/tool/hibs_api.md +171 -171
  94. package/dist/llm/system-prompt/layers/tool/image_search.md +70 -70
  95. package/dist/llm/system-prompt/layers/tool/manifest.md +89 -89
  96. package/dist/llm/system-prompt/layers/tool/mcp_apps.md +53 -53
  97. package/dist/llm/system-prompt/layers/tool/web_search.md +83 -83
  98. package/dist/llm/tool-manifest/ask_user_input.js +1 -1
  99. package/dist/llm/tool-manifest/bash.js +3 -3
  100. package/dist/llm/tool-manifest/create_file.js +4 -4
  101. package/dist/llm/tool-manifest/fetch_sports_data.js +3 -3
  102. package/dist/llm/tool-manifest/image_search.js +2 -2
  103. package/dist/llm/tool-manifest/mcp.js +2 -2
  104. package/dist/llm/tool-manifest/message_compose.js +3 -3
  105. package/dist/llm/tool-manifest/places.js +2 -2
  106. package/dist/llm/tool-manifest/present_files.js +1 -1
  107. package/dist/llm/tool-manifest/recipe.js +2 -2
  108. package/dist/llm/tool-manifest/str_replace.js +5 -5
  109. package/dist/llm/tool-manifest/view.js +3 -3
  110. package/dist/llm/tool-manifest/weather.js +4 -4
  111. package/dist/llm/tool-manifest/web.js +4 -4
  112. package/dist/network/local-inbox-bus.js +73 -0
  113. package/dist/network/p2p-outbox.js +161 -0
  114. package/dist/network/peer-fs.js +420 -0
  115. package/dist/network/peer-resource-bridge.js +216 -0
  116. package/dist/pi-ecosystem-judgment/causal-judge.js +51 -51
  117. package/dist/pi-ecosystem-judgment/cleanup.js +126 -0
  118. package/dist/pi-ecosystem-judgment/distill-prompt.js +42 -42
  119. package/dist/pi-ecosystem-judgment/distillation.js +14 -14
  120. package/dist/pi-ecosystem-judgment/human-value-store.js +45 -11
  121. package/dist/pi-ecosystem-judgment/monitor-gate.js +28 -28
  122. package/dist/pi-ecosystem-judgment/value-injection.js +102 -102
  123. package/dist/security/context-router-tool.js +15 -15
  124. package/dist/security/tool-gate.js +11 -0
  125. package/dist/web/api-config.html +520 -520
  126. package/dist/web/client-loop-status.js +220 -0
  127. package/dist/web/client.js +22 -5
  128. package/dist/web/client.js.map +7 -0
  129. package/dist/web/components/wallet-viem.mjs +118 -118
  130. package/dist/web/index.html +375 -375
  131. package/dist/web/input-validator.js +103 -0
  132. package/dist/web/manifest.json +20 -20
  133. package/dist/web/routes-judgments.js +738 -0
  134. package/dist/web/routes-llm-config.js +279 -0
  135. package/dist/web/routes-tasks.js +222 -0
  136. package/dist/web/server-sse.js +121 -0
  137. package/dist/web/server-storage.js +154 -0
  138. package/dist/web/server-types.js +15 -0
  139. package/dist/web/server-v3-p2p.js +224 -0
  140. package/dist/web/server.js +1070 -1307
  141. package/dist/web/style.css +4742 -4742
  142. package/dist/web/util/safe-name.js +32 -0
  143. package/package.json +162 -160
  144. package/scripts/build-cli.js +215 -215
  145. package/scripts/build-web.ts +130 -130
  146. package/scripts/postinstall.js +152 -152
  147. package/bin/bolloon.js +0 -157
  148. package/dist/constraint-runtime/src/_archive_helper.js +0 -9
  149. package/dist/constraint-runtime/src/agent/coordinator.js +0 -48
  150. package/dist/constraint-runtime/src/agent/index.js +0 -1
  151. package/dist/constraint-runtime/src/assistant/index.js +0 -12
  152. package/dist/constraint-runtime/src/bootstrap/index.js +0 -12
  153. package/dist/constraint-runtime/src/bootstrap_graph.js +0 -13
  154. package/dist/constraint-runtime/src/bridge/index.js +0 -12
  155. package/dist/constraint-runtime/src/buddy/index.js +0 -12
  156. package/dist/constraint-runtime/src/cli/index.js +0 -12
  157. package/dist/constraint-runtime/src/command_graph.js +0 -10
  158. package/dist/constraint-runtime/src/commands.js +0 -60
  159. package/dist/constraint-runtime/src/components/index.js +0 -12
  160. package/dist/constraint-runtime/src/constants/index.js +0 -12
  161. package/dist/constraint-runtime/src/constraint/budget.js +0 -22
  162. package/dist/constraint-runtime/src/constraint/index.js +0 -2
  163. package/dist/constraint-runtime/src/constraint/permission.js +0 -20
  164. package/dist/constraint-runtime/src/context.js +0 -30
  165. package/dist/constraint-runtime/src/coordinator/index.js +0 -12
  166. package/dist/constraint-runtime/src/cost_hook.js +0 -4
  167. package/dist/constraint-runtime/src/cost_tracker.js +0 -8
  168. package/dist/constraint-runtime/src/deferred_init.js +0 -10
  169. package/dist/constraint-runtime/src/direct_modes.js +0 -6
  170. package/dist/constraint-runtime/src/dynamic-tool-loader.js +0 -85
  171. package/dist/constraint-runtime/src/entrypoints/index.js +0 -12
  172. package/dist/constraint-runtime/src/execution_registry.js +0 -44
  173. package/dist/constraint-runtime/src/history.js +0 -9
  174. package/dist/constraint-runtime/src/hooks/index.js +0 -12
  175. package/dist/constraint-runtime/src/index.js +0 -26
  176. package/dist/constraint-runtime/src/ink.js +0 -4
  177. package/dist/constraint-runtime/src/keybindings/index.js +0 -12
  178. package/dist/constraint-runtime/src/memdir/index.js +0 -12
  179. package/dist/constraint-runtime/src/migrations/index.js +0 -12
  180. package/dist/constraint-runtime/src/models.js +0 -1
  181. package/dist/constraint-runtime/src/moreright/index.js +0 -12
  182. package/dist/constraint-runtime/src/native_ts/index.js +0 -12
  183. package/dist/constraint-runtime/src/output_styles/index.js +0 -12
  184. package/dist/constraint-runtime/src/parity_audit.js +0 -12
  185. package/dist/constraint-runtime/src/plugins/index.js +0 -12
  186. package/dist/constraint-runtime/src/port_manifest.js +0 -11
  187. package/dist/constraint-runtime/src/prefetch.js +0 -9
  188. package/dist/constraint-runtime/src/query.js +0 -1
  189. package/dist/constraint-runtime/src/remote/index.js +0 -12
  190. package/dist/constraint-runtime/src/remote_runtime.js +0 -9
  191. package/dist/constraint-runtime/src/runtime/index.js +0 -1
  192. package/dist/constraint-runtime/src/runtime/session.js +0 -35
  193. package/dist/constraint-runtime/src/schemas/index.js +0 -12
  194. package/dist/constraint-runtime/src/screens/index.js +0 -12
  195. package/dist/constraint-runtime/src/server/index.js +0 -12
  196. package/dist/constraint-runtime/src/services/index.js +0 -12
  197. package/dist/constraint-runtime/src/session_store.js +0 -22
  198. package/dist/constraint-runtime/src/setup.js +0 -30
  199. package/dist/constraint-runtime/src/skills/index.js +0 -1
  200. package/dist/constraint-runtime/src/skills/skill-registry.js +0 -28
  201. package/dist/constraint-runtime/src/state/index.js +0 -12
  202. package/dist/constraint-runtime/src/system_init.js +0 -20
  203. package/dist/constraint-runtime/src/thinking/engine.js +0 -42
  204. package/dist/constraint-runtime/src/thinking/index.js +0 -1
  205. package/dist/constraint-runtime/src/tool_pool.js +0 -8
  206. package/dist/constraint-runtime/src/tools/OpenCLI/execAdapter.js +0 -7
  207. package/dist/constraint-runtime/src/tools/OpenCLI/listAdapters.js +0 -7
  208. package/dist/constraint-runtime/src/tools/OpenCLI/runCommand.js +0 -7
  209. package/dist/constraint-runtime/src/tools/SafeSDK/confirmTransaction.js +0 -6
  210. package/dist/constraint-runtime/src/tools/SafeSDK/createTransaction.js +0 -8
  211. package/dist/constraint-runtime/src/tools/SafeSDK/executeTransaction.js +0 -6
  212. package/dist/constraint-runtime/src/tools/SafeSDK/getBalance.js +0 -6
  213. package/dist/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.js +0 -6
  214. package/dist/constraint-runtime/src/tools/SafeSDK/proposeTransaction.js +0 -6
  215. package/dist/constraint-runtime/src/tools.js +0 -80
  216. package/dist/constraint-runtime/src/transcript.js +0 -19
  217. package/dist/constraint-runtime/src/types/index.js +0 -12
  218. package/dist/constraint-runtime/src/upstream_proxy/index.js +0 -12
  219. package/dist/constraint-runtime/src/utils/index.js +0 -12
  220. package/dist/constraint-runtime/src/vim/index.js +0 -12
  221. package/dist/constraint-runtime/src/voice/index.js +0 -12
  222. package/dist/constraint-runtime/tests/agent.test.js +0 -16
  223. package/dist/constraint-runtime/tests/constraint.test.js +0 -41
  224. package/dist/constraint-runtime/tests/skill.test.js +0 -19
  225. package/dist/constraint-runtime/tests/thinking.test.js +0 -22
  226. package/dist/pi-ecosystem-colony/index.js +0 -365
  227. package/dist/social/ant-colony/AdaptiveHeartbeat.js +0 -101
  228. package/dist/social/ant-colony/PheromoneEngine.js +0 -227
  229. package/dist/social/ant-colony/index.js +0 -6
  230. package/dist/social/ant-colony/types.js +0 -24
  231. package/dist/test/ai-judgment-test.js +0 -80
  232. package/dist/test/bollharness-integration.test.js +0 -318
  233. package/dist/test/channel-agent-multi-dialogue.js +0 -205
  234. package/dist/test/channel-heartbeat-agent-test.js +0 -201
  235. package/dist/test/constraint-layer.test.js +0 -164
  236. package/dist/test/diap-identity-test.js +0 -172
  237. package/dist/test/diap-quick-test.js +0 -62
  238. package/dist/test/global-shared-context.test.js +0 -315
  239. package/dist/test/harness-judgment-injection.test.js +0 -246
  240. package/dist/test/harness-workflow-integrator-test.js +0 -228
  241. package/dist/test/human-value-store.test.js +0 -243
  242. package/dist/test/hybrid-integration-test.js +0 -118
  243. package/dist/test/hybrid-messenger-verify.js +0 -55
  244. package/dist/test/iroh-bistream-debug.js +0 -38
  245. package/dist/test/iroh-communication.test.js +0 -66
  246. package/dist/test/iroh-debug-test.js +0 -57
  247. package/dist/test/iroh-diap-test.js +0 -71
  248. package/dist/test/iroh-direct-connect.js +0 -55
  249. package/dist/test/iroh-e2e-fixed.js +0 -89
  250. package/dist/test/iroh-e2e-same-process.js +0 -63
  251. package/dist/test/iroh-e2e.js +0 -66
  252. package/dist/test/iroh-final-e2e.js +0 -72
  253. package/dist/test/iroh-relay-test.js +0 -37
  254. package/dist/test/iroh-simple-test.js +0 -41
  255. package/dist/test/iroh-transport-verify.js +0 -54
  256. package/dist/test/iroh-transport.test.js +0 -37
  257. package/dist/test/iroh-two-nodes.js +0 -70
  258. package/dist/test/iroh-verify.js +0 -44
  259. package/dist/test/judgment-decision.test.js +0 -219
  260. package/dist/test/llm-judgment-integration.test.js +0 -220
  261. package/dist/test/p2p-agent-complex-dialogue.js +0 -385
  262. package/dist/test/p2p-agent-dialogue.js +0 -341
  263. package/dist/test/p2p-agent-full-bidirectional.js +0 -510
  264. package/dist/test/p2p-agent-harness-flow.js +0 -437
  265. package/dist/test/p2p-agent-harness-single.js +0 -143
  266. package/dist/test/p2p-ai-dialogue-test.js +0 -318
  267. package/dist/test/p2p-cid-connect-test.js +0 -195
  268. package/dist/test/p2p-connect-receiver.js +0 -69
  269. package/dist/test/p2p-doc-transfer.js +0 -110
  270. package/dist/test/p2p-identity-page-test.js +0 -77
  271. package/dist/test/p2p-iroh-test.js +0 -171
  272. package/dist/test/p2p-minimal-test.js +0 -241
  273. package/dist/test/p2p-node-1.js +0 -148
  274. package/dist/test/p2p-node-2.js +0 -148
  275. package/dist/test/p2p-server.js +0 -281
  276. package/dist/test/p2p-two-nodes-test.js +0 -438
  277. package/dist/test/pi-sdk.test.js +0 -44
  278. package/dist/test/set-persona.js +0 -40
  279. package/dist/test/simple.test.js +0 -9
  280. package/dist/test/storage-integration.test.js +0 -150
  281. package/dist/test/subagent-manager.test.js +0 -276
  282. package/dist/test/test-gate-flow.test.js +0 -81
  283. package/dist/test/workflow-engine.test.js +0 -87
  284. package/dist/test/workflow-pivot-loop.test.js +0 -246
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getWebServerProcess = getWebServerProcess;
37
+ exports.killWebServer = killWebServer;
38
+ exports.startWebServer = startWebServer;
39
+ /**
40
+ * Spawns dist/web/server.js as a child Node process (via Electron's
41
+ * ELECTRON_RUN_AS_NODE=1) and parses BOLLOON_PORT=NNNN to learn the
42
+ * actually-bound port (which may have drifted from the preferred port
43
+ * due to EADDRINUSE auto-bump).
44
+ */
45
+ const child_process_1 = require("child_process");
46
+ const path = __importStar(require("path"));
47
+ const logger_1 = require("./logger");
48
+ const config_1 = require("./config");
49
+ // Resolve to the directory holding this file. See src/electron/window.ts for the rationale;
50
+ // this avoids the same `import.meta` / `__dirname` redeclaration conflicts that broke
51
+ // the electron tsconfig when esnext module mode was set.
52
+ const g = globalThis;
53
+ const __basedir = g.__dirname
54
+ ?? (g.__filename ? path.dirname(g.__filename) : process.cwd());
55
+ let webServerProcess = null;
56
+ function getWebServerProcess() {
57
+ return webServerProcess;
58
+ }
59
+ function killWebServer() {
60
+ if (webServerProcess && !webServerProcess.killed) {
61
+ (0, logger_1.log)('终止 Web 服务器进程');
62
+ webServerProcess.kill();
63
+ }
64
+ webServerProcess = null;
65
+ }
66
+ function startWebServer(preferredPort) {
67
+ return new Promise((resolve, reject) => {
68
+ const serverScript = path.join(__basedir, '..', 'web', 'server.js');
69
+ (0, logger_1.log)(`启动 Web 服务器进程: ${serverScript}`);
70
+ // ELECTRON_RUN_AS_NODE=1 — packaged 时 process.execPath 是 Electron 二进制,
71
+ // 没这行 require() 会失败. Dev 模式 (electron dist/electron.js) 同样情况.
72
+ webServerProcess = (0, child_process_1.spawn)(process.execPath, [serverScript], {
73
+ env: {
74
+ ...process.env,
75
+ ELECTRON_RUN_AS_NODE: '1',
76
+ NODE_ENV: 'production',
77
+ PORT: String(preferredPort),
78
+ ELECTRON_PORT: String(preferredPort),
79
+ BOLLOON_HOST: config_1.DEFAULT_HOST,
80
+ },
81
+ stdio: ['ignore', 'pipe', 'pipe'],
82
+ });
83
+ let stdoutBuf = '';
84
+ let stderrData = '';
85
+ webServerProcess.stdout?.on('data', (data) => {
86
+ stdoutBuf += data.toString();
87
+ process.stdout.write(`[WebServer] ${data}`);
88
+ const m = stdoutBuf.match(/^BOLLOON_PORT=(\d+)/m);
89
+ if (m) {
90
+ const actualPort = parseInt(m[1], 10);
91
+ (0, logger_1.log)(`Web 服务器就绪: 实际端口=${actualPort} (preferred=${preferredPort})`);
92
+ resolve({ port: actualPort });
93
+ }
94
+ });
95
+ webServerProcess.stderr?.on('data', (data) => {
96
+ stderrData += data.toString();
97
+ process.stderr.write(`[WebServer ERR] ${data}`);
98
+ (0, logger_1.log)(`[WebServer stderr] ${data.toString().trim()}`, 'warn');
99
+ });
100
+ webServerProcess.on('error', (err) => {
101
+ (0, logger_1.log)(`Web 服务器启动失败: ${err.message}`, 'error');
102
+ reject(err);
103
+ });
104
+ webServerProcess.on('exit', (code, signal) => {
105
+ (0, logger_1.log)(`Web 服务器退出: code=${code} signal=${signal}`);
106
+ if (code !== 0 && code !== null) {
107
+ (0, logger_1.log)(`Web 服务器 stderr: ${stderrData.slice(0, 500)}`, 'error');
108
+ }
109
+ webServerProcess = null;
110
+ });
111
+ setTimeout(() => {
112
+ if (webServerProcess && !webServerProcess.killed) {
113
+ (0, logger_1.log)(`Web 服务器启动超时 (${config_1.WEB_SERVER_STARTUP_TIMEOUT_MS}ms)`, 'error');
114
+ reject(new Error('Web server startup timeout'));
115
+ }
116
+ }, config_1.WEB_SERVER_STARTUP_TIMEOUT_MS);
117
+ });
118
+ }
119
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/electron/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createTray = createTray;
37
+ exports.destroyTray = destroyTray;
38
+ /**
39
+ * 系统托盘 — Show / Hide / Quit
40
+ *
41
+ * 图标资源要求 (需用户自备):
42
+ * build/trayTemplate.png (mac, 16x16 + 32x32 @2x, 单色 alpha, 自动暗/亮)
43
+ * build/tray.png (win/linux, 16x16 + 32x32)
44
+ *
45
+ * 若 build 目录没有 tray 图标, 降级为不创建托盘 (主菜单和窗口关闭行为不变)
46
+ */
47
+ const electron_1 = require("electron");
48
+ const path = __importStar(require("path"));
49
+ const fs = __importStar(require("fs"));
50
+ const paths_1 = require("./paths");
51
+ const logger_1 = require("./logger");
52
+ let trayInstance = null;
53
+ function loadTrayIcon() {
54
+ const isMac = process.platform === 'darwin';
55
+ const file = isMac ? 'trayTemplate.png' : 'tray.png';
56
+ const iconPath = path.join((0, paths_1.buildResourcesDir)(), file);
57
+ if (!fs.existsSync(iconPath)) {
58
+ (0, logger_1.log)(`托盘图标缺失: ${iconPath} (跳过托盘创建)`, 'warn');
59
+ return null;
60
+ }
61
+ const img = electron_1.nativeImage.createFromPath(iconPath);
62
+ if (isMac)
63
+ img.setTemplateImage(true);
64
+ return img;
65
+ }
66
+ function createTray(getMainWindow) {
67
+ if (trayInstance)
68
+ return;
69
+ const icon = loadTrayIcon();
70
+ if (!icon)
71
+ return;
72
+ trayInstance = new electron_1.Tray(icon);
73
+ trayInstance.setToolTip(`Bolloon Agent v${electron_1.app.getVersion()}`);
74
+ const toggle = () => {
75
+ const w = getMainWindow();
76
+ if (!w)
77
+ return;
78
+ if (w.isVisible() && w.isFocused()) {
79
+ w.hide();
80
+ }
81
+ else {
82
+ if (w.isMinimized())
83
+ w.restore();
84
+ w.show();
85
+ w.focus();
86
+ }
87
+ };
88
+ const menu = electron_1.Menu.buildFromTemplate([
89
+ { label: 'Show / Hide', click: () => toggle() },
90
+ { type: 'separator' },
91
+ {
92
+ label: 'Quit',
93
+ click: () => {
94
+ (0, logger_1.log)('托盘菜单 Quit');
95
+ electron_1.app.quit();
96
+ },
97
+ },
98
+ ]);
99
+ trayInstance.setContextMenu(menu);
100
+ // mac 默认 click 弹菜单, win/linux 默认 click 触发自定义
101
+ if (process.platform !== 'darwin') {
102
+ trayInstance.on('click', () => toggle());
103
+ }
104
+ }
105
+ function destroyTray() {
106
+ if (trayInstance) {
107
+ trayInstance.destroy();
108
+ trayInstance = null;
109
+ }
110
+ }
111
+ //# sourceMappingURL=tray.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tray.js","sourceRoot":"","sources":["../../src/electron/tray.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,gCAuCC;AAED,kCAKC;AA/ED;;;;;;;;GAQG;AACH,uCAAuE;AACvE,2CAA6B;AAC7B,uCAAyB;AACzB,mCAA4C;AAC5C,qCAA+B;AAI/B,IAAI,YAAY,GAAgB,IAAI,CAAC;AAErC,SAAS,YAAY;IACnB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAA,yBAAiB,GAAE,EAAE,IAAI,CAAC,CAAC;IAEtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,IAAA,YAAG,EAAC,WAAW,QAAQ,WAAW,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,sBAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,KAAK;QAAE,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,UAAU,CAAC,aAAwB;IACjD,IAAI,YAAY;QAAE,OAAO;IAEzB,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,YAAY,GAAG,IAAI,eAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,YAAY,CAAC,UAAU,CAAC,kBAAkB,cAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC;YACnC,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,CAAC,WAAW,EAAE;gBAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACjC,CAAC,CAAC,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,eAAI,CAAC,iBAAiB,CAAC;QAClC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;QAC/C,EAAE,IAAI,EAAE,WAAW,EAAE;QACrB;YACE,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,GAAG,EAAE;gBACV,IAAA,YAAG,EAAC,WAAW,CAAC,CAAC;gBACjB,cAAG,CAAC,IAAI,EAAE,CAAC;YACb,CAAC;SACF;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAElC,6CAA6C;IAC7C,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAgB,WAAW;IACzB,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,CAAC,OAAO,EAAE,CAAC;QACvB,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;AACH,CAAC"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getMainWindow = getMainWindow;
37
+ exports.createMainWindow = createMainWindow;
38
+ exports.focusMainWindow = focusMainWindow;
39
+ /**
40
+ * 主窗口工厂 — preload 路径解析 + dev/prod loadURL + 外部链接走系统浏览器
41
+ */
42
+ const electron_1 = require("electron");
43
+ const path = __importStar(require("path"));
44
+ const logger_1 = require("./logger");
45
+ const config_1 = require("./config");
46
+ const server_1 = require("./server");
47
+ const g = globalThis;
48
+ const __basedir = g.__dirname
49
+ ?? (g.__filename ? path.dirname(g.__filename) : process.cwd());
50
+ let mainWindow = null;
51
+ function getMainWindow() {
52
+ return mainWindow;
53
+ }
54
+ async function createMainWindow() {
55
+ (0, logger_1.log)('创建主窗口...');
56
+ mainWindow = new electron_1.BrowserWindow({
57
+ width: config_1.MAIN_WINDOW_DEFAULT.width,
58
+ height: config_1.MAIN_WINDOW_DEFAULT.height,
59
+ minWidth: config_1.MAIN_WINDOW_MIN.width,
60
+ minHeight: config_1.MAIN_WINDOW_MIN.height,
61
+ title: 'Bolloon Agent',
62
+ webPreferences: {
63
+ nodeIntegration: false,
64
+ contextIsolation: true,
65
+ sandbox: false, // MCP/spawn 等需要 fs; 真正的隔离靠 preload 边界
66
+ preload: path.join(__basedir, '..', 'electron-preload.js'),
67
+ },
68
+ show: false,
69
+ });
70
+ if (config_1.isDev) {
71
+ // dev:web 用 tsx 起 server, 端口固定 preferredPort, 不会 EADDRINUSE 自增
72
+ const port = (0, config_1.preferredPort)();
73
+ mainWindow.loadURL(`http://localhost:${port}`);
74
+ mainWindow.webContents.openDevTools();
75
+ }
76
+ else {
77
+ try {
78
+ (0, logger_1.log)('启动内置 Web 服务器...');
79
+ const { port: actualPort } = await (0, server_1.startWebServer)((0, config_1.preferredPort)());
80
+ mainWindow.loadURL(`http://localhost:${actualPort}`);
81
+ }
82
+ catch (err) {
83
+ (0, logger_1.log)(`启动服务器失败: ${err.message}`, 'error');
84
+ console.error('启动服务器失败:', err);
85
+ }
86
+ }
87
+ mainWindow.once('ready-to-show', () => {
88
+ mainWindow?.show();
89
+ (0, logger_1.log)('窗口已显示');
90
+ });
91
+ // 外部链接走系统浏览器, 不在 app 内开新窗口
92
+ mainWindow.webContents.setWindowOpenHandler(({ url }) => {
93
+ if (url.startsWith('http://') || url.startsWith('https://')) {
94
+ electron_1.shell.openExternal(url);
95
+ }
96
+ return { action: 'deny' };
97
+ });
98
+ mainWindow.on('closed', () => {
99
+ mainWindow = null;
100
+ });
101
+ (0, logger_1.log)('窗口创建完成');
102
+ }
103
+ function focusMainWindow() {
104
+ if (!mainWindow)
105
+ return;
106
+ if (mainWindow.isMinimized())
107
+ mainWindow.restore();
108
+ mainWindow.show();
109
+ mainWindow.focus();
110
+ }
111
+ //# sourceMappingURL=window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window.js","sourceRoot":"","sources":["../../src/electron/window.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
1
3
  /**
2
4
  * Electron Preload 脚本
3
5
  * 在渲染进程和主进程之间建立安全的通信桥梁
6
+ * contextIsolation: true, nodeIntegration: false — 只能通过这里暴露的 API 触达主进程
4
7
  */
5
- import { contextBridge, ipcRenderer } from 'electron';
6
- // 暴露给渲染进程的 API
7
- contextBridge.exposeInMainWorld('electronAPI', {
8
- getVersion: () => ipcRenderer.invoke('get-version'),
9
- getUserDataPath: () => ipcRenderer.invoke('get-user-data-path'),
10
- openExternal: (url) => ipcRenderer.invoke('open-external', url),
8
+ const electron_1 = require("electron");
9
+ electron_1.contextBridge.exposeInMainWorld('electronAPI', {
10
+ // === 原有 (保留) ===
11
+ getVersion: () => electron_1.ipcRenderer.invoke('get-version'),
12
+ getUserDataPath: () => electron_1.ipcRenderer.invoke('get-user-data-path'),
13
+ openExternal: (url) => electron_1.ipcRenderer.invoke('open-external', url),
14
+ // === 新增: 数据目录 ===
15
+ getDataPath: () => electron_1.ipcRenderer.invoke('get-data-path'),
16
+ // === 新增: 文件 dialog ===
17
+ openFile: (opts) => electron_1.ipcRenderer.invoke('dialog:open-file', opts),
18
+ saveFile: (opts) => electron_1.ipcRenderer.invoke('dialog:save-file', opts),
19
+ openDirectory: (opts) => electron_1.ipcRenderer.invoke('dialog:open-directory', opts),
20
+ // === 新增: 文件系统 (限大小, 主进程守卫) ===
21
+ readTextFile: (opts) => electron_1.ipcRenderer.invoke('fs:read-text-file', opts),
22
+ writeTextFile: (opts) => electron_1.ipcRenderer.invoke('fs:write-text-file', opts),
23
+ pathExists: (opts) => electron_1.ipcRenderer.invoke('fs:path-exists', opts),
24
+ // === 新增: 首启引导 ===
25
+ getFirstRunSeen: () => electron_1.ipcRenderer.invoke('first-run:seen'),
26
+ markFirstRunSeen: () => electron_1.ipcRenderer.invoke('first-run:mark-seen'),
27
+ getDataPathSync: () => electron_1.ipcRenderer.invoke('first-run:data-dir'),
28
+ getLogsPathSync: () => electron_1.ipcRenderer.invoke('first-run:logs-dir'),
29
+ // === 元数据 ===
11
30
  platform: process.platform,
12
31
  });
32
+ //# sourceMappingURL=electron-preload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"electron-preload.js","sourceRoot":"","sources":["../src/electron-preload.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,uCAAsD;AAEtD,eAAe;AACf,wBAAa,CAAC,iBAAiB,CAAC,aAAa,EAAE;IAC7C,UAAU,EAAE,GAAG,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,aAAa,CAAC;IACnD,eAAe,EAAE,GAAG,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC;IAC/D,YAAY,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC;IACvE,QAAQ,EAAE,OAAO,CAAC,QAAQ;CAC3B,CAAC,CAAC"}
1
+ {"version":3,"file":"electron-preload.js","sourceRoot":"","sources":["../src/electron-preload.ts"],"names":[],"mappings":";;AAAA;;;;GAIG;AACH,uCAAwE;AAIxE,wBAAa,CAAC,iBAAiB,CAAC,aAAa,EAAE;IAC7C,kBAAkB;IAClB,UAAU,EAAE,GAAG,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,aAAa,CAAC;IACnD,eAAe,EAAE,GAAG,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC;IAC/D,YAAY,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC;IAEvE,mBAAmB;IACnB,WAAW,EAAE,GAAG,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,eAAe,CAAC;IAEtD,wBAAwB;IACxB,QAAQ,EAAE,CAAC,IAAU,EAAE,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC;IACtE,QAAQ,EAAE,CAAC,IAAU,EAAE,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC;IACtE,aAAa,EAAE,CAAC,IAAU,EAAE,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,CAAC;IAEhF,gCAAgC;IAChC,YAAY,EAAE,CAAC,IAAyC,EAAE,EAAE,CAC1D,sBAAW,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC;IAC/C,aAAa,EAAE,CAAC,IAA0D,EAAE,EAAE,CAC5E,sBAAW,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC;IAChD,UAAU,EAAE,CAAC,IAAsB,EAAE,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC;IAElF,mBAAmB;IACnB,eAAe,EAAE,GAAG,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC;IAC3D,gBAAgB,EAAE,GAAG,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,qBAAqB,CAAC;IACjE,eAAe,EAAE,GAAG,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC;IAC/D,eAAe,EAAE,GAAG,EAAE,CAAC,sBAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC;IAE/D,cAAc;IACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;CAC3B,CAAC,CAAC"}
package/dist/electron.js CHANGED
@@ -1,170 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
1
3
  /**
2
- * Electron 主进程入口
4
+ * Electron 入口 shim — 真正逻辑在 src/electron/main.ts
5
+ * (保留 src/electron.ts 平铺入口, 不动 package.json 的 dist/electron.js 解析)
3
6
  */
4
- import { app, BrowserWindow, ipcMain, shell } from 'electron';
5
- import * as path from 'path';
6
- import * as fs from 'fs';
7
- import { spawn } from 'child_process';
8
- const isDev = process.env.NODE_ENV === 'development' || !app.isPackaged;
9
- // 日志文件路径
10
- const userDataPath = app.getPath('userData');
11
- const logPath = path.join(userDataPath, 'bolloon.log');
12
- function log(msg) {
13
- const ts = new Date().toISOString();
14
- const line = `[${ts}] ${msg}\n`;
15
- fs.appendFileSync(logPath, line);
16
- console.log(msg);
17
- }
18
- log('Bolloon Electron 启动');
19
- // 全局窗口引用
20
- let mainWindow = null;
21
- let webServerProcess = null;
22
- // 防止多个实例
23
- const gotTheLock = app.requestSingleInstanceLock();
24
- if (!gotTheLock) {
25
- log('已有实例在运行,退出');
26
- app.quit();
27
- }
28
- app.on('second-instance', () => {
29
- if (mainWindow) {
30
- if (mainWindow.isMinimized())
31
- mainWindow.restore();
32
- mainWindow.focus();
33
- }
34
- });
35
- function startWebServer(port) {
36
- return new Promise((resolve, reject) => {
37
- const serverScript = path.join(__dirname, 'web', 'server.js');
38
- log(`启动 Web 服务器进程: ${serverScript}`);
39
- webServerProcess = spawn(process.execPath, [serverScript], {
40
- env: {
41
- ...process.env,
42
- NODE_ENV: 'production',
43
- PORT: String(port),
44
- ELECTRON_PORT: String(port),
45
- },
46
- stdio: ['ignore', 'pipe', 'pipe'],
47
- });
48
- let stdoutData = '';
49
- let stderrData = '';
50
- webServerProcess.stdout?.on('data', (data) => {
51
- stdoutData += data.toString();
52
- process.stdout.write(`[WebServer] ${data}`);
53
- });
54
- webServerProcess.stderr?.on('data', (data) => {
55
- stderrData += data.toString();
56
- process.stderr.write(`[WebServer ERR] ${data}`);
57
- });
58
- webServerProcess.on('error', (err) => {
59
- log(`Web 服务器进程启动失败: ${err}`);
60
- reject(err);
61
- });
62
- webServerProcess.on('exit', (code, signal) => {
63
- log(`Web 服务器进程退出: code=${code} signal=${signal}`);
64
- if (code !== 0 && code !== null) {
65
- log(`Web 服务器 stderr: ${stderrData}`);
66
- }
67
- });
68
- // 等待服务器就绪 - 检查 stdout 中的标记
69
- const checkReady = setInterval(() => {
70
- if (stdoutData.includes('服务器已监听') || stdoutData.includes('Web 服务器启动完成')) {
71
- clearInterval(checkReady);
72
- log('Web 服务器进程已就绪');
73
- resolve();
74
- }
75
- }, 200);
76
- // 超时
77
- setTimeout(() => {
78
- clearInterval(checkReady);
79
- if (webServerProcess?.killed === false) {
80
- log('Web 服务器启动超时');
81
- reject(new Error('Web server startup timeout'));
82
- }
83
- }, 15000);
84
- });
85
- }
86
- async function createWindow() {
87
- log('创建主窗口...');
88
- const width = 1200;
89
- const height = 800;
90
- const minWidth = 800;
91
- const minHeight = 600;
92
- mainWindow = new BrowserWindow({
93
- width,
94
- height,
95
- minWidth,
96
- minHeight,
97
- title: 'Bolloon Agent',
98
- webPreferences: {
99
- nodeIntegration: false,
100
- contextIsolation: true,
101
- sandbox: false,
102
- },
103
- show: false,
104
- });
105
- const port = parseInt(process.env.ELECTRON_PORT || '54188');
106
- if (isDev) {
107
- mainWindow.loadURL(`http://localhost:${port}`);
108
- mainWindow.webContents.openDevTools();
109
- }
110
- else {
111
- try {
112
- log(`启动内置 Web 服务器...`);
113
- await startWebServer(port);
114
- mainWindow.loadURL(`http://localhost:${port}`);
115
- }
116
- catch (err) {
117
- log(`启动服务器失败: ${err}`);
118
- console.error('启动服务器失败:', err);
119
- }
120
- }
121
- mainWindow.once('ready-to-show', () => {
122
- mainWindow?.show();
123
- log('窗口已显示');
124
- });
125
- mainWindow.webContents.setWindowOpenHandler(({ url }) => {
126
- if (url.startsWith('http://') || url.startsWith('https://')) {
127
- shell.openExternal(url);
128
- }
129
- return { action: 'deny' };
130
- });
131
- mainWindow.on('closed', () => {
132
- mainWindow = null;
133
- });
134
- log('窗口创建完成');
135
- }
136
- app.whenReady().then(async () => {
137
- log('Electron 准备好');
138
- await createWindow();
139
- app.on('activate', async () => {
140
- if (BrowserWindow.getAllWindows().length === 0) {
141
- await createWindow();
142
- }
143
- });
144
- });
145
- app.on('window-all-closed', () => {
146
- log('所有窗口已关闭');
147
- if (webServerProcess) {
148
- webServerProcess.kill();
149
- log('Web 服务器进程已终止');
150
- }
151
- if (process.platform !== 'darwin') {
152
- app.quit();
153
- }
154
- });
155
- app.on('before-quit', () => {
156
- log('应用即将退出');
157
- if (webServerProcess) {
158
- webServerProcess.kill();
159
- }
160
- });
161
- ipcMain.handle('get-version', () => {
162
- return app.getVersion();
163
- });
164
- ipcMain.handle('get-user-data-path', () => {
165
- return userDataPath;
166
- });
167
- ipcMain.handle('open-external', async (_, url) => {
168
- await shell.openExternal(url);
169
- });
170
- log('主进程初始化完成');
7
+ require("./electron/main");
8
+ //# sourceMappingURL=electron.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"electron.js","sourceRoot":"","sources":["../src/electron.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"electron.js","sourceRoot":"","sources":["../src/electron.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,2BAAyB"}