@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.
- package/README.md +495 -467
- package/bin/bolloon-cli.cjs +183 -183
- package/bin/bolloon-daemon.sh +207 -0
- package/bin/bolloon.cjs +0 -0
- package/bin/ipfs +0 -0
- package/dist/agents/agent-manifest-protocol.js +52 -0
- package/dist/agents/chat-segmenter.js +298 -0
- package/dist/agents/constraint-layer.js +19 -19
- package/dist/agents/judgment-protocol.js +479 -0
- package/dist/agents/parse-tool-call.js +304 -0
- package/dist/agents/peer-manifest-loader.js +210 -0
- package/dist/agents/pi-sdk-session-factory.js +110 -0
- package/dist/agents/pi-sdk-session-manager.js +297 -0
- package/dist/agents/pi-sdk-tools.js +1288 -0
- package/dist/agents/pi-sdk-types.js +13 -0
- package/dist/agents/pi-sdk.js +553 -1306
- package/dist/agents/react-loop.js +120 -0
- package/dist/agents/session-store.js +171 -0
- package/dist/agents/shell-guard.js +2 -2
- package/dist/agents/tool-registry.js +136 -0
- package/dist/agents/workflow-pivot-loop.js +200 -22
- package/dist/bollharness/src/scripts/context_router.js +7 -0
- package/dist/bollharness/src/scripts/deploy-guard.js +8 -8
- package/dist/bollharness-integration/context-router-judgment.js +4 -4
- package/dist/bollharness-integration/context-router.js +292 -292
- package/dist/bollharness-integration/gate-state-machine.js +26 -13
- package/dist/bollharness-integration/integration.js +71 -0
- package/dist/bollharness-integration/llm-judgment-engine.js +134 -134
- package/dist/bollharness-integration/skill-adapter.js +57 -127
- package/dist/bootstrap/chat-archiver.js +276 -0
- package/dist/bootstrap/context-collector.js +6 -3
- package/dist/bootstrap/event-log.js +160 -0
- package/dist/bootstrap/lifecycle-hooks.js +15 -1
- package/dist/bootstrap/memory-compressor.js +170 -0
- package/dist/bootstrap/persona-loader.js +94 -0
- package/dist/bootstrap/project-state.js +159 -0
- package/dist/bootstrap/remote-mirror.js +97 -0
- package/dist/bootstrap/session-window.js +121 -0
- package/dist/bootstrap/vector-index.js +248 -0
- package/dist/cli/loading-tui.js +40 -0
- package/dist/cli-entry.js +41 -37
- package/dist/context-compaction/auto-compact.js +7 -7
- package/dist/electron/config.js +21 -0
- package/dist/electron/config.js.map +1 -0
- package/dist/electron/dialogs.js +108 -0
- package/dist/electron/dialogs.js.map +1 -0
- package/dist/electron/first-run.js +170 -0
- package/dist/electron/first-run.js.map +1 -0
- package/dist/electron/ipc.js +20 -0
- package/dist/electron/ipc.js.map +1 -0
- package/dist/electron/logger.js +114 -0
- package/dist/electron/logger.js.map +1 -0
- package/dist/electron/main.js +63 -0
- package/dist/electron/main.js.map +1 -0
- package/dist/electron/menu.js +145 -0
- package/dist/electron/menu.js.map +1 -0
- package/dist/electron/paths.js +75 -0
- package/dist/electron/paths.js.map +1 -0
- package/dist/electron/server.js +119 -0
- package/dist/electron/server.js.map +1 -0
- package/dist/electron/tray.js +111 -0
- package/dist/electron/tray.js.map +1 -0
- package/dist/electron/window.js +111 -0
- package/dist/electron/window.js.map +1 -0
- package/dist/electron-preload.js +26 -6
- package/dist/electron-preload.js.map +1 -1
- package/dist/electron.js +6 -168
- package/dist/electron.js.map +1 -1
- package/dist/index.js +323 -266
- package/dist/llm/config-store.js +29 -8
- package/dist/llm/llm-judgment-client.js +102 -102
- package/dist/llm/pi-ai.js +139 -85
- package/dist/llm/system-prompt/layers/channel/local.md +14 -14
- package/dist/llm/system-prompt/layers/channel/p2p-agent.md +18 -18
- package/dist/llm/system-prompt/layers/channel/p2p-visitor.md +19 -19
- package/dist/llm/system-prompt/layers/core/artifacts_storage.md +89 -89
- package/dist/llm/system-prompt/layers/core/evenhandedness.md +21 -21
- package/dist/llm/system-prompt/layers/core/hibs_reminders.md +15 -15
- package/dist/llm/system-prompt/layers/core/identity.md +37 -37
- package/dist/llm/system-prompt/layers/core/knowledge.md +17 -17
- package/dist/llm/system-prompt/layers/core/memory_system.md +12 -12
- package/dist/llm/system-prompt/layers/core/network_filesystem.md +28 -28
- package/dist/llm/system-prompt/layers/core/refusal.md +37 -37
- package/dist/llm/system-prompt/layers/core/tone.md +31 -31
- package/dist/llm/system-prompt/layers/core/tools.thin.md +13 -13
- package/dist/llm/system-prompt/layers/core/wellbeing.md +41 -41
- package/dist/llm/system-prompt/layers/role/architect.md +20 -20
- package/dist/llm/system-prompt/layers/role/expert.md +19 -19
- package/dist/llm/system-prompt/layers/role/implementer.md +15 -15
- package/dist/llm/system-prompt/layers/role/security.md +15 -15
- package/dist/llm/system-prompt/layers/tool/artifacts.md +72 -72
- package/dist/llm/system-prompt/layers/tool/bash.md +25 -25
- package/dist/llm/system-prompt/layers/tool/hibs_api.md +171 -171
- package/dist/llm/system-prompt/layers/tool/image_search.md +70 -70
- package/dist/llm/system-prompt/layers/tool/manifest.md +89 -89
- package/dist/llm/system-prompt/layers/tool/mcp_apps.md +53 -53
- package/dist/llm/system-prompt/layers/tool/web_search.md +83 -83
- package/dist/llm/tool-manifest/ask_user_input.js +1 -1
- package/dist/llm/tool-manifest/bash.js +3 -3
- package/dist/llm/tool-manifest/create_file.js +4 -4
- package/dist/llm/tool-manifest/fetch_sports_data.js +3 -3
- package/dist/llm/tool-manifest/image_search.js +2 -2
- package/dist/llm/tool-manifest/mcp.js +2 -2
- package/dist/llm/tool-manifest/message_compose.js +3 -3
- package/dist/llm/tool-manifest/places.js +2 -2
- package/dist/llm/tool-manifest/present_files.js +1 -1
- package/dist/llm/tool-manifest/recipe.js +2 -2
- package/dist/llm/tool-manifest/str_replace.js +5 -5
- package/dist/llm/tool-manifest/view.js +3 -3
- package/dist/llm/tool-manifest/weather.js +4 -4
- package/dist/llm/tool-manifest/web.js +4 -4
- package/dist/network/local-inbox-bus.js +73 -0
- package/dist/network/p2p-outbox.js +161 -0
- package/dist/network/peer-fs.js +420 -0
- package/dist/network/peer-resource-bridge.js +216 -0
- package/dist/pi-ecosystem-judgment/causal-judge.js +51 -51
- package/dist/pi-ecosystem-judgment/cleanup.js +126 -0
- package/dist/pi-ecosystem-judgment/distill-prompt.js +42 -42
- package/dist/pi-ecosystem-judgment/distillation.js +14 -14
- package/dist/pi-ecosystem-judgment/human-value-store.js +45 -11
- package/dist/pi-ecosystem-judgment/monitor-gate.js +28 -28
- package/dist/pi-ecosystem-judgment/value-injection.js +102 -102
- package/dist/security/context-router-tool.js +15 -15
- package/dist/security/tool-gate.js +11 -0
- package/dist/web/api-config.html +520 -520
- package/dist/web/client-loop-status.js +220 -0
- package/dist/web/client.js +22 -5
- package/dist/web/client.js.map +7 -0
- package/dist/web/components/wallet-viem.mjs +118 -118
- package/dist/web/index.html +375 -375
- package/dist/web/input-validator.js +103 -0
- package/dist/web/manifest.json +20 -20
- package/dist/web/routes-judgments.js +738 -0
- package/dist/web/routes-llm-config.js +279 -0
- package/dist/web/routes-tasks.js +222 -0
- package/dist/web/server-sse.js +121 -0
- package/dist/web/server-storage.js +154 -0
- package/dist/web/server-types.js +15 -0
- package/dist/web/server-v3-p2p.js +224 -0
- package/dist/web/server.js +1070 -1307
- package/dist/web/style.css +4742 -4742
- package/dist/web/util/safe-name.js +32 -0
- package/package.json +162 -160
- package/scripts/build-cli.js +215 -215
- package/scripts/build-web.ts +130 -130
- package/scripts/postinstall.js +152 -152
- package/bin/bolloon.js +0 -157
- package/dist/constraint-runtime/src/_archive_helper.js +0 -9
- package/dist/constraint-runtime/src/agent/coordinator.js +0 -48
- package/dist/constraint-runtime/src/agent/index.js +0 -1
- package/dist/constraint-runtime/src/assistant/index.js +0 -12
- package/dist/constraint-runtime/src/bootstrap/index.js +0 -12
- package/dist/constraint-runtime/src/bootstrap_graph.js +0 -13
- package/dist/constraint-runtime/src/bridge/index.js +0 -12
- package/dist/constraint-runtime/src/buddy/index.js +0 -12
- package/dist/constraint-runtime/src/cli/index.js +0 -12
- package/dist/constraint-runtime/src/command_graph.js +0 -10
- package/dist/constraint-runtime/src/commands.js +0 -60
- package/dist/constraint-runtime/src/components/index.js +0 -12
- package/dist/constraint-runtime/src/constants/index.js +0 -12
- package/dist/constraint-runtime/src/constraint/budget.js +0 -22
- package/dist/constraint-runtime/src/constraint/index.js +0 -2
- package/dist/constraint-runtime/src/constraint/permission.js +0 -20
- package/dist/constraint-runtime/src/context.js +0 -30
- package/dist/constraint-runtime/src/coordinator/index.js +0 -12
- package/dist/constraint-runtime/src/cost_hook.js +0 -4
- package/dist/constraint-runtime/src/cost_tracker.js +0 -8
- package/dist/constraint-runtime/src/deferred_init.js +0 -10
- package/dist/constraint-runtime/src/direct_modes.js +0 -6
- package/dist/constraint-runtime/src/dynamic-tool-loader.js +0 -85
- package/dist/constraint-runtime/src/entrypoints/index.js +0 -12
- package/dist/constraint-runtime/src/execution_registry.js +0 -44
- package/dist/constraint-runtime/src/history.js +0 -9
- package/dist/constraint-runtime/src/hooks/index.js +0 -12
- package/dist/constraint-runtime/src/index.js +0 -26
- package/dist/constraint-runtime/src/ink.js +0 -4
- package/dist/constraint-runtime/src/keybindings/index.js +0 -12
- package/dist/constraint-runtime/src/memdir/index.js +0 -12
- package/dist/constraint-runtime/src/migrations/index.js +0 -12
- package/dist/constraint-runtime/src/models.js +0 -1
- package/dist/constraint-runtime/src/moreright/index.js +0 -12
- package/dist/constraint-runtime/src/native_ts/index.js +0 -12
- package/dist/constraint-runtime/src/output_styles/index.js +0 -12
- package/dist/constraint-runtime/src/parity_audit.js +0 -12
- package/dist/constraint-runtime/src/plugins/index.js +0 -12
- package/dist/constraint-runtime/src/port_manifest.js +0 -11
- package/dist/constraint-runtime/src/prefetch.js +0 -9
- package/dist/constraint-runtime/src/query.js +0 -1
- package/dist/constraint-runtime/src/remote/index.js +0 -12
- package/dist/constraint-runtime/src/remote_runtime.js +0 -9
- package/dist/constraint-runtime/src/runtime/index.js +0 -1
- package/dist/constraint-runtime/src/runtime/session.js +0 -35
- package/dist/constraint-runtime/src/schemas/index.js +0 -12
- package/dist/constraint-runtime/src/screens/index.js +0 -12
- package/dist/constraint-runtime/src/server/index.js +0 -12
- package/dist/constraint-runtime/src/services/index.js +0 -12
- package/dist/constraint-runtime/src/session_store.js +0 -22
- package/dist/constraint-runtime/src/setup.js +0 -30
- package/dist/constraint-runtime/src/skills/index.js +0 -1
- package/dist/constraint-runtime/src/skills/skill-registry.js +0 -28
- package/dist/constraint-runtime/src/state/index.js +0 -12
- package/dist/constraint-runtime/src/system_init.js +0 -20
- package/dist/constraint-runtime/src/thinking/engine.js +0 -42
- package/dist/constraint-runtime/src/thinking/index.js +0 -1
- package/dist/constraint-runtime/src/tool_pool.js +0 -8
- package/dist/constraint-runtime/src/tools/OpenCLI/execAdapter.js +0 -7
- package/dist/constraint-runtime/src/tools/OpenCLI/listAdapters.js +0 -7
- package/dist/constraint-runtime/src/tools/OpenCLI/runCommand.js +0 -7
- package/dist/constraint-runtime/src/tools/SafeSDK/confirmTransaction.js +0 -6
- package/dist/constraint-runtime/src/tools/SafeSDK/createTransaction.js +0 -8
- package/dist/constraint-runtime/src/tools/SafeSDK/executeTransaction.js +0 -6
- package/dist/constraint-runtime/src/tools/SafeSDK/getBalance.js +0 -6
- package/dist/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.js +0 -6
- package/dist/constraint-runtime/src/tools/SafeSDK/proposeTransaction.js +0 -6
- package/dist/constraint-runtime/src/tools.js +0 -80
- package/dist/constraint-runtime/src/transcript.js +0 -19
- package/dist/constraint-runtime/src/types/index.js +0 -12
- package/dist/constraint-runtime/src/upstream_proxy/index.js +0 -12
- package/dist/constraint-runtime/src/utils/index.js +0 -12
- package/dist/constraint-runtime/src/vim/index.js +0 -12
- package/dist/constraint-runtime/src/voice/index.js +0 -12
- package/dist/constraint-runtime/tests/agent.test.js +0 -16
- package/dist/constraint-runtime/tests/constraint.test.js +0 -41
- package/dist/constraint-runtime/tests/skill.test.js +0 -19
- package/dist/constraint-runtime/tests/thinking.test.js +0 -22
- package/dist/pi-ecosystem-colony/index.js +0 -365
- package/dist/social/ant-colony/AdaptiveHeartbeat.js +0 -101
- package/dist/social/ant-colony/PheromoneEngine.js +0 -227
- package/dist/social/ant-colony/index.js +0 -6
- package/dist/social/ant-colony/types.js +0 -24
- package/dist/test/ai-judgment-test.js +0 -80
- package/dist/test/bollharness-integration.test.js +0 -318
- package/dist/test/channel-agent-multi-dialogue.js +0 -205
- package/dist/test/channel-heartbeat-agent-test.js +0 -201
- package/dist/test/constraint-layer.test.js +0 -164
- package/dist/test/diap-identity-test.js +0 -172
- package/dist/test/diap-quick-test.js +0 -62
- package/dist/test/global-shared-context.test.js +0 -315
- package/dist/test/harness-judgment-injection.test.js +0 -246
- package/dist/test/harness-workflow-integrator-test.js +0 -228
- package/dist/test/human-value-store.test.js +0 -243
- package/dist/test/hybrid-integration-test.js +0 -118
- package/dist/test/hybrid-messenger-verify.js +0 -55
- package/dist/test/iroh-bistream-debug.js +0 -38
- package/dist/test/iroh-communication.test.js +0 -66
- package/dist/test/iroh-debug-test.js +0 -57
- package/dist/test/iroh-diap-test.js +0 -71
- package/dist/test/iroh-direct-connect.js +0 -55
- package/dist/test/iroh-e2e-fixed.js +0 -89
- package/dist/test/iroh-e2e-same-process.js +0 -63
- package/dist/test/iroh-e2e.js +0 -66
- package/dist/test/iroh-final-e2e.js +0 -72
- package/dist/test/iroh-relay-test.js +0 -37
- package/dist/test/iroh-simple-test.js +0 -41
- package/dist/test/iroh-transport-verify.js +0 -54
- package/dist/test/iroh-transport.test.js +0 -37
- package/dist/test/iroh-two-nodes.js +0 -70
- package/dist/test/iroh-verify.js +0 -44
- package/dist/test/judgment-decision.test.js +0 -219
- package/dist/test/llm-judgment-integration.test.js +0 -220
- package/dist/test/p2p-agent-complex-dialogue.js +0 -385
- package/dist/test/p2p-agent-dialogue.js +0 -341
- package/dist/test/p2p-agent-full-bidirectional.js +0 -510
- package/dist/test/p2p-agent-harness-flow.js +0 -437
- package/dist/test/p2p-agent-harness-single.js +0 -143
- package/dist/test/p2p-ai-dialogue-test.js +0 -318
- package/dist/test/p2p-cid-connect-test.js +0 -195
- package/dist/test/p2p-connect-receiver.js +0 -69
- package/dist/test/p2p-doc-transfer.js +0 -110
- package/dist/test/p2p-identity-page-test.js +0 -77
- package/dist/test/p2p-iroh-test.js +0 -171
- package/dist/test/p2p-minimal-test.js +0 -241
- package/dist/test/p2p-node-1.js +0 -148
- package/dist/test/p2p-node-2.js +0 -148
- package/dist/test/p2p-server.js +0 -281
- package/dist/test/p2p-two-nodes-test.js +0 -438
- package/dist/test/pi-sdk.test.js +0 -44
- package/dist/test/set-persona.js +0 -40
- package/dist/test/simple.test.js +0 -9
- package/dist/test/storage-integration.test.js +0 -150
- package/dist/test/subagent-manager.test.js +0 -276
- package/dist/test/test-gate-flow.test.js +0 -81
- package/dist/test/workflow-engine.test.js +0 -87
- package/dist/test/workflow-pivot-loop.test.js +0 -246
package/bin/bolloon.js
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
const path = require("path");
|
|
3
|
-
const { spawn } = require("child_process");
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
|
|
6
|
-
const RESET = "\x1b[0m";
|
|
7
|
-
const BOLD = "\x1b[1m";
|
|
8
|
-
const CYAN = "\x1b[36m";
|
|
9
|
-
const GREEN = "\x1b[32m";
|
|
10
|
-
const MAGENTA = "\x1b[35m";
|
|
11
|
-
|
|
12
|
-
function log(msg, color) {
|
|
13
|
-
console.log((color || RESET) + msg + RESET);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function printBanner() {
|
|
17
|
-
console.log("\n" + CYAN + BOLD + [
|
|
18
|
-
" ╔═══════════════════════════════════════════╗",
|
|
19
|
-
" ║ 🤖 Bolloon Agent ║",
|
|
20
|
-
" ║ P2P AI Document Processor ║",
|
|
21
|
-
" ╚═══════════════════════════════════════════╝"
|
|
22
|
-
].join("\n") + RESET + "\n");
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function getMainEntry() {
|
|
26
|
-
const distDir = path.dirname(require.main.filename);
|
|
27
|
-
const distIndex = path.join(distDir, "index.js");
|
|
28
|
-
if (fs.existsSync(distIndex)) {
|
|
29
|
-
return distIndex;
|
|
30
|
-
}
|
|
31
|
-
return path.join(process.cwd(), "src", "index.ts");
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function parseArgs() {
|
|
35
|
-
const args = process.argv.slice(2);
|
|
36
|
-
if (args.length === 0) {
|
|
37
|
-
return { mode: "gui", args: [] };
|
|
38
|
-
}
|
|
39
|
-
const first = args[0];
|
|
40
|
-
switch (first) {
|
|
41
|
-
case "-v":
|
|
42
|
-
case "--version":
|
|
43
|
-
return { mode: "version", args: [] };
|
|
44
|
-
case "-h":
|
|
45
|
-
case "--help":
|
|
46
|
-
return { mode: "help", args: [] };
|
|
47
|
-
case "-g":
|
|
48
|
-
case "--gui":
|
|
49
|
-
return { mode: "gui", args: args.slice(1) };
|
|
50
|
-
case "-w":
|
|
51
|
-
case "--web":
|
|
52
|
-
return { mode: "web", args: args.slice(1) };
|
|
53
|
-
case "-c":
|
|
54
|
-
case "--cli":
|
|
55
|
-
return { mode: "cli", args: args.slice(1) };
|
|
56
|
-
default:
|
|
57
|
-
return { mode: "passthrough", args };
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async function startElectron(additionalArgs) {
|
|
62
|
-
try {
|
|
63
|
-
const electron = require("electron");
|
|
64
|
-
const distDir = path.dirname(require.main.filename);
|
|
65
|
-
let mainPath = path.join(distDir, "electron.js");
|
|
66
|
-
if (!fs.existsSync(mainPath)) {
|
|
67
|
-
mainPath = path.join(process.cwd(), "src", "electron.ts");
|
|
68
|
-
}
|
|
69
|
-
log("启动 Electron...", CYAN);
|
|
70
|
-
const child = spawn(electron, [mainPath, ...additionalArgs], {
|
|
71
|
-
stdio: "inherit",
|
|
72
|
-
env: { ...process.env, NODE_ENV: "development" }
|
|
73
|
-
});
|
|
74
|
-
child.on("error", (err) => {
|
|
75
|
-
log("Electron 启动失败: " + err.message, MAGENTA);
|
|
76
|
-
process.exit(1);
|
|
77
|
-
});
|
|
78
|
-
child.on("exit", (code) => process.exit(code || 0));
|
|
79
|
-
} catch (err) {
|
|
80
|
-
log("Electron 不可用,切换到 Web 模式...", CYAN);
|
|
81
|
-
await startWebServer(additionalArgs);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
async function startWebServer(additionalArgs) {
|
|
86
|
-
const mainPath = getMainEntry();
|
|
87
|
-
const webArgs = ["--web", ...additionalArgs];
|
|
88
|
-
log("启动 Web 服务...", CYAN);
|
|
89
|
-
const child = spawn(process.execPath, [mainPath, ...webArgs], { stdio: "inherit" });
|
|
90
|
-
child.on("error", (err) => {
|
|
91
|
-
log("Web 服务启动失败: " + err.message, MAGENTA);
|
|
92
|
-
process.exit(1);
|
|
93
|
-
});
|
|
94
|
-
child.on("exit", (code) => process.exit(code || 0));
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
async function startCLI(additionalArgs) {
|
|
98
|
-
const mainPath = getMainEntry();
|
|
99
|
-
log("启动命令行界面...", CYAN);
|
|
100
|
-
const child = spawn(process.execPath, [mainPath, ...additionalArgs], { stdio: "inherit" });
|
|
101
|
-
child.on("error", (err) => {
|
|
102
|
-
log("CLI 启动失败: " + err.message, MAGENTA);
|
|
103
|
-
process.exit(1);
|
|
104
|
-
});
|
|
105
|
-
child.on("exit", (code) => process.exit(code || 0));
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
async function main() {
|
|
109
|
-
const { mode, args } = parseArgs();
|
|
110
|
-
switch (mode) {
|
|
111
|
-
case "version":
|
|
112
|
-
console.log("Bolloon Agent v0.1.1");
|
|
113
|
-
break;
|
|
114
|
-
case "help":
|
|
115
|
-
printBanner();
|
|
116
|
-
console.log(BOLD + "用法:" + RESET + " bolloon [选项] [命令] [参数]");
|
|
117
|
-
console.log(BOLD + "选项:" + RESET + " --gui, -g 启动图形界面");
|
|
118
|
-
console.log(" --web, -w 启动 Web UI");
|
|
119
|
-
console.log(" --cli, -c 启动命令行界面");
|
|
120
|
-
console.log(" --version, -v 显示版本");
|
|
121
|
-
console.log(" --help, -h 显示帮助");
|
|
122
|
-
console.log(BOLD + "示例:" + RESET + " bolloon # 启动图形界面");
|
|
123
|
-
console.log(" bolloon --web # 启动 Web UI");
|
|
124
|
-
console.log(" bolloon --read file # 读取文档");
|
|
125
|
-
break;
|
|
126
|
-
case "gui":
|
|
127
|
-
printBanner();
|
|
128
|
-
await startElectron(args);
|
|
129
|
-
break;
|
|
130
|
-
case "web":
|
|
131
|
-
printBanner();
|
|
132
|
-
await startWebServer(args);
|
|
133
|
-
break;
|
|
134
|
-
case "cli":
|
|
135
|
-
await startCLI(args);
|
|
136
|
-
break;
|
|
137
|
-
case "passthrough":
|
|
138
|
-
const mainPath = getMainEntry();
|
|
139
|
-
const child = spawn(process.execPath, [mainPath, ...args], { stdio: "inherit" });
|
|
140
|
-
child.on("error", (err) => {
|
|
141
|
-
log("执行失败: " + err.message, MAGENTA);
|
|
142
|
-
process.exit(1);
|
|
143
|
-
});
|
|
144
|
-
child.on("exit", (code) => process.exit(code || 0));
|
|
145
|
-
break;
|
|
146
|
-
default:
|
|
147
|
-
log("未知模式: " + mode, MAGENTA);
|
|
148
|
-
printBanner();
|
|
149
|
-
console.log("输入 --help 查看帮助");
|
|
150
|
-
process.exit(1);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
main().catch((err) => {
|
|
155
|
-
console.error("Fatal error:", err);
|
|
156
|
-
process.exit(1);
|
|
157
|
-
});
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
-
const __dirname = path.dirname(__filename);
|
|
6
|
-
export function loadArchiveMetadata(packageName) {
|
|
7
|
-
const snapshotPath = path.join(__dirname, 'reference_data', 'subsystems', `${packageName}.json`);
|
|
8
|
-
return JSON.parse(fs.readFileSync(snapshotPath, 'utf-8'));
|
|
9
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { DeepThinkingEngine } from '../thinking/engine.js';
|
|
2
|
-
export class AgentCoordinator {
|
|
3
|
-
engine;
|
|
4
|
-
constructor(maxDepth = 3) {
|
|
5
|
-
this.engine = new DeepThinkingEngine(maxDepth);
|
|
6
|
-
}
|
|
7
|
-
async dispatch(prompt, parallelCount = 3) {
|
|
8
|
-
const tasks = this.splitTask(prompt, parallelCount);
|
|
9
|
-
const results = await Promise.all(tasks.map(task => this.executeTask(task)));
|
|
10
|
-
return this.aggregate(results);
|
|
11
|
-
}
|
|
12
|
-
splitTask(prompt, count) {
|
|
13
|
-
const words = prompt.split(/\s+/);
|
|
14
|
-
const chunkSize = Math.ceil(words.length / count);
|
|
15
|
-
const chunks = [];
|
|
16
|
-
for (let i = 0; i < count; i++) {
|
|
17
|
-
const chunk = words.slice(i * chunkSize, (i + 1) * chunkSize).join(' ');
|
|
18
|
-
if (chunk) {
|
|
19
|
-
chunks.push({
|
|
20
|
-
id: `task-${i}`,
|
|
21
|
-
description: chunk,
|
|
22
|
-
priority: i
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return chunks;
|
|
27
|
-
}
|
|
28
|
-
async executeTask(task) {
|
|
29
|
-
try {
|
|
30
|
-
const thinkResult = await this.engine.think(task.description);
|
|
31
|
-
return {
|
|
32
|
-
taskId: task.id,
|
|
33
|
-
output: thinkResult.finalOutput,
|
|
34
|
-
success: true
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
return {
|
|
39
|
-
taskId: task.id,
|
|
40
|
-
output: String(error),
|
|
41
|
-
success: false
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
aggregate(results) {
|
|
46
|
-
return results.sort((a, b) => a.taskId.localeCompare(b.taskId));
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { AgentCoordinator } from './coordinator.js';
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { loadArchiveMetadata } from '../_archive_helper.js';
|
|
2
|
-
const SNAPSHOT = loadArchiveMetadata('assistant');
|
|
3
|
-
export const ARCHIVE_NAME = SNAPSHOT['archive_name'];
|
|
4
|
-
export const MODULE_COUNT = SNAPSHOT['module_count'];
|
|
5
|
-
export const SAMPLE_FILES = SNAPSHOT['sample_files'];
|
|
6
|
-
export const PORTING_NOTE = `Python placeholder package for '${ARCHIVE_NAME}' with ${MODULE_COUNT} archived module references.`;
|
|
7
|
-
export default {
|
|
8
|
-
ARCHIVE_NAME,
|
|
9
|
-
MODULE_COUNT,
|
|
10
|
-
PORTING_NOTE,
|
|
11
|
-
SAMPLE_FILES,
|
|
12
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { loadArchiveMetadata } from '../_archive_helper.js';
|
|
2
|
-
const SNAPSHOT = loadArchiveMetadata('bootstrap');
|
|
3
|
-
export const ARCHIVE_NAME = SNAPSHOT['archive_name'];
|
|
4
|
-
export const MODULE_COUNT = SNAPSHOT['module_count'];
|
|
5
|
-
export const SAMPLE_FILES = SNAPSHOT['sample_files'];
|
|
6
|
-
export const PORTING_NOTE = `Python placeholder package for '${ARCHIVE_NAME}' with ${MODULE_COUNT} archived module references.`;
|
|
7
|
-
export default {
|
|
8
|
-
ARCHIVE_NAME,
|
|
9
|
-
MODULE_COUNT,
|
|
10
|
-
PORTING_NOTE,
|
|
11
|
-
SAMPLE_FILES,
|
|
12
|
-
};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export function buildBootstrapGraph() {
|
|
2
|
-
return {
|
|
3
|
-
stages: [
|
|
4
|
-
'top-level prefetch side effects',
|
|
5
|
-
'warning handler and environment guards',
|
|
6
|
-
'CLI parser and pre-action trust gate',
|
|
7
|
-
'setup() + commands/agents parallel load',
|
|
8
|
-
'deferred init after trust',
|
|
9
|
-
'mode routing: local / remote / ssh / teleport / direct-connect / deep-link',
|
|
10
|
-
'query engine submit loop',
|
|
11
|
-
],
|
|
12
|
-
};
|
|
13
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { loadArchiveMetadata } from '../_archive_helper.js';
|
|
2
|
-
const SNAPSHOT = loadArchiveMetadata('bridge');
|
|
3
|
-
export const ARCHIVE_NAME = SNAPSHOT['archive_name'];
|
|
4
|
-
export const MODULE_COUNT = SNAPSHOT['module_count'];
|
|
5
|
-
export const SAMPLE_FILES = SNAPSHOT['sample_files'];
|
|
6
|
-
export const PORTING_NOTE = `Python placeholder package for '${ARCHIVE_NAME}' with ${MODULE_COUNT} archived module references.`;
|
|
7
|
-
export default {
|
|
8
|
-
ARCHIVE_NAME,
|
|
9
|
-
MODULE_COUNT,
|
|
10
|
-
PORTING_NOTE,
|
|
11
|
-
SAMPLE_FILES,
|
|
12
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { loadArchiveMetadata } from '../_archive_helper.js';
|
|
2
|
-
const SNAPSHOT = loadArchiveMetadata('buddy');
|
|
3
|
-
export const ARCHIVE_NAME = SNAPSHOT['archive_name'];
|
|
4
|
-
export const MODULE_COUNT = SNAPSHOT['module_count'];
|
|
5
|
-
export const SAMPLE_FILES = SNAPSHOT['sample_files'];
|
|
6
|
-
export const PORTING_NOTE = `Python placeholder package for '${ARCHIVE_NAME}' with ${MODULE_COUNT} archived module references.`;
|
|
7
|
-
export default {
|
|
8
|
-
ARCHIVE_NAME,
|
|
9
|
-
MODULE_COUNT,
|
|
10
|
-
PORTING_NOTE,
|
|
11
|
-
SAMPLE_FILES,
|
|
12
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { loadArchiveMetadata } from '../_archive_helper.js';
|
|
2
|
-
const SNAPSHOT = loadArchiveMetadata('cli');
|
|
3
|
-
export const ARCHIVE_NAME = SNAPSHOT['archive_name'];
|
|
4
|
-
export const MODULE_COUNT = SNAPSHOT['module_count'];
|
|
5
|
-
export const SAMPLE_FILES = SNAPSHOT['sample_files'];
|
|
6
|
-
export const PORTING_NOTE = `Python placeholder package for '${ARCHIVE_NAME}' with ${MODULE_COUNT} archived module references.`;
|
|
7
|
-
export default {
|
|
8
|
-
ARCHIVE_NAME,
|
|
9
|
-
MODULE_COUNT,
|
|
10
|
-
PORTING_NOTE,
|
|
11
|
-
SAMPLE_FILES,
|
|
12
|
-
};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { getCommands } from './commands.js';
|
|
2
|
-
export function buildCommandGraph() {
|
|
3
|
-
const commands = getCommands();
|
|
4
|
-
return {
|
|
5
|
-
builtins: commands.filter(m => !m.sourceHint.toLowerCase().includes('plugin') &&
|
|
6
|
-
!m.sourceHint.toLowerCase().includes('skills')),
|
|
7
|
-
pluginLike: commands.filter(m => m.sourceHint.toLowerCase().includes('plugin')),
|
|
8
|
-
skillLike: commands.filter(m => m.sourceHint.toLowerCase().includes('skills')),
|
|
9
|
-
};
|
|
10
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
-
const __dirname = path.dirname(__filename);
|
|
6
|
-
const SNAPSHOT_PATH = path.join(__dirname, 'reference_data', 'commands_snapshot.json');
|
|
7
|
-
function loadCommandSnapshot() {
|
|
8
|
-
try {
|
|
9
|
-
if (!fs.existsSync(SNAPSHOT_PATH)) {
|
|
10
|
-
console.warn(`[commands] Snapshot not found: ${SNAPSHOT_PATH}, using empty list`);
|
|
11
|
-
return [];
|
|
12
|
-
}
|
|
13
|
-
const raw = JSON.parse(fs.readFileSync(SNAPSHOT_PATH, 'utf-8'));
|
|
14
|
-
return raw.map((e) => ({
|
|
15
|
-
name: e.name,
|
|
16
|
-
responsibility: e.responsibility,
|
|
17
|
-
sourceHint: e.source_hint,
|
|
18
|
-
status: 'mirrored',
|
|
19
|
-
}));
|
|
20
|
-
}
|
|
21
|
-
catch (error) {
|
|
22
|
-
console.warn(`[commands] Failed to load snapshot: ${error}, using empty list`);
|
|
23
|
-
return [];
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
export const PORTED_COMMANDS = loadCommandSnapshot();
|
|
27
|
-
export function builtInCommandNames() {
|
|
28
|
-
return new Set(PORTED_COMMANDS.map(m => m.name));
|
|
29
|
-
}
|
|
30
|
-
export function getCommand(name) {
|
|
31
|
-
const needle = name.toLowerCase();
|
|
32
|
-
return PORTED_COMMANDS.find(m => m.name.toLowerCase() === needle);
|
|
33
|
-
}
|
|
34
|
-
export function getCommands(includePluginCommands = true, includeSkillCommands = true) {
|
|
35
|
-
let commands = [...PORTED_COMMANDS];
|
|
36
|
-
if (!includePluginCommands) {
|
|
37
|
-
commands = commands.filter(m => !m.sourceHint.toLowerCase().includes('plugin'));
|
|
38
|
-
}
|
|
39
|
-
if (!includeSkillCommands) {
|
|
40
|
-
commands = commands.filter(m => !m.sourceHint.toLowerCase().includes('skills'));
|
|
41
|
-
}
|
|
42
|
-
return commands;
|
|
43
|
-
}
|
|
44
|
-
export function findCommands(query, limit = 20) {
|
|
45
|
-
const needle = query.toLowerCase();
|
|
46
|
-
return PORTED_COMMANDS.filter(m => m.name.toLowerCase().includes(needle) || m.sourceHint.toLowerCase().includes(needle)).slice(0, limit);
|
|
47
|
-
}
|
|
48
|
-
export function executeCommand(name, prompt = '') {
|
|
49
|
-
const module = getCommand(name);
|
|
50
|
-
if (!module) {
|
|
51
|
-
return { name, sourceHint: '', prompt, handled: false, message: `Unknown mirrored command: ${name}` };
|
|
52
|
-
}
|
|
53
|
-
return {
|
|
54
|
-
name: module.name,
|
|
55
|
-
sourceHint: module.sourceHint,
|
|
56
|
-
prompt,
|
|
57
|
-
handled: true,
|
|
58
|
-
message: `Mirrored command '${module.name}' from ${module.sourceHint} would handle prompt.`,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { loadArchiveMetadata } from '../_archive_helper.js';
|
|
2
|
-
const SNAPSHOT = loadArchiveMetadata('components');
|
|
3
|
-
export const ARCHIVE_NAME = SNAPSHOT['archive_name'];
|
|
4
|
-
export const MODULE_COUNT = SNAPSHOT['module_count'];
|
|
5
|
-
export const SAMPLE_FILES = SNAPSHOT['sample_files'];
|
|
6
|
-
export const PORTING_NOTE = `Python placeholder package for '${ARCHIVE_NAME}' with ${MODULE_COUNT} archived module references.`;
|
|
7
|
-
export default {
|
|
8
|
-
ARCHIVE_NAME,
|
|
9
|
-
MODULE_COUNT,
|
|
10
|
-
PORTING_NOTE,
|
|
11
|
-
SAMPLE_FILES,
|
|
12
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { loadArchiveMetadata } from '../_archive_helper.js';
|
|
2
|
-
const SNAPSHOT = loadArchiveMetadata('constants');
|
|
3
|
-
export const ARCHIVE_NAME = SNAPSHOT['archive_name'];
|
|
4
|
-
export const MODULE_COUNT = SNAPSHOT['module_count'];
|
|
5
|
-
export const SAMPLE_FILES = SNAPSHOT['sample_files'];
|
|
6
|
-
export const PORTING_NOTE = `Python placeholder package for '${ARCHIVE_NAME}' with ${MODULE_COUNT} archived module references.`;
|
|
7
|
-
export default {
|
|
8
|
-
ARCHIVE_NAME,
|
|
9
|
-
MODULE_COUNT,
|
|
10
|
-
PORTING_NOTE,
|
|
11
|
-
SAMPLE_FILES,
|
|
12
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export class BudgetTracker {
|
|
2
|
-
maxBudgetTokens;
|
|
3
|
-
maxTurns;
|
|
4
|
-
compactAfterTurns;
|
|
5
|
-
constructor(maxBudgetTokens = 2000, maxTurns = 8, compactAfterTurns = 12) {
|
|
6
|
-
this.maxBudgetTokens = maxBudgetTokens;
|
|
7
|
-
this.maxTurns = maxTurns;
|
|
8
|
-
this.compactAfterTurns = compactAfterTurns;
|
|
9
|
-
}
|
|
10
|
-
addTurn(inputTokens, outputTokens) {
|
|
11
|
-
return { inputTokens, outputTokens };
|
|
12
|
-
}
|
|
13
|
-
isBudgetExceeded(usage) {
|
|
14
|
-
return usage.inputTokens + usage.outputTokens > this.maxBudgetTokens;
|
|
15
|
-
}
|
|
16
|
-
isTurnLimitExceeded(currentTurns) {
|
|
17
|
-
return currentTurns >= this.maxTurns;
|
|
18
|
-
}
|
|
19
|
-
shouldCompact(turnCount) {
|
|
20
|
-
return turnCount > this.compactAfterTurns;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export class ToolPermissionContext {
|
|
2
|
-
denyTools;
|
|
3
|
-
denyPrefixes;
|
|
4
|
-
constructor(denyTools, denyPrefixes) {
|
|
5
|
-
this.denyTools = denyTools;
|
|
6
|
-
this.denyPrefixes = denyPrefixes;
|
|
7
|
-
}
|
|
8
|
-
static fromIterables(denyTools = [], denyPrefixes = []) {
|
|
9
|
-
return new ToolPermissionContext(new Set(denyTools.map(t => t.toLowerCase())), denyPrefixes);
|
|
10
|
-
}
|
|
11
|
-
blocks(name) {
|
|
12
|
-
const lower = name.toLowerCase();
|
|
13
|
-
if (this.denyTools.has(lower))
|
|
14
|
-
return true;
|
|
15
|
-
return this.denyPrefixes.some(p => lower.startsWith(p.toLowerCase()));
|
|
16
|
-
}
|
|
17
|
-
createDenial(toolName, reason) {
|
|
18
|
-
return { toolName, reason };
|
|
19
|
-
}
|
|
20
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import * as path from 'path';
|
|
2
|
-
import { fileURLToPath } from 'url';
|
|
3
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
4
|
-
const __dirname = path.dirname(__filename);
|
|
5
|
-
export function buildPortContext(base) {
|
|
6
|
-
const root = base || __dirname;
|
|
7
|
-
const srcRoot = path.join(root, 'src');
|
|
8
|
-
const testsRoot = path.join(root, 'tests');
|
|
9
|
-
const assetsRoot = path.join(root, 'assets');
|
|
10
|
-
const archiveRoot = path.join(root, 'archive');
|
|
11
|
-
return {
|
|
12
|
-
sourceRoot: srcRoot,
|
|
13
|
-
testsRoot: testsRoot,
|
|
14
|
-
assetsRoot: assetsRoot,
|
|
15
|
-
archiveRoot: archiveRoot,
|
|
16
|
-
pythonFileCount: 0,
|
|
17
|
-
testFileCount: 0,
|
|
18
|
-
assetFileCount: 0,
|
|
19
|
-
archiveAvailable: false,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
export function renderContext(context) {
|
|
23
|
-
return [
|
|
24
|
-
`Source root: ${context.sourceRoot}`,
|
|
25
|
-
`Test root: ${context.testsRoot}`,
|
|
26
|
-
`Assets root: ${context.assetsRoot}`,
|
|
27
|
-
`Archive root: ${context.archiveRoot}`,
|
|
28
|
-
`Archive available: ${context.archiveAvailable}`,
|
|
29
|
-
].join('\n');
|
|
30
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { loadArchiveMetadata } from '../_archive_helper.js';
|
|
2
|
-
const SNAPSHOT = loadArchiveMetadata('coordinator');
|
|
3
|
-
export const ARCHIVE_NAME = SNAPSHOT['archive_name'];
|
|
4
|
-
export const MODULE_COUNT = SNAPSHOT['module_count'];
|
|
5
|
-
export const SAMPLE_FILES = SNAPSHOT['sample_files'];
|
|
6
|
-
export const PORTING_NOTE = `Python placeholder package for '${ARCHIVE_NAME}' with ${MODULE_COUNT} archived module references.`;
|
|
7
|
-
export default {
|
|
8
|
-
ARCHIVE_NAME,
|
|
9
|
-
MODULE_COUNT,
|
|
10
|
-
PORTING_NOTE,
|
|
11
|
-
SAMPLE_FILES,
|
|
12
|
-
};
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
-
const __dirname = path.dirname(__filename);
|
|
6
|
-
function resolveToolPath(sourceHint) {
|
|
7
|
-
return path.join(__dirname, sourceHint);
|
|
8
|
-
}
|
|
9
|
-
function inferFunctionName(sourceHint) {
|
|
10
|
-
const basename = path.basename(sourceHint, path.extname(sourceHint));
|
|
11
|
-
const nameMap = {
|
|
12
|
-
listMarkets: 'listMarkets',
|
|
13
|
-
getMarket: 'getMarket',
|
|
14
|
-
createOrder: 'createOrder',
|
|
15
|
-
cancelOrder: 'cancelOrder',
|
|
16
|
-
getOrders: 'getOrders',
|
|
17
|
-
createTransaction: 'createTransaction',
|
|
18
|
-
proposeTransaction: 'proposeTransaction',
|
|
19
|
-
confirmTransaction: 'confirmTransaction',
|
|
20
|
-
executeTransaction: 'executeTransaction',
|
|
21
|
-
getPendingTransactions: 'getPendingTransactions',
|
|
22
|
-
getBalance: 'getBalance',
|
|
23
|
-
deploySafe: 'deploySafe',
|
|
24
|
-
runCommand: 'runCommand',
|
|
25
|
-
listAdapters: 'listAdapters',
|
|
26
|
-
execAdapter: 'execAdapter',
|
|
27
|
-
};
|
|
28
|
-
return nameMap[basename] || basename;
|
|
29
|
-
}
|
|
30
|
-
export async function executeToolFromSnapshot(sourceHint, params) {
|
|
31
|
-
try {
|
|
32
|
-
const fullPath = resolveToolPath(sourceHint);
|
|
33
|
-
if (!fs.existsSync(fullPath)) {
|
|
34
|
-
return {
|
|
35
|
-
success: false,
|
|
36
|
-
error: `Tool file not found: ${fullPath}`,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
const module = await import(`file://${fullPath}?t=${Date.now()}`);
|
|
40
|
-
const functionName = inferFunctionName(sourceHint);
|
|
41
|
-
if (typeof module[functionName] !== 'function') {
|
|
42
|
-
return {
|
|
43
|
-
success: false,
|
|
44
|
-
error: `Function '${functionName}' not found in ${sourceHint}`,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
const result = await module[functionName](params);
|
|
48
|
-
return {
|
|
49
|
-
success: true,
|
|
50
|
-
data: result,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
return {
|
|
55
|
-
success: false,
|
|
56
|
-
error: error instanceof Error ? error.message : String(error),
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
export class DynamicToolExecutor {
|
|
61
|
-
async loadAndExecute(modulePath, functionName, params) {
|
|
62
|
-
try {
|
|
63
|
-
const fullPath = resolveToolPath(modulePath);
|
|
64
|
-
if (!fs.existsSync(fullPath)) {
|
|
65
|
-
return { success: false, error: `Module not found: ${fullPath}` };
|
|
66
|
-
}
|
|
67
|
-
const module = await import(`file://${fullPath}?t=${Date.now()}`);
|
|
68
|
-
if (typeof module[functionName] !== 'function') {
|
|
69
|
-
return {
|
|
70
|
-
success: false,
|
|
71
|
-
error: `Function '${functionName}' not exported from ${modulePath}`,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
const result = await module[functionName](params);
|
|
75
|
-
return { success: true, data: result };
|
|
76
|
-
}
|
|
77
|
-
catch (error) {
|
|
78
|
-
return {
|
|
79
|
-
success: false,
|
|
80
|
-
error: error instanceof Error ? error.message : String(error),
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
export const defaultExecutor = new DynamicToolExecutor();
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { loadArchiveMetadata } from '../_archive_helper.js';
|
|
2
|
-
const SNAPSHOT = loadArchiveMetadata('entrypoints');
|
|
3
|
-
export const ARCHIVE_NAME = SNAPSHOT['archive_name'];
|
|
4
|
-
export const MODULE_COUNT = SNAPSHOT['module_count'];
|
|
5
|
-
export const SAMPLE_FILES = SNAPSHOT['sample_files'];
|
|
6
|
-
export const PORTING_NOTE = `Python placeholder package for '${ARCHIVE_NAME}' with ${MODULE_COUNT} archived module references.`;
|
|
7
|
-
export default {
|
|
8
|
-
ARCHIVE_NAME,
|
|
9
|
-
MODULE_COUNT,
|
|
10
|
-
PORTING_NOTE,
|
|
11
|
-
SAMPLE_FILES,
|
|
12
|
-
};
|