@chainingintention/pi-web-cn 1.202608.5 → 1.202608.7
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 +8 -0
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/{CodeViewer-BUT2Idcq.js → CodeViewer-CWKEeX0r.js} +1 -1
- package/dist/client/assets/{TerminalPanel-b8CZY7en.js → TerminalPanel-BmA7Ayzk.js} +1 -1
- package/dist/client/assets/{UnifiedDiffViewer-CXY7AXrD.js → UnifiedDiffViewer-2DACwxFY.js} +1 -1
- package/dist/client/assets/{index-80SI7dCz.js → index-D6j67Izj.js} +491 -300
- package/dist/client/index.html +1 -1
- package/dist/config.js +86 -0
- package/dist/config.js.map +1 -1
- package/dist/pi-web-plugins/relays/relaysPanelElement.js +112 -46
- package/dist/server/app.js +4 -1
- package/dist/server/app.js.map +1 -1
- package/dist/server/audit/managementAuditStore.js +211 -0
- package/dist/server/audit/managementAuditStore.js.map +1 -0
- package/dist/server/audit/normalToolAuditCli.js +143 -0
- package/dist/server/audit/normalToolAuditCli.js.map +1 -0
- package/dist/server/audit/normalToolAuditStore.js +264 -0
- package/dist/server/audit/normalToolAuditStore.js.map +1 -0
- package/dist/server/managementEmbed.js +19 -1
- package/dist/server/managementEmbed.js.map +1 -1
- package/dist/server/piWebStatus.js +7 -1
- package/dist/server/piWebStatus.js.map +1 -1
- package/dist/server/requestLogging.js +10 -7
- package/dist/server/requestLogging.js.map +1 -1
- package/dist/server/sessiond/sessionProxyRoutes.js +13 -7
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
- package/dist/server/sessiond/sessionServiceDependencies.js +1 -0
- package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -1
- package/dist/server/sessiond.js +91 -4
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/extensionDialogWaiters.js +76 -0
- package/dist/server/sessions/extensionDialogWaiters.js.map +1 -0
- package/dist/server/sessions/managementPermissionSystem.js +8 -8
- package/dist/server/sessions/managementPermissionSystem.js.map +1 -1
- package/dist/server/sessions/pendingExtensionDialogStore.js +196 -0
- package/dist/server/sessions/pendingExtensionDialogStore.js.map +1 -0
- package/dist/server/sessions/piSessionService.js +493 -78
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/sessionRoutes.js +54 -27
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/server/sessions/sessionUiEvents.js +9 -2
- package/dist/server/sessions/sessionUiEvents.js.map +1 -1
- package/dist/server/sessions/spawnSessionTool.js +8 -1
- package/dist/server/sessions/spawnSessionTool.js.map +1 -1
- package/dist/server/sessions/spawnSubsessionTool.js +7 -1
- package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
- package/dist/server/workbench/accessStateRoutes.js +30 -0
- package/dist/server/workbench/accessStateRoutes.js.map +1 -0
- package/dist/server/workbench/accessStateStore.js +29 -0
- package/dist/server/workbench/accessStateStore.js.map +1 -0
- package/dist/server/workbench/capabilitySearch.js +62 -0
- package/dist/server/workbench/capabilitySearch.js.map +1 -0
- package/dist/server/workbench/gatewayIntegration.js +56 -0
- package/dist/server/workbench/gatewayIntegration.js.map +1 -0
- package/dist/server/workbench/mcpClient.js +148 -0
- package/dist/server/workbench/mcpClient.js.map +1 -0
- package/dist/server/workbench/skillSync.js +375 -0
- package/dist/server/workbench/skillSync.js.map +1 -0
- package/dist/server/workbench/types.js +2 -0
- package/dist/server/workbench/types.js.map +1 -0
- package/dist/server/workbench/workbenchClient.js +136 -0
- package/dist/server/workbench/workbenchClient.js.map +1 -0
- package/dist/server/workbench/workbenchTools.js +145 -0
- package/dist/server/workbench/workbenchTools.js.map +1 -0
- package/dist/shared/apiTypes.d.ts +141 -1
- package/dist/shared/apiTypes.js +8 -0
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/federatedRoutes.js +2 -0
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/dist/shared/piWebConfigParsing.js +94 -0
- package/dist/shared/piWebConfigParsing.js.map +1 -1
- package/docs/config.md +86 -1
- package/docs/plugins.md +14 -0
- package/package.json +7 -3
package/dist/server/sessiond.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { mkdir, rm } from "node:fs/promises";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
|
+
import { homedir } from "node:os";
|
|
4
5
|
import { ModelRuntime } from "@earendil-works/pi-coding-agent";
|
|
5
6
|
import Fastify from "fastify";
|
|
6
7
|
import fastifyWebsocket from "@fastify/websocket";
|
|
@@ -22,10 +23,18 @@ import { TerminalService } from "./terminals/terminalService.js";
|
|
|
22
23
|
import { registerTerminalRoutes } from "./terminals/terminalRoutes.js";
|
|
23
24
|
import { getPiWebRuntimeComponent } from "./piWebStatus.js";
|
|
24
25
|
import { SESSIOND_RUNTIME_CAPABILITIES } from "../shared/capabilities.js";
|
|
25
|
-
import { agentSessionDirEnvKeys, effectivePiWebConfig, maxUploadBytes, piWebDataDir } from "../config.js";
|
|
26
|
+
import { DEFAULT_MANAGEMENT_AUDIT_INDEX_PREFIX, DEFAULT_MANAGEMENT_AUDIT_RETENTION_DAYS, DEFAULT_NORMAL_TOOL_AUDIT_MAX_ROWS, DEFAULT_NORMAL_TOOL_AUDIT_RETENTION_DAYS, agentSessionDirEnvKeys, effectivePiWebConfig, maxUploadBytes, piWebDataDir } from "../config.js";
|
|
26
27
|
import { createActiveAgentProfileDescriptor } from "../sessiond/activeAgentProfile.js";
|
|
27
28
|
import { runSessionDaemonStartup } from "./sessiond/sessionDaemonStartup.js";
|
|
28
29
|
import { requestLoggerOptions } from "./requestLogging.js";
|
|
30
|
+
import { WorkbenchAccessStateStore } from "./workbench/accessStateStore.js";
|
|
31
|
+
import { registerWorkbenchAccessStateRoutes } from "./workbench/accessStateRoutes.js";
|
|
32
|
+
import { WorkbenchClient } from "./workbench/workbenchClient.js";
|
|
33
|
+
import { WorkbenchMcpClient } from "./workbench/mcpClient.js";
|
|
34
|
+
import { WorkbenchSkillSynchronizer } from "./workbench/skillSync.js";
|
|
35
|
+
import { NormalToolAuditStore, normalToolAuditDatabasePath } from "./audit/normalToolAuditStore.js";
|
|
36
|
+
import { ManagementAuditStore } from "./audit/managementAuditStore.js";
|
|
37
|
+
import { managementProjectIdForCwd } from "./managementEmbed.js";
|
|
29
38
|
const daemonEnvironment = Object.freeze({ ...process.env });
|
|
30
39
|
const { config } = effectivePiWebConfig({ env: daemonEnvironment });
|
|
31
40
|
const activeAgentProfile = createActiveAgentProfileDescriptor({
|
|
@@ -49,6 +58,64 @@ await runSessionDaemonStartup({
|
|
|
49
58
|
modelsPath: join(activeAgentProfile.dir, "models.json"),
|
|
50
59
|
}),
|
|
51
60
|
});
|
|
61
|
+
const accessStates = new WorkbenchAccessStateStore();
|
|
62
|
+
const normalAuditConfig = config.auditLog?.normalMode;
|
|
63
|
+
let normalToolAudit;
|
|
64
|
+
if (normalAuditConfig?.enabled !== false) {
|
|
65
|
+
try {
|
|
66
|
+
normalToolAudit = new NormalToolAuditStore({
|
|
67
|
+
path: normalToolAuditDatabasePath(daemonEnvironment),
|
|
68
|
+
retentionDays: normalAuditConfig?.retentionDays ?? DEFAULT_NORMAL_TOOL_AUDIT_RETENTION_DAYS,
|
|
69
|
+
maxRows: normalAuditConfig?.maxRows ?? DEFAULT_NORMAL_TOOL_AUDIT_MAX_ROWS,
|
|
70
|
+
onError: (error) => {
|
|
71
|
+
app.log.info({ error: error instanceof Error ? error.message : String(error) }, "failed to maintain ordinary-mode tool audit database");
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
app.log.info({ error: error instanceof Error ? error.message : String(error) }, "failed to initialize ordinary-mode tool audit database");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const managementAuditConfig = config.auditLog?.managementMode;
|
|
80
|
+
let managementAudit;
|
|
81
|
+
if (managementAuditConfig?.enabled === true && managementAuditConfig.baseUrl !== undefined) {
|
|
82
|
+
const apiKeyValue = daemonEnvironment["PI_WEB_AUDIT_ES_API_KEY"]?.trim();
|
|
83
|
+
const usernameValue = daemonEnvironment["PI_WEB_AUDIT_ES_USERNAME"]?.trim();
|
|
84
|
+
const apiKey = apiKeyValue === undefined || apiKeyValue === "" ? undefined : apiKeyValue;
|
|
85
|
+
const username = usernameValue === undefined || usernameValue === "" ? undefined : usernameValue;
|
|
86
|
+
const password = daemonEnvironment["PI_WEB_AUDIT_ES_PASSWORD"];
|
|
87
|
+
if (apiKey === undefined && ((username === undefined) !== (password === undefined))) {
|
|
88
|
+
app.log.info("management audit Elasticsearch basic authentication requires both PI_WEB_AUDIT_ES_USERNAME and PI_WEB_AUDIT_ES_PASSWORD");
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
managementAudit = new ManagementAuditStore({
|
|
92
|
+
baseUrl: managementAuditConfig.baseUrl,
|
|
93
|
+
indexPrefix: managementAuditConfig.indexPrefix ?? DEFAULT_MANAGEMENT_AUDIT_INDEX_PREFIX,
|
|
94
|
+
retentionDays: managementAuditConfig.retentionDays ?? DEFAULT_MANAGEMENT_AUDIT_RETENTION_DAYS,
|
|
95
|
+
...(apiKey === undefined ? {} : { apiKey }),
|
|
96
|
+
...(apiKey !== undefined || username === undefined || password === undefined ? {} : { username, password }),
|
|
97
|
+
onError: (error) => { app.log.info({ error: error instanceof Error ? error.message : String(error) }, "management audit Elasticsearch operation failed"); },
|
|
98
|
+
});
|
|
99
|
+
await managementAudit.initialize().catch((error) => {
|
|
100
|
+
app.log.info({ error: error instanceof Error ? error.message : String(error) }, "failed to initialize management audit Elasticsearch storage");
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const workbench = config.workbenchIntegration === undefined ? undefined : (() => {
|
|
105
|
+
const client = new WorkbenchClient({
|
|
106
|
+
baseUrl: config.workbenchIntegration.baseUrl,
|
|
107
|
+
requestTimeoutMs: config.workbenchIntegration.requestTimeoutMs ?? 10_000,
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
accessStates,
|
|
111
|
+
client,
|
|
112
|
+
mcp: new WorkbenchMcpClient({
|
|
113
|
+
mcpUrl: config.workbenchIntegration.mcpUrl,
|
|
114
|
+
timeoutMs: config.workbenchIntegration.capabilityTimeoutMs ?? 30_000,
|
|
115
|
+
}),
|
|
116
|
+
skills: new WorkbenchSkillSynchronizer(config.workbenchIntegration, client, piWebDataDir(daemonEnvironment), fetch, app.log),
|
|
117
|
+
};
|
|
118
|
+
})();
|
|
52
119
|
const spawnTargets = config.spawnSessions
|
|
53
120
|
? new ProjectScopedSpawnTargetResolver({ projects, workspaces })
|
|
54
121
|
: undefined;
|
|
@@ -70,8 +137,15 @@ await runSessionDaemonStartup({
|
|
|
70
137
|
agentDir: activeAgentProfile.dir,
|
|
71
138
|
workspaceActivity,
|
|
72
139
|
logger: app.log,
|
|
140
|
+
...(normalToolAudit === undefined ? {} : { normalToolAudit }),
|
|
141
|
+
...(managementAudit === undefined ? {} : {
|
|
142
|
+
managementAudit,
|
|
143
|
+
managementProjectIdForCwd: (cwd, context) => managementProjectIdForCwd(config.managementEmbed?.projectRoot ?? join(homedir(), "PiWeb"), context, cwd),
|
|
144
|
+
}),
|
|
73
145
|
...(spawnTargets === undefined ? {} : { spawnTargets }),
|
|
74
146
|
subsessionsEnabled: spawnTargets !== undefined && config.subsessions,
|
|
147
|
+
extensionDialogsTimeoutMs: config.extensionDialogsTimeoutMs,
|
|
148
|
+
...(workbench === undefined ? {} : { workbench }),
|
|
75
149
|
sessionManager: createPiSessionManagerGateway({
|
|
76
150
|
agentDir: activeAgentProfile.dir,
|
|
77
151
|
env: daemonEnvironment,
|
|
@@ -85,13 +159,14 @@ await runSessionDaemonStartup({
|
|
|
85
159
|
...getPiWebRuntimeComponent("sessiond", SESSIOND_RUNTIME_CAPABILITIES),
|
|
86
160
|
activeAgentProfile,
|
|
87
161
|
});
|
|
88
|
-
return { eventHub, workspaceActivity, projectAuth, managementAuth, sessions, terminals, activeAgentProfile, runtimeComponent };
|
|
162
|
+
return { eventHub, workspaceActivity, projectAuth, managementAuth, sessions, terminals, accessStates, normalToolAudit, managementAudit, activeAgentProfile, runtimeComponent };
|
|
89
163
|
},
|
|
90
|
-
registerRoutes({ eventHub, workspaceActivity, projectAuth, managementAuth, sessions, terminals, runtimeComponent }) {
|
|
164
|
+
registerRoutes({ eventHub, workspaceActivity, projectAuth, managementAuth, sessions, terminals, accessStates, runtimeComponent }) {
|
|
91
165
|
registerWorkspaceActivityRoutes(app, workspaceActivity);
|
|
92
166
|
registerAuthRoutes(app, { normal: projectAuth, management: managementAuth });
|
|
93
167
|
registerSessionRoutes(app, sessions, eventHub);
|
|
94
168
|
registerTerminalRoutes(app, terminals);
|
|
169
|
+
registerWorkbenchAccessStateRoutes(app, accessStates);
|
|
95
170
|
app.get("/health", () => ({
|
|
96
171
|
ok: true,
|
|
97
172
|
activeSessions: sessions.activeCount(),
|
|
@@ -106,7 +181,7 @@ await runSessionDaemonStartup({
|
|
|
106
181
|
}));
|
|
107
182
|
app.get("/runtime", () => runtimeComponent);
|
|
108
183
|
},
|
|
109
|
-
async listen({ projectAuth, managementAuth, sessions, terminals }) {
|
|
184
|
+
async listen({ projectAuth, managementAuth, sessions, terminals, normalToolAudit, managementAudit }) {
|
|
110
185
|
let shuttingDown = false;
|
|
111
186
|
async function shutdown(signal) {
|
|
112
187
|
if (shuttingDown)
|
|
@@ -117,6 +192,18 @@ await runSessionDaemonStartup({
|
|
|
117
192
|
await projectAuth.dispose();
|
|
118
193
|
managementAuth.dispose();
|
|
119
194
|
await sessions.dispose();
|
|
195
|
+
try {
|
|
196
|
+
normalToolAudit?.close();
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
app.log.info({ error: error instanceof Error ? error.message : String(error) }, "failed to close ordinary-mode tool audit database");
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
await managementAudit?.close();
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
app.log.info({ error: error instanceof Error ? error.message : String(error) }, "failed to flush management audit Elasticsearch queue");
|
|
206
|
+
}
|
|
120
207
|
await app.close();
|
|
121
208
|
}
|
|
122
209
|
process.once("SIGINT", (signal) => { void shutdown(signal); });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessiond.js","sourceRoot":"","sources":["../../src/server/sessiond.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sessiond.js","sourceRoot":"","sources":["../../src/server/sessiond.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/** The value an extension's dialog Promise settles with on any close without an answer. */
|
|
2
|
+
export function extensionDialogCancelValue(kind) {
|
|
3
|
+
return kind === "confirm" ? false : undefined;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* The auto-cancel delay of one dialog: the sooner of the extension's own
|
|
7
|
+
* `timeout` and the daemon's `extensionDialogsTimeoutMs` default, where `0`
|
|
8
|
+
* (or an invalid extension value, defensively ignored) means "waits forever".
|
|
9
|
+
*/
|
|
10
|
+
export function effectiveExtensionDialogTimeoutMs(extensionTimeoutMs, daemonDefaultMs) {
|
|
11
|
+
const fromExtension = typeof extensionTimeoutMs === "number" && Number.isFinite(extensionTimeoutMs) && extensionTimeoutMs > 0 ? extensionTimeoutMs : undefined;
|
|
12
|
+
const fromDaemon = daemonDefaultMs > 0 ? daemonDefaultMs : undefined;
|
|
13
|
+
if (fromExtension === undefined)
|
|
14
|
+
return fromDaemon;
|
|
15
|
+
if (fromDaemon === undefined)
|
|
16
|
+
return fromExtension;
|
|
17
|
+
return Math.min(fromExtension, fromDaemon);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The parked Promise resolvers behind open extension dialogs, plus the timers
|
|
21
|
+
* and signal subscriptions that can end a wait without the browser. Timers use
|
|
22
|
+
* the global `setTimeout`/`clearTimeout` looked up per call, the same seam the
|
|
23
|
+
* rest of the service's timer tests fake.
|
|
24
|
+
*
|
|
25
|
+
* Kept deliberately separate from {@link PendingExtensionDialogStore}: the
|
|
26
|
+
* store owns the domain state every browser sees, the waiters own the one
|
|
27
|
+
* in-memory resolver each open dialog parks inside extension code — state no
|
|
28
|
+
* browser ever observes and that must not survive the runtime. The pairing is
|
|
29
|
+
* the wiring's invariant: every open store record has exactly one parked
|
|
30
|
+
* waiter, and whoever closes the record settles the waiter exactly once.
|
|
31
|
+
*/
|
|
32
|
+
export class ExtensionDialogWaiters {
|
|
33
|
+
constructor() {
|
|
34
|
+
this.parked = new Map();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Park the extension-facing Promise for a dialog the store just opened. Arms
|
|
38
|
+
* the timeout and signal triggers; both are disarmed when the wait settles,
|
|
39
|
+
* so a settled wait can never be triggered (nor trigger twice).
|
|
40
|
+
*/
|
|
41
|
+
park(dialog, triggers = {}) {
|
|
42
|
+
return new Promise((resolve) => {
|
|
43
|
+
const parked = { cancelValue: extensionDialogCancelValue(dialog.kind), resolve };
|
|
44
|
+
if (triggers.timeoutMs !== undefined) {
|
|
45
|
+
const handle = setTimeout(() => { triggers.onTrigger?.("timeout"); }, triggers.timeoutMs);
|
|
46
|
+
parked.cancelArmedTimeout = () => { clearTimeout(handle); };
|
|
47
|
+
}
|
|
48
|
+
if (triggers.signal !== undefined) {
|
|
49
|
+
const signal = triggers.signal;
|
|
50
|
+
const onAbort = () => { triggers.onTrigger?.("cancelled"); };
|
|
51
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
52
|
+
parked.removeSignalListener = () => { signal.removeEventListener("abort", onAbort); };
|
|
53
|
+
}
|
|
54
|
+
this.parked.set(dialog.dialogId, parked);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/** Resolve the parked wait with the user's answer, which the store has already validated and recorded. */
|
|
58
|
+
settleWithAnswer(dialogId, answer) {
|
|
59
|
+
return this.settle(dialogId, (parked) => { parked.resolve(answer); });
|
|
60
|
+
}
|
|
61
|
+
/** Resolve the parked wait with the dialog kind's cancel value after a close without an answer. */
|
|
62
|
+
settleWithCancelValue(dialogId) {
|
|
63
|
+
return this.settle(dialogId, (parked) => { parked.resolve(parked.cancelValue); });
|
|
64
|
+
}
|
|
65
|
+
settle(dialogId, resolveParked) {
|
|
66
|
+
const parked = this.parked.get(dialogId);
|
|
67
|
+
if (parked === undefined)
|
|
68
|
+
return false;
|
|
69
|
+
this.parked.delete(dialogId);
|
|
70
|
+
parked.cancelArmedTimeout?.();
|
|
71
|
+
parked.removeSignalListener?.();
|
|
72
|
+
resolveParked(parked);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=extensionDialogWaiters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensionDialogWaiters.js","sourceRoot":"","sources":["../../../src/server/sessions/extensionDialogWaiters.ts"],"names":[],"mappings":"AA2BA,2FAA2F;AAC3F,MAAM,UAAU,0BAA0B,CAAC,IAAyB;IAClE,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iCAAiC,CAAC,kBAAsC,EAAE,eAAuB;IAC/G,MAAM,aAAa,GAAG,OAAO,kBAAkB,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/J,MAAM,UAAU,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IACnD,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC;IACnD,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,sBAAsB;IAAnC;QACmB,WAAM,GAAG,IAAI,GAAG,EAAiC,CAAC;IA2CrE,CAAC;IAzCC;;;;OAIG;IACH,IAAI,CAAC,MAA8B,EAAE,WAA0C,EAAE;QAC/E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,MAAM,GAA0B,EAAE,WAAW,EAAE,0BAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;YACxG,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC1F,MAAM,CAAC,kBAAkB,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC/B,MAAM,OAAO,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,MAAM,CAAC,oBAAoB,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,0GAA0G;IAC1G,gBAAgB,CAAC,QAAgB,EAAE,MAA6B;QAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,mGAAmG;IACnG,qBAAqB,CAAC,QAAgB;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;IAEO,MAAM,CAAC,QAAgB,EAAE,aAAsD;QACrF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7B,MAAM,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC9B,MAAM,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAChC,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -15,9 +15,9 @@ const ALWAYS_DENIED_TOOL_NAMES = [
|
|
|
15
15
|
"webfetch",
|
|
16
16
|
"websearch",
|
|
17
17
|
];
|
|
18
|
-
export function createManagementPermissionSystemPolicy(context) {
|
|
18
|
+
export function createManagementPermissionSystemPolicy(context, extraToolNames = []) {
|
|
19
19
|
const tools = { "*": "deny" };
|
|
20
|
-
for (const tool of managementAgentToolNames(context))
|
|
20
|
+
for (const tool of managementAgentToolNames(context, extraToolNames))
|
|
21
21
|
tools[tool] = "allow";
|
|
22
22
|
for (const tool of managementDeniedToolNames(context))
|
|
23
23
|
tools[tool] = "deny";
|
|
@@ -39,18 +39,18 @@ export function createManagementPermissionSystemPolicy(context) {
|
|
|
39
39
|
},
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
|
-
export function managementAgentToolNames(context) {
|
|
42
|
+
export function managementAgentToolNames(context, extraToolNames = []) {
|
|
43
43
|
const denied = new Set([...ALWAYS_DENIED_TOOL_NAMES, ...(context.tools?.deny ?? [])]);
|
|
44
44
|
const safeTools = MANAGEMENT_AGENT_TOOL_NAMES.filter((tool) => !denied.has(tool));
|
|
45
45
|
const allowed = context.tools?.allow;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return
|
|
46
|
+
const selected = allowed === undefined || allowed.length === 0 ? [...safeTools] : safeTools.filter((tool) => allowed.includes(tool));
|
|
47
|
+
const selectedNames = new Set(selected);
|
|
48
|
+
return [...selected, ...extraToolNames.filter((tool) => !denied.has(tool) && !selectedNames.has(tool))];
|
|
49
49
|
}
|
|
50
|
-
export async function writeManagementPermissionSystemPolicy(agentDir, cwd, context) {
|
|
50
|
+
export async function writeManagementPermissionSystemPolicy(agentDir, cwd, context, extraToolNames = []) {
|
|
51
51
|
const policyAgentDir = join(agentDir, "management-embed", "permission-system", safePathSegment(context.user.rootUserId), createHash("sha256").update(cwd).digest("hex").slice(0, 16));
|
|
52
52
|
await mkdir(policyAgentDir, { recursive: true });
|
|
53
|
-
await writeFile(join(policyAgentDir, "pi-permissions.jsonc"), `${JSON.stringify(createManagementPermissionSystemPolicy(context), null, 2)}\n`, "utf8");
|
|
53
|
+
await writeFile(join(policyAgentDir, "pi-permissions.jsonc"), `${JSON.stringify(createManagementPermissionSystemPolicy(context, extraToolNames), null, 2)}\n`, "utf8");
|
|
54
54
|
return policyAgentDir;
|
|
55
55
|
}
|
|
56
56
|
let runtimeEnvironmentQueue = Promise.resolve();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managementPermissionSystem.js","sourceRoot":"","sources":["../../../src/server/sessions/managementPermissionSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,qCAAqC,GAAG,uCAAuC,CAAC;AAE7F,MAAM,2BAA2B,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AACvG,MAAM,wBAAwB,GAAG;IAC/B,MAAM;IACN,OAAO;IACP,UAAU;IACV,uBAAuB;IACvB,YAAY;IACZ,MAAM;IACN,KAAK;IACL,MAAM;IACN,UAAU;IACV,WAAW;CACH,CAAC;AAsBX,MAAM,UAAU,sCAAsC,CAAC,OAA+B;
|
|
1
|
+
{"version":3,"file":"managementPermissionSystem.js","sourceRoot":"","sources":["../../../src/server/sessions/managementPermissionSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { EXTENSION_DIALOG_ID_MAX_LENGTH, EXTENSION_DIALOG_INPUT_MAX_LENGTH, EXTENSION_DIALOG_OPTION_LIMIT, EXTENSION_DIALOG_TEXT_MAX_LENGTH, } from "../../shared/apiTypes.js";
|
|
3
|
+
/** Rejected input: the dialog is malformed, or an answer does not fit its kind. */
|
|
4
|
+
export class PendingExtensionDialogValidationError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "PendingExtensionDialogValidationError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Daemon-owned open-dialog state: the extension dialogs of every session,
|
|
12
|
+
* several per session because each dialog is an independent blocking wait
|
|
13
|
+
* inside extension code — opening one must never supersede another.
|
|
14
|
+
*
|
|
15
|
+
* The store is pure domain logic — no Fastify, no Pi session, no I/O, no
|
|
16
|
+
* timers. It validates dialogs and answers and owns the open/answer/cancel
|
|
17
|
+
* transitions; callers hold the waiting Promise resolvers, publish the
|
|
18
|
+
* returned records and outcomes, and own the timers that turn `timeoutAt`
|
|
19
|
+
* into a `"timeout"` cancel.
|
|
20
|
+
*
|
|
21
|
+
* State is deliberately daemon-lifetime and in-memory. An open dialog is
|
|
22
|
+
* meaningful only while the session runtime whose extension is waiting on it
|
|
23
|
+
* exists, and browsers rehydrate open dialogs from `SessionStatus` rather
|
|
24
|
+
* than from disk.
|
|
25
|
+
*/
|
|
26
|
+
export class PendingExtensionDialogStore {
|
|
27
|
+
constructor(options = {}) {
|
|
28
|
+
/** Per-session open dialogs in insertion order, so `pendingDialogs` reads oldest first. */
|
|
29
|
+
this.openBySessionId = new Map();
|
|
30
|
+
this.now = options.now ?? (() => new Date());
|
|
31
|
+
this.createDialogId = options.createDialogId ?? randomUUID;
|
|
32
|
+
}
|
|
33
|
+
/** The session's open dialogs, oldest first, for {@link SessionStatus} projection. */
|
|
34
|
+
pendingDialogs(sessionId) {
|
|
35
|
+
const dialogs = this.openBySessionId.get(requireSessionId(sessionId));
|
|
36
|
+
if (dialogs === undefined)
|
|
37
|
+
return [];
|
|
38
|
+
return [...dialogs.values()].map(cloneDialog);
|
|
39
|
+
}
|
|
40
|
+
open(input) {
|
|
41
|
+
const sessionId = requireSessionId(input.sessionId);
|
|
42
|
+
const kind = requireKind(input.kind);
|
|
43
|
+
const now = this.now();
|
|
44
|
+
const dialog = {
|
|
45
|
+
dialogId: requireId(this.createDialogId(), "dialogId"),
|
|
46
|
+
kind,
|
|
47
|
+
title: requireText(input.title, "dialog title"),
|
|
48
|
+
...kindFields(kind, input),
|
|
49
|
+
askedAt: now.toISOString(),
|
|
50
|
+
...timeoutField(input.timeoutMs, now),
|
|
51
|
+
runScoped: input.runScoped,
|
|
52
|
+
};
|
|
53
|
+
const dialogs = this.openBySessionId.get(sessionId) ?? new Map();
|
|
54
|
+
if (dialogs.has(dialog.dialogId)) {
|
|
55
|
+
throw new Error(`Dialog id ${dialog.dialogId} is already open in session ${sessionId}`);
|
|
56
|
+
}
|
|
57
|
+
dialogs.set(dialog.dialogId, dialog);
|
|
58
|
+
this.openBySessionId.set(sessionId, dialogs);
|
|
59
|
+
return cloneDialog(dialog);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Record the user's answer and close the dialog. The answer is validated
|
|
63
|
+
* against the dialog's kind first, so an answer that does not fit leaves the
|
|
64
|
+
* dialog open for the browser to correct.
|
|
65
|
+
*/
|
|
66
|
+
answer(sessionId, dialogId, value) {
|
|
67
|
+
const dialog = this.openBySessionId.get(requireSessionId(sessionId))?.get(dialogId);
|
|
68
|
+
if (dialog === undefined)
|
|
69
|
+
return { status: "stale" };
|
|
70
|
+
const answer = validateAnswer(dialog, value);
|
|
71
|
+
return { status: "closed", outcome: this.requireClose(sessionId, dialog, "answered", answer) };
|
|
72
|
+
}
|
|
73
|
+
/** Close the dialog without an answer; the extension's wait settles with its kind's cancel value. */
|
|
74
|
+
cancel(sessionId, dialogId, reason) {
|
|
75
|
+
const dialog = this.openBySessionId.get(requireSessionId(sessionId))?.get(dialogId);
|
|
76
|
+
if (dialog === undefined)
|
|
77
|
+
return { status: "stale" };
|
|
78
|
+
return { status: "closed", outcome: this.requireClose(sessionId, dialog, reason, undefined) };
|
|
79
|
+
}
|
|
80
|
+
requireClose(sessionId, dialog, reason, answer) {
|
|
81
|
+
const dialogs = this.openBySessionId.get(sessionId);
|
|
82
|
+
if (dialogs?.delete(dialog.dialogId) !== true) {
|
|
83
|
+
throw new Error(`Dialog ${dialog.dialogId} of session ${sessionId} disappeared while closing`);
|
|
84
|
+
}
|
|
85
|
+
if (dialogs.size === 0)
|
|
86
|
+
this.openBySessionId.delete(sessionId);
|
|
87
|
+
return {
|
|
88
|
+
dialogId: dialog.dialogId,
|
|
89
|
+
reason,
|
|
90
|
+
...(answer === undefined ? {} : { answer }),
|
|
91
|
+
askedAt: dialog.askedAt,
|
|
92
|
+
closedAt: this.timestamp(),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
timestamp() {
|
|
96
|
+
return this.now().toISOString();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function validateAnswer(dialog, value) {
|
|
100
|
+
switch (dialog.kind) {
|
|
101
|
+
case "confirm":
|
|
102
|
+
if (typeof value !== "boolean")
|
|
103
|
+
throw new PendingExtensionDialogValidationError(`Dialog ${dialog.dialogId} expects a boolean answer`);
|
|
104
|
+
return value;
|
|
105
|
+
case "select":
|
|
106
|
+
if (typeof value !== "string" || dialog.options?.includes(value) !== true) {
|
|
107
|
+
throw new PendingExtensionDialogValidationError(`Dialog ${dialog.dialogId} has no option ${String(value)}`);
|
|
108
|
+
}
|
|
109
|
+
return value;
|
|
110
|
+
case "input":
|
|
111
|
+
if (typeof value !== "string")
|
|
112
|
+
throw new PendingExtensionDialogValidationError(`Dialog ${dialog.dialogId} expects a text answer`);
|
|
113
|
+
if (value.length > EXTENSION_DIALOG_INPUT_MAX_LENGTH) {
|
|
114
|
+
throw new PendingExtensionDialogValidationError(`Answer of dialog ${dialog.dialogId} exceeds its length limit`);
|
|
115
|
+
}
|
|
116
|
+
return value;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/** Kind-specific fields of a validated record; irrelevant fields are dropped rather than rejected. */
|
|
120
|
+
function kindFields(kind, input) {
|
|
121
|
+
switch (kind) {
|
|
122
|
+
case "confirm": {
|
|
123
|
+
const message = optionalText(input.message, "dialog message");
|
|
124
|
+
return message === undefined ? {} : { message };
|
|
125
|
+
}
|
|
126
|
+
case "select":
|
|
127
|
+
return { options: validateOptions(input.options) };
|
|
128
|
+
case "input": {
|
|
129
|
+
const placeholder = optionalText(input.placeholder, "dialog placeholder");
|
|
130
|
+
return placeholder === undefined ? {} : { placeholder };
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function validateOptions(options) {
|
|
135
|
+
if (options === undefined || options.length === 0) {
|
|
136
|
+
throw new PendingExtensionDialogValidationError("A select dialog must offer at least one option");
|
|
137
|
+
}
|
|
138
|
+
if (options.length > EXTENSION_DIALOG_OPTION_LIMIT) {
|
|
139
|
+
throw new PendingExtensionDialogValidationError(`A select dialog must not offer more than ${EXTENSION_DIALOG_OPTION_LIMIT.toString()} options`);
|
|
140
|
+
}
|
|
141
|
+
const seen = new Set();
|
|
142
|
+
return options.map((option) => {
|
|
143
|
+
const validated = requireText(option, "select option");
|
|
144
|
+
if (seen.has(validated))
|
|
145
|
+
throw new PendingExtensionDialogValidationError(`Duplicate select option ${validated}`);
|
|
146
|
+
seen.add(validated);
|
|
147
|
+
return validated;
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
function timeoutField(timeoutMs, now) {
|
|
151
|
+
if (timeoutMs === undefined)
|
|
152
|
+
return {};
|
|
153
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
154
|
+
throw new PendingExtensionDialogValidationError("A dialog timeout must be a positive number of milliseconds");
|
|
155
|
+
}
|
|
156
|
+
return { timeoutAt: new Date(now.getTime() + timeoutMs).toISOString() };
|
|
157
|
+
}
|
|
158
|
+
function cloneDialog(dialog) {
|
|
159
|
+
return { ...dialog, ...(dialog.options === undefined ? {} : { options: [...dialog.options] }) };
|
|
160
|
+
}
|
|
161
|
+
function requireSessionId(sessionId) {
|
|
162
|
+
if (sessionId === "")
|
|
163
|
+
throw new Error("sessionId must not be empty");
|
|
164
|
+
return sessionId;
|
|
165
|
+
}
|
|
166
|
+
/** Runtime guard: the input crosses extension code, so the declared kind is checked despite its type. */
|
|
167
|
+
function requireKind(kind) {
|
|
168
|
+
if (kind !== "confirm" && kind !== "select" && kind !== "input") {
|
|
169
|
+
throw new PendingExtensionDialogValidationError(`Unknown dialog kind ${kind}`);
|
|
170
|
+
}
|
|
171
|
+
return kind;
|
|
172
|
+
}
|
|
173
|
+
function requireId(value, field) {
|
|
174
|
+
if (value.trim() === "")
|
|
175
|
+
throw new PendingExtensionDialogValidationError(`${field} must not be empty`);
|
|
176
|
+
if (value.length > EXTENSION_DIALOG_ID_MAX_LENGTH)
|
|
177
|
+
throw new PendingExtensionDialogValidationError(`${field} exceeds its length limit`);
|
|
178
|
+
return value;
|
|
179
|
+
}
|
|
180
|
+
function requireText(value, field) {
|
|
181
|
+
if (value.trim() === "")
|
|
182
|
+
throw new PendingExtensionDialogValidationError(`${field} must not be empty`);
|
|
183
|
+
if (value.length > EXTENSION_DIALOG_TEXT_MAX_LENGTH)
|
|
184
|
+
throw new PendingExtensionDialogValidationError(`${field} exceeds its length limit`);
|
|
185
|
+
return value;
|
|
186
|
+
}
|
|
187
|
+
/** Optional cosmetic prose: blank means absent rather than being a validation error. */
|
|
188
|
+
function optionalText(value, field) {
|
|
189
|
+
if (value === undefined || value.trim() === "")
|
|
190
|
+
return undefined;
|
|
191
|
+
if (value.length > EXTENSION_DIALOG_TEXT_MAX_LENGTH) {
|
|
192
|
+
throw new PendingExtensionDialogValidationError(`${field} exceeds its length limit`);
|
|
193
|
+
}
|
|
194
|
+
return value;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=pendingExtensionDialogStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pendingExtensionDialogStore.js","sourceRoot":"","sources":["../../../src/server/sessions/pendingExtensionDialogStore.ts"],"names":[],"mappings":"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"}
|