pi-courier 0.1.37 → 0.1.39
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 +56 -3
- package/README.zh-CN.md +56 -3
- package/dist/auth/headless-login.d.ts +140 -0
- package/dist/auth/headless-login.d.ts.map +1 -0
- package/dist/auth/headless-login.js +386 -0
- package/dist/auth/headless-login.js.map +1 -0
- package/dist/quote-cache.d.ts +35 -0
- package/dist/quote-cache.d.ts.map +1 -0
- package/dist/quote-cache.js +51 -0
- package/dist/quote-cache.js.map +1 -0
- package/dist/rpc/command-map.d.ts +63 -0
- package/dist/rpc/command-map.d.ts.map +1 -1
- package/dist/rpc/command-map.js +327 -3
- package/dist/rpc/command-map.js.map +1 -1
- package/dist/rpc/message-router.d.ts +67 -2
- package/dist/rpc/message-router.d.ts.map +1 -1
- package/dist/rpc/message-router.js +297 -3
- package/dist/rpc/message-router.js.map +1 -1
- package/dist/rpc/pi-rpc.d.ts +64 -3
- package/dist/rpc/pi-rpc.d.ts.map +1 -1
- package/dist/rpc/pi-rpc.js +73 -16
- package/dist/rpc/pi-rpc.js.map +1 -1
- package/dist/rpc/project-manager.d.ts +5 -0
- package/dist/rpc/project-manager.d.ts.map +1 -1
- package/dist/rpc/project-manager.js +7 -0
- package/dist/rpc/project-manager.js.map +1 -1
- package/dist/transports/matrix.d.ts +2 -0
- package/dist/transports/matrix.d.ts.map +1 -1
- package/dist/transports/matrix.js +17 -0
- package/dist/transports/matrix.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/scripts/crypto-native-hashes.json +3 -0
- package/scripts/ensure-crypto-native.d.mts +84 -1
- package/scripts/ensure-crypto-native.mjs +338 -10
package/dist/rpc/command-map.js
CHANGED
|
@@ -14,10 +14,203 @@
|
|
|
14
14
|
* /help is unified HERE (pi commands + bridge admin commands) — the single
|
|
15
15
|
* help surface; ChallengeAuth no longer has its own help text.
|
|
16
16
|
*/
|
|
17
|
+
import * as fs from "node:fs";
|
|
18
|
+
import * as os from "node:os";
|
|
19
|
+
import * as path from "node:path";
|
|
17
20
|
import { adminCommandHelpText } from "../auth/admin-commands.js";
|
|
21
|
+
/** Collapse a queue entry to one bounded line for chat display. */
|
|
22
|
+
function truncateLine(text, max = 120) {
|
|
23
|
+
const oneLine = text.replace(/\s+/g, " ").trim();
|
|
24
|
+
return oneLine.length > max ? `${oneLine.slice(0, max)}…` : oneLine;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Unified queue warning for /stop and /interrupt replies: abort preserves the
|
|
28
|
+
* upstream queues (RPC has no clear_queue), so remaining messages would fire
|
|
29
|
+
* on the NEXT turn — surface that explicitly. Null when nothing is queued.
|
|
30
|
+
*/
|
|
31
|
+
export function queueWarning(snapshot) {
|
|
32
|
+
const steering = snapshot?.steering ?? [];
|
|
33
|
+
const followUp = snapshot?.followUp ?? [];
|
|
34
|
+
const total = steering.length + followUp.length;
|
|
35
|
+
if (total === 0)
|
|
36
|
+
return null;
|
|
37
|
+
const lines = [...steering, ...followUp].map((m) => `- ${truncateLine(m)}`);
|
|
38
|
+
return `⚠️ 队列中仍有 ${total} 条消息将在下一轮生效:\n${lines.join("\n")}`;
|
|
39
|
+
}
|
|
40
|
+
/** Append the queue warning (if any) to a reply line. */
|
|
41
|
+
function withQueueWarning(replyText, snapshot) {
|
|
42
|
+
const warning = queueWarning(snapshot);
|
|
43
|
+
return warning ? `${replyText}\n${warning}` : replyText;
|
|
44
|
+
}
|
|
45
|
+
/** The display name of an rpc in reload summaries (project label or 默认). */
|
|
46
|
+
function rpcDisplayName(rpc) {
|
|
47
|
+
return rpc.label ?? "默认";
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Restart every IDLE rpc of the instance so a fresh pi subprocess re-reads
|
|
51
|
+
* pi's credential/config files (issue #55: after /login writes credentials,
|
|
52
|
+
* and for /reload all). Busy (streaming) rpcs are skipped — an abrupt restart
|
|
53
|
+
* would kill a running turn; the room is told to /reload them later.
|
|
54
|
+
* Unqueryable rpcs (lazy, never started) are skipped: their FIRST start reads
|
|
55
|
+
* the fresh file anyway.
|
|
56
|
+
*/
|
|
57
|
+
export async function restartIdleRpcs(rpcs, onRestarted) {
|
|
58
|
+
const result = { restarted: [], busy: [], skipped: [] };
|
|
59
|
+
for (const rpc of rpcs) {
|
|
60
|
+
const name = rpcDisplayName(rpc);
|
|
61
|
+
try {
|
|
62
|
+
const state = await rpc.getState();
|
|
63
|
+
if (state.isStreaming) {
|
|
64
|
+
result.busy.push(name);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
await rpc.restart();
|
|
68
|
+
onRestarted?.(rpc);
|
|
69
|
+
result.restarted.push(name);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
result.skipped.push(name);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
/** Render a reload summary for the room. Pure — directly testable. */
|
|
78
|
+
export function formatReloadAllResult(result) {
|
|
79
|
+
const parts = [];
|
|
80
|
+
parts.push(result.restarted.length > 0
|
|
81
|
+
? `✅ 已重启 ${result.restarted.length} 个空闲进程: ${result.restarted.join("、")}`
|
|
82
|
+
: "💤 没有需要重启的空闲进程");
|
|
83
|
+
if (result.busy.length > 0) {
|
|
84
|
+
parts.push(`⚠️ 跳过 ${result.busy.length} 个忙碌进程: ${result.busy.join("、")}(完成后执行 /reload all)`);
|
|
85
|
+
}
|
|
86
|
+
if (result.skipped.length > 0) {
|
|
87
|
+
parts.push(`⏭️ 未启动/不可达(下次启动自动读取新配置): ${result.skipped.join("、")}`);
|
|
88
|
+
}
|
|
89
|
+
return parts.join("\n");
|
|
90
|
+
}
|
|
91
|
+
/** "/queue" without arguments — render the steering/followUp mirror. The
|
|
92
|
+
* pendingMessageCount cross-check runs on the EMPTY path too: a mirror that
|
|
93
|
+
* looks empty only because queue_update events were missed must not read as
|
|
94
|
+
* "queue is empty" when upstream still holds pending messages. */
|
|
95
|
+
async function replyQueueView(rpc, snapshot, reply) {
|
|
96
|
+
const steering = snapshot?.steering ?? [];
|
|
97
|
+
const followUp = snapshot?.followUp ?? [];
|
|
98
|
+
let upstream;
|
|
99
|
+
try {
|
|
100
|
+
const state = await rpc.getState();
|
|
101
|
+
if (typeof state.pendingMessageCount === "number")
|
|
102
|
+
upstream = state.pendingMessageCount;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// State query is best-effort; the mirror alone still serves the reply.
|
|
106
|
+
}
|
|
107
|
+
const mirrored = steering.length + followUp.length;
|
|
108
|
+
if (mirrored === 0) {
|
|
109
|
+
if (typeof upstream === "number" && upstream > 0) {
|
|
110
|
+
await reply(`📋 本地队列为空,但上游报告仍有 ${upstream} 条待处理消息(以实际执行为准)。`);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
await reply("📋 队列为空:没有排队中的 steering / followUp 消息。");
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const lines = ["📋 当前消息队列:"];
|
|
117
|
+
if (steering.length > 0) {
|
|
118
|
+
lines.push(`steering(${steering.length} 条,注入当前运行):`);
|
|
119
|
+
for (const m of steering)
|
|
120
|
+
lines.push(`- ${truncateLine(m)}`);
|
|
121
|
+
}
|
|
122
|
+
if (followUp.length > 0) {
|
|
123
|
+
lines.push(`followUp(${followUp.length} 条,后续轮次执行):`);
|
|
124
|
+
for (const m of followUp)
|
|
125
|
+
lines.push(`- ${truncateLine(m)}`);
|
|
126
|
+
}
|
|
127
|
+
// Cross-check the in-memory mirror against upstream's pendingMessageCount —
|
|
128
|
+
// a mismatch means the mirror is stale (e.g. events were missed); upstream wins.
|
|
129
|
+
if (typeof upstream === "number" && upstream !== mirrored) {
|
|
130
|
+
lines.push(`ℹ️ 上游报告待处理 ${upstream} 条(本地镜像 ${mirrored} 条),以实际执行为准。`);
|
|
131
|
+
}
|
|
132
|
+
await reply(lines.join("\n"));
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Scan a session dir for pi session files (*.jsonl), newest first. A missing
|
|
136
|
+
* or unreadable dir yields [] (the caller reports "找不到会话目录").
|
|
137
|
+
*/
|
|
138
|
+
export function listSessions(dir) {
|
|
139
|
+
let names;
|
|
140
|
+
try {
|
|
141
|
+
names = fs.readdirSync(dir);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
const sessions = [];
|
|
147
|
+
for (const file of names) {
|
|
148
|
+
if (!file.endsWith(".jsonl"))
|
|
149
|
+
continue;
|
|
150
|
+
const full = path.join(dir, file);
|
|
151
|
+
try {
|
|
152
|
+
sessions.push({ path: full, file, mtimeMs: fs.statSync(full).mtimeMs });
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Raced deletion between readdir and stat — skip.
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return sessions.sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
159
|
+
}
|
|
160
|
+
/** The session dir a process scans: its own --session-dir, else pi's default. */
|
|
161
|
+
export function resolveSessionDir(rpc) {
|
|
162
|
+
return rpc.sessionDir ?? path.join(os.homedir(), ".pi", "agent", "sessions");
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Display name of a session: the LAST "session_info" entry's name field.
|
|
166
|
+
* Regex-scanned per jsonl line (no full JSON parse); giant files skip the
|
|
167
|
+
* lookup — the name is a display nicety, never load-bearing.
|
|
168
|
+
*/
|
|
169
|
+
export function readSessionName(filePath) {
|
|
170
|
+
try {
|
|
171
|
+
if (fs.statSync(filePath).size > 2 * 1024 * 1024)
|
|
172
|
+
return undefined;
|
|
173
|
+
const text = fs.readFileSync(filePath, "utf-8");
|
|
174
|
+
let last;
|
|
175
|
+
for (const match of text.matchAll(/"type":"session_info".*?"name":"((?:[^"\\]|\\.)*)"/g)) {
|
|
176
|
+
try {
|
|
177
|
+
last = JSON.parse(`"${match[1]}"`);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
last = match[1];
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const name = last?.replace(/\s+/g, " ").trim();
|
|
184
|
+
return name || undefined;
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return undefined;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/** Compact local time for the /sessions list: YYYY-MM-DD HH:mm. */
|
|
191
|
+
function formatMtime(ms) {
|
|
192
|
+
const d = new Date(ms);
|
|
193
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
194
|
+
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;
|
|
195
|
+
}
|
|
196
|
+
/** "/sessions" — the top-10 newest sessions with a /switch hint. */
|
|
197
|
+
async function replySessionList(rpc, reply) {
|
|
198
|
+
const dir = resolveSessionDir(rpc);
|
|
199
|
+
const sessions = listSessions(dir).slice(0, 10);
|
|
200
|
+
if (sessions.length === 0) {
|
|
201
|
+
const reason = fs.existsSync(dir) ? "会话目录为空" : "找不到会话目录";
|
|
202
|
+
await reply(`📭 ${reason}: ${dir}`);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const lines = sessions.map((s, i) => {
|
|
206
|
+
const name = readSessionName(s.path);
|
|
207
|
+
return `${i + 1}. ${s.file} ${formatMtime(s.mtimeMs)}${name ? ` ${name}` : ""}`;
|
|
208
|
+
});
|
|
209
|
+
await reply(`📚 会话(最近修改优先):\n${lines.join("\n")}\n\n用 /switch <序号> 切换。`);
|
|
210
|
+
}
|
|
18
211
|
/** Returns true if the command was handled (something was done / replied). */
|
|
19
212
|
export async function handleSlashCommand(text, ctx) {
|
|
20
|
-
const { rpc, reply } = ctx;
|
|
213
|
+
const { rpc, reply, queueView } = ctx;
|
|
21
214
|
const trimmed = text.trim();
|
|
22
215
|
if (!trimmed.startsWith("/"))
|
|
23
216
|
return false;
|
|
@@ -46,13 +239,133 @@ export async function handleSlashCommand(text, ctx) {
|
|
|
46
239
|
case "/stop":
|
|
47
240
|
case "/abort": {
|
|
48
241
|
await rpc.abort();
|
|
49
|
-
|
|
242
|
+
// abort preserves the upstream queues (RPC has no clear_queue) — the
|
|
243
|
+
// warning makes that limitation explicit instead of surprising the user.
|
|
244
|
+
await reply(withQueueWarning("🛑 已停止所有任务,等待下一步指示。", queueView?.()));
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
// --- Send semantics (pi TUI parity) -------------------------------------
|
|
248
|
+
case "/queue": {
|
|
249
|
+
if (!args) {
|
|
250
|
+
await replyQueueView(rpc, queueView?.(), reply);
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
// Alt+Enter semantics: followUp queue while streaming; an idle session
|
|
254
|
+
// degenerates to a plain prompt upstream (deliberately no state check).
|
|
255
|
+
await rpc.promptQueued(args);
|
|
256
|
+
await reply("📥 已排队:不打断当前任务,将在空闲后自动执行。");
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
case "/interrupt": {
|
|
260
|
+
if (!args) {
|
|
261
|
+
await reply("用法: /interrupt <新指令> — 打断当前任务并立即下发新指令。");
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
const state = await rpc.getState();
|
|
265
|
+
if (!state.isStreaming) {
|
|
266
|
+
await rpc.prompt(args);
|
|
267
|
+
await reply("▶️ 当前没有运行中的任务,已直接下发新指令。");
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
await rpc.abort();
|
|
271
|
+
await rpc.waitForIdle();
|
|
272
|
+
await rpc.prompt(args);
|
|
273
|
+
await reply(withQueueWarning("🛑 已打断,新指令已发出。", queueView?.()));
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
// --- Small utilities (issue #56 票5) ------------------------------------
|
|
277
|
+
case "/last": {
|
|
278
|
+
const last = await rpc.getLastAssistantText();
|
|
279
|
+
const text = last?.trim();
|
|
280
|
+
if (!text) {
|
|
281
|
+
await reply("💤 没有可复述的回复(本会话还没有 assistant 输出)。");
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
await reply(text.length > 3000 ? `${text.slice(0, 3000)}\n…(已截断)` : text);
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
case "/cyclemodel": {
|
|
288
|
+
const result = await rpc.cycleModel();
|
|
289
|
+
if (!result) {
|
|
290
|
+
await reply("❌ 没有可轮换的模型(启动未限定模型列表?)。用 /model <provider/id> 直接指定。");
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
await reply(`✅ 已切换模型: ${result.model.provider}/${result.model.id}(思考: ${result.thinkingLevel})`);
|
|
294
|
+
return true;
|
|
295
|
+
}
|
|
296
|
+
case "/cyclethinking": {
|
|
297
|
+
const result = await rpc.cycleThinkingLevel();
|
|
298
|
+
if (!result) {
|
|
299
|
+
await reply("❌ 没有可轮换的思考级别。");
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
await reply(`✅ 思考级别已轮换为: ${result.level}`);
|
|
303
|
+
return true;
|
|
304
|
+
}
|
|
305
|
+
case "/autocompact": {
|
|
306
|
+
const arg = args.toLowerCase();
|
|
307
|
+
if (arg !== "on" && arg !== "off") {
|
|
308
|
+
const state = await rpc.getState();
|
|
309
|
+
await reply(`当前自动压缩: ${state.autoCompactionEnabled ? "开" : "关"}\n` +
|
|
310
|
+
"用法: /autocompact on|off(实例级生效:写入 pi 全局设置,一个项目房间切换影响全部项目)");
|
|
311
|
+
return true;
|
|
312
|
+
}
|
|
313
|
+
await rpc.setAutoCompaction(arg === "on");
|
|
314
|
+
await reply(`✅ 自动压缩已${arg === "on" ? "开启" : "关闭"}(实例级生效)。`);
|
|
315
|
+
return true;
|
|
316
|
+
}
|
|
317
|
+
case "/autoretry": {
|
|
318
|
+
const arg = args.toLowerCase();
|
|
319
|
+
if (arg !== "on" && arg !== "off") {
|
|
320
|
+
// RpcSessionState exposes no autoRetry query field — usage only.
|
|
321
|
+
await reply("用法: /autoretry on|off\n(上游未暴露当前状态查询;实例级生效:写入 pi 全局设置,一个项目房间切换影响全部项目)");
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
await rpc.setAutoRetry(arg === "on");
|
|
325
|
+
await reply(`✅ 自动重试已${arg === "on" ? "开启" : "关闭"}(实例级生效)。`);
|
|
326
|
+
return true;
|
|
327
|
+
}
|
|
328
|
+
case "/sessions": {
|
|
329
|
+
await replySessionList(rpc, reply);
|
|
330
|
+
return true;
|
|
331
|
+
}
|
|
332
|
+
case "/switch": {
|
|
333
|
+
const state = await rpc.getState();
|
|
334
|
+
if (state.isStreaming) {
|
|
335
|
+
await reply("⚠️ 当前任务流式进行中,请先 /stop 再切换会话。");
|
|
336
|
+
return true;
|
|
337
|
+
}
|
|
338
|
+
const index = Number.parseInt(args, 10);
|
|
339
|
+
if (!args || Number.isNaN(index) || index < 1) {
|
|
340
|
+
await reply("用法: /switch <序号> — 切换到 /sessions 列表中的会话。");
|
|
341
|
+
return true;
|
|
342
|
+
}
|
|
343
|
+
const sessions = listSessions(resolveSessionDir(rpc)).slice(0, 10);
|
|
344
|
+
const target = sessions[index - 1];
|
|
345
|
+
if (!target) {
|
|
346
|
+
await reply(`❌ 序号超出范围: ${index}(用 /sessions 查看当前列表)。`);
|
|
347
|
+
return true;
|
|
348
|
+
}
|
|
349
|
+
const result = await rpc.switchSession(target.path);
|
|
350
|
+
await reply(result.cancelled ? "⚠️ 切换会话被扩展取消" : `✅ 已切换会话: ${target.file}`);
|
|
50
351
|
return true;
|
|
51
352
|
}
|
|
52
353
|
case "/reload": {
|
|
354
|
+
// /reload all (issue #55): every rpc of the instance, idle ones only.
|
|
355
|
+
if (args === "all") {
|
|
356
|
+
if (!ctx.allRpcs) {
|
|
357
|
+
await reply("❌ /reload all 不可用(当前部署未启用多进程枚举)。");
|
|
358
|
+
return true;
|
|
359
|
+
}
|
|
360
|
+
await reply("🔄 正在逐个重启全部 pi 进程(空闲才重启,忙碌跳过)…");
|
|
361
|
+
const result = await restartIdleRpcs(ctx.allRpcs(), ctx.clearRpcState);
|
|
362
|
+
await reply(formatReloadAllResult(result));
|
|
363
|
+
return true;
|
|
364
|
+
}
|
|
53
365
|
await reply("🔄 正在重启 pi 进程(扩展/技能/配置将重新加载)…");
|
|
54
366
|
try {
|
|
55
367
|
await rpc.restart();
|
|
368
|
+
ctx.clearRpcState?.(rpc);
|
|
56
369
|
const state = await rpc.getState();
|
|
57
370
|
await reply(`✅ pi 已重启,模型: ${state.model?.id ?? "unknown"}`);
|
|
58
371
|
}
|
|
@@ -197,13 +510,24 @@ function helpText() {
|
|
|
197
510
|
"• `/model` / `/model <provider/id>` — 查看/切换模型",
|
|
198
511
|
"• `/models` — 列出可用模型",
|
|
199
512
|
"• `/thinking [level]` — 查看/设置思考级别",
|
|
513
|
+
"• `/cyclemodel` / `/cyclethinking` — 轮换到下一个模型 / 思考级别",
|
|
514
|
+
"• `/autocompact on|off` — 自动压缩开关(实例级生效:写入 pi 全局设置,一个项目房间切换影响全部项目)",
|
|
515
|
+
"• `/autoretry on|off` — 自动重试开关(实例级生效,同上)",
|
|
516
|
+
"• `/sessions` — 列出最近会话(按修改时间)",
|
|
517
|
+
"• `/switch <序号>` — 切换到 /sessions 列出的会话(流式中需先 /stop)",
|
|
518
|
+
"• `/last` — 复述 agent 最近一次回复",
|
|
200
519
|
"• `/session` — 会话统计与费用",
|
|
201
520
|
"• `/status` — 当前模型与状态",
|
|
202
521
|
"• `/name <名字>` — 会话命名",
|
|
203
522
|
"• `/export [路径]` — 导出会话 HTML",
|
|
204
523
|
"• `/bash <命令>` — 执行 shell 命令(写入上下文)",
|
|
524
|
+
"• `/queue [文本]` — 无参:查看队列;带文本:排队不打断当前任务(≈ Alt+Enter)",
|
|
525
|
+
"• `/interrupt <新指令>` — 打断当前任务并立即下发新指令(一条消息完成)",
|
|
205
526
|
"• `/stop` — 立即停止所有任务(≈ TUI 的 Esc;别名 `/abort`)",
|
|
206
|
-
"• `/reload` — 重启 pi 进程(装插件/改配置后使用)",
|
|
527
|
+
"• `/reload` — 重启 pi 进程(装插件/改配置后使用);`/reload all` — 重启本实例全部进程(空闲才重启,忙碌跳过)",
|
|
528
|
+
"• `/login [provider [oauth|api_key]]` — 无参:可登录 provider 列表;带参:无头登录(仅管理员 + 管理房间)",
|
|
529
|
+
"• `/logout <provider>` — 删除 provider 凭据(仅管理员 + 管理房间)",
|
|
530
|
+
"• `/auth` — 查看已保存的 provider 凭据(仅管理员 + 管理房间)",
|
|
207
531
|
"• `/pmctl new <名称> <路径>` — 创建项目(管理房间)",
|
|
208
532
|
"• `/pmctl list` — 项目列表",
|
|
209
533
|
"• `/pmctl show|rm|mv|rename` — 项目详情/删除/迁移/重命名(管理房间;",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-map.js","sourceRoot":"","sources":["../../src/rpc/command-map.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-map.js","sourceRoot":"","sources":["../../src/rpc/command-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,9 +7,10 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { AssistantMessage } from "@earendil-works/pi-ai";
|
|
9
9
|
import { type ChallengeAuth } from "../auth/challenge-auth.js";
|
|
10
|
+
import { LoginManager } from "../auth/headless-login.js";
|
|
10
11
|
import { type ConfigStore } from "../config.js";
|
|
11
12
|
import type { RoomOps } from "../transports/interface.js";
|
|
12
|
-
import type { ExternalMessage } from "../types.js";
|
|
13
|
+
import type { ExternalMessage, MsgBridgeConfig } from "../types.js";
|
|
13
14
|
import type { PiRpc } from "./pi-rpc.js";
|
|
14
15
|
import type { PmctlController } from "./pmctl-controller.js";
|
|
15
16
|
import type { ProjectManager } from "./project-manager.js";
|
|
@@ -34,6 +35,10 @@ export interface MessageRouterDeps {
|
|
|
34
35
|
* reserved for the degraded path (space ensure failed this run). Absent
|
|
35
36
|
* = always allowed (legacy deployments). */
|
|
36
37
|
managementRoomAdoptionAllowed?: () => boolean;
|
|
38
|
+
/** Headless login (issue #55): owns /login /logout /auth and captures the
|
|
39
|
+
* answers of in-flight login flows. Injected by tests (mock runtime);
|
|
40
|
+
* defaults to a real ModelRuntime at pi's standard credential file. */
|
|
41
|
+
login?: LoginManager;
|
|
37
42
|
}
|
|
38
43
|
export interface MessageRouter {
|
|
39
44
|
/** Handle an incoming messenger message */
|
|
@@ -43,10 +48,70 @@ export interface MessageRouter {
|
|
|
43
48
|
handleEvent(rawEvent: unknown, rpc: PiRpc): void;
|
|
44
49
|
}
|
|
45
50
|
/** Format a completed turn into reply text. Returns text = null when the turn
|
|
46
|
-
* has no replyable content (the binding is kept for the follow-up turn).
|
|
51
|
+
* has no replyable content (the binding is kept for the follow-up turn).
|
|
52
|
+
* Error turns (stopReason "error") always yield replyable text — the failure
|
|
53
|
+
* line rides along even when the model produced no content (issue #52). */
|
|
47
54
|
export declare function buildTurnReply(message: AssistantMessage, hideToolCalls?: boolean): {
|
|
48
55
|
text: string | null;
|
|
49
56
|
pendingTools: boolean;
|
|
50
57
|
};
|
|
58
|
+
/**
|
|
59
|
+
* Extension UI (issue #54): extensions ask the user questions over RPC
|
|
60
|
+
* (confirm/select/input/editor). The courier posts the question to the bound
|
|
61
|
+
* room; the user's next plain message IS the answer. A courier-side timeout
|
|
62
|
+
* answers `cancelled` when nobody is around. Fire-and-forget requests are
|
|
63
|
+
* presented by level (notify) or ignored (TUI-only display methods).
|
|
64
|
+
*/
|
|
65
|
+
/** Runtime view of the upstream RpcExtensionUIRequest — widened like
|
|
66
|
+
* AgentEventView because the fire-and-forget methods share the wire type. */
|
|
67
|
+
export type ExtensionUIRequestView = {
|
|
68
|
+
type: "extension_ui_request";
|
|
69
|
+
id: string;
|
|
70
|
+
method: string;
|
|
71
|
+
title?: string;
|
|
72
|
+
message?: string;
|
|
73
|
+
options?: string[];
|
|
74
|
+
placeholder?: string;
|
|
75
|
+
timeout?: number;
|
|
76
|
+
notifyType?: string;
|
|
77
|
+
};
|
|
78
|
+
/** Fallback timeout for pending extension UI questions: the config value is
|
|
79
|
+
* in minutes, default 10 (issue #54). Read at enqueue time. Upstream's own
|
|
80
|
+
* shorter select/confirm/input timeouts don't conflict — whichever fires
|
|
81
|
+
* first wins, and late responses are dropped by id upstream. For editor
|
|
82
|
+
* (no upstream timeout) this is the only guarantee. */
|
|
83
|
+
export declare function extensionUiTimeoutMs(config: MsgBridgeConfig): number;
|
|
84
|
+
/** The question message posted to the room (issue #54). The phrasing doubles
|
|
85
|
+
* as the user-facing protocol: reply content is the answer, 「取消」 backs out. */
|
|
86
|
+
export declare function extensionUIQuestionText(request: ExtensionUIRequestView): string;
|
|
87
|
+
/** Parsed room message as an answer to a pending question. */
|
|
88
|
+
export type ExtensionUIAnswer = {
|
|
89
|
+
kind: "cancel";
|
|
90
|
+
} | {
|
|
91
|
+
kind: "value";
|
|
92
|
+
value: string;
|
|
93
|
+
} | {
|
|
94
|
+
kind: "confirmed";
|
|
95
|
+
confirmed: boolean;
|
|
96
|
+
} | {
|
|
97
|
+
kind: "invalid";
|
|
98
|
+
hint: string;
|
|
99
|
+
};
|
|
100
|
+
/** Map a room message onto a pending question's answer (issue #54). Pure —
|
|
101
|
+
* the confirm/select mapping rules are directly testable. 「取消」 must match
|
|
102
|
+
* exactly; confirm accepts y/yes/n/no case-insensitively (anything else
|
|
103
|
+
* re-asks); select maps the 1-based index onto options (out of range
|
|
104
|
+
* re-asks); input/editor take the whole message as the value. */
|
|
105
|
+
export declare function parseExtensionUIAnswer(request: ExtensionUIRequestView, text: string): ExtensionUIAnswer;
|
|
106
|
+
/**
|
|
107
|
+
* Reply-quote prefix (issue #56 票5): when a message replies to a known
|
|
108
|
+
* historical message, prepend a one-line excerpt so the agent can resolve
|
|
109
|
+
* "这个"/"上面那个". Only the text sent to pi changes — slash-command
|
|
110
|
+
* detection runs earlier on the raw text and stays untouched.
|
|
111
|
+
*/
|
|
112
|
+
export declare function withQuotePrefix(text: string, quoted?: {
|
|
113
|
+
username: string;
|
|
114
|
+
excerpt: string;
|
|
115
|
+
}): string;
|
|
51
116
|
export declare function createMessageRouter(deps: MessageRouterDeps): MessageRouter;
|
|
52
117
|
//# sourceMappingURL=message-router.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../../src/rpc/message-router.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,cAAc,CAAC;AAUrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../../src/rpc/message-router.ts"],"names":[],"mappings":"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"}
|