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 +22 -6
- package/bin/auxilo-cli.js +52 -3
- package/lib/installer.js +712 -28
- package/mcp-server.js +114 -19
- package/package.json +5 -7
- package/scripts/capture-core.js +218 -0
- package/scripts/runner.js +98 -29
- package/scripts/sources/antigravity.js +131 -0
- package/scripts/sources/gemini-cli.js +178 -0
- package/scripts/sources/generic-jsonl.js +157 -0
- package/prompts/auxilo-learning-claude-code.md +0 -250
- package/prompts/auxilo-learning-generic.md +0 -327
- package/prompts/auxilo-learning-schema.json +0 -98
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%
|
|
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
|
|
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
|
|
165
|
+
The live API runs on [Fly.io](https://fly.io) from the repo `Dockerfile`. Deploy with:
|
|
166
166
|
|
|
167
|
-
|
|
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** —
|
|
170
|
-
- **Rate limiting** — Persistent across restarts (state saved to
|
|
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
|
|
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,
|
|
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
|
}
|