@chainingintention/pi-web-cn 1.202607.9 → 1.202607.11
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-C3BRqouf.js → CodeViewer-WeDkBH1U.js} +1 -1
- package/dist/client/assets/{TerminalPanel-DZ2ed4NZ.js → TerminalPanel-DgiIksV-.js} +17 -14
- package/dist/client/assets/{UnifiedDiffViewer-zWHee3_J.js → UnifiedDiffViewer-FKeWfK-h.js} +3 -3
- package/dist/client/assets/{index-DS5Xapk8.js → index-kgpXTDyy.js} +367 -293
- package/dist/client/index.html +1 -1
- package/dist/server/realtime/sessionEventHub.js +9 -2
- package/dist/server/realtime/sessionEventHub.js.map +1 -1
- package/dist/server/sessions/authService.js +1 -1
- package/dist/server/sessions/authService.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +65 -15
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/sessionActivityCoordinator.js +38 -0
- package/dist/server/sessions/sessionActivityCoordinator.js.map +1 -0
- package/dist/server/sessions/sessionContentSearch.js +74 -0
- package/dist/server/sessions/sessionContentSearch.js.map +1 -0
- package/dist/server/sessions/sessionRoutes.js +20 -0
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/shared/apiTypes.d.ts +33 -2
- package/dist/shared/federatedRoutes.js +2 -0
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/dist/shared/thinkingLevels.d.ts +2 -0
- package/dist/shared/thinkingLevels.js +25 -0
- package/dist/shared/thinkingLevels.js.map +1 -1
- package/package.json +7 -7
package/dist/client/index.html
CHANGED
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
html, body { margin: 0; height: 100%; overflow: hidden; background: var(--pi-bg); color: var(--pi-text); }
|
|
54
54
|
body { min-height: 100dvh; }
|
|
55
55
|
</style>
|
|
56
|
-
<script type="module" crossorigin src="./assets/index-
|
|
56
|
+
<script type="module" crossorigin src="./assets/index-kgpXTDyy.js"></script>
|
|
57
57
|
<link rel="modulepreload" crossorigin href="./assets/vendor-editor-core-vUi74DnD.js">
|
|
58
58
|
<link rel="modulepreload" crossorigin href="./assets/vendor-editor-languages-DoaXUodB.js">
|
|
59
59
|
</head>
|
|
@@ -5,6 +5,7 @@ export class SessionEventHub {
|
|
|
5
5
|
constructor() {
|
|
6
6
|
this.socketsBySession = new Map();
|
|
7
7
|
this.globalSocketsByScope = new Map();
|
|
8
|
+
this.seqBySessionScope = new Map();
|
|
8
9
|
}
|
|
9
10
|
add(sessionId, socket, scope = NORMAL_SESSION_EVENT_SCOPE) {
|
|
10
11
|
const key = sessionScopeKey(sessionId, scope);
|
|
@@ -28,12 +29,18 @@ export class SessionEventHub {
|
|
|
28
29
|
socket.on("close", () => sockets.delete(socket));
|
|
29
30
|
}
|
|
30
31
|
publish(sessionId, event, scope = NORMAL_SESSION_EVENT_SCOPE) {
|
|
31
|
-
const
|
|
32
|
-
|
|
32
|
+
const key = sessionScopeKey(sessionId, scope);
|
|
33
|
+
const seq = (this.seqBySessionScope.get(key) ?? 0) + 1;
|
|
34
|
+
this.seqBySessionScope.set(key, seq);
|
|
35
|
+
const payload = JSON.stringify({ ...projectBrowserSessionEvent(event), seq });
|
|
36
|
+
for (const socket of this.socketsBySession.get(key) ?? []) {
|
|
33
37
|
if (socket.readyState === socket.OPEN)
|
|
34
38
|
socket.send(payload);
|
|
35
39
|
}
|
|
36
40
|
}
|
|
41
|
+
currentSeq(sessionId, scope = NORMAL_SESSION_EVENT_SCOPE) {
|
|
42
|
+
return this.seqBySessionScope.get(sessionScopeKey(sessionId, scope)) ?? 0;
|
|
43
|
+
}
|
|
37
44
|
publishGlobal(event, scope = NORMAL_SESSION_EVENT_SCOPE) {
|
|
38
45
|
this.publishRealtime(event, scope);
|
|
39
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionEventHub.js","sourceRoot":"","sources":["../../../src/server/realtime/sessionEventHub.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAA0B,MAAM,wBAAwB,CAAC;AAC5F,OAAO,EAAE,0BAA0B,EAA0B,MAAM,wBAAwB,CAAC;AAS5F,MAAM,OAAO,eAAe;IAA5B;QACmB,qBAAgB,GAAG,IAAI,GAAG,EAA+B,CAAC;QAC1D,yBAAoB,GAAG,IAAI,GAAG,EAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"sessionEventHub.js","sourceRoot":"","sources":["../../../src/server/realtime/sessionEventHub.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ export class AuthService {
|
|
|
17
17
|
this.listeners.clear();
|
|
18
18
|
}
|
|
19
19
|
async authProviders(mode, authType) {
|
|
20
|
-
await this.modelRuntime.
|
|
20
|
+
await this.modelRuntime.refresh();
|
|
21
21
|
const providers = mode === "logout"
|
|
22
22
|
? await getLogoutProviderOptions(this.modelRuntime)
|
|
23
23
|
: getLoginProviderOptions(this.modelRuntime, authType);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authService.js","sourceRoot":"","sources":["../../../src/server/sessions/authService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAcnE,MAAM,OAAO,WAAW;IAKtB,YAAY,IAA6B;QAFxB,cAAS,GAAG,IAAI,GAAG,EAAsB,CAAC;QAGzD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,qBAAqB,EAAE,CAAC;IACjE,CAAC;IAED,SAAS,CAAC,QAA4B;QACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAwB,EAAE,QAAmB;QAC/D,MAAM,IAAI,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"authService.js","sourceRoot":"","sources":["../../../src/server/sessions/authService.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { statSync } from "node:fs";
|
|
|
2
2
|
import { open, readFile, writeFile } from "node:fs/promises";
|
|
3
3
|
import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
4
4
|
import { createAgentSessionFromServices, createAgentSessionRuntime, createAgentSessionServices, createEditToolDefinition, createFindToolDefinition, createGrepToolDefinition, getAgentDir, createLsToolDefinition, createReadToolDefinition, createWriteToolDefinition, defineTool, ModelRuntime, SessionManager, } from "@earendil-works/pi-coding-agent";
|
|
5
|
+
import { projectBrowserMessage } from "../browserMessageProjection.js";
|
|
5
6
|
import { pageMessagesAtSafeBoundary } from "./messagePaging.js";
|
|
6
7
|
import { eventScopeFromManagementContext, managementContextKey, NORMAL_SESSION_EVENT_SCOPE } from "../realtime/sessionEventScope.js";
|
|
7
8
|
import { BUILTIN_COMMANDS } from "./builtinCommands.js";
|
|
@@ -14,6 +15,8 @@ import { attachmentsToInlineImages, saveAttachmentsToWorkspace } from "./attachm
|
|
|
14
15
|
import { parsePromptAttachments } from "../../shared/promptAttachments.js";
|
|
15
16
|
import { createPiSessionManagerGateway } from "./piSessionManagerGateway.js";
|
|
16
17
|
import { SessionPinStore } from "./sessionPinStore.js";
|
|
18
|
+
import { SessionActivityCoordinator } from "./sessionActivityCoordinator.js";
|
|
19
|
+
import { searchSessionContent } from "./sessionContentSearch.js";
|
|
17
20
|
import { canonicalizeStoredCwd, cwdPathsEqual } from "../workingDirectory.js";
|
|
18
21
|
import { piWebDataDir } from "../../config.js";
|
|
19
22
|
import { createScopedSettingsManager, resolveSettingsScopeDirectory } from "./projectSettingsScope.js";
|
|
@@ -222,7 +225,7 @@ export class PiSessionService {
|
|
|
222
225
|
this.events = events;
|
|
223
226
|
this.active = new Map();
|
|
224
227
|
this.pendingSessionOpens = new Map();
|
|
225
|
-
this.activities = new
|
|
228
|
+
this.activities = new SessionActivityCoordinator();
|
|
226
229
|
this.compactionPromptQueues = new Map();
|
|
227
230
|
this.compactionDrainTimers = new Map();
|
|
228
231
|
this.authLossWarnings = new Set();
|
|
@@ -371,15 +374,26 @@ export class PiSessionService {
|
|
|
371
374
|
const normalizedQuery = query.trim().toLocaleLowerCase();
|
|
372
375
|
if (normalizedQuery === "")
|
|
373
376
|
return this.list(cwd, managementContext);
|
|
374
|
-
const
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
return
|
|
381
|
-
|
|
382
|
-
|
|
377
|
+
const { sessions } = await this.searchCandidates(cwd, normalizedQuery, managementContext);
|
|
378
|
+
return sessions;
|
|
379
|
+
}
|
|
380
|
+
async searchContent(cwd, query, managementContext) {
|
|
381
|
+
const normalizedQuery = query.trim();
|
|
382
|
+
if (normalizedQuery === "")
|
|
383
|
+
return { results: [], matchCount: 0, truncated: false };
|
|
384
|
+
const maxMatches = 200;
|
|
385
|
+
const { listing, sessions } = await this.searchCandidates(cwd, normalizedQuery.toLocaleLowerCase(), managementContext);
|
|
386
|
+
const results = [];
|
|
387
|
+
let matchCount = 0;
|
|
388
|
+
for (const session of sessions) {
|
|
389
|
+
const remaining = maxMatches - results.reduce((count, result) => count + result.matches.length, 0);
|
|
390
|
+
const messages = this.searchableSessionHistory(session, listing, managementContext);
|
|
391
|
+
const view = searchSessionContent(messages, normalizedQuery, Math.max(1, remaining));
|
|
392
|
+
matchCount += view.matchCount;
|
|
393
|
+
if (remaining > 0 && view.matches.length > 0)
|
|
394
|
+
results.push({ session, matches: view.matches.slice(0, remaining) });
|
|
395
|
+
}
|
|
396
|
+
return { results, matchCount, truncated: matchCount > maxMatches };
|
|
383
397
|
}
|
|
384
398
|
async listPinned(cwd, managementContext) {
|
|
385
399
|
const listing = await this.listWorkspaceSessions(cwd, managementContext);
|
|
@@ -797,9 +811,38 @@ export class PiSessionService {
|
|
|
797
811
|
async status(ref, managementContext) {
|
|
798
812
|
return this.statusFromSession(await this.getOrOpen(ref, managementContext));
|
|
799
813
|
}
|
|
814
|
+
async searchCandidates(cwd, normalizedQuery, managementContext) {
|
|
815
|
+
const listing = await this.listWorkspaceSessions(cwd, managementContext);
|
|
816
|
+
const matches = await Promise.all(listing.sessions.map(async (session) => {
|
|
817
|
+
const entry = listing.entriesById.get(session.id);
|
|
818
|
+
const archived = listing.archivedById.get(session.id);
|
|
819
|
+
const archivedText = archived?.archivePath === undefined ? "" : await readArchivedSessionText(archived.archivePath);
|
|
820
|
+
const haystack = [session.id, session.name ?? "", session.firstMessage, entry?.allMessagesText ?? "", archivedText].join("\n").toLocaleLowerCase();
|
|
821
|
+
return haystack.includes(normalizedQuery) ? session : undefined;
|
|
822
|
+
}));
|
|
823
|
+
return { listing, sessions: matches.filter(isDefined) };
|
|
824
|
+
}
|
|
825
|
+
searchableSessionHistory(session, listing, managementContext) {
|
|
826
|
+
const eventScope = eventScopeFromManagementContext(managementContext);
|
|
827
|
+
const active = this.activeForSessionIdAndScope(session.id, eventScope);
|
|
828
|
+
if (active !== undefined && cwdPathsEqual(active.runtime.cwd, session.cwd))
|
|
829
|
+
return historyMessages(active.runtime.session);
|
|
830
|
+
const path = listing.archivedById.get(session.id)?.archivePath ?? listing.entriesById.get(session.id)?.path;
|
|
831
|
+
return path === undefined ? [] : historyMessagesFromManager(this.sessionManager.open(path));
|
|
832
|
+
}
|
|
833
|
+
async streamSnapshot(ref, managementContext) {
|
|
834
|
+
const session = await this.getOrOpen(ref, managementContext);
|
|
835
|
+
const eventScope = this.eventScopeForSession(session);
|
|
836
|
+
const seq = this.events.currentSeq(session.sessionId, eventScope);
|
|
837
|
+
const streamingMessage = session.state.streamingMessage;
|
|
838
|
+
const partial = streamingMessage === undefined || streamingMessage === null
|
|
839
|
+
? null
|
|
840
|
+
: projectBrowserMessage(streamingMessage);
|
|
841
|
+
return { seq, partial };
|
|
842
|
+
}
|
|
800
843
|
async availableModels(ref, managementContext) {
|
|
801
844
|
const session = await this.getOrOpen(ref, managementContext);
|
|
802
|
-
await session.modelRuntime.
|
|
845
|
+
await session.modelRuntime.refresh();
|
|
803
846
|
const models = session.scopedModels.length > 0
|
|
804
847
|
? session.scopedModels.map((scoped) => scoped.model)
|
|
805
848
|
: await session.modelRuntime.getAvailable();
|
|
@@ -808,7 +851,7 @@ export class PiSessionService {
|
|
|
808
851
|
async setModel(ref, provider, modelId, managementContext) {
|
|
809
852
|
await this.assertWritable(ref);
|
|
810
853
|
const session = await this.getOrOpen(ref, managementContext);
|
|
811
|
-
await session.modelRuntime.
|
|
854
|
+
await session.modelRuntime.refresh();
|
|
812
855
|
const candidates = session.scopedModels.length > 0
|
|
813
856
|
? session.scopedModels.map((scoped) => scoped.model)
|
|
814
857
|
: await session.modelRuntime.getAvailable();
|
|
@@ -1671,7 +1714,7 @@ export class PiSessionService {
|
|
|
1671
1714
|
const model = session.model;
|
|
1672
1715
|
if (model === undefined)
|
|
1673
1716
|
return;
|
|
1674
|
-
void generateShortSessionName(session.agent.
|
|
1717
|
+
void generateShortSessionName(session.agent.streamFunction, model, firstMessage).then((name) => {
|
|
1675
1718
|
this.applyGeneratedSessionName(session, name ?? fallbackSessionName(firstMessage));
|
|
1676
1719
|
}).catch(() => {
|
|
1677
1720
|
this.applyGeneratedSessionName(session, fallbackSessionName(firstMessage));
|
|
@@ -1774,7 +1817,11 @@ export class PiSessionService {
|
|
|
1774
1817
|
}
|
|
1775
1818
|
if (eventType === "agent_end") {
|
|
1776
1819
|
this.publishActivity(session, "idle", "idle");
|
|
1777
|
-
|
|
1820
|
+
const eventScope = this.eventScopeForSession(session);
|
|
1821
|
+
const sessionKey = activeSessionKey(session.sessionId, eventScope);
|
|
1822
|
+
this.activities.scheduleSettledRefresh(sessionKey, () => {
|
|
1823
|
+
if (this.active.get(sessionKey)?.runtime.session !== session)
|
|
1824
|
+
return;
|
|
1778
1825
|
this.publishActivity(session, "idle", "idle");
|
|
1779
1826
|
this.publishStatus(session);
|
|
1780
1827
|
}, 250);
|
|
@@ -2223,8 +2270,11 @@ function stringValue(value) {
|
|
|
2223
2270
|
return typeof value === "string" ? value : "";
|
|
2224
2271
|
}
|
|
2225
2272
|
function historyMessages(session) {
|
|
2273
|
+
return historyMessagesFromManager(session.sessionManager);
|
|
2274
|
+
}
|
|
2275
|
+
function historyMessagesFromManager(sessionManager) {
|
|
2226
2276
|
const messages = [];
|
|
2227
|
-
for (const entry of
|
|
2277
|
+
for (const entry of sessionManager.getBranch()) {
|
|
2228
2278
|
if (!isRecord(entry))
|
|
2229
2279
|
continue;
|
|
2230
2280
|
if (entry["type"] === "message")
|