myaiforone 1.0.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 (315) hide show
  1. package/README.md +113 -0
  2. package/agents/_template/CLAUDE.md +18 -0
  3. package/agents/_template/agent.json +7 -0
  4. package/agents/platform/agentcreator/CLAUDE.md +300 -0
  5. package/agents/platform/appcreator/CLAUDE.md +158 -0
  6. package/agents/platform/gym/CLAUDE.md +486 -0
  7. package/agents/platform/gym/agent.json +40 -0
  8. package/agents/platform/gym/programs/agent-building/program.json +160 -0
  9. package/agents/platform/gym/programs/automations-mastery/program.json +129 -0
  10. package/agents/platform/gym/programs/getting-started/program.json +124 -0
  11. package/agents/platform/gym/programs/mcp-integrations/program.json +116 -0
  12. package/agents/platform/gym/programs/multi-model-strategy/program.json +115 -0
  13. package/agents/platform/gym/programs/prompt-engineering/program.json +136 -0
  14. package/agents/platform/gym/souls/alex.md +12 -0
  15. package/agents/platform/gym/souls/jordan.md +12 -0
  16. package/agents/platform/gym/souls/morgan.md +12 -0
  17. package/agents/platform/gym/souls/riley.md +12 -0
  18. package/agents/platform/gym/souls/sam.md +12 -0
  19. package/agents/platform/hub/CLAUDE.md +372 -0
  20. package/agents/platform/promptcreator/CLAUDE.md +130 -0
  21. package/agents/platform/skillcreator/CLAUDE.md +163 -0
  22. package/bin/cli.js +566 -0
  23. package/config.example.json +310 -0
  24. package/dist/agent-registry.d.ts +32 -0
  25. package/dist/agent-registry.d.ts.map +1 -0
  26. package/dist/agent-registry.js +144 -0
  27. package/dist/agent-registry.js.map +1 -0
  28. package/dist/channels/discord.d.ts +17 -0
  29. package/dist/channels/discord.d.ts.map +1 -0
  30. package/dist/channels/discord.js +114 -0
  31. package/dist/channels/discord.js.map +1 -0
  32. package/dist/channels/imessage.d.ts +23 -0
  33. package/dist/channels/imessage.d.ts.map +1 -0
  34. package/dist/channels/imessage.js +214 -0
  35. package/dist/channels/imessage.js.map +1 -0
  36. package/dist/channels/slack.d.ts +19 -0
  37. package/dist/channels/slack.d.ts.map +1 -0
  38. package/dist/channels/slack.js +167 -0
  39. package/dist/channels/slack.js.map +1 -0
  40. package/dist/channels/telegram.d.ts +19 -0
  41. package/dist/channels/telegram.d.ts.map +1 -0
  42. package/dist/channels/telegram.js +274 -0
  43. package/dist/channels/telegram.js.map +1 -0
  44. package/dist/channels/types.d.ts +44 -0
  45. package/dist/channels/types.d.ts.map +1 -0
  46. package/dist/channels/types.js +18 -0
  47. package/dist/channels/types.js.map +1 -0
  48. package/dist/channels/whatsapp.d.ts +23 -0
  49. package/dist/channels/whatsapp.d.ts.map +1 -0
  50. package/dist/channels/whatsapp.js +189 -0
  51. package/dist/channels/whatsapp.js.map +1 -0
  52. package/dist/config.d.ts +134 -0
  53. package/dist/config.d.ts.map +1 -0
  54. package/dist/config.js +127 -0
  55. package/dist/config.js.map +1 -0
  56. package/dist/cron.d.ts +8 -0
  57. package/dist/cron.d.ts.map +1 -0
  58. package/dist/cron.js +35 -0
  59. package/dist/cron.js.map +1 -0
  60. package/dist/decrypt-keys.d.ts +7 -0
  61. package/dist/decrypt-keys.d.ts.map +1 -0
  62. package/dist/decrypt-keys.js +53 -0
  63. package/dist/decrypt-keys.js.map +1 -0
  64. package/dist/encrypt-keys.d.ts +8 -0
  65. package/dist/encrypt-keys.d.ts.map +1 -0
  66. package/dist/encrypt-keys.js +62 -0
  67. package/dist/encrypt-keys.js.map +1 -0
  68. package/dist/executor.d.ts +31 -0
  69. package/dist/executor.d.ts.map +1 -0
  70. package/dist/executor.js +2009 -0
  71. package/dist/executor.js.map +1 -0
  72. package/dist/gemini-executor.d.ts +27 -0
  73. package/dist/gemini-executor.d.ts.map +1 -0
  74. package/dist/gemini-executor.js +160 -0
  75. package/dist/gemini-executor.js.map +1 -0
  76. package/dist/goals.d.ts +24 -0
  77. package/dist/goals.d.ts.map +1 -0
  78. package/dist/goals.js +189 -0
  79. package/dist/goals.js.map +1 -0
  80. package/dist/gym/activity-digest.d.ts +30 -0
  81. package/dist/gym/activity-digest.d.ts.map +1 -0
  82. package/dist/gym/activity-digest.js +506 -0
  83. package/dist/gym/activity-digest.js.map +1 -0
  84. package/dist/gym/dimension-scorer.d.ts +76 -0
  85. package/dist/gym/dimension-scorer.d.ts.map +1 -0
  86. package/dist/gym/dimension-scorer.js +236 -0
  87. package/dist/gym/dimension-scorer.js.map +1 -0
  88. package/dist/gym/gym-router.d.ts +7 -0
  89. package/dist/gym/gym-router.d.ts.map +1 -0
  90. package/dist/gym/gym-router.js +718 -0
  91. package/dist/gym/gym-router.js.map +1 -0
  92. package/dist/gym/index.d.ts +11 -0
  93. package/dist/gym/index.d.ts.map +1 -0
  94. package/dist/gym/index.js +11 -0
  95. package/dist/gym/index.js.map +1 -0
  96. package/dist/heartbeat.d.ts +21 -0
  97. package/dist/heartbeat.d.ts.map +1 -0
  98. package/dist/heartbeat.js +163 -0
  99. package/dist/heartbeat.js.map +1 -0
  100. package/dist/index.d.ts +2 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +254 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/keystore.d.ts +22 -0
  105. package/dist/keystore.d.ts.map +1 -0
  106. package/dist/keystore.js +178 -0
  107. package/dist/keystore.js.map +1 -0
  108. package/dist/logger.d.ts +9 -0
  109. package/dist/logger.d.ts.map +1 -0
  110. package/dist/logger.js +45 -0
  111. package/dist/logger.js.map +1 -0
  112. package/dist/memory/daily.d.ts +22 -0
  113. package/dist/memory/daily.d.ts.map +1 -0
  114. package/dist/memory/daily.js +82 -0
  115. package/dist/memory/daily.js.map +1 -0
  116. package/dist/memory/embeddings.d.ts +15 -0
  117. package/dist/memory/embeddings.d.ts.map +1 -0
  118. package/dist/memory/embeddings.js +154 -0
  119. package/dist/memory/embeddings.js.map +1 -0
  120. package/dist/memory/index.d.ts +32 -0
  121. package/dist/memory/index.d.ts.map +1 -0
  122. package/dist/memory/index.js +159 -0
  123. package/dist/memory/index.js.map +1 -0
  124. package/dist/memory/search.d.ts +21 -0
  125. package/dist/memory/search.d.ts.map +1 -0
  126. package/dist/memory/search.js +77 -0
  127. package/dist/memory/search.js.map +1 -0
  128. package/dist/memory/store.d.ts +23 -0
  129. package/dist/memory/store.d.ts.map +1 -0
  130. package/dist/memory/store.js +144 -0
  131. package/dist/memory/store.js.map +1 -0
  132. package/dist/ollama-executor.d.ts +17 -0
  133. package/dist/ollama-executor.d.ts.map +1 -0
  134. package/dist/ollama-executor.js +112 -0
  135. package/dist/ollama-executor.js.map +1 -0
  136. package/dist/openai-executor.d.ts +38 -0
  137. package/dist/openai-executor.d.ts.map +1 -0
  138. package/dist/openai-executor.js +197 -0
  139. package/dist/openai-executor.js.map +1 -0
  140. package/dist/router.d.ts +11 -0
  141. package/dist/router.d.ts.map +1 -0
  142. package/dist/router.js +185 -0
  143. package/dist/router.js.map +1 -0
  144. package/dist/test-message.d.ts +2 -0
  145. package/dist/test-message.d.ts.map +1 -0
  146. package/dist/test-message.js +60 -0
  147. package/dist/test-message.js.map +1 -0
  148. package/dist/utils/imsg-db-reader.d.ts +24 -0
  149. package/dist/utils/imsg-db-reader.d.ts.map +1 -0
  150. package/dist/utils/imsg-db-reader.js +92 -0
  151. package/dist/utils/imsg-db-reader.js.map +1 -0
  152. package/dist/utils/imsg-rpc.d.ts +25 -0
  153. package/dist/utils/imsg-rpc.d.ts.map +1 -0
  154. package/dist/utils/imsg-rpc.js +149 -0
  155. package/dist/utils/imsg-rpc.js.map +1 -0
  156. package/dist/utils/message-formatter.d.ts +3 -0
  157. package/dist/utils/message-formatter.d.ts.map +1 -0
  158. package/dist/utils/message-formatter.js +69 -0
  159. package/dist/utils/message-formatter.js.map +1 -0
  160. package/dist/web-ui.d.ts +12 -0
  161. package/dist/web-ui.d.ts.map +1 -0
  162. package/dist/web-ui.js +5784 -0
  163. package/dist/web-ui.js.map +1 -0
  164. package/dist/whatsapp-chats.d.ts +2 -0
  165. package/dist/whatsapp-chats.d.ts.map +1 -0
  166. package/dist/whatsapp-chats.js +76 -0
  167. package/dist/whatsapp-chats.js.map +1 -0
  168. package/dist/whatsapp-login.d.ts +2 -0
  169. package/dist/whatsapp-login.d.ts.map +1 -0
  170. package/dist/whatsapp-login.js +90 -0
  171. package/dist/whatsapp-login.js.map +1 -0
  172. package/dist/wiki-sync.d.ts +21 -0
  173. package/dist/wiki-sync.d.ts.map +1 -0
  174. package/dist/wiki-sync.js +147 -0
  175. package/dist/wiki-sync.js.map +1 -0
  176. package/docs/AddNewAgentGuide.md +100 -0
  177. package/docs/AddNewMcpGuide.md +72 -0
  178. package/docs/Architecture.md +795 -0
  179. package/docs/CLAUDE-AI-SETUP.md +166 -0
  180. package/docs/Setup.md +297 -0
  181. package/docs/ai-gym-architecture.md +1040 -0
  182. package/docs/ai-gym-build-plan.md +343 -0
  183. package/docs/ai-gym-onboarding.md +122 -0
  184. package/docs/appcreator_plan.md +348 -0
  185. package/docs/platform-mcp-audit.md +320 -0
  186. package/docs/server-deployment-plan.md +503 -0
  187. package/docs/superpowers/plans/2026-03-25-marketplace.md +1281 -0
  188. package/docs/superpowers/specs/2026-03-25-marketplace-design.md +287 -0
  189. package/docs/user-guide.md +2016 -0
  190. package/mcp-catalog.json +628 -0
  191. package/package.json +63 -0
  192. package/public/MyAIforOne-logomark-512.svg +16 -0
  193. package/public/MyAIforOne-logomark-transparent.svg +15 -0
  194. package/public/activity.html +314 -0
  195. package/public/admin.html +1674 -0
  196. package/public/agent-dashboard.html +670 -0
  197. package/public/api-docs.html +1106 -0
  198. package/public/automations.html +722 -0
  199. package/public/canvas.css +223 -0
  200. package/public/canvas.js +588 -0
  201. package/public/changelog.html +231 -0
  202. package/public/gym.html +2766 -0
  203. package/public/home.html +1930 -0
  204. package/public/index.html +2809 -0
  205. package/public/lab.html +1643 -0
  206. package/public/library.html +1442 -0
  207. package/public/marketplace.html +1101 -0
  208. package/public/mcp-docs.html +441 -0
  209. package/public/mini.html +390 -0
  210. package/public/monitor.html +584 -0
  211. package/public/org.html +4304 -0
  212. package/public/projects.html +734 -0
  213. package/public/settings.html +645 -0
  214. package/public/tasks.html +932 -0
  215. package/public/trainers/alex.svg +12 -0
  216. package/public/trainers/jordan.svg +12 -0
  217. package/public/trainers/morgan.svg +12 -0
  218. package/public/trainers/riley.svg +12 -0
  219. package/public/trainers/sam.svg +12 -0
  220. package/public/user-guide.html +218 -0
  221. package/registry/agents.json +3 -0
  222. package/registry/apps.json +20 -0
  223. package/registry/installed-drafts.json +3 -0
  224. package/registry/mcps.json +1084 -0
  225. package/registry/prompts/personal/mcp-test-prompt.md +6 -0
  226. package/registry/prompts/personal/memory-recall.md +6 -0
  227. package/registry/prompts/platform/brainstorm.md +15 -0
  228. package/registry/prompts/platform/code-review.md +16 -0
  229. package/registry/prompts/platform/explain.md +16 -0
  230. package/registry/prompts.json +58 -0
  231. package/registry/skills/external/brainstorming.md +5 -0
  232. package/registry/skills/external/code-review.md +40 -0
  233. package/registry/skills/external/frontend-patterns.md +642 -0
  234. package/registry/skills/external/frontend-slides.md +184 -0
  235. package/registry/skills/external/systematic-debugging.md +5 -0
  236. package/registry/skills/external/tdd.md +328 -0
  237. package/registry/skills/external/verification-before-completion.md +5 -0
  238. package/registry/skills/external/writing-plans.md +5 -0
  239. package/registry/skills/platform/ai41_app_build.md +930 -0
  240. package/registry/skills/platform/ai41_app_deploy.md +168 -0
  241. package/registry/skills/platform/ai41_app_orchestrator.md +239 -0
  242. package/registry/skills/platform/ai41_app_patterns.md +359 -0
  243. package/registry/skills/platform/ai41_app_register.md +85 -0
  244. package/registry/skills/platform/ai41_app_scaffold.md +421 -0
  245. package/registry/skills/platform/ai41_app_verify.md +107 -0
  246. package/registry/skills/platform/opProjectCreate.md +239 -0
  247. package/registry/skills/platform/op_devbrowser.md +136 -0
  248. package/registry/skills/platform/sop_brandguidelines.md +103 -0
  249. package/registry/skills/platform/sop_docx.md +117 -0
  250. package/registry/skills/platform/sop_frontenddesign.md +44 -0
  251. package/registry/skills/platform/sop_frontenddesign_v2.md +659 -0
  252. package/registry/skills/platform/sop_mcpbuilder.md +133 -0
  253. package/registry/skills/platform/sop_pdf.md +172 -0
  254. package/registry/skills/platform/sop_pptx.md +133 -0
  255. package/registry/skills/platform/sop_skillcreator.md +104 -0
  256. package/registry/skills/platform/sop_themefactory.md +128 -0
  257. package/registry/skills/platform/sop_webapptesting.md +75 -0
  258. package/registry/skills/platform/sop_webartifactsbuilder.md +97 -0
  259. package/registry/skills/platform/sop_xlsx.md +134 -0
  260. package/registry/skills.json +1055 -0
  261. package/scripts/discover-chats.sh +11 -0
  262. package/scripts/install-service-windows.ps1 +87 -0
  263. package/scripts/install-service.sh +52 -0
  264. package/scripts/seed-registry.ts +195 -0
  265. package/scripts/test-send.sh +5 -0
  266. package/scripts/tray-indicator.ps1 +35 -0
  267. package/scripts/uninstall-service-windows.ps1 +23 -0
  268. package/scripts/uninstall-service.sh +15 -0
  269. package/scripts/xbar-myagent.5s.sh +32 -0
  270. package/server/mcp-server/dist/index.d.ts +11 -0
  271. package/server/mcp-server/dist/index.js +1332 -0
  272. package/server/mcp-server/dist/lib/api-client.d.ts +165 -0
  273. package/server/mcp-server/dist/lib/api-client.js +241 -0
  274. package/server/mcp-server/index.ts +1545 -0
  275. package/server/mcp-server/lib/api-client.ts +366 -0
  276. package/server/mcp-server/tsconfig.json +14 -0
  277. package/src/agent-registry.ts +180 -0
  278. package/src/channels/discord.ts +129 -0
  279. package/src/channels/imessage.ts +261 -0
  280. package/src/channels/slack.ts +208 -0
  281. package/src/channels/telegram.ts +307 -0
  282. package/src/channels/types.ts +62 -0
  283. package/src/channels/whatsapp.ts +227 -0
  284. package/src/config.ts +281 -0
  285. package/src/cron.ts +43 -0
  286. package/src/decrypt-keys.ts +60 -0
  287. package/src/encrypt-keys.ts +70 -0
  288. package/src/executor.ts +2190 -0
  289. package/src/gemini-executor.ts +212 -0
  290. package/src/goals.ts +240 -0
  291. package/src/gym/activity-digest.ts +546 -0
  292. package/src/gym/dimension-scorer.ts +297 -0
  293. package/src/gym/gym-router.ts +801 -0
  294. package/src/gym/index.ts +19 -0
  295. package/src/heartbeat.ts +220 -0
  296. package/src/index.ts +275 -0
  297. package/src/keystore.ts +190 -0
  298. package/src/logger.ts +51 -0
  299. package/src/memory/daily.ts +101 -0
  300. package/src/memory/embeddings.ts +185 -0
  301. package/src/memory/index.ts +218 -0
  302. package/src/memory/search.ts +124 -0
  303. package/src/memory/store.ts +189 -0
  304. package/src/ollama-executor.ts +126 -0
  305. package/src/openai-executor.ts +259 -0
  306. package/src/router.ts +230 -0
  307. package/src/test-message.ts +72 -0
  308. package/src/utils/imsg-db-reader.ts +109 -0
  309. package/src/utils/imsg-rpc.ts +178 -0
  310. package/src/utils/message-formatter.ts +90 -0
  311. package/src/web-ui.ts +5778 -0
  312. package/src/whatsapp-chats.ts +91 -0
  313. package/src/whatsapp-login.ts +110 -0
  314. package/src/wiki-sync.ts +199 -0
  315. package/tsconfig.json +19 -0
