glancey 2.0.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 +435 -0
- package/dist/__tests__/ast-chunker.test.d.ts +2 -0
- package/dist/__tests__/ast-chunker.test.d.ts.map +1 -0
- package/dist/__tests__/ast-chunker.test.js +307 -0
- package/dist/__tests__/ast-chunker.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +242 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/dashboard/beads.test.d.ts +2 -0
- package/dist/__tests__/dashboard/beads.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/beads.test.js +151 -0
- package/dist/__tests__/dashboard/beads.test.js.map +1 -0
- package/dist/__tests__/dashboard/index.test.d.ts +2 -0
- package/dist/__tests__/dashboard/index.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/index.test.js +116 -0
- package/dist/__tests__/dashboard/index.test.js.map +1 -0
- package/dist/__tests__/dashboard/routes.test.d.ts +2 -0
- package/dist/__tests__/dashboard/routes.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/routes.test.js +125 -0
- package/dist/__tests__/dashboard/routes.test.js.map +1 -0
- package/dist/__tests__/dashboard/server.test.d.ts +2 -0
- package/dist/__tests__/dashboard/server.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/server.test.js +75 -0
- package/dist/__tests__/dashboard/server.test.js.map +1 -0
- package/dist/__tests__/dashboard/state.test.d.ts +2 -0
- package/dist/__tests__/dashboard/state.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/state.test.js +124 -0
- package/dist/__tests__/dashboard/state.test.js.map +1 -0
- package/dist/__tests__/dashboard/token-tracking.test.d.ts +2 -0
- package/dist/__tests__/dashboard/token-tracking.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/token-tracking.test.js +315 -0
- package/dist/__tests__/dashboard/token-tracking.test.js.map +1 -0
- package/dist/__tests__/embeddings/factory.test.d.ts +2 -0
- package/dist/__tests__/embeddings/factory.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/factory.test.js +157 -0
- package/dist/__tests__/embeddings/factory.test.js.map +1 -0
- package/dist/__tests__/embeddings/gemini.test.d.ts +2 -0
- package/dist/__tests__/embeddings/gemini.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/gemini.test.js +178 -0
- package/dist/__tests__/embeddings/gemini.test.js.map +1 -0
- package/dist/__tests__/embeddings/ollama.test.d.ts +2 -0
- package/dist/__tests__/embeddings/ollama.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/ollama.test.js +273 -0
- package/dist/__tests__/embeddings/ollama.test.js.map +1 -0
- package/dist/__tests__/embeddings/rate-limiter.test.d.ts +2 -0
- package/dist/__tests__/embeddings/rate-limiter.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/rate-limiter.test.js +163 -0
- package/dist/__tests__/embeddings/rate-limiter.test.js.map +1 -0
- package/dist/__tests__/embeddings/retry.test.d.ts +2 -0
- package/dist/__tests__/embeddings/retry.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/retry.test.js +334 -0
- package/dist/__tests__/embeddings/retry.test.js.map +1 -0
- package/dist/__tests__/embeddings/types.test.d.ts +2 -0
- package/dist/__tests__/embeddings/types.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/types.test.js +31 -0
- package/dist/__tests__/embeddings/types.test.js.map +1 -0
- package/dist/__tests__/mocks/embedding-backend.mock.d.ts +10 -0
- package/dist/__tests__/mocks/embedding-backend.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/embedding-backend.mock.js +39 -0
- package/dist/__tests__/mocks/embedding-backend.mock.js.map +1 -0
- package/dist/__tests__/mocks/fetch.mock.d.ts +49 -0
- package/dist/__tests__/mocks/fetch.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/fetch.mock.js +102 -0
- package/dist/__tests__/mocks/fetch.mock.js.map +1 -0
- package/dist/__tests__/mocks/lancedb.mock.d.ts +38 -0
- package/dist/__tests__/mocks/lancedb.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/lancedb.mock.js +63 -0
- package/dist/__tests__/mocks/lancedb.mock.js.map +1 -0
- package/dist/__tests__/search/clustering.test.d.ts +2 -0
- package/dist/__tests__/search/clustering.test.d.ts.map +1 -0
- package/dist/__tests__/search/clustering.test.js +230 -0
- package/dist/__tests__/search/clustering.test.js.map +1 -0
- package/dist/__tests__/search/hybrid-search.test.d.ts +2 -0
- package/dist/__tests__/search/hybrid-search.test.d.ts.map +1 -0
- package/dist/__tests__/search/hybrid-search.test.js +279 -0
- package/dist/__tests__/search/hybrid-search.test.js.map +1 -0
- package/dist/__tests__/search/indexer.test.d.ts +2 -0
- package/dist/__tests__/search/indexer.test.d.ts.map +1 -0
- package/dist/__tests__/search/indexer.test.js +1305 -0
- package/dist/__tests__/search/indexer.test.js.map +1 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.d.ts +2 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.d.ts.map +1 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.js +228 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.js.map +1 -0
- package/dist/__tests__/setup.d.ts +2 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +11 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/tools/clustering-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/clustering-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/clustering-handlers.test.js +286 -0
- package/dist/__tests__/tools/clustering-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/commit-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/commit-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/commit-handlers.test.js +153 -0
- package/dist/__tests__/tools/commit-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/index-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/index-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/index-handlers.test.js +184 -0
- package/dist/__tests__/tools/index-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/instructions-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/instructions-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/instructions-handlers.test.js +53 -0
- package/dist/__tests__/tools/instructions-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/memory-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/memory-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/memory-handlers.test.js +175 -0
- package/dist/__tests__/tools/memory-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/search-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/search-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/search-handlers.test.js +229 -0
- package/dist/__tests__/tools/search-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/symbol-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/symbol-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/symbol-handlers.test.js +348 -0
- package/dist/__tests__/tools/symbol-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/worktree-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/worktree-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/worktree-handlers.test.js +297 -0
- package/dist/__tests__/tools/worktree-handlers.test.js.map +1 -0
- package/dist/__tests__/utils/cache.test.d.ts +2 -0
- package/dist/__tests__/utils/cache.test.d.ts.map +1 -0
- package/dist/__tests__/utils/cache.test.js +147 -0
- package/dist/__tests__/utils/cache.test.js.map +1 -0
- package/dist/__tests__/utils/concurrency.test.d.ts +2 -0
- package/dist/__tests__/utils/concurrency.test.d.ts.map +1 -0
- package/dist/__tests__/utils/concurrency.test.js +83 -0
- package/dist/__tests__/utils/concurrency.test.js.map +1 -0
- package/dist/__tests__/utils/errors.test.d.ts +2 -0
- package/dist/__tests__/utils/errors.test.d.ts.map +1 -0
- package/dist/__tests__/utils/errors.test.js +136 -0
- package/dist/__tests__/utils/errors.test.js.map +1 -0
- package/dist/__tests__/utils/logger.test.d.ts +2 -0
- package/dist/__tests__/utils/logger.test.d.ts.map +1 -0
- package/dist/__tests__/utils/logger.test.js +131 -0
- package/dist/__tests__/utils/logger.test.js.map +1 -0
- package/dist/__tests__/utils/type-guards.test.d.ts +2 -0
- package/dist/__tests__/utils/type-guards.test.d.ts.map +1 -0
- package/dist/__tests__/utils/type-guards.test.js +80 -0
- package/dist/__tests__/utils/type-guards.test.js.map +1 -0
- package/dist/__tests__/worktree/worktree-manager.test.d.ts +2 -0
- package/dist/__tests__/worktree/worktree-manager.test.d.ts.map +1 -0
- package/dist/__tests__/worktree/worktree-manager.test.js +403 -0
- package/dist/__tests__/worktree/worktree-manager.test.js.map +1 -0
- package/dist/config.d.ts +191 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +788 -0
- package/dist/config.js.map +1 -0
- package/dist/dashboard/beads.d.ts +35 -0
- package/dist/dashboard/beads.d.ts.map +1 -0
- package/dist/dashboard/beads.js +102 -0
- package/dist/dashboard/beads.js.map +1 -0
- package/dist/dashboard/events.d.ts +64 -0
- package/dist/dashboard/events.d.ts.map +1 -0
- package/dist/dashboard/events.js +211 -0
- package/dist/dashboard/events.js.map +1 -0
- package/dist/dashboard/index.d.ts +69 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +93 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/routes.d.ts +6 -0
- package/dist/dashboard/routes.d.ts.map +1 -0
- package/dist/dashboard/routes.js +505 -0
- package/dist/dashboard/routes.js.map +1 -0
- package/dist/dashboard/server.d.ts +27 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +72 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/dashboard/state.d.ts +172 -0
- package/dist/dashboard/state.d.ts.map +1 -0
- package/dist/dashboard/state.js +362 -0
- package/dist/dashboard/state.js.map +1 -0
- package/dist/dashboard/token-tracking.d.ts +143 -0
- package/dist/dashboard/token-tracking.d.ts.map +1 -0
- package/dist/dashboard/token-tracking.js +363 -0
- package/dist/dashboard/token-tracking.js.map +1 -0
- package/dist/dashboard/ui.d.ts +6 -0
- package/dist/dashboard/ui.d.ts.map +1 -0
- package/dist/dashboard/ui.js +2710 -0
- package/dist/dashboard/ui.js.map +1 -0
- package/dist/embeddings/gemini.d.ts +28 -0
- package/dist/embeddings/gemini.d.ts.map +1 -0
- package/dist/embeddings/gemini.js +165 -0
- package/dist/embeddings/gemini.js.map +1 -0
- package/dist/embeddings/index.d.ts +34 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +120 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/ollama.d.ts +22 -0
- package/dist/embeddings/ollama.d.ts.map +1 -0
- package/dist/embeddings/ollama.js +179 -0
- package/dist/embeddings/ollama.js.map +1 -0
- package/dist/embeddings/rate-limiter.d.ts +75 -0
- package/dist/embeddings/rate-limiter.d.ts.map +1 -0
- package/dist/embeddings/rate-limiter.js +145 -0
- package/dist/embeddings/rate-limiter.js.map +1 -0
- package/dist/embeddings/retry.d.ts +20 -0
- package/dist/embeddings/retry.d.ts.map +1 -0
- package/dist/embeddings/retry.js +227 -0
- package/dist/embeddings/retry.js.map +1 -0
- package/dist/embeddings/types.d.ts +103 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/embeddings/types.js +23 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2028 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/index.d.ts +63 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +168 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/search/ast-chunker.d.ts +29 -0
- package/dist/search/ast-chunker.d.ts.map +1 -0
- package/dist/search/ast-chunker.js +236 -0
- package/dist/search/ast-chunker.js.map +1 -0
- package/dist/search/chunk-utils.d.ts +24 -0
- package/dist/search/chunk-utils.d.ts.map +1 -0
- package/dist/search/chunk-utils.js +41 -0
- package/dist/search/chunk-utils.js.map +1 -0
- package/dist/search/clustering.d.ts +77 -0
- package/dist/search/clustering.d.ts.map +1 -0
- package/dist/search/clustering.js +455 -0
- package/dist/search/clustering.js.map +1 -0
- package/dist/search/indexer.d.ts +377 -0
- package/dist/search/indexer.d.ts.map +1 -0
- package/dist/search/indexer.js +1557 -0
- package/dist/search/indexer.js.map +1 -0
- package/dist/search/tree-sitter-chunker.d.ts +64 -0
- package/dist/search/tree-sitter-chunker.d.ts.map +1 -0
- package/dist/search/tree-sitter-chunker.js +412 -0
- package/dist/search/tree-sitter-chunker.js.map +1 -0
- package/dist/symbols/index.d.ts +14 -0
- package/dist/symbols/index.d.ts.map +1 -0
- package/dist/symbols/index.js +19 -0
- package/dist/symbols/index.js.map +1 -0
- package/dist/symbols/name-path.d.ts +113 -0
- package/dist/symbols/name-path.d.ts.map +1 -0
- package/dist/symbols/name-path.js +194 -0
- package/dist/symbols/name-path.js.map +1 -0
- package/dist/symbols/pattern-search.d.ts +14 -0
- package/dist/symbols/pattern-search.d.ts.map +1 -0
- package/dist/symbols/pattern-search.js +224 -0
- package/dist/symbols/pattern-search.js.map +1 -0
- package/dist/symbols/reference-finder.d.ts +38 -0
- package/dist/symbols/reference-finder.d.ts.map +1 -0
- package/dist/symbols/reference-finder.js +376 -0
- package/dist/symbols/reference-finder.js.map +1 -0
- package/dist/symbols/symbol-editor.d.ts +81 -0
- package/dist/symbols/symbol-editor.d.ts.map +1 -0
- package/dist/symbols/symbol-editor.js +257 -0
- package/dist/symbols/symbol-editor.js.map +1 -0
- package/dist/symbols/symbol-extractor.d.ts +49 -0
- package/dist/symbols/symbol-extractor.d.ts.map +1 -0
- package/dist/symbols/symbol-extractor.js +593 -0
- package/dist/symbols/symbol-extractor.js.map +1 -0
- package/dist/symbols/symbol-renamer.d.ts +81 -0
- package/dist/symbols/symbol-renamer.d.ts.map +1 -0
- package/dist/symbols/symbol-renamer.js +204 -0
- package/dist/symbols/symbol-renamer.js.map +1 -0
- package/dist/symbols/types.d.ts +234 -0
- package/dist/symbols/types.d.ts.map +1 -0
- package/dist/symbols/types.js +106 -0
- package/dist/symbols/types.js.map +1 -0
- package/dist/tools/clustering-handlers.d.ts +70 -0
- package/dist/tools/clustering-handlers.d.ts.map +1 -0
- package/dist/tools/clustering-handlers.js +150 -0
- package/dist/tools/clustering-handlers.js.map +1 -0
- package/dist/tools/commit-handlers.d.ts +77 -0
- package/dist/tools/commit-handlers.d.ts.map +1 -0
- package/dist/tools/commit-handlers.js +251 -0
- package/dist/tools/commit-handlers.js.map +1 -0
- package/dist/tools/index-handlers.d.ts +31 -0
- package/dist/tools/index-handlers.d.ts.map +1 -0
- package/dist/tools/index-handlers.js +53 -0
- package/dist/tools/index-handlers.js.map +1 -0
- package/dist/tools/instructions-handlers.d.ts +25 -0
- package/dist/tools/instructions-handlers.d.ts.map +1 -0
- package/dist/tools/instructions-handlers.js +36 -0
- package/dist/tools/instructions-handlers.js.map +1 -0
- package/dist/tools/memory-handlers.d.ts +95 -0
- package/dist/tools/memory-handlers.d.ts.map +1 -0
- package/dist/tools/memory-handlers.js +126 -0
- package/dist/tools/memory-handlers.js.map +1 -0
- package/dist/tools/search-handlers.d.ts +51 -0
- package/dist/tools/search-handlers.d.ts.map +1 -0
- package/dist/tools/search-handlers.js +128 -0
- package/dist/tools/search-handlers.js.map +1 -0
- package/dist/tools/symbol-handlers.d.ts +171 -0
- package/dist/tools/symbol-handlers.d.ts.map +1 -0
- package/dist/tools/symbol-handlers.js +456 -0
- package/dist/tools/symbol-handlers.js.map +1 -0
- package/dist/tools/types.d.ts +32 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +17 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/worktree-handlers.d.ts +96 -0
- package/dist/tools/worktree-handlers.d.ts.map +1 -0
- package/dist/tools/worktree-handlers.js +186 -0
- package/dist/tools/worktree-handlers.js.map +1 -0
- package/dist/utils/cache.d.ts +77 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +134 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/concurrency.d.ts +32 -0
- package/dist/utils/concurrency.d.ts.map +1 -0
- package/dist/utils/concurrency.js +57 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +91 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +37 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +114 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/type-guards.d.ts +17 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +25 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/dist/worktree/index.d.ts +6 -0
- package/dist/worktree/index.d.ts.map +1 -0
- package/dist/worktree/index.js +6 -0
- package/dist/worktree/index.js.map +1 -0
- package/dist/worktree/types.d.ts +101 -0
- package/dist/worktree/types.d.ts.map +1 -0
- package/dist/worktree/types.js +6 -0
- package/dist/worktree/types.js.map +1 -0
- package/dist/worktree/worktree-manager.d.ts +80 -0
- package/dist/worktree/worktree-manager.d.ts.map +1 -0
- package/dist/worktree/worktree-manager.js +407 -0
- package/dist/worktree/worktree-manager.js.map +1 -0
- package/package.json +87 -0
- package/scripts/postinstall.js +48 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import type { CodeIndexer, IndexStatus, IndexProgress } from '../search/indexer.js';
|
|
3
|
+
import type { GlanceyConfig } from '../config.js';
|
|
4
|
+
import type { BackendFallbackInfo } from '../embeddings/types.js';
|
|
5
|
+
import { type TokenSavingsStats } from './token-tracking.js';
|
|
6
|
+
/**
|
|
7
|
+
* Command names that can be tracked
|
|
8
|
+
*/
|
|
9
|
+
export type CommandName = 'index_codebase' | 'search_code' | 'search_similar' | 'get_index_status' | 'clear_index' | 'get_project_instructions' | 'commit' | 'get_symbols_overview' | 'find_symbol' | 'find_referencing_symbols' | 'search_for_pattern' | 'replace_symbol_body' | 'insert_before_symbol' | 'insert_after_symbol' | 'rename_symbol' | 'write_memory' | 'read_memory' | 'list_memories' | 'delete_memory' | 'edit_memory' | 'create_worktree' | 'list_worktrees' | 'remove_worktree' | 'worktree_status' | 'list_concepts' | 'search_by_concept' | 'summarize_codebase' | 'open_dashboard';
|
|
10
|
+
/**
|
|
11
|
+
* Command usage statistics
|
|
12
|
+
*/
|
|
13
|
+
export interface CommandUsage {
|
|
14
|
+
command: CommandName;
|
|
15
|
+
count: number;
|
|
16
|
+
label: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Events emitted by the DashboardStateManager
|
|
20
|
+
*/
|
|
21
|
+
export interface DashboardStateEvents {
|
|
22
|
+
progress: (progress: IndexProgress) => void;
|
|
23
|
+
'indexing:start': () => void;
|
|
24
|
+
'indexing:complete': (result: {
|
|
25
|
+
filesIndexed: number;
|
|
26
|
+
chunksCreated: number;
|
|
27
|
+
}) => void;
|
|
28
|
+
'status:change': (status: IndexStatus) => void;
|
|
29
|
+
'usage:update': (usage: CommandUsage[]) => void;
|
|
30
|
+
}
|
|
31
|
+
export declare class DashboardStateManager extends EventEmitter {
|
|
32
|
+
private indexer;
|
|
33
|
+
private config;
|
|
34
|
+
private projectPath;
|
|
35
|
+
private version;
|
|
36
|
+
private isIndexing;
|
|
37
|
+
private lastProgress;
|
|
38
|
+
private commandUsage;
|
|
39
|
+
private backendFallback;
|
|
40
|
+
constructor();
|
|
41
|
+
/**
|
|
42
|
+
* Get the path to the usage file
|
|
43
|
+
*/
|
|
44
|
+
private getUsageFilePath;
|
|
45
|
+
/**
|
|
46
|
+
* Load command usage from disk
|
|
47
|
+
*/
|
|
48
|
+
private loadUsageFromDisk;
|
|
49
|
+
/**
|
|
50
|
+
* Save command usage to disk
|
|
51
|
+
*/
|
|
52
|
+
private saveUsageToDisk;
|
|
53
|
+
/**
|
|
54
|
+
* Set the indexer instance for the dashboard to use
|
|
55
|
+
*/
|
|
56
|
+
setIndexer(indexer: CodeIndexer): void;
|
|
57
|
+
/**
|
|
58
|
+
* Set the configuration for the dashboard to display
|
|
59
|
+
*/
|
|
60
|
+
setConfig(config: GlanceyConfig): void;
|
|
61
|
+
/**
|
|
62
|
+
* Set the project path
|
|
63
|
+
*/
|
|
64
|
+
setProjectPath(projectPath: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* Set the package version
|
|
67
|
+
*/
|
|
68
|
+
setVersion(version: string): void;
|
|
69
|
+
/**
|
|
70
|
+
* Get the package version
|
|
71
|
+
*/
|
|
72
|
+
getVersion(): string | null;
|
|
73
|
+
/**
|
|
74
|
+
* Set backend fallback info when a fallback occurred during initialization
|
|
75
|
+
*/
|
|
76
|
+
setBackendFallback(fallback: BackendFallbackInfo): void;
|
|
77
|
+
/**
|
|
78
|
+
* Clear backend fallback info (when backend is successfully reinitialized)
|
|
79
|
+
*/
|
|
80
|
+
clearBackendFallback(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Get backend fallback info if a fallback occurred
|
|
83
|
+
*/
|
|
84
|
+
getBackendFallback(): BackendFallbackInfo | null;
|
|
85
|
+
/**
|
|
86
|
+
* Get the current index status
|
|
87
|
+
*/
|
|
88
|
+
getStatus(): Promise<IndexStatus | null>;
|
|
89
|
+
/**
|
|
90
|
+
* Get the current configuration
|
|
91
|
+
*/
|
|
92
|
+
getConfig(): GlanceyConfig | null;
|
|
93
|
+
/**
|
|
94
|
+
* Get the project path
|
|
95
|
+
*/
|
|
96
|
+
getProjectPath(): string | null;
|
|
97
|
+
/**
|
|
98
|
+
* Check if indexing is in progress
|
|
99
|
+
*/
|
|
100
|
+
isIndexingInProgress(): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Get the last progress update
|
|
103
|
+
*/
|
|
104
|
+
getLastProgress(): IndexProgress | null;
|
|
105
|
+
/**
|
|
106
|
+
* Called when indexing starts
|
|
107
|
+
*/
|
|
108
|
+
onIndexingStart(): void;
|
|
109
|
+
/**
|
|
110
|
+
* Called with progress updates during indexing
|
|
111
|
+
*/
|
|
112
|
+
onProgress(progress: IndexProgress): void;
|
|
113
|
+
/**
|
|
114
|
+
* Update just the message portion of the current progress.
|
|
115
|
+
* Useful for sub-progress updates (e.g., Ollama batch progress).
|
|
116
|
+
*/
|
|
117
|
+
updateProgressMessage(message: string): void;
|
|
118
|
+
/**
|
|
119
|
+
* Update sub-progress within the current phase.
|
|
120
|
+
* Allows embedding backends to report their own progress with percentage.
|
|
121
|
+
* The current/total values represent sub-progress within the phase.
|
|
122
|
+
*/
|
|
123
|
+
updateSubProgress(current: number, total: number, message: string): void;
|
|
124
|
+
/**
|
|
125
|
+
* Called when indexing completes
|
|
126
|
+
*/
|
|
127
|
+
onIndexingComplete(result: {
|
|
128
|
+
filesIndexed: number;
|
|
129
|
+
chunksCreated: number;
|
|
130
|
+
}): void;
|
|
131
|
+
/**
|
|
132
|
+
* Called when status changes
|
|
133
|
+
*/
|
|
134
|
+
onStatusChange(status: IndexStatus): void;
|
|
135
|
+
/**
|
|
136
|
+
* Trigger a reindex of the codebase.
|
|
137
|
+
* Returns a promise that resolves when indexing completes.
|
|
138
|
+
*/
|
|
139
|
+
triggerReindex(forceReindex?: boolean): Promise<{
|
|
140
|
+
filesIndexed: number;
|
|
141
|
+
chunksCreated: number;
|
|
142
|
+
} | null>;
|
|
143
|
+
/**
|
|
144
|
+
* Record a command usage
|
|
145
|
+
*/
|
|
146
|
+
recordCommandUsage(command: CommandName): void;
|
|
147
|
+
/**
|
|
148
|
+
* Get command usage statistics
|
|
149
|
+
*/
|
|
150
|
+
getCommandUsage(): CommandUsage[];
|
|
151
|
+
/**
|
|
152
|
+
* Get total command count for percentage calculations
|
|
153
|
+
*/
|
|
154
|
+
getTotalCommandCount(): number;
|
|
155
|
+
/**
|
|
156
|
+
* Get token savings statistics
|
|
157
|
+
*/
|
|
158
|
+
getTokenSavings(): TokenSavingsStats;
|
|
159
|
+
/**
|
|
160
|
+
* Get the token tracker for recording savings
|
|
161
|
+
*/
|
|
162
|
+
getTokenTracker(): import("./token-tracking.js").TokenSavingsTracker;
|
|
163
|
+
/**
|
|
164
|
+
* Emit token savings update event for real-time dashboard updates
|
|
165
|
+
*/
|
|
166
|
+
emitTokenSavingsUpdate(): void;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Singleton instance of the dashboard state manager
|
|
170
|
+
*/
|
|
171
|
+
export declare const dashboardState: DashboardStateManager;
|
|
172
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/dashboard/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { tokenTracker } from './token-tracking.js';
|
|
5
|
+
/**
|
|
6
|
+
* Manages the shared state for the dashboard.
|
|
7
|
+
* Acts as a bridge between the indexer and the dashboard.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Human-readable labels for commands
|
|
11
|
+
*/
|
|
12
|
+
const COMMAND_LABELS = {
|
|
13
|
+
index_codebase: 'Index Codebase',
|
|
14
|
+
search_code: 'Search Code',
|
|
15
|
+
search_similar: 'Search Similar',
|
|
16
|
+
get_index_status: 'Get Status',
|
|
17
|
+
clear_index: 'Clear Index',
|
|
18
|
+
get_project_instructions: 'Get Instructions',
|
|
19
|
+
commit: 'Commit',
|
|
20
|
+
// Symbolic analysis tools
|
|
21
|
+
get_symbols_overview: 'Symbols Overview',
|
|
22
|
+
find_symbol: 'Find Symbol',
|
|
23
|
+
find_referencing_symbols: 'Find References',
|
|
24
|
+
search_for_pattern: 'Pattern Search',
|
|
25
|
+
replace_symbol_body: 'Replace Symbol',
|
|
26
|
+
insert_before_symbol: 'Insert Before',
|
|
27
|
+
insert_after_symbol: 'Insert After',
|
|
28
|
+
rename_symbol: 'Rename Symbol',
|
|
29
|
+
// Memory tools
|
|
30
|
+
write_memory: 'Write Memory',
|
|
31
|
+
read_memory: 'Read Memory',
|
|
32
|
+
list_memories: 'List Memories',
|
|
33
|
+
delete_memory: 'Delete Memory',
|
|
34
|
+
edit_memory: 'Edit Memory',
|
|
35
|
+
// Worktree tools
|
|
36
|
+
create_worktree: 'Create Worktree',
|
|
37
|
+
list_worktrees: 'List Worktrees',
|
|
38
|
+
remove_worktree: 'Remove Worktree',
|
|
39
|
+
worktree_status: 'Worktree Status',
|
|
40
|
+
// Clustering tools
|
|
41
|
+
list_concepts: 'List Concepts',
|
|
42
|
+
search_by_concept: 'Search by Concept',
|
|
43
|
+
summarize_codebase: 'Summarize Codebase',
|
|
44
|
+
// Dashboard tools
|
|
45
|
+
open_dashboard: 'Open Dashboard',
|
|
46
|
+
};
|
|
47
|
+
/** Maximum number of event listeners to prevent memory leaks */
|
|
48
|
+
const MAX_LISTENERS = 20;
|
|
49
|
+
export class DashboardStateManager extends EventEmitter {
|
|
50
|
+
indexer = null;
|
|
51
|
+
config = null;
|
|
52
|
+
projectPath = null;
|
|
53
|
+
version = null;
|
|
54
|
+
isIndexing = false;
|
|
55
|
+
lastProgress = null;
|
|
56
|
+
commandUsage = new Map();
|
|
57
|
+
backendFallback = null;
|
|
58
|
+
constructor() {
|
|
59
|
+
super();
|
|
60
|
+
// Set max listeners to prevent memory leak warnings and enforce bounds
|
|
61
|
+
this.setMaxListeners(MAX_LISTENERS);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get the path to the usage file
|
|
65
|
+
*/
|
|
66
|
+
getUsageFilePath() {
|
|
67
|
+
if (!this.projectPath)
|
|
68
|
+
return null;
|
|
69
|
+
return path.join(this.projectPath, '.glancey', 'usage.json');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Load command usage from disk
|
|
73
|
+
*/
|
|
74
|
+
loadUsageFromDisk() {
|
|
75
|
+
const filePath = this.getUsageFilePath();
|
|
76
|
+
if (!filePath)
|
|
77
|
+
return;
|
|
78
|
+
try {
|
|
79
|
+
if (fs.existsSync(filePath)) {
|
|
80
|
+
const data = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
81
|
+
this.commandUsage.clear();
|
|
82
|
+
for (const [cmd, count] of Object.entries(data)) {
|
|
83
|
+
if (typeof count === 'number') {
|
|
84
|
+
this.commandUsage.set(cmd, count);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Ignore errors, start with empty usage
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Save command usage to disk
|
|
95
|
+
*/
|
|
96
|
+
saveUsageToDisk() {
|
|
97
|
+
const filePath = this.getUsageFilePath();
|
|
98
|
+
if (!filePath)
|
|
99
|
+
return;
|
|
100
|
+
try {
|
|
101
|
+
const data = {};
|
|
102
|
+
for (const [cmd, count] of this.commandUsage) {
|
|
103
|
+
data[cmd] = count;
|
|
104
|
+
}
|
|
105
|
+
fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Ignore errors
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Set the indexer instance for the dashboard to use
|
|
113
|
+
*/
|
|
114
|
+
setIndexer(indexer) {
|
|
115
|
+
this.indexer = indexer;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Set the configuration for the dashboard to display
|
|
119
|
+
*/
|
|
120
|
+
setConfig(config) {
|
|
121
|
+
this.config = config;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Set the project path
|
|
125
|
+
*/
|
|
126
|
+
setProjectPath(projectPath) {
|
|
127
|
+
this.projectPath = projectPath;
|
|
128
|
+
this.loadUsageFromDisk();
|
|
129
|
+
tokenTracker.setProjectPath(projectPath);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Set the package version
|
|
133
|
+
*/
|
|
134
|
+
setVersion(version) {
|
|
135
|
+
this.version = version;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get the package version
|
|
139
|
+
*/
|
|
140
|
+
getVersion() {
|
|
141
|
+
return this.version;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Set backend fallback info when a fallback occurred during initialization
|
|
145
|
+
*/
|
|
146
|
+
setBackendFallback(fallback) {
|
|
147
|
+
this.backendFallback = fallback;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Clear backend fallback info (when backend is successfully reinitialized)
|
|
151
|
+
*/
|
|
152
|
+
clearBackendFallback() {
|
|
153
|
+
this.backendFallback = null;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get backend fallback info if a fallback occurred
|
|
157
|
+
*/
|
|
158
|
+
getBackendFallback() {
|
|
159
|
+
return this.backendFallback;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get the current index status
|
|
163
|
+
*/
|
|
164
|
+
async getStatus() {
|
|
165
|
+
if (!this.indexer) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
return this.indexer.getStatus();
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get the current configuration
|
|
172
|
+
*/
|
|
173
|
+
getConfig() {
|
|
174
|
+
return this.config;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get the project path
|
|
178
|
+
*/
|
|
179
|
+
getProjectPath() {
|
|
180
|
+
return this.projectPath;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Check if indexing is in progress
|
|
184
|
+
*/
|
|
185
|
+
isIndexingInProgress() {
|
|
186
|
+
return this.isIndexing;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Get the last progress update
|
|
190
|
+
*/
|
|
191
|
+
getLastProgress() {
|
|
192
|
+
return this.lastProgress;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Called when indexing starts
|
|
196
|
+
*/
|
|
197
|
+
onIndexingStart() {
|
|
198
|
+
this.isIndexing = true;
|
|
199
|
+
this.lastProgress = null;
|
|
200
|
+
this.emit('indexing:start');
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Called with progress updates during indexing
|
|
204
|
+
*/
|
|
205
|
+
onProgress(progress) {
|
|
206
|
+
this.lastProgress = progress;
|
|
207
|
+
this.emit('progress', progress);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Update just the message portion of the current progress.
|
|
211
|
+
* Useful for sub-progress updates (e.g., Ollama batch progress).
|
|
212
|
+
*/
|
|
213
|
+
updateProgressMessage(message) {
|
|
214
|
+
if (this.lastProgress) {
|
|
215
|
+
this.lastProgress = { ...this.lastProgress, message };
|
|
216
|
+
this.emit('progress', this.lastProgress);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Update sub-progress within the current phase.
|
|
221
|
+
* Allows embedding backends to report their own progress with percentage.
|
|
222
|
+
* The current/total values represent sub-progress within the phase.
|
|
223
|
+
*/
|
|
224
|
+
updateSubProgress(current, total, message) {
|
|
225
|
+
if (this.lastProgress) {
|
|
226
|
+
this.lastProgress = { ...this.lastProgress, current, total, message };
|
|
227
|
+
this.emit('progress', this.lastProgress);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Called when indexing completes
|
|
232
|
+
*/
|
|
233
|
+
onIndexingComplete(result) {
|
|
234
|
+
this.isIndexing = false;
|
|
235
|
+
this.lastProgress = null;
|
|
236
|
+
this.emit('indexing:complete', result);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Called when status changes
|
|
240
|
+
*/
|
|
241
|
+
onStatusChange(status) {
|
|
242
|
+
this.emit('status:change', status);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Trigger a reindex of the codebase.
|
|
246
|
+
* Returns a promise that resolves when indexing completes.
|
|
247
|
+
*/
|
|
248
|
+
async triggerReindex(forceReindex = false) {
|
|
249
|
+
if (!this.indexer || !this.config) {
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
if (this.isIndexing) {
|
|
253
|
+
throw new Error('Indexing is already in progress');
|
|
254
|
+
}
|
|
255
|
+
this.onIndexingStart();
|
|
256
|
+
try {
|
|
257
|
+
const result = await this.indexer.indexCodebase(this.config.patterns, this.config.excludePatterns, forceReindex, (progress) => this.onProgress(progress));
|
|
258
|
+
this.onIndexingComplete(result);
|
|
259
|
+
return result;
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
this.isIndexing = false;
|
|
263
|
+
this.lastProgress = null;
|
|
264
|
+
throw error;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Record a command usage
|
|
269
|
+
*/
|
|
270
|
+
recordCommandUsage(command) {
|
|
271
|
+
// Reload from disk to get latest counts (in case another process updated)
|
|
272
|
+
this.loadUsageFromDisk();
|
|
273
|
+
const current = this.commandUsage.get(command) || 0;
|
|
274
|
+
this.commandUsage.set(command, current + 1);
|
|
275
|
+
this.saveUsageToDisk();
|
|
276
|
+
this.emit('usage:update', this.getCommandUsage());
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Get command usage statistics
|
|
280
|
+
*/
|
|
281
|
+
getCommandUsage() {
|
|
282
|
+
// Reload from disk to get latest counts (in case another process updated)
|
|
283
|
+
this.loadUsageFromDisk();
|
|
284
|
+
const allCommands = [
|
|
285
|
+
'search_code',
|
|
286
|
+
'search_similar',
|
|
287
|
+
'index_codebase',
|
|
288
|
+
'get_index_status',
|
|
289
|
+
'clear_index',
|
|
290
|
+
'get_project_instructions',
|
|
291
|
+
'commit',
|
|
292
|
+
// Symbolic analysis
|
|
293
|
+
'get_symbols_overview',
|
|
294
|
+
'find_symbol',
|
|
295
|
+
'find_referencing_symbols',
|
|
296
|
+
'search_for_pattern',
|
|
297
|
+
'replace_symbol_body',
|
|
298
|
+
'insert_before_symbol',
|
|
299
|
+
'insert_after_symbol',
|
|
300
|
+
'rename_symbol',
|
|
301
|
+
// Memory
|
|
302
|
+
'write_memory',
|
|
303
|
+
'read_memory',
|
|
304
|
+
'list_memories',
|
|
305
|
+
'delete_memory',
|
|
306
|
+
'edit_memory',
|
|
307
|
+
// Worktree
|
|
308
|
+
'create_worktree',
|
|
309
|
+
'list_worktrees',
|
|
310
|
+
'remove_worktree',
|
|
311
|
+
'worktree_status',
|
|
312
|
+
// Clustering
|
|
313
|
+
'list_concepts',
|
|
314
|
+
'search_by_concept',
|
|
315
|
+
'summarize_codebase',
|
|
316
|
+
// Dashboard
|
|
317
|
+
'open_dashboard',
|
|
318
|
+
];
|
|
319
|
+
return allCommands.map((command) => ({
|
|
320
|
+
command,
|
|
321
|
+
count: this.commandUsage.get(command) || 0,
|
|
322
|
+
label: COMMAND_LABELS[command],
|
|
323
|
+
}));
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Get total command count for percentage calculations
|
|
327
|
+
*/
|
|
328
|
+
getTotalCommandCount() {
|
|
329
|
+
let total = 0;
|
|
330
|
+
for (const count of this.commandUsage.values()) {
|
|
331
|
+
total += count;
|
|
332
|
+
}
|
|
333
|
+
return total;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Get token savings statistics
|
|
337
|
+
*/
|
|
338
|
+
getTokenSavings() {
|
|
339
|
+
return tokenTracker.getStats();
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Get the token tracker for recording savings
|
|
343
|
+
*/
|
|
344
|
+
getTokenTracker() {
|
|
345
|
+
return tokenTracker;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Emit token savings update event for real-time dashboard updates
|
|
349
|
+
*/
|
|
350
|
+
emitTokenSavingsUpdate() {
|
|
351
|
+
this.emit('tokenSavings:update', tokenTracker.getStats());
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Singleton instance of the dashboard state manager
|
|
356
|
+
*/
|
|
357
|
+
export const dashboardState = new DashboardStateManager();
|
|
358
|
+
// Wire up token savings updates to emit SSE events
|
|
359
|
+
tokenTracker.setOnUpdate(() => {
|
|
360
|
+
dashboardState.emitTokenSavingsUpdate();
|
|
361
|
+
});
|
|
362
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/dashboard/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token tracking module for estimating tokens saved by lance-context operations.
|
|
3
|
+
*
|
|
4
|
+
* Token estimation is based on the common approximation that 1 token ≈ 4 characters.
|
|
5
|
+
* This provides a rough estimate for understanding the efficiency gains from using
|
|
6
|
+
* semantic search vs. reading entire files.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Token savings event types
|
|
10
|
+
*/
|
|
11
|
+
export type TokenSavingsEventType = 'search_code' | 'search_similar' | 'get_symbols_overview' | 'find_symbol' | 'summarize_codebase' | 'list_concepts' | 'search_by_concept';
|
|
12
|
+
/**
|
|
13
|
+
* Record of a single token savings event
|
|
14
|
+
*/
|
|
15
|
+
export interface TokenSavingsEvent {
|
|
16
|
+
type: TokenSavingsEventType;
|
|
17
|
+
timestamp: number;
|
|
18
|
+
/** Characters returned to the agent */
|
|
19
|
+
charsReturned: number;
|
|
20
|
+
/** Estimated characters that would have been read without lance-context */
|
|
21
|
+
charsAvoided: number;
|
|
22
|
+
/** Number of files that would have been read */
|
|
23
|
+
filesAvoided: number;
|
|
24
|
+
/** Additional context about the operation */
|
|
25
|
+
context?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Aggregated token savings statistics
|
|
29
|
+
*/
|
|
30
|
+
export interface TokenSavingsStats {
|
|
31
|
+
/** Total estimated tokens saved */
|
|
32
|
+
tokensSaved: number;
|
|
33
|
+
/** Total characters returned */
|
|
34
|
+
charsReturned: number;
|
|
35
|
+
/** Total characters avoided (not sent to agent) */
|
|
36
|
+
charsAvoided: number;
|
|
37
|
+
/** Total files avoided reading */
|
|
38
|
+
filesAvoided: number;
|
|
39
|
+
/** Number of operations tracked */
|
|
40
|
+
operationCount: number;
|
|
41
|
+
/** Savings breakdown by operation type */
|
|
42
|
+
byType: Record<TokenSavingsEventType, {
|
|
43
|
+
count: number;
|
|
44
|
+
tokensSaved: number;
|
|
45
|
+
charsReturned: number;
|
|
46
|
+
charsAvoided: number;
|
|
47
|
+
}>;
|
|
48
|
+
/** Efficiency percentage (chars avoided / total chars) */
|
|
49
|
+
efficiencyPercent: number;
|
|
50
|
+
/** Session start time */
|
|
51
|
+
sessionStart: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Token savings tracker for a session
|
|
55
|
+
*/
|
|
56
|
+
export declare class TokenSavingsTracker {
|
|
57
|
+
private events;
|
|
58
|
+
private sessionStart;
|
|
59
|
+
private onUpdate;
|
|
60
|
+
private projectPath;
|
|
61
|
+
private saveTimer;
|
|
62
|
+
private pendingSave;
|
|
63
|
+
/**
|
|
64
|
+
* Set the project path and load persisted data
|
|
65
|
+
*/
|
|
66
|
+
setProjectPath(projectPath: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Get the path to the token savings file
|
|
69
|
+
*/
|
|
70
|
+
private getFilePath;
|
|
71
|
+
/**
|
|
72
|
+
* Load token savings from disk with validation
|
|
73
|
+
*/
|
|
74
|
+
private loadFromDisk;
|
|
75
|
+
/**
|
|
76
|
+
* Save token savings to disk (debounced to avoid blocking on every event)
|
|
77
|
+
*/
|
|
78
|
+
private saveToDisk;
|
|
79
|
+
/**
|
|
80
|
+
* Set callback to be called when token savings are updated
|
|
81
|
+
*/
|
|
82
|
+
setOnUpdate(callback: () => void): void;
|
|
83
|
+
/**
|
|
84
|
+
* Notify that token savings have been updated
|
|
85
|
+
*/
|
|
86
|
+
private notifyUpdate;
|
|
87
|
+
/**
|
|
88
|
+
* Record a search_code operation
|
|
89
|
+
* @param charsReturned Characters in the search results
|
|
90
|
+
* @param matchedFiles Number of files that matched
|
|
91
|
+
* @param totalFilesSearched Total files in the index
|
|
92
|
+
*/
|
|
93
|
+
recordSearchCode(charsReturned: number, matchedFiles: number, totalFilesSearched: number): void;
|
|
94
|
+
/**
|
|
95
|
+
* Record a search_similar operation
|
|
96
|
+
* @param charsReturned Characters in the similar code results
|
|
97
|
+
* @param matchedChunks Number of similar chunks found
|
|
98
|
+
*/
|
|
99
|
+
recordSearchSimilar(charsReturned: number, matchedChunks: number): void;
|
|
100
|
+
/**
|
|
101
|
+
* Record a get_symbols_overview operation
|
|
102
|
+
* @param charsReturned Characters in the symbols overview
|
|
103
|
+
* @param fileLines Total lines in the file
|
|
104
|
+
*/
|
|
105
|
+
recordSymbolsOverview(charsReturned: number, fileLines: number): void;
|
|
106
|
+
/**
|
|
107
|
+
* Record a find_symbol operation
|
|
108
|
+
* @param charsReturned Characters in the symbol results
|
|
109
|
+
* @param filesSearched Number of files searched
|
|
110
|
+
*/
|
|
111
|
+
recordFindSymbol(charsReturned: number, filesSearched: number): void;
|
|
112
|
+
/**
|
|
113
|
+
* Record a summarize_codebase operation
|
|
114
|
+
* @param charsReturned Characters in the summary
|
|
115
|
+
* @param totalFiles Total files in codebase
|
|
116
|
+
*/
|
|
117
|
+
recordSummarizeCodebase(charsReturned: number, totalFiles: number): void;
|
|
118
|
+
/**
|
|
119
|
+
* Record a list_concepts operation
|
|
120
|
+
* @param charsReturned Characters in the concepts list
|
|
121
|
+
* @param clusterCount Number of concept clusters
|
|
122
|
+
*/
|
|
123
|
+
recordListConcepts(charsReturned: number, clusterCount: number): void;
|
|
124
|
+
/**
|
|
125
|
+
* Record a search_by_concept operation
|
|
126
|
+
* @param charsReturned Characters in the concept search results
|
|
127
|
+
* @param matchedChunks Number of chunks in the concept
|
|
128
|
+
*/
|
|
129
|
+
recordSearchByConcept(charsReturned: number, matchedChunks: number): void;
|
|
130
|
+
/**
|
|
131
|
+
* Get aggregated statistics
|
|
132
|
+
*/
|
|
133
|
+
getStats(): TokenSavingsStats;
|
|
134
|
+
/**
|
|
135
|
+
* Get recent events (for debugging/display)
|
|
136
|
+
*/
|
|
137
|
+
getRecentEvents(limit?: number): TokenSavingsEvent[];
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Global token savings tracker instance
|
|
141
|
+
*/
|
|
142
|
+
export declare const tokenTracker: TokenSavingsTracker;
|
|
143
|
+
//# sourceMappingURL=token-tracking.d.ts.map
|