@getpaseo/server 0.1.100 → 0.1.102-beta.2
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/scripts/supervisor.js +26 -8
- package/dist/server/executable-resolution/windows.js +3 -0
- package/dist/server/server/agent/activity-curator.d.ts +17 -0
- package/dist/server/server/agent/activity-curator.js +101 -24
- package/dist/server/server/agent/agent-manager.d.ts +10 -0
- package/dist/server/server/agent/agent-manager.js +69 -27
- package/dist/server/server/agent/agent-sdk-types.d.ts +15 -2
- package/dist/server/server/agent/mcp-server.d.ts +2 -45
- package/dist/server/server/agent/mcp-server.js +45 -1985
- package/dist/server/server/agent/prompt-attachments.js +6 -2
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +12 -1
- package/dist/server/server/agent/provider-snapshot-manager.js +132 -42
- package/dist/server/server/agent/providers/acp-agent.d.ts +27 -1
- package/dist/server/server/agent/providers/acp-agent.js +178 -27
- package/dist/server/server/agent/providers/claude/agent.js +111 -24
- package/dist/server/server/agent/providers/claude/query.d.ts +3 -0
- package/dist/server/server/agent/providers/claude/query.js +4 -2
- package/dist/server/server/agent/providers/codex-app-server-agent.js +6 -57
- package/dist/server/server/agent/providers/diagnostic-utils.d.ts +1 -0
- package/dist/server/server/agent/providers/diagnostic-utils.js +1 -1
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +3 -0
- package/dist/server/server/agent/providers/generic-acp-agent.js +41 -23
- package/dist/server/server/agent/providers/mock-load-test-agent.js +12 -2
- package/dist/server/server/agent/providers/opencode/paths.d.ts +2 -0
- package/dist/server/server/agent/providers/opencode/paths.js +7 -0
- package/dist/server/server/agent/providers/opencode/server-manager.d.ts +2 -0
- package/dist/server/server/agent/providers/opencode/server-manager.js +34 -5
- package/dist/server/server/agent/providers/opencode-agent.d.ts +4 -0
- package/dist/server/server/agent/providers/opencode-agent.js +14 -2
- package/dist/server/server/agent/providers/pi/agent.d.ts +5 -1
- package/dist/server/server/agent/providers/pi/agent.js +12 -3
- package/dist/server/server/agent/providers/provider-image-output.d.ts +5 -0
- package/dist/server/server/agent/providers/provider-image-output.js +61 -1
- package/dist/server/server/agent/tools/paseo-tools.d.ts +48 -0
- package/dist/server/server/agent/tools/paseo-tools.js +2119 -0
- package/dist/server/server/agent/tools/types.d.ts +36 -0
- package/dist/server/server/agent/tools/types.js +2 -0
- package/dist/server/server/bootstrap.d.ts +7 -1
- package/dist/server/server/bootstrap.js +89 -62
- package/dist/server/server/config.d.ts +2 -0
- package/dist/server/server/config.js +57 -1
- package/dist/server/server/daemon-worker.js +19 -7
- package/dist/server/server/lifecycle-reasons.d.ts +4 -0
- package/dist/server/server/lifecycle-reasons.js +6 -0
- package/dist/server/server/persisted-config.d.ts +12 -0
- package/dist/server/server/persisted-config.js +18 -2
- package/dist/server/server/process-diagnostics.d.ts +17 -0
- package/dist/server/server/process-diagnostics.js +22 -0
- package/dist/server/server/relay-transport.js +1 -0
- package/dist/server/server/resolve-worktree-creation-intent.js +3 -1
- package/dist/server/server/session/agent-updates/agent-updates-service.d.ts +59 -0
- package/dist/server/server/session/agent-updates/agent-updates-service.js +220 -0
- package/dist/server/server/session/checkout/checkout-session.d.ts +13 -15
- package/dist/server/server/session/checkout/checkout-session.js +18 -16
- package/dist/server/server/session/checkout/git-metadata-generator.d.ts +53 -0
- package/dist/server/server/session/checkout/git-metadata-generator.js +159 -0
- package/dist/server/server/session/daemon/daemon-self-update-session-controller.d.ts +32 -0
- package/dist/server/server/session/daemon/daemon-self-update-session-controller.js +88 -0
- package/dist/server/server/session/daemon/daemon-self-updater.d.ts +32 -0
- package/dist/server/server/session/daemon/daemon-self-updater.js +56 -0
- package/dist/server/server/session/daemon/daemon-session.d.ts +26 -0
- package/dist/server/server/session/daemon/daemon-session.js +50 -0
- package/dist/server/server/session/daemon/diagnostics.d.ts +41 -0
- package/dist/server/server/session/daemon/diagnostics.js +431 -0
- package/dist/server/server/session/daemon/install-origin.d.ts +7 -0
- package/dist/server/server/session/daemon/install-origin.js +64 -0
- package/dist/server/server/session/daemon/npm-global-cli.d.ts +29 -0
- package/dist/server/server/session/daemon/npm-global-cli.js +98 -0
- package/dist/server/server/session/git-mutation/git-mutation-service.d.ts +34 -0
- package/dist/server/server/session/git-mutation/git-mutation-service.js +71 -0
- package/dist/server/server/session/provider/provider-catalog-session.js +8 -4
- package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.d.ts +36 -0
- package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.js +134 -0
- package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.d.ts +34 -0
- package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.js +190 -0
- package/dist/server/server/session/workspace-scripts/workspace-scripts-service.d.ts +41 -0
- package/dist/server/server/session/workspace-scripts/workspace-scripts-service.js +100 -0
- package/dist/server/server/session.d.ts +12 -54
- package/dist/server/server/session.js +187 -970
- package/dist/server/server/speech/providers/openai/config.d.ts +1 -2
- package/dist/server/server/speech/providers/openai/config.js +13 -9
- package/dist/server/server/speech/providers/openai/runtime.js +2 -16
- package/dist/server/server/speech/providers/openai/stt.d.ts +1 -0
- package/dist/server/server/speech/providers/openai/stt.js +4 -2
- package/dist/server/server/speech/providers/openai/tts.d.ts +1 -0
- package/dist/server/server/speech/providers/openai/tts.js +1 -0
- package/dist/server/server/web-ui.d.ts +10 -0
- package/dist/server/server/web-ui.js +205 -0
- package/dist/server/server/websocket/runtime-metrics.d.ts +23 -0
- package/dist/server/server/websocket-server.d.ts +4 -2
- package/dist/server/server/websocket-server.js +215 -52
- package/dist/server/server/worktree-bootstrap.d.ts +1 -1
- package/dist/server/server/worktree-branch-name-generator.js +3 -1
- package/dist/server/services/quota-fetcher/manifest.js +5 -0
- package/dist/server/services/quota-fetcher/providers/minimax.d.ts +29 -0
- package/dist/server/services/quota-fetcher/providers/minimax.js +227 -0
- package/dist/server/terminal/agent-hooks/agent-hook-installer.js +2 -2
- package/dist/server/utils/checkout-git.js +203 -25
- package/dist/server/utils/directory-suggestions.js +1 -4
- package/dist/server/utils/path.d.ts +2 -0
- package/dist/server/utils/path.js +13 -0
- package/dist/server/utils/worktree.d.ts +1 -0
- package/dist/server/utils/worktree.js +92 -11
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css +1 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.br +0 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-b01555c9b42665a03988c0a0032ef528.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-b01555c9b42665a03988c0a0032ef528.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-b01555c9b42665a03988c0a0032ef528.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-648388eca5c510b496e1eddf523f70ff.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-648388eca5c510b496e1eddf523f70ff.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-648388eca5c510b496e1eddf523f70ff.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-0ebbea2cd337f0c0680fdb3f8d4d5af3.js +16157 -0
- package/dist/server/web-ui/_expo/static/js/web/index-0ebbea2cd337f0c0680fdb3f8d4d5af3.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-0ebbea2cd337f0c0680fdb3f8d4d5af3.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-c64fa2416284927857a39087fd8d1332.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-c64fa2416284927857a39087fd8d1332.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-c64fa2416284927857a39087fd8d1332.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-a9784226715772edf87ef36c596599c2.js +3 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-a9784226715772edf87ef36c596599c2.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-a9784226715772edf87ef36c596599c2.js.gz +0 -0
- package/dist/server/web-ui/apple-touch-icon.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/antigravity.6e91a685c33435e0b466a56db86cf141.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/cursor.c31d6bce4fe9aadc3fe59962f4c4fcf3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/file-explorer.3e15e8f72c825c85ce336bcb0cdef776.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/finder.7f68fc2c475621a672e1be09309d5567.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/vscode.832bdb4c685d930f1c864c793703600b.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/webstorm.aa5dc2cd8c20cc0a155c4c5c5ab3c5f5.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/zed.f3a670b7f9aa226da4fe53fb86f1abbd.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
- package/dist/server/web-ui/assets/assets/images/notification-icon.3bf81d33ddbf380606bdd248ba83e158.png +0 -0
- package/dist/server/web-ui/favicon.ico +0 -0
- package/dist/server/web-ui/index.html +90 -0
- package/dist/server/web-ui/index.html.br +0 -0
- package/dist/server/web-ui/index.html.gz +0 -0
- package/dist/server/web-ui/manifest.json +27 -0
- package/dist/server/web-ui/manifest.json.br +0 -0
- package/dist/server/web-ui/manifest.json.gz +0 -0
- package/dist/server/web-ui/metadata.json +1 -0
- package/dist/server/web-ui/metadata.json.br +1 -0
- package/dist/server/web-ui/metadata.json.gz +0 -0
- package/dist/server/web-ui/pwa-icon-192.png +0 -0
- package/dist/server/web-ui/pwa-icon-512.png +0 -0
- package/dist/server/web-ui/robots.txt +2 -0
- package/dist/src/executable-resolution/windows.js +3 -0
- package/dist/src/server/persisted-config.js +18 -2
- package/package.json +7 -7
- package/dist/server/server/speech/providers/openai/realtime-transcription-session.d.ts +0 -42
- package/dist/server/server/speech/providers/openai/realtime-transcription-session.js +0 -168
|
@@ -11,7 +11,11 @@ function parseLifecycleMessage(msg) {
|
|
|
11
11
|
}
|
|
12
12
|
const type = msg.type;
|
|
13
13
|
if (type === "paseo:shutdown") {
|
|
14
|
-
|
|
14
|
+
const reason = msg.reason;
|
|
15
|
+
return {
|
|
16
|
+
type: "paseo:shutdown",
|
|
17
|
+
...(typeof reason === "string" && reason.trim().length > 0 ? { reason } : {}),
|
|
18
|
+
};
|
|
15
19
|
}
|
|
16
20
|
if (type === "paseo:ready") {
|
|
17
21
|
const listen = msg.listen;
|
|
@@ -169,12 +173,14 @@ export function runSupervisor(options) {
|
|
|
169
173
|
return;
|
|
170
174
|
}
|
|
171
175
|
if (lifecycleMessage.type === "paseo:shutdown") {
|
|
172
|
-
|
|
173
|
-
|
|
176
|
+
const reason = lifecycleMessage.reason ?? "worker_requested_shutdown";
|
|
177
|
+
writeLifecycleLog("Worker requested shutdown", { reason });
|
|
178
|
+
requestShutdown(reason);
|
|
174
179
|
return;
|
|
175
180
|
}
|
|
176
|
-
|
|
177
|
-
|
|
181
|
+
const reason = lifecycleMessage.reason ?? "worker_requested_restart";
|
|
182
|
+
writeLifecycleLog("Worker requested restart", { reason });
|
|
183
|
+
requestRestart(reason);
|
|
178
184
|
});
|
|
179
185
|
child.on("close", (code, signal) => {
|
|
180
186
|
clearInterval(heartbeat);
|
|
@@ -199,6 +205,18 @@ export function runSupervisor(options) {
|
|
|
199
205
|
exitSupervisor(typeof code === "number" ? code : 1);
|
|
200
206
|
});
|
|
201
207
|
};
|
|
208
|
+
const signalWorker = (signal, reason) => {
|
|
209
|
+
if (!child) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
writeLifecycleLog("Supervisor sending signal to worker", {
|
|
213
|
+
reason,
|
|
214
|
+
signal,
|
|
215
|
+
supervisorPid: process.pid,
|
|
216
|
+
workerPid: child.pid ?? null,
|
|
217
|
+
});
|
|
218
|
+
child.kill(signal);
|
|
219
|
+
};
|
|
202
220
|
const requestRestart = (reason) => {
|
|
203
221
|
if (!child || restarting || shuttingDown) {
|
|
204
222
|
return;
|
|
@@ -206,7 +224,7 @@ export function runSupervisor(options) {
|
|
|
206
224
|
restarting = true;
|
|
207
225
|
writeLifecycleLog("Restart requested", { reason });
|
|
208
226
|
log(`${reason}. Stopping worker for restart...`);
|
|
209
|
-
|
|
227
|
+
signalWorker("SIGTERM", reason);
|
|
210
228
|
};
|
|
211
229
|
const requestShutdown = (reason) => {
|
|
212
230
|
if (shuttingDown) {
|
|
@@ -220,10 +238,10 @@ export function runSupervisor(options) {
|
|
|
220
238
|
exitSupervisor(0);
|
|
221
239
|
return;
|
|
222
240
|
}
|
|
223
|
-
|
|
241
|
+
signalWorker("SIGTERM", reason);
|
|
224
242
|
};
|
|
225
243
|
const forwardSignal = (signal) => {
|
|
226
|
-
requestShutdown(`
|
|
244
|
+
requestShutdown(`supervisor_received_${signal}`);
|
|
227
245
|
};
|
|
228
246
|
process.on("SIGINT", () => forwardSignal("SIGINT"));
|
|
229
247
|
process.on("SIGTERM", () => forwardSignal("SIGTERM"));
|
|
@@ -1,11 +1,28 @@
|
|
|
1
1
|
import type { AgentTimelineItem } from "./agent-sdk-types.js";
|
|
2
|
+
import type { AgentAttachment } from "@getpaseo/protocol/messages";
|
|
3
|
+
import type { AgentTimelineRow } from "./agent-timeline-store-types.js";
|
|
2
4
|
interface ActivityCuratorOptions {
|
|
3
5
|
maxItems?: number;
|
|
4
6
|
labelAssistantMessages?: boolean;
|
|
7
|
+
includeKinds?: readonly AgentTimelineItem["type"][];
|
|
8
|
+
includeExternalToolInput?: boolean;
|
|
5
9
|
}
|
|
10
|
+
type TextAgentAttachment = Extract<AgentAttachment, {
|
|
11
|
+
type: "text";
|
|
12
|
+
}>;
|
|
6
13
|
/**
|
|
7
14
|
* Convert normalized agent timeline items into a concise text summary.
|
|
8
15
|
*/
|
|
9
16
|
export declare function curateAgentActivity(timeline: AgentTimelineItem[], options?: ActivityCuratorOptions): string;
|
|
17
|
+
export declare function buildAgentForkContextAttachment(input: {
|
|
18
|
+
rows: readonly AgentTimelineRow[];
|
|
19
|
+
boundaryMessageId?: string | null;
|
|
20
|
+
agentTitle?: string | null;
|
|
21
|
+
cwd?: string | null;
|
|
22
|
+
}): {
|
|
23
|
+
attachment: TextAgentAttachment;
|
|
24
|
+
itemCount: number;
|
|
25
|
+
boundaryMessageId: string | null;
|
|
26
|
+
};
|
|
10
27
|
export {};
|
|
11
28
|
//# sourceMappingURL=activity-curator.d.ts.map
|
|
@@ -71,16 +71,42 @@ function projectForCuration(items) {
|
|
|
71
71
|
}));
|
|
72
72
|
return projectTimelineRows({ rows, mode: "projected" }).map((entry) => entry.item);
|
|
73
73
|
}
|
|
74
|
-
function
|
|
75
|
-
if (
|
|
74
|
+
function shouldIncludeItem(item, options) {
|
|
75
|
+
if (!options?.includeKinds) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
return options.includeKinds.includes(item.type);
|
|
79
|
+
}
|
|
80
|
+
function formatToolCallEntry(item, options) {
|
|
81
|
+
const inputJson = formatToolInputJson(inputFromUnknownDetail(item.detail));
|
|
82
|
+
const display = buildToolCallDisplayModel({
|
|
83
|
+
name: item.name,
|
|
84
|
+
status: item.status,
|
|
85
|
+
error: item.error,
|
|
86
|
+
detail: item.detail,
|
|
87
|
+
metadata: item.metadata,
|
|
88
|
+
});
|
|
89
|
+
const displayName = display.displayName;
|
|
90
|
+
const summary = formatToolSummary(display.summary);
|
|
91
|
+
if ((options?.includeExternalToolInput ?? true) &&
|
|
92
|
+
isLikelyExternalToolName(item.name) &&
|
|
93
|
+
inputJson) {
|
|
94
|
+
return activityEntry(`[${displayName}] ${inputJson}`);
|
|
95
|
+
}
|
|
96
|
+
return activityEntry(summary ? `[${displayName}] ${summary}` : `[${displayName}]`);
|
|
97
|
+
}
|
|
98
|
+
function curateProjectedActivityEntries(items, options) {
|
|
99
|
+
if (items.length === 0) {
|
|
76
100
|
return [];
|
|
77
101
|
}
|
|
78
|
-
const collapsed = projectForCuration(timeline);
|
|
79
102
|
const maxItems = options?.maxItems ?? DEFAULT_MAX_ITEMS;
|
|
80
|
-
const recentItems = maxItems > 0 &&
|
|
103
|
+
const recentItems = maxItems > 0 && items.length > maxItems ? items.slice(-maxItems) : items;
|
|
81
104
|
const entries = [];
|
|
82
105
|
const buffers = { message: "", thought: "" };
|
|
83
106
|
for (const item of recentItems) {
|
|
107
|
+
if (!shouldIncludeItem(item, options)) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
84
110
|
switch (item.type) {
|
|
85
111
|
case "user_message":
|
|
86
112
|
flushBuffers(entries, buffers, options);
|
|
@@ -94,26 +120,7 @@ function curateAgentActivityEntries(timeline, options) {
|
|
|
94
120
|
break;
|
|
95
121
|
case "tool_call": {
|
|
96
122
|
flushBuffers(entries, buffers, options);
|
|
97
|
-
|
|
98
|
-
const display = buildToolCallDisplayModel({
|
|
99
|
-
name: item.name,
|
|
100
|
-
status: item.status,
|
|
101
|
-
error: item.error,
|
|
102
|
-
detail: item.detail,
|
|
103
|
-
metadata: item.metadata,
|
|
104
|
-
});
|
|
105
|
-
const displayName = display.displayName;
|
|
106
|
-
const summary = formatToolSummary(display.summary);
|
|
107
|
-
if (isLikelyExternalToolName(item.name) && inputJson) {
|
|
108
|
-
entries.push(activityEntry(`[${displayName}] ${inputJson}`));
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
if (summary) {
|
|
112
|
-
entries.push(activityEntry(`[${displayName}] ${summary}`));
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
entries.push(activityEntry(`[${displayName}]`));
|
|
116
|
-
}
|
|
123
|
+
entries.push(formatToolCallEntry(item, options));
|
|
117
124
|
break;
|
|
118
125
|
}
|
|
119
126
|
case "todo":
|
|
@@ -138,6 +145,10 @@ function curateAgentActivityEntries(timeline, options) {
|
|
|
138
145
|
flushBuffers(entries, buffers, options);
|
|
139
146
|
return entries;
|
|
140
147
|
}
|
|
148
|
+
function curateAgentActivityEntries(timeline, options) {
|
|
149
|
+
const collapsed = projectForCuration(timeline);
|
|
150
|
+
return curateProjectedActivityEntries(collapsed, options);
|
|
151
|
+
}
|
|
141
152
|
/**
|
|
142
153
|
* Convert normalized agent timeline items into a concise text summary.
|
|
143
154
|
*/
|
|
@@ -147,4 +158,70 @@ export function curateAgentActivity(timeline, options) {
|
|
|
147
158
|
? entries.map((entry) => entry.text).join("\n")
|
|
148
159
|
: "No activity to display.";
|
|
149
160
|
}
|
|
161
|
+
function selectForkContextRows(input) {
|
|
162
|
+
const boundaryMessageId = input.boundaryMessageId?.trim() || null;
|
|
163
|
+
if (!boundaryMessageId) {
|
|
164
|
+
const projected = projectTimelineRows({ rows: input.rows, mode: "projected" });
|
|
165
|
+
return {
|
|
166
|
+
items: projected.map((entry) => entry.item),
|
|
167
|
+
boundaryMessageId: null,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
const boundaryIndex = input.rows.findLastIndex((row) => row.item.type === "assistant_message" && row.item.messageId === boundaryMessageId);
|
|
171
|
+
if (boundaryIndex < 0) {
|
|
172
|
+
throw new Error("Selected assistant message is no longer available.");
|
|
173
|
+
}
|
|
174
|
+
const selectedRows = input.rows.slice(0, boundaryIndex + 1);
|
|
175
|
+
const projected = projectTimelineRows({ rows: selectedRows, mode: "projected" });
|
|
176
|
+
return {
|
|
177
|
+
items: projected.map((entry) => entry.item),
|
|
178
|
+
boundaryMessageId,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
function trimContextMetadata(value) {
|
|
182
|
+
const trimmed = value?.trim();
|
|
183
|
+
return trimmed ? trimmed : null;
|
|
184
|
+
}
|
|
185
|
+
function buildForkContextText(input) {
|
|
186
|
+
const header = ["Chat history from a previous Paseo agent."];
|
|
187
|
+
const agentTitle = trimContextMetadata(input.agentTitle);
|
|
188
|
+
const cwd = trimContextMetadata(input.cwd);
|
|
189
|
+
if (agentTitle) {
|
|
190
|
+
header.push(`Source agent: ${agentTitle}`);
|
|
191
|
+
}
|
|
192
|
+
if (cwd) {
|
|
193
|
+
header.push(`Source directory: ${cwd}`);
|
|
194
|
+
}
|
|
195
|
+
return `${header.join("\n")}\n\n${input.body}`;
|
|
196
|
+
}
|
|
197
|
+
export function buildAgentForkContextAttachment(input) {
|
|
198
|
+
const selected = selectForkContextRows({
|
|
199
|
+
rows: input.rows,
|
|
200
|
+
boundaryMessageId: input.boundaryMessageId,
|
|
201
|
+
});
|
|
202
|
+
const entries = curateProjectedActivityEntries(selected.items, {
|
|
203
|
+
maxItems: 0,
|
|
204
|
+
labelAssistantMessages: true,
|
|
205
|
+
includeKinds: ["user_message", "assistant_message", "tool_call"],
|
|
206
|
+
includeExternalToolInput: false,
|
|
207
|
+
});
|
|
208
|
+
const body = entries.length > 0
|
|
209
|
+
? entries.map((entry) => entry.text).join("\n")
|
|
210
|
+
: "No chat history to display.";
|
|
211
|
+
return {
|
|
212
|
+
attachment: {
|
|
213
|
+
type: "text",
|
|
214
|
+
mimeType: "text/plain",
|
|
215
|
+
contextKind: "chat_history",
|
|
216
|
+
title: "Chat history",
|
|
217
|
+
text: buildForkContextText({
|
|
218
|
+
body,
|
|
219
|
+
agentTitle: input.agentTitle,
|
|
220
|
+
cwd: input.cwd,
|
|
221
|
+
}),
|
|
222
|
+
},
|
|
223
|
+
itemCount: selected.items.length,
|
|
224
|
+
boundaryMessageId: selected.boundaryMessageId,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
150
227
|
//# sourceMappingURL=activity-curator.js.map
|
|
@@ -6,6 +6,7 @@ import type { StoredAgentRecord, AgentStorage } from "./agent-storage.js";
|
|
|
6
6
|
import type { AgentTimelineFetchOptions, AgentTimelineFetchResult, AgentTimelineRow, AgentTimelineStore } from "./agent-timeline-store-types.js";
|
|
7
7
|
import { type ForegroundTurnWaiter } from "./foreground-run-state.js";
|
|
8
8
|
import { type RewindMode } from "./rewind/rewind.js";
|
|
9
|
+
import type { PaseoToolCatalogFactory } from "./tools/types.js";
|
|
9
10
|
export { AGENT_LIFECYCLE_STATUSES, type AgentLifecycleStatus };
|
|
10
11
|
export type { AgentTimelineCursor, AgentTimelineFetchDirection, AgentTimelineFetchOptions, AgentTimelineFetchResult, AgentTimelineRow, AgentTimelineWindow, } from "./agent-timeline-store-types.js";
|
|
11
12
|
export type AgentManagerEvent = {
|
|
@@ -72,6 +73,8 @@ export interface AgentManagerOptions {
|
|
|
72
73
|
terminalManager?: TerminalManager | null;
|
|
73
74
|
mcpBaseUrl?: string;
|
|
74
75
|
mcpAuthToken?: string;
|
|
76
|
+
paseoToolsEnabled?: boolean;
|
|
77
|
+
paseoToolCatalogFactory?: PaseoToolCatalogFactory;
|
|
75
78
|
appendSystemPrompt?: string;
|
|
76
79
|
agentStreamCoalesceWindowMs?: number;
|
|
77
80
|
rescueTimeouts?: AgentManagerRescueTimeouts;
|
|
@@ -190,6 +193,8 @@ export declare class AgentManager {
|
|
|
190
193
|
private readonly agentStreamCoalescer;
|
|
191
194
|
private mcpBaseUrl;
|
|
192
195
|
private readonly mcpAuthToken;
|
|
196
|
+
private paseoToolsEnabled;
|
|
197
|
+
private paseoToolCatalogFactory;
|
|
193
198
|
private appendSystemPrompt;
|
|
194
199
|
private onAgentAttention?;
|
|
195
200
|
private onAgentArchived?;
|
|
@@ -197,6 +202,7 @@ export declare class AgentManager {
|
|
|
197
202
|
private logger;
|
|
198
203
|
private readonly rescueTimeouts;
|
|
199
204
|
constructor(options: AgentManagerOptions);
|
|
205
|
+
private configurePaseoTools;
|
|
200
206
|
registerClient(provider: AgentProvider, client: AgentClient): void;
|
|
201
207
|
updateProviderRegistry(input: {
|
|
202
208
|
providerDefinitions: ProviderEnabledMap;
|
|
@@ -206,6 +212,8 @@ export declare class AgentManager {
|
|
|
206
212
|
setAgentAttentionCallback(callback: AgentAttentionCallback): void;
|
|
207
213
|
setAgentArchivedCallback(callback: AgentArchivedCallback): void;
|
|
208
214
|
setMcpBaseUrl(url: string | null): void;
|
|
215
|
+
setPaseoToolsEnabled(enabled: boolean): void;
|
|
216
|
+
setPaseoToolCatalogFactory(factory: PaseoToolCatalogFactory | null): void;
|
|
209
217
|
/**
|
|
210
218
|
* Capability token the daemon's own MCP clients must present to the Agent MCP
|
|
211
219
|
* endpoint when a daemon password is configured. Read by the per-client
|
|
@@ -372,9 +380,11 @@ export declare class AgentManager {
|
|
|
372
380
|
private dispatchStream;
|
|
373
381
|
private dispatch;
|
|
374
382
|
private normalizeConfig;
|
|
383
|
+
private resolveDefaultModelId;
|
|
375
384
|
private prepareSessionConfig;
|
|
376
385
|
private applyDaemonAppendSystemPrompt;
|
|
377
386
|
private buildLaunchContext;
|
|
387
|
+
private resolveProviderLaunchConfig;
|
|
378
388
|
private requireAvailableClient;
|
|
379
389
|
private requireEnabledProvider;
|
|
380
390
|
private getConfiguredProviderIds;
|
|
@@ -185,6 +185,8 @@ export class AgentManager {
|
|
|
185
185
|
this.subscribers = new Set();
|
|
186
186
|
this.previousStatuses = new Map();
|
|
187
187
|
this.backgroundTasks = new Set();
|
|
188
|
+
this.paseoToolsEnabled = true;
|
|
189
|
+
this.paseoToolCatalogFactory = null;
|
|
188
190
|
this.idFactory = options?.idFactory ?? (() => randomUUID());
|
|
189
191
|
this.registry = options?.registry;
|
|
190
192
|
this.durableTimelineStore = options?.durableTimelineStore;
|
|
@@ -192,6 +194,7 @@ export class AgentManager {
|
|
|
192
194
|
this.onWorkspaceStateMayHaveChanged = options?.onWorkspaceStateMayHaveChanged;
|
|
193
195
|
this.mcpBaseUrl = options?.mcpBaseUrl ?? null;
|
|
194
196
|
this.mcpAuthToken = options?.mcpAuthToken ?? null;
|
|
197
|
+
this.configurePaseoTools(options);
|
|
195
198
|
this.appendSystemPrompt = options.appendSystemPrompt ?? "";
|
|
196
199
|
this.logger = options.logger.child({ module: "agent", component: "agent-manager" });
|
|
197
200
|
this.rescueTimeouts = {
|
|
@@ -211,6 +214,10 @@ export class AgentManager {
|
|
|
211
214
|
clients: options.clients ?? {},
|
|
212
215
|
});
|
|
213
216
|
}
|
|
217
|
+
configurePaseoTools(options) {
|
|
218
|
+
this.paseoToolsEnabled = options.paseoToolsEnabled ?? true;
|
|
219
|
+
this.paseoToolCatalogFactory = options.paseoToolCatalogFactory ?? null;
|
|
220
|
+
}
|
|
214
221
|
registerClient(provider, client) {
|
|
215
222
|
this.clients.set(provider, client);
|
|
216
223
|
}
|
|
@@ -238,6 +245,12 @@ export class AgentManager {
|
|
|
238
245
|
setMcpBaseUrl(url) {
|
|
239
246
|
this.mcpBaseUrl = url;
|
|
240
247
|
}
|
|
248
|
+
setPaseoToolsEnabled(enabled) {
|
|
249
|
+
this.paseoToolsEnabled = enabled;
|
|
250
|
+
}
|
|
251
|
+
setPaseoToolCatalogFactory(factory) {
|
|
252
|
+
this.paseoToolCatalogFactory = factory;
|
|
253
|
+
}
|
|
241
254
|
/**
|
|
242
255
|
* Capability token the daemon's own MCP clients must present to the Agent MCP
|
|
243
256
|
* endpoint when a daemon password is configured. Read by the per-client
|
|
@@ -403,8 +416,11 @@ export class AgentManager {
|
|
|
403
416
|
}
|
|
404
417
|
}
|
|
405
418
|
async listDraftCommands(config) {
|
|
406
|
-
const normalizedConfig = await this.normalizeConfig(config);
|
|
419
|
+
const normalizedConfig = await this.normalizeConfig(config, { resolveDefaultModel: false });
|
|
407
420
|
const client = this.requireClient(normalizedConfig.provider);
|
|
421
|
+
if (!normalizedConfig.model) {
|
|
422
|
+
return [];
|
|
423
|
+
}
|
|
408
424
|
const available = await client.isAvailable();
|
|
409
425
|
if (!available) {
|
|
410
426
|
throw new Error(`Provider '${normalizedConfig.provider}' is not available. Please ensure the CLI is installed.`);
|
|
@@ -429,8 +445,11 @@ export class AgentManager {
|
|
|
429
445
|
}
|
|
430
446
|
}
|
|
431
447
|
async listDraftFeatures(config) {
|
|
432
|
-
const normalizedConfig = await this.normalizeConfig(config);
|
|
448
|
+
const normalizedConfig = await this.normalizeConfig(config, { resolveDefaultModel: false });
|
|
433
449
|
const client = this.requireClient(normalizedConfig.provider);
|
|
450
|
+
if (!normalizedConfig.model) {
|
|
451
|
+
return [];
|
|
452
|
+
}
|
|
434
453
|
const available = await client.isAvailable();
|
|
435
454
|
if (!available) {
|
|
436
455
|
throw new Error(`Provider '${normalizedConfig.provider}' is not available. Please ensure the CLI is installed.`);
|
|
@@ -474,12 +493,13 @@ export class AgentManager {
|
|
|
474
493
|
const resolvedAgentId = validateAgentId(agentId ?? this.idFactory(), "createAgent");
|
|
475
494
|
const { storedConfig, launchConfig } = await this.prepareSessionConfig(config, resolvedAgentId);
|
|
476
495
|
this.requireEnabledProvider(storedConfig.provider);
|
|
477
|
-
const launchContext = this.buildLaunchContext(resolvedAgentId, options?.env);
|
|
478
496
|
const client = await this.requireAvailableClient({
|
|
479
497
|
provider: storedConfig.provider,
|
|
480
498
|
});
|
|
499
|
+
const launchContext = await this.buildLaunchContext(resolvedAgentId, client, options?.env);
|
|
500
|
+
const providerLaunchConfig = this.resolveProviderLaunchConfig(launchConfig, launchContext);
|
|
481
501
|
const createOptions = this.buildCreateSessionOptions(options);
|
|
482
|
-
const session = await client.createSession(
|
|
502
|
+
const session = await client.createSession(providerLaunchConfig, launchContext, createOptions);
|
|
483
503
|
return this.registerSession(session, storedConfig, resolvedAgentId, {
|
|
484
504
|
labels: options?.labels,
|
|
485
505
|
initialTitle: options?.initialTitle,
|
|
@@ -502,13 +522,14 @@ export class AgentManager {
|
|
|
502
522
|
provider: handle.provider,
|
|
503
523
|
};
|
|
504
524
|
const { storedConfig, launchConfig } = await this.prepareSessionConfig(mergedConfig, resolvedAgentId);
|
|
505
|
-
const launchContext = this.buildLaunchContext(resolvedAgentId);
|
|
506
525
|
const client = this.requireClient(handle.provider);
|
|
507
526
|
const available = await client.isAvailable();
|
|
508
527
|
if (!available) {
|
|
509
528
|
throw new Error(`Provider '${handle.provider}' is not available. Please ensure the CLI is installed.`);
|
|
510
529
|
}
|
|
511
|
-
const
|
|
530
|
+
const launchContext = await this.buildLaunchContext(resolvedAgentId, client);
|
|
531
|
+
const providerLaunchConfig = this.resolveProviderLaunchConfig(launchConfig, launchContext);
|
|
532
|
+
const session = await client.resumeSession(handle, providerLaunchConfig, launchContext);
|
|
512
533
|
return this.registerSession(session, storedConfig, resolvedAgentId, options);
|
|
513
534
|
}
|
|
514
535
|
async importProviderSession(input) {
|
|
@@ -522,11 +543,12 @@ export class AgentManager {
|
|
|
522
543
|
provider: input.provider,
|
|
523
544
|
cwd: input.cwd,
|
|
524
545
|
}, resolvedAgentId);
|
|
525
|
-
const launchContext = this.buildLaunchContext(resolvedAgentId);
|
|
546
|
+
const launchContext = await this.buildLaunchContext(resolvedAgentId, client);
|
|
547
|
+
const providerLaunchConfig = this.resolveProviderLaunchConfig(launchConfig, launchContext);
|
|
526
548
|
const imported = await client.importSession({
|
|
527
549
|
providerHandleId: input.providerHandleId,
|
|
528
550
|
cwd: input.cwd,
|
|
529
|
-
}, { config:
|
|
551
|
+
}, { config: providerLaunchConfig, storedConfig, launchContext });
|
|
530
552
|
const importedConfig = await this.normalizeConfig(stripInternalPaseoMcpServer(imported.config));
|
|
531
553
|
const timelineRows = buildImportedTimelineRows(imported.timeline);
|
|
532
554
|
const initialTitle = resolveImportedAgentTitle(importedConfig, timelineRows);
|
|
@@ -567,10 +589,11 @@ export class AgentManager {
|
|
|
567
589
|
provider,
|
|
568
590
|
};
|
|
569
591
|
const { storedConfig, launchConfig } = await this.prepareSessionConfig(refreshConfig, agentId);
|
|
570
|
-
const launchContext = this.buildLaunchContext(agentId);
|
|
592
|
+
const launchContext = await this.buildLaunchContext(agentId, client);
|
|
593
|
+
const providerLaunchConfig = this.resolveProviderLaunchConfig(launchConfig, launchContext);
|
|
571
594
|
const session = handle
|
|
572
|
-
? await client.resumeSession(handle,
|
|
573
|
-
: await client.createSession(
|
|
595
|
+
? await client.resumeSession(handle, providerLaunchConfig, launchContext)
|
|
596
|
+
: await client.createSession(providerLaunchConfig, launchContext);
|
|
574
597
|
this.agentStreamCoalescer.flushAndDiscard(agentId);
|
|
575
598
|
// Remove the existing agent entry before swapping sessions
|
|
576
599
|
this.agents.delete(agentId);
|
|
@@ -2549,7 +2572,7 @@ export class AgentManager {
|
|
|
2549
2572
|
subscriber.callback(event);
|
|
2550
2573
|
}
|
|
2551
2574
|
}
|
|
2552
|
-
async normalizeConfig(config) {
|
|
2575
|
+
async normalizeConfig(config, options = {}) {
|
|
2553
2576
|
const normalized = { ...config };
|
|
2554
2577
|
// Always resolve cwd to absolute path for consistent history file lookup
|
|
2555
2578
|
if (normalized.cwd) {
|
|
@@ -2576,19 +2599,11 @@ export class AgentManager {
|
|
|
2576
2599
|
const trimmed = normalized.model.trim();
|
|
2577
2600
|
normalized.model = trimmed.length > 0 && trimmed !== "default" ? trimmed : undefined;
|
|
2578
2601
|
}
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
const defaultModel = catalog.models.find((model) => model.isDefault) ?? catalog.models[0];
|
|
2585
|
-
if (defaultModel) {
|
|
2586
|
-
normalized.model = defaultModel.id;
|
|
2587
|
-
}
|
|
2588
|
-
}
|
|
2589
|
-
catch {
|
|
2590
|
-
// Provider may not support model listing — leave model undefined
|
|
2591
|
-
}
|
|
2602
|
+
const shouldResolveDefaultModel = options.resolveDefaultModel ?? true;
|
|
2603
|
+
if (shouldResolveDefaultModel && !normalized.model) {
|
|
2604
|
+
const defaultModelId = await this.resolveDefaultModelId(normalized);
|
|
2605
|
+
if (defaultModelId) {
|
|
2606
|
+
normalized.model = defaultModelId;
|
|
2592
2607
|
}
|
|
2593
2608
|
}
|
|
2594
2609
|
if (!normalized.modeId) {
|
|
@@ -2602,6 +2617,24 @@ export class AgentManager {
|
|
|
2602
2617
|
}
|
|
2603
2618
|
return normalized;
|
|
2604
2619
|
}
|
|
2620
|
+
async resolveDefaultModelId(config) {
|
|
2621
|
+
const client = this.clients.get(config.provider);
|
|
2622
|
+
if (!client) {
|
|
2623
|
+
return undefined;
|
|
2624
|
+
}
|
|
2625
|
+
try {
|
|
2626
|
+
const catalog = await client.fetchCatalog({
|
|
2627
|
+
scope: "workspace",
|
|
2628
|
+
cwd: config.cwd,
|
|
2629
|
+
force: false,
|
|
2630
|
+
});
|
|
2631
|
+
return (catalog.models.find((model) => model.isDefault) ?? catalog.models[0])?.id;
|
|
2632
|
+
}
|
|
2633
|
+
catch {
|
|
2634
|
+
// Provider may not support model listing — leave model undefined.
|
|
2635
|
+
return undefined;
|
|
2636
|
+
}
|
|
2637
|
+
}
|
|
2605
2638
|
async prepareSessionConfig(config, agentId) {
|
|
2606
2639
|
const storedConfig = await this.normalizeConfig(stripInternalPaseoMcpServer(config));
|
|
2607
2640
|
const launchConfig = this.applyDaemonAppendSystemPrompt(withRuntimePaseoMcpServer({
|
|
@@ -2623,14 +2656,23 @@ export class AgentManager {
|
|
|
2623
2656
|
}
|
|
2624
2657
|
: next;
|
|
2625
2658
|
}
|
|
2626
|
-
buildLaunchContext(agentId, env) {
|
|
2627
|
-
|
|
2659
|
+
async buildLaunchContext(agentId, client, env) {
|
|
2660
|
+
const context = {
|
|
2628
2661
|
agentId,
|
|
2629
2662
|
env: {
|
|
2630
2663
|
...env,
|
|
2631
2664
|
PASEO_AGENT_ID: agentId,
|
|
2632
2665
|
},
|
|
2633
2666
|
};
|
|
2667
|
+
if (this.paseoToolsEnabled &&
|
|
2668
|
+
client.capabilities.supportsNativePaseoTools &&
|
|
2669
|
+
this.paseoToolCatalogFactory) {
|
|
2670
|
+
context.paseoTools = await this.paseoToolCatalogFactory({ callerAgentId: agentId });
|
|
2671
|
+
}
|
|
2672
|
+
return context;
|
|
2673
|
+
}
|
|
2674
|
+
resolveProviderLaunchConfig(launchConfig, launchContext) {
|
|
2675
|
+
return launchContext.paseoTools ? stripInternalPaseoMcpServer(launchConfig) : launchConfig;
|
|
2634
2676
|
}
|
|
2635
2677
|
async requireAvailableClient(options) {
|
|
2636
2678
|
const client = this.clients.get(options.provider);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Options as ClaudeAgentOptions } from "@anthropic-ai/claude-agent-sdk";
|
|
2
2
|
import type { AgentProviderNotice } from "@getpaseo/protocol/agent-types";
|
|
3
3
|
import type { AgentAttachment } from "@getpaseo/protocol/messages";
|
|
4
|
+
import type { PaseoToolCatalog } from "./tools/types.js";
|
|
4
5
|
export type { AgentProviderNotice };
|
|
5
6
|
export type AgentProvider = string;
|
|
6
7
|
export interface AgentMetadata {
|
|
@@ -141,6 +142,7 @@ export interface AgentCapabilityFlags {
|
|
|
141
142
|
supportsSessionListing?: boolean;
|
|
142
143
|
supportsDynamicModes: boolean;
|
|
143
144
|
supportsMcpServers: boolean;
|
|
145
|
+
supportsNativePaseoTools?: boolean;
|
|
144
146
|
supportsReasoningStream: boolean;
|
|
145
147
|
supportsToolInvocations: boolean;
|
|
146
148
|
supportsRewindConversation?: boolean;
|
|
@@ -516,6 +518,11 @@ export interface AgentSessionConfig {
|
|
|
516
518
|
export interface AgentLaunchContext {
|
|
517
519
|
agentId?: string;
|
|
518
520
|
env?: Record<string, string>;
|
|
521
|
+
/**
|
|
522
|
+
* Runtime-only internal Paseo tools. This must never be persisted into
|
|
523
|
+
* AgentSessionConfig; providers may adapt it to their native tool surface.
|
|
524
|
+
*/
|
|
525
|
+
paseoTools?: PaseoToolCatalog;
|
|
519
526
|
}
|
|
520
527
|
export interface AgentCreateSessionOptions {
|
|
521
528
|
/**
|
|
@@ -578,10 +585,16 @@ export interface AgentSession {
|
|
|
578
585
|
}): Promise<void>;
|
|
579
586
|
} | null;
|
|
580
587
|
}
|
|
581
|
-
export
|
|
588
|
+
export type FetchCatalogOptions = {
|
|
589
|
+
scope: "global";
|
|
590
|
+
force: boolean;
|
|
591
|
+
timeoutMs?: number;
|
|
592
|
+
} | {
|
|
593
|
+
scope: "workspace";
|
|
582
594
|
cwd: string;
|
|
583
595
|
force: boolean;
|
|
584
|
-
|
|
596
|
+
timeoutMs?: number;
|
|
597
|
+
};
|
|
585
598
|
export interface ProviderCatalog {
|
|
586
599
|
models: AgentModelDefinition[];
|
|
587
600
|
modes: AgentMode[];
|
|
@@ -1,48 +1,5 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
import type
|
|
3
|
-
|
|
4
|
-
import type { AgentStorage } from "./agent-storage.js";
|
|
5
|
-
import { type ArchiveDependencies } from "../workspace-archive-service.js";
|
|
6
|
-
import type { VoiceCallerContext, VoiceSpeakHandler } from "../voice-types.js";
|
|
7
|
-
import type { TerminalManager } from "../../terminal/terminal-manager.js";
|
|
8
|
-
import type { CreatePaseoWorktreeWorkflowFn } from "../worktree-session.js";
|
|
9
|
-
import type { ScheduleService } from "../schedule/service.js";
|
|
10
|
-
import { type ProviderSnapshotManager } from "./provider-snapshot-manager.js";
|
|
11
|
-
import type { GitHubService } from "../../services/github-service.js";
|
|
12
|
-
import type { WorkspaceGitService } from "../workspace-git-service.js";
|
|
13
|
-
export interface AgentMcpServerOptions {
|
|
14
|
-
agentManager: AgentManager;
|
|
15
|
-
agentStorage: AgentStorage;
|
|
16
|
-
terminalManager?: TerminalManager | null;
|
|
17
|
-
getDaemonTcpPort?: () => number | null;
|
|
18
|
-
scheduleService?: ScheduleService | null;
|
|
19
|
-
providerSnapshotManager: ProviderSnapshotManager;
|
|
20
|
-
github?: GitHubService;
|
|
21
|
-
workspaceGitService?: Pick<WorkspaceGitService, "getSnapshot" | "listWorktrees" | "resolveRepoRoot">;
|
|
22
|
-
findWorkspaceIdForCwd?: ArchiveDependencies["findWorkspaceIdForCwd"];
|
|
23
|
-
listActiveWorkspaces?: ArchiveDependencies["listActiveWorkspaces"];
|
|
24
|
-
archiveWorkspaceRecord?: ArchiveDependencies["archiveWorkspaceRecord"];
|
|
25
|
-
emitWorkspaceUpdatesForWorkspaceIds?: ArchiveDependencies["emitWorkspaceUpdatesForWorkspaceIds"];
|
|
26
|
-
markWorkspaceArchiving?: ArchiveDependencies["markWorkspaceArchiving"];
|
|
27
|
-
clearWorkspaceArchiving?: ArchiveDependencies["clearWorkspaceArchiving"];
|
|
28
|
-
createPaseoWorktree?: CreatePaseoWorktreeWorkflowFn;
|
|
29
|
-
ensureWorkspaceForCreate?: (cwd: string) => Promise<string>;
|
|
30
|
-
paseoHome?: string;
|
|
31
|
-
worktreesRoot?: string;
|
|
32
|
-
/**
|
|
33
|
-
* ID of the agent that is connecting to this MCP server.
|
|
34
|
-
* Used for cwd/mode inheritance when agents spawn child agents.
|
|
35
|
-
*/
|
|
36
|
-
callerAgentId?: string;
|
|
37
|
-
/**
|
|
38
|
-
* Optional resolver for session-bound speak handlers.
|
|
39
|
-
* Used by hidden voice agents to narrate through daemon-managed TTS.
|
|
40
|
-
*/
|
|
41
|
-
resolveSpeakHandler?: (callerAgentId: string) => VoiceSpeakHandler | null;
|
|
42
|
-
resolveCallerContext?: (callerAgentId: string) => VoiceCallerContext | null;
|
|
43
|
-
enableVoiceTools?: boolean;
|
|
44
|
-
voiceOnly?: boolean;
|
|
45
|
-
logger: Logger;
|
|
46
|
-
}
|
|
2
|
+
import { type PaseoToolHostDependencies } from "./tools/paseo-tools.js";
|
|
3
|
+
export type AgentMcpServerOptions = PaseoToolHostDependencies;
|
|
47
4
|
export declare function createAgentMcpServer(options: AgentMcpServerOptions): Promise<McpServer>;
|
|
48
5
|
//# sourceMappingURL=mcp-server.d.ts.map
|