@superclawd-ai/fda 0.0.0-stage → 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 +72 -0
- package/README.md +77 -2
- package/dist/assets/index-SxySD90C.css +1 -0
- package/dist/assets/index-sm_zmMY2.js +311 -0
- package/dist/index.html +14 -0
- package/dist-server/cli.mjs +691 -0
- package/dist-server/index.mjs +635 -0
- package/package.json +85 -4
- package/scripts/install.sh +109 -0
- package/scripts/superclawd-fda.service.tmpl +28 -0
package/package.json
CHANGED
|
@@ -1,6 +1,87 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@superclawd-ai/fda",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"description": "
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "SuperClawd FDA \u2014 a forward deployed agent for your team: a Slack-driven AI developer that runs on its own machine with your SuperClawd workspace.",
|
|
6
|
+
"author": "SuperClawd <support@superclawd.com>",
|
|
7
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
8
|
+
"homepage": "https://superclawd.com",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/superclawd-ai/superclawd"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"superclawd",
|
|
15
|
+
"fda",
|
|
16
|
+
"claude-code",
|
|
17
|
+
"slack",
|
|
18
|
+
"ai-agent",
|
|
19
|
+
"autonomous"
|
|
20
|
+
],
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=22.13"
|
|
23
|
+
},
|
|
24
|
+
"type": "module",
|
|
25
|
+
"main": "dist-server/index.mjs",
|
|
26
|
+
"bin": {
|
|
27
|
+
"superclawd-fda": "dist-server/cli.mjs"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist",
|
|
31
|
+
"dist-server",
|
|
32
|
+
"scripts",
|
|
33
|
+
"README.md",
|
|
34
|
+
"LICENSE"
|
|
35
|
+
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"dev": "concurrently -k -n api,web -c blue,green \"pnpm dev:api\" \"pnpm dev:web\"",
|
|
38
|
+
"dev:api": "FDA_HOME=.fda-dev tsx watch server/index.ts",
|
|
39
|
+
"dev:web": "vite",
|
|
40
|
+
"build": "node build.mjs",
|
|
41
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.app.json",
|
|
42
|
+
"test": "tsx test/run-all.ts",
|
|
43
|
+
"lint": "eslint 'server/**/*.ts' 'src/**/*.{ts,tsx}'",
|
|
44
|
+
"format": "prettier --check 'server/**/*.ts' 'test/**/*.ts' 'src/**/*.{ts,tsx}'",
|
|
45
|
+
"format:fix": "prettier --write 'server/**/*.ts' 'test/**/*.ts' 'src/**/*.{ts,tsx}'"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@modelcontextprotocol/sdk": "^1.7.0",
|
|
49
|
+
"@slack/socket-mode": "^3.1.0",
|
|
50
|
+
"@slack/web-api": "^8.2.0",
|
|
51
|
+
"express": "^4.21.2",
|
|
52
|
+
"zod": "^3.24.2"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@eslint/js": "^9.39.1",
|
|
56
|
+
"@tanstack/react-query": "^5.90.11",
|
|
57
|
+
"@types/express": "^4.17.21",
|
|
58
|
+
"@types/node": "^22.10.0",
|
|
59
|
+
"@types/react": "^18.3.12",
|
|
60
|
+
"@types/react-dom": "^18.3.1",
|
|
61
|
+
"@typescript-eslint/eslint-plugin": "^8.44.1",
|
|
62
|
+
"@typescript-eslint/parser": "^8.44.1",
|
|
63
|
+
"@vitejs/plugin-react": "^4.3.4",
|
|
64
|
+
"autoprefixer": "^10.4.22",
|
|
65
|
+
"class-variance-authority": "^0.7.1",
|
|
66
|
+
"clsx": "^2.1.1",
|
|
67
|
+
"concurrently": "^9.1.0",
|
|
68
|
+
"esbuild": "^0.24.0",
|
|
69
|
+
"eslint": "^9.36.0",
|
|
70
|
+
"eslint-config-prettier": "^10.1.8",
|
|
71
|
+
"eslint-plugin-prettier": "^5.5.4",
|
|
72
|
+
"eslint-plugin-react-hooks": "^5.1.0",
|
|
73
|
+
"eslint-plugin-react-refresh": "^0.4.16",
|
|
74
|
+
"lucide-react": "^0.555.0",
|
|
75
|
+
"postcss": "^8.5.6",
|
|
76
|
+
"prettier": "^3.6.2",
|
|
77
|
+
"react": "^18.3.1",
|
|
78
|
+
"react-dom": "^18.3.1",
|
|
79
|
+
"react-router-dom": "^7.9.6",
|
|
80
|
+
"tailwind-merge": "^3.4.0",
|
|
81
|
+
"tailwindcss": "3",
|
|
82
|
+
"tailwindcss-animate": "^1.0.7",
|
|
83
|
+
"tsx": "^4.19.2",
|
|
84
|
+
"typescript": "^5.9.2",
|
|
85
|
+
"vite": "^6.0.5"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# SuperClawd FDA machine installer (Ubuntu 24.04+). Run as the operator user, NOT root:
|
|
3
|
+
# curl -fsSLO https://superclawd.com/fda/install.sh && bash install.sh [--with-browser]
|
|
4
|
+
# It uses sudo only for system packages and the systemd unit. Safe to re-run (idempotent).
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
main() {
|
|
8
|
+
# Pinned versions (bumped together with the setup guide's dependency table).
|
|
9
|
+
local NODE_MAJOR=22
|
|
10
|
+
local SUPERCLAWD_VERSION="${SUPERCLAWD_VERSION:-latest}"
|
|
11
|
+
local FDA_VERSION="${FDA_VERSION:-latest}"
|
|
12
|
+
local PLAYWRIGHT_MCP_VERSION="0.0.83"
|
|
13
|
+
local WITH_BROWSER=0
|
|
14
|
+
local FROM_DIR=""
|
|
15
|
+
|
|
16
|
+
while [ $# -gt 0 ]; do
|
|
17
|
+
case "$1" in
|
|
18
|
+
--with-browser) WITH_BROWSER=1 ;;
|
|
19
|
+
--from-dir) FROM_DIR="$2"; shift ;; # dev: install packed tarballs (superclawd-*.tgz, superclawd-ai-fda-*.tgz)
|
|
20
|
+
-h|--help) echo "Usage: bash install.sh [--with-browser] [--from-dir <dir-with-tgz>]"; return 0 ;;
|
|
21
|
+
*) echo "Unknown option: $1" >&2; return 64 ;;
|
|
22
|
+
esac
|
|
23
|
+
shift
|
|
24
|
+
done
|
|
25
|
+
|
|
26
|
+
if [ "$(id -u)" -eq 0 ]; then
|
|
27
|
+
echo "✗ Run this as your regular user (not root). It uses sudo only where needed." >&2
|
|
28
|
+
return 1
|
|
29
|
+
fi
|
|
30
|
+
. /etc/os-release 2>/dev/null || true
|
|
31
|
+
if [ "${ID:-}" != "ubuntu" ]; then
|
|
32
|
+
echo "! This installer is tested on Ubuntu 24.04+; continuing on ${PRETTY_NAME:-an unknown system}." >&2
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
echo "→ System packages"
|
|
36
|
+
sudo apt-get update -qq
|
|
37
|
+
sudo apt-get install -y -qq git curl ca-certificates jq gnupg bubblewrap >/dev/null
|
|
38
|
+
|
|
39
|
+
if ! command -v node >/dev/null || [ "$(node -p 'process.versions.node.split(".")[0]')" -lt "$NODE_MAJOR" ] \
|
|
40
|
+
|| ! node -e 'const [a,b]=process.versions.node.split(".").map(Number); process.exit(a>22||(a===22&&b>=13)?0:1)'; then
|
|
41
|
+
echo "→ Node.js $NODE_MAJOR (NodeSource)"
|
|
42
|
+
curl -fsSL "https://deb.nodesource.com/setup_${NODE_MAJOR}.x" | sudo -E bash - >/dev/null
|
|
43
|
+
sudo apt-get install -y -qq nodejs >/dev/null
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
if ! command -v gh >/dev/null; then
|
|
47
|
+
echo "→ GitHub CLI"
|
|
48
|
+
sudo mkdir -p -m 755 /etc/apt/keyrings
|
|
49
|
+
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg >/dev/null
|
|
50
|
+
sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg
|
|
51
|
+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" \
|
|
52
|
+
| sudo tee /etc/apt/sources.list.d/github-cli.list >/dev/null
|
|
53
|
+
sudo apt-get update -qq && sudo apt-get install -y -qq gh >/dev/null
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
echo "→ SuperClawd CLI + FDA"
|
|
57
|
+
if [ -n "$FROM_DIR" ]; then
|
|
58
|
+
sudo npm i -g --no-fund --no-audit "$FROM_DIR"/superclawd-[0-9]*.tgz "$FROM_DIR"/superclawd-ai-fda-*.tgz >/dev/null
|
|
59
|
+
else
|
|
60
|
+
sudo npm i -g --no-fund --no-audit "superclawd@${SUPERCLAWD_VERSION}" "@superclawd-ai/fda@${FDA_VERSION}" >/dev/null
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
if ! command -v claude >/dev/null && [ ! -x "$HOME/.local/bin/claude" ]; then
|
|
64
|
+
echo "→ Claude Code"
|
|
65
|
+
curl -fsSL https://claude.ai/install.sh | bash >/dev/null
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
mkdir -p -m 700 "$HOME/.superclawd/fda"
|
|
69
|
+
local envfile="$HOME/.superclawd/fda/env"
|
|
70
|
+
if [ ! -f "$envfile" ]; then
|
|
71
|
+
printf 'DISABLE_AUTOUPDATER=1\n' > "$envfile"
|
|
72
|
+
chmod 600 "$envfile"
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
if [ "$WITH_BROWSER" = 1 ]; then
|
|
76
|
+
echo "→ Browser (Playwright MCP $PLAYWRIGHT_MCP_VERSION + Chromium)"
|
|
77
|
+
local bdir="$HOME/.superclawd/fda/browser"
|
|
78
|
+
mkdir -p "$bdir"
|
|
79
|
+
(cd "$bdir" && npm init -y >/dev/null && npm i --no-fund --no-audit "@playwright/mcp@${PLAYWRIGHT_MCP_VERSION}" >/dev/null)
|
|
80
|
+
local pwv
|
|
81
|
+
pwv="$(node -p "require('$bdir/node_modules/playwright/package.json').version")"
|
|
82
|
+
sudo npx -y "playwright@${pwv}" install-deps chromium >/dev/null
|
|
83
|
+
npx -y "playwright@${pwv}" install chromium >/dev/null
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
echo "→ Service"
|
|
87
|
+
local node cli tmpl
|
|
88
|
+
node="$(command -v node)"
|
|
89
|
+
cli="$(npm root -g)/@superclawd-ai/fda/dist-server/cli.mjs"
|
|
90
|
+
tmpl="$(npm root -g)/@superclawd-ai/fda/scripts/superclawd-fda.service.tmpl"
|
|
91
|
+
[ -f "$cli" ] || { echo "✗ FDA package not found at $cli" >&2; return 1; }
|
|
92
|
+
sed -e "s|__USER__|$(id -un)|g" -e "s|__HOME__|$HOME|g" -e "s|__NODE__|$node|g" -e "s|__CLI__|$cli|g" "$tmpl" \
|
|
93
|
+
| sudo tee /etc/systemd/system/superclawd-fda.service >/dev/null
|
|
94
|
+
sudo systemctl daemon-reload
|
|
95
|
+
sudo systemctl enable superclawd-fda >/dev/null
|
|
96
|
+
|
|
97
|
+
cat <<NEXT
|
|
98
|
+
|
|
99
|
+
✓ Installed. Next steps (see the setup guide):
|
|
100
|
+
1. superclawd login
|
|
101
|
+
2. superclawd fda setup --workspace <your-workspace-slug>
|
|
102
|
+
3. printf '%s' "\$ANTHROPIC_API_KEY" | superclawd fda config set-key
|
|
103
|
+
4. superclawd fda start && superclawd fda doctor
|
|
104
|
+
5. Open the admin panel (tailscale serve --bg --https=443 http://127.0.0.1:63220), sign in with
|
|
105
|
+
the password from: superclawd fda credentials
|
|
106
|
+
NEXT
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
main "$@"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# SuperClawd FDA daemon. Installed by install.sh; placeholders are filled in at install time.
|
|
2
|
+
[Unit]
|
|
3
|
+
Description=SuperClawd FDA (Slack-driven AI engineer)
|
|
4
|
+
Wants=network-online.target
|
|
5
|
+
After=network-online.target tailscaled.service
|
|
6
|
+
StartLimitIntervalSec=300
|
|
7
|
+
StartLimitBurst=5
|
|
8
|
+
|
|
9
|
+
[Service]
|
|
10
|
+
Type=simple
|
|
11
|
+
User=__USER__
|
|
12
|
+
WorkingDirectory=__HOME__
|
|
13
|
+
Environment=HOME=__HOME__
|
|
14
|
+
Environment=PATH=__HOME__/.local/bin:/usr/local/bin:/usr/bin:/bin
|
|
15
|
+
Environment=NODE_ENV=production
|
|
16
|
+
EnvironmentFile=-__HOME__/.superclawd/fda/env
|
|
17
|
+
ExecStart=__NODE__ __CLI__ run
|
|
18
|
+
Restart=on-failure
|
|
19
|
+
RestartSec=5
|
|
20
|
+
# 78 = configuration problem a human must fix (don't restart-loop on it).
|
|
21
|
+
RestartPreventExitStatus=78
|
|
22
|
+
# SIGTERM to the daemon (it stops the running turn gracefully), then SIGKILL for the rest of the cgroup.
|
|
23
|
+
KillMode=mixed
|
|
24
|
+
TimeoutStopSec=45
|
|
25
|
+
NoNewPrivileges=true
|
|
26
|
+
|
|
27
|
+
[Install]
|
|
28
|
+
WantedBy=multi-user.target
|