adaria-ai 0.1.0 → 0.1.2

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 (2) hide show
  1. package/README.md +172 -10
  2. package/package.json +2 -2
package/README.md CHANGED
@@ -1,21 +1,183 @@
1
- # adaria-ai
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/ahn283/adaria-ai/main/assets/logo.png" alt="adaria.ai" width="420" />
3
+ </p>
2
4
 
3
- Single-user marketing operations agent for the Adaria.ai app portfolio (Fridgify, Arden TTS, Tempy). Runs as a macOS launchd daemon, receives commands and free-form questions via Slack, orchestrates data collection from 8 marketing sources, dispatches Claude-powered analysis skills, and delivers weekly briefings with approval-gated write actions.
5
+ <p align="center">
6
+ <strong>AI-powered marketing operations agent for mobile app teams</strong>
7
+ </p>
4
8
 
5
- **Status:** pre-release (M0 bootstrap). Not yet published to npm. See [`docs/growth-agent/`](./docs/growth-agent/) for the full plan — start with `prd.md` and `checklist.md`.
9
+ <p align="center">
10
+ <a href="https://www.npmjs.com/package/adaria-ai"><img src="https://img.shields.io/npm/v/adaria-ai.svg" alt="npm version" /></a>
11
+ <a href="https://github.com/ahn283/adaria-ai/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/adaria-ai.svg" alt="license" /></a>
12
+ <img src="https://img.shields.io/node/v/adaria-ai.svg" alt="node version" />
13
+ <img src="https://img.shields.io/badge/platform-macOS-blue.svg" alt="platform" />
14
+ </p>
6
15
 
7
- ## Profiles and safety
16
+ ---
8
17
 
9
- Every credential the agent uses flows through `adaria-ai init`. The wizard writes `$ADARIA_HOME/config.yaml` and stores secrets in the macOS Keychain under a service prefix derived from `$ADARIA_HOME`, so you can run a **dev profile** and the production daemon side by side on the same machine without either clobbering the other:
18
+ adaria-ai is a single-user, local-first marketing operations agent that runs as a macOS background service. It connects to Slack, orchestrates data collection from 8 marketing sources, runs Claude-powered analysis skills, and delivers weekly growth briefings with approval-gated actions.
10
19
 
