@felan-ai/felan 0.10.0 → 0.11.1
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 +33 -7
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +2 -1
- package/dist/application.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +20 -3
- package/dist/runtime.js.map +1 -1
- package/dist/settings.d.ts +6 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +17 -0
- package/dist/settings.js.map +1 -1
- package/dist/tool-activity/extension.d.ts +6 -0
- package/dist/tool-activity/extension.d.ts.map +1 -0
- package/dist/tool-activity/extension.js +55 -0
- package/dist/tool-activity/extension.js.map +1 -0
- package/dist/tool-activity/inspector.d.ts +18 -0
- package/dist/tool-activity/inspector.d.ts.map +1 -0
- package/dist/tool-activity/inspector.js +269 -0
- package/dist/tool-activity/inspector.js.map +1 -0
- package/dist/tool-activity/presentation.d.ts +7 -0
- package/dist/tool-activity/presentation.d.ts.map +1 -0
- package/dist/tool-activity/presentation.js +289 -0
- package/dist/tool-activity/presentation.js.map +1 -0
- package/dist/tool-activity/runtime-view.d.ts +5 -0
- package/dist/tool-activity/runtime-view.d.ts.map +1 -0
- package/dist/tool-activity/runtime-view.js +72 -0
- package/dist/tool-activity/runtime-view.js.map +1 -0
- package/dist/tool-activity/state.d.ts +60 -0
- package/dist/tool-activity/state.d.ts.map +1 -0
- package/dist/tool-activity/state.js +456 -0
- package/dist/tool-activity/state.js.map +1 -0
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -35,8 +35,10 @@ other host paths directly.
|
|
|
35
35
|
|
|
36
36
|
Only source-controlled built-in Felan extensions can be imported. External
|
|
37
37
|
packages, extensions, configured skill paths, prompts, themes, and Pi context
|
|
38
|
-
files remain filtered. Agent
|
|
39
|
-
|
|
38
|
+
files remain filtered. Agent Core separately loads one instruction file from
|
|
39
|
+
the session cwd, preferring `AGENTS.md` over `CLAUDE.md`. Agent Skills are
|
|
40
|
+
loaded from `~/.agents/skills` and `<workspace>/.agents/skills` and are shared
|
|
41
|
+
with local subagents.
|
|
40
42
|
The built-in powerline reads `~/.felan/powerline.json` (or
|
|
41
43
|
`$FELAN_AGENT_DIR/powerline.json`) once when it initializes. Its subscription
|
|
42
44
|
segment obtains the active Codex or Claude OAuth token through Felan's
|
|
@@ -63,6 +65,21 @@ All built-in extensions are enabled by default. Toggle them in
|
|
|
63
65
|
}
|
|
64
66
|
```
|
|
65
67
|
|
|
68
|
+
The local transcript groups adjacent tool calls by default. Press `Ctrl+O` to
|
|
69
|
+
switch between group summaries and bounded per-call previews. Use `/tools` or
|
|
70
|
+
`Alt+T` to inspect the complete arguments and result for one call. To restore
|
|
71
|
+
Pi's original ungrouped rendering, set:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"felanTui": {
|
|
76
|
+
"toolDisplay": "full"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Supported values are `grouped` and `full`; `grouped` is the default.
|
|
82
|
+
|
|
66
83
|
`askUser` provides the sequential `ask_user` tool. The local host presents
|
|
67
84
|
single questions or 1-4 question wizards as searchable overlays or inline
|
|
68
85
|
dialogs, with multi-select, freeform answers, and optional comments.
|
|
@@ -150,13 +167,22 @@ The TUI reads one optional `$FELAN_AGENT_DIR/APPEND_SYSTEM.md` file when each
|
|
|
150
167
|
session is constructed (`~/.felan/APPEND_SYSTEM.md` by default). Missing and
|
|
151
168
|
blank files add nothing; other read failures stop session construction with the
|
|
152
169
|
filesystem error. The file extends Agent Core's Felan prompt after enabled
|
|
153
|
-
extension capabilities.
|
|
154
|
-
|
|
170
|
+
extension capabilities.
|
|
171
|
+
|
|
172
|
+
Agent Core also reads at most one instruction file from each session's cwd
|
|
173
|
+
through the active `AgentRuntime`, with `AGENTS.md` taking precedence over
|
|
174
|
+
`CLAUDE.md`. Missing, unreadable, and blank instruction files are nonfatal.
|
|
175
|
+
Child persona instructions follow the application append, root project
|
|
176
|
+
instructions follow those consumer appends using Pi's path-labeled context-file
|
|
177
|
+
format, and explicit Agent Skills and the current working directory are added
|
|
178
|
+
last. The progressive-context extension remains responsible only for instruction
|
|
179
|
+
files below the session cwd.
|
|
155
180
|
|
|
156
181
|
System prompt inputs are limited to Agent Core, enabled capabilities, the
|
|
157
|
-
single application append above,
|
|
158
|
-
directory. Pi `SYSTEM.md`, project
|
|
159
|
-
prompt/context files stay outside
|
|
182
|
+
single application append above, the selected cwd instruction file, explicit
|
|
183
|
+
Agent Skills, and the current working directory. Pi `SYSTEM.md`, project
|
|
184
|
+
`APPEND_SYSTEM.md`, and other Pi-discovered prompt/context files stay outside
|
|
185
|
+
local composition.
|
|
160
186
|
|
|
161
187
|
When enabled, `@felan-ai/ext-subagents` uses the session-bound local host and
|
|
162
188
|
provides `Agent`, `list_subagents`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,oBAAqB,SAAQ,8BAA8B;IAC1E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCrF"}
|
package/dist/application.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { InteractiveMode } from '@earendil-works/pi-coding-agent';
|
|
2
2
|
import { createLocalFelanRuntime, } from './runtime.js';
|
|
3
|
+
import { createToolActivityRuntimeView } from './tool-activity/runtime-view.js';
|
|
3
4
|
export async function runLocalFelan(options = {}) {
|
|
4
5
|
const runtime = await createLocalFelanRuntime(options);
|
|
5
6
|
const previousPiAgentDir = process.env.PI_CODING_AGENT_DIR;
|
|
@@ -9,7 +10,7 @@ export async function runLocalFelan(options = {}) {
|
|
|
9
10
|
process.env.PI_SKIP_VERSION_CHECK = '1';
|
|
10
11
|
process.env.PI_TELEMETRY = '0';
|
|
11
12
|
try {
|
|
12
|
-
const mode = new InteractiveMode(runtime, {
|
|
13
|
+
const mode = new InteractiveMode(createToolActivityRuntimeView(runtime), {
|
|
13
14
|
...(options.initialMessage === undefined ? {} : { initialMessage: options.initialMessage }),
|
|
14
15
|
...(options.verbose === undefined ? {} : { verbose: options.verbose }),
|
|
15
16
|
});
|
package/dist/application.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EACL,uBAAuB,GAExB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EACL,uBAAuB,GAExB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAOhF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAgC,EAAE;IACpE,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC3D,MAAM,0BAA0B,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACrE,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,GAAG,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,6BAA6B,CAAC,OAAO,CAAC,EAAE;YACvE,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3F,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;SACvE,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;YACvD,CAAC;YACD,IAAI,0BAA0B,KAAK,SAAS,EAAE,CAAC;gBAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,0BAA0B,CAAC;YACjE,CAAC;YACD,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;gBACtC,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,mBAAmB,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,YAAY,EACZ,cAAc,EAId,KAAK,gCAAgC,EACrC,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,YAAY,EACZ,cAAc,EAId,KAAK,gCAAgC,EACrC,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAC;AAazC,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAkB7B,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG;IACpD,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC9C,0BAA0B,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACrF,CAAC;AAEF,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,eAAe,CAAC,EAAE,wBAAwB,CAAC;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,wBAAwB,CAAC;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CACnD;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,wBAAwB,CAAC;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CACnD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAkB,GAAG,SAAS,MAAM,EAAE,CAK9F;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,uCAAuC,GAC/C,gCAAgC,CAsHlC;AAED,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAKrF;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,iBAAiB,CAAC,CAyB5B"}
|
package/dist/runtime.js
CHANGED
|
@@ -7,10 +7,13 @@ import { bindSubagentSession } from '@felan-ai/ext-subagents';
|
|
|
7
7
|
import { resolveModelScopeWithDiagnostics, } from '@earendil-works/pi-coding-agent';
|
|
8
8
|
import { createLocalCodexStreamFunctionWrapper } from './codex.js';
|
|
9
9
|
import { createLocalExtensionImporter, importLocalExtension, resolveBuiltinExtensionPackages, } from './extensions.js';
|
|
10
|
-
import { createLocalSettingsManager, getFelanSettings } from './settings.js';
|
|
10
|
+
import { createLocalSettingsManager, getFelanSettings, getLocalToolDisplayMode, } from './settings.js';
|
|
11
11
|
import { loadLocalAppendSystemPrompt } from './system-prompt.js';
|
|
12
12
|
import { createLocalAgentRuntimeFactoryRequest, } from './runtime-factory.js';
|
|
13
13
|
import { LocalSubagentHost, } from './subagents/host.js';
|
|
14
|
+
import { createToolActivityExtension } from './tool-activity/extension.js';
|
|
15
|
+
import { registerToolActivitySession } from './tool-activity/runtime-view.js';
|
|
16
|
+
import { ToolActivityState } from './tool-activity/state.js';
|
|
14
17
|
const localSubagentHost = Symbol('localSubagentHost');
|
|
15
18
|
const localSubagentShutdown = Symbol('localSubagentShutdown');
|
|
16
19
|
export function getLocalAgentDir() {
|
|
@@ -32,6 +35,12 @@ export function createLocalSessionRuntimeFactory(options) {
|
|
|
32
35
|
]);
|
|
33
36
|
const settingsManager = createLocalSettingsManager(cwd, options.agentDir);
|
|
34
37
|
const felanSettings = getFelanSettings(settingsManager);
|
|
38
|
+
const toolActivityState = new ToolActivityState(getLocalToolDisplayMode(settingsManager));
|
|
39
|
+
const reloadSettings = settingsManager.reload.bind(settingsManager);
|
|
40
|
+
settingsManager.reload = async () => {
|
|
41
|
+
await reloadSettings();
|
|
42
|
+
toolActivityState.setMode(getLocalToolDisplayMode(settingsManager));
|
|
43
|
+
};
|
|
35
44
|
const modelPatterns = settingsManager.getEnabledModels();
|
|
36
45
|
const modelScope = modelPatterns && modelPatterns.length > 0
|
|
37
46
|
? await resolveModelScopeWithDiagnostics(modelPatterns, options.modelRuntime)
|
|
@@ -68,7 +77,12 @@ export function createLocalSessionRuntimeFactory(options) {
|
|
|
68
77
|
throw error;
|
|
69
78
|
}
|
|
70
79
|
};
|
|
71
|
-
sessions.set(sessionManager, {
|
|
80
|
+
sessions.set(sessionManager, {
|
|
81
|
+
host,
|
|
82
|
+
modelScope,
|
|
83
|
+
shutdownState,
|
|
84
|
+
toolActivityState,
|
|
85
|
+
});
|
|
72
86
|
return {
|
|
73
87
|
runtime,
|
|
74
88
|
...(wrapStreamFunction === undefined ? {} : { wrapStreamFunction }),
|
|
@@ -77,13 +91,16 @@ export function createLocalSessionRuntimeFactory(options) {
|
|
|
77
91
|
modelRuntime: options.modelRuntime,
|
|
78
92
|
settingsManager,
|
|
79
93
|
skillPaths,
|
|
94
|
+
inlineExtensions: [createToolActivityExtension(toolActivityState)],
|
|
80
95
|
...(appendSystemPrompt === undefined ? {} : { appendSystemPrompt: [appendSystemPrompt] }),
|
|
81
96
|
...(modelScope.scopedModels.length === 0 ? {} : { scopedModels: modelScope.scopedModels }),
|
|
82
97
|
};
|
|
83
98
|
});
|
|
84
99
|
return async (request) => {
|
|
85
100
|
const result = await createCoreRuntime(request);
|
|
86
|
-
const { host, modelScope, shutdownState } = sessions.get(request.sessionManager);
|
|
101
|
+
const { host, modelScope, shutdownState, toolActivityState, } = sessions.get(request.sessionManager);
|
|
102
|
+
toolActivityState.attach(result.session);
|
|
103
|
+
registerToolActivitySession(result.session, toolActivityState);
|
|
87
104
|
bindSubagentSession({ host, session: result.session });
|
|
88
105
|
Object.defineProperty(result.services, localSubagentHost, { value: host });
|
|
89
106
|
Object.defineProperty(result.services, localSubagentShutdown, { value: shutdownState });
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,oCAAoC,EACpC,yBAAyB,GAI1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EACL,gCAAgC,GAEjC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,qCAAqC,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/settings.d.ts
CHANGED
|
@@ -4,7 +4,13 @@ import type { LocalSubagentSettings } from './subagents/host.js';
|
|
|
4
4
|
export interface FelanSettings {
|
|
5
5
|
readonly builtinExtensions?: BuiltinExtensionSettings;
|
|
6
6
|
readonly felanSubagents?: LocalSubagentSettings;
|
|
7
|
+
readonly felanTui?: FelanTuiSettings;
|
|
7
8
|
}
|
|
9
|
+
export interface FelanTuiSettings {
|
|
10
|
+
readonly toolDisplay?: LocalToolDisplayMode;
|
|
11
|
+
}
|
|
12
|
+
export type LocalToolDisplayMode = 'grouped' | 'full';
|
|
8
13
|
export declare function createLocalSettingsManager(cwd: string, agentDir: string): SettingsManager;
|
|
9
14
|
export declare function getFelanSettings(settingsManager: SettingsManager): FelanSettings;
|
|
15
|
+
export declare function getLocalToolDisplayMode(settingsManager: SettingsManager): LocalToolDisplayMode;
|
|
10
16
|
//# sourceMappingURL=settings.d.ts.map
|
package/dist/settings.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,MAAM,CAAC;AAEtD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAmCzF;AAED,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,eAAe,GAAG,aAAa,CAEhF;AAED,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,eAAe,GAAG,oBAAoB,CAU9F"}
|
package/dist/settings.js
CHANGED
|
@@ -38,4 +38,21 @@ export function createLocalSettingsManager(cwd, agentDir) {
|
|
|
38
38
|
export function getFelanSettings(settingsManager) {
|
|
39
39
|
return settingsManager.getGlobalSettings();
|
|
40
40
|
}
|
|
41
|
+
export function getLocalToolDisplayMode(settingsManager) {
|
|
42
|
+
const rawSettings = settingsManager.getGlobalSettings();
|
|
43
|
+
const rawTui = rawSettings.felanTui;
|
|
44
|
+
if (rawTui === undefined)
|
|
45
|
+
return 'grouped';
|
|
46
|
+
if (!isRecord(rawTui))
|
|
47
|
+
throw new Error('felanTui must be an object');
|
|
48
|
+
const mode = rawTui.toolDisplay;
|
|
49
|
+
if (mode === undefined)
|
|
50
|
+
return 'grouped';
|
|
51
|
+
if (mode === 'grouped' || mode === 'full')
|
|
52
|
+
return mode;
|
|
53
|
+
throw new Error('felanTui.toolDisplay must be "grouped" or "full"');
|
|
54
|
+
}
|
|
55
|
+
function isRecord(value) {
|
|
56
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
57
|
+
}
|
|
41
58
|
//# sourceMappingURL=settings.js.map
|
package/dist/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAgBvD,MAAM,UAAU,0BAA0B,CAAC,GAAW,EAAE,QAAgB;IACtE,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IACzF,oEAAoE;IACpE,eAAe,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IAC9C,eAAe,CAAC,iBAAiB,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAC7C,MAAM,iBAAiB,GAAG;QACxB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;QACd,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;KACX,CAAC;IACF,MAAM,gBAAgB,GAAG;QACvB,GAAG,iBAAiB;QACpB,sBAAsB,EAAE,KAAK;QAC7B,oBAAoB,EAAE,UAAU;KACjC,CAAC;IACF,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAClF,MAAM,kBAAkB,GAAG,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAEpF,eAAe,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IACjD,eAAe,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE;QAClC,MAAM,MAAM,EAAE,CAAC;QACf,eAAe,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IACnD,CAAC,CAAC;IACF,eAAe,CAAC,iBAAiB,GAAG,GAAG,EAAE,CAAC,CAAC;QACzC,GAAG,iBAAiB,EAAE;QACtB,GAAG,iBAAiB;KACrB,CAAC,CAAC;IACH,eAAe,CAAC,kBAAkB,GAAG,GAAG,EAAE,CAAC,CAAC;QAC1C,GAAG,kBAAkB,EAAE;QACvB,GAAG,iBAAiB;KACrB,CAAC,CAAC;IACH,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,eAAgC;IAC/D,OAAO,eAAe,CAAC,iBAAiB,EAAmB,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,eAAgC;IACtE,MAAM,WAAW,GAAG,eAAe,CAAC,iBAAiB,EAA6B,CAAC;IACnF,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAErE,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;IAChC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { InlineExtension } from '@earendil-works/pi-coding-agent';
|
|
2
|
+
import { ToolActivityState } from './state.js';
|
|
3
|
+
export declare const TOOL_ACTIVITY_EXTENSION_NAME = "@felan-ai/felan/tool-activity";
|
|
4
|
+
export declare const TOOL_ACTIVITY_SHORTCUT: "alt+t";
|
|
5
|
+
export declare function createToolActivityExtension(state: ToolActivityState): InlineExtension;
|
|
6
|
+
//# sourceMappingURL=extension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/tool-activity/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,4BAA4B,kCAAkC,CAAC;AAC5E,eAAO,MAAM,sBAAsB,SAAe,CAAC;AAUnD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,GAAG,eAAe,CA4BrF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Key, } from '@earendil-works/pi-tui';
|
|
2
|
+
import { ToolActivityInspector } from './inspector.js';
|
|
3
|
+
import { ToolActivityState } from './state.js';
|
|
4
|
+
export const TOOL_ACTIVITY_EXTENSION_NAME = '@felan-ai/felan/tool-activity';
|
|
5
|
+
export const TOOL_ACTIVITY_SHORTCUT = Key.alt('t');
|
|
6
|
+
const TOOL_ACTIVITY_OVERLAY_OPTIONS = {
|
|
7
|
+
anchor: 'center',
|
|
8
|
+
width: '90%',
|
|
9
|
+
minWidth: 50,
|
|
10
|
+
maxHeight: '90%',
|
|
11
|
+
margin: 1,
|
|
12
|
+
};
|
|
13
|
+
export function createToolActivityExtension(state) {
|
|
14
|
+
return {
|
|
15
|
+
name: TOOL_ACTIVITY_EXTENSION_NAME,
|
|
16
|
+
hidden: true,
|
|
17
|
+
factory: (pi) => {
|
|
18
|
+
const overlays = new Set();
|
|
19
|
+
const open = (ctx) => openToolActivityInspector(ctx, state, overlays);
|
|
20
|
+
pi.registerCommand('tools', {
|
|
21
|
+
description: 'Inspect full tool call arguments and results',
|
|
22
|
+
handler: async (_args, ctx) => open(ctx),
|
|
23
|
+
});
|
|
24
|
+
pi.registerShortcut(TOOL_ACTIVITY_SHORTCUT, {
|
|
25
|
+
description: 'Inspect full tool call arguments and results',
|
|
26
|
+
handler: open,
|
|
27
|
+
});
|
|
28
|
+
pi.on('session_start', () => {
|
|
29
|
+
state.refreshMode();
|
|
30
|
+
state.rebuild();
|
|
31
|
+
});
|
|
32
|
+
pi.on('session_tree', () => state.rebuild());
|
|
33
|
+
pi.on('session_shutdown', (event) => {
|
|
34
|
+
for (const overlay of overlays)
|
|
35
|
+
overlay.close();
|
|
36
|
+
overlays.clear();
|
|
37
|
+
if (event.reason !== 'reload')
|
|
38
|
+
state.dispose();
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
async function openToolActivityInspector(ctx, state, overlays) {
|
|
44
|
+
if (ctx.mode !== 'tui') {
|
|
45
|
+
ctx.ui.notify('Tool activity inspector is available only in the local TUI', 'warning');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
await ctx.ui.custom((tui, theme, _keybindings, done) => {
|
|
49
|
+
let overlay;
|
|
50
|
+
overlay = new ToolActivityInspector(state, theme, tui, () => done(undefined), () => overlays.delete(overlay));
|
|
51
|
+
overlays.add(overlay);
|
|
52
|
+
return overlay;
|
|
53
|
+
}, { overlay: true, overlayOptions: TOOL_ACTIVITY_OVERLAY_OPTIONS });
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/tool-activity/extension.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,GAAG,GAEJ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,CAAC,MAAM,4BAA4B,GAAG,+BAA+B,CAAC;AAC5E,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEnD,MAAM,6BAA6B,GAAmB;IACpD,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,KAAK;IAChB,MAAM,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,KAAwB;IAClE,OAAO;QACL,IAAI,EAAE,4BAA4B;QAClC,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE;YACd,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;YAClD,MAAM,IAAI,GAAG,CAAC,GAAqB,EAAE,EAAE,CAAC,yBAAyB,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAExF,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE;gBAC1B,WAAW,EAAE,8CAA8C;gBAC3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;aACzC,CAAC,CAAC;YACH,EAAE,CAAC,gBAAgB,CAAC,sBAAsB,EAAE;gBAC1C,WAAW,EAAE,8CAA8C;gBAC3D,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YACH,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;gBAC1B,KAAK,CAAC,WAAW,EAAE,CAAC;gBACpB,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClC,KAAK,MAAM,OAAO,IAAI,QAAQ;oBAAE,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChD,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;oBAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YACjD,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,GAAqB,EACrB,KAAwB,EACxB,QAAoC;IAEpC,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,4DAA4D,EAAE,SAAS,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CACjB,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;QACjC,IAAI,OAA+B,CAAC;QACpC,OAAO,GAAG,IAAI,qBAAqB,CACjC,KAAK,EACL,KAAK,EACL,GAAG,EACH,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EACrB,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAC/B,CAAC;QACF,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,OAAO,CAAC;IACjB,CAAC,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,6BAA6B,EAAE,CACjE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type Theme } from '@earendil-works/pi-coding-agent';
|
|
2
|
+
import { type Component, type TUI } from '@earendil-works/pi-tui';
|
|
3
|
+
import { ToolActivityState } from './state.js';
|
|
4
|
+
export declare class ToolActivityInspector implements Component {
|
|
5
|
+
#private;
|
|
6
|
+
private readonly state;
|
|
7
|
+
private readonly theme;
|
|
8
|
+
private readonly tui;
|
|
9
|
+
private readonly done;
|
|
10
|
+
private readonly onDispose;
|
|
11
|
+
constructor(state: ToolActivityState, theme: Theme, tui: TUI, done: () => void, onDispose?: () => void);
|
|
12
|
+
handleInput(data: string): void;
|
|
13
|
+
render(width: number): string[];
|
|
14
|
+
invalidate(): void;
|
|
15
|
+
dispose(): void;
|
|
16
|
+
close(): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=inspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/tool-activity/inspector.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EACX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,GAAG,EACT,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAEL,iBAAiB,EAClB,MAAM,YAAY,CAAC;AASpB,qBAAa,qBAAsB,YAAW,SAAS;;IAkBnD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAJT,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,MAAM,IAAI,EAChB,SAAS,GAAE,MAAM,IAAe;IAkBnD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAc/B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA2C/B,UAAU,IAAI,IAAI;IAElB,OAAO,IAAI,IAAI;IAOf,KAAK,IAAI,IAAI;CA4Ed"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { ToolExecutionComponent, } from '@earendil-works/pi-coding-agent';
|
|
2
|
+
import { matchesKey, stripTerminalSequences, truncateToWidth, wrapTextWithAnsi, } from '@earendil-works/pi-tui';
|
|
3
|
+
import { toolCallLabel } from './presentation.js';
|
|
4
|
+
import { ToolActivityState, } from './state.js';
|
|
5
|
+
const LIST_ROWS = 8;
|
|
6
|
+
const MIN_DETAIL_ROWS = 6;
|
|
7
|
+
const MAX_DETAIL_ROWS = 24;
|
|
8
|
+
const MAX_SERIALIZED_CHARACTERS = 200_000;
|
|
9
|
+
const PADDING_X = 2;
|
|
10
|
+
const PADDING_Y = 1;
|
|
11
|
+
export class ToolActivityInspector {
|
|
12
|
+
state;
|
|
13
|
+
theme;
|
|
14
|
+
tui;
|
|
15
|
+
done;
|
|
16
|
+
onDispose;
|
|
17
|
+
#unsubscribe;
|
|
18
|
+
#detailRows;
|
|
19
|
+
#selected = 0;
|
|
20
|
+
#listScroll = 0;
|
|
21
|
+
#detailScroll = 0;
|
|
22
|
+
#detailLength = 0;
|
|
23
|
+
#detailComponent;
|
|
24
|
+
#detailSource;
|
|
25
|
+
#disposed = false;
|
|
26
|
+
constructor(state, theme, tui, done, onDispose = () => { }) {
|
|
27
|
+
this.state = state;
|
|
28
|
+
this.theme = theme;
|
|
29
|
+
this.tui = tui;
|
|
30
|
+
this.done = done;
|
|
31
|
+
this.onDispose = onDispose;
|
|
32
|
+
this.#detailRows = Math.max(MIN_DETAIL_ROWS, Math.min(MAX_DETAIL_ROWS, tui.terminal.rows - LIST_ROWS - 9));
|
|
33
|
+
this.#selected = Math.max(0, state.calls().length - 1);
|
|
34
|
+
this.#clampList();
|
|
35
|
+
this.#syncDetailComponent();
|
|
36
|
+
this.#unsubscribe = state.subscribe(() => {
|
|
37
|
+
if (this.#disposed)
|
|
38
|
+
return;
|
|
39
|
+
this.#selected = Math.min(this.#selected, Math.max(0, state.calls().length - 1));
|
|
40
|
+
this.#clampList();
|
|
41
|
+
this.#syncDetailComponent();
|
|
42
|
+
this.tui.requestRender();
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
handleInput(data) {
|
|
46
|
+
if (this.#disposed)
|
|
47
|
+
return;
|
|
48
|
+
if (matchesKey(data, 'escape') || data === 'q') {
|
|
49
|
+
this.close();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (matchesKey(data, 'up') || data === 'k')
|
|
53
|
+
this.#select(-1);
|
|
54
|
+
if (matchesKey(data, 'down') || data === 'j')
|
|
55
|
+
this.#select(1);
|
|
56
|
+
if (matchesKey(data, 'ctrl+u') || matchesKey(data, 'pageUp'))
|
|
57
|
+
this.#scrollDetail(-this.#detailRows);
|
|
58
|
+
if (matchesKey(data, 'ctrl+d') || matchesKey(data, 'pageDown'))
|
|
59
|
+
this.#scrollDetail(this.#detailRows);
|
|
60
|
+
if (matchesKey(data, 'home'))
|
|
61
|
+
this.#scrollDetail(-this.#detailLength);
|
|
62
|
+
if (matchesKey(data, 'end'))
|
|
63
|
+
this.#scrollDetail(this.#detailLength);
|
|
64
|
+
}
|
|
65
|
+
render(width) {
|
|
66
|
+
const innerWidth = Math.max(1, width - PADDING_X * 2);
|
|
67
|
+
const calls = this.state.calls();
|
|
68
|
+
const lines = [
|
|
69
|
+
this.theme.fg('accent', this.theme.bold('Tool Activity'))
|
|
70
|
+
+ this.theme.fg('dim', ' ↑↓ select • ctrl+u/d detail • home/end • q/esc close'),
|
|
71
|
+
this.theme.fg('muted', `${calls.length} tool call${calls.length === 1 ? '' : 's'}`),
|
|
72
|
+
'',
|
|
73
|
+
];
|
|
74
|
+
if (calls.length === 0) {
|
|
75
|
+
lines.push(this.theme.fg('dim', 'No tool activity in this session.'));
|
|
76
|
+
return pad(lines, innerWidth);
|
|
77
|
+
}
|
|
78
|
+
const listEnd = Math.min(calls.length, this.#listScroll + LIST_ROWS);
|
|
79
|
+
lines.push(this.theme.fg('dim', `Showing calls ${this.#listScroll + 1}-${listEnd}/${calls.length}`));
|
|
80
|
+
for (let index = this.#listScroll; index < listEnd; index += 1) {
|
|
81
|
+
const call = calls[index];
|
|
82
|
+
const marker = index === this.#selected ? this.theme.fg('accent', '▶') : ' ';
|
|
83
|
+
lines.push(`${marker} ${statusIcon(call, this.theme)} ${toolCallLabel(call)}`);
|
|
84
|
+
}
|
|
85
|
+
const selected = calls[this.#selected];
|
|
86
|
+
const renderedView = this.#detailComponent
|
|
87
|
+
?.render(innerWidth)
|
|
88
|
+
.map((line) => line.trimEnd())
|
|
89
|
+
.filter((line) => stripTerminalSequences(line).trim().length > 0) ?? [];
|
|
90
|
+
const detailLines = wrapTextWithAnsi(formatDetail(selected, this.theme, renderedView), innerWidth);
|
|
91
|
+
this.#detailLength = detailLines.length;
|
|
92
|
+
this.#clampDetail();
|
|
93
|
+
const detailEnd = Math.min(detailLines.length, this.#detailScroll + this.#detailRows);
|
|
94
|
+
lines.push('', this.theme.fg('muted', '─'.repeat(Math.max(1, Math.min(innerWidth, 80)))));
|
|
95
|
+
if (detailLines.length > this.#detailRows) {
|
|
96
|
+
lines.push(this.theme.fg('dim', `Showing detail lines ${this.#detailScroll + 1}-${detailEnd}/${detailLines.length}`));
|
|
97
|
+
}
|
|
98
|
+
lines.push(...detailLines.slice(this.#detailScroll, detailEnd));
|
|
99
|
+
return pad(lines, innerWidth);
|
|
100
|
+
}
|
|
101
|
+
invalidate() { }
|
|
102
|
+
dispose() {
|
|
103
|
+
if (this.#disposed)
|
|
104
|
+
return;
|
|
105
|
+
this.#disposed = true;
|
|
106
|
+
this.#unsubscribe();
|
|
107
|
+
this.onDispose();
|
|
108
|
+
}
|
|
109
|
+
close() {
|
|
110
|
+
if (this.#disposed)
|
|
111
|
+
return;
|
|
112
|
+
this.dispose();
|
|
113
|
+
this.done();
|
|
114
|
+
}
|
|
115
|
+
#select(delta) {
|
|
116
|
+
const calls = this.state.calls();
|
|
117
|
+
if (calls.length === 0)
|
|
118
|
+
return;
|
|
119
|
+
this.#selected = Math.max(0, Math.min(calls.length - 1, this.#selected + delta));
|
|
120
|
+
this.#detailScroll = 0;
|
|
121
|
+
this.#clampList();
|
|
122
|
+
this.#syncDetailComponent();
|
|
123
|
+
this.tui.requestRender();
|
|
124
|
+
}
|
|
125
|
+
#clampList() {
|
|
126
|
+
const length = this.state.calls().length;
|
|
127
|
+
if (this.#selected < this.#listScroll)
|
|
128
|
+
this.#listScroll = this.#selected;
|
|
129
|
+
if (this.#selected >= this.#listScroll + LIST_ROWS) {
|
|
130
|
+
this.#listScroll = this.#selected - LIST_ROWS + 1;
|
|
131
|
+
}
|
|
132
|
+
this.#listScroll = Math.max(0, Math.min(this.#listScroll, Math.max(0, length - LIST_ROWS)));
|
|
133
|
+
}
|
|
134
|
+
#scrollDetail(delta) {
|
|
135
|
+
this.#detailScroll += delta;
|
|
136
|
+
this.#clampDetail();
|
|
137
|
+
this.tui.requestRender();
|
|
138
|
+
}
|
|
139
|
+
#clampDetail() {
|
|
140
|
+
this.#detailScroll = Math.max(0, Math.min(this.#detailScroll, Math.max(0, this.#detailLength - this.#detailRows)));
|
|
141
|
+
}
|
|
142
|
+
#syncDetailComponent() {
|
|
143
|
+
const call = this.state.calls()[this.#selected];
|
|
144
|
+
const definition = call ? this.state.definition(call.name) : undefined;
|
|
145
|
+
if (call
|
|
146
|
+
&& this.#detailSource?.callId === call.id
|
|
147
|
+
&& this.#detailSource.args === call.args
|
|
148
|
+
&& this.#detailSource.result === call.result
|
|
149
|
+
&& this.#detailSource.status === call.status
|
|
150
|
+
&& this.#detailSource.definition === definition)
|
|
151
|
+
return;
|
|
152
|
+
this.#detailSource = call
|
|
153
|
+
? { callId: call.id, args: call.args, result: call.result, status: call.status, definition }
|
|
154
|
+
: undefined;
|
|
155
|
+
this.#detailComponent = undefined;
|
|
156
|
+
if (!call || !definition || !call.result || call.status === 'pending' || call.status === 'running')
|
|
157
|
+
return;
|
|
158
|
+
const component = new ToolExecutionComponent(call.name, call.id, call.args, { showImages: false }, definition, this.tui, this.state.cwd);
|
|
159
|
+
component.markExecutionStarted();
|
|
160
|
+
const renderedResult = definition.renderResult ? call.result : { content: [] };
|
|
161
|
+
component.updateResult({
|
|
162
|
+
content: [...renderedResult.content],
|
|
163
|
+
...(renderedResult.details === undefined ? {} : { details: renderedResult.details }),
|
|
164
|
+
isError: call.isError,
|
|
165
|
+
});
|
|
166
|
+
component.setArgsComplete();
|
|
167
|
+
component.setExpanded(true);
|
|
168
|
+
this.#detailComponent = component;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function formatDetail(call, theme, renderedView) {
|
|
172
|
+
const lines = [
|
|
173
|
+
`${statusIcon(call, theme)} ${theme.bold(toolCallLabel(call))}`,
|
|
174
|
+
theme.fg('muted', `${call.name} · ${call.id} · ${statusLabel(call)}`),
|
|
175
|
+
];
|
|
176
|
+
if (renderedView.length > 0) {
|
|
177
|
+
lines.push('', theme.fg('accent', theme.bold('Rendered view')), ...renderedView);
|
|
178
|
+
}
|
|
179
|
+
lines.push('', theme.fg('accent', theme.bold('Arguments')), sanitize(serialized(call.args)));
|
|
180
|
+
if (call.result) {
|
|
181
|
+
lines.push('', theme.fg('accent', theme.bold(call.isError ? 'Error result' : 'Result')));
|
|
182
|
+
if (call.result.content.length === 0) {
|
|
183
|
+
lines.push(theme.fg('dim', '(no content)'));
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
for (const content of call.result.content) {
|
|
187
|
+
if (content.type === 'text')
|
|
188
|
+
lines.push(sanitize(content.text ?? ''));
|
|
189
|
+
else if (content.type === 'image') {
|
|
190
|
+
lines.push(theme.fg('dim', `[${content.mimeType ?? 'image'} · ${content.data?.length ?? 0} encoded characters]`));
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
lines.push(theme.fg('dim', `[${content.type}]`));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (call.result.details !== undefined) {
|
|
198
|
+
lines.push('', theme.fg('accent', theme.bold('Details')), sanitize(serialized(call.result.details)));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
lines.push('', theme.fg('warning', 'Result pending…'));
|
|
203
|
+
}
|
|
204
|
+
return lines.join('\n');
|
|
205
|
+
}
|
|
206
|
+
function serialized(value) {
|
|
207
|
+
try {
|
|
208
|
+
const seen = new WeakSet();
|
|
209
|
+
const text = JSON.stringify(value, (key, entry) => {
|
|
210
|
+
if (isSensitiveKey(key))
|
|
211
|
+
return '[redacted]';
|
|
212
|
+
if (typeof entry === 'bigint')
|
|
213
|
+
return entry.toString();
|
|
214
|
+
if (typeof entry === 'string' && entry.length > MAX_SERIALIZED_CHARACTERS) {
|
|
215
|
+
return `${entry.slice(0, MAX_SERIALIZED_CHARACTERS)}… ${entry.length - MAX_SERIALIZED_CHARACTERS} characters omitted`;
|
|
216
|
+
}
|
|
217
|
+
if (typeof entry !== 'object' || entry === null)
|
|
218
|
+
return entry;
|
|
219
|
+
if (seen.has(entry))
|
|
220
|
+
return '[Circular]';
|
|
221
|
+
seen.add(entry);
|
|
222
|
+
return entry;
|
|
223
|
+
}, 2) ?? String(value);
|
|
224
|
+
if (text.length <= MAX_SERIALIZED_CHARACTERS)
|
|
225
|
+
return text;
|
|
226
|
+
return `${text.slice(0, MAX_SERIALIZED_CHARACTERS)}\n… ${text.length - MAX_SERIALIZED_CHARACTERS} characters omitted`;
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return String(value);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function isSensitiveKey(key) {
|
|
233
|
+
const normalized = key.replace(/[^a-z0-9]/gi, '').toLowerCase();
|
|
234
|
+
return [
|
|
235
|
+
'apikey',
|
|
236
|
+
'authorization',
|
|
237
|
+
'cookie',
|
|
238
|
+
'password',
|
|
239
|
+
'privatekey',
|
|
240
|
+
'refreshtoken',
|
|
241
|
+
'secret',
|
|
242
|
+
'token',
|
|
243
|
+
'accesstoken',
|
|
244
|
+
].includes(normalized);
|
|
245
|
+
}
|
|
246
|
+
function sanitize(value) {
|
|
247
|
+
return stripTerminalSequences(value);
|
|
248
|
+
}
|
|
249
|
+
function statusIcon(call, theme) {
|
|
250
|
+
if (call.isError)
|
|
251
|
+
return theme.fg('error', '✗');
|
|
252
|
+
if (call.status === 'pending' || call.status === 'running')
|
|
253
|
+
return theme.fg('warning', '◌');
|
|
254
|
+
return theme.fg('success', '✓');
|
|
255
|
+
}
|
|
256
|
+
function statusLabel(call) {
|
|
257
|
+
if (call.isPartial && call.status === 'running')
|
|
258
|
+
return 'running · partial result';
|
|
259
|
+
return call.status;
|
|
260
|
+
}
|
|
261
|
+
function pad(lines, width) {
|
|
262
|
+
const prefix = ' '.repeat(PADDING_X);
|
|
263
|
+
return [
|
|
264
|
+
...Array(PADDING_Y).fill(''),
|
|
265
|
+
...lines.map((line) => `${prefix}${truncateToWidth(line, width, '…')}${prefix}`),
|
|
266
|
+
...Array(PADDING_Y).fill(''),
|
|
267
|
+
];
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=inspector.js.map
|