@tea-agent/loop-agent 0.32.1 → 0.33.0
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 +46 -0
- package/dist/executors/model-routing.js +14 -4
- package/dist/governance/manifest-types.js +34 -7
- package/dist/worker/console/chat/model-resolver.js +114 -34
- package/dist/worker/console/chat/workspace-landing.js +58 -22
- package/dist/worker/console/doctor.js +1 -0
- package/dist/worker/console/night-aux-ticker.js +5 -0
- package/dist/worker/console/pi-readiness.js +26 -17
- package/dist/worker/console/server.js +2 -0
- package/dist/worker/console/static/assets/index-3R-GT3a_.js +29 -0
- package/dist/worker/console/static/assets/index-B0EQt_yq.css +1 -0
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/console/static-src/night/useNightBoard.js +0 -31
- package/dist/worker/observability/read-model.js +106 -0
- package/dist/worker/observe/routes.js +19 -1
- package/dist/worker/observe/static/api.js +42 -3
- package/dist/worker/observe/static/app.js +4 -0
- package/dist/worker/observe/static/constants.js +10 -0
- package/dist/worker/observe/static/custom-select.js +567 -0
- package/dist/worker/observe/static/index.html +47 -6
- package/dist/worker/observe/static/router.js +54 -1
- package/dist/worker/observe/static/state.js +20 -0
- package/dist/worker/observe/static/styles.css +618 -30
- package/dist/worker/observe/static/views/dag-inspector.js +20 -17
- package/dist/worker/observe/static/views/dag.js +136 -59
- package/dist/worker/observe/static/views/dags.js +877 -0
- package/dist/worker/observe/static/views/dashboard.js +15 -4
- package/dist/workflows/dag/init-hybrid.js +58 -29
- package/docs/templates/harness.schema.json +5 -0
- package/harness.json +4 -4
- package/package.json +1 -1
- package/dist/worker/console/static/assets/index-Bpa2qrc-.js +0 -29
- package/dist/worker/console/static/assets/index-BqfFDdnG.css +0 -1
|
@@ -50,7 +50,7 @@ export function parseHashRoute(hashValue) {
|
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
52
|
if (hash === "/dags") {
|
|
53
|
-
return { view: "
|
|
53
|
+
return { view: "dags" };
|
|
54
54
|
}
|
|
55
55
|
return { view: "dashboard" };
|
|
56
56
|
}
|
|
@@ -70,6 +70,53 @@ export function navigate(path) {
|
|
|
70
70
|
* Returns { filters: { status?, q? } } merged into route; unknown keys ignored.
|
|
71
71
|
* Base parseHashRoute shape is preserved for all existing views.
|
|
72
72
|
*/
|
|
73
|
+
export const DAG_HISTORY_DEFAULT_PAGE = 1;
|
|
74
|
+
export const DAG_HISTORY_DEFAULT_PAGE_SIZE = 20;
|
|
75
|
+
export const DAG_HISTORY_ALLOWED_PAGE_SIZES = [20, 50, 100];
|
|
76
|
+
|
|
77
|
+
export function clampDagHistoryPageSize(value) {
|
|
78
|
+
const n = Number.parseInt(String(value ?? ""), 10);
|
|
79
|
+
if (!Number.isFinite(n) || n <= 0) return DAG_HISTORY_DEFAULT_PAGE_SIZE;
|
|
80
|
+
if (DAG_HISTORY_ALLOWED_PAGE_SIZES.includes(n)) return n;
|
|
81
|
+
let best = DAG_HISTORY_DEFAULT_PAGE_SIZE;
|
|
82
|
+
let bestDist = Number.POSITIVE_INFINITY;
|
|
83
|
+
for (const allowed of DAG_HISTORY_ALLOWED_PAGE_SIZES) {
|
|
84
|
+
const dist = Math.abs(allowed - n);
|
|
85
|
+
if (dist < bestDist || (dist === bestDist && allowed < best)) {
|
|
86
|
+
best = allowed;
|
|
87
|
+
bestDist = dist;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return best;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function clampDagHistoryPage(value, totalPages = Number.POSITIVE_INFINITY) {
|
|
94
|
+
const n = Number.parseInt(String(value ?? ""), 10);
|
|
95
|
+
const safeTotal = Number.isFinite(totalPages)
|
|
96
|
+
? Math.max(1, Math.floor(totalPages))
|
|
97
|
+
: Number.POSITIVE_INFINITY;
|
|
98
|
+
if (!Number.isFinite(n) || n <= 0) return DAG_HISTORY_DEFAULT_PAGE;
|
|
99
|
+
return Math.min(Math.floor(n), safeTotal);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Parse page/pageSize for #/dags history route; illegal values fall back to defaults. */
|
|
103
|
+
export function parseDagHistoryQuery(hashValue) {
|
|
104
|
+
const raw = String(hashValue ?? "").replace(/^#/, "");
|
|
105
|
+
const qIndex = raw.indexOf("?");
|
|
106
|
+
const params =
|
|
107
|
+
qIndex >= 0 ? new URLSearchParams(raw.slice(qIndex + 1)) : new URLSearchParams();
|
|
108
|
+
return {
|
|
109
|
+
page: clampDagHistoryPage(params.get("page")),
|
|
110
|
+
pageSize: clampDagHistoryPageSize(params.get("pageSize")),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function buildDagHistoryHash(page, pageSize) {
|
|
115
|
+
const p = clampDagHistoryPage(page);
|
|
116
|
+
const size = clampDagHistoryPageSize(pageSize);
|
|
117
|
+
return `/dags?page=${p}&pageSize=${size}`;
|
|
118
|
+
}
|
|
119
|
+
|
|
73
120
|
export function parseHashFilters(hashValue) {
|
|
74
121
|
const raw = String(hashValue ?? "").replace(/^#/, "");
|
|
75
122
|
const qIndex = raw.indexOf("?");
|
|
@@ -88,6 +135,10 @@ export function parseHashRouteWithFilters(hashValue) {
|
|
|
88
135
|
const raw = String(hashValue ?? "");
|
|
89
136
|
const withoutQuery = raw.replace(/^#/, "").split("?")[0];
|
|
90
137
|
const base = parseHashRoute("#" + (withoutQuery || "/"));
|
|
138
|
+
if (base.view === "dags") {
|
|
139
|
+
const history = parseDagHistoryQuery(raw);
|
|
140
|
+
return { ...base, page: history.page, pageSize: history.pageSize };
|
|
141
|
+
}
|
|
91
142
|
const filters = parseHashFilters(raw);
|
|
92
143
|
if (Object.keys(filters).length === 0) return base;
|
|
93
144
|
return { ...base, filters };
|
|
@@ -98,6 +149,8 @@ export function buildHashPath(path, filters = {}) {
|
|
|
98
149
|
const params = new URLSearchParams();
|
|
99
150
|
if (filters.status) params.set("status", filters.status);
|
|
100
151
|
if (filters.q) params.set("q", filters.q);
|
|
152
|
+
if (filters.page != null) params.set("page", String(filters.page));
|
|
153
|
+
if (filters.pageSize != null) params.set("pageSize", String(filters.pageSize));
|
|
101
154
|
const qs = params.toString();
|
|
102
155
|
return qs ? `${base}?${qs}` : base;
|
|
103
156
|
}
|
|
@@ -19,6 +19,26 @@ export const uiState = {
|
|
|
19
19
|
poolTimer: null,
|
|
20
20
|
/** Pool page: auto-refresh opt-in (default false). */
|
|
21
21
|
poolAutoRefresh: false,
|
|
22
|
+
/** DAG history page request generation (drop late responses). */
|
|
23
|
+
dagHistoryRequestSeq: 0,
|
|
24
|
+
/** Last successful formal DAG history page payload. */
|
|
25
|
+
dagHistoryPage: null,
|
|
26
|
+
dagHistoryError: null,
|
|
27
|
+
dagHistoryLoading: false,
|
|
28
|
+
/** Light busy for cache-miss navigate / manual refresh (keeps old table). */
|
|
29
|
+
dagHistoryBusy: false,
|
|
30
|
+
dagHistoryDegraded: false,
|
|
31
|
+
/** Session-only page cache keyed by `${pageSize}:${page}`. */
|
|
32
|
+
dagHistoryCache: null,
|
|
33
|
+
/** In-flight adjacent prefetch map: cacheKey → generation (same-gen dedupe). */
|
|
34
|
+
dagHistoryPrefetchInFlight: null,
|
|
35
|
+
/**
|
|
36
|
+
* Prefetch generation; manual refresh bumps so older prefetches cannot
|
|
37
|
+
* write neighbor cache entries after invalidation.
|
|
38
|
+
*/
|
|
39
|
+
dagHistoryPrefetchGeneration: 0,
|
|
40
|
+
/** AbortController for the active formal history request. */
|
|
41
|
+
dagHistoryAbortController: null,
|
|
22
42
|
taskPollTimer: null,
|
|
23
43
|
runEventOffset: 0,
|
|
24
44
|
runEvents: [],
|