@junctionpanel/server 0.1.100 → 0.1.102
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/server/client/daemon-client-websocket-transport.d.ts.map +1 -1
- package/dist/server/client/daemon-client-websocket-transport.js +39 -0
- package/dist/server/client/daemon-client-websocket-transport.js.map +1 -1
- package/dist/server/client/daemon-client.d.ts +18 -3
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +31 -2
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/exports.d.ts +1 -1
- package/dist/server/server/exports.d.ts.map +1 -1
- package/dist/server/server/exports.js +1 -1
- package/dist/server/server/exports.js.map +1 -1
- package/dist/server/server/index.js +1 -0
- package/dist/server/server/index.js.map +1 -1
- package/dist/server/server/lifecycle-intent.d.ts +1 -0
- package/dist/server/server/lifecycle-intent.d.ts.map +1 -1
- package/dist/server/server/session.d.ts +9 -0
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +120 -9
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/shared/messages.d.ts +622 -0
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +42 -0
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/shared/switchboard.d.ts +4 -4
- package/dist/server/shared/switchboard.d.ts.map +1 -1
- package/dist/server/shared/switchboard.js +29 -50
- package/dist/server/shared/switchboard.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/server/session.ts"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/server/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
-
import { existsSync, statSync, watch } from 'node:fs';
|
|
2
|
+
import { existsSync, mkdirSync, statSync, watch, writeFileSync } from 'node:fs';
|
|
3
3
|
import { exec, execFile } from 'child_process';
|
|
4
4
|
import { promisify } from 'util';
|
|
5
|
-
import { resolve, sep, basename, dirname, parse as parsePath } from 'path';
|
|
5
|
+
import { resolve, sep, basename, dirname, isAbsolute, parse as parsePath, posix, win32 } from 'path';
|
|
6
6
|
import { homedir, hostname } from 'node:os';
|
|
7
7
|
import { z } from 'zod';
|
|
8
8
|
import { serializeAgentStreamEvent, AgentSnapshotPayloadSchema, } from './messages.js';
|
|
@@ -20,7 +20,7 @@ import { projectTimelineRows, selectTimelineWindowByProjectedLimit, } from './ag
|
|
|
20
20
|
import { DEFAULT_STRUCTURED_GENERATION_PROVIDERS, StructuredAgentFallbackError, StructuredAgentResponseError, generateStructuredAgentResponseWithFallback, resolveStructuredGenerationPreferredProviderForCwd, resolveStructuredGenerationProviders, } from './agent/agent-response-loop.js';
|
|
21
21
|
import { isValidAgentProvider, AGENT_PROVIDER_IDS } from './agent/provider-manifest.js';
|
|
22
22
|
import { listDirectoryEntries, readExplorerFile, getDownloadableFileInfo, isWorkspaceExplorerMissingPathError, } from './file-explorer/service.js';
|
|
23
|
-
import { slugify, validateBranchSlug, listJunctionWorktrees, deleteJunctionWorktree, isJunctionOwnedWorktreeCwd, resolveJunctionWorktreeRootForCwd, createInRepoWorktree, attachInRepoWorktree, restoreInRepoWorktree, } from '../utils/worktree.js';
|
|
23
|
+
import { slugify, validateBranchSlug, listJunctionWorktrees, deleteJunctionWorktree, isJunctionOwnedWorktreeCwd, resolveJunctionWorktreeRootForCwd, createInRepoWorktree, attachInRepoWorktree, restoreInRepoWorktree, createWorktree, } from '../utils/worktree.js';
|
|
24
24
|
import { readJunctionWorktreeMetadata } from '../utils/worktree-metadata.js';
|
|
25
25
|
import { runAsyncWorktreeBootstrap } from './worktree-bootstrap.js';
|
|
26
26
|
import { getCheckoutDiff, getCheckoutStatus, getCheckoutStatusLite, listBranchSuggestions, NotGitRepoError, MergeConflictError, MergeFromBaseConflictError, commitChanges, mergeToBase, mergeFromBase, pushCurrentBranch, createPullRequest, getPullRequestFailureLogs, getPullRequestSnapshot, getPullRequestStatus, invalidatePullRequestCache, searchPullRequests, listGitRemotes, mergePullRequest, resolveMergeToBaseOperationCwd, resolveBaseRefWithSource, } from '../utils/checkout-git.js';
|
|
@@ -74,6 +74,28 @@ function maybeUnrefTimer(timer) {
|
|
|
74
74
|
timer.unref();
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
+
function usesWindowsPathSemantics(pathValue) {
|
|
78
|
+
return /^[A-Za-z]:[\\/]/.test(pathValue) || pathValue.includes('\\');
|
|
79
|
+
}
|
|
80
|
+
export function resolveWorkspaceRelativeFilePath(rootPath, filePath) {
|
|
81
|
+
if (isAbsolute(filePath)) {
|
|
82
|
+
throw new Error('Path must be relative and cannot be absolute');
|
|
83
|
+
}
|
|
84
|
+
const pathApi = usesWindowsPathSemantics(rootPath) ? win32 : posix;
|
|
85
|
+
const segments = filePath.split(/[\\/]+/).filter(Boolean);
|
|
86
|
+
if (segments.includes('..')) {
|
|
87
|
+
throw new Error('Path must be relative and cannot contain ".."');
|
|
88
|
+
}
|
|
89
|
+
const normalizedRoot = pathApi.resolve(rootPath);
|
|
90
|
+
const resolvedPath = pathApi.resolve(normalizedRoot, filePath);
|
|
91
|
+
const relativePath = pathApi.relative(normalizedRoot, resolvedPath);
|
|
92
|
+
if (relativePath === '..'
|
|
93
|
+
|| relativePath.startsWith(`..${pathApi.sep}`)
|
|
94
|
+
|| pathApi.isAbsolute(relativePath)) {
|
|
95
|
+
throw new Error('Path must be within the workspace directory');
|
|
96
|
+
}
|
|
97
|
+
return resolvedPath;
|
|
98
|
+
}
|
|
77
99
|
const PROVIDER_CHILD_THREADS_PERSISTED_LIST_INITIAL_LIMIT = 500;
|
|
78
100
|
const PROVIDER_CHILD_THREADS_PERSISTED_LIST_MAX_LIMIT = 50000;
|
|
79
101
|
const TERMINAL_STREAM_WINDOW_BYTES = 256 * 1024;
|
|
@@ -1322,10 +1344,10 @@ export class Session {
|
|
|
1322
1344
|
await this.handleCancelAgentRequest(msg.agentId);
|
|
1323
1345
|
break;
|
|
1324
1346
|
case 'restart_server_request':
|
|
1325
|
-
await this.handleRestartServerRequest(msg.requestId, msg.reason);
|
|
1347
|
+
await this.handleRestartServerRequest(msg.requestId, msg.reason, msg.sourceCommand);
|
|
1326
1348
|
break;
|
|
1327
1349
|
case 'shutdown_server_request':
|
|
1328
|
-
await this.handleShutdownServerRequest(msg.requestId);
|
|
1350
|
+
await this.handleShutdownServerRequest(msg.requestId, msg.sourceCommand);
|
|
1329
1351
|
break;
|
|
1330
1352
|
case 'fetch_agent_timeline_request':
|
|
1331
1353
|
await this.handleFetchAgentTimelineRequest(msg);
|
|
@@ -1420,6 +1442,12 @@ export class Session {
|
|
|
1420
1442
|
case 'workspace_file_explorer_request':
|
|
1421
1443
|
await this.handleWorkspaceFileExplorerRequest(msg);
|
|
1422
1444
|
break;
|
|
1445
|
+
case 'workspace_file_write_request':
|
|
1446
|
+
await this.handleWorkspaceFileWriteRequest(msg);
|
|
1447
|
+
break;
|
|
1448
|
+
case 'workspace_create_worktree_request':
|
|
1449
|
+
await this.handleWorkspaceCreateWorktreeRequest(msg);
|
|
1450
|
+
break;
|
|
1423
1451
|
case 'project_icon_request':
|
|
1424
1452
|
await this.handleProjectIconRequest(msg);
|
|
1425
1453
|
break;
|
|
@@ -1595,11 +1623,12 @@ export class Session {
|
|
|
1595
1623
|
}
|
|
1596
1624
|
this.sessionLogger.warn({ streamId: frame.streamId, messageType: frame.messageType }, 'Unhandled terminal binary frame');
|
|
1597
1625
|
}
|
|
1598
|
-
async handleRestartServerRequest(requestId, reason) {
|
|
1626
|
+
async handleRestartServerRequest(requestId, reason, sourceCommand) {
|
|
1599
1627
|
this.assertLifecycleControlAllowed('restart', requestId, reason);
|
|
1600
1628
|
this.requestServerRestart(requestId, reason, {
|
|
1601
1629
|
logLevel: 'warn',
|
|
1602
1630
|
logMessage: 'Restart requested via websocket',
|
|
1631
|
+
sourceCommand,
|
|
1603
1632
|
});
|
|
1604
1633
|
}
|
|
1605
1634
|
requestServerRestart(requestId, reason, options) {
|
|
@@ -1610,10 +1639,13 @@ export class Session {
|
|
|
1610
1639
|
if (reason && reason.trim().length > 0) {
|
|
1611
1640
|
payload.reason = reason;
|
|
1612
1641
|
}
|
|
1642
|
+
if (options?.sourceCommand) {
|
|
1643
|
+
payload.sourceCommand = options.sourceCommand;
|
|
1644
|
+
}
|
|
1613
1645
|
payload.requestId = requestId;
|
|
1614
1646
|
const logLevel = options?.logLevel ?? 'warn';
|
|
1615
1647
|
const logMessage = options?.logMessage ?? 'Restart requested';
|
|
1616
|
-
this.sessionLogger[logLevel]({ reason, requestId }, logMessage);
|
|
1648
|
+
this.sessionLogger[logLevel]({ reason, requestId, sourceCommand: options?.sourceCommand ?? null }, logMessage);
|
|
1617
1649
|
this.emit({
|
|
1618
1650
|
type: 'status',
|
|
1619
1651
|
payload,
|
|
@@ -1626,17 +1658,19 @@ export class Session {
|
|
|
1626
1658
|
initiatorTransport: this.connectionContext.transport,
|
|
1627
1659
|
initiatorRemoteAddress: this.connectionContext.remoteAddress,
|
|
1628
1660
|
initiatorOrigin: this.connectionContext.origin,
|
|
1661
|
+
...(options?.sourceCommand ? { sourceCommand: options.sourceCommand } : {}),
|
|
1629
1662
|
...(reason ? { reason } : {}),
|
|
1630
1663
|
});
|
|
1631
1664
|
}
|
|
1632
|
-
async handleShutdownServerRequest(requestId) {
|
|
1665
|
+
async handleShutdownServerRequest(requestId, sourceCommand) {
|
|
1633
1666
|
this.assertLifecycleControlAllowed('shutdown', requestId);
|
|
1634
|
-
this.sessionLogger.warn('Shutdown requested via websocket');
|
|
1667
|
+
this.sessionLogger.warn({ requestId, sourceCommand: sourceCommand ?? null }, 'Shutdown requested via websocket');
|
|
1635
1668
|
this.emit({
|
|
1636
1669
|
type: 'status',
|
|
1637
1670
|
payload: {
|
|
1638
1671
|
status: 'shutdown_requested',
|
|
1639
1672
|
clientId: this.clientId,
|
|
1673
|
+
...(sourceCommand ? { sourceCommand } : {}),
|
|
1640
1674
|
requestId,
|
|
1641
1675
|
},
|
|
1642
1676
|
});
|
|
@@ -1648,6 +1682,7 @@ export class Session {
|
|
|
1648
1682
|
initiatorTransport: this.connectionContext.transport,
|
|
1649
1683
|
initiatorRemoteAddress: this.connectionContext.remoteAddress,
|
|
1650
1684
|
initiatorOrigin: this.connectionContext.origin,
|
|
1685
|
+
...(sourceCommand ? { sourceCommand } : {}),
|
|
1651
1686
|
});
|
|
1652
1687
|
}
|
|
1653
1688
|
assertLifecycleControlAllowed(action, requestId, reason) {
|
|
@@ -5783,6 +5818,82 @@ export class Session {
|
|
|
5783
5818
|
});
|
|
5784
5819
|
}
|
|
5785
5820
|
}
|
|
5821
|
+
/**
|
|
5822
|
+
* Handle workspace file write request
|
|
5823
|
+
*/
|
|
5824
|
+
async handleWorkspaceFileWriteRequest(request) {
|
|
5825
|
+
const { cwd, path: filePath, content, requestId } = request;
|
|
5826
|
+
const root = expandTilde(cwd);
|
|
5827
|
+
try {
|
|
5828
|
+
const resolvedPath = resolveWorkspaceRelativeFilePath(root, filePath);
|
|
5829
|
+
mkdirSync(dirname(resolvedPath), { recursive: true });
|
|
5830
|
+
writeFileSync(resolvedPath, content, 'utf-8');
|
|
5831
|
+
this.emit({
|
|
5832
|
+
type: 'workspace_file_write_response',
|
|
5833
|
+
payload: {
|
|
5834
|
+
cwd,
|
|
5835
|
+
path: filePath,
|
|
5836
|
+
success: true,
|
|
5837
|
+
error: null,
|
|
5838
|
+
requestId,
|
|
5839
|
+
},
|
|
5840
|
+
});
|
|
5841
|
+
}
|
|
5842
|
+
catch (error) {
|
|
5843
|
+
const message = error instanceof Error ? error.message : 'Failed to write file';
|
|
5844
|
+
this.sessionLogger.error({ err: error, cwd, path: filePath }, 'Failed to write workspace file');
|
|
5845
|
+
this.emit({
|
|
5846
|
+
type: 'workspace_file_write_response',
|
|
5847
|
+
payload: {
|
|
5848
|
+
cwd,
|
|
5849
|
+
path: filePath,
|
|
5850
|
+
success: false,
|
|
5851
|
+
error: message,
|
|
5852
|
+
requestId,
|
|
5853
|
+
},
|
|
5854
|
+
});
|
|
5855
|
+
}
|
|
5856
|
+
}
|
|
5857
|
+
/**
|
|
5858
|
+
* Handle workspace create worktree request
|
|
5859
|
+
*/
|
|
5860
|
+
async handleWorkspaceCreateWorktreeRequest(request) {
|
|
5861
|
+
const { cwd, branchName, baseBranch, remoteName, requestId } = request;
|
|
5862
|
+
const root = expandTilde(cwd);
|
|
5863
|
+
try {
|
|
5864
|
+
const result = await createWorktree({
|
|
5865
|
+
cwd: root,
|
|
5866
|
+
branchName,
|
|
5867
|
+
baseBranch: baseBranch ?? 'main',
|
|
5868
|
+
remoteName,
|
|
5869
|
+
worktreeSlug: branchName,
|
|
5870
|
+
runSetup: false,
|
|
5871
|
+
junctionHome: this.junctionHome,
|
|
5872
|
+
});
|
|
5873
|
+
this.emit({
|
|
5874
|
+
type: 'workspace_create_worktree_response',
|
|
5875
|
+
payload: {
|
|
5876
|
+
worktreePath: result.worktreePath,
|
|
5877
|
+
branchName: result.branchName,
|
|
5878
|
+
error: null,
|
|
5879
|
+
requestId,
|
|
5880
|
+
},
|
|
5881
|
+
});
|
|
5882
|
+
}
|
|
5883
|
+
catch (error) {
|
|
5884
|
+
const message = error instanceof Error ? error.message : 'Failed to create worktree';
|
|
5885
|
+
this.sessionLogger.error({ err: error, cwd, branchName }, 'Failed to create config worktree');
|
|
5886
|
+
this.emit({
|
|
5887
|
+
type: 'workspace_create_worktree_response',
|
|
5888
|
+
payload: {
|
|
5889
|
+
worktreePath: '',
|
|
5890
|
+
branchName: '',
|
|
5891
|
+
error: message,
|
|
5892
|
+
requestId,
|
|
5893
|
+
},
|
|
5894
|
+
});
|
|
5895
|
+
}
|
|
5896
|
+
}
|
|
5786
5897
|
/**
|
|
5787
5898
|
* Handle project icon request for a given cwd
|
|
5788
5899
|
*/
|