mercury-agent 0.5.0 → 0.5.2

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 (125) hide show
  1. package/README.md +452 -451
  2. package/container/Dockerfile +127 -127
  3. package/container/Dockerfile.base +109 -109
  4. package/container/Dockerfile.power +17 -17
  5. package/container/agent-package.json +8 -8
  6. package/container/build.sh +54 -54
  7. package/docs/ROADMAP.md +3 -4
  8. package/docs/archive/summarization/2026-07-02-recent-dev-summary.md +71 -0
  9. package/docs/auth/dashboard.md +28 -28
  10. package/docs/auth/overview.md +109 -109
  11. package/docs/auth/whatsapp.md +173 -173
  12. package/docs/authoring-profiles.md +174 -174
  13. package/docs/configuration.md +54 -54
  14. package/docs/container-lifecycle.md +349 -349
  15. package/docs/{bugs/bwrap-privileged-linux-docker.md → debug/major/2026-07-02-bwrap-privileged-linux-docker.md} +21 -1
  16. package/docs/{bugs/e2big-prompt-delivery-fix.md → debug/major/2026-07-02-e2big-prompt-delivery-fix.md} +27 -1
  17. package/docs/{bugs/registry-pull-no-local-fallback.md → debug/major/2026-07-02-registry-pull-no-local-fallback.md} +27 -1
  18. package/docs/debug/summarization/2026-07-02-common-bug-patterns.md +72 -0
  19. package/docs/deployment.md +199 -199
  20. package/docs/extensions.md +375 -375
  21. package/docs/graceful-shutdown.md +62 -62
  22. package/docs/kb-distillation.md +77 -77
  23. package/docs/media/overview.md +140 -140
  24. package/docs/media/whatsapp.md +171 -171
  25. package/docs/memory.md +137 -137
  26. package/docs/permissions.md +217 -217
  27. package/docs/pipeline.md +228 -228
  28. package/docs/prd-chat-memory.md +76 -76
  29. package/docs/prd-config-load.md +82 -82
  30. package/docs/rate-limiting.md +229 -229
  31. package/docs/runbooks/publish-checklist.md +9 -1
  32. package/docs/scheduler.md +288 -288
  33. package/docs/setup-discord.md +100 -100
  34. package/docs/setup-slack.md +119 -119
  35. package/docs/setup-whatsapp.md +94 -94
  36. package/docs/subagents.md +166 -166
  37. package/docs/web-search.md +62 -62
  38. package/examples/extensions/README.md +12 -12
  39. package/examples/extensions/charts/index.ts +13 -13
  40. package/examples/extensions/charts/skill/SKILL.md +98 -98
  41. package/examples/extensions/gws/README.md +52 -52
  42. package/examples/extensions/gws/skill/SKILL.md +57 -57
  43. package/examples/extensions/gws/skill/references/calendar.md +101 -101
  44. package/examples/extensions/gws/skill/references/docs.md +65 -65
  45. package/examples/extensions/gws/skill/references/drive.md +79 -79
  46. package/examples/extensions/gws/skill/references/gmail.md +85 -85
  47. package/examples/extensions/gws/skill/references/sheets.md +60 -60
  48. package/examples/extensions/napkin/skill/SKILL.md +728 -728
  49. package/examples/extensions/pdf/skill/LICENSE.txt +30 -30
  50. package/examples/extensions/pdf/skill/SKILL.md +314 -314
  51. package/examples/extensions/pdf/skill/forms.md +294 -294
  52. package/examples/extensions/pdf/skill/reference.md +611 -611
  53. package/examples/extensions/pdf/skill/scripts/check_bounding_boxes.py +65 -65
  54. package/examples/extensions/pdf/skill/scripts/check_fillable_fields.py +11 -11
  55. package/examples/extensions/pdf/skill/scripts/convert_pdf_to_images.py +33 -33
  56. package/examples/extensions/pdf/skill/scripts/create_validation_image.py +37 -37
  57. package/examples/extensions/pdf/skill/scripts/extract_form_field_info.py +122 -122
  58. package/examples/extensions/pdf/skill/scripts/extract_form_structure.py +115 -115
  59. package/examples/extensions/pdf/skill/scripts/fill_fillable_fields.py +98 -98
  60. package/examples/extensions/pdf/skill/scripts/fill_pdf_form_with_annotations.py +107 -107
  61. package/examples/extensions/permission-guard/index.ts +65 -65
  62. package/examples/extensions/pinchtab/skill/SKILL.md +224 -224
  63. package/examples/extensions/pinchtab/skill/TRUST.md +69 -69
  64. package/examples/extensions/pinchtab/skill/references/api.md +297 -297
  65. package/examples/extensions/pinchtab/skill/references/env.md +45 -45
  66. package/examples/extensions/pinchtab/skill/references/profiles.md +107 -107
  67. package/examples/extensions/tradestation/host/refresh.ts +102 -102
  68. package/examples/extensions/tradestation/index.ts +153 -153
  69. package/examples/extensions/tradestation/skill/SKILL.md +67 -67
  70. package/examples/extensions/voice-synth/index.ts +94 -94
  71. package/examples/extensions/voice-synth/skill/SKILL.md +38 -38
  72. package/examples/extensions/voice-transcribe/requirements.txt +8 -8
  73. package/examples/extensions/voice-transcribe/scripts/transcribe.py +179 -179
  74. package/examples/extensions/voice-transcribe/skill/SKILL.md +53 -53
  75. package/examples/extensions/yahoo-mail/cli/package.json +13 -13
  76. package/examples/extensions/yahoo-mail/skill/SKILL.md +78 -78
  77. package/package.json +106 -106
  78. package/resources/agents/explore.md +50 -50
  79. package/resources/agents/worker.md +24 -24
  80. package/resources/connection-env-vars.json +25 -25
  81. package/resources/pi-extensions/subagent/agents.ts +126 -126
  82. package/resources/pi-extensions/subagent/index.ts +964 -964
  83. package/resources/profiles/coding/AGENTS.md +43 -43
  84. package/resources/profiles/coding/mercury-profile.yaml +15 -15
  85. package/resources/profiles/general/AGENTS.md +31 -31
  86. package/resources/profiles/general/mercury-profile.yaml +15 -15
  87. package/resources/profiles/research/AGENTS.md +40 -40
  88. package/resources/profiles/research/mercury-profile.yaml +15 -15
  89. package/resources/skills/config/SKILL.md +25 -25
  90. package/resources/skills/context/SKILL.md +33 -33
  91. package/resources/skills/conversation-recap/SKILL.md +19 -19
  92. package/resources/skills/mutes/SKILL.md +31 -31
  93. package/resources/skills/permissions/SKILL.md +19 -19
  94. package/resources/skills/preferences/SKILL.md +31 -31
  95. package/resources/skills/recall/SKILL.md +24 -24
  96. package/resources/skills/roles/SKILL.md +18 -18
  97. package/resources/skills/spaces/SKILL.md +18 -18
  98. package/resources/skills/tasks/SKILL.md +45 -45
  99. package/resources/templates/AGENTS.md +157 -157
  100. package/resources/templates/env.template +38 -38
  101. package/resources/templates/mercury.example.yaml +99 -99
  102. package/src/agent/container-entry.ts +1 -1
  103. package/src/agent/container-runner.ts +1345 -1346
  104. package/src/cli/mercury.ts +39 -7
  105. package/src/cli/mrctl.ts +636 -636
  106. package/src/config-file.ts +540 -540
  107. package/src/config.ts +339 -339
  108. package/src/core/api.ts +125 -125
  109. package/src/core/caller-token.ts +101 -101
  110. package/src/core/permissions.ts +228 -228
  111. package/src/core/profiles.ts +271 -271
  112. package/src/core/routes/capability.ts +70 -70
  113. package/src/core/routes/index.ts +15 -15
  114. package/src/core/runtime.ts +1530 -1530
  115. package/src/dashboard/index.html +729 -729
  116. package/src/extensions/api.ts +273 -273
  117. package/src/extensions/loader.ts +286 -286
  118. package/src/extensions/types.ts +517 -517
  119. package/src/main.ts +605 -605
  120. package/docs/pending-updates/applicative-profiles.md +0 -15
  121. package/docs/pending-updates/caller-bound-capability-token.md +0 -15
  122. package/docs/pending-updates/dm-auto-space.md +0 -15
  123. /package/docs/archive/{2026-07-01-applicative-profiles.md → applicative-profiles/2026-07-01-applicative-profiles.md} +0 -0
  124. /package/docs/archive/{2026-07-01-caller-bound-capability-token.md → applicative-profiles/2026-07-01-caller-bound-capability-token.md} +0 -0
  125. /package/docs/archive/{2026-07-01-dm-auto-space.md → applicative-profiles/2026-07-01-dm-auto-space.md} +0 -0
