@getpaseo/server 0.1.25 → 0.1.27
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.d.ts +4 -20
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +25 -71
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/provider-launch-config.d.ts +12 -0
- package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
- package/dist/server/server/agent/provider-launch-config.js +79 -10
- package/dist/server/server/agent/provider-launch-config.js.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +2 -0
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js +2 -0
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts +0 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.js +27 -58
- package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
- 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 +125 -13
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-rollout-timeline.js +77 -9
- package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/opencode-agent.js +12 -12
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +1 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts.map +1 -1
- package/dist/server/server/agent/providers/tool-call-mapper-utils.js +8 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.js.map +1 -1
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +10 -3
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/exports.d.ts +1 -0
- package/dist/server/server/exports.d.ts.map +1 -1
- package/dist/server/server/exports.js +1 -0
- package/dist/server/server/exports.js.map +1 -1
- package/dist/server/server/logger.d.ts.map +1 -1
- package/dist/server/server/logger.js +31 -1
- package/dist/server/server/logger.js.map +1 -1
- package/dist/server/server/pid-lock.d.ts +2 -2
- package/dist/server/server/pid-lock.d.ts.map +1 -1
- package/dist/server/server/pid-lock.js +2 -2
- package/dist/server/server/pid-lock.js.map +1 -1
- package/dist/server/server/session.d.ts +6 -0
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +134 -57
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/websocket-server.d.ts +1 -1
- package/dist/server/server/websocket-server.d.ts.map +1 -1
- package/dist/server/server/websocket-server.js +12 -16
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/shared/messages.d.ts +0 -454
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +0 -9
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/shared/tool-call-display.d.ts.map +1 -1
- package/dist/server/shared/tool-call-display.js +7 -0
- package/dist/server/shared/tool-call-display.js.map +1 -1
- package/dist/src/server/agent/provider-launch-config.js +79 -10
- package/dist/src/server/agent/provider-launch-config.js.map +1 -1
- package/dist/src/server/agent/providers/claude/tool-call-detail-parser.js +2 -0
- package/dist/src/server/agent/providers/claude/tool-call-detail-parser.js.map +1 -1
- package/dist/src/server/agent/providers/claude/tool-call-mapper.js +2 -0
- package/dist/src/server/agent/providers/claude/tool-call-mapper.js.map +1 -1
- package/dist/src/server/agent/providers/claude-agent.js +27 -58
- package/dist/src/server/agent/providers/claude-agent.js.map +1 -1
- package/dist/src/server/agent/providers/codex-app-server-agent.js +125 -13
- package/dist/src/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/src/server/agent/providers/codex-rollout-timeline.js +77 -9
- package/dist/src/server/agent/providers/codex-rollout-timeline.js.map +1 -1
- package/dist/src/server/agent/providers/opencode-agent.js +12 -12
- package/dist/src/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/src/server/agent/providers/tool-call-mapper-utils.js +8 -0
- package/dist/src/server/agent/providers/tool-call-mapper-utils.js.map +1 -1
- package/dist/src/server/bootstrap.js +10 -3
- package/dist/src/server/bootstrap.js.map +1 -1
- package/dist/src/server/pid-lock.js +2 -2
- package/dist/src/server/pid-lock.js.map +1 -1
- package/dist/src/server/session.js +134 -57
- package/dist/src/server/session.js.map +1 -1
- package/dist/src/server/websocket-server.js +12 -16
- package/dist/src/server/websocket-server.js.map +1 -1
- package/dist/src/shared/messages.js +0 -9
- package/dist/src/shared/messages.js.map +1 -1
- package/dist/src/shared/tool-call-display.js +7 -0
- package/dist/src/shared/tool-call-display.js.map +1 -1
- package/package.json +5 -4
|
@@ -699,6 +699,100 @@ export class Session {
|
|
|
699
699
|
paseoHome: this.paseoHome,
|
|
700
700
|
});
|
|
701
701
|
}
|
|
702
|
+
buildPersistedProjectRecord(input) {
|
|
703
|
+
return createPersistedProjectRecord({
|
|
704
|
+
projectId: input.placement.projectKey,
|
|
705
|
+
rootPath: deriveProjectRootPath({
|
|
706
|
+
cwd: input.workspaceId,
|
|
707
|
+
checkout: input.placement.checkout,
|
|
708
|
+
}),
|
|
709
|
+
kind: deriveProjectKind(input.placement.checkout),
|
|
710
|
+
displayName: input.placement.projectName,
|
|
711
|
+
createdAt: input.createdAt,
|
|
712
|
+
updatedAt: input.updatedAt,
|
|
713
|
+
archivedAt: null,
|
|
714
|
+
});
|
|
715
|
+
}
|
|
716
|
+
buildPersistedWorkspaceRecord(input) {
|
|
717
|
+
return createPersistedWorkspaceRecord({
|
|
718
|
+
workspaceId: input.workspaceId,
|
|
719
|
+
projectId: input.placement.projectKey,
|
|
720
|
+
cwd: input.workspaceId,
|
|
721
|
+
kind: deriveWorkspaceKind(input.placement.checkout),
|
|
722
|
+
displayName: deriveWorkspaceDisplayName({
|
|
723
|
+
cwd: input.workspaceId,
|
|
724
|
+
checkout: input.placement.checkout,
|
|
725
|
+
}),
|
|
726
|
+
createdAt: input.createdAt,
|
|
727
|
+
updatedAt: input.updatedAt,
|
|
728
|
+
archivedAt: null,
|
|
729
|
+
});
|
|
730
|
+
}
|
|
731
|
+
async archiveProjectRecordIfEmpty(projectId, archivedAt) {
|
|
732
|
+
const siblingWorkspaces = (await this.workspaceRegistry.list()).filter((workspace) => workspace.projectId === projectId && !workspace.archivedAt);
|
|
733
|
+
if (siblingWorkspaces.length === 0) {
|
|
734
|
+
await this.projectRegistry.archive(projectId, archivedAt);
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
async reconcileWorkspaceRecord(workspaceId) {
|
|
738
|
+
const normalizedWorkspaceId = normalizePersistedWorkspaceId(workspaceId);
|
|
739
|
+
const existing = await this.workspaceRegistry.get(normalizedWorkspaceId);
|
|
740
|
+
const placement = await this.buildProjectPlacement(normalizedWorkspaceId);
|
|
741
|
+
const now = new Date().toISOString();
|
|
742
|
+
const nextProjectCreatedAt = existing?.createdAt ?? now;
|
|
743
|
+
const nextWorkspaceCreatedAt = existing?.createdAt ?? now;
|
|
744
|
+
const currentProjectRecord = await this.projectRegistry.get(placement.projectKey);
|
|
745
|
+
const nextProjectRecord = this.buildPersistedProjectRecord({
|
|
746
|
+
workspaceId: normalizedWorkspaceId,
|
|
747
|
+
placement,
|
|
748
|
+
createdAt: currentProjectRecord?.createdAt ?? nextProjectCreatedAt,
|
|
749
|
+
updatedAt: now,
|
|
750
|
+
});
|
|
751
|
+
const nextWorkspaceRecord = this.buildPersistedWorkspaceRecord({
|
|
752
|
+
workspaceId: normalizedWorkspaceId,
|
|
753
|
+
placement,
|
|
754
|
+
createdAt: nextWorkspaceCreatedAt,
|
|
755
|
+
updatedAt: now,
|
|
756
|
+
});
|
|
757
|
+
const needsWorkspaceUpdate = !existing ||
|
|
758
|
+
existing.archivedAt ||
|
|
759
|
+
existing.projectId !== nextWorkspaceRecord.projectId ||
|
|
760
|
+
existing.kind !== nextWorkspaceRecord.kind ||
|
|
761
|
+
existing.displayName !== nextWorkspaceRecord.displayName;
|
|
762
|
+
const needsProjectUpdate = !currentProjectRecord ||
|
|
763
|
+
currentProjectRecord.archivedAt ||
|
|
764
|
+
currentProjectRecord.rootPath !== nextProjectRecord.rootPath ||
|
|
765
|
+
currentProjectRecord.kind !== nextProjectRecord.kind ||
|
|
766
|
+
currentProjectRecord.displayName !== nextProjectRecord.displayName;
|
|
767
|
+
if (!needsWorkspaceUpdate && !needsProjectUpdate) {
|
|
768
|
+
return {
|
|
769
|
+
workspace: existing,
|
|
770
|
+
changed: false,
|
|
771
|
+
};
|
|
772
|
+
}
|
|
773
|
+
await this.projectRegistry.upsert(nextProjectRecord);
|
|
774
|
+
await this.workspaceRegistry.upsert(nextWorkspaceRecord);
|
|
775
|
+
if (existing &&
|
|
776
|
+
!existing.archivedAt &&
|
|
777
|
+
existing.projectId !== nextWorkspaceRecord.projectId) {
|
|
778
|
+
await this.archiveProjectRecordIfEmpty(existing.projectId, now);
|
|
779
|
+
}
|
|
780
|
+
return {
|
|
781
|
+
workspace: nextWorkspaceRecord,
|
|
782
|
+
changed: true,
|
|
783
|
+
};
|
|
784
|
+
}
|
|
785
|
+
async reconcileActiveWorkspaceRecords() {
|
|
786
|
+
const changedWorkspaceIds = new Set();
|
|
787
|
+
const activeWorkspaces = (await this.workspaceRegistry.list()).filter((workspace) => !workspace.archivedAt);
|
|
788
|
+
for (const workspace of activeWorkspaces) {
|
|
789
|
+
const result = await this.reconcileWorkspaceRecord(workspace.workspaceId);
|
|
790
|
+
if (result.changed) {
|
|
791
|
+
changedWorkspaceIds.add(result.workspace.workspaceId);
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
return changedWorkspaceIds;
|
|
795
|
+
}
|
|
702
796
|
async forwardAgentUpdate(agent) {
|
|
703
797
|
try {
|
|
704
798
|
await this.ensureWorkspaceRegistered(agent.cwd);
|
|
@@ -4027,7 +4121,7 @@ export class Session {
|
|
|
4027
4121
|
diffStat,
|
|
4028
4122
|
};
|
|
4029
4123
|
}
|
|
4030
|
-
async
|
|
4124
|
+
async listWorkspaceDescriptorsSnapshot() {
|
|
4031
4125
|
const [agents, persistedWorkspaces, persistedProjects] = await Promise.all([
|
|
4032
4126
|
this.listAgentPayloads(),
|
|
4033
4127
|
this.workspaceRegistry.list(),
|
|
@@ -4058,6 +4152,10 @@ export class Session {
|
|
|
4058
4152
|
}
|
|
4059
4153
|
return Array.from(descriptorsByWorkspaceId.values());
|
|
4060
4154
|
}
|
|
4155
|
+
async listWorkspaceDescriptors() {
|
|
4156
|
+
await this.reconcileActiveWorkspaceRecords();
|
|
4157
|
+
return this.listWorkspaceDescriptorsSnapshot();
|
|
4158
|
+
}
|
|
4061
4159
|
normalizeFetchWorkspacesSort(sort) {
|
|
4062
4160
|
const fallback = [{ key: 'activity_at', direction: 'desc' }];
|
|
4063
4161
|
if (!sort || sort.length === 0) {
|
|
@@ -4257,41 +4355,7 @@ export class Session {
|
|
|
4257
4355
|
}
|
|
4258
4356
|
async ensureWorkspaceRegistered(cwd) {
|
|
4259
4357
|
const workspaceId = normalizePersistedWorkspaceId(cwd);
|
|
4260
|
-
|
|
4261
|
-
if (existing && !existing.archivedAt) {
|
|
4262
|
-
return existing;
|
|
4263
|
-
}
|
|
4264
|
-
const placement = await this.buildProjectPlacement(workspaceId);
|
|
4265
|
-
const now = new Date().toISOString();
|
|
4266
|
-
const projectExisting = await this.projectRegistry.get(placement.projectKey);
|
|
4267
|
-
const projectRecord = createPersistedProjectRecord({
|
|
4268
|
-
projectId: placement.projectKey,
|
|
4269
|
-
rootPath: deriveProjectRootPath({
|
|
4270
|
-
cwd: workspaceId,
|
|
4271
|
-
checkout: placement.checkout,
|
|
4272
|
-
}),
|
|
4273
|
-
kind: deriveProjectKind(placement.checkout),
|
|
4274
|
-
displayName: placement.projectName,
|
|
4275
|
-
createdAt: projectExisting?.createdAt ?? now,
|
|
4276
|
-
updatedAt: now,
|
|
4277
|
-
archivedAt: null,
|
|
4278
|
-
});
|
|
4279
|
-
await this.projectRegistry.upsert(projectRecord);
|
|
4280
|
-
const workspaceRecord = createPersistedWorkspaceRecord({
|
|
4281
|
-
workspaceId,
|
|
4282
|
-
projectId: placement.projectKey,
|
|
4283
|
-
cwd: workspaceId,
|
|
4284
|
-
kind: deriveWorkspaceKind(placement.checkout),
|
|
4285
|
-
displayName: deriveWorkspaceDisplayName({
|
|
4286
|
-
cwd: workspaceId,
|
|
4287
|
-
checkout: placement.checkout,
|
|
4288
|
-
}),
|
|
4289
|
-
createdAt: existing?.createdAt ?? now,
|
|
4290
|
-
updatedAt: now,
|
|
4291
|
-
archivedAt: null,
|
|
4292
|
-
});
|
|
4293
|
-
await this.workspaceRegistry.upsert(workspaceRecord);
|
|
4294
|
-
return workspaceRecord;
|
|
4358
|
+
return (await this.reconcileWorkspaceRecord(workspaceId)).workspace;
|
|
4295
4359
|
}
|
|
4296
4360
|
async archiveWorkspaceRecord(workspaceId, archivedAt) {
|
|
4297
4361
|
const existing = await this.workspaceRegistry.get(workspaceId);
|
|
@@ -4311,32 +4375,31 @@ export class Session {
|
|
|
4311
4375
|
return;
|
|
4312
4376
|
}
|
|
4313
4377
|
const workspaceId = normalizePersistedWorkspaceId(cwd);
|
|
4314
|
-
const
|
|
4315
|
-
const
|
|
4316
|
-
|
|
4317
|
-
|
|
4318
|
-
|
|
4319
|
-
|
|
4320
|
-
})
|
|
4321
|
-
|
|
4322
|
-
|
|
4323
|
-
|
|
4378
|
+
const changedWorkspaceIds = await this.reconcileActiveWorkspaceRecords();
|
|
4379
|
+
const all = await this.listWorkspaceDescriptorsSnapshot();
|
|
4380
|
+
const descriptorsByWorkspaceId = new Map(all.map((entry) => [entry.id, entry]));
|
|
4381
|
+
const workspaceIdsToEmit = new Set([workspaceId, ...changedWorkspaceIds]);
|
|
4382
|
+
for (const nextWorkspaceId of workspaceIdsToEmit) {
|
|
4383
|
+
const workspace = descriptorsByWorkspaceId.get(nextWorkspaceId);
|
|
4384
|
+
if (!workspace || !this.matchesWorkspaceFilter({ workspace, filter: subscription.filter })) {
|
|
4385
|
+
this.bufferOrEmitWorkspaceUpdate(subscription, {
|
|
4386
|
+
kind: 'remove',
|
|
4387
|
+
id: nextWorkspaceId,
|
|
4388
|
+
});
|
|
4389
|
+
continue;
|
|
4390
|
+
}
|
|
4324
4391
|
this.bufferOrEmitWorkspaceUpdate(subscription, {
|
|
4325
|
-
kind: '
|
|
4326
|
-
|
|
4392
|
+
kind: 'upsert',
|
|
4393
|
+
workspace,
|
|
4327
4394
|
});
|
|
4328
|
-
return;
|
|
4329
4395
|
}
|
|
4330
|
-
this.bufferOrEmitWorkspaceUpdate(subscription, {
|
|
4331
|
-
kind: 'upsert',
|
|
4332
|
-
workspace,
|
|
4333
|
-
});
|
|
4334
4396
|
}
|
|
4335
4397
|
async emitWorkspaceUpdatesForCwds(cwds) {
|
|
4336
4398
|
if (!this.workspaceUpdatesSubscription) {
|
|
4337
4399
|
return;
|
|
4338
4400
|
}
|
|
4339
|
-
const
|
|
4401
|
+
const changedWorkspaceIds = await this.reconcileActiveWorkspaceRecords();
|
|
4402
|
+
const uniqueWorkspaceCwds = new Set(changedWorkspaceIds);
|
|
4340
4403
|
for (const cwd of cwds) {
|
|
4341
4404
|
const normalized = normalizePersistedWorkspaceId(cwd);
|
|
4342
4405
|
if (!normalized) {
|
|
@@ -4344,8 +4407,22 @@ export class Session {
|
|
|
4344
4407
|
}
|
|
4345
4408
|
uniqueWorkspaceCwds.add(normalized);
|
|
4346
4409
|
}
|
|
4347
|
-
|
|
4348
|
-
|
|
4410
|
+
const subscription = this.workspaceUpdatesSubscription;
|
|
4411
|
+
const all = await this.listWorkspaceDescriptorsSnapshot();
|
|
4412
|
+
const descriptorsByWorkspaceId = new Map(all.map((entry) => [entry.id, entry]));
|
|
4413
|
+
for (const workspaceId of uniqueWorkspaceCwds) {
|
|
4414
|
+
const workspace = descriptorsByWorkspaceId.get(workspaceId);
|
|
4415
|
+
if (!workspace || !this.matchesWorkspaceFilter({ workspace, filter: subscription.filter })) {
|
|
4416
|
+
this.bufferOrEmitWorkspaceUpdate(subscription, {
|
|
4417
|
+
kind: 'remove',
|
|
4418
|
+
id: workspaceId,
|
|
4419
|
+
});
|
|
4420
|
+
continue;
|
|
4421
|
+
}
|
|
4422
|
+
this.bufferOrEmitWorkspaceUpdate(subscription, {
|
|
4423
|
+
kind: 'upsert',
|
|
4424
|
+
workspace,
|
|
4425
|
+
});
|
|
4349
4426
|
}
|
|
4350
4427
|
}
|
|
4351
4428
|
async handleFetchAgents(request) {
|
|
@@ -5749,7 +5826,7 @@ export class Session {
|
|
|
5749
5826
|
const streamId = this.allocateTerminalStreamId();
|
|
5750
5827
|
const requestedResumeOffset = typeof msg.resumeOffset === 'number'
|
|
5751
5828
|
? msg.resumeOffset
|
|
5752
|
-
:
|
|
5829
|
+
: 0;
|
|
5753
5830
|
const initialOffset = Math.max(0, Math.floor(requestedResumeOffset));
|
|
5754
5831
|
const binding = {
|
|
5755
5832
|
terminalId: msg.terminalId,
|