trainbud 0.5.0 → 0.5.1
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/.env.example +11 -11
- package/CHANGELOG.md +719 -675
- package/QUICKSTART.md +185 -182
- package/README.md +323 -322
- package/dist/appDb.js +51 -51
- package/dist/dashboard.js +820 -820
- package/dist/dashboardCharts.js +42 -42
- package/dist/history/context.js +35 -35
- package/dist/history/schema.js +66 -66
- package/dist/promptApi.js +5 -5
- package/dist/usage.js +17 -17
- package/package.json +78 -77
- package/dist/appDb.d.ts.map +0 -1
- package/dist/appDb.js.map +0 -1
- package/dist/check.d.ts.map +0 -1
- package/dist/check.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/dashboard.d.ts.map +0 -1
- package/dist/dashboard.js.map +0 -1
- package/dist/dashboardCharts.d.ts.map +0 -1
- package/dist/dashboardCharts.js.map +0 -1
- package/dist/dashboardData.d.ts.map +0 -1
- package/dist/dashboardData.js.map +0 -1
- package/dist/detect/baseline.d.ts.map +0 -1
- package/dist/detect/baseline.js.map +0 -1
- package/dist/detect/countdown.d.ts.map +0 -1
- package/dist/detect/countdown.js.map +0 -1
- package/dist/detect/detectors.d.ts.map +0 -1
- package/dist/detect/detectors.js.map +0 -1
- package/dist/detect/findings.d.ts.map +0 -1
- package/dist/detect/findings.js.map +0 -1
- package/dist/detect/forecast.d.ts.map +0 -1
- package/dist/detect/forecast.js.map +0 -1
- package/dist/detect/index.d.ts.map +0 -1
- package/dist/detect/index.js.map +0 -1
- package/dist/detect/sleepQuality.d.ts.map +0 -1
- package/dist/detect/sleepQuality.js.map +0 -1
- package/dist/detect/trimp.d.ts.map +0 -1
- package/dist/detect/trimp.js.map +0 -1
- package/dist/detect/week.d.ts.map +0 -1
- package/dist/detect/week.js.map +0 -1
- package/dist/garmin/auth.d.ts.map +0 -1
- package/dist/garmin/auth.js.map +0 -1
- package/dist/garmin/cache.d.ts.map +0 -1
- package/dist/garmin/cache.js.map +0 -1
- package/dist/garmin/client.d.ts.map +0 -1
- package/dist/garmin/client.js.map +0 -1
- package/dist/garmin/daily.d.ts.map +0 -1
- package/dist/garmin/daily.js.map +0 -1
- package/dist/garmin/garminApiTypes.d.ts.map +0 -1
- package/dist/garmin/garminApiTypes.js.map +0 -1
- package/dist/garmin/garminConnect.d.ts.map +0 -1
- package/dist/garmin/garminConnect.js.map +0 -1
- package/dist/garmin/partial.d.ts.map +0 -1
- package/dist/garmin/partial.js.map +0 -1
- package/dist/garmin/rawApi.d.ts.map +0 -1
- package/dist/garmin/rawApi.js.map +0 -1
- package/dist/garmin/types.d.ts.map +0 -1
- package/dist/garmin/types.js.map +0 -1
- package/dist/history/capture.d.ts.map +0 -1
- package/dist/history/capture.js.map +0 -1
- package/dist/history/context.d.ts.map +0 -1
- package/dist/history/context.js.map +0 -1
- package/dist/history/fallback.d.ts.map +0 -1
- package/dist/history/fallback.js.map +0 -1
- package/dist/history/ingest.d.ts.map +0 -1
- package/dist/history/ingest.js.map +0 -1
- package/dist/history/scheduler.d.ts.map +0 -1
- package/dist/history/scheduler.js.map +0 -1
- package/dist/history/schema.d.ts.map +0 -1
- package/dist/history/schema.js.map +0 -1
- package/dist/history/store.d.ts.map +0 -1
- package/dist/history/store.js.map +0 -1
- package/dist/httpServer.d.ts.map +0 -1
- package/dist/httpServer.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/mcpConfig.d.ts.map +0 -1
- package/dist/mcpConfig.js.map +0 -1
- package/dist/pairApi.d.ts.map +0 -1
- package/dist/pairApi.js.map +0 -1
- package/dist/paths.d.ts.map +0 -1
- package/dist/paths.js.map +0 -1
- package/dist/profile.d.ts.map +0 -1
- package/dist/profile.js.map +0 -1
- package/dist/promptApi.d.ts.map +0 -1
- package/dist/promptApi.js.map +0 -1
- package/dist/promptSuggestions.d.ts.map +0 -1
- package/dist/promptSuggestions.js.map +0 -1
- package/dist/selfTest.d.ts.map +0 -1
- package/dist/selfTest.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/setup.d.ts.map +0 -1
- package/dist/setup.js.map +0 -1
- package/dist/toolErrors.d.ts.map +0 -1
- package/dist/toolErrors.js.map +0 -1
- package/dist/tools/activities.d.ts.map +0 -1
- package/dist/tools/activities.js.map +0 -1
- package/dist/tools/bodyComposition.d.ts.map +0 -1
- package/dist/tools/bodyComposition.js.map +0 -1
- package/dist/tools/context.d.ts.map +0 -1
- package/dist/tools/context.js.map +0 -1
- package/dist/tools/findings.d.ts.map +0 -1
- package/dist/tools/findings.js.map +0 -1
- package/dist/tools/heartRate.d.ts.map +0 -1
- package/dist/tools/heartRate.js.map +0 -1
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/payloads.d.ts.map +0 -1
- package/dist/tools/payloads.js.map +0 -1
- package/dist/tools/recovery.d.ts.map +0 -1
- package/dist/tools/recovery.js.map +0 -1
- package/dist/tools/sleep.d.ts.map +0 -1
- package/dist/tools/sleep.js.map +0 -1
- package/dist/tools/stress.d.ts.map +0 -1
- package/dist/tools/stress.js.map +0 -1
- package/dist/tools/trainingInsights.d.ts.map +0 -1
- package/dist/tools/trainingInsights.js.map +0 -1
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js.map +0 -1
- package/dist/tools/vo2Max.d.ts.map +0 -1
- package/dist/tools/vo2Max.js.map +0 -1
- package/dist/tools/week.d.ts.map +0 -1
- package/dist/tools/week.js.map +0 -1
- package/dist/usage.d.ts.map +0 -1
- package/dist/usage.js.map +0 -1
- package/dist/utils/batch.d.ts.map +0 -1
- package/dist/utils/batch.js.map +0 -1
- package/dist/utils/helpers.d.ts.map +0 -1
- package/dist/utils/helpers.js.map +0 -1
- package/dist/utils/jsonFile.d.ts.map +0 -1
- package/dist/utils/jsonFile.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/secretFile.d.ts.map +0 -1
- package/dist/utils/secretFile.js.map +0 -1
- package/dist/utils/stdio.d.ts.map +0 -1
- package/dist/utils/stdio.js.map +0 -1
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js.map +0 -1
- package/dist/watchApi.d.ts.map +0 -1
- package/dist/watchApi.js.map +0 -1
package/dist/appDb.js
CHANGED
|
@@ -7,52 +7,52 @@ import { restrictExistingFile } from "./utils/secretFile.js";
|
|
|
7
7
|
// SECTION: App DB — settings, pair tokens, prompt jobs
|
|
8
8
|
const DB_PATH = path.resolve(path.dirname(appConfig.cachePath), "app.db");
|
|
9
9
|
let _db = null;
|
|
10
|
-
export const APP_DB_SCHEMA = `
|
|
11
|
-
CREATE TABLE IF NOT EXISTS settings (
|
|
12
|
-
key TEXT PRIMARY KEY,
|
|
13
|
-
value TEXT NOT NULL
|
|
14
|
-
);
|
|
15
|
-
CREATE TABLE IF NOT EXISTS pair_tokens (
|
|
16
|
-
code TEXT PRIMARY KEY,
|
|
17
|
-
created_at INTEGER NOT NULL,
|
|
18
|
-
expires_at INTEGER NOT NULL,
|
|
19
|
-
approved_at INTEGER
|
|
20
|
-
);
|
|
21
|
-
CREATE TABLE IF NOT EXISTS prompt_jobs (
|
|
22
|
-
id TEXT PRIMARY KEY,
|
|
23
|
-
prompt TEXT NOT NULL,
|
|
24
|
-
status TEXT NOT NULL DEFAULT 'pending',
|
|
25
|
-
result TEXT,
|
|
26
|
-
error TEXT,
|
|
27
|
-
created_at INTEGER NOT NULL,
|
|
28
|
-
completed_at INTEGER
|
|
29
|
-
);
|
|
30
|
-
|
|
31
|
-
-- Usage. cost_usd is nullable ON PURPOSE: a model this build has no
|
|
32
|
-
-- published price for records its tokens and leaves the cost unknown,
|
|
33
|
-
-- because a call priced at zero is a monthly cap that can never trip.
|
|
34
|
-
-- The schema lives here rather than in usage.ts so that opening the
|
|
35
|
-
-- database does not have to import the module that writes to it.
|
|
36
|
-
CREATE TABLE IF NOT EXISTS ai_usage (
|
|
37
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
38
|
-
at INTEGER NOT NULL,
|
|
39
|
-
kind TEXT NOT NULL,
|
|
40
|
-
model TEXT NOT NULL,
|
|
41
|
-
source TEXT NOT NULL,
|
|
42
|
-
input_tokens INTEGER NOT NULL,
|
|
43
|
-
output_tokens INTEGER NOT NULL,
|
|
44
|
-
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
|
|
45
|
-
cache_write_tokens INTEGER NOT NULL DEFAULT 0,
|
|
46
|
-
cost_usd REAL
|
|
47
|
-
);
|
|
48
|
-
CREATE INDEX IF NOT EXISTS ai_usage_at ON ai_usage(at);
|
|
49
|
-
|
|
50
|
-
CREATE TABLE IF NOT EXISTS feature_usage (
|
|
51
|
-
name TEXT NOT NULL,
|
|
52
|
-
day TEXT NOT NULL,
|
|
53
|
-
count INTEGER NOT NULL,
|
|
54
|
-
PRIMARY KEY (name, day)
|
|
55
|
-
);
|
|
10
|
+
export const APP_DB_SCHEMA = `
|
|
11
|
+
CREATE TABLE IF NOT EXISTS settings (
|
|
12
|
+
key TEXT PRIMARY KEY,
|
|
13
|
+
value TEXT NOT NULL
|
|
14
|
+
);
|
|
15
|
+
CREATE TABLE IF NOT EXISTS pair_tokens (
|
|
16
|
+
code TEXT PRIMARY KEY,
|
|
17
|
+
created_at INTEGER NOT NULL,
|
|
18
|
+
expires_at INTEGER NOT NULL,
|
|
19
|
+
approved_at INTEGER
|
|
20
|
+
);
|
|
21
|
+
CREATE TABLE IF NOT EXISTS prompt_jobs (
|
|
22
|
+
id TEXT PRIMARY KEY,
|
|
23
|
+
prompt TEXT NOT NULL,
|
|
24
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
25
|
+
result TEXT,
|
|
26
|
+
error TEXT,
|
|
27
|
+
created_at INTEGER NOT NULL,
|
|
28
|
+
completed_at INTEGER
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
-- Usage. cost_usd is nullable ON PURPOSE: a model this build has no
|
|
32
|
+
-- published price for records its tokens and leaves the cost unknown,
|
|
33
|
+
-- because a call priced at zero is a monthly cap that can never trip.
|
|
34
|
+
-- The schema lives here rather than in usage.ts so that opening the
|
|
35
|
+
-- database does not have to import the module that writes to it.
|
|
36
|
+
CREATE TABLE IF NOT EXISTS ai_usage (
|
|
37
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
38
|
+
at INTEGER NOT NULL,
|
|
39
|
+
kind TEXT NOT NULL,
|
|
40
|
+
model TEXT NOT NULL,
|
|
41
|
+
source TEXT NOT NULL,
|
|
42
|
+
input_tokens INTEGER NOT NULL,
|
|
43
|
+
output_tokens INTEGER NOT NULL,
|
|
44
|
+
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
|
|
45
|
+
cache_write_tokens INTEGER NOT NULL DEFAULT 0,
|
|
46
|
+
cost_usd REAL
|
|
47
|
+
);
|
|
48
|
+
CREATE INDEX IF NOT EXISTS ai_usage_at ON ai_usage(at);
|
|
49
|
+
|
|
50
|
+
CREATE TABLE IF NOT EXISTS feature_usage (
|
|
51
|
+
name TEXT NOT NULL,
|
|
52
|
+
day TEXT NOT NULL,
|
|
53
|
+
count INTEGER NOT NULL,
|
|
54
|
+
PRIMARY KEY (name, day)
|
|
55
|
+
);
|
|
56
56
|
`;
|
|
57
57
|
function getDb() {
|
|
58
58
|
if (_db)
|
|
@@ -190,11 +190,11 @@ export const STALE_PROMPT_JOB_SECONDS = 5 * 60;
|
|
|
190
190
|
* in flight.
|
|
191
191
|
*/
|
|
192
192
|
export function reconcileStalePromptJobs(db, now = Math.floor(Date.now() / 1000)) {
|
|
193
|
-
db.prepare(`UPDATE prompt_jobs
|
|
194
|
-
SET status = 'error',
|
|
195
|
-
error = 'The server stopped before this answer came back.',
|
|
196
|
-
completed_at = ?
|
|
197
|
-
WHERE status IN ('pending', 'running')
|
|
193
|
+
db.prepare(`UPDATE prompt_jobs
|
|
194
|
+
SET status = 'error',
|
|
195
|
+
error = 'The server stopped before this answer came back.',
|
|
196
|
+
completed_at = ?
|
|
197
|
+
WHERE status IN ('pending', 'running')
|
|
198
198
|
AND created_at < ?`).run(now, now - STALE_PROMPT_JOB_SECONDS);
|
|
199
199
|
prunePromptJobs(db, now);
|
|
200
200
|
}
|