tickmarkr 1.90.8 → 1.92.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/README.md +12 -9
- package/dist/adapters/catalog-remote.d.ts +11 -1
- package/dist/adapters/catalog-remote.js +169 -19
- package/dist/adapters/catalog.js +59 -0
- package/dist/adapters/model-lints.d.ts +37 -2
- package/dist/adapters/model-lints.js +180 -36
- package/dist/adapters/registry.js +32 -6
- package/dist/brand.d.ts +2 -0
- package/dist/brand.js +13 -0
- package/dist/cli/commands/doctor.d.ts +12 -0
- package/dist/cli/commands/doctor.js +90 -20
- package/dist/cli/commands/fleet-picker.js +1 -1
- package/dist/cli/commands/fleet.d.ts +4 -4
- package/dist/cli/commands/fleet.js +198 -37
- package/dist/cli/commands/init.js +6 -4
- package/dist/compile/native.js +5 -4
- package/dist/config/config.d.ts +34 -1
- package/dist/config/config.js +101 -5
- package/dist/config/fleet-overlay.d.ts +9 -2
- package/dist/config/fleet-overlay.js +159 -14
- package/dist/gates/acceptance.js +13 -4
- package/dist/route/preference.d.ts +1 -1
- package/dist/route/preference.js +12 -2
- package/dist/route/router.js +31 -2
- package/dist/run/daemon.js +1 -1
- package/dist/tui/ink/components.d.ts +16 -1
- package/dist/tui/ink/components.js +16 -2
- package/dist/tui/ink/fleet-app.d.ts +57 -8
- package/dist/tui/ink/fleet-app.js +1228 -727
- package/dist/tui/ink/frame.d.ts +62 -0
- package/dist/tui/ink/frame.js +204 -0
- package/dist/tui/ink/init-app.d.ts +2 -1
- package/dist/tui/ink/init-app.js +28 -100
- package/package.json +1 -1
|
@@ -9,7 +9,20 @@ export declare function TextLines({ lines }: {
|
|
|
9
9
|
export declare function ToggleMark({ active }: {
|
|
10
10
|
active: boolean;
|
|
11
11
|
}): import("react").JSX.Element;
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* v1.90.9 (operator field report: "can't choose models for omp"): a list longer than the
|
|
14
|
+
* terminal rendered EVERY row, so the title, legend, and cursor scrolled off the top — omp's
|
|
15
|
+
* 218 unclassified models left the operator staring at a tail of unselectable rows. The window
|
|
16
|
+
* is cursor-centered and clamped; the markers say exactly what is elided and that the list is
|
|
17
|
+
* still fully reachable (arrows walk it, type-to-search narrows it).
|
|
18
|
+
*/
|
|
19
|
+
export declare function windowRows<T>(rows: T[], cursor: number, capacity: number): {
|
|
20
|
+
visible: T[];
|
|
21
|
+
start: number;
|
|
22
|
+
above: number;
|
|
23
|
+
below: number;
|
|
24
|
+
};
|
|
25
|
+
export declare function FleetListScreen({ title, legend, rows, cursor, details, filter, viewRows, }: {
|
|
13
26
|
title: string;
|
|
14
27
|
legend: string;
|
|
15
28
|
rows: FleetListRow[];
|
|
@@ -17,6 +30,8 @@ export declare function FleetListScreen({ title, legend, rows, cursor, details,
|
|
|
17
30
|
details?: string[];
|
|
18
31
|
/** active type-to-search string; rendered on the legend line so the operator sees the narrowing */
|
|
19
32
|
filter?: string;
|
|
33
|
+
/** list viewport capacity; rows beyond it window around the cursor with elision markers */
|
|
34
|
+
viewRows?: number;
|
|
20
35
|
}): import("react").JSX.Element;
|
|
21
36
|
export declare function FleetReviewScreen({ title, legend, diff, }: {
|
|
22
37
|
title: string;
|
|
@@ -17,8 +17,22 @@ export function ToggleMark({ active }) {
|
|
|
17
17
|
? _jsx(Text, { color: "ansi256(41)", children: GLYPHS.toggleActive })
|
|
18
18
|
: _jsx(Text, { dimColor: true, children: GLYPHS.toggleInactive });
|
|
19
19
|
}
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
/**
|
|
21
|
+
* v1.90.9 (operator field report: "can't choose models for omp"): a list longer than the
|
|
22
|
+
* terminal rendered EVERY row, so the title, legend, and cursor scrolled off the top — omp's
|
|
23
|
+
* 218 unclassified models left the operator staring at a tail of unselectable rows. The window
|
|
24
|
+
* is cursor-centered and clamped; the markers say exactly what is elided and that the list is
|
|
25
|
+
* still fully reachable (arrows walk it, type-to-search narrows it).
|
|
26
|
+
*/
|
|
27
|
+
export function windowRows(rows, cursor, capacity) {
|
|
28
|
+
if (capacity <= 0 || rows.length <= capacity)
|
|
29
|
+
return { visible: rows, start: 0, above: 0, below: 0 };
|
|
30
|
+
const start = Math.min(Math.max(cursor - Math.floor(capacity / 2), 0), rows.length - capacity);
|
|
31
|
+
return { visible: rows.slice(start, start + capacity), start, above: start, below: rows.length - start - capacity };
|
|
32
|
+
}
|
|
33
|
+
export function FleetListScreen({ title, legend, rows, cursor, details = [], filter, viewRows, }) {
|
|
34
|
+
const { visible, start, above, below } = windowRows(rows, cursor, viewRows ?? Number.POSITIVE_INFINITY);
|
|
35
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: title }), _jsx(Text, { dimColor: true, children: filter ? `${legend} · search: ${filter}` : legend }), above > 0 && _jsxs(Text, { dimColor: true, children: [" \u2026 ", above, " above"] }), visible.map((row, index) => (_jsxs(Text, { bold: start + index === cursor, children: [start + index === cursor ? `${GLYPHS.pointer} ` : " ", row.content] }, row.id))), below > 0 && _jsxs(Text, { dimColor: true, children: [" \u2026 ", below, " below \u2014 type to search"] }), _jsx(TextLines, { lines: details })] }));
|
|
22
36
|
}
|
|
23
37
|
export function FleetReviewScreen({ title, legend, diff, }) {
|
|
24
38
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: title }), _jsx(Text, { dimColor: true, children: legend }), _jsx(Text, { children: diff })] }));
|
|
@@ -42,13 +42,32 @@ type AgentCli = {
|
|
|
42
42
|
version: string;
|
|
43
43
|
authed: boolean;
|
|
44
44
|
};
|
|
45
|
+
export type FleetModelSuggestion = {
|
|
46
|
+
tier: Tier;
|
|
47
|
+
note: string;
|
|
48
|
+
};
|
|
49
|
+
/** Catalog + probe metadata rendered as the browser's metadata columns (omp-style). */
|
|
50
|
+
export type FleetModelEvidence = {
|
|
51
|
+
contextWindow?: number;
|
|
52
|
+
outputWindow?: number;
|
|
53
|
+
inputCostPerMtok?: number;
|
|
54
|
+
outputCostPerMtok?: number;
|
|
55
|
+
/** doctor's model probe wall clock (modelAuth.durationMs) — the "how fast did it answer" column */
|
|
56
|
+
probeMs?: number;
|
|
57
|
+
/** OBS-519: doctor's failed model-auth verdict reason — the row must not render like a healthy one */
|
|
58
|
+
unauthed?: string;
|
|
59
|
+
};
|
|
45
60
|
export type FleetModelGroup = {
|
|
46
61
|
adapter: string;
|
|
47
62
|
vendor?: string;
|
|
63
|
+
/** configured billing channel (cfg.tiers.<adapter>.channel) — prices render for api, quota for sub */
|
|
64
|
+
channel?: "sub" | "api";
|
|
48
65
|
rows: Array<{
|
|
49
66
|
model: string;
|
|
50
67
|
tier?: Tier;
|
|
51
68
|
detectedAt?: string;
|
|
69
|
+
suggestion?: FleetModelSuggestion;
|
|
70
|
+
evidence?: FleetModelEvidence;
|
|
52
71
|
}>;
|
|
53
72
|
};
|
|
54
73
|
export type FleetClassification = {
|
|
@@ -76,7 +95,7 @@ export type FleetCandidateOption = {
|
|
|
76
95
|
};
|
|
77
96
|
};
|
|
78
97
|
export declare function formatDoctorAge(ageMs: number | null): string;
|
|
79
|
-
export declare function FleetApp({ ageMs, agents, initialDenyAdapters, initialDenyModels, modelGroups, initialMode, modeOptions, initialMap, modePreview, shapeRows, candidatesForShape, preferOptionsForShape, initialSteering, steeringOptionsFor, reviewOverlay, reloadGuard, entry, initialJudge, judgeSeats, }: {
|
|
98
|
+
export declare function FleetApp({ ageMs, agents, initialDenyAdapters, initialDenyModels, modelGroups, initialMode, modeOptions, initialMap, modePreview, shapeRows, candidatesForShape, preferOptionsForShape, initialSteering, steeringOptionsFor, reviewOverlay, reloadGuard, entry, initialJudge, judgeSeats, viewRows, frameColumns, frameRows, }: {
|
|
80
99
|
ageMs: number | null;
|
|
81
100
|
agents: AgentCli[];
|
|
82
101
|
initialDenyAdapters: string[];
|
|
@@ -85,9 +104,21 @@ export declare function FleetApp({ ageMs, agents, initialDenyAdapters, initialDe
|
|
|
85
104
|
initialMode: RoutingMode;
|
|
86
105
|
modeOptions: FleetModeOption[];
|
|
87
106
|
initialMap: Record<string, MapEntry>;
|
|
88
|
-
modePreview: (mode: RoutingMode, map: Record<string, MapEntry
|
|
89
|
-
|
|
90
|
-
|
|
107
|
+
modePreview: (mode: RoutingMode, map: Record<string, MapEntry>, deny: {
|
|
108
|
+
adapters: string[];
|
|
109
|
+
models: string[];
|
|
110
|
+
}) => string[];
|
|
111
|
+
shapeRows: (mode: RoutingMode, map: Record<string, MapEntry>, deny: {
|
|
112
|
+
adapters: string[];
|
|
113
|
+
models: string[];
|
|
114
|
+
}) => FleetShapeRow[];
|
|
115
|
+
candidatesForShape: (shape: Shape, mode: RoutingMode, map: Record<string, MapEntry>, deny: {
|
|
116
|
+
adapters: string[];
|
|
117
|
+
models: string[];
|
|
118
|
+
}) => {
|
|
119
|
+
rows: FleetCandidateOption[];
|
|
120
|
+
excludedNote?: string;
|
|
121
|
+
};
|
|
91
122
|
preferOptionsForShape: (shape: Shape, current: string[]) => string[];
|
|
92
123
|
initialSteering: Record<FleetSteeringKey, string[] | undefined>;
|
|
93
124
|
steeringOptionsFor: (which: FleetSteeringKey, current: string[]) => string[];
|
|
@@ -98,6 +129,12 @@ export declare function FleetApp({ ageMs, agents, initialDenyAdapters, initialDe
|
|
|
98
129
|
initialJudge?: string;
|
|
99
130
|
/** discovered adapter:model seats — the judge picker universe */
|
|
100
131
|
judgeSeats?: string[];
|
|
132
|
+
/** list viewport capacity (terminal rows minus chrome) — long lists window around the cursor */
|
|
133
|
+
viewRows?: number;
|
|
134
|
+
/** terminal width the frame lays out against */
|
|
135
|
+
frameColumns?: number;
|
|
136
|
+
/** terminal height — set only on a real TTY so the footer sticks to the bottom */
|
|
137
|
+
frameRows?: number;
|
|
101
138
|
}): import("react").JSX.Element;
|
|
102
139
|
export declare function runFleetInkEditor({ ageMs, adapters, health, initialDenyAdapters, initialDenyModels, modelGroups, initialMode, modeOptions, initialMap, modePreview, shapeRows, candidatesForShape, preferOptionsForShape, initialSteering, steeringOptionsFor, reviewOverlay, reloadGuard, entry, initialJudge, judgeSeats, initialInput, input, output, debug, }: {
|
|
103
140
|
ageMs: number | null;
|
|
@@ -109,15 +146,27 @@ export declare function runFleetInkEditor({ ageMs, adapters, health, initialDeny
|
|
|
109
146
|
initialMode: RoutingMode;
|
|
110
147
|
modeOptions: FleetModeOption[];
|
|
111
148
|
initialMap: Record<string, MapEntry>;
|
|
112
|
-
modePreview: (mode: RoutingMode, map: Record<string, MapEntry
|
|
113
|
-
|
|
114
|
-
|
|
149
|
+
modePreview: (mode: RoutingMode, map: Record<string, MapEntry>, deny: {
|
|
150
|
+
adapters: string[];
|
|
151
|
+
models: string[];
|
|
152
|
+
}) => string[];
|
|
153
|
+
shapeRows: (mode: RoutingMode, map: Record<string, MapEntry>, deny: {
|
|
154
|
+
adapters: string[];
|
|
155
|
+
models: string[];
|
|
156
|
+
}) => FleetShapeRow[];
|
|
157
|
+
candidatesForShape: (shape: Shape, mode: RoutingMode, map: Record<string, MapEntry>, deny: {
|
|
158
|
+
adapters: string[];
|
|
159
|
+
models: string[];
|
|
160
|
+
}) => {
|
|
161
|
+
rows: FleetCandidateOption[];
|
|
162
|
+
excludedNote?: string;
|
|
163
|
+
};
|
|
115
164
|
preferOptionsForShape: (shape: Shape, current: string[]) => string[];
|
|
116
165
|
initialSteering: Record<FleetSteeringKey, string[] | undefined>;
|
|
117
166
|
steeringOptionsFor: (which: FleetSteeringKey, current: string[]) => string[];
|
|
118
167
|
reviewOverlay: (state: FleetEditorState) => FleetOverlayReview;
|
|
119
168
|
reloadGuard: (bytes: string) => string | null;
|
|
120
|
-
/** "presets"
|
|
169
|
+
/** "presets" = init's entry: Esc in the browser is HOME to the preset overlay, not quit */
|
|
121
170
|
entry?: "presets" | "probe";
|
|
122
171
|
initialJudge?: string;
|
|
123
172
|
judgeSeats?: string[];
|