claude-code-infinite 1.0.30 → 1.0.31

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,192 @@
1
+ /**
2
+ * What Claude itself is told about MemTree's state, and the manual /compact
3
+ * interception.
4
+ *
5
+ * The display notices (notices.ts, payment-notice.ts) reach only the user:
6
+ * hook `systemMessage`s and rendered deltas never enter the model's context.
7
+ * So a model asked "why am I still blocked?" while MemTree was paused guessed
8
+ * about Anthropic credits and Claude plan limits (2026-10-28, ccc 1.0.30).
9
+ * While MemTree is paused or its key is refused, the UserPromptSubmit hook adds
10
+ * one short `additionalContext` notice to the next prompt: what is paused
11
+ * (MemTree, not Claude), why, and what fixes it. It stays in the transcript
12
+ * (a paused MemTree compresses nothing), so it is said once per change of
13
+ * state, and again after Claude Code's own compaction drops it.
14
+ *
15
+ * MemTree's normal state needs no notice: the MCP server's instructions
16
+ * (memtree-mcp.ts) already say context is MemTree's job, with the paused case
17
+ * as the exception these notices announce.
18
+ */
19
+ import fs from "node:fs";
20
+ import { FALLBACK_SUBSCRIBE_URL, SHORT_PAYMENT_URL_RE } from "./payment-gate.js";
21
+ import { REASON_FREE_CREDIT_USED, REASON_PLAN_LIMIT } from "./payment-link.js";
22
+ export const SUPPORT_EMAIL = "support@polychat.co";
23
+ const PAUSED_PREFIX = "ccc: MemTree is paused: ";
24
+ const KEY_INVALID_PREFIX = "ccc: MemTree is off: ";
25
+ const ACTIVE_AGAIN_PREFIX = "ccc: MemTree is working again";
26
+ /** A resume's transcript scan reads backward in chunks of this size, from the end. */
27
+ const SCAN_CHUNK_BYTES = 4 * 1024 * 1024;
28
+ /** Each chunk overlaps the next by this much, so a marker split between them is found. */
29
+ const MARKER_OVERLAP_BYTES = 64;
30
+ /** A scan that has not found a marker by then restores nothing. */
31
+ export const TRANSCRIPT_SCAN_MS = 1_000;
32
+ /** Told once MemTree answers again after a paused or refused-key notice. */
33
+ export const MEMTREE_ACTIVE_AGAIN_CONTEXT = `${ACTIVE_AGAIN_PREFIX}; compression is back on, so the earlier paused/off notice ` +
34
+ "and its /compact fallback no longer apply.";
35
+ /** The one line a blocked manual /compact shows (PreCompact hook reason). */
36
+ export const COMPACT_BLOCKED_REASON = "MemTree already keeps this session within its budget; /compact would discard detail. " +
37
+ "Use /ccc:memtree-compact if you really want to compress now, or run /compact again " +
38
+ "to use Claude Code's anyway.";
39
+ /** A second manual /compact within this long of a blocked one runs. */
40
+ export const COMPACT_CONFIRM_WINDOW_MS = 2 * 60 * 1000;
41
+ const PAUSED_FALLBACK = "Until then nothing is compressed or indexed, so near the context limit a fresh session " +
42
+ "(/clear) or, while the conversation still fits, /compact (Claude Code's own) is the fallback.";
43
+ /**
44
+ * The model's notice for a paused key (402): `detail` is the server's text.
45
+ * None of it is quoted: its first line names the account's email, and this
46
+ * text stays in the transcript (and MemTree's copy of it).
47
+ */
48
+ export function pausedModelContext(detail, reason) {
49
+ return [
50
+ `${PAUSED_PREFIX}${pausedReasonText(reason)}.`,
51
+ "This is MemTree's own billing at polychat.co, not Claude, the user's Claude plan or " +
52
+ "Anthropic credits; Claude works normally.",
53
+ `Fix: ${reason === REASON_PLAN_LIMIT ? "upgrade" : "subscribe"} at ${modelSubscribeUrl(detail)}, ` +
54
+ `or for credit questions email ${SUPPORT_EMAIL}.`,
55
+ PAUSED_FALLBACK,
56
+ ].join(" ");
57
+ }
58
+ /** The model's notice for a refused key (401/403). */
59
+ export function keyInvalidModelContext(keyPageUrl) {
60
+ return `${KEY_INVALID_PREFIX}the user's MemTree key was refused (revoked or mistyped); ` +
61
+ `Claude itself is unaffected. Fix: get a new key at ${keyPageUrl} and run \`ccc\` in a ` +
62
+ `terminal to paste it. ${PAUSED_FALLBACK}`;
63
+ }
64
+ export const PAUSED_KIND = "paused";
65
+ export const KEY_INVALID_KIND = "key-invalid";
66
+ /** Per-session record of what the model was told, and of blocked /compacts. */
67
+ export class ModelContextNotices {
68
+ now;
69
+ told = new Map();
70
+ compactBlockedAt = new Map();
71
+ constructor(now = Date.now) {
72
+ this.now = now;
73
+ }
74
+ /**
75
+ * The notice to add to this session's prompt, given MemTree's current state
76
+ * (undefined: working; null: not known yet, so no news), or undefined when
77
+ * its kind has not changed since the session was last told: a refreshed
78
+ * link alone is no news.
79
+ */
80
+ next(sessionId, current) {
81
+ if (current === null)
82
+ return undefined;
83
+ const last = this.told.get(sessionId);
84
+ if (current === undefined) {
85
+ if (last === undefined)
86
+ return undefined;
87
+ this.told.delete(sessionId);
88
+ return MEMTREE_ACTIVE_AGAIN_CONTEXT;
89
+ }
90
+ if (last === current.kind)
91
+ return undefined;
92
+ this.told.set(sessionId, current.kind);
93
+ return current.text;
94
+ }
95
+ /**
96
+ * A resumed session: what its transcript last told the model (a notice
97
+ * from an earlier ccc process), so a later change is announced.
98
+ */
99
+ restore(sessionId, kind) {
100
+ if (kind === undefined)
101
+ this.told.delete(sessionId);
102
+ else
103
+ this.told.set(sessionId, kind);
104
+ }
105
+ /** The session's transcript lost its notices (Claude Code compacted it). */
106
+ forget(sessionId) {
107
+ this.told.delete(sessionId);
108
+ }
109
+ /**
110
+ * The reason to block a manual /compact, or undefined to let it run: always
111
+ * when MemTree is not compressing, and for a repeat within the window.
112
+ */
113
+ blockCompact(sessionId, memtreeWorking) {
114
+ if (!memtreeWorking)
115
+ return undefined;
116
+ const blockedAt = this.compactBlockedAt.get(sessionId);
117
+ if (blockedAt !== undefined && this.now() - blockedAt < COMPACT_CONFIRM_WINDOW_MS) {
118
+ this.compactBlockedAt.delete(sessionId);
119
+ return undefined;
120
+ }
121
+ this.compactBlockedAt.set(sessionId, this.now());
122
+ return COMPACT_BLOCKED_REASON;
123
+ }
124
+ }
125
+ /**
126
+ * The short checkout link, else the pricing page: the long `/payment?…` link
127
+ * carries the user's email, and this text stays in the transcript.
128
+ */
129
+ function modelSubscribeUrl(detail) {
130
+ return SHORT_PAYMENT_URL_RE.exec(detail)?.[0] ?? FALLBACK_SUBSCRIBE_URL;
131
+ }
132
+ /** Claude Code's marker in a transcript: what precedes it is no longer in the model's context. */
133
+ const COMPACT_BOUNDARY = '"compact_boundary"';
134
+ /**
135
+ * The kind of the last notice in a transcript's live part (after its last
136
+ * compaction), undefined when none or "working again".
137
+ */
138
+ export function lastToldKind(transcript) {
139
+ return lastMarker(transcript)?.kind;
140
+ }
141
+ /**
142
+ * lastToldKind of a transcript file, read backward from its end until the
143
+ * last marker, so a long session's file is not read whole. Undefined when the
144
+ * file is missing or unreadable, or after `budgetMs`. Never throws.
145
+ */
146
+ export async function lastToldKindInFile(file, budgetMs = TRANSCRIPT_SCAN_MS, chunkBytes = SCAN_CHUNK_BYTES) {
147
+ const deadline = Date.now() + budgetMs;
148
+ let handle;
149
+ try {
150
+ handle = await fs.promises.open(file, "r");
151
+ const size = (await handle.stat()).size;
152
+ for (let end = size; end > 0 && Date.now() < deadline;) {
153
+ const start = Math.max(0, end - chunkBytes);
154
+ const buffer = Buffer.alloc(Math.min(end + MARKER_OVERLAP_BYTES, size) - start);
155
+ await handle.read(buffer, 0, buffer.length, start);
156
+ // Markers are ASCII: latin1 keeps them intact wherever a chunk splits a character.
157
+ const marker = lastMarker(buffer.toString("latin1"));
158
+ if (marker !== undefined)
159
+ return marker.kind;
160
+ end = start;
161
+ }
162
+ return undefined;
163
+ }
164
+ catch {
165
+ return undefined;
166
+ }
167
+ finally {
168
+ await handle?.close().catch(() => undefined);
169
+ }
170
+ }
171
+ /** The last marker in `text`: a notice's kind, or undefined for "working again" or a compaction. */
172
+ function lastMarker(text) {
173
+ const markers = [
174
+ [PAUSED_PREFIX, PAUSED_KIND], [KEY_INVALID_PREFIX, KEY_INVALID_KIND],
175
+ [ACTIVE_AGAIN_PREFIX, undefined], [COMPACT_BOUNDARY, undefined],
176
+ ];
177
+ let found;
178
+ for (const [marker, kind] of markers) {
179
+ const at = text.lastIndexOf(marker);
180
+ if (at >= 0 && (found === undefined || at > found.at))
181
+ found = { at, kind };
182
+ }
183
+ return found && { kind: found.kind };
184
+ }
185
+ function pausedReasonText(reason) {
186
+ if (reason === REASON_FREE_CREDIT_USED)
187
+ return "the free MemTree credit is used up";
188
+ if (reason === REASON_PLAN_LIMIT)
189
+ return "the MemTree plan's usage limit is reached";
190
+ return "MemTree usage limit reached";
191
+ }
192
+ //# sourceMappingURL=model-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-context.js","sourceRoot":"","sources":["../src/model-context.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,8 @@ export type PaymentStatus = {
45
45
  url: string | null;
