nuxs-capsule 0.1.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.
Files changed (84) hide show
  1. package/README.md +21 -0
  2. package/bin/nuxs-capsule-intercept.js +4 -0
  3. package/bin/nuxs-capsule.js +20 -0
  4. package/dist/install.d.ts +17 -0
  5. package/dist/install.d.ts.map +1 -0
  6. package/dist/install.js +243 -0
  7. package/dist/install.js.map +1 -0
  8. package/dist/intercept.d.ts +19 -0
  9. package/dist/intercept.d.ts.map +1 -0
  10. package/dist/intercept.js +232 -0
  11. package/dist/intercept.js.map +1 -0
  12. package/dist/lib/fileStat.d.ts +20 -0
  13. package/dist/lib/fileStat.d.ts.map +1 -0
  14. package/dist/lib/fileStat.js +71 -0
  15. package/dist/lib/fileStat.js.map +1 -0
  16. package/dist/lib/fingerprint.d.ts +10 -0
  17. package/dist/lib/fingerprint.d.ts.map +1 -0
  18. package/dist/lib/fingerprint.js +41 -0
  19. package/dist/lib/fingerprint.js.map +1 -0
  20. package/dist/lib/tokenCount.d.ts +13 -0
  21. package/dist/lib/tokenCount.d.ts.map +1 -0
  22. package/dist/lib/tokenCount.js +32 -0
  23. package/dist/lib/tokenCount.js.map +1 -0
  24. package/dist/license/check.d.ts +14 -0
  25. package/dist/license/check.d.ts.map +1 -0
  26. package/dist/license/check.js +141 -0
  27. package/dist/license/check.js.map +1 -0
  28. package/dist/providers/llmClient.d.ts +20 -0
  29. package/dist/providers/llmClient.d.ts.map +1 -0
  30. package/dist/providers/llmClient.js +40 -0
  31. package/dist/providers/llmClient.js.map +1 -0
  32. package/dist/server.d.ts +10 -0
  33. package/dist/server.d.ts.map +1 -0
  34. package/dist/server.js +268 -0
  35. package/dist/server.js.map +1 -0
  36. package/dist/setup.d.ts +14 -0
  37. package/dist/setup.d.ts.map +1 -0
  38. package/dist/setup.js +135 -0
  39. package/dist/setup.js.map +1 -0
  40. package/dist/telemetry/usage.d.ts +19 -0
  41. package/dist/telemetry/usage.d.ts.map +1 -0
  42. package/dist/telemetry/usage.js +114 -0
  43. package/dist/telemetry/usage.js.map +1 -0
  44. package/dist/tools/apiCapsule.d.ts +16 -0
  45. package/dist/tools/apiCapsule.d.ts.map +1 -0
  46. package/dist/tools/apiCapsule.js +169 -0
  47. package/dist/tools/apiCapsule.js.map +1 -0
  48. package/dist/tools/eventsCapsule.d.ts +15 -0
  49. package/dist/tools/eventsCapsule.d.ts.map +1 -0
  50. package/dist/tools/eventsCapsule.js +72 -0
  51. package/dist/tools/eventsCapsule.js.map +1 -0
  52. package/dist/tools/logCapsule.d.ts +38 -0
  53. package/dist/tools/logCapsule.d.ts.map +1 -0
  54. package/dist/tools/logCapsule.js +283 -0
  55. package/dist/tools/logCapsule.js.map +1 -0
  56. package/dist/tools/networkCapsule.d.ts +18 -0
  57. package/dist/tools/networkCapsule.d.ts.map +1 -0
  58. package/dist/tools/networkCapsule.js +151 -0
  59. package/dist/tools/networkCapsule.js.map +1 -0
  60. package/dist/tools/sessionCapsule.d.ts +21 -0
  61. package/dist/tools/sessionCapsule.d.ts.map +1 -0
  62. package/dist/tools/sessionCapsule.js +174 -0
  63. package/dist/tools/sessionCapsule.js.map +1 -0
  64. package/dist/tools/sqlCapsule.d.ts +17 -0
  65. package/dist/tools/sqlCapsule.d.ts.map +1 -0
  66. package/dist/tools/sqlCapsule.js +144 -0
  67. package/dist/tools/sqlCapsule.js.map +1 -0
  68. package/dist/tools/stackCapsule.d.ts +9 -0
  69. package/dist/tools/stackCapsule.d.ts.map +1 -0
  70. package/dist/tools/stackCapsule.js +132 -0
  71. package/dist/tools/stackCapsule.js.map +1 -0
  72. package/dist/tools/threadsCapsule.d.ts +14 -0
  73. package/dist/tools/threadsCapsule.d.ts.map +1 -0
  74. package/dist/tools/threadsCapsule.js +77 -0
  75. package/dist/tools/threadsCapsule.js.map +1 -0
  76. package/dist/types.d.ts +199 -0
  77. package/dist/types.d.ts.map +1 -0
  78. package/dist/types.js +9 -0
  79. package/dist/types.js.map +1 -0
  80. package/dist/wrap.d.ts +14 -0
  81. package/dist/wrap.d.ts.map +1 -0
  82. package/dist/wrap.js +100 -0
  83. package/dist/wrap.js.map +1 -0
  84. package/package.json +60 -0
