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,180 @@
1
+ import fs from "node:fs/promises";
2
+ import yaml from "js-yaml";
3
+ import { configSchema, KEYCHAIN_KEYS, KEYCHAIN_SENTINEL, } from "./schema.js";
4
+ import { getSecret } from "./keychain.js";
5
+ import { ADARIA_HOME, CONFIG_PATH, CONVERSATIONS_DIR, DATA_DIR, LOGS_DIR, MEMORY_DIR, } from "../utils/paths.js";
6
+ import { ConfigError } from "../utils/errors.js";
7
+ const ADARIA_SUBDIRS = [LOGS_DIR, DATA_DIR, MEMORY_DIR, CONVERSATIONS_DIR];
8
+ /**
9
+ * Create $ADARIA_HOME and all required subdirectories and force 0700 perms.
10
+ *
11
+ * The explicit `fs.chmod` calls are load-bearing: `fs.mkdir({ mode })` silently
12
+ * ignores the mode argument on pre-existing directories, so if the user ever
13
+ * created `~/.adaria` by hand or via a prior tool at 0755, we need to tighten
14
+ * it on every daemon startup. Same pattern applies to `saveConfig` below.
15
+ */
16
+ export async function ensureAdariaDir() {
17
+ await fs.mkdir(ADARIA_HOME, { recursive: true, mode: 0o700 });
18
+ await fs.chmod(ADARIA_HOME, 0o700);
19
+ for (const sub of ADARIA_SUBDIRS) {
20
+ await fs.mkdir(sub, { recursive: true, mode: 0o700 });
21
+ await fs.chmod(sub, 0o700);
22
+ }
23
+ }
24
+ /**
25
+ * Load and validate the config from $ADARIA_HOME/config.yaml.
26
+ * Throws ConfigError if the file is missing or invalid.
27
+ * Secrets flagged with KEYCHAIN_SENTINEL are resolved from the macOS Keychain.
28
+ *
29
+ * TODO(M6): cache resolved config for daemon hot path — cron shots currently
30
+ * fork the `security` CLI up to 4× per loadConfig() call. Fine during M1
31
+ * startup, but M6 weekly/monitor cron will benefit from in-memory caching
32
+ * with SIGHUP invalidation.
33
+ */
34
+ export async function loadConfig() {
35
+ await ensureAdariaDir();
36
+ let raw;
37
+ try {
38
+ const content = await fs.readFile(CONFIG_PATH, "utf-8");
39
+ raw = yaml.load(content, { schema: yaml.JSON_SCHEMA });
40
+ }
41
+ catch (cause) {
42
+ throw new ConfigError(`Configuration file not found at ${CONFIG_PATH}`, {
43
+ cause,
44
+ userMessage: 'Configuration file not found. Run "adaria-ai init" to create it.',
45
+ });
46
+ }
47
+ const result = configSchema.safeParse(raw);
48
+ if (!result.success) {
49
+ const issues = result.error.issues
50
+ .map((i) => ` - ${i.path.join(".")}: ${i.message}`)
51
+ .join("\n");
52
+ throw new ConfigError(`Invalid configuration:\n${issues}`, {
53
+ userMessage: `Configuration file at ${CONFIG_PATH} is invalid. See details below and run "adaria-ai init" to regenerate.`,
54
+ });
55
+ }
56
+ return resolveKeychainSecrets(result.data);
57
+ }
58
+ async function resolveSecretField(slot) {
59
+ return (await getSecret(slot)) ?? "";
60
+ }
61
+ async function resolveKeychainSecrets(config) {
62
+ const resolved = structuredClone(config);
63
+ if (resolved.slack.botToken === KEYCHAIN_SENTINEL) {
64
+ resolved.slack.botToken = await resolveSecretField(KEYCHAIN_KEYS.slackBotToken);
65
+ }
66
+ if (resolved.slack.appToken === KEYCHAIN_SENTINEL) {
67
+ resolved.slack.appToken = await resolveSecretField(KEYCHAIN_KEYS.slackAppToken);
68
+ }
69
+ if (resolved.slack.signingSecret === KEYCHAIN_SENTINEL) {
70
+ resolved.slack.signingSecret = await resolveSecretField(KEYCHAIN_KEYS.slackSigningSecret);
71
+ }
72
+ if (resolved.claude.apiKey === KEYCHAIN_SENTINEL) {
73
+ resolved.claude.apiKey =
74
+ (await getSecret(KEYCHAIN_KEYS.anthropicApiKey)) ?? null;
75
+ }
76
+ // Collector secrets. Each block is optional — skip resolution if the
77
+ // user hasn't configured that collector.
78
+ const collectors = resolved.collectors;
79
+ if (collectors.appStore?.privateKey === KEYCHAIN_SENTINEL) {
80
+ collectors.appStore.privateKey = await resolveSecretField(KEYCHAIN_KEYS.appStorePrivateKey);
81
+ }
82
+ if (collectors.playStore?.serviceAccountJson === KEYCHAIN_SENTINEL) {
83
+ collectors.playStore.serviceAccountJson = await resolveSecretField(KEYCHAIN_KEYS.playStoreServiceAccount);
84
+ }
85
+ if (collectors.eodinSdk?.apiKey === KEYCHAIN_SENTINEL) {
86
+ collectors.eodinSdk.apiKey = await resolveSecretField(KEYCHAIN_KEYS.eodinSdkApiKey);
87
+ }
88
+ if (collectors.eodinGrowth?.token === KEYCHAIN_SENTINEL) {
89
+ collectors.eodinGrowth.token = await resolveSecretField(KEYCHAIN_KEYS.eodinGrowthToken);
90
+ }
91
+ if (collectors.asoMobile?.apiKey === KEYCHAIN_SENTINEL) {
92
+ collectors.asoMobile.apiKey = await resolveSecretField(KEYCHAIN_KEYS.asoMobileApiKey);
93
+ }
94
+ if (collectors.youtube?.apiKey === KEYCHAIN_SENTINEL) {
95
+ collectors.youtube.apiKey = await resolveSecretField(KEYCHAIN_KEYS.youtubeApiKey);
96
+ }
97
+ // Social platform secrets
98
+ const social = resolved.social;
99
+ if (social.twitter?.apiKey === KEYCHAIN_SENTINEL) {
100
+ social.twitter.apiKey = await resolveSecretField(KEYCHAIN_KEYS.twitterApiKey);
101
+ }
102
+ if (social.twitter?.apiSecret === KEYCHAIN_SENTINEL) {
103
+ social.twitter.apiSecret = await resolveSecretField(KEYCHAIN_KEYS.twitterApiSecret);
104
+ }
105
+ if (social.twitter?.accessToken === KEYCHAIN_SENTINEL) {
106
+ social.twitter.accessToken = await resolveSecretField(KEYCHAIN_KEYS.twitterAccessToken);
107
+ }
108
+ if (social.twitter?.accessTokenSecret === KEYCHAIN_SENTINEL) {
109
+ social.twitter.accessTokenSecret = await resolveSecretField(KEYCHAIN_KEYS.twitterAccessTokenSecret);
110
+ }
111
+ if (social.facebook?.appSecret === KEYCHAIN_SENTINEL) {
112
+ social.facebook.appSecret = await resolveSecretField(KEYCHAIN_KEYS.facebookAppSecret);
113
+ }
114
+ if (social.facebook?.accessToken === KEYCHAIN_SENTINEL) {
115
+ social.facebook.accessToken = await resolveSecretField(KEYCHAIN_KEYS.facebookAccessToken);
116
+ }
117
+ if (social.threads?.accessToken === KEYCHAIN_SENTINEL) {
118
+ social.threads.accessToken = await resolveSecretField(KEYCHAIN_KEYS.threadsAccessToken);
119
+ }
120
+ if (social.tiktok?.clientSecret === KEYCHAIN_SENTINEL) {
121
+ social.tiktok.clientSecret = await resolveSecretField(KEYCHAIN_KEYS.tiktokClientSecret);
122
+ }
123
+ if (social.tiktok?.accessToken === KEYCHAIN_SENTINEL) {
124
+ social.tiktok.accessToken = await resolveSecretField(KEYCHAIN_KEYS.tiktokAccessToken);
125
+ }
126
+ if (social.youtube?.accessToken === KEYCHAIN_SENTINEL) {
127
+ social.youtube.accessToken = await resolveSecretField(KEYCHAIN_KEYS.youtubeAccessToken);
128
+ }
129
+ if (social.linkedin?.accessToken === KEYCHAIN_SENTINEL) {
130
+ social.linkedin.accessToken = await resolveSecretField(KEYCHAIN_KEYS.linkedinAccessToken);
131
+ }
132
+ return resolved;
133
+ }
134
+ /**
135
+ * Read the YAML file as-is without schema validation or keychain resolution.
136
+ * Used by `adaria-ai init` when updating an existing config.
137
+ */
138
+ export async function loadRawConfig() {
139
+ await ensureAdariaDir();
140
+ let content;
141
+ try {
142
+ content = await fs.readFile(CONFIG_PATH, "utf-8");
143
+ }
144
+ catch (cause) {
145
+ throw new ConfigError(`Configuration file not found at ${CONFIG_PATH}`, {
146
+ cause,
147
+ userMessage: 'Configuration file not found. Run "adaria-ai init" to create it.',
148
+ });
149
+ }
150
+ const parsed = yaml.load(content, { schema: yaml.JSON_SCHEMA });
151
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
152
+ throw new ConfigError(`Configuration file at ${CONFIG_PATH} is not an object`);
153
+ }
154
+ return parsed;
155
+ }
156
+ /**
157
+ * Write a (possibly partial) config object to disk as YAML with 0600 perms.
158
+ *
159
+ * The explicit `fs.chmod` is load-bearing: `fs.writeFile({ mode })` only applies
160
+ * the mode when creating a new file. Without the chmod, a config accidentally
161
+ * written with a loose umask (e.g. 0022 → 0644) would stay loose across
162
+ * subsequent saves. Callers are responsible for writing a structure that will
163
+ * pass schema validation on the next load.
164
+ */
165
+ export async function saveConfig(config) {
166
+ await ensureAdariaDir();
167
+ const content = yaml.dump(config, { indent: 2, lineWidth: 100 });
168
+ await fs.writeFile(CONFIG_PATH, content, { mode: 0o600 });
169
+ await fs.chmod(CONFIG_PATH, 0o600);
170
+ }
171
+ export async function configExists() {
172
+ try {
173
+ await fs.access(CONFIG_PATH);
174
+ return true;
175
+ }
176
+ catch {
177
+ return false;
178
+ }
179
+ }
180
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,304 @@
1
+ /**
2
+ * DB query helpers — typed prepared statements with WeakMap caching.
3
+ *
4
+ * Ported from growth-agent `src/db/queries.js`. All functions take a
5
+ * better-sqlite3 Database instance as the first argument so callers
6
+ * control the connection lifecycle.
7
+ *
8
+ * Convention: insert/upsert params use snake_case field names matching
9
+ * the DDL column names. Return types are typed where consumers exist.
10
+ */
11
+ import type Database from "better-sqlite3";
12
+ export interface KeywordRankingRow {
13
+ id: number;
14
+ app_id: string;
15
+ keyword: string;
16
+ platform: string;
17
+ rank: number | null;
18
+ search_volume: number | null;
19
+ recorded_at: string;
20
+ }
21
+ export interface RankChangeRow {
22
+ current_rank: number | null;
23
+ previous_rank: number | null;
24
+ }
25
+ export interface SdkEventRow {
26
+ id: number;
27
+ app_id: string;
28
+ event_name: string;
29
+ count: number;
30
+ date: string;
31
+ }
32
+ export interface FunnelRow {
33
+ event_name: string;
34
+ total: number;
35
+ }
36
+ export interface ReviewRow {
37
+ id: number;
38
+ app_id: string;
39
+ platform: string;
40
+ review_id: string;
41
+ rating: number;
42
+ body: string | null;
43
+ sentiment: string | null;
44
+ reply_draft: string | null;
45
+ replied_at: string | null;
46
+ recorded_at: string;
47
+ }
48
+ export interface SentimentRow {
49
+ sentiment: string | null;
50
+ count: number;
51
+ }
52
+ export interface CompetitorMetadataRow {
53
+ id: number;
54
+ app_id: string;
55
+ competitor_id: string;
56
+ platform: string;
57
+ title: string | null;
58
+ subtitle: string | null;
59
+ description: string | null;
60
+ keywords: string | null;
61
+ recorded_at: string;
62
+ }
63
+ export interface AgentMetricRow {
64
+ id: number;
65
+ app_id: string;
66
+ agent: string;
67
+ run_date: string;
68
+ duration_ms: number | null;
69
+ status: string;
70
+ alerts_count: number;
71
+ actions_count: number;
72
+ approval_rate: number | null;
73
+ metadata: string | null;
74
+ recorded_at: string;
75
+ }
76
+ export interface AgentTrendRow {
77
+ agent: string;
78
+ run_date: string;
79
+ duration_ms: number | null;
80
+ status: string;
81
+ alerts_count: number;
82
+ actions_count: number;
83
+ approval_rate: number | null;
84
+ }
85
+ export interface ApprovalRow {
86
+ id: number;
87
+ app_id: string;
88
+ agent: string;
89
+ action: string;
90
+ status: string;
91
+ payload: string | null;
92
+ decided_at: string;
93
+ }
94
+ export interface BlogPostRow {
95
+ id: number;
96
+ app_id: string;
97
+ title: string;
98
+ slug: string;
99
+ keywords: string | null;
100
+ seo_score: number | null;
101
+ published_at: string | null;
102
+ recorded_at: string;
103
+ }
104
+ export interface ShortFormRow {
105
+ id: number;
106
+ app_id: string;
107
+ platform: string;
108
+ video_id: string;
109
+ title: string | null;
110
+ views: number;
111
+ likes: number;
112
+ comments: number;
113
+ avg_watch_time: number | null;
114
+ published_at: string | null;
115
+ recorded_at: string;
116
+ }
117
+ export interface SeoMetricRow {
118
+ id: number;
119
+ date: string;
120
+ clicks: number;
121
+ impressions: number;
122
+ ctr: number;
123
+ avg_position: number;
124
+ recorded_at: string;
125
+ }
126
+ export interface SeoTotalsRow {
127
+ total_clicks: number | null;
128
+ total_impressions: number | null;
129
+ avg_ctr: number | null;
130
+ avg_position: number | null;
131
+ }
132
+ export interface WebTrafficRow {
133
+ id: number;
134
+ date: string;
135
+ page_views: number;
136
+ users: number;
137
+ sessions: number;
138
+ bounce_rate: number;
139
+ recorded_at: string;
140
+ }
141
+ export interface WebTrafficTotalsRow {
142
+ total_pv: number | null;
143
+ total_users: number | null;
144
+ total_sessions: number | null;
145
+ avg_bounce_rate: number | null;
146
+ }
147
+ export interface BlogPerformanceRow {
148
+ id: number;
149
+ slug: string;
150
+ date: string;
151
+ page_views: number;
152
+ avg_session_duration: number;
153
+ bounce_rate: number;
154
+ seo_clicks: number;
155
+ seo_impressions: number;
156
+ seo_ctr: number;
157
+ seo_position: number;
158
+ recorded_at: string;
159
+ }
160
+ export interface TopBlogPerformanceRow {
161
+ slug: string;
162
+ total_pv: number;
163
+ total_clicks: number;
164
+ avg_duration: number;
165
+ avg_bounce: number;
166
+ }
167
+ export declare function insertKeywordRanking(db: Database.Database, params: {
168
+ app_id: string;
169
+ keyword: string;
170
+ platform: string;
171
+ rank: number | null;
172
+ search_volume: number | null;
173
+ }): Database.RunResult;
174
+ export declare function getRecentKeywordRankings(db: Database.Database, appId: string, days?: number): KeywordRankingRow[];
175
+ export declare function getKeywordRankChange(db: Database.Database, appId: string, keyword: string, platform: string): RankChangeRow;
176
+ export declare function upsertSdkEvent(db: Database.Database, params: {
177
+ app_id: string;
178
+ event_name: string;
179
+ count: number;
180
+ date: string;
181
+ }): Database.RunResult;
182
+ export declare function getSdkEventsByRange(db: Database.Database, appId: string, startDate: string, endDate: string): SdkEventRow[];
183
+ export declare function getFunnelConversion(db: Database.Database, appId: string, startDate: string, endDate: string): FunnelRow[];
184
+ export declare function insertReview(db: Database.Database, params: {
185
+ app_id: string;
186
+ platform: string;
187
+ review_id: string;
188
+ rating: number;
189
+ body: string | null;
190
+ }): Database.RunResult;
191
+ export declare function getRecentReviews(db: Database.Database, appId: string, days?: number): ReviewRow[];
192
+ export declare function updateReviewSentiment(db: Database.Database, reviewId: string, sentiment: string): Database.RunResult;
193
+ export declare function updateReplyDraft(db: Database.Database, reviewId: string, replyDraft: string): Database.RunResult;
194
+ export declare function markReviewReplied(db: Database.Database, reviewId: string): Database.RunResult;
195
+ export declare function getSentimentSummary(db: Database.Database, appId: string, days?: number): SentimentRow[];
196
+ export declare function getRecentOneStarCount(db: Database.Database, appId: string, days?: number): number;
197
+ export declare function insertCompetitorMetadata(db: Database.Database, params: {
198
+ app_id: string;
199
+ competitor_id: string;
200
+ platform: string;
201
+ title: string | null;
202
+ subtitle: string | null;
203
+ description: string | null;
204
+ keywords: string | string[] | null;
205
+ }): Database.RunResult;
206
+ export declare function getPreviousCompetitorMetadata(db: Database.Database, appId: string, competitorId: string, platform: string): CompetitorMetadataRow | undefined;
207
+ export declare function insertAgentMetric(db: Database.Database, params: {
208
+ app_id: string;
209
+ agent: string;
210
+ run_date: string;
211
+ duration_ms: number | null;
212
+ status: string;
213
+ alerts_count?: number;
214
+ actions_count?: number;
215
+ approval_rate?: number | null;
216
+ metadata?: Record<string, unknown> | null;
217
+ }): Database.RunResult;
218
+ export declare function getAgentMetrics(db: Database.Database, appId: string, agent: string, days?: number): AgentMetricRow[];
219
+ export declare function getAgentTrend(db: Database.Database, appId: string, days?: number): AgentTrendRow[];
220
+ export declare function insertApproval(db: Database.Database, params: {
221
+ app_id: string;
222
+ agent: string;
223
+ action: string;
224
+ status: string;
225
+ payload: unknown;
226
+ }): Database.RunResult;
227
+ export declare function getRecentApprovals(db: Database.Database, appId: string, days?: number): ApprovalRow[];
228
+ export declare function insertBlogPost(db: Database.Database, params: {
229
+ app_id: string;
230
+ title: string;
231
+ slug: string;
232
+ keywords: string | null;
233
+ seo_score?: number | null;
234
+ published_at?: string | null;
235
+ }): Database.RunResult;
236
+ export declare function getBlogSlugs(db: Database.Database): string[];
237
+ export declare function getRecentBlogPosts(db: Database.Database, appId: string, days?: number): BlogPostRow[];
238
+ export declare function upsertShortFormPerformance(db: Database.Database, params: {
239
+ app_id: string;
240
+ platform: string;
241
+ video_id: string;
242
+ title: string | null;
243
+ views?: number;
244
+ likes?: number;
245
+ comments?: number;
246
+ avg_watch_time?: number | null;
247
+ published_at?: string | null;
248
+ }): Database.RunResult;
249
+ export declare function getRecentShortFormPerformance(db: Database.Database, appId: string, days?: number): ShortFormRow[];
250
+ export declare function upsertSeoMetric(db: Database.Database, params: {
251
+ date: string;
252
+ clicks?: number;
253
+ impressions?: number;
254
+ ctr?: number;
255
+ avg_position?: number;
256
+ }): Database.RunResult;
257
+ export declare function getSeoMetricsByRange(db: Database.Database, startDate: string, endDate: string): SeoMetricRow[];
258
+ export declare function getSeoTotals(db: Database.Database, startDate: string, endDate: string): SeoTotalsRow;
259
+ export declare function upsertWebTraffic(db: Database.Database, params: {
260
+ date: string;
261
+ page_views?: number;
262
+ users?: number;
263
+ sessions?: number;
264
+ bounce_rate?: number;
265
+ }): Database.RunResult;
266
+ export declare function getWebTrafficByRange(db: Database.Database, startDate: string, endDate: string): WebTrafficRow[];
267
+ export declare function getWebTrafficTotals(db: Database.Database, startDate: string, endDate: string): WebTrafficTotalsRow;
268
+ export declare function upsertBlogPerformance(db: Database.Database, params: {
269
+ slug: string;
270
+ date: string;
271
+ page_views?: number;
272
+ avg_session_duration?: number;
273
+ bounce_rate?: number;
274
+ seo_clicks?: number;
275
+ seo_impressions?: number;
276
+ seo_ctr?: number;
277
+ seo_position?: number;
278
+ }): Database.RunResult;
279
+ export declare function getBlogPerformanceBySlug(db: Database.Database, slug: string, startDate: string, endDate: string): BlogPerformanceRow[];
280
+ export declare function getTopBlogPerformance(db: Database.Database, startDate: string, endDate: string, limit?: number): TopBlogPerformanceRow[];
281
+ export interface SocialPostRow {
282
+ id: number;
283
+ app_id: string;
284
+ platform: string;
285
+ post_id: string | null;
286
+ post_url: string | null;
287
+ content: string;
288
+ image_url: string | null;
289
+ status: string;
290
+ posted_at: string;
291
+ }
292
+ export declare function insertSocialPost(db: Database.Database, params: {
293
+ app_id: string;
294
+ platform: string;
295
+ post_id: string | null;
296
+ post_url: string | null;
297
+ content: string;
298
+ image_url: string | null;
299
+ status?: string;
300
+ }): Database.RunResult;
301
+ export declare function getSocialPostsByApp(db: Database.Database, appId: string, days?: number): SocialPostRow[];
302
+ export declare function getSocialPostsByPlatform(db: Database.Database, appId: string, platform: string, days?: number): SocialPostRow[];
303
+ export declare function updateSocialPostStatus(db: Database.Database, id: number, status: "posted" | "deleted" | "failed"): Database.RunResult;
304
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/db/queries.ts"],"names":[],"mappings":"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"}