hyperclaw 4.0.0 → 4.0.2

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 (156) hide show
  1. package/README.md +53 -18
  2. package/dist/a2ui-protocol-CT_jDEU9.js +75 -0
  3. package/dist/agents-routing-683Q2JGp.js +129 -0
  4. package/dist/agents-routing-BpZBswBH.js +4 -0
  5. package/dist/api-keys-guide-Bzig1R5W.js +149 -0
  6. package/dist/api-keys-guide-Dq5Obbp4.js +149 -0
  7. package/dist/audit-BYxPlnTQ.js +248 -0
  8. package/dist/bounty-tools-C6LyzxM-.js +211 -0
  9. package/dist/browser-tools-CQBSbIuO.js +5 -0
  10. package/dist/browser-tools-YQmwRLLM.js +179 -0
  11. package/dist/claw-tasks-BRLUvFRD.js +80 -0
  12. package/dist/connector-3HnyH8fn.js +167 -0
  13. package/dist/connector-6PMZo5Ky.js +189 -0
  14. package/dist/connector-B6eoF3DD.js +181 -0
  15. package/dist/connector-B9tLG8UZ.js +196 -0
  16. package/dist/connector-BOlqjXWP.js +182 -0
  17. package/dist/connector-BP8zsbP8.js +189 -0
  18. package/dist/connector-BPoSevxp.js +286 -0
  19. package/dist/connector-BRHj773i.js +163 -0
  20. package/dist/connector-BToxU-jV.js +267 -0
  21. package/dist/connector-BliDVsJQ.js +239 -0
  22. package/dist/connector-Bv6s9oP7.js +88 -0
  23. package/dist/connector-By5wWGTR.js +343 -0
  24. package/dist/connector-C1BaFFgN.js +213 -0
  25. package/dist/connector-CRRWY5Wv.js +167 -0
  26. package/dist/connector-CXPQVGyI.js +85 -0
  27. package/dist/connector-Cdk1CXKi.js +194 -0
  28. package/dist/connector-CwlgFgjx.js +181 -0
  29. package/dist/connector-DFchk6l7.js +178 -0
  30. package/dist/connector-DKw7tRAy.js +192 -0
  31. package/dist/connector-DRv1ahC_.js +343 -0
  32. package/dist/connector-DU63KW94.js +165 -0
  33. package/dist/connector-Dbvb1Cj9.js +280 -0
  34. package/dist/connector-DcZdQcgR.js +173 -0
  35. package/dist/connector-DxKL8VvZ.js +182 -0
  36. package/dist/connector-T_YdZtzv.js +162 -0
  37. package/dist/connector-i4gOS9xL.js +154 -0
  38. package/dist/connector-rHXE1ZD2.js +167 -0
  39. package/dist/connector-wdUXChwa.js +172 -0
  40. package/dist/cost-tracker-pVE15Yq4.js +103 -0
  41. package/dist/credentials-store-BvnMPJwi.js +4 -0
  42. package/dist/credentials-store-sb-TRLwR.js +77 -0
  43. package/dist/cron-tasks-BvDFNyiE.js +82 -0
  44. package/dist/delivery-B-SJqXLn.js +95 -0
  45. package/dist/delivery-D5Z98EVq.js +95 -0
  46. package/dist/delivery-DCOXhXEO.js +5 -0
  47. package/dist/delivery-VgFeuu2J.js +5 -0
  48. package/dist/destructive-gate-m-dWqUFg.js +101 -0
  49. package/dist/developer-keys-JaJK3T27.js +127 -0
  50. package/dist/developer-keys-kyqmtWK3.js +8 -0
  51. package/dist/doctor-3oi89QIc.js +175 -0
  52. package/dist/doctor-Cf1XSfp9.js +4 -0
  53. package/dist/engine-B4eMiTgl.js +7 -0
  54. package/dist/engine-B8M7dYul.js +7 -0
  55. package/dist/engine-BhT-1M9W.js +256 -0
  56. package/dist/engine-D49jnSd_.js +256 -0
  57. package/dist/env-resolve-DWOQ45jG.js +9 -0
  58. package/dist/env-resolve-szSWl0UF.js +94 -0
  59. package/dist/extraction-tools-D3qDFBJ1.js +91 -0
  60. package/dist/extraction-tools-DLr_AEwq.js +5 -0
  61. package/dist/form_data-B_hIUrxU.js +8657 -0
  62. package/dist/gmail-watch-setup-Czt8rXaX.js +40 -0
  63. package/dist/heartbeat-engine-CRqfPcFM.js +83 -0
  64. package/dist/hub-DTsqe5Bt.js +6 -0
  65. package/dist/hub-FrPTA33j.js +515 -0
  66. package/dist/hyperclawbot-D9KCtc4P.js +480 -0
  67. package/dist/hyperclawbot-DfMGowZC.js +480 -0
  68. package/dist/hyperclawbot-Dw27pJo4.js +480 -0
  69. package/dist/inference-CTWJeX9Q.js +922 -0
  70. package/dist/inference-ix607p7k.js +6 -0
  71. package/dist/knowledge-graph-DqA-Fztl.js +131 -0
  72. package/dist/loader-CISCqBto.js +400 -0
  73. package/dist/loader-CYMQ8VOS.js +4 -0
  74. package/dist/logger-8tEtAd3y.js +83 -0
  75. package/dist/manager-CPjeRe-6.js +4 -0
  76. package/dist/manager-Cwzj7w5R.js +105 -0
  77. package/dist/manager-DLmZI-9R.js +6 -0
  78. package/dist/manager-DSGhn5i3.js +117 -0
  79. package/dist/manager-DgyF52mg.js +218 -0
  80. package/dist/manager-Dm8nrMFx.js +40 -0
  81. package/dist/mcp-B_9Ber63.js +139 -0
  82. package/dist/mcp-loader-DSM5UiFG.js +94 -0
  83. package/dist/mcp-loader-j5ZLLw5O.js +94 -0
  84. package/dist/memory-BI1kPkAN.js +4 -0
  85. package/dist/memory-BVFGkxxK.js +270 -0
  86. package/dist/memory-auto-Bc7euou4.js +306 -0
  87. package/dist/memory-auto-DPfbkMVt.js +5 -0
  88. package/dist/memory-integration-DZExqWr4.js +91 -0
  89. package/dist/moltbook-B6ZeGN5_.js +81 -0
  90. package/dist/node-pwL6O_KX.js +222 -0
  91. package/dist/nodes-registry-CsPm_-CJ.js +52 -0
  92. package/dist/oauth-flow-CpWlgvNB.js +150 -0
  93. package/dist/oauth-provider-BZb6qOw5.js +110 -0
  94. package/dist/observability-B43YvNQV.js +89 -0
  95. package/dist/onboard-3q20ZyHj.js +9 -0
  96. package/dist/onboard-Bd_wsYdi.js +4086 -0
  97. package/dist/onboard-CAN7x3me.js +3026 -0
  98. package/dist/onboard-DnegOHMh.js +3026 -0
  99. package/dist/onboard-RYtDlYBw.js +9 -0
  100. package/dist/onboard-aTwlQs-4.js +9 -0
  101. package/dist/orchestrator-BSp2M5EU.js +189 -0
  102. package/dist/orchestrator-C7ko5tWa.js +6 -0
  103. package/dist/orchestrator-DfPkIx2Z.js +6 -0
  104. package/dist/orchestrator-NJQsmiBE.js +189 -0
  105. package/dist/pairing-DU0_J28n.js +87 -0
  106. package/dist/pairing-DWllbSbO.js +4 -0
  107. package/dist/pc-access-Ly-uA8mn.js +8 -0
  108. package/dist/pc-access-NxBvTrRj.js +819 -0
  109. package/dist/pending-approval-DIHvwwWS.js +22 -0
  110. package/dist/puppeteer-2o3QOwAy.js +2 -2
  111. package/dist/puppeteer-BYTMp3BI.js +2 -2
  112. package/dist/puppeteer-DQ45qwWk.js +2 -2
  113. package/dist/reminders-store-D79qdfN0.js +58 -0
  114. package/dist/renderer-pqlDRKbH.js +225 -0
  115. package/dist/rules-BooT_qFP.js +103 -0
  116. package/dist/run-main.js +366 -1109
  117. package/dist/runner-Bu--_RXw.js +810 -0
  118. package/dist/runner-D1rjuMTJ.js +810 -0
  119. package/dist/sdk/index.js +2 -2
  120. package/dist/sdk/index.mjs +2 -2
  121. package/dist/security-C-5URby1.js +73 -0
  122. package/dist/security-_xve79aq.js +4 -0
  123. package/dist/server-0kgyELx4.js +1047 -0
  124. package/dist/server-BIuTobTC.js +4 -0
  125. package/dist/server-BRlCEjyT.js +1047 -0
  126. package/dist/server-CCI1hv45.js +1047 -0
  127. package/dist/server-DU9POoWc.js +4 -0
  128. package/dist/server-RBqwE_GN.js +4 -0
  129. package/dist/session-store-CujxByI6.js +113 -0
  130. package/dist/session-store-qpJUg2M1.js +5 -0
  131. package/dist/sessions-tools-CB2qbwIk.js +5 -0
  132. package/dist/sessions-tools-DHMaTZIs.js +95 -0
  133. package/dist/skill-loader-BkceKkIg.js +7 -0
  134. package/dist/skill-loader-DhgIwK4J.js +159 -0
  135. package/dist/skill-runtime--LqxWrp5.js +102 -0
  136. package/dist/skill-runtime-C5l0Tgt-.js +5 -0
  137. package/dist/skill-runtime-DsXK_HYG.js +102 -0
  138. package/dist/skill-runtime-IVTiqrMR.js +5 -0
  139. package/dist/src-BEVLgaF1.js +63 -0
  140. package/dist/src-Bgu_OxTQ.js +458 -0
  141. package/dist/src-Bq-oKt7Z.js +458 -0
  142. package/dist/src-DWCUhnD4.js +20 -0
  143. package/dist/src-cfRTjFef.js +63 -0
  144. package/dist/sub-agent-tools-BD9DF8_g.js +39 -0
  145. package/dist/sub-agent-tools-V7b3T9_s.js +39 -0
  146. package/dist/tool-policy-DNvNRnve.js +189 -0
  147. package/dist/tts-elevenlabs-BUOGKL-k.js +61 -0
  148. package/dist/update-check-BD4qH7Am.js +81 -0
  149. package/dist/vision-DRq-f-Dj.js +121 -0
  150. package/dist/vision-tools-CFZEpQKm.js +5 -0
  151. package/dist/vision-tools-CQnBI9aa.js +51 -0
  152. package/dist/voice-transcription-CbQBToY0.js +138 -0
  153. package/dist/voice-transcription-CgWq54hn.js +138 -0
  154. package/dist/website-watch-tools-Bk_TnwuE.js +5 -0
  155. package/dist/website-watch-tools-DraMPxdl.js +139 -0
  156. package/package.json +1 -1
