@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,237 @@
1
+ "use strict";
2
+ /**
3
+ * OAuth Token Manager for MAMA Standalone
4
+ *
5
+ * Manages Claude Pro OAuth tokens from ~/.claude/.credentials.json
6
+ * - Reads tokens from Claude Code credentials file
7
+ * - Caches tokens with TTL
8
+ * - Auto-refreshes tokens before expiry
9
+ * - Writes refreshed tokens back to file
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.OAuthManager = void 0;
13
+ const promises_1 = require("node:fs/promises");
14
+ const node_fs_1 = require("node:fs");
15
+ const node_os_1 = require("node:os");
16
+ const node_path_1 = require("node:path");
17
+ const types_js_1 = require("./types.js");
18
+ /**
19
+ * Anthropic OAuth constants (from OpenClaw analysis)
20
+ */
21
+ const TOKEN_URL = 'https://console.anthropic.com/v1/oauth/token';
22
+ const CLIENT_ID = 'OWQxYzI1MGEtZTYxYi00NGQ5LTg4ZWQtNTk0NGQxOTYyZjVl';
23
+ /**
24
+ * Default configuration
25
+ */
26
+ const DEFAULT_CREDENTIALS_PATH = '.claude/.credentials.json';
27
+ const DEFAULT_CACHE_TTL_MS = 60_000; // 1 minute
28
+ const DEFAULT_REFRESH_BUFFER_MS = 600_000; // 10 minutes
29
+ const EXPIRY_BUFFER_MS = 300_000; // 5 minutes buffer when calculating expiry
30
+ class OAuthManager {
31
+ credentialsPath;
32
+ cacheTtlMs;
33
+ refreshBufferMs;
34
+ fetchFn;
35
+ cache = null;
36
+ constructor(options = {}) {
37
+ this.credentialsPath = options.credentialsPath ?? (0, node_path_1.join)((0, node_os_1.homedir)(), DEFAULT_CREDENTIALS_PATH);
38
+ this.cacheTtlMs = options.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;
39
+ this.refreshBufferMs = options.refreshBufferMs ?? DEFAULT_REFRESH_BUFFER_MS;
40
+ this.fetchFn = options.fetchFn ?? fetch;
41
+ }
42
+ /**
43
+ * Get a valid access token, refreshing if necessary
44
+ *
45
+ * @returns Access token string
46
+ * @throws OAuthError if token cannot be obtained
47
+ */
48
+ async getToken() {
49
+ const now = Date.now();
50
+ // Check cache first
51
+ if (this.cache && now - this.cache.cachedAt < this.cacheTtlMs) {
52
+ // Cache is valid, but check if token needs refresh
53
+ if (!this.needsRefresh(this.cache.token.expiresAt)) {
54
+ return this.cache.token.accessToken;
55
+ }
56
+ }
57
+ // Read credentials from file
58
+ const credentials = await this.readCredentials();
59
+ // Check if refresh is needed
60
+ if (this.needsRefresh(credentials.expiresAt)) {
61
+ const refreshedToken = await this.refreshToken(credentials.refreshToken);
62
+ await this.writeCredentials(refreshedToken);
63
+ this.cache = {
64
+ token: refreshedToken,
65
+ cachedAt: now,
66
+ subscriptionType: credentials.subscriptionType,
67
+ rateLimitTier: credentials.rateLimitTier,
68
+ };
69
+ return refreshedToken.accessToken;
70
+ }
71
+ // Token is still valid, cache it
72
+ this.cache = {
73
+ token: {
74
+ accessToken: credentials.accessToken,
75
+ refreshToken: credentials.refreshToken,
76
+ expiresAt: credentials.expiresAt,
77
+ },
78
+ cachedAt: now,
79
+ subscriptionType: credentials.subscriptionType,
80
+ rateLimitTier: credentials.rateLimitTier,
81
+ };
82
+ return credentials.accessToken;
83
+ }
84
+ /**
85
+ * Get token status information
86
+ *
87
+ * @returns Token status including validity, expiry, and subscription info
88
+ */
89
+ async getStatus() {
90
+ try {
91
+ const credentials = await this.readCredentials();
92
+ const now = Date.now();
93
+ const expiresIn = Math.floor((credentials.expiresAt - now) / 1000);
94
+ return {
95
+ valid: credentials.expiresAt > now,
96
+ expiresAt: credentials.expiresAt,
97
+ expiresIn: expiresIn > 0 ? expiresIn : 0,
98
+ needsRefresh: this.needsRefresh(credentials.expiresAt),
99
+ subscriptionType: credentials.subscriptionType,
100
+ rateLimitTier: credentials.rateLimitTier,
101
+ };
102
+ }
103
+ catch (error) {
104
+ if (error instanceof types_js_1.OAuthError) {
105
+ return {
106
+ valid: false,
107
+ expiresAt: null,
108
+ expiresIn: null,
109
+ needsRefresh: false,
110
+ error: error.message,
111
+ };
112
+ }
113
+ throw error;
114
+ }
115
+ }
116
+ /**
117
+ * Force refresh the token
118
+ *
119
+ * @returns New access token
120
+ * @throws OAuthError if refresh fails
121
+ */
122
+ async forceRefresh() {
123
+ const credentials = await this.readCredentials();
124
+ const refreshedToken = await this.refreshToken(credentials.refreshToken);
125
+ await this.writeCredentials(refreshedToken);
126
+ this.cache = {
127
+ token: refreshedToken,
128
+ cachedAt: Date.now(),
129
+ subscriptionType: credentials.subscriptionType,
130
+ rateLimitTier: credentials.rateLimitTier,
131
+ };
132
+ return refreshedToken.accessToken;
133
+ }
134
+ /**
135
+ * Clear the token cache
136
+ */
137
+ clearCache() {
138
+ this.cache = null;
139
+ }
140
+ /**
141
+ * Check if token needs refresh (expires within buffer time)
142
+ */
143
+ needsRefresh(expiresAt) {
144
+ return Date.now() >= expiresAt - this.refreshBufferMs;
145
+ }
146
+ /**
147
+ * Read credentials from file
148
+ */
149
+ async readCredentials() {
150
+ if (!(0, node_fs_1.existsSync)(this.credentialsPath)) {
151
+ throw new types_js_1.OAuthError(`Claude Code credentials not found. Please install Claude Code first and log in.\nExpected path: ${this.credentialsPath}`, 'CREDENTIALS_NOT_FOUND');
152
+ }
153
+ try {
154
+ const content = await (0, promises_1.readFile)(this.credentialsPath, 'utf-8');
155
+ const data = JSON.parse(content);
156
+ if (!data.claudeAiOauth) {
157
+ throw new types_js_1.OAuthError('Invalid credentials file: claudeAiOauth object not found. Please log in to Claude Code.', 'INVALID_CREDENTIALS');
158
+ }
159
+ const oauth = data.claudeAiOauth;
160
+ if (!oauth.accessToken || !oauth.refreshToken || !oauth.expiresAt) {
161
+ throw new types_js_1.OAuthError('Invalid credentials: missing required fields (accessToken, refreshToken, expiresAt)', 'INVALID_CREDENTIALS');
162
+ }
163
+ return oauth;
164
+ }
165
+ catch (error) {
166
+ if (error instanceof types_js_1.OAuthError) {
167
+ throw error;
168
+ }
169
+ throw new types_js_1.OAuthError(`Failed to read credentials file: ${error instanceof Error ? error.message : String(error)}`, 'INVALID_CREDENTIALS', error instanceof Error ? error : undefined);
170
+ }
171
+ }
172
+ /**
173
+ * Refresh the OAuth token
174
+ */
175
+ async refreshToken(refreshToken) {
176
+ try {
177
+ const response = await this.fetchFn(TOKEN_URL, {
178
+ method: 'POST',
179
+ headers: {
180
+ 'Content-Type': 'application/json',
181
+ },
182
+ body: JSON.stringify({
183
+ grant_type: 'refresh_token',
184
+ client_id: CLIENT_ID,
185
+ refresh_token: refreshToken,
186
+ }),
187
+ });
188
+ if (!response.ok) {
189
+ const errorText = await response.text();
190
+ throw new types_js_1.OAuthError(`Token refresh failed (${response.status}): ${errorText}`, 'REFRESH_FAILED');
191
+ }
192
+ const data = (await response.json());
193
+ // Calculate expiry with 5 minute buffer (matching OpenClaw behavior)
194
+ const expiresAt = Date.now() + data.expires_in * 1000 - EXPIRY_BUFFER_MS;
195
+ return {
196
+ accessToken: data.access_token,
197
+ refreshToken: data.refresh_token,
198
+ expiresAt,
199
+ };
200
+ }
201
+ catch (error) {
202
+ if (error instanceof types_js_1.OAuthError) {
203
+ throw error;
204
+ }
205
+ throw new types_js_1.OAuthError(`Network error during token refresh: ${error instanceof Error ? error.message : String(error)}`, 'NETWORK_ERROR', error instanceof Error ? error : undefined);
206
+ }
207
+ }
208
+ /**
209
+ * Write refreshed credentials to file
210
+ */
211
+ async writeCredentials(token) {
212
+ try {
213
+ // Read existing file to preserve other fields
214
+ const content = await (0, promises_1.readFile)(this.credentialsPath, 'utf-8');
215
+ const data = JSON.parse(content);
216
+ if (!data.claudeAiOauth) {
217
+ throw new types_js_1.OAuthError('Cannot write credentials: claudeAiOauth object not found', 'FILE_WRITE_ERROR');
218
+ }
219
+ // Update only the token fields
220
+ data.claudeAiOauth = {
221
+ ...data.claudeAiOauth,
222
+ accessToken: token.accessToken,
223
+ refreshToken: token.refreshToken,
224
+ expiresAt: token.expiresAt,
225
+ };
226
+ await (0, promises_1.writeFile)(this.credentialsPath, JSON.stringify(data, null, 2), 'utf-8');
227
+ }
228
+ catch (error) {
229
+ if (error instanceof types_js_1.OAuthError) {
230
+ throw error;
231
+ }
232
+ throw new types_js_1.OAuthError(`Failed to write credentials file: ${error instanceof Error ? error.message : String(error)}`, 'FILE_WRITE_ERROR', error instanceof Error ? error : undefined);
233
+ }
234
+ }
235
+ }
236
+ exports.OAuthManager = OAuthManager;
237
+ //# sourceMappingURL=oauth-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-manager.js","sourceRoot":"","sources":["../../src/auth/oauth-manager.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,+CAAuD;AACvD,qCAAqC;AACrC,qCAAkC;AAClC,yCAAiC;AAYjC,yCAAwC;AAExC;;GAEG;AACH,MAAM,SAAS,GAAG,8CAA8C,CAAC;AACjE,MAAM,SAAS,GAAG,kDAAkD,CAAC;AAErE;;GAEG;AACH,MAAM,wBAAwB,GAAG,2BAA2B,CAAC;AAC7D,MAAM,oBAAoB,GAAG,MAAM,CAAC,CAAC,WAAW;AAChD,MAAM,yBAAyB,GAAG,OAAO,CAAC,CAAC,aAAa;AACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,2CAA2C;AAE7E,MAAa,YAAY;IACN,eAAe,CAAS;IACxB,UAAU,CAAS;IACnB,eAAe,CAAS;IACxB,OAAO,CAAe;IAE/B,KAAK,GAAuB,IAAI,CAAC;IAEzC,YAAY,UAA+B,EAAE;QAC3C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,wBAAwB,CAAC,CAAC;QAC5F,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,oBAAoB,CAAC;QAC7D,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,yBAAyB,CAAC;QAC5E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,oBAAoB;QACpB,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9D,mDAAmD;YACnD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;YACtC,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAEjD,6BAA6B;QAC7B,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACzE,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;YAE5C,IAAI,CAAC,KAAK,GAAG;gBACX,KAAK,EAAE,cAAc;gBACrB,QAAQ,EAAE,GAAG;gBACb,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;gBAC9C,aAAa,EAAE,WAAW,CAAC,aAAa;aACzC,CAAC;YAEF,OAAO,cAAc,CAAC,WAAW,CAAC;QACpC,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,KAAK,GAAG;YACX,KAAK,EAAE;gBACL,WAAW,EAAE,WAAW,CAAC,WAAW;gBACpC,YAAY,EAAE,WAAW,CAAC,YAAY;gBACtC,SAAS,EAAE,WAAW,CAAC,SAAS;aACjC;YACD,QAAQ,EAAE,GAAG;YACb,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;YAC9C,aAAa,EAAE,WAAW,CAAC,aAAa;SACzC,CAAC;QAEF,OAAO,WAAW,CAAC,WAAW,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAEnE,OAAO;gBACL,KAAK,EAAE,WAAW,CAAC,SAAS,GAAG,GAAG;gBAClC,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACxC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC;gBACtD,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;gBAC9C,aAAa,EAAE,WAAW,CAAC,aAAa;aACzC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,qBAAU,EAAE,CAAC;gBAChC,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,SAAS,EAAE,IAAI;oBACf,SAAS,EAAE,IAAI;oBACf,YAAY,EAAE,KAAK;oBACnB,KAAK,EAAE,KAAK,CAAC,OAAO;iBACrB,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QACjD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACzE,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,GAAG;YACX,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;YACpB,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;YAC9C,aAAa,EAAE,WAAW,CAAC,aAAa;SACzC,CAAC;QAEF,OAAO,cAAc,CAAC,WAAW,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,SAAiB;QACpC,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;IACxD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,qBAAU,CAClB,mGAAmG,IAAI,CAAC,eAAe,EAAE,EACzH,uBAAuB,CACxB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC9D,MAAM,IAAI,GAA0B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAExD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,MAAM,IAAI,qBAAU,CAClB,yFAAyF,EACzF,qBAAqB,CACtB,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;YAEjC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBAClE,MAAM,IAAI,qBAAU,CAClB,qFAAqF,EACrF,qBAAqB,CACtB,CAAC;YACJ,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,qBAAU,EAAE,CAAC;gBAChC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,qBAAU,CAClB,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC5F,qBAAqB,EACrB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,YAAoB;QAC7C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBAC7C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,UAAU,EAAE,eAAe;oBAC3B,SAAS,EAAE,SAAS;oBACpB,aAAa,EAAE,YAAY;iBAC5B,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,qBAAU,CAClB,yBAAyB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,EACzD,gBAAgB,CACjB,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;YAE7D,qEAAqE;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,gBAAgB,CAAC;YAEzE,OAAO;gBACL,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,YAAY,EAAE,IAAI,CAAC,aAAa;gBAChC,SAAS;aACV,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,qBAAU,EAAE,CAAC;gBAChC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,qBAAU,CAClB,uCAAuC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC/F,eAAe,EACf,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,KAAiB;QAC9C,IAAI,CAAC;YACH,8CAA8C;YAC9C,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC9D,MAAM,IAAI,GAA0B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAExD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,MAAM,IAAI,qBAAU,CAClB,0DAA0D,EAC1D,kBAAkB,CACnB,CAAC;YACJ,CAAC;YAED,+BAA+B;YAC/B,IAAI,CAAC,aAAa,GAAG;gBACnB,GAAG,IAAI,CAAC,aAAa;gBACrB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC;YAEF,MAAM,IAAA,oBAAS,EAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,qBAAU,EAAE,CAAC;gBAChC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,qBAAU,CAClB,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC7F,kBAAkB,EAClB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AApQD,oCAoQC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * OAuth Token Types for MAMA Standalone
3
+ *
4
+ * Based on Claude Code credentials structure (~/.claude/.credentials.json)
5
+ */
6
+ /**
7
+ * Raw credentials file structure from Claude Code
8
+ */
9
+ export interface ClaudeCredentialsFile {
10
+ claudeAiOauth?: ClaudeAiOAuth;
11
+ }
12
+ /**
13
+ * Claude AI OAuth credentials object
14
+ */
15
+ export interface ClaudeAiOAuth {
16
+ accessToken: string;
17
+ refreshToken: string;
18
+ expiresAt: number;
19
+ scopes?: string[];
20
+ subscriptionType?: string;
21
+ rateLimitTier?: string;
22
+ }
23
+ /**
24
+ * Internal token representation
25
+ */
26
+ export interface OAuthToken {
27
+ accessToken: string;
28
+ refreshToken: string;
29
+ expiresAt: number;
30
+ }
31
+ /**
32
+ * Token refresh response from Anthropic
33
+ */
34
+ export interface TokenRefreshResponse {
35
+ access_token: string;
36
+ refresh_token: string;
37
+ expires_in: number;
38
+ token_type: string;
39
+ }
40
+ /**
41
+ * Token status information
42
+ */
43
+ export interface TokenStatus {
44
+ valid: boolean;
45
+ expiresAt: number | null;
46
+ expiresIn: number | null;
47
+ needsRefresh: boolean;
48
+ subscriptionType?: string;
49
+ rateLimitTier?: string;
50
+ error?: string;
51
+ }
52
+ /**
53
+ * OAuth Manager configuration options
54
+ */
55
+ export interface OAuthManagerOptions {
56
+ /**
57
+ * Path to credentials file (default: ~/.claude/.credentials.json)
58
+ */
59
+ credentialsPath?: string;
60
+ /**
61
+ * Cache TTL in milliseconds (default: 60000 = 1 minute)
62
+ */
63
+ cacheTtlMs?: number;
64
+ /**
65
+ * Refresh buffer in milliseconds - refresh token this much before expiry
66
+ * (default: 600000 = 10 minutes)
67
+ */
68
+ refreshBufferMs?: number;
69
+ /**
70
+ * Custom fetch function for testing
71
+ */
72
+ fetchFn?: typeof fetch;
73
+ }
74
+ /**
75
+ * Cached token with metadata
76
+ */
77
+ export interface CachedToken {
78
+ token: OAuthToken;
79
+ cachedAt: number;
80
+ subscriptionType?: string;
81
+ rateLimitTier?: string;
82
+ }
83
+ /**
84
+ * Error types for OAuth operations
85
+ */
86
+ export declare class OAuthError extends Error {
87
+ readonly code: OAuthErrorCode;
88
+ readonly cause?: Error | undefined;
89
+ constructor(message: string, code: OAuthErrorCode, cause?: Error | undefined);
90
+ }
91
+ export type OAuthErrorCode = 'CREDENTIALS_NOT_FOUND' | 'INVALID_CREDENTIALS' | 'TOKEN_EXPIRED' | 'REFRESH_FAILED' | 'NETWORK_ERROR' | 'FILE_WRITE_ERROR';
92
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,KAAK;aAGjB,IAAI,EAAE,cAAc;aACpB,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,cAAc,EACpB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED,MAAM,MAAM,cAAc,GACtB,uBAAuB,GACvB,qBAAqB,GACrB,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,kBAAkB,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * OAuth Token Types for MAMA Standalone
4
+ *
5
+ * Based on Claude Code credentials structure (~/.claude/.credentials.json)
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.OAuthError = void 0;
9
+ /**
10
+ * Error types for OAuth operations
11
+ */
12
+ class OAuthError extends Error {
13
+ code;
14
+ cause;
15
+ constructor(message, code, cause) {
16
+ super(message);
17
+ this.code = code;
18
+ this.cause = cause;
19
+ this.name = 'OAuthError';
20
+ }
21
+ }
22
+ exports.OAuthError = OAuthError;
23
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAyFH;;GAEG;AACH,MAAa,UAAW,SAAQ,KAAK;IAGjB;IACA;IAHlB,YACE,OAAe,EACC,IAAoB,EACpB,KAAa;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAgB;QACpB,UAAK,GAAL,KAAK,CAAQ;QAG7B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AATD,gCASC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * mama init command
3
+ *
4
+ * Initialize MAMA configuration
5
+ */
6
+ /**
7
+ * Options for init command
8
+ */
9
+ export interface InitOptions {
10
+ /** Force overwrite existing config */
11
+ force?: boolean;
12
+ /** Skip Claude Code authentication check (for testing) */
13
+ skipAuthCheck?: boolean;
14
+ }
15
+ /**
16
+ * Execute init command
17
+ */
18
+ export declare function initCommand(options?: InitOptions): Promise<void>;
19
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAsDH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4G1E"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ /**
3
+ * mama init command
4
+ *
5
+ * Initialize MAMA configuration
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.initCommand = initCommand;
9
+ const node_fs_1 = require("node:fs");
10
+ const promises_1 = require("node:fs/promises");
11
+ const config_manager_js_1 = require("../config/config-manager.js");
12
+ const bootstrap_template_js_1 = require("../../onboarding/bootstrap-template.js");
13
+ /**
14
+ * CLAUDE.md template for workspace documentation
15
+ */
16
+ const CLAUDE_MD_TEMPLATE = `# MAMA
17
+
18
+ 저는 MAMA, 지속적 메모리를 가진 AI 비서입니다.
19
+
20
+ ## 워크스페이스 (중요!)
21
+
22
+ **모든 파일 작업은 아래 경로에서만 수행하세요:**
23
+
24
+ | 용도 | 경로 |
25
+ |------|------|
26
+ | 작업 디렉토리 | \`~/.mama/workspace/\` |
27
+ | 스킬 저장 | \`~/.mama/skills/\` |
28
+ | 스크립트 | \`~/.mama/workspace/scripts/\` |
29
+ | 데이터 | \`~/.mama/workspace/data/\` |
30
+ | 로그 | \`~/.mama/logs/\` |
31
+
32
+ **절대 사용 금지:**
33
+ - \`~/.openclaw/\` - 다른 프로젝트
34
+ - \`~/project/\` - 사용자 프로젝트 (명시적 요청 없이 수정 금지)
35
+
36
+ ## 메모리 시스템
37
+
38
+ MAMA는 결정의 진화를 추적합니다:
39
+
40
+ \`\`\`
41
+ 결정 v1 (실패) → v2 (부분 성공) → v3 (성공)
42
+ \`\`\`
43
+
44
+ 과거 결정을 검색하면 전체 맥락을 볼 수 있습니다.
45
+
46
+ ## 사용 가능한 명령어
47
+
48
+ - \`mama start\` - 에이전트 시작
49
+ - \`mama stop\` - 에이전트 중지
50
+ - \`mama status\` - 상태 확인
51
+ - \`mama run <command>\` - 일회성 명령 실행
52
+ `;
53
+ /**
54
+ * Execute init command
55
+ */
56
+ async function initCommand(options = {}) {
57
+ console.log('\n🔧 MAMA Standalone 초기화\n');
58
+ if (!options.skipAuthCheck) {
59
+ const credentialsPath = (0, config_manager_js_1.expandPath)('~/.claude/.credentials.json');
60
+ process.stdout.write('Claude Code 인증 확인... ');
61
+ if (!(0, node_fs_1.existsSync)(credentialsPath)) {
62
+ console.log('❌');
63
+ console.error('\n⚠️ Claude Code 인증 파일을 찾을 수 없습니다.');
64
+ console.error(` 예상 경로: ${credentialsPath}`);
65
+ console.error('\n Claude Code를 먼저 설치하고 로그인하세요:');
66
+ console.error(' https://claude.ai/code\n');
67
+ process.exit(1);
68
+ }
69
+ console.log('✓');
70
+ }
71
+ // Check if config already exists
72
+ if ((0, config_manager_js_1.configExists)() && !options.force) {
73
+ console.log(`\n⚠️ 설정 파일이 이미 존재합니다: ${(0, config_manager_js_1.getConfigPath)()}`);
74
+ console.log(' 덮어쓰려면 --force 옵션을 사용하세요.\n');
75
+ process.exit(1);
76
+ }
77
+ // Create config
78
+ process.stdout.write('설정 파일 생성 중... ');
79
+ try {
80
+ const configPath = await (0, config_manager_js_1.createDefaultConfig)(options.force);
81
+ console.log('✓');
82
+ console.log(`\n${configPath} 생성 완료\n`);
83
+ }
84
+ catch (error) {
85
+ console.log('❌');
86
+ console.error(`\n설정 파일 생성 실패: ${error instanceof Error ? error.message : String(error)}\n`);
87
+ process.exit(1);
88
+ }
89
+ // Create directory structure
90
+ const directories = [
91
+ { path: '~/.mama/skills', label: '스킬 디렉토리' },
92
+ { path: '~/.mama/workspace', label: '워크스페이스' },
93
+ { path: '~/.mama/workspace/scripts', label: '스크립트 디렉토리' },
94
+ { path: '~/.mama/workspace/data', label: '데이터 디렉토리' },
95
+ { path: '~/.mama/logs', label: '로그 디렉토리' },
96
+ ];
97
+ for (const dir of directories) {
98
+ const expandedPath = (0, config_manager_js_1.expandPath)(dir.path);
99
+ process.stdout.write(`${dir.label} 생성 중... `);
100
+ try {
101
+ if (!(0, node_fs_1.existsSync)(expandedPath)) {
102
+ await (0, promises_1.mkdir)(expandedPath, { recursive: true });
103
+ console.log('✓');
104
+ }
105
+ else {
106
+ console.log('(이미 존재)');
107
+ }
108
+ }
109
+ catch (error) {
110
+ console.log('❌');
111
+ console.error(`\n${dir.label} 생성 실패: ${error instanceof Error ? error.message : String(error)}\n`);
112
+ process.exit(1);
113
+ }
114
+ }
115
+ // Create CLAUDE.md
116
+ const claudeMdPath = (0, config_manager_js_1.expandPath)('~/.mama/CLAUDE.md');
117
+ process.stdout.write('CLAUDE.md 생성 중... ');
118
+ try {
119
+ if ((0, node_fs_1.existsSync)(claudeMdPath) && !options.force) {
120
+ console.log('(이미 존재)');
121
+ }
122
+ else {
123
+ await (0, promises_1.writeFile)(claudeMdPath, CLAUDE_MD_TEMPLATE, 'utf-8');
124
+ console.log('✓');
125
+ }
126
+ }
127
+ catch (error) {
128
+ console.log('❌');
129
+ console.error(`\nCLAUDE.md 생성 실패: ${error instanceof Error ? error.message : String(error)}\n`);
130
+ process.exit(1);
131
+ }
132
+ const bootstrapPath = (0, config_manager_js_1.expandPath)('~/.mama/BOOTSTRAP.md');
133
+ process.stdout.write('BOOTSTRAP.md 생성 중... ');
134
+ try {
135
+ if ((0, node_fs_1.existsSync)(bootstrapPath) && !options.force) {
136
+ console.log('(이미 존재)');
137
+ }
138
+ else {
139
+ await (0, promises_1.writeFile)(bootstrapPath, bootstrap_template_js_1.BOOTSTRAP_TEMPLATE, 'utf-8');
140
+ console.log('✓');
141
+ }
142
+ }
143
+ catch (error) {
144
+ console.log('❌');
145
+ console.error(`\nBOOTSTRAP.md 생성 실패: ${error instanceof Error ? error.message : String(error)}\n`);
146
+ process.exit(1);
147
+ }
148
+ // Show next steps
149
+ console.log('\n다음 단계:');
150
+ console.log(' mama setup 대화형 설정 마법사 (처음 실행)');
151
+ console.log(' mama start 에이전트 시작');
152
+ console.log(' mama status 상태 확인');
153
+ console.log('');
154
+ }
155
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * mama run command
3
+ *
4
+ * Run a single prompt through the agent loop (for testing)
5
+ */
6
+ /**
7
+ * Options for run command
8
+ */
9
+ export interface RunOptions {
10
+ /** Prompt to execute */
11
+ prompt: string;
12
+ /** Enable verbose output */
13
+ verbose?: boolean;
14
+ }
15
+ /**
16
+ * Execute run command
17
+ */
18
+ export declare function runCommand(options: RunOptions): Promise<void>;
19
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+EnE"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ /**
3
+ * mama run command
4
+ *
5
+ * Run a single prompt through the agent loop (for testing)
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.runCommand = runCommand;
9
+ const config_manager_js_1 = require("../config/config-manager.js");
10
+ const index_js_1 = require("../../auth/index.js");
11
+ const index_js_2 = require("../../agent/index.js");
12
+ /**
13
+ * Execute run command
14
+ */
15
+ async function runCommand(options) {
16
+ console.log('\n🤖 MAMA Run - Single Prompt Execution\n');
17
+ // Check config exists
18
+ if (!(0, config_manager_js_1.configExists)()) {
19
+ console.log('⚠️ 설정 파일이 없습니다.');
20
+ console.log(' 먼저 초기화하세요: mama init\n');
21
+ process.exit(1);
22
+ }
23
+ // Load config
24
+ let config;
25
+ try {
26
+ config = await (0, config_manager_js_1.loadConfig)();
27
+ }
28
+ catch (error) {
29
+ console.error(`설정 로드 실패: ${error instanceof Error ? error.message : String(error)}\n`);
30
+ process.exit(1);
31
+ }
32
+ // Check OAuth token
33
+ process.stdout.write('OAuth 토큰 확인... ');
34
+ let oauthManager;
35
+ try {
36
+ oauthManager = new index_js_1.OAuthManager();
37
+ await oauthManager.getToken();
38
+ console.log('✓');
39
+ }
40
+ catch (error) {
41
+ console.log('❌');
42
+ console.error(`\nOAuth 토큰 오류: ${error instanceof Error ? error.message : String(error)}`);
43
+ console.error('Claude Code에 다시 로그인하세요.\n');
44
+ process.exit(1);
45
+ }
46
+ // Create agent loop
47
+ const agentLoop = new index_js_2.AgentLoop(oauthManager, {
48
+ model: config.agent.model,
49
+ maxTurns: config.agent.max_turns,
50
+ onTurn: options.verbose
51
+ ? (turn) => {
52
+ console.log(`\n--- Turn ${turn.turn} (${turn.role}) ---`);
53
+ if (turn.stopReason) {
54
+ console.log(`Stop reason: ${turn.stopReason}`);
55
+ }
56
+ if (turn.usage) {
57
+ console.log(`Tokens: ${turn.usage.input_tokens} in / ${turn.usage.output_tokens} out`);
58
+ }
59
+ }
60
+ : undefined,
61
+ onToolUse: options.verbose
62
+ ? (toolName, input, result) => {
63
+ console.log(`\n🔧 Tool: ${toolName}`);
64
+ console.log(` Input: ${JSON.stringify(input)}`);
65
+ console.log(` Result: ${JSON.stringify(result).substring(0, 200)}...`);
66
+ }
67
+ : undefined,
68
+ });
69
+ // Run the prompt
70
+ console.log(`\n📝 Prompt: "${options.prompt}"\n`);
71
+ console.log('─'.repeat(50));
72
+ console.log('Processing...\n');
73
+ try {
74
+ const startTime = Date.now();
75
+ const result = await agentLoop.run(options.prompt);
76
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(2);
77
+ console.log('─'.repeat(50));
78
+ console.log('\n📤 Response:\n');
79
+ console.log(result.response);
80
+ console.log('\n─'.repeat(50));
81
+ console.log(`\n✓ 완료 (${result.turns} turns, ${elapsed}s)`);
82
+ console.log(` Tokens: ${result.totalUsage.input_tokens} input / ${result.totalUsage.output_tokens} output\n`);
83
+ }
84
+ catch (error) {
85
+ console.error(`\n❌ 실행 실패: ${error instanceof Error ? error.message : String(error)}\n`);
86
+ process.exit(1);
87
+ }
88
+ }
89
+ //# sourceMappingURL=run.js.map