oc2token 0.1.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/LICENSE +21 -0
- package/README.md +399 -0
- package/dist/src/accounting/index.d.ts +1 -0
- package/dist/src/accounting/index.js +2 -0
- package/dist/src/accounting/index.js.map +1 -0
- package/dist/src/accounting/reducer.d.ts +21 -0
- package/dist/src/accounting/reducer.js +105 -0
- package/dist/src/accounting/reducer.js.map +1 -0
- package/dist/src/antigravity/discovery.d.ts +18 -0
- package/dist/src/antigravity/discovery.js +95 -0
- package/dist/src/antigravity/discovery.js.map +1 -0
- package/dist/src/antigravity/doctor.d.ts +6 -0
- package/dist/src/antigravity/doctor.js +78 -0
- package/dist/src/antigravity/doctor.js.map +1 -0
- package/dist/src/antigravity/index.d.ts +3 -0
- package/dist/src/antigravity/index.js +4 -0
- package/dist/src/antigravity/index.js.map +1 -0
- package/dist/src/antigravity/proto.d.ts +73 -0
- package/dist/src/antigravity/proto.js +259 -0
- package/dist/src/antigravity/proto.js.map +1 -0
- package/dist/src/antigravity/scanner.d.ts +8 -0
- package/dist/src/antigravity/scanner.js +552 -0
- package/dist/src/antigravity/scanner.js.map +1 -0
- package/dist/src/application.d.ts +73 -0
- package/dist/src/application.js +657 -0
- package/dist/src/application.js.map +1 -0
- package/dist/src/cache/filesystem.d.ts +8 -0
- package/dist/src/cache/filesystem.js +70 -0
- package/dist/src/cache/filesystem.js.map +1 -0
- package/dist/src/cache/index.d.ts +5 -0
- package/dist/src/cache/index.js +6 -0
- package/dist/src/cache/index.js.map +1 -0
- package/dist/src/cache/lock.d.ts +40 -0
- package/dist/src/cache/lock.js +227 -0
- package/dist/src/cache/lock.js.map +1 -0
- package/dist/src/cache/schema.d.ts +45 -0
- package/dist/src/cache/schema.js +308 -0
- package/dist/src/cache/schema.js.map +1 -0
- package/dist/src/cache/store.d.ts +46 -0
- package/dist/src/cache/store.js +396 -0
- package/dist/src/cache/store.js.map +1 -0
- package/dist/src/cache/types.d.ts +130 -0
- package/dist/src/cache/types.js +6 -0
- package/dist/src/cache/types.js.map +1 -0
- package/dist/src/cli.d.ts +8 -0
- package/dist/src/cli.js +874 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/codex/discovery.d.ts +6 -0
- package/dist/src/codex/discovery.js +88 -0
- package/dist/src/codex/discovery.js.map +1 -0
- package/dist/src/codex/doctor.d.ts +6 -0
- package/dist/src/codex/doctor.js +52 -0
- package/dist/src/codex/doctor.js.map +1 -0
- package/dist/src/codex/index.d.ts +3 -0
- package/dist/src/codex/index.js +3 -0
- package/dist/src/codex/index.js.map +1 -0
- package/dist/src/codex/scanner.d.ts +6 -0
- package/dist/src/codex/scanner.js +487 -0
- package/dist/src/codex/scanner.js.map +1 -0
- package/dist/src/codex/types.d.ts +31 -0
- package/dist/src/codex/types.js +5 -0
- package/dist/src/codex/types.js.map +1 -0
- package/dist/src/collector/collector.d.ts +15 -0
- package/dist/src/collector/collector.js +597 -0
- package/dist/src/collector/collector.js.map +1 -0
- package/dist/src/collector/index.d.ts +3 -0
- package/dist/src/collector/index.js +3 -0
- package/dist/src/collector/index.js.map +1 -0
- package/dist/src/collector/types.d.ts +55 -0
- package/dist/src/collector/types.js +18 -0
- package/dist/src/collector/types.js.map +1 -0
- package/dist/src/dashboard/render/ansi.d.ts +53 -0
- package/dist/src/dashboard/render/ansi.js +106 -0
- package/dist/src/dashboard/render/ansi.js.map +1 -0
- package/dist/src/dashboard/render/dashboard.d.ts +13 -0
- package/dist/src/dashboard/render/dashboard.js +750 -0
- package/dist/src/dashboard/render/dashboard.js.map +1 -0
- package/dist/src/dashboard/render/format.d.ts +23 -0
- package/dist/src/dashboard/render/format.js +169 -0
- package/dist/src/dashboard/render/format.js.map +1 -0
- package/dist/src/dashboard/render/redraw.d.ts +13 -0
- package/dist/src/dashboard/render/redraw.js +24 -0
- package/dist/src/dashboard/render/redraw.js.map +1 -0
- package/dist/src/dashboard/render/types.d.ts +83 -0
- package/dist/src/dashboard/render/types.js +528 -0
- package/dist/src/dashboard/render/types.js.map +1 -0
- package/dist/src/dashboard/scheduler/index.d.ts +1 -0
- package/dist/src/dashboard/scheduler/index.js +2 -0
- package/dist/src/dashboard/scheduler/index.js.map +1 -0
- package/dist/src/dashboard/scheduler/refresh-scheduler.d.ts +46 -0
- package/dist/src/dashboard/scheduler/refresh-scheduler.js +137 -0
- package/dist/src/dashboard/scheduler/refresh-scheduler.js.map +1 -0
- package/dist/src/dashboard/settings/index.d.ts +25 -0
- package/dist/src/dashboard/settings/index.js +162 -0
- package/dist/src/dashboard/settings/index.js.map +1 -0
- package/dist/src/dashboard/state/index.d.ts +2 -0
- package/dist/src/dashboard/state/index.js +3 -0
- package/dist/src/dashboard/state/index.js.map +1 -0
- package/dist/src/dashboard/state/refresh-coordinator.d.ts +72 -0
- package/dist/src/dashboard/state/refresh-coordinator.js +346 -0
- package/dist/src/dashboard/state/refresh-coordinator.js.map +1 -0
- package/dist/src/dashboard/state/types.d.ts +68 -0
- package/dist/src/dashboard/state/types.js +2 -0
- package/dist/src/dashboard/state/types.js.map +1 -0
- package/dist/src/domain/contracts.d.ts +219 -0
- package/dist/src/domain/contracts.js +2 -0
- package/dist/src/domain/contracts.js.map +1 -0
- package/dist/src/domain/errors.d.ts +25 -0
- package/dist/src/domain/errors.js +65 -0
- package/dist/src/domain/errors.js.map +1 -0
- package/dist/src/domain/index.d.ts +5 -0
- package/dist/src/domain/index.js +6 -0
- package/dist/src/domain/index.js.map +1 -0
- package/dist/src/domain/records.d.ts +59 -0
- package/dist/src/domain/records.js +141 -0
- package/dist/src/domain/records.js.map +1 -0
- package/dist/src/domain/tokens.d.ts +51 -0
- package/dist/src/domain/tokens.js +93 -0
- package/dist/src/domain/tokens.js.map +1 -0
- package/dist/src/domain/windows.d.ts +59 -0
- package/dist/src/domain/windows.js +272 -0
- package/dist/src/domain/windows.js.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/opencode/adapter.d.ts +47 -0
- package/dist/src/opencode/adapter.js +118 -0
- package/dist/src/opencode/adapter.js.map +1 -0
- package/dist/src/opencode/client.d.ts +64 -0
- package/dist/src/opencode/client.js +118 -0
- package/dist/src/opencode/client.js.map +1 -0
- package/dist/src/opencode/doctor.d.ts +28 -0
- package/dist/src/opencode/doctor.js +82 -0
- package/dist/src/opencode/doctor.js.map +1 -0
- package/dist/src/opencode/index.d.ts +5 -0
- package/dist/src/opencode/index.js +6 -0
- package/dist/src/opencode/index.js.map +1 -0
- package/dist/src/opencode/stats.d.ts +8 -0
- package/dist/src/opencode/stats.js +174 -0
- package/dist/src/opencode/stats.js.map +1 -0
- package/dist/src/opencode/transport.d.ts +54 -0
- package/dist/src/opencode/transport.js +621 -0
- package/dist/src/opencode/transport.js.map +1 -0
- package/dist/src/output/index.d.ts +20 -0
- package/dist/src/output/index.js +46 -0
- package/dist/src/output/index.js.map +1 -0
- package/dist/src/output/json.d.ts +72 -0
- package/dist/src/output/json.js +133 -0
- package/dist/src/output/json.js.map +1 -0
- package/dist/src/output/table.d.ts +4 -0
- package/dist/src/output/table.js +81 -0
- package/dist/src/output/table.js.map +1 -0
- package/dist/src/pricing/index.d.ts +1 -0
- package/dist/src/pricing/index.js +2 -0
- package/dist/src/pricing/index.js.map +1 -0
- package/dist/src/pricing/pricing.d.ts +19 -0
- package/dist/src/pricing/pricing.js +441 -0
- package/dist/src/pricing/pricing.js.map +1 -0
- package/package.json +27 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { DomainError } from "./errors.js";
|
|
2
|
+
export const USAGE_WINDOW_KINDS = ["hour", "day", "week"];
|
|
3
|
+
const HOUR_MS = 60 * 60 * 1000;
|
|
4
|
+
const DAY_MS = 24 * HOUR_MS;
|
|
5
|
+
const ISO_WEEK_DAYS = 7;
|
|
6
|
+
function assertValidInstant(value, name) {
|
|
7
|
+
if (!(value instanceof Date) || Number.isNaN(value.getTime())) {
|
|
8
|
+
throw new DomainError("invalid-date", `${name} must be a valid Date`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function assertTimeZone(timezone) {
|
|
12
|
+
if (typeof timezone !== "string" || timezone.trim().length === 0) {
|
|
13
|
+
throw new DomainError("invalid-timezone", "timezone must not be empty");
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
// Constructing the formatter is the portable way to validate an IANA zone
|
|
17
|
+
// without depending on a third-party time-zone database.
|
|
18
|
+
new Intl.DateTimeFormat("en-US-u-ca-gregory", { timeZone: timezone }).format();
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
throw new DomainError("invalid-timezone", `Invalid IANA timezone: ${timezone}`, {
|
|
22
|
+
cause: error,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function utcDateTime(value) {
|
|
27
|
+
const result = new Date(0);
|
|
28
|
+
result.setUTCFullYear(value.year, value.month - 1, value.day);
|
|
29
|
+
result.setUTCHours(value.hour, value.minute, value.second, 0);
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
function partsFor(instant, timezone) {
|
|
33
|
+
assertValidInstant(instant, "instant");
|
|
34
|
+
const formatter = new Intl.DateTimeFormat("en-US-u-ca-gregory-hc-h23", {
|
|
35
|
+
timeZone: timezone,
|
|
36
|
+
year: "numeric",
|
|
37
|
+
month: "2-digit",
|
|
38
|
+
day: "2-digit",
|
|
39
|
+
hour: "2-digit",
|
|
40
|
+
minute: "2-digit",
|
|
41
|
+
second: "2-digit",
|
|
42
|
+
hourCycle: "h23",
|
|
43
|
+
});
|
|
44
|
+
const parts = new Map(formatter
|
|
45
|
+
.formatToParts(instant)
|
|
46
|
+
.filter((part) => part.type !== "literal")
|
|
47
|
+
.map((part) => [part.type, part.value]));
|
|
48
|
+
const year = Number(parts.get("year"));
|
|
49
|
+
const month = Number(parts.get("month"));
|
|
50
|
+
const day = Number(parts.get("day"));
|
|
51
|
+
const hour = Number(parts.get("hour"));
|
|
52
|
+
const minute = Number(parts.get("minute"));
|
|
53
|
+
const second = Number(parts.get("second"));
|
|
54
|
+
if (![year, month, day, hour, minute, second].every(Number.isFinite)) {
|
|
55
|
+
throw new DomainError("invalid-timezone", "Timezone formatting did not return a complete date");
|
|
56
|
+
}
|
|
57
|
+
return { year, month, day, hour: hour === 24 ? 0 : hour, minute, second };
|
|
58
|
+
}
|
|
59
|
+
function localDateAt(instant, timezone) {
|
|
60
|
+
const { year, month, day } = partsFor(instant, timezone);
|
|
61
|
+
return { year, month, day };
|
|
62
|
+
}
|
|
63
|
+
function sameDateTime(left, right) {
|
|
64
|
+
return (left.year === right.year &&
|
|
65
|
+
left.month === right.month &&
|
|
66
|
+
left.day === right.day &&
|
|
67
|
+
left.hour === right.hour &&
|
|
68
|
+
left.minute === right.minute &&
|
|
69
|
+
left.second === right.second);
|
|
70
|
+
}
|
|
71
|
+
function offsetAt(instant, timezone) {
|
|
72
|
+
// Intl exposes local calendar parts rather than an offset. Formatting a
|
|
73
|
+
// whole-second instant as UTC and subtracting the instant recovers that
|
|
74
|
+
// offset, including changes caused by DST.
|
|
75
|
+
const instantMilliseconds = Math.floor(instant.getTime() / 1000) * 1000;
|
|
76
|
+
const local = partsFor(new Date(instantMilliseconds), timezone);
|
|
77
|
+
return utcDateTime(local).getTime() - instantMilliseconds;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Resolve a local civil time to an instant without assuming every day is 24h.
|
|
81
|
+
* Ambiguous local times use the earliest matching instant, which makes a
|
|
82
|
+
* repeated midnight the start of the first occurrence. Midnight normally
|
|
83
|
+
* exists even on DST transition days; the iterative fallback also gives a
|
|
84
|
+
* deterministic answer for historical zones that skip a civil time.
|
|
85
|
+
*/
|
|
86
|
+
function instantAtLocal(when, timezone) {
|
|
87
|
+
const targetMilliseconds = utcDateTime(when).getTime();
|
|
88
|
+
const possibleOffsets = new Set();
|
|
89
|
+
// Sampling around the naive UTC value finds both sides of a DST transition,
|
|
90
|
+
// including the two offsets that can map to an ambiguous local time.
|
|
91
|
+
for (let hour = -72; hour <= 72; hour += 6) {
|
|
92
|
+
possibleOffsets.add(offsetAt(new Date(targetMilliseconds + hour * HOUR_MS), timezone));
|
|
93
|
+
}
|
|
94
|
+
const matches = [...possibleOffsets]
|
|
95
|
+
.map((offset) => new Date(targetMilliseconds - offset))
|
|
96
|
+
.filter((candidate) => sameDateTime(partsFor(candidate, timezone), when));
|
|
97
|
+
if (matches.length > 0) {
|
|
98
|
+
return new Date(Math.min(...matches.map((candidate) => candidate.getTime())));
|
|
99
|
+
}
|
|
100
|
+
// A local time can be skipped by a timezone rule. Iterate the offset until
|
|
101
|
+
// stable instead of applying a fixed offset or assuming a 24-hour day.
|
|
102
|
+
let candidateMilliseconds = targetMilliseconds;
|
|
103
|
+
for (let attempt = 0; attempt < 8; attempt += 1) {
|
|
104
|
+
const nextMilliseconds = targetMilliseconds - offsetAt(new Date(candidateMilliseconds), timezone);
|
|
105
|
+
if (nextMilliseconds === candidateMilliseconds) {
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
candidateMilliseconds = nextMilliseconds;
|
|
109
|
+
}
|
|
110
|
+
return new Date(candidateMilliseconds);
|
|
111
|
+
}
|
|
112
|
+
function civilDayNumber(date) {
|
|
113
|
+
return Math.floor(utcDateTime({ ...date, hour: 0, minute: 0, second: 0 }).getTime() / DAY_MS);
|
|
114
|
+
}
|
|
115
|
+
function civilDateFromDayNumber(dayNumber) {
|
|
116
|
+
const date = new Date(dayNumber * DAY_MS);
|
|
117
|
+
return {
|
|
118
|
+
year: date.getUTCFullYear(),
|
|
119
|
+
month: date.getUTCMonth() + 1,
|
|
120
|
+
day: date.getUTCDate(),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function addCivilDays(date, days) {
|
|
124
|
+
return civilDateFromDayNumber(civilDayNumber(date) + days);
|
|
125
|
+
}
|
|
126
|
+
function dateString(date) {
|
|
127
|
+
return `${String(date.year).padStart(4, "0")}-${String(date.month).padStart(2, "0")}-${String(date.day).padStart(2, "0")}`;
|
|
128
|
+
}
|
|
129
|
+
function isoDayOfWeek(date) {
|
|
130
|
+
const day = new Date(civilDayNumber(date) * DAY_MS).getUTCDay();
|
|
131
|
+
return day === 0 ? 7 : day;
|
|
132
|
+
}
|
|
133
|
+
function isoWeekInfo(date) {
|
|
134
|
+
const monday = addCivilDays(date, 1 - isoDayOfWeek(date));
|
|
135
|
+
const thursday = addCivilDays(monday, 3);
|
|
136
|
+
const isoYear = thursday.year;
|
|
137
|
+
// ISO week 1 is the week containing January 4, not necessarily the week
|
|
138
|
+
// containing January 1 (the latter can still belong to the prior ISO year).
|
|
139
|
+
const fourthJanuary = { year: isoYear, month: 1, day: 4 };
|
|
140
|
+
const firstMonday = addCivilDays(fourthJanuary, 1 - isoDayOfWeek(fourthJanuary));
|
|
141
|
+
const week = Math.floor((civilDayNumber(monday) - civilDayNumber(firstMonday)) / ISO_WEEK_DAYS) + 1;
|
|
142
|
+
return { year: isoYear, week, monday };
|
|
143
|
+
}
|
|
144
|
+
function assertWindowRange(from, to, kind) {
|
|
145
|
+
assertValidInstant(from, `${kind}.from`);
|
|
146
|
+
assertValidInstant(to, `${kind}.to`);
|
|
147
|
+
if (from.getTime() >= to.getTime()) {
|
|
148
|
+
throw new DomainError("invalid-window", `${kind} window must have from < to`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
export function createUsageWindow(kind, now, timezone) {
|
|
152
|
+
assertValidInstant(now, "now");
|
|
153
|
+
assertTimeZone(timezone);
|
|
154
|
+
if (!USAGE_WINDOW_KINDS.includes(kind)) {
|
|
155
|
+
throw new DomainError("invalid-window", `Unknown usage window kind: ${String(kind)}`);
|
|
156
|
+
}
|
|
157
|
+
if (kind === "hour") {
|
|
158
|
+
const from = new Date(now.getTime() - HOUR_MS);
|
|
159
|
+
const to = new Date(now.getTime());
|
|
160
|
+
assertWindowRange(from, to, kind);
|
|
161
|
+
return {
|
|
162
|
+
kind,
|
|
163
|
+
semantics: "rolling-hour",
|
|
164
|
+
timezone,
|
|
165
|
+
from,
|
|
166
|
+
to,
|
|
167
|
+
label: "last 60 minutes",
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
const currentDate = localDateAt(now, timezone);
|
|
171
|
+
const dayStart = instantAtLocal({ ...currentDate, hour: 0, minute: 0, second: 0 }, timezone);
|
|
172
|
+
if (kind === "day") {
|
|
173
|
+
const nextDate = addCivilDays(currentDate, 1);
|
|
174
|
+
const nextStart = instantAtLocal({ ...nextDate, hour: 0, minute: 0, second: 0 }, timezone);
|
|
175
|
+
assertWindowRange(dayStart, nextStart, kind);
|
|
176
|
+
const localDate = dateString(currentDate);
|
|
177
|
+
return {
|
|
178
|
+
kind,
|
|
179
|
+
semantics: "local-day",
|
|
180
|
+
timezone,
|
|
181
|
+
from: dayStart,
|
|
182
|
+
to: nextStart,
|
|
183
|
+
localDate,
|
|
184
|
+
label: localDate,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
const week = isoWeekInfo(currentDate);
|
|
188
|
+
const nextMonday = addCivilDays(week.monday, ISO_WEEK_DAYS);
|
|
189
|
+
const weekStart = instantAtLocal({ ...week.monday, hour: 0, minute: 0, second: 0 }, timezone);
|
|
190
|
+
const weekEnd = instantAtLocal({ ...nextMonday, hour: 0, minute: 0, second: 0 }, timezone);
|
|
191
|
+
assertWindowRange(weekStart, weekEnd, kind);
|
|
192
|
+
const isoWeekLabel = `${String(week.year).padStart(4, "0")}-W${String(week.week).padStart(2, "0")}`;
|
|
193
|
+
return {
|
|
194
|
+
kind,
|
|
195
|
+
semantics: "iso-week",
|
|
196
|
+
timezone,
|
|
197
|
+
from: weekStart,
|
|
198
|
+
to: weekEnd,
|
|
199
|
+
isoWeekYear: week.year,
|
|
200
|
+
isoWeek: week.week,
|
|
201
|
+
isoWeekLabel,
|
|
202
|
+
label: isoWeekLabel,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/** Build all v1 windows from the same captured instant, avoiding boundary drift. */
|
|
206
|
+
export function createUsageWindows(now, timezone) {
|
|
207
|
+
return {
|
|
208
|
+
hour: createUsageWindow("hour", now, timezone),
|
|
209
|
+
day: createUsageWindow("day", now, timezone),
|
|
210
|
+
week: createUsageWindow("week", now, timezone),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function trendBucketLabel(instant, timezone, kind) {
|
|
214
|
+
try {
|
|
215
|
+
return new Intl.DateTimeFormat("en-CA", kind === "week"
|
|
216
|
+
? { timeZone: timezone, year: "numeric", month: "2-digit", day: "2-digit" }
|
|
217
|
+
: { timeZone: timezone, hour: "2-digit", minute: "2-digit", hourCycle: "h23" }).format(instant);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return instant.toISOString();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Build the stable trend intervals for a requested window. Calendar-day
|
|
225
|
+
* buckets advance in elapsed time from the local-day bounds, which preserves
|
|
226
|
+
* both missing and repeated hours on DST transition days. Week buckets use
|
|
227
|
+
* local midnights, so a DST day changes the bucket duration without changing
|
|
228
|
+
* the seven-day shape of the ISO week.
|
|
229
|
+
*/
|
|
230
|
+
export function createUsageTrendBuckets(window) {
|
|
231
|
+
assertTimeZone(window.timezone);
|
|
232
|
+
assertWindowRange(window.from, window.to, window.kind);
|
|
233
|
+
const buckets = [];
|
|
234
|
+
const append = (from, to) => {
|
|
235
|
+
const clippedFrom = Math.max(window.from.getTime(), from.getTime());
|
|
236
|
+
const clippedTo = Math.min(window.to.getTime(), to.getTime());
|
|
237
|
+
if (clippedFrom >= clippedTo)
|
|
238
|
+
return;
|
|
239
|
+
const bucketFrom = new Date(clippedFrom);
|
|
240
|
+
buckets.push({
|
|
241
|
+
label: trendBucketLabel(bucketFrom, window.timezone, window.kind),
|
|
242
|
+
from: bucketFrom,
|
|
243
|
+
to: new Date(clippedTo),
|
|
244
|
+
});
|
|
245
|
+
};
|
|
246
|
+
if (window.kind === "hour") {
|
|
247
|
+
const bucketDuration = 5 * 60 * 1_000;
|
|
248
|
+
for (let cursor = window.from.getTime(); cursor < window.to.getTime(); cursor += bucketDuration) {
|
|
249
|
+
append(new Date(cursor), new Date(Math.min(window.to.getTime(), cursor + bucketDuration)));
|
|
250
|
+
}
|
|
251
|
+
return buckets;
|
|
252
|
+
}
|
|
253
|
+
if (window.kind === "day") {
|
|
254
|
+
const bucketDuration = HOUR_MS;
|
|
255
|
+
for (let cursor = window.from.getTime(); cursor < window.to.getTime(); cursor += bucketDuration) {
|
|
256
|
+
append(new Date(cursor), new Date(Math.min(window.to.getTime(), cursor + bucketDuration)));
|
|
257
|
+
}
|
|
258
|
+
return buckets;
|
|
259
|
+
}
|
|
260
|
+
const localStart = localDateAt(window.from, window.timezone);
|
|
261
|
+
for (let day = 0; day < ISO_WEEK_DAYS; day += 1) {
|
|
262
|
+
const fromLocal = addCivilDays(localStart, day);
|
|
263
|
+
const toLocal = addCivilDays(localStart, day + 1);
|
|
264
|
+
append(instantAtLocal({ ...fromLocal, hour: 0, minute: 0, second: 0 }, window.timezone), instantAtLocal({ ...toLocal, hour: 0, minute: 0, second: 0 }, window.timezone));
|
|
265
|
+
}
|
|
266
|
+
return buckets;
|
|
267
|
+
}
|
|
268
|
+
export function containsInstant(window, instant) {
|
|
269
|
+
assertValidInstant(instant, "instant");
|
|
270
|
+
return instant.getTime() >= window.from.getTime() && instant.getTime() < window.to.getTime();
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=windows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows.js","sourceRoot":"","sources":["../../../src/domain/windows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./application.js";
|
|
2
|
+
export * from "./cache/index.js";
|
|
3
|
+
export * from "./collector/collector.js";
|
|
4
|
+
export { intervalUnion } from "./collector/types.js";
|
|
5
|
+
export type { CollectorOptions } from "./collector/types.js";
|
|
6
|
+
export * from "./dashboard/state/refresh-coordinator.js";
|
|
7
|
+
export * from "./domain/index.js";
|
|
8
|
+
export * from "./opencode/index.js";
|
|
9
|
+
export * from "./output/index.js";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./application.js";
|
|
2
|
+
export * from "./cache/index.js";
|
|
3
|
+
export * from "./collector/collector.js";
|
|
4
|
+
export { intervalUnion } from "./collector/types.js";
|
|
5
|
+
export * from "./dashboard/state/refresh-coordinator.js";
|
|
6
|
+
export * from "./domain/index.js";
|
|
7
|
+
export * from "./opencode/index.js";
|
|
8
|
+
export * from "./output/index.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,cAAc,0CAA0C,CAAC;AACzD,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type CollectionRequest, type CollectionResult, type MessageListRequest, type MessagePage, type OpenCodeAssistantMessage, type OpenCodeSession, type OpenCodeSessionStats, type OpenCodeTransport, type SessionListRequest, type SessionPage, type UsageSource, type UsageStatsRange } from "../domain/index.js";
|
|
2
|
+
import { type ConnectionOptions, type OpenCodeConnection as ClientConnection } from "./client.js";
|
|
3
|
+
import type { Endpoint } from "@opencode-ai/client/service";
|
|
4
|
+
import { type DoctorOptions, type DoctorReport } from "./doctor.js";
|
|
5
|
+
import { type StatsRequestOptions } from "./transport.js";
|
|
6
|
+
export interface OpenCodeAdapterOptions extends ConnectionOptions {
|
|
7
|
+
readonly transport?: OpenCodeTransport;
|
|
8
|
+
readonly pageSize?: number;
|
|
9
|
+
readonly maxAttempts?: number;
|
|
10
|
+
readonly baseDelayMs?: number;
|
|
11
|
+
readonly maxDelayMs?: number;
|
|
12
|
+
readonly jitter?: number;
|
|
13
|
+
readonly random?: () => number;
|
|
14
|
+
readonly sleep?: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
|
|
15
|
+
readonly requestTimeoutMs?: number;
|
|
16
|
+
}
|
|
17
|
+
/** Facade that keeps service lifecycle, transport, stats, and diagnostics together. */
|
|
18
|
+
export declare class OpenCode2Adapter implements UsageSource {
|
|
19
|
+
readonly options: OpenCodeAdapterOptions;
|
|
20
|
+
private connection;
|
|
21
|
+
private readonly injectedClient;
|
|
22
|
+
private transportValue;
|
|
23
|
+
private statsSource;
|
|
24
|
+
constructor(options?: OpenCodeAdapterOptions);
|
|
25
|
+
get currentConnection(): ClientConnection | undefined;
|
|
26
|
+
get transport(): OpenCodeTransport | undefined;
|
|
27
|
+
connect(signal?: AbortSignal): Promise<ClientConnection>;
|
|
28
|
+
discover(): Promise<Endpoint | undefined>;
|
|
29
|
+
ensure(): Promise<Endpoint>;
|
|
30
|
+
private installClient;
|
|
31
|
+
private requireTransport;
|
|
32
|
+
getHealth(options?: {
|
|
33
|
+
readonly signal?: AbortSignal;
|
|
34
|
+
}): Promise<import("../domain/contracts.js").OpenCodeHealth>;
|
|
35
|
+
getSessionStats(window: UsageStatsRange, options?: StatsRequestOptions): Promise<OpenCodeSessionStats>;
|
|
36
|
+
listSessions(request?: SessionListRequest): Promise<SessionPage>;
|
|
37
|
+
listMessages(request: MessageListRequest): Promise<MessagePage>;
|
|
38
|
+
listAllSessions(options?: SessionListRequest & {
|
|
39
|
+
readonly maxPages?: number;
|
|
40
|
+
}): Promise<ReadonlyArray<OpenCodeSession>>;
|
|
41
|
+
listAllMessages(options: MessageListRequest & {
|
|
42
|
+
readonly maxPages?: number;
|
|
43
|
+
}): Promise<ReadonlyArray<OpenCodeAssistantMessage>>;
|
|
44
|
+
collect(request: CollectionRequest): Promise<CollectionResult>;
|
|
45
|
+
doctor(options?: Omit<DoctorOptions, "transport" | "connection">): Promise<DoctorReport>;
|
|
46
|
+
}
|
|
47
|
+
export declare function createOpenCodeAdapter(options?: OpenCodeAdapterOptions): OpenCode2Adapter;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { connectOpenCode, defaultService, } from "./client.js";
|
|
2
|
+
import { runOpenCodeDoctor } from "./doctor.js";
|
|
3
|
+
import { OpenCodeStatsSource } from "./stats.js";
|
|
4
|
+
import { OpenCode2Transport, } from "./transport.js";
|
|
5
|
+
/** Facade that keeps service lifecycle, transport, stats, and diagnostics together. */
|
|
6
|
+
export class OpenCode2Adapter {
|
|
7
|
+
options;
|
|
8
|
+
connection;
|
|
9
|
+
injectedClient;
|
|
10
|
+
transportValue;
|
|
11
|
+
statsSource;
|
|
12
|
+
constructor(options = {}) {
|
|
13
|
+
this.options = { ...options };
|
|
14
|
+
this.injectedClient = options.client;
|
|
15
|
+
this.transportValue = options.transport;
|
|
16
|
+
if (this.transportValue !== undefined)
|
|
17
|
+
this.statsSource = new OpenCodeStatsSource(this.transportValue);
|
|
18
|
+
else if (this.injectedClient !== undefined)
|
|
19
|
+
this.installClient(this.injectedClient);
|
|
20
|
+
}
|
|
21
|
+
get currentConnection() {
|
|
22
|
+
return this.connection;
|
|
23
|
+
}
|
|
24
|
+
get transport() {
|
|
25
|
+
return this.transportValue;
|
|
26
|
+
}
|
|
27
|
+
async connect(signal) {
|
|
28
|
+
this.connection = await connectOpenCode({
|
|
29
|
+
...this.options,
|
|
30
|
+
...(signal === undefined ? {} : { signal }),
|
|
31
|
+
});
|
|
32
|
+
this.installClient(this.connection.client);
|
|
33
|
+
return this.connection;
|
|
34
|
+
}
|
|
35
|
+
async discover() {
|
|
36
|
+
const service = this.options.service;
|
|
37
|
+
return (service ?? defaultService).discover({
|
|
38
|
+
...this.options.discovery,
|
|
39
|
+
...(this.options.version === undefined ? {} : { version: this.options.version }),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async ensure() {
|
|
43
|
+
const connection = await connectOpenCode({ ...this.options, ensure: true });
|
|
44
|
+
this.connection = connection;
|
|
45
|
+
this.installClient(connection.client);
|
|
46
|
+
return connection.endpoint;
|
|
47
|
+
}
|
|
48
|
+
installClient(client) {
|
|
49
|
+
const transportOptions = {
|
|
50
|
+
client,
|
|
51
|
+
pageSize: this.options.pageSize,
|
|
52
|
+
maxAttempts: this.options.maxAttempts,
|
|
53
|
+
baseDelayMs: this.options.baseDelayMs,
|
|
54
|
+
maxDelayMs: this.options.maxDelayMs,
|
|
55
|
+
jitter: this.options.jitter,
|
|
56
|
+
random: this.options.random,
|
|
57
|
+
sleep: this.options.sleep,
|
|
58
|
+
requestTimeoutMs: this.options.requestTimeoutMs,
|
|
59
|
+
};
|
|
60
|
+
this.transportValue = new OpenCode2Transport(transportOptions);
|
|
61
|
+
this.statsSource = new OpenCodeStatsSource(this.transportValue);
|
|
62
|
+
}
|
|
63
|
+
requireTransport() {
|
|
64
|
+
if (this.transportValue === undefined) {
|
|
65
|
+
throw new Error("OpenCode adapter is not connected");
|
|
66
|
+
}
|
|
67
|
+
return this.transportValue;
|
|
68
|
+
}
|
|
69
|
+
getHealth(options = {}) {
|
|
70
|
+
return this.requireTransport().getHealth(options);
|
|
71
|
+
}
|
|
72
|
+
getSessionStats(window, options = {}) {
|
|
73
|
+
const transport = this.requireTransport();
|
|
74
|
+
if (transport instanceof OpenCode2Transport)
|
|
75
|
+
return transport.getSessionStats(window, options);
|
|
76
|
+
return transport.getSessionStats(window, options);
|
|
77
|
+
}
|
|
78
|
+
listSessions(request = {}) {
|
|
79
|
+
return this.requireTransport().listSessions(request);
|
|
80
|
+
}
|
|
81
|
+
listMessages(request) {
|
|
82
|
+
return this.requireTransport().listMessages(request);
|
|
83
|
+
}
|
|
84
|
+
listAllSessions(options = {}) {
|
|
85
|
+
const transport = this.requireTransport();
|
|
86
|
+
if (!(transport instanceof OpenCode2Transport)) {
|
|
87
|
+
throw new Error("listAllSessions requires the OpenCode2Transport pagination implementation");
|
|
88
|
+
}
|
|
89
|
+
return transport.listAllSessions(options);
|
|
90
|
+
}
|
|
91
|
+
listAllMessages(options) {
|
|
92
|
+
const transport = this.requireTransport();
|
|
93
|
+
if (!(transport instanceof OpenCode2Transport)) {
|
|
94
|
+
throw new Error("listAllMessages requires the OpenCode2Transport pagination implementation");
|
|
95
|
+
}
|
|
96
|
+
return transport.listAllMessages(options);
|
|
97
|
+
}
|
|
98
|
+
collect(request) {
|
|
99
|
+
if (this.statsSource === undefined) {
|
|
100
|
+
if (this.injectedClient === undefined) {
|
|
101
|
+
return Promise.reject(new Error("OpenCode adapter is not connected"));
|
|
102
|
+
}
|
|
103
|
+
this.installClient(this.injectedClient);
|
|
104
|
+
}
|
|
105
|
+
return this.statsSource.collect(request);
|
|
106
|
+
}
|
|
107
|
+
doctor(options = {}) {
|
|
108
|
+
return runOpenCodeDoctor({
|
|
109
|
+
...options,
|
|
110
|
+
connection: this.connection,
|
|
111
|
+
transport: this.transportValue,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export function createOpenCodeAdapter(options = {}) {
|
|
116
|
+
return new OpenCode2Adapter(options);
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/opencode/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type DiscoverOptions, type Endpoint, type EnsureOptions } from "@opencode-ai/client/service";
|
|
2
|
+
import type { OpenCodeHealth } from "../domain/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* The generated client has a very large surface and its beta types change
|
|
5
|
+
* independently of OC2Token. Keeping this small structural seam makes the
|
|
6
|
+
* adapter easy to fake while the default factory still uses the generated
|
|
7
|
+
* client types at runtime.
|
|
8
|
+
*/
|
|
9
|
+
export interface OpenCodeClientLike {
|
|
10
|
+
readonly health: {
|
|
11
|
+
get(...args: any[]): Promise<unknown>;
|
|
12
|
+
};
|
|
13
|
+
readonly session: {
|
|
14
|
+
list(...args: any[]): Promise<unknown>;
|
|
15
|
+
stats(...args: any[]): Promise<unknown>;
|
|
16
|
+
};
|
|
17
|
+
readonly message: {
|
|
18
|
+
list(...args: any[]): Promise<unknown>;
|
|
19
|
+
};
|
|
20
|
+
readonly project?: {
|
|
21
|
+
list(...args: any[]): Promise<unknown>;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface ServiceLifecycle {
|
|
25
|
+
discover(options?: DiscoverOptions): Promise<Endpoint | undefined>;
|
|
26
|
+
ensure(options?: EnsureOptions): Promise<Endpoint>;
|
|
27
|
+
headers(endpoint: Endpoint): Record<string, string> | undefined;
|
|
28
|
+
}
|
|
29
|
+
export declare const defaultService: ServiceLifecycle;
|
|
30
|
+
export interface OpenCodeClientFactoryOptions {
|
|
31
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
32
|
+
}
|
|
33
|
+
export type OpenCodeClientFactory = (endpoint: Endpoint, options?: OpenCodeClientFactoryOptions) => OpenCodeClientLike;
|
|
34
|
+
/** Create the official promise client with the service's auth headers. */
|
|
35
|
+
export declare function createOpenCodeClient(endpoint: Endpoint, service?: Pick<ServiceLifecycle, "headers">, options?: OpenCodeClientFactoryOptions): OpenCodeClientLike;
|
|
36
|
+
export declare const defaultClientFactory: OpenCodeClientFactory;
|
|
37
|
+
export interface ConnectionOptions {
|
|
38
|
+
readonly service?: ServiceLifecycle;
|
|
39
|
+
readonly client?: OpenCodeClientLike;
|
|
40
|
+
readonly clientFactory?: OpenCodeClientFactory;
|
|
41
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
42
|
+
/** Do not start a service when false. Defaults to true. */
|
|
43
|
+
readonly ensure?: boolean;
|
|
44
|
+
readonly discovery?: Omit<DiscoverOptions, "version">;
|
|
45
|
+
readonly ensureOptions?: Omit<EnsureOptions, "version">;
|
|
46
|
+
readonly version?: string | ((version: string) => boolean);
|
|
47
|
+
readonly signal?: AbortSignal;
|
|
48
|
+
}
|
|
49
|
+
export interface OpenCodeConnection {
|
|
50
|
+
readonly endpoint: Endpoint;
|
|
51
|
+
readonly client: OpenCodeClientLike;
|
|
52
|
+
readonly health: OpenCodeHealth;
|
|
53
|
+
}
|
|
54
|
+
export declare function parseOpenCodeHealth(value: unknown, endpoint: Endpoint): OpenCodeHealth;
|
|
55
|
+
/** Discover a running service, optionally ensuring the V2 service exists. */
|
|
56
|
+
export declare function connectOpenCode(options?: ConnectionOptions): Promise<OpenCodeConnection>;
|
|
57
|
+
/** A class facade is convenient for callers that need to reconnect later. */
|
|
58
|
+
export declare class OpenCodeConnectionManager {
|
|
59
|
+
readonly options: ConnectionOptions;
|
|
60
|
+
constructor(options?: ConnectionOptions);
|
|
61
|
+
discover(): Promise<Endpoint | undefined>;
|
|
62
|
+
ensure(): Promise<Endpoint>;
|
|
63
|
+
connect(): Promise<OpenCodeConnection>;
|
|
64
|
+
}
|