compress-claude 1.0.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.
@@ -0,0 +1,2 @@
1
+ export declare function installHooks(cwd: string): Promise<void>;
2
+ //# sourceMappingURL=hooks.d.ts.map
package/dist/hooks.js ADDED
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.installHooks = installHooks;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const logger_1 = require("./utils/logger");
41
+ // --- Hooks Installer ---
42
+ async function installHooks(cwd) {
43
+ (0, logger_1.log)('HOOKS', 'start', 'Installing hooks');
44
+ // Ensure .claude directory exists
45
+ const settingsDir = path.join(cwd, '.claude');
46
+ if (!fs.existsSync(settingsDir)) {
47
+ fs.mkdirSync(settingsDir, { recursive: true });
48
+ }
49
+ const settingsFile = path.join(settingsDir, 'settings.json');
50
+ let settings = {};
51
+ try {
52
+ settings = JSON.parse(fs.readFileSync(settingsFile, 'utf8'));
53
+ }
54
+ catch {
55
+ settings = {};
56
+ }
57
+ // Add post-session hook to run learn
58
+ if (!settings.hooks)
59
+ settings.hooks = {};
60
+ const learnCmd = 'npx compress-claude --learn 2>/dev/null || true';
61
+ if (!settings.hooks.stop)
62
+ settings.hooks.stop = [];
63
+ const hasLearnHook = settings.hooks.stop.some((h) => h.command && h.command.includes('compress-claude --learn'));
64
+ if (!hasLearnHook) {
65
+ settings.hooks.stop.push({
66
+ matcher: '',
67
+ command: learnCmd,
68
+ });
69
+ (0, logger_1.log)('HOOKS', 'install', 'Added post-session learn hook');
70
+ }
71
+ else {
72
+ (0, logger_1.log)('HOOKS', 'skip', 'Post-session learn hook already installed');
73
+ }
74
+ fs.writeFileSync(settingsFile, JSON.stringify(settings, null, 2), 'utf8');
75
+ (0, logger_1.log)('HOOKS', 'save', `Settings saved to ${settingsFile}`);
76
+ // Set up global peak hours awareness script
77
+ const globalSettingsDir = path.join(os.homedir(), '.claude');
78
+ if (!fs.existsSync(globalSettingsDir)) {
79
+ fs.mkdirSync(globalSettingsDir, { recursive: true });
80
+ }
81
+ const scriptsDir = path.join(os.homedir(), '.compress-claude');
82
+ if (!fs.existsSync(scriptsDir)) {
83
+ fs.mkdirSync(scriptsDir, { recursive: true });
84
+ }
85
+ const peakScript = path.join(scriptsDir, 'peak-check.sh');
86
+ const peakContent = [
87
+ '#!/bin/bash',
88
+ '# Peak hours check -- Anthropic throttles 10AM-4PM EST',
89
+ 'HOUR_EST=$(TZ="America/New_York" date +%H)',
90
+ 'if [ "$HOUR_EST" -ge 10 ] && [ "$HOUR_EST" -lt 16 ]; then',
91
+ ' echo "[compress-claude] Peak hours (${HOUR_EST}:00 EST). Expect tighter rate limits. Consider using --proxy for compression."',
92
+ 'fi',
93
+ ].join('\n') + '\n';
94
+ fs.writeFileSync(peakScript, peakContent, { mode: 0o755 });
95
+ (0, logger_1.log)('HOOKS', 'install', `Peak hours check script at ${peakScript}`);
96
+ (0, logger_1.log)('HOOKS', 'done', 'Installed hooks:');
97
+ (0, logger_1.log)('HOOKS', 'info', 'Post-session: Auto-runs --learn when you close a session');
98
+ (0, logger_1.log)('HOOKS', 'info', 'Peak check: Warns about Anthropic throttling during peak EST hours');
99
+ (0, logger_1.log)('HOOKS', 'info', `Hooks config: ${settingsFile}`);
100
+ }
101
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
package/dist/index.js ADDED
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const cli_1 = require("./cli");
5
+ const scanner_1 = require("./scanner");
6
+ const generator_1 = require("./generator");
7
+ const server_1 = require("./proxy/server");
8
+ const learning_1 = require("./learning");
9
+ const hooks_1 = require("./hooks");
10
+ const doctor_1 = require("./doctor");
11
+ const logger_1 = require("./utils/logger");
12
+ async function main() {
13
+ const opts = (0, cli_1.parseArgs)(process.argv.slice(2));
14
+ if (opts.help) {
15
+ (0, cli_1.showHelp)();
16
+ return;
17
+ }
18
+ if (opts.proxy) {
19
+ (0, server_1.startProxy)({ port: opts.port || 4800, verbose: opts.verbose });
20
+ return;
21
+ }
22
+ if (opts.learn) {
23
+ await (0, learning_1.runLearn)(process.cwd());
24
+ return;
25
+ }
26
+ if (opts.hooks) {
27
+ await (0, hooks_1.installHooks)(process.cwd());
28
+ return;
29
+ }
30
+ if (opts.doctor) {
31
+ (0, doctor_1.runDoctor)();
32
+ return;
33
+ }
34
+ // Default: scan and generate
35
+ const stack = (0, scanner_1.detectStack)(process.cwd());
36
+ (0, generator_1.generateContextFiles)(process.cwd(), stack, { force: opts.force, dryRun: opts.dryRun });
37
+ }
38
+ main().catch((err) => {
39
+ (0, logger_1.logError)('CLI', 'fatal', err.message);
40
+ process.exit(1);
41
+ });
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,78 @@
1
+ export interface ToolInput {
2
+ command?: string;
3
+ file_path?: string;
4
+ pattern?: string;
5
+ [key: string]: unknown;
6
+ }
7
+ export interface ToolCall {
8
+ name: string;
9
+ input?: ToolInput;
10
+ }
11
+ export interface ToolPair {
12
+ tool: ToolCall;
13
+ resultText: string;
14
+ contentSize: number;
15
+ isError: boolean;
16
+ }
17
+ export interface ErrorFix {
18
+ tool: string;
19
+ failed: string;
20
+ fixed: string;
21
+ error: string;
22
+ }
23
+ export interface LargeResult {
24
+ tool: string;
25
+ input: string;
26
+ size: number;
27
+ tokens: number;
28
+ }
29
+ export interface FailedSearch {
30
+ tool: string;
31
+ input?: ToolInput;
32
+ }
33
+ export interface RetrySpiral {
34
+ command: string;
35
+ count: number;
36
+ }
37
+ export interface ToolStats {
38
+ calls: number;
39
+ tokens: number;
40
+ }
41
+ export interface Patterns {
42
+ errorFixes: ErrorFix[];
43
+ readStorms: Record<string, number>;
44
+ retrySpirals: RetrySpiral[];
45
+ largeResults: LargeResult[];
46
+ failedSearches: FailedSearch[];
47
+ totalToolCalls: number;
48
+ totalResultTokens: number;
49
+ toolBreakdown: Record<string, ToolStats>;
50
+ }
51
+ export interface Learning {
52
+ type: 'mistake' | 'optimization';
53
+ severity: 'high' | 'medium' | 'low';
54
+ text: string;
55
+ failed?: string;
56
+ fixed?: string;
57
+ }
58
+ export interface ApplyResult {
59
+ applied: number;
60
+ files: string[];
61
+ }
62
+ export interface TranscriptMessage {
63
+ role: string;
64
+ content: unknown;
65
+ }
66
+ export declare function findTranscripts(projectDir: string): string[];
67
+ export declare function parseTranscript(filePath: string): TranscriptMessage[];
68
+ export declare function extractToolPairs(messages: TranscriptMessage[]): ToolPair[];
69
+ export declare function getProjectDir(cwd: string): string | null;
70
+ export declare function getAllProjectDirs(): string[];
71
+ export declare function findPatterns(pairs: ToolPair[]): Patterns;
72
+ export declare function generateLearnings(allPatterns: Patterns[]): Learning[];
73
+ export declare function applyLearnings(cwd: string, learnings: Learning[]): ApplyResult;
74
+ export interface LearnOptions {
75
+ all?: boolean;
76
+ }
77
+ export declare function runLearn(cwd: string, opts?: LearnOptions): Promise<void>;
78
+ //# sourceMappingURL=learning.d.ts.map