@getpaseo/server 0.1.95 → 0.1.97-beta.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.
Files changed (134) hide show
  1. package/dist/server/{utils/executable.d.ts → executable-resolution/executable-resolution.d.ts} +2 -2
  2. package/dist/server/{utils/executable.js → executable-resolution/executable-resolution.js} +16 -14
  3. package/dist/server/executable-resolution/windows.d.ts +18 -0
  4. package/dist/server/executable-resolution/windows.js +62 -0
  5. package/dist/server/server/agent/agent-loading.js +4 -1
  6. package/dist/server/server/agent/agent-manager.d.ts +10 -2
  7. package/dist/server/server/agent/agent-manager.js +34 -46
  8. package/dist/server/server/agent/agent-projections.js +3 -0
  9. package/dist/server/server/agent/agent-prompt.js +19 -1
  10. package/dist/server/server/agent/agent-response-loop.js +2 -4
  11. package/dist/server/server/agent/agent-storage.d.ts +18 -19
  12. package/dist/server/server/agent/agent-storage.js +6 -23
  13. package/dist/server/server/agent/create-agent/create.d.ts +2 -12
  14. package/dist/server/server/agent/create-agent/create.js +28 -30
  15. package/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts +4 -2
  16. package/dist/server/server/agent/create-agent-lifecycle-dispatch.js +31 -22
  17. package/dist/server/server/agent/import-sessions.d.ts +1 -10
  18. package/dist/server/server/agent/import-sessions.js +1 -53
  19. package/dist/server/server/agent/lifecycle-command.js +5 -4
  20. package/dist/server/server/agent/mcp-server.d.ts +8 -5
  21. package/dist/server/server/agent/mcp-server.js +41 -14
  22. package/dist/server/server/agent/mcp-shared.d.ts +6 -3
  23. package/dist/server/server/agent/mcp-shared.js +3 -0
  24. package/dist/server/server/agent/provider-launch-config.js +1 -1
  25. package/dist/server/server/agent/providers/acp-agent.d.ts +5 -0
  26. package/dist/server/server/agent/providers/acp-agent.js +31 -26
  27. package/dist/server/server/agent/providers/claude/agent.js +45 -6
  28. package/dist/server/server/agent/providers/codex-app-server-agent.js +1 -1
  29. package/dist/server/server/agent/providers/copilot-acp-agent.js +1 -0
  30. package/dist/server/server/agent/providers/cursor-acp-agent.d.ts +0 -7
  31. package/dist/server/server/agent/providers/cursor-acp-agent.js +0 -78
  32. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +2 -0
  33. package/dist/server/server/agent/providers/mock-load-test-agent.js +73 -1
  34. package/dist/server/server/agent/providers/opencode/server-manager.js +1 -1
  35. package/dist/server/server/agent/structured-generation-providers.js +45 -1
  36. package/dist/server/server/agent-attention-policy.d.ts +12 -3
  37. package/dist/server/server/agent-attention-policy.js +15 -3
  38. package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts +7 -6
  39. package/dist/server/server/auto-archive-on-merge/archive-if-safe.js +21 -16
  40. package/dist/server/server/bootstrap.d.ts +3 -0
  41. package/dist/server/server/bootstrap.js +91 -12
  42. package/dist/server/server/config.js +1 -0
  43. package/dist/server/server/daemon-config-store.js +1 -0
  44. package/dist/server/server/exports.d.ts +1 -1
  45. package/dist/server/server/exports.js +1 -1
  46. package/dist/server/server/loop-service.d.ts +24 -24
  47. package/dist/server/server/migrations/backfill-workspace-id.migration.d.ts +9 -0
  48. package/dist/server/server/migrations/backfill-workspace-id.migration.js +60 -0
  49. package/dist/server/server/paseo-worktree-service.d.ts +9 -0
  50. package/dist/server/server/paseo-worktree-service.js +71 -12
  51. package/dist/server/server/path-utils.d.ts +1 -0
  52. package/dist/server/server/path-utils.js +6 -1
  53. package/dist/server/server/persisted-config.d.ts +7 -0
  54. package/dist/server/server/persisted-config.js +1 -0
  55. package/dist/server/server/persistence-hooks.d.ts +1 -0
  56. package/dist/server/server/persistence-hooks.js +13 -5
  57. package/dist/server/server/resolve-workspace-id-for-path.d.ts +3 -0
  58. package/dist/server/server/resolve-workspace-id-for-path.js +41 -0
  59. package/dist/server/server/script-proxy.d.ts +1 -1
  60. package/dist/server/server/script-proxy.js +1 -1
  61. package/dist/server/server/service-proxy.js +1 -1
  62. package/dist/server/server/session.d.ts +31 -6
  63. package/dist/server/server/session.js +640 -196
  64. package/dist/server/server/websocket-server.d.ts +5 -0
  65. package/dist/server/server/websocket-server.js +137 -3
  66. package/dist/server/server/workspace-archive-service.d.ts +60 -3
  67. package/dist/server/server/workspace-archive-service.js +217 -4
  68. package/dist/server/server/workspace-directory.d.ts +20 -2
  69. package/dist/server/server/workspace-directory.js +148 -70
  70. package/dist/server/server/workspace-git-service.js +21 -21
  71. package/dist/server/server/workspace-reconciliation-service.d.ts +1 -1
  72. package/dist/server/server/workspace-reconciliation-service.js +21 -22
  73. package/dist/server/server/workspace-registry-bootstrap.js +23 -10
  74. package/dist/server/server/workspace-registry-model.d.ts +3 -3
  75. package/dist/server/server/workspace-registry-model.js +9 -10
  76. package/dist/server/server/workspace-registry.d.ts +17 -4
  77. package/dist/server/server/workspace-registry.js +27 -0
  78. package/dist/server/server/worktree/commands.d.ts +7 -5
  79. package/dist/server/server/worktree/commands.js +38 -18
  80. package/dist/server/server/worktree-bootstrap.d.ts +1 -0
  81. package/dist/server/server/worktree-bootstrap.js +4 -1
  82. package/dist/server/server/worktree-branch-name-generator.d.ts +5 -1
  83. package/dist/server/server/worktree-branch-name-generator.js +8 -2
  84. package/dist/server/server/worktree-session.d.ts +4 -5
  85. package/dist/server/server/worktree-session.js +9 -3
  86. package/dist/server/services/github-service.js +1 -1
  87. package/dist/server/terminal/activity/terminal-activity-tracker.d.ts +20 -0
  88. package/dist/server/terminal/activity/terminal-activity-tracker.js +59 -0
  89. package/dist/server/terminal/agent-hooks/agent-hook-installer.d.ts +62 -0
  90. package/dist/server/terminal/agent-hooks/agent-hook-installer.js +117 -0
  91. package/dist/server/terminal/agent-hooks/claude/claude-settings.d.ts +7 -0
  92. package/dist/server/terminal/agent-hooks/claude/claude-settings.js +88 -0
  93. package/dist/server/terminal/agent-hooks/claude/claude.d.ts +4 -0
  94. package/dist/server/terminal/agent-hooks/claude/claude.js +47 -0
  95. package/dist/server/terminal/agent-hooks/codex/codex-settings.d.ts +7 -0
  96. package/dist/server/terminal/agent-hooks/codex/codex-settings.js +99 -0
  97. package/dist/server/terminal/agent-hooks/codex/codex.d.ts +4 -0
  98. package/dist/server/terminal/agent-hooks/codex/codex.js +30 -0
  99. package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.d.ts +4 -0
  100. package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.js +46 -0
  101. package/dist/server/terminal/agent-hooks/opencode/opencode.d.ts +3 -0
  102. package/dist/server/terminal/agent-hooks/opencode/opencode.js +23 -0
  103. package/dist/server/terminal/agent-hooks/provider-registry.d.ts +24 -0
  104. package/dist/server/terminal/agent-hooks/provider-registry.js +36 -0
  105. package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.d.ts +10 -0
  106. package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.js +26 -0
  107. package/dist/server/terminal/terminal-manager-factory.d.ts +4 -1
  108. package/dist/server/terminal/terminal-manager-factory.js +2 -2
  109. package/dist/server/terminal/terminal-manager.d.ts +33 -2
  110. package/dist/server/terminal/terminal-manager.js +144 -18
  111. package/dist/server/terminal/terminal-output-coalescer.d.ts +4 -0
  112. package/dist/server/terminal/terminal-output-coalescer.js +18 -0
  113. package/dist/server/terminal/terminal-restore.d.ts +1 -0
  114. package/dist/server/terminal/terminal-restore.js +6 -0
  115. package/dist/server/terminal/terminal-session-controller.d.ts +4 -2
  116. package/dist/server/terminal/terminal-session-controller.js +65 -24
  117. package/dist/server/terminal/terminal-worker-process.js +146 -63
  118. package/dist/server/terminal/terminal-worker-protocol.d.ts +19 -14
  119. package/dist/server/terminal/terminal.d.ts +42 -0
  120. package/dist/server/terminal/terminal.js +235 -16
  121. package/dist/server/terminal/worker-terminal-manager.d.ts +1 -0
  122. package/dist/server/terminal/worker-terminal-manager.js +220 -36
  123. package/dist/server/utils/build-metadata-prompt.d.ts +1 -1
  124. package/dist/server/utils/github-remote.js +1 -1
  125. package/dist/server/utils/tree-kill.d.ts +2 -2
  126. package/dist/src/{utils/executable.js → executable-resolution/executable-resolution.js} +16 -14
  127. package/dist/src/executable-resolution/windows.js +62 -0
  128. package/dist/src/server/agent/provider-launch-config.js +1 -1
  129. package/dist/src/server/persisted-config.js +1 -0
  130. package/package.json +10 -5
  131. package/dist/server/server/agent/agent-metadata-generator.d.ts +0 -36
  132. package/dist/server/server/agent/agent-metadata-generator.js +0 -112
  133. package/dist/server/server/paseo-worktree-archive-service.d.ts +0 -41
  134. package/dist/server/server/paseo-worktree-archive-service.js +0 -144
