hyperclaw 4.0.2 → 5.0.1
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 +246 -60
- package/dist/a2ui-protocol-CfBI44-Q.js +75 -0
- package/dist/agents-routing-ChHiZp36.js +327 -0
- package/dist/agents-routing-ChqZ6l2S.js +4 -0
- package/dist/api-keys-guide-BCcOl0Q7.js +149 -0
- package/dist/api-keys-guide-CGn5BSF7.js +149 -0
- package/dist/audit-BJohI_vC.js +441 -0
- package/dist/audit-BaIiyWFu.js +441 -0
- package/dist/bounty-tools-CY_i91DU.js +211 -0
- package/dist/bounty-tools-DWudyZie.js +211 -0
- package/dist/browser-tools-BsTeGMnX.js +5 -0
- package/dist/browser-tools-D8_rLe2p.js +179 -0
- package/dist/claw-tasks-CgTsiNE8.js +80 -0
- package/dist/claw-tasks-Cyzdbhz_.js +80 -0
- package/dist/connector-5N0-X_xs.js +194 -0
- package/dist/connector-B3v0qcXg.js +425 -0
- package/dist/connector-B8R3iBY1.js +280 -0
- package/dist/connector-BAM-08NN.js +189 -0
- package/dist/connector-BC8FIVu4.js +181 -0
- package/dist/connector-BDmwwaVc.js +213 -0
- package/dist/connector-BGjbBy69.js +225 -0
- package/dist/connector-BO2SRzfG.js +218 -0
- package/dist/connector-BfXky0L3.js +167 -0
- package/dist/connector-BiiSJpx3.js +192 -0
- package/dist/connector-BnDmIhIu.js +85 -0
- package/dist/connector-C1HSoUyk.js +189 -0
- package/dist/connector-CKQHZOXg.js +568 -0
- package/dist/connector-CRl-iidy.js +239 -0
- package/dist/connector-Ci9glMD-.js +340 -0
- package/dist/connector-CjtZIEDj.js +181 -0
- package/dist/connector-Ck6JtOsX.js +531 -0
- package/dist/connector-D8Kelee0.js +286 -0
- package/dist/connector-DAnRJ0oP.js +162 -0
- package/dist/connector-DXTp5PE8.js +508 -0
- package/dist/connector-Dih6dUPP.js +173 -0
- package/dist/connector-DqTH_tPX.js +182 -0
- package/dist/connector-DrnEiiyP.js +419 -0
- package/dist/connector-DtR5GGTX.js +167 -0
- package/dist/connector-Tky_qS_K.js +350 -0
- package/dist/connector-ZSc3oTTy.js +305 -0
- package/dist/connector-sW5yhU1m.js +498 -0
- package/dist/connector-u3ICd3Ic.js +552 -0
- package/dist/cost-tracker-Ca1UPZ33.js +103 -0
- package/dist/cost-tracker-DD9wtWsr.js +103 -0
- package/dist/credentials-store-C6ir0Dae.js +4 -0
- package/dist/credentials-store-CA8UtK0T.js +77 -0
- package/dist/credentials-store-Cm7DH-kh.js +4 -0
- package/dist/credentials-store-H13LqOwJ.js +77 -0
- package/dist/cron-tasks-Bli7Kzd2.js +82 -0
- package/dist/cron-tasks-_pqQCmxc.js +82 -0
- package/dist/daemon-7ViroziB.js +5 -0
- package/dist/daemon-BfyKmZhr.js +318 -0
- package/dist/daemon-Bg4GtCmc.js +318 -0
- package/dist/daemon-DhmwY8k4.js +5 -0
- package/dist/delivery-BmIYy9VQ.js +4 -0
- package/dist/delivery-DVHmv1IR.js +4 -0
- package/dist/delivery-DpMX0Yyc.js +95 -0
- package/dist/delivery-pWUPBp1F.js +95 -0
- package/dist/destructive-gate-D6vWOdEl.js +101 -0
- package/dist/destructive-gate-DZt71UZR.js +101 -0
- package/dist/developer-keys-CPWT7Q6S.js +8 -0
- package/dist/developer-keys-DrrcUqFa.js +127 -0
- package/dist/doctor-BvCe8BBk.js +230 -0
- package/dist/doctor-CxyPLYsJ.js +6 -0
- package/dist/engine-B0kLfRL0.js +256 -0
- package/dist/engine-BJUpRUOv.js +7 -0
- package/dist/engine-CEDSqXfw.js +256 -0
- package/dist/engine-Da4JMNpI.js +7 -0
- package/dist/env-resolve-17ekEU6p.js +10 -0
- package/dist/env-resolve-CiXbWYwe.js +10 -0
- package/dist/env-resolve-CmGWhWXJ.js +115 -0
- package/dist/env-resolve-Z2XF6leB.js +115 -0
- package/dist/extraction-tools-HOZstZ0y.js +91 -0
- package/dist/extraction-tools-m4lmAv7l.js +5 -0
- package/dist/form_data-Cz040rio.js +8657 -0
- package/dist/gmail-watch-setup-Du7DVV7S.js +40 -0
- package/dist/health-B-asI__D.js +6 -0
- package/dist/health-Ds2YlpTB.js +152 -0
- package/dist/heartbeat-engine-BYT5ayQH.js +83 -0
- package/dist/heartbeat-engine-Ut6pXBD6.js +83 -0
- package/dist/hub-9LaKnLjY.js +6 -0
- package/dist/hub-CfwUz9YW.js +515 -0
- package/dist/hub-D0XwdjM-.js +515 -0
- package/dist/hub-LiD5Iztb.js +6 -0
- package/dist/hyperclawbot-CBiDSKsa.js +505 -0
- package/dist/hyperclawbot-zvczQgKx.js +505 -0
- package/dist/inference-0mlFQqIm.js +922 -0
- package/dist/inference-BKVkBREb.js +6 -0
- package/dist/inference-DCXH4Q3x.js +922 -0
- package/dist/inference-SzqFe_nk.js +6 -0
- package/dist/knowledge-graph-DE5lSF02.js +131 -0
- package/dist/knowledge-graph-iBG76fvm.js +131 -0
- package/dist/loader-BkDi8MD9.js +400 -0
- package/dist/loader-CC45xGpC.js +4 -0
- package/dist/loader-CnEdOyjT.js +400 -0
- package/dist/loader-DI2qDRPC.js +4 -0
- package/dist/logger-Cp8wC7F8.js +83 -0
- package/dist/logger-ybOp7VOC.js +83 -0
- package/dist/manager-03ipO9R0.js +105 -0
- package/dist/manager-B2Gls5RG.js +218 -0
- package/dist/manager-BpDfbDjg.js +117 -0
- package/dist/manager-Bxl0sqlh.js +4 -0
- package/dist/manager-CWNSML5D.js +117 -0
- package/dist/manager-CrVDn6eN.js +6 -0
- package/dist/manager-FCgF1plu.js +218 -0
- package/dist/manager-SJe9gt-q.js +4 -0
- package/dist/manager-rgCsaWT1.js +40 -0
- package/dist/mcp-CfoSU4Uz.js +139 -0
- package/dist/mcp-loader-CvxRDtPC.js +94 -0
- package/dist/mcp-loader-DkRBsLpk.js +94 -0
- package/dist/memory-BlHL7JCO.js +4 -0
- package/dist/memory-DsS_eFvJ.js +270 -0
- package/dist/memory-auto-BkvtSFUw.js +5 -0
- package/dist/memory-auto-Bnz_-1wP.js +306 -0
- package/dist/memory-auto-CpQHZlEJ.js +306 -0
- package/dist/memory-auto-Z6LCf-iK.js +5 -0
- package/dist/memory-integration-cSYkZyEo.js +91 -0
- package/dist/memory-integration-g2vxwgoE.js +91 -0
- package/dist/moltbook-BtLDZTfM.js +81 -0
- package/dist/moltbook-Cl8cQfxJ.js +81 -0
- package/dist/node-Dw2Gi-cP.js +222 -0
- package/dist/nodes-registry-B8dmrlLv.js +52 -0
- package/dist/nodes-registry-C9dCFwjh.js +52 -0
- package/dist/oauth-flow-CeaaGAz0.js +150 -0
- package/dist/oauth-flow-DQPvMHRH.js +150 -0
- package/dist/oauth-provider-B4dzn56l.js +110 -0
- package/dist/oauth-provider-Uo4Nib_c.js +110 -0
- package/dist/observability-BV-Yx0V9.js +89 -0
- package/dist/observability-nZ3CBIxG.js +89 -0
- package/dist/onboard-0WoDxbv_.js +10 -0
- package/dist/onboard-BBBWcfhp.js +10 -0
- package/dist/onboard-BXNXCQp4.js +4070 -0
- package/dist/onboard-Bw28IRQ3.js +4070 -0
- package/dist/orchestrator-BovkM63z.js +6 -0
- package/dist/orchestrator-DSbpkP1X.js +189 -0
- package/dist/orchestrator-DmnEvMaL.js +189 -0
- package/dist/orchestrator-RI3bpqqc.js +6 -0
- package/dist/osint-B4_m3VHQ.js +277 -0
- package/dist/pairing-6iM27aD8.js +196 -0
- package/dist/pairing-dGoiGepK.js +4 -0
- package/dist/pc-access-CgCsYrpt.js +8 -0
- package/dist/pc-access-_iH2aorG.js +819 -0
- package/dist/pending-approval-BgNjjuI2.js +22 -0
- package/dist/pending-approval-CUXjysAo.js +22 -0
- package/dist/reminders-store-Drjed_-h.js +58 -0
- package/dist/renderer-BVQrd0_g.js +225 -0
- package/dist/rules-BE4GV6cV.js +103 -0
- package/dist/run-main.js +1639 -460
- package/dist/runner-CJFJUtPm.js +1271 -0
- package/dist/runner-DatMMYYE.js +1271 -0
- package/dist/sdk/index.js +2 -2
- package/dist/sdk/index.mjs +2 -2
- package/dist/security-BqNyT4ID.js +4 -0
- package/dist/security-tpgqPWWH.js +73 -0
- package/dist/server-Brl_HQUB.js +1255 -0
- package/dist/server-D4wVHiX9.js +4 -0
- package/dist/server-Dh3JlBFB.js +1255 -0
- package/dist/server-DhfipkwN.js +4 -0
- package/dist/session-store-BUiPz0Vv.js +5 -0
- package/dist/session-store-is4B6qmD.js +113 -0
- package/dist/sessions-tools-CbUTFe4i.js +5 -0
- package/dist/sessions-tools-CeqD7iil.js +95 -0
- package/dist/skill-loader-BaNLVmJy.js +7 -0
- package/dist/skill-loader-HgpF6Vqs.js +159 -0
- package/dist/skill-runtime-BXWd-Ktf.js +102 -0
- package/dist/skill-runtime-CJN24QPW.js +102 -0
- package/dist/skill-runtime-jgklm02e.js +5 -0
- package/dist/skill-runtime-w1ig_lcw.js +5 -0
- package/dist/src-Bhybpk1J.js +63 -0
- package/dist/src-BxPHKO5x.js +63 -0
- package/dist/src-DIc-L2IG.js +20 -0
- package/dist/src-DMJ4-uqk.js +458 -0
- package/dist/src-g_rNx5rh.js +458 -0
- package/dist/sub-agent-tools-CHQoHz9c.js +39 -0
- package/dist/sub-agent-tools-DHY-4WWM.js +39 -0
- package/dist/theme-DcxwcUgZ.js +180 -0
- package/dist/theme-cx0fkgWC.js +8 -0
- package/dist/tool-policy-CNT-mF2Z.js +189 -0
- package/dist/tool-policy-DZvF8xlQ.js +189 -0
- package/dist/tts-elevenlabs-BRosZv-f.js +61 -0
- package/dist/tts-elevenlabs-C06nUxMK.js +61 -0
- package/dist/update-check-C2Dz85wJ.js +81 -0
- package/dist/update-check-w4XuxVl7.js +81 -0
- package/dist/vision-BMmiIKy7.js +121 -0
- package/dist/vision-JOtOS1Br.js +121 -0
- package/dist/vision-tools-CB28ZCO_.js +5 -0
- package/dist/vision-tools-DVuYc17I.js +51 -0
- package/dist/vision-tools-U3YC4L-g.js +5 -0
- package/dist/vision-tools-vPPwQ-0N.js +51 -0
- package/dist/voice-transcription-B555DbWR.js +138 -0
- package/dist/voice-transcription-DBo5hXmu.js +138 -0
- package/dist/website-watch-tools-DFMrJU-R.js +139 -0
- package/dist/website-watch-tools-Du3W5sN7.js +5 -0
- package/package.json +1 -1
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-jS-bbMI5.js');
|
|
2
|
+
const chalk = require_chunk.__toESM(require("chalk"));
|
|
3
|
+
const fs_extra = require_chunk.__toESM(require("fs-extra"));
|
|
4
|
+
const path = require_chunk.__toESM(require("path"));
|
|
5
|
+
const os = require_chunk.__toESM(require("os"));
|
|
6
|
+
|
|
7
|
+
//#region packages/core/src/agent/memory-auto.ts
|
|
8
|
+
function isSensitive(text) {
|
|
9
|
+
return SENSITIVE_PATTERNS.some((p) => p.test(text));
|
|
10
|
+
}
|
|
11
|
+
function extractFactsLocally(turns) {
|
|
12
|
+
const facts = [];
|
|
13
|
+
const userMessages = turns.filter((t) => t.role === "user").map((t) => t.content);
|
|
14
|
+
for (const msg of userMessages) {
|
|
15
|
+
if (isSensitive(msg)) continue;
|
|
16
|
+
for (const pattern of PREFERENCE_PATTERNS) {
|
|
17
|
+
const m = msg.match(pattern);
|
|
18
|
+
if (m?.[1] && m[1].length > 4) facts.push({
|
|
19
|
+
fact: `User preference: ${m[1].trim()}`,
|
|
20
|
+
category: "preference",
|
|
21
|
+
confidence: "high"
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
for (const pattern of IDENTITY_PATTERNS) {
|
|
25
|
+
const m = msg.match(pattern);
|
|
26
|
+
if (m?.[1] && m[1].length > 2) facts.push({
|
|
27
|
+
fact: `About user: ${m[1].trim()}`,
|
|
28
|
+
category: "identity",
|
|
29
|
+
confidence: "high"
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
for (const pattern of GOAL_PATTERNS) {
|
|
33
|
+
const m = msg.match(pattern);
|
|
34
|
+
if (m?.[1] && m[1].length > 8) facts.push({
|
|
35
|
+
fact: `User goal: ${m[1].trim()}`,
|
|
36
|
+
category: "goal",
|
|
37
|
+
confidence: "medium"
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const seen = /* @__PURE__ */ new Set();
|
|
42
|
+
return facts.filter((f) => {
|
|
43
|
+
const key = f.fact.toLowerCase().slice(0, 40);
|
|
44
|
+
if (seen.has(key)) return false;
|
|
45
|
+
seen.add(key);
|
|
46
|
+
return true;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async function readMemory() {
|
|
50
|
+
try {
|
|
51
|
+
return await fs_extra.default.readFile(MEMORY_FILE, "utf8");
|
|
52
|
+
} catch {
|
|
53
|
+
return "";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function appendMemory(facts) {
|
|
57
|
+
if (facts.length === 0) return 0;
|
|
58
|
+
const existing = await readMemory();
|
|
59
|
+
const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
60
|
+
let added = 0;
|
|
61
|
+
const newLines = [];
|
|
62
|
+
const addedFacts = [];
|
|
63
|
+
for (const f of facts) {
|
|
64
|
+
if (existing.toLowerCase().includes(f.fact.toLowerCase().slice(0, 30))) continue;
|
|
65
|
+
newLines.push(`- ${today} [${f.category}] ${f.fact}`);
|
|
66
|
+
addedFacts.push(f);
|
|
67
|
+
added++;
|
|
68
|
+
}
|
|
69
|
+
if (newLines.length === 0) return 0;
|
|
70
|
+
await fs_extra.default.ensureDir(HC_DIR);
|
|
71
|
+
if (!await fs_extra.default.pathExists(MEMORY_FILE)) await fs_extra.default.writeFile(MEMORY_FILE, "# HyperClaw Memory\n\n");
|
|
72
|
+
await fs_extra.default.appendFile(MEMORY_FILE, "\n" + newLines.join("\n") + "\n");
|
|
73
|
+
try {
|
|
74
|
+
const { onMemoryAppended } = await Promise.resolve().then(() => require("./memory-integration-cSYkZyEo.js"));
|
|
75
|
+
await onMemoryAppended(addedFacts.map((f) => ({ fact: f.fact })));
|
|
76
|
+
} catch {}
|
|
77
|
+
return added;
|
|
78
|
+
}
|
|
79
|
+
async function saveMemoryDirect(text) {
|
|
80
|
+
await fs_extra.default.ensureDir(HC_DIR);
|
|
81
|
+
if (!await fs_extra.default.pathExists(MEMORY_FILE)) await fs_extra.default.writeFile(MEMORY_FILE, "# HyperClaw Memory\n\n");
|
|
82
|
+
const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
83
|
+
await fs_extra.default.appendFile(MEMORY_FILE, `\n- ${today} ${text}\n`);
|
|
84
|
+
try {
|
|
85
|
+
const { onMemoryAppended } = await Promise.resolve().then(() => require("./memory-integration-cSYkZyEo.js"));
|
|
86
|
+
await onMemoryAppended([{ fact: text }]);
|
|
87
|
+
} catch {}
|
|
88
|
+
}
|
|
89
|
+
async function extractFactsWithAI(turns, inferenceOpts) {
|
|
90
|
+
const totalText = turns.map((t) => t.content).join(" ");
|
|
91
|
+
if (totalText.length < 100) return [];
|
|
92
|
+
const localFacts = extractFactsLocally(turns);
|
|
93
|
+
const hasPersonalContext = /\b(I|my|me|mine|myself)\b/i.test(totalText);
|
|
94
|
+
if (!hasPersonalContext) return localFacts;
|
|
95
|
+
try {
|
|
96
|
+
const { InferenceEngine } = await Promise.resolve().then(() => require("./inference-BKVkBREb.js"));
|
|
97
|
+
const engine = new InferenceEngine({
|
|
98
|
+
model: inferenceOpts.model,
|
|
99
|
+
apiKey: inferenceOpts.apiKey,
|
|
100
|
+
provider: inferenceOpts.provider,
|
|
101
|
+
maxTokens: 512,
|
|
102
|
+
tools: []
|
|
103
|
+
});
|
|
104
|
+
const conversationSummary = turns.slice(-6).map((t) => `${t.role === "user" ? "User" : "AI"}: ${t.content.slice(0, 300)}`).join("\n");
|
|
105
|
+
const result = await engine.run([{
|
|
106
|
+
role: "user",
|
|
107
|
+
content: `Extract ONLY concrete, reusable facts about the USER from this conversation.
|
|
108
|
+
Skip: passwords, API keys, one-off questions, assistant responses.
|
|
109
|
+
Include: name, job, preferences, ongoing projects, locations, recurring tasks.
|
|
110
|
+
|
|
111
|
+
Conversation:
|
|
112
|
+
${conversationSummary}
|
|
113
|
+
|
|
114
|
+
Respond with a JSON array of strings, each a short fact starting with "User".
|
|
115
|
+
If nothing worth saving, respond: []
|
|
116
|
+
Example: ["User's name is Alex", "User prefers TypeScript over JavaScript", "User is building a SaaS app"]`
|
|
117
|
+
}]);
|
|
118
|
+
const clean = result.text.replace(/```json|```/g, "").trim();
|
|
119
|
+
const aiFactStrings = JSON.parse(clean);
|
|
120
|
+
const allFacts = [...localFacts];
|
|
121
|
+
const existingFactText = localFacts.map((f) => f.fact.toLowerCase());
|
|
122
|
+
for (const factStr of aiFactStrings) {
|
|
123
|
+
if (!factStr || factStr.length < 5) continue;
|
|
124
|
+
if (isSensitive(factStr)) continue;
|
|
125
|
+
if (existingFactText.some((e) => e.includes(factStr.toLowerCase().slice(0, 20)))) continue;
|
|
126
|
+
const cat = /prefer|like|hate|always|never|don't/i.test(factStr) ? "preference" : /goal|want|trying|working on|building/i.test(factStr) ? "goal" : /name|job|work|role|from|based/i.test(factStr) ? "identity" : "context";
|
|
127
|
+
allFacts.push({
|
|
128
|
+
fact: factStr,
|
|
129
|
+
category: cat,
|
|
130
|
+
confidence: "medium"
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return allFacts;
|
|
134
|
+
} catch {
|
|
135
|
+
return localFacts;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async function showMemory() {
|
|
139
|
+
const content = await readMemory();
|
|
140
|
+
if (!content.trim()) {
|
|
141
|
+
console.log(chalk.default.gray("\n 🧠 MEMORY.md is empty\n"));
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
console.log(chalk.default.bold.cyan("\n 🧠 MEMORY\n"));
|
|
145
|
+
const lines = content.split("\n").filter((l) => l.trim());
|
|
146
|
+
for (const line of lines) if (line.startsWith("#")) console.log(chalk.default.bold.white(line));
|
|
147
|
+
else if (line.startsWith("-")) {
|
|
148
|
+
const parts = line.match(/^-\s+(\S+)\s+\[(\w+)\]\s+(.+)$/);
|
|
149
|
+
if (parts) {
|
|
150
|
+
const [, date, cat, fact] = parts;
|
|
151
|
+
const catColor = cat === "preference" ? chalk.default.cyan : cat === "identity" ? chalk.default.yellow : cat === "goal" ? chalk.default.green : chalk.default.gray;
|
|
152
|
+
console.log(` ${chalk.default.gray(date)} ${catColor(`[${cat}]`)} ${fact}`);
|
|
153
|
+
} else console.log(` ${line}`);
|
|
154
|
+
}
|
|
155
|
+
console.log();
|
|
156
|
+
}
|
|
157
|
+
async function clearMemory() {
|
|
158
|
+
await fs_extra.default.writeFile(MEMORY_FILE, "# HyperClaw Memory\n\n");
|
|
159
|
+
console.log(chalk.default.green(" ✅ Memory cleared\n"));
|
|
160
|
+
}
|
|
161
|
+
async function searchMemory(query) {
|
|
162
|
+
const content = await readMemory();
|
|
163
|
+
const lines = content.split("\n").filter((l) => l.toLowerCase().includes(query.toLowerCase()));
|
|
164
|
+
if (lines.length === 0) {
|
|
165
|
+
console.log(chalk.default.gray(` No memories found for: "${query}"\n`));
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
console.log(chalk.default.bold.cyan(`\n 🔍 Memory search: "${query}"\n`));
|
|
169
|
+
for (const line of lines) console.log(` ${line}`);
|
|
170
|
+
console.log();
|
|
171
|
+
}
|
|
172
|
+
var HC_DIR, MEMORY_FILE, SOUL_FILE, PREFERENCE_PATTERNS, IDENTITY_PATTERNS, GOAL_PATTERNS, SENSITIVE_PATTERNS, AutoMemory;
|
|
173
|
+
var init_memory_auto = require_chunk.__esm({ "packages/core/src/agent/memory-auto.ts"() {
|
|
174
|
+
HC_DIR = path.default.join(os.default.homedir(), ".hyperclaw");
|
|
175
|
+
MEMORY_FILE = path.default.join(HC_DIR, "MEMORY.md");
|
|
176
|
+
SOUL_FILE = path.default.join(HC_DIR, "SOUL.md");
|
|
177
|
+
PREFERENCE_PATTERNS = [
|
|
178
|
+
/i (?:prefer|like|love|hate|dislike|always|never)\s+(.{5,80})/i,
|
|
179
|
+
/(?:my favorite|my preferred)\s+(.{5,80})/i,
|
|
180
|
+
/(?:please )?always\s+((?:use|do|write|respond|answer|format|reply)\s+.{5,60})/i,
|
|
181
|
+
/don'?t (?:ever )?(.{5,60})/i,
|
|
182
|
+
/(?:i want you to always)\s+(.{5,80})/i
|
|
183
|
+
];
|
|
184
|
+
IDENTITY_PATTERNS = [
|
|
185
|
+
/(?:my name is|i'?m called|call me)\s+([A-ZΑ-Ωa-zα-ω][a-zα-ω]{1,30})/i,
|
|
186
|
+
/i(?:'m| am) (?:a |an )?([A-Za-zΑ-Ωα-ω][\w\s]{3,40}?)(?:\.|,|$)/i,
|
|
187
|
+
/i work (?:at|for|as)\s+(.{5,60})/i,
|
|
188
|
+
/i(?:'m| am) (?:from|in|based in)\s+(.{3,40})/i,
|
|
189
|
+
/my (?:job|role|position|title) is\s+(.{5,60})/i
|
|
190
|
+
];
|
|
191
|
+
GOAL_PATTERNS = [
|
|
192
|
+
/i(?:'m| am) (?:working on|building|creating|developing)\s+(.{10,100})/i,
|
|
193
|
+
/i want to\s+(.{10,100})/i,
|
|
194
|
+
/my goal is (?:to\s+)?(.{10,100})/i,
|
|
195
|
+
/i'?m trying to\s+(.{10,100})/i
|
|
196
|
+
];
|
|
197
|
+
SENSITIVE_PATTERNS = [
|
|
198
|
+
/password/i,
|
|
199
|
+
/passwd/i,
|
|
200
|
+
/secret key/i,
|
|
201
|
+
/api.?key/i,
|
|
202
|
+
/credit.?card/i,
|
|
203
|
+
/\b\d{4}[\s-]\d{4}[\s-]\d{4}[\s-]\d{4}\b/,
|
|
204
|
+
/ssn|social security/i,
|
|
205
|
+
/\b\d{3}-\d{2}-\d{4}\b/
|
|
206
|
+
];
|
|
207
|
+
AutoMemory = class {
|
|
208
|
+
turns = [];
|
|
209
|
+
turnsSinceLastExtract = 0;
|
|
210
|
+
extractEveryNTurns;
|
|
211
|
+
useAI;
|
|
212
|
+
aiOpts;
|
|
213
|
+
constructor(opts = {}) {
|
|
214
|
+
this.extractEveryNTurns = opts.extractEveryNTurns ?? 4;
|
|
215
|
+
this.useAI = opts.useAI ?? false;
|
|
216
|
+
this.aiOpts = opts.aiOpts;
|
|
217
|
+
}
|
|
218
|
+
addTurn(role, content) {
|
|
219
|
+
this.turns.push({
|
|
220
|
+
role,
|
|
221
|
+
content,
|
|
222
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
223
|
+
});
|
|
224
|
+
this.turnsSinceLastExtract++;
|
|
225
|
+
}
|
|
226
|
+
async maybeExtract() {
|
|
227
|
+
if (this.turnsSinceLastExtract < this.extractEveryNTurns) return 0;
|
|
228
|
+
this.turnsSinceLastExtract = 0;
|
|
229
|
+
return this.extract();
|
|
230
|
+
}
|
|
231
|
+
async extract() {
|
|
232
|
+
const facts = this.useAI && this.aiOpts ? await extractFactsWithAI(this.turns, this.aiOpts) : extractFactsLocally(this.turns);
|
|
233
|
+
const saved = await appendMemory(facts);
|
|
234
|
+
if (saved > 0) console.log(chalk.default.gray(` 🧠 Auto-saved ${saved} fact${saved === 1 ? "" : "s"} to MEMORY.md`));
|
|
235
|
+
return saved;
|
|
236
|
+
}
|
|
237
|
+
clearTurns() {
|
|
238
|
+
this.turns = [];
|
|
239
|
+
}
|
|
240
|
+
getTurns() {
|
|
241
|
+
return [...this.turns];
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
} });
|
|
245
|
+
|
|
246
|
+
//#endregion
|
|
247
|
+
Object.defineProperty(exports, 'AutoMemory', {
|
|
248
|
+
enumerable: true,
|
|
249
|
+
get: function () {
|
|
250
|
+
return AutoMemory;
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
Object.defineProperty(exports, 'appendMemory', {
|
|
254
|
+
enumerable: true,
|
|
255
|
+
get: function () {
|
|
256
|
+
return appendMemory;
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
Object.defineProperty(exports, 'clearMemory', {
|
|
260
|
+
enumerable: true,
|
|
261
|
+
get: function () {
|
|
262
|
+
return clearMemory;
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
Object.defineProperty(exports, 'extractFactsLocally', {
|
|
266
|
+
enumerable: true,
|
|
267
|
+
get: function () {
|
|
268
|
+
return extractFactsLocally;
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
Object.defineProperty(exports, 'extractFactsWithAI', {
|
|
272
|
+
enumerable: true,
|
|
273
|
+
get: function () {
|
|
274
|
+
return extractFactsWithAI;
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
Object.defineProperty(exports, 'init_memory_auto', {
|
|
278
|
+
enumerable: true,
|
|
279
|
+
get: function () {
|
|
280
|
+
return init_memory_auto;
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
Object.defineProperty(exports, 'readMemory', {
|
|
284
|
+
enumerable: true,
|
|
285
|
+
get: function () {
|
|
286
|
+
return readMemory;
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
Object.defineProperty(exports, 'saveMemoryDirect', {
|
|
290
|
+
enumerable: true,
|
|
291
|
+
get: function () {
|
|
292
|
+
return saveMemoryDirect;
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
Object.defineProperty(exports, 'searchMemory', {
|
|
296
|
+
enumerable: true,
|
|
297
|
+
get: function () {
|
|
298
|
+
return searchMemory;
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
Object.defineProperty(exports, 'showMemory', {
|
|
302
|
+
enumerable: true,
|
|
303
|
+
get: function () {
|
|
304
|
+
return showMemory;
|
|
305
|
+
}
|
|
306
|
+
});
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-jS-bbMI5.js');
|
|
2
|
+
const chalk = require_chunk.__toESM(require("chalk"));
|
|
3
|
+
const fs_extra = require_chunk.__toESM(require("fs-extra"));
|
|
4
|
+
const path = require_chunk.__toESM(require("path"));
|
|
5
|
+
const os = require_chunk.__toESM(require("os"));
|
|
6
|
+
|
|
7
|
+
//#region packages/core/src/agent/memory-auto.ts
|
|
8
|
+
function isSensitive(text) {
|
|
9
|
+
return SENSITIVE_PATTERNS.some((p) => p.test(text));
|
|
10
|
+
}
|
|
11
|
+
function extractFactsLocally(turns) {
|
|
12
|
+
const facts = [];
|
|
13
|
+
const userMessages = turns.filter((t) => t.role === "user").map((t) => t.content);
|
|
14
|
+
for (const msg of userMessages) {
|
|
15
|
+
if (isSensitive(msg)) continue;
|
|
16
|
+
for (const pattern of PREFERENCE_PATTERNS) {
|
|
17
|
+
const m = msg.match(pattern);
|
|
18
|
+
if (m?.[1] && m[1].length > 4) facts.push({
|
|
19
|
+
fact: `User preference: ${m[1].trim()}`,
|
|
20
|
+
category: "preference",
|
|
21
|
+
confidence: "high"
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
for (const pattern of IDENTITY_PATTERNS) {
|
|
25
|
+
const m = msg.match(pattern);
|
|
26
|
+
if (m?.[1] && m[1].length > 2) facts.push({
|
|
27
|
+
fact: `About user: ${m[1].trim()}`,
|
|
28
|
+
category: "identity",
|
|
29
|
+
confidence: "high"
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
for (const pattern of GOAL_PATTERNS) {
|
|
33
|
+
const m = msg.match(pattern);
|
|
34
|
+
if (m?.[1] && m[1].length > 8) facts.push({
|
|
35
|
+
fact: `User goal: ${m[1].trim()}`,
|
|
36
|
+
category: "goal",
|
|
37
|
+
confidence: "medium"
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const seen = /* @__PURE__ */ new Set();
|
|
42
|
+
return facts.filter((f) => {
|
|
43
|
+
const key = f.fact.toLowerCase().slice(0, 40);
|
|
44
|
+
if (seen.has(key)) return false;
|
|
45
|
+
seen.add(key);
|
|
46
|
+
return true;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async function readMemory() {
|
|
50
|
+
try {
|
|
51
|
+
return await fs_extra.default.readFile(MEMORY_FILE, "utf8");
|
|
52
|
+
} catch {
|
|
53
|
+
return "";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function appendMemory(facts) {
|
|
57
|
+
if (facts.length === 0) return 0;
|
|
58
|
+
const existing = await readMemory();
|
|
59
|
+
const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
60
|
+
let added = 0;
|
|
61
|
+
const newLines = [];
|
|
62
|
+
const addedFacts = [];
|
|
63
|
+
for (const f of facts) {
|
|
64
|
+
if (existing.toLowerCase().includes(f.fact.toLowerCase().slice(0, 30))) continue;
|
|
65
|
+
newLines.push(`- ${today} [${f.category}] ${f.fact}`);
|
|
66
|
+
addedFacts.push(f);
|
|
67
|
+
added++;
|
|
68
|
+
}
|
|
69
|
+
if (newLines.length === 0) return 0;
|
|
70
|
+
await fs_extra.default.ensureDir(HC_DIR);
|
|
71
|
+
if (!await fs_extra.default.pathExists(MEMORY_FILE)) await fs_extra.default.writeFile(MEMORY_FILE, "# HyperClaw Memory\n\n");
|
|
72
|
+
await fs_extra.default.appendFile(MEMORY_FILE, "\n" + newLines.join("\n") + "\n");
|
|
73
|
+
try {
|
|
74
|
+
const { onMemoryAppended } = await Promise.resolve().then(() => require("./memory-integration-g2vxwgoE.js"));
|
|
75
|
+
await onMemoryAppended(addedFacts.map((f) => ({ fact: f.fact })));
|
|
76
|
+
} catch {}
|
|
77
|
+
return added;
|
|
78
|
+
}
|
|
79
|
+
async function saveMemoryDirect(text) {
|
|
80
|
+
await fs_extra.default.ensureDir(HC_DIR);
|
|
81
|
+
if (!await fs_extra.default.pathExists(MEMORY_FILE)) await fs_extra.default.writeFile(MEMORY_FILE, "# HyperClaw Memory\n\n");
|
|
82
|
+
const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
83
|
+
await fs_extra.default.appendFile(MEMORY_FILE, `\n- ${today} ${text}\n`);
|
|
84
|
+
try {
|
|
85
|
+
const { onMemoryAppended } = await Promise.resolve().then(() => require("./memory-integration-g2vxwgoE.js"));
|
|
86
|
+
await onMemoryAppended([{ fact: text }]);
|
|
87
|
+
} catch {}
|
|
88
|
+
}
|
|
89
|
+
async function extractFactsWithAI(turns, inferenceOpts) {
|
|
90
|
+
const totalText = turns.map((t) => t.content).join(" ");
|
|
91
|
+
if (totalText.length < 100) return [];
|
|
92
|
+
const localFacts = extractFactsLocally(turns);
|
|
93
|
+
const hasPersonalContext = /\b(I|my|me|mine|myself)\b/i.test(totalText);
|
|
94
|
+
if (!hasPersonalContext) return localFacts;
|
|
95
|
+
try {
|
|
96
|
+
const { InferenceEngine } = await Promise.resolve().then(() => require("./inference-SzqFe_nk.js"));
|
|
97
|
+
const engine = new InferenceEngine({
|
|
98
|
+
model: inferenceOpts.model,
|
|
99
|
+
apiKey: inferenceOpts.apiKey,
|
|
100
|
+
provider: inferenceOpts.provider,
|
|
101
|
+
maxTokens: 512,
|
|
102
|
+
tools: []
|
|
103
|
+
});
|
|
104
|
+
const conversationSummary = turns.slice(-6).map((t) => `${t.role === "user" ? "User" : "AI"}: ${t.content.slice(0, 300)}`).join("\n");
|
|
105
|
+
const result = await engine.run([{
|
|
106
|
+
role: "user",
|
|
107
|
+
content: `Extract ONLY concrete, reusable facts about the USER from this conversation.
|
|
108
|
+
Skip: passwords, API keys, one-off questions, assistant responses.
|
|
109
|
+
Include: name, job, preferences, ongoing projects, locations, recurring tasks.
|
|
110
|
+
|
|
111
|
+
Conversation:
|
|
112
|
+
${conversationSummary}
|
|
113
|
+
|
|
114
|
+
Respond with a JSON array of strings, each a short fact starting with "User".
|
|
115
|
+
If nothing worth saving, respond: []
|
|
116
|
+
Example: ["User's name is Alex", "User prefers TypeScript over JavaScript", "User is building a SaaS app"]`
|
|
117
|
+
}]);
|
|
118
|
+
const clean = result.text.replace(/```json|```/g, "").trim();
|
|
119
|
+
const aiFactStrings = JSON.parse(clean);
|
|
120
|
+
const allFacts = [...localFacts];
|
|
121
|
+
const existingFactText = localFacts.map((f) => f.fact.toLowerCase());
|
|
122
|
+
for (const factStr of aiFactStrings) {
|
|
123
|
+
if (!factStr || factStr.length < 5) continue;
|
|
124
|
+
if (isSensitive(factStr)) continue;
|
|
125
|
+
if (existingFactText.some((e) => e.includes(factStr.toLowerCase().slice(0, 20)))) continue;
|
|
126
|
+
const cat = /prefer|like|hate|always|never|don't/i.test(factStr) ? "preference" : /goal|want|trying|working on|building/i.test(factStr) ? "goal" : /name|job|work|role|from|based/i.test(factStr) ? "identity" : "context";
|
|
127
|
+
allFacts.push({
|
|
128
|
+
fact: factStr,
|
|
129
|
+
category: cat,
|
|
130
|
+
confidence: "medium"
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return allFacts;
|
|
134
|
+
} catch {
|
|
135
|
+
return localFacts;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async function showMemory() {
|
|
139
|
+
const content = await readMemory();
|
|
140
|
+
if (!content.trim()) {
|
|
141
|
+
console.log(chalk.default.gray("\n 🧠 MEMORY.md is empty\n"));
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
console.log(chalk.default.bold.cyan("\n 🧠 MEMORY\n"));
|
|
145
|
+
const lines = content.split("\n").filter((l) => l.trim());
|
|
146
|
+
for (const line of lines) if (line.startsWith("#")) console.log(chalk.default.bold.white(line));
|
|
147
|
+
else if (line.startsWith("-")) {
|
|
148
|
+
const parts = line.match(/^-\s+(\S+)\s+\[(\w+)\]\s+(.+)$/);
|
|
149
|
+
if (parts) {
|
|
150
|
+
const [, date, cat, fact] = parts;
|
|
151
|
+
const catColor = cat === "preference" ? chalk.default.cyan : cat === "identity" ? chalk.default.yellow : cat === "goal" ? chalk.default.green : chalk.default.gray;
|
|
152
|
+
console.log(` ${chalk.default.gray(date)} ${catColor(`[${cat}]`)} ${fact}`);
|
|
153
|
+
} else console.log(` ${line}`);
|
|
154
|
+
}
|
|
155
|
+
console.log();
|
|
156
|
+
}
|
|
157
|
+
async function clearMemory() {
|
|
158
|
+
await fs_extra.default.writeFile(MEMORY_FILE, "# HyperClaw Memory\n\n");
|
|
159
|
+
console.log(chalk.default.green(" ✅ Memory cleared\n"));
|
|
160
|
+
}
|
|
161
|
+
async function searchMemory(query) {
|
|
162
|
+
const content = await readMemory();
|
|
163
|
+
const lines = content.split("\n").filter((l) => l.toLowerCase().includes(query.toLowerCase()));
|
|
164
|
+
if (lines.length === 0) {
|
|
165
|
+
console.log(chalk.default.gray(` No memories found for: "${query}"\n`));
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
console.log(chalk.default.bold.cyan(`\n 🔍 Memory search: "${query}"\n`));
|
|
169
|
+
for (const line of lines) console.log(` ${line}`);
|
|
170
|
+
console.log();
|
|
171
|
+
}
|
|
172
|
+
var HC_DIR, MEMORY_FILE, SOUL_FILE, PREFERENCE_PATTERNS, IDENTITY_PATTERNS, GOAL_PATTERNS, SENSITIVE_PATTERNS, AutoMemory;
|
|
173
|
+
var init_memory_auto = require_chunk.__esm({ "packages/core/src/agent/memory-auto.ts"() {
|
|
174
|
+
HC_DIR = path.default.join(os.default.homedir(), ".hyperclaw");
|
|
175
|
+
MEMORY_FILE = path.default.join(HC_DIR, "MEMORY.md");
|
|
176
|
+
SOUL_FILE = path.default.join(HC_DIR, "SOUL.md");
|
|
177
|
+
PREFERENCE_PATTERNS = [
|
|
178
|
+
/i (?:prefer|like|love|hate|dislike|always|never)\s+(.{5,80})/i,
|
|
179
|
+
/(?:my favorite|my preferred)\s+(.{5,80})/i,
|
|
180
|
+
/(?:please )?always\s+((?:use|do|write|respond|answer|format|reply)\s+.{5,60})/i,
|
|
181
|
+
/don'?t (?:ever )?(.{5,60})/i,
|
|
182
|
+
/(?:i want you to always)\s+(.{5,80})/i
|
|
183
|
+
];
|
|
184
|
+
IDENTITY_PATTERNS = [
|
|
185
|
+
/(?:my name is|i'?m called|call me)\s+([A-ZΑ-Ωa-zα-ω][a-zα-ω]{1,30})/i,
|
|
186
|
+
/i(?:'m| am) (?:a |an )?([A-Za-zΑ-Ωα-ω][\w\s]{3,40}?)(?:\.|,|$)/i,
|
|
187
|
+
/i work (?:at|for|as)\s+(.{5,60})/i,
|
|
188
|
+
/i(?:'m| am) (?:from|in|based in)\s+(.{3,40})/i,
|
|
189
|
+
/my (?:job|role|position|title) is\s+(.{5,60})/i
|
|
190
|
+
];
|
|
191
|
+
GOAL_PATTERNS = [
|
|
192
|
+
/i(?:'m| am) (?:working on|building|creating|developing)\s+(.{10,100})/i,
|
|
193
|
+
/i want to\s+(.{10,100})/i,
|
|
194
|
+
/my goal is (?:to\s+)?(.{10,100})/i,
|
|
195
|
+
/i'?m trying to\s+(.{10,100})/i
|
|
196
|
+
];
|
|
197
|
+
SENSITIVE_PATTERNS = [
|
|
198
|
+
/password/i,
|
|
199
|
+
/passwd/i,
|
|
200
|
+
/secret key/i,
|
|
201
|
+
/api.?key/i,
|
|
202
|
+
/credit.?card/i,
|
|
203
|
+
/\b\d{4}[\s-]\d{4}[\s-]\d{4}[\s-]\d{4}\b/,
|
|
204
|
+
/ssn|social security/i,
|
|
205
|
+
/\b\d{3}-\d{2}-\d{4}\b/
|
|
206
|
+
];
|
|
207
|
+
AutoMemory = class {
|
|
208
|
+
turns = [];
|
|
209
|
+
turnsSinceLastExtract = 0;
|
|
210
|
+
extractEveryNTurns;
|
|
211
|
+
useAI;
|
|
212
|
+
aiOpts;
|
|
213
|
+
constructor(opts = {}) {
|
|
214
|
+
this.extractEveryNTurns = opts.extractEveryNTurns ?? 4;
|
|
215
|
+
this.useAI = opts.useAI ?? false;
|
|
216
|
+
this.aiOpts = opts.aiOpts;
|
|
217
|
+
}
|
|
218
|
+
addTurn(role, content) {
|
|
219
|
+
this.turns.push({
|
|
220
|
+
role,
|
|
221
|
+
content,
|
|
222
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
223
|
+
});
|
|
224
|
+
this.turnsSinceLastExtract++;
|
|
225
|
+
}
|
|
226
|
+
async maybeExtract() {
|
|
227
|
+
if (this.turnsSinceLastExtract < this.extractEveryNTurns) return 0;
|
|
228
|
+
this.turnsSinceLastExtract = 0;
|
|
229
|
+
return this.extract();
|
|
230
|
+
}
|
|
231
|
+
async extract() {
|
|
232
|
+
const facts = this.useAI && this.aiOpts ? await extractFactsWithAI(this.turns, this.aiOpts) : extractFactsLocally(this.turns);
|
|
233
|
+
const saved = await appendMemory(facts);
|
|
234
|
+
if (saved > 0) console.log(chalk.default.gray(` 🧠 Auto-saved ${saved} fact${saved === 1 ? "" : "s"} to MEMORY.md`));
|
|
235
|
+
return saved;
|
|
236
|
+
}
|
|
237
|
+
clearTurns() {
|
|
238
|
+
this.turns = [];
|
|
239
|
+
}
|
|
240
|
+
getTurns() {
|
|
241
|
+
return [...this.turns];
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
} });
|
|
245
|
+
|
|
246
|
+
//#endregion
|
|
247
|
+
Object.defineProperty(exports, 'AutoMemory', {
|
|
248
|
+
enumerable: true,
|
|
249
|
+
get: function () {
|
|
250
|
+
return AutoMemory;
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
Object.defineProperty(exports, 'appendMemory', {
|
|
254
|
+
enumerable: true,
|
|
255
|
+
get: function () {
|
|
256
|
+
return appendMemory;
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
Object.defineProperty(exports, 'clearMemory', {
|
|
260
|
+
enumerable: true,
|
|
261
|
+
get: function () {
|
|
262
|
+
return clearMemory;
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
Object.defineProperty(exports, 'extractFactsLocally', {
|
|
266
|
+
enumerable: true,
|
|
267
|
+
get: function () {
|
|
268
|
+
return extractFactsLocally;
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
Object.defineProperty(exports, 'extractFactsWithAI', {
|
|
272
|
+
enumerable: true,
|
|
273
|
+
get: function () {
|
|
274
|
+
return extractFactsWithAI;
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
Object.defineProperty(exports, 'init_memory_auto', {
|
|
278
|
+
enumerable: true,
|
|
279
|
+
get: function () {
|
|
280
|
+
return init_memory_auto;
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
Object.defineProperty(exports, 'readMemory', {
|
|
284
|
+
enumerable: true,
|
|
285
|
+
get: function () {
|
|
286
|
+
return readMemory;
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
Object.defineProperty(exports, 'saveMemoryDirect', {
|
|
290
|
+
enumerable: true,
|
|
291
|
+
get: function () {
|
|
292
|
+
return saveMemoryDirect;
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
Object.defineProperty(exports, 'searchMemory', {
|
|
296
|
+
enumerable: true,
|
|
297
|
+
get: function () {
|
|
298
|
+
return searchMemory;
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
Object.defineProperty(exports, 'showMemory', {
|
|
302
|
+
enumerable: true,
|
|
303
|
+
get: function () {
|
|
304
|
+
return showMemory;
|
|
305
|
+
}
|
|
306
|
+
});
|