@@ -1,173 +1,173 @@
1
- # WhatsApp Authentication
2
-
3
- Mercury connects to WhatsApp using the [Baileys](https://github.com/WhiskeySockets/Baileys) library, which implements the WhatsApp Web protocol. This means you need to link your WhatsApp account just like you would link WhatsApp Web.
4
-
5
- ## Initial Setup
6
-
7
- ### QR Code Mode (Recommended)
8
-
9
- The simplest way to authenticate:
10
-
11
- ```bash
12
- mercury auth whatsapp
13
- ```
14
-
15
- This will:
16
- 1. Display a QR code in your terminal
17
- 2. Wait for you to scan it with WhatsApp
18
- 3. Save credentials to `.mercury/whatsapp-auth/`
19
- 4. Exit when authentication is complete
20
-
21
- **To scan:**
22
- 1. Open WhatsApp on your phone
23
- 2. Tap **Settings → Linked Devices → Link a Device**
24
- 3. Point your camera at the QR code
25
-
26
- ### Pairing Code Mode
27
-
28
- If you can't scan QR codes (e.g., running on a remote server), use pairing code mode:
29
-
30
- ```bash
31
- mercury auth whatsapp --pairing-code --phone 14155551234
32
- ```
33
-
34
- Replace `14155551234` with your phone number (country code + number, no `+` or spaces).
35
-
36
- This will:
37
- 1. Request a pairing code from WhatsApp
38
- 2. Display an 8-character code
39
- 3. Wait for you to enter it on your phone
40
-
41
- **To pair:**
42
- 1. Open WhatsApp on your phone
43
- 2. Tap **Settings → Linked Devices → Link a Device**
44
- 3. Tap **"Link with phone number instead"**
45
- 4. Enter the code shown in your terminal
46
-
47
- ## Session Lifecycle
48
-
49
- ### Session Duration
50
-
51
- WhatsApp linked device sessions typically last **~14-20 days** before requiring re-authentication. This is controlled by WhatsApp, not Mercury.
52
-
53
- Signs your session has expired:
54
- - WhatsApp stops receiving messages
55
- - Logs show `connection closed` with `loggedOut` reason
56
- - Status file shows `failed:logged_out`
57
-
58
- ### Re-authentication
59
-
60
- If your session expires:
61
-
62
- 1. **Stop Mercury** (if running):
63
- ```bash
64
- # Ctrl+C in the terminal running mercury, or
65
- pkill -f "bun.*chat-sdk"
66
- ```
67
-
68
- 2. **Delete old credentials**:
69
- ```bash
70
- rm -rf .mercury/whatsapp-auth/
71
- ```
72
-
73
- 3. **Re-authenticate**:
74
- ```bash
75
- mercury auth whatsapp
76
- ```
77
-
78
- 4. **Restart Mercury**:
79
- ```bash
80
- mercury run
81
- ```
82
-
83
- ## Status Files
84
-
85
- The auth script writes status files for external monitoring (useful for headless deployments):
86
-
87
- | File | Description |
88
- |------|-------------|
89
- | `.mercury/whatsapp-status.txt` | Current status (`authenticated`, `waiting_qr`, `pairing_code:XXXX`, `failed:reason`) |
90
- | `.mercury/whatsapp-qr.txt` | Raw QR data for external rendering (deleted after successful auth) |
91
-
92
- ### Status Values
93
-
94
- - `authenticated` — Successfully connected
95
- - `already_authenticated` — Existing valid session found
96
- - `waiting_qr` — Waiting for QR code scan
97
- - `pairing_code:XXXXXXXX` — Waiting for pairing code entry
98
- - `failed:logged_out` — Session was logged out by WhatsApp
99
- - `failed:qr_timeout` — QR code expired before scan
100
- - `failed:515` — Stream error (usually recovers automatically)
101
- - `failed:unknown` — Other connection failure
102
-
103
- ## Auth Status API Endpoint
104
-
105
- When Mercury is running, you can check auth status via the API:
106
-
107
- ```bash
108
- curl http://localhost:8787/auth/whatsapp
109
- ```
110
-
111
- **Responses:**
112
-
113
- ```json
114
- // Authenticated and connected
115
- { "status": "authenticated" }
116
-
117
- // Waiting for QR scan (includes raw QR data)
118
- { "status": "waiting", "qr": "2@AbCdEf123..." }
119
-
120
- // Disconnected or not yet connected
121
- { "status": "disconnected" }
122
- ```
123
-
124
- This endpoint requires no authentication, making it suitable for headless monitoring dashboards.
125
-
126
- ## Troubleshooting
127
-
128
- ### "Already authenticated"
129
-
130
- If you see this but WhatsApp isn't working:
131
- ```bash
132
- rm -rf .mercury/whatsapp-auth/
133
- mercury auth whatsapp
134
- ```
135
-
136
- ### QR code times out too quickly
137
-
138
- WhatsApp QR codes expire after ~20 seconds. If you're having trouble:
139
- 1. Have your phone ready before running the command
140
- 2. Use `--pairing-code` mode instead
141
-
142
- ### "Stream error (515)"
143
-
144
- This is usually transient and the auth script will automatically reconnect. If it persists:
145
- ```bash
146
- rm -rf .mercury/whatsapp-auth/
147
- mercury auth whatsapp
148
- ```
149
-
150
- ### WhatsApp shows "Linked Device" but Mercury doesn't receive messages
151
-
152
- 1. Check that `MERCURY_ENABLE_WHATSAPP=true` is set in `.env`
153
- 2. Check logs for connection errors
154
- 3. Try re-authenticating
155
-
156
- ### Messages from before startup appear
157
-
158
- Mercury ignores messages that were sent before it connected to prevent processing old backlog. This is intentional.
159
-
160
- ## Environment Variables
161
-
162
- | Variable | Default | Description |
163
- |----------|---------|-------------|
164
- | `MERCURY_ENABLE_WHATSAPP` | `false` | Enable WhatsApp adapter |
165
- | `MERCURY_WHATSAPP_AUTH_DIR` | `.mercury/whatsapp-auth` | Directory for auth credentials |
166
- | `MERCURY_DATA_DIR` | `.mercury` | Base data directory (auth dir is relative to this) |
167
-
168
- ## Security Notes
169
-
170
- - Auth credentials in `.mercury/whatsapp-auth/` are sensitive — treat them like passwords
171
- - Anyone with access to these files can impersonate your WhatsApp account
172
- - The `/auth/whatsapp` endpoint is unauthenticated — only expose your API port to trusted networks
173
- - Consider using a dedicated WhatsApp number for your bot
1
+ # WhatsApp Authentication
2
+
3
+ Mercury connects to WhatsApp using the [Baileys](https://github.com/WhiskeySockets/Baileys) library, which implements the WhatsApp Web protocol. This means you need to link your WhatsApp account just like you would link WhatsApp Web.
4
+
5
+ ## Initial Setup
6
+
7
+ ### QR Code Mode (Recommended)
8
+
9
+ The simplest way to authenticate:
10
+
11
+ ```bash
12
+ mercury auth whatsapp
13
+ ```
14
+
15
+ This will:
16
+ 1. Display a QR code in your terminal
17
+ 2. Wait for you to scan it with WhatsApp
18
+ 3. Save credentials to `.mercury/whatsapp-auth/`
19
+ 4. Exit when authentication is complete
20
+
21
+ **To scan:**
22
+ 1. Open WhatsApp on your phone
23
+ 2. Tap **Settings → Linked Devices → Link a Device**
24
+ 3. Point your camera at the QR code
25
+
26
+ ### Pairing Code Mode
27
+
28
+ If you can't scan QR codes (e.g., running on a remote server), use pairing code mode:
29
+
30
+ ```bash
31
+ mercury auth whatsapp --pairing-code --phone 14155551234
32
+ ```
33
+
34
+ Replace `14155551234` with your phone number (country code + number, no `+` or spaces).
35
+
36
+ This will:
37
+ 1. Request a pairing code from WhatsApp
38
+ 2. Display an 8-character code
39
+ 3. Wait for you to enter it on your phone
40
+
41
+ **To pair:**
42
+ 1. Open WhatsApp on your phone
43
+ 2. Tap **Settings → Linked Devices → Link a Device**
44
+ 3. Tap **"Link with phone number instead"**
45
+ 4. Enter the code shown in your terminal
46
+
47
+ ## Session Lifecycle
48
+
49
+ ### Session Duration
50
+
51
+ WhatsApp linked device sessions typically last **~14-20 days** before requiring re-authentication. This is controlled by WhatsApp, not Mercury.
52
+
53
+ Signs your session has expired:
54
+ - WhatsApp stops receiving messages
55
+ - Logs show `connection closed` with `loggedOut` reason
56
+ - Status file shows `failed:logged_out`
57
+
58
+ ### Re-authentication
59
+
60
+ If your session expires:
61
+
62
+ 1. **Stop Mercury** (if running):
63
+ ```bash
64
+ # Ctrl+C in the terminal running mercury, or
65
+ pkill -f "bun.*chat-sdk"
66
+ ```
67
+
68
+ 2. **Delete old credentials**:
69
+ ```bash
70
+ rm -rf .mercury/whatsapp-auth/
71
+ ```
72
+
73
+ 3. **Re-authenticate**:
74
+ ```bash
75
+ mercury auth whatsapp
76
+ ```
77
+
78
+ 4. **Restart Mercury**:
79
+ ```bash
80
+ mercury run
81
+ ```
82
+
83
+ ## Status Files
84
+
85
+ The auth script writes status files for external monitoring (useful for headless deployments):
86
+
87
+ | File | Description |
88
+ |------|-------------|
89
+ | `.mercury/whatsapp-status.txt` | Current status (`authenticated`, `waiting_qr`, `pairing_code:XXXX`, `failed:reason`) |
90
+ | `.mercury/whatsapp-qr.txt` | Raw QR data for external rendering (deleted after successful auth) |
91
+
92
+ ### Status Values
93
+
94
+ - `authenticated` — Successfully connected
95
+ - `already_authenticated` — Existing valid session found
96
+ - `waiting_qr` — Waiting for QR code scan
97
+ - `pairing_code:XXXXXXXX` — Waiting for pairing code entry
98
+ - `failed:logged_out` — Session was logged out by WhatsApp
99
+ - `failed:qr_timeout` — QR code expired before scan
100
+ - `failed:515` — Stream error (usually recovers automatically)
101
+ - `failed:unknown` — Other connection failure
102
+
103
+ ## Auth Status API Endpoint
104
+
105
+ When Mercury is running, you can check auth status via the API:
106
+
107
+ ```bash
108
+ curl http://localhost:8787/auth/whatsapp
109
+ ```
110
+
111
+ **Responses:**
112
+
113
+ ```json
114
+ // Authenticated and connected
115
+ { "status": "authenticated" }
116
+
117
+ // Waiting for QR scan (includes raw QR data)
118
+ { "status": "waiting", "qr": "2@AbCdEf123..." }
119
+
120
+ // Disconnected or not yet connected
121
+ { "status": "disconnected" }
122
+ ```
123
+
124
+ This endpoint requires no authentication, making it suitable for headless monitoring dashboards.
125
+
126
+ ## Troubleshooting
127
+
128
+ ### "Already authenticated"
129
+
130
+ If you see this but WhatsApp isn't working:
131
+ ```bash
132
+ rm -rf .mercury/whatsapp-auth/
133
+ mercury auth whatsapp
134
+ ```
135
+
136
+ ### QR code times out too quickly
137
+
138
+ WhatsApp QR codes expire after ~20 seconds. If you're having trouble:
139
+ 1. Have your phone ready before running the command
140
+ 2. Use `--pairing-code` mode instead
141
+
142
+ ### "Stream error (515)"
143
+
144
+ This is usually transient and the auth script will automatically reconnect. If it persists:
145
+ ```bash
146
+ rm -rf .mercury/whatsapp-auth/
147
+ mercury auth whatsapp
148
+ ```
149
+
150
+ ### WhatsApp shows "Linked Device" but Mercury doesn't receive messages
151
+
152
+ 1. Check that `MERCURY_ENABLE_WHATSAPP=true` is set in `.env`
153
+ 2. Check logs for connection errors
154
+ 3. Try re-authenticating
155
+
156
+ ### Messages from before startup appear
157
+
158
+ Mercury ignores messages that were sent before it connected to prevent processing old backlog. This is intentional.
159
+
160
+ ## Environment Variables
161
+
162
+ | Variable | Default | Description |
163
+ |----------|---------|-------------|
164
+ | `MERCURY_ENABLE_WHATSAPP` | `false` | Enable WhatsApp adapter |
165
+ | `MERCURY_WHATSAPP_AUTH_DIR` | `.mercury/whatsapp-auth` | Directory for auth credentials |
166
+ | `MERCURY_DATA_DIR` | `.mercury` | Base data directory (auth dir is relative to this) |
167
+
168
+ ## Security Notes
169
+
170
+ - Auth credentials in `.mercury/whatsapp-auth/` are sensitive — treat them like passwords
171
+ - Anyone with access to these files can impersonate your WhatsApp account
172
+ - The `/auth/whatsapp` endpoint is unauthenticated — only expose your API port to trusted networks
173
+ - Consider using a dedicated WhatsApp number for your bot