11
- - **Production** (default): `$HOME/.adaria` Keychain service `adaria-ai`
12
- - **Dev profile**: `$HOME/.adaria-dev` — Keychain service `adaria-ai-dev`
20
+ Built for the [Adaria.ai](https://adaria.ai) app portfolio (Fridgify, Arden TTS, Tempy), but configurable for any mobile app team via `apps.yaml`.
21
+
22
+ ## Features
23
+
24
+ **8 Analysis Skills** &mdash; ASO keyword tracking, review sentiment & reply drafts, onboarding funnel analysis, SEO blog generation, short-form content ideas, SDK request aggregation, content strategy, and social media publishing.
25
+
26
+ **8 Data Collectors** &mdash; App Store Connect, Google Play Console, ASOMobile, Eodin SDK, Eodin Blog + Search Console + GA4, Fridgify Recipes API, YouTube Data API, Arden TTS metrics.
27
+
28
+ **6 Social Platforms** &mdash; Generate and publish platform-optimised marketing content to Twitter/X, Facebook, Threads, TikTok, YouTube Community, and LinkedIn. Every post is approval-gated.
29
+
30
+ **Two Interaction Modes**
31
+
32
+ | Mode | Trigger | Example |
33
+ |------|---------|---------|
34
+ | **Mode A** &mdash; Skill command | `@adaria-ai aso fridgify` | Runs full ASO analysis with keyword rankings, competitor diffs, and metadata proposals |
35
+ | **Mode B** &mdash; Conversational | `@adaria-ai how are reviews this week?` | Claude answers using 4 read-only MCP tools against your marketing data |
36
+
37
+ **Automated Briefings** &mdash; Weekly growth reports and daily threshold alerts delivered to Slack on a launchd cron schedule.
38
+
39
+ **Approval-Gated Write Actions** &mdash; Blog publishing, review replies, metadata changes, and social posts require explicit Slack button approval before execution.
40
+
41
+ ## Architecture
42
+
43
+ ```
44
+ Slack
45
+ |
46
+ +-----+-----+
47
+ | daemon | (always-on, launchd)
48
+ +-----+-----+
49
+ |
50
+ +---------+---------+
51
+ | |
52
+ Mode A Mode B
53
+ (skill dispatch) (Claude + MCP tools)
54
+ | |
55
+ skills/*.ts tools/*.ts
56
+ | (read-only)
57
+ collectors/*.ts |
58
+ | SQLite DB
59
+ safety.ts
60
+ (approval gates)
61
+ |
62
+ Slack Block Kit
63
+ [Approve] [Reject]
64
+ ```
65
+
66
+ Three separate launchd processes:
67
+
68
+ | Process | Schedule | Purpose |
69
+ |---------|----------|---------|
70
+ | `com.adaria-ai.daemon` | Always on | Reactive Slack event handler |
71
+ | `com.adaria-ai.weekly` | Sun 23:00 UTC | Full weekly analysis + briefing |
72
+ | `com.adaria-ai.monitor` | Daily 23:00 UTC | Threshold-based alerts |
73
+
74
+ ## Quick Start
13
75
 
14
76
  ```bash
15
- # 1. Seed a dev profile once with live (or scoped-down) credentials:
77
+ # 1. Install
78
+ npm install -g @anthropic-ai/claude-code
79
+ claude /login
80
+ npm install -g adaria-ai
81
+
82
+ # 2. Configure
83
+ adaria-ai init
84
+
85
+ # 3. Run
86
+ adaria-ai start
87
+ adaria-ai status # verify 3 launchd jobs loaded
88
+ adaria-ai doctor # health check
89
+ ```
90
+
91
+ ## CLI Commands
92
+
93
+ ```bash
94
+ adaria-ai init # Interactive setup wizard
95
+ adaria-ai init slack # Configure Slack credentials only
96
+ adaria-ai init collectors # Configure data source credentials
97
+ adaria-ai init social # Configure social platform credentials
98
+
99
+ adaria-ai start # Install and load 3 launchd plists
100
+ adaria-ai stop # Unload all launchd plists
101
+ adaria-ai status # Check launchd job states
102
+ adaria-ai logs # Tail daemon logs
103
+
104
+ adaria-ai doctor # Full health check
105
+ adaria-ai analyze # Run weekly analysis manually
106
+ adaria-ai monitor # Run daily monitor manually
107
+ ```
108
+
109
+ ## Configuration
110
+
111
+ All runtime state lives in `~/.adaria/` (override with `ADARIA_HOME`):
112
+
113
+ ```
114
+ ~/.adaria/
115
+ config.yaml # Written by `adaria-ai init`
116
+ apps.yaml # Your apps, platforms, keywords, competitors
117
+ sessions.json # Slack thread <-> Claude session map
118
+ audit.jsonl # Every action logged
119
+ data/adaria.db # SQLite database
120
+ logs/ # Daemon, weekly, monitor logs
121
+ ```
122
+
123
+ Secrets are stored in macOS Keychain, never in config files.
124
+
125
+ ### Dev Profile
126
+
127
+ Run a separate dev instance alongside production:
128
+
129
+ ```bash
130
+ # Dev profile uses ~/.adaria-dev with isolated keychain namespace
16
131
  npm run init:dev
17
- # 2. Exercise every configured collector against real APIs:
18
132
  npm run smoke:collectors:dev
133
+ npm run smoke:social:dev
19
134
  ```
20
135
 
21
- Real `config.yaml` and `apps.yaml` files never live inside the repository — they are ignored by Git and sit only under `$HOME/.adaria*`. The `files` field in `package.json` ships only `dist/`, `src/`, `prompts/`, `launchd/`, `apps.example.yaml`, `README.md`, and `LICENSE`, and `npm run prepublishOnly` runs `check:tarball-secrets`, which rips open the candidate tarball and refuses to publish if it finds anything that looks like a Slack token, Anthropic key, Google API key, or PEM private key block.
136
+ ## Skills Reference
137
+
138
+ | Skill | Command | What it does |
139
+ |-------|---------|-------------|
140
+ | ASO | `aso <app>` | Keyword rankings, rank changes, competitor diffs, metadata proposals |
141
+ | Reviews | `review <app>` | Sentiment analysis, complaint clustering, reply drafts |
142
+ | Onboarding | `onboarding <app>` | Funnel analysis, cohort retention, drop-off hypotheses |
143
+ | SEO Blog | `blog <app>` | Blog post generation + Fridgify recipe content |
144
+ | Short-form | `shortform <app>` | YouTube Shorts performance + content ideas |
145
+ | SDK Requests | `sdkrequest <app>` | SDK event aggregation and analysis |
146
+ | Content | `content <app>` | Pinterest pins + trend content ideas |
147
+ | Social | `social <app>` | Generate + post to 6 platforms (approval-gated) |
148
+
149
+ ## Security
150
+
151
+ - **Slack allowlist** &mdash; Only configured user IDs can interact with the bot
152
+ - **Prompt injection defense** &mdash; All external data (reviews, recipes, competitor metadata) is sanitized and XML-wrapped before reaching Claude
153
+ - **Read-only MCP tools** &mdash; Mode B has no write access; skills are never exposed as tools
154
+ - **Approval gates** &mdash; Every write action requires human confirmation
155
+ - **Audit log** &mdash; Every invocation, skill dispatch, and approval action is logged
156
+ - **No secrets in npm** &mdash; Pre-publish scanner blocks tarball if credentials detected
157
+ - **Keychain storage** &mdash; All tokens stored in macOS Keychain, not files
158
+
159
+ ## Tech Stack
160
+
161
+ - **Runtime:** Node.js 20+, TypeScript (strict, ESM)
162
+ - **AI:** Claude CLI (via [@anthropic-ai/claude-code](https://www.npmjs.com/package/@anthropic-ai/claude-code))
163
+ - **Messaging:** Slack (Socket Mode + Bolt)
164
+ - **Database:** SQLite (better-sqlite3, WAL mode)
165
+ - **Process management:** macOS launchd
166
+ - **Testing:** Vitest (545 tests)
167
+
168
+ ## Requirements
169
+
170
+ - macOS (launchd-based process management)
171
+ - Node.js 20+
172
+ - Claude Code CLI installed and authenticated
173
+ - Slack workspace with a bot app (Socket Mode enabled)
174
+
175
+ ## License
176
+
177
+ [MIT](LICENSE)
178
+
179
+ ---
180
+
181
+ <p align="center">
182
+ Built by <a href="https://github.com/ahnwoojin">Woojin Ahn</a> for the <a href="https://adaria.ai">Adaria.ai</a> app portfolio
183
+ </p>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adaria-ai",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Single-user marketing operations agent for the Adaria.ai app portfolio, running as a macOS launchd daemon with Slack interface",
5
5
  "type": "module",
6
6
  "bin": {
@@ -46,7 +46,7 @@
46
46
  "license": "MIT",
47
47
  "repository": {
48
48
  "type": "git",
49
- "url": "https://github.com/ahnwoojin/adaria-ai.git"
49
+ "url": "https://github.com/ahn283/adaria-ai.git"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@eslint/js": "^9.39.4",