hyperclaw 4.0.1 → 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.
- package/README.md +7 -4
- package/dist/a2ui-protocol-CT_jDEU9.js +75 -0
- package/dist/agents-routing-683Q2JGp.js +129 -0
- package/dist/agents-routing-BpZBswBH.js +4 -0
- package/dist/api-keys-guide-Dq5Obbp4.js +149 -0
- package/dist/audit-BYxPlnTQ.js +248 -0
- package/dist/bounty-tools-C6LyzxM-.js +211 -0
- package/dist/browser-tools-CQBSbIuO.js +5 -0
- package/dist/browser-tools-YQmwRLLM.js +179 -0
- package/dist/claw-tasks-BRLUvFRD.js +80 -0
- package/dist/connector-3HnyH8fn.js +167 -0
- package/dist/connector-6PMZo5Ky.js +189 -0
- package/dist/connector-B6eoF3DD.js +181 -0
- package/dist/connector-B9tLG8UZ.js +196 -0
- package/dist/connector-BOlqjXWP.js +182 -0
- package/dist/connector-BP8zsbP8.js +189 -0
- package/dist/connector-BPoSevxp.js +286 -0
- package/dist/connector-BRHj773i.js +163 -0
- package/dist/connector-BToxU-jV.js +267 -0
- package/dist/connector-BliDVsJQ.js +239 -0
- package/dist/connector-Bv6s9oP7.js +88 -0
- package/dist/connector-By5wWGTR.js +343 -0
- package/dist/connector-C1BaFFgN.js +213 -0
- package/dist/connector-CRRWY5Wv.js +167 -0
- package/dist/connector-CXPQVGyI.js +85 -0
- package/dist/connector-Cdk1CXKi.js +194 -0
- package/dist/connector-CwlgFgjx.js +181 -0
- package/dist/connector-DFchk6l7.js +178 -0
- package/dist/connector-DKw7tRAy.js +192 -0
- package/dist/connector-DRv1ahC_.js +2 -2
- package/dist/connector-DU63KW94.js +165 -0
- package/dist/connector-Dbvb1Cj9.js +280 -0
- package/dist/connector-DcZdQcgR.js +173 -0
- package/dist/connector-DxKL8VvZ.js +182 -0
- package/dist/connector-T_YdZtzv.js +162 -0
- package/dist/connector-i4gOS9xL.js +154 -0
- package/dist/connector-rHXE1ZD2.js +167 -0
- package/dist/connector-wdUXChwa.js +172 -0
- package/dist/cost-tracker-pVE15Yq4.js +103 -0
- package/dist/credentials-store-BvnMPJwi.js +4 -0
- package/dist/credentials-store-sb-TRLwR.js +77 -0
- package/dist/cron-tasks-BvDFNyiE.js +82 -0
- package/dist/delivery-D5Z98EVq.js +95 -0
- package/dist/delivery-DCOXhXEO.js +5 -0
- package/dist/destructive-gate-m-dWqUFg.js +101 -0
- package/dist/developer-keys-JaJK3T27.js +127 -0
- package/dist/developer-keys-kyqmtWK3.js +8 -0
- package/dist/doctor-3oi89QIc.js +175 -0
- package/dist/doctor-Cf1XSfp9.js +4 -0
- package/dist/engine-B4eMiTgl.js +7 -0
- package/dist/engine-B8M7dYul.js +7 -0
- package/dist/engine-BhT-1M9W.js +256 -0
- package/dist/engine-D49jnSd_.js +256 -0
- package/dist/env-resolve-DWOQ45jG.js +9 -0
- package/dist/env-resolve-szSWl0UF.js +94 -0
- package/dist/extraction-tools-D3qDFBJ1.js +91 -0
- package/dist/extraction-tools-DLr_AEwq.js +5 -0
- package/dist/form_data-B_hIUrxU.js +8657 -0
- package/dist/gmail-watch-setup-Czt8rXaX.js +40 -0
- package/dist/heartbeat-engine-CRqfPcFM.js +83 -0
- package/dist/hub-DTsqe5Bt.js +6 -0
- package/dist/hub-FrPTA33j.js +515 -0
- package/dist/hyperclawbot-D9KCtc4P.js +480 -0
- package/dist/hyperclawbot-Dw27pJo4.js +480 -0
- package/dist/inference-CTWJeX9Q.js +922 -0
- package/dist/inference-ix607p7k.js +6 -0
- package/dist/knowledge-graph-DqA-Fztl.js +131 -0
- package/dist/loader-CISCqBto.js +400 -0
- package/dist/loader-CYMQ8VOS.js +4 -0
- package/dist/logger-8tEtAd3y.js +83 -0
- package/dist/manager-CPjeRe-6.js +4 -0
- package/dist/manager-Cwzj7w5R.js +105 -0
- package/dist/manager-DLmZI-9R.js +6 -0
- package/dist/manager-DSGhn5i3.js +117 -0
- package/dist/manager-DgyF52mg.js +218 -0
- package/dist/manager-Dm8nrMFx.js +40 -0
- package/dist/mcp-B_9Ber63.js +139 -0
- package/dist/mcp-loader-DSM5UiFG.js +94 -0
- package/dist/mcp-loader-j5ZLLw5O.js +94 -0
- package/dist/memory-BI1kPkAN.js +4 -0
- package/dist/memory-BVFGkxxK.js +270 -0
- package/dist/memory-auto-Bc7euou4.js +306 -0
- package/dist/memory-auto-DPfbkMVt.js +5 -0
- package/dist/memory-integration-DZExqWr4.js +91 -0
- package/dist/moltbook-B6ZeGN5_.js +81 -0
- package/dist/node-pwL6O_KX.js +222 -0
- package/dist/nodes-registry-CsPm_-CJ.js +52 -0
- package/dist/oauth-flow-CpWlgvNB.js +150 -0
- package/dist/oauth-provider-BZb6qOw5.js +110 -0
- package/dist/observability-B43YvNQV.js +89 -0
- package/dist/onboard-Bd_wsYdi.js +4086 -0
- package/dist/onboard-CAN7x3me.js +3026 -0
- package/dist/onboard-DnegOHMh.js +4 -4
- package/dist/onboard-RYtDlYBw.js +9 -0
- package/dist/onboard-aTwlQs-4.js +9 -0
- package/dist/orchestrator-BSp2M5EU.js +189 -0
- package/dist/orchestrator-C7ko5tWa.js +6 -0
- package/dist/orchestrator-DfPkIx2Z.js +6 -0
- package/dist/orchestrator-NJQsmiBE.js +189 -0
- package/dist/pairing-DU0_J28n.js +87 -0
- package/dist/pairing-DWllbSbO.js +4 -0
- package/dist/pc-access-Ly-uA8mn.js +8 -0
- package/dist/pc-access-NxBvTrRj.js +819 -0
- package/dist/pending-approval-DIHvwwWS.js +22 -0
- package/dist/puppeteer-2o3QOwAy.js +2 -2
- package/dist/puppeteer-BYTMp3BI.js +2 -2
- package/dist/puppeteer-DQ45qwWk.js +2 -2
- package/dist/reminders-store-D79qdfN0.js +58 -0
- package/dist/renderer-pqlDRKbH.js +225 -0
- package/dist/rules-BooT_qFP.js +103 -0
- package/dist/run-main.js +289 -1031
- package/dist/runner-D1rjuMTJ.js +810 -0
- package/dist/sdk/index.js +2 -2
- package/dist/sdk/index.mjs +2 -2
- package/dist/security-C-5URby1.js +73 -0
- package/dist/security-_xve79aq.js +4 -0
- package/dist/server-0kgyELx4.js +1047 -0
- package/dist/server-BIuTobTC.js +4 -0
- package/dist/server-BRlCEjyT.js +1047 -0
- package/dist/server-CCI1hv45.js +2 -2
- package/dist/server-DU9POoWc.js +4 -0
- package/dist/session-store-CujxByI6.js +113 -0
- package/dist/session-store-qpJUg2M1.js +5 -0
- package/dist/sessions-tools-CB2qbwIk.js +5 -0
- package/dist/sessions-tools-DHMaTZIs.js +95 -0
- package/dist/skill-loader-BkceKkIg.js +7 -0
- package/dist/skill-loader-DhgIwK4J.js +159 -0
- package/dist/skill-runtime--LqxWrp5.js +102 -0
- package/dist/skill-runtime-C5l0Tgt-.js +5 -0
- package/dist/skill-runtime-DsXK_HYG.js +102 -0
- package/dist/skill-runtime-IVTiqrMR.js +5 -0
- package/dist/src-BEVLgaF1.js +63 -0
- package/dist/src-Bgu_OxTQ.js +458 -0
- package/dist/src-Bq-oKt7Z.js +458 -0
- package/dist/src-DWCUhnD4.js +20 -0
- package/dist/src-cfRTjFef.js +63 -0
- package/dist/sub-agent-tools-BD9DF8_g.js +39 -0
- package/dist/sub-agent-tools-V7b3T9_s.js +39 -0
- package/dist/tool-policy-DNvNRnve.js +189 -0
- package/dist/tts-elevenlabs-BUOGKL-k.js +61 -0
- package/dist/update-check-BD4qH7Am.js +81 -0
- package/dist/vision-DRq-f-Dj.js +121 -0
- package/dist/vision-tools-CFZEpQKm.js +5 -0
- package/dist/vision-tools-CQnBI9aa.js +51 -0
- package/dist/voice-transcription-CgWq54hn.js +138 -0
- package/dist/website-watch-tools-Bk_TnwuE.js +5 -0
- package/dist/website-watch-tools-DraMPxdl.js +139 -0
- package/package.json +1 -1
|
@@ -0,0 +1,94 @@
|
|
|
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 src/services/mcp-loader.ts
|
|
7
|
+
async function getMCPConfig() {
|
|
8
|
+
try {
|
|
9
|
+
const cfg = await fs_extra.default.readJson(path.default.join(HC_DIR, "hyperclaw.json"));
|
|
10
|
+
const servers = cfg.mcp?.servers ?? [];
|
|
11
|
+
return Array.isArray(servers) ? servers : [];
|
|
12
|
+
} catch {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** Load tools from all configured MCP servers. */
|
|
17
|
+
async function loadMCPTools() {
|
|
18
|
+
const servers = await getMCPConfig();
|
|
19
|
+
if (servers.length === 0) return [];
|
|
20
|
+
let Client;
|
|
21
|
+
let StdioClientTransport;
|
|
22
|
+
let StreamableHTTPClientTransport;
|
|
23
|
+
try {
|
|
24
|
+
const sdk = await import("@modelcontextprotocol/sdk");
|
|
25
|
+
Client = sdk.Client;
|
|
26
|
+
StdioClientTransport = sdk.StdioClientTransport;
|
|
27
|
+
StreamableHTTPClientTransport = sdk.StreamableHTTPClientTransport;
|
|
28
|
+
} catch {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
const tools = [];
|
|
32
|
+
for (const srv of servers) try {
|
|
33
|
+
const client = new Client({
|
|
34
|
+
name: "hyperclaw",
|
|
35
|
+
version: "4.0.2"
|
|
36
|
+
});
|
|
37
|
+
if (srv.url) {
|
|
38
|
+
const transport = new StreamableHTTPClientTransport(new URL(srv.url));
|
|
39
|
+
await client.connect(transport);
|
|
40
|
+
} else if (srv.command) {
|
|
41
|
+
const transport = new StdioClientTransport({
|
|
42
|
+
command: srv.command,
|
|
43
|
+
args: srv.args ?? []
|
|
44
|
+
});
|
|
45
|
+
await client.connect(transport);
|
|
46
|
+
} else continue;
|
|
47
|
+
const allTools = [];
|
|
48
|
+
let cursor;
|
|
49
|
+
do {
|
|
50
|
+
const res = await client.listTools?.({ cursor }) ?? {
|
|
51
|
+
tools: [],
|
|
52
|
+
nextCursor: void 0
|
|
53
|
+
};
|
|
54
|
+
allTools.push(...res.tools ?? []);
|
|
55
|
+
cursor = res.nextCursor;
|
|
56
|
+
} while (cursor);
|
|
57
|
+
for (const t of allTools) {
|
|
58
|
+
const toolName = t.name;
|
|
59
|
+
const mcpClient = client;
|
|
60
|
+
tools.push({
|
|
61
|
+
name: `mcp_${srv.name}_${toolName}`.replace(/[^a-z0-9_]/gi, "_"),
|
|
62
|
+
description: (t.description ?? toolName).slice(0, 500),
|
|
63
|
+
input_schema: t.inputSchema && typeof t.inputSchema === "object" && "type" in t.inputSchema && "properties" in t.inputSchema ? t.inputSchema : {
|
|
64
|
+
type: "object",
|
|
65
|
+
properties: {}
|
|
66
|
+
},
|
|
67
|
+
handler: async (input) => {
|
|
68
|
+
try {
|
|
69
|
+
const result = await mcpClient.callTool?.({
|
|
70
|
+
name: toolName,
|
|
71
|
+
arguments: input
|
|
72
|
+
});
|
|
73
|
+
const content = result?.content;
|
|
74
|
+
if (Array.isArray(content)) return content.map((c) => c?.text ?? JSON.stringify(c)).join("\n");
|
|
75
|
+
return typeof content === "string" ? content : JSON.stringify(result ?? {});
|
|
76
|
+
} catch (e) {
|
|
77
|
+
return `MCP error: ${e.message}`;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
} catch (e) {
|
|
83
|
+
console.error(`[mcp] Failed to load ${srv.name}:`, e.message);
|
|
84
|
+
}
|
|
85
|
+
return tools;
|
|
86
|
+
}
|
|
87
|
+
var HC_DIR;
|
|
88
|
+
var init_mcp_loader = require_chunk.__esm({ "src/services/mcp-loader.ts"() {
|
|
89
|
+
HC_DIR = path.default.join(os.default.homedir(), ".hyperclaw");
|
|
90
|
+
} });
|
|
91
|
+
|
|
92
|
+
//#endregion
|
|
93
|
+
init_mcp_loader();
|
|
94
|
+
exports.loadMCPTools = loadMCPTools;
|
|
@@ -0,0 +1,94 @@
|
|
|
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 src/services/mcp-loader.ts
|
|
7
|
+
async function getMCPConfig() {
|
|
8
|
+
try {
|
|
9
|
+
const cfg = await fs_extra.default.readJson(path.default.join(HC_DIR, "hyperclaw.json"));
|
|
10
|
+
const servers = cfg.mcp?.servers ?? [];
|
|
11
|
+
return Array.isArray(servers) ? servers : [];
|
|
12
|
+
} catch {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** Load tools from all configured MCP servers. */
|
|
17
|
+
async function loadMCPTools() {
|
|
18
|
+
const servers = await getMCPConfig();
|
|
19
|
+
if (servers.length === 0) return [];
|
|
20
|
+
let Client;
|
|
21
|
+
let StdioClientTransport;
|
|
22
|
+
let StreamableHTTPClientTransport;
|
|
23
|
+
try {
|
|
24
|
+
const sdk = await import("@modelcontextprotocol/sdk");
|
|
25
|
+
Client = sdk.Client;
|
|
26
|
+
StdioClientTransport = sdk.StdioClientTransport;
|
|
27
|
+
StreamableHTTPClientTransport = sdk.StreamableHTTPClientTransport;
|
|
28
|
+
} catch {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
const tools = [];
|
|
32
|
+
for (const srv of servers) try {
|
|
33
|
+
const client = new Client({
|
|
34
|
+
name: "hyperclaw",
|
|
35
|
+
version: "4.0.2"
|
|
36
|
+
});
|
|
37
|
+
if (srv.url) {
|
|
38
|
+
const transport = new StreamableHTTPClientTransport(new URL(srv.url));
|
|
39
|
+
await client.connect(transport);
|
|
40
|
+
} else if (srv.command) {
|
|
41
|
+
const transport = new StdioClientTransport({
|
|
42
|
+
command: srv.command,
|
|
43
|
+
args: srv.args ?? []
|
|
44
|
+
});
|
|
45
|
+
await client.connect(transport);
|
|
46
|
+
} else continue;
|
|
47
|
+
const allTools = [];
|
|
48
|
+
let cursor;
|
|
49
|
+
do {
|
|
50
|
+
const res = await client.listTools?.({ cursor }) ?? {
|
|
51
|
+
tools: [],
|
|
52
|
+
nextCursor: void 0
|
|
53
|
+
};
|
|
54
|
+
allTools.push(...res.tools ?? []);
|
|
55
|
+
cursor = res.nextCursor;
|
|
56
|
+
} while (cursor);
|
|
57
|
+
for (const t of allTools) {
|
|
58
|
+
const toolName = t.name;
|
|
59
|
+
const mcpClient = client;
|
|
60
|
+
tools.push({
|
|
61
|
+
name: `mcp_${srv.name}_${toolName}`.replace(/[^a-z0-9_]/gi, "_"),
|
|
62
|
+
description: (t.description ?? toolName).slice(0, 500),
|
|
63
|
+
input_schema: t.inputSchema && typeof t.inputSchema === "object" && "type" in t.inputSchema && "properties" in t.inputSchema ? t.inputSchema : {
|
|
64
|
+
type: "object",
|
|
65
|
+
properties: {}
|
|
66
|
+
},
|
|
67
|
+
handler: async (input) => {
|
|
68
|
+
try {
|
|
69
|
+
const result = await mcpClient.callTool?.({
|
|
70
|
+
name: toolName,
|
|
71
|
+
arguments: input
|
|
72
|
+
});
|
|
73
|
+
const content = result?.content;
|
|
74
|
+
if (Array.isArray(content)) return content.map((c) => c?.text ?? JSON.stringify(c)).join("\n");
|
|
75
|
+
return typeof content === "string" ? content : JSON.stringify(result ?? {});
|
|
76
|
+
} catch (e) {
|
|
77
|
+
return `MCP error: ${e.message}`;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
} catch (e) {
|
|
83
|
+
console.error(`[mcp] Failed to load ${srv.name}:`, e.message);
|
|
84
|
+
}
|
|
85
|
+
return tools;
|
|
86
|
+
}
|
|
87
|
+
var HC_DIR;
|
|
88
|
+
var init_mcp_loader = require_chunk.__esm({ "src/services/mcp-loader.ts"() {
|
|
89
|
+
HC_DIR = path.default.join(os.default.homedir(), ".hyperclaw");
|
|
90
|
+
} });
|
|
91
|
+
|
|
92
|
+
//#endregion
|
|
93
|
+
init_mcp_loader();
|
|
94
|
+
exports.loadMCPTools = loadMCPTools;
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-jS-bbMI5.js');
|
|
2
|
+
const chalk = require_chunk.__toESM(require("chalk"));
|
|
3
|
+
const ora = require_chunk.__toESM(require("ora"));
|
|
4
|
+
const fs_extra = require_chunk.__toESM(require("fs-extra"));
|
|
5
|
+
const path = require_chunk.__toESM(require("path"));
|
|
6
|
+
const os = require_chunk.__toESM(require("os"));
|
|
7
|
+
|
|
8
|
+
//#region src/agents/memory.ts
|
|
9
|
+
var MemoryManager = class {
|
|
10
|
+
baseDir;
|
|
11
|
+
agentsFile;
|
|
12
|
+
memoryFile;
|
|
13
|
+
logFile;
|
|
14
|
+
constructor(workspaceDir) {
|
|
15
|
+
this.baseDir = workspaceDir || path.default.join(os.default.homedir(), ".hyperclaw");
|
|
16
|
+
this.agentsFile = path.default.join(this.baseDir, "AGENTS.md");
|
|
17
|
+
this.memoryFile = path.default.join(this.baseDir, "MEMORY.md");
|
|
18
|
+
this.logFile = path.default.join(this.baseDir, "logs", `${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}.md`);
|
|
19
|
+
}
|
|
20
|
+
async init(identity) {
|
|
21
|
+
await fs_extra.default.ensureDir(this.baseDir);
|
|
22
|
+
await fs_extra.default.ensureDir(path.default.join(this.baseDir, "logs"));
|
|
23
|
+
const spinner = (0, ora.default)("Initializing memory and agent identity...").start();
|
|
24
|
+
await this.writeAgentsMd(identity);
|
|
25
|
+
await this.writeMemoryMd(identity);
|
|
26
|
+
await this.initDailyLog();
|
|
27
|
+
spinner.succeed("AGENTS.md, MEMORY.md and daily log created");
|
|
28
|
+
console.log(chalk.default.gray(` 📁 Workspace: ${this.baseDir}`));
|
|
29
|
+
console.log(chalk.default.gray(` 📄 AGENTS.md: ${this.agentsFile}`));
|
|
30
|
+
console.log(chalk.default.gray(` 🧠 MEMORY.md: ${this.memoryFile}`));
|
|
31
|
+
console.log();
|
|
32
|
+
}
|
|
33
|
+
async writeAgentsMd(id) {
|
|
34
|
+
const content = `# AGENTS.md — HyperClaw Global Agent Rules
|
|
35
|
+
> Generated: ${(/* @__PURE__ */ new Date()).toISOString()}
|
|
36
|
+
> This file is read by ALL sessions and subagents.
|
|
37
|
+
|
|
38
|
+
## Identity
|
|
39
|
+
- **Agent Name:** ${id.agentName}
|
|
40
|
+
- **User Name:** ${id.userName}
|
|
41
|
+
- **Personality:** ${id.personality}
|
|
42
|
+
- **Language:** ${id.language}
|
|
43
|
+
|
|
44
|
+
## Global Rules
|
|
45
|
+
${id.rules.map((r, i) => `${i + 1}. ${r}`).join("\n")}
|
|
46
|
+
|
|
47
|
+
## Subagent Hierarchy
|
|
48
|
+
- Parent: HyperClaw Core
|
|
49
|
+
- Children: Channel Agents (Telegram, Discord, etc.)
|
|
50
|
+
- All subagents MUST inherit these rules
|
|
51
|
+
- No subagent may override global safety rules
|
|
52
|
+
|
|
53
|
+
## Memory Protocol
|
|
54
|
+
- Write significant events to MEMORY.md
|
|
55
|
+
- Log daily interactions to logs/YYYY-MM-DD.md
|
|
56
|
+
- Always read AGENTS.md at session start
|
|
57
|
+
|
|
58
|
+
## Safety Boundaries
|
|
59
|
+
- Never reveal the auth token
|
|
60
|
+
- Never execute code outside the sandbox skill
|
|
61
|
+
- Always ask for confirmation before irreversible actions
|
|
62
|
+
- Refuse requests that violate user privacy
|
|
63
|
+
|
|
64
|
+
## Cross-Session Persistence
|
|
65
|
+
- Session state is stored in ~/.hyperclaw/sessions/
|
|
66
|
+
- Use memory tools to recall past interactions
|
|
67
|
+
`;
|
|
68
|
+
await fs_extra.default.writeFile(this.agentsFile, content, "utf8");
|
|
69
|
+
}
|
|
70
|
+
async writeMemoryMd(id) {
|
|
71
|
+
const content = `# MEMORY.md — HyperClaw Persistent Memory
|
|
72
|
+
> Initialized: ${(/* @__PURE__ */ new Date()).toISOString()}
|
|
73
|
+
|
|
74
|
+
## User Profile
|
|
75
|
+
- Name: ${id.userName}
|
|
76
|
+
- Preferred language: ${id.language}
|
|
77
|
+
- Agent alias: ${id.agentName}
|
|
78
|
+
|
|
79
|
+
## Session History
|
|
80
|
+
*(Populated automatically during sessions)*
|
|
81
|
+
|
|
82
|
+
## Key Facts
|
|
83
|
+
*(Write important information here for future sessions)*
|
|
84
|
+
|
|
85
|
+
## Reminders
|
|
86
|
+
*(Active reminders are listed here)*
|
|
87
|
+
`;
|
|
88
|
+
await fs_extra.default.writeFile(this.memoryFile, content, "utf8");
|
|
89
|
+
}
|
|
90
|
+
async initDailyLog() {
|
|
91
|
+
const today = (/* @__PURE__ */ new Date()).toLocaleDateString("en-US", {
|
|
92
|
+
weekday: "long",
|
|
93
|
+
year: "numeric",
|
|
94
|
+
month: "long",
|
|
95
|
+
day: "numeric"
|
|
96
|
+
});
|
|
97
|
+
const content = `# Daily Log — ${today}
|
|
98
|
+
|
|
99
|
+
## Sessions
|
|
100
|
+
- ${(/* @__PURE__ */ new Date()).toLocaleTimeString()} — Session initialized
|
|
101
|
+
|
|
102
|
+
## Notes
|
|
103
|
+
`;
|
|
104
|
+
await fs_extra.default.ensureDir(path.default.dirname(this.logFile));
|
|
105
|
+
await fs_extra.default.writeFile(this.logFile, content, "utf8");
|
|
106
|
+
}
|
|
107
|
+
async appendRule(rule) {
|
|
108
|
+
const spinner = (0, ora.default)("Writing rule to AGENTS.md...").start();
|
|
109
|
+
const content = await fs_extra.default.readFile(this.agentsFile, "utf8");
|
|
110
|
+
const updated = content.replace("*(Populated automatically during sessions)*", `*(Populated automatically during sessions)*\n\n### Added Rule\n- ${rule}`);
|
|
111
|
+
await fs_extra.default.writeFile(this.agentsFile, updated, "utf8");
|
|
112
|
+
spinner.succeed(`Rule added to AGENTS.md`);
|
|
113
|
+
}
|
|
114
|
+
async addMemory(fact) {
|
|
115
|
+
const spinner = (0, ora.default)("Writing to MEMORY.md...").start();
|
|
116
|
+
const content = await fs_extra.default.readFile(this.memoryFile, "utf8");
|
|
117
|
+
const entry = `\n- [${(/* @__PURE__ */ new Date()).toISOString()}] ${fact}`;
|
|
118
|
+
const updated = content.replace("*(Write important information here for future sessions)*", `*(Write important information here for future sessions)*${entry}`);
|
|
119
|
+
await fs_extra.default.writeFile(this.memoryFile, updated, "utf8");
|
|
120
|
+
spinner.succeed(`Memory updated`);
|
|
121
|
+
}
|
|
122
|
+
async load() {
|
|
123
|
+
try {
|
|
124
|
+
const agents = await fs_extra.default.readFile(this.agentsFile, "utf8");
|
|
125
|
+
const memory = await fs_extra.default.readFile(this.memoryFile, "utf8");
|
|
126
|
+
return {
|
|
127
|
+
agents,
|
|
128
|
+
memory
|
|
129
|
+
};
|
|
130
|
+
} catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
getBaseDir() {
|
|
135
|
+
return this.baseDir;
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
async function initWorkspaceFiles(identity, workspaceDir) {
|
|
139
|
+
const files = {
|
|
140
|
+
"SOUL.md": generateSoul(identity),
|
|
141
|
+
"USER.md": generateUser(identity),
|
|
142
|
+
"TOOLS.md": generateTools(),
|
|
143
|
+
"HEARTBEAT.md": generateHeartbeat(),
|
|
144
|
+
"BOOTSTRAP.md": generateBootstrap(identity)
|
|
145
|
+
};
|
|
146
|
+
await fs_extra.default.ensureDir(workspaceDir);
|
|
147
|
+
for (const [fname, content] of Object.entries(files)) {
|
|
148
|
+
const fpath = path.default.join(workspaceDir, fname);
|
|
149
|
+
if (!await fs_extra.default.pathExists(fpath)) await fs_extra.default.writeFile(fpath, content, "utf8");
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function generateSoul(id) {
|
|
153
|
+
return `# SOUL.md — Agent Personality & Values
|
|
154
|
+
> Generated: ${(/* @__PURE__ */ new Date()).toISOString()}
|
|
155
|
+
|
|
156
|
+
## Core Identity
|
|
157
|
+
- **Name:** ${id.agentName}
|
|
158
|
+
- **Personality:** ${id.personality}
|
|
159
|
+
- **Primary language:** ${id.language}
|
|
160
|
+
|
|
161
|
+
## Values
|
|
162
|
+
- Honesty over flattery
|
|
163
|
+
- Brevity — get to the point
|
|
164
|
+
- Respect autonomy — suggest, never demand
|
|
165
|
+
- Always confirm before irreversible actions
|
|
166
|
+
|
|
167
|
+
## Boundaries
|
|
168
|
+
- Never reveal gateway tokens or API keys
|
|
169
|
+
- Always ask confirmation before destructive actions
|
|
170
|
+
- Never claim to be human when sincerely asked
|
|
171
|
+
`;
|
|
172
|
+
}
|
|
173
|
+
function generateUser(id) {
|
|
174
|
+
return `# USER.md — About the Person I Work For
|
|
175
|
+
> Generated: ${(/* @__PURE__ */ new Date()).toISOString()}
|
|
176
|
+
|
|
177
|
+
## Identity
|
|
178
|
+
- **Name:** ${id.userName}
|
|
179
|
+
- **Preferred language:** ${id.language}
|
|
180
|
+
|
|
181
|
+
## Communication Preferences
|
|
182
|
+
- Tone: casual
|
|
183
|
+
- Response length: auto
|
|
184
|
+
|
|
185
|
+
## What I'm Working On
|
|
186
|
+
*(Update this regularly — agent uses it for context)*
|
|
187
|
+
|
|
188
|
+
## My Stack
|
|
189
|
+
*(Add your tools here)*
|
|
190
|
+
|
|
191
|
+
## Do NOT do these things
|
|
192
|
+
- Pad responses with unnecessary filler
|
|
193
|
+
|
|
194
|
+
## Always do these things
|
|
195
|
+
- Respond in ${id.language} unless I write in another language
|
|
196
|
+
`;
|
|
197
|
+
}
|
|
198
|
+
function generateTools() {
|
|
199
|
+
return `# TOOLS.md — Available Skills & Tools
|
|
200
|
+
> Generated: ${(/* @__PURE__ */ new Date()).toISOString()}
|
|
201
|
+
|
|
202
|
+
## Active Skills
|
|
203
|
+
| ID | Name | Status |
|
|
204
|
+
|----|------|--------|
|
|
205
|
+
| reminders | Smart Reminders | ✅ enabled |
|
|
206
|
+
| translator | Real-time Translator | ✅ enabled |
|
|
207
|
+
|
|
208
|
+
## Add More Skills
|
|
209
|
+
\`\`\`
|
|
210
|
+
hyperclaw hub # Browse available skills
|
|
211
|
+
hyperclaw hub --install web-search
|
|
212
|
+
\`\`\`
|
|
213
|
+
|
|
214
|
+
## MCP Servers
|
|
215
|
+
No MCP servers configured. Add with: \`hyperclaw mcp add\`
|
|
216
|
+
`;
|
|
217
|
+
}
|
|
218
|
+
function generateHeartbeat() {
|
|
219
|
+
return `# HEARTBEAT.md — System Health Log
|
|
220
|
+
> Initialized: ${(/* @__PURE__ */ new Date()).toISOString()}
|
|
221
|
+
|
|
222
|
+
Auto-written by the gateway-health hook every 5 minutes.
|
|
223
|
+
Enable with: \`hyperclaw hooks enable gateway-health\`
|
|
224
|
+
|
|
225
|
+
## Last Status
|
|
226
|
+
Pending first heartbeat...
|
|
227
|
+
`;
|
|
228
|
+
}
|
|
229
|
+
function generateBootstrap(id) {
|
|
230
|
+
return `# BOOTSTRAP.md β€” Fast Start Context
|
|
231
|
+
> Generated: ${(/* @__PURE__ */ new Date()).toISOString()}
|
|
232
|
+
|
|
233
|
+
## Mission
|
|
234
|
+
Help ${id.userName} move the current task forward with minimal setup friction.
|
|
235
|
+
|
|
236
|
+
## First Tasks
|
|
237
|
+
1. Read AGENTS.md, USER.md, TOOLS.md, and MEMORY.md if present.
|
|
238
|
+
2. Confirm the current repo / project shape before editing anything.
|
|
239
|
+
3. Prefer the smallest change that unblocks progress.
|
|
240
|
+
|
|
241
|
+
## Environment
|
|
242
|
+
- Agent: ${id.agentName}
|
|
243
|
+
- User: ${id.userName}
|
|
244
|
+
- Language: ${id.language}
|
|
245
|
+
|
|
246
|
+
## Current Constraints
|
|
247
|
+
- Ask before irreversible actions.
|
|
248
|
+
- Keep secrets out of workspace markdown files.
|
|
249
|
+
- Update docs when behavior changes.
|
|
250
|
+
|
|
251
|
+
## Definition Of Done
|
|
252
|
+
- Requested change is implemented.
|
|
253
|
+
- Relevant checks or verifications are run when available.
|
|
254
|
+
- Important follow-up risks are documented briefly.
|
|
255
|
+
`;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
//#endregion
|
|
259
|
+
Object.defineProperty(exports, 'MemoryManager', {
|
|
260
|
+
enumerable: true,
|
|
261
|
+
get: function () {
|
|
262
|
+
return MemoryManager;
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
Object.defineProperty(exports, 'initWorkspaceFiles', {
|
|
266
|
+
enumerable: true,
|
|
267
|
+
get: function () {
|
|
268
|
+
return initWorkspaceFiles;
|
|
269
|
+
}
|
|
270
|
+
});
|