auxilo-mcp 0.8.2 → 0.9.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/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
  }