claude-code-infinite 1.0.27 → 1.0.29
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 +63 -29
- package/dist/auto-update.d.ts +2 -0
- package/dist/auto-update.d.ts.map +1 -1
- package/dist/auto-update.js +4 -0
- package/dist/auto-update.js.map +1 -1
- package/dist/claude-auth.d.ts +27 -2
- package/dist/claude-auth.d.ts.map +1 -1
- package/dist/claude-auth.js +76 -4
- package/dist/claude-auth.js.map +1 -1
- package/dist/claude-install.d.ts +73 -0
- package/dist/claude-install.d.ts.map +1 -0
- package/dist/claude-install.js +142 -0
- package/dist/claude-install.js.map +1 -0
- package/dist/claude-plan-warning.d.ts +70 -7
- package/dist/claude-plan-warning.d.ts.map +1 -1
- package/dist/claude-plan-warning.js +152 -8
- package/dist/claude-plan-warning.js.map +1 -1
- package/dist/cli-args.d.ts +5 -0
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +9 -0
- package/dist/cli-args.js.map +1 -1
- package/dist/cli-main.js +222 -84
- package/dist/cli-main.js.map +1 -1
- package/dist/diagnostics-schema.d.ts +4 -0
- package/dist/diagnostics-schema.d.ts.map +1 -1
- package/dist/diagnostics-schema.js +20 -0
- package/dist/diagnostics-schema.js.map +1 -1
- package/dist/diagnostics.d.ts +24 -1
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +68 -4
- package/dist/diagnostics.js.map +1 -1
- package/dist/hooks.d.ts +8 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +57 -25
- package/dist/hooks.js.map +1 -1
- package/dist/install-ping.d.ts +54 -0
- package/dist/install-ping.d.ts.map +1 -0
- package/dist/install-ping.js +177 -0
- package/dist/install-ping.js.map +1 -0
- package/dist/key-page.d.ts +17 -0
- package/dist/key-page.d.ts.map +1 -0
- package/dist/key-page.js +32 -0
- package/dist/key-page.js.map +1 -0
- package/dist/key-status.d.ts +79 -0
- package/dist/key-status.d.ts.map +1 -0
- package/dist/key-status.js +143 -0
- package/dist/key-status.js.map +1 -0
- package/dist/memtree-finder.d.ts +2 -1
- package/dist/memtree-finder.d.ts.map +1 -1
- package/dist/memtree-finder.js +4 -5
- package/dist/memtree-finder.js.map +1 -1
- package/dist/memtree-mcp.d.ts.map +1 -1
- package/dist/memtree-mcp.js +17 -7
- package/dist/memtree-mcp.js.map +1 -1
- package/dist/memtree-times.d.ts +35 -0
- package/dist/memtree-times.d.ts.map +1 -0
- package/dist/memtree-times.js +166 -0
- package/dist/memtree-times.js.map +1 -0
- package/dist/memtree-tools.d.ts +12 -0
- package/dist/memtree-tools.d.ts.map +1 -1
- package/dist/memtree-tools.js +63 -7
- package/dist/memtree-tools.js.map +1 -1
- package/dist/memtree.d.ts +23 -0
- package/dist/memtree.d.ts.map +1 -1
- package/dist/memtree.js +39 -3
- package/dist/memtree.js.map +1 -1
- package/dist/notices.d.ts +5 -0
- package/dist/notices.d.ts.map +1 -1
- package/dist/notices.js +13 -0
- package/dist/notices.js.map +1 -1
- package/dist/paused-session.d.ts +29 -0
- package/dist/paused-session.d.ts.map +1 -0
- package/dist/paused-session.js +148 -0
- package/dist/paused-session.js.map +1 -0
- package/dist/payment-gate.d.ts +44 -13
- package/dist/payment-gate.d.ts.map +1 -1
- package/dist/payment-gate.js +82 -23
- package/dist/payment-gate.js.map +1 -1
- package/dist/payment-link.d.ts +68 -0
- package/dist/payment-link.d.ts.map +1 -0
- package/dist/payment-link.js +123 -0
- package/dist/payment-link.js.map +1 -0
- package/dist/postinstall.d.ts +2 -0
- package/dist/postinstall.d.ts.map +1 -0
- package/dist/postinstall.js +4 -0
- package/dist/postinstall.js.map +1 -0
- package/dist/project-trees.d.ts +100 -0
- package/dist/project-trees.d.ts.map +1 -0
- package/dist/project-trees.js +196 -0
- package/dist/project-trees.js.map +1 -0
- package/dist/proxy.d.ts +29 -8
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +167 -25
- package/dist/proxy.js.map +1 -1
- package/dist/rate-limit.d.ts +64 -0
- package/dist/rate-limit.d.ts.map +1 -0
- package/dist/rate-limit.js +126 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/reqlog.d.ts +13 -2
- package/dist/reqlog.d.ts.map +1 -1
- package/dist/reqlog.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Earlier MemTree sessions in this project, named to the model when a session
|
|
3
|
+
* starts, so earlier decisions and fixes are one lookup away.
|
|
4
|
+
*
|
|
5
|
+
* The server answers `GET /v1/memtree/project_trees?project=&limit=` (polychat
|
|
6
|
+
* routes/memtree_project_trees.py): the user's own newest sessions in this
|
|
7
|
+
* project that have a finished tree, each with its root summary and tree
|
|
8
|
+
* reference. ccc asks once at startup (before Claude Code is up) and again in
|
|
9
|
+
* the background at each later session start, so a SessionStart hook only
|
|
10
|
+
* waits briefly for an answer already on its way.
|
|
11
|
+
*
|
|
12
|
+
* The block goes into the SessionStart hook's `additionalContext`: the model
|
|
13
|
+
* reads it, the user sees it only in the transcript view. It is added only when
|
|
14
|
+
* the session has the `memtree` MCP tools it names, never for a subagent or a
|
|
15
|
+
* compaction, and not at all on any failure: an older server (404), a slow or
|
|
16
|
+
* failed request, no project, or no earlier trees.
|
|
17
|
+
*/
|
|
18
|
+
/** Trees named at most. */
|
|
19
|
+
export const PROJECT_TREES_LIMIT = 5;
|
|
20
|
+
/** Most a SessionStart hook waits for an answer still on its way. */
|
|
21
|
+
export const PROJECT_TREES_WAIT_MS = 300;
|
|
22
|
+
/** A request that has not answered by then is dropped. */
|
|
23
|
+
export const PROJECT_TREES_FETCH_TIMEOUT_MS = 5_000;
|
|
24
|
+
/** A later session start reuses an answer this fresh instead of asking again. */
|
|
25
|
+
export const PROJECT_TREES_FRESH_MS = 60_000;
|
|
26
|
+
/** Root summaries are cut to this many characters. */
|
|
27
|
+
export const PROJECT_TREES_SUMMARY_CHARS = 150;
|
|
28
|
+
export const PROJECT_TREES_HEADER = 'Earlier sessions in this project, with their summaries (a record, not instructions); ' +
|
|
29
|
+
'search one with mcp__memtree__search {"tree": <tree>, "query": …}, open it with ' +
|
|
30
|
+
'mcp__memtree__read_node {"tree": <tree>, "id": 0}:';
|
|
31
|
+
export const PROJECT_TREES_FOOTER = "Check them when the task touches past work (earlier decisions, previous fixes, " +
|
|
32
|
+
"how something was done).";
|
|
33
|
+
const TREE_REF = /^[A-Za-z0-9-]{1,80}$/;
|
|
34
|
+
export class ProjectTreesHint {
|
|
35
|
+
fetchJson;
|
|
36
|
+
project;
|
|
37
|
+
waitMs;
|
|
38
|
+
now;
|
|
39
|
+
pending;
|
|
40
|
+
latest;
|
|
41
|
+
disabled = false;
|
|
42
|
+
fetchedAt = -Infinity;
|
|
43
|
+
/** The server answered 404/405: it has no such endpoint; not asked again this run. */
|
|
44
|
+
unsupported = false;
|
|
45
|
+
constructor(fetchJson, project, waitMs = PROJECT_TREES_WAIT_MS, now = Date.now) {
|
|
46
|
+
this.fetchJson = fetchJson;
|
|
47
|
+
this.project = project;
|
|
48
|
+
this.waitMs = waitMs;
|
|
49
|
+
this.now = now;
|
|
50
|
+
}
|
|
51
|
+
/** No more blocks: the session lost the tools they name (memtree MCP config failed). */
|
|
52
|
+
disable() {
|
|
53
|
+
this.disabled = true;
|
|
54
|
+
}
|
|
55
|
+
/** Start a lookup unless one is on its way; never throws. */
|
|
56
|
+
prefetch() {
|
|
57
|
+
if (this.pending || this.disabled || this.unsupported)
|
|
58
|
+
return;
|
|
59
|
+
if (this.now() - this.fetchedAt < PROJECT_TREES_FRESH_MS)
|
|
60
|
+
return;
|
|
61
|
+
const pending = this.lookup().then((trees) => {
|
|
62
|
+
if (trees) {
|
|
63
|
+
this.latest = trees;
|
|
64
|
+
this.fetchedAt = this.now();
|
|
65
|
+
}
|
|
66
|
+
return trees;
|
|
67
|
+
});
|
|
68
|
+
this.pending = pending;
|
|
69
|
+
void pending.finally(() => {
|
|
70
|
+
if (this.pending === pending)
|
|
71
|
+
this.pending = undefined;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The block for a session starting now, or undefined. Waits at most
|
|
76
|
+
* `waitMs` for a lookup on its way, then refreshes in the background for
|
|
77
|
+
* the next session start (an in-app `/clear` or `/resume`).
|
|
78
|
+
*/
|
|
79
|
+
async contextFor(sessionId) {
|
|
80
|
+
if (this.disabled)
|
|
81
|
+
return undefined;
|
|
82
|
+
const pending = this.pending;
|
|
83
|
+
const trees = pending ? await withinMs(pending, this.waitMs) : undefined;
|
|
84
|
+
const known = trees ?? this.latest;
|
|
85
|
+
this.prefetch();
|
|
86
|
+
return known ? formatProjectTrees(known, sessionId) : undefined;
|
|
87
|
+
}
|
|
88
|
+
async lookup() {
|
|
89
|
+
const query = new URLSearchParams({
|
|
90
|
+
project: this.project,
|
|
91
|
+
// One more, so leaving out the current session still names five.
|
|
92
|
+
limit: String(PROJECT_TREES_LIMIT + 1),
|
|
93
|
+
});
|
|
94
|
+
try {
|
|
95
|
+
const response = await this.fetchJson(`/v1/memtree/project_trees?${query.toString()}`, AbortSignal.timeout(PROJECT_TREES_FETCH_TIMEOUT_MS));
|
|
96
|
+
if (response.status === 404 || response.status === 405)
|
|
97
|
+
this.unsupported = true;
|
|
98
|
+
if (response.status !== 200)
|
|
99
|
+
return undefined;
|
|
100
|
+
return parseProjectTrees(JSON.parse(response.body.toString("utf-8")));
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The project name the server matches: the `owner/repo` of the `origin`
|
|
109
|
+
* remote. A directory name alone ("app", "src") would also match unrelated
|
|
110
|
+
* directories and repos of that name, so without a remote there is no hint.
|
|
111
|
+
*/
|
|
112
|
+
export function projectIdentity(meta) {
|
|
113
|
+
return meta?.git_repo || undefined;
|
|
114
|
+
}
|
|
115
|
+
/** The server's `trees`, keeping only well-formed entries. */
|
|
116
|
+
export function parseProjectTrees(body) {
|
|
117
|
+
const trees = body?.trees;
|
|
118
|
+
if (!Array.isArray(trees))
|
|
119
|
+
return undefined;
|
|
120
|
+
const parsed = [];
|
|
121
|
+
for (const item of trees) {
|
|
122
|
+
const tree = parseTree(item);
|
|
123
|
+
if (tree)
|
|
124
|
+
parsed.push(tree);
|
|
125
|
+
}
|
|
126
|
+
return parsed;
|
|
127
|
+
}
|
|
128
|
+
/** The context block, or undefined when no tree but the current session's is left. */
|
|
129
|
+
export function formatProjectTrees(trees, currentSessionId) {
|
|
130
|
+
const shown = trees
|
|
131
|
+
.filter((tree) => !currentSessionId || tree.session_id !== currentSessionId)
|
|
132
|
+
.slice(0, PROJECT_TREES_LIMIT);
|
|
133
|
+
if (!shown.length)
|
|
134
|
+
return undefined;
|
|
135
|
+
const lines = shown.map((tree) => {
|
|
136
|
+
const date = /^\d{4}-\d{2}-\d{2}/.exec(tree.last_at ?? "")?.[0];
|
|
137
|
+
const summary = shorten(tree.title, PROJECT_TREES_SUMMARY_CHARS);
|
|
138
|
+
return `- ${date ? `${date}: ` : ""}${summary} (tree ${tree.ref})`;
|
|
139
|
+
});
|
|
140
|
+
return [PROJECT_TREES_HEADER, ...lines, PROJECT_TREES_FOOTER].join("\n");
|
|
141
|
+
}
|
|
142
|
+
function parseTree(item) {
|
|
143
|
+
if (!item || typeof item !== "object")
|
|
144
|
+
return undefined;
|
|
145
|
+
const raw = item;
|
|
146
|
+
const tree = raw.tree;
|
|
147
|
+
const ref = typeof tree?.ref === "string" ? tree.ref : tree?.request_id;
|
|
148
|
+
if (typeof ref !== "string" || !TREE_REF.test(ref))
|
|
149
|
+
return undefined;
|
|
150
|
+
if (typeof raw.title !== "string" || !raw.title.trim())
|
|
151
|
+
return undefined;
|
|
152
|
+
return {
|
|
153
|
+
session_id: typeof raw.session_id === "string" ? raw.session_id : null,
|
|
154
|
+
last_at: typeof raw.last_at === "string" ? raw.last_at : null,
|
|
155
|
+
title: raw.title,
|
|
156
|
+
ref,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function shorten(text, limit) {
|
|
160
|
+
// One line: a summary is model-written and must not add lines of its own.
|
|
161
|
+
const flat = text.replace(/\s+/g, " ").trim();
|
|
162
|
+
return flat.length <= limit ? flat : `${flat.slice(0, limit - 1).trimEnd()}…`;
|
|
163
|
+
}
|
|
164
|
+
/** `promise`'s value, or undefined if it takes longer than `ms`. */
|
|
165
|
+
async function withinMs(promise, ms) {
|
|
166
|
+
let timer;
|
|
167
|
+
const timeout = new Promise((resolve) => {
|
|
168
|
+
timer = setTimeout(() => resolve(undefined), ms);
|
|
169
|
+
timer.unref?.();
|
|
170
|
+
});
|
|
171
|
+
try {
|
|
172
|
+
return await Promise.race([promise, timeout]);
|
|
173
|
+
}
|
|
174
|
+
finally {
|
|
175
|
+
if (timer)
|
|
176
|
+
clearTimeout(timer);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* The hint for this run, or undefined: interactive sessions only (print runs
|
|
181
|
+
* keep Claude Code's output as it is) with MemTree on (a valid key, not
|
|
182
|
+
* continued past the payment gate: the lookup could only fail), with both
|
|
183
|
+
* `search` and `read_node` (the block names them), a known project, and not
|
|
184
|
+
* `CCC_PROJECT_TREES=0`.
|
|
185
|
+
*/
|
|
186
|
+
export function projectTreesHintFor(s) {
|
|
187
|
+
if (!s.interactive || s.env.CCC_PROJECT_TREES === "0")
|
|
188
|
+
return undefined;
|
|
189
|
+
if (s.keyCheck === "invalid" || s.memtreeOff)
|
|
190
|
+
return undefined;
|
|
191
|
+
if (!s.tools.includes("search") || !s.tools.includes("read_node"))
|
|
192
|
+
return undefined;
|
|
193
|
+
const project = projectIdentity(s.meta);
|
|
194
|
+
return project ? new ProjectTreesHint(s.fetchJson, project) : undefined;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=project-trees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-trees.js","sourceRoot":"","sources":["../src/project-trees.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy.d.ts
CHANGED
|
@@ -48,6 +48,7 @@ import type { StablePrefixStore } from "./prefix-store.js";
|
|
|
48
48
|
import type { NewestTreeLookup } from "./memtree-newest.js";
|
|
49
49
|
import type { TranscriptUsageSource } from "./transcript-usage.js";
|
|
50
50
|
import type { ProjectMeta } from "./project-meta.js";
|
|
51
|
+
import type { ProjectTreesHint } from "./project-trees.js";
|
|
51
52
|
import type { DiagnosticsRecorder } from "./diagnostics.js";
|
|
52
53
|
import { type MessagesRecord, type RequestLogSink } from "./reqlog.js";
|
|
53
54
|
export interface ProxyOptions {
|
|
@@ -185,6 +186,16 @@ export interface ProxyOptions {
|
|
|
185
186
|
* provider decides how often it has something to say.
|
|
186
187
|
*/
|
|
187
188
|
sessionStartNotice?: () => string | undefined;
|
|
189
|
+
/**
|
|
190
|
+
* A line to show as the user submits a main-session prompt (UserPromptSubmit),
|
|
191
|
+
* e.g. a rate limit Anthropic answered with (rate-limit.ts). Called once per prompt.
|
|
192
|
+
*/
|
|
193
|
+
promptSubmitNotice?: () => string | undefined;
|
|
194
|
+
/**
|
|
195
|
+
* Earlier MemTree sessions in this project, added to a main session's
|
|
196
|
+
* SessionStart as model context (project-trees.ts). Omitted means none.
|
|
197
|
+
*/
|
|
198
|
+
projectTrees?: ProjectTreesHint;
|
|
188
199
|
/**
|
|
189
200
|
* Client diagnostics (diagnostics.ts): session starts, paused notices shown,
|
|
190
201
|
* and refusals, as allowlisted enums and numbers. Never content.
|
|
@@ -224,22 +235,32 @@ export interface RunningProxy {
|
|
|
224
235
|
mainSessionId: () => string | undefined;
|
|
225
236
|
}
|
|
226
237
|
/**
|
|
227
|
-
* Budget fallback until the server reports `model_budget_tokens
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
*
|
|
238
|
+
* Budget fallback until the server reports `model_budget_tokens`, mirroring the
|
|
239
|
+
* server's ccc policy (polychat index_budget.py): every Claude model compresses
|
|
240
|
+
* near its window, NEAR_WINDOW_FALLBACK_RATIO of it but no later than Claude
|
|
241
|
+
* Code's own auto-compact point (window - CLAUDE_CODE_AUTOCOMPACT_RESERVE_TOKENS)
|
|
242
|
+
* and never below FALLBACK_BUDGET_WINDOW_RATIO: 900k of 1M, 167k of 200k; at
|
|
243
|
+
* most a Sonnet's usable-context ceiling (SONNET_CEILINGS). Other models get
|
|
244
|
+
* FALLBACK_BUDGET_WINDOW_RATIO. Plain Claude Code 2.1.302 auto-compacts a 1M
|
|
245
|
+
* window at 967k, so MemTree compresses no earlier than ~70k before it would;
|
|
246
|
+
* ccc lifts Claude Code's own 977k refusal (claude-env.ts) so a tool turn that
|
|
233
247
|
* jumps past the budget reaches the proxy and is compressed here.
|
|
234
248
|
*/
|
|
235
249
|
export declare const FALLBACK_BUDGET_WINDOW_RATIO = 0.8;
|
|
236
250
|
export declare const NEAR_WINDOW_FALLBACK_RATIO = 0.9;
|
|
237
|
-
/** The fallback
|
|
238
|
-
export declare function
|
|
251
|
+
/** The fallback whole-request budget for `model` on this window (see above). */
|
|
252
|
+
export declare function fallbackBudgetTokens(model: unknown, modelContextLimit: number): number;
|
|
239
253
|
export declare function startProxy(opts: ProxyOptions): Promise<RunningProxy>;
|
|
240
254
|
/** The page id in a server-stamped link (`…/m/<id>` or `…/usage/memtree/<id>`). */
|
|
241
255
|
export declare function memtreePageId(pageUrl: string): string | undefined;
|
|
256
|
+
/**
|
|
257
|
+
* The SessionStart hook's answer: the banner line for the user
|
|
258
|
+
* (`systemMessage`), model context (`additionalContext`), or both.
|
|
259
|
+
*/
|
|
260
|
+
export declare function sessionStartOutput(line: string | undefined, context: string | undefined): Record<string, unknown>;
|
|
242
261
|
export declare const MEMTREE_COMPACT_MIN_TOKENS = 20000;
|
|
262
|
+
/** How long a paused turn waits for the short checkout link before its notice (once). */
|
|
263
|
+
export declare const PAYMENT_LINK_NOTICE_WAIT_MS = 1000;
|
|
243
264
|
export declare const SUBAGENT_VIEW_NOTE = "(main session's page; subagent pages aren't linked yet)";
|
|
244
265
|
export declare const SUBAGENT_COMPACT_REPLY = "MemTree compact applies to the main session only.";
|
|
245
266
|
/** "50k", "50000", "1.5m" → tokens; undefined when not a positive count. */
|
package/dist/proxy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAUvD,OAAO,EAAiB,qBAAqB,EACD,MAAM,qBAAqB,CAAC;AAiBxE,OAAO,EAKL,aAAa,EAMd,MAAM,cAAc,CAAC;AAwBtB,OAAO,EAYL,KAAK,cAAc,EAGpB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|