@f5-sales-demo/xcsh 21.45.3 → 21.46.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/package.json +8 -8
- package/src/config/settings-schema.ts +10 -0
- package/src/debug/log-viewer.ts +6 -6
- package/src/extensibility/extensions/bundled/herdr-reporter.ts +29 -0
- package/src/extensibility/extensions/types.ts +7 -0
- package/src/internal-urls/api-catalog-qmd-index.generated.ts +2 -2
- package/src/internal-urls/build-info.generated.ts +8 -8
- package/src/internal-urls/docs-index.generated.ts +1 -1
- package/src/modes/components/agent-dashboard.ts +13 -3
- package/src/modes/components/btw-panel.ts +5 -2
- package/src/modes/components/context-add-wizard.ts +5 -3
- package/src/modes/components/copy-selector.ts +6 -3
- package/src/modes/components/extensions/extension-dashboard.ts +8 -2
- package/src/modes/components/history-search.ts +2 -1
- package/src/modes/components/hook-editor.ts +8 -2
- package/src/modes/components/hook-input.ts +2 -1
- package/src/modes/components/hook-selector.ts +3 -2
- package/src/modes/components/login-dialog.ts +20 -10
- package/src/modes/components/mcp-add-wizard.ts +5 -3
- package/src/modes/components/model-selector.ts +3 -1
- package/src/modes/components/oauth-selector.ts +3 -2
- package/src/modes/components/plan-preview.ts +2 -2
- package/src/modes/components/plugin-settings.ts +2 -2
- package/src/modes/components/plugins/plugin-dashboard.ts +2 -1
- package/src/modes/components/question-transcript.ts +2 -2
- package/src/modes/components/recap-message.ts +23 -0
- package/src/modes/components/request-user-input.ts +6 -6
- package/src/modes/components/reviewed-action-dialog.ts +6 -3
- package/src/modes/components/searchable-select-list.ts +3 -2
- package/src/modes/components/selector-frame.ts +88 -21
- package/src/modes/components/session-observer-overlay.ts +2 -1
- package/src/modes/components/session-selector.ts +13 -5
- package/src/modes/components/settings-browser.ts +8 -2
- package/src/modes/components/settings-editors.ts +11 -4
- package/src/modes/components/settings-selector.ts +8 -2
- package/src/modes/components/transcript-notice.ts +15 -5
- package/src/modes/components/tree-selector.ts +11 -5
- package/src/modes/components/user-message-selector.ts +4 -2
- package/src/modes/components/welcome.ts +3 -3
- package/src/modes/controllers/event-controller.ts +5 -0
- package/src/modes/controllers/selector-controller.ts +1 -0
- package/src/modes/interactive-mode.ts +1 -0
- package/src/modes/utils/ui-helpers.ts +10 -0
- package/src/remote-control/protocol-methods.json +3 -0
- package/src/remote-control/router.ts +2 -0
- package/src/remote-control/session.ts +24 -0
- package/src/session/agent-session.ts +73 -2
- package/src/session/recap.ts +341 -0
- package/src/slash-commands/builtin-registry.ts +19 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@f5-sales-demo/xcsh",
|
|
4
|
-
"version": "21.
|
|
4
|
+
"version": "21.46.1",
|
|
5
5
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
6
6
|
"homepage": "https://github.com/f5-sales-demo/xcsh",
|
|
7
7
|
"author": "Can Boluk",
|
|
@@ -66,13 +66,13 @@
|
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
68
|
"@agentclientprotocol/sdk": "1.4.0",
|
|
69
|
-
"@f5-sales-demo/pi-agent-core": "21.
|
|
70
|
-
"@f5-sales-demo/pi-ai": "21.
|
|
71
|
-
"@f5-sales-demo/pi-natives": "21.
|
|
72
|
-
"@f5-sales-demo/pi-resource-management": "21.
|
|
73
|
-
"@f5-sales-demo/pi-tui": "21.
|
|
74
|
-
"@f5-sales-demo/pi-utils": "21.
|
|
75
|
-
"@f5-sales-demo/xcsh-stats": "21.
|
|
69
|
+
"@f5-sales-demo/pi-agent-core": "21.46.1",
|
|
70
|
+
"@f5-sales-demo/pi-ai": "21.46.1",
|
|
71
|
+
"@f5-sales-demo/pi-natives": "21.46.1",
|
|
72
|
+
"@f5-sales-demo/pi-resource-management": "21.46.1",
|
|
73
|
+
"@f5-sales-demo/pi-tui": "21.46.1",
|
|
74
|
+
"@f5-sales-demo/pi-utils": "21.46.1",
|
|
75
|
+
"@f5-sales-demo/xcsh-stats": "21.46.1",
|
|
76
76
|
"@mozilla/readability": "^0.6",
|
|
77
77
|
"@sinclair/typebox": "0.34.52",
|
|
78
78
|
"@tobilu/qmd": "2.8.3",
|
|
@@ -1011,6 +1011,16 @@ export const SETTINGS_SCHEMA = {
|
|
|
1011
1011
|
},
|
|
1012
1012
|
|
|
1013
1013
|
// Compaction
|
|
1014
|
+
"recap.auto": {
|
|
1015
|
+
type: "boolean",
|
|
1016
|
+
default: true,
|
|
1017
|
+
ui: {
|
|
1018
|
+
tab: "context",
|
|
1019
|
+
label: "Automatic Recaps",
|
|
1020
|
+
description: "Create a brief recap after 30 minutes away from an idle conversation",
|
|
1021
|
+
},
|
|
1022
|
+
},
|
|
1023
|
+
|
|
1014
1024
|
"compaction.enabled": {
|
|
1015
1025
|
type: "boolean",
|
|
1016
1026
|
default: true,
|
package/src/debug/log-viewer.ts
CHANGED
|
@@ -15,9 +15,11 @@ import { formatKeyHints } from "../config/keybindings";
|
|
|
15
15
|
import {
|
|
16
16
|
type SelectorFrameLine,
|
|
17
17
|
selectorCancelHint,
|
|
18
|
+
selectorCompactRow,
|
|
18
19
|
selectorFrame,
|
|
19
20
|
selectorFrameContentWidth,
|
|
20
21
|
selectorKeys,
|
|
22
|
+
selectorProse,
|
|
21
23
|
} from "../modes/components/selector-frame";
|
|
22
24
|
import { theme } from "../modes/theme/theme";
|
|
23
25
|
import {
|
|
@@ -660,11 +662,9 @@ export class DebugLogViewerComponent implements Component, MouseRoutable {
|
|
|
660
662
|
maxBodyRows: bodyHeight,
|
|
661
663
|
},
|
|
662
664
|
);
|
|
663
|
-
const firstContent = visibleBodyLines.find(line =>
|
|
664
|
-
typeof line === "string" ? line.trim().length > 0 : Bun.stripANSI(line.content).trim().length > 0,
|
|
665
|
-
);
|
|
665
|
+
const firstContent = visibleBodyLines.find(line => Bun.stripANSI(line.content).trim().length > 0);
|
|
666
666
|
if (firstContent) {
|
|
667
|
-
const needle = Bun.stripANSI(
|
|
667
|
+
const needle = Bun.stripANSI(firstContent.content).trim();
|
|
668
668
|
const index = frame.findIndex(line => Bun.stripANSI(line).includes(needle));
|
|
669
669
|
this.#bodyRowStart = index >= 0 ? index : 0;
|
|
670
670
|
}
|
|
@@ -850,7 +850,7 @@ export class DebugLogViewerComponent implements Component, MouseRoutable {
|
|
|
850
850
|
const lines: SelectorFrameLine[] = [];
|
|
851
851
|
if (rows.length === 0) {
|
|
852
852
|
this.#bodyLineToRowIndex.push(undefined);
|
|
853
|
-
lines.push(
|
|
853
|
+
lines.push(selectorProse("No matching log entries.", "muted"));
|
|
854
854
|
}
|
|
855
855
|
for (let i = this.#scrollRowOffset; i < rows.length; i++) {
|
|
856
856
|
const row = rows[i];
|
|
@@ -863,7 +863,7 @@ export class DebugLogViewerComponent implements Component, MouseRoutable {
|
|
|
863
863
|
break;
|
|
864
864
|
}
|
|
865
865
|
this.#bodyLineToRowIndex.push(row.rowIndex);
|
|
866
|
-
lines.push(
|
|
866
|
+
lines.push(selectorCompactRow(line, this.#model.cursorRowIndex === row.rowIndex));
|
|
867
867
|
}
|
|
868
868
|
|
|
869
869
|
if (lines.length >= bodyHeight) {
|
|
@@ -69,6 +69,7 @@ const SESSION_METHOD = "pane.report_agent_session";
|
|
|
69
69
|
const HEARTBEAT_METHOD = "pane.report_agent_heartbeat";
|
|
70
70
|
const RELEASE_METHOD = "pane.release_agent";
|
|
71
71
|
const TURN_REPORT_METHOD = "agent.turn.report";
|
|
72
|
+
const RECAP_REPORT_METHOD = "agent.recap.report";
|
|
72
73
|
const TURN_ACTION_GET_METHOD = "agent.turn.action.get";
|
|
73
74
|
const TURN_ACTION_ACK_METHOD = "agent.turn.action.ack";
|
|
74
75
|
const SOCKET_TIMEOUT_MS = 2000;
|
|
@@ -919,6 +920,34 @@ export default function herdrReporter(pi: ExtensionAPI): void {
|
|
|
919
920
|
}
|
|
920
921
|
});
|
|
921
922
|
|
|
923
|
+
pi.on("recap_created", async (event, ctx) => {
|
|
924
|
+
const socketPath = process.env.HERDR_SOCKET_PATH;
|
|
925
|
+
if (!socketPath) return;
|
|
926
|
+
await reportSession(ctx);
|
|
927
|
+
const sessionFile = ctx.sessionManager?.getSessionFile?.();
|
|
928
|
+
const sessionRef =
|
|
929
|
+
typeof sessionFile === "string" && path.isAbsolute(sessionFile)
|
|
930
|
+
? sessionFile
|
|
931
|
+
: ctx.sessionManager?.getSessionId?.();
|
|
932
|
+
if (!sessionRef || event.recap.sessionId !== ctx.sessionManager?.getSessionId?.()) return;
|
|
933
|
+
await enqueue(async () => {
|
|
934
|
+
const client = getHerdrClient(socketPath);
|
|
935
|
+
await client.ensureSemanticProtocol();
|
|
936
|
+
if (client.capabilityVersion("agent_recaps") !== 1) return;
|
|
937
|
+
await requestHerdrIdempotent(client, RECAP_REPORT_METHOD, {
|
|
938
|
+
pane_id: paneId,
|
|
939
|
+
source: HERDR_SOURCE,
|
|
940
|
+
session_id: sessionRef,
|
|
941
|
+
id: event.recap.id,
|
|
942
|
+
trigger: event.recap.trigger,
|
|
943
|
+
summary: event.recap.summary,
|
|
944
|
+
...(event.recap.nextAction ? { next_action: event.recap.nextAction } : {}),
|
|
945
|
+
completed_turn_count: event.recap.completedTurnCount,
|
|
946
|
+
created_at: event.recap.createdAt,
|
|
947
|
+
});
|
|
948
|
+
});
|
|
949
|
+
});
|
|
950
|
+
|
|
922
951
|
pi.on("before_agent_start", async (_event, ctx) => {
|
|
923
952
|
latestContext = ctx;
|
|
924
953
|
if (!activeSemanticTurn) await beginSemanticTurn(ctx);
|
|
@@ -571,6 +571,11 @@ export interface TurnPhaseEvent {
|
|
|
571
571
|
turnId: number;
|
|
572
572
|
}
|
|
573
573
|
|
|
574
|
+
export interface RecapCreatedEvent {
|
|
575
|
+
type: "recap_created";
|
|
576
|
+
recap: import("../../session/recap").RecapRecord;
|
|
577
|
+
}
|
|
578
|
+
|
|
574
579
|
/** Fired when a tool starts executing */
|
|
575
580
|
export interface ToolExecutionStartEvent {
|
|
576
581
|
type: "tool_execution_start";
|
|
@@ -850,6 +855,7 @@ export type ExtensionEvent =
|
|
|
850
855
|
| UserPromptStartEvent
|
|
851
856
|
| UserPromptEndEvent
|
|
852
857
|
| TurnPhaseEvent
|
|
858
|
+
| RecapCreatedEvent
|
|
853
859
|
| ToolExecutionStartEvent
|
|
854
860
|
| ToolExecutionUpdateEvent
|
|
855
861
|
| ToolExecutionEndEvent
|
|
@@ -1099,6 +1105,7 @@ export interface ExtensionAPI {
|
|
|
1099
1105
|
on(event: "user_prompt_start", handler: ExtensionHandler<UserPromptStartEvent>): void;
|
|
1100
1106
|
on(event: "user_prompt_end", handler: ExtensionHandler<UserPromptEndEvent>): void;
|
|
1101
1107
|
on(event: "turn_phase", handler: ExtensionHandler<TurnPhaseEvent>): void;
|
|
1108
|
+
on(event: "recap_created", handler: ExtensionHandler<RecapCreatedEvent>): void;
|
|
1102
1109
|
on(event: "tool_execution_start", handler: ExtensionHandler<ToolExecutionStartEvent>): void;
|
|
1103
1110
|
on(event: "tool_execution_update", handler: ExtensionHandler<ToolExecutionUpdateEvent>): void;
|
|
1104
1111
|
on(event: "tool_execution_end", handler: ExtensionHandler<ToolExecutionEndEvent>): void;
|