nuxs-capsule 0.1.16 → 0.1.17

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.
@@ -17,11 +17,15 @@ if (cmd === 'install') {
17
17
  if (result.pending > 0) {
18
18
  console.log(`[nuxs-capsule] flushed: ${result.sent} sent, ${result.failed} failed, ${result.pending} pending`);
19
19
  }
20
+ } else if (cmd === 'scan') {
21
+ // Detecta agentes locais e registra no painel
22
+ const { runScanCli } = await import('../dist/scan.js');
23
+ await runScanCli();
20
24
  } else if (cmd === 'serve' || cmd === undefined) {
21
25
  // Default: roda como MCP server (stdio)
22
26
  await import('../dist/server.js');
23
27
  } else {
24
28
  console.error(`nuxs-capsule: comando desconhecido "${cmd}"`);
25
- console.error('Use: install | setup | wrap | flush | serve');
29
+ console.error('Use: install | setup | wrap | flush | scan | serve');
26
30
  process.exit(1);
27
31
  }
package/dist/scan.d.ts ADDED
@@ -0,0 +1,42 @@
1
+ /**
2
+ * scan.ts — Sprint 3 (28/Mai/2026)
3
+ *
4
+ * Detecta agentes IA neste PC via 4 vetores:
5
+ * 1. launchd plists (~/Library/LaunchAgents/*.plist) — macOS
6
+ * 2. systemd units (systemctl --user list-units) — Linux
7
+ * 3. processos rodando (ps aux) — Mac/Linux
8
+ * 4. configs conhecidas (~/.claude, ~/.cursor, ~/.aider, ~/.continue)
9
+ *
10
+ * Plus: npm globals com keywords AI.
11
+ *
12
+ * Retorna lista pra `nuxs-capsule scan` mostrar wizard + auto-register
13
+ * via /api/nuxs/agents/register cada detectado.
14
+ */
15
+ export interface DetectedAgent {
16
+ kind: string;
17
+ label: string;
18
+ source: 'launchd' | 'systemd' | 'process' | 'config' | 'npm';
19
+ pid?: number;
20
+ config_path?: string;
21
+ binary_path?: string;
22
+ detail?: string;
23
+ }
24
+ /**
25
+ * scanLocalAgents — entry point. Combina os 4 vetores + dedup por label.
26
+ */
27
+ export declare function scanLocalAgents(): DetectedAgent[];
28
+ /**
29
+ * Registra todos os agentes detectados no backend Nuxs.
30
+ * Idempotente (backend faz upsert por fingerprint+kind+label).
31
+ */
32
+ export declare function registerDetectedAgents(): Promise<{
33
+ ok: number;
34
+ failed: number;
35
+ agents: Array<{
36
+ label: string;
37
+ agent_id: string | null;
38
+ }>;
39
+ }>;
40
+ /** Comando CLI `nuxs-capsule scan`. Mostra wizard + auto-register. */
41
+ export declare function runScanCli(): Promise<void>;
42
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAgJD;;GAEG;AACH,wBAAgB,eAAe,IAAI,aAAa,EAAE,CAkBjD;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAkBjJ;AAED,sEAAsE;AACtE,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBhD"}
package/dist/scan.js ADDED
@@ -0,0 +1,250 @@
1
+ /**
2
+ * scan.ts — Sprint 3 (28/Mai/2026)
3
+ *
4
+ * Detecta agentes IA neste PC via 4 vetores:
5
+ * 1. launchd plists (~/Library/LaunchAgents/*.plist) — macOS
6
+ * 2. systemd units (systemctl --user list-units) — Linux
7
+ * 3. processos rodando (ps aux) — Mac/Linux
8
+ * 4. configs conhecidas (~/.claude, ~/.cursor, ~/.aider, ~/.continue)
9
+ *
10
+ * Plus: npm globals com keywords AI.
11
+ *
12
+ * Retorna lista pra `nuxs-capsule scan` mostrar wizard + auto-register
13
+ * via /api/nuxs/agents/register cada detectado.
14
+ */
15
+ import { execSync } from 'node:child_process';
16
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
17
+ import { homedir, platform, hostname } from 'node:os';
18
+ import { join } from 'node:path';
19
+ // ─── 1. LAUNCHD (macOS) ────────────────────────────────────────────
20
+ function scanLaunchd() {
21
+ if (platform() !== 'darwin')
22
+ return [];
23
+ const dir = join(homedir(), 'Library', 'LaunchAgents');
24
+ if (!existsSync(dir))
25
+ return [];
26
+ const out = [];
27
+ let files = [];
28
+ try {
29
+ files = readdirSync(dir).filter((f) => f.endsWith('.plist'));
30
+ }
31
+ catch {
32
+ return [];
33
+ }
34
+ for (const file of files) {
35
+ const path = join(dir, file);
36
+ let content = '';
37
+ try {
38
+ content = readFileSync(path, 'utf8');
39
+ }
40
+ catch {
41
+ continue;
42
+ }
43
+ // Detecta kind por nome OU conteúdo
44
+ const lower = file.toLowerCase() + ' ' + content.toLowerCase();
45
+ let kind = null;
46
+ if (/flyone|fly\.plist/i.test(file))
47
+ kind = 'fly';
48
+ else if (/openclaw/.test(lower))
49
+ kind = 'openclaw';
50
+ else if (/hermes/.test(lower))
51
+ kind = 'hermes';
52
+ else if (/cursor/.test(lower))
53
+ kind = 'cursor';
54
+ else if (/anthropic|claude/i.test(lower))
55
+ kind = 'claude_agent';
56
+ else
57
+ continue;
58
+ // Extrai Label
59
+ const labelMatch = content.match(/<key>Label<\/key>\s*<string>([^<]+)<\/string>/);
60
+ const label = labelMatch?.[1] ?? file.replace('.plist', '');
61
+ out.push({
62
+ kind,
63
+ label,
64
+ source: 'launchd',
65
+ config_path: path,
66
+ detail: 'launchd agent'
67
+ });
68
+ }
69
+ return out;
70
+ }
71
+ // ─── 2. PROCESSOS rodando ──────────────────────────────────────────
72
+ function scanProcesses() {
73
+ const out = [];
74
+ let psOutput = '';
75
+ try {
76
+ psOutput = execSync('ps ax -o pid,command 2>/dev/null', { encoding: 'utf8', timeout: 5000 });
77
+ }
78
+ catch {
79
+ return out;
80
+ }
81
+ const lines = psOutput.split('\n').slice(1); // skip header
82
+ for (const line of lines) {
83
+ const trimmed = line.trim();
84
+ if (!trimmed)
85
+ continue;
86
+ const m = trimmed.match(/^(\d+)\s+(.+)$/);
87
+ if (!m)
88
+ continue;
89
+ const pid = parseInt(m[1], 10);
90
+ const cmd = m[2].toLowerCase();
91
+ // Identifica kind pelo command
92
+ let kind = null;
93
+ let label = null;
94
+ if (/claude.code|\.local\/share\/claude/.test(cmd) && !cmd.includes('bg-spare')) {
95
+ kind = 'claude_code';
96
+ label = `claude_code_${pid}`;
97
+ }
98
+ else if (/cursor.*\.app/.test(cmd)) {
99
+ kind = 'cursor';
100
+ label = `cursor_${pid}`;
101
+ }
102
+ else if (/aider/.test(cmd)) {
103
+ kind = 'aider';
104
+ label = `aider_${pid}`;
105
+ }
106
+ else if (/openclaw-bridge|openclaw\s/.test(cmd) && !cmd.includes('grep')) {
107
+ kind = 'openclaw';
108
+ label = `openclaw_${pid}`;
109
+ }
110
+ else if (/hermes-bridge|hermes\s/.test(cmd) && !cmd.includes('grep')) {
111
+ kind = 'hermes';
112
+ label = `hermes_${pid}`;
113
+ }
114
+ if (!kind || !label)
115
+ continue;
116
+ out.push({ kind, label, source: 'process', pid });
117
+ }
118
+ return out;
119
+ }
120
+ // ─── 3. CONFIGS conhecidas ─────────────────────────────────────────
121
+ function scanConfigs() {
122
+ const home = homedir();
123
+ const candidates = [
124
+ { path: join(home, '.claude', 'settings.json'), kind: 'claude_code' },
125
+ { path: join(home, '.cursor', 'settings.json'), kind: 'cursor' },
126
+ { path: join(home, '.cursor', 'mcp.json'), kind: 'cursor' },
127
+ { path: join(home, '.aider.conf.yml'), kind: 'aider' },
128
+ { path: join(home, '.continue', 'config.json'), kind: 'continue' },
129
+ { path: join(home, '.codeium', 'config.json'), kind: 'codeium' },
130
+ { path: join(home, '.cline', 'config.json'), kind: 'cline' }
131
+ ];
132
+ const out = [];
133
+ for (const c of candidates) {
134
+ if (!existsSync(c.path))
135
+ continue;
136
+ out.push({
137
+ kind: c.kind,
138
+ label: `${c.kind}_config`,
139
+ source: 'config',
140
+ config_path: c.path,
141
+ detail: 'config file present'
142
+ });
143
+ }
144
+ return out;
145
+ }
146
+ // ─── 4. NPM GLOBALS ────────────────────────────────────────────────
147
+ function scanNpmGlobals() {
148
+ const out = [];
149
+ let raw = '';
150
+ try {
151
+ raw = execSync('npm ls -g --depth=0 --parseable 2>/dev/null', { encoding: 'utf8', timeout: 8000 });
152
+ }
153
+ catch {
154
+ return out;
155
+ }
156
+ const lines = raw.split('\n').filter(Boolean);
157
+ for (const line of lines) {
158
+ const name = line.split('/').pop() ?? '';
159
+ let kind = null;
160
+ if (/^claude(-code)?$/i.test(name) || /@anthropic-ai\/claude-code/i.test(line))
161
+ kind = 'claude_code';
162
+ else if (/^aider/i.test(name))
163
+ kind = 'aider';
164
+ else if (/^continue/i.test(name))
165
+ kind = 'continue';
166
+ else if (/^cursor-cli/i.test(name))
167
+ kind = 'cursor_cli';
168
+ else
169
+ continue;
170
+ out.push({
171
+ kind,
172
+ label: `${kind}_npm`,
173
+ source: 'npm',
174
+ binary_path: line,
175
+ detail: 'npm global'
176
+ });
177
+ }
178
+ return out;
179
+ }
180
+ /**
181
+ * scanLocalAgents — entry point. Combina os 4 vetores + dedup por label.
182
+ */
183
+ export function scanLocalAgents() {
184
+ const all = [
185
+ ...scanLaunchd(),
186
+ ...scanProcesses(),
187
+ ...scanConfigs(),
188
+ ...scanNpmGlobals()
189
+ ];
190
+ // Dedup por (kind, label) — mantém o que tem mais info (pid > config > npm)
191
+ const score = { process: 4, launchd: 3, config: 2, npm: 1, systemd: 3 };
192
+ const map = new Map();
193
+ for (const a of all) {
194
+ const key = `${a.kind}:${a.label}`;
195
+ const existing = map.get(key);
196
+ if (!existing || (score[a.source] ?? 0) > (score[existing.source] ?? 0)) {
197
+ map.set(key, a);
198
+ }
199
+ }
200
+ return Array.from(map.values());
201
+ }
202
+ /**
203
+ * Registra todos os agentes detectados no backend Nuxs.
204
+ * Idempotente (backend faz upsert por fingerprint+kind+label).
205
+ */
206
+ export async function registerDetectedAgents() {
207
+ const { registerAgent } = await import('./agents/register.js');
208
+ const detected = scanLocalAgents();
209
+ let ok = 0;
210
+ let failed = 0;
211
+ const agents = [];
212
+ for (const a of detected) {
213
+ const agentId = await registerAgent({
214
+ agent_kind: a.kind,
215
+ agent_label: a.label,
216
+ config_path: a.config_path,
217
+ binary_path: a.binary_path
218
+ });
219
+ if (agentId)
220
+ ok++;
221
+ else
222
+ failed++;
223
+ agents.push({ label: a.label, agent_id: agentId });
224
+ }
225
+ return { ok, failed, agents };
226
+ }
227
+ /** Comando CLI `nuxs-capsule scan`. Mostra wizard + auto-register. */
228
+ export async function runScanCli() {
229
+ console.log('\n🔍 Nuxs Capsule — Scan de agentes locais\n');
230
+ console.log(`Máquina: ${hostname()} (${platform()})\n`);
231
+ const detected = scanLocalAgents();
232
+ if (detected.length === 0) {
233
+ console.log('Nenhum agente IA detectado neste PC.\n');
234
+ return;
235
+ }
236
+ console.log(`Detectados ${detected.length} agentes:\n`);
237
+ for (let i = 0; i < detected.length; i++) {
238
+ const a = detected[i];
239
+ console.log(` [${i + 1}] ${a.kind.padEnd(14)} ${a.label.padEnd(30)} (${a.source})`);
240
+ if (a.config_path)
241
+ console.log(` config: ${a.config_path}`);
242
+ if (a.pid)
243
+ console.log(` PID: ${a.pid}`);
244
+ }
245
+ console.log('\nRegistrando todos no painel admin...');
246
+ const result = await registerDetectedAgents();
247
+ console.log(`\n✓ ${result.ok} agentes registrados, ${result.failed} falhas.`);
248
+ console.log('Veja em https://nuxs.ai/admin/capsule → aba "Agentes registrados"\n');
249
+ }
250
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxs-capsule",
3
- "version": "0.1.16",
3
+ "version": "0.1.17",
4
4
  "description": "Compressor universal pra agentes IA — Claude Code, Cursor, OpenClaw, Hermes. Camada invisível via MCP + Hook PreToolUse. Economiza 50-90% dos tokens.",
5
5
  "keywords": [
6
6
  "mcp",
@@ -38,6 +38,7 @@
38
38
  "dev": "tsx watch src/server.ts",
39
39
  "test": "vitest run",
40
40
  "lint": "tsc --noEmit",
41
+ "postinstall": "node -e \"const v=require('./package.json').version;process.stderr.write('\\n \\u001b[32m\\u2713\\u001b[0m nuxs-capsule v'+v+' installed. Run \\u001b[1mnuxs-capsule scan\\u001b[0m to detect agents.\\n\\n')\"",
41
42
  "compile:standalone": "bun build src/intercept.ts --compile --outfile bin/nuxs-capsule-intercept-bin"
42
43
  },
43
44
  "dependencies": {