@@ -0,0 +1,256 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+ const require_paths = require('./paths-AIyBxIzm.js');
3
+ const require_src = require('./src-BeacbqsZ.js');
4
+ const fs_extra = require_chunk.__toESM(require("fs-extra"));
5
+ const path = require_chunk.__toESM(require("path"));
6
+
7
+ //#region packages/core/src/agent/engine.ts
8
+ /**
9
+
10
+ * Load workspace context: SOUL, AGENTS, MEMORY + custom .md
11
+
12
+ */
13
+ async function loadWorkspaceContext(hcDir) {
14
+ const dir = hcDir || require_paths.getHyperClawDir();
15
+ let context = "";
16
+ const core = [
17
+ "SOUL.md",
18
+ "AGENTS.md",
19
+ "MEMORY.md"
20
+ ];
21
+ for (const f of core) {
22
+ const fp = path.default.join(dir, f);
23
+ if (fs_extra.default.pathExistsSync(fp)) context += `## ${f}\n${fs_extra.default.readFileSync(fp, "utf8")}\n\n`;
24
+ }
25
+ try {
26
+ const entries = fs_extra.default.readdirSync(dir);
27
+ for (const f of entries) if (f.endsWith(".md") && !core.includes(f)) {
28
+ const fp = path.default.join(dir, f);
29
+ if (fs_extra.default.statSync(fp).isFile()) context += `## ${f}\n${fs_extra.default.readFileSync(fp, "utf8")}\n\n`;
30
+ }
31
+ } catch {}
32
+ return context;
33
+ }
34
+ /**
35
+
36
+ * Load skills context (bundled + workspace)
37
+
38
+ */
39
+ async function loadSkillsContext() {
40
+ const { loadSkills, buildSkillsContext } = await Promise.resolve().then(() => require("./skill-loader-CSxIAcTC.js"));
41
+ const skills = await loadSkills();
42
+ return skills.length > 0 ? buildSkillsContext(skills) : "";
43
+ }
44
+ /**
45
+
46
+ * Resolve tools with policy, PC access, elevation.
47
+
48
+ */
49
+ async function resolveTools(opts) {
50
+ const { config, source, elevated, sessionId, daemonMode, activeServer } = opts;
51
+ const cfg = config;
52
+ const sandboxNonMain = cfg?.agents?.defaults?.sandbox?.mode === "non-main" && source && CHANNEL_SOURCES.includes(source);
53
+ const { loadPCAccessConfig, getPCAccessTools } = await Promise.resolve().then(() => require("./pc-access-CWMHxZBx.js"));
54
+ const pcCfg = await loadPCAccessConfig({ daemonMode });
55
+ const dockerSandbox = cfg?.tools?.dockerSandbox?.enabled === true;
56
+ const pcTools = pcCfg.enabled && (!sandboxNonMain || elevated) ? getPCAccessTools({ dockerSandbox }) : [];
57
+ const { getSessionsTools } = await Promise.resolve().then(() => require("./sessions-tools-B13hjhhG.js"));
58
+ const sessionsTools = getSessionsTools(() => activeServer ?? null, sessionId);
59
+ const { InferenceEngine, getBuiltinTools } = await Promise.resolve().then(() => require("./inference-CDtB9dNd.js"));
60
+ const { getSubAgentTools } = await Promise.resolve().then(() => require("./sub-agent-tools-V7b3T9_s.js"));
61
+ const { getBrowserTools } = await Promise.resolve().then(() => require("./browser-tools-DOFkCYnC.js"));
62
+ const { getExtractionTools } = await Promise.resolve().then(() => require("./extraction-tools-DWfufFcw.js"));
63
+ const { getWebsiteWatchTools } = await Promise.resolve().then(() => require("./website-watch-tools-CVok-ly5.js"));
64
+ const { getVisionTools } = await Promise.resolve().then(() => require("./vision-tools-6pIIoflu.js"));
65
+ const { getBountyTools } = await Promise.resolve().then(() => require("./bounty-tools-DzvwDJ7r.js"));
66
+ const { loadMCPTools } = await Promise.resolve().then(() => require("./mcp-loader-j5ZLLw5O.js"));
67
+ const { applyToolPolicy } = await Promise.resolve().then(() => require("./tool-policy-CFF-d5fs.js"));
68
+ const isLocal = cfg?.provider?.providerId === "local" || cfg?.provider?.providerId === "ollama";
69
+ const provider = cfg?.provider?.providerId === "anthropic" ? "anthropic" : cfg?.provider?.providerId === "custom" || isLocal ? "custom" : "openrouter";
70
+ const visionProvider = cfg?.provider?.providerId === "custom" || isLocal ? "openrouter" : provider === "anthropic" ? "anthropic" : "openrouter";
71
+ const apiKey = await (await Promise.resolve().then(() => require("./env-resolve-BazAsaKp.js"))).getProviderCredentialAsync(cfg);
72
+ const visionTools = getVisionTools({
73
+ apiKey: apiKey || "",
74
+ provider: visionProvider
75
+ });
76
+ const bountyTools = getBountyTools(cfg);
77
+ let skillInvokeTools = [];
78
+ try {
79
+ const { loadSkills } = await Promise.resolve().then(() => require("./skill-loader-CSxIAcTC.js"));
80
+ const { getSkillInvokeTools } = await Promise.resolve().then(() => require("./skill-runtime-IVTiqrMR.js"));
81
+ const loaded = await loadSkills();
82
+ skillInvokeTools = getSkillInvokeTools(loaded);
83
+ } catch {}
84
+ let allTools = [
85
+ ...getBuiltinTools(),
86
+ ...getSubAgentTools(),
87
+ ...sessionsTools,
88
+ ...pcTools,
89
+ ...getBrowserTools(),
90
+ ...getExtractionTools(),
91
+ ...getWebsiteWatchTools(),
92
+ ...visionTools,
93
+ ...bountyTools,
94
+ ...skillInvokeTools
95
+ ];
96
+ try {
97
+ const mcpTools = await loadMCPTools();
98
+ if (mcpTools.length > 0) allTools = [...allTools, ...mcpTools];
99
+ } catch {}
100
+ const policyConfig = cfg?.tools ? {
101
+ profile: cfg.tools.profile,
102
+ allow: cfg.tools.allow ?? cfg.tools.allowlist,
103
+ deny: cfg.tools.deny ?? cfg.tools.blocklist,
104
+ byProvider: cfg.tools.byProvider
105
+ } : void 0;
106
+ let tools = applyToolPolicy(allTools, policyConfig, {
107
+ provider: cfg?.provider?.providerId === "anthropic" ? "anthropic" : "openrouter",
108
+ model: cfg?.provider?.modelId
109
+ });
110
+ const { applyDestructiveGate } = await Promise.resolve().then(() => require("./destructive-gate-Z9gt4KmW.js"));
111
+ tools = applyDestructiveGate(tools, {
112
+ elevated: elevated ?? false,
113
+ source,
114
+ sessionId
115
+ });
116
+ return tools;
117
+ }
118
+ /**
119
+
120
+ * Run agent: context + tools + inference.
121
+
122
+ */
123
+ async function runAgentEngine(message, opts) {
124
+ const cfg = await fs_extra.default.readJson(require_paths.getConfigPath()).catch(() => ({}));
125
+ const isLocalProvider = cfg?.provider?.providerId === "local" || cfg?.provider?.providerId === "ollama";
126
+ const apiKey = await (await Promise.resolve().then(() => require("./env-resolve-BazAsaKp.js"))).getProviderCredentialAsync(cfg);
127
+ if (!apiKey && !isLocalProvider) return {
128
+ text: "No API key configured. Run: hyperclaw config set-key",
129
+ error: "no_api_key"
130
+ };
131
+ const sid = opts.sessionId;
132
+ if (sid && opts.appendTranscript) opts.appendTranscript(sid, "user", message);
133
+ let context = await loadWorkspaceContext(opts.workspace);
134
+ try {
135
+ const { getContextSummary } = await Promise.resolve().then(() => require("./knowledge-graph-B5jEPEZJ.js"));
136
+ const kg = await getContextSummary(25);
137
+ if (kg) context += kg + "\n\n";
138
+ } catch {}
139
+ context += await loadSkillsContext();
140
+ const serviceKeys = cfg?.skills?.apiKeys ? Object.keys(cfg.skills.apiKeys) : [];
141
+ if (serviceKeys.length > 0) context += `\n## Service API Keys (configured)\nAvailable for research/skills: ${serviceKeys.join(", ")}. Use hackerone_list_programs, bugcrowd_list_programs, synack_list_targets when applicable, or create_skill for custom integrations.\n\n`;
142
+ const tools = await resolveTools({
143
+ config: cfg,
144
+ source: opts.source,
145
+ elevated: opts.elevated,
146
+ sessionId: sid,
147
+ daemonMode: opts.daemonMode,
148
+ activeServer: opts.activeServer
149
+ });
150
+ const rawModel = opts.modelOverride || cfg?.provider?.modelId || "claude-sonnet-4-5";
151
+ const isLocal2 = cfg?.provider?.providerId === "local" || cfg?.provider?.providerId === "ollama";
152
+ const model = rawModel.startsWith("ollama/") ? rawModel.slice(7) : rawModel;
153
+ const provider = cfg?.provider?.providerId === "anthropic" ? "anthropic" : cfg?.provider?.providerId === "custom" || isLocal2 ? "custom" : "openrouter";
154
+ const ollamaBaseUrl = isLocal2 ? cfg?.provider?.baseUrl || "http://localhost:11434/v1" : void 0;
155
+ const thinkingBudget = opts.thinkingBudget ?? 0;
156
+ const maxTokens = thinkingBudget > 0 ? thinkingBudget + 4096 : 4096;
157
+ try {
158
+ const { InferenceEngine } = await Promise.resolve().then(() => require("./inference-CDtB9dNd.js"));
159
+ const engineOpts = {
160
+ model,
161
+ apiKey,
162
+ provider,
163
+ system: context || void 0,
164
+ tools,
165
+ maxTokens,
166
+ onToken: opts.onToken ?? (() => {}),
167
+ onThinking: opts.onThinking,
168
+ onToolCall: opts.onToolCall,
169
+ onToolResult: opts.onToolResult,
170
+ ...provider === "custom" ? { baseUrl: ollamaBaseUrl || cfg?.provider?.baseUrl || "" } : {},
171
+ ...thinkingBudget > 0 && (model.includes("claude") || model.includes("anthropic")) ? { thinking: { budget_tokens: thinkingBudget } } : {}
172
+ };
173
+ const engine = new InferenceEngine(engineOpts);
174
+ const result = await engine.run([{
175
+ role: "user",
176
+ content: message
177
+ }]);
178
+ const text = result.text || "(empty)";
179
+ if (sid && opts.appendTranscript) opts.appendTranscript(sid, "assistant", text);
180
+ try {
181
+ const { AutoMemory } = await Promise.resolve().then(() => require("./memory-auto-psh0i3fs.js"));
182
+ const mem = new AutoMemory({ extractEveryNTurns: 1 });
183
+ mem.addTurn("user", message);
184
+ mem.addTurn("assistant", text);
185
+ await mem.extract();
186
+ } catch {}
187
+ opts.onDone?.(text);
188
+ opts.onRunEnd?.(result.usage);
189
+ return {
190
+ text,
191
+ usage: result.usage
192
+ };
193
+ } catch (e) {
194
+ const errText = `Error: ${e.message}`;
195
+ opts.onDone?.(errText);
196
+ opts.onRunEnd?.(void 0, e.message);
197
+ return {
198
+ text: errText,
199
+ error: e.message
200
+ };
201
+ }
202
+ }
203
+ var CHANNEL_SOURCES;
204
+ var init_engine = require_chunk.__esm({ "packages/core/src/agent/engine.ts"() {
205
+ require_src.init_src();
206
+ CHANNEL_SOURCES = [
207
+ "telegram",
208
+ "discord",
209
+ "whatsapp",
210
+ "slack",
211
+ "signal",
212
+ "matrix",
213
+ "line",
214
+ "nostr",
215
+ "feishu",
216
+ "msteams",
217
+ "teams",
218
+ "instagram",
219
+ "messenger",
220
+ "twitter",
221
+ "viber",
222
+ "zalo"
223
+ ];
224
+ } });
225
+
226
+ //#endregion
227
+ Object.defineProperty(exports, 'init_engine', {
228
+ enumerable: true,
229
+ get: function () {
230
+ return init_engine;
231
+ }
232
+ });
233
+ Object.defineProperty(exports, 'loadSkillsContext', {
234
+ enumerable: true,
235
+ get: function () {
236
+ return loadSkillsContext;
237
+ }
238
+ });
239
+ Object.defineProperty(exports, 'loadWorkspaceContext', {
240
+ enumerable: true,
241
+ get: function () {
242
+ return loadWorkspaceContext;
243
+ }
244
+ });
245
+ Object.defineProperty(exports, 'resolveTools', {
246
+ enumerable: true,
247
+ get: function () {
248
+ return resolveTools;
249
+ }
250
+ });
251
+ Object.defineProperty(exports, 'runAgentEngine', {
252
+ enumerable: true,
253
+ get: function () {
254
+ return runAgentEngine;
255
+ }
256
+ });
@@ -0,0 +1,9 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+ const require_env_resolve = require('./env-resolve-szSWl0UF.js');
3
+
4
+ require_env_resolve.init_env_resolve();
5
+ exports.getProviderCredentialAsync = require_env_resolve.getProviderCredentialAsync;
6
+ exports.resolveChannelToken = require_env_resolve.resolveChannelToken;
7
+ exports.resolveGatewayToken = require_env_resolve.resolveGatewayToken;
8
+ exports.resolveProviderApiKey = require_env_resolve.resolveProviderApiKey;
9
+ exports.resolveServiceApiKey = require_env_resolve.resolveServiceApiKey;
@@ -0,0 +1,94 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+
3
+ //#region src/infra/env-resolve.ts
4
+ function resolveGatewayToken(authTokenFromConfig) {
5
+ return authTokenFromConfig || process.env.HYPERCLAW_GATEWAY_TOKEN || "";
6
+ }
7
+ function resolveProviderApiKey(cfg) {
8
+ if (!cfg) return "";
9
+ const key = cfg.provider?.apiKey;
10
+ if (key) return key;
11
+ const pid = cfg.provider?.providerId || "openrouter";
12
+ switch (pid) {
13
+ case "openrouter": return process.env.OPENROUTER_API_KEY || "";
14
+ case "anthropic": return process.env.ANTHROPIC_API_KEY || "";
15
+ case "openai": return process.env.OPENAI_API_KEY || "";
16
+ case "xai": return process.env.XAI_API_KEY || "";
17
+ case "google": return process.env.GOOGLE_AI_API_KEY || "";
18
+ case "custom": return "";
19
+ default: return process.env.OPENROUTER_API_KEY || process.env.ANTHROPIC_API_KEY || "";
20
+ }
21
+ }
22
+ /** Resolve API key or OAuth access token (async). Use this when provider.authType may be 'oauth'. */
23
+ async function getProviderCredentialAsync(cfg) {
24
+ if (!cfg?.provider) return "";
25
+ if (cfg.provider.authType === "oauth") {
26
+ const { getProviderCredentialAsync: getOAuth } = await Promise.resolve().then(() => require("./oauth-provider-BZb6qOw5.js"));
27
+ return getOAuth(cfg);
28
+ }
29
+ return resolveProviderApiKey(cfg);
30
+ }
31
+ /** Resolve API key for a service (bug bounty, research apps, etc.). Config first, then env. */
32
+ function resolveServiceApiKey(serviceId, cfg) {
33
+ const key = cfg?.skills?.apiKeys?.[serviceId];
34
+ if (key) return key;
35
+ const envKey = SERVICE_ENV[serviceId] || `${serviceId.toUpperCase().replace(/-/g, "_")}_API_KEY`;
36
+ return process.env[envKey] || process.env[envKey.replace(/-/g, "_")] || "";
37
+ }
38
+ function resolveChannelToken(channelId, tokenFromConfig) {
39
+ if (tokenFromConfig) return tokenFromConfig;
40
+ const envKey = CHANNEL_ENV[channelId] || `${channelId.toUpperCase().replace(/-/g, "_")}_BOT_TOKEN`;
41
+ return process.env[envKey] || process.env[`${channelId.toUpperCase()}_BOT_TOKEN`] || "";
42
+ }
43
+ var CHANNEL_ENV, SERVICE_ENV;
44
+ var init_env_resolve = require_chunk.__esm({ "src/infra/env-resolve.ts"() {
45
+ CHANNEL_ENV = {
46
+ telegram: "TELEGRAM_BOT_TOKEN",
47
+ discord: "DISCORD_BOT_TOKEN",
48
+ slack: "SLACK_BOT_TOKEN"
49
+ };
50
+ SERVICE_ENV = {
51
+ hackerone: "HACKERONE_API_USERNAME",
52
+ "hackerone-token": "HACKERONE_API_TOKEN",
53
+ bugcrowd: "BUGCROWD_API_TOKEN",
54
+ synack: "SYNACK_API_TOKEN"
55
+ };
56
+ } });
57
+
58
+ //#endregion
59
+ Object.defineProperty(exports, 'getProviderCredentialAsync', {
60
+ enumerable: true,
61
+ get: function () {
62
+ return getProviderCredentialAsync;
63
+ }
64
+ });
65
+ Object.defineProperty(exports, 'init_env_resolve', {
66
+ enumerable: true,
67
+ get: function () {
68
+ return init_env_resolve;
69
+ }
70
+ });
71
+ Object.defineProperty(exports, 'resolveChannelToken', {
72
+ enumerable: true,
73
+ get: function () {
74
+ return resolveChannelToken;
75
+ }
76
+ });
77
+ Object.defineProperty(exports, 'resolveGatewayToken', {
78
+ enumerable: true,
79
+ get: function () {
80
+ return resolveGatewayToken;
81
+ }
82
+ });
83
+ Object.defineProperty(exports, 'resolveProviderApiKey', {
84
+ enumerable: true,
85
+ get: function () {
86
+ return resolveProviderApiKey;
87
+ }
88
+ });
89
+ Object.defineProperty(exports, 'resolveServiceApiKey', {
90
+ enumerable: true,
91
+ get: function () {
92
+ return resolveServiceApiKey;
93
+ }
94
+ });
@@ -0,0 +1,91 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+ const fs_extra = require_chunk.__toESM(require("fs-extra"));
3
+ const path = require_chunk.__toESM(require("path"));
4
+ const os = require_chunk.__toESM(require("os"));
5
+
6
+ //#region packages/core/src/agent/extraction-tools.ts
7
+ function safeRequire(id) {
8
+ try {
9
+ return require(id);
10
+ } catch {
11
+ return null;
12
+ }
13
+ }
14
+ function getExtractionTools() {
15
+ return [{
16
+ name: "extract_pdf",
17
+ description: "Extract text and structure from a PDF file. Returns full text content. Use for documents, forms, reports.",
18
+ input_schema: {
19
+ type: "object",
20
+ properties: { path: {
21
+ type: "string",
22
+ description: "Path to PDF file (absolute or ~)"
23
+ } },
24
+ required: ["path"]
25
+ },
26
+ handler: async (input) => {
27
+ const filePath = input.path.replace(/^~/, os.default.homedir());
28
+ if (!await fs_extra.default.pathExists(filePath)) return `Error: File not found: ${filePath}`;
29
+ const pdfParse = safeRequire("pdf-parse");
30
+ if (!pdfParse) return "Error: pdf-parse not installed. Run: npm install pdf-parse";
31
+ try {
32
+ const buf = await fs_extra.default.readFile(filePath);
33
+ const data = await pdfParse(buf);
34
+ const text = (data.text || "").trim().slice(0, 5e4);
35
+ return `Pages: ${data.numpages || "?"}\n\n${text || "(no extractable text)"}`;
36
+ } catch (e) {
37
+ return `Error: ${e.message}`;
38
+ }
39
+ }
40
+ }, {
41
+ name: "extract_spreadsheet",
42
+ description: "Extract data from Excel (.xlsx, .xls) or CSV. Returns sheet names and cell content as structured text.",
43
+ input_schema: {
44
+ type: "object",
45
+ properties: { path: {
46
+ type: "string",
47
+ description: "Path to spreadsheet (xlsx, xls, csv)"
48
+ } },
49
+ required: ["path"]
50
+ },
51
+ handler: async (input) => {
52
+ const filePath = input.path.replace(/^~/, os.default.homedir());
53
+ if (!await fs_extra.default.pathExists(filePath)) return `Error: File not found: ${filePath}`;
54
+ const ext = path.default.extname(filePath).toLowerCase();
55
+ if (ext === ".csv") {
56
+ const content = await fs_extra.default.readFile(filePath, "utf8");
57
+ return content.slice(0, 5e4);
58
+ }
59
+ const XLSX = safeRequire("xlsx");
60
+ if (!XLSX) return "Error: xlsx not installed. Run: npm install xlsx";
61
+ try {
62
+ const buf = await fs_extra.default.readFile(filePath);
63
+ const wb = XLSX.read(buf, { type: "buffer" });
64
+ const parts = [];
65
+ for (const name of wb.SheetNames) {
66
+ const sheet = wb.Sheets[name];
67
+ const arr = XLSX.utils.sheet_to_csv(sheet);
68
+ parts.push(`Sheet: ${name}\n${arr.slice(0, 2e4)}`);
69
+ }
70
+ return parts.join("\n\n---\n\n").slice(0, 5e4);
71
+ } catch (e) {
72
+ return `Error: ${e.message}`;
73
+ }
74
+ }
75
+ }];
76
+ }
77
+ var init_extraction_tools = require_chunk.__esm({ "packages/core/src/agent/extraction-tools.ts"() {} });
78
+
79
+ //#endregion
80
+ Object.defineProperty(exports, 'getExtractionTools', {
81
+ enumerable: true,
82
+ get: function () {
83
+ return getExtractionTools;
84
+ }
85
+ });
86
+ Object.defineProperty(exports, 'init_extraction_tools', {
87
+ enumerable: true,
88
+ get: function () {
89
+ return init_extraction_tools;
90
+ }
91
+ });
@@ -0,0 +1,5 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+ const require_extraction_tools = require('./extraction-tools-D3qDFBJ1.js');
3
+
4
+ require_extraction_tools.init_extraction_tools();
5
+ exports.getExtractionTools = require_extraction_tools.getExtractionTools;