@tea-agent/loop-agent 0.39.0-next.11 → 0.39.0-next.13
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/CHANGELOG.md +15 -0
- package/dist/build-stamp.json +2 -2
- package/dist/shared/operator/capabilities.js +65 -8
- package/dist/worker/console/chat/mcp-inventory.js +221 -0
- package/dist/worker/console/chat/pi-runtime.js +155 -78
- package/dist/worker/console/chat/repo-walk.js +10 -1
- package/dist/worker/console/chat/routes.js +19 -8
- package/dist/worker/console/chat/semantic-activity.js +17 -5
- package/dist/worker/console/chat/turn-process.js +10 -10
- package/dist/worker/console/operator-actions.js +74 -0
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-B1E-cK2K.js → abnfDiagram-N423BO3Z-Hfsot6rP.js} +1 -1
- package/dist/worker/console/static/assets/{arc-BGzjO9rd.js → arc-YGwEASin.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-DLdhmjAc.js → architectureDiagram-T3A2C74G-CmOM0F92.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-MYV8D865.js → blockDiagram-VBNYF7ZC-DDLuaHC5.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-BzDorEwd.js → c4Diagram-5PPSVZJV-B0Um43W4.js} +1 -1
- package/dist/worker/console/static/assets/channel-Dp_2Aqf1.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-C1X8DD9m.js → chunk-2GRJ4B5K-DvBN4JZc.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-_b3zpUSR.js → chunk-2Q5K7J3B-B1UVgW4E.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-B1nq6qNo.js → chunk-5RXB4S5H-Cf0GgXzX.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-BHy2jQUr.js → chunk-5VM5RSS4-DbNA24sj.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-BDoLBPGY.js → chunk-6Q2QTUOP-Bi_0Be06.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-SDhf5BHa.js → chunk-GF5L2VYU-C8pPGvRd.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-B2X9WLQ5.js → chunk-JWPE2WC7-BitQY8Z-.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-Y1pEsL6r.js → chunk-KBJHAD2P-U67GCiEo.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-BhlwtGnw.js → chunk-RYQCIY6F-IoJwXPBA.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-lFslfIU9.js → chunk-XXDRQBXY-YDZ_UHgE.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL--CODy37j.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE--CODy37j.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-ms_QSyzO.js → cose-bilkent-JH36ORCC-CUZgsiRC.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-DVBoJPNo.js → cynefin-VYW2F7L2-COmCh4pT.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-ClesFZ8l.js → cynefinDiagram-MW4NZA55-Ta6FSm68.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-CwcFFdXS.js → dagre-VZM6K2ZE-UdcR-VW9.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-CK6fAQka.js → diagram-7IWD3JNH-DybcO3Et.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-CxBy8J_n.js → diagram-B4RE2ZJO-wErDFWLw.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-Cn6E66dO.js → diagram-LBJQPF4R-DkVHZWqz.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-Cep_FINW.js → diagram-Q27KOJAE-DdqWs7QN.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-gzv9ZY8Y.js → diagram-UB23O5K3-C9dMVmDo.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-CZVlOlaj.js → ebnfDiagram-BXEA7PRR-B2T2WcBK.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-EGJvKAH5.js → erDiagram-JOGREHBK-Bt9rjDFq.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-DhfPgO79.js → flowDiagram-UKHOOZJN-U8ic_tvi.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-BzJfLMVN.js → ganttDiagram-PKOTCBZU-BfQJdQoO.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-C5uHg3cm.js → gitGraphDiagram-DS77QQ5N-CpMftH4O.js} +1 -1
- package/dist/worker/console/static/assets/index-BA5-N5ER.css +1 -0
- package/dist/worker/console/static/assets/index-DKPXBrdc.js +325 -0
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-BFEs1rSc.js → infoDiagram-6WML65LV-DzqWXNO_.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-DOY3aNcc.js → ishikawaDiagram-WSZJBQD7-CJmGQ5Yp.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-CvEVBETJ.js → journeyDiagram-NVQOT4AX-ChPtKFLz.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-CvRuqo46.js → kanban-definition-27J2QSJJ-PRe7wB5u.js} +1 -1
- package/dist/worker/console/static/assets/{linear-B8zO1HYx.js → linear-DpKX6QNp.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-FLK4IOPu.js → mermaid.core-Dnl76b7Y.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-CwQ-RWrj.js → mindmap-definition-FAOFIHXS-S9PCXc3J.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-H_S6wWna.js → pegDiagram-VL7TDLO6-Du8e-FSX.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-CZUOcDQQ.js → pieDiagram-7S7Q4E2Y-CY6OmHTc.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-CeaPaSv9.js → quadrantDiagram-CIZ2JOQS-C65GPhpj.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-Cpcs9ua-.js → railroadDiagram-AXF67PYL-U6IUiTCL.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-D0_Aeyk6.js → requirementDiagram-LRYGKXZP-D-I_9Qhi.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-73kWjUq_.js → sankeyDiagram-W5VNT64P-B57Fhed0.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-41K29Ot4.js → sequenceDiagram-SI44F4Z6-CJOtiw21.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-D1nO0oh9.js → sizeCapture-X5ZJPWSS-FyX8zxSh.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-C77XHgDB.js → stateDiagram-OKZ733FA-eF-pbs9t.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-B-mvnLEc.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-DC0D7jEO.js → swimlanes-SLNWSIFB-CcfkA-Dq.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-JtpBmIv4.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-BLDHd_Uf.js → timeline-definition-Z64GVDOM-DH8FjnOK.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-eh6Y_q96.js → vennDiagram-T6HMQDX7-beoTagJg.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-Cj4Cy9tr.js → wardleyDiagram-T6FBY63Y-CQSfw4cK.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-DUIjXY1m.js → xychartDiagram-ELKLHX3M-CQgzQ6jn.js} +1 -1
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +36 -25
- package/dist/worker/console/static-src/operator-chat/resource-diagnostics.js +204 -0
- package/dist/worker/console/static-src/operator-chat/useChatStream.js +17 -4
- package/dist/worker/console/static-src/operator-chat/useChatThread.js +28 -22
- package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +26 -1
- package/package.json +1 -1
- package/dist/worker/console/static/assets/channel-jVvdIfCV.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-VqdMg0Mg.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-VqdMg0Mg.js +0 -1
- package/dist/worker/console/static/assets/index-0DWC8Vk9.js +0 -325
- package/dist/worker/console/static/assets/index-DAouGklf.css +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-B9GimbZV.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-yxfxvdqm.js +0 -8
|
@@ -242,9 +242,14 @@ export function useChatStream(params) {
|
|
|
242
242
|
/** Issue real POST /abort for a known turnId (Stop never disposes Session). */
|
|
243
243
|
const postAbortForTurn = useCallback(async (sessionId, generation, turnId) => {
|
|
244
244
|
refs.stoppingTurnIdRef.current = turnId;
|
|
245
|
-
//
|
|
246
|
-
|
|
247
|
-
|
|
245
|
+
// Optimistic stop (pi-web parity): the abort signal kills the SDK
|
|
246
|
+
// process tree promptly, so flip the UI idle NOW instead of holding
|
|
247
|
+
// the busy spinner through the whole POST /abort round-trip. If the
|
|
248
|
+
// server later reports the turn still running (TURN_ABORT_PENDING
|
|
249
|
+
// or owner-lost reconcile), applyAbortDecision restores busy state.
|
|
250
|
+
refs.streamingRef.current = false;
|
|
251
|
+
setStreaming(false);
|
|
252
|
+
setStreamingAssistantId(null);
|
|
248
253
|
try {
|
|
249
254
|
const res = await fetch(operatorChatAbortUrl(origin, sessionId, turnId), {
|
|
250
255
|
method: "POST",
|
|
@@ -285,6 +290,10 @@ export function useChatStream(params) {
|
|
|
285
290
|
markIdle: () => markIdleIfCurrent(sessionId, generation, refs.assistantIdRef.current),
|
|
286
291
|
});
|
|
287
292
|
applyOwnershipBagToRefs(refs, bag);
|
|
293
|
+
// Sync the post-decision busy state back to React: optimistic stop
|
|
294
|
+
// flipped it idle up front; pending/keep-busy outcomes restore it.
|
|
295
|
+
if (bag.streaming)
|
|
296
|
+
setStreaming(true);
|
|
288
297
|
}
|
|
289
298
|
catch {
|
|
290
299
|
// Abort network failure: keep busy (UIS-abort-network-fail).
|
|
@@ -297,6 +306,10 @@ export function useChatStream(params) {
|
|
|
297
306
|
networkError: true,
|
|
298
307
|
}), noticeSink());
|
|
299
308
|
applyOwnershipBagToRefs(refs, bag);
|
|
309
|
+
// Network failure: the optimistic idle was premature — restore busy
|
|
310
|
+
// so the turn is not silently dropped; /state reconcile converges.
|
|
311
|
+
refs.streamingRef.current = true;
|
|
312
|
+
setStreaming(true);
|
|
300
313
|
}
|
|
301
314
|
}, [
|
|
302
315
|
origin,
|
|
@@ -371,7 +384,7 @@ export function useChatStream(params) {
|
|
|
371
384
|
refs.streamingRef.current ||
|
|
372
385
|
refs.submitInFlightRef.current ||
|
|
373
386
|
// AC-R5-002: ownership lease blocks send until terminal release.
|
|
374
|
-
|
|
387
|
+
refs.pendingSubmissionRef.current)
|
|
375
388
|
return;
|
|
376
389
|
// AC-001: acquire synchronous submit ownership before the first await.
|
|
377
390
|
refs.submitInFlightRef.current = true;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
-
import {
|
|
3
|
-
import { buildTurnProcessGroups } from "../../chat/turn-process.js";
|
|
2
|
+
import { buildTurnProcessGroups, hydrateSessionThread, selectRecentTurnGroups, } from "../../chat/turn-process.js";
|
|
4
3
|
import { createChatSseEventApplier, } from "./chat-sse-events.js";
|
|
5
4
|
import { taskContextUnchanged } from "./format.js";
|
|
6
5
|
const EMPTY_USAGE = {
|
|
@@ -121,9 +120,7 @@ export function useChatThread(params) {
|
|
|
121
120
|
}, 350);
|
|
122
121
|
return () => window.clearTimeout(timer);
|
|
123
122
|
}, [sessionId, operationCards, humanGateCards, interview, loadTaskContext]);
|
|
124
|
-
const
|
|
125
|
-
.filter((m) => m.role !== "system" || showSystemInMessages)
|
|
126
|
-
.slice(-historyLimit), [messages, showSystemInMessages, historyLimit]);
|
|
123
|
+
const timelineMessages = useMemo(() => messages.filter((m) => m.role !== "system" || showSystemInMessages), [messages, showSystemInMessages]);
|
|
127
124
|
useEffect(() => {
|
|
128
125
|
const onVisibility = () => {
|
|
129
126
|
if (!document.hidden)
|
|
@@ -158,12 +155,30 @@ export function useChatThread(params) {
|
|
|
158
155
|
statusKind,
|
|
159
156
|
};
|
|
160
157
|
}, [toolCalls]);
|
|
161
|
-
const turnGroups = useMemo(() =>
|
|
162
|
-
|
|
158
|
+
const turnGroups = useMemo(() => {
|
|
159
|
+
const all = buildTurnProcessGroups({
|
|
160
|
+
messages: timelineMessages,
|
|
161
|
+
toolCalls,
|
|
162
|
+
streaming,
|
|
163
|
+
activeAssistantId: streamingAssistantId,
|
|
164
|
+
});
|
|
165
|
+
return selectRecentTurnGroups(all, historyLimit);
|
|
166
|
+
}, [
|
|
167
|
+
timelineMessages,
|
|
163
168
|
toolCalls,
|
|
164
169
|
streaming,
|
|
165
|
-
|
|
166
|
-
|
|
170
|
+
streamingAssistantId,
|
|
171
|
+
historyLimit,
|
|
172
|
+
]);
|
|
173
|
+
const visibleMessages = useMemo(() => {
|
|
174
|
+
const next = [];
|
|
175
|
+
for (const group of turnGroups) {
|
|
176
|
+
if (group.user)
|
|
177
|
+
next.push(group.user);
|
|
178
|
+
next.push(...group.assistants);
|
|
179
|
+
}
|
|
180
|
+
return next;
|
|
181
|
+
}, [turnGroups]);
|
|
167
182
|
/** Reset all session-scoped projections before adopting a fresh session. */
|
|
168
183
|
const resetForNewSession = useCallback(() => {
|
|
169
184
|
setMessages([]);
|
|
@@ -220,18 +235,9 @@ export function useChatThread(params) {
|
|
|
220
235
|
refs.seenEventIdsRef.current = new Set();
|
|
221
236
|
refs.turnAssistantIdsRef.current = new Map();
|
|
222
237
|
refs.sealedAssistantIdsRef.current = new Set();
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
const content = parseAssistantContent(message.content);
|
|
227
|
-
return {
|
|
228
|
-
id: message.id,
|
|
229
|
-
role: message.role,
|
|
230
|
-
text: message.text,
|
|
231
|
-
createdAt: Date.parse(message.at) || Date.now(),
|
|
232
|
-
...(content && content.length > 0 ? { content } : {}),
|
|
233
|
-
};
|
|
234
|
-
}));
|
|
238
|
+
const hydrated = hydrateSessionThread(body.session.messages ?? []);
|
|
239
|
+
setMessages(hydrated.messages);
|
|
240
|
+
setToolCalls(hydrated.toolCalls);
|
|
235
241
|
setStreamingAssistantId(null);
|
|
236
242
|
return true;
|
|
237
243
|
}
|
|
@@ -240,7 +246,7 @@ export function useChatThread(params) {
|
|
|
240
246
|
// trigger another reconcile and retry (best-effort recovery).
|
|
241
247
|
return false;
|
|
242
248
|
}
|
|
243
|
-
}, [origin, refs, setMessages, setStreamingAssistantId]);
|
|
249
|
+
}, [origin, refs, setMessages, setToolCalls, setStreamingAssistantId]);
|
|
244
250
|
return {
|
|
245
251
|
messages,
|
|
246
252
|
setMessages,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useCallback, useEffect, useState } from "react";
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
2
|
import { ACTIVE_CHAT_SESSION_STORAGE_KEY } from "../../chat/workspace-landing.js";
|
|
3
3
|
/** Left-rail repo tree + file preview tabs state. */
|
|
4
4
|
export function useRepoBrowser(params) {
|
|
@@ -9,6 +9,8 @@ export function useRepoBrowser(params) {
|
|
|
9
9
|
const [previews, setPreviews] = useState([]);
|
|
10
10
|
const [activePreviewPath, setActivePreviewPath] = useState(null);
|
|
11
11
|
const [previewLoading, setPreviewLoading] = useState(false);
|
|
12
|
+
const expandedDirsRef = useRef(new Set());
|
|
13
|
+
expandedDirsRef.current = expandedDirs;
|
|
12
14
|
const loadTree = useCallback(async (directory = "") => {
|
|
13
15
|
try {
|
|
14
16
|
setTreeError(null);
|
|
@@ -28,6 +30,28 @@ export function useRepoBrowser(params) {
|
|
|
28
30
|
useEffect(() => {
|
|
29
31
|
void loadTree();
|
|
30
32
|
}, [loadTree]);
|
|
33
|
+
/** pi-web parity: re-fetch the root + every expanded directory. Bump
|
|
34
|
+
* `refreshTick` to trigger; cached entries are NOT reused, so newly
|
|
35
|
+
* created/deleted files appear without a manual refresh. */
|
|
36
|
+
const [refreshTick, setRefreshTick] = useState(0);
|
|
37
|
+
const refreshTree = useCallback(() => {
|
|
38
|
+
setRefreshTick((tick) => tick + 1);
|
|
39
|
+
}, []);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
const dirs = ["", ...expandedDirsRef.current];
|
|
42
|
+
for (const dir of dirs)
|
|
43
|
+
void loadTree(dir);
|
|
44
|
+
}, [loadTree, refreshTick]);
|
|
45
|
+
// Also refresh when the tab regains focus: external tools (editor, git,
|
|
46
|
+
// CLI) may have changed the tree while the console was hidden.
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
const onVisibility = () => {
|
|
49
|
+
if (!document.hidden)
|
|
50
|
+
refreshTree();
|
|
51
|
+
};
|
|
52
|
+
document.addEventListener("visibilitychange", onVisibility);
|
|
53
|
+
return () => document.removeEventListener("visibilitychange", onVisibility);
|
|
54
|
+
}, [refreshTree]);
|
|
31
55
|
const openPreview = useCallback(async (file) => {
|
|
32
56
|
setPreviewLoading(true);
|
|
33
57
|
try {
|
|
@@ -116,6 +140,7 @@ export function useRepoBrowser(params) {
|
|
|
116
140
|
previewLoading,
|
|
117
141
|
setPreviews,
|
|
118
142
|
loadTree,
|
|
143
|
+
refreshTree,
|
|
119
144
|
openPreview,
|
|
120
145
|
closePreview,
|
|
121
146
|
toggleDir,
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ag as o,ah as n}from"./mermaid.core-FLK4IOPu.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-GF5L2VYU-SDhf5BHa.js";import{_ as i}from"./mermaid.core-FLK4IOPu.js";import"./chunk-5VM5RSS4-BHy2jQUr.js";import"./chunk-XXDRQBXY-lFslfIU9.js";import"./chunk-KBJHAD2P-Y1pEsL6r.js";import"./chunk-2GRJ4B5K-C1X8DD9m.js";import"./index-0DWC8Vk9.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-GF5L2VYU-SDhf5BHa.js";import{_ as i}from"./mermaid.core-FLK4IOPu.js";import"./chunk-5VM5RSS4-BHy2jQUr.js";import"./chunk-XXDRQBXY-lFslfIU9.js";import"./chunk-KBJHAD2P-Y1pEsL6r.js";import"./chunk-2GRJ4B5K-C1X8DD9m.js";import"./index-0DWC8Vk9.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
|