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.
Files changed (148) hide show
  1. package/README.md +7 -4
  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-Dq5Obbp4.js +149 -0
  6. package/dist/audit-BYxPlnTQ.js +248 -0
  7. package/dist/bounty-tools-C6LyzxM-.js +211 -0
  8. package/dist/browser-tools-CQBSbIuO.js +5 -0
  9. package/dist/browser-tools-YQmwRLLM.js +179 -0
  10. package/dist/claw-tasks-BRLUvFRD.js +80 -0
  11. package/dist/connector-3HnyH8fn.js +167 -0
  12. package/dist/connector-6PMZo5Ky.js +189 -0
  13. package/dist/connector-B6eoF3DD.js +181 -0
  14. package/dist/connector-B9tLG8UZ.js +196 -0
  15. package/dist/connector-BOlqjXWP.js +182 -0
  16. package/dist/connector-BP8zsbP8.js +189 -0
  17. package/dist/connector-BPoSevxp.js +286 -0
  18. package/dist/connector-BRHj773i.js +163 -0
  19. package/dist/connector-BToxU-jV.js +267 -0
  20. package/dist/connector-BliDVsJQ.js +239 -0
  21. package/dist/connector-Bv6s9oP7.js +88 -0
  22. package/dist/connector-By5wWGTR.js +343 -0
  23. package/dist/connector-C1BaFFgN.js +213 -0
  24. package/dist/connector-CRRWY5Wv.js +167 -0
  25. package/dist/connector-CXPQVGyI.js +85 -0
  26. package/dist/connector-Cdk1CXKi.js +194 -0
  27. package/dist/connector-CwlgFgjx.js +181 -0
  28. package/dist/connector-DFchk6l7.js +178 -0
  29. package/dist/connector-DKw7tRAy.js +192 -0
  30. package/dist/connector-DRv1ahC_.js +2 -2
  31. package/dist/connector-DU63KW94.js +165 -0
  32. package/dist/connector-Dbvb1Cj9.js +280 -0
  33. package/dist/connector-DcZdQcgR.js +173 -0
  34. package/dist/connector-DxKL8VvZ.js +182 -0
  35. package/dist/connector-T_YdZtzv.js +162 -0
  36. package/dist/connector-i4gOS9xL.js +154 -0
  37. package/dist/connector-rHXE1ZD2.js +167 -0
  38. package/dist/connector-wdUXChwa.js +172 -0
  39. package/dist/cost-tracker-pVE15Yq4.js +103 -0
  40. package/dist/credentials-store-BvnMPJwi.js +4 -0
  41. package/dist/credentials-store-sb-TRLwR.js +77 -0
  42. package/dist/cron-tasks-BvDFNyiE.js +82 -0
  43. package/dist/delivery-D5Z98EVq.js +95 -0
  44. package/dist/delivery-DCOXhXEO.js +5 -0
  45. package/dist/destructive-gate-m-dWqUFg.js +101 -0
  46. package/dist/developer-keys-JaJK3T27.js +127 -0
  47. package/dist/developer-keys-kyqmtWK3.js +8 -0
  48. package/dist/doctor-3oi89QIc.js +175 -0
  49. package/dist/doctor-Cf1XSfp9.js +4 -0
  50. package/dist/engine-B4eMiTgl.js +7 -0
  51. package/dist/engine-B8M7dYul.js +7 -0
  52. package/dist/engine-BhT-1M9W.js +256 -0
  53. package/dist/engine-D49jnSd_.js +256 -0
  54. package/dist/env-resolve-DWOQ45jG.js +9 -0
  55. package/dist/env-resolve-szSWl0UF.js +94 -0
  56. package/dist/extraction-tools-D3qDFBJ1.js +91 -0
  57. package/dist/extraction-tools-DLr_AEwq.js +5 -0
  58. package/dist/form_data-B_hIUrxU.js +8657 -0
  59. package/dist/gmail-watch-setup-Czt8rXaX.js +40 -0
  60. package/dist/heartbeat-engine-CRqfPcFM.js +83 -0
  61. package/dist/hub-DTsqe5Bt.js +6 -0
  62. package/dist/hub-FrPTA33j.js +515 -0
  63. package/dist/hyperclawbot-D9KCtc4P.js +480 -0
  64. package/dist/hyperclawbot-Dw27pJo4.js +480 -0
  65. package/dist/inference-CTWJeX9Q.js +922 -0
  66. package/dist/inference-ix607p7k.js +6 -0
  67. package/dist/knowledge-graph-DqA-Fztl.js +131 -0
  68. package/dist/loader-CISCqBto.js +400 -0
  69. package/dist/loader-CYMQ8VOS.js +4 -0
  70. package/dist/logger-8tEtAd3y.js +83 -0
  71. package/dist/manager-CPjeRe-6.js +4 -0
  72. package/dist/manager-Cwzj7w5R.js +105 -0
  73. package/dist/manager-DLmZI-9R.js +6 -0
  74. package/dist/manager-DSGhn5i3.js +117 -0
  75. package/dist/manager-DgyF52mg.js +218 -0
  76. package/dist/manager-Dm8nrMFx.js +40 -0
  77. package/dist/mcp-B_9Ber63.js +139 -0
  78. package/dist/mcp-loader-DSM5UiFG.js +94 -0
  79. package/dist/mcp-loader-j5ZLLw5O.js +94 -0
  80. package/dist/memory-BI1kPkAN.js +4 -0
  81. package/dist/memory-BVFGkxxK.js +270 -0
  82. package/dist/memory-auto-Bc7euou4.js +306 -0
  83. package/dist/memory-auto-DPfbkMVt.js +5 -0
  84. package/dist/memory-integration-DZExqWr4.js +91 -0
  85. package/dist/moltbook-B6ZeGN5_.js +81 -0
  86. package/dist/node-pwL6O_KX.js +222 -0
  87. package/dist/nodes-registry-CsPm_-CJ.js +52 -0
  88. package/dist/oauth-flow-CpWlgvNB.js +150 -0
  89. package/dist/oauth-provider-BZb6qOw5.js +110 -0
  90. package/dist/observability-B43YvNQV.js +89 -0
  91. package/dist/onboard-Bd_wsYdi.js +4086 -0
  92. package/dist/onboard-CAN7x3me.js +3026 -0
  93. package/dist/onboard-DnegOHMh.js +4 -4
  94. package/dist/onboard-RYtDlYBw.js +9 -0
  95. package/dist/onboard-aTwlQs-4.js +9 -0
  96. package/dist/orchestrator-BSp2M5EU.js +189 -0
  97. package/dist/orchestrator-C7ko5tWa.js +6 -0
  98. package/dist/orchestrator-DfPkIx2Z.js +6 -0
  99. package/dist/orchestrator-NJQsmiBE.js +189 -0
  100. package/dist/pairing-DU0_J28n.js +87 -0
  101. package/dist/pairing-DWllbSbO.js +4 -0
  102. package/dist/pc-access-Ly-uA8mn.js +8 -0
  103. package/dist/pc-access-NxBvTrRj.js +819 -0
  104. package/dist/pending-approval-DIHvwwWS.js +22 -0
  105. package/dist/puppeteer-2o3QOwAy.js +2 -2
  106. package/dist/puppeteer-BYTMp3BI.js +2 -2
  107. package/dist/puppeteer-DQ45qwWk.js +2 -2
  108. package/dist/reminders-store-D79qdfN0.js +58 -0
  109. package/dist/renderer-pqlDRKbH.js +225 -0
  110. package/dist/rules-BooT_qFP.js +103 -0
  111. package/dist/run-main.js +289 -1031
  112. package/dist/runner-D1rjuMTJ.js +810 -0
  113. package/dist/sdk/index.js +2 -2
  114. package/dist/sdk/index.mjs +2 -2
  115. package/dist/security-C-5URby1.js +73 -0
  116. package/dist/security-_xve79aq.js +4 -0
  117. package/dist/server-0kgyELx4.js +1047 -0
  118. package/dist/server-BIuTobTC.js +4 -0
  119. package/dist/server-BRlCEjyT.js +1047 -0
  120. package/dist/server-CCI1hv45.js +2 -2
  121. package/dist/server-DU9POoWc.js +4 -0
  122. package/dist/session-store-CujxByI6.js +113 -0
  123. package/dist/session-store-qpJUg2M1.js +5 -0
  124. package/dist/sessions-tools-CB2qbwIk.js +5 -0
  125. package/dist/sessions-tools-DHMaTZIs.js +95 -0
  126. package/dist/skill-loader-BkceKkIg.js +7 -0
  127. package/dist/skill-loader-DhgIwK4J.js +159 -0
  128. package/dist/skill-runtime--LqxWrp5.js +102 -0
  129. package/dist/skill-runtime-C5l0Tgt-.js +5 -0
  130. package/dist/skill-runtime-DsXK_HYG.js +102 -0
  131. package/dist/skill-runtime-IVTiqrMR.js +5 -0
  132. package/dist/src-BEVLgaF1.js +63 -0
  133. package/dist/src-Bgu_OxTQ.js +458 -0
  134. package/dist/src-Bq-oKt7Z.js +458 -0
  135. package/dist/src-DWCUhnD4.js +20 -0
  136. package/dist/src-cfRTjFef.js +63 -0
  137. package/dist/sub-agent-tools-BD9DF8_g.js +39 -0
  138. package/dist/sub-agent-tools-V7b3T9_s.js +39 -0
  139. package/dist/tool-policy-DNvNRnve.js +189 -0
  140. package/dist/tts-elevenlabs-BUOGKL-k.js +61 -0
  141. package/dist/update-check-BD4qH7Am.js +81 -0
  142. package/dist/vision-DRq-f-Dj.js +121 -0
  143. package/dist/vision-tools-CFZEpQKm.js +5 -0
  144. package/dist/vision-tools-CQnBI9aa.js +51 -0
  145. package/dist/voice-transcription-CgWq54hn.js +138 -0
  146. package/dist/website-watch-tools-Bk_TnwuE.js +5 -0
  147. package/dist/website-watch-tools-DraMPxdl.js +139 -0
  148. 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-DZExqWr4.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-DZExqWr4.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-ix607p7k.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,5 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+ const require_memory_auto = require('./memory-auto-Bc7euou4.js');
