@felan-ai/ext-context-view 0.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.
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Felan contributors
4
+ Copyright (c) 2026 Milko Slavov
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
package/NOTICE ADDED
@@ -0,0 +1,11 @@
1
+ @felan-ai/ext-context-view
2
+
3
+ Includes code adapted from packages/pi-context in
4
+ https://github.com/mslavov/pi-extensions at source commit
5
+ 7e72e509fe45a5a87c4c2e176cb711de994a8c1d.
6
+
7
+ Copyright (c) 2026 Milko Slavov
8
+ Licensed under the MIT License included in this package.
9
+
10
+ This package uses @earendil-works/pi-tui 0.84.3 (Pi-TUI 0.84.3), licensed under
11
+ the MIT License.
package/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # @felan-ai/ext-context-view
2
+
3
+ Local TUI context-window usage inspection for Felan.
4
+
5
+ The extension registers `/context`. In the interactive TUI it renders a themed
6
+ report inline by default, with an estimated token breakdown for the system
7
+ prompt, built-in and extension tools, project context files, skills, memory,
8
+ conversation messages, other context, and free space. Set
9
+ `extensionConfig.contextView.displayMode` to `overlay` for a centered overlay.
10
+ In headless modes it emits the same report as a notification. The report
11
+ includes the current model and counts of tools, context files, and skills.
12
+
13
+ Values are estimates based on the assembled prompt and active session entries;
14
+ they are not provider billing measurements. The underlying runtime context
15
+ usage remains authoritative when available, including its unknown state after
16
+ compaction before the next model response.
17
+
18
+ The custom report is intentionally TUI-only and closes with `Esc`, `Enter`, or
19
+ `q`. The Memory row separates the initial `summary.md`, `index.md`, and schema
20
+ context from identifiable recalls of files in the session memory projection.
21
+ The default local Felan host enables this extension as the `contextView`
22
+ built-in; set `builtinExtensions.contextView` to `false` to disable it.
23
+
24
+ ## Composition
25
+
26
+ ```ts
27
+ import contextViewExtension from '@felan-ai/ext-context-view';
28
+ ```
29
+
30
+ The package consumes the public Pi composition surface from
31
+ `@felan-ai/agent-core` and the pinned `@earendil-works/pi-tui` dependency. It
32
+ performs no filesystem, network, credential, or host-specific I/O.
33
+
34
+ ## Development
35
+
36
+ ```sh
37
+ pnpm --filter @felan-ai/ext-context-view build
38
+ pnpm --filter @felan-ai/ext-context-view type-check
39
+ pnpm --filter @felan-ai/ext-context-view test
40
+ ```
41
+
42
+ ## Attribution
43
+
44
+ This package adapts the MIT-licensed `pi-context` implementation. See
45
+ [NOTICE](NOTICE) and [LICENSE](LICENSE).
@@ -0,0 +1,7 @@
1
+ export declare const CONTEXT_VIEW_DISPLAY_MODES: readonly ["inline", "overlay"];
2
+ export type ContextViewDisplayMode = (typeof CONTEXT_VIEW_DISPLAY_MODES)[number];
3
+ export declare const DEFAULT_CONTEXT_VIEW_DISPLAY_MODE: ContextViewDisplayMode;
4
+ export declare const CONTEXT_VIEW_CONFIG: import("@felan-ai/agent-core").ExtensionConfigDefinition<{
5
+ readonly displayMode: import("@felan-ai/agent-core").ExtensionConfigField<"inline" | "overlay">;
6
+ }>;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,0BAA0B,gCAAiC,CAAC;AACzE,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjF,eAAO,MAAM,iCAAiC,EAAE,sBAAiC,CAAC;AAElF,eAAO,MAAM,mBAAmB;;EAU9B,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,15 @@
1
+ import { configField, defineExtensionConfig } from "@felan-ai/agent-core";
2
+ export const CONTEXT_VIEW_DISPLAY_MODES = ["inline", "overlay"];
3
+ export const DEFAULT_CONTEXT_VIEW_DISPLAY_MODE = "inline";
4
+ export const CONTEXT_VIEW_CONFIG = defineExtensionConfig({
5
+ id: "contextView",
6
+ title: "Context View",
7
+ fields: {
8
+ displayMode: configField.enum(CONTEXT_VIEW_DISPLAY_MODES, {
9
+ default: DEFAULT_CONTEXT_VIEW_DISPLAY_MODE,
10
+ label: "Display mode",
11
+ description: "Render context usage inline or in a centered overlay",
12
+ }),
13
+ },
14
+ });
15
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAU,CAAC;AAGzE,MAAM,CAAC,MAAM,iCAAiC,GAA2B,QAAQ,CAAC;AAElF,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;IACxD,EAAE,EAAE,aAAa;IACjB,KAAK,EAAE,cAAc;IACrB,MAAM,EAAE;QACP,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,0BAA0B,EAAE;YACzD,OAAO,EAAE,iCAAiC;YAC1C,KAAK,EAAE,cAAc;YACrB,WAAW,EAAE,sDAAsD;SACnE,CAAC;KACF;CACD,CAAC,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { type BuildSystemPromptOptions, type ExtensionAPI, type ExtensionCommandContext, type FelanExtension, type FelanExtensionAPI, type Theme } from "@felan-ai/agent-core";
2
+ import { type Component } from "@earendil-works/pi-tui";
3
+ export { CONTEXT_VIEW_CONFIG, CONTEXT_VIEW_DISPLAY_MODES, DEFAULT_CONTEXT_VIEW_DISPLAY_MODE, } from "./config.js";
4
+ export type { ContextViewDisplayMode } from "./config.js";
5
+ type UsedCategoryKey = "systemPrompt" | "systemTools" | "extensions" | "contextFiles" | "skills" | "memory" | "messages" | "other";
6
+ type CategoryKey = UsedCategoryKey | "available";
7
+ type TokenBreakdown = Record<CategoryKey, number>;
8
+ interface ExtensionDetail {
9
+ label: string;
10
+ toolCount: number;
11
+ tokens: number;
12
+ }
13
+ interface SkillDetail {
14
+ label: string;
15
+ tokens: number;
16
+ promptVisible: boolean;
17
+ }
18
+ export interface MemoryBreakdown {
19
+ summary: number;
20
+ index: number;
21
+ schema: number;
22
+ recalls: number;
23
+ }
24
+ export interface ContextReport {
25
+ breakdown: TokenBreakdown;
26
+ usedTokens: number;
27
+ contextWindow: number | null;
28
+ usagePercent: number | null;
29
+ estimated: boolean;
30
+ systemToolCount: number;
31
+ extensionToolCount: number;
32
+ contextFileCount: number;
33
+ skillCount: number;
34
+ memory: MemoryBreakdown;
35
+ extensionDetails: ExtensionDetail[];
36
+ skillDetails: SkillDetail[];
37
+ modelLabel: string | null;
38
+ }
39
+ declare const contextViewExtension: FelanExtension;
40
+ export default contextViewExtension;
41
+ export declare function collectContextReport(pi: ExtensionAPI | FelanExtensionAPI, ctx: ExtensionCommandContext, promptOptions: BuildSystemPromptOptions | undefined, latestSystemPrompt: string | undefined): ContextReport;
42
+ export declare class ContextUsageOverlay implements Component {
43
+ private readonly report;
44
+ private readonly theme;
45
+ private readonly done;
46
+ constructor(report: ContextReport, theme: Theme, done: (result: void) => void);
47
+ handleInput(data: string): void;
48
+ render(width: number): string[];
49
+ invalidate(): void;
50
+ private renderDiagramWithCategoryRows;
51
+ private renderGrid;
52
+ private renderTotalLine;
53
+ private renderCountsLine;
54
+ private renderMemoryLine;
55
+ private renderCategoryRows;
56
+ private renderExtensionRows;
57
+ private renderSkillRows;
58
+ private colorCategory;
59
+ }
60
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAMtB,KAAK,KAAK,EAGV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA6D,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAOnH,OAAO,EACN,mBAAmB,EACnB,0BAA0B,EAC1B,iCAAiC,GACjC,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,KAAK,eAAe,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AACnI,KAAK,WAAW,GAAG,eAAe,GAAG,WAAW,CAAC;AAGjD,KAAK,cAAc,GAAG,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AASlD,UAAU,eAAe;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,UAAU,WAAW;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE,cAAc,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAiDD,QAAA,MAAM,oBAAoB,EAAE,cAoC3B,CAAC;AAGF,eAAe,oBAAoB,CAAC;AAMpC,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,GAAG,iBAAiB,EAAE,GAAG,EAAE,uBAAuB,EAAE,aAAa,EAAE,wBAAwB,GAAG,SAAS,EAAE,kBAAkB,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAoDnN;AAsZD,qBAAa,mBAAoB,YAAW,SAAS;IAEnD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,KAAK,IAAI;IAG9C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM/B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAoC/B,UAAU,IAAI,IAAI;IAElB,OAAO,CAAC,6BAA6B;IAgBrC,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,aAAa;CAIrB"}
package/dist/index.js ADDED
@@ -0,0 +1,663 @@
1
+ import { associateExtensionConfig, DynamicBorder, formatSkillsForPrompt, } from "@felan-ai/agent-core";
2
+ import { Container, Key, matchesKey, Spacer, Text, truncateToWidth } from "@earendil-works/pi-tui";
3
+ import { CONTEXT_VIEW_CONFIG, DEFAULT_CONTEXT_VIEW_DISPLAY_MODE, } from "./config.js";
4
+ export { CONTEXT_VIEW_CONFIG, CONTEXT_VIEW_DISPLAY_MODES, DEFAULT_CONTEXT_VIEW_DISPLAY_MODE, } from "./config.js";
5
+ const USED_CATEGORIES = ["systemPrompt", "systemTools", "extensions", "contextFiles", "skills", "memory", "messages", "other"];
6
+ const CATEGORY_DEFINITIONS = [
7
+ { key: "systemPrompt", label: "System Prompt", marker: "⛁", color: "accent" },
8
+ { key: "systemTools", label: "System Tools", marker: "⛀", color: "warning" },
9
+ { key: "extensions", label: "Extensions", marker: "⛃", color: "success" },
10
+ { key: "contextFiles", label: "Context Files", marker: "⛬", color: "customMessageText" },
11
+ { key: "skills", label: "Skills", marker: "⛧", color: "thinkingHigh" },
12
+ { key: "memory", label: "Memory", marker: "⛜", color: "customMessageText" },
13
+ { key: "messages", label: "Messages", marker: "⛝", color: "text" },
14
+ { key: "other", label: "Other", marker: "◆", color: "muted" },
15
+ { key: "available", label: "Free Space", marker: "⛶", color: "dim" },
16
+ ];
17
+ const contextViewExtension = (pi) => {
18
+ let latestPromptOptions;
19
+ let latestSystemPrompt;
20
+ const displayMode = resolveDisplayMode(pi.config.displayMode);
21
+ pi.on("before_agent_start", (event) => {
22
+ latestPromptOptions = event.systemPromptOptions;
23
+ latestSystemPrompt = event.systemPrompt;
24
+ });
25
+ pi.registerCommand("context", {
26
+ description: "Show current context window usage",
27
+ handler: async (_args, ctx) => {
28
+ const report = collectContextReport(pi, ctx, latestPromptOptions ?? ctx.getSystemPromptOptions(), latestSystemPrompt);
29
+ if (!ctx.hasUI) {
30
+ ctx.ui.notify(formatCompactReport(report), "info");
31
+ return;
32
+ }
33
+ await ctx.ui.custom((_tui, theme, _keybindings, done) => new ContextUsageOverlay(report, theme, done), displayMode === "overlay"
34
+ ? {
35
+ overlay: true,
36
+ overlayOptions: {
37
+ width: 88,
38
+ minWidth: 56,
39
+ maxHeight: "90%",
40
+ margin: 2,
41
+ },
42
+ }
43
+ : undefined);
44
+ },
45
+ });
46
+ };
47
+ associateExtensionConfig(contextViewExtension, CONTEXT_VIEW_CONFIG);
48
+ export default contextViewExtension;
49
+ function resolveDisplayMode(value) {
50
+ return value === "overlay" ? "overlay" : DEFAULT_CONTEXT_VIEW_DISPLAY_MODE;
51
+ }
52
+ export function collectContextReport(pi, ctx, promptOptions, latestSystemPrompt) {
53
+ const usage = ctx.getContextUsage();
54
+ const branch = ctx.sessionManager.getBranch();
55
+ const currentSystemPrompt = ctx.getSystemPrompt();
56
+ const systemPrompt = currentSystemPrompt.length > 0 ? currentSystemPrompt : latestSystemPrompt ?? "";
57
+ const activeToolNames = new Set(pi.getActiveTools());
58
+ const activeTools = pi.getAllTools().filter((tool) => activeToolNames.has(tool.name));
59
+ const commands = pi.getCommands();
60
+ const promptSections = estimatePromptSections(systemPrompt, promptOptions, commands);
61
+ const toolEstimates = estimateTools(activeTools);
62
+ const estimates = {
63
+ systemPrompt: promptSections.systemPrompt,
64
+ systemTools: toolEstimates.systemTools,
65
+ extensions: toolEstimates.extensions,
66
+ contextFiles: promptSections.contextFiles,
67
+ skills: promptSections.skills,
68
+ memory: 0,
69
+ messages: 0,
70
+ other: 0,
71
+ };
72
+ const memory = { summary: 0, index: 0, schema: 0, recalls: 0 };
73
+ const memoryToolCallIds = findMemoryToolCallIds(branch);
74
+ for (const entry of getContextEntries(branch)) {
75
+ addEntryEstimate(entry, estimates, memory, memoryToolCallIds);
76
+ }
77
+ const usedBreakdown = roundEstimates(estimates);
78
+ const usedTokens = sumUsed(usedBreakdown);
79
+ const contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? null;
80
+ const available = contextWindow === null ? 0 : Math.max(0, contextWindow - usedTokens);
81
+ const usagePercent = contextWindow && contextWindow > 0 ? (usedTokens / contextWindow) * 100 : null;
82
+ return {
83
+ breakdown: {
84
+ ...usedBreakdown,
85
+ available,
86
+ },
87
+ usedTokens,
88
+ contextWindow,
89
+ usagePercent,
90
+ estimated: true,
91
+ systemToolCount: toolEstimates.systemToolCount,
92
+ extensionToolCount: toolEstimates.extensionToolCount,
93
+ contextFileCount: promptSections.contextFileCount,
94
+ skillCount: promptSections.skillCount,
95
+ memory,
96
+ extensionDetails: toolEstimates.extensionDetails,
97
+ skillDetails: promptSections.skillDetails,
98
+ modelLabel: formatModelLabel(ctx),
99
+ };
100
+ }
101
+ function estimatePromptSections(systemPrompt, promptOptions, commands) {
102
+ const totalSystemPrompt = estimateTokens(systemPrompt);
103
+ const contextFileSection = extractProjectContextSection(systemPrompt);
104
+ const skillSection = extractDelimitedSection(systemPrompt, "<available_skills>", "</available_skills>");
105
+ const contextFileTokens = estimateTokens(contextFileSection);
106
+ const skillTokens = estimateTokens(skillSection);
107
+ const skillCommands = commands.filter((command) => command.source === "skill");
108
+ return {
109
+ systemPrompt: Math.max(0, totalSystemPrompt - contextFileTokens - skillTokens),
110
+ contextFiles: contextFileTokens,
111
+ skills: skillTokens,
112
+ contextFileCount: promptOptions?.contextFiles?.length ?? countContextFileHeadings(contextFileSection),
113
+ skillCount: promptOptions?.skills?.length ?? skillCommands.length,
114
+ skillDetails: promptOptions?.skills ? promptOptions.skills.map((skill) => estimateSkillDetail(skill, skillSection.length > 0)) : estimateSkillCommandDetails(skillCommands, skillSection.length > 0),
115
+ };
116
+ }
117
+ function estimateSkillCommandDetails(commands, promptVisible) {
118
+ return commands.map((command) => ({
119
+ label: command.name.startsWith("skill:") ? command.name.slice("skill:".length) : command.name,
120
+ tokens: promptVisible ? estimateTokens(`${command.name}\n${command.description ?? ""}`) : 0,
121
+ promptVisible,
122
+ }));
123
+ }
124
+ function estimateSkillDetail(skill, hasSkillSection) {
125
+ const promptVisible = hasSkillSection && !skill.disableModelInvocation;
126
+ return {
127
+ label: skill.name,
128
+ tokens: promptVisible ? estimateTokens(formatSkillsForPrompt([skill])) : 0,
129
+ promptVisible,
130
+ };
131
+ }
132
+ function estimateTools(activeTools) {
133
+ let systemTools = 0;
134
+ let extensions = 0;
135
+ let systemToolCount = 0;
136
+ let extensionToolCount = 0;
137
+ const extensionDetails = new Map();
138
+ for (const tool of activeTools) {
139
+ const tokens = estimateToolDefinition(tool);
140
+ if (isBuiltinTool(tool)) {
141
+ systemTools += tokens;
142
+ systemToolCount++;
143
+ continue;
144
+ }
145
+ extensions += tokens;
146
+ extensionToolCount++;
147
+ const label = sourceLabel(tool.sourceInfo);
148
+ const detail = extensionDetails.get(label) ?? { label, toolCount: 0, tokens: 0 };
149
+ detail.toolCount++;
150
+ detail.tokens += tokens;
151
+ extensionDetails.set(label, detail);
152
+ }
153
+ return {
154
+ systemTools,
155
+ extensions,
156
+ systemToolCount,
157
+ extensionToolCount,
158
+ extensionDetails: Array.from(extensionDetails.values()).sort((left, right) => right.tokens - left.tokens || left.label.localeCompare(right.label)),
159
+ };
160
+ }
161
+ function estimateToolDefinition(tool) {
162
+ return estimateTokens(safeStringify({
163
+ name: tool.name,
164
+ description: tool.description,
165
+ parameters: tool.parameters,
166
+ }));
167
+ }
168
+ function isBuiltinTool(tool) {
169
+ return tool.sourceInfo.source === "builtin"
170
+ || tool.sourceInfo.path.startsWith("<builtin:")
171
+ || tool.sourceInfo.path === "<inline:@felan-ai/agent-core/runtime-tools>";
172
+ }
173
+ function sourceLabel(sourceInfo) {
174
+ if (sourceInfo.source === "builtin")
175
+ return "Built-in";
176
+ if (sourceInfo.source === "sdk")
177
+ return "SDK";
178
+ if (sourceInfo.path.startsWith("<inline:") && sourceInfo.path.endsWith(">")) {
179
+ return sourceInfo.path.slice("<inline:".length, -1);
180
+ }
181
+ if (sourceInfo.source && sourceInfo.source !== "local")
182
+ return compactSource(sourceInfo.source);
183
+ const normalized = (sourceInfo.baseDir ?? sourceInfo.path).replace(/\\/g, "/");
184
+ const packagesMatch = normalized.match(/(?:^|\/)packages\/([^/]+)/);
185
+ if (packagesMatch?.[1])
186
+ return packagesMatch[1];
187
+ const extensionsMatch = normalized.match(/(?:^|\/)extensions\/([^/]+)/);
188
+ if (extensionsMatch?.[1])
189
+ return stripScriptExtension(extensionsMatch[1]);
190
+ const withoutEntry = normalized.replace(/\/src\/index\.[cm]?[tj]s$/, "").replace(/\/index\.[cm]?[tj]s$/, "").replace(/\.[cm]?[tj]s$/, "");
191
+ return basename(withoutEntry) || compactSource(sourceInfo.path);
192
+ }
193
+ function compactSource(source) {
194
+ const normalized = source.replace(/\\/g, "/");
195
+ if (normalized.startsWith("<inline:") && normalized.endsWith(">"))
196
+ return normalized.slice("<inline:".length, -1);
197
+ if (normalized.startsWith("<") && normalized.endsWith(">"))
198
+ return normalized.slice(1, -1);
199
+ return stripScriptExtension(basename(normalized)) || source;
200
+ }
201
+ function basename(path) {
202
+ return path.split("/").filter(Boolean).at(-1) ?? path;
203
+ }
204
+ function stripScriptExtension(path) {
205
+ return path.replace(/\.[cm]?[tj]s$/, "");
206
+ }
207
+ function getContextEntries(branch) {
208
+ const compactionIndex = findLastIndex(branch, (entry) => entry.type === "compaction");
209
+ if (compactionIndex === -1)
210
+ return branch.filter(isContextEntry);
211
+ const compaction = branch[compactionIndex];
212
+ if (!compaction || compaction.type !== "compaction")
213
+ return branch.filter(isContextEntry);
214
+ const entries = [compaction];
215
+ let foundFirstKept = false;
216
+ for (let index = 0; index < compactionIndex; index++) {
217
+ const entry = branch[index];
218
+ if (!entry)
219
+ continue;
220
+ if (entry.id === compaction.firstKeptEntryId)
221
+ foundFirstKept = true;
222
+ if (foundFirstKept && isContextEntry(entry))
223
+ entries.push(entry);
224
+ }
225
+ for (let index = compactionIndex + 1; index < branch.length; index++) {
226
+ const entry = branch[index];
227
+ if (entry && isContextEntry(entry))
228
+ entries.push(entry);
229
+ }
230
+ return entries;
231
+ }
232
+ function isContextEntry(entry) {
233
+ return entry.type === "message" || entry.type === "branch_summary" || entry.type === "compaction" || entry.type === "custom_message";
234
+ }
235
+ function addEntryEstimate(entry, estimates, memory, memoryToolCallIds) {
236
+ switch (entry.type) {
237
+ case "message":
238
+ addMessageEstimate(entry.message, estimates, memory, memoryToolCallIds);
239
+ return;
240
+ case "custom_message":
241
+ if (entry.customType === "felan-memory-context") {
242
+ addInitialMemoryEstimate(entry.content, estimates, memory);
243
+ return;
244
+ }
245
+ estimates.messages += estimateTextContent(entry.content);
246
+ return;
247
+ case "branch_summary":
248
+ estimates.other += estimateTokens(entry.summary);
249
+ return;
250
+ case "compaction":
251
+ estimates.other += estimateTokens(entry.summary);
252
+ return;
253
+ }
254
+ }
255
+ function addMessageEstimate(message, estimates, memory, memoryToolCallIds) {
256
+ switch (message.role) {
257
+ case "user":
258
+ estimates.messages += estimateTextContent(message.content);
259
+ return;
260
+ case "assistant":
261
+ for (const part of message.content) {
262
+ if (isTextPart(part)) {
263
+ estimates.messages += estimateTokens(part.text);
264
+ }
265
+ else if (isThinkingPart(part)) {
266
+ estimates.messages += estimateTokens(part.thinking);
267
+ }
268
+ else if (isToolCallPart(part)) {
269
+ const tokens = estimateTokens(safeStringify({ name: part.name, arguments: part.arguments }));
270
+ if (memoryToolCallIds.has(part.id)) {
271
+ estimates.memory += tokens;
272
+ memory.recalls += tokens;
273
+ }
274
+ else {
275
+ estimates.messages += tokens;
276
+ }
277
+ }
278
+ else {
279
+ estimates.other += estimateTokens(safeStringify(part));
280
+ }
281
+ }
282
+ return;
283
+ case "toolResult":
284
+ const tokens = estimateTextContent(message.content);
285
+ if (memoryToolCallIds.has(message.toolCallId)) {
286
+ estimates.memory += tokens;
287
+ memory.recalls += tokens;
288
+ }
289
+ else {
290
+ estimates.messages += tokens;
291
+ }
292
+ return;
293
+ case "bashExecution":
294
+ if (!message.excludeFromContext) {
295
+ estimates.messages += estimateTokens(`${message.command}\n${message.output}`);
296
+ }
297
+ return;
298
+ case "custom":
299
+ estimates.messages += estimateTextContent(message.content);
300
+ return;
301
+ case "branchSummary":
302
+ estimates.other += estimateTokens(message.summary);
303
+ return;
304
+ case "compactionSummary":
305
+ estimates.other += estimateTokens(message.summary);
306
+ return;
307
+ default:
308
+ estimates.other += estimateTokens(safeStringify(message));
309
+ }
310
+ }
311
+ function estimateTextContent(content) {
312
+ if (typeof content === "string")
313
+ return estimateTokens(content);
314
+ if (!Array.isArray(content))
315
+ return 0;
316
+ let tokens = 0;
317
+ for (const part of content) {
318
+ if (isTextPart(part))
319
+ tokens += estimateTokens(part.text);
320
+ }
321
+ return tokens;
322
+ }
323
+ function estimateTokens(text) {
324
+ return text.length === 0 ? 0 : Math.ceil(text.length / 4);
325
+ }
326
+ function roundEstimates(estimates) {
327
+ return {
328
+ systemPrompt: Math.max(0, Math.round(estimates.systemPrompt)),
329
+ systemTools: Math.max(0, Math.round(estimates.systemTools)),
330
+ extensions: Math.max(0, Math.round(estimates.extensions)),
331
+ contextFiles: Math.max(0, Math.round(estimates.contextFiles)),
332
+ skills: Math.max(0, Math.round(estimates.skills)),
333
+ memory: Math.max(0, Math.round(estimates.memory)),
334
+ messages: Math.max(0, Math.round(estimates.messages)),
335
+ other: Math.max(0, Math.round(estimates.other)),
336
+ };
337
+ }
338
+ function sumUsed(breakdown) {
339
+ return USED_CATEGORIES.reduce((total, key) => total + breakdown[key], 0);
340
+ }
341
+ function isTextPart(value) {
342
+ return isRecord(value) && value.type === "text" && typeof value.text === "string";
343
+ }
344
+ function isThinkingPart(value) {
345
+ return isRecord(value) && value.type === "thinking" && typeof value.thinking === "string";
346
+ }
347
+ function isToolCallPart(value) {
348
+ return isRecord(value) && value.type === "toolCall" && typeof value.id === "string" && typeof value.name === "string" && "arguments" in value;
349
+ }
350
+ function isRecord(value) {
351
+ return typeof value === "object" && value !== null;
352
+ }
353
+ function safeStringify(value) {
354
+ const seen = new WeakSet();
355
+ try {
356
+ return (JSON.stringify(value, (_key, innerValue) => {
357
+ if (typeof innerValue === "function")
358
+ return "[Function]";
359
+ if (typeof innerValue === "object" && innerValue !== null) {
360
+ if (seen.has(innerValue))
361
+ return "[Circular]";
362
+ seen.add(innerValue);
363
+ }
364
+ return innerValue;
365
+ }, 2) ?? "");
366
+ }
367
+ catch {
368
+ return String(value);
369
+ }
370
+ }
371
+ function findLastIndex(items, predicate) {
372
+ for (let index = items.length - 1; index >= 0; index--) {
373
+ if (predicate(items[index]))
374
+ return index;
375
+ }
376
+ return -1;
377
+ }
378
+ function addInitialMemoryEstimate(content, estimates, memory) {
379
+ const text = typeof content === "string" ? content : estimateTextContent(content) > 0 ? contentText(content) : "";
380
+ if (typeof text !== "string")
381
+ return;
382
+ const summary = sectionBetween(text, "Summary:\n", "\n\nIndex:\n");
383
+ const index = sectionBetween(text, "Index:\n", "\n\nSchema:\n");
384
+ const schema = text.includes("Schema:\n") ? text.slice(text.indexOf("Schema:\n") + "Schema:\n".length) : "";
385
+ for (const [key, value] of [["summary", summary], ["index", index], ["schema", schema]]) {
386
+ const tokens = estimateTokens(value);
387
+ estimates.memory += tokens;
388
+ memory[key] += tokens;
389
+ }
390
+ }
391
+ function contentText(content) {
392
+ if (!Array.isArray(content))
393
+ return "";
394
+ return content.filter(isTextPart).map((part) => part.text).join("\n");
395
+ }
396
+ function sectionBetween(text, startMarker, endMarker) {
397
+ const start = text.indexOf(startMarker);
398
+ if (start === -1)
399
+ return "";
400
+ const contentStart = start + startMarker.length;
401
+ const end = text.indexOf(endMarker, contentStart);
402
+ return text.slice(contentStart, end === -1 ? undefined : end);
403
+ }
404
+ function findMemoryToolCallIds(entries) {
405
+ const ids = new Set();
406
+ for (const entry of entries) {
407
+ if (entry.type !== "message" || entry.message.role !== "assistant")
408
+ continue;
409
+ for (const part of entry.message.content) {
410
+ if (isToolCallPart(part) && isMemoryToolCall(part.name, part.arguments))
411
+ ids.add(part.id);
412
+ }
413
+ }
414
+ return ids;
415
+ }
416
+ function isMemoryToolCall(name, arguments_) {
417
+ const normalized = name.toLowerCase();
418
+ const args = isRecord(arguments_) ? arguments_ : {};
419
+ if (["read", "read_file", "grep", "find", "ls"].includes(normalized)) {
420
+ return isMemoryPath(typeof args.path === "string" ? args.path : typeof args.file_path === "string" ? args.file_path : undefined);
421
+ }
422
+ if (normalized !== "bash" && !normalized.includes("exec_command"))
423
+ return false;
424
+ const command = typeof args.cmd === "string" ? args.cmd : typeof args.command === "string" ? args.command : undefined;
425
+ return command !== undefined && isMemoryPath(command) && isReadOnlyMemoryCommand(command);
426
+ }
427
+ function isMemoryPath(value) {
428
+ if (!value)
429
+ return false;
430
+ const normalized = value.startsWith("@") ? value.slice(1) : value;
431
+ return /(?:^|[\\/\s"'=])\.memory(?:[\\/]|$)/u.test(normalized)
432
+ || /(?:^|[\\/])memory[\\/]v1[\\/]projects[\\/][a-f0-9]{64}[\\/]current(?:[\\/]|$)/iu.test(normalized);
433
+ }
434
+ function isReadOnlyMemoryCommand(command) {
435
+ if (/`|\$\(|\$\{|\$[A-Za-z_]|[<>]\(/u.test(command))
436
+ return false;
437
+ const names = command.split(/[;&|\n]+/u).flatMap((segment) => segment.trim().split(/\s+/u).slice(0, 1)).filter(Boolean);
438
+ const allowed = new Set(["cat", "find", "grep", "head", "ls", "rg", "sed", "stat", "tail", "wc", "cd", "echo", "printf", "pwd", "test", "true", "false"]);
439
+ return names.length > 0 && names.every((name) => allowed.has(name.toLowerCase())) && names.some((name) => ["cat", "find", "grep", "head", "ls", "rg", "sed", "stat", "tail", "wc"].includes(name.toLowerCase()));
440
+ }
441
+ function extractProjectContextSection(systemPrompt) {
442
+ const xmlStart = systemPrompt.indexOf("<project_context>");
443
+ if (xmlStart >= 0) {
444
+ const xmlEnd = systemPrompt.indexOf("</project_context>", xmlStart);
445
+ return systemPrompt.slice(xmlStart, xmlEnd >= 0 ? xmlEnd + "</project_context>".length : undefined);
446
+ }
447
+ const start = systemPrompt.indexOf("# Project Context");
448
+ if (start === -1)
449
+ return "";
450
+ const endCandidates = [systemPrompt.indexOf("\n<available_skills>", start), systemPrompt.indexOf("\nCurrent date:", start)].filter((index) => index >= 0);
451
+ const end = endCandidates.length > 0 ? Math.min(...endCandidates) : systemPrompt.length;
452
+ return systemPrompt.slice(start, end);
453
+ }
454
+ function extractDelimitedSection(text, startMarker, endMarker) {
455
+ const start = text.indexOf(startMarker);
456
+ if (start === -1)
457
+ return "";
458
+ const end = text.indexOf(endMarker, start + startMarker.length);
459
+ return end === -1 ? text.slice(start) : text.slice(start, end + endMarker.length);
460
+ }
461
+ function countContextFileHeadings(section) {
462
+ if (!section)
463
+ return 0;
464
+ const headings = section.split("\n").filter((line) => line.startsWith("## ")).length;
465
+ const xmlFiles = [...section.matchAll(/<project_instructions\b/g)].length;
466
+ return Math.max(headings, xmlFiles);
467
+ }
468
+ function formatCompactReport(report) {
469
+ const denominator = report.contextWindow ?? report.usedTokens;
470
+ const suffix = report.estimated ? " estimated" : "";
471
+ const total = report.contextWindow === null ? formatTokens(report.usedTokens) : `${formatTokens(report.usedTokens)} / ${formatTokens(report.contextWindow)}`;
472
+ const rows = CATEGORY_DEFINITIONS.map((definition) => {
473
+ const tokens = report.breakdown[definition.key];
474
+ const percent = denominator > 0 ? (tokens / denominator) * 100 : null;
475
+ return `${definition.label}: ${formatTokens(tokens)} (${formatPercent(percent)})`;
476
+ });
477
+ const memory = [`Memory: summary ${formatTokens(report.memory.summary)}, index ${formatTokens(report.memory.index)}, schema ${formatTokens(report.memory.schema)}, recalls ${formatTokens(report.memory.recalls)}`];
478
+ const extensions = report.extensionDetails.length > 0 ? ["Extensions:", ...report.extensionDetails.map((detail) => ` ${detail.label}: ${detail.toolCount} tool${detail.toolCount === 1 ? "" : "s"}, ${formatTokens(detail.tokens)} context`)] : [];
479
+ const skills = report.skillDetails.length > 0 ? ["Skills:", ...report.skillDetails.map((detail) => ` ${detail.label}: ${detail.promptVisible ? formatTokens(detail.tokens) : "not in prompt"}`)] : [];
480
+ return [`Context Usage: ${total} (${formatPercent(report.usagePercent)})${suffix}`, ...rows, ...memory, ...extensions, ...skills].join("\n");
481
+ }
482
+ export class ContextUsageOverlay {
483
+ report;
484
+ theme;
485
+ done;
486
+ constructor(report, theme, done) {
487
+ this.report = report;
488
+ this.theme = theme;
489
+ this.done = done;
490
+ }
491
+ handleInput(data) {
492
+ if (matchesKey(data, Key.escape) || matchesKey(data, Key.enter) || data === "q" || data === "Q") {
493
+ this.done(undefined);
494
+ }
495
+ }
496
+ render(width) {
497
+ const renderWidth = Math.max(1, width);
498
+ const borderColor = (text) => this.theme.fg("border", text);
499
+ const container = new Container();
500
+ container.addChild(new DynamicBorder(borderColor));
501
+ container.addChild(new Text(this.theme.fg("accent", this.theme.bold("Context Usage")), 1, 0));
502
+ if (this.report.modelLabel) {
503
+ container.addChild(new Text(this.theme.fg("dim", this.report.modelLabel), 1, 0));
504
+ }
505
+ container.addChild(new Spacer(1));
506
+ for (const line of this.renderDiagramWithCategoryRows()) {
507
+ container.addChild(new Text(line, 1, 0));
508
+ }
509
+ container.addChild(new Spacer(1));
510
+ container.addChild(new Text(this.renderTotalLine(), 1, 0));
511
+ container.addChild(new Text(this.renderCountsLine(), 1, 0));
512
+ container.addChild(new Text(this.renderMemoryLine(), 1, 0));
513
+ for (const line of this.renderExtensionRows()) {
514
+ container.addChild(new Text(line, 1, 0));
515
+ }
516
+ for (const line of this.renderSkillRows()) {
517
+ container.addChild(new Text(line, 1, 0));
518
+ }
519
+ container.addChild(new Spacer(1));
520
+ container.addChild(new Text(this.theme.fg("dim", "Esc, Enter, or q to close"), 1, 0));
521
+ container.addChild(new DynamicBorder(borderColor));
522
+ return container.render(renderWidth).map((line) => truncateToWidth(line, renderWidth, ""));
523
+ }
524
+ invalidate() { }
525
+ renderDiagramWithCategoryRows() {
526
+ const grid = this.renderGrid();
527
+ const categories = [this.theme.fg("dim", "Estimated usage by category"), ...this.renderCategoryRows()];
528
+ const rows = [];
529
+ const rowCount = Math.max(grid.length, categories.length);
530
+ const blankGrid = " ".repeat(19);
531
+ for (let index = 0; index < rowCount; index++) {
532
+ const left = grid[index] ?? blankGrid;
533
+ const right = categories[index] ?? "";
534
+ rows.push(right ? `${left} ${right}` : left);
535
+ }
536
+ return rows;
537
+ }
538
+ renderGrid() {
539
+ const cells = allocateGridCells(this.report);
540
+ const lines = [];
541
+ for (let row = 0; row < 5; row++) {
542
+ const start = row * 10;
543
+ const content = cells
544
+ .slice(start, start + 10)
545
+ .map((key) => this.colorCategory(key, CATEGORY_DEFINITIONS.find((definition) => definition.key === key).marker))
546
+ .join(" ");
547
+ lines.push(content);
548
+ }
549
+ return lines;
550
+ }
551
+ renderTotalLine() {
552
+ const estimated = this.report.estimated ? " estimated" : "";
553
+ const total = this.report.contextWindow === null ? formatTokens(this.report.usedTokens) : `${formatTokens(this.report.usedTokens)} / ${formatTokens(this.report.contextWindow)}`;
554
+ return `${this.theme.fg("accent", "Used")}: ${total} (${formatPercent(this.report.usagePercent)})${estimated}`;
555
+ }
556
+ renderCountsLine() {
557
+ return this.theme.fg("dim", `${this.report.systemToolCount} system tool${this.report.systemToolCount === 1 ? "" : "s"} · ${this.report.extensionToolCount} extension tool${this.report.extensionToolCount === 1 ? "" : "s"} · ${this.report.contextFileCount} context file${this.report.contextFileCount === 1 ? "" : "s"} · ${this.report.skillCount} skill${this.report.skillCount === 1 ? "" : "s"}`);
558
+ }
559
+ renderMemoryLine() {
560
+ return this.theme.fg("dim", `Memory: summary ${formatTokens(this.report.memory.summary)} · index ${formatTokens(this.report.memory.index)} · schema ${formatTokens(this.report.memory.schema)} · recalls ${formatTokens(this.report.memory.recalls)}`);
561
+ }
562
+ renderCategoryRows() {
563
+ const denominator = this.report.contextWindow ?? this.report.usedTokens;
564
+ return CATEGORY_DEFINITIONS.map((definition) => {
565
+ const tokens = this.report.breakdown[definition.key];
566
+ const percent = denominator > 0 ? (tokens / denominator) * 100 : null;
567
+ const marker = this.colorCategory(definition.key, definition.marker);
568
+ return `${marker} ${definition.label.padEnd(14)} ${formatTokens(tokens).padStart(8)} ${formatPercent(percent).padStart(7)}`;
569
+ });
570
+ }
571
+ renderExtensionRows() {
572
+ if (this.report.extensionDetails.length === 0)
573
+ return [];
574
+ const rows = ["", this.theme.fg("dim", "Extensions")];
575
+ const visible = this.report.extensionDetails.slice(0, 8);
576
+ for (const detail of visible) {
577
+ rows.push(` ${truncatePlain(detail.label, 28).padEnd(28)} ${this.theme.fg("dim", `${detail.toolCount} tool${detail.toolCount === 1 ? "" : "s"} · ${formatTokens(detail.tokens)} context`)}`);
578
+ }
579
+ if (this.report.extensionDetails.length > visible.length) {
580
+ rows.push(this.theme.fg("dim", ` +${this.report.extensionDetails.length - visible.length} more`));
581
+ }
582
+ return rows;
583
+ }
584
+ renderSkillRows() {
585
+ if (this.report.skillDetails.length === 0)
586
+ return [];
587
+ const rows = ["", this.theme.fg("dim", "Skills")];
588
+ const visible = this.report.skillDetails.slice(0, 8);
589
+ for (const detail of visible) {
590
+ const tokens = detail.promptVisible ? `${formatTokens(detail.tokens)} context` : "not in prompt";
591
+ rows.push(` ${truncatePlain(detail.label, 28).padEnd(28)} ${this.theme.fg("dim", tokens)}`);
592
+ }
593
+ if (this.report.skillDetails.length > visible.length) {
594
+ rows.push(this.theme.fg("dim", ` +${this.report.skillDetails.length - visible.length} more`));
595
+ }
596
+ return rows;
597
+ }
598
+ colorCategory(key, text) {
599
+ const definition = CATEGORY_DEFINITIONS.find((item) => item.key === key);
600
+ return this.theme.fg(definition.color, text);
601
+ }
602
+ }
603
+ function allocateGridCells(report) {
604
+ const total = report.contextWindow && report.contextWindow > 0 ? report.contextWindow : report.usedTokens;
605
+ if (total <= 0)
606
+ return Array(50).fill("available");
607
+ const categories = CATEGORY_DEFINITIONS.map((definition) => ({
608
+ key: definition.key,
609
+ tokens: report.contextWindow && report.contextWindow > 0 ? report.breakdown[definition.key] : definition.key === "available" ? 0 : report.breakdown[definition.key],
610
+ }));
611
+ const exact = categories.map((item) => ({ ...item, cells: (item.tokens / total) * 50 }));
612
+ const counts = new Map();
613
+ let assigned = 0;
614
+ for (const item of exact) {
615
+ const whole = Math.floor(item.cells);
616
+ counts.set(item.key, whole);
617
+ assigned += whole;
618
+ }
619
+ const byRemainder = [...exact].sort((left, right) => right.cells % 1 - (left.cells % 1));
620
+ for (let remaining = 50 - assigned, index = 0; remaining > 0; remaining--, index++) {
621
+ const key = byRemainder[index % byRemainder.length].key;
622
+ counts.set(key, (counts.get(key) ?? 0) + 1);
623
+ }
624
+ const cells = [];
625
+ for (const definition of CATEGORY_DEFINITIONS) {
626
+ cells.push(...Array(counts.get(definition.key) ?? 0).fill(definition.key));
627
+ }
628
+ const visibleCells = cells.slice(0, 50);
629
+ if (report.usedTokens > 0 && !visibleCells.some((key) => key !== "available")) {
630
+ const largestUsed = [...USED_CATEGORIES].sort((left, right) => report.breakdown[right] - report.breakdown[left]).find((key) => report.breakdown[key] > 0);
631
+ if (largestUsed)
632
+ visibleCells[0] = largestUsed;
633
+ }
634
+ return visibleCells;
635
+ }
636
+ function formatModelLabel(ctx) {
637
+ if (!ctx.model)
638
+ return null;
639
+ const name = ctx.model.name || ctx.model.id;
640
+ const context = ctx.model.contextWindow ? `${formatTokens(ctx.model.contextWindow)} context` : "unknown context";
641
+ return `${name} (${context})`;
642
+ }
643
+ function formatTokens(tokens) {
644
+ if (tokens >= 1_000_000)
645
+ return `${trimFixed(tokens / 1_000_000)}M`;
646
+ if (tokens >= 1_000)
647
+ return `${trimFixed(tokens / 1_000)}k`;
648
+ return Math.round(tokens).toString();
649
+ }
650
+ function trimFixed(value) {
651
+ return value.toFixed(1).replace(/\.0$/, "");
652
+ }
653
+ function formatPercent(percent) {
654
+ if (percent === null || !Number.isFinite(percent))
655
+ return "n/a";
656
+ if (percent > 0 && percent < 0.1)
657
+ return "<0.1%";
658
+ return `${percent.toFixed(percent < 10 ? 1 : 0)}%`;
659
+ }
660
+ function truncatePlain(text, maxLength) {
661
+ return text.length > maxLength ? `${text.slice(0, Math.max(0, maxLength - 1))}…` : text;
662
+ }
663
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@felan-ai/ext-context-view",
3
+ "version": "0.0.0",
4
+ "description": "Local TUI context-window usage inspector for Felan",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/felan-ai/felan.git",
10
+ "directory": "packages/ext-context-view"
11
+ },
12
+ "engines": {
13
+ "node": ">=22.19.0"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "LICENSE",
18
+ "NOTICE",
19
+ "README.md"
20
+ ],
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ }
26
+ },
27
+ "dependencies": {
28
+ "@earendil-works/pi-tui": "0.84.3"
29
+ },
30
+ "peerDependencies": {
31
+ "@felan-ai/agent-core": "^0.5.5"
32
+ },
33
+ "devDependencies": {
34
+ "@felan-ai/agent-core": "0.5.5"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public",
38
+ "provenance": true
39
+ },
40
+ "scripts": {
41
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
42
+ "type-check": "tsc -p tsconfig.json --noEmit",
43
+ "test": "vitest run"
44
+ }
45
+ }