@junctionpanel/server 0.1.92 → 0.1.94
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 +3 -0
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +55 -0
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +3 -0
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +63 -31
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
- package/dist/server/server/agent/agent-projections.js +1 -0
- package/dist/server/server/agent/agent-projections.js.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts +3 -0
- 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/providers/claude-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.js +1 -0
- 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 +22 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/gemini-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/gemini-agent.js +1 -0
- package/dist/server/server/agent/providers/gemini-agent.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 +1 -0
- package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
- package/dist/server/server/session.d.ts +3 -0
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +217 -3
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/shared/messages.d.ts +2267 -26
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +45 -0
- package/dist/server/shared/messages.js.map +1 -1
- package/package.json +2 -2
|
@@ -888,6 +888,7 @@ export class AgentManager {
|
|
|
888
888
|
text,
|
|
889
889
|
messageId: normalizedMessageId,
|
|
890
890
|
...(options?.images?.length ? { images: options.images.map((image) => ({ ...image })) } : {}),
|
|
891
|
+
...(options?.deliveryState ? { deliveryState: options.deliveryState } : {}),
|
|
891
892
|
};
|
|
892
893
|
const updatedAt = this.touchUpdatedAt(agent);
|
|
893
894
|
agent.lastUserMessageAt = updatedAt;
|
|
@@ -907,6 +908,7 @@ export class AgentManager {
|
|
|
907
908
|
}
|
|
908
909
|
async appendTimelineItem(agentId, item) {
|
|
909
910
|
const agent = this.requireAgent(agentId);
|
|
911
|
+
const previousPendingPlanReviewFingerprint = this.getCurrentPendingPlanReviewFingerprint(agent);
|
|
910
912
|
this.touchUpdatedAt(agent);
|
|
911
913
|
const row = this.recordTimeline(agent, item);
|
|
912
914
|
this.dispatchStream(agentId, {
|
|
@@ -917,6 +919,10 @@ export class AgentManager {
|
|
|
917
919
|
seq: row.seq,
|
|
918
920
|
epoch: this.ensureTimelineState(agent).epoch,
|
|
919
921
|
});
|
|
922
|
+
if (item.type !== "user_message" &&
|
|
923
|
+
this.didPendingPlanReviewFingerprintChange(agent, previousPendingPlanReviewFingerprint)) {
|
|
924
|
+
this.emitState(agent);
|
|
925
|
+
}
|
|
920
926
|
await this.persistSnapshot(agent);
|
|
921
927
|
}
|
|
922
928
|
async emitLiveTimelineItem(agentId, item) {
|
|
@@ -1680,34 +1686,44 @@ export class AgentManager {
|
|
|
1680
1686
|
}
|
|
1681
1687
|
break;
|
|
1682
1688
|
case "timeline":
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1689
|
+
{
|
|
1690
|
+
const previousPendingPlanReviewFingerprint = !options?.fromHistory
|
|
1691
|
+
? this.getCurrentPendingPlanReviewFingerprint(agent)
|
|
1692
|
+
: null;
|
|
1693
|
+
// Skip provider-replayed user_message items during history hydration.
|
|
1694
|
+
// These are already canonically recorded by recordUserMessage() and replaying them would
|
|
1695
|
+
// create duplicates. Match by messageId (not text) to avoid dropping legitimate
|
|
1696
|
+
// provider-origin messages that happen to reuse the same text.
|
|
1697
|
+
if (options?.fromHistory &&
|
|
1698
|
+
event.item.type === "user_message") {
|
|
1699
|
+
const eventMessageId = normalizeMessageId(event.item.messageId);
|
|
1700
|
+
if (eventMessageId) {
|
|
1701
|
+
const canonicalText = options?.canonicalUserMessagesById?.get(eventMessageId);
|
|
1702
|
+
if (canonicalText === event.item.text) {
|
|
1703
|
+
break;
|
|
1704
|
+
}
|
|
1694
1705
|
}
|
|
1695
1706
|
}
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1707
|
+
if (this.shouldSuppressLiveUserMessageEcho(agent, event, options)) {
|
|
1708
|
+
break;
|
|
1709
|
+
}
|
|
1710
|
+
timelineRow = this.recordTimeline(agent, event.item);
|
|
1711
|
+
shouldPersistSnapshot = true;
|
|
1712
|
+
if (!options?.fromHistory &&
|
|
1713
|
+
event.item.type === "user_message") {
|
|
1714
|
+
agent.lastUserMessageAt = new Date();
|
|
1715
|
+
this.emitState(agent);
|
|
1716
|
+
}
|
|
1717
|
+
if (!options?.fromHistory &&
|
|
1718
|
+
event.item.type !== "permission_request" &&
|
|
1719
|
+
event.item.type !== "permission_resolution") {
|
|
1720
|
+
this.touchActiveHarnessRunProgress(agent);
|
|
1721
|
+
}
|
|
1722
|
+
if (!options?.fromHistory &&
|
|
1723
|
+
event.item.type !== "user_message" &&
|
|
1724
|
+
this.didPendingPlanReviewFingerprintChange(agent, previousPendingPlanReviewFingerprint)) {
|
|
1725
|
+
this.emitState(agent);
|
|
1726
|
+
}
|
|
1711
1727
|
}
|
|
1712
1728
|
break;
|
|
1713
1729
|
case "turn_completed":
|
|
@@ -2097,12 +2113,14 @@ export class AgentManager {
|
|
|
2097
2113
|
if (agent.internal) {
|
|
2098
2114
|
return;
|
|
2099
2115
|
}
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
}
|
|
2116
|
+
const existingAttentionReason = agent.attention.requiresAttention
|
|
2117
|
+
? agent.attention.attentionReason
|
|
2118
|
+
: null;
|
|
2104
2119
|
// Check if agent entered error state
|
|
2105
|
-
if (
|
|
2120
|
+
if (currentStatus === "error") {
|
|
2121
|
+
if (existingAttentionReason === "error" || previousStatus === "error") {
|
|
2122
|
+
return;
|
|
2123
|
+
}
|
|
2106
2124
|
this.pendingUserInterruptAgents.delete(agent.id);
|
|
2107
2125
|
this.userInterruptedAgents.delete(agent.id);
|
|
2108
2126
|
this.suppressedPermissionAttentionKeys.delete(agent.id);
|
|
@@ -2125,6 +2143,10 @@ export class AgentManager {
|
|
|
2125
2143
|
if (this.suppressedPermissionAttentionKeys.get(agent.id) === currentPermissionAttentionKey) {
|
|
2126
2144
|
return;
|
|
2127
2145
|
}
|
|
2146
|
+
if (agent.attention.requiresAttention &&
|
|
2147
|
+
(existingAttentionReason === "permission" || existingAttentionReason === "error")) {
|
|
2148
|
+
return;
|
|
2149
|
+
}
|
|
2128
2150
|
this.suppressedPermissionAttentionKeys.delete(agent.id);
|
|
2129
2151
|
agent.attention = {
|
|
2130
2152
|
requiresAttention: true,
|
|
@@ -2187,6 +2209,16 @@ export class AgentManager {
|
|
|
2187
2209
|
}
|
|
2188
2210
|
this.suppressedPermissionAttentionKeys.delete(agent.id);
|
|
2189
2211
|
}
|
|
2212
|
+
getCurrentPendingPlanReviewFingerprint(agent) {
|
|
2213
|
+
return getPendingPlanReviewFingerprint({
|
|
2214
|
+
pendingPermissions: agent.pendingPermissions,
|
|
2215
|
+
timelineRows: agent.timelineRows,
|
|
2216
|
+
lifecycle: agent.lifecycle,
|
|
2217
|
+
});
|
|
2218
|
+
}
|
|
2219
|
+
didPendingPlanReviewFingerprintChange(agent, previousFingerprint) {
|
|
2220
|
+
return this.getCurrentPendingPlanReviewFingerprint(agent) !== previousFingerprint;
|
|
2221
|
+
}
|
|
2190
2222
|
enqueueBackgroundPersist(agent) {
|
|
2191
2223
|
this.enqueueBackgroundPersistById(agent.id);
|
|
2192
2224
|
}
|