adaria-ai 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +21 -0
  3. package/apps.example.yaml +65 -0
  4. package/dist/agent/audit.d.ts +16 -0
  5. package/dist/agent/audit.d.ts.map +1 -0
  6. package/dist/agent/audit.js +42 -0
  7. package/dist/agent/audit.js.map +1 -0
  8. package/dist/agent/claude.d.ts +62 -0
  9. package/dist/agent/claude.d.ts.map +1 -0
  10. package/dist/agent/claude.js +297 -0
  11. package/dist/agent/claude.js.map +1 -0
  12. package/dist/agent/conversation-summary.d.ts +29 -0
  13. package/dist/agent/conversation-summary.d.ts.map +1 -0
  14. package/dist/agent/conversation-summary.js +221 -0
  15. package/dist/agent/conversation-summary.js.map +1 -0
  16. package/dist/agent/core.d.ts +81 -0
  17. package/dist/agent/core.d.ts.map +1 -0
  18. package/dist/agent/core.js +527 -0
  19. package/dist/agent/core.js.map +1 -0
  20. package/dist/agent/mcp-launcher.d.ts +42 -0
  21. package/dist/agent/mcp-launcher.d.ts.map +1 -0
  22. package/dist/agent/mcp-launcher.js +38 -0
  23. package/dist/agent/mcp-launcher.js.map +1 -0
  24. package/dist/agent/mcp-manager.d.ts +81 -0
  25. package/dist/agent/mcp-manager.d.ts.map +1 -0
  26. package/dist/agent/mcp-manager.js +136 -0
  27. package/dist/agent/mcp-manager.js.map +1 -0
  28. package/dist/agent/memory.d.ts +10 -0
  29. package/dist/agent/memory.d.ts.map +1 -0
  30. package/dist/agent/memory.js +95 -0
  31. package/dist/agent/memory.js.map +1 -0
  32. package/dist/agent/safety.d.ts +45 -0
  33. package/dist/agent/safety.d.ts.map +1 -0
  34. package/dist/agent/safety.js +71 -0
  35. package/dist/agent/safety.js.map +1 -0
  36. package/dist/agent/session.d.ts +27 -0
  37. package/dist/agent/session.d.ts.map +1 -0
  38. package/dist/agent/session.js +124 -0
  39. package/dist/agent/session.js.map +1 -0
  40. package/dist/agent/tool-descriptions.d.ts +8 -0
  41. package/dist/agent/tool-descriptions.d.ts.map +1 -0
  42. package/dist/agent/tool-descriptions.js +26 -0
  43. package/dist/agent/tool-descriptions.js.map +1 -0
  44. package/dist/cli/analyze.d.ts +8 -0
  45. package/dist/cli/analyze.d.ts.map +1 -0
  46. package/dist/cli/analyze.js +114 -0
  47. package/dist/cli/analyze.js.map +1 -0
  48. package/dist/cli/daemon.d.ts +2 -0
  49. package/dist/cli/daemon.d.ts.map +1 -0
  50. package/dist/cli/daemon.js +91 -0
  51. package/dist/cli/daemon.js.map +1 -0
  52. package/dist/cli/doctor.d.ts +2 -0
  53. package/dist/cli/doctor.d.ts.map +1 -0
  54. package/dist/cli/doctor.js +198 -0
  55. package/dist/cli/doctor.js.map +1 -0
  56. package/dist/cli/init.d.ts +3 -0
  57. package/dist/cli/init.d.ts.map +1 -0
  58. package/dist/cli/init.js +459 -0
  59. package/dist/cli/init.js.map +1 -0
  60. package/dist/cli/logs.d.ts +4 -0
  61. package/dist/cli/logs.d.ts.map +1 -0
  62. package/dist/cli/logs.js +50 -0
  63. package/dist/cli/logs.js.map +1 -0
  64. package/dist/cli/monitor-cmd.d.ts +11 -0
  65. package/dist/cli/monitor-cmd.d.ts.map +1 -0
  66. package/dist/cli/monitor-cmd.js +59 -0
  67. package/dist/cli/monitor-cmd.js.map +1 -0
  68. package/dist/cli/start.d.ts +11 -0
  69. package/dist/cli/start.d.ts.map +1 -0
  70. package/dist/cli/start.js +103 -0
  71. package/dist/cli/start.js.map +1 -0
  72. package/dist/cli/status.d.ts +9 -0
  73. package/dist/cli/status.d.ts.map +1 -0
  74. package/dist/cli/status.js +49 -0
  75. package/dist/cli/status.js.map +1 -0
  76. package/dist/cli/stop.d.ts +2 -0
  77. package/dist/cli/stop.d.ts.map +1 -0
  78. package/dist/cli/stop.js +34 -0
  79. package/dist/cli/stop.js.map +1 -0
  80. package/dist/collectors/appstore.d.ts +51 -0
  81. package/dist/collectors/appstore.d.ts.map +1 -0
  82. package/dist/collectors/appstore.js +166 -0
  83. package/dist/collectors/appstore.js.map +1 -0
  84. package/dist/collectors/arden-tts.d.ts +60 -0
  85. package/dist/collectors/arden-tts.d.ts.map +1 -0
  86. package/dist/collectors/arden-tts.js +83 -0
  87. package/dist/collectors/arden-tts.js.map +1 -0
  88. package/dist/collectors/asomobile.d.ts +37 -0
  89. package/dist/collectors/asomobile.d.ts.map +1 -0
  90. package/dist/collectors/asomobile.js +88 -0
  91. package/dist/collectors/asomobile.js.map +1 -0
  92. package/dist/collectors/eodin-blog.d.ts +90 -0
  93. package/dist/collectors/eodin-blog.d.ts.map +1 -0
  94. package/dist/collectors/eodin-blog.js +238 -0
  95. package/dist/collectors/eodin-blog.js.map +1 -0
  96. package/dist/collectors/eodin-sdk.d.ts +60 -0
  97. package/dist/collectors/eodin-sdk.d.ts.map +1 -0
  98. package/dist/collectors/eodin-sdk.js +112 -0
  99. package/dist/collectors/eodin-sdk.js.map +1 -0
  100. package/dist/collectors/fridgify-recipes.d.ts +65 -0
  101. package/dist/collectors/fridgify-recipes.d.ts.map +1 -0
  102. package/dist/collectors/fridgify-recipes.js +111 -0
  103. package/dist/collectors/fridgify-recipes.js.map +1 -0
  104. package/dist/collectors/playstore.d.ts +46 -0
  105. package/dist/collectors/playstore.d.ts.map +1 -0
  106. package/dist/collectors/playstore.js +140 -0
  107. package/dist/collectors/playstore.js.map +1 -0
  108. package/dist/collectors/youtube.d.ts +44 -0
  109. package/dist/collectors/youtube.d.ts.map +1 -0
  110. package/dist/collectors/youtube.js +107 -0
  111. package/dist/collectors/youtube.js.map +1 -0
  112. package/dist/config/apps-schema.d.ts +94 -0
  113. package/dist/config/apps-schema.d.ts.map +1 -0
  114. package/dist/config/apps-schema.js +66 -0
  115. package/dist/config/apps-schema.js.map +1 -0
  116. package/dist/config/keychain.d.ts +14 -0
  117. package/dist/config/keychain.d.ts.map +1 -0
  118. package/dist/config/keychain.js +89 -0
  119. package/dist/config/keychain.js.map +1 -0
  120. package/dist/config/load-apps.d.ts +16 -0
  121. package/dist/config/load-apps.d.ts.map +1 -0
  122. package/dist/config/load-apps.js +38 -0
  123. package/dist/config/load-apps.js.map +1 -0
  124. package/dist/config/schema.d.ts +306 -0
  125. package/dist/config/schema.d.ts.map +1 -0
  126. package/dist/config/schema.js +220 -0
  127. package/dist/config/schema.js.map +1 -0
  128. package/dist/config/store.d.ts +38 -0
  129. package/dist/config/store.d.ts.map +1 -0
  130. package/dist/config/store.js +180 -0
  131. package/dist/config/store.js.map +1 -0
  132. package/dist/db/queries.d.ts +304 -0
  133. package/dist/db/queries.d.ts.map +1 -0
  134. package/dist/db/queries.js +327 -0
  135. package/dist/db/queries.js.map +1 -0
  136. package/dist/db/schema.d.ts +15 -0
  137. package/dist/db/schema.d.ts.map +1 -0
  138. package/dist/db/schema.js +252 -0
  139. package/dist/db/schema.js.map +1 -0
  140. package/dist/index.d.ts +3 -0
  141. package/dist/index.d.ts.map +1 -0
  142. package/dist/index.js +86 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/messenger/adapter.d.ts +63 -0
  145. package/dist/messenger/adapter.d.ts.map +1 -0
  146. package/dist/messenger/adapter.js +7 -0
  147. package/dist/messenger/adapter.js.map +1 -0
  148. package/dist/messenger/factory.d.ts +12 -0
  149. package/dist/messenger/factory.d.ts.map +1 -0
  150. package/dist/messenger/factory.js +9 -0
  151. package/dist/messenger/factory.js.map +1 -0
  152. package/dist/messenger/slack.d.ts +30 -0
  153. package/dist/messenger/slack.d.ts.map +1 -0
  154. package/dist/messenger/slack.js +309 -0
  155. package/dist/messenger/slack.js.map +1 -0
  156. package/dist/messenger/split.d.ts +17 -0
  157. package/dist/messenger/split.d.ts.map +1 -0
  158. package/dist/messenger/split.js +56 -0
  159. package/dist/messenger/split.js.map +1 -0
  160. package/dist/orchestrator/dashboard.d.ts +67 -0
  161. package/dist/orchestrator/dashboard.d.ts.map +1 -0
  162. package/dist/orchestrator/dashboard.js +113 -0
  163. package/dist/orchestrator/dashboard.js.map +1 -0
  164. package/dist/orchestrator/monitor.d.ts +37 -0
  165. package/dist/orchestrator/monitor.d.ts.map +1 -0
  166. package/dist/orchestrator/monitor.js +236 -0
  167. package/dist/orchestrator/monitor.js.map +1 -0
  168. package/dist/orchestrator/types.d.ts +82 -0
  169. package/dist/orchestrator/types.d.ts.map +1 -0
  170. package/dist/orchestrator/types.js +12 -0
  171. package/dist/orchestrator/types.js.map +1 -0
  172. package/dist/orchestrator/weekly.d.ts +66 -0
  173. package/dist/orchestrator/weekly.d.ts.map +1 -0
  174. package/dist/orchestrator/weekly.js +376 -0
  175. package/dist/orchestrator/weekly.js.map +1 -0
  176. package/dist/prompts/loader.d.ts +18 -0
  177. package/dist/prompts/loader.d.ts.map +1 -0
  178. package/dist/prompts/loader.js +28 -0
  179. package/dist/prompts/loader.js.map +1 -0
  180. package/dist/security/auth.d.ts +14 -0
  181. package/dist/security/auth.d.ts.map +1 -0
  182. package/dist/security/auth.js +14 -0
  183. package/dist/security/auth.js.map +1 -0
  184. package/dist/security/prompt-guard.d.ts +21 -0
  185. package/dist/security/prompt-guard.d.ts.map +1 -0
  186. package/dist/security/prompt-guard.js +54 -0
  187. package/dist/security/prompt-guard.js.map +1 -0
  188. package/dist/skills/aso.d.ts +60 -0
  189. package/dist/skills/aso.d.ts.map +1 -0
  190. package/dist/skills/aso.js +322 -0
  191. package/dist/skills/aso.js.map +1 -0
  192. package/dist/skills/content.d.ts +25 -0
  193. package/dist/skills/content.d.ts.map +1 -0
  194. package/dist/skills/content.js +90 -0
  195. package/dist/skills/content.js.map +1 -0
  196. package/dist/skills/index.d.ts +65 -0
  197. package/dist/skills/index.d.ts.map +1 -0
  198. package/dist/skills/index.js +90 -0
  199. package/dist/skills/index.js.map +1 -0
  200. package/dist/skills/onboarding.d.ts +58 -0
  201. package/dist/skills/onboarding.d.ts.map +1 -0
  202. package/dist/skills/onboarding.js +274 -0
  203. package/dist/skills/onboarding.js.map +1 -0
  204. package/dist/skills/registry.d.ts +24 -0
  205. package/dist/skills/registry.d.ts.map +1 -0
  206. package/dist/skills/registry.js +66 -0
  207. package/dist/skills/registry.js.map +1 -0
  208. package/dist/skills/review.d.ts +33 -0
  209. package/dist/skills/review.d.ts.map +1 -0
  210. package/dist/skills/review.js +236 -0
  211. package/dist/skills/review.js.map +1 -0
  212. package/dist/skills/sdk-request.d.ts +30 -0
  213. package/dist/skills/sdk-request.d.ts.map +1 -0
  214. package/dist/skills/sdk-request.js +72 -0
  215. package/dist/skills/sdk-request.js.map +1 -0
  216. package/dist/skills/seo-blog.d.ts +64 -0
  217. package/dist/skills/seo-blog.d.ts.map +1 -0
  218. package/dist/skills/seo-blog.js +268 -0
  219. package/dist/skills/seo-blog.js.map +1 -0
  220. package/dist/skills/short-form.d.ts +28 -0
  221. package/dist/skills/short-form.d.ts.map +1 -0
  222. package/dist/skills/short-form.js +121 -0
  223. package/dist/skills/short-form.js.map +1 -0
  224. package/dist/skills/social-publish.d.ts +32 -0
  225. package/dist/skills/social-publish.d.ts.map +1 -0
  226. package/dist/skills/social-publish.js +133 -0
  227. package/dist/skills/social-publish.js.map +1 -0
  228. package/dist/social/base.d.ts +47 -0
  229. package/dist/social/base.d.ts.map +1 -0
  230. package/dist/social/base.js +26 -0
  231. package/dist/social/base.js.map +1 -0
  232. package/dist/social/facebook.d.ts +27 -0
  233. package/dist/social/facebook.d.ts.map +1 -0
  234. package/dist/social/facebook.js +166 -0
  235. package/dist/social/facebook.js.map +1 -0
  236. package/dist/social/factory.d.ts +26 -0
  237. package/dist/social/factory.d.ts.map +1 -0
  238. package/dist/social/factory.js +32 -0
  239. package/dist/social/factory.js.map +1 -0
  240. package/dist/social/linkedin.d.ts +26 -0
  241. package/dist/social/linkedin.d.ts.map +1 -0
  242. package/dist/social/linkedin.js +190 -0
  243. package/dist/social/linkedin.js.map +1 -0
  244. package/dist/social/threads.d.ts +21 -0
  245. package/dist/social/threads.d.ts.map +1 -0
  246. package/dist/social/threads.js +122 -0
  247. package/dist/social/threads.js.map +1 -0
  248. package/dist/social/tiktok.d.ts +23 -0
  249. package/dist/social/tiktok.d.ts.map +1 -0
  250. package/dist/social/tiktok.js +110 -0
  251. package/dist/social/tiktok.js.map +1 -0
  252. package/dist/social/twitter.d.ts +30 -0
  253. package/dist/social/twitter.d.ts.map +1 -0
  254. package/dist/social/twitter.js +189 -0
  255. package/dist/social/twitter.js.map +1 -0
  256. package/dist/social/youtube.d.ts +21 -0
  257. package/dist/social/youtube.d.ts.map +1 -0
  258. package/dist/social/youtube.js +108 -0
  259. package/dist/social/youtube.js.map +1 -0
  260. package/dist/tools/app-info.d.ts +7 -0
  261. package/dist/tools/app-info.d.ts.map +1 -0
  262. package/dist/tools/app-info.js +53 -0
  263. package/dist/tools/app-info.js.map +1 -0
  264. package/dist/tools/collector-fetch.d.ts +11 -0
  265. package/dist/tools/collector-fetch.d.ts.map +1 -0
  266. package/dist/tools/collector-fetch.js +101 -0
  267. package/dist/tools/collector-fetch.js.map +1 -0
  268. package/dist/tools/db-query.d.ts +29 -0
  269. package/dist/tools/db-query.d.ts.map +1 -0
  270. package/dist/tools/db-query.js +159 -0
  271. package/dist/tools/db-query.js.map +1 -0
  272. package/dist/tools/skill-result.d.ts +8 -0
  273. package/dist/tools/skill-result.d.ts.map +1 -0
  274. package/dist/tools/skill-result.js +63 -0
  275. package/dist/tools/skill-result.js.map +1 -0
  276. package/dist/tools/tool-host.d.ts +12 -0
  277. package/dist/tools/tool-host.d.ts.map +1 -0
  278. package/dist/tools/tool-host.js +124 -0
  279. package/dist/tools/tool-host.js.map +1 -0
  280. package/dist/types/collectors.d.ts +198 -0
  281. package/dist/types/collectors.d.ts.map +1 -0
  282. package/dist/types/collectors.js +28 -0
  283. package/dist/types/collectors.js.map +1 -0
  284. package/dist/types/skill.d.ts +60 -0
  285. package/dist/types/skill.d.ts.map +1 -0
  286. package/dist/types/skill.js +9 -0
  287. package/dist/types/skill.js.map +1 -0
  288. package/dist/utils/circuit-breaker.d.ts +26 -0
  289. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  290. package/dist/utils/circuit-breaker.js +67 -0
  291. package/dist/utils/circuit-breaker.js.map +1 -0
  292. package/dist/utils/errors.d.ts +44 -0
  293. package/dist/utils/errors.d.ts.map +1 -0
  294. package/dist/utils/errors.js +75 -0
  295. package/dist/utils/errors.js.map +1 -0
  296. package/dist/utils/escape.d.ts +11 -0
  297. package/dist/utils/escape.d.ts.map +1 -0
  298. package/dist/utils/escape.js +19 -0
  299. package/dist/utils/escape.js.map +1 -0
  300. package/dist/utils/logger.d.ts +19 -0
  301. package/dist/utils/logger.d.ts.map +1 -0
  302. package/dist/utils/logger.js +93 -0
  303. package/dist/utils/logger.js.map +1 -0
  304. package/dist/utils/parse-json.d.ts +13 -0
  305. package/dist/utils/parse-json.d.ts.map +1 -0
  306. package/dist/utils/parse-json.js +61 -0
  307. package/dist/utils/parse-json.js.map +1 -0
  308. package/dist/utils/paths.d.ts +14 -0
  309. package/dist/utils/paths.d.ts.map +1 -0
  310. package/dist/utils/paths.js +19 -0
  311. package/dist/utils/paths.js.map +1 -0
  312. package/dist/utils/rate-limiter.d.ts +20 -0
  313. package/dist/utils/rate-limiter.d.ts.map +1 -0
  314. package/dist/utils/rate-limiter.js +47 -0
  315. package/dist/utils/rate-limiter.js.map +1 -0
  316. package/dist/utils/retry.d.ts +26 -0
  317. package/dist/utils/retry.d.ts.map +1 -0
  318. package/dist/utils/retry.js +61 -0
  319. package/dist/utils/retry.js.map +1 -0
  320. package/launchd/.gitkeep +0 -0
  321. package/launchd/com.adaria-ai.daemon.plist.template +62 -0
  322. package/launchd/com.adaria-ai.monitor.plist.template +41 -0
  323. package/launchd/com.adaria-ai.weekly.plist.template +43 -0
  324. package/package.json +72 -0
  325. package/prompts/aso-description.md +44 -0
  326. package/prompts/aso-inapp-events.md +20 -0
  327. package/prompts/aso-metadata.md +34 -0
  328. package/prompts/aso-screenshots.md +20 -0
  329. package/prompts/onboarding-hypotheses.md +38 -0
  330. package/prompts/onboarding-review-timing.md +24 -0
  331. package/prompts/review-clustering.md +19 -0
  332. package/prompts/review-replies.md +18 -0
  333. package/prompts/review-sentiment.md +16 -0
  334. package/prompts/seo-blog-fridgify-recipe.md +116 -0
  335. package/prompts/seo-blog.md +69 -0
  336. package/prompts/short-form-ideas.md +50 -0
  337. package/prompts/social-publish.md +46 -0
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Tool description text injected into the Mode B system prompt.
3
+ *
4
+ * Describes the 4 marketing MCP tools so Claude knows how and when
5
+ * to call them. All tools are strictly read-only.
6
+ */
7
+ export function buildToolDescriptions() {
8
+ return `## Available MCP Tools (read-only)
9
+
10
+ You have access to 4 marketing analytics tools. Use them to answer questions about apps, rankings, reviews, and prior analyses. NEVER guess data you can fetch — always call the tool first.
11
+
12
+ 1. **db-query** — Query the SQLite database directly. Whitelisted tables: keyword_rankings, sdk_events, reviews, approvals, competitor_metadata, agent_metrics, blog_posts, short_form_performance, seo_metrics, web_traffic, blog_performance. Review body text and competitor descriptions are redacted. Max 50 rows.
13
+
14
+ 2. **collector-fetch** — Fetch cached collector data by name: keyword-rankings, reviews, sentiment, short-form, seo-metrics, web-traffic, blog-posts. Faster than db-query for common lookups. Review text is redacted.
15
+
16
+ 3. **skill-result** — Read recent weekly skill run results (agent_metrics). Shows how skills performed: duration, status, alerts, actions. Useful for "how did last week's ASO analysis go?" questions.
17
+
18
+ 4. **app-info** — Read app metadata from apps.yaml. Call without arguments to list all apps, or with an app ID for details (platforms, keywords, competitors, features).
19
+
20
+ ### Important rules:
21
+ - These tools are READ-ONLY. You cannot write to the database, publish posts, change metadata, or reply to reviews.
22
+ - If the user asks for a write action, tell them to run the corresponding skill command (e.g. "aso fridgify", "blog fridgify").
23
+ - Do NOT pass raw review body text back to the user — always summarize or count.
24
+ - seo_metrics, web_traffic, and blog_performance tables are site-wide (no app_id column).`;
25
+ }
26
+ //# sourceMappingURL=tool-descriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-descriptions.js","sourceRoot":"","sources":["../../src/agent/tool-descriptions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;0FAgBiF,CAAC;AAC3F,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `adaria-ai analyze` — one-shot weekly orchestrator CLI entry.
3
+ *
4
+ * Loads config, initializes DB + collectors, runs the weekly orchestrator,
5
+ * and exits cleanly. Invoked by launchd cron (Sun 23:00 UTC) or manually.
6
+ */
7
+ export declare function runAnalyze(): Promise<void>;
8
+ //# sourceMappingURL=analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/cli/analyze.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAwGhD"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * `adaria-ai analyze` — one-shot weekly orchestrator CLI entry.
3
+ *
4
+ * Loads config, initializes DB + collectors, runs the weekly orchestrator,
5
+ * and exits cleanly. Invoked by launchd cron (Sun 23:00 UTC) or manually.
6
+ */
7
+ import { loadConfig } from "../config/store.js";
8
+ import { loadApps } from "../config/load-apps.js";
9
+ import { initDatabase } from "../db/schema.js";
10
+ import { createMessengerAdapter } from "../messenger/factory.js";
11
+ import { runWeeklyAnalysis } from "../orchestrator/weekly.js";
12
+ import { ReviewSkill } from "../skills/review.js";
13
+ import { SocialPublishSkill } from "../skills/social-publish.js";
14
+ import { SeoBlogSkill } from "../skills/seo-blog.js";
15
+ import { ShortFormSkill } from "../skills/short-form.js";
16
+ import { SdkRequestSkill } from "../skills/sdk-request.js";
17
+ import { ContentSkill } from "../skills/content.js";
18
+ import { invokeClaudeCli } from "../agent/claude.js";
19
+ import { writeAuditLog } from "../agent/audit.js";
20
+ import * as logger from "../utils/logger.js";
21
+ export async function runAnalyze() {
22
+ logger.info("Loading configuration");
23
+ let config;
24
+ try {
25
+ config = await loadConfig();
26
+ }
27
+ catch (err) {
28
+ console.error(`Failed to load config: ${err instanceof Error ? err.message : String(err)}`);
29
+ process.exitCode = 1;
30
+ return;
31
+ }
32
+ let apps;
33
+ try {
34
+ ({ apps } = await loadApps());
35
+ }
36
+ catch (err) {
37
+ console.error(`Failed to load apps.yaml: ${err instanceof Error ? err.message : String(err)}`);
38
+ process.exitCode = 1;
39
+ return;
40
+ }
41
+ const db = initDatabase();
42
+ let messenger;
43
+ try {
44
+ messenger = createMessengerAdapter(config);
45
+ // Build skill dispatchers with the weekly timeout
46
+ const timeoutMs = config.agent.weeklyTimeoutMs;
47
+ const cliBinary = config.claude.cliBinary;
48
+ const runClaude = async (prompt) => {
49
+ await writeAuditLog({
50
+ type: "command",
51
+ userId: "orchestrator",
52
+ platform: "internal",
53
+ content: `Claude CLI invocation (weekly, timeout=${String(timeoutMs)}ms)`,
54
+ });
55
+ const result = await invokeClaudeCli({
56
+ prompt,
57
+ cliBinary,
58
+ timeoutMs,
59
+ });
60
+ return result.result;
61
+ };
62
+ const ctx = { db, apps, config, runClaude };
63
+ // TODO(M7): Wire real collector instances from config.collectors
64
+ // credentials. Currently skills run with empty deps — ASO/Onboarding
65
+ // always reject, others skip collector-dependent paths. Required
66
+ // before M7 parity validation.
67
+ const reviewSkill = new ReviewSkill({});
68
+ const seoBlogSkill = new SeoBlogSkill({});
69
+ const shortFormSkill = new ShortFormSkill({});
70
+ const sdkRequestSkill = new SdkRequestSkill();
71
+ const contentSkill = new ContentSkill();
72
+ const socialPublishSkill = new SocialPublishSkill({
73
+ socialConfigs: {
74
+ twitter: config.social.twitter,
75
+ facebook: config.social.facebook,
76
+ threads: config.social.threads,
77
+ tiktok: config.social.tiktok,
78
+ youtube: config.social.youtube,
79
+ linkedin: config.social.linkedin,
80
+ },
81
+ });
82
+ // Skills that require deps will throw if collectors are missing.
83
+ // The orchestrator's timedRun catches these as SkippedAgentError.
84
+ const dispatchers = {
85
+ aso: (_app) => Promise.reject(new Error("ASO collectors not wired in analyze CLI — use daemon for full analysis")),
86
+ review: (app) => reviewSkill.dispatch(ctx, `review ${app.name}`),
87
+ onboarding: (_app) => Promise.reject(new Error("Onboarding collector not wired in analyze CLI — use daemon for full analysis")),
88
+ seoBlog: (app) => seoBlogSkill.dispatch(ctx, `blog ${app.name}`),
89
+ shortForm: (app) => shortFormSkill.dispatch(ctx, `shortform ${app.name}`),
90
+ sdkRequest: (app) => sdkRequestSkill.dispatch(ctx, `sdkrequest ${app.name}`),
91
+ content: (app) => contentSkill.dispatch(ctx, `content ${app.name}`),
92
+ socialPublish: (app) => socialPublishSkill.dispatch(ctx, `social ${app.name}`),
93
+ };
94
+ await runWeeklyAnalysis({
95
+ db,
96
+ config,
97
+ apps,
98
+ messenger,
99
+ dispatchers,
100
+ });
101
+ logger.info("Weekly analysis finished successfully");
102
+ }
103
+ catch (err) {
104
+ logger.error(`Weekly analysis failed: ${err instanceof Error ? err.message : String(err)}`);
105
+ process.exitCode = 1;
106
+ }
107
+ finally {
108
+ db.close();
109
+ if (messenger) {
110
+ await messenger.stop();
111
+ }
112
+ }
113
+ }
114
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/cli/analyze.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runDaemon(): Promise<void>;
2
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"AAyBA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAmF/C"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * `adaria-ai daemon` — foreground reactive daemon.
3
+ *
4
+ * This is the command launchd invokes. It is NOT meant for humans to run
5
+ * directly outside of local debugging; `adaria-ai start` is the usual
6
+ * entry point. The process stays alive forever (KeepAlive=true in the
7
+ * plist), handling SIGTERM/SIGINT for clean shutdown.
8
+ *
9
+ * M7: wires db, apps, and the production skill registry into AgentCore
10
+ * so that Mode A commands dispatch to real skills and approval callbacks
11
+ * can route to the correct skill handler.
12
+ */
13
+ import { loadConfig } from "../config/store.js";
14
+ import { loadApps } from "../config/load-apps.js";
15
+ import { initDatabase } from "../db/schema.js";
16
+ import { createMessengerAdapter } from "../messenger/factory.js";
17
+ import { AgentCore } from "../agent/core.js";
18
+ import { createProductionRegistry } from "../skills/registry.js";
19
+ import { AdariaError } from "../utils/errors.js";
20
+ import { error as logError, info as logInfo, } from "../utils/logger.js";
21
+ export async function runDaemon() {
22
+ let config;
23
+ try {
24
+ config = await loadConfig();
25
+ }
26
+ catch (err) {
27
+ // The plist uses `SuccessfulExit=false, Crashed=true` so a clean
28
+ // exit(0) tells launchd "don't respawn me". Without that combination
29
+ // of exit code + KeepAlive dict, any config typo would put the
30
+ // daemon into a 30s respawn loop that floods daemon.err.log.
31
+ const userMsg = err instanceof AdariaError
32
+ ? err.userMessage
33
+ : err instanceof Error
34
+ ? err.message
35
+ : String(err);
36
+ logError(`adaria-ai daemon refusing to start: ${userMsg}`);
37
+ console.error(`adaria-ai daemon refusing to start: ${userMsg}`);
38
+ process.exit(0);
39
+ }
40
+ // Load apps.yaml — optional for daemon startup. If missing, Mode A
41
+ // skill dispatch will work but skills that iterate apps will have
42
+ // an empty list.
43
+ let apps = [];
44
+ try {
45
+ ({ apps } = await loadApps());
46
+ }
47
+ catch (err) {
48
+ logError(`Failed to load apps.yaml: ${err instanceof Error ? err.message : String(err)}. Skills will have no app context.`);
49
+ }
50
+ // Initialize DB — required for Mode A skills and Mode B MCP tools.
51
+ let db;
52
+ try {
53
+ db = initDatabase();
54
+ }
55
+ catch (err) {
56
+ logError(`DB initialization failed: ${err instanceof Error ? err.message : String(err)}. Exiting cleanly to prevent launchd respawn loop.`);
57
+ console.error(`adaria-ai daemon refusing to start: DB init failed — ${err instanceof Error ? err.message : String(err)}`);
58
+ process.exit(0);
59
+ }
60
+ // Build the production skill registry with all 8 skills.
61
+ const skillRegistry = createProductionRegistry(config);
62
+ const messenger = createMessengerAdapter(config);
63
+ const agent = new AgentCore(messenger, config, {
64
+ db,
65
+ apps,
66
+ skillRegistry,
67
+ });
68
+ await agent.start();
69
+ logInfo(`adaria-ai daemon started (${String(skillRegistry.getSkillCount())} skills, ${String(apps.length)} apps)`);
70
+ let shuttingDown = false;
71
+ const shutdown = (signal) => {
72
+ if (shuttingDown)
73
+ return;
74
+ shuttingDown = true;
75
+ logInfo(`adaria-ai daemon received ${signal}, stopping...`);
76
+ agent
77
+ .stop()
78
+ .then(() => {
79
+ db.close();
80
+ process.exit(0);
81
+ })
82
+ .catch((err) => {
83
+ logError(`Shutdown error: ${err instanceof Error ? err.message : String(err)}`);
84
+ db.close();
85
+ process.exit(1);
86
+ });
87
+ };
88
+ process.on("SIGTERM", () => shutdown("SIGTERM"));
89
+ process.on("SIGINT", () => shutdown("SIGINT"));
90
+ }
91
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runDoctor(): Promise<void>;
2
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAgMA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAkD/C"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * `adaria-ai doctor` — health snapshot.
3
+ *
4
+ * Checks configuration, Claude CLI, database, apps, collector
5
+ * credentials, social platform credentials, and MCP tool registration.
6
+ *
7
+ * Exit code is 0 when every check passes, 1 otherwise.
8
+ */
9
+ import fs from "node:fs";
10
+ import os from "node:os";
11
+ import path from "node:path";
12
+ import { loadConfig } from "../config/store.js";
13
+ import { initDatabase } from "../db/schema.js";
14
+ import { checkClaudeCli, checkClaudeCliAuth } from "../agent/claude.js";
15
+ function check(name, pass, message) {
16
+ return message !== undefined ? { name, pass, message } : { name, pass };
17
+ }
18
+ async function checkConfig() {
19
+ try {
20
+ const config = await loadConfig();
21
+ const checks = [check("config.yaml loads", true)];
22
+ const allowlistCount = config.security.allowedUsers.length;
23
+ checks.push(check("security.allowedUsers non-empty", allowlistCount > 0, allowlistCount === 0
24
+ ? 'No allowlisted users. Run "adaria-ai init" and add a Slack user ID.'
25
+ : `${String(allowlistCount)} user(s) allowlisted`));
26
+ const botOk = config.slack.botToken.startsWith("xoxb-");
27
+ checks.push(check("slack.botToken resolved", botOk, botOk ? undefined : "Bot token is missing or not resolved from Keychain"));
28
+ if (config.agent.briefingChannel) {
29
+ checks.push(check("agent.briefingChannel set", true, config.agent.briefingChannel));
30
+ }
31
+ else {
32
+ // Not a failure — optional for daemon-only setups
33
+ checks.push(check("agent.briefingChannel set", true, "not set (weekly orchestrator will skip posting)"));
34
+ }
35
+ return { checks, config };
36
+ }
37
+ catch (err) {
38
+ return {
39
+ checks: [
40
+ check("config.yaml loads", false, err instanceof Error ? err.message : String(err)),
41
+ ],
42
+ config: null,
43
+ };
44
+ }
45
+ }
46
+ async function checkClaude(cliBinary) {
47
+ const installed = await checkClaudeCli(cliBinary);
48
+ if (!installed) {
49
+ return [
50
+ check("claude CLI installed", false, `\`${cliBinary}\` not found on PATH. Install with 'npm i -g @anthropic-ai/claude-code'.`),
51
+ ];
52
+ }
53
+ const authed = await checkClaudeCliAuth(cliBinary);
54
+ return [
55
+ check("claude CLI installed", true),
56
+ check("claude CLI authenticated", authed, authed
57
+ ? undefined
58
+ : "Run 'claude /login' to authenticate. Note: during M7 parallel run, do NOT re-run /login (shared auth with growth-agent)."),
59
+ ];
60
+ }
61
+ /**
62
+ * Warn if ~/.claude auth state was modified within the last 24h.
63
+ * During M7 parallel run, re-authentication invalidates both daemons.
64
+ */
65
+ function checkClaudeAuthRecency() {
66
+ const claudeDir = path.join(os.homedir(), ".claude");
67
+ try {
68
+ if (!fs.existsSync(claudeDir)) {
69
+ return [check("claude auth recency", true, "~/.claude not found (skip)")];
70
+ }
71
+ const entries = fs.readdirSync(claudeDir);
72
+ const twentyFourHoursAgo = Date.now() - 24 * 60 * 60 * 1000;
73
+ let newestMtime = 0;
74
+ let newestFile = "";
75
+ for (const entry of entries) {
76
+ try {
77
+ const stat = fs.statSync(path.join(claudeDir, entry));
78
+ if (stat.mtimeMs > newestMtime) {
79
+ newestMtime = stat.mtimeMs;
80
+ newestFile = entry;
81
+ }
82
+ }
83
+ catch {
84
+ // skip unreadable entries
85
+ }
86
+ }
87
+ if (newestMtime > twentyFourHoursAgo) {
88
+ const ago = Math.round((Date.now() - newestMtime) / 60_000);
89
+ return [
90
+ check("claude auth recency", true, // warning, not failure
91
+ `WARNING: ~/.claude/${newestFile} modified ${String(ago)} min ago. If running M7 parallel, do NOT re-run /login.`),
92
+ ];
93
+ }
94
+ return [check("claude auth recency", true, "no changes in last 24h")];
95
+ }
96
+ catch {
97
+ return [check("claude auth recency", true, "could not check (skip)")];
98
+ }
99
+ }
100
+ function checkDb() {
101
+ try {
102
+ const db = initDatabase();
103
+ const tables = db
104
+ .prepare("SELECT COUNT(*) as count FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'")
105
+ .get();
106
+ const tableCount = tables?.count ?? 0;
107
+ db.close();
108
+ return [
109
+ check("DB accessible", true, `${String(tableCount)} tables`),
110
+ ];
111
+ }
112
+ catch (err) {
113
+ return [
114
+ check("DB accessible", false, err instanceof Error ? err.message : String(err)),
115
+ ];
116
+ }
117
+ }
118
+ function checkCollectors(config) {
119
+ const checks = [];
120
+ const c = config.collectors;
121
+ // Collector credentials are optional — pass=true even when not configured
122
+ checks.push(check("collector: App Store Connect", true, c.appStore ? "configured" : "not configured (optional)"));
123
+ checks.push(check("collector: Google Play", true, c.playStore ? "configured" : "not configured (optional)"));
124
+ checks.push(check("collector: ASOMobile", true, c.asoMobile ? "configured" : "not configured (optional)"));
125
+ checks.push(check("collector: Eodin SDK", true, c.eodinSdk ? "configured" : "not configured (optional)"));
126
+ checks.push(check("collector: Eodin Growth", true, c.eodinGrowth ? "configured" : "not configured (optional)"));
127
+ checks.push(check("collector: YouTube", true, c.youtube ? "configured" : "not configured (optional)"));
128
+ return checks;
129
+ }
130
+ function checkSocial(config) {
131
+ const checks = [];
132
+ const s = config.social;
133
+ // Social credentials are optional — pass=true even when not configured
134
+ checks.push(check("social: Twitter", true, s.twitter ? "configured" : "not configured (optional)"));
135
+ checks.push(check("social: Facebook", true, s.facebook ? "configured" : "not configured (optional)"));
136
+ checks.push(check("social: Threads", true, s.threads ? "configured" : "not configured (optional)"));
137
+ checks.push(check("social: TikTok", true, s.tiktok ? "configured" : "not configured (optional)"));
138
+ checks.push(check("social: YouTube", true, s.youtube ? "configured" : "not configured (optional)"));
139
+ checks.push(check("social: LinkedIn", true, s.linkedin ? "configured" : "not configured (optional)"));
140
+ return checks;
141
+ }
142
+ export async function runDoctor() {
143
+ const results = [];
144
+ // 1. Config
145
+ console.log("Configuration:");
146
+ const { checks: configChecks, config } = await checkConfig();
147
+ results.push(...configChecks);
148
+ for (const c of configChecks)
149
+ printCheck(c);
150
+ // 2. Claude CLI
151
+ console.log("\nClaude CLI:");
152
+ const cliBinary = config?.claude.cliBinary ?? "claude";
153
+ const claudeChecks = await checkClaude(cliBinary);
154
+ results.push(...claudeChecks);
155
+ for (const c of claudeChecks)
156
+ printCheck(c);
157
+ // 2b. Claude auth recency (M7 parallel run warning)
158
+ const authChecks = checkClaudeAuthRecency();
159
+ results.push(...authChecks);
160
+ for (const c of authChecks)
161
+ printCheck(c);
162
+ // 3. Database
163
+ console.log("\nDatabase:");
164
+ const dbChecks = checkDb();
165
+ results.push(...dbChecks);
166
+ for (const c of dbChecks)
167
+ printCheck(c);
168
+ // 4. Collectors (only if config loaded)
169
+ if (config) {
170
+ console.log("\nCollectors:");
171
+ const collectorChecks = checkCollectors(config);
172
+ results.push(...collectorChecks);
173
+ for (const c of collectorChecks)
174
+ printCheck(c);
175
+ console.log("\nSocial platforms:");
176
+ const socialChecks = checkSocial(config);
177
+ results.push(...socialChecks);
178
+ for (const c of socialChecks)
179
+ printCheck(c);
180
+ }
181
+ // Summary
182
+ const failed = results.filter((c) => !c.pass).length;
183
+ const total = results.length;
184
+ console.log("");
185
+ if (failed > 0) {
186
+ console.log(`${String(failed)}/${String(total)} check(s) failed.`);
187
+ process.exitCode = 1;
188
+ }
189
+ else {
190
+ console.log(`All ${String(total)} checks passed.`);
191
+ }
192
+ }
193
+ function printCheck(c) {
194
+ const icon = c.pass ? "\u2705" : "\u274c";
195
+ const suffix = c.message ? ` \u2014 ${c.message}` : "";
196
+ console.log(` ${icon} ${c.name}${suffix}`);
197
+ }
198
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type InitSection = "slack" | "collectors" | "social";
2
+ export declare function runInit(section?: InitSection): Promise<void>;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;AAmd5D,wBAAsB,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuElE"}