@teeras/afterhours 0.3.1 → 0.5.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 +15 -0
- package/dist/apprun.d.ts +8 -0
- package/dist/apprun.d.ts.map +1 -0
- package/dist/apprun.js +67 -0
- package/dist/apprun.js.map +1 -0
- package/dist/cli.js +42 -3
- package/dist/cli.js.map +1 -1
- package/dist/cloud.d.ts +47 -0
- package/dist/cloud.d.ts.map +1 -1
- package/dist/cloud.js +165 -0
- package/dist/cloud.js.map +1 -1
- package/dist/collect.d.ts.map +1 -1
- package/dist/collect.js +4 -1
- package/dist/collect.js.map +1 -1
- package/dist/detect.js +2 -2
- package/dist/detect.js.map +1 -1
- package/dist/hooks.d.ts +13 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +41 -21
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/macos/spool.d.ts +19 -0
- package/dist/macos/spool.d.ts.map +1 -0
- package/dist/macos/spool.js +117 -0
- package/dist/macos/spool.js.map +1 -0
- package/dist/macos/status.d.ts +32 -0
- package/dist/macos/status.d.ts.map +1 -0
- package/dist/macos/status.js +55 -0
- package/dist/macos/status.js.map +1 -0
- package/dist/privacy.d.ts.map +1 -1
- package/dist/privacy.js +2 -0
- package/dist/privacy.js.map +1 -1
- package/dist/runEventTypes.d.ts +2 -0
- package/dist/runEventTypes.d.ts.map +1 -0
- package/dist/runEventTypes.js +2 -0
- package/dist/runEventTypes.js.map +1 -0
- package/dist/runEvents.d.ts +59 -0
- package/dist/runEvents.d.ts.map +1 -0
- package/dist/runEvents.js +148 -0
- package/dist/runEvents.js.map +1 -0
- package/dist/sources/claude.js +2 -2
- package/dist/sources/claude.js.map +1 -1
- package/dist/sources/macosApps.d.ts +7 -0
- package/dist/sources/macosApps.d.ts.map +1 -0
- package/dist/sources/macosApps.js +122 -0
- package/dist/sources/macosApps.js.map +1 -0
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/llms-install.md +8 -0
- package/package.json +1 -1
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { chmodSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { opaqueEpisodeId } from "./activity.js";
|
|
5
|
+
import { postRunEnded, postRunStarted, readCredentials } from "./cloud.js";
|
|
6
|
+
import { parseHookInput, readContentFreeHookEvents } from "./hooks.js";
|
|
7
|
+
import { ensureEpisodeSecret } from "./secret.js";
|
|
8
|
+
const STALE_MS = 12 * 3_600_000;
|
|
9
|
+
export function openTurnsPath(home = homedir()) {
|
|
10
|
+
return join(home, ".teeras", "afterhours", "open-turns.json");
|
|
11
|
+
}
|
|
12
|
+
export function readOpenTurns(home = homedir(), nowMs = Date.now()) {
|
|
13
|
+
try {
|
|
14
|
+
const raw = JSON.parse(readFileSync(openTurnsPath(home), "utf8"));
|
|
15
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
16
|
+
return {};
|
|
17
|
+
const out = {};
|
|
18
|
+
const cutoff = nowMs - STALE_MS;
|
|
19
|
+
for (const [k, v] of Object.entries(raw)) {
|
|
20
|
+
if (typeof v === "number" && Number.isFinite(v) && v >= cutoff)
|
|
21
|
+
out[k] = v;
|
|
22
|
+
}
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function writeOpenTurns(turns, home = homedir(), nowMs = Date.now()) {
|
|
30
|
+
const path = openTurnsPath(home);
|
|
31
|
+
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
|
32
|
+
chmodSync(dirname(path), 0o700);
|
|
33
|
+
const cutoff = nowMs - STALE_MS;
|
|
34
|
+
const kept = Object.fromEntries(Object.entries(turns).filter(([, v]) => v >= cutoff));
|
|
35
|
+
writeFileSync(path, JSON.stringify(kept), { mode: 0o600 });
|
|
36
|
+
chmodSync(path, 0o600);
|
|
37
|
+
}
|
|
38
|
+
function localHour(ms, tz) {
|
|
39
|
+
const hour = new Intl.DateTimeFormat("en-US", { hour: "numeric", hour12: false, timeZone: tz })
|
|
40
|
+
.formatToParts(new Date(ms))
|
|
41
|
+
.find((p) => p.type === "hour")?.value;
|
|
42
|
+
return Number(hour ?? 0) % 24;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Derives the real-time run-forecast event (if any) from one parsed hook
|
|
46
|
+
* event, against the caller's on-disk open-turn state.
|
|
47
|
+
*
|
|
48
|
+
* A run is one agent turn: `UserPromptSubmit` opens it, `Stop` closes it.
|
|
49
|
+
* Claude Code fires `Stop` whenever the agent yields, so if a
|
|
50
|
+
* `UserPromptSubmit` arrives while a turn is still open, that open turn was
|
|
51
|
+
* interrupted (e.g. Esc) and no `Stop` for it will ever come. The new prompt
|
|
52
|
+
* **replaces** the open turn: `next[key]` is overwritten with the new start
|
|
53
|
+
* time and a `started` event is emitted for the new turn under a new
|
|
54
|
+
* `runKey`. No `ended` event is emitted for the stale turn — the server
|
|
55
|
+
* expires it after 6 h and excludes it from accuracy, and emitting one here
|
|
56
|
+
* would fold a bogus duration into the cohort.
|
|
57
|
+
*/
|
|
58
|
+
export function deriveRunEvent(event, sourceId, secret, turns, nowMs, tz = Intl.DateTimeFormat().resolvedOptions().timeZone) {
|
|
59
|
+
const episode = opaqueEpisodeId(secret, sourceId, event.sessionId);
|
|
60
|
+
const key = `${sourceId}:${episode}`;
|
|
61
|
+
const next = { ...turns };
|
|
62
|
+
if (event.eventName === "UserPromptSubmit") {
|
|
63
|
+
next[key] = nowMs;
|
|
64
|
+
return {
|
|
65
|
+
event: {
|
|
66
|
+
kind: "started",
|
|
67
|
+
sourceId,
|
|
68
|
+
runKey: `${episode}:${Math.floor(nowMs / 1000)}`,
|
|
69
|
+
modelFamily: event.model?.toLowerCase() ?? null,
|
|
70
|
+
localStartHour: localHour(nowMs, tz),
|
|
71
|
+
tz,
|
|
72
|
+
startedAtMs: nowMs,
|
|
73
|
+
},
|
|
74
|
+
turns: next,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
if (event.eventName === "Stop" || event.eventName === "StopFailure" || event.eventName === "SessionEnd") {
|
|
78
|
+
const startedAt = next[key];
|
|
79
|
+
if (startedAt === undefined)
|
|
80
|
+
return { event: null, turns: next };
|
|
81
|
+
delete next[key];
|
|
82
|
+
return {
|
|
83
|
+
event: {
|
|
84
|
+
kind: "ended",
|
|
85
|
+
sourceId,
|
|
86
|
+
runKey: `${episode}:${Math.floor(startedAt / 1000)}`,
|
|
87
|
+
endedAt: new Date(nowMs).toISOString(),
|
|
88
|
+
},
|
|
89
|
+
turns: next,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return { event: null, turns: next };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 10-minute buckets since local midnight that contain a human hook event
|
|
96
|
+
* (a `human_prompt` signal). 0 when the journal is missing or empty; null
|
|
97
|
+
* only if the timezone is invalid.
|
|
98
|
+
*/
|
|
99
|
+
export function humanActiveMinutesToday(home, nowMs, tz) {
|
|
100
|
+
try {
|
|
101
|
+
const parts = new Intl.DateTimeFormat("en-US", { timeZone: tz, hour: "numeric", minute: "numeric", hour12: false })
|
|
102
|
+
.formatToParts(new Date(nowMs));
|
|
103
|
+
const h = Number(parts.find((p) => p.type === "hour")?.value ?? 0) % 24;
|
|
104
|
+
const m = Number(parts.find((p) => p.type === "minute")?.value ?? 0);
|
|
105
|
+
const midnight = nowMs - (h * 60 + m) * 60_000;
|
|
106
|
+
const events = readContentFreeHookEvents(home, midnight, nowMs);
|
|
107
|
+
const buckets = new Set();
|
|
108
|
+
for (const e of events) {
|
|
109
|
+
if (e.signal === "human_prompt")
|
|
110
|
+
buckets.add(Math.floor((e.at - midnight) / 600_000));
|
|
111
|
+
}
|
|
112
|
+
return buckets.size * 10;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Full hook→cloud path for `trs hook`: parse, gate on a connected account,
|
|
120
|
+
* derive the run event against on-disk open-turn state, persist that state
|
|
121
|
+
* before ever touching the network, then fire the matching best-effort POST.
|
|
122
|
+
* Never throws — a broken hook body must never interrupt the agent.
|
|
123
|
+
*/
|
|
124
|
+
export async function emitRunEventFromHook(raw, sourceId, home = homedir(), fetcher = fetch, nowMs = Date.now(), tz = Intl.DateTimeFormat().resolvedOptions().timeZone) {
|
|
125
|
+
try {
|
|
126
|
+
const parsed = parseHookInput(raw);
|
|
127
|
+
if (!parsed)
|
|
128
|
+
return "none";
|
|
129
|
+
const credentials = readCredentials(home);
|
|
130
|
+
if (!credentials)
|
|
131
|
+
return "none";
|
|
132
|
+
const secret = ensureEpisodeSecret(home);
|
|
133
|
+
const { event, turns } = deriveRunEvent(parsed, sourceId, secret, readOpenTurns(home, nowMs), nowMs, tz);
|
|
134
|
+
writeOpenTurns(turns, home, nowMs);
|
|
135
|
+
if (!event)
|
|
136
|
+
return "none";
|
|
137
|
+
if (event.kind === "started") {
|
|
138
|
+
await postRunStarted(event, credentials, humanActiveMinutesToday(home, nowMs, tz), fetcher);
|
|
139
|
+
return "started";
|
|
140
|
+
}
|
|
141
|
+
await postRunEnded(event, credentials, fetcher);
|
|
142
|
+
return "ended";
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return "none";
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=runEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runEvents.js","sourceRoot":"","sources":["../src/runEvents.ts"],"names":[],"mappings":"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"}
|
package/dist/sources/claude.js
CHANGED
|
@@ -22,11 +22,11 @@ function claudeRoots(home) {
|
|
|
22
22
|
}
|
|
23
23
|
export const claudeSource = {
|
|
24
24
|
id: "claude-code",
|
|
25
|
-
name: "Claude Code",
|
|
25
|
+
name: "Claude Code app + CLI",
|
|
26
26
|
version: "claude-code-v3",
|
|
27
27
|
collect({ home, sinceMs, untilMs, episodeKeySecret }) {
|
|
28
28
|
const roots = claudeRoots(home);
|
|
29
|
-
const source = emptySource("claude-code", "Claude Code", roots.some(isDirectory));
|
|
29
|
+
const source = emptySource("claude-code", "Claude Code app + CLI", roots.some(isDirectory));
|
|
30
30
|
if (!source.configured)
|
|
31
31
|
return source;
|
|
32
32
|
const events = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/sources/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,SAAS,GAEV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEjD,SAAS,cAAc,CAAC,OAAgC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;IACzD,IAAI,IAAI,KAAK,OAAO,EAAE,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAkB;IACzC,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/sources/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SourceAdapter } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Sessions in native AI apps observed by Teeras.app. Boundary math only:
|
|
4
|
+
* foreground time is a human-attention ESTIMATE; nothing here is delegation.
|
|
5
|
+
*/
|
|
6
|
+
export declare const macosAppsSource: SourceAdapter;
|
|
7
|
+
//# sourceMappingURL=macosApps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macosApps.d.ts","sourceRoot":"","sources":["../../src/sources/macosApps.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgC,aAAa,EAAkB,MAAM,aAAa,CAAC;AAI/F;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,aA2B7B,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { readSpool, spoolDir } from "../macos/spool.js";
|
|
2
|
+
import { isDirectory } from "../files.js";
|
|
3
|
+
const NO_TOKENS = { input: null, cached: null, output: null, reasoning: null };
|
|
4
|
+
/**
|
|
5
|
+
* Sessions in native AI apps observed by Teeras.app. Boundary math only:
|
|
6
|
+
* foreground time is a human-attention ESTIMATE; nothing here is delegation.
|
|
7
|
+
*/
|
|
8
|
+
export const macosAppsSource = {
|
|
9
|
+
id: "macos-apps",
|
|
10
|
+
name: "Mac AI apps",
|
|
11
|
+
version: "1.0.0",
|
|
12
|
+
collect(input) {
|
|
13
|
+
const dir = spoolDir(input.home);
|
|
14
|
+
const configured = isDirectory(dir);
|
|
15
|
+
const base = {
|
|
16
|
+
id: this.id,
|
|
17
|
+
name: this.name,
|
|
18
|
+
configured,
|
|
19
|
+
sessions: 0,
|
|
20
|
+
agentTurns: 0,
|
|
21
|
+
humanCheckIns: 0,
|
|
22
|
+
tokens: { ...NO_TOKENS },
|
|
23
|
+
models: [],
|
|
24
|
+
buckets: [],
|
|
25
|
+
episodes: [],
|
|
26
|
+
};
|
|
27
|
+
if (!configured)
|
|
28
|
+
return { ...base, fidelity: "none" };
|
|
29
|
+
const inWindow = readSpool(dir).records.filter((record) => {
|
|
30
|
+
const endedMs = Date.parse(record.ended_at);
|
|
31
|
+
return endedMs >= input.sinceMs && Date.parse(record.started_at) <= input.untilMs;
|
|
32
|
+
});
|
|
33
|
+
return { ...base, fidelity: "sessions", sessions: countSessions(inWindow), buckets: toBuckets(inWindow) };
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* The Swift-side collector checkpoints an open session every runner cycle
|
|
38
|
+
* (~5 minutes, or immediately on wake) — closing and re-opening it so a
|
|
39
|
+
* crash loses at most one cycle's worth of foreground time. That turns one
|
|
40
|
+
* continuous sitting into several spool records for the same `app_id`,
|
|
41
|
+
* chunk boundaries touching (or nearly so). Buckets are additive and don't
|
|
42
|
+
* need adjusting, but a raw record count would inflate `sessions` (a
|
|
43
|
+
* one-hour sitting reading as "12 sessions" at a 5-minute cadence), so
|
|
44
|
+
* merge same-app records whose gap between one record's `ended_at` and the
|
|
45
|
+
* next's `started_at` is at most `CHUNK_MERGE_WINDOW_MS` before counting.
|
|
46
|
+
*/
|
|
47
|
+
const CHUNK_MERGE_WINDOW_MS = 2_000;
|
|
48
|
+
function countSessions(records) {
|
|
49
|
+
const byApp = new Map();
|
|
50
|
+
for (const record of records) {
|
|
51
|
+
const list = byApp.get(record.app_id);
|
|
52
|
+
if (list) {
|
|
53
|
+
list.push(record);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
byApp.set(record.app_id, [record]);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
let sessions = 0;
|
|
60
|
+
for (const list of byApp.values()) {
|
|
61
|
+
const sorted = [...list].sort((a, b) => Date.parse(a.started_at) - Date.parse(b.started_at));
|
|
62
|
+
let previousEndedMs = null;
|
|
63
|
+
for (const record of sorted) {
|
|
64
|
+
const startedMs = Date.parse(record.started_at);
|
|
65
|
+
const isContinuation = previousEndedMs !== null &&
|
|
66
|
+
startedMs >= previousEndedMs &&
|
|
67
|
+
startedMs - previousEndedMs <= CHUNK_MERGE_WINDOW_MS;
|
|
68
|
+
if (!isContinuation)
|
|
69
|
+
sessions += 1;
|
|
70
|
+
previousEndedMs = Date.parse(record.ended_at);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return sessions;
|
|
74
|
+
}
|
|
75
|
+
function toBuckets(records) {
|
|
76
|
+
const byKey = new Map();
|
|
77
|
+
// Raw seconds per bucket key, rounded to minutes exactly once at the end.
|
|
78
|
+
// Checkpoint chunking (see `countSessions` above) means the same local
|
|
79
|
+
// hour is routinely split across several records — rounding each
|
|
80
|
+
// record's contribution independently before summing drifts from the
|
|
81
|
+
// true total (e.g. two 90s chunks: round(90/60) + round(90/60) = 2 + 2 =
|
|
82
|
+
// 4m, when the real total is 180s = 3m). Summing seconds first and
|
|
83
|
+
// rounding once avoids that systematic overcount.
|
|
84
|
+
const secondsByKey = new Map();
|
|
85
|
+
for (const record of records) {
|
|
86
|
+
// Extract UTC offset from started_at (e.g., "+03:00" or "-05:00")
|
|
87
|
+
const offsetMatch = record.started_at.match(/([\+\-]\d{2}:\d{2})$/);
|
|
88
|
+
const offset = offsetMatch ? offsetMatch[1] : "+00:00";
|
|
89
|
+
for (const [hourText, seconds] of Object.entries(record.fg_seconds_by_hour)) {
|
|
90
|
+
const localHour = Number(hourText);
|
|
91
|
+
// Hours after midnight belong to the next local date.
|
|
92
|
+
const startHour = Number(record.started_at.slice(11, 13));
|
|
93
|
+
const localDate = localHour >= startHour ? record.local_date : nextDate(record.local_date);
|
|
94
|
+
const key = `${localDate}T${localHour}`;
|
|
95
|
+
if (!byKey.has(key)) {
|
|
96
|
+
// Compute hour as the UTC instant of the local hour's start
|
|
97
|
+
const localTimestamp = `${localDate}T${String(localHour).padStart(2, "0")}:00:00${offset}`;
|
|
98
|
+
const hourUtc = new Date(Date.parse(localTimestamp)).toISOString();
|
|
99
|
+
byKey.set(key, {
|
|
100
|
+
hour: hourUtc,
|
|
101
|
+
localDate,
|
|
102
|
+
localHour,
|
|
103
|
+
agentTurns: 0,
|
|
104
|
+
humanCheckIns: 0,
|
|
105
|
+
agentActiveMinutes: 0,
|
|
106
|
+
humanAttentionMinutes: 0,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
secondsByKey.set(key, (secondsByKey.get(key) ?? 0) + seconds);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
for (const [key, bucket] of byKey) {
|
|
113
|
+
bucket.humanAttentionMinutes = Math.round((secondsByKey.get(key) ?? 0) / 60);
|
|
114
|
+
}
|
|
115
|
+
return [...byKey.values()].sort((a, b) => a.hour.localeCompare(b.hour));
|
|
116
|
+
}
|
|
117
|
+
function nextDate(localDate) {
|
|
118
|
+
const date = new Date(`${localDate}T12:00:00Z`);
|
|
119
|
+
date.setUTCDate(date.getUTCDate() + 1);
|
|
120
|
+
return date.toISOString().slice(0, 10);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=macosApps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macosApps.js","sourceRoot":"","sources":["../../src/sources/macosApps.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -101,7 +101,9 @@ export interface DataBoundary {
|
|
|
101
101
|
"measurement provenance and missingness",
|
|
102
102
|
"agent and model family",
|
|
103
103
|
"approval and lifecycle signals",
|
|
104
|
-
"reporting timezone"
|
|
104
|
+
"reporting timezone",
|
|
105
|
+
"collector version",
|
|
106
|
+
"since 0.5.0, a per-turn real-time event (agent, model family, hour, opaque run id, minutes-active estimate; end: id and time) sent when a turn starts and ends"
|
|
105
107
|
];
|
|
106
108
|
neverRetained: readonly [
|
|
107
109
|
"prompt text",
|
|
@@ -126,6 +128,8 @@ export interface AfterhoursSnapshot {
|
|
|
126
128
|
tz: string | null;
|
|
127
129
|
sources: SourceSnapshot[];
|
|
128
130
|
boundary: DataBoundary;
|
|
131
|
+
/** Collector version at the time of this snapshot, for server-side rollout diagnostics. */
|
|
132
|
+
cliVersion?: string;
|
|
129
133
|
}
|
|
130
134
|
export interface SourceAdapter {
|
|
131
135
|
id: SourceId;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,eAAO,MAAM,WAAW,UAAU,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"}
|
package/llms-install.md
CHANGED
|
@@ -19,6 +19,14 @@ model output, repository names, working directories, and file paths are never
|
|
|
19
19
|
read into the sync payload, never uploaded, and never logged. `npx
|
|
20
20
|
@teeras/afterhours privacy` prints the machine-readable boundary.
|
|
21
21
|
|
|
22
|
+
Since 0.5.0, when an agent turn starts and ends, the collector also sends a
|
|
23
|
+
small real-time event: the agent name, its model family, the hour of day, an
|
|
24
|
+
opaque run id, and an estimate of how many minutes you've been active today.
|
|
25
|
+
When the turn ends it sends the same id and the time. This lets the Teeras
|
|
26
|
+
iPhone app tell you how long runs like this usually take. It never includes
|
|
27
|
+
prompts, code, file paths, or repository names, it is sent once with a
|
|
28
|
+
two-second timeout, and it never blocks the agent.
|
|
29
|
+
|
|
22
30
|
Setup is idempotent — re-running it repairs hooks and refreshes the
|
|
23
31
|
connection. It installs lifecycle hooks for Claude Code and Codex when found,
|
|
24
32
|
which record content-free session signals locally.
|
package/package.json
CHANGED