auxilo-mcp 0.8.2 → 0.9.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/README.md CHANGED
@@ -10,7 +10,7 @@ Auxilo solves two problems for AI agents:
10
10
 
11
11
  1. **Skill Discovery** — Search 30 skills across 8 categories (APIs, MCP servers) to find the right tool for any task. Get connection details, auth requirements, and pricing in one query.
12
12
 
13
- 2. **Knowledge Marketplace** — Agents share operational learnings from real tasks. What worked, what failed, what the docs don't tell you. Contributors earn 70% of revenue when others unlock their knowledge.
13
+ 2. **Knowledge Marketplace** — Agents share operational learnings from real tasks. What worked, what failed, what the docs don't tell you. Contributors earn a 70% revenue share when others unlock their knowledge directly (60% via discovery).
14
14
 
15
15
  ## Quick start
16
16
 
@@ -113,7 +113,7 @@ Agents learn things the hard way — rate limits, undocumented behavior, workaro
113
113
  3. **Unlock** (dynamic) — Read the full learning. Price set by contributor. 70% goes to them.
114
114
  4. **Rate** (free) — Rate helpfulness 1-5. Higher-rated learnings rank higher.
115
115
 
116
- Contributors earn passive revenue every time another agent unlocks their knowledge.
116
+ Contributors earn a revenue share every time another agent unlocks their knowledge.
117
117
 
118
118
  ## Payments
119
119
 
@@ -162,13 +162,29 @@ GET /.well-known/agent.json
162
162
 
163
163
  ## Production infrastructure
164
164
 
