@webywz/context-diet 0.1.1 → 0.2.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/README.md +35 -17
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +18 -7
- package/dist/cli.js.map +1 -1
- package/dist/diet.d.ts.map +1 -1
- package/dist/diet.js +14 -2
- package/dist/diet.js.map +1 -1
- package/dist/heuristics.d.ts +15 -1
- package/dist/heuristics.d.ts.map +1 -1
- package/dist/heuristics.js +95 -1
- package/dist/heuristics.js.map +1 -1
- package/dist/html.d.ts +7 -0
- package/dist/html.d.ts.map +1 -0
- package/dist/html.js +62 -0
- package/dist/html.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/parse-args.d.ts +5 -1
- package/dist/parse-args.d.ts.map +1 -1
- package/dist/parse-args.js +30 -1
- package/dist/parse-args.js.map +1 -1
- package/dist/presets.d.ts +29 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +50 -0
- package/dist/presets.js.map +1 -0
- package/dist/report.d.ts +14 -1
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +65 -8
- package/dist/report.js.map +1 -1
- package/dist/truncate.d.ts +1 -1
- package/dist/truncate.d.ts.map +1 -1
- package/dist/truncate.js +51 -5
- package/dist/truncate.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
package/dist/parse-args.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type PresetName } from "./presets.js";
|
|
1
2
|
import { type KeepCategory, type LlmProvider } from "./types.js";
|
|
2
3
|
export interface CliArgs {
|
|
3
4
|
help: boolean;
|
|
@@ -5,15 +6,18 @@ export interface CliArgs {
|
|
|
5
6
|
json: boolean;
|
|
6
7
|
quiet: boolean;
|
|
7
8
|
deepen: boolean;
|
|
9
|
+
dryRun: boolean;
|
|
10
|
+
diff: boolean;
|
|
8
11
|
file?: string;
|
|
9
12
|
output?: string;
|
|
10
13
|
maxTokens?: number;
|
|
11
14
|
keep: KeepCategory[];
|
|
15
|
+
preset?: PresetName;
|
|
12
16
|
provider?: LlmProvider;
|
|
13
17
|
}
|
|
14
18
|
export declare class UsageError extends Error {
|
|
15
19
|
constructor(message: string);
|
|
16
20
|
}
|
|
17
|
-
export declare const HELP_TEXT = "context-diet \u2014 slim LLM context before you send it\n\nUsage:\n context-diet [file] [options]\n cat logs.txt | context-diet --max-tokens 2000\n\nOptions:\n -o, --output <file> Write slimmed text to a file instead of stdout\n --max-tokens <n> Truncate to an estimated token budget\n --keep <cats> Prefer headings, code, lists when truncating\n (comma or pipe: headings|code|lists)\n --json Print a machine-readable report (includes text)\n --deepen Optional LLM pass (OPENAI_API_KEY / ANTHROPIC_API_KEY)\n --provider <name> openai | anthropic (default: first available key)\n -q, --quiet Do not print the human report to stderr\n -h, --help Show this help\n -V, --version Show version\n\nOffline by default. --deepen is never required.\nToken counts are a cl100k-ish heuristic, not a billed tokenizer.\n";
|
|
21
|
+
export declare const HELP_TEXT = "context-diet \u2014 slim LLM context before you send it\n\nUsage:\n context-diet [file] [options]\n cat logs.txt | context-diet --preset logs --max-tokens 2000\n\nOptions:\n -o, --output <file> Write slimmed text to a file instead of stdout\n --max-tokens <n> Truncate to an estimated token budget\n --keep <cats> Prefer headings, code, lists when truncating\n (comma or pipe: headings|code|lists)\n --preset <name> logs | email | chat | html\n (sets keep defaults + extra strippers)\n --json Print a machine-readable report (includes text)\n --dry-run Report only; do not emit slimmed body / -o\n --diff Show removed lines on stderr (capped)\n --deepen Optional LLM pass (OPENAI_API_KEY / ANTHROPIC_API_KEY)\n --provider <name> openai | anthropic (default: first available key)\n -q, --quiet Do not print the human report to stderr\n -h, --help Show this help\n -V, --version Show version\n\nOffline by default. --deepen is never required.\nRespects NO_COLOR / FORCE_COLOR for the human report.\nToken counts are a cl100k-ish heuristic, not a billed tokenizer.\n";
|
|
18
22
|
export declare function parseArgs(argv: string[]): CliArgs;
|
|
19
23
|
//# sourceMappingURL=parse-args.d.ts.map
|
package/dist/parse-args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-args.d.ts","sourceRoot":"","sources":["../src/parse-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI5B;AAoDD,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"parse-args.d.ts","sourceRoot":"","sources":["../src/parse-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI5B;AAoDD,eAAO,MAAM,SAAS,6wCA0BrB,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAmIjD"}
|
package/dist/parse-args.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isPresetName } from "./presets.js";
|
|
1
2
|
import { KEEP_CATEGORIES } from "./types.js";
|
|
2
3
|
export class UsageError extends Error {
|
|
3
4
|
constructor(message) {
|
|
@@ -48,14 +49,18 @@ context-diet — slim LLM context before you send it
|
|
|
48
49
|
|
|
49
50
|
Usage:
|
|
50
51
|
context-diet [file] [options]
|
|
51
|
-
cat logs.txt | context-diet --max-tokens 2000
|
|
52
|
+
cat logs.txt | context-diet --preset logs --max-tokens 2000
|
|
52
53
|
|
|
53
54
|
Options:
|
|
54
55
|
-o, --output <file> Write slimmed text to a file instead of stdout
|
|
55
56
|
--max-tokens <n> Truncate to an estimated token budget
|
|
56
57
|
--keep <cats> Prefer headings, code, lists when truncating
|
|
57
58
|
(comma or pipe: headings|code|lists)
|
|
59
|
+
--preset <name> logs | email | chat | html
|
|
60
|
+
(sets keep defaults + extra strippers)
|
|
58
61
|
--json Print a machine-readable report (includes text)
|
|
62
|
+
--dry-run Report only; do not emit slimmed body / -o
|
|
63
|
+
--diff Show removed lines on stderr (capped)
|
|
59
64
|
--deepen Optional LLM pass (OPENAI_API_KEY / ANTHROPIC_API_KEY)
|
|
60
65
|
--provider <name> openai | anthropic (default: first available key)
|
|
61
66
|
-q, --quiet Do not print the human report to stderr
|
|
@@ -63,6 +68,7 @@ Options:
|
|
|
63
68
|
-V, --version Show version
|
|
64
69
|
|
|
65
70
|
Offline by default. --deepen is never required.
|
|
71
|
+
Respects NO_COLOR / FORCE_COLOR for the human report.
|
|
66
72
|
Token counts are a cl100k-ish heuristic, not a billed tokenizer.
|
|
67
73
|
`;
|
|
68
74
|
export function parseArgs(argv) {
|
|
@@ -72,6 +78,8 @@ export function parseArgs(argv) {
|
|
|
72
78
|
json: false,
|
|
73
79
|
quiet: false,
|
|
74
80
|
deepen: false,
|
|
81
|
+
dryRun: false,
|
|
82
|
+
diff: false,
|
|
75
83
|
keep: [],
|
|
76
84
|
};
|
|
77
85
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -108,6 +116,14 @@ export function parseArgs(argv) {
|
|
|
108
116
|
args.deepen = true;
|
|
109
117
|
continue;
|
|
110
118
|
}
|
|
119
|
+
if (a === "--dry-run") {
|
|
120
|
+
args.dryRun = true;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (a === "--diff") {
|
|
124
|
+
args.diff = true;
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
111
127
|
if (a === "-o" || a === "--output" || a.startsWith("--output=")) {
|
|
112
128
|
const inline = a.startsWith("--output=") ? a.slice("--output=".length) : undefined;
|
|
113
129
|
const got = takeValue(argv, i + 1, "--output", inline);
|
|
@@ -131,6 +147,19 @@ export function parseArgs(argv) {
|
|
|
131
147
|
i = got.next - 1;
|
|
132
148
|
continue;
|
|
133
149
|
}
|
|
150
|
+
if (a === "--preset" || a.startsWith("--preset=")) {
|
|
151
|
+
const inline = a.startsWith("--preset=")
|
|
152
|
+
? a.slice("--preset=".length)
|
|
153
|
+
: undefined;
|
|
154
|
+
const got = takeValue(argv, i + 1, "--preset", inline);
|
|
155
|
+
const name = got.value.toLowerCase();
|
|
156
|
+
if (!isPresetName(name)) {
|
|
157
|
+
throw new UsageError(`Unknown --preset "${got.value}". Use logs, email, chat, or html.`);
|
|
158
|
+
}
|
|
159
|
+
args.preset = name;
|
|
160
|
+
i = got.next - 1;
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
134
163
|
if (a === "--provider" || a.startsWith("--provider=")) {
|
|
135
164
|
const inline = a.startsWith("--provider=")
|
|
136
165
|
? a.slice("--provider=".length)
|
package/dist/parse-args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-args.js","sourceRoot":"","sources":["../src/parse-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAuC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-args.js","sourceRoot":"","sources":["../src/parse-args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { KeepCategory } from "./types.js";
|
|
2
|
+
export declare const PRESET_NAMES: readonly ["logs", "email", "chat", "html"];
|
|
3
|
+
export type PresetName = (typeof PRESET_NAMES)[number];
|
|
4
|
+
export interface PresetConfig {
|
|
5
|
+
/** Default keep categories applied when the user did not pass --keep. */
|
|
6
|
+
keep: KeepCategory[];
|
|
7
|
+
/** Strip HTML tags / scripts / styles before other heuristics. */
|
|
8
|
+
stripHtml: boolean;
|
|
9
|
+
/** Drop quoted email reply chains ("> …", "On … wrote:"). */
|
|
10
|
+
stripQuotedReplies: boolean;
|
|
11
|
+
/** Prefer ERROR/WARN/FATAL log lines when truncating to a budget. */
|
|
12
|
+
preferErrors: boolean;
|
|
13
|
+
/** Collapse chat reaction / system / timestamp-only chrome. */
|
|
14
|
+
stripChatChrome: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const PRESETS: Record<PresetName, PresetConfig>;
|
|
17
|
+
export declare function isPresetName(value: string): value is PresetName;
|
|
18
|
+
/**
|
|
19
|
+
* Merge a preset with explicit CLI/library options.
|
|
20
|
+
* Explicit `keep` wins over the preset default when non-empty.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolvePreset(name: PresetName | undefined, keep: KeepCategory[] | undefined): {
|
|
23
|
+
keep: KeepCategory[];
|
|
24
|
+
stripHtml: boolean;
|
|
25
|
+
stripQuotedReplies: boolean;
|
|
26
|
+
preferErrors: boolean;
|
|
27
|
+
stripChatChrome: boolean;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,YAAY,4CAA6C,CAAC;AACvE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,kEAAkE;IAClE,SAAS,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qEAAqE;IACrE,YAAY,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,CA6BpD,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAE/D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,GAAG,SAAS,EAC5B,IAAI,EAAE,YAAY,EAAE,GAAG,SAAS,GAC/B;IACD,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAUA"}
|
package/dist/presets.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export const PRESET_NAMES = ["logs", "email", "chat", "html"];
|
|
2
|
+
export const PRESETS = {
|
|
3
|
+
logs: {
|
|
4
|
+
keep: ["code"],
|
|
5
|
+
stripHtml: false,
|
|
6
|
+
stripQuotedReplies: false,
|
|
7
|
+
preferErrors: true,
|
|
8
|
+
stripChatChrome: false,
|
|
9
|
+
},
|
|
10
|
+
email: {
|
|
11
|
+
keep: ["headings", "lists"],
|
|
12
|
+
stripHtml: false,
|
|
13
|
+
stripQuotedReplies: true,
|
|
14
|
+
preferErrors: false,
|
|
15
|
+
stripChatChrome: false,
|
|
16
|
+
},
|
|
17
|
+
chat: {
|
|
18
|
+
keep: ["code", "lists"],
|
|
19
|
+
stripHtml: false,
|
|
20
|
+
stripQuotedReplies: false,
|
|
21
|
+
preferErrors: false,
|
|
22
|
+
stripChatChrome: true,
|
|
23
|
+
},
|
|
24
|
+
html: {
|
|
25
|
+
keep: ["headings", "code", "lists"],
|
|
26
|
+
stripHtml: true,
|
|
27
|
+
stripQuotedReplies: false,
|
|
28
|
+
preferErrors: false,
|
|
29
|
+
stripChatChrome: false,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
export function isPresetName(value) {
|
|
33
|
+
return PRESET_NAMES.includes(value);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Merge a preset with explicit CLI/library options.
|
|
37
|
+
* Explicit `keep` wins over the preset default when non-empty.
|
|
38
|
+
*/
|
|
39
|
+
export function resolvePreset(name, keep) {
|
|
40
|
+
const preset = name ? PRESETS[name] : undefined;
|
|
41
|
+
const explicitKeep = keep && keep.length > 0 ? keep : undefined;
|
|
42
|
+
return {
|
|
43
|
+
keep: explicitKeep ?? preset?.keep ?? [],
|
|
44
|
+
stripHtml: preset?.stripHtml ?? false,
|
|
45
|
+
stripQuotedReplies: preset?.stripQuotedReplies ?? false,
|
|
46
|
+
preferErrors: preset?.preferErrors ?? false,
|
|
47
|
+
stripChatChrome: preset?.stripChatChrome ?? false,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAgBvE,MAAM,CAAC,MAAM,OAAO,GAAqC;IACvD,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,KAAK;QAChB,kBAAkB,EAAE,KAAK;QACzB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACvB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;QAC3B,SAAS,EAAE,KAAK;QAChB,kBAAkB,EAAE,IAAI;QACxB,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,KAAK;KACvB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;QACvB,SAAS,EAAE,KAAK;QAChB,kBAAkB,EAAE,KAAK;QACzB,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,IAAI;KACtB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;QACnC,SAAS,EAAE,IAAI;QACf,kBAAkB,EAAE,KAAK;QACzB,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,KAAK;KACvB;CACF,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAQ,YAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,IAA4B,EAC5B,IAAgC;IAQhC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,MAAM,YAAY,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,OAAO;QACL,IAAI,EAAE,YAAY,IAAI,MAAM,EAAE,IAAI,IAAI,EAAE;QACxC,SAAS,EAAE,MAAM,EAAE,SAAS,IAAI,KAAK;QACrC,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,IAAI,KAAK;QACvD,YAAY,EAAE,MAAM,EAAE,YAAY,IAAI,KAAK;QAC3C,eAAe,EAAE,MAAM,EAAE,eAAe,IAAI,KAAK;KAClD,CAAC;AACJ,CAAC"}
|
package/dist/report.d.ts
CHANGED
|
@@ -19,6 +19,19 @@ export interface JsonReport {
|
|
|
19
19
|
cuts: CutCounts;
|
|
20
20
|
text: string;
|
|
21
21
|
}
|
|
22
|
+
export interface ReportStyle {
|
|
23
|
+
color: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Respect NO_COLOR / FORCE_COLOR (https://no-color.org/).
|
|
27
|
+
* When streamIsTTY is false and FORCE_COLOR is unset, stay plain.
|
|
28
|
+
*/
|
|
29
|
+
export declare function shouldUseColor(env?: NodeJS.ProcessEnv, streamIsTTY?: boolean): boolean;
|
|
22
30
|
export declare function toJsonReport(result: DietResult, source: string): JsonReport;
|
|
23
|
-
export declare function formatHumanReport(result: DietResult, source: string, version: string): string;
|
|
31
|
+
export declare function formatHumanReport(result: DietResult, source: string, version: string, style?: ReportStyle): string;
|
|
32
|
+
/**
|
|
33
|
+
* Show lines that disappeared after the diet (order-preserving multiset
|
|
34
|
+
* difference). Caps output so huge logs stay readable.
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatRemovedDiff(input: string, output: string, style?: ReportStyle): string;
|
|
24
37
|
//# sourceMappingURL=report.d.ts.map
|
package/dist/report.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;CAChB;AAkBD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAMT;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAiB3E;AAkBD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,WAA8B,GACpC,MAAM,CAoBR;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,WAA8B,GACpC,MAAM,CAiCR"}
|
package/dist/report.js
CHANGED
|
@@ -6,6 +6,24 @@ function pct(before, after) {
|
|
|
6
6
|
function commas(n) {
|
|
7
7
|
return n.toLocaleString("en-US");
|
|
8
8
|
}
|
|
9
|
+
const ansi = {
|
|
10
|
+
dim: (s, on) => (on ? `\u001b[2m${s}\u001b[0m` : s),
|
|
11
|
+
green: (s, on) => (on ? `\u001b[32m${s}\u001b[0m` : s),
|
|
12
|
+
red: (s, on) => (on ? `\u001b[31m${s}\u001b[0m` : s),
|
|
13
|
+
bold: (s, on) => (on ? `\u001b[1m${s}\u001b[0m` : s),
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Respect NO_COLOR / FORCE_COLOR (https://no-color.org/).
|
|
17
|
+
* When streamIsTTY is false and FORCE_COLOR is unset, stay plain.
|
|
18
|
+
*/
|
|
19
|
+
export function shouldUseColor(env = process.env, streamIsTTY) {
|
|
20
|
+
if (env.NO_COLOR !== undefined && env.NO_COLOR !== "")
|
|
21
|
+
return false;
|
|
22
|
+
if (env.FORCE_COLOR !== undefined) {
|
|
23
|
+
return env.FORCE_COLOR !== "" && env.FORCE_COLOR !== "0";
|
|
24
|
+
}
|
|
25
|
+
return Boolean(streamIsTTY);
|
|
26
|
+
}
|
|
9
27
|
export function toJsonReport(result, source) {
|
|
10
28
|
const savedChars = Math.max(0, result.input.chars - result.output.chars);
|
|
11
29
|
const savedTokens = Math.max(0, result.input.tokens - result.output.tokens);
|
|
@@ -25,8 +43,11 @@ export function toJsonReport(result, source) {
|
|
|
25
43
|
};
|
|
26
44
|
}
|
|
27
45
|
function cutLines(cuts) {
|
|
28
|
-
|
|
46
|
+
return [
|
|
29
47
|
["ansi sequences", String(cuts.ansiSequences)],
|
|
48
|
+
["html chrome", String(cuts.htmlChrome)],
|
|
49
|
+
["quoted replies", String(cuts.quotedReplies)],
|
|
50
|
+
["chat chrome", String(cuts.chatChrome)],
|
|
30
51
|
["boilerplate lines", String(cuts.boilerplateLines)],
|
|
31
52
|
["duplicate paragraphs", String(cuts.duplicateParagraphs)],
|
|
32
53
|
["whitespace runs", String(cuts.whitespaceRuns)],
|
|
@@ -35,22 +56,58 @@ function cutLines(cuts) {
|
|
|
35
56
|
["truncated tokens", `~${commas(cuts.truncatedTokens)}`],
|
|
36
57
|
["llm deepen", cuts.deepened ? "yes" : "no"],
|
|
37
58
|
];
|
|
38
|
-
const width = Math.max(...rows.map(([k]) => k.length));
|
|
39
|
-
return rows.map(([k, v]) => ` ${k.padEnd(width)} ${v}`);
|
|
40
59
|
}
|
|
41
|
-
export function formatHumanReport(result, source, version) {
|
|
60
|
+
export function formatHumanReport(result, source, version, style = { color: false }) {
|
|
42
61
|
const { input, output } = result;
|
|
43
62
|
const charPct = pct(input.chars, output.chars);
|
|
44
63
|
const tokPct = pct(input.tokens, output.tokens);
|
|
45
64
|
const sign = (n) => (n > 0 ? `−${n}%` : n < 0 ? `+${Math.abs(n)}%` : "0%");
|
|
65
|
+
const on = style.color;
|
|
66
|
+
const rows = cutLines(result.cuts);
|
|
67
|
+
const width = Math.max(...rows.map(([k]) => k.length));
|
|
68
|
+
const cutBody = rows.map(([k, v]) => ` ${ansi.dim(k.padEnd(width), on)} ${v}`);
|
|
46
69
|
const lines = [
|
|
47
|
-
`context-diet ${version}`,
|
|
70
|
+
ansi.bold(`context-diet ${version}`, on),
|
|
48
71
|
`source: ${source}`,
|
|
49
|
-
`chars: ${commas(input.chars)} → ${commas(output.chars)} (${sign(charPct)})`,
|
|
50
|
-
`tokens: ~${commas(input.tokens)} → ~${commas(output.tokens)} (${sign(tokPct)})`,
|
|
72
|
+
`chars: ${commas(input.chars)} → ${commas(output.chars)} (${ansi.green(sign(charPct), on)})`,
|
|
73
|
+
`tokens: ~${commas(input.tokens)} → ~${commas(output.tokens)} (${ansi.green(sign(tokPct), on)})`,
|
|
51
74
|
`cut:`,
|
|
52
|
-
...
|
|
75
|
+
...cutBody,
|
|
53
76
|
];
|
|
54
77
|
return lines.join("\n") + "\n";
|
|
55
78
|
}
|
|
79
|
+
const DIFF_CAP = 40;
|
|
80
|
+
/**
|
|
81
|
+
* Show lines that disappeared after the diet (order-preserving multiset
|
|
82
|
+
* difference). Caps output so huge logs stay readable.
|
|
83
|
+
*/
|
|
84
|
+
export function formatRemovedDiff(input, output, style = { color: false }) {
|
|
85
|
+
const inLines = input.split("\n");
|
|
86
|
+
const outCounts = new Map();
|
|
87
|
+
for (const line of output.split("\n")) {
|
|
88
|
+
outCounts.set(line, (outCounts.get(line) ?? 0) + 1);
|
|
89
|
+
}
|
|
90
|
+
const removed = [];
|
|
91
|
+
for (const line of inLines) {
|
|
92
|
+
const left = outCounts.get(line) ?? 0;
|
|
93
|
+
if (left > 0) {
|
|
94
|
+
outCounts.set(line, left - 1);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
// Skip pure blank noise in the diff view.
|
|
98
|
+
if (line.trim() === "")
|
|
99
|
+
continue;
|
|
100
|
+
removed.push(line);
|
|
101
|
+
}
|
|
102
|
+
if (removed.length === 0) {
|
|
103
|
+
return style.color
|
|
104
|
+
? `\u001b[2mdiff: no unique lines removed\u001b[0m\n`
|
|
105
|
+
: `diff: no unique lines removed\n`;
|
|
106
|
+
}
|
|
107
|
+
const shown = removed.slice(0, DIFF_CAP);
|
|
108
|
+
const on = style.color;
|
|
109
|
+
const header = ansi.dim(`diff (removed lines${removed.length > DIFF_CAP ? `, showing ${DIFF_CAP}/${removed.length}` : `, ${removed.length}`}):`, on);
|
|
110
|
+
const body = shown.map((line) => ansi.red(`- ${line}`, on));
|
|
111
|
+
return [header, ...body, ""].join("\n");
|
|
112
|
+
}
|
|
56
113
|
//# sourceMappingURL=report.js.map
|
package/dist/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
|
package/dist/truncate.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type Block } from "./blocks.js";
|
|
2
2
|
import type { CutCounts, KeepCategory } from "./types.js";
|
|
3
|
-
export declare function truncateToBudget(blocks: Block[], maxTokens: number, keep: KeepCategory[], cuts: CutCounts): Block[];
|
|
3
|
+
export declare function truncateToBudget(blocks: Block[], maxTokens: number, keep: KeepCategory[], cuts: CutCounts, preferErrors?: boolean): Block[];
|
|
4
4
|
//# sourceMappingURL=truncate.d.ts.map
|
package/dist/truncate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../src/truncate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../src/truncate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAwG1D,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,KAAK,EAAE,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,YAAY,EAAE,EACpB,IAAI,EAAE,SAAS,EACf,YAAY,UAAQ,GACnB,KAAK,EAAE,CAkFT"}
|
package/dist/truncate.js
CHANGED
|
@@ -1,6 +1,45 @@
|
|
|
1
1
|
import { joinBlocks } from "./blocks.js";
|
|
2
2
|
import { estimateTokens } from "./tokens.js";
|
|
3
|
-
|
|
3
|
+
const ERROR_LINE_RE = /\b(ERROR|FATAL|CRITICAL|WARN(?:ING)?|SEVERE|PANIC|EXCEPTION)\b/i;
|
|
4
|
+
function looksLikeError(block) {
|
|
5
|
+
if (block.type === "code" || block.type === "blank" || block.type === "rule") {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
return ERROR_LINE_RE.test(block.raw);
|
|
9
|
+
}
|
|
10
|
+
const LOG_LINE_RE = /^\s*(?:\[[^\]]+\]|\d{4}-\d{2}-\d{2})\s+(?:DEBUG|INFO|WARN(?:ING)?|ERROR|FATAL|TRACE|CRITICAL)\b/i;
|
|
11
|
+
/**
|
|
12
|
+
* When preferring errors, explode multi-line log paragraphs into one block
|
|
13
|
+
* per line so ERROR/WARN can outrank neighboring INFO/DEBUG under a budget.
|
|
14
|
+
*/
|
|
15
|
+
function explodeLogParagraphs(blocks, preferErrors) {
|
|
16
|
+
if (!preferErrors)
|
|
17
|
+
return blocks;
|
|
18
|
+
const out = [];
|
|
19
|
+
for (const block of blocks) {
|
|
20
|
+
if (block.type !== "paragraph") {
|
|
21
|
+
out.push(block);
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const lines = block.raw.split("\n");
|
|
25
|
+
if (lines.length < 2) {
|
|
26
|
+
out.push(block);
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const loggish = lines.filter((l) => l.trim() !== "").every((l) => LOG_LINE_RE.test(l) || ERROR_LINE_RE.test(l));
|
|
30
|
+
if (!loggish) {
|
|
31
|
+
out.push(block);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
for (const line of lines) {
|
|
35
|
+
if (line.trim() === "")
|
|
36
|
+
continue;
|
|
37
|
+
out.push({ type: "paragraph", raw: line });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
function scoreBlock(block, keep, preferErrors) {
|
|
4
43
|
let score = 1;
|
|
5
44
|
switch (block.type) {
|
|
6
45
|
case "heading":
|
|
@@ -30,7 +69,8 @@ function scoreBlock(block, keep) {
|
|
|
30
69
|
default:
|
|
31
70
|
score = 1;
|
|
32
71
|
}
|
|
33
|
-
|
|
72
|
+
if (preferErrors && looksLikeError(block))
|
|
73
|
+
score += 18;
|
|
34
74
|
return score;
|
|
35
75
|
}
|
|
36
76
|
function trimBlockToTokens(raw, maxTokens) {
|
|
@@ -62,15 +102,16 @@ function trimBlockToTokens(raw, maxTokens) {
|
|
|
62
102
|
const cut = raw.slice(0, lo).trimEnd();
|
|
63
103
|
return cut.length === 0 ? "…" : `${cut}\n…`;
|
|
64
104
|
}
|
|
65
|
-
export function truncateToBudget(blocks, maxTokens, keep, cuts) {
|
|
105
|
+
export function truncateToBudget(blocks, maxTokens, keep, cuts, preferErrors = false) {
|
|
66
106
|
if (!(maxTokens > 0))
|
|
67
107
|
return blocks;
|
|
108
|
+
blocks = explodeLogParagraphs(blocks, preferErrors);
|
|
68
109
|
const keepSet = new Set(keep);
|
|
69
110
|
const tokens = blocks.map((b) => estimateTokens(b.raw));
|
|
70
111
|
let total = tokens.reduce((a, b) => a + b, 0);
|
|
71
112
|
if (total <= maxTokens)
|
|
72
113
|
return blocks;
|
|
73
|
-
const scores = blocks.map((b) => scoreBlock(b, keepSet));
|
|
114
|
+
const scores = blocks.map((b) => scoreBlock(b, keepSet, preferErrors));
|
|
74
115
|
const order = blocks
|
|
75
116
|
.map((_, i) => i)
|
|
76
117
|
.sort((a, b) => {
|
|
@@ -108,7 +149,12 @@ export function truncateToBudget(blocks, maxTokens, keep, cuts) {
|
|
|
108
149
|
return next;
|
|
109
150
|
// Still over: trim the lowest-score, largest remaining block from the end.
|
|
110
151
|
const trimOrder = next
|
|
111
|
-
.map((b, i) => ({
|
|
152
|
+
.map((b, i) => ({
|
|
153
|
+
i,
|
|
154
|
+
b,
|
|
155
|
+
s: scoreBlock(b, keepSet, preferErrors),
|
|
156
|
+
t: estimateTokens(b.raw),
|
|
157
|
+
}))
|
|
112
158
|
.filter((x) => x.b.type !== "blank")
|
|
113
159
|
.sort((a, b) => a.s - b.s || b.t - a.t || b.i - a.i);
|
|
114
160
|
for (const item of trimOrder) {
|
package/dist/truncate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"truncate.js","sourceRoot":"","sources":["../src/truncate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAc,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,SAAS,
|
|
1
|
+
{"version":3,"file":"truncate.js","sourceRoot":"","sources":["../src/truncate.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
export type KeepCategory = "headings" | "code" | "lists";
|
|
2
2
|
export type LlmProvider = "openai" | "anthropic";
|
|
3
|
+
export type { PresetName } from "./presets.js";
|
|
3
4
|
export interface CutCounts {
|
|
4
5
|
/** ANSI escape sequences removed. */
|
|
5
6
|
ansiSequences: number;
|
|
7
|
+
/** HTML tags / scripts / styles / comments stripped. */
|
|
8
|
+
htmlChrome: number;
|
|
9
|
+
/** Quoted email reply lines dropped. */
|
|
10
|
+
quotedReplies: number;
|
|
11
|
+
/** Chat reaction / system / timestamp-only lines dropped. */
|
|
12
|
+
chatChrome: number;
|
|
6
13
|
/** Repeated / chrome lines dropped (logs, banners, signatures). */
|
|
7
14
|
boilerplateLines: number;
|
|
8
15
|
/** Near-identical paragraphs dropped. */
|
|
@@ -23,6 +30,13 @@ export interface DietOptions {
|
|
|
23
30
|
maxTokens?: number;
|
|
24
31
|
/** Prefer these block types when truncating to a token budget. */
|
|
25
32
|
keep?: KeepCategory[];
|
|
33
|
+
/**
|
|
34
|
+
* Named recipe: `logs`, `email`, `chat`, or `html`.
|
|
35
|
+
* Sets keep defaults and enables extra strippers; explicit `keep` wins.
|
|
36
|
+
*/
|
|
37
|
+
preset?: import("./presets.js").PresetName;
|
|
38
|
+
/** Force HTML chrome stripping even without the `html` preset. */
|
|
39
|
+
stripHtml?: boolean;
|
|
26
40
|
/**
|
|
27
41
|
* Optional second-pass compression via OpenAI or Anthropic.
|
|
28
42
|
* Requires a key in the environment; never implied.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,gBAAgB,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,eAAe,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EAIlD,CAAC;AAEF,wBAAgB,SAAS,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEjD,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,SAAS;IACxB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,gBAAgB,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,eAAe,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,cAAc,EAAE,UAAU,CAAC;IAC3C,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EAIlD,CAAC;AAEF,wBAAgB,SAAS,IAAI,SAAS,CAcrC"}
|
package/dist/types.js
CHANGED
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAkEA,MAAM,CAAC,MAAM,eAAe,GAA4B;IACtD,UAAU;IACV,MAAM;IACN,OAAO;CACR,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;QACb,gBAAgB,EAAE,CAAC;QACnB,mBAAmB,EAAE,CAAC;QACtB,cAAc,EAAE,CAAC;QACjB,iBAAiB,EAAE,CAAC;QACpB,eAAe,EAAE,CAAC;QAClB,eAAe,EAAE,CAAC;QAClB,QAAQ,EAAE,KAAK;KAChB,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webywz/context-diet",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Slim LLM context before you send it — drop noise, keep the signal, estimate tokens.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"llm",
|
|
@@ -46,11 +46,11 @@
|
|
|
46
46
|
"access": "public"
|
|
47
47
|
},
|
|
48
48
|
"scripts": {
|
|
49
|
-
"build": "tsc",
|
|
49
|
+
"build": "tsc && node scripts/ensure-cli-bin.mjs",
|
|
50
50
|
"test": "tsx --test test/*.test.ts",
|
|
51
51
|
"typecheck": "tsc --noEmit",
|
|
52
52
|
"dev": "tsx src/cli.ts",
|
|
53
|
-
"prepublishOnly": "npm test && npm run build
|
|
53
|
+
"prepublishOnly": "npm test && npm run build"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@types/node": "^22.15.29",
|