cf-claw 3.0.0

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 (273) hide show
  1. package/dist/agent.d.ts +15 -0
  2. package/dist/agent.d.ts.map +1 -0
  3. package/dist/agent.js +262 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/agents.d.ts +51 -0
  6. package/dist/agents.d.ts.map +1 -0
  7. package/dist/agents.js +478 -0
  8. package/dist/agents.js.map +1 -0
  9. package/dist/api/routes.d.ts +3 -0
  10. package/dist/api/routes.d.ts.map +1 -0
  11. package/dist/api/routes.js +491 -0
  12. package/dist/api/routes.js.map +1 -0
  13. package/dist/bot.d.ts +4 -0
  14. package/dist/bot.d.ts.map +1 -0
  15. package/dist/bot.js +295 -0
  16. package/dist/bot.js.map +1 -0
  17. package/dist/canvas.d.ts +37 -0
  18. package/dist/canvas.d.ts.map +1 -0
  19. package/dist/canvas.js +47 -0
  20. package/dist/canvas.js.map +1 -0
  21. package/dist/cli.d.ts +3 -0
  22. package/dist/cli.d.ts.map +1 -0
  23. package/dist/cli.js +202 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/commands.d.ts +6 -0
  26. package/dist/commands.d.ts.map +1 -0
  27. package/dist/commands.js +384 -0
  28. package/dist/commands.js.map +1 -0
  29. package/dist/components/TaskList.d.ts +7 -0
  30. package/dist/components/TaskList.d.ts.map +1 -0
  31. package/dist/components/TaskList.js +37 -0
  32. package/dist/components/TaskList.js.map +1 -0
  33. package/dist/config/encryption.d.ts +10 -0
  34. package/dist/config/encryption.d.ts.map +1 -0
  35. package/dist/config/encryption.js +111 -0
  36. package/dist/config/encryption.js.map +1 -0
  37. package/dist/config/json-config.d.ts +114 -0
  38. package/dist/config/json-config.d.ts.map +1 -0
  39. package/dist/config/json-config.js +388 -0
  40. package/dist/config/json-config.js.map +1 -0
  41. package/dist/config.d.ts +51 -0
  42. package/dist/config.d.ts.map +1 -0
  43. package/dist/config.js +137 -0
  44. package/dist/config.js.map +1 -0
  45. package/dist/context/pruning.d.ts +30 -0
  46. package/dist/context/pruning.d.ts.map +1 -0
  47. package/dist/context/pruning.js +132 -0
  48. package/dist/context/pruning.js.map +1 -0
  49. package/dist/dashboard/404/index.html +1 -0
  50. package/dist/dashboard/404.html +1 -0
  51. package/dist/dashboard/_next/static/chunks/117-c657912d4a6fa056.js +2 -0
  52. package/dist/dashboard/_next/static/chunks/191-a6922264096cb3ad.js +11 -0
  53. package/dist/dashboard/_next/static/chunks/343-71498a8257bc1e81.js +1 -0
  54. package/dist/dashboard/_next/static/chunks/app/_not-found/page-15cbe4395e02a084.js +1 -0
  55. package/dist/dashboard/_next/static/chunks/app/layout-191efbc962809bb4.js +1 -0
  56. package/dist/dashboard/_next/static/chunks/app/manual/page-3c401ecf89979cd7.js +1 -0
  57. package/dist/dashboard/_next/static/chunks/app/page-dff55e58941a3c4d.js +1 -0
  58. package/dist/dashboard/_next/static/chunks/fd9d1056-9583fa19bc194043.js +1 -0
  59. package/dist/dashboard/_next/static/chunks/framework-f66176bb897dc684.js +1 -0
  60. package/dist/dashboard/_next/static/chunks/main-2461f93106bcf687.js +1 -0
  61. package/dist/dashboard/_next/static/chunks/main-app-89f5ec28b3bb0e7f.js +1 -0
  62. package/dist/dashboard/_next/static/chunks/pages/_app-72b849fbd24ac258.js +1 -0
  63. package/dist/dashboard/_next/static/chunks/pages/_error-7ba65e1336b92748.js +1 -0
  64. package/dist/dashboard/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  65. package/dist/dashboard/_next/static/chunks/webpack-616e068a201ad621.js +1 -0
  66. package/dist/dashboard/_next/static/css/baff0f221c10680b.css +3 -0
  67. package/dist/dashboard/_next/static/pyqPyo6dkz4uTWdfdFAOJ/_buildManifest.js +1 -0
  68. package/dist/dashboard/_next/static/pyqPyo6dkz4uTWdfdFAOJ/_ssgManifest.js +1 -0
  69. package/dist/dashboard/index.html +1 -0
  70. package/dist/dashboard/index.txt +7 -0
  71. package/dist/dashboard/manual/index.html +1 -0
  72. package/dist/dashboard/manual/index.txt +7 -0
  73. package/dist/documents.d.ts +20 -0
  74. package/dist/documents.d.ts.map +1 -0
  75. package/dist/documents.js +227 -0
  76. package/dist/documents.js.map +1 -0
  77. package/dist/embeddings.d.ts +15 -0
  78. package/dist/embeddings.d.ts.map +1 -0
  79. package/dist/embeddings.js +40 -0
  80. package/dist/embeddings.js.map +1 -0
  81. package/dist/factory.d.ts +72 -0
  82. package/dist/factory.d.ts.map +1 -0
  83. package/dist/factory.js +2010 -0
  84. package/dist/factory.js.map +1 -0
  85. package/dist/groups.d.ts +13 -0
  86. package/dist/groups.d.ts.map +1 -0
  87. package/dist/groups.js +42 -0
  88. package/dist/groups.js.map +1 -0
  89. package/dist/index.d.ts +2 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +223 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/lib/taskStorage.d.ts +4 -0
  94. package/dist/lib/taskStorage.d.ts.map +1 -0
  95. package/dist/lib/taskStorage.js +28 -0
  96. package/dist/lib/taskStorage.js.map +1 -0
  97. package/dist/llm/anthropic.d.ts +13 -0
  98. package/dist/llm/anthropic.d.ts.map +1 -0
  99. package/dist/llm/anthropic.js +96 -0
  100. package/dist/llm/anthropic.js.map +1 -0
  101. package/dist/llm/failover.d.ts +13 -0
  102. package/dist/llm/failover.d.ts.map +1 -0
  103. package/dist/llm/failover.js +42 -0
  104. package/dist/llm/failover.js.map +1 -0
  105. package/dist/llm/google.d.ts +13 -0
  106. package/dist/llm/google.d.ts.map +1 -0
  107. package/dist/llm/google.js +112 -0
  108. package/dist/llm/google.js.map +1 -0
  109. package/dist/llm/groq.d.ts +8 -0
  110. package/dist/llm/groq.d.ts.map +1 -0
  111. package/dist/llm/groq.js +13 -0
  112. package/dist/llm/groq.js.map +1 -0
  113. package/dist/llm/index.d.ts +11 -0
  114. package/dist/llm/index.d.ts.map +1 -0
  115. package/dist/llm/index.js +10 -0
  116. package/dist/llm/index.js.map +1 -0
  117. package/dist/llm/ollama.d.ts +9 -0
  118. package/dist/llm/ollama.d.ts.map +1 -0
  119. package/dist/llm/ollama.js +27 -0
  120. package/dist/llm/ollama.js.map +1 -0
  121. package/dist/llm/openai-compat.d.ts +17 -0
  122. package/dist/llm/openai-compat.d.ts.map +1 -0
  123. package/dist/llm/openai-compat.js +69 -0
  124. package/dist/llm/openai-compat.js.map +1 -0
  125. package/dist/llm/openrouter.d.ts +8 -0
  126. package/dist/llm/openrouter.d.ts.map +1 -0
  127. package/dist/llm/openrouter.js +20 -0
  128. package/dist/llm/openrouter.js.map +1 -0
  129. package/dist/llm/provider.d.ts +41 -0
  130. package/dist/llm/provider.d.ts.map +1 -0
  131. package/dist/llm/provider.js +2 -0
  132. package/dist/llm/provider.js.map +1 -0
  133. package/dist/llm/registry.d.ts +10 -0
  134. package/dist/llm/registry.d.ts.map +1 -0
  135. package/dist/llm/registry.js +90 -0
  136. package/dist/llm/registry.js.map +1 -0
  137. package/dist/llm/thinking.d.ts +7 -0
  138. package/dist/llm/thinking.d.ts.map +1 -0
  139. package/dist/llm/thinking.js +34 -0
  140. package/dist/llm/thinking.js.map +1 -0
  141. package/dist/llm.d.ts +17 -0
  142. package/dist/llm.d.ts.map +1 -0
  143. package/dist/llm.js +184 -0
  144. package/dist/llm.js.map +1 -0
  145. package/dist/logs.d.ts +11 -0
  146. package/dist/logs.d.ts.map +1 -0
  147. package/dist/logs.js +54 -0
  148. package/dist/logs.js.map +1 -0
  149. package/dist/memory/knowledge-graph.d.ts +34 -0
  150. package/dist/memory/knowledge-graph.d.ts.map +1 -0
  151. package/dist/memory/knowledge-graph.js +137 -0
  152. package/dist/memory/knowledge-graph.js.map +1 -0
  153. package/dist/memory.d.ts +73 -0
  154. package/dist/memory.d.ts.map +1 -0
  155. package/dist/memory.js +320 -0
  156. package/dist/memory.js.map +1 -0
  157. package/dist/mesh.d.ts +18 -0
  158. package/dist/mesh.d.ts.map +1 -0
  159. package/dist/mesh.js +120 -0
  160. package/dist/mesh.js.map +1 -0
  161. package/dist/paths.d.ts +11 -0
  162. package/dist/paths.d.ts.map +1 -0
  163. package/dist/paths.js +51 -0
  164. package/dist/paths.js.map +1 -0
  165. package/dist/proactive/heartbeat.d.ts +4 -0
  166. package/dist/proactive/heartbeat.d.ts.map +1 -0
  167. package/dist/proactive/heartbeat.js +56 -0
  168. package/dist/proactive/heartbeat.js.map +1 -0
  169. package/dist/proactive/recap.d.ts +12 -0
  170. package/dist/proactive/recap.d.ts.map +1 -0
  171. package/dist/proactive/recap.js +90 -0
  172. package/dist/proactive/recap.js.map +1 -0
  173. package/dist/proactive/recommendations.d.ts +11 -0
  174. package/dist/proactive/recommendations.d.ts.map +1 -0
  175. package/dist/proactive/recommendations.js +92 -0
  176. package/dist/proactive/recommendations.js.map +1 -0
  177. package/dist/projects.d.ts +44 -0
  178. package/dist/projects.d.ts.map +1 -0
  179. package/dist/projects.js +101 -0
  180. package/dist/projects.js.map +1 -0
  181. package/dist/scheduler/index.d.ts +17 -0
  182. package/dist/scheduler/index.d.ts.map +1 -0
  183. package/dist/scheduler/index.js +116 -0
  184. package/dist/scheduler/index.js.map +1 -0
  185. package/dist/sessions.d.ts +19 -0
  186. package/dist/sessions.d.ts.map +1 -0
  187. package/dist/sessions.js +176 -0
  188. package/dist/sessions.js.map +1 -0
  189. package/dist/skills/index.d.ts +14 -0
  190. package/dist/skills/index.d.ts.map +1 -0
  191. package/dist/skills/index.js +126 -0
  192. package/dist/skills/index.js.map +1 -0
  193. package/dist/swarm.d.ts +18 -0
  194. package/dist/swarm.d.ts.map +1 -0
  195. package/dist/swarm.js +146 -0
  196. package/dist/swarm.js.map +1 -0
  197. package/dist/taskListWidget.d.ts +76 -0
  198. package/dist/taskListWidget.d.ts.map +1 -0
  199. package/dist/taskListWidget.js +312 -0
  200. package/dist/taskListWidget.js.map +1 -0
  201. package/dist/tools/browser.d.ts +5 -0
  202. package/dist/tools/browser.d.ts.map +1 -0
  203. package/dist/tools/browser.js +104 -0
  204. package/dist/tools/browser.js.map +1 -0
  205. package/dist/tools/config-tools.d.ts +4 -0
  206. package/dist/tools/config-tools.d.ts.map +1 -0
  207. package/dist/tools/config-tools.js +154 -0
  208. package/dist/tools/config-tools.js.map +1 -0
  209. package/dist/tools/files.d.ts +3 -0
  210. package/dist/tools/files.d.ts.map +1 -0
  211. package/dist/tools/files.js +208 -0
  212. package/dist/tools/files.js.map +1 -0
  213. package/dist/tools/index.d.ts +11 -0
  214. package/dist/tools/index.d.ts.map +1 -0
  215. package/dist/tools/index.js +1109 -0
  216. package/dist/tools/index.js.map +1 -0
  217. package/dist/tools/mcp-bridge.d.ts +5 -0
  218. package/dist/tools/mcp-bridge.d.ts.map +1 -0
  219. package/dist/tools/mcp-bridge.js +200 -0
  220. package/dist/tools/mcp-bridge.js.map +1 -0
  221. package/dist/tools/shell.d.ts +8 -0
  222. package/dist/tools/shell.d.ts.map +1 -0
  223. package/dist/tools/shell.js +78 -0
  224. package/dist/tools/shell.js.map +1 -0
  225. package/dist/tools/skills-manage.d.ts +25 -0
  226. package/dist/tools/skills-manage.d.ts.map +1 -0
  227. package/dist/tools/skills-manage.js +155 -0
  228. package/dist/tools/skills-manage.js.map +1 -0
  229. package/dist/tools/web-search.d.ts +4 -0
  230. package/dist/tools/web-search.d.ts.map +1 -0
  231. package/dist/tools/web-search.js +60 -0
  232. package/dist/tools/web-search.js.map +1 -0
  233. package/dist/tts.d.ts +6 -0
  234. package/dist/tts.d.ts.map +1 -0
  235. package/dist/tts.js +42 -0
  236. package/dist/tts.js.map +1 -0
  237. package/dist/types/task.d.ts +7 -0
  238. package/dist/types/task.d.ts.map +1 -0
  239. package/dist/types/task.js +2 -0
  240. package/dist/types/task.js.map +1 -0
  241. package/dist/typing.d.ts +18 -0
  242. package/dist/typing.d.ts.map +1 -0
  243. package/dist/typing.js +63 -0
  244. package/dist/typing.js.map +1 -0
  245. package/dist/usage.d.ts +28 -0
  246. package/dist/usage.d.ts.map +1 -0
  247. package/dist/usage.js +69 -0
  248. package/dist/usage.js.map +1 -0
  249. package/dist/voice.d.ts +6 -0
  250. package/dist/voice.d.ts.map +1 -0
  251. package/dist/voice.js +47 -0
  252. package/dist/voice.js.map +1 -0
  253. package/dist/webchat/index.d.ts +3 -0
  254. package/dist/webchat/index.d.ts.map +1 -0
  255. package/dist/webchat/index.js +3 -0
  256. package/dist/webchat/index.js.map +1 -0
  257. package/dist/webchat/public/index.html +344 -0
  258. package/dist/webchat/public/public/index.html +344 -0
  259. package/dist/webchat/public/public/task-list-widget.js +410 -0
  260. package/dist/webchat/public/task-list-widget.js +410 -0
  261. package/dist/webchat/server.d.ts +3 -0
  262. package/dist/webchat/server.d.ts.map +1 -0
  263. package/dist/webchat/server.js +80 -0
  264. package/dist/webchat/server.js.map +1 -0
  265. package/dist/webchat/ws.d.ts +4 -0
  266. package/dist/webchat/ws.d.ts.map +1 -0
  267. package/dist/webchat/ws.js +232 -0
  268. package/dist/webchat/ws.js.map +1 -0
  269. package/dist/webhooks/index.d.ts +14 -0
  270. package/dist/webhooks/index.d.ts.map +1 -0
  271. package/dist/webhooks/index.js +86 -0
  272. package/dist/webhooks/index.js.map +1 -0
  273. package/package.json +53 -0
