@sibyllinesoft/smith-installer 0.1.1
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/agents.md +109 -0
- package/dist/agents.d.ts +9 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +42 -0
- package/dist/agents.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +301 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib.d.ts +49 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +265 -0
- package/dist/lib.js.map +1 -0
- package/package.json +51 -0
- package/skills/build-client/SKILL.md +49 -0
- package/skills/choose-deployment/SKILL.md +48 -0
- package/skills/configure-agentd/SKILL.md +74 -0
- package/skills/configure-policy/SKILL.md +134 -0
- package/skills/detect-system/SKILL.md +69 -0
- package/skills/generate-certs/SKILL.md +54 -0
- package/skills/generate-pairing-code/SKILL.md +87 -0
- package/skills/install-agentd/SKILL.md +46 -0
- package/skills/install-runtime/SKILL.md +49 -0
- package/skills/preflight/SKILL.md +86 -0
- package/skills/setup-activitywatch/SKILL.md +44 -0
- package/skills/setup-chat-bridge/SKILL.md +289 -0
- package/skills/start-agentd/SKILL.md +55 -0
- package/skills/start-chat-bridge/SKILL.md +109 -0
- package/skills/start-stack/SKILL.md +56 -0
- package/skills/verify/SKILL.md +53 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Configure chat platform bridges by selecting platforms, collecting credentials, and writing bridge config
|
|
3
|
+
---
|
|
4
|
+
# Setup Chat Bridge
|
|
5
|
+
|
|
6
|
+
Run these read-only inspection commands to understand the current state:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
# Check if config already exists
|
|
10
|
+
cat config/chat-bridge.toml 2>/dev/null || echo "NO_CONFIG"
|
|
11
|
+
|
|
12
|
+
# Check which gateway secrets are already set in .env
|
|
13
|
+
grep -E '^(DISCORD_BOT_TOKEN|TELEGRAM_BOT_TOKEN|SLACK_BOT_TOKEN|SLACK_APP_TOKEN|TEAMS_TENANT_ID|WHATSAPP_ACCESS_TOKEN|MATRIX_ACCESS_TOKEN|SIGNAL_RECIPIENT|MATTERMOST_TOKEN|GOOGLE_CHAT_WEBHOOK_URL)=' .env 2>/dev/null | sed 's/=.*/=<set>/'
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## What It Does
|
|
17
|
+
|
|
18
|
+
This skill interactively configures one or more chat platform bridges by:
|
|
19
|
+
|
|
20
|
+
1. Asking the user which platforms they want to connect.
|
|
21
|
+
2. Walking them through creating bot credentials on each platform.
|
|
22
|
+
3. Writing `config/chat-bridge.toml` with the correct adapter stanzas.
|
|
23
|
+
4. Setting the required env vars in `.env`.
|
|
24
|
+
|
|
25
|
+
## Interactive Flow
|
|
26
|
+
|
|
27
|
+
Ask the user which platform(s) they want to configure. For each selected platform, walk through the setup guide below, collect the credentials, then write config and env vars.
|
|
28
|
+
|
|
29
|
+
## Platform Setup Guides
|
|
30
|
+
|
|
31
|
+
### Discord
|
|
32
|
+
|
|
33
|
+
1. Go to https://discord.com/developers/applications
|
|
34
|
+
2. Click **New Application**, give it a name, click **Create**.
|
|
35
|
+
3. Go to **Bot** in the left sidebar, click **Reset Token**, copy the token.
|
|
36
|
+
4. Under **Privileged Gateway Intents**, enable **Message Content Intent**.
|
|
37
|
+
5. Go to **OAuth2 > URL Generator**, select scopes `bot` + `applications.commands`, permissions `Send Messages` + `Read Message History`.
|
|
38
|
+
6. Open the generated URL to invite the bot to your server.
|
|
39
|
+
|
|
40
|
+
**Credentials needed:** Bot Token, Application ID (from General Information page)
|
|
41
|
+
|
|
42
|
+
**TOML stanza:**
|
|
43
|
+
|
|
44
|
+
```toml
|
|
45
|
+
[[adapters]]
|
|
46
|
+
type = "discord"
|
|
47
|
+
bot_token = "<DISCORD_BOT_TOKEN>"
|
|
48
|
+
application_id = "<APPLICATION_ID>"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Env vars:** `DISCORD_BOT_TOKEN`
|
|
52
|
+
|
|
53
|
+
### Telegram
|
|
54
|
+
|
|
55
|
+
1. Open https://t.me/BotFather in Telegram.
|
|
56
|
+
2. Send `/newbot`, follow prompts to choose a name and username.
|
|
57
|
+
3. Copy the bot token BotFather gives you.
|
|
58
|
+
|
|
59
|
+
**Credentials needed:** Bot Token
|
|
60
|
+
|
|
61
|
+
**TOML stanza:**
|
|
62
|
+
|
|
63
|
+
```toml
|
|
64
|
+
[[adapters]]
|
|
65
|
+
type = "telegram"
|
|
66
|
+
bot_token = "<TELEGRAM_BOT_TOKEN>"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Env vars:** `TELEGRAM_BOT_TOKEN`
|
|
70
|
+
|
|
71
|
+
### Slack
|
|
72
|
+
|
|
73
|
+
1. Go to https://api.slack.com/apps and click **Create New App > From scratch**.
|
|
74
|
+
2. Under **Socket Mode**, enable it and generate an App-Level Token (begins with `xapp-`).
|
|
75
|
+
3. Under **OAuth & Permissions**, add bot scopes: `chat:write`, `channels:history`, `groups:history`, `im:history`, `mpim:history`.
|
|
76
|
+
4. Install the app to your workspace and copy the Bot User OAuth Token (begins with `xoxb-`).
|
|
77
|
+
5. Under **Event Subscriptions**, enable events and subscribe to `message.channels`, `message.groups`, `message.im`, `message.mpim`.
|
|
78
|
+
|
|
79
|
+
**Credentials needed:** App Token (`xapp-...`), Bot Token (`xoxb-...`)
|
|
80
|
+
|
|
81
|
+
**TOML stanza:**
|
|
82
|
+
|
|
83
|
+
```toml
|
|
84
|
+
[[adapters]]
|
|
85
|
+
type = "slack"
|
|
86
|
+
bot_token = "<SLACK_BOT_TOKEN>"
|
|
87
|
+
app_token = "<SLACK_APP_TOKEN>"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Env vars:** `SLACK_APP_TOKEN`, `SLACK_BOT_TOKEN`
|
|
91
|
+
|
|
92
|
+
### Microsoft Teams
|
|
93
|
+
|
|
94
|
+
1. Go to https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps
|
|
95
|
+
2. Click **New registration**, name it, select **Accounts in this organizational directory only**.
|
|
96
|
+
3. Under **Certificates & secrets**, create a new client secret and copy it.
|
|
97
|
+
4. Note the **Application (client) ID** and **Directory (tenant) ID** from the Overview page.
|
|
98
|
+
5. Under **API permissions**, add `ChannelMessage.Read.All`, `ChannelMessage.Send`, `Team.ReadBasic.All` (application permissions), then grant admin consent.
|
|
99
|
+
6. Get the Team ID and Channel ID from Teams (right-click channel > Get link to channel).
|
|
100
|
+
|
|
101
|
+
**Credentials needed:** Tenant ID, Client ID, Client Secret, Team ID, Channel ID
|
|
102
|
+
|
|
103
|
+
**TOML stanza:**
|
|
104
|
+
|
|
105
|
+
```toml
|
|
106
|
+
[[adapters]]
|
|
107
|
+
type = "teams"
|
|
108
|
+
tenant_id = "<TEAMS_TENANT_ID>"
|
|
109
|
+
client_id = "<TEAMS_CLIENT_ID>"
|
|
110
|
+
client_secret = "<TEAMS_CLIENT_SECRET>"
|
|
111
|
+
team_id = "<TEAM_ID>"
|
|
112
|
+
channel_id = "<CHANNEL_ID>"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Env vars:** `TEAMS_TENANT_ID`, `TEAMS_CLIENT_ID`, `TEAMS_CLIENT_SECRET`
|
|
116
|
+
|
|
117
|
+
### Mattermost
|
|
118
|
+
|
|
119
|
+
1. In your Mattermost instance, go to **Integrations > Bot Accounts > Add Bot Account**.
|
|
120
|
+
2. Copy the access token.
|
|
121
|
+
3. Note the Team ID and Channel ID from the channel URL or API.
|
|
122
|
+
|
|
123
|
+
**Credentials needed:** Base URL (your Mattermost server), Access Token, Team ID, Channel ID
|
|
124
|
+
|
|
125
|
+
**TOML stanza:**
|
|
126
|
+
|
|
127
|
+
```toml
|
|
128
|
+
[[adapters]]
|
|
129
|
+
type = "mattermost"
|
|
130
|
+
base_url = "<MATTERMOST_URL>"
|
|
131
|
+
access_token = "<MATTERMOST_TOKEN>"
|
|
132
|
+
team_id = "<TEAM_ID>"
|
|
133
|
+
channel_id = "<CHANNEL_ID>"
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Env vars:** `MATTERMOST_TOKEN`
|
|
137
|
+
|
|
138
|
+
### WhatsApp
|
|
139
|
+
|
|
140
|
+
1. Go to https://developers.facebook.com/apps and create a new **Business** app.
|
|
141
|
+
2. Add the **WhatsApp** product.
|
|
142
|
+
3. Under **WhatsApp > API Setup**, copy the temporary Access Token, Phone Number ID, and Business Account ID.
|
|
143
|
+
4. For production, create a System User token with `whatsapp_business_messaging` permission.
|
|
144
|
+
|
|
145
|
+
**Credentials needed:** Access Token, Phone Number ID, Business Account ID
|
|
146
|
+
|
|
147
|
+
**TOML stanza:**
|
|
148
|
+
|
|
149
|
+
```toml
|
|
150
|
+
[[adapters]]
|
|
151
|
+
type = "whatsapp"
|
|
152
|
+
access_token = "<WHATSAPP_ACCESS_TOKEN>"
|
|
153
|
+
phone_number_id = "<PHONE_NUMBER_ID>"
|
|
154
|
+
business_account_id = "<BUSINESS_ACCOUNT_ID>"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Env vars:** `WHATSAPP_ACCESS_TOKEN`
|
|
158
|
+
|
|
159
|
+
### Matrix
|
|
160
|
+
|
|
161
|
+
1. On your Matrix homeserver, create a bot user or use an existing account.
|
|
162
|
+
2. Generate an access token via `curl -XPOST 'https://<homeserver>/_matrix/client/r0/login' -d '{"type":"m.login.password","user":"<username>","password":"<password>"}'`.
|
|
163
|
+
3. Note the homeserver URL, access token, and full user ID (`@user:server`).
|
|
164
|
+
|
|
165
|
+
**Credentials needed:** Homeserver URL, Access Token, User ID
|
|
166
|
+
|
|
167
|
+
**TOML stanza:**
|
|
168
|
+
|
|
169
|
+
```toml
|
|
170
|
+
[[adapters]]
|
|
171
|
+
type = "matrix"
|
|
172
|
+
homeserver_url = "<MATRIX_HOMESERVER>"
|
|
173
|
+
access_token = "<MATRIX_ACCESS_TOKEN>"
|
|
174
|
+
user_id = "<USER_ID>"
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Env vars:** `MATRIX_HOMESERVER`, `MATRIX_ACCESS_TOKEN`
|
|
178
|
+
|
|
179
|
+
### Signal
|
|
180
|
+
|
|
181
|
+
1. Install `signal-cli` and register or link a phone number.
|
|
182
|
+
2. Run `signal-cli` in daemon/JSON-RPC mode: `signal-cli -u +<NUMBER> daemon --json-rpc`.
|
|
183
|
+
3. The default signal-cli URL is `http://127.0.0.1:8080`.
|
|
184
|
+
|
|
185
|
+
**Credentials needed:** Phone Number, signal-cli URL (if non-default)
|
|
186
|
+
|
|
187
|
+
**TOML stanza:**
|
|
188
|
+
|
|
189
|
+
```toml
|
|
190
|
+
[[adapters]]
|
|
191
|
+
type = "signal"
|
|
192
|
+
phone_number = "<PHONE_NUMBER>"
|
|
193
|
+
signal_cli_url = "http://127.0.0.1:8080"
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Env vars:** `SIGNAL_RECIPIENT`
|
|
197
|
+
|
|
198
|
+
### Google Chat
|
|
199
|
+
|
|
200
|
+
1. Go to https://console.cloud.google.com, create or select a project.
|
|
201
|
+
2. Enable the **Google Chat API**.
|
|
202
|
+
3. Create a **Service Account**, download the JSON key file.
|
|
203
|
+
4. In **Google Chat API > Configuration**, configure the bot and note the Space ID.
|
|
204
|
+
|
|
205
|
+
**Credentials needed:** Path to service account JSON file, Space ID
|
|
206
|
+
|
|
207
|
+
**TOML stanza:**
|
|
208
|
+
|
|
209
|
+
```toml
|
|
210
|
+
[[adapters]]
|
|
211
|
+
type = "google_chat"
|
|
212
|
+
service_account_json = "<PATH_TO_SERVICE_ACCOUNT_JSON>"
|
|
213
|
+
space_id = "<SPACE_ID>"
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Env vars:** `GOOGLE_CHAT_WEBHOOK_URL`
|
|
217
|
+
|
|
218
|
+
### iMessage (via BlueBubbles)
|
|
219
|
+
|
|
220
|
+
1. Install and run BlueBubbles server on a Mac: https://bluebubbles.app
|
|
221
|
+
2. Note the server URL and server password from BlueBubbles settings.
|
|
222
|
+
|
|
223
|
+
**Credentials needed:** Server URL, Server Password
|
|
224
|
+
|
|
225
|
+
**TOML stanza:**
|
|
226
|
+
|
|
227
|
+
```toml
|
|
228
|
+
[[adapters]]
|
|
229
|
+
type = "imessage"
|
|
230
|
+
server_url = "<BLUEBUBBLES_SERVER_URL>"
|
|
231
|
+
server_password = "<SERVER_PASSWORD>"
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**Env vars:** None (config-only)
|
|
235
|
+
|
|
236
|
+
## Mutation Commands
|
|
237
|
+
|
|
238
|
+
After collecting credentials from the user, write the config and env vars:
|
|
239
|
+
|
|
240
|
+
### Write config/chat-bridge.toml
|
|
241
|
+
|
|
242
|
+
Assemble the file from the selected platform stanzas. Example for Discord + Telegram:
|
|
243
|
+
|
|
244
|
+
```toml
|
|
245
|
+
[[adapters]]
|
|
246
|
+
type = "discord"
|
|
247
|
+
bot_token = "MTIz..."
|
|
248
|
+
application_id = "1234567890"
|
|
249
|
+
|
|
250
|
+
[[adapters]]
|
|
251
|
+
type = "telegram"
|
|
252
|
+
bot_token = "7654321:AAH..."
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Set env vars in .env
|
|
256
|
+
|
|
257
|
+
Use the idempotent pattern (same as `configure-agentd`):
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
grep -q '^CHAT_BRIDGE_CONFIG=' .env || echo 'CHAT_BRIDGE_CONFIG=config/chat-bridge.toml' >> .env
|
|
261
|
+
|
|
262
|
+
# Generate a random admin token if not already set
|
|
263
|
+
grep -q '^CHAT_BRIDGE_ADMIN_TOKEN=.' .env || echo "CHAT_BRIDGE_ADMIN_TOKEN=$(openssl rand -hex 32)" >> .env
|
|
264
|
+
|
|
265
|
+
# Per-platform env vars (set for each configured platform)
|
|
266
|
+
grep -q '^DISCORD_BOT_TOKEN=' .env && sed -i 's|^DISCORD_BOT_TOKEN=.*|DISCORD_BOT_TOKEN=<collected-value>|' .env || echo 'DISCORD_BOT_TOKEN=<collected-value>' >> .env
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Repeat the `grep -q ... && sed -i ... || echo ...` pattern for each platform-specific env var.
|
|
270
|
+
|
|
271
|
+
## Prerequisites
|
|
272
|
+
|
|
273
|
+
- `.env` exists (run `configure-agentd` first if missing).
|
|
274
|
+
- `config/` directory exists.
|
|
275
|
+
|
|
276
|
+
## Expected Output
|
|
277
|
+
|
|
278
|
+
- `config/chat-bridge.toml` written with selected adapter stanzas.
|
|
279
|
+
- Platform credentials set in `.env`.
|
|
280
|
+
- `CHAT_BRIDGE_CONFIG` and `CHAT_BRIDGE_ADMIN_TOKEN` set in `.env`.
|
|
281
|
+
|
|
282
|
+
## Common Failures
|
|
283
|
+
|
|
284
|
+
| Symptom | Cause | Fix |
|
|
285
|
+
|---------|-------|-----|
|
|
286
|
+
| `.env` does not exist | `configure-agentd` not run | Run `configure-agentd` skill first |
|
|
287
|
+
| `config/` directory missing | Not at repository root | `cd` to smith-core root |
|
|
288
|
+
| Invalid bot token at runtime | Token was revoked or mistyped | Re-run this skill to update credentials |
|
|
289
|
+
| TOML parse error on daemon start | Malformed config | Check quoting in `config/chat-bridge.toml` |
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Start agentd with committed baseline config and verify process health
|
|
3
|
+
---
|
|
4
|
+
# Start Agentd
|
|
5
|
+
|
|
6
|
+
Run:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
cargo run --manifest-path agent/agentd/Cargo.toml --features grpc --bin agentd -- run \
|
|
10
|
+
--config ${AGENTD_CONFIG:-agent/agentd/config/agentd.toml} \
|
|
11
|
+
--capability-digest ${AGENTD_CAPABILITY_DIGEST:-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef}
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## What It Does
|
|
15
|
+
|
|
16
|
+
This skill launches `agentd` directly from source using the valid CLI shape.
|
|
17
|
+
|
|
18
|
+
1. Runs the explicit `agentd` bin target (multi-bin workspace-safe).
|
|
19
|
+
2. Enables gRPC feature for Envoy JSON transcoding compatibility.
|
|
20
|
+
3. Uses committed `agentd` config instead of insecure fallback parsing.
|
|
21
|
+
4. Supplies required `--capability-digest` argument.
|
|
22
|
+
|
|
23
|
+
## Prerequisites
|
|
24
|
+
|
|
25
|
+
- `agentd` build completed successfully.
|
|
26
|
+
- Required infrastructure services available if runtime depends on them.
|
|
27
|
+
|
|
28
|
+
## Expected Output
|
|
29
|
+
|
|
30
|
+
- Process starts without immediate panic.
|
|
31
|
+
- Startup logs indicate daemon initialization and gRPC listener startup.
|
|
32
|
+
|
|
33
|
+
## Reading Results
|
|
34
|
+
|
|
35
|
+
- Keep process attached while testing bridge/gateway flows.
|
|
36
|
+
- If process exits, inspect final error lines for missing config or dependency issues.
|
|
37
|
+
- On macOS, ensure `.env` includes `SMITH_EXECUTOR_VM_POOL_ENABLED=true` and
|
|
38
|
+
`SMITH_EXECUTOR_VM_METHOD=gondolin` to use the Gondolin sandbox path.
|
|
39
|
+
|
|
40
|
+
## Common Failures
|
|
41
|
+
|
|
42
|
+
| Symptom | Cause | Fix |
|
|
43
|
+
|---------|-------|-----|
|
|
44
|
+
| `could not determine which binary to run` | Missing `--bin agentd` | Use full command shown above |
|
|
45
|
+
| `Failed to load config` | Wrong/missing config path | Set `AGENTD_CONFIG` to a valid agentd TOML |
|
|
46
|
+
| `Refusing all-zero capability digest` | Placeholder digest left at zero | Set real `AGENTD_CAPABILITY_DIGEST`, or opt in with `SMITH_ALLOW_ZERO_CAPABILITY_DIGEST=1` for local-only testing |
|
|
47
|
+
| `--capability-digest` required | Missing mandatory flag | Provide 64-char hex digest (env or inline) |
|
|
48
|
+
| Port already in use | Conflicting process | Stop conflicting process or change `AGENTD_GRPC_LISTEN` |
|
|
49
|
+
| Cannot connect to NATS/DB | Stack not running or wrong URL | Start stack and fix endpoint vars |
|
|
50
|
+
| TLS-related errors | Missing cert files for strict modes | Generate certs and verify mounts/env |
|
|
51
|
+
|
|
52
|
+
## Notes
|
|
53
|
+
|
|
54
|
+
Use a separate terminal session so logs remain visible during installer verification.
|
|
55
|
+
For development-only fallback behavior, run the same command with `SMITH_EXECUTOR_ALLOW_INSECURE_FALLBACK=1 SMITH_ALLOW_ZERO_CAPABILITY_DIGEST=1`.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Start the chat bridge daemon and platform gateway processes
|
|
3
|
+
---
|
|
4
|
+
# Start Chat Bridge
|
|
5
|
+
|
|
6
|
+
Run these read-only inspection commands to understand the current state:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
# Verify config exists
|
|
10
|
+
test -f "${CHAT_BRIDGE_CONFIG:-config/chat-bridge.toml}" && echo "CONFIG_OK" || echo "NO_CONFIG"
|
|
11
|
+
|
|
12
|
+
# Check which platforms are configured
|
|
13
|
+
grep '^type = ' "${CHAT_BRIDGE_CONFIG:-config/chat-bridge.toml}" 2>/dev/null
|
|
14
|
+
|
|
15
|
+
# Check if daemon/gateways are already running
|
|
16
|
+
pgrep -f smith-chat-daemon && echo "DAEMON_RUNNING" || echo "DAEMON_NOT_RUNNING"
|
|
17
|
+
pgrep -af 'smith-.*-gateway' 2>/dev/null || echo "NO_GATEWAYS_RUNNING"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## What It Does
|
|
21
|
+
|
|
22
|
+
This skill starts the chat bridge daemon and the correct gateway binary for each configured platform adapter. The daemon handles inbound message routing, session management, and the admin/webhook API. Each gateway connects to its platform (Discord WebSocket, Telegram polling, etc.) and publishes messages to NATS for the daemon to consume.
|
|
23
|
+
|
|
24
|
+
## Start Sequence
|
|
25
|
+
|
|
26
|
+
### 1. Start the daemon
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
cargo run -p smith-chat --features webhooks --bin smith-chat-daemon
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The daemon reads `CHAT_BRIDGE_CONFIG` (defaults to `config/chat-bridge.toml`) and starts the webhook server on `CHAT_BRIDGE_WEBHOOK_PORT` (defaults to 8092).
|
|
33
|
+
|
|
34
|
+
Start this in a separate terminal or background it with log redirection:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
cargo run -p smith-chat --features webhooks --bin smith-chat-daemon 2>&1 | tee logs/chat-daemon.log &
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 2. Start gateway(s) for each configured platform
|
|
41
|
+
|
|
42
|
+
Parse the `type = ` values from the config and start the matching gateway binary:
|
|
43
|
+
|
|
44
|
+
| Config `type =` | Binary name | Required env vars |
|
|
45
|
+
|-----------------|-------------|-------------------|
|
|
46
|
+
| `discord` | `smith-discord-gateway` | `DISCORD_BOT_TOKEN` |
|
|
47
|
+
| `telegram` | `smith-telegram-gateway` | `TELEGRAM_BOT_TOKEN` |
|
|
48
|
+
| `slack` | `smith-slack-gateway` | `SLACK_APP_TOKEN`, `SLACK_BOT_TOKEN` |
|
|
49
|
+
| `teams` | `smith-teams-gateway` | `TEAMS_TENANT_ID`, `TEAMS_CLIENT_ID`, `TEAMS_CLIENT_SECRET` |
|
|
50
|
+
| `mattermost` | `smith-mattermost-gateway` | `MATTERMOST_TOKEN` |
|
|
51
|
+
| `whatsapp` | `smith-whatsapp-gateway` | `WHATSAPP_ACCESS_TOKEN` |
|
|
52
|
+
| `matrix` | `smith-matrix-gateway` | `MATRIX_ACCESS_TOKEN` |
|
|
53
|
+
| `signal` | `smith-signal-gateway` | `SIGNAL_RECIPIENT` |
|
|
54
|
+
| `google_chat` | `smith-google-chat-gateway` | `GOOGLE_CHAT_WEBHOOK_URL` |
|
|
55
|
+
| `imessage` | `smith-imessage-gateway` | (config-only) |
|
|
56
|
+
|
|
57
|
+
Start each gateway with:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
cargo run -p smith-chat --bin <binary-name>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
For example, for Discord:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
cargo run -p smith-chat --bin smith-discord-gateway 2>&1 | tee logs/discord-gateway.log &
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Each gateway should run in its own terminal or backgrounded process.
|
|
70
|
+
|
|
71
|
+
## Prerequisites
|
|
72
|
+
|
|
73
|
+
- `config/chat-bridge.toml` exists and has at least one `[[adapters]]` stanza (run `setup-chat-bridge` first).
|
|
74
|
+
- Platform credentials set in `.env` for each configured adapter.
|
|
75
|
+
- Docker stack running (NATS and Redis required by daemon).
|
|
76
|
+
- Rust workspace built (`cargo build -p smith-chat`).
|
|
77
|
+
|
|
78
|
+
## Expected Output
|
|
79
|
+
|
|
80
|
+
- Daemon logs: `Starting chat bridge daemon` and `Starting webhook ingestion server`.
|
|
81
|
+
- Gateway logs: platform-specific ready message (e.g., `Discord bot is READY`).
|
|
82
|
+
- Processes visible via `pgrep -f smith-chat-daemon` and `pgrep -f gateway`.
|
|
83
|
+
|
|
84
|
+
## Common Failures
|
|
85
|
+
|
|
86
|
+
| Symptom | Cause | Fix |
|
|
87
|
+
|---------|-------|-----|
|
|
88
|
+
| `NO_CONFIG` | Config file missing | Run `setup-chat-bridge` skill first |
|
|
89
|
+
| `failed to read chat bridge config` | Wrong `CHAT_BRIDGE_CONFIG` path | Check `.env` value matches actual file location |
|
|
90
|
+
| `failed to connect to NATS` | NATS not running | `docker compose up -d nats` |
|
|
91
|
+
| `failed to connect to redis` | Redis not running | `docker compose up -d redis` |
|
|
92
|
+
| Gateway missing env var | Credential not set in `.env` | Run `setup-chat-bridge` to set credentials |
|
|
93
|
+
| Port 8092 already in use | Another daemon instance running | Kill existing process or change `CHAT_BRIDGE_WEBHOOK_PORT` |
|
|
94
|
+
| `could not determine which binary to run` | Missing `--bin` flag | Use full `--bin <name>` as shown above |
|
|
95
|
+
|
|
96
|
+
## Notes
|
|
97
|
+
|
|
98
|
+
Use separate terminal sessions so logs remain visible. For convenience, create a `logs/` directory first:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
mkdir -p logs
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
To stop all chat bridge processes:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
pkill -f smith-chat-daemon
|
|
108
|
+
pkill -f 'smith-.*-gateway'
|
|
109
|
+
```
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Start the Smith Core infrastructure stack with Docker Compose
|
|
3
|
+
---
|
|
4
|
+
# Start Stack
|
|
5
|
+
|
|
6
|
+
Run:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
bash infra/envoy/certs/generate-certs.sh
|
|
10
|
+
docker compose up -d
|
|
11
|
+
docker compose ps
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## What It Does
|
|
15
|
+
|
|
16
|
+
This skill launches the local infrastructure dependencies.
|
|
17
|
+
|
|
18
|
+
1. Ensures local Envoy mTLS certs exist before container startup.
|
|
19
|
+
2. Starts NATS, Postgres, Redis, ClickHouse, Grafana, OPA, Envoy, and MCP services.
|
|
20
|
+
3. Ensures background containers are running.
|
|
21
|
+
4. Gives a service-level health snapshot via `docker compose ps`.
|
|
22
|
+
5. Establishes prerequisites for bridge and service processes.
|
|
23
|
+
|
|
24
|
+
## Prerequisites
|
|
25
|
+
|
|
26
|
+
- Docker and Compose available.
|
|
27
|
+
- Ports required by the stack are free.
|
|
28
|
+
|
|
29
|
+
## Expected Output
|
|
30
|
+
|
|
31
|
+
- Cert generation exits successfully (or reports existing certs).
|
|
32
|
+
- `docker compose up -d` exits successfully.
|
|
33
|
+
- `docker compose ps` shows core services as `running` or `healthy`.
|
|
34
|
+
|
|
35
|
+
## Reading Results
|
|
36
|
+
|
|
37
|
+
Focus on these critical services:
|
|
38
|
+
|
|
39
|
+
- `smith-nats`
|
|
40
|
+
- `smith-postgres`
|
|
41
|
+
- `smith-envoy`
|
|
42
|
+
- `smith-mcp-index`
|
|
43
|
+
|
|
44
|
+
## Common Failures
|
|
45
|
+
|
|
46
|
+
| Symptom | Cause | Fix |
|
|
47
|
+
|---------|-------|-----|
|
|
48
|
+
| Container exits immediately | Bad env/config | Inspect `docker compose logs <service>` |
|
|
49
|
+
| Envoy fails with cert path errors | Certs not generated/mounted | Run `bash infra/envoy/certs/generate-certs.sh` and retry |
|
|
50
|
+
| Port bind error | Port already in use | Free the port or remap in compose |
|
|
51
|
+
| Image pull/build failure | Network or registry failure | Retry after network recovery |
|
|
52
|
+
| Healthcheck stuck | Dependency not ready | Check dependent service logs |
|
|
53
|
+
|
|
54
|
+
## Notes
|
|
55
|
+
|
|
56
|
+
Use `docker compose down` to stop the stack.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Verify the full Smith Core bootstrap state after install steps
|
|
3
|
+
---
|
|
4
|
+
# Verify
|
|
5
|
+
|
|
6
|
+
Run:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
cargo check --workspace
|
|
10
|
+
cargo check --manifest-path agent/agentd/Cargo.toml --features grpc --bin agentd
|
|
11
|
+
npm run build --workspaces --if-present
|
|
12
|
+
docker compose ps
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## What It Does
|
|
16
|
+
|
|
17
|
+
This skill validates that core components are buildable and infrastructure is running.
|
|
18
|
+
|
|
19
|
+
1. Checks Rust root workspace.
|
|
20
|
+
2. Checks `agentd` workspace.
|
|
21
|
+
3. Builds Node workspaces.
|
|
22
|
+
4. Confirms Docker services are active.
|
|
23
|
+
|
|
24
|
+
## Prerequisites
|
|
25
|
+
|
|
26
|
+
- Dependencies installed.
|
|
27
|
+
- Docker stack started.
|
|
28
|
+
|
|
29
|
+
## Expected Output
|
|
30
|
+
|
|
31
|
+
- All check/build commands exit with status 0.
|
|
32
|
+
- `docker compose ps` shows core services up.
|
|
33
|
+
|
|
34
|
+
## Reading Results
|
|
35
|
+
|
|
36
|
+
Installation is considered healthy when:
|
|
37
|
+
|
|
38
|
+
- Rust checks pass.
|
|
39
|
+
- Node workspace build passes.
|
|
40
|
+
- Core services (`nats`, `postgres`, `envoy`, `mcp-index`) are running.
|
|
41
|
+
|
|
42
|
+
## Common Failures
|
|
43
|
+
|
|
44
|
+
| Symptom | Cause | Fix |
|
|
45
|
+
|---------|-------|-----|
|
|
46
|
+
| Rust check failures | Code/toolchain mismatch | Fix compile issues and rerun |
|
|
47
|
+
| npm build failures | TS/dependency issue | Resolve workspace build errors |
|
|
48
|
+
| Containers not running | Compose/startup failure | Inspect compose logs and restart |
|
|
49
|
+
| Intermittent health failures | Service startup race | Wait and re-run verification |
|
|
50
|
+
|
|
51
|
+
## Notes
|
|
52
|
+
|
|
53
|
+
This is the final gate for local release-readiness confidence.
|