clawck 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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +322 -0
  3. package/dist/cli/index.d.ts +14 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +233 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/core/clawck.d.ts +48 -0
  8. package/dist/core/clawck.d.ts.map +1 -0
  9. package/dist/core/clawck.js +119 -0
  10. package/dist/core/clawck.js.map +1 -0
  11. package/dist/core/database.d.ts +55 -0
  12. package/dist/core/database.d.ts.map +1 -0
  13. package/dist/core/database.js +329 -0
  14. package/dist/core/database.js.map +1 -0
  15. package/dist/core/index.d.ts +4 -0
  16. package/dist/core/index.d.ts.map +1 -0
  17. package/dist/core/index.js +23 -0
  18. package/dist/core/index.js.map +1 -0
  19. package/dist/core/sync.d.ts +17 -0
  20. package/dist/core/sync.d.ts.map +1 -0
  21. package/dist/core/sync.js +91 -0
  22. package/dist/core/sync.js.map +1 -0
  23. package/dist/core/types.d.ts +186 -0
  24. package/dist/core/types.d.ts.map +1 -0
  25. package/dist/core/types.js +34 -0
  26. package/dist/core/types.js.map +1 -0
  27. package/dist/dashboard/index.d.ts +6 -0
  28. package/dist/dashboard/index.d.ts.map +1 -0
  29. package/dist/dashboard/index.js +632 -0
  30. package/dist/dashboard/index.js.map +1 -0
  31. package/dist/index.d.ts +30 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +53 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/server/api.d.ts +15 -0
  36. package/dist/server/api.d.ts.map +1 -0
  37. package/dist/server/api.js +193 -0
  38. package/dist/server/api.js.map +1 -0
  39. package/dist/server/index.d.ts +3 -0
  40. package/dist/server/index.d.ts.map +1 -0
  41. package/dist/server/index.js +9 -0
  42. package/dist/server/index.js.map +1 -0
  43. package/dist/server/mcp.d.ts +8 -0
  44. package/dist/server/mcp.d.ts.map +1 -0
  45. package/dist/server/mcp.js +277 -0
  46. package/dist/server/mcp.js.map +1 -0
  47. package/package.json +66 -0
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ /**
3
+ * ⏱️🦀 Clawck — Entry Manager
4
+ * High-level API for managing agent time entries.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.Clawck = void 0;
8
+ const uuid_1 = require("uuid");
9
+ const types_1 = require("./types");
10
+ const database_1 = require("./database");
11
+ class Clawck {
12
+ _db;
13
+ config;
14
+ constructor(config = {}) {
15
+ this.config = { ...types_1.DEFAULT_CONFIG, ...config };
16
+ this._db = new database_1.ClawckDB(this.config);
17
+ }
18
+ /** Wait for the database to be ready (call once before first operation) */
19
+ async ready() {
20
+ await this._db.ensureReady();
21
+ return this;
22
+ }
23
+ get database() { return this._db; }
24
+ // ─── Upsert (for sync) ────────────────────────────────
25
+ upsert(entry) {
26
+ return this._db.upsert(entry);
27
+ }
28
+ // ─── Start a Task ──────────────────────────────────────
29
+ start(input) {
30
+ const entry = {
31
+ id: (0, uuid_1.v4)(),
32
+ agent: input.agent || this.config.default_agent || 'unknown-agent',
33
+ model: input.model || this.config.default_model || 'unknown',
34
+ client: input.client || this.config.default_client || 'default',
35
+ project: input.project || this.config.default_project || 'default',
36
+ task: input.task,
37
+ category: input.category || 'other',
38
+ start: new Date().toISOString(),
39
+ end: null,
40
+ status: 'running',
41
+ tokens_in: 0,
42
+ tokens_out: 0,
43
+ cost_usd: 0,
44
+ tool_calls: 0,
45
+ summary: '',
46
+ tags: input.tags || [],
47
+ source: this.config.default_source || 'clawck',
48
+ spec_version: types_1.SPEC_VERSION,
49
+ };
50
+ return this._db.insert(entry);
51
+ }
52
+ // ─── Stop a Task ───────────────────────────────────────
53
+ stop(input) {
54
+ return this._db.update(input.id, {
55
+ end: new Date().toISOString(),
56
+ status: input.status || 'completed',
57
+ summary: input.summary || '',
58
+ tokens_in: input.tokens_in,
59
+ tokens_out: input.tokens_out,
60
+ cost_usd: input.cost_usd,
61
+ tool_calls: input.tool_calls,
62
+ });
63
+ }
64
+ // ─── Log a Completed Task (retroactive) ─────────────────
65
+ log(input) {
66
+ const end = new Date();
67
+ const start = new Date(end.getTime() - (input.duration_minutes * 60000));
68
+ const entry = {
69
+ id: (0, uuid_1.v4)(),
70
+ agent: input.agent || this.config.default_agent || 'unknown-agent',
71
+ model: input.model || this.config.default_model || 'unknown',
72
+ client: input.client || this.config.default_client || 'default',
73
+ project: input.project || this.config.default_project || 'default',
74
+ task: input.task,
75
+ category: input.category || 'other',
76
+ start: start.toISOString(),
77
+ end: end.toISOString(),
78
+ status: 'completed',
79
+ tokens_in: input.tokens_in || 0,
80
+ tokens_out: input.tokens_out || 0,
81
+ cost_usd: input.cost_usd || 0,
82
+ tool_calls: input.tool_calls || 0,
83
+ summary: input.summary || '',
84
+ tags: input.tags || [],
85
+ source: this.config.default_source || 'clawck',
86
+ spec_version: types_1.SPEC_VERSION,
87
+ };
88
+ return this._db.insert(entry);
89
+ }
90
+ // ─── Update a Running Entry ────────────────────────────
91
+ update(id, updates) {
92
+ return this._db.update(id, updates);
93
+ }
94
+ // ─── Query ─────────────────────────────────────────────
95
+ get(id) {
96
+ return this._db.getById(id);
97
+ }
98
+ running() {
99
+ return this._db.getRunning();
100
+ }
101
+ query(filters = {}) {
102
+ return this._db.query(filters);
103
+ }
104
+ // ─── Timesheet ─────────────────────────────────────────
105
+ timesheet(from, to, filters) {
106
+ return this._db.getTimesheet(from, to, filters);
107
+ }
108
+ // ─── Metadata ──────────────────────────────────────────
109
+ clients() { return this._db.getClients(); }
110
+ projects() { return this._db.getProjects(); }
111
+ agents() { return this._db.getAgents(); }
112
+ stats() { return this._db.getStats(); }
113
+ // ─── Cleanup ───────────────────────────────────────────
114
+ close() {
115
+ this._db.close();
116
+ }
117
+ }
118
+ exports.Clawck = Clawck;
119
+ //# sourceMappingURL=clawck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clawck.js","sourceRoot":"","sources":["../../src/core/clawck.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Clawck Database Layer - SQLite via sql.js (pure JS, zero native deps)
3
+ */
4
+ import { ClawckEntry, TimesheetSummary, ClawckConfig, SyncState } from './types';
5
+ export declare class ClawckDB {
6
+ private db;
7
+ private config;
8
+ private dbPath;
9
+ private _ready;
10
+ constructor(config: ClawckConfig);
11
+ private init;
12
+ private migrate;
13
+ ensureReady(): Promise<void>;
14
+ private save;
15
+ insert(entry: ClawckEntry): ClawckEntry;
16
+ update(id: string, updates: Partial<ClawckEntry>): ClawckEntry | null;
17
+ getById(id: string): ClawckEntry | null;
18
+ getRunning(): ClawckEntry[];
19
+ query(filters?: {
20
+ client?: string;
21
+ project?: string;
22
+ agent?: string;
23
+ category?: string;
24
+ status?: string;
25
+ from?: string;
26
+ to?: string;
27
+ limit?: number;
28
+ offset?: number;
29
+ }): ClawckEntry[];
30
+ private queryRows;
31
+ getTimesheet(from: string, to: string, filters?: {
32
+ client?: string;
33
+ project?: string;
34
+ agent?: string;
35
+ }): TimesheetSummary;
36
+ getClients(): string[];
37
+ getProjects(): string[];
38
+ getAgents(): string[];
39
+ private getDistinct;
40
+ getStats(): {
41
+ total_entries: number;
42
+ running: number;
43
+ clients: number;
44
+ projects: number;
45
+ agents: number;
46
+ };
47
+ private rowToEntry;
48
+ upsert(entry: ClawckEntry): ClawckEntry;
49
+ bulkUpsert(entries: ClawckEntry[]): number;
50
+ getSyncState(sourceName: string): SyncState | null;
51
+ setSyncState(state: SyncState): void;
52
+ getAllSyncStates(): SyncState[];
53
+ close(): void;
54
+ }
55
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAgB,YAAY,EAA2F,SAAS,EAAE,MAAM,SAAS,CAAC;AAExL,qBAAa,QAAQ;IACnB,OAAO,CAAC,EAAE,CAAO;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,YAAY;YAQlB,IAAI;IAUlB,OAAO,CAAC,OAAO;IA4BT,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAElC,OAAO,CAAC,IAAI;IAKZ,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;IASvC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,IAAI;IAwBrE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAQvC,UAAU,IAAI,WAAW,EAAE;IAI3B,KAAK,CAAC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;KAAO,GAAG,WAAW,EAAE;IAa3L,OAAO,CAAC,SAAS;IASjB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,gBAAgB;IA+B7H,UAAU,IAAI,MAAM,EAAE;IACtB,WAAW,IAAI,MAAM,EAAE;IACvB,SAAS,IAAI,MAAM,EAAE;IAErB,OAAO,CAAC,WAAW;IAKnB,QAAQ;;;;;;;IAKR,OAAO,CAAC,UAAU;IAIlB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;IAavC,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM;IAqB1C,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAYlD,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAYpC,gBAAgB,IAAI,SAAS,EAAE;IAW/B,KAAK,IAAI,IAAI;CACd"}
@@ -0,0 +1,329 @@
1
+ "use strict";
2
+ /**
3
+ * Clawck Database Layer - SQLite via sql.js (pure JS, zero native deps)
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ClawckDB = void 0;
10
+ const sql_js_1 = __importDefault(require("sql.js"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const fs_1 = __importDefault(require("fs"));
13
+ const types_1 = require("./types");
14
+ class ClawckDB {
15
+ db;
16
+ config;
17
+ dbPath;
18
+ _ready;
19
+ constructor(config) {
20
+ this.config = config;
21
+ const dbDir = path_1.default.resolve(config.data_dir);
22
+ if (!fs_1.default.existsSync(dbDir))
23
+ fs_1.default.mkdirSync(dbDir, { recursive: true });
24
+ this.dbPath = path_1.default.join(dbDir, 'clawck.db');
25
+ this._ready = this.init();
26
+ }
27
+ async init() {
28
+ const SQL = await (0, sql_js_1.default)();
29
+ if (fs_1.default.existsSync(this.dbPath)) {
30
+ this.db = new SQL.Database(fs_1.default.readFileSync(this.dbPath));
31
+ }
32
+ else {
33
+ this.db = new SQL.Database();
34
+ }
35
+ this.migrate();
36
+ }
37
+ migrate() {
38
+ this.db.run(`CREATE TABLE IF NOT EXISTS entries (
39
+ id TEXT PRIMARY KEY, agent TEXT NOT NULL, model TEXT NOT NULL DEFAULT 'unknown',
40
+ client TEXT NOT NULL DEFAULT 'default', project TEXT NOT NULL DEFAULT 'default',
41
+ task TEXT NOT NULL, category TEXT NOT NULL DEFAULT 'other', start TEXT NOT NULL,
42
+ end_ TEXT, status TEXT NOT NULL DEFAULT 'running', tokens_in INTEGER NOT NULL DEFAULT 0,
43
+ tokens_out INTEGER NOT NULL DEFAULT 0, cost_usd REAL NOT NULL DEFAULT 0,
44
+ tool_calls INTEGER NOT NULL DEFAULT 0, summary TEXT NOT NULL DEFAULT '',
45
+ tags TEXT NOT NULL DEFAULT '[]', source TEXT NOT NULL DEFAULT 'manual',
46
+ spec_version TEXT NOT NULL DEFAULT '0.1.0',
47
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
48
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
49
+ )`);
50
+ this.db.run(`CREATE INDEX IF NOT EXISTS idx_entries_agent ON entries(agent)`);
51
+ this.db.run(`CREATE INDEX IF NOT EXISTS idx_entries_client ON entries(client)`);
52
+ this.db.run(`CREATE INDEX IF NOT EXISTS idx_entries_project ON entries(project)`);
53
+ this.db.run(`CREATE INDEX IF NOT EXISTS idx_entries_status ON entries(status)`);
54
+ this.db.run(`CREATE INDEX IF NOT EXISTS idx_entries_start ON entries(start)`);
55
+ this.db.run(`CREATE TABLE IF NOT EXISTS sync_state (
56
+ source_name TEXT PRIMARY KEY,
57
+ last_sync_at TEXT NOT NULL,
58
+ last_status TEXT NOT NULL DEFAULT 'success',
59
+ last_error TEXT,
60
+ entries_synced INTEGER NOT NULL DEFAULT 0
61
+ )`);
62
+ this.save();
63
+ }
64
+ async ensureReady() { await this._ready; }
65
+ save() {
66
+ const data = this.db.export();
67
+ fs_1.default.writeFileSync(this.dbPath, Buffer.from(data));
68
+ }
69
+ insert(entry) {
70
+ this.db.run(`INSERT INTO entries (id, agent, model, client, project, task, category, start, end_, status, tokens_in, tokens_out, cost_usd, tool_calls, summary, tags, source, spec_version) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, [entry.id, entry.agent, entry.model, entry.client, entry.project, entry.task, entry.category, entry.start, entry.end, entry.status, entry.tokens_in, entry.tokens_out, entry.cost_usd, entry.tool_calls, entry.summary, JSON.stringify(entry.tags), entry.source, entry.spec_version]);
71
+ this.save();
72
+ return entry;
73
+ }
74
+ update(id, updates) {
75
+ const existing = this.getById(id);
76
+ if (!existing)
77
+ return null;
78
+ const fields = [];
79
+ const values = [];
80
+ if (updates.end !== undefined) {
81
+ fields.push('end_ = ?');
82
+ values.push(updates.end);
83
+ }
84
+ if (updates.status !== undefined) {
85
+ fields.push('status = ?');
86
+ values.push(updates.status);
87
+ }
88
+ if (updates.tokens_in !== undefined) {
89
+ fields.push('tokens_in = ?');
90
+ values.push(updates.tokens_in);
91
+ }
92
+ if (updates.tokens_out !== undefined) {
93
+ fields.push('tokens_out = ?');
94
+ values.push(updates.tokens_out);
95
+ }
96
+ if (updates.cost_usd !== undefined) {
97
+ fields.push('cost_usd = ?');
98
+ values.push(updates.cost_usd);
99
+ }
100
+ if (updates.tool_calls !== undefined) {
101
+ fields.push('tool_calls = ?');
102
+ values.push(updates.tool_calls);
103
+ }
104
+ if (updates.summary !== undefined) {
105
+ fields.push('summary = ?');
106
+ values.push(updates.summary);
107
+ }
108
+ if (updates.tags !== undefined) {
109
+ fields.push('tags = ?');
110
+ values.push(JSON.stringify(updates.tags));
111
+ }
112
+ if (updates.project !== undefined) {
113
+ fields.push('project = ?');
114
+ values.push(updates.project);
115
+ }
116
+ if (updates.client !== undefined) {
117
+ fields.push('client = ?');
118
+ values.push(updates.client);
119
+ }
120
+ if (updates.category !== undefined) {
121
+ fields.push('category = ?');
122
+ values.push(updates.category);
123
+ }
124
+ fields.push("updated_at = datetime('now')");
125
+ if (fields.length === 1)
126
+ return existing;
127
+ values.push(id);
128
+ this.db.run(`UPDATE entries SET ${fields.join(', ')} WHERE id = ?`, values);
129
+ this.save();
130
+ return this.getById(id);
131
+ }
132
+ getById(id) {
133
+ const stmt = this.db.prepare('SELECT * FROM entries WHERE id = ?');
134
+ stmt.bind([id]);
135
+ if (stmt.step()) {
136
+ const row = stmt.getAsObject();
137
+ stmt.free();
138
+ return this.rowToEntry(row);
139
+ }
140
+ stmt.free();
141
+ return null;
142
+ }
143
+ getRunning() {
144
+ return this.queryRows("SELECT * FROM entries WHERE status = 'running' ORDER BY start DESC");
145
+ }
146
+ query(filters = {}) {
147
+ const conds = [];
148
+ const params = [];
149
+ if (filters.client) {
150
+ conds.push('client = ?');
151
+ params.push(filters.client);
152
+ }
153
+ if (filters.project) {
154
+ conds.push('project = ?');
155
+ params.push(filters.project);
156
+ }
157
+ if (filters.agent) {
158
+ conds.push('agent = ?');
159
+ params.push(filters.agent);
160
+ }
161
+ if (filters.category) {
162
+ conds.push('category = ?');
163
+ params.push(filters.category);
164
+ }
165
+ if (filters.status) {
166
+ conds.push('status = ?');
167
+ params.push(filters.status);
168
+ }
169
+ if (filters.from) {
170
+ conds.push('start >= ?');
171
+ params.push(filters.from);
172
+ }
173
+ if (filters.to) {
174
+ conds.push('start <= ?');
175
+ params.push(filters.to);
176
+ }
177
+ const where = conds.length > 0 ? `WHERE ${conds.join(' AND ')}` : '';
178
+ return this.queryRows(`SELECT * FROM entries ${where} ORDER BY start DESC LIMIT ${filters.limit || 500} OFFSET ${filters.offset || 0}`, params);
179
+ }
180
+ queryRows(sql, params = []) {
181
+ const results = [];
182
+ const stmt = this.db.prepare(sql);
183
+ if (params.length > 0)
184
+ stmt.bind(params);
185
+ while (stmt.step())
186
+ results.push(this.rowToEntry(stmt.getAsObject()));
187
+ stmt.free();
188
+ return results;
189
+ }
190
+ getTimesheet(from, to, filters = {}) {
191
+ const entries = this.query({ ...filters, from, to, limit: 10000 });
192
+ const equivs = this.config.human_equivalents || types_1.DEFAULT_HUMAN_EQUIVALENTS;
193
+ const rows = entries.map(e => {
194
+ const durationMin = e.end ? (new Date(e.end).getTime() - new Date(e.start).getTime()) / 60000 : (Date.now() - new Date(e.start).getTime()) / 60000;
195
+ const equiv = equivs[e.category] || equivs.other;
196
+ const agentHours = durationMin / 60;
197
+ const humanEquivHours = agentHours * equiv.multiplier;
198
+ return { date: e.start.split('T')[0], agent: e.agent, client: e.client, project: e.project, task: e.task, category: e.category, duration_minutes: Math.round(durationMin * 100) / 100, tokens_total: e.tokens_in + e.tokens_out, cost_usd: e.cost_usd, human_equiv_hours: Math.round(humanEquivHours * 100) / 100, human_equiv_cost_saved: Math.round(humanEquivHours * equiv.human_rate_usd * 100) / 100, status: e.status };
199
+ });
200
+ const totalAgentHours = rows.reduce((s, r) => s + r.duration_minutes / 60, 0);
201
+ const totalHumanEquiv = rows.reduce((s, r) => s + r.human_equiv_hours, 0);
202
+ const totalCost = rows.reduce((s, r) => s + r.cost_usd, 0);
203
+ const totalSavings = rows.reduce((s, r) => s + r.human_equiv_cost_saved, 0);
204
+ const totalTokens = rows.reduce((s, r) => s + r.tokens_total, 0);
205
+ const clientMap = new Map();
206
+ for (const r of rows) {
207
+ const c = clientMap.get(r.client) || { client: r.client, agent_hours: 0, human_equiv_hours: 0, cost_usd: 0, savings_usd: 0, entries: 0 };
208
+ c.agent_hours += r.duration_minutes / 60;
209
+ c.human_equiv_hours += r.human_equiv_hours;
210
+ c.cost_usd += r.cost_usd;
211
+ c.savings_usd += r.human_equiv_cost_saved;
212
+ c.entries += 1;
213
+ clientMap.set(r.client, c);
214
+ }
215
+ const agentMap = new Map();
216
+ for (const e of entries) {
217
+ const dur = e.end ? (new Date(e.end).getTime() - new Date(e.start).getTime()) / 3600000 : 0;
218
+ const a = agentMap.get(e.agent) || { agent: e.agent, model: e.model, agent_hours: 0, human_equiv_hours: 0, cost_usd: 0, entries: 0, completed: 0 };
219
+ a.agent_hours += dur;
220
+ const eq = equivs[e.category] || equivs.other;
221
+ a.human_equiv_hours += dur * eq.multiplier;
222
+ a.cost_usd += e.cost_usd;
223
+ a.entries += 1;
224
+ if (e.status === 'completed')
225
+ a.completed += 1;
226
+ a.model = e.model;
227
+ agentMap.set(e.agent, a);
228
+ }
229
+ const projMap = new Map();
230
+ for (const r of rows) {
231
+ const key = `${r.client}::${r.project}`;
232
+ const p = projMap.get(key) || { project: r.project, client: r.client, agent_hours: 0, human_equiv_hours: 0, cost_usd: 0, entries: 0 };
233
+ p.agent_hours += r.duration_minutes / 60;
234
+ p.human_equiv_hours += r.human_equiv_hours;
235
+ p.cost_usd += r.cost_usd;
236
+ p.entries += 1;
237
+ projMap.set(key, p);
238
+ }
239
+ const catMap = new Map();
240
+ for (const r of rows) {
241
+ const c = catMap.get(r.category) || { category: r.category, agent_hours: 0, human_equiv_hours: 0, cost_usd: 0, savings_usd: 0, entries: 0 };
242
+ c.agent_hours += r.duration_minutes / 60;
243
+ c.human_equiv_hours += r.human_equiv_hours;
244
+ c.cost_usd += r.cost_usd;
245
+ c.savings_usd += r.human_equiv_cost_saved;
246
+ c.entries += 1;
247
+ catMap.set(r.category, c);
248
+ }
249
+ return { period_start: from, period_end: to, total_entries: entries.length, total_agent_hours: Math.round(totalAgentHours * 100) / 100, total_human_equiv_hours: Math.round(totalHumanEquiv * 100) / 100, total_cost_usd: Math.round(totalCost * 100) / 100, total_savings_usd: Math.round(totalSavings * 100) / 100, total_tokens: totalTokens, by_client: [...clientMap.values()], by_agent: [...agentMap.values()].map(a => ({ ...a, success_rate: a.entries > 0 ? Math.round((a.completed / a.entries) * 100) : 0 })), by_project: [...projMap.values()], by_category: [...catMap.values()], entries: rows };
250
+ }
251
+ getClients() { return this.getDistinct('client'); }
252
+ getProjects() { return this.getDistinct('project'); }
253
+ getAgents() { return this.getDistinct('agent'); }
254
+ getDistinct(col) {
255
+ const r = [];
256
+ const stmt = this.db.prepare(`SELECT DISTINCT ${col} FROM entries ORDER BY ${col}`);
257
+ while (stmt.step()) {
258
+ const row = stmt.getAsObject();
259
+ r.push(row[col]);
260
+ }
261
+ stmt.free();
262
+ return r;
263
+ }
264
+ getStats() {
265
+ const count = (sql) => { const s = this.db.prepare(sql); s.step(); const v = s.getAsObject(); s.free(); return v.c || 0; };
266
+ return { total_entries: count('SELECT COUNT(*) as c FROM entries'), running: count("SELECT COUNT(*) as c FROM entries WHERE status = 'running'"), clients: count('SELECT COUNT(DISTINCT client) as c FROM entries'), projects: count('SELECT COUNT(DISTINCT project) as c FROM entries'), agents: count('SELECT COUNT(DISTINCT agent) as c FROM entries') };
267
+ }
268
+ rowToEntry(row) {
269
+ return { id: row.id, agent: row.agent, model: row.model, client: row.client, project: row.project, task: row.task, category: row.category, start: row.start, end: row.end_, status: row.status, tokens_in: row.tokens_in, tokens_out: row.tokens_out, cost_usd: row.cost_usd, tool_calls: row.tool_calls, summary: row.summary, tags: JSON.parse(row.tags || '[]'), source: row.source, spec_version: row.spec_version };
270
+ }
271
+ upsert(entry) {
272
+ const existing = this.getById(entry.id);
273
+ if (existing) {
274
+ this.db.run(`UPDATE entries SET agent=?, model=?, client=?, project=?, task=?, category=?, start=?, end_=?, status=?, tokens_in=?, tokens_out=?, cost_usd=?, tool_calls=?, summary=?, tags=?, source=?, spec_version=?, updated_at=datetime('now') WHERE id=?`, [entry.agent, entry.model, entry.client, entry.project, entry.task, entry.category, entry.start, entry.end, entry.status, entry.tokens_in, entry.tokens_out, entry.cost_usd, entry.tool_calls, entry.summary, JSON.stringify(entry.tags), entry.source, entry.spec_version, entry.id]);
275
+ this.save();
276
+ return this.getById(entry.id);
277
+ }
278
+ return this.insert(entry);
279
+ }
280
+ bulkUpsert(entries) {
281
+ let count = 0;
282
+ for (const entry of entries) {
283
+ const existing = this.getById(entry.id);
284
+ if (existing) {
285
+ this.db.run(`UPDATE entries SET agent=?, model=?, client=?, project=?, task=?, category=?, start=?, end_=?, status=?, tokens_in=?, tokens_out=?, cost_usd=?, tool_calls=?, summary=?, tags=?, source=?, spec_version=?, updated_at=datetime('now') WHERE id=?`, [entry.agent, entry.model, entry.client, entry.project, entry.task, entry.category, entry.start, entry.end, entry.status, entry.tokens_in, entry.tokens_out, entry.cost_usd, entry.tool_calls, entry.summary, JSON.stringify(entry.tags), entry.source, entry.spec_version, entry.id]);
286
+ }
287
+ else {
288
+ this.db.run(`INSERT INTO entries (id, agent, model, client, project, task, category, start, end_, status, tokens_in, tokens_out, cost_usd, tool_calls, summary, tags, source, spec_version) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, [entry.id, entry.agent, entry.model, entry.client, entry.project, entry.task, entry.category, entry.start, entry.end, entry.status, entry.tokens_in, entry.tokens_out, entry.cost_usd, entry.tool_calls, entry.summary, JSON.stringify(entry.tags), entry.source, entry.spec_version]);
289
+ }
290
+ count++;
291
+ }
292
+ this.save();
293
+ return count;
294
+ }
295
+ getSyncState(sourceName) {
296
+ const stmt = this.db.prepare('SELECT * FROM sync_state WHERE source_name = ?');
297
+ stmt.bind([sourceName]);
298
+ if (stmt.step()) {
299
+ const row = stmt.getAsObject();
300
+ stmt.free();
301
+ return { source_name: row.source_name, last_sync_at: row.last_sync_at, last_status: row.last_status, last_error: row.last_error, entries_synced: row.entries_synced };
302
+ }
303
+ stmt.free();
304
+ return null;
305
+ }
306
+ setSyncState(state) {
307
+ const existing = this.getSyncState(state.source_name);
308
+ if (existing) {
309
+ this.db.run('UPDATE sync_state SET last_sync_at=?, last_status=?, last_error=?, entries_synced=? WHERE source_name=?', [state.last_sync_at, state.last_status, state.last_error || null, state.entries_synced, state.source_name]);
310
+ }
311
+ else {
312
+ this.db.run('INSERT INTO sync_state (source_name, last_sync_at, last_status, last_error, entries_synced) VALUES (?,?,?,?,?)', [state.source_name, state.last_sync_at, state.last_status, state.last_error || null, state.entries_synced]);
313
+ }
314
+ this.save();
315
+ }
316
+ getAllSyncStates() {
317
+ const results = [];
318
+ const stmt = this.db.prepare('SELECT * FROM sync_state ORDER BY source_name');
319
+ while (stmt.step()) {
320
+ const row = stmt.getAsObject();
321
+ results.push({ source_name: row.source_name, last_sync_at: row.last_sync_at, last_status: row.last_status, last_error: row.last_error, entries_synced: row.entries_synced });
322
+ }
323
+ stmt.free();
324
+ return results;
325
+ }
326
+ close() { this.save(); this.db.close(); }
327
+ }
328
+ exports.ClawckDB = ClawckDB;
329
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,oDAA+B;AAC/B,gDAAwB;AACxB,4CAAoB;AACpB,mCAAwL;AAExL,MAAa,QAAQ;IACX,EAAE,CAAO;IACT,MAAM,CAAe;IACrB,MAAM,CAAS;IACf,MAAM,CAAgB;IAE9B,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,KAAK,GAAG,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,YAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,MAAM,GAAG,GAAG,MAAM,IAAA,gBAAS,GAAE,CAAC;QAC9B,IAAI,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;;;;;;;;;;;MAWV,CAAC,CAAC;QACJ,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAChF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAClF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAChF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;;;;;;MAMV,CAAC,CAAC;QACJ,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,WAAW,KAAoB,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjD,IAAI;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9B,YAAE,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,KAAkB;QACvB,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,6NAA6N,EAC7N,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CACtR,CAAC;QACF,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,OAA6B;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAU,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QACrF,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAC7F,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;QACtG,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAAC,CAAC;QACzG,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QACnG,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAAC,CAAC;QACzG,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAChG,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAC,CAAC;QACvG,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAChG,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAC7F,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QACnG,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAAC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QAC9F,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,oEAAoE,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,UAAmK,EAAE;QACzK,MAAM,KAAK,GAAa,EAAE,CAAC;QAAC,MAAM,MAAM,GAAU,EAAE,CAAC;QACrD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAC9E,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QACjF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;QAC3E,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QACpF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAC9E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAC1E,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QACtE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,SAAS,CAAC,yBAAyB,KAAK,8BAA8B,OAAO,CAAC,KAAK,IAAI,GAAG,WAAW,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAClJ,CAAC;IAEO,SAAS,CAAC,GAAW,EAAE,SAAgB,EAAE;QAC/C,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,EAAU,EAAE,UAAiE,EAAE;QACxG,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,iCAAyB,CAAC;QAC1E,MAAM,IAAI,GAAmB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC3C,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC;YACnJ,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;YACjD,MAAM,UAAU,GAAG,WAAW,GAAG,EAAE,CAAC;YACpC,MAAM,eAAe,GAAG,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YACtD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,cAAc,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QACha,CAAC,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9E,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;QAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEjE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;QACnD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,CAAC;YAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;YAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,sBAAsB,CAAC;YAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAE1W,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YAAC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC;YAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;YAAC,CAAC,CAAC,iBAAiB,IAAI,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;YAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;YAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YAAC,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;gBAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;YAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;YAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAErgB,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,CAAC;YAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;YAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAE9V,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAe,EAAE,WAAW,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,CAAC;YAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;YAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,sBAAsB,CAAC;YAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAEnX,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,uBAAuB,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACnlB,CAAC;IAED,UAAU,KAAe,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7D,WAAW,KAAe,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/D,SAAS,KAAe,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEnD,WAAW,CAAC,GAAW;QAC7B,MAAM,CAAC,GAAa,EAAE,CAAC;QAAC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,mBAAmB,GAAG,0BAA0B,GAAG,EAAE,CAAC,CAAC;QAC5G,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAAC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAW,CAAC,CAAC;QAAC,CAAC;QAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAAC,OAAO,CAAC,CAAC;IAC5G,CAAC;IAED,QAAQ;QACN,MAAM,KAAK,GAAG,CAAC,GAAW,EAAU,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAQ,CAAC,CAAC,CAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACvJ,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,mCAAmC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,4DAA4D,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,iDAAiD,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,kDAAkD,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,gDAAgD,CAAC,EAAE,CAAC;IAC9V,CAAC;IAEO,UAAU,CAAC,GAAQ;QACzB,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;IAC3Z,CAAC;IAED,MAAM,CAAC,KAAkB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,kPAAkP,EAClP,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,CACtR,CAAC;YACF,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAE,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,UAAU,CAAC,OAAsB;QAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,kPAAkP,EAClP,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,CACtR,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,6NAA6N,EAC7N,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CACtR,CAAC;YACJ,CAAC;YACD,KAAK,EAAE,CAAC;QACV,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY,CAAC,UAAkB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,WAAqB,EAAE,YAAY,EAAE,GAAG,CAAC,YAAsB,EAAE,WAAW,EAAE,GAAG,CAAC,WAAkC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAgC,EAAE,cAAc,EAAE,GAAG,CAAC,cAAwB,EAAE,CAAC;QACnP,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,KAAgB;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,yGAAyG,EACnH,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QAChH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,gHAAgH,EAC1H,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QAChH,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,gBAAgB;QACd,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAqB,EAAE,YAAY,EAAE,GAAG,CAAC,YAAsB,EAAE,WAAW,EAAE,GAAG,CAAC,WAAkC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAgC,EAAE,cAAc,EAAE,GAAG,CAAC,cAAwB,EAAE,CAAC,CAAC;QAC1P,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,KAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CAChD;AArPD,4BAqPC"}
@@ -0,0 +1,4 @@
1
+ export { Clawck } from './clawck';
2
+ export { ClawckDB } from './database';
3
+ export * from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ClawckDB = exports.Clawck = void 0;
18
+ var clawck_1 = require("./clawck");
19
+ Object.defineProperty(exports, "Clawck", { enumerable: true, get: function () { return clawck_1.Clawck; } });
20
+ var database_1 = require("./database");
21
+ Object.defineProperty(exports, "ClawckDB", { enumerable: true, get: function () { return database_1.ClawckDB; } });
22
+ __exportStar(require("./types"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,0CAAwB"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Clawck SyncManager — pulls entries from remote Clawck instances
3
+ */
4
+ import { ClawckConfig, RemoteSource, SyncState } from './types';
5
+ import { ClawckDB } from './database';
6
+ export declare class SyncManager {
7
+ private config;
8
+ private db;
9
+ private interval;
10
+ constructor(config: ClawckConfig, db: ClawckDB);
11
+ start(): void;
12
+ stop(): void;
13
+ syncAll(): Promise<SyncState[]>;
14
+ syncOne(source: RemoteSource): Promise<SyncState>;
15
+ getStates(): SyncState[];
16
+ }
17
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/core/sync.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAe,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,QAAQ,CAA+C;gBAEnD,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ;IAK9C,KAAK,IAAI,IAAI;IAOb,IAAI,IAAI,IAAI;IAON,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAc/B,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IA+CvD,SAAS,IAAI,SAAS,EAAE;CAGzB"}