@getpaseo/server 0.1.59 → 0.1.60
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/dev-runner.js +26 -7
- package/dist/scripts/dev-runner.js.map +1 -1
- package/dist/server/client/daemon-client-runtime-metrics.d.ts +39 -0
- package/dist/server/client/daemon-client-runtime-metrics.d.ts.map +1 -0
- package/dist/server/client/daemon-client-runtime-metrics.js +173 -0
- package/dist/server/client/daemon-client-runtime-metrics.js.map +1 -0
- package/dist/server/client/daemon-client.d.ts +58 -9
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +151 -10
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +55 -48
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +541 -331
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.d.ts +3 -2
- package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
- package/dist/server/server/agent/agent-metadata-generator.js +31 -16
- package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
- package/dist/server/server/agent/agent-projections.d.ts +2 -1
- package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
- package/dist/server/server/agent/agent-projections.js +29 -1
- package/dist/server/server/agent/agent-projections.js.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts +9 -5
- package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
- package/dist/server/server/agent/agent-storage.d.ts +76 -69
- package/dist/server/server/agent/agent-storage.d.ts.map +1 -1
- package/dist/server/server/agent/agent-storage.js +13 -6
- package/dist/server/server/agent/agent-storage.js.map +1 -1
- package/dist/server/server/agent/agent-stream-coalescer.d.ts +41 -0
- package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -0
- package/dist/server/server/agent/agent-stream-coalescer.js +166 -0
- package/dist/server/server/agent/agent-stream-coalescer.js.map +1 -0
- package/dist/server/server/agent/agent-timeline-store-types.d.ts +54 -0
- package/dist/server/server/agent/agent-timeline-store-types.d.ts.map +1 -0
- package/dist/server/server/agent/agent-timeline-store-types.js +2 -0
- package/dist/server/server/agent/agent-timeline-store-types.js.map +1 -0
- package/dist/server/server/agent/agent-timeline-store.d.ts +32 -0
- package/dist/server/server/agent/agent-timeline-store.d.ts.map +1 -0
- package/dist/server/server/agent/agent-timeline-store.js +245 -0
- package/dist/server/server/agent/agent-timeline-store.js.map +1 -0
- package/dist/server/server/agent/mcp-server.d.ts +12 -1
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +276 -65
- package/dist/server/server/agent/mcp-server.js.map +1 -1
- package/dist/server/server/agent/mcp-shared.d.ts +196 -152
- package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-shared.js +40 -42
- package/dist/server/server/agent/mcp-shared.js.map +1 -1
- package/dist/server/server/agent/model-resolver.d.ts.map +1 -1
- package/dist/server/server/agent/model-resolver.js +3 -1
- package/dist/server/server/agent/model-resolver.js.map +1 -1
- package/dist/server/server/agent/prompt-attachments.d.ts +6 -0
- package/dist/server/server/agent/prompt-attachments.d.ts.map +1 -0
- package/dist/server/server/agent/prompt-attachments.js +31 -0
- package/dist/server/server/agent/prompt-attachments.js.map +1 -0
- package/dist/server/server/agent/provider-launch-config.d.ts +12 -10
- package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
- package/dist/server/server/agent/provider-launch-config.js +34 -0
- package/dist/server/server/agent/provider-launch-config.js.map +1 -1
- package/dist/server/server/agent/provider-manifest.d.ts +1 -0
- package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
- package/dist/server/server/agent/provider-manifest.js +22 -1
- package/dist/server/server/agent/provider-manifest.js.map +1 -1
- package/dist/server/server/agent/provider-registry.d.ts +5 -2
- package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
- package/dist/server/server/agent/provider-registry.js +20 -9
- package/dist/server/server/agent/provider-registry.js.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +17 -5
- package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
- package/dist/server/server/agent/provider-snapshot-manager.js +150 -61
- package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.d.ts +8 -4
- package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/acp-agent.js +73 -8
- package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -2
- package/dist/server/server/agent/providers/claude-agent.d.ts +1 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.js +8 -7
- package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +37 -4
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.js +61 -31
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.js +3 -2
- package/dist/server/server/agent/providers/copilot-acp-agent.js.map +1 -1
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +64 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.js +585 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -0
- package/dist/server/server/agent/providers/opencode-agent.d.ts +19 -4
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.js +227 -118
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/agent/providers/pi-direct-agent.d.ts +69 -0
- package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -0
- package/dist/server/server/agent/providers/pi-direct-agent.js +1177 -0
- package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +7 -4
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
- package/dist/server/server/agent-attention-policy.d.ts +13 -13
- package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
- package/dist/server/server/agent-attention-policy.js +20 -36
- package/dist/server/server/agent-attention-policy.js.map +1 -1
- package/dist/server/server/bootstrap.d.ts +6 -0
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +113 -11
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/chat/chat-rpc-schemas.d.ts +44 -44
- package/dist/server/server/chat/chat-types.d.ts +6 -6
- package/dist/server/server/checkout-diff-manager.d.ts +0 -1
- package/dist/server/server/checkout-diff-manager.d.ts.map +1 -1
- package/dist/server/server/checkout-diff-manager.js +6 -4
- package/dist/server/server/checkout-diff-manager.js.map +1 -1
- package/dist/server/server/config.d.ts.map +1 -1
- package/dist/server/server/config.js +1 -0
- package/dist/server/server/config.js.map +1 -1
- package/dist/server/server/file-explorer/service.d.ts.map +1 -1
- package/dist/server/server/file-explorer/service.js +2 -1
- package/dist/server/server/file-explorer/service.js.map +1 -1
- package/dist/server/server/loop/rpc-schemas.d.ts +392 -392
- package/dist/server/server/loop-service.d.ts +52 -52
- package/dist/server/server/paseo-worktree-archive-service.d.ts +41 -0
- package/dist/server/server/paseo-worktree-archive-service.d.ts.map +1 -0
- package/dist/server/server/paseo-worktree-archive-service.js +137 -0
- package/dist/server/server/paseo-worktree-archive-service.js.map +1 -0
- package/dist/server/server/paseo-worktree-service.d.ts +24 -0
- package/dist/server/server/paseo-worktree-service.d.ts.map +1 -0
- package/dist/server/server/paseo-worktree-service.js +94 -0
- package/dist/server/server/paseo-worktree-service.js.map +1 -0
- package/dist/server/server/path-utils.d.ts +1 -0
- package/dist/server/server/path-utils.d.ts.map +1 -1
- package/dist/server/server/path-utils.js +9 -0
- package/dist/server/server/path-utils.js.map +1 -1
- package/dist/server/server/persisted-config.d.ts +73 -73
- package/dist/server/server/persistence-hooks.d.ts.map +1 -1
- package/dist/server/server/persistence-hooks.js +3 -0
- package/dist/server/server/persistence-hooks.js.map +1 -1
- package/dist/server/server/resolve-worktree-creation-intent.d.ts +30 -0
- package/dist/server/server/resolve-worktree-creation-intent.d.ts.map +1 -0
- package/dist/server/server/resolve-worktree-creation-intent.js +163 -0
- package/dist/server/server/resolve-worktree-creation-intent.js.map +1 -0
- package/dist/server/server/schedule/rpc-schemas.d.ts +192 -192
- package/dist/server/server/schedule/service.d.ts +1 -1
- package/dist/server/server/schedule/service.d.ts.map +1 -1
- package/dist/server/server/schedule/types.d.ts +44 -44
- package/dist/server/server/script-health-monitor.d.ts +39 -0
- package/dist/server/server/script-health-monitor.d.ts.map +1 -0
- package/dist/server/server/script-health-monitor.js +158 -0
- package/dist/server/server/script-health-monitor.js.map +1 -0
- package/dist/server/server/script-proxy.d.ts +40 -0
- package/dist/server/server/script-proxy.d.ts.map +1 -0
- package/dist/server/server/script-proxy.js +245 -0
- package/dist/server/server/script-proxy.js.map +1 -0
- package/dist/server/server/script-route-branch-handler.d.ts +10 -0
- package/dist/server/server/script-route-branch-handler.d.ts.map +1 -0
- package/dist/server/server/script-route-branch-handler.js +45 -0
- package/dist/server/server/script-route-branch-handler.js.map +1 -0
- package/dist/server/server/script-status-projection.d.ts +29 -0
- package/dist/server/server/script-status-projection.d.ts.map +1 -0
- package/dist/server/server/script-status-projection.js +133 -0
- package/dist/server/server/script-status-projection.js.map +1 -0
- package/dist/server/server/session.d.ts +77 -13
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +1290 -548
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/websocket-server.d.ts +27 -3
- package/dist/server/server/websocket-server.d.ts.map +1 -1
- package/dist/server/server/websocket-server.js +112 -29
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/server/workspace-archive-service.d.ts +8 -0
- package/dist/server/server/workspace-archive-service.d.ts.map +1 -0
- package/dist/server/server/workspace-archive-service.js +17 -0
- package/dist/server/server/workspace-archive-service.js.map +1 -0
- package/dist/server/server/workspace-git-metadata.d.ts +24 -0
- package/dist/server/server/workspace-git-metadata.d.ts.map +1 -0
- package/dist/server/server/workspace-git-metadata.js +78 -0
- package/dist/server/server/workspace-git-metadata.js.map +1 -0
- package/dist/server/server/workspace-git-service.d.ts +104 -5
- package/dist/server/server/workspace-git-service.d.ts.map +1 -1
- package/dist/server/server/workspace-git-service.js +442 -56
- package/dist/server/server/workspace-git-service.js.map +1 -1
- package/dist/server/server/workspace-reconciliation-service.d.ts +54 -0
- package/dist/server/server/workspace-reconciliation-service.d.ts.map +1 -0
- package/dist/server/server/workspace-reconciliation-service.js +176 -0
- package/dist/server/server/workspace-reconciliation-service.js.map +1 -0
- package/dist/server/server/workspace-registry-bootstrap.d.ts.map +1 -1
- package/dist/server/server/workspace-registry-bootstrap.js +4 -3
- package/dist/server/server/workspace-registry-bootstrap.js.map +1 -1
- package/dist/server/server/workspace-registry.d.ts +8 -8
- package/dist/server/server/workspace-registry.test-helpers.d.ts +37 -0
- package/dist/server/server/workspace-registry.test-helpers.d.ts.map +1 -0
- package/dist/server/server/workspace-registry.test-helpers.js +121 -0
- package/dist/server/server/workspace-registry.test-helpers.js.map +1 -0
- package/dist/server/server/workspace-script-runtime-store.d.ts +28 -0
- package/dist/server/server/workspace-script-runtime-store.d.ts.map +1 -0
- package/dist/server/server/workspace-script-runtime-store.js +78 -0
- package/dist/server/server/workspace-script-runtime-store.js.map +1 -0
- package/dist/server/server/workspace-service-env.d.ts +17 -0
- package/dist/server/server/workspace-service-env.d.ts.map +1 -0
- package/dist/server/server/workspace-service-env.js +80 -0
- package/dist/server/server/workspace-service-env.js.map +1 -0
- package/dist/server/server/workspace-service-port-registry.d.ts +19 -0
- package/dist/server/server/workspace-service-port-registry.d.ts.map +1 -0
- package/dist/server/server/workspace-service-port-registry.js +59 -0
- package/dist/server/server/workspace-service-port-registry.js.map +1 -0
- package/dist/server/server/worktree-bootstrap.d.ts +55 -10
- package/dist/server/server/worktree-bootstrap.d.ts.map +1 -1
- package/dist/server/server/worktree-bootstrap.js +290 -112
- package/dist/server/server/worktree-bootstrap.js.map +1 -1
- package/dist/server/server/worktree-core.d.ts +25 -0
- package/dist/server/server/worktree-core.d.ts.map +1 -0
- package/dist/server/server/worktree-core.js +75 -0
- package/dist/server/server/worktree-core.js.map +1 -0
- package/dist/server/server/worktree-errors.d.ts +12 -0
- package/dist/server/server/worktree-errors.d.ts.map +1 -0
- package/dist/server/server/worktree-errors.js +31 -0
- package/dist/server/server/worktree-errors.js.map +1 -0
- package/dist/server/server/worktree-session.d.ts +56 -70
- package/dist/server/server/worktree-session.d.ts.map +1 -1
- package/dist/server/server/worktree-session.js +176 -251
- package/dist/server/server/worktree-session.js.map +1 -1
- package/dist/server/services/github-service.d.ts +225 -0
- package/dist/server/services/github-service.d.ts.map +1 -0
- package/dist/server/services/github-service.js +1381 -0
- package/dist/server/services/github-service.js.map +1 -0
- package/dist/server/shared/messages.d.ts +29408 -12268
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +391 -65
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/terminal/shell-integration/zsh/.zshenv +17 -0
- package/dist/server/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
- package/dist/server/terminal/terminal-manager.d.ts +9 -0
- package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
- package/dist/server/terminal/terminal-manager.js +27 -0
- package/dist/server/terminal/terminal-manager.js.map +1 -1
- package/dist/server/terminal/terminal-output-coalescer.d.ts +30 -0
- package/dist/server/terminal/terminal-output-coalescer.d.ts.map +1 -0
- package/dist/server/terminal/terminal-output-coalescer.js +55 -0
- package/dist/server/terminal/terminal-output-coalescer.js.map +1 -0
- package/dist/server/terminal/terminal.d.ts +32 -1
- package/dist/server/terminal/terminal.d.ts.map +1 -1
- package/dist/server/terminal/terminal.js +397 -17
- package/dist/server/terminal/terminal.js.map +1 -1
- package/dist/server/utils/checkout-git.d.ts +63 -10
- package/dist/server/utils/checkout-git.d.ts.map +1 -1
- package/dist/server/utils/checkout-git.js +321 -229
- package/dist/server/utils/checkout-git.js.map +1 -1
- package/dist/server/utils/promise-timeout.d.ts +9 -0
- package/dist/server/utils/promise-timeout.d.ts.map +1 -0
- package/dist/server/utils/promise-timeout.js +25 -0
- package/dist/server/utils/promise-timeout.js.map +1 -0
- package/dist/server/utils/script-hostname.d.ts +8 -0
- package/dist/server/utils/script-hostname.d.ts.map +1 -0
- package/dist/server/utils/script-hostname.js +14 -0
- package/dist/server/utils/script-hostname.js.map +1 -0
- package/dist/server/utils/string-command-shell.d.ts +10 -0
- package/dist/server/utils/string-command-shell.d.ts.map +1 -0
- package/dist/server/utils/string-command-shell.js +21 -0
- package/dist/server/utils/string-command-shell.js.map +1 -0
- package/dist/server/utils/worktree.d.ts +54 -7
- package/dist/server/utils/worktree.d.ts.map +1 -1
- package/dist/server/utils/worktree.js +434 -129
- package/dist/server/utils/worktree.js.map +1 -1
- package/dist/src/terminal/shell-integration/zsh/.zshenv +17 -0
- package/dist/src/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
- package/package.json +11 -14
- package/dist/server/server/agent/providers/pi-acp-agent.d.ts +0 -28
- package/dist/server/server/agent/providers/pi-acp-agent.d.ts.map +0 -1
- package/dist/server/server/agent/providers/pi-acp-agent.js +0 -302
- package/dist/server/server/agent/providers/pi-acp-agent.js.map +0 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { promises as fs } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { createPersistedProjectRecord, createPersistedWorkspaceRecord, } from "./workspace-registry.js";
|
|
5
|
+
class FileBackedRegistry {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.loaded = false;
|
|
8
|
+
this.cache = new Map();
|
|
9
|
+
this.persistQueue = Promise.resolve();
|
|
10
|
+
this.filePath = options.filePath;
|
|
11
|
+
this.schema = options.schema;
|
|
12
|
+
this.getId = options.getId;
|
|
13
|
+
this.logger = options.logger.child({
|
|
14
|
+
module: "workspace-registry",
|
|
15
|
+
component: options.component,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
async initialize() {
|
|
19
|
+
await this.load();
|
|
20
|
+
}
|
|
21
|
+
async existsOnDisk() {
|
|
22
|
+
try {
|
|
23
|
+
await fs.access(this.filePath);
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async list() {
|
|
31
|
+
await this.load();
|
|
32
|
+
return Array.from(this.cache.values());
|
|
33
|
+
}
|
|
34
|
+
async get(id) {
|
|
35
|
+
await this.load();
|
|
36
|
+
return this.cache.get(id) ?? null;
|
|
37
|
+
}
|
|
38
|
+
async upsert(record) {
|
|
39
|
+
await this.load();
|
|
40
|
+
const parsed = this.schema(record);
|
|
41
|
+
this.cache.set(this.getId(parsed), parsed);
|
|
42
|
+
await this.enqueuePersist();
|
|
43
|
+
}
|
|
44
|
+
async archive(id, archivedAt) {
|
|
45
|
+
await this.load();
|
|
46
|
+
const existing = this.cache.get(id);
|
|
47
|
+
if (!existing) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const next = this.schema({
|
|
51
|
+
...existing,
|
|
52
|
+
updatedAt: archivedAt,
|
|
53
|
+
archivedAt,
|
|
54
|
+
});
|
|
55
|
+
this.cache.set(id, next);
|
|
56
|
+
await this.enqueuePersist();
|
|
57
|
+
}
|
|
58
|
+
async remove(id) {
|
|
59
|
+
await this.load();
|
|
60
|
+
if (!this.cache.delete(id)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
await this.enqueuePersist();
|
|
64
|
+
}
|
|
65
|
+
async load() {
|
|
66
|
+
if (this.loaded) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
this.cache.clear();
|
|
70
|
+
try {
|
|
71
|
+
const raw = await fs.readFile(this.filePath, "utf8");
|
|
72
|
+
const parsed = JSON.parse(raw);
|
|
73
|
+
for (const record of parsed) {
|
|
74
|
+
const validated = this.schema(record);
|
|
75
|
+
this.cache.set(this.getId(validated), validated);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
const code = error.code;
|
|
80
|
+
if (code !== "ENOENT") {
|
|
81
|
+
this.logger.error({ err: error, filePath: this.filePath }, "Failed to load registry file");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
this.loaded = true;
|
|
85
|
+
}
|
|
86
|
+
async persist() {
|
|
87
|
+
const records = Array.from(this.cache.values());
|
|
88
|
+
await fs.mkdir(path.dirname(this.filePath), { recursive: true });
|
|
89
|
+
const tempPath = `${this.filePath}.${process.pid}.${Date.now()}.${randomUUID()}.tmp`;
|
|
90
|
+
await fs.writeFile(tempPath, JSON.stringify(records, null, 2), "utf8");
|
|
91
|
+
await fs.rename(tempPath, this.filePath);
|
|
92
|
+
}
|
|
93
|
+
async enqueuePersist() {
|
|
94
|
+
const nextPersist = this.persistQueue.then(() => this.persist());
|
|
95
|
+
this.persistQueue = nextPersist.catch(() => { });
|
|
96
|
+
await nextPersist;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export class FileBackedProjectRegistry extends FileBackedRegistry {
|
|
100
|
+
constructor(filePath, logger) {
|
|
101
|
+
super({
|
|
102
|
+
filePath,
|
|
103
|
+
logger,
|
|
104
|
+
schema: (record) => createPersistedProjectRecord(record),
|
|
105
|
+
getId: (record) => record.projectId,
|
|
106
|
+
component: "projects",
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
export class FileBackedWorkspaceRegistry extends FileBackedRegistry {
|
|
111
|
+
constructor(filePath, logger) {
|
|
112
|
+
super({
|
|
113
|
+
filePath,
|
|
114
|
+
logger,
|
|
115
|
+
schema: (record) => createPersistedWorkspaceRecord(record),
|
|
116
|
+
getId: (record) => record.workspaceId,
|
|
117
|
+
component: "workspaces",
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=workspace-registry.test-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-registry.test-helpers.js","sourceRoot":"","sources":["../../../src/server/workspace-registry.test-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface ScriptRuntimeEntry {
|
|
2
|
+
workspaceId: string;
|
|
3
|
+
scriptName: string;
|
|
4
|
+
type: "script" | "service";
|
|
5
|
+
lifecycle: "running" | "stopped";
|
|
6
|
+
terminalId: string;
|
|
7
|
+
exitCode: number | null;
|
|
8
|
+
}
|
|
9
|
+
type RuntimeEntryKey = {
|
|
10
|
+
workspaceId: string;
|
|
11
|
+
scriptName: string;
|
|
12
|
+
};
|
|
13
|
+
export declare class WorkspaceScriptRuntimeStore {
|
|
14
|
+
private readonly entries;
|
|
15
|
+
private readonly scriptsByWorkspace;
|
|
16
|
+
get(key: RuntimeEntryKey): ScriptRuntimeEntry | null;
|
|
17
|
+
set(entry: ScriptRuntimeEntry): void;
|
|
18
|
+
remove(key: RuntimeEntryKey): void;
|
|
19
|
+
listForWorkspace(workspaceId: string): ScriptRuntimeEntry[];
|
|
20
|
+
removeForWorkspace(workspaceId: string): void;
|
|
21
|
+
isRunning(key: RuntimeEntryKey): boolean;
|
|
22
|
+
private addScriptToWorkspaceIndex;
|
|
23
|
+
private removeScriptFromWorkspaceIndex;
|
|
24
|
+
private toEntryKey;
|
|
25
|
+
private toWorkspaceKey;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=workspace-script-runtime-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-script-runtime-store.d.ts","sourceRoot":"","sources":["../../../src/server/workspace-script-runtime-store.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,KAAK,eAAe,GAAG;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAkC;IAErE,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,kBAAkB,GAAG,IAAI;IAKpD,GAAG,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAYpC,MAAM,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAWlC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAqB3D,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAO7C,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO;IAIxC,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,8BAA8B;IAatC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,cAAc;CAGvB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export class WorkspaceScriptRuntimeStore {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.entries = new Map();
|
|
4
|
+
this.scriptsByWorkspace = new Map();
|
|
5
|
+
}
|
|
6
|
+
get(key) {
|
|
7
|
+
const entry = this.entries.get(this.toEntryKey(key));
|
|
8
|
+
return entry ? { ...entry } : null;
|
|
9
|
+
}
|
|
10
|
+
set(entry) {
|
|
11
|
+
const workspaceKey = this.toWorkspaceKey(entry.workspaceId);
|
|
12
|
+
const entryKey = this.toEntryKey(entry);
|
|
13
|
+
const previous = this.entries.get(entryKey);
|
|
14
|
+
if (previous) {
|
|
15
|
+
this.removeScriptFromWorkspaceIndex(previous.workspaceId, previous.scriptName);
|
|
16
|
+
}
|
|
17
|
+
this.entries.set(entryKey, { ...entry });
|
|
18
|
+
this.addScriptToWorkspaceIndex(workspaceKey, entry.scriptName);
|
|
19
|
+
}
|
|
20
|
+
remove(key) {
|
|
21
|
+
const entryKey = this.toEntryKey(key);
|
|
22
|
+
const existing = this.entries.get(entryKey);
|
|
23
|
+
if (!existing) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
this.entries.delete(entryKey);
|
|
27
|
+
this.removeScriptFromWorkspaceIndex(existing.workspaceId, existing.scriptName);
|
|
28
|
+
}
|
|
29
|
+
listForWorkspace(workspaceId) {
|
|
30
|
+
const scriptNames = this.scriptsByWorkspace.get(this.toWorkspaceKey(workspaceId));
|
|
31
|
+
if (!scriptNames) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
const entries = [];
|
|
35
|
+
for (const scriptName of scriptNames) {
|
|
36
|
+
const entry = this.entries.get(this.toEntryKey({
|
|
37
|
+
workspaceId,
|
|
38
|
+
scriptName,
|
|
39
|
+
}));
|
|
40
|
+
if (entry) {
|
|
41
|
+
entries.push({ ...entry });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return entries;
|
|
45
|
+
}
|
|
46
|
+
removeForWorkspace(workspaceId) {
|
|
47
|
+
for (const entry of this.listForWorkspace(workspaceId)) {
|
|
48
|
+
this.entries.delete(this.toEntryKey(entry));
|
|
49
|
+
}
|
|
50
|
+
this.scriptsByWorkspace.delete(this.toWorkspaceKey(workspaceId));
|
|
51
|
+
}
|
|
52
|
+
isRunning(key) {
|
|
53
|
+
return this.get(key)?.lifecycle === "running";
|
|
54
|
+
}
|
|
55
|
+
addScriptToWorkspaceIndex(workspaceKey, scriptName) {
|
|
56
|
+
const scripts = this.scriptsByWorkspace.get(workspaceKey) ?? new Set();
|
|
57
|
+
scripts.add(scriptName);
|
|
58
|
+
this.scriptsByWorkspace.set(workspaceKey, scripts);
|
|
59
|
+
}
|
|
60
|
+
removeScriptFromWorkspaceIndex(workspaceId, scriptName) {
|
|
61
|
+
const workspaceKey = this.toWorkspaceKey(workspaceId);
|
|
62
|
+
const scripts = this.scriptsByWorkspace.get(workspaceKey);
|
|
63
|
+
if (!scripts) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
scripts.delete(scriptName);
|
|
67
|
+
if (scripts.size === 0) {
|
|
68
|
+
this.scriptsByWorkspace.delete(workspaceKey);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
toEntryKey(key) {
|
|
72
|
+
return `${this.toWorkspaceKey(key.workspaceId)}::${key.scriptName}`;
|
|
73
|
+
}
|
|
74
|
+
toWorkspaceKey(workspaceId) {
|
|
75
|
+
return workspaceId;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=workspace-script-runtime-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-script-runtime-store.js","sourceRoot":"","sources":["../../../src/server/workspace-script-runtime-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface WorkspaceServicePeer {
|
|
2
|
+
scriptName: string;
|
|
3
|
+
port: number;
|
|
4
|
+
}
|
|
5
|
+
export interface BuildWorkspaceServiceEnvOptions {
|
|
6
|
+
scriptName: string;
|
|
7
|
+
projectSlug: string;
|
|
8
|
+
branchName: string | null;
|
|
9
|
+
daemonPort: number | null | undefined;
|
|
10
|
+
daemonListenHost: string | null | undefined;
|
|
11
|
+
peers: readonly WorkspaceServicePeer[];
|
|
12
|
+
}
|
|
13
|
+
export declare function normalizeServiceEnvName(scriptName: string): string;
|
|
14
|
+
export declare function buildWorkspaceServiceEnv(options: BuildWorkspaceServiceEnvOptions): Record<string, string>;
|
|
15
|
+
export declare function resolveServiceBindHost(daemonListenHost: string | null | undefined): string;
|
|
16
|
+
export declare function assertNoServiceEnvNameCollisions(scriptNames: readonly string[]): void;
|
|
17
|
+
//# sourceMappingURL=workspace-service-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-service-env.d.ts","sourceRoot":"","sources":["../../../src/server/workspace-service-env.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACxC;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,+BAA+B,GACvC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsCxB;AAED,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAE1F;AAgCD,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAoBrF"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { buildScriptHostname } from "../utils/script-hostname.js";
|
|
2
|
+
export function normalizeServiceEnvName(scriptName) {
|
|
3
|
+
return scriptName
|
|
4
|
+
.toUpperCase()
|
|
5
|
+
.replace(/[^A-Z0-9]+/g, "_")
|
|
6
|
+
.replace(/^_+|_+$/g, "");
|
|
7
|
+
}
|
|
8
|
+
export function buildWorkspaceServiceEnv(options) {
|
|
9
|
+
const scriptNames = options.peers.map((peer) => peer.scriptName);
|
|
10
|
+
assertNoServiceEnvNameCollisions(scriptNames);
|
|
11
|
+
const selfPeer = options.peers.find((peer) => peer.scriptName === options.scriptName);
|
|
12
|
+
if (!selfPeer) {
|
|
13
|
+
throw new Error(`Service '${options.scriptName}' is missing from workspace service peers`);
|
|
14
|
+
}
|
|
15
|
+
const env = {
|
|
16
|
+
HOST: resolveServiceBindHost(options.daemonListenHost),
|
|
17
|
+
PASEO_PORT: String(selfPeer.port),
|
|
18
|
+
};
|
|
19
|
+
if (options.daemonPort !== null && options.daemonPort !== undefined) {
|
|
20
|
+
env.PASEO_URL = buildServiceProxyUrl({
|
|
21
|
+
projectSlug: options.projectSlug,
|
|
22
|
+
branchName: options.branchName,
|
|
23
|
+
scriptName: options.scriptName,
|
|
24
|
+
daemonPort: options.daemonPort,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
for (const peer of options.peers) {
|
|
28
|
+
const envName = normalizeServiceEnvName(peer.scriptName);
|
|
29
|
+
env[`PASEO_SERVICE_${envName}_PORT`] = String(peer.port);
|
|
30
|
+
if (options.daemonPort !== null && options.daemonPort !== undefined) {
|
|
31
|
+
env[`PASEO_SERVICE_${envName}_URL`] = buildServiceProxyUrl({
|
|
32
|
+
projectSlug: options.projectSlug,
|
|
33
|
+
branchName: options.branchName,
|
|
34
|
+
scriptName: peer.scriptName,
|
|
35
|
+
daemonPort: options.daemonPort,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return env;
|
|
40
|
+
}
|
|
41
|
+
export function resolveServiceBindHost(daemonListenHost) {
|
|
42
|
+
return isLoopbackListenHost(daemonListenHost) ? "127.0.0.1" : "0.0.0.0";
|
|
43
|
+
}
|
|
44
|
+
function buildServiceProxyUrl(options) {
|
|
45
|
+
const hostname = buildScriptHostname({
|
|
46
|
+
projectSlug: options.projectSlug,
|
|
47
|
+
branchName: options.branchName,
|
|
48
|
+
scriptName: options.scriptName,
|
|
49
|
+
});
|
|
50
|
+
return `http://${hostname}:${options.daemonPort}`;
|
|
51
|
+
}
|
|
52
|
+
function isLoopbackListenHost(host) {
|
|
53
|
+
if (!host) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
const normalizedHost = host.trim().toLowerCase();
|
|
57
|
+
return (normalizedHost === "localhost" ||
|
|
58
|
+
normalizedHost === "127.0.0.1" ||
|
|
59
|
+
normalizedHost === "::1" ||
|
|
60
|
+
normalizedHost === "[::1]");
|
|
61
|
+
}
|
|
62
|
+
export function assertNoServiceEnvNameCollisions(scriptNames) {
|
|
63
|
+
const scriptNamesByEnvName = new Map();
|
|
64
|
+
for (const scriptName of scriptNames) {
|
|
65
|
+
const envName = normalizeServiceEnvName(scriptName);
|
|
66
|
+
const namesForEnvName = scriptNamesByEnvName.get(envName) ?? [];
|
|
67
|
+
namesForEnvName.push(scriptName);
|
|
68
|
+
scriptNamesByEnvName.set(envName, namesForEnvName);
|
|
69
|
+
}
|
|
70
|
+
const collisions = [];
|
|
71
|
+
for (const [envName, scriptNames] of scriptNamesByEnvName) {
|
|
72
|
+
if (scriptNames.length > 1) {
|
|
73
|
+
collisions.push(`Service env name collision for ${envName}: ${scriptNames.join(", ")}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (collisions.length > 0) {
|
|
77
|
+
throw new Error(collisions.join("; "));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=workspace-service-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-service-env.js","sourceRoot":"","sources":["../../../src/server/workspace-service-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAgBlE,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACxD,OAAO,UAAU;SACd,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,OAAwC;IAExC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjE,gCAAgC,CAAC,WAAW,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACtF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,UAAU,2CAA2C,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,GAAG,GAA2B;QAClC,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACtD,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KAClC,CAAC;IAEF,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpE,GAAG,CAAC,SAAS,GAAG,oBAAoB,CAAC;YACnC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,GAAG,CAAC,iBAAiB,OAAO,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzD,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACpE,GAAG,CAAC,iBAAiB,OAAO,MAAM,CAAC,GAAG,oBAAoB,CAAC;gBACzD,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,gBAA2C;IAChF,OAAO,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AASD,SAAS,oBAAoB,CAAC,OAAoC;IAChE,MAAM,QAAQ,GAAG,mBAAmB,CAAC;QACnC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IACH,OAAO,UAAU,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,oBAAoB,CAAC,IAA+B;IAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,OAAO,CACL,cAAc,KAAK,WAAW;QAC9B,cAAc,KAAK,WAAW;QAC9B,cAAc,KAAK,KAAK;QACxB,cAAc,KAAK,OAAO,CAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,WAA8B;IAC7E,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEzD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAChE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,oBAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,oBAAoB,EAAE,CAAC;QAC1D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,UAAU,CAAC,IAAI,CAAC,kCAAkC,OAAO,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface WorkspaceServicePortDeclaration {
|
|
2
|
+
scriptName: string;
|
|
3
|
+
port?: number;
|
|
4
|
+
}
|
|
5
|
+
interface EnsureWorkspaceServicePortPlanOptions {
|
|
6
|
+
workspaceId: string;
|
|
7
|
+
services: readonly WorkspaceServicePortDeclaration[];
|
|
8
|
+
allocatePort: () => Promise<number>;
|
|
9
|
+
}
|
|
10
|
+
interface RefreshWorkspaceServicePortOptions {
|
|
11
|
+
workspaceId: string;
|
|
12
|
+
service: WorkspaceServicePortDeclaration;
|
|
13
|
+
allocatePort: () => Promise<number>;
|
|
14
|
+
}
|
|
15
|
+
export declare function ensureWorkspaceServicePortPlan(options: EnsureWorkspaceServicePortPlanOptions): Promise<ReadonlyMap<string, number>>;
|
|
16
|
+
export declare function requirePlannedWorkspaceServicePort(plan: ReadonlyMap<string, number>, scriptName: string): number;
|
|
17
|
+
export declare function refreshWorkspaceServicePort(options: RefreshWorkspaceServicePortOptions): Promise<number>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=workspace-service-port-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-service-port-registry.d.ts","sourceRoot":"","sources":["../../../src/server/workspace-service-port-registry.ts"],"names":[],"mappings":"AAAA,UAAU,+BAA+B;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,qCAAqC;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,+BAA+B,EAAE,CAAC;IACrD,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACrC;AAED,UAAU,kCAAkC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,+BAA+B,CAAC;IACzC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACrC;AAKD,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,qCAAqC,GAC7C,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAiBtC;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,UAAU,EAAE,MAAM,GACjB,MAAM,CAMR;AA+BD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CAAC,MAAM,CAAC,CAOjB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
const workspaceServicePortPlans = new Map();
|
|
2
|
+
const pendingWorkspaceServicePortPlans = new Map();
|
|
3
|
+
export async function ensureWorkspaceServicePortPlan(options) {
|
|
4
|
+
const existingPlan = workspaceServicePortPlans.get(options.workspaceId);
|
|
5
|
+
if (existingPlan) {
|
|
6
|
+
return new Map(existingPlan);
|
|
7
|
+
}
|
|
8
|
+
let pendingPlan = pendingWorkspaceServicePortPlans.get(options.workspaceId);
|
|
9
|
+
if (!pendingPlan) {
|
|
10
|
+
pendingPlan = createPendingWorkspaceServicePortPlan({
|
|
11
|
+
workspaceId: options.workspaceId,
|
|
12
|
+
services: options.services,
|
|
13
|
+
allocatePort: options.allocatePort,
|
|
14
|
+
});
|
|
15
|
+
pendingWorkspaceServicePortPlans.set(options.workspaceId, pendingPlan);
|
|
16
|
+
}
|
|
17
|
+
return new Map(await pendingPlan);
|
|
18
|
+
}
|
|
19
|
+
export function requirePlannedWorkspaceServicePort(plan, scriptName) {
|
|
20
|
+
const port = plan.get(scriptName);
|
|
21
|
+
if (port === undefined) {
|
|
22
|
+
throw new Error(`Service '${scriptName}' is missing from workspace service port plan`);
|
|
23
|
+
}
|
|
24
|
+
return port;
|
|
25
|
+
}
|
|
26
|
+
async function createPendingWorkspaceServicePortPlan(options) {
|
|
27
|
+
try {
|
|
28
|
+
const plan = await buildWorkspaceServicePortPlan({
|
|
29
|
+
services: options.services,
|
|
30
|
+
allocatePort: options.allocatePort,
|
|
31
|
+
});
|
|
32
|
+
workspaceServicePortPlans.set(options.workspaceId, plan);
|
|
33
|
+
return plan;
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
pendingWorkspaceServicePortPlans.delete(options.workspaceId);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function buildWorkspaceServicePortPlan(options) {
|
|
40
|
+
const plan = new Map();
|
|
41
|
+
for (const service of options.services) {
|
|
42
|
+
plan.set(service.scriptName, await resolveServicePort(service, options.allocatePort));
|
|
43
|
+
}
|
|
44
|
+
return plan;
|
|
45
|
+
}
|
|
46
|
+
export async function refreshWorkspaceServicePort(options) {
|
|
47
|
+
const plan = workspaceServicePortPlans.get(options.workspaceId) ?? new Map();
|
|
48
|
+
const port = await resolveServicePort(options.service, options.allocatePort);
|
|
49
|
+
plan.set(options.service.scriptName, port);
|
|
50
|
+
workspaceServicePortPlans.set(options.workspaceId, plan);
|
|
51
|
+
return port;
|
|
52
|
+
}
|
|
53
|
+
async function resolveServicePort(service, allocatePort) {
|
|
54
|
+
if (service.port !== undefined) {
|
|
55
|
+
return service.port;
|
|
56
|
+
}
|
|
57
|
+
return await allocatePort();
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=workspace-service-port-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-service-port-registry.js","sourceRoot":"","sources":["../../../src/server/workspace-service-port-registry.ts"],"names":[],"mappings":"AAiBA,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAA+B,CAAC;AACzE,MAAM,gCAAgC,GAAG,IAAI,GAAG,EAAwC,CAAC;AAEzF,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,OAA8C;IAE9C,MAAM,YAAY,GAAG,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACxE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,WAAW,GAAG,gCAAgC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5E,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,qCAAqC,CAAC;YAClD,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC,CAAC;QACH,gCAAgC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,IAAI,GAAG,CAAC,MAAM,WAAW,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,IAAiC,EACjC,UAAkB;IAElB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,+CAA+C,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,qCAAqC,CAAC,OAIpD;IACC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,6BAA6B,CAAC;YAC/C,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC,CAAC;QACH,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,gCAAgC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,6BAA6B,CAAC,OAG5C;IACC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,OAA2C;IAE3C,MAAM,IAAI,GAAG,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,GAAG,EAAkB,CAAC;IAE7F,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7E,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC3C,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,OAAwC,EACxC,YAAmC;IAEnC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,YAAY,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { Logger } from "pino";
|
|
2
2
|
import type { TerminalManager } from "../terminal/terminal-manager.js";
|
|
3
|
-
import { type WorktreeConfig } from "../utils/worktree.js";
|
|
4
|
-
import type
|
|
3
|
+
import { runWorktreeSetupCommands, type WorktreeConfig, type WorktreeSetupCommandResult } from "../utils/worktree.js";
|
|
4
|
+
import { type ScriptRouteStore } from "./script-proxy.js";
|
|
5
|
+
import type { WorkspaceScriptRuntimeStore } from "./workspace-script-runtime-store.js";
|
|
6
|
+
import type { AgentTimelineItem, ToolCallDetail } from "./agent/agent-sdk-types.js";
|
|
5
7
|
export interface WorktreeBootstrapTerminalResult {
|
|
6
8
|
name: string | null;
|
|
7
9
|
command: string;
|
|
@@ -12,18 +14,61 @@ export interface WorktreeBootstrapTerminalResult {
|
|
|
12
14
|
export interface RunAsyncWorktreeBootstrapOptions {
|
|
13
15
|
agentId: string;
|
|
14
16
|
worktree: WorktreeConfig;
|
|
17
|
+
shouldBootstrap?: boolean;
|
|
15
18
|
terminalManager: TerminalManager | null;
|
|
16
19
|
appendTimelineItem: (item: AgentTimelineItem) => Promise<boolean>;
|
|
17
20
|
emitLiveTimelineItem?: (item: AgentTimelineItem) => Promise<boolean>;
|
|
18
21
|
logger?: Logger;
|
|
19
22
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
export
|
|
23
|
+
type MiddleTruncationAccumulator = {
|
|
24
|
+
totalBytes: number;
|
|
25
|
+
head: string;
|
|
26
|
+
tail: string;
|
|
27
|
+
truncated: boolean;
|
|
28
|
+
};
|
|
29
|
+
export type WorktreeSetupOutputAccumulator = MiddleTruncationAccumulator;
|
|
30
|
+
export type WorktreeSetupProgressAccumulator = {
|
|
31
|
+
resultsByIndex: Map<number, WorktreeSetupCommandResult>;
|
|
32
|
+
outputAccumulatorsByIndex: Map<number, WorktreeSetupOutputAccumulator>;
|
|
33
|
+
};
|
|
34
|
+
export declare function createWorktreeSetupOutputAccumulator(): WorktreeSetupOutputAccumulator;
|
|
35
|
+
export declare function appendWorktreeSetupOutputAccumulator(accumulator: WorktreeSetupOutputAccumulator, chunk: string): void;
|
|
36
|
+
export declare function createWorktreeSetupProgressAccumulator(): WorktreeSetupProgressAccumulator;
|
|
37
|
+
export declare function applyWorktreeSetupProgressEvent(accumulator: WorktreeSetupProgressAccumulator, event: Parameters<NonNullable<Parameters<typeof runWorktreeSetupCommands>[0]["onEvent"]>>[0]): void;
|
|
38
|
+
export declare function getWorktreeSetupProgressResults(accumulator: WorktreeSetupProgressAccumulator): WorktreeSetupCommandResult[];
|
|
39
|
+
export declare function buildWorktreeSetupDetail(input: {
|
|
40
|
+
worktree: WorktreeConfig;
|
|
41
|
+
results: WorktreeSetupCommandResult[];
|
|
42
|
+
outputAccumulatorsByIndex?: Map<number, WorktreeSetupOutputAccumulator>;
|
|
43
|
+
}): Extract<ToolCallDetail, {
|
|
44
|
+
type: "worktree_setup";
|
|
45
|
+
}>;
|
|
28
46
|
export declare function runAsyncWorktreeBootstrap(options: RunAsyncWorktreeBootstrapOptions): Promise<void>;
|
|
47
|
+
export interface WorktreeScriptResult {
|
|
48
|
+
scriptName: string;
|
|
49
|
+
hostname: string | null;
|
|
50
|
+
port: number | null;
|
|
51
|
+
terminalId: string;
|
|
52
|
+
}
|
|
53
|
+
interface SpawnWorkspaceScriptOptions {
|
|
54
|
+
repoRoot: string;
|
|
55
|
+
workspaceId: string;
|
|
56
|
+
projectSlug: string;
|
|
57
|
+
branchName: string | null;
|
|
58
|
+
scriptName: string;
|
|
59
|
+
daemonPort?: number | null;
|
|
60
|
+
daemonListenHost?: string | null;
|
|
61
|
+
routeStore: ScriptRouteStore;
|
|
62
|
+
runtimeStore: WorkspaceScriptRuntimeStore;
|
|
63
|
+
terminalManager: TerminalManager;
|
|
64
|
+
logger?: Logger;
|
|
65
|
+
onLifecycleChanged?: () => void;
|
|
66
|
+
}
|
|
67
|
+
export declare function spawnWorkspaceScript(options: SpawnWorkspaceScriptOptions): Promise<WorktreeScriptResult>;
|
|
68
|
+
export declare function teardownWorktreeScripts(options: {
|
|
69
|
+
hostnames: string[];
|
|
70
|
+
routeStore: ScriptRouteStore;
|
|
71
|
+
logger: Logger;
|
|
72
|
+
}): void;
|
|
73
|
+
export {};
|
|
29
74
|
//# sourceMappingURL=worktree-bootstrap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-bootstrap.d.ts","sourceRoot":"","sources":["../../../src/server/worktree-bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"worktree-bootstrap.d.ts","sourceRoot":"","sources":["../../../src/server/worktree-bootstrap.ts"],"names":[],"mappings":"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"}
|