@@ -0,0 +1,132 @@
1
+ /**
2
+ * stack_capsule — comprime stack trace de erro client-side.
3
+ * Regex parser + LLM mini (Haiku/Flash/DeepSeek via router).
4
+ *
5
+ * Compressão típica: 8k tokens → 500 (16×).
6
+ */
7
+ import { compressViaLlm } from '../providers/llmClient.js';
8
+ const VENDOR_PATTERNS = [
9
+ /node_modules/,
10
+ /\/deno_runtime\//,
11
+ /\/cargo\/registry\//,
12
+ /\/\.pnpm\//,
13
+ /\/dist\//,
14
+ /\/build\//,
15
+ /webpack:\/\/\.\/node_modules/,
16
+ /^internal\//, // Node internals
17
+ /^node:/, // Node 'node:' protocol
18
+ /^chrome-extension:/
19
+ ];
20
+ // Padrões de stack trace por runtime
21
+ const FRAME_PATTERNS = [
22
+ // V8 / Node: " at functionName (file:line:col)"
23
+ /\s*at\s+(\S+?)\s+\((.+?):(\d+):(\d+)\)/,
24
+ // V8 / Node anônimo: " at file:line:col"
25
+ /\s*at\s+(.+?):(\d+):(\d+)$/,
26
+ // Firefox / Safari: "functionName@file:line:col"
27
+ /^(.+?)@(.+?):(\d+):(\d+)$/,
28
+ // Python: 'File "path", line N, in function'
29
+ /^\s*File\s+"(.+?)",\s+line\s+(\d+),\s+in\s+(.+)$/
30
+ ];
31
+ export async function stackCapsule(trace, source) {
32
+ const lines = trace.split('\n');
33
+ const errorMessage = lines[0]?.trim() ?? 'unknown error';
34
+ const frames = parseFrames(lines);
35
+ const userFrames = frames.filter((f) => !f.isVendor);
36
+ // Limita pros 8 mais relevantes — economiza tokens da LLM
37
+ const relevantFrames = userFrames.slice(0, 8);
38
+ // Sem user frames? Devolve fallback básico
39
+ if (relevantFrames.length === 0) {
40
+ return {
41
+ component: 'unknown',
42
+ trigger: errorMessage,
43
+ chain: lines.slice(0, 5).map((l) => l.trim()).filter(Boolean),
44
+ error_message: errorMessage
45
+ };
46
+ }
47
+ const llm = await compressViaLlm({
48
+ capsule_type: 'stack',
49
+ prompt: STACK_PROMPT,
50
+ input: {
51
+ error_message: errorMessage,
52
+ frames: relevantFrames,
53
+ source: source ?? 'unknown'
54
+ },
55
+ model_preference: 'cheap'
56
+ });
57
+ if (!llm) {
58
+ // Fallback determinístico se LLM falhar
59
+ const root = relevantFrames[relevantFrames.length - 1];
60
+ return {
61
+ component: extractComponent(root.function, root.file),
62
+ trigger: errorMessage,
63
+ chain: relevantFrames.slice().reverse().map((f) => `${f.function} (${shortPath(f.file)}:${f.line})`),
64
+ error_message: errorMessage
65
+ };
66
+ }
67
+ // LLM devolveu o JSON estruturado
68
+ return llm.result;
69
+ }
70
+ const STACK_PROMPT = `
71
+ Você recebe um stack trace filtrado (frames do user code apenas) e a mensagem de erro.
72
+ Devolva APENAS JSON com:
73
+ {
74
+ "component": "nome do componente/função no frame raiz [string]",
75
+ "trigger": "o que provocou — prop undefined, state inválido, race condition, etc [string curta]",
76
+ "chain": ["3 a 5 passos do fluxo até o erro, do mais alto pro mais raiz"],
77
+ "suggested_fix": "1 linha de correção concreta",
78
+ "error_message": "<copiar o error_message do input>"
79
+ }
80
+ Sem markdown, sem prosa antes/depois. JSON puro.
81
+ `;
82
+ function parseFrames(lines) {
83
+ const frames = [];
84
+ for (const line of lines) {
85
+ for (const pattern of FRAME_PATTERNS) {
86
+ const m = line.match(pattern);
87
+ if (!m)
88
+ continue;
89
+ let fn, file, lineNum, col;
90
+ if (pattern === FRAME_PATTERNS[0]) {
91
+ [, fn, file, lineNum, col] = m;
92
+ }
93
+ else if (pattern === FRAME_PATTERNS[1]) {
94
+ fn = '<anonymous>';
95
+ [, file, lineNum, col] = m;
96
+ }
97
+ else if (pattern === FRAME_PATTERNS[2]) {
98
+ [, fn, file, lineNum, col] = m;
99
+ }
100
+ else {
101
+ // Python
102
+ [, file, lineNum, fn] = m;
103
+ col = '0';
104
+ }
105
+ frames.push({
106
+ function: fn ?? '<anonymous>',
107
+ file: file ?? '',
108
+ line: parseInt(lineNum ?? '0', 10),
109
+ column: parseInt(col ?? '0', 10),
110
+ isVendor: VENDOR_PATTERNS.some((p) => p.test(file ?? ''))
111
+ });
112
+ break; // só 1 pattern match por linha
113
+ }
114
+ }
115
+ return frames;
116
+ }
117
+ function extractComponent(fn, file) {
118
+ // Tenta extrair "ComponentName" de paths tipo /CartButton.tsx ou de fn name
119
+ const fileMatch = file.match(/\/([A-Z][a-zA-Z0-9]+)(?:\.[jt]sx?)?(?:\?|$)/);
120
+ if (fileMatch?.[1])
121
+ return fileMatch[1];
122
+ const fnMatch = fn.match(/^([A-Z][a-zA-Z0-9]+)/);
123
+ if (fnMatch?.[1])
124
+ return fnMatch[1];
125
+ return fn.split('.').pop() ?? fn;
126
+ }
127
+ function shortPath(file) {
128
+ // Remove paths absolutos longos — só basename + 1 dir
129
+ const parts = file.split('/');
130
+ return parts.slice(-2).join('/');
131
+ }
132
+ //# sourceMappingURL=stackCapsule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackCapsule.js","sourceRoot":"","sources":["../../src/tools/stackCapsule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * threads_capsule — comprime threads de PR/Slack/Discord.
3
+ * LLM rotula cada msg + extrai decision + action_items + unresolved.
4
+ *
5
+ * Compressão típica: 20k tokens → 1k (20×).
6
+ */
7
+ import type { ThreadsCapsule } from '../types.js';
8
+ export interface ThreadMessage {
9
+ author: string;
10
+ text: string;
11
+ timestamp?: string;
12
+ }
13
+ export declare function threadsCapsule(messages: ThreadMessage[], source?: ThreadsCapsule['source']): Promise<ThreadsCapsule>;
14
+ //# sourceMappingURL=threadsCapsule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threadsCapsule.d.ts","sourceRoot":"","sources":["../../src/tools/threadsCapsule.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,GAAE,cAAc,CAAC,QAAQ,CAAW,GACzC,OAAO,CAAC,cAAc,CAAC,CA0DzB"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * threads_capsule — comprime threads de PR/Slack/Discord.
3
+ * LLM rotula cada msg + extrai decision + action_items + unresolved.
4
+ *
5
+ * Compressão típica: 20k tokens → 1k (20×).
6
+ */
7
+ import { compressViaLlm } from '../providers/llmClient.js';
8
+ export async function threadsCapsule(messages, source = 'other') {
9
+ if (messages.length === 0) {
10
+ return {
11
+ source,
12
+ decision: 'no_messages',
13
+ reasoning: '',
14
+ action_items: [],
15
+ unresolved: [],
16
+ participants_count: 0,
17
+ message_count: 0
18
+ };
19
+ }
20
+ // Calcula participants + count localmente (não desperdiça LLM)
21
+ const participants = new Set(messages.map((m) => m.author));
22
+ // Limita pra ~100 msgs no input pra LLM — corta longos extra
23
+ const trimmed = messages.length > 100
24
+ ? [...messages.slice(0, 50), ...messages.slice(-50)]
25
+ : messages;
26
+ const llm = await compressViaLlm({
27
+ capsule_type: 'threads',
28
+ prompt: THREADS_PROMPT,
29
+ input: {
30
+ messages: trimmed.map((m) => ({
31
+ author: m.author,
32
+ text: m.text.length > 500 ? m.text.slice(0, 500) + '…' : m.text,
33
+ timestamp: m.timestamp
34
+ })),
35
+ source
36
+ },
37
+ model_preference: 'cheap'
38
+ });
39
+ if (!llm) {
40
+ // Fallback sem LLM — pega só última mensagem como "decisão"
41
+ return {
42
+ source,
43
+ decision: messages[messages.length - 1].text.slice(0, 200),
44
+ reasoning: 'LLM unavailable, fallback to last message',
45
+ action_items: [],
46
+ unresolved: [],
47
+ participants_count: participants.size,
48
+ message_count: messages.length
49
+ };
50
+ }
51
+ const partial = llm.result;
52
+ return {
53
+ source: partial.source ?? source,
54
+ decision: partial.decision ?? 'unclear',
55
+ reasoning: partial.reasoning ?? '',
56
+ action_items: partial.action_items ?? [],
57
+ unresolved: partial.unresolved ?? [],
58
+ participants_count: participants.size,
59
+ message_count: messages.length
60
+ };
61
+ }
62
+ const THREADS_PROMPT = `
63
+ Você recebe uma thread de discussão (PR review, Slack, Discord, etc).
64
+ Analise e devolva APENAS JSON com:
65
+ {
66
+ "decision": "qual foi a decisão final tomada [string curta, 1 frase]",
67
+ "reasoning": "o porquê dessa decisão, citando quem argumentou o quê [2-4 frases]",
68
+ "action_items": [
69
+ {"who": "nome", "task": "ação concreta", "when": "prazo se mencionado"}
70
+ ],
71
+ "unresolved": ["pontos abertos que não foram decididos"]
72
+ }
73
+ Descarte: saudações ("oi"), concordâncias ("ok", "👍"), off-topic.
74
+ Foque em: decisões, argumentos, ações combinadas, dúvidas em aberto.
75
+ Sem markdown, JSON puro.
76
+ `;
77
+ //# sourceMappingURL=threadsCapsule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threadsCapsule.js","sourceRoot":"","sources":["../../src/tools/threadsCapsule.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAS3D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAyB,EACzB,SAAmC,OAAO;IAE1C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,MAAM;YACN,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,EAAE;YACd,kBAAkB,EAAE,CAAC;YACrB,aAAa,EAAE,CAAC;SACjB,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5D,6DAA6D;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG;QACnC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,QAAQ,CAAC;IAEb,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC;QAC/B,YAAY,EAAE,SAAS;QACvB,MAAM,EAAE,cAAc;QACtB,KAAK,EAAE;YACL,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5B,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC/D,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC;YACH,MAAM;SACP;QACD,gBAAgB,EAAE,OAAO;KAC1B,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,4DAA4D;QAC5D,OAAO;YACL,MAAM;YACN,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC3D,SAAS,EAAE,2CAA2C;YACtD,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,EAAE;YACd,kBAAkB,EAAE,YAAY,CAAC,IAAI;YACrC,aAAa,EAAE,QAAQ,CAAC,MAAM;SAC/B,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,MAAiC,CAAC;IACtD,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS;QACvC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;QACpC,kBAAkB,EAAE,YAAY,CAAC,IAAI;QACrC,aAAa,EAAE,QAAQ,CAAC,MAAM;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG;;;;;;;;;;;;;;CActB,CAAC"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Tipos compartilhados do @nuxs/capsule.
3
+ *
4
+ * Princípios:
5
+ * - JSON pra cápsulas estruturadas (network, api, stack, threads, events, sql, log)
6
+ * - Markdown bullets pra cápsulas de prosa (session) — economiza ~30% tokens
7
+ */
8
+ export type CapsuleType = 'network' | 'api' | 'stack' | 'threads' | 'events' | 'session' | 'sql' | 'log';
9
+ export type LicenseTier = 'free' | 'solo' | 'bundle' | 'team' | 'enterprise';
10
+ export type AgentKind = 'claude_code' | 'openclaw' | 'hermes' | 'cursor' | 'cline' | 'aider' | 'codex' | 'unknown';
11
+ export interface CapsuleResult<T = unknown> {
12
+ type: CapsuleType;
13
+ format: 'json' | 'markdown';
14
+ output: T | string;
15
+ metadata: {
16
+ input_size_bytes: number;
17
+ output_size_bytes: number;
18
+ input_tokens_estimated: number;
19
+ output_tokens_estimated: number;
20
+ tokens_saved: number;
21
+ provider_used: string;
22
+ cost_saved_usd: number;
23
+ latency_ms: number;
24
+ timestamp: string;
25
+ };
26
+ }
27
+ export interface NetworkCapsule {
28
+ total_requests: number;
29
+ total_time_ms: number;
30
+ slowest: Array<{
31
+ url: string;
32
+ method: string;
33
+ duration_ms: number;
34
+ status: number;
35
+ }>;
36
+ errors: Array<{
37
+ url: string;
38
+ status: number;
39
+ error: string | null;
40
+ }>;
41
+ by_host: Record<string, {
42
+ count: number;
43
+ total_ms: number;
44
+ avg_ms: number;
45
+ }>;
46
+ critical_path: string[];
47
+ blocking: Array<{
48
+ url: string;
49
+ blocked_by: string;
50
+ wait_ms: number;
51
+ }>;
52
+ }
53
+ export interface ApiCapsule {
54
+ schema: unknown;
55
+ sample: unknown[];
56
+ total_items: number;
57
+ unique_shapes: number;
58
+ field_stats: Record<string, {
59
+ type: string;
60
+ null_count: number;
61
+ unique_count: number;
62
+ }>;
63
+ }
64
+ /**
65
+ * LogCapsule — compatível com IncidentCapsule da Codag pra facilitar
66
+ * migração de quem vinha do produto deles. Algoritmo: Drain templating
67
+ * + extração de evidências críticas. Zero LLM no caminho de hot.
68
+ */
69
+ export interface LogCapsule {
70
+ service: string | null;
71
+ window: {
72
+ from: string | null;
73
+ to: string | null;
74
+ };
75
+ compression: {
76
+ input_lines: number;
77
+ output_tokens: number;
78
+ ratio: number;
79
+ };
80
+ total_lines: number;
81
+ templates: Array<{
82
+ id: string;
83
+ pattern: string;
84
+ count: number;
85
+ role: 'noise' | 'normal' | 'warning' | 'error' | 'critical';
86
+ first_seen_line: number;
87
+ samples: Array<{
88
+ line: number;
89
+ text: string;
90
+ }>;
91
+ }>;
92
+ evidence: Array<{
93
+ line: number;
94
+ role: 'error' | 'critical' | 'warning' | 'state_change';
95
+ text: string;
96
+ }>;
97
+ level_breakdown: Record<string, number>;
98
+ }
99
+ export interface StackCapsule {
100
+ component: string;
101
+ trigger: string;
102
+ chain: string[];
103
+ suggested_fix?: string;
104
+ error_message: string;
105
+ }
106
+ export interface ThreadsCapsule {
107
+ source: 'github_pr' | 'slack' | 'discord' | 'linear' | 'jira' | 'other';
108
+ decision: string;
109
+ reasoning: string;
110
+ action_items: Array<{
111
+ who: string;
112
+ task: string;
113
+ when?: string;
114
+ }>;
115
+ unresolved: string[];
116
+ participants_count: number;
117
+ message_count: number;
118
+ }
119
+ export interface EventsCapsule {
120
+ source: 'mixpanel' | 'posthog' | 'amplitude' | 'other';
121
+ total_events: number;
122
+ funnel: Array<{
123
+ step: string;
124
+ count: number;
125
+ drop_off_pct: number;
126
+ }>;
127
+ anomalies: Array<{
128
+ event: string;
129
+ expected: number;
130
+ observed: number;
131
+ deviation_pct: number;
132
+ }>;
133
+ top_events: Array<{
134
+ event: string;
135
+ count: number;
136
+ }>;
137
+ }
138
+ export interface SessionCapsuleFrontmatter {
139
+ timestamp: string;
140
+ tokens_saved: number;
141
+ provider_used: string;
142
+ agent: AgentKind;
143
+ turns_compressed: number;
144
+ }
145
+ export interface SqlCapsule {
146
+ patterns: Array<{
147
+ shape: string;
148
+ count: number;
149
+ total_ms: number;
150
+ avg_ms: number;
151
+ p95_ms: number;
152
+ sample_query: string;
153
+ suggested_index?: string;
154
+ explanation?: string;
155
+ }>;
156
+ total_queries: number;
157
+ source: 'postgres' | 'mysql' | 'mongodb' | 'other';
158
+ }
159
+ export interface LicenseInfo {
160
+ valid: boolean;
161
+ tier: LicenseTier;
162
+ expires_at: string | null;
163
+ capsules_remaining?: number;
164
+ error?: string;
165
+ }
166
+ export interface UsageRecord {
167
+ timestamp: string;
168
+ capsule_type: CapsuleType;
169
+ input_size_bytes: number;
170
+ output_size_bytes: number;
171
+ input_tokens_estimated: number;
172
+ output_tokens_estimated: number;
173
+ tokens_saved: number;
174
+ provider_used: string;
175
+ cost_saved_usd: number;
176
+ agent_detected: AgentKind;
177
+ latency_ms: number;
178
+ machine_fingerprint: string;
179
+ }
180
+ export interface HookToolInput {
181
+ tool_name: string;
182
+ tool_input: Record<string, unknown>;
183
+ }
184
+ export interface HookDecision {
185
+ intercept: boolean;
186
+ capsule_type?: CapsuleType;
187
+ cache_path?: string;
188
+ reason?: string;
189
+ }
190
+ export interface HookOutput {
191
+ hookSpecificOutput?: {
192
+ hookEventName: 'PreToolUse';
193
+ permissionDecision?: 'allow' | 'deny';
194
+ permissionDecisionReason?: string;
195
+ updatedInput?: Record<string, unknown>;
196
+ additionalContext?: string;
197
+ };
198
+ }
199
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tipos compartilhados do @nuxs/capsule.
3
+ *
4
+ * Princípios:
5
+ * - JSON pra cápsulas estruturadas (network, api, stack, threads, events, sql, log)
6
+ * - Markdown bullets pra cápsulas de prosa (session) — economiza ~30% tokens
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
package/dist/wrap.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * CLI: `nuxs-capsule wrap` (estilo `codag wrap`).
3
+ *
4
+ * Pre-processa streams shell ANTES do agente ver.
5
+ *
6
+ * Uso:
7
+ * kubectl logs prod | nuxs-capsule wrap --type log > capsule.json
8
+ * cat session.har | nuxs-capsule wrap --type network > capsule.json
9
+ * curl /api/big | nuxs-capsule wrap --type api
10
+ *
11
+ * Útil pra DevOps/SRE que rodam comandos shell antes de feed pro agente.
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=wrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
package/dist/wrap.js ADDED
@@ -0,0 +1,100 @@
1
+ /**
2
+ * CLI: `nuxs-capsule wrap` (estilo `codag wrap`).
3
+ *
4
+ * Pre-processa streams shell ANTES do agente ver.
5
+ *
6
+ * Uso:
7
+ * kubectl logs prod | nuxs-capsule wrap --type log > capsule.json
8
+ * cat session.har | nuxs-capsule wrap --type network > capsule.json
9
+ * curl /api/big | nuxs-capsule wrap --type api
10
+ *
11
+ * Útil pra DevOps/SRE que rodam comandos shell antes de feed pro agente.
12
+ */
13
+ import { networkCapsule } from './tools/networkCapsule.js';
14
+ import { apiCapsule } from './tools/apiCapsule.js';
15
+ import { stackCapsule } from './tools/stackCapsule.js';
16
+ import { sqlCapsule } from './tools/sqlCapsule.js';
17
+ const SUPPORTED_TYPES = ['network', 'api', 'stack', 'sql'];
18
+ async function main() {
19
+ const args = parseArgs(process.argv.slice(2));
20
+ const type = args.type;
21
+ if (args.help || !type) {
22
+ printHelp();
23
+ process.exit(0);
24
+ }
25
+ if (!SUPPORTED_TYPES.includes(type)) {
26
+ console.error(`❌ Tipo "${type}" não suportado em wrap.`);
27
+ console.error(` Suportados: ${SUPPORTED_TYPES.join(', ')}`);
28
+ process.exit(1);
29
+ }
30
+ // Lê stdin
31
+ const input = await readStdin();
32
+ if (!input.trim()) {
33
+ console.error('❌ stdin vazio. Use: comando | nuxs-capsule wrap --type ...');
34
+ process.exit(1);
35
+ }
36
+ let result;
37
+ try {
38
+ switch (type) {
39
+ case 'network':
40
+ result = networkCapsule(input);
41
+ break;
42
+ case 'api':
43
+ result = apiCapsule(input, args.source);
44
+ break;
45
+ case 'stack':
46
+ result = await stackCapsule(input, args.source);
47
+ break;
48
+ case 'sql':
49
+ result = await sqlCapsule(input, args.source ?? 'postgres');
50
+ break;
51
+ }
52
+ process.stdout.write(JSON.stringify(result, null, 2) + '\n');
53
+ }
54
+ catch (err) {
55
+ console.error(`❌ Erro ao comprimir:`, err.message);
56
+ process.exit(1);
57
+ }
58
+ }
59
+ function parseArgs(argv) {
60
+ const out = {};
61
+ for (let i = 0; i < argv.length; i++) {
62
+ const a = argv[i];
63
+ if (a === '--help' || a === '-h')
64
+ out.help = true;
65
+ else if (a === '--type' || a === '-t')
66
+ out.type = argv[++i];
67
+ else if (a === '--source' || a === '-s')
68
+ out.source = argv[++i];
69
+ }
70
+ return out;
71
+ }
72
+ function printHelp() {
73
+ console.log(`
74
+ Nuxs Capsule wrap — pre-processa streams shell pra agente IA
75
+
76
+ Uso:
77
+ comando | nuxs-capsule wrap --type <tipo> [--source <fonte>]
78
+
79
+ Tipos:
80
+ network HAR file (DevTools Network)
81
+ api JSON gigante (response API)
82
+ stack Stack trace de erro
83
+ sql Slow query log
84
+
85
+ Exemplos:
86
+ cat session.har | nuxs-capsule wrap -t network > capsule.json
87
+ curl /api/big | nuxs-capsule wrap -t api
88
+ kubectl logs pod | nuxs-capsule wrap -t stack
89
+ cat slow.log | nuxs-capsule wrap -t sql -s postgres
90
+ `);
91
+ }
92
+ async function readStdin() {
93
+ const chunks = [];
94
+ for await (const chunk of process.stdin) {
95
+ chunks.push(chunk);
96
+ }
97
+ return Buffer.concat(chunks).toString('utf8');
98
+ }
99
+ main();
100
+ //# sourceMappingURL=wrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap.js","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "nuxs-capsule",
3
+ "version": "0.1.1",
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
+ "keywords": [
6
+ "mcp",
7
+ "claude",
8
+ "cursor",
9
+ "ai",
10
+ "tokens",
11
+ "compression",
12
+ "anthropic",
13
+ "openai"
14
+ ],
15
+ "homepage": "https://nuxs.ai",
16
+ "bugs": "https://github.com/josueramosleites-collab/pixeldesk/issues",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/josueramosleites-collab/pixeldesk.git",
20
+ "directory": "packages/capsule"
21
+ },
22
+ "license": "MIT",
23
+ "author": "Josue Ramos Leites <josueramosleites@gmail.com>",
24
+ "type": "module",
25
+ "main": "./dist/server.js",
26
+ "bin": {
27
+ "nuxs-capsule": "bin/nuxs-capsule.js",
28
+ "nuxs-capsule-intercept": "bin/nuxs-capsule-intercept.js"
29
+ },
30
+ "files": [
31
+ "dist/",
32
+ "bin/",
33
+ "README.md",
34
+ "LICENSE"
35
+ ],
36
+ "scripts": {
37
+ "build": "tsc -p tsconfig.json",
38
+ "dev": "tsx watch src/server.ts",
39
+ "test": "vitest run",
40
+ "lint": "tsc --noEmit",
41
+ "compile:standalone": "bun build src/intercept.ts --compile --outfile bin/nuxs-capsule-intercept-bin"
42
+ },
43
+ "dependencies": {
44
+ "@modelcontextprotocol/sdk": "^1.3.0",
45
+ "zod": "^3.23.0"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^24.0.0",
49
+ "tsx": "^4.19.0",
50
+ "typescript": "^5.6.0",
51
+ "vitest": "^2.1.0"
52
+ },
53
+ "engines": {
54
+ "node": ">=20.0.0"
55
+ },
56
+ "publishConfig": {
57
+ "access": "public",
58
+ "registry": "https://registry.npmjs.org/"
59
+ }
60
+ }