@narumitw/pi-codex-compact 0.51.3 → 0.52.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 +82 -70
- package/dist/chunks/chunk-JYXZMCXD.js +43 -0
- package/dist/chunks/chunk-JYXZMCXD.js.map +7 -0
- package/dist/chunks/{settings-menu-PEDLURUH.js → settings-menu-VYQ6ABCP.js} +54 -27
- package/dist/chunks/settings-menu-VYQ6ABCP.js.map +7 -0
- package/dist/index.ts +515 -72
- package/dist/index.ts.map +4 -4
- package/package.json +7 -10
- package/src/checkpoint.ts +48 -13
- package/src/codex-compact.ts +60 -33
- package/src/model-api.ts +43 -3
- package/src/protocol.ts +162 -4
- package/src/remote-compact.ts +298 -0
- package/src/remote-shared.ts +19 -0
- package/src/remote-types.ts +45 -0
- package/src/remote-v2.ts +70 -0
- package/src/remote.ts +12 -112
- package/src/settings-menu.ts +55 -20
- package/src/settings.ts +15 -0
- package/src/terminal.ts +6 -0
- package/dist/chunks/chunk-6TZ2L2BM.js +0 -13
- package/dist/chunks/chunk-6TZ2L2BM.js.map +0 -7
- package/dist/chunks/settings-menu-PEDLURUH.js.map +0 -7
package/src/settings-menu.ts
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
|
+
import type { Api } from "@earendil-works/pi-ai";
|
|
1
2
|
import type { ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
|
|
2
3
|
import type { MenuDefinition } from "@narumitw/pi-tui-kit";
|
|
3
|
-
import {
|
|
4
|
+
import { resolveCompactionRouteForApi } from "./model-api.js";
|
|
4
5
|
import type {
|
|
5
6
|
CodexCompactSettings,
|
|
6
7
|
CodexCompactSettingsRuntime,
|
|
7
8
|
CodexCompactSettingsState,
|
|
8
9
|
} from "./settings.js";
|
|
10
|
+
import { terminalText as safeText } from "./terminal.js";
|
|
9
11
|
|
|
10
12
|
type Screen = "main" | "settings" | "invalid";
|
|
11
13
|
type Action =
|
|
12
14
|
| "compact-now"
|
|
13
15
|
| "set-enabled"
|
|
16
|
+
| "set-protocol"
|
|
14
17
|
| "set-timeout"
|
|
15
18
|
| "set-retries"
|
|
16
19
|
| "set-retention"
|
|
@@ -23,14 +26,7 @@ export interface SettingsMenuOwner {
|
|
|
23
26
|
|
|
24
27
|
interface CompactMenuStatus {
|
|
25
28
|
model: string;
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function safeText(value: string): string {
|
|
30
|
-
return Array.from(value, (character) => {
|
|
31
|
-
const codePoint = character.codePointAt(0) ?? 0;
|
|
32
|
-
return codePoint < 32 || (codePoint >= 127 && codePoint <= 159) ? " " : character;
|
|
33
|
-
}).join("");
|
|
29
|
+
api?: Api;
|
|
34
30
|
}
|
|
35
31
|
|
|
36
32
|
function timeoutLabel(milliseconds: number): string {
|
|
@@ -41,6 +37,17 @@ function retentionLabel(tokens: number): string {
|
|
|
41
37
|
return `${tokens / 1000}K tokens`;
|
|
42
38
|
}
|
|
43
39
|
|
|
40
|
+
function protocolLabel(protocol: CodexCompactSettings["protocol"]): string {
|
|
41
|
+
switch (protocol) {
|
|
42
|
+
case "auto":
|
|
43
|
+
return "Auto";
|
|
44
|
+
case "remote-v2":
|
|
45
|
+
return "Remote V2";
|
|
46
|
+
case "responses-compact":
|
|
47
|
+
return "Responses Compact";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
44
51
|
async function update(
|
|
45
52
|
runtime: CodexCompactSettingsRuntime,
|
|
46
53
|
ctx: ExtensionCommandContext,
|
|
@@ -49,7 +56,8 @@ async function update(
|
|
|
49
56
|
) {
|
|
50
57
|
try {
|
|
51
58
|
await runtime.update(patch, signal);
|
|
52
|
-
|
|
59
|
+
if (signal.aborted) return { kind: "rejected" as const };
|
|
60
|
+
ctx.ui.notify("Responses compaction settings saved.", "info");
|
|
53
61
|
return { kind: "stay" as const };
|
|
54
62
|
} catch (error) {
|
|
55
63
|
if (signal.aborted) return { kind: "rejected" as const };
|
|
@@ -70,9 +78,10 @@ export function createCodexCompactMenu(
|
|
|
70
78
|
screens: {
|
|
71
79
|
main: ({ state }) => ({
|
|
72
80
|
kind: "actions",
|
|
73
|
-
title: "
|
|
81
|
+
title: "Responses Compaction",
|
|
74
82
|
lines: [
|
|
75
|
-
`Remote
|
|
83
|
+
`Remote compaction: ${state.settings.enabled ? "On" : "Off"}`,
|
|
84
|
+
`Protocol setting: ${protocolLabel(state.settings.protocol)}`,
|
|
76
85
|
`Active model: ${safeText(options.status?.model ?? "none")}`,
|
|
77
86
|
`Compact route: ${safeText(compactRoute(state, options.status))}`,
|
|
78
87
|
],
|
|
@@ -97,17 +106,25 @@ export function createCodexCompactMenu(
|
|
|
97
106
|
}),
|
|
98
107
|
settings: ({ state }) => ({
|
|
99
108
|
kind: "settings",
|
|
100
|
-
title: "
|
|
109
|
+
title: "Responses Compaction Settings",
|
|
101
110
|
lines: [`User settings · ${safeText(state.path)}`],
|
|
102
111
|
items: [
|
|
103
112
|
{
|
|
104
113
|
id: "enabled",
|
|
105
114
|
label: "Remote compaction",
|
|
106
|
-
description: "Use
|
|
115
|
+
description: "Use a supported Responses compaction protocol.",
|
|
107
116
|
currentValue: state.settings.enabled ? "On" : "Off",
|
|
108
117
|
values: ["On", "Off"],
|
|
109
118
|
action: "set-enabled",
|
|
110
119
|
},
|
|
120
|
+
{
|
|
121
|
+
id: "protocol",
|
|
122
|
+
label: "Protocol",
|
|
123
|
+
description: "Choose automatically or force one supported remote protocol.",
|
|
124
|
+
currentValue: protocolLabel(state.settings.protocol),
|
|
125
|
+
values: ["Auto", "Remote V2", "Responses Compact"],
|
|
126
|
+
action: "set-protocol",
|
|
127
|
+
},
|
|
111
128
|
{
|
|
112
129
|
id: "requestTimeoutMs",
|
|
113
130
|
label: "Request timeout",
|
|
@@ -135,7 +152,7 @@ export function createCodexCompactMenu(
|
|
|
135
152
|
{
|
|
136
153
|
id: "notifyOnFallback",
|
|
137
154
|
label: "Fallback notifications",
|
|
138
|
-
description: "Warn when
|
|
155
|
+
description: "Warn when remote compaction fails and Pi native takes over.",
|
|
139
156
|
currentValue: state.settings.notifyOnFallback ? "On" : "Off",
|
|
140
157
|
values: ["On", "Off"],
|
|
141
158
|
action: "set-notify",
|
|
@@ -160,6 +177,20 @@ export function createCodexCompactMenu(
|
|
|
160
177
|
},
|
|
161
178
|
"set-enabled": ({ ctx, value, signal }) =>
|
|
162
179
|
update(runtime, ctx, { enabled: value === "On" }, signal),
|
|
180
|
+
"set-protocol": ({ ctx, value, signal }) =>
|
|
181
|
+
update(
|
|
182
|
+
runtime,
|
|
183
|
+
ctx,
|
|
184
|
+
{
|
|
185
|
+
protocol:
|
|
186
|
+
value === "Remote V2"
|
|
187
|
+
? "remote-v2"
|
|
188
|
+
: value === "Responses Compact"
|
|
189
|
+
? "responses-compact"
|
|
190
|
+
: "auto",
|
|
191
|
+
},
|
|
192
|
+
signal,
|
|
193
|
+
),
|
|
163
194
|
"set-timeout": ({ ctx, value, signal }) =>
|
|
164
195
|
update(
|
|
165
196
|
runtime,
|
|
@@ -187,10 +218,13 @@ export async function showCodexCompactMenu(
|
|
|
187
218
|
ctx: ExtensionCommandContext,
|
|
188
219
|
owner: SettingsMenuOwner,
|
|
189
220
|
): Promise<void> {
|
|
190
|
-
if (ctx.mode
|
|
191
|
-
ctx.ui.notify(`Edit
|
|
221
|
+
if (ctx.mode === "rpc" && ctx.hasUI) {
|
|
222
|
+
ctx.ui.notify(`Edit Responses compaction settings at ${safeText(runtime.get().path)}.`, "info");
|
|
192
223
|
return;
|
|
193
224
|
}
|
|
225
|
+
if (ctx.mode !== "tui") {
|
|
226
|
+
throw new Error("/codex-compact requires TUI or RPC UI support");
|
|
227
|
+
}
|
|
194
228
|
const { runMenu } = await import("@narumitw/pi-tui-kit");
|
|
195
229
|
if (owner.signal.aborted || !owner.isCurrent()) return;
|
|
196
230
|
let compactRequested = false;
|
|
@@ -222,7 +256,7 @@ export function compactMenuStatus(ctx: ExtensionCommandContext): CompactMenuStat
|
|
|
222
256
|
const model = ctx.model;
|
|
223
257
|
return {
|
|
224
258
|
model: model ? `${model.provider}/${model.id}` : "none",
|
|
225
|
-
|
|
259
|
+
api: model?.api,
|
|
226
260
|
};
|
|
227
261
|
}
|
|
228
262
|
|
|
@@ -230,6 +264,7 @@ function compactRoute(
|
|
|
230
264
|
state: Readonly<CodexCompactSettingsState>,
|
|
231
265
|
status: CompactMenuStatus | undefined,
|
|
232
266
|
): string {
|
|
233
|
-
|
|
234
|
-
|
|
267
|
+
const route = resolveCompactionRouteForApi(status?.api, state.settings);
|
|
268
|
+
if (route.kind === "native") return `Pi native (${route.reason})`;
|
|
269
|
+
return route.protocol === "remote-v2" ? "Responses Remote V2" : "Responses Compact API";
|
|
235
270
|
}
|
package/src/settings.ts
CHANGED
|
@@ -3,12 +3,14 @@ import { constants } from "node:fs";
|
|
|
3
3
|
import { mkdir, open, rename, rm, writeFile } from "node:fs/promises";
|
|
4
4
|
import { basename, dirname, join } from "node:path";
|
|
5
5
|
import { getAgentDir } from "@earendil-works/pi-coding-agent";
|
|
6
|
+
import type { RemoteCompactionProtocolSetting } from "./model-api.js";
|
|
6
7
|
|
|
7
8
|
export const CODEX_COMPACT_SETTINGS_FILE = "pi-codex-compact.json";
|
|
8
9
|
export const MAX_SETTINGS_BYTES = 64 * 1024;
|
|
9
10
|
|
|
10
11
|
export interface CodexCompactSettings {
|
|
11
12
|
enabled: boolean;
|
|
13
|
+
protocol: RemoteCompactionProtocolSetting;
|
|
12
14
|
requestTimeoutMs: number;
|
|
13
15
|
maxRetries: number;
|
|
14
16
|
replacementTokenBudget: number;
|
|
@@ -17,6 +19,7 @@ export interface CodexCompactSettings {
|
|
|
17
19
|
|
|
18
20
|
export const DEFAULT_CODEX_COMPACT_SETTINGS: Readonly<CodexCompactSettings> = Object.freeze({
|
|
19
21
|
enabled: true,
|
|
22
|
+
protocol: "auto",
|
|
20
23
|
requestTimeoutMs: 300_000,
|
|
21
24
|
maxRetries: 2,
|
|
22
25
|
replacementTokenBudget: 64_000,
|
|
@@ -60,6 +63,14 @@ function validInteger(value: unknown, minimum: number, maximum: number): value i
|
|
|
60
63
|
export function normalizeCodexCompactSettings(value: unknown): CodexCompactSettings | undefined {
|
|
61
64
|
if (!isRecord(value)) return undefined;
|
|
62
65
|
if (Object.hasOwn(value, "enabled") && typeof value.enabled !== "boolean") return undefined;
|
|
66
|
+
if (
|
|
67
|
+
Object.hasOwn(value, "protocol") &&
|
|
68
|
+
value.protocol !== "auto" &&
|
|
69
|
+
value.protocol !== "remote-v2" &&
|
|
70
|
+
value.protocol !== "responses-compact"
|
|
71
|
+
) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
63
74
|
if (Object.hasOwn(value, "notifyOnFallback") && typeof value.notifyOnFallback !== "boolean") {
|
|
64
75
|
return undefined;
|
|
65
76
|
}
|
|
@@ -76,6 +87,10 @@ export function normalizeCodexCompactSettings(value: unknown): CodexCompactSetti
|
|
|
76
87
|
return {
|
|
77
88
|
enabled:
|
|
78
89
|
typeof value.enabled === "boolean" ? value.enabled : DEFAULT_CODEX_COMPACT_SETTINGS.enabled,
|
|
90
|
+
protocol:
|
|
91
|
+
value.protocol === "remote-v2" || value.protocol === "responses-compact"
|
|
92
|
+
? value.protocol
|
|
93
|
+
: DEFAULT_CODEX_COMPACT_SETTINGS.protocol,
|
|
79
94
|
requestTimeoutMs:
|
|
80
95
|
typeof value.requestTimeoutMs === "number"
|
|
81
96
|
? value.requestTimeoutMs
|
package/src/terminal.ts
ADDED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
-
// @ts-nocheck -- the generated entry uses a .ts extension for Pi's Jiti loader.
|
|
3
|
-
|
|
4
|
-
// src/model-api.ts
|
|
5
|
-
import { hasApi } from "@earendil-works/pi-ai";
|
|
6
|
-
function usesCodexResponsesApi(model) {
|
|
7
|
-
return model !== void 0 && hasApi(model, "openai-codex-responses");
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export {
|
|
11
|
-
usesCodexResponsesApi
|
|
12
|
-
};
|
|
13
|
-
//# sourceMappingURL=chunk-6TZ2L2BM.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/model-api.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Api, Model } from \"@earendil-works/pi-ai\";\nimport { hasApi } from \"@earendil-works/pi-ai\";\n\nexport function usesCodexResponsesApi(\n\tmodel: Model<Api> | undefined,\n): model is Model<\"openai-codex-responses\"> {\n\treturn model !== undefined && hasApi(model, \"openai-codex-responses\");\n}\n"],
|
|
5
|
-
"mappings": ";;;;AACA,SAAS,cAAc;AAEhB,SAAS,sBACf,OAC2C;AAC3C,SAAO,UAAU,UAAa,OAAO,OAAO,wBAAwB;AACrE;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/settings-menu.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ExtensionCommandContext } from \"@earendil-works/pi-coding-agent\";\nimport type { MenuDefinition } from \"@narumitw/pi-tui-kit\";\nimport { usesCodexResponsesApi } from \"./model-api.js\";\nimport type {\n\tCodexCompactSettings,\n\tCodexCompactSettingsRuntime,\n\tCodexCompactSettingsState,\n} from \"./settings.js\";\n\ntype Screen = \"main\" | \"settings\" | \"invalid\";\ntype Action =\n\t| \"compact-now\"\n\t| \"set-enabled\"\n\t| \"set-timeout\"\n\t| \"set-retries\"\n\t| \"set-retention\"\n\t| \"set-notify\";\n\nexport interface SettingsMenuOwner {\n\tsignal: AbortSignal;\n\tisCurrent(): boolean;\n}\n\ninterface CompactMenuStatus {\n\tmodel: string;\n\tremoteEligible: boolean;\n}\n\nfunction safeText(value: string): string {\n\treturn Array.from(value, (character) => {\n\t\tconst codePoint = character.codePointAt(0) ?? 0;\n\t\treturn codePoint < 32 || (codePoint >= 127 && codePoint <= 159) ? \" \" : character;\n\t}).join(\"\");\n}\n\nfunction timeoutLabel(milliseconds: number): string {\n\treturn `${milliseconds / 60_000} min`;\n}\n\nfunction retentionLabel(tokens: number): string {\n\treturn `${tokens / 1000}K tokens`;\n}\n\nasync function update(\n\truntime: CodexCompactSettingsRuntime,\n\tctx: ExtensionCommandContext,\n\tpatch: Partial<CodexCompactSettings>,\n\tsignal: AbortSignal,\n) {\n\ttry {\n\t\tawait runtime.update(patch, signal);\n\t\tctx.ui.notify(\"Codex compaction settings saved.\", \"info\");\n\t\treturn { kind: \"stay\" as const };\n\t} catch (error) {\n\t\tif (signal.aborted) return { kind: \"rejected\" as const };\n\t\tctx.ui.notify(\n\t\t\t`Could not save pi-codex-compact.json: ${safeText(error instanceof Error ? error.message : String(error))}`,\n\t\t\t\"error\",\n\t\t);\n\t\treturn { kind: \"rejected\" as const };\n\t}\n}\n\nexport function createCodexCompactMenu(\n\truntime: CodexCompactSettingsRuntime,\n\toptions: { onCompactRequested?: () => void; status?: CompactMenuStatus } = {},\n): MenuDefinition<CodexCompactSettingsState, Screen, Action, ExtensionCommandContext> {\n\treturn {\n\t\tstart: \"main\",\n\t\tscreens: {\n\t\t\tmain: ({ state }) => ({\n\t\t\t\tkind: \"actions\",\n\t\t\t\ttitle: \"Codex Remote Compaction\",\n\t\t\t\tlines: [\n\t\t\t\t\t`Remote V2: ${state.settings.enabled ? \"On\" : \"Off\"}`,\n\t\t\t\t\t`Active model: ${safeText(options.status?.model ?? \"none\")}`,\n\t\t\t\t\t`Compact route: ${safeText(compactRoute(state, options.status))}`,\n\t\t\t\t],\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"compact-now\",\n\t\t\t\t\t\tlabel: \"Compact now\",\n\t\t\t\t\t\tdescription: \"Close this menu and compact the active session immediately.\",\n\t\t\t\t\t\taction: \"compact-now\",\n\t\t\t\t\t},\n\t\t\t\t\tstate.kind === \"invalid\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tid: \"settings\",\n\t\t\t\t\t\t\t\tlabel: \"Settings\",\n\t\t\t\t\t\t\t\tdescription: \"Read-only until the invalid settings file is repaired.\",\n\t\t\t\t\t\t\t\tto: \"invalid\" as const,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: { id: \"settings\", label: \"Settings\", to: \"settings\" as const },\n\t\t\t\t\t{ id: \"close\", label: \"Close\", close: true },\n\t\t\t\t],\n\t\t\t\thint: \"close\",\n\t\t\t}),\n\t\t\tsettings: ({ state }) => ({\n\t\t\t\tkind: \"settings\",\n\t\t\t\ttitle: \"Codex Remote Compaction Settings\",\n\t\t\t\tlines: [`User settings \u00B7 ${safeText(state.path)}`],\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"enabled\",\n\t\t\t\t\t\tlabel: \"Remote compaction\",\n\t\t\t\t\t\tdescription: \"Use Codex Remote V2 when the model uses openai-codex-responses.\",\n\t\t\t\t\t\tcurrentValue: state.settings.enabled ? \"On\" : \"Off\",\n\t\t\t\t\t\tvalues: [\"On\", \"Off\"],\n\t\t\t\t\t\taction: \"set-enabled\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"requestTimeoutMs\",\n\t\t\t\t\t\tlabel: \"Request timeout\",\n\t\t\t\t\t\tdescription: \"Maximum time for the extension-owned remote compaction request.\",\n\t\t\t\t\t\tcurrentValue: timeoutLabel(state.settings.requestTimeoutMs),\n\t\t\t\t\t\tvalues: [\"2 min\", \"5 min\", \"10 min\"],\n\t\t\t\t\t\taction: \"set-timeout\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"maxRetries\",\n\t\t\t\t\t\tlabel: \"Transport retries\",\n\t\t\t\t\t\tdescription: \"Retry transient provider failures before falling back to Pi.\",\n\t\t\t\t\t\tcurrentValue: String(state.settings.maxRetries),\n\t\t\t\t\t\tvalues: [\"0\", \"1\", \"2\"],\n\t\t\t\t\t\taction: \"set-retries\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"replacementTokenBudget\",\n\t\t\t\t\t\tlabel: \"Retained user history\",\n\t\t\t\t\t\tdescription: \"Approximate user-message budget kept beside the opaque checkpoint.\",\n\t\t\t\t\t\tcurrentValue: retentionLabel(state.settings.replacementTokenBudget),\n\t\t\t\t\t\tvalues: [\"32K tokens\", \"64K tokens\", \"96K tokens\", \"128K tokens\"],\n\t\t\t\t\t\taction: \"set-retention\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"notifyOnFallback\",\n\t\t\t\t\t\tlabel: \"Fallback notifications\",\n\t\t\t\t\t\tdescription: \"Warn when Remote V2 fails and native Pi compaction takes over.\",\n\t\t\t\t\t\tcurrentValue: state.settings.notifyOnFallback ? \"On\" : \"Off\",\n\t\t\t\t\t\tvalues: [\"On\", \"Off\"],\n\t\t\t\t\t\taction: \"set-notify\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}),\n\t\t\tinvalid: ({ state }) => ({\n\t\t\t\tkind: \"detail\",\n\t\t\t\ttitle: \"Codex Compact Settings \u00B7 Read only\",\n\t\t\t\tlines: [\n\t\t\t\t\t`Invalid settings file: ${safeText(state.path)}`,\n\t\t\t\t\t`Issue: ${safeText(state.issue ?? \"unknown validation error\")}`,\n\t\t\t\t\t\"Built-in defaults are active. Repair the file and run /reload; it will not be overwritten.\",\n\t\t\t\t],\n\t\t\t\thint: \"back\",\n\t\t\t}),\n\t\t},\n\t\tactions: {\n\t\t\t\"compact-now\": async () => {\n\t\t\t\toptions.onCompactRequested?.();\n\t\t\t\treturn { kind: \"close\" };\n\t\t\t},\n\t\t\t\"set-enabled\": ({ ctx, value, signal }) =>\n\t\t\t\tupdate(runtime, ctx, { enabled: value === \"On\" }, signal),\n\t\t\t\"set-timeout\": ({ ctx, value, signal }) =>\n\t\t\t\tupdate(\n\t\t\t\t\truntime,\n\t\t\t\t\tctx,\n\t\t\t\t\t{ requestTimeoutMs: Number.parseInt(value ?? \"5\", 10) * 60_000 },\n\t\t\t\t\tsignal,\n\t\t\t\t),\n\t\t\t\"set-retries\": ({ ctx, value, signal }) =>\n\t\t\t\tupdate(runtime, ctx, { maxRetries: Number.parseInt(value ?? \"2\", 10) }, signal),\n\t\t\t\"set-retention\": ({ ctx, value, signal }) =>\n\t\t\t\tupdate(\n\t\t\t\t\truntime,\n\t\t\t\t\tctx,\n\t\t\t\t\t{ replacementTokenBudget: Number.parseInt(value ?? \"64\", 10) * 1000 },\n\t\t\t\t\tsignal,\n\t\t\t\t),\n\t\t\t\"set-notify\": ({ ctx, value, signal }) =>\n\t\t\t\tupdate(runtime, ctx, { notifyOnFallback: value === \"On\" }, signal),\n\t\t},\n\t};\n}\n\nexport async function showCodexCompactMenu(\n\truntime: CodexCompactSettingsRuntime,\n\tctx: ExtensionCommandContext,\n\towner: SettingsMenuOwner,\n): Promise<void> {\n\tif (ctx.mode !== \"tui\") {\n\t\tctx.ui.notify(`Edit Codex compaction settings at ${safeText(runtime.get().path)}.`, \"info\");\n\t\treturn;\n\t}\n\tconst { runMenu } = await import(\"@narumitw/pi-tui-kit\");\n\tif (owner.signal.aborted || !owner.isCurrent()) return;\n\tlet compactRequested = false;\n\tawait runMenu(\n\t\tctx,\n\t\tcreateCodexCompactMenu(runtime, {\n\t\t\tonCompactRequested: () => {\n\t\t\t\tcompactRequested = true;\n\t\t\t},\n\t\t\tstatus: compactMenuStatus(ctx),\n\t\t}),\n\t\t{\n\t\t\tgetState: () => runtime.get(),\n\t\t\tsignal: owner.signal,\n\t\t\tisCurrent: owner.isCurrent,\n\t\t},\n\t);\n\tif (!compactRequested || owner.signal.aborted || !owner.isCurrent()) return;\n\tctx.compact({\n\t\tonError: (error) => {\n\t\t\tif (!owner.signal.aborted && owner.isCurrent()) {\n\t\t\t\tctx.ui.notify(`Compaction failed: ${safeText(error.message)}`, \"error\");\n\t\t\t}\n\t\t},\n\t});\n}\n\nexport function compactMenuStatus(ctx: ExtensionCommandContext): CompactMenuStatus {\n\tconst model = ctx.model;\n\treturn {\n\t\tmodel: model ? `${model.provider}/${model.id}` : \"none\",\n\t\tremoteEligible: usesCodexResponsesApi(model),\n\t};\n}\n\nfunction compactRoute(\n\tstate: Readonly<CodexCompactSettingsState>,\n\tstatus: CompactMenuStatus | undefined,\n): string {\n\tif (!state.settings.enabled) return \"Pi native (Remote V2 off)\";\n\treturn status?.remoteEligible ? \"Codex Remote V2\" : \"Pi native (requires openai-codex-responses)\";\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|