tokenlenses 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.
@@ -0,0 +1,169 @@
1
+ PRAGMA journal_mode = WAL;
2
+ PRAGMA foreign_keys = ON;
3
+
4
+ CREATE TABLE IF NOT EXISTS machines (
5
+ id TEXT PRIMARY KEY,
6
+ user_id TEXT,
7
+ access_token TEXT,
8
+ cloud_api_base TEXT,
9
+ linked_at TEXT,
10
+ privacy_mode TEXT NOT NULL DEFAULT 'local_only',
11
+ last_sync_at TEXT,
12
+ created_at TEXT NOT NULL
13
+ );
14
+
15
+ CREATE TABLE IF NOT EXISTS app_settings (
16
+ key TEXT PRIMARY KEY,
17
+ value_json TEXT NOT NULL,
18
+ updated_at TEXT NOT NULL
19
+ );
20
+
21
+ CREATE TABLE IF NOT EXISTS sessions (
22
+ id TEXT PRIMARY KEY,
23
+ provider TEXT NOT NULL,
24
+ cwd TEXT,
25
+ project_name TEXT,
26
+ transcript_path TEXT,
27
+ started_at TEXT NOT NULL,
28
+ ended_at TEXT,
29
+ title TEXT,
30
+ total_input_tokens INTEGER NOT NULL DEFAULT 0,
31
+ total_output_tokens INTEGER NOT NULL DEFAULT 0,
32
+ total_cache_read_tokens INTEGER NOT NULL DEFAULT 0,
33
+ total_cache_write_tokens INTEGER NOT NULL DEFAULT 0,
34
+ total_reasoning_tokens INTEGER NOT NULL DEFAULT 0,
35
+ total_tokens INTEGER NOT NULL DEFAULT 0,
36
+ total_cost_usd REAL NOT NULL DEFAULT 0,
37
+ explanation_status TEXT NOT NULL DEFAULT 'pending',
38
+ created_at TEXT NOT NULL,
39
+ updated_at TEXT NOT NULL
40
+ );
41
+
42
+ CREATE INDEX IF NOT EXISTS idx_sessions_started_at ON sessions(started_at DESC);
43
+ CREATE INDEX IF NOT EXISTS idx_sessions_provider ON sessions(provider);
44
+
45
+ CREATE TABLE IF NOT EXISTS turns (
46
+ id TEXT PRIMARY KEY,
47
+ session_id TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
48
+ turn_index INTEGER,
49
+ user_prompt TEXT,
50
+ started_at TEXT NOT NULL,
51
+ ended_at TEXT,
52
+ input_tokens INTEGER NOT NULL DEFAULT 0,
53
+ output_tokens INTEGER NOT NULL DEFAULT 0,
54
+ cache_read_tokens INTEGER NOT NULL DEFAULT 0,
55
+ cache_write_tokens INTEGER NOT NULL DEFAULT 0,
56
+ reasoning_tokens INTEGER NOT NULL DEFAULT 0,
57
+ cost_usd REAL NOT NULL DEFAULT 0
58
+ );
59
+
60
+ CREATE INDEX IF NOT EXISTS idx_turns_session ON turns(session_id, started_at);
61
+
62
+ CREATE TABLE IF NOT EXISTS raw_events (
63
+ id TEXT PRIMARY KEY,
64
+ provider TEXT NOT NULL,
65
+ session_id TEXT NOT NULL,
66
+ turn_id TEXT,
67
+ event_type TEXT NOT NULL,
68
+ timestamp TEXT NOT NULL,
69
+ cwd TEXT,
70
+ transcript_path TEXT,
71
+ payload_json TEXT NOT NULL,
72
+ content_hash TEXT,
73
+ created_at TEXT NOT NULL
74
+ );
75
+
76
+ CREATE INDEX IF NOT EXISTS idx_raw_events_session_time ON raw_events(session_id, timestamp);
77
+ CREATE INDEX IF NOT EXISTS idx_raw_events_type ON raw_events(event_type);
78
+
79
+ CREATE TABLE IF NOT EXISTS context_spans (
80
+ id TEXT PRIMARY KEY,
81
+ session_id TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
82
+ turn_id TEXT,
83
+ provider TEXT NOT NULL,
84
+ bucket TEXT NOT NULL,
85
+ timestamp TEXT NOT NULL,
86
+ file_path TEXT,
87
+ start_line INTEGER,
88
+ end_line INTEGER,
89
+ command TEXT,
90
+ content_hash TEXT NOT NULL,
91
+ content_preview TEXT NOT NULL,
92
+ estimated_tokens INTEGER NOT NULL,
93
+ official_turn_tokens INTEGER,
94
+ confidence TEXT NOT NULL DEFAULT 'medium',
95
+ raw_event_id TEXT REFERENCES raw_events(id) ON DELETE SET NULL
96
+ );
97
+
98
+ CREATE INDEX IF NOT EXISTS idx_context_spans_session ON context_spans(session_id);
99
+ CREATE INDEX IF NOT EXISTS idx_context_spans_file ON context_spans(file_path);
100
+ CREATE INDEX IF NOT EXISTS idx_context_spans_bucket ON context_spans(bucket);
101
+
102
+ CREATE TABLE IF NOT EXISTS usage_ledger_entries (
103
+ id TEXT PRIMARY KEY,
104
+ session_id TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
105
+ raw_event_id TEXT REFERENCES raw_events(id) ON DELETE SET NULL,
106
+ provider TEXT NOT NULL,
107
+ model TEXT,
108
+ resolved_model TEXT,
109
+ timestamp TEXT NOT NULL,
110
+ source TEXT,
111
+ input_tokens INTEGER NOT NULL DEFAULT 0,
112
+ output_tokens INTEGER NOT NULL DEFAULT 0,
113
+ cache_read_tokens INTEGER NOT NULL DEFAULT 0,
114
+ cache_write_tokens INTEGER NOT NULL DEFAULT 0,
115
+ reasoning_tokens INTEGER NOT NULL DEFAULT 0,
116
+ total_tokens INTEGER NOT NULL DEFAULT 0,
117
+ reported_cost_usd REAL,
118
+ estimated_cost_usd REAL NOT NULL DEFAULT 0,
119
+ cost_breakdown_json TEXT NOT NULL,
120
+ pricing_source TEXT,
121
+ pricing_updated_at TEXT,
122
+ created_at TEXT NOT NULL
123
+ );
124
+
125
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_usage_ledger_raw_event ON usage_ledger_entries(raw_event_id) WHERE raw_event_id IS NOT NULL;
126
+ CREATE INDEX IF NOT EXISTS idx_usage_ledger_session ON usage_ledger_entries(session_id, timestamp);
127
+
128
+ CREATE TABLE IF NOT EXISTS explanations (
129
+ session_id TEXT PRIMARY KEY REFERENCES sessions(id) ON DELETE CASCADE,
130
+ title TEXT NOT NULL,
131
+ one_line TEXT NOT NULL,
132
+ main_reasons_json TEXT NOT NULL,
133
+ waste_findings_json TEXT NOT NULL,
134
+ stages_json TEXT NOT NULL DEFAULT '[]',
135
+ drilldowns_json TEXT NOT NULL DEFAULT '[]',
136
+ caveats_json TEXT NOT NULL,
137
+ confidence TEXT NOT NULL DEFAULT 'medium',
138
+ metadata_json TEXT NOT NULL DEFAULT '{}',
139
+ provider TEXT,
140
+ raw_context_included INTEGER NOT NULL DEFAULT 0,
141
+ model TEXT,
142
+ created_at TEXT NOT NULL
143
+ );
144
+
145
+ CREATE TABLE IF NOT EXISTS explanation_jobs (
146
+ id TEXT PRIMARY KEY,
147
+ session_id TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
148
+ status TEXT NOT NULL,
149
+ provider TEXT,
150
+ model TEXT,
151
+ raw_context_included INTEGER NOT NULL DEFAULT 0,
152
+ created_at TEXT NOT NULL,
153
+ started_at TEXT,
154
+ completed_at TEXT,
155
+ error TEXT,
156
+ explanation_json TEXT
157
+ );
158
+
159
+ CREATE INDEX IF NOT EXISTS idx_explanation_jobs_session ON explanation_jobs(session_id, created_at DESC);
160
+
161
+ CREATE TABLE IF NOT EXISTS sync_queue (
162
+ id TEXT PRIMARY KEY,
163
+ entity_type TEXT NOT NULL,
164
+ entity_id TEXT NOT NULL,
165
+ mode TEXT NOT NULL,
166
+ status TEXT NOT NULL DEFAULT 'pending',
167
+ created_at TEXT NOT NULL,
168
+ last_error TEXT
169
+ );
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "tokenlenses",
3
+ "version": "0.1.0",
4
+ "description": "TokenLens CLI for local AI coding token attribution and cloud-safe sync.",
5
+ "type": "module",
6
+ "bin": {
7
+ "tokenlenses": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "README.md"
12
+ ],
13
+ "engines": {
14
+ "node": ">=20"
15
+ },
16
+ "scripts": {
17
+ "build": "node ../../scripts/build-npm.mjs cli",
18
+ "prepack": "node ../../scripts/build-npm.mjs cli"
19
+ },
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "dependencies": {
24
+ "better-sqlite3": "^12.2.0"
25
+ }
26
+ }