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.
- package/README.md +113 -0
- package/agents/_template/CLAUDE.md +18 -0
- package/agents/_template/agent.json +7 -0
- package/agents/platform/agentcreator/CLAUDE.md +300 -0
- package/agents/platform/appcreator/CLAUDE.md +158 -0
- package/agents/platform/gym/CLAUDE.md +486 -0
- package/agents/platform/gym/agent.json +40 -0
- package/agents/platform/gym/programs/agent-building/program.json +160 -0
- package/agents/platform/gym/programs/automations-mastery/program.json +129 -0
- package/agents/platform/gym/programs/getting-started/program.json +124 -0
- package/agents/platform/gym/programs/mcp-integrations/program.json +116 -0
- package/agents/platform/gym/programs/multi-model-strategy/program.json +115 -0
- package/agents/platform/gym/programs/prompt-engineering/program.json +136 -0
- package/agents/platform/gym/souls/alex.md +12 -0
- package/agents/platform/gym/souls/jordan.md +12 -0
- package/agents/platform/gym/souls/morgan.md +12 -0
- package/agents/platform/gym/souls/riley.md +12 -0
- package/agents/platform/gym/souls/sam.md +12 -0
- package/agents/platform/hub/CLAUDE.md +372 -0
- package/agents/platform/promptcreator/CLAUDE.md +130 -0
- package/agents/platform/skillcreator/CLAUDE.md +163 -0
- package/bin/cli.js +566 -0
- package/config.example.json +310 -0
- package/dist/agent-registry.d.ts +32 -0
- package/dist/agent-registry.d.ts.map +1 -0
- package/dist/agent-registry.js +144 -0
- package/dist/agent-registry.js.map +1 -0
- package/dist/channels/discord.d.ts +17 -0
- package/dist/channels/discord.d.ts.map +1 -0
- package/dist/channels/discord.js +114 -0
- package/dist/channels/discord.js.map +1 -0
- package/dist/channels/imessage.d.ts +23 -0
- package/dist/channels/imessage.d.ts.map +1 -0
- package/dist/channels/imessage.js +214 -0
- package/dist/channels/imessage.js.map +1 -0
- package/dist/channels/slack.d.ts +19 -0
- package/dist/channels/slack.d.ts.map +1 -0
- package/dist/channels/slack.js +167 -0
- package/dist/channels/slack.js.map +1 -0
- package/dist/channels/telegram.d.ts +19 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/channels/telegram.js +274 -0
- package/dist/channels/telegram.js.map +1 -0
- package/dist/channels/types.d.ts +44 -0
- package/dist/channels/types.d.ts.map +1 -0
- package/dist/channels/types.js +18 -0
- package/dist/channels/types.js.map +1 -0
- package/dist/channels/whatsapp.d.ts +23 -0
- package/dist/channels/whatsapp.d.ts.map +1 -0
- package/dist/channels/whatsapp.js +189 -0
- package/dist/channels/whatsapp.js.map +1 -0
- package/dist/config.d.ts +134 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +127 -0
- package/dist/config.js.map +1 -0
- package/dist/cron.d.ts +8 -0
- package/dist/cron.d.ts.map +1 -0
- package/dist/cron.js +35 -0
- package/dist/cron.js.map +1 -0
- package/dist/decrypt-keys.d.ts +7 -0
- package/dist/decrypt-keys.d.ts.map +1 -0
- package/dist/decrypt-keys.js +53 -0
- package/dist/decrypt-keys.js.map +1 -0
- package/dist/encrypt-keys.d.ts +8 -0
- package/dist/encrypt-keys.d.ts.map +1 -0
- package/dist/encrypt-keys.js +62 -0
- package/dist/encrypt-keys.js.map +1 -0
- package/dist/executor.d.ts +31 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +2009 -0
- package/dist/executor.js.map +1 -0
- package/dist/gemini-executor.d.ts +27 -0
- package/dist/gemini-executor.d.ts.map +1 -0
- package/dist/gemini-executor.js +160 -0
- package/dist/gemini-executor.js.map +1 -0
- package/dist/goals.d.ts +24 -0
- package/dist/goals.d.ts.map +1 -0
- package/dist/goals.js +189 -0
- package/dist/goals.js.map +1 -0
- package/dist/gym/activity-digest.d.ts +30 -0
- package/dist/gym/activity-digest.d.ts.map +1 -0
- package/dist/gym/activity-digest.js +506 -0
- package/dist/gym/activity-digest.js.map +1 -0
- package/dist/gym/dimension-scorer.d.ts +76 -0
- package/dist/gym/dimension-scorer.d.ts.map +1 -0
- package/dist/gym/dimension-scorer.js +236 -0
- package/dist/gym/dimension-scorer.js.map +1 -0
- package/dist/gym/gym-router.d.ts +7 -0
- package/dist/gym/gym-router.d.ts.map +1 -0
- package/dist/gym/gym-router.js +718 -0
- package/dist/gym/gym-router.js.map +1 -0
- package/dist/gym/index.d.ts +11 -0
- package/dist/gym/index.d.ts.map +1 -0
- package/dist/gym/index.js +11 -0
- package/dist/gym/index.js.map +1 -0
- package/dist/heartbeat.d.ts +21 -0
- package/dist/heartbeat.d.ts.map +1 -0
- package/dist/heartbeat.js +163 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +254 -0
- package/dist/index.js.map +1 -0
- package/dist/keystore.d.ts +22 -0
- package/dist/keystore.d.ts.map +1 -0
- package/dist/keystore.js +178 -0
- package/dist/keystore.js.map +1 -0
- package/dist/logger.d.ts +9 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +45 -0
- package/dist/logger.js.map +1 -0
- package/dist/memory/daily.d.ts +22 -0
- package/dist/memory/daily.d.ts.map +1 -0
- package/dist/memory/daily.js +82 -0
- package/dist/memory/daily.js.map +1 -0
- package/dist/memory/embeddings.d.ts +15 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +154 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/index.d.ts +32 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +159 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/search.d.ts +21 -0
- package/dist/memory/search.d.ts.map +1 -0
- package/dist/memory/search.js +77 -0
- package/dist/memory/search.js.map +1 -0
- package/dist/memory/store.d.ts +23 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +144 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/ollama-executor.d.ts +17 -0
- package/dist/ollama-executor.d.ts.map +1 -0
- package/dist/ollama-executor.js +112 -0
- package/dist/ollama-executor.js.map +1 -0
- package/dist/openai-executor.d.ts +38 -0
- package/dist/openai-executor.d.ts.map +1 -0
- package/dist/openai-executor.js +197 -0
- package/dist/openai-executor.js.map +1 -0
- package/dist/router.d.ts +11 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +185 -0
- package/dist/router.js.map +1 -0
- package/dist/test-message.d.ts +2 -0
- package/dist/test-message.d.ts.map +1 -0
- package/dist/test-message.js +60 -0
- package/dist/test-message.js.map +1 -0
- package/dist/utils/imsg-db-reader.d.ts +24 -0
- package/dist/utils/imsg-db-reader.d.ts.map +1 -0
- package/dist/utils/imsg-db-reader.js +92 -0
- package/dist/utils/imsg-db-reader.js.map +1 -0
- package/dist/utils/imsg-rpc.d.ts +25 -0
- package/dist/utils/imsg-rpc.d.ts.map +1 -0
- package/dist/utils/imsg-rpc.js +149 -0
- package/dist/utils/imsg-rpc.js.map +1 -0
- package/dist/utils/message-formatter.d.ts +3 -0
- package/dist/utils/message-formatter.d.ts.map +1 -0
- package/dist/utils/message-formatter.js +69 -0
- package/dist/utils/message-formatter.js.map +1 -0
- package/dist/web-ui.d.ts +12 -0
- package/dist/web-ui.d.ts.map +1 -0
- package/dist/web-ui.js +5784 -0
- package/dist/web-ui.js.map +1 -0
- package/dist/whatsapp-chats.d.ts +2 -0
- package/dist/whatsapp-chats.d.ts.map +1 -0
- package/dist/whatsapp-chats.js +76 -0
- package/dist/whatsapp-chats.js.map +1 -0
- package/dist/whatsapp-login.d.ts +2 -0
- package/dist/whatsapp-login.d.ts.map +1 -0
- package/dist/whatsapp-login.js +90 -0
- package/dist/whatsapp-login.js.map +1 -0
- package/dist/wiki-sync.d.ts +21 -0
- package/dist/wiki-sync.d.ts.map +1 -0
- package/dist/wiki-sync.js +147 -0
- package/dist/wiki-sync.js.map +1 -0
- package/docs/AddNewAgentGuide.md +100 -0
- package/docs/AddNewMcpGuide.md +72 -0
- package/docs/Architecture.md +795 -0
- package/docs/CLAUDE-AI-SETUP.md +166 -0
- package/docs/Setup.md +297 -0
- package/docs/ai-gym-architecture.md +1040 -0
- package/docs/ai-gym-build-plan.md +343 -0
- package/docs/ai-gym-onboarding.md +122 -0
- package/docs/appcreator_plan.md +348 -0
- package/docs/platform-mcp-audit.md +320 -0
- package/docs/server-deployment-plan.md +503 -0
- package/docs/superpowers/plans/2026-03-25-marketplace.md +1281 -0
- package/docs/superpowers/specs/2026-03-25-marketplace-design.md +287 -0
- package/docs/user-guide.md +2016 -0
- package/mcp-catalog.json +628 -0
- package/package.json +63 -0
- package/public/MyAIforOne-logomark-512.svg +16 -0
- package/public/MyAIforOne-logomark-transparent.svg +15 -0
- package/public/activity.html +314 -0
- package/public/admin.html +1674 -0
- package/public/agent-dashboard.html +670 -0
- package/public/api-docs.html +1106 -0
- package/public/automations.html +722 -0
- package/public/canvas.css +223 -0
- package/public/canvas.js +588 -0
- package/public/changelog.html +231 -0
- package/public/gym.html +2766 -0
- package/public/home.html +1930 -0
- package/public/index.html +2809 -0
- package/public/lab.html +1643 -0
- package/public/library.html +1442 -0
- package/public/marketplace.html +1101 -0
- package/public/mcp-docs.html +441 -0
- package/public/mini.html +390 -0
- package/public/monitor.html +584 -0
- package/public/org.html +4304 -0
- package/public/projects.html +734 -0
- package/public/settings.html +645 -0
- package/public/tasks.html +932 -0
- package/public/trainers/alex.svg +12 -0
- package/public/trainers/jordan.svg +12 -0
- package/public/trainers/morgan.svg +12 -0
- package/public/trainers/riley.svg +12 -0
- package/public/trainers/sam.svg +12 -0
- package/public/user-guide.html +218 -0
- package/registry/agents.json +3 -0
- package/registry/apps.json +20 -0
- package/registry/installed-drafts.json +3 -0
- package/registry/mcps.json +1084 -0
- package/registry/prompts/personal/mcp-test-prompt.md +6 -0
- package/registry/prompts/personal/memory-recall.md +6 -0
- package/registry/prompts/platform/brainstorm.md +15 -0
- package/registry/prompts/platform/code-review.md +16 -0
- package/registry/prompts/platform/explain.md +16 -0
- package/registry/prompts.json +58 -0
- package/registry/skills/external/brainstorming.md +5 -0
- package/registry/skills/external/code-review.md +40 -0
- package/registry/skills/external/frontend-patterns.md +642 -0
- package/registry/skills/external/frontend-slides.md +184 -0
- package/registry/skills/external/systematic-debugging.md +5 -0
- package/registry/skills/external/tdd.md +328 -0
- package/registry/skills/external/verification-before-completion.md +5 -0
- package/registry/skills/external/writing-plans.md +5 -0
- package/registry/skills/platform/ai41_app_build.md +930 -0
- package/registry/skills/platform/ai41_app_deploy.md +168 -0
- package/registry/skills/platform/ai41_app_orchestrator.md +239 -0
- package/registry/skills/platform/ai41_app_patterns.md +359 -0
- package/registry/skills/platform/ai41_app_register.md +85 -0
- package/registry/skills/platform/ai41_app_scaffold.md +421 -0
- package/registry/skills/platform/ai41_app_verify.md +107 -0
- package/registry/skills/platform/opProjectCreate.md +239 -0
- package/registry/skills/platform/op_devbrowser.md +136 -0
- package/registry/skills/platform/sop_brandguidelines.md +103 -0
- package/registry/skills/platform/sop_docx.md +117 -0
- package/registry/skills/platform/sop_frontenddesign.md +44 -0
- package/registry/skills/platform/sop_frontenddesign_v2.md +659 -0
- package/registry/skills/platform/sop_mcpbuilder.md +133 -0
- package/registry/skills/platform/sop_pdf.md +172 -0
- package/registry/skills/platform/sop_pptx.md +133 -0
- package/registry/skills/platform/sop_skillcreator.md +104 -0
- package/registry/skills/platform/sop_themefactory.md +128 -0
- package/registry/skills/platform/sop_webapptesting.md +75 -0
- package/registry/skills/platform/sop_webartifactsbuilder.md +97 -0
- package/registry/skills/platform/sop_xlsx.md +134 -0
- package/registry/skills.json +1055 -0
- package/scripts/discover-chats.sh +11 -0
- package/scripts/install-service-windows.ps1 +87 -0
- package/scripts/install-service.sh +52 -0
- package/scripts/seed-registry.ts +195 -0
- package/scripts/test-send.sh +5 -0
- package/scripts/tray-indicator.ps1 +35 -0
- package/scripts/uninstall-service-windows.ps1 +23 -0
- package/scripts/uninstall-service.sh +15 -0
- package/scripts/xbar-myagent.5s.sh +32 -0
- package/server/mcp-server/dist/index.d.ts +11 -0
- package/server/mcp-server/dist/index.js +1332 -0
- package/server/mcp-server/dist/lib/api-client.d.ts +165 -0
- package/server/mcp-server/dist/lib/api-client.js +241 -0
- package/server/mcp-server/index.ts +1545 -0
- package/server/mcp-server/lib/api-client.ts +366 -0
- package/server/mcp-server/tsconfig.json +14 -0
- package/src/agent-registry.ts +180 -0
- package/src/channels/discord.ts +129 -0
- package/src/channels/imessage.ts +261 -0
- package/src/channels/slack.ts +208 -0
- package/src/channels/telegram.ts +307 -0
- package/src/channels/types.ts +62 -0
- package/src/channels/whatsapp.ts +227 -0
- package/src/config.ts +281 -0
- package/src/cron.ts +43 -0
- package/src/decrypt-keys.ts +60 -0
- package/src/encrypt-keys.ts +70 -0
- package/src/executor.ts +2190 -0
- package/src/gemini-executor.ts +212 -0
- package/src/goals.ts +240 -0
- package/src/gym/activity-digest.ts +546 -0
- package/src/gym/dimension-scorer.ts +297 -0
- package/src/gym/gym-router.ts +801 -0
- package/src/gym/index.ts +19 -0
- package/src/heartbeat.ts +220 -0
- package/src/index.ts +275 -0
- package/src/keystore.ts +190 -0
- package/src/logger.ts +51 -0
- package/src/memory/daily.ts +101 -0
- package/src/memory/embeddings.ts +185 -0
- package/src/memory/index.ts +218 -0
- package/src/memory/search.ts +124 -0
- package/src/memory/store.ts +189 -0
- package/src/ollama-executor.ts +126 -0
- package/src/openai-executor.ts +259 -0
- package/src/router.ts +230 -0
- package/src/test-message.ts +72 -0
- package/src/utils/imsg-db-reader.ts +109 -0
- package/src/utils/imsg-rpc.ts +178 -0
- package/src/utils/message-formatter.ts +90 -0
- package/src/web-ui.ts +5778 -0
- package/src/whatsapp-chats.ts +91 -0
- package/src/whatsapp-login.ts +110 -0
- package/src/wiki-sync.ts +199 -0
- 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,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 {};
|