@jungjaehoon/mama-os 0.1.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.
Files changed (356) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/README.md +643 -0
  3. package/dist/agent/agent-loop.d.ts +98 -0
  4. package/dist/agent/agent-loop.d.ts.map +1 -0
  5. package/dist/agent/agent-loop.js +417 -0
  6. package/dist/agent/agent-loop.js.map +1 -0
  7. package/dist/agent/auto-recall.d.ts +48 -0
  8. package/dist/agent/auto-recall.d.ts.map +1 -0
  9. package/dist/agent/auto-recall.js +178 -0
  10. package/dist/agent/auto-recall.js.map +1 -0
  11. package/dist/agent/claude-cli-wrapper.d.ts +130 -0
  12. package/dist/agent/claude-cli-wrapper.d.ts.map +1 -0
  13. package/dist/agent/claude-cli-wrapper.js +227 -0
  14. package/dist/agent/claude-cli-wrapper.js.map +1 -0
  15. package/dist/agent/claude-client.d.ts +50 -0
  16. package/dist/agent/claude-client.d.ts.map +1 -0
  17. package/dist/agent/claude-client.js +214 -0
  18. package/dist/agent/claude-client.js.map +1 -0
  19. package/dist/agent/gateway-tool-executor.d.ts +75 -0
  20. package/dist/agent/gateway-tool-executor.d.ts.map +1 -0
  21. package/dist/agent/gateway-tool-executor.js +348 -0
  22. package/dist/agent/gateway-tool-executor.js.map +1 -0
  23. package/dist/agent/index.d.ts +13 -0
  24. package/dist/agent/index.d.ts.map +1 -0
  25. package/dist/agent/index.js +18 -0
  26. package/dist/agent/index.js.map +1 -0
  27. package/dist/agent/mcp-executor.d.ts +75 -0
  28. package/dist/agent/mcp-executor.d.ts.map +1 -0
  29. package/dist/agent/mcp-executor.js +307 -0
  30. package/dist/agent/mcp-executor.js.map +1 -0
  31. package/dist/agent/session-pool.d.ts +148 -0
  32. package/dist/agent/session-pool.d.ts.map +1 -0
  33. package/dist/agent/session-pool.js +272 -0
  34. package/dist/agent/session-pool.js.map +1 -0
  35. package/dist/agent/streaming-callback-manager.d.ts +85 -0
  36. package/dist/agent/streaming-callback-manager.d.ts.map +1 -0
  37. package/dist/agent/streaming-callback-manager.js +103 -0
  38. package/dist/agent/streaming-callback-manager.js.map +1 -0
  39. package/dist/agent/types.d.ts +437 -0
  40. package/dist/agent/types.d.ts.map +1 -0
  41. package/dist/agent/types.js +29 -0
  42. package/dist/agent/types.js.map +1 -0
  43. package/dist/api/cron-handler.d.ts +44 -0
  44. package/dist/api/cron-handler.d.ts.map +1 -0
  45. package/dist/api/cron-handler.js +195 -0
  46. package/dist/api/cron-handler.js.map +1 -0
  47. package/dist/api/error-handler.d.ts +22 -0
  48. package/dist/api/error-handler.d.ts.map +1 -0
  49. package/dist/api/error-handler.js +104 -0
  50. package/dist/api/error-handler.js.map +1 -0
  51. package/dist/api/heartbeat-handler.d.ts +49 -0
  52. package/dist/api/heartbeat-handler.d.ts.map +1 -0
  53. package/dist/api/heartbeat-handler.js +91 -0
  54. package/dist/api/heartbeat-handler.js.map +1 -0
  55. package/dist/api/index.d.ts +61 -0
  56. package/dist/api/index.d.ts.map +1 -0
  57. package/dist/api/index.js +145 -0
  58. package/dist/api/index.js.map +1 -0
  59. package/dist/api/types.d.ts +156 -0
  60. package/dist/api/types.d.ts.map +1 -0
  61. package/dist/api/types.js +62 -0
  62. package/dist/api/types.js.map +1 -0
  63. package/dist/auth/index.d.ts +7 -0
  64. package/dist/auth/index.d.ts.map +1 -0
  65. package/dist/auth/index.js +11 -0
  66. package/dist/auth/index.js.map +1 -0
  67. package/dist/auth/oauth-manager.d.ts +59 -0
  68. package/dist/auth/oauth-manager.d.ts.map +1 -0
  69. package/dist/auth/oauth-manager.js +237 -0
  70. package/dist/auth/oauth-manager.js.map +1 -0
  71. package/dist/auth/types.d.ts +92 -0
  72. package/dist/auth/types.d.ts.map +1 -0
  73. package/dist/auth/types.js +23 -0
  74. package/dist/auth/types.js.map +1 -0
  75. package/dist/cli/commands/init.d.ts +19 -0
  76. package/dist/cli/commands/init.d.ts.map +1 -0
  77. package/dist/cli/commands/init.js +155 -0
  78. package/dist/cli/commands/init.js.map +1 -0
  79. package/dist/cli/commands/run.d.ts +19 -0
  80. package/dist/cli/commands/run.d.ts.map +1 -0
  81. package/dist/cli/commands/run.js +89 -0
  82. package/dist/cli/commands/run.js.map +1 -0
  83. package/dist/cli/commands/setup.d.ts +19 -0
  84. package/dist/cli/commands/setup.d.ts.map +1 -0
  85. package/dist/cli/commands/setup.js +134 -0
  86. package/dist/cli/commands/setup.js.map +1 -0
  87. package/dist/cli/commands/start.d.ts +24 -0
  88. package/dist/cli/commands/start.d.ts.map +1 -0
  89. package/dist/cli/commands/start.js +1073 -0
  90. package/dist/cli/commands/start.js.map +1 -0
  91. package/dist/cli/commands/status.d.ts +10 -0
  92. package/dist/cli/commands/status.d.ts.map +1 -0
  93. package/dist/cli/commands/status.js +85 -0
  94. package/dist/cli/commands/status.js.map +1 -0
  95. package/dist/cli/commands/stop.d.ts +10 -0
  96. package/dist/cli/commands/stop.d.ts.map +1 -0
  97. package/dist/cli/commands/stop.js +65 -0
  98. package/dist/cli/commands/stop.js.map +1 -0
  99. package/dist/cli/config/config-manager.d.ts +51 -0
  100. package/dist/cli/config/config-manager.d.ts.map +1 -0
  101. package/dist/cli/config/config-manager.js +216 -0
  102. package/dist/cli/config/config-manager.js.map +1 -0
  103. package/dist/cli/config/types.d.ts +172 -0
  104. package/dist/cli/config/types.d.ts.map +1 -0
  105. package/dist/cli/config/types.js +48 -0
  106. package/dist/cli/config/types.js.map +1 -0
  107. package/dist/cli/index.d.ts +8 -0
  108. package/dist/cli/index.d.ts.map +1 -0
  109. package/dist/cli/index.js +92 -0
  110. package/dist/cli/index.js.map +1 -0
  111. package/dist/cli/utils/pid-manager.d.ts +66 -0
  112. package/dist/cli/utils/pid-manager.d.ts.map +1 -0
  113. package/dist/cli/utils/pid-manager.js +167 -0
  114. package/dist/cli/utils/pid-manager.js.map +1 -0
  115. package/dist/concurrency/index.d.ts +13 -0
  116. package/dist/concurrency/index.d.ts.map +1 -0
  117. package/dist/concurrency/index.js +22 -0
  118. package/dist/concurrency/index.js.map +1 -0
  119. package/dist/concurrency/lane-manager.d.ts +113 -0
  120. package/dist/concurrency/lane-manager.d.ts.map +1 -0
  121. package/dist/concurrency/lane-manager.js +245 -0
  122. package/dist/concurrency/lane-manager.js.map +1 -0
  123. package/dist/concurrency/session-key.d.ts +41 -0
  124. package/dist/concurrency/session-key.d.ts.map +1 -0
  125. package/dist/concurrency/session-key.js +61 -0
  126. package/dist/concurrency/session-key.js.map +1 -0
  127. package/dist/concurrency/types.d.ts +69 -0
  128. package/dist/concurrency/types.d.ts.map +1 -0
  129. package/dist/concurrency/types.js +16 -0
  130. package/dist/concurrency/types.js.map +1 -0
  131. package/dist/gateways/channel-history.d.ts +102 -0
  132. package/dist/gateways/channel-history.d.ts.map +1 -0
  133. package/dist/gateways/channel-history.js +181 -0
  134. package/dist/gateways/channel-history.js.map +1 -0
  135. package/dist/gateways/context-injector.d.ts +74 -0
  136. package/dist/gateways/context-injector.d.ts.map +1 -0
  137. package/dist/gateways/context-injector.js +121 -0
  138. package/dist/gateways/context-injector.js.map +1 -0
  139. package/dist/gateways/discord.d.ts +122 -0
  140. package/dist/gateways/discord.d.ts.map +1 -0
  141. package/dist/gateways/discord.js +602 -0
  142. package/dist/gateways/discord.js.map +1 -0
  143. package/dist/gateways/index.d.ts +30 -0
  144. package/dist/gateways/index.d.ts.map +1 -0
  145. package/dist/gateways/index.js +49 -0
  146. package/dist/gateways/index.js.map +1 -0
  147. package/dist/gateways/message-router.d.ts +116 -0
  148. package/dist/gateways/message-router.d.ts.map +1 -0
  149. package/dist/gateways/message-router.js +315 -0
  150. package/dist/gateways/message-router.js.map +1 -0
  151. package/dist/gateways/message-splitter.d.ts +54 -0
  152. package/dist/gateways/message-splitter.d.ts.map +1 -0
  153. package/dist/gateways/message-splitter.js +146 -0
  154. package/dist/gateways/message-splitter.js.map +1 -0
  155. package/dist/gateways/plugin-loader.d.ts +76 -0
  156. package/dist/gateways/plugin-loader.d.ts.map +1 -0
  157. package/dist/gateways/plugin-loader.js +221 -0
  158. package/dist/gateways/plugin-loader.js.map +1 -0
  159. package/dist/gateways/session-store.d.ts +77 -0
  160. package/dist/gateways/session-store.d.ts.map +1 -0
  161. package/dist/gateways/session-store.js +233 -0
  162. package/dist/gateways/session-store.js.map +1 -0
  163. package/dist/gateways/slack.d.ts +90 -0
  164. package/dist/gateways/slack.d.ts.map +1 -0
  165. package/dist/gateways/slack.js +281 -0
  166. package/dist/gateways/slack.js.map +1 -0
  167. package/dist/gateways/telegram.d.ts +79 -0
  168. package/dist/gateways/telegram.d.ts.map +1 -0
  169. package/dist/gateways/telegram.js +207 -0
  170. package/dist/gateways/telegram.js.map +1 -0
  171. package/dist/gateways/types.d.ts +340 -0
  172. package/dist/gateways/types.d.ts.map +1 -0
  173. package/dist/gateways/types.js +6 -0
  174. package/dist/gateways/types.js.map +1 -0
  175. package/dist/index.d.ts +7 -0
  176. package/dist/index.d.ts.map +1 -0
  177. package/dist/index.js +26 -0
  178. package/dist/index.js.map +1 -0
  179. package/dist/memory/memory-logger.d.ts +47 -0
  180. package/dist/memory/memory-logger.d.ts.map +1 -0
  181. package/dist/memory/memory-logger.js +126 -0
  182. package/dist/memory/memory-logger.js.map +1 -0
  183. package/dist/onboarding/all-tools.d.ts +18 -0
  184. package/dist/onboarding/all-tools.d.ts.map +1 -0
  185. package/dist/onboarding/all-tools.js +149 -0
  186. package/dist/onboarding/all-tools.js.map +1 -0
  187. package/dist/onboarding/autonomous-discovery-tools.d.ts +13 -0
  188. package/dist/onboarding/autonomous-discovery-tools.d.ts.map +1 -0
  189. package/dist/onboarding/autonomous-discovery-tools.js +268 -0
  190. package/dist/onboarding/autonomous-discovery-tools.js.map +1 -0
  191. package/dist/onboarding/bootstrap-template.d.ts +5 -0
  192. package/dist/onboarding/bootstrap-template.d.ts.map +1 -0
  193. package/dist/onboarding/bootstrap-template.js +142 -0
  194. package/dist/onboarding/bootstrap-template.js.map +1 -0
  195. package/dist/onboarding/complete-autonomous-prompt.d.ts +13 -0
  196. package/dist/onboarding/complete-autonomous-prompt.d.ts.map +1 -0
  197. package/dist/onboarding/complete-autonomous-prompt.js +1220 -0
  198. package/dist/onboarding/complete-autonomous-prompt.js.map +1 -0
  199. package/dist/onboarding/onboarding-state.d.ts +70 -0
  200. package/dist/onboarding/onboarding-state.d.ts.map +1 -0
  201. package/dist/onboarding/onboarding-state.js +184 -0
  202. package/dist/onboarding/onboarding-state.js.map +1 -0
  203. package/dist/onboarding/personality-quiz.d.ts +35 -0
  204. package/dist/onboarding/personality-quiz.d.ts.map +1 -0
  205. package/dist/onboarding/personality-quiz.js +219 -0
  206. package/dist/onboarding/personality-quiz.js.map +1 -0
  207. package/dist/onboarding/phase-5-summary.d.ts +22 -0
  208. package/dist/onboarding/phase-5-summary.d.ts.map +1 -0
  209. package/dist/onboarding/phase-5-summary.js +151 -0
  210. package/dist/onboarding/phase-5-summary.js.map +1 -0
  211. package/dist/onboarding/phase-6-security.d.ts +33 -0
  212. package/dist/onboarding/phase-6-security.d.ts.map +1 -0
  213. package/dist/onboarding/phase-6-security.js +473 -0
  214. package/dist/onboarding/phase-6-security.js.map +1 -0
  215. package/dist/onboarding/phase-7-integrations.d.ts +66 -0
  216. package/dist/onboarding/phase-7-integrations.d.ts.map +1 -0
  217. package/dist/onboarding/phase-7-integrations.js +619 -0
  218. package/dist/onboarding/phase-7-integrations.js.map +1 -0
  219. package/dist/onboarding/phase-8-demo.d.ts +43 -0
  220. package/dist/onboarding/phase-8-demo.d.ts.map +1 -0
  221. package/dist/onboarding/phase-8-demo.js +346 -0
  222. package/dist/onboarding/phase-8-demo.js.map +1 -0
  223. package/dist/onboarding/phase-9-finalization.d.ts +22 -0
  224. package/dist/onboarding/phase-9-finalization.d.ts.map +1 -0
  225. package/dist/onboarding/phase-9-finalization.js +375 -0
  226. package/dist/onboarding/phase-9-finalization.js.map +1 -0
  227. package/dist/onboarding/ritual-prompt.d.ts +2 -0
  228. package/dist/onboarding/ritual-prompt.d.ts.map +1 -0
  229. package/dist/onboarding/ritual-prompt.js +285 -0
  230. package/dist/onboarding/ritual-prompt.js.map +1 -0
  231. package/dist/onboarding/ritual-tools.d.ts +13 -0
  232. package/dist/onboarding/ritual-tools.d.ts.map +1 -0
  233. package/dist/onboarding/ritual-tools.js +93 -0
  234. package/dist/onboarding/ritual-tools.js.map +1 -0
  235. package/dist/runners/cli-runner.d.ts +59 -0
  236. package/dist/runners/cli-runner.d.ts.map +1 -0
  237. package/dist/runners/cli-runner.js +190 -0
  238. package/dist/runners/cli-runner.js.map +1 -0
  239. package/dist/runners/index.d.ts +11 -0
  240. package/dist/runners/index.d.ts.map +1 -0
  241. package/dist/runners/index.js +15 -0
  242. package/dist/runners/index.js.map +1 -0
  243. package/dist/runners/types.d.ts +81 -0
  244. package/dist/runners/types.d.ts.map +1 -0
  245. package/dist/runners/types.js +31 -0
  246. package/dist/runners/types.js.map +1 -0
  247. package/dist/scheduler/cron-scheduler.d.ts +115 -0
  248. package/dist/scheduler/cron-scheduler.d.ts.map +1 -0
  249. package/dist/scheduler/cron-scheduler.js +320 -0
  250. package/dist/scheduler/cron-scheduler.js.map +1 -0
  251. package/dist/scheduler/heartbeat.d.ts +53 -0
  252. package/dist/scheduler/heartbeat.d.ts.map +1 -0
  253. package/dist/scheduler/heartbeat.js +160 -0
  254. package/dist/scheduler/heartbeat.js.map +1 -0
  255. package/dist/scheduler/index.d.ts +22 -0
  256. package/dist/scheduler/index.d.ts.map +1 -0
  257. package/dist/scheduler/index.js +31 -0
  258. package/dist/scheduler/index.js.map +1 -0
  259. package/dist/scheduler/job-lock.d.ts +85 -0
  260. package/dist/scheduler/job-lock.d.ts.map +1 -0
  261. package/dist/scheduler/job-lock.js +137 -0
  262. package/dist/scheduler/job-lock.js.map +1 -0
  263. package/dist/scheduler/recovery.d.ts +78 -0
  264. package/dist/scheduler/recovery.d.ts.map +1 -0
  265. package/dist/scheduler/recovery.js +124 -0
  266. package/dist/scheduler/recovery.js.map +1 -0
  267. package/dist/scheduler/schedule-store.d.ts +112 -0
  268. package/dist/scheduler/schedule-store.d.ts.map +1 -0
  269. package/dist/scheduler/schedule-store.js +259 -0
  270. package/dist/scheduler/schedule-store.js.map +1 -0
  271. package/dist/scheduler/token-keep-alive.d.ts +49 -0
  272. package/dist/scheduler/token-keep-alive.d.ts.map +1 -0
  273. package/dist/scheduler/token-keep-alive.js +102 -0
  274. package/dist/scheduler/token-keep-alive.js.map +1 -0
  275. package/dist/scheduler/types.d.ts +96 -0
  276. package/dist/scheduler/types.d.ts.map +1 -0
  277. package/dist/scheduler/types.js +21 -0
  278. package/dist/scheduler/types.js.map +1 -0
  279. package/dist/setup/setup-prompt.d.ts +2 -0
  280. package/dist/setup/setup-prompt.d.ts.map +1 -0
  281. package/dist/setup/setup-prompt.js +138 -0
  282. package/dist/setup/setup-prompt.js.map +1 -0
  283. package/dist/setup/setup-server.d.ts +8 -0
  284. package/dist/setup/setup-server.d.ts.map +1 -0
  285. package/dist/setup/setup-server.js +71 -0
  286. package/dist/setup/setup-server.js.map +1 -0
  287. package/dist/setup/setup-tools.d.ts +13 -0
  288. package/dist/setup/setup-tools.d.ts.map +1 -0
  289. package/dist/setup/setup-tools.js +103 -0
  290. package/dist/setup/setup-tools.js.map +1 -0
  291. package/dist/setup/setup-websocket.d.ts +6 -0
  292. package/dist/setup/setup-websocket.d.ts.map +1 -0
  293. package/dist/setup/setup-websocket.js +312 -0
  294. package/dist/setup/setup-websocket.js.map +1 -0
  295. package/dist/skills/index.d.ts +10 -0
  296. package/dist/skills/index.d.ts.map +1 -0
  297. package/dist/skills/index.js +26 -0
  298. package/dist/skills/index.js.map +1 -0
  299. package/dist/skills/skill-executor.d.ts +48 -0
  300. package/dist/skills/skill-executor.d.ts.map +1 -0
  301. package/dist/skills/skill-executor.js +483 -0
  302. package/dist/skills/skill-executor.js.map +1 -0
  303. package/dist/skills/skill-loader.d.ts +40 -0
  304. package/dist/skills/skill-loader.d.ts.map +1 -0
  305. package/dist/skills/skill-loader.js +225 -0
  306. package/dist/skills/skill-loader.js.map +1 -0
  307. package/dist/skills/skill-matcher.d.ts +33 -0
  308. package/dist/skills/skill-matcher.d.ts.map +1 -0
  309. package/dist/skills/skill-matcher.js +190 -0
  310. package/dist/skills/skill-matcher.js.map +1 -0
  311. package/dist/skills/types.d.ts +123 -0
  312. package/dist/skills/types.d.ts.map +1 -0
  313. package/dist/skills/types.js +12 -0
  314. package/dist/skills/types.js.map +1 -0
  315. package/dist/tools/browser-tool.d.ts +149 -0
  316. package/dist/tools/browser-tool.d.ts.map +1 -0
  317. package/dist/tools/browser-tool.js +257 -0
  318. package/dist/tools/browser-tool.js.map +1 -0
  319. package/package.json +84 -0
  320. package/public/favicon.ico +0 -0
  321. package/public/setup.html +1026 -0
  322. package/public/viewer/icons/icon-192.png +0 -0
  323. package/public/viewer/icons/icon-512.png +0 -0
  324. package/public/viewer/js/modules/chat.js +1587 -0
  325. package/public/viewer/js/modules/dashboard.js +275 -0
  326. package/public/viewer/js/modules/graph.js +997 -0
  327. package/public/viewer/js/modules/memory.js +353 -0
  328. package/public/viewer/js/modules/settings.js +255 -0
  329. package/public/viewer/js/utils/api.js +169 -0
  330. package/public/viewer/js/utils/dom.js +92 -0
  331. package/public/viewer/js/utils/format.js +192 -0
  332. package/public/viewer/manifest.json +26 -0
  333. package/public/viewer/sw.js +131 -0
  334. package/public/viewer/viewer.css +500 -0
  335. package/public/viewer/viewer.html +1535 -0
  336. package/scripts/postinstall.js +118 -0
  337. package/templates/skills/document-analyze.md +63 -0
  338. package/templates/skills/heartbeat-report.md +75 -0
  339. package/templates/skills/image-translate.md +67 -0
  340. package/templates/workspace/skill-forge/DESIGN.md +115 -0
  341. package/templates/workspace/skill-forge/agents/architect.ts +295 -0
  342. package/templates/workspace/skill-forge/agents/developer.ts +364 -0
  343. package/templates/workspace/skill-forge/agents/qa.ts +313 -0
  344. package/templates/workspace/skill-forge/claude-api.ts +353 -0
  345. package/templates/workspace/skill-forge/discord-ui.ts +580 -0
  346. package/templates/workspace/skill-forge/error-handler.ts +354 -0
  347. package/templates/workspace/skill-forge/mama-integration.ts +357 -0
  348. package/templates/workspace/skill-forge/orchestrator.ts +495 -0
  349. package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/README.md +24 -0
  350. package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/index.ts +79 -0
  351. package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/types.ts +17 -0
  352. package/templates/workspace/skill-forge/package.json +21 -0
  353. package/templates/workspace/skill-forge/state/session.json +132 -0
  354. package/templates/workspace/skill-forge/test-e2e.ts +139 -0
  355. package/templates/workspace/skill-forge/tsconfig.json +20 -0
  356. package/templates/workspace/skill-forge/types.ts +159 -0
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * Phase 5: Discovery Summary Tool
4
+ *
5
+ * Aggregates insights from previous onboarding phases and presents
6
+ * findings to the user. Acts as a MANDATORY gate before Phase 6.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PHASE_5_TOOL = void 0;
10
+ const promises_1 = require("node:fs/promises");
11
+ const node_fs_1 = require("node:fs");
12
+ const config_manager_js_1 = require("../cli/config/config-manager.js");
13
+ const onboarding_state_js_1 = require("./onboarding-state.js");
14
+ async function aggregateInsights() {
15
+ const insights = { files: [] };
16
+ const mamaHome = (0, config_manager_js_1.expandPath)('~/.mama');
17
+ const profileFiles = [
18
+ { key: 'identity', file: 'IDENTITY.md' },
19
+ { key: 'user', file: 'USER.md' },
20
+ { key: 'soul', file: 'SOUL.md' },
21
+ { key: 'bootstrap', file: 'BOOTSTRAP.md' },
22
+ ];
23
+ for (const { key, file } of profileFiles) {
24
+ const filePath = `${mamaHome}/${file}`;
25
+ if ((0, node_fs_1.existsSync)(filePath)) {
26
+ try {
27
+ const content = await (0, promises_1.readFile)(filePath, 'utf-8');
28
+ insights[key] = content;
29
+ insights.files.push(file);
30
+ }
31
+ catch (error) {
32
+ console.error(`Failed to read ${file}:`, error);
33
+ }
34
+ }
35
+ }
36
+ return insights;
37
+ }
38
+ function formatSummary(insights) {
39
+ const { identity, user, soul, bootstrap, files } = insights;
40
+ let summary = `# 🎯 Discovery Summary\n\n`;
41
+ summary += `Based on your previous responses, here's what we've learned:\n\n`;
42
+ summary += `## πŸ“‚ Profile Files Found\n\n`;
43
+ if (files.length === 0) {
44
+ summary += `No profile files found yet. This is the first time we're creating your profile.\n\n`;
45
+ }
46
+ else {
47
+ summary += files.map((f) => `- βœ… ${f}`).join('\n') + '\n\n';
48
+ }
49
+ if (identity) {
50
+ summary += `## πŸͺͺ Identity\n\n`;
51
+ summary += `${identity.substring(0, 500)}${identity.length > 500 ? '...' : ''}\n\n`;
52
+ }
53
+ if (user) {
54
+ summary += `## πŸ‘€ User Profile\n\n`;
55
+ summary += `${user.substring(0, 500)}${user.length > 500 ? '...' : ''}\n\n`;
56
+ }
57
+ if (soul) {
58
+ summary += `## ✨ Soul/Personality\n\n`;
59
+ summary += `${soul.substring(0, 500)}${soul.length > 500 ? '...' : ''}\n\n`;
60
+ }
61
+ if (bootstrap) {
62
+ summary += `## 🌱 Bootstrap Context\n\n`;
63
+ summary += `${bootstrap.substring(0, 500)}${bootstrap.length > 500 ? '...' : ''}\n\n`;
64
+ }
65
+ summary += `---\n\n`;
66
+ summary += `**Next Steps:**\n`;
67
+ summary += `1. Review the summary above\n`;
68
+ summary += `2. Confirm if everything looks correct\n`;
69
+ summary += `3. Add any additional notes if needed\n`;
70
+ summary += `4. Proceed to Phase 6\n\n`;
71
+ summary += `**To confirm and save:** Call this tool again with \`confirmed: true\`\n`;
72
+ return summary;
73
+ }
74
+ async function saveSummary(insights, additionalNotes) {
75
+ const mamaHome = (0, config_manager_js_1.expandPath)('~/.mama');
76
+ const summaryPath = `${mamaHome}/summary.md`;
77
+ let content = `# Discovery Summary\n\n`;
78
+ content += `*Generated: ${new Date().toISOString()}*\n\n`;
79
+ content += `## Profile Completion Status\n\n`;
80
+ content += `Files created during onboarding:\n\n`;
81
+ content += insights.files.map((f) => `- ${f}`).join('\n') + '\n\n';
82
+ if (insights.identity) {
83
+ content += `## Identity\n\n${insights.identity}\n\n`;
84
+ }
85
+ if (insights.user) {
86
+ content += `## User Profile\n\n${insights.user}\n\n`;
87
+ }
88
+ if (insights.soul) {
89
+ content += `## Personality/Soul\n\n${insights.soul}\n\n`;
90
+ }
91
+ if (additionalNotes) {
92
+ content += `## Additional Notes\n\n${additionalNotes}\n\n`;
93
+ }
94
+ content += `---\n\n`;
95
+ content += `*This summary represents the completion of onboarding phases 1-5.*\n`;
96
+ content += `*Ready to proceed to Phase 6.*\n`;
97
+ await (0, promises_1.writeFile)(summaryPath, content, 'utf-8');
98
+ }
99
+ /**
100
+ * Phase 5 Tool: Present Discovery Summary
101
+ */
102
+ exports.PHASE_5_TOOL = {
103
+ name: 'present_discovery_summary',
104
+ description: 'Aggregate insights from previous onboarding phases, present findings to user, and save summary. MANDATORY gate before Phase 6.',
105
+ input_schema: {
106
+ type: 'object',
107
+ properties: {
108
+ confirmed: {
109
+ type: 'boolean',
110
+ description: 'Set to true to confirm the summary and save to disk',
111
+ },
112
+ additional_notes: {
113
+ type: 'string',
114
+ description: 'Optional additional notes to include in the saved summary',
115
+ },
116
+ },
117
+ required: [],
118
+ },
119
+ handler: async (input) => {
120
+ try {
121
+ const insights = await aggregateInsights();
122
+ if (!input.confirmed) {
123
+ const presentation = formatSummary(insights);
124
+ return {
125
+ success: true,
126
+ message: presentation,
127
+ requires_confirmation: true,
128
+ files_found: insights.files,
129
+ };
130
+ }
131
+ await saveSummary(insights, input.additional_notes);
132
+ // Update onboarding state
133
+ (0, onboarding_state_js_1.completePhase)(5);
134
+ (0, onboarding_state_js_1.recordFileCreated)('summary.md');
135
+ return {
136
+ success: true,
137
+ message: 'Summary saved to ~/.mama/summary.md',
138
+ summary_path: (0, config_manager_js_1.expandPath)('~/.mama/summary.md'),
139
+ phase_5_complete: true,
140
+ ready_for_phase_6: true,
141
+ };
142
+ }
143
+ catch (error) {
144
+ return {
145
+ success: false,
146
+ error: error instanceof Error ? error.message : 'Unknown error during summary generation',
147
+ };
148
+ }
149
+ },
150
+ };
151
+ //# sourceMappingURL=phase-5-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-5-summary.js","sourceRoot":"","sources":["../../src/onboarding/phase-5-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Phase 6: Security Warning
3
+ *
4
+ * MANDATORY gate before Phase 7. Explains security risks and requires
5
+ * explicit acknowledgment before granting full system access.
6
+ *
7
+ * Covers 4 critical risk factors:
8
+ * 1. File access - Read/write any file on the system
9
+ * 2. Command execution - Run arbitrary shell commands
10
+ * 3. Network access - Make HTTP requests, access APIs
11
+ * 4. Integration access - Control connected platforms (Slack, Discord, etc.)
12
+ */
13
+ export interface SecurityToolInput {
14
+ language?: 'en' | 'ko';
15
+ acknowledge?: boolean;
16
+ }
17
+ export interface SecurityTool {
18
+ name: string;
19
+ description: string;
20
+ input_schema: {
21
+ type: 'object';
22
+ properties: Record<string, any>;
23
+ required: string[];
24
+ };
25
+ handler: (input: SecurityToolInput) => Promise<any>;
26
+ }
27
+ /**
28
+ * Phase 6 Tool: Present Security Warning
29
+ *
30
+ * MANDATORY gate before Phase 7. Requires explicit acknowledgment.
31
+ */
32
+ export declare const PHASE_6_TOOL: SecurityTool;
33
+ //# sourceMappingURL=phase-6-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-6-security.d.ts","sourceRoot":"","sources":["../../src/onboarding/phase-6-security.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACrD;AAgaD;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,YAmE1B,CAAC"}
@@ -0,0 +1,473 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PHASE_6_TOOL = void 0;
4
+ const promises_1 = require("node:fs/promises");
5
+ const config_manager_js_1 = require("../cli/config/config-manager.js");
6
+ const onboarding_state_js_1 = require("./onboarding-state.js");
7
+ const SECURITY_RISKS = {
8
+ en: {
9
+ file_access: {
10
+ title: 'πŸ—‚οΈ File Access Risk',
11
+ description: 'MAMA can read and write ANY file on your system that your user account can access.',
12
+ examples: [
13
+ 'βœ… Safe: Read project files, write logs',
14
+ '⚠️ Risky: Access ~/.ssh/id_rsa, ~/.aws/credentials',
15
+ '❌ Dangerous: Modify system files, delete important data',
16
+ ],
17
+ mitigation: [
18
+ 'Run MAMA in a dedicated user account with limited permissions',
19
+ 'Use file system permissions to restrict sensitive directories',
20
+ 'Regularly audit file access logs',
21
+ ],
22
+ },
23
+ command_execution: {
24
+ title: '⚑ Command Execution Risk',
25
+ description: 'MAMA can execute arbitrary shell commands with your user privileges.',
26
+ examples: [
27
+ 'βœ… Safe: npm install, git commit, docker build',
28
+ '⚠️ Risky: curl | bash, rm -rf with wildcards',
29
+ '❌ Dangerous: sudo commands, system service manipulation',
30
+ ],
31
+ mitigation: [
32
+ 'Never run MAMA with sudo or root privileges',
33
+ 'Use Docker containers or VMs for isolated execution',
34
+ 'Review command history regularly',
35
+ ],
36
+ },
37
+ network_access: {
38
+ title: '🌐 Network Access Risk',
39
+ description: 'MAMA can make HTTP requests and connect to external services.',
40
+ examples: [
41
+ 'βœ… Safe: Fetch documentation, check package versions',
42
+ '⚠️ Risky: Upload files to unknown endpoints',
43
+ '❌ Dangerous: Exfiltrate sensitive data, DDoS attacks',
44
+ ],
45
+ mitigation: [
46
+ 'Use firewall rules to restrict outbound connections',
47
+ 'Monitor network traffic for suspicious activity',
48
+ 'Limit API keys to read-only access when possible',
49
+ ],
50
+ },
51
+ integration_access: {
52
+ title: 'πŸ”Œ Integration Access Risk',
53
+ description: 'MAMA can send messages and perform actions on connected platforms (Slack, Discord, etc.)',
54
+ examples: [
55
+ 'βœ… Safe: Send notifications, respond to DMs',
56
+ '⚠️ Risky: Post in public channels without review',
57
+ '❌ Dangerous: Spam, impersonate you, leak private data',
58
+ ],
59
+ mitigation: [
60
+ 'Use separate bot accounts, not personal accounts',
61
+ 'Limit bot permissions to necessary scopes only',
62
+ 'Enable approval workflows for public actions',
63
+ ],
64
+ },
65
+ },
66
+ ko: {
67
+ file_access: {
68
+ title: 'πŸ—‚οΈ 파일 μ ‘κ·Ό μœ„ν—˜',
69
+ description: 'MAMAλŠ” μ‚¬μš©μž 계정이 μ ‘κ·Όν•  수 μžˆλŠ” λͺ¨λ“  νŒŒμΌμ„ 읽고 μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.',
70
+ examples: [
71
+ 'βœ… μ•ˆμ „: ν”„λ‘œμ νŠΈ 파일 읽기, 둜그 μž‘μ„±',
72
+ '⚠️ μœ„ν—˜: ~/.ssh/id_rsa, ~/.aws/credentials μ ‘κ·Ό',
73
+ '❌ 맀우 μœ„ν—˜: μ‹œμŠ€ν…œ 파일 μˆ˜μ •, μ€‘μš” 데이터 μ‚­μ œ',
74
+ ],
75
+ mitigation: [
76
+ 'μ œν•œλœ κΆŒν•œμ„ κ°€μ§„ μ „μš© μ‚¬μš©μž κ³„μ •μ—μ„œ MAMA μ‹€ν–‰',
77
+ '파일 μ‹œμŠ€ν…œ κΆŒν•œμœΌλ‘œ λ―Όκ°ν•œ 디렉토리 μ œν•œ',
78
+ '파일 μ ‘κ·Ό 둜그 정기적 감사',
79
+ ],
80
+ },
81
+ command_execution: {
82
+ title: '⚑ λͺ…λ Ή μ‹€ν–‰ μœ„ν—˜',
83
+ description: 'MAMAλŠ” μ‚¬μš©μž κΆŒν•œμœΌλ‘œ μž„μ˜μ˜ μ…Έ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.',
84
+ examples: [
85
+ 'βœ… μ•ˆμ „: npm install, git commit, docker build',
86
+ '⚠️ μœ„ν—˜: curl | bash, μ™€μΌλ“œμΉ΄λ“œλ₯Ό μ‚¬μš©ν•œ rm -rf',
87
+ '❌ 맀우 μœ„ν—˜: sudo λͺ…λ Ή, μ‹œμŠ€ν…œ μ„œλΉ„μŠ€ μ‘°μž‘',
88
+ ],
89
+ mitigation: [
90
+ 'sudoλ‚˜ root κΆŒν•œμœΌλ‘œ MAMAλ₯Ό μ ˆλŒ€ μ‹€ν–‰ν•˜μ§€ 말 것',
91
+ '격리된 싀행을 μœ„ν•΄ Docker μ»¨ν…Œμ΄λ„ˆλ‚˜ VM μ‚¬μš©',
92
+ 'λͺ…λ Ή νžˆμŠ€ν† λ¦¬ 정기적 κ²€ν† ',
93
+ ],
94
+ },
95
+ network_access: {
96
+ title: '🌐 λ„€νŠΈμ›Œν¬ μ ‘κ·Ό μœ„ν—˜',
97
+ description: 'MAMAλŠ” HTTP μš”μ²­μ„ λ§Œλ“€κ³  μ™ΈλΆ€ μ„œλΉ„μŠ€μ— μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.',
98
+ examples: [
99
+ 'βœ… μ•ˆμ „: λ¬Έμ„œ κ°€μ Έμ˜€κΈ°, νŒ¨ν‚€μ§€ 버전 확인',
100
+ '⚠️ μœ„ν—˜: μ•Œ 수 μ—†λŠ” μ—”λ“œν¬μΈνŠΈλ‘œ 파일 μ—…λ‘œλ“œ',
101
+ '❌ 맀우 μœ„ν—˜: λ―Όκ°ν•œ 데이터 유좜, DDoS 곡격',
102
+ ],
103
+ mitigation: [
104
+ 'λ°©ν™”λ²½ κ·œμΉ™μœΌλ‘œ μ•„μ›ƒλ°”μš΄λ“œ μ—°κ²° μ œν•œ',
105
+ 'μ˜μ‹¬μŠ€λŸ¬μš΄ ν™œλ™μ— λŒ€ν•œ λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½ λͺ¨λ‹ˆν„°λ§',
106
+ 'κ°€λŠ₯ν•œ 경우 읽기 μ „μš© API ν‚€ μ‚¬μš©',
107
+ ],
108
+ },
109
+ integration_access: {
110
+ title: 'πŸ”Œ 톡합 μ ‘κ·Ό μœ„ν—˜',
111
+ description: 'MAMAλŠ” μ—°κ²°λœ ν”Œλž«νΌ(Slack, Discord λ“±)μ—μ„œ λ©”μ‹œμ§€λ₯Ό 보내고 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.',
112
+ examples: [
113
+ 'βœ… μ•ˆμ „: μ•Œλ¦Ό 전솑, DM에 응닡',
114
+ '⚠️ μœ„ν—˜: κ²€ν†  없이 곡개 채널에 κ²Œμ‹œ',
115
+ '❌ 맀우 μœ„ν—˜: 슀팸, μ‚¬μš©μž 사칭, 개인 데이터 유좜',
116
+ ],
117
+ mitigation: [
118
+ '개인 계정이 μ•„λ‹Œ λ³„λ„μ˜ 봇 계정 μ‚¬μš©',
119
+ 'ν•„μš”ν•œ λ²”μœ„λ‘œλ§Œ 봇 κΆŒν•œ μ œν•œ',
120
+ '곡개 μž‘μ—…μ— λŒ€ν•œ 승인 μ›Œν¬ν”Œλ‘œμš° ν™œμ„±ν™”',
121
+ ],
122
+ },
123
+ },
124
+ };
125
+ const SANDBOX_RECOMMENDATIONS = {
126
+ en: {
127
+ title: 'πŸ›‘οΈ Recommended: Sandbox Setup',
128
+ intro: 'For maximum security, run MAMA in an isolated environment with limited privileges.',
129
+ methods: [
130
+ {
131
+ name: 'Docker Container (Easiest)',
132
+ steps: [
133
+ 'Create a Dockerfile with minimal base image',
134
+ 'Mount only necessary directories as read-only',
135
+ 'Use --network=none flag to disable network access',
136
+ 'Run container with --user flag (non-root)',
137
+ ],
138
+ },
139
+ {
140
+ name: 'Virtual Machine',
141
+ steps: [
142
+ 'Use lightweight VM (e.g., Alpine Linux)',
143
+ 'Snapshot before running MAMA',
144
+ 'Limit VM network access via host firewall',
145
+ 'Use separate SSH keys for VM access',
146
+ ],
147
+ },
148
+ {
149
+ name: 'Dedicated User Account',
150
+ steps: [
151
+ 'Create new user: useradd -m -s /bin/bash mama-user',
152
+ 'Set strict umask: echo "umask 077" >> ~/.bashrc',
153
+ 'Restrict sudo access completely',
154
+ 'Use chroot jail for additional isolation',
155
+ ],
156
+ },
157
+ ],
158
+ },
159
+ ko: {
160
+ title: 'πŸ›‘οΈ ꢌμž₯: μƒŒλ“œλ°•μŠ€ μ„€μ •',
161
+ intro: 'μ΅œλŒ€ λ³΄μ•ˆμ„ μœ„ν•΄ μ œν•œλœ κΆŒν•œμ„ κ°€μ§„ 격리된 ν™˜κ²½μ—μ„œ MAMAλ₯Ό μ‹€ν–‰ν•˜μ„Έμš”.',
162
+ methods: [
163
+ {
164
+ name: 'Docker μ»¨ν…Œμ΄λ„ˆ (κ°€μž₯ 쉬움)',
165
+ steps: [
166
+ 'μ΅œμ†Œν•œμ˜ 베이슀 μ΄λ―Έμ§€λ‘œ Dockerfile 생성',
167
+ 'ν•„μš”ν•œ λ””λ ‰ν† λ¦¬λ§Œ 읽기 μ „μš©μœΌλ‘œ 마운트',
168
+ 'λ„€νŠΈμ›Œν¬ μ ‘κ·Ό λΉ„ν™œμ„±ν™”λ₯Ό μœ„ν•΄ --network=none ν”Œλž˜κ·Έ μ‚¬μš©',
169
+ 'λΉ„λ£¨νŠΈ μ‚¬μš©μžλ‘œ μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ (--user ν”Œλž˜κ·Έ)',
170
+ ],
171
+ },
172
+ {
173
+ name: '가상 λ¨Έμ‹ ',
174
+ steps: [
175
+ 'κ²½λŸ‰ VM μ‚¬μš© (예: Alpine Linux)',
176
+ 'MAMA μ‹€ν–‰ μ „ μŠ€λƒ…μƒ· 생성',
177
+ '호슀트 방화벽을 톡해 VM λ„€νŠΈμ›Œν¬ μ ‘κ·Ό μ œν•œ',
178
+ 'VM μ ‘κ·Όμš© λ³„λ„μ˜ SSH ν‚€ μ‚¬μš©',
179
+ ],
180
+ },
181
+ {
182
+ name: 'μ „μš© μ‚¬μš©μž 계정',
183
+ steps: [
184
+ 'μƒˆ μ‚¬μš©μž 생성: useradd -m -s /bin/bash mama-user',
185
+ 'μ—„κ²©ν•œ umask μ„€μ •: echo "umask 077" >> ~/.bashrc',
186
+ 'sudo μ ‘κ·Ό μ™„μ „ μ œν•œ',
187
+ 'μΆ”κ°€ 격리λ₯Ό μœ„ν•΄ chroot jail μ‚¬μš©',
188
+ ],
189
+ },
190
+ ],
191
+ },
192
+ };
193
+ const SAFE_USAGE_PRACTICES = {
194
+ en: [
195
+ 'πŸ“‹ Review actions before execution - Use dry-run modes when available',
196
+ 'πŸ” Audit logs regularly - Check file access and command history',
197
+ 'πŸ” Use read-only API keys - Limit damage from potential leaks',
198
+ 'πŸ’Ύ Backup before major changes - Always have a rollback plan',
199
+ '🚫 Never share credentials - Keep tokens and passwords private',
200
+ 'πŸ‘€ Monitor resource usage - Detect unusual CPU/network activity',
201
+ 'πŸ“¦ Principle of least privilege - Grant only necessary permissions',
202
+ 'πŸ”„ Rotate secrets regularly - Change API keys and tokens periodically',
203
+ ],
204
+ ko: [
205
+ 'πŸ“‹ μ‹€ν–‰ μ „ μž‘μ—… κ²€ν†  - κ°€λŠ₯ν•œ 경우 dry-run λͺ¨λ“œ μ‚¬μš©',
206
+ 'πŸ” 둜그 정기적 감사 - 파일 μ ‘κ·Ό 및 λͺ…λ Ή νžˆμŠ€ν† λ¦¬ 확인',
207
+ 'πŸ” 읽기 μ „μš© API ν‚€ μ‚¬μš© - 잠재적 유좜둜 μΈν•œ ν”Όν•΄ μ œν•œ',
208
+ 'πŸ’Ύ μ£Όμš” λ³€κ²½ μ „ λ°±μ—… - 항상 λ‘€λ°± κ³„νš μ€€λΉ„',
209
+ '🚫 자격 증λͺ… 곡유 κΈˆμ§€ - 토큰과 λΉ„λ°€λ²ˆν˜Έ λΉ„κ³΅κ°œ μœ μ§€',
210
+ 'πŸ‘€ λ¦¬μ†ŒμŠ€ μ‚¬μš©λŸ‰ λͺ¨λ‹ˆν„°λ§ - 비정상적인 CPU/λ„€νŠΈμ›Œν¬ ν™œλ™ 감지',
211
+ 'πŸ“¦ μ΅œμ†Œ κΆŒν•œ 원칙 - ν•„μš”ν•œ κΆŒν•œλ§Œ λΆ€μ—¬',
212
+ 'πŸ”„ λΉ„λ°€ 정보 μ •κΈ° ꡐ체 - API 킀와 토큰 주기적으둜 λ³€κ²½',
213
+ ],
214
+ };
215
+ function formatSecurityWarning(language) {
216
+ const risks = SECURITY_RISKS[language];
217
+ const sandbox = SANDBOX_RECOMMENDATIONS[language];
218
+ const practices = SAFE_USAGE_PRACTICES[language];
219
+ if (language === 'ko') {
220
+ return `# ⚠️ λ³΄μ•ˆ κ²½κ³  - μ§„ν–‰ν•˜κΈ° 전에 μ½μ–΄μ£Όμ„Έμš”
221
+
222
+ **μ€‘μš”: 이것은 λ‹¨μˆœν•œ κ²½κ³ κ°€ μ•„λ‹™λ‹ˆλ‹€. MAMAλŠ” μ‹œμŠ€ν…œμ— λŒ€ν•œ κ°•λ ₯ν•œ μ ‘κ·Ό κΆŒν•œμ„ κ°€μ§‘λ‹ˆλ‹€.**
223
+
224
+ λ‹€μŒ λ‹¨κ³„λ‘œ μ§„ν–‰ν•˜λ©΄ MAMAμ—κ²Œ λ‹€μŒ κΆŒν•œμ„ λΆ€μ—¬ν•˜κ²Œ λ©λ‹ˆλ‹€:
225
+
226
+ ## πŸ”΄ 4κ°€μ§€ μ£Όμš” μœ„ν—˜ μš”μ†Œ
227
+
228
+ ### ${risks.file_access.title}
229
+
230
+ ${risks.file_access.description}
231
+
232
+ **μ˜ˆμ‹œ:**
233
+ ${risks.file_access.examples.map((ex) => `- ${ex}`).join('\n')}
234
+
235
+ **μ™„ν™” 방법:**
236
+ ${risks.file_access.mitigation.map((m) => `- ${m}`).join('\n')}
237
+
238
+ ---
239
+
240
+ ### ${risks.command_execution.title}
241
+
242
+ ${risks.command_execution.description}
243
+
244
+ **μ˜ˆμ‹œ:**
245
+ ${risks.command_execution.examples.map((ex) => `- ${ex}`).join('\n')}
246
+
247
+ **μ™„ν™” 방법:**
248
+ ${risks.command_execution.mitigation.map((m) => `- ${m}`).join('\n')}
249
+
250
+ ---
251
+
252
+ ### ${risks.network_access.title}
253
+
254
+ ${risks.network_access.description}
255
+
256
+ **μ˜ˆμ‹œ:**
257
+ ${risks.network_access.examples.map((ex) => `- ${ex}`).join('\n')}
258
+
259
+ **μ™„ν™” 방법:**
260
+ ${risks.network_access.mitigation.map((m) => `- ${m}`).join('\n')}
261
+
262
+ ---
263
+
264
+ ### ${risks.integration_access.title}
265
+
266
+ ${risks.integration_access.description}
267
+
268
+ **μ˜ˆμ‹œ:**
269
+ ${risks.integration_access.examples.map((ex) => `- ${ex}`).join('\n')}
270
+
271
+ **μ™„ν™” 방법:**
272
+ ${risks.integration_access.mitigation.map((m) => `- ${m}`).join('\n')}
273
+
274
+ ---
275
+
276
+ ## ${sandbox.title}
277
+
278
+ ${sandbox.intro}
279
+
280
+ ${sandbox.methods
281
+ .map((method) => `
282
+ ### ${method.name}
283
+
284
+ ${method.steps.map((step, i) => `${i + 1}. ${step}`).join('\n')}
285
+ `)
286
+ .join('\n')}
287
+
288
+ ---
289
+
290
+ ## βœ… μ•ˆμ „ν•œ μ‚¬μš© κ΄€ν–‰
291
+
292
+ ${practices.map((practice) => `${practice}`).join('\n')}
293
+
294
+ ---
295
+
296
+ ## πŸ“ 계속 μ§„ν–‰ν•˜κΈ° 전에
297
+
298
+ λ‹€μŒ 사항을 μ΄ν•΄ν•˜κ³  λ™μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€:
299
+
300
+ 1. βœ… MAMAκ°€ μ‹œμŠ€ν…œμ— λŒ€ν•œ κ΄‘λ²”μœ„ν•œ μ ‘κ·Ό κΆŒν•œμ„ κ°–λŠ”λ‹€λŠ” 것을 μ΄ν•΄ν–ˆμŠ΅λ‹ˆλ‹€
301
+ 2. βœ… μœ„μ˜ 4κ°€μ§€ μœ„ν—˜ μš”μ†Œμ™€ μ™„ν™” 방법을 μ½μ—ˆμŠ΅λ‹ˆλ‹€
302
+ 3. βœ… κ°€λŠ₯ν•œ 경우 μƒŒλ“œλ°•μŠ€ ν™˜κ²½μ„ μ‚¬μš©ν•  것을 ꢌμž₯ν•©λ‹ˆλ‹€
303
+ 4. βœ… μ•ˆμ „ν•œ μ‚¬μš© 관행을 λ”°λ₯Ό κ²ƒμž…λ‹ˆλ‹€
304
+ 5. βœ… MAMA의 μž‘μ—…μ„ μ •κΈ°μ μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•˜κ³  감사할 κ²ƒμž…λ‹ˆλ‹€
305
+
306
+ **이 κ²½κ³ λ₯Ό μ΄ν•΄ν•˜κ³  μœ„ν—˜μ„ κ°μˆ˜ν•  μ€€λΉ„κ°€ λ˜μ—ˆλ‹€λ©΄, 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ ν™•μΈν•˜μ„Έμš”.**
307
+
308
+ ---
309
+
310
+ *이 λ¬Έμ„œλŠ” ~/.mama/security-acknowledgment.md에 μ €μž₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€.*
311
+ *μ–Έμ œλ“ μ§€ λ‹€μ‹œ μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.*
312
+ `;
313
+ }
314
+ else {
315
+ return `# ⚠️ Security Warning - Read Before Proceeding
316
+
317
+ **CRITICAL: This is not a routine warning. MAMA has powerful access to your system.**
318
+
319
+ By proceeding to the next phase, you are granting MAMA the following capabilities:
320
+
321
+ ## πŸ”΄ 4 Critical Risk Factors
322
+
323
+ ### ${risks.file_access.title}
324
+
325
+ ${risks.file_access.description}
326
+
327
+ **Examples:**
328
+ ${risks.file_access.examples.map((ex) => `- ${ex}`).join('\n')}
329
+
330
+ **Mitigation:**
331
+ ${risks.file_access.mitigation.map((m) => `- ${m}`).join('\n')}
332
+
333
+ ---
334
+
335
+ ### ${risks.command_execution.title}
336
+
337
+ ${risks.command_execution.description}
338
+
339
+ **Examples:**
340
+ ${risks.command_execution.examples.map((ex) => `- ${ex}`).join('\n')}
341
+
342
+ **Mitigation:**
343
+ ${risks.command_execution.mitigation.map((m) => `- ${m}`).join('\n')}
344
+
345
+ ---
346
+
347
+ ### ${risks.network_access.title}
348
+
349
+ ${risks.network_access.description}
350
+
351
+ **Examples:**
352
+ ${risks.network_access.examples.map((ex) => `- ${ex}`).join('\n')}
353
+
354
+ **Mitigation:**
355
+ ${risks.network_access.mitigation.map((m) => `- ${m}`).join('\n')}
356
+
357
+ ---
358
+
359
+ ### ${risks.integration_access.title}
360
+
361
+ ${risks.integration_access.description}
362
+
363
+ **Examples:**
364
+ ${risks.integration_access.examples.map((ex) => `- ${ex}`).join('\n')}
365
+
366
+ **Mitigation:**
367
+ ${risks.integration_access.mitigation.map((m) => `- ${m}`).join('\n')}
368
+
369
+ ---
370
+
371
+ ## ${sandbox.title}
372
+
373
+ ${sandbox.intro}
374
+
375
+ ${sandbox.methods
376
+ .map((method) => `
377
+ ### ${method.name}
378
+
379
+ ${method.steps.map((step, i) => `${i + 1}. ${step}`).join('\n')}
380
+ `)
381
+ .join('\n')}
382
+
383
+ ---
384
+
385
+ ## βœ… Safe Usage Practices
386
+
387
+ ${practices.map((practice) => `${practice}`).join('\n')}
388
+
389
+ ---
390
+
391
+ ## πŸ“ Before You Continue
392
+
393
+ You must understand and acknowledge the following:
394
+
395
+ 1. βœ… I understand MAMA has extensive access to my system
396
+ 2. βœ… I have read the 4 risk factors and mitigation strategies
397
+ 3. βœ… I will use a sandboxed environment when possible
398
+ 4. βœ… I will follow safe usage practices
399
+ 5. βœ… I will regularly monitor and audit MAMA's actions
400
+
401
+ **If you understand this warning and are ready to accept the risks, use the tool to acknowledge.**
402
+
403
+ ---
404
+
405
+ *This document has been saved to ~/.mama/security-acknowledgment.md*
406
+ *You can refer to it at any time.*
407
+ `;
408
+ }
409
+ }
410
+ /**
411
+ * Phase 6 Tool: Present Security Warning
412
+ *
413
+ * MANDATORY gate before Phase 7. Requires explicit acknowledgment.
414
+ */
415
+ exports.PHASE_6_TOOL = {
416
+ name: 'present_security_warning',
417
+ description: 'Present comprehensive security warning and save acknowledgment. MANDATORY gate before Phase 7. Explains 4 risk factors (file access, command execution, network access, integration access), recommends sandbox setup, and requires explicit user acknowledgment.',
418
+ input_schema: {
419
+ type: 'object',
420
+ properties: {
421
+ language: {
422
+ type: 'string',
423
+ enum: ['en', 'ko'],
424
+ description: 'Language for security warning (default: en)',
425
+ },
426
+ acknowledge: {
427
+ type: 'boolean',
428
+ description: 'User acknowledgment that they understand the risks (default: false). Must be true to proceed.',
429
+ },
430
+ },
431
+ required: [],
432
+ },
433
+ handler: async (input) => {
434
+ const language = input.language || 'en';
435
+ const acknowledge = input.acknowledge || false;
436
+ const warningMessage = formatSecurityWarning(language);
437
+ const filePath = (0, config_manager_js_1.expandPath)('~/.mama/security-acknowledgment.md');
438
+ await (0, promises_1.writeFile)(filePath, warningMessage, 'utf-8');
439
+ if (!acknowledge) {
440
+ return {
441
+ success: false,
442
+ warning_presented: true,
443
+ file_saved: filePath,
444
+ message: language === 'ko'
445
+ ? '⚠️ λ³΄μ•ˆ κ²½κ³ κ°€ ν‘œμ‹œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ³„μ†ν•˜λ €λ©΄ acknowledge: true둜 이 도ꡬλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•˜μ„Έμš”.'
446
+ : '⚠️ Security warning presented. To continue, call this tool again with acknowledge: true.',
447
+ next_steps: language === 'ko'
448
+ ? '1. μœ„μ˜ λ³΄μ•ˆ κ²½κ³ λ₯Ό 주의 깊게 μ½μœΌμ„Έμš”\n2. λͺ¨λ“  μœ„ν—˜ μš”μ†Œμ™€ μ™„ν™” 방법을 μ΄ν•΄ν•˜μ„Έμš”\n3. μ€€λΉ„κ°€ 되면 acknowledge: true둜 ν™•μΈν•˜μ„Έμš”'
449
+ : '1. Read the security warning above carefully\n2. Understand all risk factors and mitigations\n3. When ready, acknowledge with acknowledge: true',
450
+ };
451
+ }
452
+ // Update onboarding state
453
+ (0, onboarding_state_js_1.completePhase)(6);
454
+ (0, onboarding_state_js_1.recordFileCreated)('security-acknowledgment.md');
455
+ return {
456
+ success: true,
457
+ acknowledged: true,
458
+ file_saved: filePath,
459
+ message: language === 'ko'
460
+ ? 'βœ… λ³΄μ•ˆ κ²½κ³  확인 μ™„λ£Œ. Phase 7둜 μ§„ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.'
461
+ : 'βœ… Security warning acknowledged. You may proceed to Phase 7.',
462
+ risks_understood: [
463
+ 'file_access',
464
+ 'command_execution',
465
+ 'network_access',
466
+ 'integration_access',
467
+ ],
468
+ sandbox_recommended: true,
469
+ phase_7_unlocked: true,
470
+ };
471
+ },
472
+ };
473
+ //# sourceMappingURL=phase-6-security.js.map