@@ -0,0 +1,384 @@
1
+ import { setActiveModel, getActiveModel, getAvailableModels, setThinkingLevel, getThinkingLevel } from "./llm/index.js";
2
+ import { compactContext, resetSession, listChatSessions, getChatSession } from "./context/pruning.js";
3
+ import { listLoadedSkills } from "./skills/index.js";
4
+ import { getUsageSummary } from "./usage.js";
5
+ import { setActiveAgent, getActiveAgent, listAgents, getTeams } from "./agents.js";
6
+ import { getSessionMessages } from "./memory.js";
7
+ import { listFactoryProjects, getFactoryProject, getFactoryTasks, setProjectStatus, forceRetryTask, restartFactoryProject, wasProjectAutoNormalized, getAgentPipelineRoles, switchProjectProfile, listFactoryProfiles, } from "./factory.js";
8
+ export function handleCommand(message) {
9
+ const trimmed = message.trim();
10
+ if (!trimmed.startsWith("/"))
11
+ return null;
12
+ const parts = trimmed.split(/\s+/);
13
+ const command = parts[0].toLowerCase();
14
+ const args = parts.slice(1).join(" ").trim();
15
+ switch (command) {
16
+ case "/model":
17
+ return handleModel(args);
18
+ case "/models":
19
+ return handleModels();
20
+ case "/think":
21
+ return handleThink(args);
22
+ case "/compact":
23
+ return handleCompact();
24
+ case "/skills":
25
+ return handleSkills();
26
+ case "/status":
27
+ return handleStatus();
28
+ case "/new":
29
+ return handleNew();
30
+ case "/sessions":
31
+ return handleSessions();
32
+ case "/session":
33
+ return handleSession(args);
34
+ case "/usage":
35
+ return handleUsage(args);
36
+ case "/agent":
37
+ case "/agents":
38
+ return handleAgent(args);
39
+ case "/factory":
40
+ return handleFactory(args);
41
+ default:
42
+ return null;
43
+ }
44
+ }
45
+ function handleModel(args) {
46
+ if (!args) {
47
+ return { text: `Current model: ${getActiveModel()}\nUse /model <name> to switch.`, handled: true };
48
+ }
49
+ try {
50
+ setActiveModel(args);
51
+ return { text: `✅ Model switched to: ${args}`, handled: true };
52
+ }
53
+ catch (err) {
54
+ const available = getAvailableModels();
55
+ return {
56
+ text: `⚠️ Unknown model "${args}".\nAvailable: ${available.join(", ")}`,
57
+ handled: true,
58
+ };
59
+ }
60
+ }
61
+ function handleModels() {
62
+ const available = getAvailableModels();
63
+ const active = getActiveModel();
64
+ const lines = available.map((m) => m === active ? `► ${m} (active)` : ` ${m}`);
65
+ return { text: `Available models:\n${lines.join("\n")}`, handled: true };
66
+ }
67
+ function handleThink(args) {
68
+ const levels = ["off", "low", "medium", "high"];
69
+ if (!args) {
70
+ const current = getThinkingLevel();
71
+ return { text: `Thinking level: ${current}\nUse /think <off|low|medium|high>`, handled: true };
72
+ }
73
+ const normalized = args.toLowerCase();
74
+ if (!levels.includes(normalized)) {
75
+ return { text: `⚠️ Invalid level "${args}". Use: off, low, medium, high`, handled: true };
76
+ }
77
+ setThinkingLevel(normalized);
78
+ return { text: `🧠 Thinking level set to: ${normalized}`, handled: true };
79
+ }
80
+ function handleCompact() {
81
+ const result = compactContext();
82
+ return { text: result, handled: true };
83
+ }
84
+ function handleSkills() {
85
+ const skills = listLoadedSkills();
86
+ if (skills.length === 0) {
87
+ return { text: "No skills loaded. Add .md files to the skills/ directory.", handled: true };
88
+ }
89
+ const lines = skills.map((s) => `- **${s.name}**: ${s.description}`);
90
+ return { text: `Loaded skills:\n${lines.join("\n")}`, handled: true };
91
+ }
92
+ function handleStatus() {
93
+ const active = getActiveModel();
94
+ const thinking = getThinkingLevel();
95
+ const uptime = process.uptime();
96
+ const hours = Math.floor(uptime / 3600);
97
+ const mins = Math.floor((uptime % 3600) / 60);
98
+ const skills = listLoadedSkills();
99
+ const lines = [
100
+ `🟢 **CF Claw Status**`,
101
+ `Model: ${active}`,
102
+ `Thinking: ${thinking}`,
103
+ `Uptime: ${hours}h ${mins}m`,
104
+ `Skills: ${skills.length}`,
105
+ ];
106
+ return { text: lines.join("\n"), handled: true };
107
+ }
108
+ function handleNew() {
109
+ const archived = resetSession();
110
+ if (archived) {
111
+ return { text: `✅ Session #${archived.sessionId} arkiverad (${archived.messageCount} meddelanden). Ny session startad.`, handled: true };
112
+ }
113
+ return { text: "✅ New session started. Context cleared.", handled: true };
114
+ }
115
+ function handleSessions() {
116
+ const sessions = listChatSessions();
117
+ if (sessions.length === 0) {
118
+ return { text: "Inga tidigare sessioner.", handled: true };
119
+ }
120
+ const lines = sessions.map((s) => {
121
+ const ended = s.ended_at ? new Date(s.ended_at).toLocaleString("sv-SE") : "pågående";
122
+ const summary = s.summary ? ` — ${s.summary.substring(0, 60)}${s.summary.length > 60 ? "…" : ""}` : "";
123
+ return `#${s.id} (${s.message_count} msg) ${new Date(s.started_at).toLocaleString("sv-SE")} → ${ended}${summary}`;
124
+ });
125
+ return { text: `📋 **Sessioner**\n\n${lines.join("\n")}`, handled: true };
126
+ }
127
+ function handleSession(args) {
128
+ if (!args) {
129
+ return { text: "Använd: /session <id>", handled: true };
130
+ }
131
+ const id = parseInt(args, 10);
132
+ if (isNaN(id)) {
133
+ return { text: "⚠️ Ogiltigt session-ID.", handled: true };
134
+ }
135
+ const session = getChatSession(id);
136
+ if (!session) {
137
+ return { text: `⚠️ Session #${id} hittades inte.`, handled: true };
138
+ }
139
+ const messages = getSessionMessages(id);
140
+ if (messages.length === 0) {
141
+ return { text: `**Session #${id}** (0 meddelanden)`, handled: true };
142
+ }
143
+ const header = [
144
+ `📋 **Session #${id}**`,
145
+ `Start: ${new Date(session.started_at).toLocaleString("sv-SE")}`,
146
+ session.ended_at ? `Slut: ${new Date(session.ended_at).toLocaleString("sv-SE")}` : "Status: pågående",
147
+ `Meddelanden: ${session.message_count}`,
148
+ session.summary ? `Sammanfattning: ${session.summary}` : "",
149
+ "",
150
+ ].filter(Boolean).join("\n");
151
+ const history = messages
152
+ .map((m) => {
153
+ const label = m.role === "user" ? "👤" : "🤖";
154
+ const content = m.content.length > 200 ? m.content.substring(0, 200) + "…" : m.content;
155
+ return `${label} ${content}`;
156
+ })
157
+ .join("\n");
158
+ return { text: `${header}${history}`, handled: true };
159
+ }
160
+ function handleUsage(args) {
161
+ const hours = parseInt(args, 10) || 24;
162
+ const summary = getUsageSummary(hours);
163
+ const lines = [
164
+ `📊 **Usage (last ${hours}h)**`,
165
+ `Calls: ${summary.totalCalls}`,
166
+ `Tokens: ${summary.totalTokens.toLocaleString()}`,
167
+ `Cost: $${summary.totalCost.toFixed(4)}`,
168
+ `Avg latency: ${summary.avgLatencyMs}ms`,
169
+ ];
170
+ if (summary.byModel.length > 0) {
171
+ lines.push("");
172
+ lines.push("**By model:**");
173
+ for (const m of summary.byModel) {
174
+ lines.push(` ${m.model}: ${m.calls} calls, ${m.tokens.toLocaleString()} tokens, $${m.cost.toFixed(4)}`);
175
+ }
176
+ }
177
+ return { text: lines.join("\n"), handled: true };
178
+ }
179
+ function handleAgent(args) {
180
+ if (!args || args === "list") {
181
+ const agents = listAgents();
182
+ const teams = getTeams();
183
+ const lines = ["📋 **Available Agents**\n"];
184
+ for (const team of teams) {
185
+ const teamAgents = agents.filter((a) => a.team === team);
186
+ if (teamAgents.length === 0)
187
+ continue;
188
+ lines.push(`**${team}:**`);
189
+ for (const a of teamAgents) {
190
+ const active = getActiveAgent() === a.name ? " ← active" : "";
191
+ lines.push(` ${a.name} — ${a.role}${active}`);
192
+ }
193
+ lines.push("");
194
+ }
195
+ return { text: lines.join("\n").trim(), handled: true };
196
+ }
197
+ if (args === "off") {
198
+ setActiveAgent(null);
199
+ return { text: "✅ Returned to default mode.", handled: true };
200
+ }
201
+ const agentName = args.toLowerCase();
202
+ const agents = listAgents();
203
+ const match = agents.find((a) => a.name === agentName);
204
+ if (!match) {
205
+ return { text: `⚠️ Agent "${args}" not found. Use /agent list to see available agents.`, handled: true };
206
+ }
207
+ setActiveAgent(match.name);
208
+ return { text: `✅ Active agent: **${match.name}** (${match.role})\n${match.description}`, handled: true };
209
+ }
210
+ function handleFactory(args) {
211
+ const idRestartMatch = args.match(/^(\d+)\s+restart(?:\s+(full))?$/i);
212
+ if (idRestartMatch) {
213
+ const projectId = parseInt(idRestartMatch[1], 10);
214
+ const mode = idRestartMatch[2] ? "full" : "partial";
215
+ const result = restartFactoryProject(projectId, mode);
216
+ if (!result.ok)
217
+ return { text: `⚠️ ${result.message}`, handled: true };
218
+ const modeLabel = mode === "full" ? "full" : "partial";
219
+ return {
220
+ text: `🔄 Project ${projectId} restarted (${modeLabel}). Reset ${result.resetTasks} tasks.\nWorkspace: ${result.workspacePath}`,
221
+ handled: true,
222
+ };
223
+ }
224
+ if (!args || args === "list") {
225
+ const projects = listFactoryProjects();
226
+ if (projects.length === 0) {
227
+ return { text: "No factory projects yet. Use `/factory create <description>` to start one.", handled: true };
228
+ }
229
+ const lines = projects.map((p) => {
230
+ const progress = p.taskCount > 0 ? Math.round((p.completedTasks / p.taskCount) * 100) : 0;
231
+ return `[${p.id}] ${p.title} — ${p.status} (${progress}%, ${p.completedTasks}/${p.taskCount})`;
232
+ });
233
+ return { text: `🏭 **Factory Projects**\n\n${lines.join("\n")}`, handled: true };
234
+ }
235
+ if (args.startsWith("status")) {
236
+ const idStr = args.replace(/^status\s*/, "").trim();
237
+ const id = parseInt(idStr, 10);
238
+ if (!idStr || isNaN(id)) {
239
+ const all = listFactoryProjects();
240
+ if (all.length === 0)
241
+ return { text: "No factory projects found.", handled: true };
242
+ return handleFactoryStatus(all[0].id);
243
+ }
244
+ return handleFactoryStatus(id);
245
+ }
246
+ if (args.startsWith("pause ")) {
247
+ const id = parseInt(args.replace("pause", "").trim(), 10);
248
+ if (isNaN(id))
249
+ return { text: "⚠️ Usage: /factory pause <project_id>", handled: true };
250
+ const ok = setProjectStatus(id, "paused");
251
+ return { text: ok ? `⏸ Project ${id} paused.` : `⚠️ Project ${id} not found.`, handled: true };
252
+ }
253
+ if (args.startsWith("resume ")) {
254
+ const id = parseInt(args.replace("resume", "").trim(), 10);
255
+ if (isNaN(id))
256
+ return { text: "⚠️ Usage: /factory resume <project_id>", handled: true };
257
+ const ok = setProjectStatus(id, "running");
258
+ return { text: ok ? `▶️ Project ${id} resumed.` : `⚠️ Project ${id} not found.`, handled: true };
259
+ }
260
+ if (args.startsWith("retry ")) {
261
+ const taskId = parseInt(args.replace("retry", "").trim(), 10);
262
+ if (isNaN(taskId))
263
+ return { text: "⚠️ Usage: /factory retry <task_id>", handled: true };
264
+ const ok = forceRetryTask(taskId);
265
+ return { text: ok ? `🔄 Task ${taskId} reset to backlog.` : `⚠️ Task ${taskId} not found or not stuck.`, handled: true };
266
+ }
267
+ if (args.startsWith("restart ")) {
268
+ const parts = args.split(/\s+/).filter(Boolean);
269
+ if (parts.length < 2)
270
+ return { text: "⚠️ Usage: /factory restart <project_id> [full]", handled: true };
271
+ const projectId = parseInt(parts[1], 10);
272
+ if (isNaN(projectId))
273
+ return { text: "⚠️ Usage: /factory restart <project_id> [full]", handled: true };
274
+ const mode = parts[2]?.toLowerCase() === "full" ? "full" : "partial";
275
+ const result = restartFactoryProject(projectId, mode);
276
+ if (!result.ok)
277
+ return { text: `⚠️ ${result.message}`, handled: true };
278
+ return {
279
+ text: `🔄 Project ${projectId} restarted (${mode}). Reset ${result.resetTasks} tasks.\nWorkspace: ${result.workspacePath}`,
280
+ handled: true,
281
+ };
282
+ }
283
+ if (args.startsWith("profile ")) {
284
+ const parts = args.split(/\s+/).filter(Boolean);
285
+ if (parts.length < 2) {
286
+ const profiles = listFactoryProfiles();
287
+ const profileList = profiles.map((p) => ` - ${p.id}: [${p.mandatoryStages.slice(0, 3).join(", ")}${p.mandatoryStages.length > 3 ? "..." : ""}]`).join("\n");
288
+ return { text: `🏭 **Factory Pipeline Profiles**\n\n${profileList}\n\nUsage: /factory profile <project_id> <profile_name>`, handled: true };
289
+ }
290
+ const projectId = parseInt(parts[1], 10);
291
+ if (isNaN(projectId))
292
+ return { text: "⚠️ Invalid project ID.", handled: true };
293
+ const profileName = parts[2];
294
+ if (!profileName)
295
+ return { text: "⚠️ Usage: /factory profile <project_id> <profile_name>", handled: true };
296
+ const result = switchProjectProfile(projectId, profileName);
297
+ return { text: result.ok ? `✅ ${result.message}` : `⚠️ ${result.message}`, handled: true };
298
+ }
299
+ if (args === "help" || args === "?") {
300
+ return {
301
+ text: `🏭 **Factory Commands**\n\n` +
302
+ `/factory create <desc> — Create a new project\n` +
303
+ `/factory list — List all projects\n` +
304
+ `/factory status [id] — Show project Kanban board\n` +
305
+ `/factory pause <id> — Pause a project\n` +
306
+ `/factory resume <id> — Resume a project\n` +
307
+ `/factory retry <task_id> — Force-retry a stuck task\n` +
308
+ `/factory profile [project_id] [profile] — Switch project pipeline profile\n` +
309
+ `/factory <id> restart — Restart non-done tasks\n` +
310
+ `/factory <id> restart full — Full restart and clear workspace\n` +
311
+ `/factory restart <id> [full] — Alternate restart syntax`,
312
+ handled: true,
313
+ };
314
+ }
315
+ return { text: "⚠️ Unknown factory command. Use `/factory help` for usage.", handled: true };
316
+ }
317
+ function handleFactoryStatus(projectId) {
318
+ const project = getFactoryProject(projectId);
319
+ if (!project)
320
+ return { text: `⚠️ Project ${projectId} not found.`, handled: true };
321
+ const tasks = getFactoryTasks(projectId);
322
+ if (tasks.length === 0)
323
+ return { text: `**${project.title}** (id: ${project.id}) — No tasks.`, handled: true };
324
+ const statusEmoji = {
325
+ backlog: "📋", in_progress: "⚡", review: "🔍", done: "✅", failed: "❌", human_intervention: "🚨",
326
+ };
327
+ const grouped = {
328
+ backlog: [], in_progress: [], review: [], done: [], failed: [], human_intervention: [],
329
+ };
330
+ for (const t of tasks)
331
+ grouped[t.status]?.push(t);
332
+ const progress = project.taskCount > 0 ? Math.round((project.completedTasks / project.taskCount) * 100) : 0;
333
+ const lines = [
334
+ `🏭 **${project.title}** (id: ${project.id})`,
335
+ `Status: ${project.status} | Progress: ${progress}%`,
336
+ `Workspace: ${project.workspacePath}`,
337
+ "Legend: [impl]=can implement/integrate, [qa]=testing role, [rev]=code-review role, [sec]=security role",
338
+ wasProjectAutoNormalized(project.id)
339
+ ? "🛠 Auto-normalization applied (dependencies and/or max retries were corrected)."
340
+ : "",
341
+ "",
342
+ ];
343
+ for (const [status, statusTasks] of Object.entries(grouped)) {
344
+ if (statusTasks.length === 0)
345
+ continue;
346
+ lines.push(`**${statusEmoji[status] || "❓"} ${status}:**`);
347
+ for (const t of statusTasks) {
348
+ const retry = t.retryCount > 0 ? ` (${t.retryCount}/${t.maxRetries})` : "";
349
+ const stage = typeof t.contextPayload.stage_id === "string" ? ` [stage:${t.contextPayload.stage_id}]` : "";
350
+ const roleLabelMap = {
351
+ code: "impl",
352
+ implementation: "impl",
353
+ integration: "impl",
354
+ qa: "qa",
355
+ review: "rev",
356
+ "code-review": "rev",
357
+ security: "sec",
358
+ };
359
+ const toRoleLabels = (roles) => Array.from(new Set(roles
360
+ .map((r) => roleLabelMap[r] || "")
361
+ .filter((r) => r.length > 0)));
362
+ const assignedRoles = toRoleLabels(getAgentPipelineRoles(t.assignedAgent));
363
+ const assignedRoleStr = assignedRoles.length > 0 ? ` [${assignedRoles.join(",")}]` : "";
364
+ const reviewer = t.reviewerAgent
365
+ ? (() => {
366
+ const reviewerRoles = toRoleLabels(getAgentPipelineRoles(t.reviewerAgent));
367
+ const reviewerRoleStr = reviewerRoles.length > 0 ? ` [${reviewerRoles.join(",")}]` : "";
368
+ return ` → ${t.reviewerAgent}${reviewerRoleStr}`;
369
+ })()
370
+ : "";
371
+ const latestFeedback = typeof t.contextPayload.latest_review_feedback === "object"
372
+ && t.contextPayload.latest_review_feedback !== null
373
+ ? t.contextPayload.latest_review_feedback
374
+ : null;
375
+ const reason = latestFeedback && typeof latestFeedback.reason === "string"
376
+ ? ` | reason: ${latestFeedback.reason}`
377
+ : "";
378
+ lines.push(` #${t.id} ${t.title}${stage} → @${t.assignedAgent}${assignedRoleStr}${reviewer}${retry}${reason}`);
379
+ }
380
+ lines.push("");
381
+ }
382
+ return { text: lines.join("\n").trim(), handled: true };
383
+ }
384
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Task } from "@/types/task";
2
+ interface TaskListProps {
3
+ initialTasks?: Task[];
4
+ }
5
+ export declare function TaskList({ initialTasks }: TaskListProps): any;
6
+ export {};
7
+ //# sourceMappingURL=TaskList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskList.d.ts","sourceRoot":"","sources":["../../src/components/TaskList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGzC,UAAU,aAAa;IACrB,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,EAAE,YAAiB,EAAE,EAAE,aAAa,OAiD5D"}
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { useState, useCallback, useEffect } from "react";
3
+ import { saveTasks, loadTasks } from "@/lib/taskStorage";
4
+ export function TaskList({ initialTasks = [] }) {
5
+ // Initialize state from localStorage (lazy initializer)
6
+ const [tasks, setTasks] = useState(() => {
7
+ const storedTasks = loadTasks();
8
+ return storedTasks.length > 0 ? storedTasks : initialTasks;
9
+ });
10
+ // Persist tasks to localStorage whenever they change
11
+ useEffect(() => {
12
+ saveTasks(tasks);
13
+ }, [tasks]);
14
+ const handleAddTask = useCallback((title) => {
15
+ const newTask = {
16
+ id: crypto.randomUUID(),
17
+ title,
18
+ completed: false,
19
+ createdAt: Date.now(),
20
+ };
21
+ setTasks((prev) => [...prev, newTask]);
22
+ }, []);
23
+ const handleDeleteTask = useCallback((id) => {
24
+ setTasks((prev) => prev.filter((task) => task.id !== id));
25
+ }, []);
26
+ const handleToggleTask = useCallback((id) => {
27
+ setTasks((prev) => prev.map((task) => task.id === id ? { ...task, completed: !task.completed } : task));
28
+ }, []);
29
+ const handleEditTask = useCallback((id, newTitle) => {
30
+ setTasks((prev) => prev.map((task) => task.id === id ? { ...task, title: newTitle } : task));
31
+ }, []);
32
+ const isEmpty = tasks.length === 0;
33
+ return (<section aria-label="Task list">
34
+ {/* ... existing TaskItem components rendering ... */}
35
+ </section>);
36
+ }
37
+ //# sourceMappingURL=TaskList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskList.js","sourceRoot":"","sources":["../../src/components/TaskList.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMzD,MAAM,UAAU,QAAQ,CAAC,EAAE,YAAY,GAAG,EAAE,EAAiB;IAC3D,wDAAwD;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAS,GAAG,EAAE;QAC9C,MAAM,WAAW,GAAG,SAAS,EAAE,CAAC;QAChC,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,qDAAqD;IACrD,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QAClD,MAAM,OAAO,GAAS;YACpB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,KAAK;YACL,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QAClD,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QAClD,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAChB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAChB,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAChE,CACF,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,QAAgB,EAAE,EAAE;QAClE,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAChB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAChB,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CACrD,CACF,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IAEnC,OAAO,CACL,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAC7B;MAAA,CAAC,oDAAoD,CACvD;IAAA,EAAE,OAAO,CAAC,CACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare function encrypt(plaintext: string): Promise<string>;
2
+ export declare function decrypt(encryptedData: string): Promise<string>;
3
+ export interface EncryptedValue {
4
+ encrypted: string;
5
+ }
6
+ export declare function isEncryptedValue(obj: unknown): obj is EncryptedValue;
7
+ export declare function encryptIfNeeded(value: unknown): Promise<unknown>;
8
+ export declare function decryptIfNeeded(value: unknown): Promise<unknown>;
9
+ export declare function clearCache(): void;
10
+ //# sourceMappingURL=encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/config/encryption.ts"],"names":[],"mappings":"AAqDA,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYhE;AAED,wBAAsB,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAepE;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CAEpE;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAetE;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAetE;AAED,wBAAgB,UAAU,IAAI,IAAI,CAGjC"}
@@ -0,0 +1,111 @@
1
+ import { createHmac, randomBytes, createCipheriv, createDecipheriv } from "node:crypto";
2
+ const PROJECT_SALT = "CF-Claw-Secret-V1";
3
+ const ALGORITHM = "aes-256-gcm";
4
+ const KEY_LENGTH = 32;
5
+ const IV_LENGTH = 16;
6
+ const AUTH_TAG_LENGTH = 16;
7
+ let machineId = null;
8
+ let derivedKey = null;
9
+ async function getMachineId() {
10
+ if (machineId)
11
+ return machineId;
12
+ const platform = process.platform;
13
+ let command;
14
+ let parseFn;
15
+ if (platform === "linux") {
16
+ command = "cat /etc/machine-id 2>/dev/null || cat /var/lib/dbus/machine-id 2>/dev/null";
17
+ parseFn = (s) => s.trim();
18
+ }
19
+ else if (platform === "darwin") {
20
+ command = "ioreg -rd1 -c IOPlatformExpertDevice 2>/dev/null | grep IOPlatformUUID | awk -F'\"' '{print $4}'";
21
+ parseFn = (s) => s.trim().toLowerCase();
22
+ }
23
+ else if (platform === "win32") {
24
+ command = "reg query HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography /v MachineGuid 2>nul | findstr MachineGuid";
25
+ parseFn = (s) => s.replace(/.*MachineGuid\s+REG_SZ\s+/, "").trim();
26
+ }
27
+ else {
28
+ throw new Error(`Unsupported platform: ${platform}`);
29
+ }
30
+ return new Promise((resolve, reject) => {
31
+ const { exec } = require("node:child_process");
32
+ exec(command, { timeout: 5000 }, (error, stdout, stderr) => {
33
+ if (error || !stdout.trim()) {
34
+ const fallback = randomBytes(32).toString("hex");
35
+ console.warn(`⚠️ Could not get machine ID, using random fallback. Secrets won't be transferable between machines.`);
36
+ resolve(fallback);
37
+ return;
38
+ }
39
+ resolve(parseFn(stdout));
40
+ });
41
+ });
42
+ }
43
+ async function getDerivedKey() {
44
+ if (derivedKey)
45
+ return derivedKey;
46
+ const id = await getMachineId();
47
+ derivedKey = createHmac("sha256", PROJECT_SALT).update(id).digest();
48
+ return derivedKey;
49
+ }
50
+ export async function encrypt(plaintext) {
51
+ const key = await getDerivedKey();
52
+ const iv = randomBytes(IV_LENGTH);
53
+ const cipher = createCipheriv(ALGORITHM, key, iv);
54
+ let encrypted = cipher.update(plaintext, "utf8", "base64");
55
+ encrypted += cipher.final("base64");
56
+ const authTag = cipher.getAuthTag();
57
+ const combined = Buffer.concat([iv, authTag, Buffer.from(encrypted, "base64")]);
58
+ return combined.toString("base64");
59
+ }
60
+ export async function decrypt(encryptedData) {
61
+ const key = await getDerivedKey();
62
+ const combined = Buffer.from(encryptedData, "base64");
63
+ const iv = combined.subarray(0, IV_LENGTH);
64
+ const authTag = combined.subarray(IV_LENGTH, IV_LENGTH + AUTH_TAG_LENGTH);
65
+ const encrypted = combined.subarray(IV_LENGTH + AUTH_TAG_LENGTH);
66
+ const decipher = createDecipheriv(ALGORITHM, key, iv);
67
+ decipher.setAuthTag(authTag);
68
+ let decrypted = decipher.update(encrypted);
69
+ decrypted = Buffer.concat([decrypted, decipher.final()]);
70
+ return decrypted.toString("utf8");
71
+ }
72
+ export function isEncryptedValue(obj) {
73
+ return typeof obj === "object" && obj !== null && "encrypted" in obj && typeof obj.encrypted === "string";
74
+ }
75
+ export async function encryptIfNeeded(value) {
76
+ if (typeof value === "string" && value.length > 0 && !isEncryptedValue(value)) {
77
+ return { encrypted: await encrypt(value) };
78
+ }
79
+ if (Array.isArray(value)) {
80
+ return Promise.all(value.map(encryptIfNeeded));
81
+ }
82
+ if (typeof value === "object" && value !== null) {
83
+ const result = {};
84
+ for (const [k, v] of Object.entries(value)) {
85
+ result[k] = await encryptIfNeeded(v);
86
+ }
87
+ return result;
88
+ }
89
+ return value;
90
+ }
91
+ export async function decryptIfNeeded(value) {
92
+ if (isEncryptedValue(value)) {
93
+ return decrypt(value.encrypted);
94
+ }
95
+ if (Array.isArray(value)) {
96
+ return Promise.all(value.map(decryptIfNeeded));
97
+ }
98
+ if (typeof value === "object" && value !== null) {
99
+ const result = {};
100
+ for (const [k, v] of Object.entries(value)) {
101
+ result[k] = await decryptIfNeeded(v);
102
+ }
103
+ return result;
104
+ }
105
+ return value;
106
+ }
107
+ export function clearCache() {
108
+ machineId = null;
109
+ derivedKey = null;
110
+ }
111
+ //# sourceMappingURL=encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/config/encryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAExF,MAAM,YAAY,GAAG,mBAAmB,CAAC;AACzC,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,IAAI,SAAS,GAAkB,IAAI,CAAC;AACpC,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,KAAK,UAAU,YAAY;IACzB,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAEhC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,OAAe,CAAC;IACpB,IAAI,OAAmC,CAAC;IAExC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,GAAG,6EAA6E,CAAC;QACxF,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,GAAG,kGAAkG,CAAC;QAC7G,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,GAAG,4GAA4G,CAAC;QACvH,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,KAAmB,EAAE,MAAc,EAAE,MAAc,EAAE,EAAE;YACvF,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAC;gBACpH,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAClB,OAAO;YACT,CAAC;YACD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,MAAM,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;IAChC,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACpE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,SAAiB;IAC7C,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAElD,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3D,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAEpC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChF,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,aAAqB;IACjD,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAEtD,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,GAAG,eAAe,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE7B,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEzD,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAMD,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,WAAW,IAAI,GAAG,IAAI,OAAQ,GAAsB,CAAC,SAAS,KAAK,QAAQ,CAAC;AAChI,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAc;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7C,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,eAAe,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAc;IAClD,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,eAAe,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,SAAS,GAAG,IAAI,CAAC;IACjB,UAAU,GAAG,IAAI,CAAC;AACpB,CAAC"}