@agentuity/coder 1.0.37
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 +57 -0
- package/dist/chain-preview.d.ts +55 -0
- package/dist/chain-preview.d.ts.map +1 -0
- package/dist/chain-preview.js +472 -0
- package/dist/chain-preview.js.map +1 -0
- package/dist/client.d.ts +43 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +402 -0
- package/dist/client.js.map +1 -0
- package/dist/commands.d.ts +22 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +99 -0
- package/dist/commands.js.map +1 -0
- package/dist/footer.d.ts +34 -0
- package/dist/footer.d.ts.map +1 -0
- package/dist/footer.js +249 -0
- package/dist/footer.js.map +1 -0
- package/dist/handlers.d.ts +24 -0
- package/dist/handlers.d.ts.map +1 -0
- package/dist/handlers.js +83 -0
- package/dist/handlers.js.map +1 -0
- package/dist/hub-overlay.d.ts +107 -0
- package/dist/hub-overlay.d.ts.map +1 -0
- package/dist/hub-overlay.js +1794 -0
- package/dist/hub-overlay.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1585 -0
- package/dist/index.js.map +1 -0
- package/dist/output-viewer.d.ts +49 -0
- package/dist/output-viewer.d.ts.map +1 -0
- package/dist/output-viewer.js +389 -0
- package/dist/output-viewer.js.map +1 -0
- package/dist/overlay.d.ts +40 -0
- package/dist/overlay.d.ts.map +1 -0
- package/dist/overlay.js +225 -0
- package/dist/overlay.js.map +1 -0
- package/dist/protocol.d.ts +118 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +3 -0
- package/dist/protocol.js.map +1 -0
- package/dist/remote-session.d.ts +113 -0
- package/dist/remote-session.d.ts.map +1 -0
- package/dist/remote-session.js +645 -0
- package/dist/remote-session.js.map +1 -0
- package/dist/remote-tui.d.ts +40 -0
- package/dist/remote-tui.d.ts.map +1 -0
- package/dist/remote-tui.js +606 -0
- package/dist/remote-tui.js.map +1 -0
- package/dist/renderers.d.ts +34 -0
- package/dist/renderers.d.ts.map +1 -0
- package/dist/renderers.js +669 -0
- package/dist/renderers.js.map +1 -0
- package/dist/review.d.ts +15 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +154 -0
- package/dist/review.js.map +1 -0
- package/dist/titlebar.d.ts +3 -0
- package/dist/titlebar.d.ts.map +1 -0
- package/dist/titlebar.js +59 -0
- package/dist/titlebar.js.map +1 -0
- package/dist/todo/index.d.ts +3 -0
- package/dist/todo/index.d.ts.map +1 -0
- package/dist/todo/index.js +3 -0
- package/dist/todo/index.js.map +1 -0
- package/dist/todo/store.d.ts +6 -0
- package/dist/todo/store.d.ts.map +1 -0
- package/dist/todo/store.js +43 -0
- package/dist/todo/store.js.map +1 -0
- package/dist/todo/types.d.ts +13 -0
- package/dist/todo/types.d.ts.map +1 -0
- package/dist/todo/types.js +2 -0
- package/dist/todo/types.js.map +1 -0
- package/package.json +44 -0
- package/src/chain-preview.ts +621 -0
- package/src/client.ts +515 -0
- package/src/commands.ts +132 -0
- package/src/footer.ts +305 -0
- package/src/handlers.ts +113 -0
- package/src/hub-overlay.ts +2324 -0
- package/src/index.ts +1907 -0
- package/src/output-viewer.ts +480 -0
- package/src/overlay.ts +294 -0
- package/src/protocol.ts +157 -0
- package/src/remote-session.ts +800 -0
- package/src/remote-tui.ts +707 -0
- package/src/renderers.ts +740 -0
- package/src/review.ts +201 -0
- package/src/titlebar.ts +63 -0
- package/src/todo/index.ts +2 -0
- package/src/todo/store.ts +49 -0
- package/src/todo/types.ts +14 -0
package/dist/footer.js
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coder footer for the Pi TUI.
|
|
3
|
+
*
|
|
4
|
+
* Uses transparent backgrounds with foreground-only ANSI true-color text.
|
|
5
|
+
* Includes a braille spinner animation when an agent is actively working.
|
|
6
|
+
*
|
|
7
|
+
* Layout:
|
|
8
|
+
* [brand] [branch] > [model/agent] [hub] | [N] label token-stats
|
|
9
|
+
*
|
|
10
|
+
* Observer awareness (ASCII only):
|
|
11
|
+
* [3] SwiftRaven — 3 observers watching, session label "SwiftRaven"
|
|
12
|
+
*/
|
|
13
|
+
const RESET = '\x1b[0m';
|
|
14
|
+
const SEP = '>';
|
|
15
|
+
function fg(color, text) {
|
|
16
|
+
return `\x1b[38;2;${color[0]};${color[1]};${color[2]}m${text}`;
|
|
17
|
+
}
|
|
18
|
+
// ──────────────────────────────────────────────
|
|
19
|
+
// Color palette (foreground only, no backgrounds)
|
|
20
|
+
// ──────────────────────────────────────────────
|
|
21
|
+
const FG_BRAND = [100, 200, 255];
|
|
22
|
+
const FG_MODEL = [215, 135, 175];
|
|
23
|
+
const FG_AGENT = [130, 200, 130];
|
|
24
|
+
const FG_BRANCH = [150, 180, 150];
|
|
25
|
+
const FG_HUB_OK = [80, 200, 120];
|
|
26
|
+
const FG_HUB_WARN = [245, 179, 66];
|
|
27
|
+
const FG_HUB_ERR = [220, 80, 80];
|
|
28
|
+
const FG_DIM = [100, 110, 120];
|
|
29
|
+
const FG_OBSERVER = [140, 180, 220];
|
|
30
|
+
// ──────────────────────────────────────────────
|
|
31
|
+
// Braille spinner
|
|
32
|
+
// ──────────────────────────────────────────────
|
|
33
|
+
const SPINNER_FRAMES = [
|
|
34
|
+
'\u280B',
|
|
35
|
+
'\u2819',
|
|
36
|
+
'\u2839',
|
|
37
|
+
'\u2838',
|
|
38
|
+
'\u283C',
|
|
39
|
+
'\u2834',
|
|
40
|
+
'\u2826',
|
|
41
|
+
'\u2827',
|
|
42
|
+
'\u2807',
|
|
43
|
+
'\u280F',
|
|
44
|
+
];
|
|
45
|
+
// ──────────────────────────────────────────────
|
|
46
|
+
// Footer builder (transparent bg, foreground only)
|
|
47
|
+
// ──────────────────────────────────────────────
|
|
48
|
+
/** Strip ANSI escape sequences to get visible character count. */
|
|
49
|
+
function visibleLength(str) {
|
|
50
|
+
// eslint-disable-next-line no-control-regex
|
|
51
|
+
return str.replace(/\x1b\[[0-9;]*m/g, '').length;
|
|
52
|
+
}
|
|
53
|
+
/** Truncate an ANSI-colored string to a maximum visible width. */
|
|
54
|
+
function truncateAnsi(str, maxWidth) {
|
|
55
|
+
let visible = 0;
|
|
56
|
+
let i = 0;
|
|
57
|
+
while (i < str.length && visible < maxWidth) {
|
|
58
|
+
if (str[i] === '\x1b') {
|
|
59
|
+
// Skip entire ANSI escape sequence
|
|
60
|
+
const end = str.indexOf('m', i);
|
|
61
|
+
if (end !== -1) {
|
|
62
|
+
i = end + 1;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
i++;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
visible++;
|
|
70
|
+
i++;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return str.slice(0, i) + RESET;
|
|
74
|
+
}
|
|
75
|
+
function buildFooter(left, rightText, width) {
|
|
76
|
+
// Safety margin for Unicode characters that may be double-width
|
|
77
|
+
const safeWidth = width - 4;
|
|
78
|
+
const leftLen = visibleLength(left);
|
|
79
|
+
const rightLen = visibleLength(rightText);
|
|
80
|
+
const total = leftLen + 1 + rightLen;
|
|
81
|
+
if (total > safeWidth) {
|
|
82
|
+
const maxLeft = safeWidth - rightLen - 1;
|
|
83
|
+
if (maxLeft > 0) {
|
|
84
|
+
return truncateAnsi(left, maxLeft) + ' ' + rightText;
|
|
85
|
+
}
|
|
86
|
+
return truncateAnsi(left + ' ' + rightText, safeWidth);
|
|
87
|
+
}
|
|
88
|
+
const gap = safeWidth - leftLen - rightLen;
|
|
89
|
+
return left + ' '.repeat(gap) + rightText;
|
|
90
|
+
}
|
|
91
|
+
// ──────────────────────────────────────────────
|
|
92
|
+
// Minimal component
|
|
93
|
+
// ──────────────────────────────────────────────
|
|
94
|
+
class FooterComponent {
|
|
95
|
+
getText;
|
|
96
|
+
_unsubscribeBranch;
|
|
97
|
+
constructor(getText, footerData, cleanupSpinner) {
|
|
98
|
+
this.getText = getText;
|
|
99
|
+
this._cleanupSpinner = cleanupSpinner;
|
|
100
|
+
this._unsubscribeBranch = footerData.onBranchChange(() => {
|
|
101
|
+
// Triggers TUI refresh
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
_cleanupSpinner;
|
|
105
|
+
render(width) {
|
|
106
|
+
const text = this.getText(width);
|
|
107
|
+
// Final safety: ensure line never exceeds terminal width
|
|
108
|
+
if (visibleLength(text) > width) {
|
|
109
|
+
return [truncateAnsi(text, width)];
|
|
110
|
+
}
|
|
111
|
+
return [text];
|
|
112
|
+
}
|
|
113
|
+
invalidate() {
|
|
114
|
+
// no-op
|
|
115
|
+
}
|
|
116
|
+
dispose() {
|
|
117
|
+
this._unsubscribeBranch?.();
|
|
118
|
+
this._cleanupSpinner();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// ──────────────────────────────────────────────
|
|
122
|
+
// Token stat formatters
|
|
123
|
+
// ──────────────────────────────────────────────
|
|
124
|
+
function formatTokens(n) {
|
|
125
|
+
if (n >= 1_000_000)
|
|
126
|
+
return `${(n / 1_000_000).toFixed(1)}M`;
|
|
127
|
+
if (n >= 1_000)
|
|
128
|
+
return `${(n / 1_000).toFixed(1)}K`;
|
|
129
|
+
return String(n);
|
|
130
|
+
}
|
|
131
|
+
function formatCost(n) {
|
|
132
|
+
if (n === 0)
|
|
133
|
+
return '$0.00';
|
|
134
|
+
if (n < 0.01)
|
|
135
|
+
return `$${n.toFixed(4)}`;
|
|
136
|
+
return `$${n.toFixed(2)}`;
|
|
137
|
+
}
|
|
138
|
+
// ──────────────────────────────────────────────
|
|
139
|
+
// Public API
|
|
140
|
+
// ──────────────────────────────────────────────
|
|
141
|
+
/**
|
|
142
|
+
* Set up the Coder footer (transparent bg, foreground-colored text).
|
|
143
|
+
* Call this once with the extension context to replace Pi's default footer.
|
|
144
|
+
*
|
|
145
|
+
* Includes a braille spinner animation when an agent is actively working.
|
|
146
|
+
*
|
|
147
|
+
* @param ctx Extension context with UI access
|
|
148
|
+
* @param getHubStatus Callback that returns current Hub connection status
|
|
149
|
+
* @param getObserverState Optional callback that returns observer count + session label
|
|
150
|
+
*/
|
|
151
|
+
export function setupCoderFooter(ctx, getHubStatus, getObserverState) {
|
|
152
|
+
if (!ctx.hasUI)
|
|
153
|
+
return;
|
|
154
|
+
ctx.ui.setFooter((tui, _theme, footerData) => {
|
|
155
|
+
// Spinner state
|
|
156
|
+
let spinnerTimer = null;
|
|
157
|
+
let spinnerFrame = 0;
|
|
158
|
+
const getText = (width) => {
|
|
159
|
+
// Detect active agent
|
|
160
|
+
const activeAgent = footerData.getExtensionStatuses().get('active_agent');
|
|
161
|
+
// Start/stop spinner based on agent activity
|
|
162
|
+
if (activeAgent && !spinnerTimer) {
|
|
163
|
+
spinnerTimer = setInterval(() => {
|
|
164
|
+
spinnerFrame = (spinnerFrame + 1) % SPINNER_FRAMES.length;
|
|
165
|
+
tui.requestRender();
|
|
166
|
+
}, 80);
|
|
167
|
+
}
|
|
168
|
+
else if (!activeAgent && spinnerTimer) {
|
|
169
|
+
clearInterval(spinnerTimer);
|
|
170
|
+
spinnerTimer = null;
|
|
171
|
+
spinnerFrame = 0;
|
|
172
|
+
}
|
|
173
|
+
// Token stats from session messages
|
|
174
|
+
let inputTokens = 0;
|
|
175
|
+
let outputTokens = 0;
|
|
176
|
+
let totalCost = 0;
|
|
177
|
+
for (const entry of ctx.sessionManager.getBranch()) {
|
|
178
|
+
if (entry.type === 'message') {
|
|
179
|
+
const msg = entry.message;
|
|
180
|
+
if (msg.role === 'assistant' && msg.usage) {
|
|
181
|
+
inputTokens += msg.usage.input;
|
|
182
|
+
outputTokens += msg.usage.output;
|
|
183
|
+
totalCost += msg.usage.cost.total;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
const tokenStr = `\u2191${formatTokens(inputTokens)} \u2193${formatTokens(outputTokens)} ${formatCost(totalCost)}`;
|
|
188
|
+
// LEFT side: brand > branch > model/agent
|
|
189
|
+
const leftParts = [];
|
|
190
|
+
// Brand (with spinner)
|
|
191
|
+
const brandChar = spinnerTimer ? SPINNER_FRAMES[spinnerFrame] : '\u2A3A';
|
|
192
|
+
leftParts.push(fg(FG_BRAND, ` ${brandChar}`));
|
|
193
|
+
// Branch
|
|
194
|
+
const branch = footerData.getGitBranch();
|
|
195
|
+
if (branch) {
|
|
196
|
+
leftParts.push(' ');
|
|
197
|
+
leftParts.push(fg(FG_BRANCH, branch));
|
|
198
|
+
}
|
|
199
|
+
// Model or active agent
|
|
200
|
+
leftParts.push(fg(FG_DIM, ` ${SEP} `));
|
|
201
|
+
if (activeAgent) {
|
|
202
|
+
leftParts.push(fg(FG_AGENT, activeAgent));
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
const modelId = ctx.model ? String(ctx.model.id ?? '?') : '?';
|
|
206
|
+
leftParts.push(fg(FG_MODEL, modelId));
|
|
207
|
+
}
|
|
208
|
+
const left = leftParts.join('');
|
|
209
|
+
// RIGHT side: hub status + observer info + token stats
|
|
210
|
+
const rightParts = [];
|
|
211
|
+
const hubStatus = getHubStatus();
|
|
212
|
+
if (hubStatus === 'connected') {
|
|
213
|
+
rightParts.push(fg(FG_HUB_OK, 'Hub'));
|
|
214
|
+
}
|
|
215
|
+
else if (hubStatus === 'reconnecting') {
|
|
216
|
+
rightParts.push(fg(FG_HUB_WARN, 'Hub...'));
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
rightParts.push(fg(FG_HUB_ERR, 'Hub Off'));
|
|
220
|
+
}
|
|
221
|
+
// Observer awareness (ASCII only, no emojis)
|
|
222
|
+
if (getObserverState && hubStatus === 'connected') {
|
|
223
|
+
const obs = getObserverState();
|
|
224
|
+
if (obs.count > 0 || obs.label) {
|
|
225
|
+
rightParts.push(fg(FG_DIM, ' | '));
|
|
226
|
+
if (obs.count > 0) {
|
|
227
|
+
rightParts.push(fg(FG_OBSERVER, `[${obs.count}]`));
|
|
228
|
+
if (obs.label)
|
|
229
|
+
rightParts.push(' ');
|
|
230
|
+
}
|
|
231
|
+
if (obs.label) {
|
|
232
|
+
rightParts.push(fg(FG_OBSERVER, obs.label));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
rightParts.push(fg(FG_DIM, ` ${tokenStr}`) + RESET);
|
|
237
|
+
const rightText = rightParts.join('');
|
|
238
|
+
return buildFooter(left, rightText, width);
|
|
239
|
+
};
|
|
240
|
+
const cleanupSpinner = () => {
|
|
241
|
+
if (spinnerTimer) {
|
|
242
|
+
clearInterval(spinnerTimer);
|
|
243
|
+
spinnerTimer = null;
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
return new FooterComponent(getText, footerData, cleanupSpinner);
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"footer.js","sourceRoot":"","sources":["../src/footer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { HubAction } from './protocol.ts';
|
|
2
|
+
export interface ActionResult {
|
|
3
|
+
block?: {
|
|
4
|
+
block: true;
|
|
5
|
+
reason: string;
|
|
6
|
+
};
|
|
7
|
+
returnValue?: unknown;
|
|
8
|
+
systemPrompt?: string;
|
|
9
|
+
systemPromptMode?: 'replace' | 'prefix' | 'suffix';
|
|
10
|
+
}
|
|
11
|
+
/** Minimal UI surface used by action handlers — avoids a hard dep on pi-coding-agent. */
|
|
12
|
+
interface ActionContext {
|
|
13
|
+
ui?: {
|
|
14
|
+
notify(message: string, level?: 'info' | 'warning' | 'error'): void;
|
|
15
|
+
confirm(title: string, message: string): Promise<boolean>;
|
|
16
|
+
setStatus(key: string, text?: string): void;
|
|
17
|
+
};
|
|
18
|
+
sendUserMessage?: (message: string, options?: {
|
|
19
|
+
deliverAs?: 'followUp';
|
|
20
|
+
}) => void;
|
|
21
|
+
}
|
|
22
|
+
export declare function processActions(actions: HubAction[], ctx: ActionContext): Promise<ActionResult>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC5B,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;CAEnD;AAED,yFAAyF;AACzF,UAAU,aAAa;IACtB,EAAE,CAAC,EAAE;QACJ,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC;QACpE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5C,CAAC;IACF,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,CAAC;CAClF;AAED,wBAAsB,cAAc,CACnC,OAAO,EAAE,SAAS,EAAE,EACpB,GAAG,EAAE,aAAa,GAChB,OAAO,CAAC,YAAY,CAAC,CAyFvB"}
|
package/dist/handlers.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export async function processActions(actions, ctx) {
|
|
2
|
+
let result = {};
|
|
3
|
+
for (const action of actions) {
|
|
4
|
+
switch (action.action) {
|
|
5
|
+
case 'ACK':
|
|
6
|
+
// Terminal: proceed normally
|
|
7
|
+
result = {};
|
|
8
|
+
break;
|
|
9
|
+
case 'BLOCK':
|
|
10
|
+
// Terminal: block
|
|
11
|
+
result = { block: { block: true, reason: action.reason } };
|
|
12
|
+
break;
|
|
13
|
+
case 'RETURN':
|
|
14
|
+
// Terminal: return a specific result
|
|
15
|
+
result = { returnValue: action.result };
|
|
16
|
+
break;
|
|
17
|
+
case 'NOTIFY':
|
|
18
|
+
// Side effect: show notification, continue
|
|
19
|
+
if (ctx?.ui) {
|
|
20
|
+
ctx.ui.notify(action.message, action.level ?? 'info');
|
|
21
|
+
}
|
|
22
|
+
break;
|
|
23
|
+
case 'STATUS':
|
|
24
|
+
// Side effect: set status, continue
|
|
25
|
+
if (ctx?.ui) {
|
|
26
|
+
ctx.ui.setStatus(action.key, action.text);
|
|
27
|
+
}
|
|
28
|
+
break;
|
|
29
|
+
case 'CONFIRM': {
|
|
30
|
+
// Gate: if user denies, stop and block
|
|
31
|
+
if (ctx?.ui) {
|
|
32
|
+
const confirmed = await ctx.ui.confirm(action.title, action.message);
|
|
33
|
+
if (!confirmed) {
|
|
34
|
+
return {
|
|
35
|
+
block: {
|
|
36
|
+
block: true,
|
|
37
|
+
reason: action.deny_reason ?? 'Denied by user',
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// No UI available — block by default for safety
|
|
44
|
+
result = {
|
|
45
|
+
block: {
|
|
46
|
+
block: true,
|
|
47
|
+
reason: action.deny_reason ?? 'Confirmation required but no UI available',
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
case 'SYSTEM_PROMPT':
|
|
54
|
+
// System prompt injection — store for before_agent_start handler
|
|
55
|
+
result = {
|
|
56
|
+
...result,
|
|
57
|
+
systemPrompt: action.systemPrompt,
|
|
58
|
+
systemPromptMode: action.mode,
|
|
59
|
+
};
|
|
60
|
+
break;
|
|
61
|
+
case 'INJECT_MESSAGE': {
|
|
62
|
+
const content = action.message?.content?.trim();
|
|
63
|
+
if (!content)
|
|
64
|
+
break;
|
|
65
|
+
if (action.message?.role === 'user') {
|
|
66
|
+
if (ctx.sendUserMessage) {
|
|
67
|
+
ctx.sendUserMessage(content, { deliverAs: 'followUp' });
|
|
68
|
+
}
|
|
69
|
+
else if (ctx.ui) {
|
|
70
|
+
ctx.ui.notify(content, 'info');
|
|
71
|
+
}
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
if (ctx.ui) {
|
|
75
|
+
ctx.ui.notify(content, 'info');
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { type Theme } from '@mariozechner/pi-coding-agent';
|
|
2
|
+
interface Component {
|
|
3
|
+
render(width: number): string[];
|
|
4
|
+
handleInput?(data: string): void;
|
|
5
|
+
invalidate(): void;
|
|
6
|
+
}
|
|
7
|
+
interface Focusable {
|
|
8
|
+
focused: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface TUIRef {
|
|
11
|
+
requestRender(): void;
|
|
12
|
+
}
|
|
13
|
+
interface HubOverlayOptions {
|
|
14
|
+
baseUrl: string;
|
|
15
|
+
currentSessionId?: string;
|
|
16
|
+
initialSessionId?: string;
|
|
17
|
+
startInDetail?: boolean;
|
|
18
|
+
done: (result: undefined) => void;
|
|
19
|
+
}
|
|
20
|
+
export declare class HubOverlay implements Component, Focusable {
|
|
21
|
+
focused: boolean;
|
|
22
|
+
private readonly tui;
|
|
23
|
+
private readonly theme;
|
|
24
|
+
private readonly done;
|
|
25
|
+
private readonly baseUrl;
|
|
26
|
+
private readonly currentSessionId?;
|
|
27
|
+
private screen;
|
|
28
|
+
private selectedIndex;
|
|
29
|
+
private detailSessionId;
|
|
30
|
+
private detailScrollOffset;
|
|
31
|
+
private detailMaxScroll;
|
|
32
|
+
private feedScrollOffset;
|
|
33
|
+
private feedMaxScroll;
|
|
34
|
+
private feedScope;
|
|
35
|
+
private feedViewMode;
|
|
36
|
+
private showFeedThinking;
|
|
37
|
+
private feedFollowing;
|
|
38
|
+
private taskScrollOffset;
|
|
39
|
+
private taskMaxScroll;
|
|
40
|
+
private selectedTaskIndex;
|
|
41
|
+
private showTaskThinking;
|
|
42
|
+
private taskFollowing;
|
|
43
|
+
private sessions;
|
|
44
|
+
private detail;
|
|
45
|
+
private cachedTodos;
|
|
46
|
+
private feed;
|
|
47
|
+
private sessionFeed;
|
|
48
|
+
private sessionBuffers;
|
|
49
|
+
private taskBuffers;
|
|
50
|
+
private hydratedSessions;
|
|
51
|
+
private previousDigests;
|
|
52
|
+
private loadingList;
|
|
53
|
+
private loadingDetail;
|
|
54
|
+
private listError;
|
|
55
|
+
private detailError;
|
|
56
|
+
private lastUpdatedAt;
|
|
57
|
+
private listInFlight;
|
|
58
|
+
private detailInFlight;
|
|
59
|
+
private sseControllers;
|
|
60
|
+
private disposed;
|
|
61
|
+
private pollTimer;
|
|
62
|
+
private mdRenderer;
|
|
63
|
+
constructor(tui: TUIRef, theme: Theme, options: HubOverlayOptions);
|
|
64
|
+
handleInput(data: string): void;
|
|
65
|
+
render(width: number): string[];
|
|
66
|
+
invalidate(): void;
|
|
67
|
+
dispose(): void;
|
|
68
|
+
private requestRender;
|
|
69
|
+
private close;
|
|
70
|
+
private handleListInput;
|
|
71
|
+
private isSessionContext;
|
|
72
|
+
private handleDetailInput;
|
|
73
|
+
private handleFeedInput;
|
|
74
|
+
private handleTaskInput;
|
|
75
|
+
private getDetailTasks;
|
|
76
|
+
private getSessionBuffer;
|
|
77
|
+
private getTaskBuffer;
|
|
78
|
+
private appendBufferText;
|
|
79
|
+
private renderMarkdownLines;
|
|
80
|
+
private renderStreamLines;
|
|
81
|
+
private buildTopTabs;
|
|
82
|
+
private fetchJson;
|
|
83
|
+
private refreshList;
|
|
84
|
+
private refreshDetail;
|
|
85
|
+
private updateFeedFromList;
|
|
86
|
+
private syncSseStreams;
|
|
87
|
+
private startSseStream;
|
|
88
|
+
private consumeSseBuffer;
|
|
89
|
+
private handleSseEvent;
|
|
90
|
+
private applyHydration;
|
|
91
|
+
private applyStreamProjection;
|
|
92
|
+
private captureStreamContent;
|
|
93
|
+
private formatEventFeedLine;
|
|
94
|
+
private getSessionLabel;
|
|
95
|
+
private getFeedEntries;
|
|
96
|
+
private pushFeed;
|
|
97
|
+
private pushSessionFeed;
|
|
98
|
+
private formatStreamLine;
|
|
99
|
+
private getTaskFeedKey;
|
|
100
|
+
private renderListScreen;
|
|
101
|
+
private renderDetailScreen;
|
|
102
|
+
private renderFeedScreen;
|
|
103
|
+
private renderTaskScreen;
|
|
104
|
+
private contentLine;
|
|
105
|
+
}
|
|
106
|
+
export {};
|
|
107
|
+
//# sourceMappingURL=hub-overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-overlay.d.ts","sourceRoot":"","sources":["../src/hub-overlay.ts"],"names":[],"mappings":"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"}
|