3
+
4
+ require_memory_auto.init_memory_auto();
5
+ exports.AutoMemory = require_memory_auto.AutoMemory;
@@ -0,0 +1,91 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+ const require_paths = require('./paths-AIyBxIzm.js');
3
+ const require_paths$1 = require('./paths-DPovhojT.js');
4
+ const fs_extra = require_chunk.__toESM(require("fs-extra"));
5
+ const path = require_chunk.__toESM(require("path"));
6
+
7
+ //#region src/services/memory-integration.ts
8
+ async function getConfig() {
9
+ try {
10
+ const cfg = await fs_extra.default.readJson(require_paths.getConfigPath());
11
+ return cfg.memoryIntegration ?? {};
12
+ } catch {
13
+ return {};
14
+ }
15
+ }
16
+ /** Sync MEMORY.md to vault (Obsidian / Raycast / Hazel). */
17
+ async function syncMemoryToVault(vaultDir) {
18
+ const target = path.default.join(vaultDir, "HyperClaw-MEMORY.md");
19
+ if (await fs_extra.default.pathExists(MEMORY_FILE)) {
20
+ await fs_extra.default.ensureDir(vaultDir);
21
+ await fs_extra.default.copy(MEMORY_FILE, target, { overwrite: true });
22
+ }
23
+ }
24
+ /** Write daily note with session summary and new facts. */
25
+ async function writeDailyNote(vaultDir, date, content) {
26
+ const filename = `${date}.md`;
27
+ const target = path.default.join(vaultDir, "HyperClaw", filename);
28
+ await fs_extra.default.ensureDir(path.default.dirname(target));
29
+ const lines = [
30
+ `# HyperClaw — ${date}`,
31
+ "",
32
+ `> Auto-generated daily note from HyperClaw interactions.`,
33
+ ""
34
+ ];
35
+ if (content.sessionId && (content.turnCount ?? 0) > 0) {
36
+ lines.push(`## Session ${content.sessionId}`);
37
+ lines.push(`- Turns: ${content.turnCount}`);
38
+ lines.push("");
39
+ }
40
+ if (content.newFacts?.length) {
41
+ lines.push("## New memories");
42
+ for (const f of content.newFacts) lines.push(`- ${f}`);
43
+ lines.push("");
44
+ }
45
+ const body = lines.join("\n");
46
+ if (await fs_extra.default.pathExists(target)) await fs_extra.default.appendFile(target, "\n---\n" + body);
47
+ else await fs_extra.default.writeFile(target, body);
48
+ }
49
+ /** Append new fact to daily note (for incremental updates). */
50
+ async function appendToDailyNote(vaultDir, date, fact) {
51
+ const filename = `${date}.md`;
52
+ const target = path.default.join(vaultDir, "HyperClaw", filename);
53
+ await fs_extra.default.ensureDir(path.default.dirname(target));
54
+ const line = `- ${(/* @__PURE__ */ new Date()).toISOString().slice(11, 19)} ${fact}\n`;
55
+ if (!await fs_extra.default.pathExists(target)) await fs_extra.default.writeFile(target, `# HyperClaw — ${date}\n\n`);
56
+ await fs_extra.default.appendFile(target, line);
57
+ }
58
+ /** Called after MEMORY.md append — sync to vault + optionally add to daily note. */
59
+ async function onMemoryAppended(facts) {
60
+ const cfg = await getConfig();
61
+ const vaultDir = cfg.vaultDir;
62
+ if (!vaultDir) return;
63
+ if (cfg.syncOnAppend !== false) await syncMemoryToVault(vaultDir);
64
+ if (cfg.dailyNotes && facts.length > 0) {
65
+ const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
66
+ for (const f of facts) await appendToDailyNote(vaultDir, today, f.fact);
67
+ }
68
+ }
69
+ /** Called on session end — sync + write session summary to daily note. */
70
+ async function onSessionEnd(payload) {
71
+ const cfg = await getConfig();
72
+ const vaultDir = cfg.vaultDir;
73
+ if (!vaultDir || !cfg.dailyNotes) return;
74
+ await syncMemoryToVault(vaultDir);
75
+ const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
76
+ await writeDailyNote(vaultDir, today, {
77
+ sessionId: payload.sessionId,
78
+ turnCount: payload.turnCount,
79
+ newFacts: payload.newFacts
80
+ });
81
+ }
82
+ var MEMORY_FILE;
83
+ var init_memory_integration = require_chunk.__esm({ "src/services/memory-integration.ts"() {
84
+ require_paths$1.init_paths();
85
+ MEMORY_FILE = path.default.join(require_paths.getHyperClawDir(), "MEMORY.md");
86
+ } });
87
+
88
+ //#endregion
89
+ init_memory_integration();
90
+ exports.onMemoryAppended = onMemoryAppended;
91
+ exports.onSessionEnd = onSessionEnd;
@@ -0,0 +1,81 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+ const https = require_chunk.__toESM(require("https"));
3
+
4
+ //#region src/services/moltbook.ts
5
+ /** List feed (public or for connected agents). */
6
+ async function getFeed(limit = 20) {
7
+ if (!MOLTBOOK_API) return [];
8
+ try {
9
+ const body = await fetchJson(`${MOLTBOOK_API}/api/feed?limit=${limit}`);
10
+ return Array.isArray(body.posts) ? body.posts : [];
11
+ } catch {
12
+ return [];
13
+ }
14
+ }
15
+ /** Publish a post as the configured agent. */
16
+ async function publishPost(content, opts) {
17
+ if (!MOLTBOOK_API) return null;
18
+ try {
19
+ const body = await postJson(`${MOLTBOOK_API}/api/posts`, { content }, opts?.agentToken);
20
+ return body.post || null;
21
+ } catch {
22
+ return null;
23
+ }
24
+ }
25
+ function fetchJson(url) {
26
+ return new Promise((resolve, reject) => {
27
+ const u = new URL(url);
28
+ const req = https.default.get(url, (res) => {
29
+ let data = "";
30
+ res.on("data", (c) => data += c);
31
+ res.on("end", () => {
32
+ try {
33
+ resolve(JSON.parse(data));
34
+ } catch {
35
+ reject(new Error("Invalid JSON"));
36
+ }
37
+ });
38
+ });
39
+ req.on("error", reject);
40
+ });
41
+ }
42
+ function postJson(url, payload, token) {
43
+ return new Promise((resolve, reject) => {
44
+ const u = new URL(url);
45
+ const body = JSON.stringify(payload);
46
+ const opts = {
47
+ hostname: u.hostname,
48
+ port: 443,
49
+ path: u.pathname,
50
+ method: "POST",
51
+ headers: {
52
+ "Content-Type": "application/json",
53
+ "Content-Length": Buffer.byteLength(body),
54
+ ...token ? { Authorization: `Bearer ${token}` } : {}
55
+ }
56
+ };
57
+ const req = https.default.request(opts, (res) => {
58
+ let data = "";
59
+ res.on("data", (c) => data += c);
60
+ res.on("end", () => {
61
+ try {
62
+ resolve(JSON.parse(data || "{}"));
63
+ } catch {
64
+ resolve({});
65
+ }
66
+ });
67
+ });
68
+ req.on("error", reject);
69
+ req.write(body);
70
+ req.end();
71
+ });
72
+ }
73
+ var MOLTBOOK_API;
74
+ var init_moltbook = require_chunk.__esm({ "src/services/moltbook.ts"() {
75
+ MOLTBOOK_API = process.env.MOLTBOOK_API_URL || "";
76
+ } });
77
+
78
+ //#endregion
79
+ init_moltbook();
80
+ exports.getFeed = getFeed;
81
+ exports.publishPost = publishPost;