@chainingintention/pi-web-cn 1.202606.14 → 1.202606.15
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/dist/client/assets/{CodeViewer-D5OA_6r4.js → CodeViewer-8gNS7Vba.js} +1 -1
- package/dist/client/assets/{TerminalPanel-kfPHfhUe.js → TerminalPanel-DMJEgLnW.js} +8 -4
- package/dist/client/assets/{index-MmspRbMF.js → index-CaONWXhD.js} +415 -396
- package/dist/client/assets/{vendor-editor-core-B4Sq6exx.js → vendor-editor-core-Bc1A7SO7.js} +4 -4
- package/dist/client/assets/{vendor-editor-languages-DznYbTkJ.js → vendor-editor-languages-D0CnB2js.js} +3 -3
- package/dist/client/index.html +3 -3
- package/dist/config.js +24 -0
- package/dist/config.js.map +1 -1
- package/dist/server/configRoutes.js +7 -0
- package/dist/server/configRoutes.js.map +1 -1
- package/dist/server/sessiond.js +2 -1
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/piSessionManagerGateway.js +2 -2
- package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +192 -5
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/sessionRoutes.js +2 -1
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/server/sessions/spawnSubsessionTool.js +166 -0
- package/dist/server/sessions/spawnSubsessionTool.js.map +1 -0
- package/dist/server/sessions/subsessionTranscript.js +235 -0
- package/dist/server/sessions/subsessionTranscript.js.map +1 -0
- package/dist/shared/apiTypes.d.ts +8 -0
- package/package.json +1 -1
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for the `read_subsession` tool: turn a subsession's normalized
|
|
3
|
+
* history (as produced by `historyMessages`) into a filtered, projected,
|
|
4
|
+
* paginated view the parent agent can explore.
|
|
5
|
+
*
|
|
6
|
+
* The agent drives the read: it picks which roles and content kinds it cares
|
|
7
|
+
* about, how much detail it wants, and how far back to look. If a narrow read
|
|
8
|
+
* does not answer its question it can widen the filters or page further back,
|
|
9
|
+
* the same grep-then-read loop it already uses on files. Everything here is a
|
|
10
|
+
* pure transform over an array so it can be unit-tested without a live session.
|
|
11
|
+
*/
|
|
12
|
+
const DEFAULT_LIMIT = 50;
|
|
13
|
+
const MAX_LIMIT = 200;
|
|
14
|
+
/**
|
|
15
|
+
* Build a filtered, projected, paginated view of a normalized transcript.
|
|
16
|
+
*
|
|
17
|
+
* Filtering happens before paging for *semantics*, not speed: `search`, the
|
|
18
|
+
* `matched` count, and "page backward through matches" all require scanning the
|
|
19
|
+
* whole transcript, so a window-first approach could not answer them. The
|
|
20
|
+
* tradeoff is an O(total) scan per call (paging a raw window first would be
|
|
21
|
+
* cheaper), but `total` is a single session's history and this runs once per
|
|
22
|
+
* tool call, so the scan is negligible. The cost that matters for an LLM tool,
|
|
23
|
+
* the tokens returned, is bounded by `limit` regardless of ordering; `matched`
|
|
24
|
+
* is only a count, so the agent learns whether widening or paging is worthwhile
|
|
25
|
+
* without paying to receive every match.
|
|
26
|
+
*/
|
|
27
|
+
export function buildTranscriptView(messages, query = {}) {
|
|
28
|
+
const total = messages.length;
|
|
29
|
+
// Explicit, caller-owned truncation: only when provided, and a malformed
|
|
30
|
+
// value (negative/fractional) is coerced to a safe non-negative integer
|
|
31
|
+
// rather than silently meaning "no cap".
|
|
32
|
+
const maxChars = query.maxChars === undefined ? undefined : Math.max(0, Math.floor(query.maxChars));
|
|
33
|
+
const includeToolArgs = query.includeToolArgs === true;
|
|
34
|
+
const roleFilter = query.roles === undefined ? undefined : new Set(query.roles);
|
|
35
|
+
const includeFilter = query.include === undefined ? undefined : new Set(query.include);
|
|
36
|
+
const search = query.search !== undefined && query.search !== "" ? query.search.toLowerCase() : undefined;
|
|
37
|
+
// Extract *full* (untruncated) parts and run all filtering/search on them, so
|
|
38
|
+
// matching never depends on `maxChars`. Projection (clipping, arg dropping)
|
|
39
|
+
// happens later and only on the entries we actually return.
|
|
40
|
+
const matchedEntries = [];
|
|
41
|
+
for (let index = 0; index < total; index++) {
|
|
42
|
+
const role = roleOf(messages[index]);
|
|
43
|
+
if (role === undefined)
|
|
44
|
+
continue;
|
|
45
|
+
if (roleFilter !== undefined && !roleFilter.has(role))
|
|
46
|
+
continue;
|
|
47
|
+
let parts = fullPartsOf(messages[index], role);
|
|
48
|
+
if (includeFilter !== undefined)
|
|
49
|
+
parts = parts.filter((part) => includeFilter.has(part.kind));
|
|
50
|
+
if (parts.length === 0)
|
|
51
|
+
continue;
|
|
52
|
+
if (search !== undefined && !partsMatchSearch(parts, search))
|
|
53
|
+
continue;
|
|
54
|
+
matchedEntries.push({ index, role, parts });
|
|
55
|
+
}
|
|
56
|
+
const matched = matchedEntries.length;
|
|
57
|
+
const before = clampInteger(query.before ?? total, 0, total);
|
|
58
|
+
const limit = clampInteger(query.limit ?? DEFAULT_LIMIT, 1, MAX_LIMIT);
|
|
59
|
+
const inWindow = matchedEntries.filter((entry) => entry.index < before);
|
|
60
|
+
const windowed = inWindow.slice(Math.max(0, inWindow.length - limit));
|
|
61
|
+
const entries = windowed.map((entry) => projectEntry(entry, maxChars, includeToolArgs));
|
|
62
|
+
const first = windowed[0];
|
|
63
|
+
const start = first === undefined ? before : first.index;
|
|
64
|
+
const hasMore = inWindow.length > windowed.length;
|
|
65
|
+
return { entries, total, matched, start, hasMore };
|
|
66
|
+
}
|
|
67
|
+
function partsMatchSearch(parts, needle) {
|
|
68
|
+
return parts.some((part) => {
|
|
69
|
+
if (part.kind === "text" || part.kind === "thinking")
|
|
70
|
+
return part.text.toLowerCase().includes(needle);
|
|
71
|
+
if (part.kind === "tool_result")
|
|
72
|
+
return part.text.toLowerCase().includes(needle) || (part.toolName?.toLowerCase().includes(needle) ?? false);
|
|
73
|
+
// Search the *full* serialized args, not the lossy one-line summary, so a
|
|
74
|
+
// term inside edit/write content, nested objects, or long values is found.
|
|
75
|
+
if (part.kind === "tool_call")
|
|
76
|
+
return part.toolName.toLowerCase().includes(needle) || stringifyArgs(part.args).toLowerCase().includes(needle);
|
|
77
|
+
return false;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/** Full, search-friendly serialization of tool-call args (distinct from the lossy display summary). */
|
|
81
|
+
function stringifyArgs(args) {
|
|
82
|
+
if (args === undefined)
|
|
83
|
+
return "";
|
|
84
|
+
if (typeof args === "string")
|
|
85
|
+
return args;
|
|
86
|
+
try {
|
|
87
|
+
// JSON.stringify can return undefined at runtime (e.g. a function/symbol),
|
|
88
|
+
// despite its string-typed signature; normalize that to "".
|
|
89
|
+
const json = JSON.stringify(args);
|
|
90
|
+
return typeof json === "string" ? json : "";
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return "";
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** Project a fully-extracted entry into the returned shape, clipping only when `maxChars` is set. */
|
|
97
|
+
function projectEntry(entry, maxChars, includeToolArgs) {
|
|
98
|
+
return { index: entry.index, role: entry.role, parts: entry.parts.map((part) => projectPart(part, maxChars, includeToolArgs)) };
|
|
99
|
+
}
|
|
100
|
+
function projectPart(part, maxChars, includeToolArgs) {
|
|
101
|
+
if (part.kind === "text")
|
|
102
|
+
return { kind: "text", ...clip(part.text, maxChars) };
|
|
103
|
+
if (part.kind === "thinking")
|
|
104
|
+
return { kind: "thinking", ...clip(part.text, maxChars) };
|
|
105
|
+
if (part.kind === "tool_result") {
|
|
106
|
+
return {
|
|
107
|
+
kind: "tool_result",
|
|
108
|
+
...(part.toolName === undefined ? {} : { toolName: part.toolName }),
|
|
109
|
+
isError: part.isError,
|
|
110
|
+
...clip(part.text, maxChars),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (part.kind === "tool_call") {
|
|
114
|
+
return {
|
|
115
|
+
kind: "tool_call",
|
|
116
|
+
toolName: part.toolName,
|
|
117
|
+
summary: summarizeToolArgs(part.args),
|
|
118
|
+
...(includeToolArgs && part.args !== undefined ? { args: part.args } : {}),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return { kind: "image" };
|
|
122
|
+
}
|
|
123
|
+
/** Clip text to `maxChars`, attaching a `truncated` marker when it actually shortens. */
|
|
124
|
+
function clip(text, maxChars) {
|
|
125
|
+
if (maxChars === undefined || text.length <= maxChars)
|
|
126
|
+
return { text };
|
|
127
|
+
return { text: text.slice(0, maxChars), truncated: { shown: maxChars, full: text.length } };
|
|
128
|
+
}
|
|
129
|
+
/** Map a raw history message to one of the agent-facing roles, or undefined to drop it. */
|
|
130
|
+
function roleOf(message) {
|
|
131
|
+
const role = getString(message, "role");
|
|
132
|
+
if (role === "assistant")
|
|
133
|
+
return "assistant";
|
|
134
|
+
if (role === "user")
|
|
135
|
+
return "user";
|
|
136
|
+
if (role === "toolResult")
|
|
137
|
+
return "tool";
|
|
138
|
+
if (role === "custom")
|
|
139
|
+
return "custom";
|
|
140
|
+
if (role === "system")
|
|
141
|
+
return "system";
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
/** Extract a message's *full* (untruncated) parts; projection happens later. */
|
|
145
|
+
function fullPartsOf(message, role) {
|
|
146
|
+
if (role === "tool")
|
|
147
|
+
return toolResultParts(message);
|
|
148
|
+
const content = getProperty(message, "content");
|
|
149
|
+
if (typeof content === "string")
|
|
150
|
+
return content === "" ? [] : [{ kind: "text", text: content }];
|
|
151
|
+
if (!Array.isArray(content))
|
|
152
|
+
return [];
|
|
153
|
+
return content.flatMap(contentPart);
|
|
154
|
+
}
|
|
155
|
+
function toolResultParts(message) {
|
|
156
|
+
const text = stringifyContent(getProperty(message, "content")) || (getString(message, "text") ?? "");
|
|
157
|
+
const toolName = getString(message, "toolName");
|
|
158
|
+
const isError = getProperty(message, "isError") === true;
|
|
159
|
+
return [{ kind: "tool_result", ...(toolName === undefined ? {} : { toolName }), text, isError }];
|
|
160
|
+
}
|
|
161
|
+
function contentPart(part) {
|
|
162
|
+
const type = getString(part, "type");
|
|
163
|
+
if (type === "text") {
|
|
164
|
+
const text = getString(part, "text") ?? "";
|
|
165
|
+
return text === "" ? [] : [{ kind: "text", text }];
|
|
166
|
+
}
|
|
167
|
+
if (type === "thinking") {
|
|
168
|
+
const text = getString(part, "thinking") ?? getString(part, "text") ?? "";
|
|
169
|
+
return text === "" ? [] : [{ kind: "thinking", text }];
|
|
170
|
+
}
|
|
171
|
+
if (type === "toolCall") {
|
|
172
|
+
const toolName = getString(part, "name") ?? "tool";
|
|
173
|
+
const args = getProperty(part, "arguments");
|
|
174
|
+
return [{ kind: "tool_call", toolName, ...(args === undefined ? {} : { args }) }];
|
|
175
|
+
}
|
|
176
|
+
if (type === "image")
|
|
177
|
+
return [{ kind: "image" }];
|
|
178
|
+
return [];
|
|
179
|
+
}
|
|
180
|
+
/** Compact one-line description of tool arguments (mirrors the UI's summary). */
|
|
181
|
+
function summarizeToolArgs(args) {
|
|
182
|
+
if (!isRecord(args))
|
|
183
|
+
return typeof args === "string" ? args : "";
|
|
184
|
+
const command = getString(args, "command");
|
|
185
|
+
if (command !== undefined)
|
|
186
|
+
return command;
|
|
187
|
+
const path = getString(args, "path");
|
|
188
|
+
if (path !== undefined)
|
|
189
|
+
return path;
|
|
190
|
+
if (typeof args["oldText"] === "string" && typeof args["newText"] === "string")
|
|
191
|
+
return "edit text replacement";
|
|
192
|
+
const edits = args["edits"];
|
|
193
|
+
if (Array.isArray(edits))
|
|
194
|
+
return `${String(edits.length)} edit${edits.length === 1 ? "" : "s"}`;
|
|
195
|
+
const entries = Object.entries(args).filter(([, value]) => value != null).slice(0, 3);
|
|
196
|
+
return entries.map(([key, value]) => `${key}: ${shortValue(value)}`).join(" · ");
|
|
197
|
+
}
|
|
198
|
+
function shortValue(value) {
|
|
199
|
+
if (typeof value === "string")
|
|
200
|
+
return value.length > 80 ? `${value.slice(0, 77)}…` : value;
|
|
201
|
+
if (typeof value === "number" || typeof value === "boolean")
|
|
202
|
+
return String(value);
|
|
203
|
+
if (Array.isArray(value))
|
|
204
|
+
return `${String(value.length)} item${value.length === 1 ? "" : "s"}`;
|
|
205
|
+
if (typeof value === "object" && value !== null)
|
|
206
|
+
return "object";
|
|
207
|
+
return "";
|
|
208
|
+
}
|
|
209
|
+
function stringifyContent(content) {
|
|
210
|
+
if (typeof content === "string")
|
|
211
|
+
return content;
|
|
212
|
+
if (Array.isArray(content)) {
|
|
213
|
+
return content
|
|
214
|
+
.map((part) => (getString(part, "type") === "image" ? "[image]" : getString(part, "text") ?? ""))
|
|
215
|
+
.filter((text) => text !== "")
|
|
216
|
+
.join("\n");
|
|
217
|
+
}
|
|
218
|
+
return "";
|
|
219
|
+
}
|
|
220
|
+
function clampInteger(value, min, max) {
|
|
221
|
+
if (!Number.isFinite(value))
|
|
222
|
+
return max;
|
|
223
|
+
return Math.max(min, Math.min(max, Math.floor(value)));
|
|
224
|
+
}
|
|
225
|
+
function isRecord(value) {
|
|
226
|
+
return typeof value === "object" && value !== null;
|
|
227
|
+
}
|
|
228
|
+
function getProperty(value, key) {
|
|
229
|
+
return isRecord(value) ? value[key] : undefined;
|
|
230
|
+
}
|
|
231
|
+
function getString(value, key) {
|
|
232
|
+
const property = getProperty(value, key);
|
|
233
|
+
return typeof property === "string" ? property : undefined;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=subsessionTranscript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subsessionTranscript.js","sourceRoot":"","sources":["../../../src/server/sessions/subsessionTranscript.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,13 @@ export interface PiWebConfigValues {
|
|
|
54
54
|
maxUploadBytes?: number;
|
|
55
55
|
/** When true, LLMs can start new sessions via the spawn_session tool. */
|
|
56
56
|
spawnSessions?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Beta: when true, LLMs can start tracked child sessions via the
|
|
59
|
+
* spawn_subsession / list_subsessions / check_subsession / read_subsession
|
|
60
|
+
* tools. Off by default
|
|
61
|
+
* while the capability stabilizes. Requires spawnSessions to be enabled.
|
|
62
|
+
*/
|
|
63
|
+
subsessions?: boolean;
|
|
57
64
|
}
|
|
58
65
|
export interface PiWebManagementEmbedConfig {
|
|
59
66
|
enabled?: boolean;
|
|
@@ -90,6 +97,7 @@ export interface PiWebConfigEnvOverrides {
|
|
|
90
97
|
port: boolean;
|
|
91
98
|
allowedHosts: boolean;
|
|
92
99
|
spawnSessions: boolean;
|
|
100
|
+
subsessions: boolean;
|
|
93
101
|
}
|
|
94
102
|
export interface PiWebConfigResponse {
|
|
95
103
|
path: string;
|
package/package.json
CHANGED