claude-code-infinite 1.0.1 → 1.0.3

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 ADDED
@@ -0,0 +1,67 @@
1
+ <p align="center">
2
+ <img width="470" height="214" alt="cc-inf-wide-transparent" src="https://github.com/user-attachments/assets/1524e5dc-637f-4d25-9a15-f7f7b65c8182" />
3
+ </p>
4
+
5
+ # Claude Code Infinite
6
+
7
+ * Maximize Claude's intelligence with [MemTree.dev](https://memtree.dev), an advanced context-management engine
8
+ * Supports unlimited-length coding sessions
9
+ * Feels fast and fresh with every message
10
+ * Automatically recalls only the relevant past information
11
+ * Allows you to finish your work without summarizing, compacting, clearing context, or starting a new session
12
+
13
+ ## Requirements
14
+
15
+ * [node.js 18 or newer](https://nodejs.org/en/download/)
16
+ * [Claude Code (the terminal version)](https://code.claude.com/docs/en/quickstart)
17
+
18
+ > [!NOTE]
19
+ > We recommend using a Claude subscription due to the large cost savings they offer vs their API pricing.
20
+ >
21
+ > However, if you do not want to buy a Claude Code subscription, choose option 2. "Anthropic Console account".
22
+ >
23
+ > - Note that you don't need to buy API credits, just login and Claude Code will let you complete the setup wizard. API usage will be billed through https://polychat.co.
24
+ >
25
+ > Then run `/logout` within Claude Code if you are **not** using a Claude subscription
26
+
27
+ ## Setup
28
+
29
+ 1. Install with npm
30
+ ```bash
31
+ npm install -g claude-code-infinite
32
+ ```
33
+ 2. Run Claude Code Infinite with
34
+ ```bash
35
+ ccc
36
+ ```
37
+
38
+ ## How it works
39
+
40
+ When you send a message, we retrieve relevant details and summaries from the prior messages in your thread. These details and summaries populate a **memory message**. Following the memory message, we append a compressed version of your recent message history. The resulting context-window is dramatically smaller, allowing Claude to process your request with much greater efficacy, lower latency, and reduced cost.
41
+
42
+ ## Why it works
43
+
44
+ LLM capabilities decline exponentially with input (i.e. context) size.
45
+
46
+ cite:
47
+ - 2023 - 2823 citations _Lost in the Middle: How Language Models Use Long Contexts:_ https://arxiv.org/abs/2307.03172
48
+ - by CP Hsieh · 2024 · Cited by 480 · _RULER: What's the Real Context Size of Your Long-Context Language Models?_
49
+ https://arxiv.org/abs/2404.06654
50
+ - chroma
51
+ - others
52
+
53
+ Also, this research primarily tests on needle-in-a-haystack tasks, which underestimates the effect for more difficult tasks like coding, where relevant context is more dense.
54
+
55
+ This is why starting sessions from scratch provides such a significant uplift in ability to accomplish tasks. So what we're essentially doing is keeping each session as close to from-scratch as possible by limiting the tokens in Claude's context window to around 30k tokens, or 15% of the 200k context-limit. So even with Claude Code Infinite, it's still very fruitful to start new sessions. It's just that when you use Claude Code Infinite, you are getting much higher quality output per session, as without it, the token-usage can balloon past 100k tokens after just a couple file reads.
56
+
57
+ ### Operating System Analogy
58
+
59
+ It may seem strange that we are advocating for small context windows in a product called Claude Code Infinite. But Infinite is referring to the size of a new memory layer, the MemTree, a layer above the context window. This layer is larger and updated more slowly than the LLMs main input, just like disk is larger and slower than RAM.
60
+
61
+ So you can think of MemTree as an operating system's virtual memory manager. Just as an OS manages RAM by swapping less-used data to disk, MemTree manages the model's context window by intelligently recalling only the most relevant information from past interactions. This ensures that the model always has access to the most pertinent data without being overwhelmed by the entire history of the conversation.
62
+
63
+
64
+ ## Usage
65
+
66
+ > [!TIP]
67
+ > If you want your session to apply to many different tasks, we recommend giving the overall high level goal you want for your session in the first message, e.g. "Refactor this project to remove code smells and bugs". Then followup with lower level tasks in subsequent messages. This as Anthropic models key heavily off the first message. You should also feel free to start new sessions for new tasks. This as the model will continue to have a focused context with your CLAUDE.md and first message always included. Reach out to support@polychat.co if you have any questions or concerns!
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { spawn, spawnSync } from "node:child_process";
2
+ import spawn from "cross-spawn";
3
3
  import * as readline from "node:readline";
4
4
  import { getOAuthToken, isTokenExpired } from "./keychain.js";
5
5
  import { getPolychatApiKey, setPolychatApiKey, getLocalPolychatApiKey, setLocalPolychatApiKey, } from "./config.js";
@@ -11,17 +11,10 @@ async function promptForApiKey(isLocal) {
11
11
  input: process.stdin,
12
12
  output: process.stdout,
13
13
  });
14
- if (isLocal) {
15
- console.log("\nLocal POLYCHAT_API_KEY not found.");
16
- console.log("Please visit: http://local.polychat.co:5173/memtree-api");
17
- console.log("to obtain your local API key.\n");
18
- }
19
- else {
20
- console.log("\nPOLYCHAT_API_KEY not found.");
21
- console.log(`Please visit: ${POLYCHAT_AUTH_URL}`);
22
- console.log("to obtain your API key.\n");
23
- }
24
- const prompt = isLocal ? "Enter your local POLYCHAT_API_KEY: " : "Enter your POLYCHAT_API_KEY: ";
14
+ const url = isLocal
15
+ ? "http://local.polychat.co:5173/memtree-api"
16
+ : POLYCHAT_AUTH_URL;
17
+ const prompt = `\nEnter your PolyChat API key from ${url}: `;
25
18
  return new Promise((resolve) => {
26
19
  rl.question(prompt, (answer) => {
27
20
  rl.close();
@@ -87,25 +80,7 @@ async function refreshOAuthToken(debug) {
87
80
  return refreshedToken;
88
81
  }
89
82
  function printBanner() {
90
- const banner = `
91
- \x1b[38;5;209m ██████╗██╗ █████╗ ██╗ ██╗██████╗ ███████╗ ██████╗ ██████╗ ██████╗ ███████╗
92
- ██╔════╝██║ ██╔══██╗██║ ██║██╔══██╗██╔════╝ ██╔════╝██╔═══██╗██╔══██╗██╔════╝
93
- ██║ ██║ ███████║██║ ██║██║ ██║█████╗ ██║ ██║ ██║██║ ██║█████╗
94
- ██║ ██║ ██╔══██║██║ ██║██║ ██║██╔══╝ ██║ ██║ ██║██║ ██║██╔══╝
95
- ╚██████╗███████╗██║ ██║╚██████╔╝██████╔╝███████╗ ╚██████╗╚██████╔╝██████╔╝███████╗
96
- ╚═════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝
97
- \x1b[1;38;2;255;165;0m██╗███╗ ██╗███████╗██╗███╗ ██╗██╗████████╗███████╗
98
- ██║████╗ ██║██╔════╝██║████╗ ██║██║╚══██╔══╝██╔════╝
99
- ██║██╔██╗ ██║█████╗ ██║██╔██╗ ██║██║ ██║ █████╗
100
- ██║██║╚██╗██║██╔══╝ ██║██║╚██╗██║██║ ██║ ██╔══╝
101
- ██║██║ ╚████║██║ ██║██║ ╚████║██║ ██║ ███████╗
102
- ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚══════╝\x1b[0m
103
-
104
- \x1b[1;38;5;48m✦ Infinitely-long coding sessions for Claude, powered by \x1b]8;;https://MemTree.dev\x1b\\MemTree.dev\x1b]8;;\x1b\\\x1b[0m
105
- \x1b[1;38;5;87m✦ Get the speed and quality of a fresh chat with every message\x1b[0m
106
- \x1b[1;38;5;87m✦ Retrieves relevant info from all past messages \x1b[0m
107
- `;
108
- console.log(banner);
83
+ console.log(`\n\x1b[1;38;5;209mClaude Code Infinite:\x1b[0m \x1b[38;5;48mMaximizing Claude's intelligence with context-management from \x1b]8;;https://MemTree.dev\x1b\\MemTree.dev\x1b]8;;\x1b\\\x1b[0m\n`);
109
84
  }
110
85
  async function main() {
111
86
  // Check for local mode and debug flag
@@ -121,21 +96,27 @@ async function main() {
121
96
  if (isLocalMode) {
122
97
  console.log("\x1b[1;33m🏠 LOCAL MODE\x1b[0m\n");
123
98
  }
124
- // Get OAuth token from keychain
99
+ // Get OAuth token from keychain (optional - we can work without it)
125
100
  const credentials = getOAuthToken(isDebugMode);
126
- if (!credentials?.claudeAiOauth) {
127
- console.error("Could not retrieve Claude OAuth credentials from keychain.");
128
- console.error("Make sure you're logged into Claude Code first.");
129
- process.exit(1);
101
+ let oauthToken = credentials?.claudeAiOauth ?? null;
102
+ if (!oauthToken) {
103
+ console.log("\x1b[1;33m⚠️ No Claude Code OAuth credentials found.\x1b[0m");
104
+ console.log("\x1b[33m Claude Code is much cheaper with an Anthropic subscription.\x1b[0m");
105
+ console.log("\x1b[33m MemTree.dev makes it even cheaper by reducing messages sent to Anthropic.\x1b[0m");
106
+ console.log("\x1b[33m Run '/login' to log in and get discounted rates.\x1b[0m\n");
130
107
  }
131
- let oauthToken = credentials.claudeAiOauth;
132
- // If token is expired, attempt to refresh it by launching Claude
133
- if (isTokenExpired(oauthToken, isDebugMode)) {
108
+ else if (isTokenExpired(oauthToken, isDebugMode)) {
109
+ // If token is expired, attempt to refresh it by launching Claude
134
110
  const refreshedToken = await refreshOAuthToken(isDebugMode);
135
111
  if (!refreshedToken) {
136
- process.exit(1);
112
+ console.log("\x1b[1;33m⚠️ Could not refresh OAuth token. Continuing without it.\x1b[0m");
113
+ console.log("\x1b[33m Claude Code is much cheaper with an Anthropic subscription.\x1b[0m");
114
+ console.log("\x1b[33m MemTree.dev makes it even cheaper by reducing messages sent to Anthropic.\x1b[0m\n");
115
+ oauthToken = null;
116
+ }
117
+ else {
118
+ oauthToken = refreshedToken;
137
119
  }
138
- oauthToken = refreshedToken;
139
120
  }
140
121
  // Get or prompt for Polychat API key (separate keys for local vs production)
141
122
  let polychatApiKey = isLocalMode ? getLocalPolychatApiKey() : getPolychatApiKey();
@@ -153,8 +134,10 @@ async function main() {
153
134
  }
154
135
  console.log("API key saved.\n");
155
136
  }
156
- // Build combined auth token
157
- const combinedAuthToken = `${oauthToken.accessToken},${polychatApiKey}`;
137
+ // Build auth token (with or without OAuth)
138
+ const combinedAuthToken = oauthToken
139
+ ? `${oauthToken.accessToken},${polychatApiKey}`
140
+ : polychatApiKey;
158
141
  // Choose base URL based on mode
159
142
  const baseUrl = isLocalMode ? LOCAL_BASE_URL : POLYCHAT_BASE_URL;
160
143
  // Spawn claude with the environment variables
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,EAAE,gBAAgB,CAAC;CAClC;AAED,wBAAgB,aAAa,CAAC,KAAK,UAAQ,GAAG,mBAAmB,GAAG,IAAI,CA+CvE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,UAAQ,GAAG,OAAO,CAY9E"}
1
+ {"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,EAAE,gBAAgB,CAAC;CAClC;AA2DD,wBAAgB,aAAa,CAAC,KAAK,UAAQ,GAAG,mBAAmB,GAAG,IAAI,CA+BvE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,UAAQ,GAAG,OAAO,CAY9E"}
package/dist/keychain.js CHANGED
@@ -1,34 +1,45 @@
1
1
  import { execSync } from "node:child_process";
2
- import { userInfo } from "node:os";
3
- export function getOAuthToken(debug = false) {
4
- if (process.platform !== "darwin") {
5
- console.error("OAuth token extraction is only supported on macOS");
2
+ import { readFileSync, existsSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { userInfo, homedir } from "node:os";
5
+ function getCredentialsFromFile(debug = false) {
6
+ const credentialsPath = join(homedir(), ".claude", ".credentials.json");
7
+ if (debug) {
8
+ console.log(`[DEBUG] Looking for credentials at: ${credentialsPath}`);
9
+ }
10
+ if (!existsSync(credentialsPath)) {
11
+ if (debug) {
12
+ console.log(`[DEBUG] No credentials file found at ${credentialsPath}`);
13
+ }
14
+ return null;
15
+ }
16
+ try {
17
+ const fileContent = readFileSync(credentialsPath, { encoding: "utf-8" });
18
+ const parsed = JSON.parse(fileContent);
19
+ if (!parsed || typeof parsed !== "object" || !("claudeAiOauth" in parsed)) {
20
+ console.error("Invalid credentials file: expected JSON object");
21
+ return null;
22
+ }
23
+ return parsed;
24
+ }
25
+ catch (error) {
26
+ console.error("Failed to read credentials file:", error);
6
27
  return null;
7
28
  }
29
+ }
30
+ function getCredentialsFromMacOSKeychain(debug = false) {
8
31
  const username = userInfo().username;
9
32
  try {
10
33
  if (debug) {
11
34
  console.log(`[DEBUG] Reading keychain for user: ${username}`);
12
35
  }
13
36
  const result = execSync(`security find-generic-password -s "Claude Code-credentials" -a "${username}" -w`, { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
14
- const credentials = JSON.parse(result.trim());
15
- if (debug && credentials?.claudeAiOauth) {
16
- const token = credentials.claudeAiOauth;
17
- const now = Date.now();
18
- const expiresAt = token.expiresAt;
19
- const expiresInMs = expiresAt - now;
20
- const expiresInMins = Math.round(expiresInMs / 1000 / 60);
21
- console.log(`[DEBUG] Token retrieved from keychain:`);
22
- console.log(` - expiresAt: ${expiresAt} (${new Date(expiresAt).toISOString()})`);
23
- console.log(` - now: ${now} (${new Date(now).toISOString()})`);
24
- console.log(` - expires in: ${expiresInMins} minutes (${expiresInMs}ms)`);
25
- console.log(` - subscriptionType: ${token.subscriptionType}`);
26
- console.log(` - rateLimitTier: ${token.rateLimitTier}`);
27
- console.log(` - scopes: ${token.scopes?.join(", ")}`);
28
- console.log(` - accessToken length: ${token.accessToken?.length ?? 0}`);
29
- console.log(` - refreshToken length: ${token.refreshToken?.length ?? 0}`);
37
+ const parsed = JSON.parse(result.trim());
38
+ if (!parsed || typeof parsed !== "object" || !("claudeAiOauth" in parsed)) {
39
+ console.error("Invalid keychain credentials: expected JSON object");
40
+ return null;
30
41
  }
31
- return credentials;
42
+ return parsed;
32
43
  }
33
44
  catch (error) {
34
45
  if (error instanceof Error && error.message.includes("could not be found")) {
@@ -40,6 +51,36 @@ export function getOAuthToken(debug = false) {
40
51
  return null;
41
52
  }
42
53
  }
54
+ export function getOAuthToken(debug = false) {
55
+ let credentials = null;
56
+ if (process.platform === "darwin") {
57
+ credentials = getCredentialsFromMacOSKeychain(debug);
58
+ }
59
+ else if (process.platform === "win32" || process.platform === "linux") {
60
+ credentials = getCredentialsFromFile(debug);
61
+ }
62
+ else {
63
+ console.error(`OAuth token extraction is not supported on ${process.platform}`);
64
+ return null;
65
+ }
66
+ if (debug && credentials?.claudeAiOauth) {
67
+ const token = credentials.claudeAiOauth;
68
+ const now = Date.now();
69
+ const expiresAt = token.expiresAt;
70
+ const expiresInMs = expiresAt - now;
71
+ const expiresInMins = Math.round(expiresInMs / 1000 / 60);
72
+ console.log(`[DEBUG] Token retrieved:`);
73
+ console.log(` - expiresAt: ${expiresAt} (${new Date(expiresAt).toISOString()})`);
74
+ console.log(` - now: ${now} (${new Date(now).toISOString()})`);
75
+ console.log(` - expires in: ${expiresInMins} minutes (${expiresInMs}ms)`);
76
+ console.log(` - subscriptionType: ${token.subscriptionType}`);
77
+ console.log(` - rateLimitTier: ${token.rateLimitTier}`);
78
+ console.log(` - scopes: ${token.scopes?.join(", ")}`);
79
+ console.log(` - accessToken length: ${token.accessToken?.length ?? 0}`);
80
+ console.log(` - refreshToken length: ${token.refreshToken?.length ?? 0}`);
81
+ }
82
+ return credentials;
83
+ }
43
84
  export function isTokenExpired(token, debug = false) {
44
85
  const now = Date.now();
45
86
  const expired = now > token.expiresAt;
@@ -1 +1 @@
1
- {"version":3,"file":"keychain.js","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keychain.js","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "claude-code-infinite",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Wrapper for Claude Code CLI",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "bin": {
8
- "cc-inf": "dist/cli.js"
8
+ "ccc": "dist/cli.js"
9
9
  },
10
10
  "type": "module",
11
11
  "files": [
@@ -28,7 +28,11 @@
28
28
  },
29
29
  "author": "crizCraig",
30
30
  "license": "ISC",
31
+ "dependencies": {
32
+ "cross-spawn": "^7.0.6"
33
+ },
31
34
  "devDependencies": {
35
+ "@types/cross-spawn": "^6.0.6",
32
36
  "@types/node": "^25.0.0",
33
37
  "typescript": "^5.9.3"
34
38
  }