46
46
  };
47
47
  export type PaymentChoice = "subscribe" | "continue" | "quit";
48
+ /** The short checkout link (payment-link.ts) that ccc puts in place of the `/payment?…` one. */
49
+ export declare const SHORT_PAYMENT_URL_RE: RegExp;
48
50
  /**
49
51
  * Parse a status body. Returns null when the body does not carry a boolean
50
52
  * `paid` (old server, wrong shape): the caller treats that as "unknown" and
@@ -1 +1 @@
1
- {"version":3,"file":"payment-gate.d.ts","sourceRoot":"","sources":["../src/payment-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EACL,KAAK,WAAW,EAIjB,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,sBAAsB,gCAAgC,CAAC;AAEpE,oGAAoG;AACpG,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAElD,eAAO,MAAM,2BAA2B,oDAAoD,CAAC;AAC7F,eAAO,MAAM,0BAA0B,2DAA2D,CAAC;AACnG,eAAO,MAAM,eAAe,yCAAyC,CAAC;AACtE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAEgC,CAAC;AAC/D,qFAAqF;AACrF,eAAO,MAAM,gBAAgB,kFACoD,CAAC;AAClF,oFAAoF;AACpF,eAAO,MAAM,mBAAmB,+FAC8D,CAAC;AAC/F,eAAO,MAAM,iBAAiB,QAES,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,4DAA4D;IAC5D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,+FAA+F;IAC/F,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAY9D;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAoBtE;AAED,gGAAgG;AAChG,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAIvE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAG/F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAO,GACjF,MAAM,CAUR;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,WAAW,GAAG,IAAW,GAAG,MAAM,CAIzE;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAI5D;AAQD,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAI5E;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAKhE"}
1
+ {"version":3,"file":"payment-gate.d.ts","sourceRoot":"","sources":["../src/payment-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EACL,KAAK,WAAW,EAIjB,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,sBAAsB,gCAAgC,CAAC;AAEpE,oGAAoG;AACpG,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAElD,eAAO,MAAM,2BAA2B,oDAAoD,CAAC;AAC7F,eAAO,MAAM,0BAA0B,2DAA2D,CAAC;AACnG,eAAO,MAAM,eAAe,yCAAyC,CAAC;AACtE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAEgC,CAAC;AAC/D,qFAAqF;AACrF,eAAO,MAAM,gBAAgB,kFACoD,CAAC;AAClF,oFAAoF;AACpF,eAAO,MAAM,mBAAmB,+FAC8D,CAAC;AAC/F,eAAO,MAAM,iBAAiB,QAES,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,4DAA4D;IAC5D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,+FAA+F;IAC/F,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAG9D,gGAAgG;AAChG,eAAO,MAAM,oBAAoB,QAA6D,CAAC;AAQ/F;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAoBtE;AAED,gGAAgG;AAChG,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAIvE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAG/F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAO,GACjF,MAAM,CAUR;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,WAAW,GAAG,IAAW,GAAG,MAAM,CAIzE;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAI5D;AAQD,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAI5E;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAKhE"}
@@ -41,7 +41,7 @@ export const PRINT_PAUSED_LINE = "ccc: MemTree is paused (payment required), so
41
41
  "Run ccc in a terminal to subscribe.";
42
42
  const PAYMENT_URL_RE = /https?:\/\/\S+\/payment\?\S+/;
43
43
  /** The short checkout link (payment-link.ts) that ccc puts in place of the `/payment?…` one. */