@@ -1,112 +0,0 @@
1
- import { z } from "zod";
2
- import { StructuredAgentFallbackError, StructuredAgentResponseError, generateStructuredAgentResponseWithFallback, } from "./agent-response-loop.js";
3
- import { resolveStructuredGenerationProviders, } from "./structured-generation-providers.js";
4
- import { MAX_AUTO_AGENT_TITLE_CHARS } from "@getpaseo/protocol/agent-title-limits";
5
- import { buildMetadataPrompt } from "../../utils/build-metadata-prompt.js";
6
- function hasExplicitTitle(title) {
7
- return Boolean(title && title.trim().length > 0);
8
- }
9
- function normalizeAutoTitle(title) {
10
- const normalized = title.trim();
11
- if (!normalized) {
12
- return null;
13
- }
14
- return normalized.slice(0, MAX_AUTO_AGENT_TITLE_CHARS).trim() || null;
15
- }
16
- export async function determineAgentMetadataNeeds(options) {
17
- const prompt = options.initialPrompt?.trim();
18
- if (!prompt) {
19
- return { prompt: null, needsTitle: false };
20
- }
21
- const needsTitle = !hasExplicitTitle(options.explicitTitle);
22
- return {
23
- prompt,
24
- needsTitle,
25
- };
26
- }
27
- function buildMetadataSchema(needs) {
28
- if (!needs.needsTitle) {
29
- return null;
30
- }
31
- const shape = {};
32
- if (needs.needsTitle) {
33
- shape.title = z.string().min(1).max(MAX_AUTO_AGENT_TITLE_CHARS);
34
- }
35
- return z.object(shape);
36
- }
37
- async function buildPrompt(needs, options) {
38
- const beforeLines = ["Generate metadata for a coding agent based on the user prompt."];
39
- if (needs.needsTitle) {
40
- beforeLines.push(`Title: short descriptive label (<= ${MAX_AUTO_AGENT_TITLE_CHARS} chars).`);
41
- }
42
- return buildMetadataPrompt({
43
- cwd: options.cwd,
44
- workspaceGitService: options.workspaceGitService,
45
- configKey: "agentTitle",
46
- before: beforeLines.join("\n"),
47
- after: "Return JSON only with a single field 'title'.",
48
- trailing: `User prompt:\n${needs.prompt ?? ""}`,
49
- });
50
- }
51
- export async function generateAndApplyAgentMetadata(options) {
52
- const needs = await determineAgentMetadataNeeds(options);
53
- if (!needs.prompt) {
54
- return;
55
- }
56
- const schema = buildMetadataSchema(needs);
57
- if (!schema) {
58
- return;
59
- }
60
- const generator = options.deps?.generateStructuredAgentResponseWithFallback ??
61
- generateStructuredAgentResponseWithFallback;
62
- let result;
63
- try {
64
- const providers = options.providerSnapshotManager
65
- ? await resolveStructuredGenerationProviders({
66
- cwd: options.cwd,
67
- providerSnapshotManager: options.providerSnapshotManager,
68
- daemonConfig: options.daemonConfig,
69
- currentSelection: options.currentSelection,
70
- })
71
- : [];
72
- result = await generator({
73
- manager: options.agentManager,
74
- cwd: options.cwd,
75
- prompt: await buildPrompt(needs, {
76
- cwd: options.cwd,
77
- workspaceGitService: options.workspaceGitService,
78
- }),
79
- schema,
80
- schemaName: "AgentMetadata",
81
- maxRetries: 2,
82
- providers,
83
- persistSession: false,
84
- logger: options.logger,
85
- agentConfigOverrides: {
86
- title: "Agent metadata generator",
87
- internal: true,
88
- },
89
- });
90
- }
91
- catch (error) {
92
- const attempts = error instanceof StructuredAgentFallbackError ? error.attempts : undefined;
93
- options.logger.error({ err: error, agentId: options.agentId, attempts }, error instanceof StructuredAgentResponseError || error instanceof StructuredAgentFallbackError
94
- ? "Structured metadata generation failed"
95
- : "Agent metadata generation failed");
96
- return;
97
- }
98
- if (needs.needsTitle && typeof result.title === "string") {
99
- const normalizedTitle = normalizeAutoTitle(result.title);
100
- if (normalizedTitle) {
101
- await options.agentManager.setGeneratedTitle(options.agentId, normalizedTitle);
102
- }
103
- }
104
- }
105
- export function scheduleAgentMetadataGeneration(options) {
106
- queueMicrotask(() => {
107
- void generateAndApplyAgentMetadata(options).catch((error) => {
108
- options.logger.error({ err: error, agentId: options.agentId }, "Agent metadata generation crashed");
109
- });
110
- });
111
- }
112
- //# sourceMappingURL=agent-metadata-generator.js.map
@@ -1,41 +0,0 @@
1
- import type { Logger } from "pino";
2
- import type { AgentManager } from "./agent/agent-manager.js";
3
- import type { AgentStorage } from "./agent/agent-storage.js";
4
- import type { WorkspaceGitService } from "./workspace-git-service.js";
5
- import type { GitHubService } from "../services/github-service.js";
6
- import type { TerminalManager } from "../terminal/terminal-manager.js";
7
- export interface ArchivePaseoWorktreeDependencies {
8
- paseoHome?: string;
9
- worktreesRoot?: string;
10
- github: GitHubService;
11
- workspaceGitService: Pick<WorkspaceGitService, "getSnapshot">;
12
- agentManager: Pick<AgentManager, "listAgents" | "archiveAgent" | "archiveSnapshot">;
13
- agentStorage: Pick<AgentStorage, "list">;
14
- archiveWorkspaceRecord: (workspaceId: string) => Promise<void>;
15
- emitWorkspaceUpdatesForWorkspaceIds: (workspaceIds: Iterable<string>) => Promise<void>;
16
- markWorkspaceArchiving: (workspaceIds: Iterable<string>, archivingAt: string) => void;
17
- clearWorkspaceArchiving: (workspaceIds: Iterable<string>) => void;
18
- isPathWithinRoot: (rootPath: string, candidatePath: string) => boolean;
19
- killTerminalsUnderPath: (rootPath: string) => Promise<void>;
20
- sessionLogger?: Logger;
21
- }
22
- export interface KillTerminalsUnderPathDependencies {
23
- isPathWithinRoot: (rootPath: string, candidatePath: string) => boolean;
24
- killTrackedTerminal: (terminalId: string, options?: {
25
- emitExit: boolean;
26
- }) => void;
27
- detachTerminalStream?: (terminalId: string, options: {
28
- emitExit: boolean;
29
- }) => void;
30
- sessionLogger: Logger;
31
- terminalManager: TerminalManager | null;
32
- }
33
- export declare function archivePaseoWorktree(dependencies: ArchivePaseoWorktreeDependencies, options: {
34
- targetPath: string;
35
- repoRoot: string | null;
36
- worktreesRoot?: string;
37
- worktreesBaseRoot?: string;
38
- requestId: string;
39
- }): Promise<string[]>;
40
- export declare function killTerminalsUnderPath(dependencies: KillTerminalsUnderPathDependencies, rootPath: string): Promise<void>;
41
- //# sourceMappingURL=paseo-worktree-archive-service.d.ts.map
@@ -1,144 +0,0 @@
1
- import { normalizeWorkspaceId as normalizePersistedWorkspaceId } from "./workspace-registry-model.js";
2
- import { deletePaseoWorktree, resolvePaseoWorktreeRootForCwd, WorktreeTeardownError, } from "../utils/worktree.js";
3
- export async function archivePaseoWorktree(dependencies, options) {
4
- let targetPath = options.targetPath;
5
- const resolvedWorktree = await resolvePaseoWorktreeRootForCwd(targetPath, {
6
- paseoHome: dependencies.paseoHome,
7
- worktreesRoot: options.worktreesBaseRoot ?? dependencies.worktreesRoot,
8
- });
9
- if (resolvedWorktree) {
10
- targetPath = resolvedWorktree.worktreePath;
11
- }
12
- const archivedAgents = new Set();
13
- const affectedWorkspaceCwds = new Set([targetPath]);
14
- const affectedWorkspaceIds = new Set([normalizePersistedWorkspaceId(targetPath)]);
15
- const liveAgents = dependencies.agentManager
16
- .listAgents()
17
- .filter((agent) => dependencies.isPathWithinRoot(targetPath, agent.cwd));
18
- for (const agent of liveAgents) {
19
- archivedAgents.add(agent.id);
20
- affectedWorkspaceCwds.add(agent.cwd);
21
- affectedWorkspaceIds.add(normalizePersistedWorkspaceId(agent.cwd));
22
- }
23
- let storedRecords = [];
24
- try {
25
- storedRecords = await dependencies.agentStorage.list();
26
- }
27
- catch (error) {
28
- dependencies.sessionLogger?.warn({ err: error, targetPath }, "Failed to list stored agents during worktree archive; continuing");
29
- }
30
- const liveAgentIds = new Set(liveAgents.map((agent) => agent.id));
31
- const matchingStoredRecords = storedRecords.filter((record) => dependencies.isPathWithinRoot(targetPath, record.cwd));
32
- for (const record of matchingStoredRecords) {
33
- archivedAgents.add(record.id);
34
- affectedWorkspaceCwds.add(record.cwd);
35
- affectedWorkspaceIds.add(normalizePersistedWorkspaceId(record.cwd));
36
- }
37
- const affectedWorkspaceIdList = Array.from(affectedWorkspaceIds);
38
- dependencies.markWorkspaceArchiving(affectedWorkspaceIdList, new Date().toISOString());
39
- try {
40
- await dependencies.emitWorkspaceUpdatesForWorkspaceIds(affectedWorkspaceIdList);
41
- const archivedAt = new Date().toISOString();
42
- const archiveResults = await Promise.allSettled([
43
- ...liveAgents.map((agent) => dependencies.agentManager.archiveAgent(agent.id)),
44
- ...matchingStoredRecords
45
- .filter((record) => !liveAgentIds.has(record.id) && !record.archivedAt)
46
- .map((record) => dependencies.agentManager.archiveSnapshot(record.id, archivedAt)),
47
- dependencies.killTerminalsUnderPath(targetPath),
48
- ]);
49
- for (const result of archiveResults) {
50
- if (result.status === "rejected") {
51
- dependencies.sessionLogger?.warn({ err: result.reason, targetPath }, "Worktree archive teardown step failed; continuing");
52
- }
53
- }
54
- let teardownError = null;
55
- try {
56
- await deletePaseoWorktree({
57
- cwd: options.repoRoot,
58
- worktreePath: targetPath,
59
- worktreesRoot: options.worktreesRoot,
60
- paseoHome: dependencies.paseoHome,
61
- worktreesBaseRoot: options.worktreesBaseRoot ?? dependencies.worktreesRoot,
62
- });
63
- }
64
- catch (error) {
65
- if (error instanceof WorktreeTeardownError) {
66
- teardownError = error;
67
- dependencies.sessionLogger?.warn({ err: error, targetPath }, "Worktree teardown failed during archive; archiving workspace record anyway");
68
- }
69
- else {
70
- throw error;
71
- }
72
- }
73
- if (!teardownError && options.repoRoot) {
74
- try {
75
- await dependencies.workspaceGitService.getSnapshot(options.repoRoot, {
76
- force: true,
77
- reason: "archive-worktree",
78
- });
79
- }
80
- catch (error) {
81
- dependencies.sessionLogger?.warn({ err: error, cwd: options.repoRoot }, "Failed to force-refresh workspace git snapshot after archiving worktree");
82
- }
83
- }
84
- for (const cwd of affectedWorkspaceCwds) {
85
- dependencies.github.invalidate({ cwd });
86
- }
87
- await Promise.all(affectedWorkspaceIdList.map(async (workspaceId) => {
88
- try {
89
- await dependencies.archiveWorkspaceRecord(workspaceId);
90
- }
91
- catch (error) {
92
- dependencies.sessionLogger?.warn({ err: error, workspaceId }, teardownError
93
- ? "Failed to archive workspace record after teardown failed"
94
- : "Failed to archive workspace record; worktree FS already removed");
95
- }
96
- }));
97
- if (teardownError) {
98
- throw teardownError;
99
- }
100
- }
101
- finally {
102
- dependencies.clearWorkspaceArchiving(affectedWorkspaceIdList);
103
- await dependencies.emitWorkspaceUpdatesForWorkspaceIds(affectedWorkspaceIdList);
104
- }
105
- return Array.from(archivedAgents);
106
- }
107
- export async function killTerminalsUnderPath(dependencies, rootPath) {
108
- const terminalManager = dependencies.terminalManager;
109
- if (!terminalManager) {
110
- return;
111
- }
112
- const terminalIds = [];
113
- const relevantCwds = [...terminalManager.listDirectories()].filter((terminalCwd) => dependencies.isPathWithinRoot(rootPath, terminalCwd));
114
- const terminalLists = await Promise.all(relevantCwds.map(async (terminalCwd) => {
115
- try {
116
- return await terminalManager.getTerminals(terminalCwd);
117
- }
118
- catch (error) {
119
- dependencies.sessionLogger.warn({ err: error, cwd: terminalCwd }, "Failed to enumerate worktree terminals during archive");
120
- return [];
121
- }
122
- }));
123
- for (const terminals of terminalLists) {
124
- for (const terminal of terminals) {
125
- terminalIds.push(terminal.id);
126
- }
127
- }
128
- if (terminalIds.length === 0) {
129
- return;
130
- }
131
- await Promise.allSettled(terminalIds.map(async (terminalId) => {
132
- try {
133
- dependencies.detachTerminalStream?.(terminalId, { emitExit: true });
134
- await terminalManager.killTerminalAndWait(terminalId, {
135
- gracefulTimeoutMs: 2000,
136
- forceTimeoutMs: 1500,
137
- });
138
- }
139
- catch (error) {
140
- dependencies.sessionLogger.warn({ err: error, terminalId }, "Terminal kill escalation failed during archive; proceeding anyway");
141
- }
142
- }));
143
- }
144
- //# sourceMappingURL=paseo-worktree-archive-service.js.map