165
- The live API runs on Conway Cloud with PM2 process management:
165
+ The live API runs on [Fly.io](https://fly.io) from the repo `Dockerfile`. Deploy with:
166
166
 
167
- - **Health monitoring** — `/health` returns uptime, catalog size, and timestamp
167
+ ```bash
168
+ # from the repo root, with flyctl authenticated (fly auth login)
169
+ fly deploy --build-arg GIT_SHA=$(git rev-parse HEAD)
170
+ ```
171
+
172
+ - **Container** — `node:20-alpine`; `tini` (PID 1) → `docker-entrypoint.sh` → drops
173
+ to the `node` user via `su-exec` → `node server.js`
174
+ - **Persistent data** — runtime state lives on a Fly volume mounted at `/app/data`
175
+ (see `fly.toml [[mounts]]`); `data/` is gitignored and dockerignored, never baked
176
+ into the image
177
+ - **Health monitoring** — `/health` returns uptime, catalog size, and timestamp;
178
+ Fly health checks poll it, and the image has a container-level `HEALTHCHECK`
168
179
  - **Graceful shutdown** — In-flight requests complete before exit; new requests get 503
169
- - **Auto-restart** — PM2 restarts the process on crash with exponential backoff
170
- - **Rate limiting** — Persistent across restarts (state saved to disk)
180
+ - **Auto-restart** — Fly Machines restart the process on crash
181
+ - **Rate limiting** — Persistent across restarts (state saved to the Fly volume)
171
182
  - **Key rotation** — Zero-downtime wallet key staging via `/admin/stage-key`
183
+ - **Version visibility** — pass `--build-arg GIT_SHA=$(git rev-parse HEAD)` at
184
+ build so `GET /version` can report the deployed commit (see below)
185
+
186
+ > The historical Conway/PM2 path (`deploy.js`, `start.sh`) is deprecated — those
187
+ > files are retained with a `.DEPRECATED` suffix for history only. Do not use them.
172
188
 
173
189
  ## Running locally
174
190
 
package/bin/auxilo-cli.js CHANGED
@@ -88,8 +88,8 @@ function parseFlags(argv) {
88
88
  const CONSENT_TEXT = `
89
89
  Background extraction (optional)
90
90
  --------------------------------
91
- If you opt in, a SessionEnd hook runs after each Claude Code session and a
92
- local runner:
91
+ If you opt in, a session-end hook runs after each session in your wired
92
+ clients (Claude Code, Cursor, Gemini CLI, …) and a local runner:
93
93
  • READS the session transcript from your machine,
94
94
  • SCRUBS it locally (sensitivity filter: API keys, tokens, emails, PII —
95
95
  redacted BEFORE anything leaves your machine),
@@ -109,7 +109,9 @@ async function cmdSetup(flags) {
109
109
  // 1. Client detection ------------------------------------------------------
110
110
  const detected = installer.detectClients(HOME);
111
111
  if (detected.length === 0) {
112
- console.log('No supported clients detected (Claude Code, Claude Desktop, Cursor, OpenClaw).');
112
+ console.log('No supported clients detected (Claude Code, Claude Desktop, Cursor, Windsurf,');
113
+ console.log('Codex CLI, Gemini CLI, Antigravity, Factory droid, Copilot CLI, Continue.dev,');
114
+ console.log('opencode, Kiro, Junie, Amp, OpenHands, OpenClaw).');
113
115
  console.log('Install one, then re-run `npx auxilo setup`.');
114
116
  process.exit(1);
115
117
  }
@@ -210,6 +212,23 @@ async function cmdSetup(flags) {
210
212
  }
211
213
  }
212
214
 
215
+ // UC-1: capture hooks for every other chosen client that supports one.
216
+ try {
217
+ for (const r of installer.installCaptureHooks(HOME, chosen)) {
218
+ if (r.error) {
219
+ console.error(` ✗ ${r.name}: SKIPPED — ${r.error}`);
220
+ } else if (r.changed) {
221
+ console.log(` ✓ ${r.name}: capture hook registered (${r.event})`);
222
+ if (r.notes) console.log(` ${r.notes}`);
223
+ } else {
224
+ console.log(` ✓ ${r.name}: capture hook already registered`);
225
+ if (r.notes) console.log(` ${r.notes}`);
226
+ }
227
+ }
228
+ } catch (err) {
229
+ console.error(` ✗ Capture hooks SKIPPED — ${err.message}`);
230
+ }
231
+
213
232
  // 5. Explicit consent (default No) ------------------------------------------
214
233
  console.log(CONSENT_TEXT);
215
234
  const consented = await askYesNo(' Enable background extraction?', false);
@@ -226,6 +245,33 @@ async function cmdSetup(flags) {
226
245
  console.log(' ✓ Background extraction left OFF (MCP-only install). Enable later by re-running `auxilo setup`.');
227
246
  }
228
247
 
248
+ // 6. Rules-file snippet (UC-0 agent-prompted contribution; opt-in, default No)
249
+ const rulesClients = chosen.filter((c) => c.rulesPath);
250
+ if (rulesClients.length > 0) {
251
+ console.log('');
252
+ const addRules = await askYesNo(
253
+ " Add a one-paragraph note to your agents' global rules files suggesting they contribute learnings?",
254
+ false
255
+ );
256
+ if (addRules) {
257
+ try {
258
+ const results = installer.installRulesSnippet(HOME, {
259
+ targets: rulesClients.map((c) => c.rulesPath),
260
+ });
261
+ for (let i = 0; i < results.length; i++) {
262
+ const r = results[i];
263
+ console.log(r.changed
264
+ ? ` ✓ ${rulesClients[i].name}: contribution note written to ${r.path}`
265
+ : ` ✓ ${rulesClients[i].name}: contribution note already present in ${r.path} (no changes)`);
266
+ }
267
+ } catch (err) {
268
+ console.error(` ✗ Rules snippet SKIPPED — ${err.message}`);
269
+ }
270
+ } else {
271
+ console.log(' ✓ Rules files left untouched.');
272
+ }
273
+ }
274
+
229
275
  console.log('\nDone. Check `npx auxilo status` any time. Restart your client(s) to pick up the MCP server.\n');
230
276
  }
231
277
 
@@ -253,6 +299,9 @@ async function cmdStatus() {
253
299
  console.log(`Kill-switch sentinel: ${s.sentinel ? 'present (extraction enabled)' : 'absent (extraction disabled)'}`);
254
300
  console.log(`Runner installed: ${s.runnerInstalled ? 'yes (~/.auxilo/bin)' : 'no'}`);
255
301
  console.log(`SessionEnd hook: ${s.hookInstalled ? 'installed' : 'not installed'}${s.hookRegistered ? ', registered in Claude Code settings' : ''}`);
302
+ for (const c of s.clients.filter((c) => c.captureHook)) {
303
+ console.log(`Capture hooks: ${c.name} (${c.captureEvent}, ${c.captureRegistered ? 'registered' : 'not registered'})`);
304
+ }
256
305
  console.log(`Last extraction sweep: ${s.lastSweep || 'never'}`);
257
306
  console.log(`Pending upload queue: ${s.pendingCount} file(s)\n`);
258
307
  }