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.
- package/LICENSE +21 -0
- package/README.md +21 -0
- package/apps.example.yaml +65 -0
- package/dist/agent/audit.d.ts +16 -0
- package/dist/agent/audit.d.ts.map +1 -0
- package/dist/agent/audit.js +42 -0
- package/dist/agent/audit.js.map +1 -0
- package/dist/agent/claude.d.ts +62 -0
- package/dist/agent/claude.d.ts.map +1 -0
- package/dist/agent/claude.js +297 -0
- package/dist/agent/claude.js.map +1 -0
- package/dist/agent/conversation-summary.d.ts +29 -0
- package/dist/agent/conversation-summary.d.ts.map +1 -0
- package/dist/agent/conversation-summary.js +221 -0
- package/dist/agent/conversation-summary.js.map +1 -0
- package/dist/agent/core.d.ts +81 -0
- package/dist/agent/core.d.ts.map +1 -0
- package/dist/agent/core.js +527 -0
- package/dist/agent/core.js.map +1 -0
- package/dist/agent/mcp-launcher.d.ts +42 -0
- package/dist/agent/mcp-launcher.d.ts.map +1 -0
- package/dist/agent/mcp-launcher.js +38 -0
- package/dist/agent/mcp-launcher.js.map +1 -0
- package/dist/agent/mcp-manager.d.ts +81 -0
- package/dist/agent/mcp-manager.d.ts.map +1 -0
- package/dist/agent/mcp-manager.js +136 -0
- package/dist/agent/mcp-manager.js.map +1 -0
- package/dist/agent/memory.d.ts +10 -0
- package/dist/agent/memory.d.ts.map +1 -0
- package/dist/agent/memory.js +95 -0
- package/dist/agent/memory.js.map +1 -0
- package/dist/agent/safety.d.ts +45 -0
- package/dist/agent/safety.d.ts.map +1 -0
- package/dist/agent/safety.js +71 -0
- package/dist/agent/safety.js.map +1 -0
- package/dist/agent/session.d.ts +27 -0
- package/dist/agent/session.d.ts.map +1 -0
- package/dist/agent/session.js +124 -0
- package/dist/agent/session.js.map +1 -0
- package/dist/agent/tool-descriptions.d.ts +8 -0
- package/dist/agent/tool-descriptions.d.ts.map +1 -0
- package/dist/agent/tool-descriptions.js +26 -0
- package/dist/agent/tool-descriptions.js.map +1 -0
- package/dist/cli/analyze.d.ts +8 -0
- package/dist/cli/analyze.d.ts.map +1 -0
- package/dist/cli/analyze.js +114 -0
- package/dist/cli/analyze.js.map +1 -0
- package/dist/cli/daemon.d.ts +2 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +91 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +198 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/init.d.ts +3 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +459 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/logs.d.ts +4 -0
- package/dist/cli/logs.d.ts.map +1 -0
- package/dist/cli/logs.js +50 -0
- package/dist/cli/logs.js.map +1 -0
- package/dist/cli/monitor-cmd.d.ts +11 -0
- package/dist/cli/monitor-cmd.d.ts.map +1 -0
- package/dist/cli/monitor-cmd.js +59 -0
- package/dist/cli/monitor-cmd.js.map +1 -0
- package/dist/cli/start.d.ts +11 -0
- package/dist/cli/start.d.ts.map +1 -0
- package/dist/cli/start.js +103 -0
- package/dist/cli/start.js.map +1 -0
- package/dist/cli/status.d.ts +9 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +49 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/stop.d.ts +2 -0
- package/dist/cli/stop.d.ts.map +1 -0
- package/dist/cli/stop.js +34 -0
- package/dist/cli/stop.js.map +1 -0
- package/dist/collectors/appstore.d.ts +51 -0
- package/dist/collectors/appstore.d.ts.map +1 -0
- package/dist/collectors/appstore.js +166 -0
- package/dist/collectors/appstore.js.map +1 -0
- package/dist/collectors/arden-tts.d.ts +60 -0
- package/dist/collectors/arden-tts.d.ts.map +1 -0
- package/dist/collectors/arden-tts.js +83 -0
- package/dist/collectors/arden-tts.js.map +1 -0
- package/dist/collectors/asomobile.d.ts +37 -0
- package/dist/collectors/asomobile.d.ts.map +1 -0
- package/dist/collectors/asomobile.js +88 -0
- package/dist/collectors/asomobile.js.map +1 -0
- package/dist/collectors/eodin-blog.d.ts +90 -0
- package/dist/collectors/eodin-blog.d.ts.map +1 -0
- package/dist/collectors/eodin-blog.js +238 -0
- package/dist/collectors/eodin-blog.js.map +1 -0
- package/dist/collectors/eodin-sdk.d.ts +60 -0
- package/dist/collectors/eodin-sdk.d.ts.map +1 -0
- package/dist/collectors/eodin-sdk.js +112 -0
- package/dist/collectors/eodin-sdk.js.map +1 -0
- package/dist/collectors/fridgify-recipes.d.ts +65 -0
- package/dist/collectors/fridgify-recipes.d.ts.map +1 -0
- package/dist/collectors/fridgify-recipes.js +111 -0
- package/dist/collectors/fridgify-recipes.js.map +1 -0
- package/dist/collectors/playstore.d.ts +46 -0
- package/dist/collectors/playstore.d.ts.map +1 -0
- package/dist/collectors/playstore.js +140 -0
- package/dist/collectors/playstore.js.map +1 -0
- package/dist/collectors/youtube.d.ts +44 -0
- package/dist/collectors/youtube.d.ts.map +1 -0
- package/dist/collectors/youtube.js +107 -0
- package/dist/collectors/youtube.js.map +1 -0
- package/dist/config/apps-schema.d.ts +94 -0
- package/dist/config/apps-schema.d.ts.map +1 -0
- package/dist/config/apps-schema.js +66 -0
- package/dist/config/apps-schema.js.map +1 -0
- package/dist/config/keychain.d.ts +14 -0
- package/dist/config/keychain.d.ts.map +1 -0
- package/dist/config/keychain.js +89 -0
- package/dist/config/keychain.js.map +1 -0
- package/dist/config/load-apps.d.ts +16 -0
- package/dist/config/load-apps.d.ts.map +1 -0
- package/dist/config/load-apps.js +38 -0
- package/dist/config/load-apps.js.map +1 -0
- package/dist/config/schema.d.ts +306 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +220 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/store.d.ts +38 -0
- package/dist/config/store.d.ts.map +1 -0
- package/dist/config/store.js +180 -0
- package/dist/config/store.js.map +1 -0
- package/dist/db/queries.d.ts +304 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +327 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.d.ts +15 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +252 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/messenger/adapter.d.ts +63 -0
- package/dist/messenger/adapter.d.ts.map +1 -0
- package/dist/messenger/adapter.js +7 -0
- package/dist/messenger/adapter.js.map +1 -0
- package/dist/messenger/factory.d.ts +12 -0
- package/dist/messenger/factory.d.ts.map +1 -0
- package/dist/messenger/factory.js +9 -0
- package/dist/messenger/factory.js.map +1 -0
- package/dist/messenger/slack.d.ts +30 -0
- package/dist/messenger/slack.d.ts.map +1 -0
- package/dist/messenger/slack.js +309 -0
- package/dist/messenger/slack.js.map +1 -0
- package/dist/messenger/split.d.ts +17 -0
- package/dist/messenger/split.d.ts.map +1 -0
- package/dist/messenger/split.js +56 -0
- package/dist/messenger/split.js.map +1 -0
- package/dist/orchestrator/dashboard.d.ts +67 -0
- package/dist/orchestrator/dashboard.d.ts.map +1 -0
- package/dist/orchestrator/dashboard.js +113 -0
- package/dist/orchestrator/dashboard.js.map +1 -0
- package/dist/orchestrator/monitor.d.ts +37 -0
- package/dist/orchestrator/monitor.d.ts.map +1 -0
- package/dist/orchestrator/monitor.js +236 -0
- package/dist/orchestrator/monitor.js.map +1 -0
- package/dist/orchestrator/types.d.ts +82 -0
- package/dist/orchestrator/types.d.ts.map +1 -0
- package/dist/orchestrator/types.js +12 -0
- package/dist/orchestrator/types.js.map +1 -0
- package/dist/orchestrator/weekly.d.ts +66 -0
- package/dist/orchestrator/weekly.d.ts.map +1 -0
- package/dist/orchestrator/weekly.js +376 -0
- package/dist/orchestrator/weekly.js.map +1 -0
- package/dist/prompts/loader.d.ts +18 -0
- package/dist/prompts/loader.d.ts.map +1 -0
- package/dist/prompts/loader.js +28 -0
- package/dist/prompts/loader.js.map +1 -0
- package/dist/security/auth.d.ts +14 -0
- package/dist/security/auth.d.ts.map +1 -0
- package/dist/security/auth.js +14 -0
- package/dist/security/auth.js.map +1 -0
- package/dist/security/prompt-guard.d.ts +21 -0
- package/dist/security/prompt-guard.d.ts.map +1 -0
- package/dist/security/prompt-guard.js +54 -0
- package/dist/security/prompt-guard.js.map +1 -0
- package/dist/skills/aso.d.ts +60 -0
- package/dist/skills/aso.d.ts.map +1 -0
- package/dist/skills/aso.js +322 -0
- package/dist/skills/aso.js.map +1 -0
- package/dist/skills/content.d.ts +25 -0
- package/dist/skills/content.d.ts.map +1 -0
- package/dist/skills/content.js +90 -0
- package/dist/skills/content.js.map +1 -0
- package/dist/skills/index.d.ts +65 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +90 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/onboarding.d.ts +58 -0
- package/dist/skills/onboarding.d.ts.map +1 -0
- package/dist/skills/onboarding.js +274 -0
- package/dist/skills/onboarding.js.map +1 -0
- package/dist/skills/registry.d.ts +24 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +66 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/skills/review.d.ts +33 -0
- package/dist/skills/review.d.ts.map +1 -0
- package/dist/skills/review.js +236 -0
- package/dist/skills/review.js.map +1 -0
- package/dist/skills/sdk-request.d.ts +30 -0
- package/dist/skills/sdk-request.d.ts.map +1 -0
- package/dist/skills/sdk-request.js +72 -0
- package/dist/skills/sdk-request.js.map +1 -0
- package/dist/skills/seo-blog.d.ts +64 -0
- package/dist/skills/seo-blog.d.ts.map +1 -0
- package/dist/skills/seo-blog.js +268 -0
- package/dist/skills/seo-blog.js.map +1 -0
- package/dist/skills/short-form.d.ts +28 -0
- package/dist/skills/short-form.d.ts.map +1 -0
- package/dist/skills/short-form.js +121 -0
- package/dist/skills/short-form.js.map +1 -0
- package/dist/skills/social-publish.d.ts +32 -0
- package/dist/skills/social-publish.d.ts.map +1 -0
- package/dist/skills/social-publish.js +133 -0
- package/dist/skills/social-publish.js.map +1 -0
- package/dist/social/base.d.ts +47 -0
- package/dist/social/base.d.ts.map +1 -0
- package/dist/social/base.js +26 -0
- package/dist/social/base.js.map +1 -0
- package/dist/social/facebook.d.ts +27 -0
- package/dist/social/facebook.d.ts.map +1 -0
- package/dist/social/facebook.js +166 -0
- package/dist/social/facebook.js.map +1 -0
- package/dist/social/factory.d.ts +26 -0
- package/dist/social/factory.d.ts.map +1 -0
- package/dist/social/factory.js +32 -0
- package/dist/social/factory.js.map +1 -0
- package/dist/social/linkedin.d.ts +26 -0
- package/dist/social/linkedin.d.ts.map +1 -0
- package/dist/social/linkedin.js +190 -0
- package/dist/social/linkedin.js.map +1 -0
- package/dist/social/threads.d.ts +21 -0
- package/dist/social/threads.d.ts.map +1 -0
- package/dist/social/threads.js +122 -0
- package/dist/social/threads.js.map +1 -0
- package/dist/social/tiktok.d.ts +23 -0
- package/dist/social/tiktok.d.ts.map +1 -0
- package/dist/social/tiktok.js +110 -0
- package/dist/social/tiktok.js.map +1 -0
- package/dist/social/twitter.d.ts +30 -0
- package/dist/social/twitter.d.ts.map +1 -0
- package/dist/social/twitter.js +189 -0
- package/dist/social/twitter.js.map +1 -0
- package/dist/social/youtube.d.ts +21 -0
- package/dist/social/youtube.d.ts.map +1 -0
- package/dist/social/youtube.js +108 -0
- package/dist/social/youtube.js.map +1 -0
- package/dist/tools/app-info.d.ts +7 -0
- package/dist/tools/app-info.d.ts.map +1 -0
- package/dist/tools/app-info.js +53 -0
- package/dist/tools/app-info.js.map +1 -0
- package/dist/tools/collector-fetch.d.ts +11 -0
- package/dist/tools/collector-fetch.d.ts.map +1 -0
- package/dist/tools/collector-fetch.js +101 -0
- package/dist/tools/collector-fetch.js.map +1 -0
- package/dist/tools/db-query.d.ts +29 -0
- package/dist/tools/db-query.d.ts.map +1 -0
- package/dist/tools/db-query.js +159 -0
- package/dist/tools/db-query.js.map +1 -0
- package/dist/tools/skill-result.d.ts +8 -0
- package/dist/tools/skill-result.d.ts.map +1 -0
- package/dist/tools/skill-result.js +63 -0
- package/dist/tools/skill-result.js.map +1 -0
- package/dist/tools/tool-host.d.ts +12 -0
- package/dist/tools/tool-host.d.ts.map +1 -0
- package/dist/tools/tool-host.js +124 -0
- package/dist/tools/tool-host.js.map +1 -0
- package/dist/types/collectors.d.ts +198 -0
- package/dist/types/collectors.d.ts.map +1 -0
- package/dist/types/collectors.js +28 -0
- package/dist/types/collectors.js.map +1 -0
- package/dist/types/skill.d.ts +60 -0
- package/dist/types/skill.d.ts.map +1 -0
- package/dist/types/skill.js +9 -0
- package/dist/types/skill.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +26 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +67 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/errors.d.ts +44 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +75 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/escape.d.ts +11 -0
- package/dist/utils/escape.d.ts.map +1 -0
- package/dist/utils/escape.js +19 -0
- package/dist/utils/escape.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +93 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/parse-json.d.ts +13 -0
- package/dist/utils/parse-json.d.ts.map +1 -0
- package/dist/utils/parse-json.js +61 -0
- package/dist/utils/parse-json.js.map +1 -0
- package/dist/utils/paths.d.ts +14 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +19 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +20 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +47 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/retry.d.ts +26 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +61 -0
- package/dist/utils/retry.js.map +1 -0
- package/launchd/.gitkeep +0 -0
- package/launchd/com.adaria-ai.daemon.plist.template +62 -0
- package/launchd/com.adaria-ai.monitor.plist.template +41 -0
- package/launchd/com.adaria-ai.weekly.plist.template +43 -0
- package/package.json +72 -0
- package/prompts/aso-description.md +44 -0
- package/prompts/aso-inapp-events.md +20 -0
- package/prompts/aso-metadata.md +34 -0
- package/prompts/aso-screenshots.md +20 -0
- package/prompts/onboarding-hypotheses.md +38 -0
- package/prompts/onboarding-review-timing.md +24 -0
- package/prompts/review-clustering.md +19 -0
- package/prompts/review-replies.md +18 -0
- package/prompts/review-sentiment.md +16 -0
- package/prompts/seo-blog-fridgify-recipe.md +116 -0
- package/prompts/seo-blog.md +69 -0
- package/prompts/short-form-ideas.md +50 -0
- package/prompts/social-publish.md +46 -0
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `adaria-ai init` — modular interactive setup wizard.
|
|
3
|
+
*
|
|
4
|
+
* Supports both full setup and individual section setup:
|
|
5
|
+
* adaria-ai init — full guided setup (all sections)
|
|
6
|
+
* adaria-ai init slack — Slack credentials only
|
|
7
|
+
* adaria-ai init collectors — data collector credentials only
|
|
8
|
+
* adaria-ai init social — social media platform credentials only
|
|
9
|
+
*
|
|
10
|
+
* When re-running a section, the wizard merges with the existing config
|
|
11
|
+
* instead of overwriting the entire file. Secrets are stored in the
|
|
12
|
+
* macOS Keychain; YAML keeps the sentinel `***keychain***`.
|
|
13
|
+
*/
|
|
14
|
+
import inquirer from "inquirer";
|
|
15
|
+
import { configSchema, KEYCHAIN_KEYS, KEYCHAIN_SENTINEL, } from "../config/schema.js";
|
|
16
|
+
import { configExists, loadRawConfig, saveConfig } from "../config/store.js";
|
|
17
|
+
import { setSecret } from "../config/keychain.js";
|
|
18
|
+
import { APPS_PATH, CONFIG_PATH } from "../utils/paths.js";
|
|
19
|
+
const ALL_SECTIONS = ["slack", "collectors", "social"];
|
|
20
|
+
async function askSlack() {
|
|
21
|
+
console.log("\n--- Slack ---");
|
|
22
|
+
console.log("Get tokens from https://api.slack.com/apps > your app:");
|
|
23
|
+
console.log(" Bot Token: OAuth & Permissions > Bot User OAuth Token (xoxb-...)");
|
|
24
|
+
console.log(" App Token: Basic Information > App-Level Tokens > Generate (xapp-...)");
|
|
25
|
+
console.log(" Signing Secret: Basic Information > App Credentials > Signing Secret");
|
|
26
|
+
console.log(" User ID: Slack > click your profile > '...' > Copy member ID\n");
|
|
27
|
+
return inquirer.prompt([
|
|
28
|
+
{
|
|
29
|
+
type: "password",
|
|
30
|
+
name: "botToken",
|
|
31
|
+
message: "Slack bot token (xoxb-…):",
|
|
32
|
+
mask: "*",
|
|
33
|
+
validate: (v) => v.startsWith("xoxb-") || "Slack bot tokens start with 'xoxb-'",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: "password",
|
|
37
|
+
name: "appToken",
|
|
38
|
+
message: "Slack app token (xapp-…):",
|
|
39
|
+
mask: "*",
|
|
40
|
+
validate: (v) => v.startsWith("xapp-") || "Slack app tokens start with 'xapp-'",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
type: "password",
|
|
44
|
+
name: "signingSecret",
|
|
45
|
+
message: "Slack signing secret:",
|
|
46
|
+
mask: "*",
|
|
47
|
+
validate: (v) => v.length > 0 || "Signing secret cannot be empty",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
type: "input",
|
|
51
|
+
name: "allowedUser",
|
|
52
|
+
message: "Allowlisted Slack user ID (U…):",
|
|
53
|
+
validate: (v) => /^U[A-Z0-9]+$/.test(v) ||
|
|
54
|
+
"Slack user IDs start with 'U' and contain uppercase letters and digits",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: "input",
|
|
58
|
+
name: "briefingChannel",
|
|
59
|
+
message: "Briefing channel for weekly reports (e.g. #growth):",
|
|
60
|
+
default: "",
|
|
61
|
+
},
|
|
62
|
+
]);
|
|
63
|
+
}
|
|
64
|
+
async function applySlack(config) {
|
|
65
|
+
const slack = await askSlack();
|
|
66
|
+
await setSecret(KEYCHAIN_KEYS.slackBotToken, slack.botToken);
|
|
67
|
+
await setSecret(KEYCHAIN_KEYS.slackAppToken, slack.appToken);
|
|
68
|
+
await setSecret(KEYCHAIN_KEYS.slackSigningSecret, slack.signingSecret);
|
|
69
|
+
const agent = {
|
|
70
|
+
showThinking: true,
|
|
71
|
+
weeklyTimeoutMs: 900_000,
|
|
72
|
+
...(config.agent ?? {}),
|
|
73
|
+
};
|
|
74
|
+
if (slack.briefingChannel.trim().length > 0) {
|
|
75
|
+
agent.briefingChannel = slack.briefingChannel.trim();
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
...config,
|
|
79
|
+
slack: {
|
|
80
|
+
botToken: KEYCHAIN_SENTINEL,
|
|
81
|
+
appToken: KEYCHAIN_SENTINEL,
|
|
82
|
+
signingSecret: KEYCHAIN_SENTINEL,
|
|
83
|
+
},
|
|
84
|
+
security: {
|
|
85
|
+
...(config.security ?? {}),
|
|
86
|
+
allowedUsers: [
|
|
87
|
+
...new Set([
|
|
88
|
+
slack.allowedUser,
|
|
89
|
+
...(config.security?.["allowedUsers"] ?? []),
|
|
90
|
+
]),
|
|
91
|
+
],
|
|
92
|
+
dmOnly: false,
|
|
93
|
+
auditLog: { enabled: true, maskSecrets: true },
|
|
94
|
+
},
|
|
95
|
+
agent,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async function askAppStore() {
|
|
99
|
+
const answers = await inquirer.prompt([
|
|
100
|
+
{ type: "input", name: "keyId", message: "Key ID:", validate: (v) => v.length > 0 || "Required" },
|
|
101
|
+
{ type: "input", name: "issuerId", message: "Issuer ID:", validate: (v) => v.length > 0 || "Required" },
|
|
102
|
+
{
|
|
103
|
+
type: "editor",
|
|
104
|
+
name: "privateKey",
|
|
105
|
+
message: "Private key (paste PKCS#8 PEM, editor will open):",
|
|
106
|
+
validate: (v) => v.includes("BEGIN PRIVATE KEY") || "Expected PEM block",
|
|
107
|
+
},
|
|
108
|
+
]);
|
|
109
|
+
await setSecret(KEYCHAIN_KEYS.appStorePrivateKey, answers.privateKey);
|
|
110
|
+
return { keyId: answers.keyId, issuerId: answers.issuerId, privateKey: KEYCHAIN_SENTINEL };
|
|
111
|
+
}
|
|
112
|
+
async function askPlayStore() {
|
|
113
|
+
const { serviceAccountJson } = await inquirer.prompt([
|
|
114
|
+
{
|
|
115
|
+
type: "editor",
|
|
116
|
+
name: "serviceAccountJson",
|
|
117
|
+
message: "Service account JSON (paste full file, editor will open):",
|
|
118
|
+
validate: (v) => {
|
|
119
|
+
try {
|
|
120
|
+
const p = JSON.parse(v);
|
|
121
|
+
return typeof p === "object" && p !== null && "client_email" in p && "private_key" in p
|
|
122
|
+
? true : "JSON must include client_email and private_key";
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return "Must be valid JSON";
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
]);
|
|
130
|
+
await setSecret(KEYCHAIN_KEYS.playStoreServiceAccount, serviceAccountJson);
|
|
131
|
+
return { serviceAccountJson: KEYCHAIN_SENTINEL };
|
|
132
|
+
}
|
|
133
|
+
async function askSecret(label, keychainKey) {
|
|
134
|
+
const { value } = await inquirer.prompt([
|
|
135
|
+
{ type: "password", name: "value", message: `${label} key/token:`, mask: "*", validate: (v) => v.length > 0 || "Required" },
|
|
136
|
+
]);
|
|
137
|
+
await setSecret(keychainKey, value);
|
|
138
|
+
return KEYCHAIN_SENTINEL;
|
|
139
|
+
}
|
|
140
|
+
async function askArdenTts() {
|
|
141
|
+
const { endpoint } = await inquirer.prompt([
|
|
142
|
+
{
|
|
143
|
+
type: "input",
|
|
144
|
+
name: "endpoint",
|
|
145
|
+
message: "Arden TTS endpoint URL:",
|
|
146
|
+
validate: (v) => {
|
|
147
|
+
try {
|
|
148
|
+
const p = new URL(v.trim());
|
|
149
|
+
return p.protocol === "http:" || p.protocol === "https:" ? true : "Must use http(s)";
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return "Must be a valid URL";
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
]);
|
|
157
|
+
return { endpoint: endpoint.trim() };
|
|
158
|
+
}
|
|
159
|
+
const COLLECTOR_CHOICES = [
|
|
160
|
+
{ name: "App Store Connect", value: "appStore", hint: "iOS ASO + reviews — appstoreconnect.apple.com > Keys" },
|
|
161
|
+
{ name: "Google Play", value: "playStore", hint: "Android reviews — console.cloud.google.com > Service Accounts" },
|
|
162
|
+
{ name: "Eodin SDK", value: "eodinSdk", hint: "installs / funnel / cohort — Eodin dashboard > API Keys" },
|
|
163
|
+
{ name: "Eodin Growth", value: "eodinGrowth", hint: "blog / SEO / GA4 — GROWTH_AGENT_TOKEN" },
|
|
164
|
+
{ name: "ASOMobile", value: "asoMobile", hint: "keyword rankings — asomobile.net > Settings > API" },
|
|
165
|
+
{ name: "YouTube Data API", value: "youtube", hint: "Shorts performance — console.cloud.google.com > YouTube API" },
|
|
166
|
+
{ name: "Arden TTS", value: "ardenTts", hint: "voiceover — your self-hosted endpoint URL" },
|
|
167
|
+
];
|
|
168
|
+
async function applyCollectors(config) {
|
|
169
|
+
console.log("\n--- Data Collectors ---");
|
|
170
|
+
console.log("Select the data sources you want to configure.");
|
|
171
|
+
console.log("You can add more later with `adaria-ai init collectors`.\n");
|
|
172
|
+
const existing = (config.collectors ?? {});
|
|
173
|
+
const alreadyConfigured = Object.keys(existing).filter((k) => existing[k] != null);
|
|
174
|
+
const { selected } = await inquirer.prompt([
|
|
175
|
+
{
|
|
176
|
+
type: "checkbox",
|
|
177
|
+
name: "selected",
|
|
178
|
+
message: "Which collectors do you want to configure? (space to toggle, enter to confirm)",
|
|
179
|
+
choices: COLLECTOR_CHOICES.map((c) => ({
|
|
180
|
+
name: `${c.name} — ${c.hint}`,
|
|
181
|
+
value: c.value,
|
|
182
|
+
checked: alreadyConfigured.includes(c.value),
|
|
183
|
+
})),
|
|
184
|
+
},
|
|
185
|
+
]);
|
|
186
|
+
const draft = { ...existing };
|
|
187
|
+
for (const choice of selected) {
|
|
188
|
+
// Skip if already configured and not re-selected
|
|
189
|
+
if (existing[choice] && alreadyConfigured.includes(choice)) {
|
|
190
|
+
const { reconfigure } = await inquirer.prompt([
|
|
191
|
+
{ type: "confirm", name: "reconfigure", message: `${choice} is already configured. Reconfigure?`, default: false },
|
|
192
|
+
]);
|
|
193
|
+
if (!reconfigure)
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
console.log(`\nConfiguring ${COLLECTOR_CHOICES.find((c) => c.value === choice)?.name ?? choice}...`);
|
|
197
|
+
switch (choice) {
|
|
198
|
+
case "appStore": {
|
|
199
|
+
const r = await askAppStore();
|
|
200
|
+
if (r)
|
|
201
|
+
draft.appStore = r;
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
case "playStore": {
|
|
205
|
+
const r = await askPlayStore();
|
|
206
|
+
if (r)
|
|
207
|
+
draft.playStore = r;
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
case "eodinSdk":
|
|
211
|
+
draft.eodinSdk = { apiKey: await askSecret("Eodin SDK API key", KEYCHAIN_KEYS.eodinSdkApiKey) };
|
|
212
|
+
break;
|
|
213
|
+
case "eodinGrowth":
|
|
214
|
+
draft.eodinGrowth = { token: await askSecret("Eodin Growth token", KEYCHAIN_KEYS.eodinGrowthToken) };
|
|
215
|
+
break;
|
|
216
|
+
case "asoMobile":
|
|
217
|
+
draft.asoMobile = { apiKey: await askSecret("ASOMobile API key", KEYCHAIN_KEYS.asoMobileApiKey) };
|
|
218
|
+
break;
|
|
219
|
+
case "youtube":
|
|
220
|
+
draft.youtube = { apiKey: await askSecret("YouTube API key", KEYCHAIN_KEYS.youtubeApiKey) };
|
|
221
|
+
break;
|
|
222
|
+
case "ardenTts":
|
|
223
|
+
draft.ardenTts = await askArdenTts();
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return { ...config, collectors: draft };
|
|
228
|
+
}
|
|
229
|
+
async function askTwitter() {
|
|
230
|
+
const answers = await inquirer.prompt([
|
|
231
|
+
{ type: "password", name: "apiKey", message: "API Key:", mask: "*", validate: (v) => v.length > 0 || "Required" },
|
|
232
|
+
{ type: "password", name: "apiSecret", message: "API Secret:", mask: "*", validate: (v) => v.length > 0 || "Required" },
|
|
233
|
+
{ type: "password", name: "accessToken", message: "Access Token:", mask: "*", validate: (v) => v.length > 0 || "Required" },
|
|
234
|
+
{ type: "password", name: "accessTokenSecret", message: "Access Token Secret:", mask: "*", validate: (v) => v.length > 0 || "Required" },
|
|
235
|
+
]);
|
|
236
|
+
await setSecret(KEYCHAIN_KEYS.twitterApiKey, answers.apiKey);
|
|
237
|
+
await setSecret(KEYCHAIN_KEYS.twitterApiSecret, answers.apiSecret);
|
|
238
|
+
await setSecret(KEYCHAIN_KEYS.twitterAccessToken, answers.accessToken);
|
|
239
|
+
await setSecret(KEYCHAIN_KEYS.twitterAccessTokenSecret, answers.accessTokenSecret);
|
|
240
|
+
return { apiKey: KEYCHAIN_SENTINEL, apiSecret: KEYCHAIN_SENTINEL, accessToken: KEYCHAIN_SENTINEL, accessTokenSecret: KEYCHAIN_SENTINEL };
|
|
241
|
+
}
|
|
242
|
+
async function askFacebook() {
|
|
243
|
+
const answers = await inquirer.prompt([
|
|
244
|
+
{ type: "input", name: "appId", message: "App ID:", validate: (v) => v.length > 0 || "Required" },
|
|
245
|
+
{ type: "password", name: "appSecret", message: "App Secret:", mask: "*", validate: (v) => v.length > 0 || "Required" },
|
|
246
|
+
{ type: "password", name: "accessToken", message: "User Access Token:", mask: "*", validate: (v) => v.length > 0 || "Required" },
|
|
247
|
+
{ type: "input", name: "pageId", message: "Page ID:", validate: (v) => v.length > 0 || "Required" },
|
|
248
|
+
]);
|
|
249
|
+
await setSecret(KEYCHAIN_KEYS.facebookAppSecret, answers.appSecret);
|
|
250
|
+
await setSecret(KEYCHAIN_KEYS.facebookAccessToken, answers.accessToken);
|
|
251
|
+
return { appId: answers.appId, appSecret: KEYCHAIN_SENTINEL, accessToken: KEYCHAIN_SENTINEL, pageId: answers.pageId };
|
|
252
|
+
}
|
|
253
|
+
async function askThreads() {
|
|
254
|
+
const answers = await inquirer.prompt([
|
|
255
|
+
{ type: "password", name: "accessToken", message: "Access Token:", mask: "*", validate: (v) => v.length > 0 || "Required" },
|
|
256
|
+
{ type: "input", name: "userId", message: "User ID:", validate: (v) => v.length > 0 || "Required" },
|
|
257
|
+
]);
|
|
258
|
+
await setSecret(KEYCHAIN_KEYS.threadsAccessToken, answers.accessToken);
|
|
259
|
+
return { accessToken: KEYCHAIN_SENTINEL, userId: answers.userId };
|
|
260
|
+
}
|
|
261
|
+
async function askTikTok() {
|
|
262
|
+
const answers = await inquirer.prompt([
|
|
263
|
+
{ type: "input", name: "clientKey", message: "Client Key:", validate: (v) => v.length > 0 || "Required" },
|
|
264
|
+
{ type: "password", name: "clientSecret", message: "Client Secret:", mask: "*", validate: (v) => v.length > 0 || "Required" },
|
|
265
|
+
{ type: "password", name: "accessToken", message: "Access Token:", mask: "*", validate: (v) => v.length > 0 || "Required" },
|
|
266
|
+
]);
|
|
267
|
+
await setSecret(KEYCHAIN_KEYS.tiktokClientSecret, answers.clientSecret);
|
|
268
|
+
await setSecret(KEYCHAIN_KEYS.tiktokAccessToken, answers.accessToken);
|
|
269
|
+
return { clientKey: answers.clientKey, clientSecret: KEYCHAIN_SENTINEL, accessToken: KEYCHAIN_SENTINEL };
|
|
270
|
+
}
|
|
271
|
+
async function askYouTubeSocial() {
|
|
272
|
+
const answers = await inquirer.prompt([
|
|
273
|
+
{ type: "password", name: "accessToken", message: "OAuth Access Token:", mask: "*", validate: (v) => v.length > 0 || "Required" },
|
|
274
|
+
{ type: "input", name: "channelId", message: "Channel ID (UC…):", validate: (v) => v.length > 0 || "Required" },
|
|
275
|
+
]);
|
|
276
|
+
await setSecret(KEYCHAIN_KEYS.youtubeAccessToken, answers.accessToken);
|
|
277
|
+
return { accessToken: KEYCHAIN_SENTINEL, channelId: answers.channelId };
|
|
278
|
+
}
|
|
279
|
+
async function askLinkedIn() {
|
|
280
|
+
const answers = await inquirer.prompt([
|
|
281
|
+
{ type: "password", name: "accessToken", message: "Access Token:", mask: "*", validate: (v) => v.length > 0 || "Required" },
|
|
282
|
+
{ type: "input", name: "organizationId", message: "Organization ID:", validate: (v) => v.length > 0 || "Required" },
|
|
283
|
+
]);
|
|
284
|
+
await setSecret(KEYCHAIN_KEYS.linkedinAccessToken, answers.accessToken);
|
|
285
|
+
return { accessToken: KEYCHAIN_SENTINEL, organizationId: answers.organizationId };
|
|
286
|
+
}
|
|
287
|
+
const SOCIAL_CHOICES = [
|
|
288
|
+
{ name: "Twitter/X", value: "twitter", hint: "developer.twitter.com > Keys and Tokens" },
|
|
289
|
+
{ name: "Facebook", value: "facebook", hint: "developers.facebook.com > App Dashboard" },
|
|
290
|
+
{ name: "Threads", value: "threads", hint: "developers.facebook.com > Threads API" },
|
|
291
|
+
{ name: "TikTok", value: "tiktok", hint: "developers.tiktok.com (requires app review)" },
|
|
292
|
+
{ name: "YouTube Community", value: "youtube", hint: "console.cloud.google.com > OAuth 2.0" },
|
|
293
|
+
{ name: "LinkedIn", value: "linkedin", hint: "developer.linkedin.com > My Apps > Auth" },
|
|
294
|
+
];
|
|
295
|
+
async function applySocial(config) {
|
|
296
|
+
console.log("\n--- Social Media Platforms ---");
|
|
297
|
+
console.log("Select platforms for automated marketing posts.\n");
|
|
298
|
+
const existing = (config.social ?? {});
|
|
299
|
+
const alreadyConfigured = Object.keys(existing).filter((k) => existing[k] != null);
|
|
300
|
+
const { selected } = await inquirer.prompt([
|
|
301
|
+
{
|
|
302
|
+
type: "checkbox",
|
|
303
|
+
name: "selected",
|
|
304
|
+
message: "Which social platforms? (space to toggle, enter to confirm)",
|
|
305
|
+
choices: SOCIAL_CHOICES.map((c) => ({
|
|
306
|
+
name: `${c.name} — ${c.hint}`,
|
|
307
|
+
value: c.value,
|
|
308
|
+
checked: alreadyConfigured.includes(c.value),
|
|
309
|
+
})),
|
|
310
|
+
},
|
|
311
|
+
]);
|
|
312
|
+
const draft = { ...existing };
|
|
313
|
+
for (const choice of selected) {
|
|
314
|
+
if (existing[choice] && alreadyConfigured.includes(choice)) {
|
|
315
|
+
const { reconfigure } = await inquirer.prompt([
|
|
316
|
+
{ type: "confirm", name: "reconfigure", message: `${choice} is already configured. Reconfigure?`, default: false },
|
|
317
|
+
]);
|
|
318
|
+
if (!reconfigure)
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
const label = SOCIAL_CHOICES.find((c) => c.value === choice)?.name ?? choice;
|
|
322
|
+
console.log(`\nConfiguring ${label}...`);
|
|
323
|
+
switch (choice) {
|
|
324
|
+
case "twitter":
|
|
325
|
+
draft.twitter = await askTwitter();
|
|
326
|
+
break;
|
|
327
|
+
case "facebook":
|
|
328
|
+
draft.facebook = await askFacebook();
|
|
329
|
+
break;
|
|
330
|
+
case "threads":
|
|
331
|
+
draft.threads = await askThreads();
|
|
332
|
+
break;
|
|
333
|
+
case "tiktok":
|
|
334
|
+
draft.tiktok = await askTikTok();
|
|
335
|
+
break;
|
|
336
|
+
case "youtube":
|
|
337
|
+
draft.youtube = await askYouTubeSocial();
|
|
338
|
+
break;
|
|
339
|
+
case "linkedin":
|
|
340
|
+
draft.linkedin = await askLinkedIn();
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return { ...config, social: draft };
|
|
345
|
+
}
|
|
346
|
+
// ---------------------------------------------------------------------------
|
|
347
|
+
// Summary
|
|
348
|
+
// ---------------------------------------------------------------------------
|
|
349
|
+
function printSummary(config) {
|
|
350
|
+
console.log("\n========================================");
|
|
351
|
+
console.log(" Setup Summary");
|
|
352
|
+
console.log("========================================\n");
|
|
353
|
+
// Slack
|
|
354
|
+
const slackOk = config.slack.botToken === KEYCHAIN_SENTINEL;
|
|
355
|
+
console.log(`Slack: ${slackOk ? "\u2705 configured" : "\u274c missing"}`);
|
|
356
|
+
console.log(` Channel: ${config.agent.briefingChannel ?? "(not set)"}`);
|
|
357
|
+
console.log(` Allowlist: ${String(config.security.allowedUsers.length)} user(s)`);
|
|
358
|
+
// Collectors
|
|
359
|
+
const c = config.collectors;
|
|
360
|
+
console.log("\nData Collectors:");
|
|
361
|
+
console.log(` App Store Connect: ${c.appStore ? "\u2705" : "\u2013"}`);
|
|
362
|
+
console.log(` Google Play: ${c.playStore ? "\u2705" : "\u2013"}`);
|
|
363
|
+
console.log(` ASOMobile: ${c.asoMobile ? "\u2705" : "\u2013"}`);
|
|
364
|
+
console.log(` Eodin SDK: ${c.eodinSdk ? "\u2705" : "\u2013"}`);
|
|
365
|
+
console.log(` Eodin Growth: ${c.eodinGrowth ? "\u2705" : "\u2013"}`);
|
|
366
|
+
console.log(` YouTube: ${c.youtube ? "\u2705" : "\u2013"}`);
|
|
367
|
+
console.log(` Arden TTS: ${c.ardenTts ? "\u2705" : "\u2013"}`);
|
|
368
|
+
// Social
|
|
369
|
+
const s = config.social;
|
|
370
|
+
console.log("\nSocial Platforms:");
|
|
371
|
+
console.log(` Twitter/X: ${s.twitter ? "\u2705" : "\u2013"}`);
|
|
372
|
+
console.log(` Facebook: ${s.facebook ? "\u2705" : "\u2013"}`);
|
|
373
|
+
console.log(` Threads: ${s.threads ? "\u2705" : "\u2013"}`);
|
|
374
|
+
console.log(` TikTok: ${s.tiktok ? "\u2705" : "\u2013"}`);
|
|
375
|
+
console.log(` YouTube Community: ${s.youtube ? "\u2705" : "\u2013"}`);
|
|
376
|
+
console.log(` LinkedIn: ${s.linkedin ? "\u2705" : "\u2013"}`);
|
|
377
|
+
console.log("\n========================================\n");
|
|
378
|
+
}
|
|
379
|
+
function printNextSteps() {
|
|
380
|
+
console.log("Next steps:");
|
|
381
|
+
console.log(` 1. Edit ${APPS_PATH} with your app portfolio`);
|
|
382
|
+
console.log(" (copy apps.example.yaml from the repo root as a starting point)");
|
|
383
|
+
console.log(" 2. adaria-ai doctor # verify all credentials");
|
|
384
|
+
console.log(" 3. adaria-ai start # load daemon + cron plists");
|
|
385
|
+
console.log("");
|
|
386
|
+
console.log("To add or update a specific section later:");
|
|
387
|
+
console.log(" adaria-ai init slack # Slack credentials");
|
|
388
|
+
console.log(" adaria-ai init collectors # data collector API keys");
|
|
389
|
+
console.log(" adaria-ai init social # social media platforms");
|
|
390
|
+
}
|
|
391
|
+
// ---------------------------------------------------------------------------
|
|
392
|
+
// Main entry
|
|
393
|
+
// ---------------------------------------------------------------------------
|
|
394
|
+
export async function runInit(section) {
|
|
395
|
+
const sections = section ? [section] : ALL_SECTIONS;
|
|
396
|
+
if (!section) {
|
|
397
|
+
console.log("adaria-ai init \u2014 interactive setup\n");
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
console.log(`adaria-ai init ${section}\n`);
|
|
401
|
+
}
|
|
402
|
+
// Load existing config if available (for merge), otherwise start fresh
|
|
403
|
+
let config = {};
|
|
404
|
+
if (await configExists()) {
|
|
405
|
+
try {
|
|
406
|
+
config = await loadRawConfig();
|
|
407
|
+
if (!section) {
|
|
408
|
+
console.log(`Existing config at ${CONFIG_PATH} will be merged.\n`);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
catch {
|
|
412
|
+
console.log(`Existing config at ${CONFIG_PATH} could not be parsed. Starting fresh.\n`);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
if (!section) {
|
|
417
|
+
console.log(`Config will be written to ${CONFIG_PATH}.\n`);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
// Apply requested sections
|
|
421
|
+
for (const s of sections) {
|
|
422
|
+
switch (s) {
|
|
423
|
+
case "slack":
|
|
424
|
+
config = await applySlack(config);
|
|
425
|
+
break;
|
|
426
|
+
case "collectors":
|
|
427
|
+
config = await applyCollectors(config);
|
|
428
|
+
break;
|
|
429
|
+
case "social":
|
|
430
|
+
config = await applySocial(config);
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
// Guard: section-only init on a fresh install requires Slack first
|
|
435
|
+
if (section && !config.slack) {
|
|
436
|
+
console.error(`\nSlack is not configured yet. Run "adaria-ai init slack" first,` +
|
|
437
|
+
` or "adaria-ai init" for full setup.`);
|
|
438
|
+
process.exitCode = 1;
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
// Ensure required defaults exist
|
|
442
|
+
if (!config.claude) {
|
|
443
|
+
config.claude = { mode: "cli", cliBinary: "claude", apiKey: null, timeoutMs: 120_000 };
|
|
444
|
+
}
|
|
445
|
+
if (!config.safety) {
|
|
446
|
+
config.safety = { dangerousActionsRequireApproval: true, approvalTimeoutMinutes: 30 };
|
|
447
|
+
}
|
|
448
|
+
if (!config.agent) {
|
|
449
|
+
config.agent = { showThinking: true, weeklyTimeoutMs: 900_000 };
|
|
450
|
+
}
|
|
451
|
+
// Validate and save
|
|
452
|
+
const validated = configSchema.parse(config);
|
|
453
|
+
await saveConfig(validated);
|
|
454
|
+
console.log(`\nConfig written to ${CONFIG_PATH}`);
|
|
455
|
+
console.log("Secrets stored in macOS Keychain.");
|
|
456
|
+
printSummary(validated);
|
|
457
|
+
printNextSteps();
|
|
458
|
+
}
|
|
459
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/cli/logs.ts"],"names":[],"mappings":"AAuBA,wBAAsB,OAAO,CAC3B,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
package/dist/cli/logs.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { LOGS_DIR } from "../utils/paths.js";
|
|
5
|
+
function todayLogPath() {
|
|
6
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
7
|
+
return path.join(LOGS_DIR, `adaria-${today}.log`);
|
|
8
|
+
}
|
|
9
|
+
async function findMostRecentLog() {
|
|
10
|
+
try {
|
|
11
|
+
const entries = await fs.readdir(LOGS_DIR);
|
|
12
|
+
const adariaLogs = entries
|
|
13
|
+
.filter((name) => name.startsWith("adaria-") && name.endsWith(".log"))
|
|
14
|
+
.sort();
|
|
15
|
+
const newest = adariaLogs.at(-1);
|
|
16
|
+
return newest ? path.join(LOGS_DIR, newest) : null;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export async function runLogs(options = {}) {
|
|
23
|
+
// Prefer today's log; if it doesn't exist yet (fresh install, before the
|
|
24
|
+
// first event), fall back to the newest `adaria-YYYY-MM-DD.log`.
|
|
25
|
+
let logPath = todayLogPath();
|
|
26
|
+
try {
|
|
27
|
+
await fs.access(logPath);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
logPath = await findMostRecentLog();
|
|
31
|
+
}
|
|
32
|
+
if (!logPath) {
|
|
33
|
+
console.log(`No log files found in ${LOGS_DIR}.`);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (options.follow) {
|
|
37
|
+
console.log(`Following ${logPath} (Ctrl+C to stop):\n`);
|
|
38
|
+
const child = spawn("tail", ["-f", logPath], { stdio: "inherit" });
|
|
39
|
+
process.on("SIGINT", () => {
|
|
40
|
+
child.kill();
|
|
41
|
+
process.exit(0);
|
|
42
|
+
});
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const content = await fs.readFile(logPath, "utf-8");
|
|
46
|
+
const lines = content.split("\n");
|
|
47
|
+
const tail = lines.slice(-50).join("\n");
|
|
48
|
+
console.log(tail);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/cli/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,SAAS,YAAY;IACnB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,KAAK,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC9B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,OAAO;aACvB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACrE,IAAI,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,UAAgC,EAAE;IAElC,yEAAyE;IACzE,iEAAiE;IACjE,IAAI,OAAO,GAAkB,YAAY,EAAE,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,GAAG,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,sBAAsB,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `adaria-ai monitor` — one-shot daily monitor CLI entry.
|
|
3
|
+
*
|
|
4
|
+
* Loads config, initializes DB, runs threshold checks, exits cleanly.
|
|
5
|
+
* Invoked by launchd cron (daily 23:00 UTC) or manually.
|
|
6
|
+
*
|
|
7
|
+
* Named `monitor-cmd.ts` to avoid shadowing `src/orchestrator/monitor.ts`
|
|
8
|
+
* in import paths.
|
|
9
|
+
*/
|
|
10
|
+
export declare function runMonitorCmd(): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=monitor-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-cmd.d.ts","sourceRoot":"","sources":["../../src/cli/monitor-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAiDnD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `adaria-ai monitor` — one-shot daily monitor CLI entry.
|
|
3
|
+
*
|
|
4
|
+
* Loads config, initializes DB, runs threshold checks, exits cleanly.
|
|
5
|
+
* Invoked by launchd cron (daily 23:00 UTC) or manually.
|
|
6
|
+
*
|
|
7
|
+
* Named `monitor-cmd.ts` to avoid shadowing `src/orchestrator/monitor.ts`
|
|
8
|
+
* in import paths.
|
|
9
|
+
*/
|
|
10
|
+
import { loadConfig } from "../config/store.js";
|
|
11
|
+
import { loadApps } from "../config/load-apps.js";
|
|
12
|
+
import { initDatabase } from "../db/schema.js";
|
|
13
|
+
import { createMessengerAdapter } from "../messenger/factory.js";
|
|
14
|
+
import { runDailyMonitor } from "../orchestrator/monitor.js";
|
|
15
|
+
import * as logger from "../utils/logger.js";
|
|
16
|
+
export async function runMonitorCmd() {
|
|
17
|
+
logger.info("Loading configuration");
|
|
18
|
+
let config;
|
|
19
|
+
try {
|
|
20
|
+
config = await loadConfig();
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
console.error(`Failed to load config: ${err instanceof Error ? err.message : String(err)}`);
|
|
24
|
+
process.exitCode = 1;
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
let apps;
|
|
28
|
+
try {
|
|
29
|
+
({ apps } = await loadApps());
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
console.error(`Failed to load apps.yaml: ${err instanceof Error ? err.message : String(err)}`);
|
|
33
|
+
process.exitCode = 1;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const db = initDatabase();
|
|
37
|
+
let messenger;
|
|
38
|
+
try {
|
|
39
|
+
messenger = createMessengerAdapter(config);
|
|
40
|
+
await runDailyMonitor({
|
|
41
|
+
db,
|
|
42
|
+
config,
|
|
43
|
+
apps,
|
|
44
|
+
messenger,
|
|
45
|
+
});
|
|
46
|
+
logger.info("Daily monitor finished successfully");
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
logger.error(`Daily monitor failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
db.close();
|
|
54
|
+
if (messenger) {
|
|
55
|
+
await messenger.stop();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=monitor-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-cmd.js","sourceRoot":"","sources":["../../src/cli/monitor-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7E,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAChF,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAE1B,IAAI,SAAS,CAAC;IACd,IAAI,CAAC;QACH,SAAS,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAE3C,MAAM,eAAe,CAAC;YACpB,EAAE;YACF,MAAM;YACN,IAAI;YACJ,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CACV,yBAAyB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC5E,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const DAEMON_LABEL = "com.adaria-ai.daemon";
|
|
2
|
+
export declare const WEEKLY_LABEL = "com.adaria-ai.weekly";
|
|
3
|
+
export declare const MONITOR_LABEL = "com.adaria-ai.monitor";
|
|
4
|
+
/** All three launchd labels managed by adaria-ai. */
|
|
5
|
+
export declare const ALL_LABELS: readonly ["com.adaria-ai.daemon", "com.adaria-ai.weekly", "com.adaria-ai.monitor"];
|
|
6
|
+
export declare function getPlistPath(label: string): string;
|
|
7
|
+
export declare function getDaemonPlistPath(): string;
|
|
8
|
+
export declare function isLabelLoaded(label: string): Promise<boolean>;
|
|
9
|
+
export declare function isDaemonLoaded(): Promise<boolean>;
|
|
10
|
+
export declare function runStart(): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=start.d.ts.map
|