@@ -0,0 +1,11 @@
1
+ #!/bin/bash
2
+ echo "Discovering iMessage chats..."
3
+ imsg chats --limit 30 --json | python3 -c "
4
+ import json, sys
5
+ chats = json.load(sys.stdin)
6
+ for c in chats:
7
+ name = c.get('display_name') or '(unnamed)'
8
+ cid = c.get('chat_id', '?')
9
+ participants = ', '.join(c.get('participants', []))
10
+ print(f' chat_id: {cid:>5} name: {name:<30} participants: {participants}')
11
+ "
@@ -0,0 +1,87 @@
1
+ # MyAgent — Windows Task Scheduler Installer
2
+ # Registers the gateway to run at login via Windows Task Scheduler.
3
+ # Run: powershell -ExecutionPolicy Bypass -File scripts\install-service-windows.ps1
4
+ #
5
+ # To uninstall: powershell -ExecutionPolicy Bypass -File scripts\uninstall-service-windows.ps1
6
+
7
+ $ErrorActionPreference = "Stop"
8
+ $TaskName = "MyAgentGateway"
9
+
10
+ $projectDir = Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Path)
11
+ $scriptPath = Join-Path $projectDir "dist\index.js"
12
+
13
+ Write-Host ""
14
+ Write-Host "MyAgent — Windows Service Installer" -ForegroundColor Cyan
15
+ Write-Host "=====================================" -ForegroundColor Cyan
16
+ Write-Host ""
17
+
18
+ # 1. Check if Node.js is installed
19
+ try {
20
+ $nodePath = (Get-Command node -ErrorAction Stop).Source
21
+ $nodeVersion = & node --version
22
+ Write-Host "`[OK`] Node.js found: $nodeVersion ($nodePath)" -ForegroundColor Green
23
+ } catch {
24
+ Write-Host '[ERROR] Node.js is not installed or not in PATH.' -ForegroundColor Red
25
+ Write-Host ' Install from https://nodejs.org/ and try again.' -ForegroundColor Yellow
26
+ exit 1
27
+ }
28
+
29
+ # 2. Check if dist/index.js exists, build if not
30
+ if (-not (Test-Path $scriptPath)) {
31
+ Write-Host '[INFO] dist/index.js not found — building project...' -ForegroundColor Yellow
32
+ Set-Location $projectDir
33
+ npm run build
34
+ if (-not (Test-Path $scriptPath)) {
35
+ Write-Host '[ERROR] Build failed — dist/index.js still missing.' -ForegroundColor Red
36
+ exit 1
37
+ }
38
+ Write-Host '[OK] Build complete.' -ForegroundColor Green
39
+ } else {
40
+ Write-Host '[OK] dist/index.js found.' -ForegroundColor Green
41
+ }
42
+
43
+ # 3. Remove existing task if present
44
+ $existing = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue
45
+ if ($existing) {
46
+ Write-Host "`[INFO`] Removing existing '$TaskName' task..." -ForegroundColor Yellow
47
+ Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false
48
+ }
49
+
50
+ # 4. Create the scheduled task
51
+ Write-Host "`[INFO`] Creating Task Scheduler entry '$TaskName'..." -ForegroundColor Green
52
+
53
+ $action = New-ScheduledTaskAction `
54
+ -Execute $nodePath `
55
+ -Argument "`"$scriptPath`"" `
56
+ -WorkingDirectory $projectDir
57
+
58
+ $trigger = New-ScheduledTaskTrigger -AtLogOn -User $env:USERNAME
59
+
60
+ $settings = New-ScheduledTaskSettingsSet `
61
+ -AllowStartIfOnBatteries `
62
+ -DontStopIfGoingOnBatteries `
63
+ -StartWhenAvailable `
64
+ -ExecutionTimeLimit ([TimeSpan]::Zero) `
65
+ -RestartCount 3 `
66
+ -RestartInterval (New-TimeSpan -Minutes 1)
67
+
68
+ Register-ScheduledTask `
69
+ -TaskName $TaskName `
70
+ -Action $action `
71
+ -Trigger $trigger `
72
+ -Settings $settings `
73
+ -Description "MyAgent — Phone-accessible Claude Code agent gateway" | Out-Null
74
+
75
+ Write-Host ""
76
+ Write-Host "===== SUCCESS =====" -ForegroundColor Green
77
+ Write-Host "Task '$TaskName' registered to run at login." -ForegroundColor Green
78
+ Write-Host ""
79
+ Write-Host "Commands:" -ForegroundColor Cyan
80
+ Write-Host " Start now: schtasks /Run /TN $TaskName" -ForegroundColor Gray
81
+ Write-Host " Stop: schtasks /End /TN $TaskName" -ForegroundColor Gray
82
+ Write-Host " Status: schtasks /Query /TN $TaskName" -ForegroundColor Gray
83
+ Write-Host " Uninstall: powershell -File scripts\uninstall-service-windows.ps1" -ForegroundColor Gray
84
+ Write-Host ""
85
+
86
+ # 5. Show status
87
+ schtasks /Query /TN $TaskName /FO LIST
@@ -0,0 +1,52 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
5
+ PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
6
+ PLIST_NAME="com.agenticledger.channelToAgentToClaude"
7
+ PLIST_PATH="$HOME/Library/LaunchAgents/${PLIST_NAME}.plist"
8
+ NODE_PATH="$(which node)"
9
+
10
+ echo "Installing channelToAgentToClaude as launchd service..."
11
+ echo " Project: $PROJECT_DIR"
12
+ echo " Node: $NODE_PATH"
13
+ echo " Plist: $PLIST_PATH"
14
+
15
+ cat > "$PLIST_PATH" <<PLIST
16
+ <?xml version="1.0" encoding="UTF-8"?>
17
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
18
+ <plist version="1.0">
19
+ <dict>
20
+ <key>Label</key>
21
+ <string>${PLIST_NAME}</string>
22
+ <key>ProgramArguments</key>
23
+ <array>
24
+ <string>${NODE_PATH}</string>
25
+ <string>${PROJECT_DIR}/dist/index.js</string>
26
+ </array>
27
+ <key>WorkingDirectory</key>
28
+ <string>${PROJECT_DIR}</string>
29
+ <key>RunAtLoad</key>
30
+ <true/>
31
+ <key>KeepAlive</key>
32
+ <true/>
33
+ <key>StandardOutPath</key>
34
+ <string>${PROJECT_DIR}/logs/launchd-stdout.log</string>
35
+ <key>StandardErrorPath</key>
36
+ <string>${PROJECT_DIR}/logs/launchd-stderr.log</string>
37
+ <key>EnvironmentVariables</key>
38
+ <dict>
39
+ <key>PATH</key>
40
+ <string>/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin</string>
41
+ </dict>
42
+ </dict>
43
+ </plist>
44
+ PLIST
45
+
46
+ echo "Loading service..."
47
+ launchctl load "$PLIST_PATH"
48
+ echo "Done! Service installed and running."
49
+ echo ""
50
+ echo "Check status: launchctl list | grep channelToAgentToClaude"
51
+ echo "View logs: tail -f ${PROJECT_DIR}/logs/launchd-stdout.log"
52
+ echo "Stop: launchctl unload ${PLIST_PATH}"
@@ -0,0 +1,195 @@
1
+ #!/usr/bin/env npx ts-node
2
+ /**
3
+ * scripts/seed-registry.ts
4
+ * One-time seed: generates registry/mcps.json, registry/skills.json, registry/agents.json
5
+ * and copies/fetches all source files into registry/skills/
6
+ *
7
+ * Run: npx ts-node scripts/seed-registry.ts
8
+ */
9
+
10
+ import { readFileSync, writeFileSync, existsSync, readdirSync, copyFileSync, mkdirSync } from "node:fs";
11
+ import { join, dirname } from "node:path";
12
+ import { homedir } from "node:os";
13
+ import { execSync } from "node:child_process";
14
+ import { fileURLToPath } from "node:url";
15
+
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ const BASE = join(__dirname, "..");
19
+ const COMMANDS_DIR = join(homedir(), ".claude", "commands");
20
+
21
+ // ── 1. Migrate mcp-catalog.json → registry/mcps.json ──────────────
22
+
23
+ const catalog = JSON.parse(readFileSync(join(BASE, "mcp-catalog.json"), "utf-8"));
24
+
25
+ const mcpEntries = Object.entries(catalog.mcps as Record<string, any>).map(([id, mcp]) => ({
26
+ id,
27
+ name: mcp.name,
28
+ provider: "AgenticLedger",
29
+ description: mcp.description,
30
+ category: mcp.category,
31
+ verified: true,
32
+ source: "agenticledger/platform",
33
+ tags: [mcp.category],
34
+ requiredKeys: mcp.requiredKeys || [],
35
+ fetch: {
36
+ type: "http",
37
+ url: mcp.url,
38
+ },
39
+ }));
40
+
41
+ writeFileSync(
42
+ join(BASE, "registry", "mcps.json"),
43
+ JSON.stringify({ mcps: mcpEntries }, null, 2)
44
+ );
45
+ console.log(`✓ registry/mcps.json — ${mcpEntries.length} MCPs`);
46
+
47
+ // ── 2. Scan ~/.claude/commands/ → registry/skills.json ─────────────
48
+
49
+ function extractFrontmatter(content: string): { name?: string; description?: string } {
50
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
51
+ if (!match) return {};
52
+ const fm: Record<string, string> = {};
53
+ for (const line of match[1].split("\n")) {
54
+ const [key, ...rest] = line.split(":");
55
+ if (key && rest.length) fm[key.trim()] = rest.join(":").trim();
56
+ }
57
+ return { name: fm.name, description: fm.description };
58
+ }
59
+
60
+ function titleCase(id: string): string {
61
+ return id.replace(/_/g, " ").replace(/-/g, " ").replace(/\b\w/g, (c: string) => c.toUpperCase());
62
+ }
63
+
64
+ function guessCategory(id: string, description: string): string {
65
+ const text = (id + " " + description).toLowerCase();
66
+ if (text.match(/pdf|docx|pptx|xlsx|word|excel|powerpoint/)) return "documents";
67
+ if (text.match(/deploy|railway|mcp|skill|agent|build/)) return "devtools";
68
+ if (text.match(/bastion|soc|audit|compliance/)) return "compliance";
69
+ if (text.match(/test|tdd/)) return "testing";
70
+ if (text.match(/crypto|blockchain|wallet|token/)) return "crypto";
71
+ if (text.match(/slack|telegram|email|calendar/)) return "productivity";
72
+ if (text.match(/frontend|design|ui|css/)) return "design";
73
+ return "general";
74
+ }
75
+
76
+ mkdirSync(join(BASE, "registry", "skills", "platform"), { recursive: true });
77
+
78
+ const skillEntries: any[] = [];
79
+
80
+ if (existsSync(COMMANDS_DIR)) {
81
+ const files = readdirSync(COMMANDS_DIR).filter((f: string) => f.endsWith(".md"));
82
+ for (const file of files) {
83
+ const id = file.replace(".md", "");
84
+ const srcPath = join(COMMANDS_DIR, file);
85
+ const destPath = join(BASE, "registry", "skills", "platform", file);
86
+ const content = readFileSync(srcPath, "utf-8");
87
+ const { name: fmName, description: fmDesc } = extractFrontmatter(content);
88
+ const name = fmName || titleCase(id);
89
+ const description = fmDesc || "";
90
+ const category = guessCategory(id, description);
91
+
92
+ copyFileSync(srcPath, destPath);
93
+
94
+ skillEntries.push({
95
+ id,
96
+ name,
97
+ provider: "AgenticLedger",
98
+ description,
99
+ category,
100
+ verified: true,
101
+ source: "agenticledger/platform",
102
+ tags: [category],
103
+ localPath: `registry/skills/platform/${file}`,
104
+ fetch: { type: "file" },
105
+ });
106
+ }
107
+ console.log(`✓ registry/skills/platform/ — ${files.length} skills copied`);
108
+ } else {
109
+ console.log(` (no ~/.claude/commands/ found — skipping platform skills)`);
110
+ }
111
+
112
+ // ── 3. Fetch external skills from affaan-m/everything-claude-code ──
113
+
114
+ const EXTERNAL_SKILLS: Array<{ id: string; name: string; description: string; file: string }> = [
115
+ { id: "tdd", name: "Test-Driven Development", description: "Write failing tests first, then implement.", file: "tdd.md" },
116
+ { id: "code-review", name: "Code Review", description: "Systematic code review workflow.", file: "code-review.md" },
117
+ { id: "systematic-debugging", name: "Systematic Debugging", description: "Structured debugging process.", file: "systematic-debugging.md" },
118
+ { id: "writing-plans", name: "Write Plans", description: "Create detailed implementation plans.", file: "writing-plans.md" },
119
+ { id: "verification-before-completion", name: "Verify Before Completing", description: "Run checks before marking work done.", file: "verification-before-completion.md" },
120
+ { id: "brainstorming", name: "Brainstorming", description: "Design features through collaborative dialogue.", file: "brainstorming.md" },
121
+ ];
122
+
123
+ const RAW_BASE = "https://raw.githubusercontent.com/affaan-m/everything-claude-code/main/commands";
124
+
125
+ mkdirSync(join(BASE, "registry", "skills", "external"), { recursive: true });
126
+
127
+ for (const skill of EXTERNAL_SKILLS) {
128
+ const destPath = join(BASE, "registry", "skills", "external", skill.file);
129
+ if (existsSync(destPath)) {
130
+ console.log(` skip (exists): ${skill.file}`);
131
+ } else {
132
+ try {
133
+ const content = execSync(`curl -sf "${RAW_BASE}/${skill.file}"`, { timeout: 10_000 }).toString();
134
+ writeFileSync(destPath, content);
135
+ console.log(` fetched: ${skill.file}`);
136
+ } catch {
137
+ writeFileSync(destPath, `# ${skill.name}\n\n${skill.description}\n\n(Source: ${RAW_BASE}/${skill.file})\n`);
138
+ console.log(` placeholder: ${skill.file} (fetch failed)`);
139
+ }
140
+ }
141
+
142
+ skillEntries.push({
143
+ id: `ext-${skill.id}`,
144
+ name: skill.name,
145
+ provider: "affaan-m",
146
+ description: skill.description,
147
+ category: "devtools",
148
+ verified: false,
149
+ source: `github:affaan-m/everything-claude-code/commands/${skill.file}`,
150
+ tags: ["devtools", "external"],
151
+ localPath: `registry/skills/external/${skill.file}`,
152
+ fetch: { type: "file" },
153
+ });
154
+ }
155
+
156
+ writeFileSync(
157
+ join(BASE, "registry", "skills.json"),
158
+ JSON.stringify({ skills: skillEntries }, null, 2)
159
+ );
160
+ console.log(`✓ registry/skills.json — ${skillEntries.length} skills total`);
161
+
162
+ // ── 4. Create minimal registry/agents.json ─────────────────────────
163
+
164
+ const agentsRegistry = {
165
+ agents: [
166
+ {
167
+ id: "general-assistant",
168
+ name: "General Assistant",
169
+ provider: "AgenticLedger",
170
+ description: "A general-purpose agent for everyday tasks.",
171
+ category: "general",
172
+ verified: true,
173
+ source: "agenticledger/platform",
174
+ tags: ["general"],
175
+ localPath: "registry/agents/platform/general-assistant",
176
+ fetch: { type: "file" },
177
+ },
178
+ ],
179
+ };
180
+
181
+ writeFileSync(
182
+ join(BASE, "registry", "agents.json"),
183
+ JSON.stringify(agentsRegistry, null, 2)
184
+ );
185
+ console.log("✓ registry/agents.json — 1 template");
186
+
187
+ // ── 5. Create empty installed-drafts.json if not exists ────────────
188
+
189
+ const draftsPath = join(BASE, "registry", "installed-drafts.json");
190
+ if (!existsSync(draftsPath)) {
191
+ writeFileSync(draftsPath, JSON.stringify({ drafts: [] }, null, 2));
192
+ console.log("✓ registry/installed-drafts.json — created empty");
193
+ }
194
+
195
+ console.log("\n✅ Registry seed complete.");
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+ CHAT_ID=${1:?"Usage: test-send.sh <chat_id> [message]"}
3
+ MESSAGE=${2:-"Hello from channelToAgentToClaude"}
4
+ imsg send --chat-id "$CHAT_ID" --text "$MESSAGE"
5
+ echo "Sent to chat_id=$CHAT_ID"
@@ -0,0 +1,35 @@
1
+ # MyAgent system tray status indicator for Windows
2
+ # Run: powershell -WindowStyle Hidden -File scripts/tray-indicator.ps1
3
+ # Shows a tray icon with agent count, status, and quick links.
4
+
5
+ Add-Type -AssemblyName System.Windows.Forms
6
+ $notify = New-Object System.Windows.Forms.NotifyIcon
7
+ $notify.Icon = [System.Drawing.SystemIcons]::Information
8
+ $notify.Visible = $true
9
+ $notify.Text = "MyAgent Gateway"
10
+
11
+ $timer = New-Object System.Windows.Forms.Timer
12
+ $timer.Interval = 5000
13
+ $timer.Add_Tick({
14
+ try {
15
+ $data = Invoke-RestMethod -Uri "http://localhost:4888/api/dashboard" -TimeoutSec 2
16
+ $count = $data.agents.Count
17
+ $notify.Text = "MyAgent: $count agents running"
18
+ $notify.Icon = [System.Drawing.SystemIcons]::Application
19
+ } catch {
20
+ $notify.Text = "MyAgent: Down"
21
+ $notify.Icon = [System.Drawing.SystemIcons]::Warning
22
+ }
23
+ })
24
+ $timer.Start()
25
+
26
+ $menu = New-Object System.Windows.Forms.ContextMenuStrip
27
+ $menu.Items.Add("Open Web UI", $null, { Start-Process "http://localhost:4888/ui" })
28
+ $menu.Items.Add("---")
29
+ $menu.Items.Add("Start Service", $null, { schtasks /Run /TN MyAgentGateway })
30
+ $menu.Items.Add("Stop Service", $null, { schtasks /End /TN MyAgentGateway })
31
+ $menu.Items.Add("Restart Service", $null, { schtasks /End /TN MyAgentGateway; Start-Sleep 2; schtasks /Run /TN MyAgentGateway })
32
+ $menu.Items.Add("Exit", $null, { $notify.Visible = $false; [System.Windows.Forms.Application]::Exit() })
33
+ $notify.ContextMenuStrip = $menu
34
+
35
+ [System.Windows.Forms.Application]::Run()
@@ -0,0 +1,23 @@
1
+ # MyAgent — Windows Task Scheduler Uninstaller
2
+ # Run: powershell -ExecutionPolicy Bypass -File scripts/uninstall-service-windows.ps1
3
+
4
+ $ErrorActionPreference = "Stop"
5
+ $TaskName = "MyAgentGateway"
6
+
7
+ Write-Host ""
8
+ Write-Host "MyAgent — Uninstalling Windows Service" -ForegroundColor Yellow
9
+ Write-Host ""
10
+
11
+ $existing = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue
12
+ if ($existing) {
13
+ # Stop it if running
14
+ schtasks /End /TN $TaskName 2>$null
15
+ Start-Sleep -Seconds 1
16
+
17
+ Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false
18
+ Write-Host "[OK] Task '$TaskName' has been removed." -ForegroundColor Green
19
+ } else {
20
+ Write-Host "[INFO] Task '$TaskName' not found — nothing to remove." -ForegroundColor Gray
21
+ }
22
+
23
+ Write-Host ""
@@ -0,0 +1,15 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ PLIST_NAME="com.agenticledger.channelToAgentToClaude"
5
+ PLIST_PATH="$HOME/Library/LaunchAgents/${PLIST_NAME}.plist"
6
+
7
+ echo "Uninstalling channelToAgentToClaude service..."
8
+
9
+ if [ -f "$PLIST_PATH" ]; then
10
+ launchctl unload "$PLIST_PATH" 2>/dev/null || true
11
+ rm "$PLIST_PATH"
12
+ echo "Service removed."
13
+ else
14
+ echo "Service plist not found at $PLIST_PATH — nothing to uninstall."
15
+ fi
@@ -0,0 +1,32 @@
1
+ #!/bin/bash
2
+ # MyAgent menu bar status indicator for macOS (xbar plugin)
3
+ # Install: brew install --cask xbar
4
+ # Copy: cp scripts/xbar-myagent.5s.sh "$HOME/Library/Application Support/xbar/plugins/"
5
+ # The .5s suffix means xbar refreshes every 5 seconds.
6
+
7
+ PID=$(launchctl list 2>/dev/null | grep agenticledger | awk '{print $1}')
8
+ if [ -n "$PID" ] && [ "$PID" != "-" ]; then
9
+ DATA=$(curl -s --max-time 2 http://localhost:4888/api/dashboard 2>/dev/null)
10
+ AGENTS=$(echo "$DATA" | python3 -c "import sys,json; print(len(json.load(sys.stdin).get('agents',[])))" 2>/dev/null)
11
+ UPTIME=$(echo "$DATA" | python3 -c "import sys,json; u=int(json.load(sys.stdin).get('uptime',0)); h=u//3600; m=(u%3600)//60; print(f'{h}h {m}m' if h else f'{m}m')" 2>/dev/null)
12
+ echo "🟢 ${AGENTS:-?} | size=13"
13
+ else
14
+ echo "🔴 Down | size=13"
15
+ fi
16
+ echo "---"
17
+ echo "MyAgent Gateway | size=14 color=white"
18
+ echo "---"
19
+ if [ -n "$PID" ] && [ "$PID" != "-" ]; then
20
+ echo "Status: Running (PID $PID) | color=green"
21
+ echo "Agents: ${AGENTS:-?} | color=white"
22
+ echo "Uptime: ${UPTIME:-?} | color=#888888"
23
+ echo "---"
24
+ echo "Open Web UI | href=http://localhost:4888/ui"
25
+ echo "---"
26
+ echo "Restart Service | bash=/bin/bash param1=-c param2='launchctl unload ~/Library/LaunchAgents/com.agenticledger.channelToAgentToClaude.plist 2>/dev/null; launchctl load ~/Library/LaunchAgents/com.agenticledger.channelToAgentToClaude.plist' terminal=false refresh=true"
27
+ echo "Stop Service | bash=/bin/bash param1=-c param2='launchctl unload ~/Library/LaunchAgents/com.agenticledger.channelToAgentToClaude.plist' terminal=false refresh=true"
28
+ else
29
+ echo "Status: Stopped | color=red"
30
+ echo "---"
31
+ echo "Start Service | bash=/bin/bash param1=-c param2='launchctl load ~/Library/LaunchAgents/com.agenticledger.channelToAgentToClaude.plist' terminal=false refresh=true"
32
+ fi
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MyAIforOne MCP Server
4
+ *
5
+ * Exposes the MyAgent gateway's API as MCP tools for Claude Code,
6
+ * Claude Desktop, and other MCP-compatible clients.
7
+ *
8
+ * Usage (stdio): node server/mcp-server/index.js
9
+ * Usage (HTTP): MYAGENT_MCP_PORT=3100 node server/mcp-server/index.js --http
10
+ */
11
+ export {};