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.
- package/README.md +21 -0
- package/bin/nuxs-capsule-intercept.js +4 -0
- package/bin/nuxs-capsule.js +20 -0
- package/dist/install.d.ts +17 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +243 -0
- package/dist/install.js.map +1 -0
- package/dist/intercept.d.ts +19 -0
- package/dist/intercept.d.ts.map +1 -0
- package/dist/intercept.js +232 -0
- package/dist/intercept.js.map +1 -0
- package/dist/lib/fileStat.d.ts +20 -0
- package/dist/lib/fileStat.d.ts.map +1 -0
- package/dist/lib/fileStat.js +71 -0
- package/dist/lib/fileStat.js.map +1 -0
- package/dist/lib/fingerprint.d.ts +10 -0
- package/dist/lib/fingerprint.d.ts.map +1 -0
- package/dist/lib/fingerprint.js +41 -0
- package/dist/lib/fingerprint.js.map +1 -0
- package/dist/lib/tokenCount.d.ts +13 -0
- package/dist/lib/tokenCount.d.ts.map +1 -0
- package/dist/lib/tokenCount.js +32 -0
- package/dist/lib/tokenCount.js.map +1 -0
- package/dist/license/check.d.ts +14 -0
- package/dist/license/check.d.ts.map +1 -0
- package/dist/license/check.js +141 -0
- package/dist/license/check.js.map +1 -0
- package/dist/providers/llmClient.d.ts +20 -0
- package/dist/providers/llmClient.d.ts.map +1 -0
- package/dist/providers/llmClient.js +40 -0
- package/dist/providers/llmClient.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +268 -0
- package/dist/server.js.map +1 -0
- package/dist/setup.d.ts +14 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +135 -0
- package/dist/setup.js.map +1 -0
- package/dist/telemetry/usage.d.ts +19 -0
- package/dist/telemetry/usage.d.ts.map +1 -0
- package/dist/telemetry/usage.js +114 -0
- package/dist/telemetry/usage.js.map +1 -0
- package/dist/tools/apiCapsule.d.ts +16 -0
- package/dist/tools/apiCapsule.d.ts.map +1 -0
- package/dist/tools/apiCapsule.js +169 -0
- package/dist/tools/apiCapsule.js.map +1 -0
- package/dist/tools/eventsCapsule.d.ts +15 -0
- package/dist/tools/eventsCapsule.d.ts.map +1 -0
- package/dist/tools/eventsCapsule.js +72 -0
- package/dist/tools/eventsCapsule.js.map +1 -0
- package/dist/tools/logCapsule.d.ts +38 -0
- package/dist/tools/logCapsule.d.ts.map +1 -0
- package/dist/tools/logCapsule.js +283 -0
- package/dist/tools/logCapsule.js.map +1 -0
- package/dist/tools/networkCapsule.d.ts +18 -0
- package/dist/tools/networkCapsule.d.ts.map +1 -0
- package/dist/tools/networkCapsule.js +151 -0
- package/dist/tools/networkCapsule.js.map +1 -0
- package/dist/tools/sessionCapsule.d.ts +21 -0
- package/dist/tools/sessionCapsule.d.ts.map +1 -0
- package/dist/tools/sessionCapsule.js +174 -0
- package/dist/tools/sessionCapsule.js.map +1 -0
- package/dist/tools/sqlCapsule.d.ts +17 -0
- package/dist/tools/sqlCapsule.d.ts.map +1 -0
- package/dist/tools/sqlCapsule.js +144 -0
- package/dist/tools/sqlCapsule.js.map +1 -0
- package/dist/tools/stackCapsule.d.ts +9 -0
- package/dist/tools/stackCapsule.d.ts.map +1 -0
- package/dist/tools/stackCapsule.js +132 -0
- package/dist/tools/stackCapsule.js.map +1 -0
- package/dist/tools/threadsCapsule.d.ts +14 -0
- package/dist/tools/threadsCapsule.d.ts.map +1 -0
- package/dist/tools/threadsCapsule.js +77 -0
- package/dist/tools/threadsCapsule.js.map +1 -0
- package/dist/types.d.ts +199 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/wrap.d.ts +14 -0
- package/dist/wrap.d.ts.map +1 -0
- package/dist/wrap.js +100 -0
- package/dist/wrap.js.map +1 -0
- 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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,KAAK,GACL,OAAO,GACP,SAAS,GACT,QAAQ,GACR,SAAS,GACT,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,CAAC;AAE7E,MAAM,MAAM,SAAS,GACjB,aAAa,GACb,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,OAAO,GACP,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;IACnB,QAAQ,EAAE;QACR,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,uBAAuB,EAAE,MAAM,CAAC;QAChC,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAID,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,KAAK,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;CACJ;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACnD,WAAW,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;QAC5D,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChD,CAAC,CAAC;IACH,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,cAAc,CAAC;QACxD,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,KAAK,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,SAAS,EAAE,KAAK,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAGD,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;CACpD;AAID,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,WAAW,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,SAAS,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAID,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,kBAAkB,CAAC,EAAE;QACnB,aAAa,EAAE,YAAY,CAAC;QAC5B,kBAAkB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QACtC,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH"}
|
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
|
package/dist/wrap.js.map
ADDED
|
@@ -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
|
+
}
|