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.
- package/LICENSE +21 -0
- package/README.md +322 -0
- package/dist/cli/index.d.ts +14 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +233 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/clawck.d.ts +48 -0
- package/dist/core/clawck.d.ts.map +1 -0
- package/dist/core/clawck.js +119 -0
- package/dist/core/clawck.js.map +1 -0
- package/dist/core/database.d.ts +55 -0
- package/dist/core/database.d.ts.map +1 -0
- package/dist/core/database.js +329 -0
- package/dist/core/database.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +23 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/sync.d.ts +17 -0
- package/dist/core/sync.d.ts.map +1 -0
- package/dist/core/sync.js +91 -0
- package/dist/core/sync.js.map +1 -0
- package/dist/core/types.d.ts +186 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +34 -0
- package/dist/core/types.js.map +1 -0
- package/dist/dashboard/index.d.ts +6 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +632 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/server/api.d.ts +15 -0
- package/dist/server/api.d.ts.map +1 -0
- package/dist/server/api.js +193 -0
- package/dist/server/api.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +9 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mcp.d.ts +8 -0
- package/dist/server/mcp.d.ts.map +1 -0
- package/dist/server/mcp.js +277 -0
- package/dist/server/mcp.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|