@bolloon/bolloon-agent 0.2.8 → 0.2.10
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 +467 -467
- package/bin/bolloon-cli.cjs +183 -183
- package/bin/bolloon.cjs +0 -0
- package/bin/bolloon.js +157 -0
- package/dist/agents/agent-manifest-protocol.js +0 -52
- package/dist/agents/constraint-layer.js +19 -19
- package/dist/agents/pi-sdk.js +287 -1213
- package/dist/agents/shell-guard.js +2 -2
- package/dist/agents/workflow-pivot-loop.js +2 -81
- 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 +13 -26
- package/dist/bollharness-integration/integration.js +0 -71
- package/dist/bollharness-integration/llm-judgment-engine.js +134 -134
- package/dist/bollharness-integration/skill-adapter.js +127 -52
- package/dist/bootstrap/context-collector.js +3 -6
- package/dist/bootstrap/lifecycle-hooks.js +1 -15
- package/dist/cli-entry.js +35 -39
- package/dist/constraint-runtime/src/_archive_helper.js +9 -0
- package/dist/constraint-runtime/src/agent/coordinator.js +48 -0
- package/dist/constraint-runtime/src/agent/index.js +1 -0
- package/dist/constraint-runtime/src/assistant/index.js +12 -0
- package/dist/constraint-runtime/src/bootstrap/index.js +12 -0
- package/dist/constraint-runtime/src/bootstrap_graph.js +13 -0
- package/dist/constraint-runtime/src/bridge/index.js +12 -0
- package/dist/constraint-runtime/src/buddy/index.js +12 -0
- package/dist/constraint-runtime/src/cli/index.js +12 -0
- package/dist/constraint-runtime/src/command_graph.js +10 -0
- package/dist/constraint-runtime/src/commands.js +60 -0
- package/dist/constraint-runtime/src/components/index.js +12 -0
- package/dist/constraint-runtime/src/constants/index.js +12 -0
- package/dist/constraint-runtime/src/constraint/budget.js +22 -0
- package/dist/constraint-runtime/src/constraint/index.js +2 -0
- package/dist/constraint-runtime/src/constraint/permission.js +20 -0
- package/dist/constraint-runtime/src/context.js +30 -0
- package/dist/constraint-runtime/src/coordinator/index.js +12 -0
- package/dist/constraint-runtime/src/cost_hook.js +4 -0
- package/dist/constraint-runtime/src/cost_tracker.js +8 -0
- package/dist/constraint-runtime/src/deferred_init.js +10 -0
- package/dist/constraint-runtime/src/direct_modes.js +6 -0
- package/dist/constraint-runtime/src/dynamic-tool-loader.js +85 -0
- package/dist/constraint-runtime/src/entrypoints/index.js +12 -0
- package/dist/constraint-runtime/src/execution_registry.js +44 -0
- package/dist/constraint-runtime/src/history.js +9 -0
- package/dist/constraint-runtime/src/hooks/index.js +12 -0
- package/dist/constraint-runtime/src/index.js +26 -0
- package/dist/constraint-runtime/src/ink.js +4 -0
- package/dist/constraint-runtime/src/keybindings/index.js +12 -0
- package/dist/constraint-runtime/src/memdir/index.js +12 -0
- package/dist/constraint-runtime/src/migrations/index.js +12 -0
- package/dist/constraint-runtime/src/models.js +1 -0
- package/dist/constraint-runtime/src/moreright/index.js +12 -0
- package/dist/constraint-runtime/src/native_ts/index.js +12 -0
- package/dist/constraint-runtime/src/output_styles/index.js +12 -0
- package/dist/constraint-runtime/src/parity_audit.js +12 -0
- package/dist/constraint-runtime/src/plugins/index.js +12 -0
- package/dist/constraint-runtime/src/port_manifest.js +11 -0
- package/dist/constraint-runtime/src/prefetch.js +9 -0
- package/dist/constraint-runtime/src/query.js +1 -0
- package/dist/constraint-runtime/src/remote/index.js +12 -0
- package/dist/constraint-runtime/src/remote_runtime.js +9 -0
- package/dist/constraint-runtime/src/runtime/index.js +1 -0
- package/dist/constraint-runtime/src/runtime/session.js +35 -0
- package/dist/constraint-runtime/src/schemas/index.js +12 -0
- package/dist/constraint-runtime/src/screens/index.js +12 -0
- package/dist/constraint-runtime/src/server/index.js +12 -0
- package/dist/constraint-runtime/src/services/index.js +12 -0
- package/dist/constraint-runtime/src/session_store.js +22 -0
- package/dist/constraint-runtime/src/setup.js +30 -0
- package/dist/constraint-runtime/src/skills/index.js +1 -0
- package/dist/constraint-runtime/src/skills/skill-registry.js +28 -0
- package/dist/constraint-runtime/src/state/index.js +12 -0
- package/dist/constraint-runtime/src/system_init.js +20 -0
- package/dist/constraint-runtime/src/thinking/engine.js +42 -0
- package/dist/constraint-runtime/src/thinking/index.js +1 -0
- package/dist/constraint-runtime/src/tool_pool.js +8 -0
- package/dist/constraint-runtime/src/tools/OpenCLI/execAdapter.js +7 -0
- package/dist/constraint-runtime/src/tools/OpenCLI/listAdapters.js +7 -0
- package/dist/constraint-runtime/src/tools/OpenCLI/runCommand.js +7 -0
- package/dist/constraint-runtime/src/tools/SafeSDK/confirmTransaction.js +6 -0
- package/dist/constraint-runtime/src/tools/SafeSDK/createTransaction.js +8 -0
- package/dist/constraint-runtime/src/tools/SafeSDK/executeTransaction.js +6 -0
- package/dist/constraint-runtime/src/tools/SafeSDK/getBalance.js +6 -0
- package/dist/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.js +6 -0
- package/dist/constraint-runtime/src/tools/SafeSDK/proposeTransaction.js +6 -0
- package/dist/constraint-runtime/src/tools.js +80 -0
- package/dist/constraint-runtime/src/transcript.js +19 -0
- package/dist/constraint-runtime/src/types/index.js +12 -0
- package/dist/constraint-runtime/src/upstream_proxy/index.js +12 -0
- package/dist/constraint-runtime/src/utils/index.js +12 -0
- package/dist/constraint-runtime/src/vim/index.js +12 -0
- package/dist/constraint-runtime/src/voice/index.js +12 -0
- package/dist/constraint-runtime/tests/agent.test.js +16 -0
- package/dist/constraint-runtime/tests/constraint.test.js +41 -0
- package/dist/constraint-runtime/tests/skill.test.js +19 -0
- package/dist/constraint-runtime/tests/thinking.test.js +22 -0
- package/dist/context-compaction/auto-compact.js +7 -7
- package/dist/electron-preload.js +1 -18
- package/dist/electron-preload.js.map +1 -1
- package/dist/electron.js +168 -3
- package/dist/electron.js.map +1 -1
- package/dist/index.js +116 -136
- package/dist/llm/config-store.js +8 -24
- package/dist/llm/llm-judgment-client.js +102 -102
- package/dist/llm/pi-ai.js +85 -126
- 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/pi-ecosystem-colony/index.js +365 -0
- package/dist/pi-ecosystem-judgment/causal-judge.js +51 -51
- package/dist/pi-ecosystem-judgment/distill-prompt.js +42 -42
- package/dist/pi-ecosystem-judgment/distillation.js +14 -14
- 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 +0 -11
- package/dist/social/ant-colony/AdaptiveHeartbeat.js +101 -0
- package/dist/social/ant-colony/PheromoneEngine.js +227 -0
- package/dist/social/ant-colony/index.js +6 -0
- package/dist/social/ant-colony/types.js +24 -0
- package/dist/test/ai-judgment-test.js +80 -0
- package/dist/test/bollharness-integration.test.js +318 -0
- package/dist/test/channel-agent-multi-dialogue.js +205 -0
- package/dist/test/channel-heartbeat-agent-test.js +201 -0
- package/dist/test/constraint-layer.test.js +164 -0
- package/dist/test/diap-identity-test.js +172 -0
- package/dist/test/diap-quick-test.js +62 -0
- package/dist/test/global-shared-context.test.js +315 -0
- package/dist/test/harness-judgment-injection.test.js +246 -0
- package/dist/test/harness-workflow-integrator-test.js +228 -0
- package/dist/test/human-value-store.test.js +243 -0
- package/dist/test/hybrid-integration-test.js +118 -0
- package/dist/test/hybrid-messenger-verify.js +55 -0
- package/dist/test/iroh-bistream-debug.js +38 -0
- package/dist/test/iroh-communication.test.js +66 -0
- package/dist/test/iroh-debug-test.js +57 -0
- package/dist/test/iroh-diap-test.js +71 -0
- package/dist/test/iroh-direct-connect.js +55 -0
- package/dist/test/iroh-e2e-fixed.js +89 -0
- package/dist/test/iroh-e2e-same-process.js +63 -0
- package/dist/test/iroh-e2e.js +66 -0
- package/dist/test/iroh-final-e2e.js +72 -0
- package/dist/test/iroh-relay-test.js +37 -0
- package/dist/test/iroh-simple-test.js +41 -0
- package/dist/test/iroh-transport-verify.js +54 -0
- package/dist/test/iroh-transport.test.js +37 -0
- package/dist/test/iroh-two-nodes.js +70 -0
- package/dist/test/iroh-verify.js +44 -0
- package/dist/test/judgment-decision.test.js +219 -0
- package/dist/test/llm-judgment-integration.test.js +220 -0
- package/dist/test/p2p-agent-complex-dialogue.js +385 -0
- package/dist/test/p2p-agent-dialogue.js +341 -0
- package/dist/test/p2p-agent-full-bidirectional.js +510 -0
- package/dist/test/p2p-agent-harness-flow.js +437 -0
- package/dist/test/p2p-agent-harness-single.js +143 -0
- package/dist/test/p2p-ai-dialogue-test.js +318 -0
- package/dist/test/p2p-cid-connect-test.js +195 -0
- package/dist/test/p2p-connect-receiver.js +69 -0
- package/dist/test/p2p-doc-transfer.js +110 -0
- package/dist/test/p2p-identity-page-test.js +77 -0
- package/dist/test/p2p-iroh-test.js +171 -0
- package/dist/test/p2p-minimal-test.js +241 -0
- package/dist/test/p2p-node-1.js +148 -0
- package/dist/test/p2p-node-2.js +148 -0
- package/dist/test/p2p-server.js +281 -0
- package/dist/test/p2p-two-nodes-test.js +438 -0
- package/dist/test/pi-sdk.test.js +44 -0
- package/dist/test/set-persona.js +40 -0
- package/dist/test/simple.test.js +9 -0
- package/dist/test/storage-integration.test.js +150 -0
- package/dist/test/subagent-manager.test.js +276 -0
- package/dist/test/test-gate-flow.test.js +81 -0
- package/dist/test/workflow-engine.test.js +87 -0
- package/dist/test/workflow-pivot-loop.test.js +246 -0
- package/dist/web/api-config.html +520 -520
- package/dist/web/client.js +2917 -3791
- package/dist/web/components/p2p/index.js +234 -276
- package/dist/web/components/wallet-viem.mjs +118 -118
- package/dist/web/index.html +374 -373
- package/dist/web/manifest.json +20 -20
- package/dist/web/server.js +23 -775
- package/dist/web/style.css +4737 -4737
- package/dist/web/ui/message-renderer.js +373 -451
- package/dist/web/ui/step-timeline.js +255 -351
- package/package.json +160 -157
- package/scripts/build-cli.js +216 -0
- package/scripts/build-web.ts +125 -0
- package/scripts/postinstall.js +153 -0
- package/bin/bolloon-daemon.sh +0 -207
- package/bin/ipfs +0 -0
- package/dist/agents/chat-segmenter.js +0 -298
- package/dist/agents/judgment-protocol.js +0 -479
- package/dist/agents/parse-tool-call.js +0 -304
- package/dist/agents/peer-manifest-loader.js +0 -210
- package/dist/agents/react-loop.js +0 -120
- package/dist/agents/session-store.js +0 -171
- package/dist/agents/tool-registry.js +0 -136
- package/dist/bootstrap/chat-archiver.js +0 -276
- package/dist/bootstrap/memory-compressor.js +0 -170
- package/dist/bootstrap/persona-loader.js +0 -94
- package/dist/electron/config.js +0 -16
- package/dist/electron/config.js.map +0 -1
- package/dist/electron/dialogs.js +0 -71
- package/dist/electron/dialogs.js.map +0 -1
- package/dist/electron/first-run.js +0 -129
- package/dist/electron/first-run.js.map +0 -1
- package/dist/electron/ipc.js +0 -16
- package/dist/electron/ipc.js.map +0 -1
- package/dist/electron/logger.js +0 -77
- package/dist/electron/logger.js.map +0 -1
- package/dist/electron/main.js +0 -60
- package/dist/electron/main.js.map +0 -1
- package/dist/electron/menu.js +0 -140
- package/dist/electron/menu.js.map +0 -1
- package/dist/electron/paths.js +0 -33
- package/dist/electron/paths.js.map +0 -1
- package/dist/electron/server.js +0 -74
- package/dist/electron/server.js.map +0 -1
- package/dist/electron/tray.js +0 -73
- package/dist/electron/tray.js.map +0 -1
- package/dist/electron/window.js +0 -69
- package/dist/electron/window.js.map +0 -1
- package/dist/network/local-inbox-bus.js +0 -73
- package/dist/network/p2p-outbox.js +0 -161
- package/dist/network/peer-fs.js +0 -420
- package/dist/network/peer-resource-bridge.js +0 -216
- package/dist/web/components/p2p/P2PModal.js +0 -188
- package/dist/web/components/p2p/p2p-modal.js +0 -664
- package/dist/web/components/p2p/p2p-tools.js +0 -248
- package/dist/web/input-validator.js +0 -103
- package/dist/web/util/safe-name.js +0 -32
|
@@ -9,7 +9,6 @@ import * as os from 'os';
|
|
|
9
9
|
import * as path from 'path';
|
|
10
10
|
import { getCachedBolloonContext, clearBolloonContextCache } from './context-collector.js';
|
|
11
11
|
import { formatContextForSystemPrompt } from './project-context.js';
|
|
12
|
-
import { loadPersonaDocs, formatPersonaForSystemPrompt } from './persona-loader.js';
|
|
13
12
|
let lastSessionStartAt = 0;
|
|
14
13
|
const MIN_INTERVAL_MS = 5000; // 同一进程 5s 内最多触发一次, 防止循环
|
|
15
14
|
export async function onSessionStart(opts = {}) {
|
|
@@ -26,23 +25,10 @@ export async function onSessionStart(opts = {}) {
|
|
|
26
25
|
if (opts.channelId) {
|
|
27
26
|
systemAddition = `# 当前 channel: ${opts.channelId}\n\n` + systemAddition;
|
|
28
27
|
}
|
|
29
|
-
// 在头部最前拼 persona 文档 (如果 agentId 存在)
|
|
30
|
-
if (opts.agentId) {
|
|
31
|
-
try {
|
|
32
|
-
const docs = await loadPersonaDocs(opts.agentId);
|
|
33
|
-
const personaText = formatPersonaForSystemPrompt(docs);
|
|
34
|
-
if (personaText) {
|
|
35
|
-
systemAddition = personaText + '\n\n' + systemAddition;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
console.warn('[lifecycle-hooks] loadPersonaDocs failed (silent):', err);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
28
|
return {
|
|
43
29
|
systemAddition,
|
|
44
30
|
collectMs: Date.now() - start,
|
|
45
|
-
truncated: systemAddition.length > 0 && systemAddition.includes('
|
|
31
|
+
truncated: systemAddition.length > 0 && systemAddition.includes('截断模式'),
|
|
46
32
|
};
|
|
47
33
|
}
|
|
48
34
|
catch (err) {
|
package/dist/cli-entry.js
CHANGED
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
import { spawn } from 'child_process';
|
|
14
14
|
import * as path from 'path';
|
|
15
15
|
import * as fs from 'fs';
|
|
16
|
-
import { fileURLToPath } from 'url';
|
|
17
16
|
const isWindows = process.platform === 'win32';
|
|
18
17
|
// ANSI 颜色
|
|
19
18
|
const RESET = '\x1b[0m';
|
|
@@ -28,50 +27,47 @@ function log(msg, color = RESET) {
|
|
|
28
27
|
console.log(`${color}${msg}${RESET}`);
|
|
29
28
|
}
|
|
30
29
|
function printBanner() {
|
|
31
|
-
console.log(`
|
|
32
|
-
${CYAN}${BOLD}
|
|
33
|
-
╔═══════════════════════════════════════════╗
|
|
34
|
-
║ 🤖 Bolloon Agent ${VERSION} ║
|
|
35
|
-
║ P2P AI Document Processor ║
|
|
36
|
-
╚═══════════════════════════════════════════╝${RESET}
|
|
30
|
+
console.log(`
|
|
31
|
+
${CYAN}${BOLD}
|
|
32
|
+
╔═══════════════════════════════════════════╗
|
|
33
|
+
║ 🤖 Bolloon Agent ${VERSION} ║
|
|
34
|
+
║ P2P AI Document Processor ║
|
|
35
|
+
╚═══════════════════════════════════════════╝${RESET}
|
|
37
36
|
`);
|
|
38
37
|
}
|
|
39
38
|
function printHelp() {
|
|
40
|
-
console.log(`
|
|
41
|
-
${BOLD}用法:${RESET}
|
|
42
|
-
bolloon [选项] [命令] [参数]
|
|
43
|
-
|
|
44
|
-
${BOLD}选项:${RESET}
|
|
45
|
-
--gui, -g 启动图形界面 (Electron)
|
|
46
|
-
--web, -w 启动 Web UI (浏览器)
|
|
47
|
-
--cli, -c 启动命令行界面
|
|
48
|
-
--version, -v 显示版本信息
|
|
49
|
-
--help, -h 显示帮助信息
|
|
50
|
-
|
|
51
|
-
${BOLD}命令:${RESET}
|
|
52
|
-
bolloon --read <file> 读取文档
|
|
53
|
-
bolloon --summarize <file> 总结文档
|
|
54
|
-
bolloon --improve <file> <req> 改进文档
|
|
55
|
-
|
|
56
|
-
${BOLD}示例:${RESET}
|
|
57
|
-
bolloon # 启动图形界面
|
|
58
|
-
bolloon --web # 启动 Web UI
|
|
59
|
-
bolloon --read 想法.md # 读取文档
|
|
60
|
-
bolloon --cli # 命令行模式
|
|
61
|
-
|
|
62
|
-
${BOLD}环境变量:${RESET}
|
|
63
|
-
MINIMAX_API_KEY MiniMax API 密钥
|
|
64
|
-
OPENAI_API_KEY OpenAI API 密钥
|
|
65
|
-
ANTHROPIC_API_KEY Anthropic API 密钥
|
|
66
|
-
PORT Web 服务端口 (默认 54188)
|
|
39
|
+
console.log(`
|
|
40
|
+
${BOLD}用法:${RESET}
|
|
41
|
+
bolloon [选项] [命令] [参数]
|
|
42
|
+
|
|
43
|
+
${BOLD}选项:${RESET}
|
|
44
|
+
--gui, -g 启动图形界面 (Electron)
|
|
45
|
+
--web, -w 启动 Web UI (浏览器)
|
|
46
|
+
--cli, -c 启动命令行界面
|
|
47
|
+
--version, -v 显示版本信息
|
|
48
|
+
--help, -h 显示帮助信息
|
|
49
|
+
|
|
50
|
+
${BOLD}命令:${RESET}
|
|
51
|
+
bolloon --read <file> 读取文档
|
|
52
|
+
bolloon --summarize <file> 总结文档
|
|
53
|
+
bolloon --improve <file> <req> 改进文档
|
|
54
|
+
|
|
55
|
+
${BOLD}示例:${RESET}
|
|
56
|
+
bolloon # 启动图形界面
|
|
57
|
+
bolloon --web # 启动 Web UI
|
|
58
|
+
bolloon --read 想法.md # 读取文档
|
|
59
|
+
bolloon --cli # 命令行模式
|
|
60
|
+
|
|
61
|
+
${BOLD}环境变量:${RESET}
|
|
62
|
+
MINIMAX_API_KEY MiniMax API 密钥
|
|
63
|
+
OPENAI_API_KEY OpenAI API 密钥
|
|
64
|
+
ANTHROPIC_API_KEY Anthropic API 密钥
|
|
65
|
+
PORT Web 服务端口 (默认 54188)
|
|
67
66
|
`);
|
|
68
67
|
}
|
|
69
68
|
function getDistDir() {
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
// (后续 getMainScript 会优先用 dist/cli-entry.js, 不依赖这里的返回值)
|
|
73
|
-
const __filename_esm = fileURLToPath(import.meta.url);
|
|
74
|
-
return path.dirname(__filename_esm);
|
|
69
|
+
// 对于打包后的应用,__dirname 是 dist 目录
|
|
70
|
+
return __dirname;
|
|
75
71
|
}
|
|
76
72
|
function getMainScript() {
|
|
77
73
|
const distDir = getDistDir();
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { AgentCoordinator } from './coordinator.js';
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
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();
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { PORTED_COMMANDS, executeCommand } from './commands.js';
|
|
2
|
+
import { PORTED_TOOLS, executeTool } from './tools.js';
|
|
3
|
+
export class MirroredCommand {
|
|
4
|
+
name;
|
|
5
|
+
sourceHint;
|
|
6
|
+
constructor(name, sourceHint) {
|
|
7
|
+
this.name = name;
|
|
8
|
+
this.sourceHint = sourceHint;
|
|
9
|
+
}
|
|
10
|
+
execute(prompt) {
|
|
11
|
+
return executeCommand(this.name, prompt).message;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class MirroredTool {
|
|
15
|
+
name;
|
|
16
|
+
sourceHint;
|
|
17
|
+
constructor(name, sourceHint) {
|
|
18
|
+
this.name = name;
|
|
19
|
+
this.sourceHint = sourceHint;
|
|
20
|
+
}
|
|
21
|
+
async execute(payload) {
|
|
22
|
+
const result = await executeTool(this.name, payload);
|
|
23
|
+
return result.message;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class ExecutionRegistry {
|
|
27
|
+
commands;
|
|
28
|
+
tools;
|
|
29
|
+
constructor(commands, tools) {
|
|
30
|
+
this.commands = commands;
|
|
31
|
+
this.tools = tools;
|
|
32
|
+
}
|
|
33
|
+
command(name) {
|
|
34
|
+
const lowered = name.toLowerCase();
|
|
35
|
+
return this.commands.find(c => c.name.toLowerCase() === lowered);
|
|
36
|
+
}
|
|
37
|
+
tool(name) {
|
|
38
|
+
const lowered = name.toLowerCase();
|
|
39
|
+
return this.tools.find(t => t.name.toLowerCase() === lowered);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function buildExecutionRegistry() {
|
|
43
|
+
return new ExecutionRegistry(PORTED_COMMANDS.map(m => new MirroredCommand(m.name, m.sourceHint)), PORTED_TOOLS.map(m => new MirroredTool(m.name, m.sourceHint)));
|
|
44
|
+
}
|