44
- const SHORT_PAYMENT_URL_RE = /https?:\/\/[^\s/]+\/p\/[A-Za-z0-9]{12,64}(?![A-Za-z0-9])/;
44
+ export const SHORT_PAYMENT_URL_RE = /https?:\/\/[^\s/]+\/p\/[A-Za-z0-9]{12,64}(?![A-Za-z0-9])/;
45
45
  // "we recommend 🌱 Starter plan for $5/month" → plan name + price.
46
46
  const RECOMMENDED_PLAN_RE = /recommend\s+(?:\S+\s+)?([A-Za-z][\w ]*?plan)\s+for\s+(\$[\d.]+\/month)/i;
47
47
  // No quotes, `$`, backticks or bare `%` (cmd.exe expands %VAR% when Windows opens it).
@@ -1 +1 @@
1
- {"version":3,"file":"payment-gate.js","sourceRoot":"","sources":["../src/payment-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"payment-gate.js","sourceRoot":"","sources":["../src/payment-gate.ts"],"names":[],"mappings":"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"}
package/dist/proxy.d.ts CHANGED
@@ -48,6 +48,7 @@ import type { ToolOutputStore } from "./tool-output-store.js";
48
48
  import { MemtreeClient, type CompressResult } from "./memtree.js";
49
49
  import { type Message } from "./turns.js";
50
50
  import { NoticeDeliveryQueue, type FirstTreeIntro } from "./hooks.js";
51
+ import { ModelContextNotices } from "./model-context.js";
51
52
  import { PaymentNoticeThrottle } from "./payment-notice.js";
52
53
  import type { MemtreeLinkPlacement } from "./cli-args.js";
53
54
  import { type MemtreeLinkStore } from "./memtree-links.js";
@@ -286,6 +287,12 @@ interface ProxyState {
286
287
  unpaidDetail: () => string | null;
287
288
  /** The 402 detail only while MemTree's latest answer was that 402 (MemtreeClient.pausedDetail). */
288
289
  pausedDetail: () => string | null;
290
+ /** Why the key is paused, when the server said (MemtreeClient.pausedReason). */
291
+ pausedReason: () => string | null;
292
+ /** Whether MemTree's latest answer was a success (MemtreeClient.answering). */
293
+ memtreeAnswering: () => boolean | undefined;
294
+ /** What each session's model was told about MemTree's state; blocked /compacts. */
295
+ modelNotices: ModelContextNotices;
289
296
  /** polychat's usage dashboard for the MemTree environment, if known. */
290
297
  usageUrl: string | undefined;
291
298
  /** ProxyOptions.sessionStartNotice. */
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
package/dist/proxy.js CHANGED
@@ -55,10 +55,11 @@ import { join } from "node:path";
55
55
  import { cachedPromptTokenCount, checkCompressedHistory, didMemtreeCompress, indexLagEvidence, MemtreeClient, modelBudgetTokens, normalizeMessagesForMemtree, serverFlattenedMessages, rawPromptTokenCount, } from "./memtree.js";
56
56
  import { contextLimitForModel, hasEarlierNonToolUserMessage, isAwaySummaryUserMessage, isLocalBashCommandTurn, isNonToolUserMessage, isToolResultUserMessage, lastNonSystemMessage, messagesWithSystem, modelForMemtree, stripSystemReminderText, } from "./turns.js";
57
57
  import { COMPRESSED_NOTICE, compressedTotalsText, DEGRADED_NOTICE, NOT_COMPRESSED_NOTE, recapLinkText, SseNoticeRewriter, stripNoticeBlocks, stripNoticeSystem, } from "./notices.js";
58
- import { NoticeDeliveryQueue, MEMTREE_COMPACT_COMMAND, MEMTREE_HELP_COMMAND, TRAILER_LABEL, LINK_LABEL, linkLines, urlLine, terminalSupportsHyperlinks, isMemtreeViewCommand, sessionCommandArgs, parseNoticeHookInput, } from "./hooks.js";
58
+ import { NoticeDeliveryQueue, MEMTREE_COMPACT_COMMAND, MEMTREE_HELP_COMMAND, TRAILER_LABEL, LINK_LABEL, linkLines, urlLine, terminalSupportsHyperlinks, isMemtreeViewCommand, sessionCommandArgs, parseNoticeHookInput, PRECOMPACT_HOOK_PATH, } from "./hooks.js";
59
59
  import { USAGE_LABEL, USAGE_SIGN_IN_NOTE } from "./usage-link.js";
60
60
  import { hyperlink } from "./payment-gate.js";
61
61
  import { keyInvalidNoticeText, keyInvalidRefusalMessage } from "./key-status.js";
62
+ import { KEY_INVALID_KIND, ModelContextNotices, PAUSED_KIND, keyInvalidModelContext, lastToldKindInFile, pausedModelContext } from "./model-context.js";
62
63
  import { PaymentNoticeThrottle, pausedCompactionText, pausedRefusalMessage, paymentNoticeText, subscribeUrlFromDetail } from "./payment-notice.js";
63
64
  import { MEMTREE_LINKS_MAX_SESSIONS } from "./memtree-links.js";
64
65
  import { describeClaudeCodeRequest, inspectMonitorTranscript, knownSideRequestKind, transcriptWarning, isClaudeCodeSideRequest, memtreeClientMeta, sessionTag, } from "./cc-request.js";
@@ -336,6 +337,9 @@ export function startProxy(opts) {
336
337
  pausedNearWindowWarned: new Set(),
337
338
  unpaidDetail: () => opts.memtree.paymentRequiredDetail,
338
339
  pausedDetail: () => opts.memtree.pausedDetail,
340
+ pausedReason: () => opts.memtree.pausedReason,
341
+ memtreeAnswering: () => opts.memtree.answering,
342
+ modelNotices: new ModelContextNotices(),
339
343
  usageUrl: opts.memtree.usageDashboardUrl,
340
344
  sessionStartNotice: opts.sessionStartNotice,
341
345
  promptSubmitNotice: opts.promptSubmitNotice,
@@ -489,6 +493,9 @@ async function handleRequest(req, res, opts, upstream, state, hookPath) {
489
493
  res.end(JSON.stringify({ detail: "The ccc proxy only serves programs on this machine" }));
490
494
  return;
491
495
  }
496
+ if (url.pathname === PRECOMPACT_HOOK_PATH) {
497
+ return handleNoticeHook(req, res, state, opts.reqlog, undefined, "PreCompact");
498
+ }
492
499
  if (url.pathname === hookPath) {
493
500
  return handleNoticeHook(req, res, state, opts.reqlog, (sessionId) => opts.memtree.scheduleFinalIndex(sessionId, (signal) => opts.transcriptUsage?.finalReplyAsync
494
501
  ? opts.transcriptUsage.finalReplyAsync(sessionId, signal)
@@ -723,7 +730,9 @@ function noteMainSessionStart(state, source, sessionId) {
723
730
  /** Serve only validated Claude hook POSTs on the randomized localhost path. */
724
731
  async function handleNoticeHook(req, res, state, reqlog,
725
732
  /** A main-lane turn ended: the session may be over (its final index). */
726
- onMainStop) {
733
+ onMainStop,
734
+ /** The only event this path takes (the token-free PreCompact path). */
735
+ onlyEvent) {
727
736
  if (req.method !== "POST") {
728
737
  res.writeHead(405, { allow: "POST" });
729
738
  res.end();
@@ -757,19 +766,32 @@ onMainStop) {
757
766
  res.end();
758
767
  return;
759
768
  }
769
+ if (onlyEvent !== undefined && parsed.hook_event_name !== onlyEvent) {
770
+ res.writeHead(403);
771
+ res.end();
772
+ return;
773
+ }
760
774
  if (parsed.hook_event_name === "SessionStart") {
761
775
  if (parsed.agent_id === undefined) {
762
776
  recordSessionStart(state, parsed.source);
763
777
  noteMainSessionStart(state, parsed.source, parsed.session_id);
778
+ // Claude Code's compaction dropped any MemTree notice from the transcript.
779
+ if (parsed.source === "compact")
780
+ state.modelNotices.forget(parsed.session_id);
764
781
  }
765
782
  // Earlier trees in this project: asked now, so its wait overlaps the resume's.
766
783
  const contextPromise = projectTreesContext(state.projectTrees, parsed);
784
+ // A resumed or forked history may carry notices an earlier process gave.
785
+ const restored = parsed.agent_id === undefined &&
786
+ (parsed.source === "resume" || parsed.source === "fork")
787
+ ? restoreModelNotices(state, parsed) : Promise.resolve();
767
788
  // A resume waits briefly for the newest tree; a fresh session has none to wait for.
768
789
  if (parsed.agent_id === undefined && parsed.source === "resume") {
769
790
  await state.newestTrees?.settle(parsed.session_id);
770
791
  }
771
792
  const line = joinNoticeLines(resumeLinkLine(state, parsed), resumePaymentNotice(state, parsed), extraSessionStartLine(state.sessionStartNotice, parsed));
772
793
  const context = await contextPromise;
794
+ await restored;
773
795
  if (!line && !context) {
774
796
  res.writeHead(204);
775
797
  res.end();
@@ -784,6 +806,25 @@ onMainStop) {
784
806
  res.end(body);
785
807
  return;
786
808
  }
809
+ if (parsed.hook_event_name === "PreCompact") {
810
+ // A typed /compact while MemTree compresses: say why it isn't needed, once.
811
+ const reason = parsed.agent_id === undefined && parsed.trigger === "manual"
812
+ ? state.modelNotices.blockCompact(parsed.session_id, memtreeWorking(state))
813
+ : undefined;
814
+ if (reason === undefined) {
815
+ res.writeHead(204);
816
+ res.end();
817
+ return;
818
+ }
819
+ const body = Buffer.from(JSON.stringify({ decision: "block", reason }), "utf-8");
820
+ res.writeHead(200, {
821
+ "content-type": "application/json",
822
+ "content-length": String(body.length),
823
+ "cache-control": "no-store",
824
+ });
825
+ res.end(body);
826
+ return;
827
+ }
787
828
  if (parsed.hook_event_name === "UserPromptSubmit") {
788
829
  // `/memtree-view`: answered here and blocked, so no model turn runs and
789
830
  // the prompt never enters the conversation. Not a human turn either, so
@@ -822,8 +863,11 @@ onMainStop) {
822
863
  recordMainPromptNotice(state, parsed.prompt_id, parsed.prompt);
823
864
  }
824
865
  const line = parsed.agent_id === undefined ? promptSubmitLine(state) : undefined;
825
- if (line) {
826
- const body = Buffer.from(JSON.stringify({ systemMessage: line }), "utf-8");
866
+ const context = parsed.agent_id === undefined
867
+ ? state.modelNotices.next(parsed.session_id, currentModelNotice(state))
868
+ : undefined;
869
+ if (line || context) {
870
+ const body = Buffer.from(JSON.stringify(promptSubmitOutput(line, context)), "utf-8");
827
871
  res.writeHead(200, {
828
872
  "content-type": "application/json",
829
873
  "content-length": String(body.length),
@@ -2114,6 +2158,47 @@ function promptSubmitLine(state) {
2114
2158
  return undefined;
2115
2159
  }
2116
2160
  }
2161
+ /**
2162
+ * Whether MemTree is known to be compressing: its latest answer a success and
2163
+ * no pause (402) remembered. Before any answer, or after an outage, it is not.
2164
+ */
2165
+ function memtreeWorking(state) {
2166
+ return state.memtreeAnswering() === true && state.unpaidDetail() === null;
2167
+ }
2168
+ /**
2169
+ * What the model should know about MemTree right now: a notice, undefined
2170
+ * when it is known to work, null when neither is known (no answer, an outage).
2171
+ */
2172
+ function currentModelNotice(state) {
2173
+ if (state.keyInvalid()) {
2174
+ return { kind: KEY_INVALID_KIND, text: keyInvalidModelContext(state.keyPageUrl) };
2175
+ }
2176
+ const detail = state.unpaidDetail();
2177
+ if (detail !== null) {
2178
+ return { kind: PAUSED_KIND, text: pausedModelContext(detail, state.pausedReason()) };
2179
+ }
2180
+ return memtreeWorking(state) ? undefined : null;
2181
+ }
2182
+ /**
2183
+ * A resumed session's transcript may hold a notice from an earlier ccc process
2184
+ * (paused, then paid in between): start from it, so the change is announced.
2185
+ * A missing or unreadable transcript, or a scan past its time box, starts from
2186
+ * nothing. Never throws.
2187
+ */
2188
+ async function restoreModelNotices(state, input) {
2189
+ if (!input.transcript_path)
2190
+ return;
2191
+ state.modelNotices.restore(input.session_id, await lastToldKindInFile(input.transcript_path));
2192
+ }
2193
+ /** UserPromptSubmit's answer: a line for the user, context for the model, or both. */
2194
+ function promptSubmitOutput(line, context) {
2195
+ return {
2196
+ ...(line ? { systemMessage: line } : {}),
2197
+ ...(context
2198
+ ? { hookSpecificOutput: { hookEventName: "UserPromptSubmit", additionalContext: context } }
2199
+ : {}),
2200
+ };
2201
+ }
2117
2202
  /** The caller's extra SessionStart line; a throwing provider shows nothing. */
2118
2203
  function extraSessionStartLine(provider, input) {
2119
2204
  if (!provider || input.agent_id !== undefined || input.source === "compact")