@teeras/afterhours 0.3.1 → 0.4.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 +7 -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 +38 -3
- package/dist/cli.js.map +1 -1
- package/dist/cloud.d.ts +43 -0
- package/dist/cloud.d.ts.map +1 -1
- package/dist/cloud.js +127 -0
- package/dist/cloud.js.map +1 -1
- package/dist/collect.d.ts.map +1 -1
- package/dist/collect.js +2 -1
- package/dist/collect.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- 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/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/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,6 +24,7 @@ trs week
|
|
|
24
24
|
trs connect
|
|
25
25
|
trs login
|
|
26
26
|
trs sync
|
|
27
|
+
trs report
|
|
27
28
|
trs sources
|
|
28
29
|
trs privacy
|
|
29
30
|
trs hook-config codex
|
|
@@ -77,6 +78,12 @@ report, or `trs logout` to remove this computer's token. Nothing runs as a
|
|
|
77
78
|
background daemon, the hook itself makes no network call, and there is no
|
|
78
79
|
automatic LLM call.
|
|
79
80
|
|
|
81
|
+
`trs report` opens your web report in the browser, already signed in: this
|
|
82
|
+
computer's device token buys a single-use link that lasts sixty seconds, and
|
|
83
|
+
opening it is what signs the browser in. No password, no second sign-in. On a
|
|
84
|
+
computer that has never connected — or if the link cannot be fetched — it opens
|
|
85
|
+
the plain site instead and you sign in there as usual.
|
|
86
|
+
|
|
80
87
|
The default command (and `trs week`) prints a calm seven-day report. Use
|
|
81
88
|
`--json` to inspect the privacy-safe snapshot consumed by the dashboard and
|
|
82
89
|
optional MCP adapter. The cloud keeps one replaceable snapshot per device per
|
package/dist/apprun.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type AppStatus } from "./macos/status.js";
|
|
2
|
+
export interface AppRunDeps {
|
|
3
|
+
fetcher?: typeof fetch;
|
|
4
|
+
now?: () => Date;
|
|
5
|
+
}
|
|
6
|
+
/** One hub cycle. Never throws: every failure is a visible status, not a crash. */
|
|
7
|
+
export declare function runAppRun(home?: string, deps?: AppRunDeps): Promise<AppStatus>;
|
|
8
|
+
//# sourceMappingURL=apprun.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apprun.d.ts","sourceRoot":"","sources":["../src/apprun.ts"],"names":[],"mappings":"AAIA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE7E,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAgBD,mFAAmF;AACnF,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAkB,EAAE,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CA6CnG"}
|
package/dist/apprun.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { collectAfterhours } from "./collect.js";
|
|
3
|
+
import { ConnectionExpiredError, readCredentials, syncSnapshot } from "./cloud.js";
|
|
4
|
+
import { compactSpool, readSpool, spoolDir } from "./macos/spool.js";
|
|
5
|
+
import { buildStatus, writeStatus } from "./macos/status.js";
|
|
6
|
+
/** A minimal, always-constructible status for when the hub cycle itself faults
|
|
7
|
+
* (disk full, permissions, the Application Support path occupied by a file, …) —
|
|
8
|
+
* before `buildStatus`/`writeStatus` can be trusted to run at all. */
|
|
9
|
+
function fallbackStatus(now) {
|
|
10
|
+
return {
|
|
11
|
+
v: 1,
|
|
12
|
+
generatedAt: now().toISOString(),
|
|
13
|
+
sources: [],
|
|
14
|
+
sync: { state: "error", lastAckAt: null, pendingSessions: 0 },
|
|
15
|
+
line: { lastActivityAt: null, resolution: "hour", eveningsKept7d: 0 },
|
|
16
|
+
spool: { quarantinedLines: 0 },
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/** One hub cycle. Never throws: every failure is a visible status, not a crash. */
|
|
20
|
+
export async function runAppRun(home = homedir(), deps = {}) {
|
|
21
|
+
const now = deps.now ?? (() => new Date());
|
|
22
|
+
try {
|
|
23
|
+
const until = now();
|
|
24
|
+
const dir = spoolDir(home);
|
|
25
|
+
// Read the spool BEFORE collectAfterhours runs: collectAfterhours's macos-apps
|
|
26
|
+
// source calls readSpool too, and readSpool quarantines by MOVING bad lines to
|
|
27
|
+
// `.bad` and rewriting the source file — a second read finds nothing left to
|
|
28
|
+
// quarantine (that's the idempotency macos-spool.test.ts pins). Capturing the
|
|
29
|
+
// read here, first, is the only way status.spool.quarantinedLines sees them.
|
|
30
|
+
const spoolInfo = readSpool(dir);
|
|
31
|
+
const snapshot = collectAfterhours({ home, until });
|
|
32
|
+
let sync = { state: "signed_out", lastAckAt: null, pendingSessions: spoolInfo.records.length };
|
|
33
|
+
const credentials = readCredentials(home);
|
|
34
|
+
if (credentials) {
|
|
35
|
+
try {
|
|
36
|
+
await syncSnapshot(snapshot, credentials, deps.fetcher);
|
|
37
|
+
const dropped = compactSpool(dir, snapshot.until);
|
|
38
|
+
sync = { state: "ok", lastAckAt: until.toISOString(), pendingSessions: spoolInfo.records.length - dropped };
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
// Design spec (error-handling section): expired/revoked credentials get the
|
|
42
|
+
// calm signed-out state, not "offline" — the fix is re-pairing, not retrying.
|
|
43
|
+
sync = error instanceof ConnectionExpiredError
|
|
44
|
+
? { state: "signed_out", lastAckAt: null, pendingSessions: spoolInfo.records.length }
|
|
45
|
+
: { state: "offline", lastAckAt: null, pendingSessions: spoolInfo.records.length };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const status = buildStatus(snapshot, sync, { quarantinedLines: spoolInfo.quarantinedLines });
|
|
49
|
+
writeStatus(home, status);
|
|
50
|
+
return status;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Never throws, never logs: an ordinary I/O fault (disk full, permissions, a
|
|
54
|
+
// file occupying the Application Support path) must not leak a Node fs error
|
|
55
|
+
// (which embeds local paths) to stderr, and must not flip the exit code.
|
|
56
|
+
const status = fallbackStatus(now);
|
|
57
|
+
try {
|
|
58
|
+
writeStatus(home, status);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Best-effort only — if even this fails, the fallback status is still
|
|
62
|
+
// returned in-memory so the caller (and the hidden CLI command) stay quiet.
|
|
63
|
+
}
|
|
64
|
+
return status;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=apprun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apprun.js","sourceRoot":"","sources":["../src/apprun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAO7E;;sEAEsE;AACtE,SAAS,cAAc,CAAC,GAAe;IACrC,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;QAChC,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE;QAC7D,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,EAAE;QACrE,KAAK,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe,OAAO,EAAE,EAAE,OAAmB,EAAE;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,+EAA+E;QAC/E,+EAA+E;QAC/E,6EAA6E;QAC7E,8EAA8E;QAC9E,6EAA6E;QAC7E,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAEpD,IAAI,IAAI,GAAsB,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAClH,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,eAAe,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;YAC9G,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,4EAA4E;gBAC5E,8EAA8E;gBAC9E,IAAI,GAAG,KAAK,YAAY,sBAAsB;oBAC5C,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE;oBACrF,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACvF,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC7F,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,6EAA6E;QAC7E,6EAA6E;QAC7E,yEAAyE;QACzE,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;YACtE,4EAA4E;QAC9E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
3
4
|
import { fileURLToPath } from "node:url";
|
|
4
5
|
import { collectAfterhours } from "./collect.js";
|
|
5
|
-
import { openVerificationUri, pollDeviceLogin, readCredentials, removeCredentials, revokeDevice, startDeviceLogin, syncSnapshot, teerasBaseUrl, writeCredentials, } from "./cloud.js";
|
|
6
|
+
import { connectMachine, openVerificationUri, pollDeviceLogin, readCredentials, removeCredentials, REPORT_FALLBACK_URL, reportMachine, reportUrl, revokeDevice, startDeviceLogin, syncSnapshot, teerasBaseUrl, writeCredentials, } from "./cloud.js";
|
|
6
7
|
import { detectCodingAgents } from "./detect.js";
|
|
7
8
|
import { runOff } from "./off.js";
|
|
8
9
|
import { DATA_BOUNDARY } from "./privacy.js";
|
|
@@ -77,6 +78,13 @@ async function main() {
|
|
|
77
78
|
return;
|
|
78
79
|
}
|
|
79
80
|
if (command === "connect") {
|
|
81
|
+
if (process.argv.includes("--json")) {
|
|
82
|
+
// Teeras.app spawns this and parses stdout line-by-line — only the
|
|
83
|
+
// event lines belong here, no banner/QR/prose (see connectMachine).
|
|
84
|
+
const ok = await connectMachine(homedir(), (line) => process.stdout.write(`${line}\n`));
|
|
85
|
+
process.exitCode = ok ? 0 : 1;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
80
88
|
const credentials = await requireAccount();
|
|
81
89
|
const installed = detectCodingAgents().filter((agent) => agent.installed);
|
|
82
90
|
const lines = installed.length === 0
|
|
@@ -108,6 +116,21 @@ async function main() {
|
|
|
108
116
|
process.stdout.write("\n ✓ connected · your first counts-only week is in Teeras.\n\n");
|
|
109
117
|
return;
|
|
110
118
|
}
|
|
119
|
+
if (command === "report") {
|
|
120
|
+
if (process.argv.includes("--json")) {
|
|
121
|
+
// Teeras.app spawns this and opens the URL itself — one line, no
|
|
122
|
+
// browser launch, no prose (see reportMachine).
|
|
123
|
+
await reportMachine(homedir(), (line) => process.stdout.write(`${line}\n`));
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const credentials = readCredentials();
|
|
127
|
+
const url = credentials ? await reportUrl(credentials) : null;
|
|
128
|
+
openVerificationUri(url ?? REPORT_FALLBACK_URL);
|
|
129
|
+
process.stdout.write(url
|
|
130
|
+
? "\n Opening your report — you're signed in.\n\n"
|
|
131
|
+
: "\n Opening your report — sign in to see it.\n\n");
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
111
134
|
if (command === "logout") {
|
|
112
135
|
const credentials = readCredentials();
|
|
113
136
|
const revoked = credentials ? await revokeDevice(credentials) : false;
|
|
@@ -130,8 +153,20 @@ async function main() {
|
|
|
130
153
|
await runSetup({ json: process.argv.includes("--json") });
|
|
131
154
|
return;
|
|
132
155
|
}
|
|
133
|
-
if (command
|
|
134
|
-
|
|
156
|
+
if (command === "app-run") {
|
|
157
|
+
// Hidden command run by Teeras.app; failures land in status.json, never stdout.
|
|
158
|
+
try {
|
|
159
|
+
const { runAppRun } = await import("./apprun.js");
|
|
160
|
+
await runAppRun();
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
// status.json is the only reporting surface — even an unexpected escape
|
|
164
|
+
// from runAppRun (which itself should never throw) must stay silent.
|
|
165
|
+
}
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
if (command != null && !["week", "sources", "json", "--json", "autosync", "app-run"].includes(command)) {
|
|
169
|
+
process.stdout.write("usage: trs <setup|week|connect|login|sync|report|logout|off|sources|privacy|json|hook-config>\n");
|
|
135
170
|
return;
|
|
136
171
|
}
|
|
137
172
|
const credentials = readCredentials();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cloud.d.ts
CHANGED
|
@@ -31,6 +31,49 @@ export declare function pollDeviceLogin(baseUrl: string, grant: DeviceGrant, opt
|
|
|
31
31
|
fetcher?: Fetcher;
|
|
32
32
|
sleep?: (ms: number) => Promise<void>;
|
|
33
33
|
}): Promise<DeviceToken>;
|
|
34
|
+
/**
|
|
35
|
+
* Machine-readable pairing for Teeras.app: one JSON line per event on
|
|
36
|
+
* `emit`, never prose. Swift spawns `afterhours connect --json` and parses
|
|
37
|
+
* stdout line-by-line, so this line protocol is a cross-language contract —
|
|
38
|
+
* event names and field names must stay exact. The HTTP mechanics are the
|
|
39
|
+
* same `startDeviceLogin` → `pollDeviceLogin` → `writeCredentials` flow the
|
|
40
|
+
* interactive `connect` command uses; only the output format differs.
|
|
41
|
+
*/
|
|
42
|
+
export declare function connectMachine(home: string, emit: (line: string) => void, fetcher?: Fetcher): Promise<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* Where "open my report" goes when there is no signed-in link to open: the
|
|
45
|
+
* plain dashboard, which will ask for a sign-in like any other visit. Never
|
|
46
|
+
* an error, never nothing.
|
|
47
|
+
*/
|
|
48
|
+
export declare const REPORT_FALLBACK_URL = "https://www.teeras.com/app";
|
|
49
|
+
/**
|
|
50
|
+
* How long the login link is worth waiting for. A wedged network — a captive
|
|
51
|
+
* portal, a black-holed route — otherwise leaves this request hanging for
|
|
52
|
+
* the OS's own TCP timeout (minutes), and this process is what Teeras.app
|
|
53
|
+
* spawns behind a button. Four seconds sits inside the app's own five-second
|
|
54
|
+
* deadline, so the binary gives up first and the app gets a `fallback` line
|
|
55
|
+
* rather than having to kill a child that is still waiting.
|
|
56
|
+
*/
|
|
57
|
+
export declare const REPORT_TIMEOUT_MS = 4000;
|
|
58
|
+
/**
|
|
59
|
+
* Trades this device's token for a single-use, ~60-second link that opens
|
|
60
|
+
* the web report already signed in.
|
|
61
|
+
*
|
|
62
|
+
* Returns `null` — never throws — on every failure: offline, a network that
|
|
63
|
+
* hangs past `REPORT_TIMEOUT_MS`, 401 (the device connection expired or was
|
|
64
|
+
* revoked), a throttle, a malformed response, a link pointing somewhere
|
|
65
|
+
* else. "Open your report" must always open something, so the caller's job
|
|
66
|
+
* on `null` is simply to open `REPORT_FALLBACK_URL`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function reportUrl(credentials: CloudCredentials, fetcher?: Fetcher): Promise<string | null>;
|
|
69
|
+
/**
|
|
70
|
+
* Machine-readable half of `trs report`, for Teeras.app: exactly one JSON
|
|
71
|
+
* line, then nothing. `url` carries a signed-in link; `fallback` carries the
|
|
72
|
+
* plain site. The caller opens whichever arrives — this function never opens
|
|
73
|
+
* a browser itself. Same cross-language line contract as `connectMachine`:
|
|
74
|
+
* event and field names are frozen.
|
|
75
|
+
*/
|
|
76
|
+
export declare function reportMachine(home: string, emit: (line: string) => void, fetcher?: Fetcher): Promise<boolean>;
|
|
34
77
|
export declare function revokeDevice(credentials: CloudCredentials, fetcher?: Fetcher): Promise<boolean>;
|
|
35
78
|
/** The server rejected a token that still looks valid locally. `trs setup` self-heals this. */
|
|
36
79
|
export declare class ConnectionExpiredError extends Error {
|
package/dist/cloud.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../src/cloud.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,OAAO,GAAG,OAAO,KAAK,CAAC;AAI5B,wBAAgB,aAAa,CAAC,KAAK,qBAAyB,GAAG,MAAM,CASpE;AAED,wBAAgB,eAAe,CAAC,IAAI,SAAY,GAAG,MAAM,CAExD;AAED,wBAAgB,eAAe,CAAC,IAAI,SAAY,GAAG,gBAAgB,GAAG,IAAI,CAqBzE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,EAAE,IAAI,SAAY,GAAG,IAAI,CAMtF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,SAAY,GAAG,OAAO,CAO3D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQrD;AAMD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CActG;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAAO,GACzE,OAAO,CAAC,WAAW,CAAC,CA0BtB;AAED,wBAAsB,YAAY,CAChC,WAAW,EAAE,gBAAgB,EAC7B,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,+FAA+F;AAC/F,qBAAa,sBAAuB,SAAQ,KAAK;;CAKhD;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,EAAE,gBAAgB,EAC7B,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAAC,CAkBvD"}
|
|
1
|
+
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../src/cloud.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,OAAO,GAAG,OAAO,KAAK,CAAC;AAI5B,wBAAgB,aAAa,CAAC,KAAK,qBAAyB,GAAG,MAAM,CASpE;AAED,wBAAgB,eAAe,CAAC,IAAI,SAAY,GAAG,MAAM,CAExD;AAED,wBAAgB,eAAe,CAAC,IAAI,SAAY,GAAG,gBAAgB,GAAG,IAAI,CAqBzE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,EAAE,IAAI,SAAY,GAAG,IAAI,CAMtF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,SAAY,GAAG,OAAO,CAO3D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQrD;AAMD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CActG;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAAO,GACzE,OAAO,CAAC,WAAW,CAAC,CA0BtB;AAuBD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC5B,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,+BAA+B,CAAC;AAsBhE;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AAEvC;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,gBAAgB,EAC7B,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC5B,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED,wBAAsB,YAAY,CAChC,WAAW,EAAE,gBAAgB,EAC7B,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,+FAA+F;AAC/F,qBAAa,sBAAuB,SAAQ,KAAK;;CAKhD;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,EAAE,gBAAgB,EAC7B,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAAC,CAkBvD"}
|
package/dist/cloud.js
CHANGED
|
@@ -109,6 +109,133 @@ export async function pollDeviceLogin(baseUrl, grant, options = {}) {
|
|
|
109
109
|
}
|
|
110
110
|
throw new Error("The connection code expired");
|
|
111
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Slugs are stable across releases: Teeras.app pattern-matches on `reason`
|
|
114
|
+
* rather than the human-readable Error message, which is free to change.
|
|
115
|
+
*/
|
|
116
|
+
function machineFailureReason(error) {
|
|
117
|
+
const message = error instanceof Error ? error.message : "";
|
|
118
|
+
switch (message) {
|
|
119
|
+
case "The connection code expired":
|
|
120
|
+
return "expired";
|
|
121
|
+
case "Teeras rejected the connection":
|
|
122
|
+
return "rejected";
|
|
123
|
+
case "Teeras returned an invalid device token":
|
|
124
|
+
case "Teeras returned an invalid connection response":
|
|
125
|
+
return "invalid_response";
|
|
126
|
+
case "Teeras could not start the connection":
|
|
127
|
+
return "start_failed";
|
|
128
|
+
default:
|
|
129
|
+
return "error";
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Machine-readable pairing for Teeras.app: one JSON line per event on
|
|
134
|
+
* `emit`, never prose. Swift spawns `afterhours connect --json` and parses
|
|
135
|
+
* stdout line-by-line, so this line protocol is a cross-language contract —
|
|
136
|
+
* event names and field names must stay exact. The HTTP mechanics are the
|
|
137
|
+
* same `startDeviceLogin` → `pollDeviceLogin` → `writeCredentials` flow the
|
|
138
|
+
* interactive `connect` command uses; only the output format differs.
|
|
139
|
+
*/
|
|
140
|
+
export async function connectMachine(home, emit, fetcher = fetch) {
|
|
141
|
+
const baseUrl = teerasBaseUrl();
|
|
142
|
+
try {
|
|
143
|
+
const grant = await startDeviceLogin(baseUrl, fetcher);
|
|
144
|
+
emit(JSON.stringify({ event: "code", url: grant.verificationUri, code: grant.userCode }));
|
|
145
|
+
const token = await pollDeviceLogin(baseUrl, grant, { fetcher });
|
|
146
|
+
writeCredentials({
|
|
147
|
+
baseUrl,
|
|
148
|
+
accessToken: token.accessToken,
|
|
149
|
+
deviceId: token.deviceId,
|
|
150
|
+
connectedAt: new Date().toISOString(),
|
|
151
|
+
expiresAt: token.expiresAt,
|
|
152
|
+
}, home);
|
|
153
|
+
emit(JSON.stringify({ event: "connected" }));
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
emit(JSON.stringify({ event: "failed", reason: machineFailureReason(error) }));
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Where "open my report" goes when there is no signed-in link to open: the
|
|
163
|
+
* plain dashboard, which will ask for a sign-in like any other visit. Never
|
|
164
|
+
* an error, never nothing.
|
|
165
|
+
*/
|
|
166
|
+
export const REPORT_FALLBACK_URL = "https://www.teeras.com/app";
|
|
167
|
+
/**
|
|
168
|
+
* Same site as the credentials this token came from — the apex and its `www`
|
|
169
|
+
* twin count as the same site (the apex 308-redirects to www, and the server
|
|
170
|
+
* pins minted links to www). Anything else, or anything not HTTPS, is not a
|
|
171
|
+
* link this device asked for, so `reportUrl` discards it and the caller
|
|
172
|
+
* falls back to the plain site.
|
|
173
|
+
*/
|
|
174
|
+
function sameSiteReportUrl(candidate, baseUrl) {
|
|
175
|
+
try {
|
|
176
|
+
const url = new URL(candidate);
|
|
177
|
+
const base = new URL(baseUrl);
|
|
178
|
+
if (url.protocol !== base.protocol)
|
|
179
|
+
return null;
|
|
180
|
+
const strip = (host) => (host.startsWith("www.") ? host.slice(4) : host);
|
|
181
|
+
if (strip(url.host) !== strip(base.host))
|
|
182
|
+
return null;
|
|
183
|
+
return url.toString();
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* How long the login link is worth waiting for. A wedged network — a captive
|
|
191
|
+
* portal, a black-holed route — otherwise leaves this request hanging for
|
|
192
|
+
* the OS's own TCP timeout (minutes), and this process is what Teeras.app
|
|
193
|
+
* spawns behind a button. Four seconds sits inside the app's own five-second
|
|
194
|
+
* deadline, so the binary gives up first and the app gets a `fallback` line
|
|
195
|
+
* rather than having to kill a child that is still waiting.
|
|
196
|
+
*/
|
|
197
|
+
export const REPORT_TIMEOUT_MS = 4_000;
|
|
198
|
+
/**
|
|
199
|
+
* Trades this device's token for a single-use, ~60-second link that opens
|
|
200
|
+
* the web report already signed in.
|
|
201
|
+
*
|
|
202
|
+
* Returns `null` — never throws — on every failure: offline, a network that
|
|
203
|
+
* hangs past `REPORT_TIMEOUT_MS`, 401 (the device connection expired or was
|
|
204
|
+
* revoked), a throttle, a malformed response, a link pointing somewhere
|
|
205
|
+
* else. "Open your report" must always open something, so the caller's job
|
|
206
|
+
* on `null` is simply to open `REPORT_FALLBACK_URL`.
|
|
207
|
+
*/
|
|
208
|
+
export async function reportUrl(credentials, fetcher = fetch) {
|
|
209
|
+
try {
|
|
210
|
+
const response = await fetcher(`${credentials.baseUrl}/api/afterhours/device/web-login`, {
|
|
211
|
+
method: "POST",
|
|
212
|
+
headers: { authorization: `Bearer ${credentials.accessToken}` },
|
|
213
|
+
signal: AbortSignal.timeout(REPORT_TIMEOUT_MS),
|
|
214
|
+
});
|
|
215
|
+
if (!response.ok)
|
|
216
|
+
return null;
|
|
217
|
+
const value = object(await response.json().catch(() => null));
|
|
218
|
+
if (typeof value?.url !== "string")
|
|
219
|
+
return null;
|
|
220
|
+
return sameSiteReportUrl(value.url, credentials.baseUrl);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Machine-readable half of `trs report`, for Teeras.app: exactly one JSON
|
|
228
|
+
* line, then nothing. `url` carries a signed-in link; `fallback` carries the
|
|
229
|
+
* plain site. The caller opens whichever arrives — this function never opens
|
|
230
|
+
* a browser itself. Same cross-language line contract as `connectMachine`:
|
|
231
|
+
* event and field names are frozen.
|
|
232
|
+
*/
|
|
233
|
+
export async function reportMachine(home, emit, fetcher = fetch) {
|
|
234
|
+
const credentials = readCredentials(home);
|
|
235
|
+
const url = credentials ? await reportUrl(credentials, fetcher) : null;
|
|
236
|
+
emit(JSON.stringify(url ? { event: "url", url } : { event: "fallback", url: REPORT_FALLBACK_URL }));
|
|
237
|
+
return url !== null;
|
|
238
|
+
}
|
|
112
239
|
export async function revokeDevice(credentials, fetcher = fetch) {
|
|
113
240
|
try {
|
|
114
241
|
const response = await fetcher(`${credentials.baseUrl}/api/afterhours/device/revoke`, {
|
package/dist/cloud.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../src/cloud.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../src/cloud.ts"],"names":[],"mappings":"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"}
|
package/dist/collect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../src/collect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../src/collect.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEpE,eAAO,MAAM,OAAO,EAAE,SAAS,aAAa,EAA6E,CAAC;AAE1H,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAYD,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,cAAmB,GAAG,kBAAkB,CAmBvF;AAED,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,cAAmB,GAAG,kBAAkB,CAMlF"}
|
package/dist/collect.js
CHANGED
|
@@ -5,7 +5,8 @@ import { claudeSource } from "./sources/claude.js";
|
|
|
5
5
|
import { codexSource } from "./sources/codex.js";
|
|
6
6
|
import { cursorSource } from "./sources/cursor.js";
|
|
7
7
|
import { geminiSource } from "./sources/gemini.js";
|
|
8
|
-
|
|
8
|
+
import { macosAppsSource } from "./sources/macosApps.js";
|
|
9
|
+
export const SOURCES = [claudeSource, codexSource, geminiSource, cursorSource, macosAppsSource];
|
|
9
10
|
/** The machine's IANA timezone name, or null when the runtime cannot say. */
|
|
10
11
|
function machineTimezone() {
|
|
11
12
|
try {
|
package/dist/collect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collect.js","sourceRoot":"","sources":["../src/collect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"collect.js","sourceRoot":"","sources":["../src/collect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,MAAM,CAAC,MAAM,OAAO,GAA6B,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;AAW1H,6EAA6E;AAC7E,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;QAC5D,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,UAA0B,EAAE;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACnF,IAAI,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG;QACZ,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE;QAC/B,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;QACxB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,uBAAuB;KACtE,CAAC;IACF,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;QAChC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;QAC1B,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;QAC1B,EAAE,EAAE,eAAe,EAAE;QACrB,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5E,QAAQ,EAAE,aAAa;KACxB,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,iBAAiB,CAAC,UAA0B,EAAE;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;IACvC,sEAAsE;IACtE,uEAAuE;IACvE,gFAAgF;IAChF,OAAO,sBAAsB,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnG,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { collectAfterhours, SOURCES, type CollectOptions } from "./collect.js";
|
|
2
|
-
export { ConnectionExpiredError, credentialsPath, openVerificationUri, pollDeviceLogin, readCredentials, removeCredentials, startDeviceLogin, syncSnapshot, revokeDevice, teerasBaseUrl, writeCredentials, type CloudCredentials, type DeviceGrant, } from "./cloud.js";
|
|
2
|
+
export { ConnectionExpiredError, connectMachine, credentialsPath, openVerificationUri, pollDeviceLogin, readCredentials, removeCredentials, REPORT_FALLBACK_URL, REPORT_TIMEOUT_MS, reportMachine, reportUrl, startDeviceLogin, syncSnapshot, revokeDevice, teerasBaseUrl, writeCredentials, type CloudCredentials, type DeviceGrant, } from "./cloud.js";
|
|
3
3
|
export { DATA_BOUNDARY } from "./privacy.js";
|
|
4
4
|
export { claudeHookSettings, codexHookSettings, hookJournalPath, hookJournalReport, ingestClaudeHook, ingestCodexHook, readContentFreeHookEvents, type ContentFreeHookEvent, type HookJournalReport, type HookSignal, type HookSourceId, } from "./hooks.js";
|
|
5
5
|
export { ensureEpisodeSecret, episodeSecretPath } from "./secret.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,EACzB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EACb,KAAK,SAAS,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,EACzB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EACb,KAAK,SAAS,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { collectAfterhours, SOURCES } from "./collect.js";
|
|
2
|
-
export { ConnectionExpiredError, credentialsPath, openVerificationUri, pollDeviceLogin, readCredentials, removeCredentials, startDeviceLogin, syncSnapshot, revokeDevice, teerasBaseUrl, writeCredentials, } from "./cloud.js";
|
|
2
|
+
export { ConnectionExpiredError, connectMachine, credentialsPath, openVerificationUri, pollDeviceLogin, readCredentials, removeCredentials, REPORT_FALLBACK_URL, REPORT_TIMEOUT_MS, reportMachine, reportUrl, startDeviceLogin, syncSnapshot, revokeDevice, teerasBaseUrl, writeCredentials, } from "./cloud.js";
|
|
3
3
|
export { DATA_BOUNDARY } from "./privacy.js";
|
|
4
4
|
export { claudeHookSettings, codexHookSettings, hookJournalPath, hookJournalReport, ingestClaudeHook, ingestCodexHook, readContentFreeHookEvents, } from "./hooks.js";
|
|
5
5
|
export { ensureEpisodeSecret, episodeSecretPath } from "./secret.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAuB,MAAM,cAAc,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,GAGjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,GAK1B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GAGb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAqD,MAAM,UAAU,CAAC;AACrF,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,GAEd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAqB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAuB,MAAM,cAAc,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,GAGjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,GAK1B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GAGb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAqD,MAAM,UAAU,CAAC;AACrF,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,GAEd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAqB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** v1 spool contract with Teeras.app — any change bumps `v`. */
|
|
2
|
+
export interface SpoolRecord {
|
|
3
|
+
v: 1;
|
|
4
|
+
kind: "app_session";
|
|
5
|
+
app_id: string;
|
|
6
|
+
started_at: string;
|
|
7
|
+
ended_at: string;
|
|
8
|
+
local_date: string;
|
|
9
|
+
fg_seconds_by_hour: Record<string, number>;
|
|
10
|
+
}
|
|
11
|
+
export interface SpoolReadResult {
|
|
12
|
+
records: SpoolRecord[];
|
|
13
|
+
quarantinedLines: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function spoolDir(home: string): string;
|
|
16
|
+
export declare function readSpool(dir: string): SpoolReadResult;
|
|
17
|
+
/** Rewrite spool files dropping records fully synced (ended_at <= upToIso). */
|
|
18
|
+
export declare function compactSpool(dir: string, upToIso: string): number;
|
|
19
|
+
//# sourceMappingURL=spool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spool.d.ts","sourceRoot":"","sources":["../../src/macos/spool.ts"],"names":[],"mappings":"AAIA,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,CAAC,CAAC;IACL,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AA4BD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAsCtD;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA2BjE"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { appendFileSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { isDirectory } from "../files.js";
|
|
4
|
+
export function spoolDir(home) {
|
|
5
|
+
return join(home, "Library", "Application Support", "Teeras", "spool");
|
|
6
|
+
}
|
|
7
|
+
function asSpoolRecord(value) {
|
|
8
|
+
if (typeof value !== "object" || value === null)
|
|
9
|
+
return null;
|
|
10
|
+
const row = value;
|
|
11
|
+
if (row.v !== 1 || row.kind !== "app_session")
|
|
12
|
+
return null;
|
|
13
|
+
if (typeof row.app_id !== "string" || row.app_id.length === 0)
|
|
14
|
+
return null;
|
|
15
|
+
for (const key of ["started_at", "ended_at"]) {
|
|
16
|
+
if (typeof row[key] !== "string" || Number.isNaN(Date.parse(row[key])))
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
// local_date drives bucket-key math downstream (toBuckets, compactSpool's
|
|
20
|
+
// watermark comparisons don't use it, but macosApps.ts's toBuckets does) —
|
|
21
|
+
// a non-YYYY-MM-DD value is a poison pill there, so quarantine it here.
|
|
22
|
+
if (typeof row.local_date !== "string" || !/^\d{4}-\d{2}-\d{2}$/.test(row.local_date))
|
|
23
|
+
return null;
|
|
24
|
+
const hours = row.fg_seconds_by_hour;
|
|
25
|
+
if (typeof hours !== "object" || hours === null)
|
|
26
|
+
return null;
|
|
27
|
+
for (const [hour, seconds] of Object.entries(hours)) {
|
|
28
|
+
const h = Number(hour);
|
|
29
|
+
if (!Number.isInteger(h) || h < 0 || h > 23)
|
|
30
|
+
return null;
|
|
31
|
+
if (typeof seconds !== "number" || seconds < 0 || seconds > 3600)
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return row;
|
|
35
|
+
}
|
|
36
|
+
function spoolFiles(dir) {
|
|
37
|
+
return readdirSync(dir).filter((name) => name.endsWith(".jsonl")).sort().map((name) => join(dir, name));
|
|
38
|
+
}
|
|
39
|
+
export function readSpool(dir) {
|
|
40
|
+
if (!isDirectory(dir))
|
|
41
|
+
return { records: [], quarantinedLines: 0 };
|
|
42
|
+
const records = [];
|
|
43
|
+
let quarantinedLines = 0;
|
|
44
|
+
for (const file of spoolFiles(dir)) {
|
|
45
|
+
const kept = [];
|
|
46
|
+
const bad = [];
|
|
47
|
+
// Line-by-line parsing with error signal required for quarantine:
|
|
48
|
+
// parseLines silently skips unparseable lines and loses the raw text,
|
|
49
|
+
// preventing the move-not-copy semantics (idempotent rewrite) needed here.
|
|
50
|
+
for (const line of readFileSync(file, "utf8").split("\n")) {
|
|
51
|
+
if (!line.trim())
|
|
52
|
+
continue;
|
|
53
|
+
let parsed = null;
|
|
54
|
+
try {
|
|
55
|
+
parsed = asSpoolRecord(JSON.parse(line));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
parsed = null;
|
|
59
|
+
}
|
|
60
|
+
if (parsed) {
|
|
61
|
+
records.push(parsed);
|
|
62
|
+
kept.push(line);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
bad.push(line);
|
|
66
|
+
quarantinedLines += 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Only touch the file when there's actually something to quarantine — an
|
|
70
|
+
// unconditional rewrite is a truncate window that can clobber a concurrent
|
|
71
|
+
// Swift O_APPEND append to a file that had nothing wrong with it.
|
|
72
|
+
if (bad.length > 0) {
|
|
73
|
+
// Append bad lines to the quarantine file BEFORE rewriting the source: if
|
|
74
|
+
// the process dies between the two writes, the bad lines exist in both
|
|
75
|
+
// places (safe, re-quarantinable) rather than in neither (lost).
|
|
76
|
+
appendFileSync(`${file}.bad`, `${bad.join("\n")}\n`);
|
|
77
|
+
writeFileSync(file, kept.length > 0 ? `${kept.join("\n")}\n` : "");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return { records, quarantinedLines };
|
|
81
|
+
}
|
|
82
|
+
/** Rewrite spool files dropping records fully synced (ended_at <= upToIso). */
|
|
83
|
+
export function compactSpool(dir, upToIso) {
|
|
84
|
+
if (!isDirectory(dir))
|
|
85
|
+
return 0;
|
|
86
|
+
const watermark = Date.parse(upToIso);
|
|
87
|
+
let dropped = 0;
|
|
88
|
+
for (const file of spoolFiles(dir)) {
|
|
89
|
+
const kept = [];
|
|
90
|
+
let droppedInFile = 0;
|
|
91
|
+
for (const line of readFileSync(file, "utf8").split("\n")) {
|
|
92
|
+
if (!line.trim())
|
|
93
|
+
continue;
|
|
94
|
+
let keep = true;
|
|
95
|
+
try {
|
|
96
|
+
const parsed = asSpoolRecord(JSON.parse(line));
|
|
97
|
+
if (parsed && Date.parse(parsed.ended_at) <= watermark)
|
|
98
|
+
keep = false;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Unparseable lines are readSpool's quarantine problem, not compaction's.
|
|
102
|
+
}
|
|
103
|
+
if (keep)
|
|
104
|
+
kept.push(line);
|
|
105
|
+
else
|
|
106
|
+
droppedInFile += 1;
|
|
107
|
+
}
|
|
108
|
+
// Same truncate-window guard as readSpool: nothing dropped means nothing
|
|
109
|
+
// to rewrite, so leave the file (and a concurrent appender) alone.
|
|
110
|
+
if (droppedInFile > 0) {
|
|
111
|
+
writeFileSync(file, kept.length > 0 ? `${kept.join("\n")}\n` : "");
|
|
112
|
+
}
|
|
113
|
+
dropped += droppedInFile;
|
|
114
|
+
}
|
|
115
|
+
return dropped;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=spool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spool.js","sourceRoot":"","sources":["../../src/macos/spool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AfterhoursSnapshot } from "../types.js";
|
|
2
|
+
export type SyncState = "ok" | "offline" | "signed_out" | "error";
|
|
3
|
+
export interface AppStatusLine {
|
|
4
|
+
lastActivityAt: string | null;
|
|
5
|
+
resolution: "minute" | "hour";
|
|
6
|
+
eveningsKept7d: number;
|
|
7
|
+
}
|
|
8
|
+
export interface AppStatusSource {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
configured: boolean;
|
|
12
|
+
fidelity: string;
|
|
13
|
+
sessions: number;
|
|
14
|
+
}
|
|
15
|
+
export interface AppStatus {
|
|
16
|
+
v: 1;
|
|
17
|
+
generatedAt: string;
|
|
18
|
+
sources: AppStatusSource[];
|
|
19
|
+
sync: {
|
|
20
|
+
state: SyncState;
|
|
21
|
+
lastAckAt: string | null;
|
|
22
|
+
pendingSessions: number;
|
|
23
|
+
};
|
|
24
|
+
line: AppStatusLine;
|
|
25
|
+
spool: {
|
|
26
|
+
quarantinedLines: number;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export declare function statusPath(home: string): string;
|
|
30
|
+
export declare function buildStatus(snapshot: AfterhoursSnapshot, sync: AppStatus["sync"], spool: AppStatus["spool"]): AppStatus;
|
|
31
|
+
export declare function writeStatus(home: string, status: AppStatus): void;
|
|
32
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/macos/status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,CAAC,CAAC;IACL,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,IAAI,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9E,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CACrC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,EACvB,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,GACxB,SAAS,CAwCX;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAMjE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { mkdirSync, renameSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { localDateOf } from "../activity.js";
|
|
4
|
+
export function statusPath(home) {
|
|
5
|
+
return join(home, "Library", "Application Support", "Teeras", "status.json");
|
|
6
|
+
}
|
|
7
|
+
export function buildStatus(snapshot, sync, spool) {
|
|
8
|
+
let lastActivityAt = null;
|
|
9
|
+
let resolution = "hour";
|
|
10
|
+
const eveningDatesWithActivity = new Set();
|
|
11
|
+
for (const source of snapshot.sources) {
|
|
12
|
+
for (const episode of source.episodes) {
|
|
13
|
+
if (lastActivityAt === null || episode.endedAt > lastActivityAt) {
|
|
14
|
+
lastActivityAt = episode.endedAt;
|
|
15
|
+
resolution = "minute";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
for (const bucket of source.buckets) {
|
|
19
|
+
const active = bucket.agentTurns + bucket.humanCheckIns + bucket.agentActiveMinutes + bucket.humanAttentionMinutes > 0;
|
|
20
|
+
if (!active)
|
|
21
|
+
continue;
|
|
22
|
+
if (lastActivityAt === null || bucket.hour > lastActivityAt) {
|
|
23
|
+
lastActivityAt = bucket.hour;
|
|
24
|
+
resolution = "hour";
|
|
25
|
+
}
|
|
26
|
+
if (bucket.localHour >= 21)
|
|
27
|
+
eveningDatesWithActivity.add(bucket.localDate);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Last 7 full local dates before the snapshot's `until` date.
|
|
31
|
+
const untilDate = localDateOf(Date.parse(snapshot.until));
|
|
32
|
+
let eveningsKept7d = 0;
|
|
33
|
+
const cursor = new Date(`${untilDate}T12:00:00Z`);
|
|
34
|
+
for (let i = 0; i < 7; i += 1) {
|
|
35
|
+
cursor.setUTCDate(cursor.getUTCDate() - 1);
|
|
36
|
+
if (!eveningDatesWithActivity.has(cursor.toISOString().slice(0, 10)))
|
|
37
|
+
eveningsKept7d += 1;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
v: 1,
|
|
41
|
+
generatedAt: snapshot.generatedAt,
|
|
42
|
+
sources: snapshot.sources.map((s) => ({ id: s.id, name: s.name, configured: s.configured, fidelity: s.fidelity, sessions: s.sessions })),
|
|
43
|
+
sync,
|
|
44
|
+
line: { lastActivityAt, resolution, eveningsKept7d },
|
|
45
|
+
spool,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export function writeStatus(home, status) {
|
|
49
|
+
const path = statusPath(home);
|
|
50
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
51
|
+
const tmp = `${path}.tmp`;
|
|
52
|
+
writeFileSync(tmp, `${JSON.stringify(status, null, 2)}\n`);
|
|
53
|
+
renameSync(tmp, path);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/macos/status.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/package.json
CHANGED