@chainingintention/pi-web-cn 1.202609.0 → 1.202609.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/dist/cli.js +24 -14
- package/dist/cli.js.map +1 -1
- package/dist/client/apple-touch-icon-dev.png +0 -0
- package/dist/client/assets/{CodeViewer-gfeiLsvJ.js → CodeViewer-CY319sHK.js} +1 -1
- package/dist/client/assets/{TerminalPanel-CF7TJrJF.js → TerminalPanel-DvFd2ZkS.js} +1 -1
- package/dist/client/assets/{index-Y2sFZ4_U.js → index-Lt_wrMvn.js} +423 -359
- package/dist/client/favicon-dev.svg +8 -0
- package/dist/client/index.html +1 -1
- package/dist/client/pwa-icon-dev-192.png +0 -0
- package/dist/client/pwa-icon-dev-512.png +0 -0
- package/dist/config.js +14 -0
- package/dist/config.js.map +1 -1
- package/dist/environment.js +4 -0
- package/dist/environment.js.map +1 -0
- package/dist/nativeServices/installedServiceDefinitions.js +601 -0
- package/dist/nativeServices/installedServiceDefinitions.js.map +1 -0
- package/dist/nativeServices/serviceDoctor.js +47 -16
- package/dist/nativeServices/serviceDoctor.js.map +1 -1
- package/dist/{pi-web-plugins → pi-packages}/relays/markdownDocument.js +1 -1
- package/dist/pi-packages/relays/package.json +11 -0
- package/dist/{pi-web-plugins → pi-packages}/relays/pi-web-plugin.js +1 -1
- package/dist/pi-packages/relays/prompts/relay-worktree.md +28 -0
- package/dist/pi-packages/relays/prompts/relay.md +45 -0
- package/dist/{pi-web-plugins → pi-packages}/relays/relayDiscovery.js +2 -2
- package/dist/{pi-web-plugins → pi-packages}/relays/relaysPanelElement.js +2 -2
- package/dist/pi-packages/relays/skills/relay/SKILL.md +94 -0
- package/dist/pi-packages/relays/skills/relay-runner/SKILL.md +245 -0
- package/dist/pi-web-plugins/updates/pi-web-plugin.js +34 -36
- package/dist/server/app.js +14 -3
- package/dist/server/app.js.map +1 -1
- package/dist/server/configRoutes.js +6 -1
- package/dist/server/configRoutes.js.map +1 -1
- package/dist/server/deploymentIdentity.js +67 -0
- package/dist/server/deploymentIdentity.js.map +1 -0
- package/dist/server/deploymentIdentityRoutes.js +22 -0
- package/dist/server/deploymentIdentityRoutes.js.map +1 -0
- package/dist/server/knownAutoInstallPiPackages.js +30 -0
- package/dist/server/knownAutoInstallPiPackages.js.map +1 -0
- package/dist/server/managementEmbed.js +9 -0
- package/dist/server/managementEmbed.js.map +1 -1
- package/dist/server/notices/serverNoticeRoutes.js +43 -0
- package/dist/server/notices/serverNoticeRoutes.js.map +1 -0
- package/dist/server/notices/serverNoticeService.js +26 -0
- package/dist/server/notices/serverNoticeService.js.map +1 -0
- package/dist/server/notices/serverNoticeStore.js +78 -0
- package/dist/server/notices/serverNoticeStore.js.map +1 -0
- package/dist/server/piPackageIdentity.js +25 -0
- package/dist/server/piPackageIdentity.js.map +1 -0
- package/dist/server/piPackageService.js +69 -8
- package/dist/server/piPackageService.js.map +1 -1
- package/dist/server/piWebStatus.js +1 -1
- package/dist/server/piWebStatus.js.map +1 -1
- package/dist/server/plugins/pluginBackendProxyRoutes.js +1 -10
- package/dist/server/plugins/pluginBackendProxyRoutes.js.map +1 -1
- package/dist/server/sessiond/autoInstallPiPackages.js +63 -0
- package/dist/server/sessiond/autoInstallPiPackages.js.map +1 -0
- package/dist/server/sessiond/sessionProxyRoutes.js +3 -10
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
- package/dist/server/sessiond.js +26 -5
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/attachmentService.js +2 -5
- package/dist/server/sessions/attachmentService.js.map +1 -1
- package/dist/server/sessions/piSessionManagerGateway.js +122 -1
- package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +205 -57
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/projectSettingsScope.js +12 -31
- package/dist/server/sessions/projectSettingsScope.js.map +1 -1
- package/dist/server/sessions/sessionModelScope.js +23 -8
- package/dist/server/sessions/sessionModelScope.js.map +1 -1
- package/dist/server/sessions/sessionRoutes.js +15 -0
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/server/sessions/transcriptBranchCache.js +81 -0
- package/dist/server/sessions/transcriptBranchCache.js.map +1 -0
- package/dist/server/storage/piPackageDismissalStore.js +78 -0
- package/dist/server/storage/piPackageDismissalStore.js.map +1 -0
- package/dist/server/terminals/terminalService.js +18 -1
- package/dist/server/terminals/terminalService.js.map +1 -1
- package/dist/server/workspaces/projectPiWebConfig.js +6 -1
- package/dist/server/workspaces/projectPiWebConfig.js.map +1 -1
- package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js +1 -10
- package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js.map +1 -1
- package/dist/server/workspaces/workspaceDeletionRoutes.js +1 -10
- package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -1
- package/dist/server/workspaces/workspaceRemovalService.js +16 -5
- package/dist/server/workspaces/workspaceRemovalService.js.map +1 -1
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/federatedRoutes.js +3 -0
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/dist/shared/piWebConfigParsing.js +10 -0
- package/dist/shared/piWebConfigParsing.js.map +1 -1
- package/docs/config.md +26 -2
- package/docs/plugins.md +4 -2
- package/package.json +2 -2
- package/skills/relay/SKILL.md +59 -80
- package/dist/pi-web-plugins/relays/package.json +0 -9
- /package/dist/{pi-web-plugins → pi-packages}/relays/vendor/README.md +0 -0
- /package/dist/{pi-web-plugins → pi-packages}/relays/vendor/marked.esm.js +0 -0
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { readdir } from "node:fs/promises";
|
|
1
|
+
import { open, readFile, readdir, stat } from "node:fs/promises";
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { basename, dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
4
|
import { SessionManager, SettingsManager } from "@earendil-works/pi-coding-agent";
|
|
5
5
|
import { canonicalizeStoredCwd, cwdPathsEqual } from "../workingDirectory.js";
|
|
6
|
+
import { isNodeErrorWithCode } from "../workspaces/pathSafety.js";
|
|
6
7
|
import { readSessionHeaderSummary } from "./sessionFileHeader.js";
|
|
8
|
+
import { tryParseEntry } from "./sessionFileFormat.js";
|
|
7
9
|
import { SessionSummaryScanner } from "./sessionSummaryScanner.js";
|
|
10
|
+
import { TranscriptBranchCache } from "./transcriptBranchCache.js";
|
|
8
11
|
export class SessionDirResolver {
|
|
9
12
|
constructor(options) {
|
|
10
13
|
this.agentDir = options.agentDir;
|
|
@@ -48,6 +51,8 @@ class SettingsAwarePiSessionManagerGateway {
|
|
|
48
51
|
* in-place rewrites those checks cannot see.
|
|
49
52
|
*/
|
|
50
53
|
this.summaryScanner = new SessionSummaryScanner();
|
|
54
|
+
this.transcriptBranches = new TranscriptBranchCache();
|
|
55
|
+
this.pendingTranscriptBranches = new Map();
|
|
51
56
|
}
|
|
52
57
|
async list(cwd) {
|
|
53
58
|
const resolution = this.resolver.resolve(cwd);
|
|
@@ -75,6 +80,44 @@ class SettingsAwarePiSessionManagerGateway {
|
|
|
75
80
|
const resolution = this.resolver.resolve(cwd);
|
|
76
81
|
return SessionManager.create(cwd, resolution.sessionDir, options?.parentSession === undefined ? undefined : { parentSession: options.parentSession });
|
|
77
82
|
}
|
|
83
|
+
async readBranch(path) {
|
|
84
|
+
const file = await statIfPresent(path);
|
|
85
|
+
if (file === undefined)
|
|
86
|
+
return undefined;
|
|
87
|
+
const signature = transcriptFileSignature(file);
|
|
88
|
+
const cached = this.transcriptBranches.get(path, signature);
|
|
89
|
+
if (cached !== undefined)
|
|
90
|
+
return cached.branch;
|
|
91
|
+
const pending = this.pendingTranscriptBranches.get(path);
|
|
92
|
+
if (pending !== undefined)
|
|
93
|
+
return pending;
|
|
94
|
+
const read = this.readSnapshot(path, file, signature)
|
|
95
|
+
.then((snapshot) => {
|
|
96
|
+
this.transcriptBranches.set(path, snapshot);
|
|
97
|
+
return snapshot.branch;
|
|
98
|
+
})
|
|
99
|
+
.catch((error) => {
|
|
100
|
+
if (isNodeErrorWithCode(error, "ENOENT"))
|
|
101
|
+
return undefined;
|
|
102
|
+
throw error;
|
|
103
|
+
})
|
|
104
|
+
.finally(() => { this.pendingTranscriptBranches.delete(path); });
|
|
105
|
+
this.pendingTranscriptBranches.set(path, read);
|
|
106
|
+
return read;
|
|
107
|
+
}
|
|
108
|
+
async readSnapshot(path, file, signature) {
|
|
109
|
+
const identity = transcriptFileIdentity(file);
|
|
110
|
+
const previous = this.transcriptBranches.getLatest(path);
|
|
111
|
+
if (previous?.identity === identity && previous.size > 0 && previous.size < file.size) {
|
|
112
|
+
const appended = await readAppendedEntries(path, previous.size, file.size, identity);
|
|
113
|
+
if (appended !== undefined) {
|
|
114
|
+
const entries = [...previous.entries, ...appended];
|
|
115
|
+
return { signature, identity, size: file.size, entries, branch: deriveTranscriptBranch(entries) };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const entries = parseTranscriptEntries(await readFile(path, "utf8"));
|
|
119
|
+
return { signature, identity, size: file.size, entries, branch: deriveTranscriptBranch(entries) };
|
|
120
|
+
}
|
|
78
121
|
async listAll() {
|
|
79
122
|
const envSessionDir = this.resolver.globalEnvSessionDir();
|
|
80
123
|
const [defaultSessions, envSessions] = await Promise.all([
|
|
@@ -87,6 +130,84 @@ class SettingsAwarePiSessionManagerGateway {
|
|
|
87
130
|
return SessionManager.open(path, dirname(path));
|
|
88
131
|
}
|
|
89
132
|
}
|
|
133
|
+
async function statIfPresent(path) {
|
|
134
|
+
try {
|
|
135
|
+
return await stat(path);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (isNodeErrorWithCode(error, "ENOENT"))
|
|
139
|
+
return undefined;
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function transcriptFileIdentity(file) {
|
|
144
|
+
return `${String(file.dev)}:${String(file.ino)}`;
|
|
145
|
+
}
|
|
146
|
+
function transcriptFileSignature(file) {
|
|
147
|
+
return `${transcriptFileIdentity(file)}:${String(file.size)}:${String(file.mtimeMs)}`;
|
|
148
|
+
}
|
|
149
|
+
async function readAppendedEntries(path, offset, size, identity) {
|
|
150
|
+
const handle = await open(path, "r");
|
|
151
|
+
try {
|
|
152
|
+
const current = await handle.stat();
|
|
153
|
+
if (transcriptFileIdentity(current) !== identity)
|
|
154
|
+
return undefined;
|
|
155
|
+
const length = size - offset + 1;
|
|
156
|
+
const buffer = Buffer.alloc(length);
|
|
157
|
+
const { bytesRead } = await handle.read(buffer, 0, length, offset - 1);
|
|
158
|
+
if (bytesRead !== length || buffer[0] !== 0x0a)
|
|
159
|
+
return undefined;
|
|
160
|
+
const appended = [];
|
|
161
|
+
let firstLine = true;
|
|
162
|
+
for (const line of buffer.toString("utf8", 1).split("\n")) {
|
|
163
|
+
const entry = tryParseEntry(line);
|
|
164
|
+
if (entry === undefined) {
|
|
165
|
+
if (firstLine && line.trim() !== "")
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
else if (entry["type"] !== "session") {
|
|
169
|
+
appended.push(entry);
|
|
170
|
+
}
|
|
171
|
+
firstLine = false;
|
|
172
|
+
}
|
|
173
|
+
return appended;
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
await handle.close();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function parseTranscriptEntries(content) {
|
|
180
|
+
const entries = [];
|
|
181
|
+
for (const line of content.split("\n")) {
|
|
182
|
+
const entry = tryParseEntry(line);
|
|
183
|
+
if (entry !== undefined && entry["type"] !== "session")
|
|
184
|
+
entries.push(entry);
|
|
185
|
+
}
|
|
186
|
+
return entries;
|
|
187
|
+
}
|
|
188
|
+
function deriveTranscriptBranch(entries) {
|
|
189
|
+
const byId = new Map();
|
|
190
|
+
let leafId;
|
|
191
|
+
for (const entry of entries) {
|
|
192
|
+
const id = entry["id"];
|
|
193
|
+
if (typeof id !== "string")
|
|
194
|
+
continue;
|
|
195
|
+
byId.set(id, entry);
|
|
196
|
+
leafId = id;
|
|
197
|
+
}
|
|
198
|
+
const branch = [];
|
|
199
|
+
const visited = new Set();
|
|
200
|
+
let currentId = leafId;
|
|
201
|
+
while (currentId !== undefined && !visited.has(currentId)) {
|
|
202
|
+
visited.add(currentId);
|
|
203
|
+
const entry = byId.get(currentId);
|
|
204
|
+
if (entry === undefined)
|
|
205
|
+
break;
|
|
206
|
+
branch.push(entry);
|
|
207
|
+
currentId = typeof entry["parentId"] === "string" ? entry["parentId"] : undefined;
|
|
208
|
+
}
|
|
209
|
+
return branch.reverse();
|
|
210
|
+
}
|
|
90
211
|
export async function listSessionsInDir(sessionDir) {
|
|
91
212
|
// listAll(sessionDir) lists without the SDK's internal cwd filter, which would
|
|
92
213
|
// otherwise compare against this process's cwd and drop other projects' sessions.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"piSessionManagerGateway.js","sourceRoot":"","sources":["../../../src/server/sessions/piSessionManagerGateway.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAA4B,MAAM,wBAAwB,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAiBnE,MAAM,OAAO,kBAAkB;IAK7B,YAAY,OAAkC;QAC5C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,iBAAiB;aAC3C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAC9B,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;QACxD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,EAAE,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAClI,CAAC;IAED,mBAAmB;QACjB,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,mBAAmB;QACjB,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACvD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACnE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC;QACrI,CAAC;QAED,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;QACtF,IAAI,kBAAkB,KAAK,SAAS,IAAI,kBAAkB,KAAK,EAAE,EAAE,CAAC;YAClE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,qBAAqB,CAAC,kBAAkB,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC;QAC1I,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC;IACxH,CAAC;CACF;AAID,MAAM,UAAU,6BAA6B,CAAC,OAAuC;IACnF,OAAO,IAAI,oCAAoC,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,oCAAoC;IAUxC,YAA6B,QAA4B;QAA5B,aAAQ,GAAR,QAAQ,CAAoB;QATzD;;;;;;WAMG;QACc,mBAAc,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAEF,CAAC;IAE7D,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,uEAAuE;QACvE,2EAA2E;QAC3E,2EAA2E;QAC3E,gBAAgB;QAChB,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,yBAAyB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC9G,GAAG,OAAO;YACV,GAAG,EAAE,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC;SACxC,CAAC,CAAC,CAAC;QACJ,OAAO,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,kBAAkB,CAAC,GAAW,EAAE,SAAiB;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,uBAAuB,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;IAClG,CAAC;IAED,qBAAqB,CAAC,WAAmB;QACvC,yEAAyE;QACzE,oEAAoE;QACpE,yEAAyE;QACzE,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,GAAW,EAAE,OAAoC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACxJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAC1D,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACvD,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YACjE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC;SACrF,CAAC,CAAC;QACH,OAAO,oBAAoB,CAAC,CAAC,GAAG,eAAe,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC,IAAY;QACf,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACxD,+EAA+E;IAC/E,kFAAkF;IAClF,4EAA4E;IAC5E,8EAA8E;IAC9E,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1D,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,SAAiB;IAClE,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/G,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9F,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAuC,EAAE,GAAW;IACvF,iFAAiF;IACjF,2DAA2D;IAC3D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,GAAW,EACX,SAAiB,EACjB,UAA+B;IAE/B,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpH,CAAC;IACD,eAAe,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAChD,cAAc,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAE/C,sEAAsE;IACtE,mEAAmE;IACnE,IAAI,WAA4C,CAAC;IACjD,6EAA6E;IAC7E,oEAAoE;IACpE,KAAK,MAAM,WAAW,IAAI,CAAC,GAAG,eAAe,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,MAAM,EAAE,GAAG,KAAK,SAAS;YAAE,SAAS;QACxC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;YAAE,SAAS;QAC9C,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QACtF,CAAC;QACD,IAAI,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACjE,WAAW,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,yBAAyB,CAAC,CAAS,EAAE,CAAS;IACrD,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,IAAI,UAAU,KAAK,UAAU;QAAE,OAAO,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,0FAA0F;AAC1F,SAAS,yBAAyB,CAAC,QAAgB;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AACpE,CAAC;AAED,gFAAgF;AAChF,SAAS,wBAAwB,CAAC,QAAgB,EAAE,SAAiB;IACnE,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACvD,OAAO,UAAU,KAAK,SAAS,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AACpG,CAAC;AAED;;;;;GAKG;AACH,SAAS,yBAAyB,CAAC,QAAgB;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;IAChF,OAAO,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,UAAkB;IAChD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;QAC3E,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAuC;IACnE,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8B,CAAC;IACrD,KAAK,MAAM,OAAO,IAAI,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,OAAO,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,QAAgB;IAC/D,OAAO,0BAA0B,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,SAAiB,EAAE,GAAW;IACvE,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC;IAC9E,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,GAAW,EAAE,OAAe;IAC9E,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,OAAe;IACpD,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC;IACjC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"piSessionManagerGateway.js","sourceRoot":"","sources":["../../../src/server/sessions/piSessionManagerGateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ import { findArchiveCandidateByIdOrPrefix, planSessionArchiveTree } from "./sess
|
|
|
14
14
|
import { deterministicSessionName, fallbackSessionName, generateShortSessionName } from "./sessionNameGenerator.js";
|
|
15
15
|
import { computeEditPreview } from "./editPreview.js";
|
|
16
16
|
import { attachmentsToInlineImages, saveAttachmentsToWorkspace } from "./attachmentService.js";
|
|
17
|
+
import { loadEffectiveProjectAttachmentsConfig } from "../workspaces/projectPiWebConfig.js";
|
|
17
18
|
import { parsePromptAttachments } from "../../shared/promptAttachments.js";
|
|
18
19
|
import { ASK_USER_ANSWERS_CUSTOM_TYPE, SESSION_TREE_CUSTOM_INSTRUCTIONS_MAX_LENGTH, SESSION_UNREAD_LIMIT } from "../../shared/apiTypes.js";
|
|
19
20
|
import { createPiSessionManagerGateway } from "./piSessionManagerGateway.js";
|
|
@@ -43,7 +44,7 @@ import { archiveCandidateFromActiveSession, archiveCandidateFromArchivedRecord,
|
|
|
43
44
|
import { annotateAssistantThinkingLevel, getBoolean, getProperty, getString, toClientEvent } from "./sessionUiEvents.js";
|
|
44
45
|
import { WorkbenchHttpError } from "../workbench/workbenchClient.js";
|
|
45
46
|
import { createWorkbenchToolDefinitions } from "../workbench/workbenchTools.js";
|
|
46
|
-
import { applyEnabledModelToggle, catalogWithEnabledFirst,
|
|
47
|
+
import { applyEnabledModelToggle, catalogWithEnabledFirst, modelScopeId, persistedEnabledModelPatterns, resolveEnabledModelIds, resolveSessionModelOptions, scopedModelsFromEnabledIds } from "./sessionModelScope.js";
|
|
47
48
|
const noopLogger = { info() { } };
|
|
48
49
|
const DEFAULT_UNREAD_PUBLICATION_RETRY_MS = 1_000;
|
|
49
50
|
/**
|
|
@@ -62,6 +63,7 @@ const STARTUP_PHASE_EXTENSIONS = "正在加载会话扩展";
|
|
|
62
63
|
const STARTUP_CONCURRENT_CATALOG_REFRESH = "服务商模型列表正在刷新";
|
|
63
64
|
const MAX_UNREAD_PUBLICATION_RETRY_MS = 30_000;
|
|
64
65
|
const MAX_PENDING_UNREAD_MUTATIONS = SESSION_UNREAD_LIMIT + 1;
|
|
66
|
+
const IDLE_SESSION_FILE_RESOLUTION_THROTTLE_MS = 30_000;
|
|
65
67
|
function auditVisibleAssistantMessage(message) {
|
|
66
68
|
if (!isAuditRecord(message))
|
|
67
69
|
return message;
|
|
@@ -609,6 +611,13 @@ export class PiSessionService {
|
|
|
609
611
|
this.treeNavigations = new WeakSet();
|
|
610
612
|
/** Counts async operations that may append an entry before they settle. */
|
|
611
613
|
this.sessionEntryMutationCounts = new WeakMap();
|
|
614
|
+
/** Serializes enabled-model read/modify/write operations. */
|
|
615
|
+
this.modelScopeMutationQueue = Promise.resolve();
|
|
616
|
+
/** Effective enabled-model state keyed by the project-scoped settings store. */
|
|
617
|
+
this.modelScopeStates = new Map();
|
|
618
|
+
this.modelScopeInitializations = new Map();
|
|
619
|
+
this.modelScopeRevision = 0;
|
|
620
|
+
this.modelScopeCache = new WeakMap();
|
|
612
621
|
/** Runtime/session-identity reservations for operations that must not overlap tree navigation. */
|
|
613
622
|
this.treeExclusiveRuntimeOperationCounts = new WeakMap();
|
|
614
623
|
this.treeExclusiveSessionOperationCounts = new Map();
|
|
@@ -633,6 +642,7 @@ export class PiSessionService {
|
|
|
633
642
|
*/
|
|
634
643
|
this.subsessionNotifyArmed = new Map();
|
|
635
644
|
this.notificationGenerationBySession = new WeakMap();
|
|
645
|
+
this.idleSessionFileResolutions = new WeakMap();
|
|
636
646
|
/** The parked extension Promise resolvers behind the store's open dialogs. */
|
|
637
647
|
this.dialogWaiters = new ExtensionDialogWaiters();
|
|
638
648
|
this.pendingUnreadMutations = [];
|
|
@@ -671,6 +681,7 @@ export class PiSessionService {
|
|
|
671
681
|
this.pendingExtensionDialogStore = deps.pendingExtensionDialogStore ?? new PendingExtensionDialogStore();
|
|
672
682
|
this.extensionDialogsTimeoutMs = deps.extensionDialogsTimeoutMs ?? DEFAULT_EXTENSION_DIALOGS_TIMEOUT_MS;
|
|
673
683
|
this.catalogRefreshStatus = deps.catalogRefreshStatus;
|
|
684
|
+
this.config = deps.config;
|
|
674
685
|
this.unreadPublicationRetryInitialMs = Math.max(0, deps.unreadPublicationRetryDelayMs ?? DEFAULT_UNREAD_PUBLICATION_RETRY_MS);
|
|
675
686
|
this.unreadPublicationRetryDelayMs = this.unreadPublicationRetryInitialMs;
|
|
676
687
|
// Subsessions are gated behind their own flag, and they
|
|
@@ -987,24 +998,84 @@ export class PiSessionService {
|
|
|
987
998
|
...(modelUsed === undefined ? {} : { model: modelSpecOf(modelUsed) }),
|
|
988
999
|
};
|
|
989
1000
|
}
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
1001
|
+
modelScopeContext(session) {
|
|
1002
|
+
const settingsKey = session.settingsManager.piWebScopeKey ?? "global";
|
|
1003
|
+
const projectSettings = session.settingsManager.getProjectSettings?.() ?? {};
|
|
1004
|
+
if (Object.hasOwn(projectSettings, "enabledModels")) {
|
|
1005
|
+
const workspace = canonicalizeStoredCwd(session.sessionManager.getCwd());
|
|
1006
|
+
return { key: `${settingsKey}:workspace:${workspace}`, editable: false };
|
|
1007
|
+
}
|
|
1008
|
+
return { key: settingsKey, editable: session.settingsManager.piWebModelScopeEditable !== false };
|
|
1009
|
+
}
|
|
1010
|
+
async modelScopeSnapshot(session, context = this.modelScopeContext(session)) {
|
|
1011
|
+
const existing = this.modelScopeStates.get(context.key);
|
|
1012
|
+
if (existing !== undefined)
|
|
1013
|
+
return existing;
|
|
1014
|
+
const pending = this.modelScopeInitializations.get(context.key);
|
|
1015
|
+
if (pending !== undefined)
|
|
1016
|
+
return pending;
|
|
1017
|
+
const initialization = (async () => {
|
|
1018
|
+
const enabledIds = await resolveEnabledModelIds({
|
|
1019
|
+
settingsManager: session.settingsManager,
|
|
1020
|
+
// Runtime-backed sessions always hold the SDK ModelRuntime; PiAgentSession keeps a narrow public seam for tests.
|
|
1021
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
1022
|
+
modelRuntime: session.modelRuntime,
|
|
1023
|
+
scopedModels: session.scopedModels,
|
|
1024
|
+
});
|
|
1025
|
+
const snapshot = { enabledIds: enabledIds === null ? null : [...enabledIds], revision: 0 };
|
|
1026
|
+
this.modelScopeStates.set(context.key, snapshot);
|
|
1027
|
+
return snapshot;
|
|
1028
|
+
})();
|
|
1029
|
+
this.modelScopeInitializations.set(context.key, initialization);
|
|
1030
|
+
try {
|
|
1031
|
+
return await initialization;
|
|
1032
|
+
}
|
|
1033
|
+
finally {
|
|
1034
|
+
if (this.modelScopeInitializations.get(context.key) === initialization)
|
|
1035
|
+
this.modelScopeInitializations.delete(context.key);
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
async synchronizeSessionModelScope(session, available) {
|
|
1039
|
+
const context = this.modelScopeContext(session);
|
|
1040
|
+
const snapshot = await this.modelScopeSnapshot(session, context);
|
|
1041
|
+
const catalogKey = available.map(modelScopeId).join("\0");
|
|
1042
|
+
const cached = this.modelScopeCache.get(session);
|
|
1043
|
+
if (cached?.scopeKey === context.key && cached.revision === snapshot.revision && cached.catalogKey === catalogKey)
|
|
1044
|
+
return;
|
|
1045
|
+
session.setScopedModels(scopedModelsFromEnabledIds(available, snapshot.enabledIds, session.scopedModels));
|
|
1046
|
+
this.modelScopeCache.set(session, { scopeKey: context.key, revision: snapshot.revision, catalogKey });
|
|
1047
|
+
}
|
|
995
1048
|
async sessionModelCandidates(session) {
|
|
996
|
-
// Pi 0.84 keeps request paths local-only; the bounded catalog refresher is
|
|
997
|
-
// the only path allowed to fetch provider catalogs over the network.
|
|
998
1049
|
await session.modelRuntime.refresh({ allowNetwork: false });
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1050
|
+
const available = session.modelRuntime.getAvailableSnapshot();
|
|
1051
|
+
await this.synchronizeSessionModelScope(session, available);
|
|
1052
|
+
return session.scopedModels.length > 0 ? session.scopedModels.map((scoped) => scoped.model) : available;
|
|
1002
1053
|
}
|
|
1003
|
-
async enabledModelCatalog(
|
|
1004
|
-
const session = runtime.session;
|
|
1054
|
+
async enabledModelCatalog(session) {
|
|
1005
1055
|
await session.modelRuntime.refresh({ allowNetwork: false });
|
|
1006
|
-
const
|
|
1007
|
-
|
|
1056
|
+
const available = session.modelRuntime.getAvailableSnapshot();
|
|
1057
|
+
await this.synchronizeSessionModelScope(session, available);
|
|
1058
|
+
const context = this.modelScopeContext(session);
|
|
1059
|
+
return catalogWithEnabledFirst(available, (await this.modelScopeSnapshot(session, context)).enabledIds);
|
|
1060
|
+
}
|
|
1061
|
+
runModelScopeMutation(operation) {
|
|
1062
|
+
const queued = this.modelScopeMutationQueue.then(operation);
|
|
1063
|
+
this.modelScopeMutationQueue = queued.then(() => undefined, () => undefined);
|
|
1064
|
+
return queued;
|
|
1065
|
+
}
|
|
1066
|
+
applyEnabledModelScope(session, available, enabledIds) {
|
|
1067
|
+
const context = this.modelScopeContext(session);
|
|
1068
|
+
const availableIds = available.map(modelScopeId);
|
|
1069
|
+
const persisted = persistedEnabledModelPatterns(enabledIds, availableIds);
|
|
1070
|
+
const nextState = {
|
|
1071
|
+
enabledIds: persisted === undefined ? null : enabledIds === null ? [] : [...enabledIds],
|
|
1072
|
+
revision: ++this.modelScopeRevision,
|
|
1073
|
+
};
|
|
1074
|
+
session.settingsManager.setEnabledModels(persisted);
|
|
1075
|
+
this.modelScopeStates.set(context.key, nextState);
|
|
1076
|
+
session.setScopedModels(scopedModelsFromEnabledIds(available, nextState.enabledIds, session.scopedModels));
|
|
1077
|
+
this.modelScopeCache.set(session, { scopeKey: context.key, revision: nextState.revision, catalogKey: available.map(modelScopeId).join("\0") });
|
|
1078
|
+
this.events.publishGlobal({ type: "models.changed", revision: nextState.revision });
|
|
1008
1079
|
}
|
|
1009
1080
|
/**
|
|
1010
1081
|
* Resolve a strict `provider/model-id` spec from a spawn tool against the
|
|
@@ -1548,10 +1619,14 @@ export class PiSessionService {
|
|
|
1548
1619
|
}
|
|
1549
1620
|
async messages(ref, page, managementContext) {
|
|
1550
1621
|
const session = await this.getOrOpen(ref, managementContext);
|
|
1551
|
-
return pageMessagesAtSafeBoundary(
|
|
1622
|
+
return pageMessagesAtSafeBoundary(historyMessagesFromEntries(await this.readableSessionBranch(session)), page);
|
|
1552
1623
|
}
|
|
1553
1624
|
async status(ref, managementContext) {
|
|
1554
|
-
|
|
1625
|
+
const session = await this.sessionForStatusOrDialogClose(ref, managementContext);
|
|
1626
|
+
if (this.hasActiveWork(session))
|
|
1627
|
+
return this.statusFromSession(session);
|
|
1628
|
+
const branch = await this.readableSessionBranch(session);
|
|
1629
|
+
return this.statusFromSession(session, transcriptMessageCount(branch));
|
|
1555
1630
|
}
|
|
1556
1631
|
async searchCandidates(cwd, normalizedQuery, managementContext) {
|
|
1557
1632
|
const listing = await this.listWorkspaceSessions(cwd, managementContext);
|
|
@@ -1588,38 +1663,60 @@ export class PiSessionService {
|
|
|
1588
1663
|
return models.map(modelToClientModel);
|
|
1589
1664
|
}
|
|
1590
1665
|
async modelCatalog(ref, managementContext) {
|
|
1591
|
-
const
|
|
1592
|
-
|
|
1666
|
+
const session = await this.getOrOpen(ref, managementContext);
|
|
1667
|
+
const scope = this.modelScopeContext(session);
|
|
1668
|
+
return (await this.enabledModelCatalog(session)).map((entry) => catalogEntryToClientModel(entry, scope.editable));
|
|
1593
1669
|
}
|
|
1594
1670
|
async setModelEnabled(ref, provider, modelId, enabled, managementContext) {
|
|
1595
1671
|
if (managementContext !== undefined)
|
|
1596
1672
|
throw new Error("管理嵌入模式不允许修改已启用模型范围");
|
|
1597
1673
|
await this.assertWritable(ref);
|
|
1598
|
-
const
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
const
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1674
|
+
const session = await this.getOrOpen(ref);
|
|
1675
|
+
return this.runModelScopeMutation(async () => {
|
|
1676
|
+
const scope = this.modelScopeContext(session);
|
|
1677
|
+
if (!scope.editable)
|
|
1678
|
+
throw new Error("模型可用范围由此工作区的 .pi/settings.json 控制");
|
|
1679
|
+
this.assertTreeNavigationInactive(session, "change enabled models");
|
|
1680
|
+
await session.modelRuntime.refresh({ allowNetwork: false });
|
|
1681
|
+
const currentIds = (await this.modelScopeSnapshot(session, scope)).enabledIds;
|
|
1682
|
+
const available = session.modelRuntime.getAvailableSnapshot();
|
|
1683
|
+
const availableIds = available.map(modelScopeId);
|
|
1684
|
+
const targetId = `${provider}/${modelId}`;
|
|
1685
|
+
if (!availableIds.includes(targetId))
|
|
1686
|
+
throw new Error(`未找到模型:${targetId}`);
|
|
1687
|
+
if (!enabled && session.model !== undefined && modelScopeId(session.model) === targetId)
|
|
1688
|
+
throw new Error("不能停用当前模型");
|
|
1689
|
+
const nextIds = applyEnabledModelToggle(currentIds, availableIds, targetId, enabled);
|
|
1690
|
+
this.assertTreeNavigationInactive(session, "change enabled models");
|
|
1691
|
+
if (nextIds !== currentIds)
|
|
1692
|
+
this.applyEnabledModelScope(session, available, nextIds);
|
|
1693
|
+
return (await this.enabledModelCatalog(session)).map((entry) => catalogEntryToClientModel(entry));
|
|
1694
|
+
});
|
|
1695
|
+
}
|
|
1696
|
+
async setModelScope(ref, mode, managementContext) {
|
|
1697
|
+
if (managementContext !== undefined)
|
|
1698
|
+
throw new Error("管理嵌入模式不允许修改已启用模型范围");
|
|
1699
|
+
await this.assertWritable(ref);
|
|
1700
|
+
const session = await this.getOrOpen(ref);
|
|
1701
|
+
return this.runModelScopeMutation(async () => {
|
|
1702
|
+
const scope = this.modelScopeContext(session);
|
|
1703
|
+
if (!scope.editable)
|
|
1704
|
+
throw new Error("模型可用范围由此工作区的 .pi/settings.json 控制");
|
|
1705
|
+
this.assertTreeNavigationInactive(session, "change enabled models");
|
|
1706
|
+
await session.modelRuntime.refresh({ allowNetwork: false });
|
|
1707
|
+
const available = session.modelRuntime.getAvailableSnapshot();
|
|
1708
|
+
const availableIds = available.map(modelScopeId);
|
|
1709
|
+
let nextIds = null;
|
|
1710
|
+
if (mode === "current") {
|
|
1711
|
+
const current = session.model;
|
|
1712
|
+
if (current === undefined || !availableIds.includes(modelScopeId(current)))
|
|
1713
|
+
throw new Error("当前模型不可用");
|
|
1714
|
+
nextIds = [modelScopeId(current)];
|
|
1715
|
+
}
|
|
1716
|
+
this.assertTreeNavigationInactive(session, "change enabled models");
|
|
1717
|
+
this.applyEnabledModelScope(session, available, nextIds);
|
|
1718
|
+
return (await this.enabledModelCatalog(session)).map((entry) => catalogEntryToClientModel(entry));
|
|
1719
|
+
});
|
|
1623
1720
|
}
|
|
1624
1721
|
async setModel(ref, provider, modelId, managementContext) {
|
|
1625
1722
|
await this.assertWritable(ref);
|
|
@@ -1639,7 +1736,11 @@ export class PiSessionService {
|
|
|
1639
1736
|
async cycleModel(ref, direction, managementContext) {
|
|
1640
1737
|
await this.assertWritable(ref);
|
|
1641
1738
|
const session = await this.getOrOpen(ref, managementContext);
|
|
1642
|
-
const result = await this.
|
|
1739
|
+
const result = await this.runModelScopeMutation(async () => {
|
|
1740
|
+
await session.modelRuntime.refresh({ allowNetwork: false });
|
|
1741
|
+
await this.synchronizeSessionModelScope(session, session.modelRuntime.getAvailableSnapshot());
|
|
1742
|
+
return this.runSessionEntryMutation(session, "change models", () => session.cycleModel(direction));
|
|
1743
|
+
});
|
|
1643
1744
|
if (result === undefined)
|
|
1644
1745
|
throw new Error(session.scopedModels.length > 0 ? "作用域内只有一个模型" : "只有一个可用模型");
|
|
1645
1746
|
this.publishActivity(session, `模型:${result.model.id}`, "idle", result.model.provider);
|
|
@@ -1752,7 +1853,13 @@ export class PiSessionService {
|
|
|
1752
1853
|
return [];
|
|
1753
1854
|
await this.assertWritable(ref);
|
|
1754
1855
|
const active = await this.getActive(ref, managementContext);
|
|
1755
|
-
|
|
1856
|
+
const cwd = active.runtime.cwd;
|
|
1857
|
+
const effectiveFolder = folder ?? (await this.workspaceAttachmentsConfig(cwd)).defaultFolder;
|
|
1858
|
+
return saveAttachmentsToWorkspace(cwd, parsed, effectiveFolder === undefined ? {} : { folder: effectiveFolder });
|
|
1859
|
+
}
|
|
1860
|
+
async workspaceAttachmentsConfig(cwd) {
|
|
1861
|
+
const globalConfig = this.config === undefined ? {} : (await this.config.read()).effectiveConfig;
|
|
1862
|
+
return loadEffectiveProjectAttachmentsConfig(cwd, globalConfig);
|
|
1756
1863
|
}
|
|
1757
1864
|
async shell(ref, text, managementContext) {
|
|
1758
1865
|
await this.assertWritable(ref);
|
|
@@ -2492,6 +2599,35 @@ export class PiSessionService {
|
|
|
2492
2599
|
const reachable = this.activeForLookup(ref, managementContext)?.runtime.session ?? this.startupSessionForLookup(ref, managementContext);
|
|
2493
2600
|
return reachable ?? this.getOrOpen(ref, managementContext);
|
|
2494
2601
|
}
|
|
2602
|
+
async readableSessionBranch(session) {
|
|
2603
|
+
if (this.hasActiveWork(session) || this.sessionManager.readBranch === undefined)
|
|
2604
|
+
return session.sessionManager.getBranch();
|
|
2605
|
+
const leafId = session.sessionManager.getLeafId();
|
|
2606
|
+
const latestEntry = session.sessionManager.getEntries?.().at(-1);
|
|
2607
|
+
// Unsummarized tree navigation changes only the SDK's in-memory leaf.
|
|
2608
|
+
if (isRecord(latestEntry) && typeof latestEntry["id"] === "string" && latestEntry["id"] !== leafId)
|
|
2609
|
+
return session.sessionManager.getBranch();
|
|
2610
|
+
const sessionFile = session.sessionFile ?? session.sessionManager.getSessionFile();
|
|
2611
|
+
const resolvedPath = sessionFile === undefined ? await this.idleSessionFilePath(session) : undefined;
|
|
2612
|
+
if (this.hasActiveWork(session))
|
|
2613
|
+
return session.sessionManager.getBranch();
|
|
2614
|
+
const path = sessionFile ?? resolvedPath;
|
|
2615
|
+
if (path === undefined)
|
|
2616
|
+
return session.sessionManager.getBranch();
|
|
2617
|
+
const snapshot = await this.sessionManager.readBranch(path);
|
|
2618
|
+
if (snapshot === undefined)
|
|
2619
|
+
return session.sessionManager.getBranch();
|
|
2620
|
+
return this.hasActiveWork(session) || session.sessionManager.getLeafId() !== leafId ? session.sessionManager.getBranch() : snapshot;
|
|
2621
|
+
}
|
|
2622
|
+
async idleSessionFilePath(session) {
|
|
2623
|
+
const cached = this.idleSessionFileResolutions.get(session);
|
|
2624
|
+
const at = this.now().getTime();
|
|
2625
|
+
if (cached !== undefined && at - cached.at < IDLE_SESSION_FILE_RESOLUTION_THROTTLE_MS)
|
|
2626
|
+
return cached.path;
|
|
2627
|
+
const match = await this.sessionManager.resolveSessionFile?.(session.sessionManager.getCwd(), session.sessionId);
|
|
2628
|
+
this.idleSessionFileResolutions.set(session, { at, path: match?.path });
|
|
2629
|
+
return match?.path;
|
|
2630
|
+
}
|
|
2495
2631
|
async getActive(ref, managementContext) {
|
|
2496
2632
|
const active = this.activeForLookup(ref, managementContext);
|
|
2497
2633
|
if (active !== undefined)
|
|
@@ -3153,7 +3289,7 @@ export class PiSessionService {
|
|
|
3153
3289
|
for (const session of sessions)
|
|
3154
3290
|
this.publishStatus(session);
|
|
3155
3291
|
}
|
|
3156
|
-
statusFromSession(session) {
|
|
3292
|
+
statusFromSession(session, messageCount = session.messages.length) {
|
|
3157
3293
|
const stats = session.getSessionStats();
|
|
3158
3294
|
const model = session.model === undefined ? undefined : modelToClientModel(session.model);
|
|
3159
3295
|
const contextUsage = session.getContextUsage();
|
|
@@ -3170,7 +3306,7 @@ export class PiSessionService {
|
|
|
3170
3306
|
isBashRunning: session.isBashRunning,
|
|
3171
3307
|
pendingMessageCount: this.pendingMessageCount(session),
|
|
3172
3308
|
queuedMessages: queuedMessagesFromSession(session, this.compactionQueuedMessages(session.sessionId)),
|
|
3173
|
-
messageCount
|
|
3309
|
+
messageCount,
|
|
3174
3310
|
tokens: stats.tokens,
|
|
3175
3311
|
cost: stats.cost,
|
|
3176
3312
|
...(contextUsage === undefined ? {} : { contextUsage }),
|
|
@@ -3684,14 +3820,15 @@ function modelToClientModel(model) {
|
|
|
3684
3820
|
...(reasoning === undefined ? {} : { reasoning }),
|
|
3685
3821
|
};
|
|
3686
3822
|
}
|
|
3687
|
-
function
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
|
|
3691
|
-
|
|
3692
|
-
|
|
3693
|
-
|
|
3694
|
-
|
|
3823
|
+
function catalogEntryToClientModel(entry, editable = true) {
|
|
3824
|
+
return {
|
|
3825
|
+
...modelToClientModel(entry.model),
|
|
3826
|
+
provider: entry.model.provider,
|
|
3827
|
+
id: entry.model.id,
|
|
3828
|
+
enabled: entry.enabled,
|
|
3829
|
+
catalogIndex: entry.catalogIndex,
|
|
3830
|
+
...(editable ? {} : { editable: false }),
|
|
3831
|
+
};
|
|
3695
3832
|
}
|
|
3696
3833
|
function notificationIdentityForSession(session) {
|
|
3697
3834
|
return {
|
|
@@ -3963,9 +4100,12 @@ function historyMessages(session) {
|
|
|
3963
4100
|
return historyMessagesFromManager(session.sessionManager);
|
|
3964
4101
|
}
|
|
3965
4102
|
function historyMessagesFromManager(sessionManager) {
|
|
4103
|
+
return historyMessagesFromEntries(sessionManager.getBranch());
|
|
4104
|
+
}
|
|
4105
|
+
function historyMessagesFromEntries(entries) {
|
|
3966
4106
|
const messages = [];
|
|
3967
4107
|
let thinkingLevel;
|
|
3968
|
-
for (const entry of
|
|
4108
|
+
for (const entry of entries) {
|
|
3969
4109
|
if (!isRecord(entry))
|
|
3970
4110
|
continue;
|
|
3971
4111
|
if (entry["type"] === "message")
|
|
@@ -3984,6 +4124,14 @@ function historyMessagesFromManager(sessionManager) {
|
|
|
3984
4124
|
}
|
|
3985
4125
|
return messages;
|
|
3986
4126
|
}
|
|
4127
|
+
function transcriptMessageCount(entries) {
|
|
4128
|
+
let count = 0;
|
|
4129
|
+
for (const entry of entries) {
|
|
4130
|
+
if (isRecord(entry) && entry["type"] === "message")
|
|
4131
|
+
count += 1;
|
|
4132
|
+
}
|
|
4133
|
+
return count;
|
|
4134
|
+
}
|
|
3987
4135
|
/** custom entry type used to persist parent -> child subsession links outside LLM context. */
|
|
3988
4136
|
const SUBSESSION_LINK_CUSTOM_TYPE = "pi-web.subsession.link";
|
|
3989
4137
|
/** custom entry type used to mark a child as created by spawn_subsession. */
|