spect8-mcp 0.2.1 → 0.2.4
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/INSTALLATION_PLAN.md +126 -0
- package/README.md +45 -12
- package/dist/auth.d.ts +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +12 -4
- package/dist/auth.js.map +1 -1
- package/dist/cli.js +166 -121
- package/dist/cli.js.map +1 -1
- package/dist/collectors/cursor_sqlite.d.ts +12 -20
- package/dist/collectors/cursor_sqlite.d.ts.map +1 -1
- package/dist/collectors/cursor_sqlite.js +81 -116
- package/dist/collectors/cursor_sqlite.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -3
- package/dist/config.js.map +1 -1
- package/dist/hooks/shared.d.ts +1 -1
- package/dist/hooks/shared.d.ts.map +1 -1
- package/dist/install.d.ts +41 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +279 -0
- package/dist/install.js.map +1 -0
- package/dist/server.js +3 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/report_activity.d.ts +2 -2
- package/dist/types.d.ts +2 -2
- package/examples/claude/hooks.json +3 -3
- package/examples/cursor/mcp.json +1 -4
- package/package.json +3 -2
|
@@ -1,37 +1,29 @@
|
|
|
1
1
|
import type { Logger } from "../logger.js";
|
|
2
2
|
import type { Batcher } from "../transport/batcher.js";
|
|
3
|
-
export interface
|
|
3
|
+
export interface CursorSqliteTailerOptions {
|
|
4
4
|
sqlitePath: string;
|
|
5
5
|
developerId: string;
|
|
6
6
|
logger: Logger;
|
|
7
7
|
batcher: Batcher;
|
|
8
|
-
pollIntervalMs?: number;
|
|
9
8
|
getSessionId: () => string;
|
|
9
|
+
pollIntervalMs?: number;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* Polls Cursor's
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* - The file is opened read-only (`mode=ro`). If Cursor rewrites it we
|
|
17
|
-
* simply re-open on the next tick.
|
|
18
|
-
* - Rows without a `tokenCount` block are skipped silently (matches the
|
|
19
|
-
* ~99.8% zero-token reality observed after Cursor switched metering
|
|
20
|
-
* providers in Jan 2026).
|
|
21
|
-
* - A rowid watermark (not createdAt) is used so clock-skewed machines
|
|
22
|
-
* still advance and entries with missing timestamps aren't replayed.
|
|
12
|
+
* Polls Cursor's state database for new `bubbleId:*` rows and emits token
|
|
13
|
+
* usage to the ingest batcher. The implementation shells out to the system
|
|
14
|
+
* `sqlite3` binary to avoid native Node dependencies in the published package.
|
|
23
15
|
*/
|
|
24
16
|
export declare class CursorSqliteTailer {
|
|
25
|
-
private readonly
|
|
26
|
-
private db;
|
|
17
|
+
private readonly options;
|
|
27
18
|
private timer;
|
|
28
19
|
private watermarkRowId;
|
|
29
|
-
|
|
30
|
-
constructor(opts: CursorTailerOptions);
|
|
20
|
+
constructor(options: CursorSqliteTailerOptions);
|
|
31
21
|
start(): void;
|
|
32
|
-
stop(): void
|
|
33
|
-
private
|
|
34
|
-
private
|
|
22
|
+
stop(): Promise<void>;
|
|
23
|
+
private poll;
|
|
24
|
+
private collectLatestRows;
|
|
25
|
+
private readMaxRowId;
|
|
26
|
+
private queryJson;
|
|
35
27
|
private toTokenEvent;
|
|
36
28
|
}
|
|
37
29
|
//# sourceMappingURL=cursor_sqlite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor_sqlite.d.ts","sourceRoot":"","sources":["../../src/collectors/cursor_sqlite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cursor_sqlite.d.ts","sourceRoot":"","sources":["../../src/collectors/cursor_sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGvD,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAqBD;;;;GAIG;AACH,qBAAa,kBAAkB;IAIjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,cAAc,CAAK;gBAEE,OAAO,EAAE,yBAAyB;IAE/D,KAAK,IAAI,IAAI;IAUP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAOb,IAAI;IAwBlB,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,YAAY;CAsBrB"}
|
|
@@ -1,164 +1,129 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
3
|
/**
|
|
4
|
-
* Polls Cursor's
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* - The file is opened read-only (`mode=ro`). If Cursor rewrites it we
|
|
9
|
-
* simply re-open on the next tick.
|
|
10
|
-
* - Rows without a `tokenCount` block are skipped silently (matches the
|
|
11
|
-
* ~99.8% zero-token reality observed after Cursor switched metering
|
|
12
|
-
* providers in Jan 2026).
|
|
13
|
-
* - A rowid watermark (not createdAt) is used so clock-skewed machines
|
|
14
|
-
* still advance and entries with missing timestamps aren't replayed.
|
|
4
|
+
* Polls Cursor's state database for new `bubbleId:*` rows and emits token
|
|
5
|
+
* usage to the ingest batcher. The implementation shells out to the system
|
|
6
|
+
* `sqlite3` binary to avoid native Node dependencies in the published package.
|
|
15
7
|
*/
|
|
16
8
|
export class CursorSqliteTailer {
|
|
17
|
-
|
|
18
|
-
db = null;
|
|
9
|
+
options;
|
|
19
10
|
timer = null;
|
|
20
11
|
watermarkRowId = 0;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
this.opts = opts;
|
|
24
|
-
this.pollIntervalMs = opts.pollIntervalMs ?? 5_000;
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.options = options;
|
|
25
14
|
}
|
|
26
15
|
start() {
|
|
27
16
|
if (this.timer)
|
|
28
17
|
return;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
.prepare("SELECT MAX(rowid) AS maxId FROM cursorDiskKV WHERE key LIKE 'bubbleId:%'")
|
|
33
|
-
.get();
|
|
34
|
-
if (max?.maxId) {
|
|
35
|
-
this.watermarkRowId = max.maxId;
|
|
36
|
-
this.opts.logger.debug(`cursor_sqlite: initialized watermark to ${this.watermarkRowId}`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
this.opts.logger.debug("cursor_sqlite: initial watermark query failed", err.message);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
this.timer = setInterval(() => void this.tick(), this.pollIntervalMs);
|
|
18
|
+
this.watermarkRowId = this.readMaxRowId();
|
|
19
|
+
const interval = this.options.pollIntervalMs ?? 5_000;
|
|
20
|
+
this.timer = setInterval(() => void this.poll(), interval);
|
|
44
21
|
this.timer.unref?.();
|
|
22
|
+
void this.poll();
|
|
23
|
+
this.options.logger.info("Cursor SQLite tailer started (polling mode)");
|
|
45
24
|
}
|
|
46
|
-
stop() {
|
|
25
|
+
async stop() {
|
|
47
26
|
if (this.timer) {
|
|
48
27
|
clearInterval(this.timer);
|
|
49
28
|
this.timer = null;
|
|
50
29
|
}
|
|
51
|
-
|
|
52
|
-
|
|
30
|
+
}
|
|
31
|
+
async poll() {
|
|
32
|
+
const rows = this.collectLatestRows();
|
|
33
|
+
if (rows.length === 0)
|
|
34
|
+
return;
|
|
35
|
+
let queued = 0;
|
|
36
|
+
for (const row of rows) {
|
|
37
|
+
try {
|
|
38
|
+
const event = this.toTokenEvent(JSON.parse(row.value));
|
|
39
|
+
if (event) {
|
|
40
|
+
this.options.batcher.enqueueTokenEvent(event);
|
|
41
|
+
queued++;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Cursor stores mixed JSON payloads in this table; ignore malformed rows.
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
this.watermarkRowId = Math.max(this.watermarkRowId, row.rowid);
|
|
49
|
+
}
|
|
53
50
|
}
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
if (queued > 0) {
|
|
52
|
+
this.options.logger.debug(`cursor_sqlite: queued ${queued} token events`);
|
|
56
53
|
}
|
|
57
|
-
this.db = null;
|
|
58
54
|
}
|
|
59
|
-
|
|
60
|
-
if (this.
|
|
61
|
-
return
|
|
62
|
-
if (!existsSync(this.opts.sqlitePath)) {
|
|
63
|
-
this.opts.logger.debug(`cursor_sqlite: state file not found at ${this.opts.sqlitePath}`);
|
|
64
|
-
return false;
|
|
55
|
+
collectLatestRows() {
|
|
56
|
+
if (!existsSync(this.options.sqlitePath)) {
|
|
57
|
+
return [];
|
|
65
58
|
}
|
|
66
59
|
try {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return
|
|
60
|
+
const query = "SELECT rowid, key, value FROM cursorDiskKV " +
|
|
61
|
+
"WHERE key LIKE 'bubbleId:%' AND rowid > ? ORDER BY rowid";
|
|
62
|
+
const output = this.queryJson(query, String(this.watermarkRowId));
|
|
63
|
+
if (!output || output.trim() === "")
|
|
64
|
+
return [];
|
|
65
|
+
return JSON.parse(output);
|
|
73
66
|
}
|
|
74
67
|
catch (err) {
|
|
75
|
-
this.
|
|
76
|
-
|
|
77
|
-
return false;
|
|
68
|
+
this.options.logger.debug("cursor_sqlite: poll failed", err.message);
|
|
69
|
+
return [];
|
|
78
70
|
}
|
|
79
71
|
}
|
|
80
|
-
|
|
81
|
-
if (!this.
|
|
82
|
-
return;
|
|
83
|
-
let rows = [];
|
|
84
|
-
try {
|
|
85
|
-
rows = this.db
|
|
86
|
-
.prepare("SELECT key, value FROM cursorDiskKV WHERE key LIKE 'bubbleId:%' AND rowid > ? ORDER BY rowid")
|
|
87
|
-
.all(this.watermarkRowId);
|
|
72
|
+
readMaxRowId() {
|
|
73
|
+
if (!existsSync(this.options.sqlitePath)) {
|
|
74
|
+
return 0;
|
|
88
75
|
}
|
|
89
|
-
catch (err) {
|
|
90
|
-
this.opts.logger.debug("cursor_sqlite: tick query failed (will retry)", err.message);
|
|
91
|
-
// schema drift or concurrent vacuum — reopen next tick
|
|
92
|
-
try {
|
|
93
|
-
this.db.close();
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
/* noop */
|
|
97
|
-
}
|
|
98
|
-
this.db = null;
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
if (rows.length === 0)
|
|
102
|
-
return;
|
|
103
76
|
try {
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if (max?.maxId)
|
|
108
|
-
this.watermarkRowId = max.maxId;
|
|
77
|
+
const output = this.queryJson("SELECT MAX(rowid) AS max_rowid FROM cursorDiskKV WHERE key LIKE 'bubbleId:%'");
|
|
78
|
+
const [row] = JSON.parse(output || "[]");
|
|
79
|
+
return row?.max_rowid ?? 0;
|
|
109
80
|
}
|
|
110
81
|
catch {
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
if (rows.length > 0) {
|
|
114
|
-
this.opts.logger.debug(`cursor_sqlite: found ${rows.length} new rows`);
|
|
115
|
-
}
|
|
116
|
-
let posted = 0;
|
|
117
|
-
for (const row of rows) {
|
|
118
|
-
try {
|
|
119
|
-
const parsed = JSON.parse(row.value);
|
|
120
|
-
const event = this.toTokenEvent(parsed);
|
|
121
|
-
if (event) {
|
|
122
|
-
this.opts.batcher.enqueueTokenEvent(event);
|
|
123
|
-
posted++;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
// unparsable row — ignore silently
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
if (posted > 0) {
|
|
131
|
-
this.opts.logger.debug(`cursor_sqlite: queued ${posted} events`);
|
|
82
|
+
return 0;
|
|
132
83
|
}
|
|
133
84
|
}
|
|
85
|
+
queryJson(query, ...params) {
|
|
86
|
+
const escapedParams = params.map((p) => p.replaceAll("'", "''"));
|
|
87
|
+
const parameterized = escapedParams.reduce((sql, param) => sql.replace("?", `'${param}'`), query);
|
|
88
|
+
return execFileSync("sqlite3", [
|
|
89
|
+
"-readonly",
|
|
90
|
+
"-json",
|
|
91
|
+
this.options.sqlitePath,
|
|
92
|
+
parameterized,
|
|
93
|
+
], {
|
|
94
|
+
encoding: "utf8",
|
|
95
|
+
timeout: 2_000,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
134
98
|
toTokenEvent(bubble) {
|
|
135
|
-
const tc = bubble.tokenCount;
|
|
136
|
-
const input = tc?.inputTokens ?? null;
|
|
137
|
-
const output = tc?.outputTokens ?? null;
|
|
138
99
|
const requestId = bubble.requestId ?? bubble.bubbleId;
|
|
139
100
|
if (!requestId)
|
|
140
101
|
return null;
|
|
141
|
-
const
|
|
102
|
+
const tokenCount = bubble.tokenCount;
|
|
103
|
+
const input = tokenCount?.inputTokens ?? null;
|
|
104
|
+
const output = tokenCount?.outputTokens ?? null;
|
|
105
|
+
if ((input ?? 0) + (output ?? 0) === 0)
|
|
106
|
+
return null;
|
|
142
107
|
return {
|
|
143
108
|
request_id: requestId,
|
|
144
|
-
session_id: this.
|
|
145
|
-
developer_id: this.
|
|
146
|
-
timestamp_ms:
|
|
109
|
+
session_id: this.options.getSessionId(),
|
|
110
|
+
developer_id: this.options.developerId,
|
|
111
|
+
timestamp_ms: toMs(bubble.createdAt) ?? Date.now(),
|
|
147
112
|
ide_name: "cursor",
|
|
148
113
|
model_name: bubble.modelInfo?.modelName ?? bubble.modelInfo?.model ?? null,
|
|
149
114
|
input_tokens: input,
|
|
150
115
|
output_tokens: output,
|
|
151
|
-
cache_read_input_tokens:
|
|
152
|
-
cache_creation_input_tokens:
|
|
116
|
+
cache_read_input_tokens: tokenCount?.cacheReadInputTokens ?? null,
|
|
117
|
+
cache_creation_input_tokens: tokenCount?.cacheCreationInputTokens ?? null,
|
|
153
118
|
};
|
|
154
119
|
}
|
|
155
120
|
}
|
|
156
|
-
function toMs(
|
|
157
|
-
if (
|
|
121
|
+
function toMs(value) {
|
|
122
|
+
if (value == null)
|
|
158
123
|
return null;
|
|
159
|
-
if (typeof
|
|
160
|
-
return
|
|
161
|
-
const parsed = Date.parse(
|
|
124
|
+
if (typeof value === "number")
|
|
125
|
+
return value > 1e12 ? value : value * 1000;
|
|
126
|
+
const parsed = Date.parse(value);
|
|
162
127
|
return Number.isFinite(parsed) ? parsed : null;
|
|
163
128
|
}
|
|
164
129
|
//# sourceMappingURL=cursor_sqlite.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor_sqlite.js","sourceRoot":"","sources":["../../src/collectors/cursor_sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"cursor_sqlite.js","sourceRoot":"","sources":["../../src/collectors/cursor_sqlite.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ declare const ConfigFileSchema: z.ZodObject<{
|
|
|
3
3
|
ingest_url: z.ZodOptional<z.ZodString>;
|
|
4
4
|
ingest_hmac_key: z.ZodOptional<z.ZodString>;
|
|
5
5
|
developer_id: z.ZodOptional<z.ZodString>;
|
|
6
|
-
ide_name: z.ZodOptional<z.
|
|
6
|
+
ide_name: z.ZodOptional<z.ZodString>;
|
|
7
7
|
cursor_sqlite_path: z.ZodOptional<z.ZodString>;
|
|
8
8
|
claude_projects_root: z.ZodOptional<z.ZodString>;
|
|
9
9
|
batch_interval_ms: z.ZodOptional<z.ZodNumber>;
|
|
@@ -17,7 +17,7 @@ declare const ConfigFileSchema: z.ZodObject<{
|
|
|
17
17
|
ingest_url: z.ZodOptional<z.ZodString>;
|
|
18
18
|
ingest_hmac_key: z.ZodOptional<z.ZodString>;
|
|
19
19
|
developer_id: z.ZodOptional<z.ZodString>;
|
|
20
|
-
ide_name: z.ZodOptional<z.
|
|
20
|
+
ide_name: z.ZodOptional<z.ZodString>;
|
|
21
21
|
cursor_sqlite_path: z.ZodOptional<z.ZodString>;
|
|
22
22
|
claude_projects_root: z.ZodOptional<z.ZodString>;
|
|
23
23
|
batch_interval_ms: z.ZodOptional<z.ZodNumber>;
|
|
@@ -31,7 +31,7 @@ declare const ConfigFileSchema: z.ZodObject<{
|
|
|
31
31
|
ingest_url: z.ZodOptional<z.ZodString>;
|
|
32
32
|
ingest_hmac_key: z.ZodOptional<z.ZodString>;
|
|
33
33
|
developer_id: z.ZodOptional<z.ZodString>;
|
|
34
|
-
ide_name: z.ZodOptional<z.
|
|
34
|
+
ide_name: z.ZodOptional<z.ZodString>;
|
|
35
35
|
cursor_sqlite_path: z.ZodOptional<z.ZodString>;
|
|
36
36
|
claude_projects_root: z.ZodOptional<z.ZodString>;
|
|
37
37
|
batch_interval_ms: z.ZodOptional<z.ZodNumber>;
|
|
@@ -46,7 +46,7 @@ export interface ResolvedConfig {
|
|
|
46
46
|
ingestUrl: string;
|
|
47
47
|
ingestHmacKey: string;
|
|
48
48
|
developerId: string;
|
|
49
|
-
ideName:
|
|
49
|
+
ideName: string;
|
|
50
50
|
cursorSqlitePath: string;
|
|
51
51
|
claudeProjectsRoot: string;
|
|
52
52
|
batchIntervalMs: number;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAgBN,CAAC;AAEjB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAgBN,CAAC;AAEjB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAC1D;AA+DD,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAOnF;AAED,wBAAgB,UAAU,IAAI,cAAc,CAwD3C"}
|
package/dist/config.js
CHANGED
|
@@ -7,7 +7,7 @@ const ConfigFileSchema = z
|
|
|
7
7
|
ingest_url: z.string().url().optional(),
|
|
8
8
|
ingest_hmac_key: z.string().optional(),
|
|
9
9
|
developer_id: z.string().optional(),
|
|
10
|
-
ide_name: z.
|
|
10
|
+
ide_name: z.string().min(1).optional(),
|
|
11
11
|
cursor_sqlite_path: z.string().optional(),
|
|
12
12
|
claude_projects_root: z.string().optional(),
|
|
13
13
|
batch_interval_ms: z.number().int().positive().optional(),
|
|
@@ -66,7 +66,7 @@ export function loadConfig() {
|
|
|
66
66
|
if (!existsSync(CONFIG_DIR)) {
|
|
67
67
|
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
68
68
|
}
|
|
69
|
-
const ingestUrl = process.env.SPECT8_INGEST_URL ?? file.ingest_url ?? "https://
|
|
69
|
+
const ingestUrl = process.env.SPECT8_INGEST_URL ?? file.ingest_url ?? "https://cooperative-presence-production-d9a8.up.railway.app";
|
|
70
70
|
const ingestHmacKey = process.env.SPECT8_INGEST_HMAC_KEY ?? file.ingest_hmac_key ?? "";
|
|
71
71
|
const developerId = process.env.SPECT8_DEVELOPER_ID ?? file.developer_id ?? "";
|
|
72
72
|
return {
|
|
@@ -90,7 +90,7 @@ export function loadConfig() {
|
|
|
90
90
|
50,
|
|
91
91
|
offlineQueuePath: process.env.SPECT8_OFFLINE_QUEUE_PATH ??
|
|
92
92
|
file.offline_queue_path ??
|
|
93
|
-
join(CONFIG_DIR, "offline_queue.
|
|
93
|
+
join(CONFIG_DIR, "offline_queue.json"),
|
|
94
94
|
sessionFilePath: process.env.SPECT8_SESSION_FILE ??
|
|
95
95
|
file.session_file_path ??
|
|
96
96
|
join(CONFIG_DIR, "session"),
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACvC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/shared.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type { ToolEvent, TokenEvent } from "../types.js";
|
|
|
5
5
|
export interface HookBundle {
|
|
6
6
|
sessionId: string;
|
|
7
7
|
developerId: string;
|
|
8
|
-
ideName:
|
|
8
|
+
ideName: string;
|
|
9
9
|
batcher: Batcher;
|
|
10
10
|
client: IngestClient;
|
|
11
11
|
queue: OfflineQueue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/hooks/shared.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/hooks/shared.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CA6B7C;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,EAC5B,KAAK,GAAE,OAAO,CAAC,SAAS,CAAM,GAC7B,SAAS,CAWX;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,GACf,UAAU,EAAE,CAgDd;AAiBD,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare const DEFAULT_INGEST_URL = "https://cooperative-presence-production-d9a8.up.railway.app";
|
|
2
|
+
export declare const DEFAULT_FRONTEND_URL = "https://www.spect8ai.tech";
|
|
3
|
+
export declare const PACKAGE_NAME = "spect8-mcp";
|
|
4
|
+
export declare const RULES_CONTENT = "# Spect8 AI Proficiency Rules\nYou are integrated with the Spect8 Telemetry system.\n\nRequired workflow:\n1. Call `mcp_spect8_start_task` at the beginning of every user request.\n2. Call `mcp_spect8_report_activity` after reading files, writing files, running commands, searching files, or checking diffs.\n3. Call `mcp_spect8_end_task` once the objective is complete.\n\nWhen reporting activity, include the IDE name when known and pass available metadata such as file paths, command strings, exit codes, file sizes, search queries, and diff counts.\n";
|
|
5
|
+
export type InstallTarget = "cursor" | "claude-code" | "rules" | "all";
|
|
6
|
+
export interface InstallPaths {
|
|
7
|
+
homeDir: string;
|
|
8
|
+
projectDir: string;
|
|
9
|
+
}
|
|
10
|
+
export interface InstallResult {
|
|
11
|
+
changed: string[];
|
|
12
|
+
unchanged: string[];
|
|
13
|
+
warnings: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface DoctorCheck {
|
|
16
|
+
name: string;
|
|
17
|
+
ok: boolean;
|
|
18
|
+
detail: string;
|
|
19
|
+
}
|
|
20
|
+
export interface DoctorResult {
|
|
21
|
+
checks: DoctorCheck[];
|
|
22
|
+
ok: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface PromptOptions {
|
|
25
|
+
ide?: string;
|
|
26
|
+
token?: string;
|
|
27
|
+
ingestUrl?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface DoctorOptions {
|
|
30
|
+
target?: InstallTarget;
|
|
31
|
+
}
|
|
32
|
+
export declare function defaultInstallPaths(): InstallPaths;
|
|
33
|
+
export declare function createEmptyResult(): InstallResult;
|
|
34
|
+
export declare function mergeResults(...results: InstallResult[]): InstallResult;
|
|
35
|
+
export declare function installTarget(target: InstallTarget, paths?: InstallPaths): InstallResult;
|
|
36
|
+
export declare function installCursor(paths: InstallPaths): InstallResult;
|
|
37
|
+
export declare function installClaudeCode(paths: InstallPaths): InstallResult;
|
|
38
|
+
export declare function installRules(paths: InstallPaths): InstallResult;
|
|
39
|
+
export declare function runDoctor(paths?: InstallPaths, options?: DoctorOptions): DoctorResult;
|
|
40
|
+
export declare function generateInstallPrompt(options?: PromptOptions): string;
|
|
41
|
+
//# sourceMappingURL=install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,kBAAkB,gEAAgE,CAAC;AAChG,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAChE,eAAO,MAAM,YAAY,eAAe,CAAC;AAEzC,eAAO,MAAM,aAAa,8iBASzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO,GAAG,KAAK,CAAC;AAEvE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,EAAE,EAAE,OAAO,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAgB,mBAAmB,IAAI,YAAY,CAKlD;AAED,wBAAgB,iBAAiB,IAAI,aAAa,CAEjD;AAED,wBAAgB,YAAY,CAAC,GAAG,OAAO,EAAE,aAAa,EAAE,GAAG,aAAa,CAMvE;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,KAAK,GAAE,YAAoC,GAC1C,aAAa,CAWf;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAuBhE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAiBpE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAW/D;AAED,wBAAgB,SAAS,CACvB,KAAK,GAAE,YAAoC,EAC3C,OAAO,GAAE,aAAkB,GAC1B,YAAY,CAyEd;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAqBzE"}
|