@tokentop/agent-cursor 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,33 @@
1
+ import type { Database } from 'bun:sqlite';
2
+ import type { AgentFetchContext, SessionParseOptions, SessionUsageData } from '@tokentop/plugin-sdk';
3
+ import type { CursorBubbleData, CursorComposerData } from './types.ts';
4
+ interface ComposerWithMeta {
5
+ composerId: string;
6
+ lastUpdatedAt: number;
7
+ projectPath: string | undefined;
8
+ sessionName: string | undefined;
9
+ }
10
+ export declare function toTimestamp(isoString: string | undefined, fallback: number): number;
11
+ /**
12
+ * Validates that a bubble is an assistant response worth tracking.
13
+ *
14
+ * Cursor populates tokenCount asynchronously via server polling (getTokenUsage).
15
+ * In newer agent-mode conversations the server often doesn't provide a usageUuid,
16
+ * leaving tokenCount at {inputTokens:0, outputTokens:0}. We accept assistant
17
+ * bubbles with either real token counts OR non-empty text content (for estimation).
18
+ */
19
+ export declare function isAssistantBubble(bubble: unknown): bubble is CursorBubbleData;
20
+ /**
21
+ * @deprecated Use {@link isAssistantBubble} instead.
22
+ */
23
+ export declare const isTokenBearingBubble: typeof isAssistantBubble;
24
+ /**
25
+ * Estimates output token count from response text length.
26
+ * Returns 0 when text is empty/missing. Used as fallback when Cursor's
27
+ * async token polling didn't populate the actual counts.
28
+ */
29
+ export declare function estimateOutputTokens(text: string | undefined): number;
30
+ export declare function parseComposerBubbles(db: Database, meta: ComposerWithMeta, composer: CursorComposerData, shouldEstimate?: boolean): SessionUsageData[];
31
+ export declare function parseSessionsFromWorkspaces(options: SessionParseOptions, ctx: AgentFetchContext): Promise<SessionUsageData[]>;
32
+ export {};
33
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AASrG,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAuB,MAAM,YAAY,CAAC;AAwB5F,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAInF;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,gBAAgB,CAgB7E;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,0BAAoB,CAAC;AAEtD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGrE;AAgBD,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,kBAAkB,EAC5B,cAAc,UAAO,GACpB,gBAAgB,EAAE,CA0CpB;AAgCD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,mBAAmB,EAC5B,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAwK7B"}
@@ -0,0 +1,6 @@
1
+ export declare const CURSOR_HOME: string;
2
+ export declare const CURSOR_GLOBAL_STORAGE_PATH: string;
3
+ export declare const CURSOR_WORKSPACE_STORAGE_PATH: string;
4
+ export declare const CURSOR_STATE_DB_PATH: string;
5
+ export declare function getWorkspaceDirs(): Promise<string[]>;
6
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,QAA6B,CAAC;AAetD,eAAO,MAAM,0BAA0B,QAA+C,CAAC;AACvF,eAAO,MAAM,6BAA6B,QAAkD,CAAC;AAC7F,eAAO,MAAM,oBAAoB,QAAuD,CAAC;AAEzF,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAe1D"}
@@ -0,0 +1,15 @@
1
+ import type { PluginStorage } from '@tokentop/plugin-sdk';
2
+ import type { SessionUsageData } from '@tokentop/plugin-sdk';
3
+ /** Capture the storage reference from a PluginContext. Safe to call multiple times. */
4
+ export declare function setPluginStorage(storage: PluginStorage): void;
5
+ /**
6
+ * Load the enrichment cache from persistent storage.
7
+ * Returns a Map of sessionId → enriched rows, or null if nothing is stored.
8
+ */
9
+ export declare function loadEnrichmentCache(): Promise<Map<string, SessionUsageData[]> | null>;
10
+ /**
11
+ * Save the enrichment cache to persistent storage.
12
+ * Fire-and-forget — errors are silently ignored.
13
+ */
14
+ export declare function saveEnrichmentCache(cache: Map<string, SessionUsageData[]>): void;
15
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAa7D,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAE7D;AAUD;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC,CAqB3F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAShF"}
@@ -0,0 +1,120 @@
1
+ import type { SessionUsageData } from '@tokentop/plugin-sdk';
2
+ /**
3
+ * Cursor stores conversations as "composers" in its SQLite state database.
4
+ * Each composer has metadata plus a list of bubble IDs that reference
5
+ * individual messages stored separately in the same KV table.
6
+ */
7
+ /** Bubble type: 1 = user message, 2 = assistant message. */
8
+ export type CursorBubbleType = 1 | 2;
9
+ /** Bubble header stored in composerData.fullConversationHeadersOnly. */
10
+ export interface CursorBubbleHeader {
11
+ bubbleId: string;
12
+ type: CursorBubbleType;
13
+ serverBubbleId?: string;
14
+ }
15
+ /** Model config stored at the composer level (conversation default). */
16
+ export interface CursorModelConfig {
17
+ modelName: string;
18
+ maxMode?: boolean;
19
+ }
20
+ /** Token count stored per-bubble. */
21
+ export interface CursorTokenCount {
22
+ inputTokens: number;
23
+ outputTokens: number;
24
+ }
25
+ /** Model info stored per-bubble (may be null if not resolved). */
26
+ export interface CursorModelInfo {
27
+ modelName: string;
28
+ }
29
+ /**
30
+ * Composer data from cursorDiskKV `composerData:{composerId}`.
31
+ * Only the fields we need for session parsing are typed here.
32
+ */
33
+ export interface CursorComposerData {
34
+ _v: number;
35
+ composerId: string;
36
+ name?: string;
37
+ status: string;
38
+ modelConfig: CursorModelConfig;
39
+ usageData: Record<string, unknown>;
40
+ fullConversationHeadersOnly: CursorBubbleHeader[];
41
+ lastUpdatedAt: number;
42
+ createdAt: number;
43
+ isAgentic?: boolean;
44
+ unifiedMode?: string;
45
+ forceMode?: string;
46
+ }
47
+ /**
48
+ * Individual bubble (message) from cursorDiskKV `bubbleId:{composerId}:{bubbleId}`.
49
+ * Only the fields we need for token extraction are typed here.
50
+ *
51
+ * Note: Cursor populates tokenCount asynchronously by polling its server via
52
+ * getTokenUsage({usageUuid}). When the server doesn't return a usageUuid (common
53
+ * in newer agent-mode conversations), tokenCount remains {inputTokens:0, outputTokens:0}.
54
+ * In that case we estimate output tokens from the bubble's text content.
55
+ */
56
+ export interface CursorBubbleData {
57
+ _v: number;
58
+ type: CursorBubbleType;
59
+ bubbleId: string;
60
+ tokenCount: CursorTokenCount;
61
+ modelInfo: CursorModelInfo | null;
62
+ requestId: string;
63
+ createdAt: string;
64
+ isAgentic?: boolean;
65
+ /** The assistant's response text content. Used for token estimation when tokenCount is zero. */
66
+ text?: string;
67
+ /** Server-assigned UUID for fetching token usage. Absent in newer agent-mode conversations. */
68
+ usageUuid?: string;
69
+ }
70
+ /** Composer entry in the workspace-level `composer.composerData` list. */
71
+ export interface CursorWorkspaceComposerEntry {
72
+ type: string;
73
+ composerId: string;
74
+ lastUpdatedAt?: number;
75
+ createdAt: number;
76
+ unifiedMode?: string;
77
+ forceMode?: string;
78
+ name?: string;
79
+ subtitle?: string;
80
+ isArchived?: boolean;
81
+ isDraft?: boolean;
82
+ }
83
+ /** Workspace-level composer index from ItemTable `composer.composerData`. */
84
+ export interface CursorWorkspaceComposerIndex {
85
+ allComposers: CursorWorkspaceComposerEntry[];
86
+ selectedComposerIds: string[];
87
+ lastFocusedComposerIds: string[];
88
+ hasMigratedComposerData?: boolean;
89
+ hasMigratedMultipleComposers?: boolean;
90
+ }
91
+ /** Workspace metadata from workspace.json. */
92
+ export interface CursorWorkspaceJson {
93
+ folder: string;
94
+ }
95
+ /** Resolved workspace: project path + associated composer IDs. */
96
+ export interface CursorWorkspaceInfo {
97
+ workspaceHash: string;
98
+ projectPath: string;
99
+ composerIds: string[];
100
+ }
101
+ /** Aggregate cache entry for parsed session data. */
102
+ export interface SessionAggregateCacheEntry {
103
+ updatedAt: number;
104
+ usageRows: SessionUsageData[];
105
+ lastAccessed: number;
106
+ }
107
+ /** A single row from Cursor's CSV usage export (`/api/dashboard/export-usage-events-csv`). */
108
+ export interface CursorCsvUsageRow {
109
+ timestamp: number;
110
+ kind: string;
111
+ model: string;
112
+ maxMode: boolean;
113
+ inputTokensWithCacheWrite: number;
114
+ inputTokensWithoutCacheWrite: number;
115
+ cacheReadTokens: number;
116
+ outputTokens: number;
117
+ totalTokens: number;
118
+ cost: number;
119
+ }
120
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { Database } from 'bun:sqlite';
2
+ import type { CursorBubbleData, CursorComposerData, CursorWorkspaceComposerIndex, CursorWorkspaceJson } from './types.ts';
3
+ export declare function openDatabase(dbPath: string): Database | null;
4
+ /**
5
+ * Open a database WITHOUT readonly mode. Used by the activity watcher to
6
+ * avoid WAL snapshot isolation — bun:sqlite in readonly mode may not see
7
+ * rows that exist only in the WAL file (not yet checkpointed).
8
+ * Read-write connections in WAL mode always read the latest WAL state.
9
+ */
10
+ export declare function openDatabaseForWatcher(dbPath: string): Database | null;
11
+ export declare function readComposerData(db: Database, composerId: string): CursorComposerData | null;
12
+ export declare function readBubbleData(db: Database, composerId: string, bubbleId: string): CursorBubbleData | null;
13
+ export declare function readAllComposerIds(db: Database): string[];
14
+ export declare function readAllBubbleKeys(db: Database, composerId: string): string[];
15
+ export declare function readWorkspaceComposerIndex(workspaceDirPath: string): CursorWorkspaceComposerIndex | null;
16
+ export declare function readWorkspaceJson(workspaceDirPath: string): Promise<CursorWorkspaceJson | null>;
17
+ export declare function parseWorkspaceFolderUri(folderUri: string): string;
18
+ export declare function resolveProviderId(modelName: string): string;
19
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,4BAA4B,EAC5B,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAM5D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAMtE;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAQ5F;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAQ1G;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,EAAE,CAQzD;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ5E;AAED,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,MAAM,GAAG,4BAA4B,GAAG,IAAI,CAcxG;AAED,wBAAsB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAOrG;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CASjE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAS3D"}
@@ -0,0 +1,17 @@
1
+ import * as fsSync from 'fs';
2
+ import type { ActivityCallback } from '@tokentop/plugin-sdk';
3
+ export interface SessionWatcherState {
4
+ watchers: fsSync.FSWatcher[];
5
+ dirty: boolean;
6
+ reconciliationTimer: ReturnType<typeof setInterval> | null;
7
+ started: boolean;
8
+ }
9
+ export declare const RECONCILIATION_INTERVAL_MS: number;
10
+ export declare const sessionWatcher: SessionWatcherState;
11
+ export declare let forceFullReconciliation: boolean;
12
+ export declare function startSessionWatcher(): void;
13
+ export declare function stopSessionWatcher(): void;
14
+ export declare function consumeForceFullReconciliation(): boolean;
15
+ export declare function startActivityWatch(callback: ActivityCallback): void;
16
+ export declare function stopActivityWatch(): void;
17
+ //# sourceMappingURL=watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,IAAI,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,sBAAsB,CAAC;AAK7E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,mBAAmB,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,CAAC;IAC3D,OAAO,EAAE,OAAO,CAAC;CAClB;AAeD,eAAO,MAAM,0BAA0B,QAAiB,CAAC;AAEzD,eAAO,MAAM,cAAc,EAAE,mBAK5B,CAAC;AAaF,eAAO,IAAI,uBAAuB,SAAQ,CAAC;AA+K3C,wBAAgB,mBAAmB,IAAI,IAAI,CAuB1C;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAczC;AAED,wBAAgB,8BAA8B,IAAI,OAAO,CAMxD;AAoBD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAmCnE;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAoBxC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tokentop/agent-cursor",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Cursor AI editor session tracking",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -49,12 +49,11 @@
49
49
  "bun": ">=1.0.0"
50
50
  },
51
51
  "peerDependencies": {
52
- "@tokentop/plugin-sdk": "^1.0.0"
52
+ "@tokentop/plugin-sdk": "^1.3.0"
53
53
  },
54
54
  "devDependencies": {
55
- "@tokentop/plugin-sdk": "^1.0.1",
55
+ "@tokentop/plugin-sdk": "^1.3.0",
56
56
  "@types/bun": "latest",
57
- "semantic-release": "^25.0.3",
58
57
  "typescript": "^5.7.0"
59
58
  }
60
59
  }