@tutti-os/agent-gui 0.0.94 → 0.0.95
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/README.md +48 -32
- package/dist/AgentGUI-CwBLYtv-.d.ts +992 -0
- package/dist/agent-conversation/index.d.ts +5 -7
- package/dist/agent-conversation/index.js +12 -8
- package/dist/agent-conversation/index.js.map +1 -1
- package/dist/agent-env/index.d.ts +10 -36
- package/dist/agent-env/index.js +1 -56
- package/dist/agent-env/index.js.map +1 -1
- package/dist/agent-gui.d.ts +21 -0
- package/dist/agent-gui.js +39 -0
- package/dist/agent-message-center/index.d.ts +145 -124
- package/dist/agent-message-center/index.js +1374 -1316
- package/dist/agent-message-center/index.js.map +1 -1
- package/dist/{agentConversationVM-Cl4G0Lln.d.ts → agentConversationVM-C335TR6S.d.ts} +112 -7
- package/dist/agentFileMentionContracts-Czvz6YMI.d.ts +107 -0
- package/dist/{agentGuiNodeTypes-CAioPXK9.d.ts → agentGuiNodeTypes-DppADPHW.d.ts} +96 -148
- package/dist/agentPlanPromptDispatch-C7cCMjve.d.ts +37 -0
- package/dist/agents.d.ts +13 -0
- package/dist/agents.js +13 -0
- package/dist/app/renderer/agentactivity.css +126 -80
- package/dist/app/renderer/assets/icons/agent-vinyls/tutti-vinyl.png +0 -0
- package/dist/app/renderer/assets/icons/open-link-lined.svg +4 -0
- package/dist/{chunk-P72YLKC6.js → chunk-3R2D4E57.js} +3127 -3398
- package/dist/chunk-3R2D4E57.js.map +1 -0
- package/dist/chunk-4YG7YK7S.js +23 -0
- package/dist/chunk-4YG7YK7S.js.map +1 -0
- package/dist/chunk-5X7YDOC6.js +42 -0
- package/dist/chunk-5X7YDOC6.js.map +1 -0
- package/dist/{chunk-IBIMGLCD.js → chunk-7J4K6WKB.js} +1 -1
- package/dist/chunk-7J4K6WKB.js.map +1 -0
- package/dist/{chunk-BXVPOGYK.js → chunk-7PFDA2HQ.js} +505 -504
- package/dist/chunk-7PFDA2HQ.js.map +1 -0
- package/dist/{chunk-AWAIUYG4.js → chunk-7RDD3EWP.js} +513 -555
- package/dist/chunk-7RDD3EWP.js.map +1 -0
- package/dist/{chunk-UBDPV34P.js → chunk-AOS2VWU6.js} +1355 -1305
- package/dist/chunk-AOS2VWU6.js.map +1 -0
- package/dist/{chunk-E5FOXRUM.js → chunk-BFNJKTDV.js} +295 -255
- package/dist/chunk-BFNJKTDV.js.map +1 -0
- package/dist/{chunk-5FE7M42A.js → chunk-BIHBXWK5.js} +2 -2
- package/dist/{chunk-7BUYFVRI.js → chunk-C5FV4UGI.js} +2921 -2944
- package/dist/chunk-C5FV4UGI.js.map +1 -0
- package/dist/{chunk-SCLLP5DO.js → chunk-CRO2MV2Y.js} +36 -46
- package/dist/chunk-CRO2MV2Y.js.map +1 -0
- package/dist/chunk-FGLQZ6I4.js +9 -0
- package/dist/chunk-FGLQZ6I4.js.map +1 -0
- package/dist/chunk-H6IQ63DQ.js +14 -0
- package/dist/chunk-H6IQ63DQ.js.map +1 -0
- package/dist/{chunk-IGY4ASUF.js → chunk-JX2SIXNL.js} +1293 -1702
- package/dist/chunk-JX2SIXNL.js.map +1 -0
- package/dist/chunk-KAL4XZMA.js +231 -0
- package/dist/chunk-KAL4XZMA.js.map +1 -0
- package/dist/chunk-KJQERFKX.js +259 -0
- package/dist/chunk-KJQERFKX.js.map +1 -0
- package/dist/chunk-LQVXBT65.js +491 -0
- package/dist/chunk-LQVXBT65.js.map +1 -0
- package/dist/{chunk-554VG7ZW.js → chunk-NITOD7WF.js} +2 -2
- package/dist/{chunk-7LMJXF4R.js → chunk-NJAZ7LQM.js} +20 -16
- package/dist/chunk-NJAZ7LQM.js.map +1 -0
- package/dist/chunk-NX3CZJXW.js +25 -0
- package/dist/chunk-NX3CZJXW.js.map +1 -0
- package/dist/chunk-O6W72SEP.js +93 -0
- package/dist/chunk-O6W72SEP.js.map +1 -0
- package/dist/chunk-RY6GIO3K.js +31700 -0
- package/dist/chunk-RY6GIO3K.js.map +1 -0
- package/dist/{chunk-XDV4ZRVK.js → chunk-UGVI47X6.js} +98 -37
- package/dist/chunk-UGVI47X6.js.map +1 -0
- package/dist/{chunk-XW4CVBUH.js → chunk-UQJPV6HP.js} +18 -11
- package/dist/chunk-UQJPV6HP.js.map +1 -0
- package/dist/{chunk-GAPTLVII.js → chunk-VF22EG3F.js} +1 -1
- package/dist/{chunk-GAPTLVII.js.map → chunk-VF22EG3F.js.map} +1 -1
- package/dist/{chunk-45FF4DQU.js → chunk-WEDMAVX2.js} +22 -24
- package/dist/chunk-WEDMAVX2.js.map +1 -0
- package/dist/{chunk-MATIJPGF.js → chunk-XMO45GKA.js} +531 -401
- package/dist/chunk-XMO45GKA.js.map +1 -0
- package/dist/{chunk-ZUW4B5AT.js → chunk-YE25HN6T.js} +6 -9
- package/dist/chunk-YE25HN6T.js.map +1 -0
- package/dist/context-mention-palette/index.d.ts +3 -2
- package/dist/context-mention-palette/index.js +19 -14
- package/dist/custom-mention.d.ts +44 -0
- package/dist/custom-mention.js +17 -0
- package/dist/custom-mention.js.map +1 -0
- package/dist/dock-icons.d.ts +6 -0
- package/dist/dock-icons.js +11 -0
- package/dist/dock-icons.js.map +1 -0
- package/dist/i18n/index.d.ts +850 -841
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +52 -1061
- package/dist/index.js +72 -35530
- package/dist/index.js.map +1 -1
- package/dist/mention-search.d.ts +226 -0
- package/dist/mention-search.js +29 -0
- package/dist/mention-search.js.map +1 -0
- package/dist/open-link-lined-JWEKUKME.svg +4 -0
- package/dist/provider-icons.d.ts +6 -0
- package/dist/provider-icons.js +12 -0
- package/dist/provider-icons.js.map +1 -0
- package/dist/provider-identity.d.ts +9 -0
- package/dist/provider-identity.js +21 -0
- package/dist/provider-identity.js.map +1 -0
- package/dist/runtime-BBNdWgDU.d.ts +10 -0
- package/dist/{types-PLFZ8SBX.d.ts → types-DX2bxgB8.d.ts} +28 -83
- package/dist/workbench/contribution.d.ts +32 -40
- package/dist/workbench/contribution.js +10 -6
- package/dist/workbench/index.d.ts +3 -2
- package/dist/workbench/index.js +24 -20
- package/dist/workbench/launch.d.ts +2 -5
- package/dist/workbench/launch.js +4 -3
- package/dist/workbench/providerCatalog.js +2 -1
- package/dist/workbench/sessionTitle.d.ts +4 -3
- package/dist/workbench/sessionTitle.js +4 -3
- package/dist/workbench/state.d.ts +1 -1
- package/dist/workbench/state.js +3 -2
- package/dist/workbench/types.d.ts +0 -3
- package/dist/workbench/types.js +1 -1
- package/dist/workspace-agent-generated-files.d.ts +20 -2
- package/dist/workspace-agent-generated-files.js +7 -6
- package/dist/workspaceAgentActivityListTypes-C7gPWYiA.d.ts +71 -0
- package/package.json +63 -26
- package/dist/AgentMentionSearchController-DD_WOred.d.ts +0 -241
- package/dist/AgentMessageMarkdown-DeYPURtF.d.ts +0 -7
- package/dist/chunk-45FF4DQU.js.map +0 -1
- package/dist/chunk-4HP6V2YA.js +0 -207
- package/dist/chunk-4HP6V2YA.js.map +0 -1
- package/dist/chunk-7BUYFVRI.js.map +0 -1
- package/dist/chunk-7LMJXF4R.js.map +0 -1
- package/dist/chunk-AWAIUYG4.js.map +0 -1
- package/dist/chunk-BXVPOGYK.js.map +0 -1
- package/dist/chunk-E5FOXRUM.js.map +0 -1
- package/dist/chunk-IBIMGLCD.js.map +0 -1
- package/dist/chunk-IGY4ASUF.js.map +0 -1
- package/dist/chunk-LR4FA5X6.js +0 -368
- package/dist/chunk-LR4FA5X6.js.map +0 -1
- package/dist/chunk-MATIJPGF.js.map +0 -1
- package/dist/chunk-MKHDRIGN.js +0 -71
- package/dist/chunk-MKHDRIGN.js.map +0 -1
- package/dist/chunk-P72YLKC6.js.map +0 -1
- package/dist/chunk-SCLLP5DO.js.map +0 -1
- package/dist/chunk-UBDPV34P.js.map +0 -1
- package/dist/chunk-VAKFNNKT.js +0 -410
- package/dist/chunk-VAKFNNKT.js.map +0 -1
- package/dist/chunk-XDV4ZRVK.js.map +0 -1
- package/dist/chunk-XW4CVBUH.js.map +0 -1
- package/dist/chunk-ZUW4B5AT.js.map +0 -1
- package/dist/plan-decision-ops.d.ts +0 -70
- package/dist/plan-decision-ops.js +0 -19
- package/dist/queued-prompt-runtime.d.ts +0 -115
- package/dist/queued-prompt-runtime.js +0 -9
- package/dist/workspaceAgentActivityListViewModel-BzV-cf0D.d.ts +0 -340
- package/dist/workspaceLinkActions-DS9LWqzI.d.ts +0 -74
- /package/dist/{plan-decision-ops.js.map → agent-gui.js.map} +0 -0
- /package/dist/{queued-prompt-runtime.js.map → agents.js.map} +0 -0
- /package/dist/{chunk-5FE7M42A.js.map → chunk-BIHBXWK5.js.map} +0 -0
- /package/dist/{chunk-554VG7ZW.js.map → chunk-NITOD7WF.js.map} +0 -0
package/dist/chunk-VAKFNNKT.js
DELETED
|
@@ -1,410 +0,0 @@
|
|
|
1
|
-
// agentQueuedPromptRuntimeCore.ts
|
|
2
|
-
var DEFAULT_CLAIM_LEASE_MS = 3e4;
|
|
3
|
-
var EMPTY_AGENT_QUEUED_PROMPT_SNAPSHOT = Object.freeze({
|
|
4
|
-
queuesByKey: Object.freeze({}),
|
|
5
|
-
version: 0
|
|
6
|
-
});
|
|
7
|
-
function logAgentQueuedPromptRuntime(event, details) {
|
|
8
|
-
void event;
|
|
9
|
-
void details;
|
|
10
|
-
}
|
|
11
|
-
function createAgentQueuedPromptRuntime() {
|
|
12
|
-
let snapshot = EMPTY_AGENT_QUEUED_PROMPT_SNAPSHOT;
|
|
13
|
-
const emptyQueuesByKey = /* @__PURE__ */ new Map();
|
|
14
|
-
const expiredClaimsByKey = /* @__PURE__ */ new Map();
|
|
15
|
-
const listeners = /* @__PURE__ */ new Set();
|
|
16
|
-
let claimExpiryTimer = null;
|
|
17
|
-
const notify = () => {
|
|
18
|
-
for (const listener of [...listeners]) {
|
|
19
|
-
listener();
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
const updateQueue = (workspaceId, agentSessionId, updater, options) => {
|
|
23
|
-
const key = queueKey(workspaceId, agentSessionId);
|
|
24
|
-
const current = snapshot.queuesByKey[key] ?? getEmptyQueueSnapshot(emptyQueuesByKey, { workspaceId, agentSessionId });
|
|
25
|
-
const queueForUpdate = options?.releaseExpiredClaim === false ? current : withExpiredClaimReleased(current);
|
|
26
|
-
if (queueForUpdate !== current && current.claim) {
|
|
27
|
-
expiredClaimsByKey.set(key, current.claim);
|
|
28
|
-
}
|
|
29
|
-
const nextQueue = updater(queueForUpdate);
|
|
30
|
-
if (nextQueue === current) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
const nextQueuesByKey = {
|
|
34
|
-
...snapshot.queuesByKey
|
|
35
|
-
};
|
|
36
|
-
if (nextQueue === null || isEmptyQueue(nextQueue)) {
|
|
37
|
-
delete nextQueuesByKey[key];
|
|
38
|
-
} else {
|
|
39
|
-
nextQueuesByKey[key] = freezeQueue(nextQueue);
|
|
40
|
-
}
|
|
41
|
-
clearExpiredClaimIfReplaced(expiredClaimsByKey, key, nextQueue);
|
|
42
|
-
snapshot = Object.freeze({
|
|
43
|
-
queuesByKey: Object.freeze(nextQueuesByKey),
|
|
44
|
-
version: snapshot.version + 1
|
|
45
|
-
});
|
|
46
|
-
scheduleClaimExpiryWakeup();
|
|
47
|
-
notify();
|
|
48
|
-
};
|
|
49
|
-
const releaseExpiredClaims = () => {
|
|
50
|
-
claimExpiryTimer = null;
|
|
51
|
-
let changed = false;
|
|
52
|
-
const nextQueuesByKey = {
|
|
53
|
-
...snapshot.queuesByKey
|
|
54
|
-
};
|
|
55
|
-
for (const [key, queue] of Object.entries(snapshot.queuesByKey)) {
|
|
56
|
-
const nextQueue = withExpiredClaimReleased(queue);
|
|
57
|
-
if (nextQueue === queue) {
|
|
58
|
-
continue;
|
|
59
|
-
}
|
|
60
|
-
changed = true;
|
|
61
|
-
if (queue.claim) {
|
|
62
|
-
expiredClaimsByKey.set(key, queue.claim);
|
|
63
|
-
}
|
|
64
|
-
if (isEmptyQueue(nextQueue)) {
|
|
65
|
-
delete nextQueuesByKey[key];
|
|
66
|
-
} else {
|
|
67
|
-
nextQueuesByKey[key] = nextQueue;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (changed) {
|
|
71
|
-
snapshot = Object.freeze({
|
|
72
|
-
queuesByKey: Object.freeze(nextQueuesByKey),
|
|
73
|
-
version: snapshot.version + 1
|
|
74
|
-
});
|
|
75
|
-
notify();
|
|
76
|
-
}
|
|
77
|
-
scheduleClaimExpiryWakeup();
|
|
78
|
-
};
|
|
79
|
-
const scheduleClaimExpiryWakeup = () => {
|
|
80
|
-
if (claimExpiryTimer) {
|
|
81
|
-
clearTimeout(claimExpiryTimer);
|
|
82
|
-
claimExpiryTimer = null;
|
|
83
|
-
}
|
|
84
|
-
let nextExpiryUnixMs = null;
|
|
85
|
-
for (const queue of Object.values(snapshot.queuesByKey)) {
|
|
86
|
-
if (!queue.claim) {
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
nextExpiryUnixMs = nextExpiryUnixMs === null ? queue.claim.leasedUntilUnixMs : Math.min(nextExpiryUnixMs, queue.claim.leasedUntilUnixMs);
|
|
90
|
-
}
|
|
91
|
-
if (nextExpiryUnixMs === null) {
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
claimExpiryTimer = setTimeout(
|
|
95
|
-
releaseExpiredClaims,
|
|
96
|
-
Math.max(1, nextExpiryUnixMs - Date.now() + 1)
|
|
97
|
-
);
|
|
98
|
-
claimExpiryTimer.unref?.();
|
|
99
|
-
};
|
|
100
|
-
return {
|
|
101
|
-
claimNextToDrain(input) {
|
|
102
|
-
const workspaceId = input.workspaceId.trim();
|
|
103
|
-
const agentSessionId = input.agentSessionId.trim();
|
|
104
|
-
const ownerId = input.ownerId.trim();
|
|
105
|
-
if (!workspaceId || !agentSessionId || !ownerId) {
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
const current = withExpiredClaimReleased(
|
|
109
|
-
snapshot.queuesByKey[queueKey(workspaceId, agentSessionId)] ?? getEmptyQueueSnapshot(emptyQueuesByKey, {
|
|
110
|
-
workspaceId,
|
|
111
|
-
agentSessionId
|
|
112
|
-
})
|
|
113
|
-
);
|
|
114
|
-
if (current.claim || current.prompts.length === 0) {
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
117
|
-
const prompt = current.prompts[0];
|
|
118
|
-
const claim = Object.freeze({
|
|
119
|
-
workspaceId,
|
|
120
|
-
agentSessionId,
|
|
121
|
-
ownerId,
|
|
122
|
-
promptId: prompt.id,
|
|
123
|
-
claimId: `claim-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
124
|
-
leasedUntilUnixMs: Date.now() + Math.max(1, input.leaseMs ?? DEFAULT_CLAIM_LEASE_MS)
|
|
125
|
-
});
|
|
126
|
-
updateQueue(workspaceId, agentSessionId, (queue) => ({
|
|
127
|
-
...queue,
|
|
128
|
-
claim
|
|
129
|
-
}));
|
|
130
|
-
expiredClaimsByKey.delete(queueKey(workspaceId, agentSessionId));
|
|
131
|
-
logAgentQueuedPromptRuntime("claim", {
|
|
132
|
-
workspaceId,
|
|
133
|
-
agentSessionId,
|
|
134
|
-
ownerId,
|
|
135
|
-
promptId: prompt.id,
|
|
136
|
-
claimId: claim.claimId,
|
|
137
|
-
queueLength: current.prompts.length
|
|
138
|
-
});
|
|
139
|
-
return { claim, prompt };
|
|
140
|
-
},
|
|
141
|
-
cleanupSession(input) {
|
|
142
|
-
const workspaceId = input.workspaceId.trim();
|
|
143
|
-
const agentSessionId = input.agentSessionId.trim();
|
|
144
|
-
if (!workspaceId || !agentSessionId) {
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
updateQueue(workspaceId, agentSessionId, () => null);
|
|
148
|
-
expiredClaimsByKey.delete(queueKey(workspaceId, agentSessionId));
|
|
149
|
-
},
|
|
150
|
-
completeClaim(input) {
|
|
151
|
-
let completed = false;
|
|
152
|
-
const key = queueKey(input.workspaceId, input.agentSessionId);
|
|
153
|
-
updateQueue(
|
|
154
|
-
input.workspaceId,
|
|
155
|
-
input.agentSessionId,
|
|
156
|
-
(queue) => {
|
|
157
|
-
const matchingClaim = claimMatches(queue.claim, input) ? queue.claim : queue.claim === null && claimMatches(expiredClaimsByKey.get(key) ?? null, input) ? expiredClaimsByKey.get(key) : null;
|
|
158
|
-
if (!matchingClaim) {
|
|
159
|
-
return queue;
|
|
160
|
-
}
|
|
161
|
-
completed = true;
|
|
162
|
-
const promptId = matchingClaim.promptId;
|
|
163
|
-
expiredClaimsByKey.delete(key);
|
|
164
|
-
logAgentQueuedPromptRuntime("complete-claim", {
|
|
165
|
-
workspaceId: input.workspaceId,
|
|
166
|
-
agentSessionId: input.agentSessionId,
|
|
167
|
-
ownerId: input.ownerId,
|
|
168
|
-
promptId,
|
|
169
|
-
claimId: input.claimId
|
|
170
|
-
});
|
|
171
|
-
return {
|
|
172
|
-
...queue,
|
|
173
|
-
claim: null,
|
|
174
|
-
failedPromptId: queue.failedPromptId === promptId ? null : queue.failedPromptId,
|
|
175
|
-
prompts: Object.freeze(
|
|
176
|
-
queue.prompts.filter((prompt) => prompt.id !== promptId)
|
|
177
|
-
),
|
|
178
|
-
retryBlock: queue.retryBlock?.queuedPromptId === promptId ? null : queue.retryBlock,
|
|
179
|
-
sendNextPromptId: queue.sendNextPromptId === promptId ? null : queue.sendNextPromptId
|
|
180
|
-
};
|
|
181
|
-
},
|
|
182
|
-
{ releaseExpiredClaim: false }
|
|
183
|
-
);
|
|
184
|
-
return completed;
|
|
185
|
-
},
|
|
186
|
-
enqueue(input) {
|
|
187
|
-
updateQueue(input.workspaceId, input.agentSessionId, (queue) => ({
|
|
188
|
-
...queue,
|
|
189
|
-
prompts: Object.freeze([...queue.prompts, freezePrompt(input.prompt)])
|
|
190
|
-
}));
|
|
191
|
-
logAgentQueuedPromptRuntime("enqueue", {
|
|
192
|
-
workspaceId: input.workspaceId,
|
|
193
|
-
agentSessionId: input.agentSessionId,
|
|
194
|
-
promptId: input.prompt.id
|
|
195
|
-
});
|
|
196
|
-
},
|
|
197
|
-
getSessionSnapshot(input) {
|
|
198
|
-
const workspaceId = input.workspaceId.trim();
|
|
199
|
-
const agentSessionId = input.agentSessionId.trim();
|
|
200
|
-
const key = queueKey(workspaceId, agentSessionId);
|
|
201
|
-
const current = snapshot.queuesByKey[key] ?? getEmptyQueueSnapshot(emptyQueuesByKey, {
|
|
202
|
-
workspaceId,
|
|
203
|
-
agentSessionId
|
|
204
|
-
});
|
|
205
|
-
const next = withExpiredClaimReleased(current);
|
|
206
|
-
if (next !== current) {
|
|
207
|
-
updateQueue(workspaceId, agentSessionId, () => next);
|
|
208
|
-
}
|
|
209
|
-
return snapshot.queuesByKey[key] ?? next;
|
|
210
|
-
},
|
|
211
|
-
getSnapshot() {
|
|
212
|
-
return snapshot;
|
|
213
|
-
},
|
|
214
|
-
markPromptFailed(input) {
|
|
215
|
-
updateQueue(input.workspaceId, input.agentSessionId, (queue) => ({
|
|
216
|
-
...queue,
|
|
217
|
-
failedPromptId: input.promptId.trim() || queue.failedPromptId
|
|
218
|
-
}));
|
|
219
|
-
logAgentQueuedPromptRuntime("mark-failed", {
|
|
220
|
-
workspaceId: input.workspaceId,
|
|
221
|
-
agentSessionId: input.agentSessionId,
|
|
222
|
-
promptId: input.promptId
|
|
223
|
-
});
|
|
224
|
-
},
|
|
225
|
-
promotePrompt(input) {
|
|
226
|
-
const promptId = input.promptId.trim();
|
|
227
|
-
if (!promptId) {
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
updateQueue(input.workspaceId, input.agentSessionId, (queue) => {
|
|
231
|
-
const index = queue.prompts.findIndex(
|
|
232
|
-
(prompt) => prompt.id === promptId
|
|
233
|
-
);
|
|
234
|
-
if (index < 0) {
|
|
235
|
-
return queue;
|
|
236
|
-
}
|
|
237
|
-
if (queue.claim?.promptId === promptId) {
|
|
238
|
-
return queue;
|
|
239
|
-
}
|
|
240
|
-
const prompts = [...queue.prompts];
|
|
241
|
-
if (index > 0) {
|
|
242
|
-
const [selected] = prompts.splice(index, 1);
|
|
243
|
-
prompts.unshift(selected);
|
|
244
|
-
}
|
|
245
|
-
return {
|
|
246
|
-
...queue,
|
|
247
|
-
failedPromptId: queue.failedPromptId === promptId ? null : queue.failedPromptId,
|
|
248
|
-
prompts: Object.freeze(prompts),
|
|
249
|
-
retryBlock: queue.retryBlock?.queuedPromptId === promptId ? null : queue.retryBlock,
|
|
250
|
-
sendNextPromptId: promptId,
|
|
251
|
-
suspendReason: null
|
|
252
|
-
};
|
|
253
|
-
});
|
|
254
|
-
},
|
|
255
|
-
releaseClaim(input) {
|
|
256
|
-
let released = false;
|
|
257
|
-
updateQueue(input.workspaceId, input.agentSessionId, (queue) => {
|
|
258
|
-
if (!claimMatches(queue.claim, input)) {
|
|
259
|
-
return queue;
|
|
260
|
-
}
|
|
261
|
-
released = true;
|
|
262
|
-
logAgentQueuedPromptRuntime("release-claim", {
|
|
263
|
-
workspaceId: input.workspaceId,
|
|
264
|
-
agentSessionId: input.agentSessionId,
|
|
265
|
-
ownerId: input.ownerId,
|
|
266
|
-
claimId: input.claimId,
|
|
267
|
-
promptId: queue.claim.promptId
|
|
268
|
-
});
|
|
269
|
-
return { ...queue, claim: null };
|
|
270
|
-
});
|
|
271
|
-
return released;
|
|
272
|
-
},
|
|
273
|
-
removePrompt(input) {
|
|
274
|
-
const promptId = input.promptId.trim();
|
|
275
|
-
if (!promptId) {
|
|
276
|
-
return null;
|
|
277
|
-
}
|
|
278
|
-
let removed = null;
|
|
279
|
-
updateQueue(input.workspaceId, input.agentSessionId, (queue) => {
|
|
280
|
-
removed = queue.prompts.find((prompt) => prompt.id === promptId) ?? null;
|
|
281
|
-
if (!removed) {
|
|
282
|
-
return queue;
|
|
283
|
-
}
|
|
284
|
-
if (queue.claim?.promptId === promptId) {
|
|
285
|
-
removed = null;
|
|
286
|
-
return queue;
|
|
287
|
-
}
|
|
288
|
-
const key = queueKey(input.workspaceId, input.agentSessionId);
|
|
289
|
-
if (expiredClaimsByKey.get(key)?.promptId === promptId) {
|
|
290
|
-
expiredClaimsByKey.delete(key);
|
|
291
|
-
}
|
|
292
|
-
return {
|
|
293
|
-
...queue,
|
|
294
|
-
claim: queue.claim?.promptId === promptId ? null : queue.claim,
|
|
295
|
-
failedPromptId: queue.failedPromptId === promptId ? null : queue.failedPromptId,
|
|
296
|
-
prompts: Object.freeze(
|
|
297
|
-
queue.prompts.filter((prompt) => prompt.id !== promptId)
|
|
298
|
-
),
|
|
299
|
-
retryBlock: queue.retryBlock?.queuedPromptId === promptId ? null : queue.retryBlock,
|
|
300
|
-
sendNextPromptId: queue.sendNextPromptId === promptId ? null : queue.sendNextPromptId
|
|
301
|
-
};
|
|
302
|
-
});
|
|
303
|
-
return removed;
|
|
304
|
-
},
|
|
305
|
-
setRetryBlock(input) {
|
|
306
|
-
updateQueue(input.workspaceId, input.agentSessionId, (queue) => ({
|
|
307
|
-
...queue,
|
|
308
|
-
retryBlock: input.retryBlock ? Object.freeze({ ...input.retryBlock }) : null
|
|
309
|
-
}));
|
|
310
|
-
logAgentQueuedPromptRuntime("set-retry-block", {
|
|
311
|
-
workspaceId: input.workspaceId,
|
|
312
|
-
agentSessionId: input.agentSessionId,
|
|
313
|
-
retryBlock: input.retryBlock
|
|
314
|
-
});
|
|
315
|
-
},
|
|
316
|
-
suspendQueue(input) {
|
|
317
|
-
updateQueue(input.workspaceId, input.agentSessionId, (queue) => ({
|
|
318
|
-
...queue,
|
|
319
|
-
suspendReason: input.reason
|
|
320
|
-
}));
|
|
321
|
-
logAgentQueuedPromptRuntime("suspend", {
|
|
322
|
-
workspaceId: input.workspaceId,
|
|
323
|
-
agentSessionId: input.agentSessionId,
|
|
324
|
-
reason: input.reason
|
|
325
|
-
});
|
|
326
|
-
},
|
|
327
|
-
resumeQueue(input) {
|
|
328
|
-
updateQueue(
|
|
329
|
-
input.workspaceId,
|
|
330
|
-
input.agentSessionId,
|
|
331
|
-
(queue) => queue.suspendReason === null ? queue : { ...queue, suspendReason: null }
|
|
332
|
-
);
|
|
333
|
-
logAgentQueuedPromptRuntime("resume", {
|
|
334
|
-
workspaceId: input.workspaceId,
|
|
335
|
-
agentSessionId: input.agentSessionId
|
|
336
|
-
});
|
|
337
|
-
},
|
|
338
|
-
subscribe(listener) {
|
|
339
|
-
listeners.add(listener);
|
|
340
|
-
return () => {
|
|
341
|
-
listeners.delete(listener);
|
|
342
|
-
};
|
|
343
|
-
}
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
function queueKey(workspaceId, agentSessionId) {
|
|
347
|
-
return `${workspaceId.trim()}\0${agentSessionId.trim()}`;
|
|
348
|
-
}
|
|
349
|
-
function emptyQueueSnapshot(input) {
|
|
350
|
-
return freezeQueue({
|
|
351
|
-
workspaceId: input.workspaceId,
|
|
352
|
-
agentSessionId: input.agentSessionId,
|
|
353
|
-
claim: null,
|
|
354
|
-
failedPromptId: null,
|
|
355
|
-
prompts: Object.freeze([]),
|
|
356
|
-
retryBlock: null,
|
|
357
|
-
sendNextPromptId: null,
|
|
358
|
-
suspendReason: null
|
|
359
|
-
});
|
|
360
|
-
}
|
|
361
|
-
function getEmptyQueueSnapshot(cache, input) {
|
|
362
|
-
const key = queueKey(input.workspaceId, input.agentSessionId);
|
|
363
|
-
const existing = cache.get(key);
|
|
364
|
-
if (existing) {
|
|
365
|
-
return existing;
|
|
366
|
-
}
|
|
367
|
-
const next = emptyQueueSnapshot(input);
|
|
368
|
-
cache.set(key, next);
|
|
369
|
-
return next;
|
|
370
|
-
}
|
|
371
|
-
function freezePrompt(prompt) {
|
|
372
|
-
return Object.freeze({
|
|
373
|
-
...prompt,
|
|
374
|
-
content: Object.freeze([
|
|
375
|
-
...prompt.content
|
|
376
|
-
])
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
|
-
function freezeQueue(queue) {
|
|
380
|
-
return Object.freeze({
|
|
381
|
-
...queue,
|
|
382
|
-
claim: queue.claim ? Object.freeze({ ...queue.claim }) : null,
|
|
383
|
-
prompts: Object.freeze(queue.prompts.map(freezePrompt)),
|
|
384
|
-
retryBlock: queue.retryBlock ? Object.freeze({ ...queue.retryBlock }) : null
|
|
385
|
-
});
|
|
386
|
-
}
|
|
387
|
-
function withExpiredClaimReleased(queue) {
|
|
388
|
-
if (!queue.claim || queue.claim.leasedUntilUnixMs > Date.now()) {
|
|
389
|
-
return queue;
|
|
390
|
-
}
|
|
391
|
-
return freezeQueue({ ...queue, claim: null });
|
|
392
|
-
}
|
|
393
|
-
function isEmptyQueue(queue) {
|
|
394
|
-
return queue.prompts.length === 0 && queue.claim === null && queue.failedPromptId === null && queue.retryBlock === null && queue.sendNextPromptId === null;
|
|
395
|
-
}
|
|
396
|
-
function claimMatches(claim, input) {
|
|
397
|
-
return claim !== null && claim.workspaceId === input.workspaceId.trim() && claim.agentSessionId === input.agentSessionId.trim() && claim.ownerId === input.ownerId.trim() && claim.claimId === input.claimId.trim();
|
|
398
|
-
}
|
|
399
|
-
function clearExpiredClaimIfReplaced(expiredClaimsByKey, key, queue) {
|
|
400
|
-
const expiredClaim = expiredClaimsByKey.get(key);
|
|
401
|
-
if (expiredClaim && (queue === null || queue.claim !== null || !queue.prompts.some((prompt) => prompt.id === expiredClaim.promptId))) {
|
|
402
|
-
expiredClaimsByKey.delete(key);
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
export {
|
|
407
|
-
EMPTY_AGENT_QUEUED_PROMPT_SNAPSHOT,
|
|
408
|
-
createAgentQueuedPromptRuntime
|
|
409
|
-
};
|
|
410
|
-
//# sourceMappingURL=chunk-VAKFNNKT.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../agentQueuedPromptRuntimeCore.ts"],"sourcesContent":["import type { AgentGUIQueuedPromptVM } from \"./agent-gui/agentGuiNode/model/agentGuiNodeTypes\";\nimport type { AgentPromptContentBlock } from \"./shared/contracts/dto\";\n\nexport interface AgentQueuedPromptRetryBlock {\n queuedPromptId: string;\n sessionStateUpdatedAtUnixMs: number | null;\n conversationUpdatedAtUnixMs: number | null;\n}\n\nexport interface AgentQueuedPromptClaim {\n agentSessionId: string;\n claimId: string;\n ownerId: string;\n promptId: string;\n leasedUntilUnixMs: number;\n workspaceId: string;\n}\n\nexport type AgentQueuedPromptSuspendReason = \"user_stop\";\n\nexport interface AgentQueuedPromptQueueSnapshot {\n agentSessionId: string;\n claim: AgentQueuedPromptClaim | null;\n failedPromptId: string | null;\n prompts: readonly AgentGUIQueuedPromptVM[];\n retryBlock: AgentQueuedPromptRetryBlock | null;\n sendNextPromptId: string | null;\n /**\n * User intent gate: while set, the drainer must not auto-dispatch this\n * queue even when the session is available. Set when the user stops the\n * session; cleared by an explicit user send (composer submit resumes, and\n * promotePrompt clears it as part of \"send now\").\n */\n suspendReason: AgentQueuedPromptSuspendReason | null;\n workspaceId: string;\n}\n\nexport interface AgentQueuedPromptSnapshot {\n queuesByKey: Readonly<Record<string, AgentQueuedPromptQueueSnapshot>>;\n version: number;\n}\n\nexport interface AgentQueuedPromptClaimResult {\n claim: AgentQueuedPromptClaim;\n prompt: AgentGUIQueuedPromptVM;\n}\n\nexport interface AgentQueuedPromptRuntime {\n claimNextToDrain(input: {\n agentSessionId: string;\n leaseMs?: number;\n ownerId: string;\n workspaceId: string;\n }): AgentQueuedPromptClaimResult | null;\n cleanupSession(input: { agentSessionId: string; workspaceId: string }): void;\n completeClaim(input: {\n agentSessionId: string;\n claimId: string;\n ownerId: string;\n workspaceId: string;\n }): boolean;\n enqueue(input: {\n prompt: AgentGUIQueuedPromptVM;\n agentSessionId: string;\n workspaceId: string;\n }): void;\n getSessionSnapshot(input: {\n agentSessionId: string;\n workspaceId: string;\n }): AgentQueuedPromptQueueSnapshot;\n getSnapshot(): AgentQueuedPromptSnapshot;\n markPromptFailed(input: {\n agentSessionId: string;\n promptId: string;\n workspaceId: string;\n }): void;\n promotePrompt(input: {\n agentSessionId: string;\n promptId: string;\n workspaceId: string;\n }): void;\n releaseClaim(input: {\n agentSessionId: string;\n claimId: string;\n ownerId: string;\n workspaceId: string;\n }): boolean;\n removePrompt(input: {\n agentSessionId: string;\n promptId: string;\n workspaceId: string;\n }): AgentGUIQueuedPromptVM | null;\n setRetryBlock(input: {\n agentSessionId: string;\n retryBlock: AgentQueuedPromptRetryBlock | null;\n workspaceId: string;\n }): void;\n /** Hold the queue after a user stop; a no-op when the queue is empty. */\n suspendQueue(input: {\n agentSessionId: string;\n reason: AgentQueuedPromptSuspendReason;\n workspaceId: string;\n }): void;\n /** Lift a user-stop hold (explicit user send). */\n resumeQueue(input: { agentSessionId: string; workspaceId: string }): void;\n subscribe(listener: () => void): () => void;\n}\n\nconst DEFAULT_CLAIM_LEASE_MS = 30_000;\n\nexport const EMPTY_AGENT_QUEUED_PROMPT_SNAPSHOT: AgentQueuedPromptSnapshot =\n Object.freeze({\n queuesByKey: Object.freeze({}),\n version: 0\n });\n\nfunction logAgentQueuedPromptRuntime(\n event: string,\n details: Record<string, unknown>\n): void {\n void event;\n void details;\n}\n\nexport function createAgentQueuedPromptRuntime(): AgentQueuedPromptRuntime {\n let snapshot = EMPTY_AGENT_QUEUED_PROMPT_SNAPSHOT;\n const emptyQueuesByKey = new Map<string, AgentQueuedPromptQueueSnapshot>();\n const expiredClaimsByKey = new Map<string, AgentQueuedPromptClaim>();\n const listeners = new Set<() => void>();\n let claimExpiryTimer: ReturnType<typeof setTimeout> | null = null;\n\n const notify = (): void => {\n for (const listener of [...listeners]) {\n listener();\n }\n };\n\n const updateQueue = (\n workspaceId: string,\n agentSessionId: string,\n updater: (\n queue: AgentQueuedPromptQueueSnapshot\n ) => AgentQueuedPromptQueueSnapshot | null,\n options?: { releaseExpiredClaim?: boolean }\n ): void => {\n const key = queueKey(workspaceId, agentSessionId);\n const current =\n snapshot.queuesByKey[key] ??\n getEmptyQueueSnapshot(emptyQueuesByKey, { workspaceId, agentSessionId });\n const queueForUpdate =\n options?.releaseExpiredClaim === false\n ? current\n : withExpiredClaimReleased(current);\n if (queueForUpdate !== current && current.claim) {\n expiredClaimsByKey.set(key, current.claim);\n }\n const nextQueue = updater(queueForUpdate);\n if (nextQueue === current) {\n return;\n }\n const nextQueuesByKey: Record<string, AgentQueuedPromptQueueSnapshot> = {\n ...snapshot.queuesByKey\n };\n if (nextQueue === null || isEmptyQueue(nextQueue)) {\n delete nextQueuesByKey[key];\n } else {\n nextQueuesByKey[key] = freezeQueue(nextQueue);\n }\n clearExpiredClaimIfReplaced(expiredClaimsByKey, key, nextQueue);\n snapshot = Object.freeze({\n queuesByKey: Object.freeze(nextQueuesByKey),\n version: snapshot.version + 1\n });\n scheduleClaimExpiryWakeup();\n notify();\n };\n\n const releaseExpiredClaims = (): void => {\n claimExpiryTimer = null;\n let changed = false;\n const nextQueuesByKey: Record<string, AgentQueuedPromptQueueSnapshot> = {\n ...snapshot.queuesByKey\n };\n for (const [key, queue] of Object.entries(snapshot.queuesByKey)) {\n const nextQueue = withExpiredClaimReleased(queue);\n if (nextQueue === queue) {\n continue;\n }\n changed = true;\n if (queue.claim) {\n expiredClaimsByKey.set(key, queue.claim);\n }\n if (isEmptyQueue(nextQueue)) {\n delete nextQueuesByKey[key];\n } else {\n nextQueuesByKey[key] = nextQueue;\n }\n }\n if (changed) {\n snapshot = Object.freeze({\n queuesByKey: Object.freeze(nextQueuesByKey),\n version: snapshot.version + 1\n });\n notify();\n }\n scheduleClaimExpiryWakeup();\n };\n\n const scheduleClaimExpiryWakeup = (): void => {\n if (claimExpiryTimer) {\n clearTimeout(claimExpiryTimer);\n claimExpiryTimer = null;\n }\n let nextExpiryUnixMs: number | null = null;\n for (const queue of Object.values(snapshot.queuesByKey)) {\n if (!queue.claim) {\n continue;\n }\n nextExpiryUnixMs =\n nextExpiryUnixMs === null\n ? queue.claim.leasedUntilUnixMs\n : Math.min(nextExpiryUnixMs, queue.claim.leasedUntilUnixMs);\n }\n if (nextExpiryUnixMs === null) {\n return;\n }\n claimExpiryTimer = setTimeout(\n releaseExpiredClaims,\n Math.max(1, nextExpiryUnixMs - Date.now() + 1)\n );\n (claimExpiryTimer as { unref?: () => void }).unref?.();\n };\n\n return {\n claimNextToDrain(input) {\n const workspaceId = input.workspaceId.trim();\n const agentSessionId = input.agentSessionId.trim();\n const ownerId = input.ownerId.trim();\n if (!workspaceId || !agentSessionId || !ownerId) {\n return null;\n }\n const current = withExpiredClaimReleased(\n snapshot.queuesByKey[queueKey(workspaceId, agentSessionId)] ??\n getEmptyQueueSnapshot(emptyQueuesByKey, {\n workspaceId,\n agentSessionId\n })\n );\n if (current.claim || current.prompts.length === 0) {\n return null;\n }\n const prompt = current.prompts[0]!;\n const claim: AgentQueuedPromptClaim = Object.freeze({\n workspaceId,\n agentSessionId,\n ownerId,\n promptId: prompt.id,\n claimId: `claim-${Date.now()}-${Math.random().toString(36).slice(2)}`,\n leasedUntilUnixMs:\n Date.now() + Math.max(1, input.leaseMs ?? DEFAULT_CLAIM_LEASE_MS)\n });\n updateQueue(workspaceId, agentSessionId, (queue) => ({\n ...queue,\n claim\n }));\n expiredClaimsByKey.delete(queueKey(workspaceId, agentSessionId));\n logAgentQueuedPromptRuntime(\"claim\", {\n workspaceId,\n agentSessionId,\n ownerId,\n promptId: prompt.id,\n claimId: claim.claimId,\n queueLength: current.prompts.length\n });\n return { claim, prompt };\n },\n cleanupSession(input) {\n const workspaceId = input.workspaceId.trim();\n const agentSessionId = input.agentSessionId.trim();\n if (!workspaceId || !agentSessionId) {\n return;\n }\n updateQueue(workspaceId, agentSessionId, () => null);\n expiredClaimsByKey.delete(queueKey(workspaceId, agentSessionId));\n },\n completeClaim(input) {\n let completed = false;\n const key = queueKey(input.workspaceId, input.agentSessionId);\n updateQueue(\n input.workspaceId,\n input.agentSessionId,\n (queue) => {\n const matchingClaim = claimMatches(queue.claim, input)\n ? queue.claim\n : queue.claim === null &&\n claimMatches(expiredClaimsByKey.get(key) ?? null, input)\n ? expiredClaimsByKey.get(key)!\n : null;\n if (!matchingClaim) {\n return queue;\n }\n completed = true;\n const promptId = matchingClaim.promptId;\n expiredClaimsByKey.delete(key);\n logAgentQueuedPromptRuntime(\"complete-claim\", {\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n ownerId: input.ownerId,\n promptId,\n claimId: input.claimId\n });\n return {\n ...queue,\n claim: null,\n failedPromptId:\n queue.failedPromptId === promptId ? null : queue.failedPromptId,\n prompts: Object.freeze(\n queue.prompts.filter((prompt) => prompt.id !== promptId)\n ),\n retryBlock:\n queue.retryBlock?.queuedPromptId === promptId\n ? null\n : queue.retryBlock,\n sendNextPromptId:\n queue.sendNextPromptId === promptId\n ? null\n : queue.sendNextPromptId\n };\n },\n { releaseExpiredClaim: false }\n );\n return completed;\n },\n enqueue(input) {\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => ({\n ...queue,\n prompts: Object.freeze([...queue.prompts, freezePrompt(input.prompt)])\n }));\n logAgentQueuedPromptRuntime(\"enqueue\", {\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n promptId: input.prompt.id\n });\n },\n getSessionSnapshot(input) {\n const workspaceId = input.workspaceId.trim();\n const agentSessionId = input.agentSessionId.trim();\n const key = queueKey(workspaceId, agentSessionId);\n const current =\n snapshot.queuesByKey[key] ??\n getEmptyQueueSnapshot(emptyQueuesByKey, {\n workspaceId,\n agentSessionId\n });\n const next = withExpiredClaimReleased(current);\n if (next !== current) {\n updateQueue(workspaceId, agentSessionId, () => next);\n }\n return snapshot.queuesByKey[key] ?? next;\n },\n getSnapshot() {\n return snapshot;\n },\n markPromptFailed(input) {\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => ({\n ...queue,\n failedPromptId: input.promptId.trim() || queue.failedPromptId\n }));\n logAgentQueuedPromptRuntime(\"mark-failed\", {\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n promptId: input.promptId\n });\n },\n promotePrompt(input) {\n const promptId = input.promptId.trim();\n if (!promptId) {\n return;\n }\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => {\n const index = queue.prompts.findIndex(\n (prompt) => prompt.id === promptId\n );\n if (index < 0) {\n return queue;\n }\n if (queue.claim?.promptId === promptId) {\n return queue;\n }\n const prompts = [...queue.prompts];\n if (index > 0) {\n const [selected] = prompts.splice(index, 1);\n prompts.unshift(selected!);\n }\n return {\n ...queue,\n failedPromptId:\n queue.failedPromptId === promptId ? null : queue.failedPromptId,\n prompts: Object.freeze(prompts),\n retryBlock:\n queue.retryBlock?.queuedPromptId === promptId\n ? null\n : queue.retryBlock,\n sendNextPromptId: promptId,\n suspendReason: null\n };\n });\n },\n releaseClaim(input) {\n let released = false;\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => {\n if (!claimMatches(queue.claim, input)) {\n return queue;\n }\n released = true;\n logAgentQueuedPromptRuntime(\"release-claim\", {\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n ownerId: input.ownerId,\n claimId: input.claimId,\n promptId: queue.claim.promptId\n });\n return { ...queue, claim: null };\n });\n return released;\n },\n removePrompt(input) {\n const promptId = input.promptId.trim();\n if (!promptId) {\n return null;\n }\n let removed: AgentGUIQueuedPromptVM | null = null;\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => {\n removed =\n queue.prompts.find((prompt) => prompt.id === promptId) ?? null;\n if (!removed) {\n return queue;\n }\n if (queue.claim?.promptId === promptId) {\n removed = null;\n return queue;\n }\n const key = queueKey(input.workspaceId, input.agentSessionId);\n if (expiredClaimsByKey.get(key)?.promptId === promptId) {\n expiredClaimsByKey.delete(key);\n }\n return {\n ...queue,\n claim: queue.claim?.promptId === promptId ? null : queue.claim,\n failedPromptId:\n queue.failedPromptId === promptId ? null : queue.failedPromptId,\n prompts: Object.freeze(\n queue.prompts.filter((prompt) => prompt.id !== promptId)\n ),\n retryBlock:\n queue.retryBlock?.queuedPromptId === promptId\n ? null\n : queue.retryBlock,\n sendNextPromptId:\n queue.sendNextPromptId === promptId ? null : queue.sendNextPromptId\n };\n });\n return removed;\n },\n setRetryBlock(input) {\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => ({\n ...queue,\n retryBlock: input.retryBlock\n ? Object.freeze({ ...input.retryBlock })\n : null\n }));\n logAgentQueuedPromptRuntime(\"set-retry-block\", {\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n retryBlock: input.retryBlock\n });\n },\n suspendQueue(input) {\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => ({\n ...queue,\n suspendReason: input.reason\n }));\n logAgentQueuedPromptRuntime(\"suspend\", {\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n reason: input.reason\n });\n },\n resumeQueue(input) {\n updateQueue(input.workspaceId, input.agentSessionId, (queue) =>\n queue.suspendReason === null ? queue : { ...queue, suspendReason: null }\n );\n logAgentQueuedPromptRuntime(\"resume\", {\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId\n });\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n }\n };\n}\n\nfunction queueKey(workspaceId: string, agentSessionId: string): string {\n return `${workspaceId.trim()}\\0${agentSessionId.trim()}`;\n}\n\nfunction emptyQueueSnapshot(input: {\n workspaceId: string;\n agentSessionId: string;\n}): AgentQueuedPromptQueueSnapshot {\n return freezeQueue({\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n claim: null,\n failedPromptId: null,\n prompts: Object.freeze([]),\n retryBlock: null,\n sendNextPromptId: null,\n suspendReason: null\n });\n}\n\nfunction getEmptyQueueSnapshot(\n cache: Map<string, AgentQueuedPromptQueueSnapshot>,\n input: {\n workspaceId: string;\n agentSessionId: string;\n }\n): AgentQueuedPromptQueueSnapshot {\n const key = queueKey(input.workspaceId, input.agentSessionId);\n const existing = cache.get(key);\n if (existing) {\n return existing;\n }\n const next = emptyQueueSnapshot(input);\n cache.set(key, next);\n return next;\n}\n\nfunction freezePrompt(prompt: AgentGUIQueuedPromptVM): AgentGUIQueuedPromptVM {\n return Object.freeze({\n ...prompt,\n content: Object.freeze([\n ...prompt.content\n ]) as unknown as AgentPromptContentBlock[]\n });\n}\n\nfunction freezeQueue(\n queue: AgentQueuedPromptQueueSnapshot\n): AgentQueuedPromptQueueSnapshot {\n return Object.freeze({\n ...queue,\n claim: queue.claim ? Object.freeze({ ...queue.claim }) : null,\n prompts: Object.freeze(queue.prompts.map(freezePrompt)),\n retryBlock: queue.retryBlock ? Object.freeze({ ...queue.retryBlock }) : null\n });\n}\n\nfunction withExpiredClaimReleased(\n queue: AgentQueuedPromptQueueSnapshot\n): AgentQueuedPromptQueueSnapshot {\n if (!queue.claim || queue.claim.leasedUntilUnixMs > Date.now()) {\n return queue;\n }\n return freezeQueue({ ...queue, claim: null });\n}\n\nfunction isEmptyQueue(queue: AgentQueuedPromptQueueSnapshot): boolean {\n return (\n queue.prompts.length === 0 &&\n queue.claim === null &&\n queue.failedPromptId === null &&\n queue.retryBlock === null &&\n queue.sendNextPromptId === null\n );\n}\n\nfunction claimMatches(\n claim: AgentQueuedPromptClaim | null,\n input: {\n agentSessionId: string;\n claimId: string;\n ownerId: string;\n workspaceId: string;\n }\n): claim is AgentQueuedPromptClaim {\n return (\n claim !== null &&\n claim.workspaceId === input.workspaceId.trim() &&\n claim.agentSessionId === input.agentSessionId.trim() &&\n claim.ownerId === input.ownerId.trim() &&\n claim.claimId === input.claimId.trim()\n );\n}\n\nfunction clearExpiredClaimIfReplaced(\n expiredClaimsByKey: Map<string, AgentQueuedPromptClaim>,\n key: string,\n queue: AgentQueuedPromptQueueSnapshot | null\n): void {\n const expiredClaim = expiredClaimsByKey.get(key);\n if (\n expiredClaim &&\n (queue === null ||\n queue.claim !== null ||\n !queue.prompts.some((prompt) => prompt.id === expiredClaim.promptId))\n ) {\n expiredClaimsByKey.delete(key);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../shared/managedAgentProviders.ts","../managedAgentIconAssets.ts"],"sourcesContent":["export function normalizeManagedAgentProvider(\n provider: string | undefined\n): string {\n const normalized =\n provider\n ?.trim()\n .toLowerCase()\n .replace(/[_\\s]+/gu, \"-\") ?? \"\";\n switch (normalized) {\n case \"claude\":\n case \"claude-code\":\n return \"claude-code\";\n case \"nexight\":\n case \"tutti-doc\":\n case \"tutti-agent\":\n return \"tutti\";\n default:\n return normalized;\n }\n}\n","import claudeRoundedAssetUrl from \"./app/renderer/assets/icons/agents/claude-rounded.png\";\nimport codexRoundedAssetUrl from \"./app/renderer/assets/icons/agents/codex-rounded.png\";\nimport cursorColorfulAssetUrl from \"./app/renderer/assets/icons/agents/cursor-colorful.png\";\nimport cursorRoundedAssetUrl from \"./app/renderer/assets/icons/agents/cursor-rounded.png\";\nimport hermesRoundedAssetUrl from \"./app/renderer/assets/icons/agents/hermes-rounded.png\";\nimport agentColorfulAssetUrl from \"./app/renderer/assets/icons/agents/agent-colorful.png\";\nimport manageAgentTuttiAssetUrl from \"./app/renderer/assets/icons/agents/manage-agent-tutti.png\";\nimport opencodeRoundedAssetUrl from \"./app/renderer/assets/icons/agents/opencode-rounded.png\";\nimport openclawRoundedAssetUrl from \"./app/renderer/assets/icons/agents/openclaw-rounded.png\";\nimport providerRailClaudeCodeColorfulAssetUrl from \"./app/renderer/assets/icons/agents/provider-rail-claude-code-colorful.png\";\nimport providerRailCodexColorfulAssetUrl from \"./app/renderer/assets/icons/agents/provider-rail-codex-colorful.png\";\nimport providerRailHermesColorfulAssetUrl from \"./app/renderer/assets/icons/agents/provider-rail-hermes-colorful.png\";\nimport providerRailOpenCodeColorfulAssetUrl from \"./app/renderer/assets/icons/agents/provider-rail-opencode-colorful.png\";\nimport providerRailTuttiAssetUrl from \"./app/renderer/assets/icons/agents/provider-rail-tutti.png\";\n\nexport const manageAgentClaudeCodeUrl = claudeRoundedAssetUrl;\nexport const manageAgentCodexUrl = codexRoundedAssetUrl;\nexport const manageAgentCursorUrl = cursorRoundedAssetUrl;\nexport const manageAgentHermesUrl = hermesRoundedAssetUrl;\nexport const manageAgentTuttiUrl = manageAgentTuttiAssetUrl;\nexport const manageAgentTuttiAgentUrl = manageAgentTuttiAssetUrl;\nexport const manageAgentOpenCodeUrl = opencodeRoundedAssetUrl;\nexport const manageAgentOpenclawUrl = openclawRoundedAssetUrl;\nexport const agentColorfulUrl = agentColorfulAssetUrl;\nexport const claudeRoundedUrl = claudeRoundedAssetUrl;\nexport const codexRoundedUrl = codexRoundedAssetUrl;\nexport const cursorColorfulUrl = cursorColorfulAssetUrl;\nexport const cursorRoundedUrl = cursorRoundedAssetUrl;\nexport const hermesRoundedUrl = hermesRoundedAssetUrl;\nexport const tuttiDocRoundedUrl = manageAgentTuttiAssetUrl;\nexport const tuttiAgentRoundedUrl = manageAgentTuttiAssetUrl;\nexport const opencodeRoundedUrl = opencodeRoundedAssetUrl;\nexport const openclawRoundedUrl = openclawRoundedAssetUrl;\nexport const providerRailClaudeCodeColorfulUrl =\n providerRailClaudeCodeColorfulAssetUrl;\nexport const providerRailCodexColorfulUrl = providerRailCodexColorfulAssetUrl;\nexport const providerRailHermesColorfulUrl = providerRailHermesColorfulAssetUrl;\nexport const providerRailOpenCodeColorfulUrl =\n providerRailOpenCodeColorfulAssetUrl;\nexport const providerRailTuttiUrl = providerRailTuttiAssetUrl;\n"],"mappings":";AAAO,SAAS,8BACd,UACQ;AACR,QAAM,aACJ,UACI,KAAK,EACN,YAAY,EACZ,QAAQ,YAAY,GAAG,KAAK;AACjC,UAAQ,YAAY;AAAA,IAClB,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJO,IAAM,2BAA2B;AACjC,IAAM,sBAAsB;AAE5B,IAAM,uBAAuB;AAC7B,IAAM,sBAAsB;AAE5B,IAAM,yBAAyB;AAC/B,IAAM,yBAAyB;AAC/B,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AACxB,IAAM,oBAAoB;AAC1B,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,uBAAuB;AAC7B,IAAM,qBAAqB;AAC3B,IAAM,qBAAqB;AAC3B,IAAM,oCACX;AACK,IAAM,+BAA+B;AACrC,IAAM,gCAAgC;AACtC,IAAM,kCACX;AACK,IAAM,uBAAuB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../workbench/providerCatalog.ts"],"sourcesContent":["import type { AgentGuiWorkbenchProvider } from \"./types.ts\";\n\nexport const agentGuiWorkbenchProviders = [\n \"claude-code\",\n \"codex\",\n \"cursor\",\n \"tutti-agent\",\n \"opencode\",\n \"hermes\",\n \"openclaw\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nexport const agentGuiWorkbenchDefaultDockProviders = [\n \"codex\",\n \"claude-code\",\n \"tutti-agent\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nexport const agentGuiWorkbenchDockSuppressedProviders = [\n \"hermes\",\n \"opencode\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nexport const agentGuiWorkbenchComingSoonProviders =\n [] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nconst defaultDockProviderSet = new Set<AgentGuiWorkbenchProvider>(\n agentGuiWorkbenchDefaultDockProviders\n);\nconst dockSuppressedProviderSet = new Set<AgentGuiWorkbenchProvider>(\n agentGuiWorkbenchDockSuppressedProviders\n);\nconst comingSoonProviderSet = new Set<AgentGuiWorkbenchProvider>(\n agentGuiWorkbenchComingSoonProviders\n);\nconst enabledWorkbenchProviderSet = new Set<string>(agentGuiWorkbenchProviders);\n\n// i18n-check-ignore: provider brand names.\nexport const agentGuiWorkbenchProviderLabels: Record<\n AgentGuiWorkbenchProvider,\n string\n> = {\n \"claude-code\": \"Claude Code\",\n codex: \"Codex\",\n cursor: \"Cursor\",\n hermes: \"Hermes Agent\",\n nexight: \"Nexight\",\n openclaw: \"OpenClaw\",\n opencode: \"Open Code\",\n \"tutti-agent\": \"Tutti Agent\"\n};\n\nexport function resolveAgentGuiWorkbenchProviderLabel(\n provider: AgentGuiWorkbenchProvider\n): string {\n return agentGuiWorkbenchProviderLabels[provider];\n}\n\nexport function isAgentGuiWorkbenchDefaultDockProvider(\n provider: AgentGuiWorkbenchProvider\n): boolean {\n return defaultDockProviderSet.has(provider);\n}\n\nexport function isAgentGuiWorkbenchDockSuppressedProvider(\n provider: AgentGuiWorkbenchProvider\n): boolean {\n return dockSuppressedProviderSet.has(provider);\n}\n\nexport function isAgentGuiWorkbenchComingSoonProvider(\n provider: AgentGuiWorkbenchProvider\n): boolean {\n return comingSoonProviderSet.has(provider);\n}\n\nexport function isAgentGuiWorkbenchProvider(\n value: unknown\n): value is AgentGuiWorkbenchProvider {\n return typeof value === \"string\" && enabledWorkbenchProviderSet.has(value);\n}\n\nexport function normalizeAgentGuiWorkbenchProvider(\n value: unknown,\n fallbackProvider: AgentGuiWorkbenchProvider = \"codex\"\n): AgentGuiWorkbenchProvider {\n return isAgentGuiWorkbenchProvider(value) ? value : fallbackProvider;\n}\n"],"mappings":";AAEO,IAAM,6BAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,wCAAwC;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,2CAA2C;AAAA,EACtD;AAAA,EACA;AACF;AAEO,IAAM,uCACX,CAAC;AAEH,IAAM,yBAAyB,IAAI;AAAA,EACjC;AACF;AACA,IAAM,4BAA4B,IAAI;AAAA,EACpC;AACF;AACA,IAAM,wBAAwB,IAAI;AAAA,EAChC;AACF;AACA,IAAM,8BAA8B,IAAI,IAAY,0BAA0B;AAGvE,IAAM,kCAGT;AAAA,EACF,eAAe;AAAA,EACf,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,eAAe;AACjB;AAEO,SAAS,sCACd,UACQ;AACR,SAAO,gCAAgC,QAAQ;AACjD;AAEO,SAAS,uCACd,UACS;AACT,SAAO,uBAAuB,IAAI,QAAQ;AAC5C;AAEO,SAAS,0CACd,UACS;AACT,SAAO,0BAA0B,IAAI,QAAQ;AAC/C;AAEO,SAAS,sCACd,UACS;AACT,SAAO,sBAAsB,IAAI,QAAQ;AAC3C;AAEO,SAAS,4BACd,OACoC;AACpC,SAAO,OAAO,UAAU,YAAY,4BAA4B,IAAI,KAAK;AAC3E;AAEO,SAAS,mCACd,OACA,mBAA8C,SACnB;AAC3B,SAAO,4BAA4B,KAAK,IAAI,QAAQ;AACtD;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../workbench/sessionTitle.ts"],"sourcesContent":["import type {\n AgentActivityMessage,\n AgentActivitySnapshot\n} from \"@tutti-os/agent-activity-core\";\nimport type { UiLanguage } from \"../contexts/settings/domain/agentSettings\";\nimport {\n firstAgentGUIUserMessageTitle,\n formatAgentGUIConversationPlainTitle,\n normalizeAgentGUIProviderIdentity,\n resolveAgentGUIExplicitConversationTitle,\n type AgentGUIResolvedProvider\n} from \"../shared/agentConversationTitleProjection.ts\";\nimport { formatAgentSessionMentionText } from \"../shared/utils/agentSessionMentionText.ts\";\nimport type { AgentGuiWorkbenchProvider } from \"./types.ts\";\n\nexport interface AgentGuiSessionTitleFormatOptions {\n fallbackAgentLabel?: string;\n language?: UiLanguage;\n}\n\nexport interface ResolveAgentGuiWorkbenchSessionTitleInput extends AgentGuiSessionTitleFormatOptions {\n agentSessionId?: string | null;\n fallbackTitle?: string | null;\n provider: AgentGuiWorkbenchProvider | string;\n snapshot: AgentActivitySnapshot;\n}\n\nexport interface AgentGuiWorkbenchSessionTitleResult {\n agentSessionId: string | null;\n source: \"snapshot\" | \"fallback\" | \"none\";\n title: string | null;\n}\n\nexport function formatAgentGuiSessionPlainTitle(\n title: string | null | undefined,\n options: AgentGuiSessionTitleFormatOptions = {}\n): string {\n return formatAgentSessionMentionText(title, { language: options.language });\n}\n\nexport function formatAgentGuiConversationPlainTitle(\n conversation: {\n title: string;\n titleFallback?: \"generic-agent\" | null;\n },\n options: AgentGuiSessionTitleFormatOptions = {}\n): string {\n return formatAgentGUIConversationPlainTitle(conversation, options);\n}\n\nexport function resolveAgentGuiWorkbenchSessionTitle({\n agentSessionId,\n fallbackTitle,\n language,\n provider,\n snapshot\n}: ResolveAgentGuiWorkbenchSessionTitleInput): AgentGuiWorkbenchSessionTitleResult {\n const normalizedAgentSessionId = agentSessionId?.trim() ?? \"\";\n if (!normalizedAgentSessionId) {\n return { agentSessionId: null, source: \"none\", title: null };\n }\n\n const session = snapshot.sessions.find(\n (item) => item.agentSessionId === normalizedAgentSessionId\n );\n const sessionMessages =\n snapshot.sessionMessagesById[normalizedAgentSessionId] ?? [];\n const normalizedProvider = normalizeAgentGUIProviderIdentity(\n session?.provider ?? provider\n );\n const snapshotTitle = resolveDisplayableSnapshotSessionTitle({\n messages: sessionMessages,\n provider: normalizedProvider,\n sessionTitle: session?.title ?? \"\",\n language\n });\n if (snapshotTitle) {\n return {\n agentSessionId: normalizedAgentSessionId,\n source: \"snapshot\",\n title: snapshotTitle\n };\n }\n\n if (session || sessionMessages.length > 0) {\n return {\n agentSessionId: normalizedAgentSessionId,\n source: \"none\",\n title: null\n };\n }\n\n const fallbackDisplayTitle = formatAgentGuiConversationPlainTitle(\n { title: fallbackTitle ?? \"\", titleFallback: null },\n { language }\n );\n return fallbackDisplayTitle\n ? {\n agentSessionId: normalizedAgentSessionId,\n source: \"fallback\",\n title: fallbackDisplayTitle\n }\n : {\n agentSessionId: normalizedAgentSessionId,\n source: \"none\",\n title: null\n };\n}\n\nfunction resolveDisplayableSnapshotSessionTitle(input: {\n messages: readonly AgentActivityMessage[];\n provider: AgentGUIResolvedProvider;\n sessionTitle: string;\n language?: UiLanguage;\n}): string {\n const explicitSessionTitle = explicitConversationTitle({\n language: input.language,\n provider: input.provider,\n title: input.sessionTitle\n });\n if (explicitSessionTitle) {\n return explicitSessionTitle;\n }\n return explicitConversationTitle({\n language: input.language,\n provider: input.provider,\n title: firstAgentGUIUserMessageTitle(input.messages)\n });\n}\n\nfunction explicitConversationTitle(input: {\n language?: UiLanguage;\n provider: AgentGUIResolvedProvider;\n title: string | null | undefined;\n}): string {\n return (\n resolveAgentGUIExplicitConversationTitle({\n provider: input.provider,\n title: formatAgentGuiConversationPlainTitle(\n { title: input.title ?? \"\", titleFallback: null },\n { language: input.language }\n ),\n titleFallback: null\n }) ?? \"\"\n );\n}\n"],"mappings":";;;;;;;;;AAiCO,SAAS,gCACd,OACA,UAA6C,CAAC,GACtC;AACR,SAAO,8BAA8B,OAAO,EAAE,UAAU,QAAQ,SAAS,CAAC;AAC5E;AAEO,SAAS,qCACd,cAIA,UAA6C,CAAC,GACtC;AACR,SAAO,qCAAqC,cAAc,OAAO;AACnE;AAEO,SAAS,qCAAqC;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmF;AACjF,QAAM,2BAA2B,gBAAgB,KAAK,KAAK;AAC3D,MAAI,CAAC,0BAA0B;AAC7B,WAAO,EAAE,gBAAgB,MAAM,QAAQ,QAAQ,OAAO,KAAK;AAAA,EAC7D;AAEA,QAAM,UAAU,SAAS,SAAS;AAAA,IAChC,CAAC,SAAS,KAAK,mBAAmB;AAAA,EACpC;AACA,QAAM,kBACJ,SAAS,oBAAoB,wBAAwB,KAAK,CAAC;AAC7D,QAAM,qBAAqB;AAAA,IACzB,SAAS,YAAY;AAAA,EACvB;AACA,QAAM,gBAAgB,uCAAuC;AAAA,IAC3D,UAAU;AAAA,IACV,UAAU;AAAA,IACV,cAAc,SAAS,SAAS;AAAA,IAChC;AAAA,EACF,CAAC;AACD,MAAI,eAAe;AACjB,WAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,WAAW,gBAAgB,SAAS,GAAG;AACzC,WAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,uBAAuB;AAAA,IAC3B,EAAE,OAAO,iBAAiB,IAAI,eAAe,KAAK;AAAA,IAClD,EAAE,SAAS;AAAA,EACb;AACA,SAAO,uBACH;AAAA,IACE,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,OAAO;AAAA,EACT,IACA;AAAA,IACE,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AACN;AAEA,SAAS,uCAAuC,OAKrC;AACT,QAAM,uBAAuB,0BAA0B;AAAA,IACrD,UAAU,MAAM;AAAA,IAChB,UAAU,MAAM;AAAA,IAChB,OAAO,MAAM;AAAA,EACf,CAAC;AACD,MAAI,sBAAsB;AACxB,WAAO;AAAA,EACT;AACA,SAAO,0BAA0B;AAAA,IAC/B,UAAU,MAAM;AAAA,IAChB,UAAU,MAAM;AAAA,IAChB,OAAO,8BAA8B,MAAM,QAAQ;AAAA,EACrD,CAAC;AACH;AAEA,SAAS,0BAA0B,OAIxB;AACT,SACE,yCAAyC;AAAA,IACvC,UAAU,MAAM;AAAA,IAChB,OAAO;AAAA,MACL,EAAE,OAAO,MAAM,SAAS,IAAI,eAAe,KAAK;AAAA,MAChD,EAAE,UAAU,MAAM,SAAS;AAAA,IAC7B;AAAA,IACA,eAAe;AAAA,EACjB,CAAC,KAAK;AAEV;","names":[]}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { b as AgentConversationPromptVM } from './agentConversationVM-Cl4G0Lln.js';
|
|
2
|
-
import './workspaceAgentActivityListViewModel-BzV-cf0D.js';
|
|
3
|
-
import '@tutti-os/agent-activity-core';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Codex has no provider-driven exit-plan approval flow (unlike claude-code's
|
|
7
|
-
* ExitPlanMode tool): the official TUI offers a local "implement this plan?"
|
|
8
|
-
* prompt after a plan-mode turn completes and submits a literal coding
|
|
9
|
-
* message in default mode. This mirrors that contract for the GUI.
|
|
10
|
-
* See codex-rs/tui/src/chatwidget/plan_implementation.rs.
|
|
11
|
-
*/
|
|
12
|
-
declare const PLAN_IMPLEMENTATION_PROMPT = "Implement the plan.";
|
|
13
|
-
/** Action ids carried by the plan-implementation interactive prompt. */
|
|
14
|
-
declare const PLAN_IMPLEMENTATION_ACTION_IMPLEMENT = "implement";
|
|
15
|
-
declare const PLAN_IMPLEMENTATION_ACTION_FEEDBACK = "feedback";
|
|
16
|
-
declare const PLAN_IMPLEMENTATION_ACTION_SKIP = "skip";
|
|
17
|
-
/**
|
|
18
|
-
* Builds the plan-implementation interactive prompt VM for a plan turn so the
|
|
19
|
-
* controller and the message center surface the codex plan decision through
|
|
20
|
-
* the same `pendingInteractivePrompt` machinery as claude-code exit-plan.
|
|
21
|
-
*/
|
|
22
|
-
declare function planImplementationPromptFromPlanTurn(planTurnId: string, title: string): Extract<AgentConversationPromptVM, {
|
|
23
|
-
kind: "plan-implementation";
|
|
24
|
-
}>;
|
|
25
|
-
interface PlanTimelineItem {
|
|
26
|
-
turnId?: string | null;
|
|
27
|
-
occurredAtUnixMs?: number | null;
|
|
28
|
-
createdAtUnixMs?: number | null;
|
|
29
|
-
seq?: number | null;
|
|
30
|
-
payload?: Record<string, unknown> | null;
|
|
31
|
-
}
|
|
32
|
-
type PlanDecisionOp = {
|
|
33
|
-
type: "updateSettings";
|
|
34
|
-
settings: {
|
|
35
|
-
planMode: false;
|
|
36
|
-
};
|
|
37
|
-
} | {
|
|
38
|
-
type: "sendInput";
|
|
39
|
-
text: string;
|
|
40
|
-
} | {
|
|
41
|
-
type: "submitInteractive";
|
|
42
|
-
requestId: string;
|
|
43
|
-
action?: string;
|
|
44
|
-
optionId?: string;
|
|
45
|
-
payload?: Record<string, unknown>;
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* Single source of truth for what a plan decision DOES at the daemon level.
|
|
49
|
-
* Both the desktop service (submitPlanDecision) and the in-conversation
|
|
50
|
-
* controller (implementPlan) execute these ops with their own primitives;
|
|
51
|
-
* node-local UI side effects are layered on by the controller, not here.
|
|
52
|
-
*/
|
|
53
|
-
declare function planDecisionOps(input: {
|
|
54
|
-
promptKind: string;
|
|
55
|
-
action?: string;
|
|
56
|
-
optionId?: string;
|
|
57
|
-
payload?: Record<string, unknown>;
|
|
58
|
-
requestId: string;
|
|
59
|
-
}): PlanDecisionOp[];
|
|
60
|
-
/**
|
|
61
|
-
* Returns the turn id of the latest turn that produced a plan item, or null.
|
|
62
|
-
* Driven by the same timeline data that renders the plan card (no race with a
|
|
63
|
-
* separate status flag), keyed by turn id so a given plan is offered once and
|
|
64
|
-
* a fresh plan turn re-arms the offer. Mirrors the codex TUI gate
|
|
65
|
-
* (saw_plan_item_this_turn) but evaluated against the latest turn rather than
|
|
66
|
-
* a transient per-turn boolean.
|
|
67
|
-
*/
|
|
68
|
-
declare function latestPlanTurnId(timelineItems: readonly PlanTimelineItem[]): string | null;
|
|
69
|
-
|
|
70
|
-
export { PLAN_IMPLEMENTATION_ACTION_FEEDBACK, PLAN_IMPLEMENTATION_ACTION_IMPLEMENT, PLAN_IMPLEMENTATION_ACTION_SKIP, PLAN_IMPLEMENTATION_PROMPT, type PlanDecisionOp, latestPlanTurnId, planDecisionOps, planImplementationPromptFromPlanTurn };
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
|
|
3
|
-
PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,
|
|
4
|
-
PLAN_IMPLEMENTATION_ACTION_SKIP,
|
|
5
|
-
PLAN_IMPLEMENTATION_PROMPT,
|
|
6
|
-
latestPlanTurnId,
|
|
7
|
-
planDecisionOps,
|
|
8
|
-
planImplementationPromptFromPlanTurn
|
|
9
|
-
} from "./chunk-MKHDRIGN.js";
|
|
10
|
-
export {
|
|
11
|
-
PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
|
|
12
|
-
PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,
|
|
13
|
-
PLAN_IMPLEMENTATION_ACTION_SKIP,
|
|
14
|
-
PLAN_IMPLEMENTATION_PROMPT,
|
|
15
|
-
latestPlanTurnId,
|
|
16
|
-
planDecisionOps,
|
|
17
|
-
planImplementationPromptFromPlanTurn
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=plan-decision-ops.js.map
|