@ace-sdk/core 1.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.
Files changed (86) hide show
  1. package/README.md +54 -0
  2. package/dist/cache/index.d.ts +8 -0
  3. package/dist/cache/index.d.ts.map +1 -0
  4. package/dist/cache/index.js +6 -0
  5. package/dist/cache/index.js.map +1 -0
  6. package/dist/cache/local-cache.d.ts +72 -0
  7. package/dist/cache/local-cache.d.ts.map +1 -0
  8. package/dist/cache/local-cache.js +227 -0
  9. package/dist/cache/local-cache.js.map +1 -0
  10. package/dist/cache/session-storage.d.ts +76 -0
  11. package/dist/cache/session-storage.d.ts.map +1 -0
  12. package/dist/cache/session-storage.js +237 -0
  13. package/dist/cache/session-storage.js.map +1 -0
  14. package/dist/client/ace-client.d.ts +199 -0
  15. package/dist/client/ace-client.d.ts.map +1 -0
  16. package/dist/client/ace-client.js +454 -0
  17. package/dist/client/ace-client.js.map +1 -0
  18. package/dist/client/index.d.ts +6 -0
  19. package/dist/client/index.d.ts.map +1 -0
  20. package/dist/client/index.js +5 -0
  21. package/dist/client/index.js.map +1 -0
  22. package/dist/config/context.d.ts +48 -0
  23. package/dist/config/context.d.ts.map +1 -0
  24. package/dist/config/context.js +147 -0
  25. package/dist/config/context.js.map +1 -0
  26. package/dist/config/helpers.d.ts +79 -0
  27. package/dist/config/helpers.d.ts.map +1 -0
  28. package/dist/config/helpers.js +173 -0
  29. package/dist/config/helpers.js.map +1 -0
  30. package/dist/config/index.d.ts +10 -0
  31. package/dist/config/index.d.ts.map +1 -0
  32. package/dist/config/index.js +9 -0
  33. package/dist/config/index.js.map +1 -0
  34. package/dist/config/loader.d.ts +58 -0
  35. package/dist/config/loader.d.ts.map +1 -0
  36. package/dist/config/loader.js +275 -0
  37. package/dist/config/loader.js.map +1 -0
  38. package/dist/config/migration.d.ts +29 -0
  39. package/dist/config/migration.d.ts.map +1 -0
  40. package/dist/config/migration.js +137 -0
  41. package/dist/config/migration.js.map +1 -0
  42. package/dist/config/xdg.d.ts +62 -0
  43. package/dist/config/xdg.d.ts.map +1 -0
  44. package/dist/config/xdg.js +168 -0
  45. package/dist/config/xdg.js.map +1 -0
  46. package/dist/index.d.ts +32 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +50 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/logger/index.d.ts +6 -0
  51. package/dist/logger/index.d.ts.map +1 -0
  52. package/dist/logger/index.js +5 -0
  53. package/dist/logger/index.js.map +1 -0
  54. package/dist/logger/interface.d.ts +73 -0
  55. package/dist/logger/interface.d.ts.map +1 -0
  56. package/dist/logger/interface.js +11 -0
  57. package/dist/logger/interface.js.map +1 -0
  58. package/dist/logger/noop.d.ts +32 -0
  59. package/dist/logger/noop.d.ts.map +1 -0
  60. package/dist/logger/noop.js +53 -0
  61. package/dist/logger/noop.js.map +1 -0
  62. package/dist/types/config.d.ts +94 -0
  63. package/dist/types/config.d.ts.map +1 -0
  64. package/dist/types/config.js +26 -0
  65. package/dist/types/config.js.map +1 -0
  66. package/dist/types/index.d.ts +8 -0
  67. package/dist/types/index.d.ts.map +1 -0
  68. package/dist/types/index.js +6 -0
  69. package/dist/types/index.js.map +1 -0
  70. package/dist/types/pattern.d.ts +246 -0
  71. package/dist/types/pattern.d.ts.map +1 -0
  72. package/dist/types/pattern.js +22 -0
  73. package/dist/types/pattern.js.map +1 -0
  74. package/dist/utils/code-extractor.d.ts +34 -0
  75. package/dist/utils/code-extractor.d.ts.map +1 -0
  76. package/dist/utils/code-extractor.js +116 -0
  77. package/dist/utils/code-extractor.js.map +1 -0
  78. package/dist/utils/index.d.ts +8 -0
  79. package/dist/utils/index.d.ts.map +1 -0
  80. package/dist/utils/index.js +6 -0
  81. package/dist/utils/index.js.map +1 -0
  82. package/dist/utils/semver.d.ts +41 -0
  83. package/dist/utils/semver.d.ts.map +1 -0
  84. package/dist/utils/semver.js +90 -0
  85. package/dist/utils/semver.js.map +1 -0
  86. package/package.json +58 -0
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Session Storage - Persistent pattern pinning for context compaction
3
+ *
4
+ * Allows patterns retrieved during UserPromptSubmit hook to be "pinned" to a session
5
+ * and later recalled during PreCompact hook without redundant server calls.
6
+ *
7
+ * Storage: ~/.ace-cache/sessions.db (SQLite)
8
+ * TTL: 24 hours (survives cache expiry)
9
+ *
10
+ * @package @ace-sdk/core
11
+ */
12
+ import Database from 'better-sqlite3';
13
+ import { homedir } from 'os';
14
+ import { join } from 'path';
15
+ import { existsSync, mkdirSync } from 'fs';
16
+ export class SessionStorage {
17
+ db = null;
18
+ dbPath;
19
+ logger;
20
+ static SESSION_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
21
+ constructor(config, logger) {
22
+ this.logger = logger;
23
+ // Session storage path: ~/.ace-cache/sessions.db (or custom cacheDir)
24
+ const cacheDir = config?.cacheDir || join(homedir(), '.ace-cache');
25
+ if (!existsSync(cacheDir)) {
26
+ mkdirSync(cacheDir, { recursive: true });
27
+ }
28
+ this.dbPath = join(cacheDir, 'sessions.db');
29
+ }
30
+ /**
31
+ * Initialize session storage database
32
+ */
33
+ async initialize() {
34
+ try {
35
+ this.db = new Database(this.dbPath);
36
+ // Create sessions table
37
+ this.db.exec(`
38
+ CREATE TABLE IF NOT EXISTS sessions (
39
+ session_id TEXT PRIMARY KEY,
40
+ query TEXT NOT NULL,
41
+ threshold REAL NOT NULL,
42
+ top_k INTEGER NOT NULL,
43
+ created_at INTEGER NOT NULL,
44
+ expires_at INTEGER NOT NULL
45
+ )
46
+ `);
47
+ // Create session_patterns table
48
+ this.db.exec(`
49
+ CREATE TABLE IF NOT EXISTS session_patterns (
50
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
51
+ session_id TEXT NOT NULL,
52
+ pattern_data TEXT NOT NULL,
53
+ FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE
54
+ )
55
+ `);
56
+ // Create index for faster lookups
57
+ this.db.exec(`
58
+ CREATE INDEX IF NOT EXISTS idx_session_expires
59
+ ON sessions(expires_at)
60
+ `);
61
+ // Cleanup expired sessions on initialization
62
+ await this.cleanupExpiredSessions();
63
+ this.logger?.debug(`Session storage initialized: ${this.dbPath}`);
64
+ }
65
+ catch (error) {
66
+ this.logger?.error(`Failed to initialize session storage`, error);
67
+ throw error;
68
+ }
69
+ }
70
+ /**
71
+ * Pin patterns to a session
72
+ */
73
+ async pinSession(sessionId, query, patterns, threshold, topK) {
74
+ if (!this.db) {
75
+ throw new Error('Session storage not initialized');
76
+ }
77
+ const now = Date.now();
78
+ const expiresAt = now + SessionStorage.SESSION_TTL_MS;
79
+ try {
80
+ // Start transaction
81
+ const insertSession = this.db.prepare(`
82
+ INSERT OR REPLACE INTO sessions
83
+ (session_id, query, threshold, top_k, created_at, expires_at)
84
+ VALUES (?, ?, ?, ?, ?, ?)
85
+ `);
86
+ const insertPattern = this.db.prepare(`
87
+ INSERT INTO session_patterns (session_id, pattern_data)
88
+ VALUES (?, ?)
89
+ `);
90
+ // Delete existing patterns for this session (if replacing)
91
+ this.db.prepare('DELETE FROM session_patterns WHERE session_id = ?').run(sessionId);
92
+ // Insert session metadata
93
+ insertSession.run(sessionId, query, threshold, topK, now, expiresAt);
94
+ // Insert patterns
95
+ for (const pattern of patterns) {
96
+ insertPattern.run(sessionId, JSON.stringify(pattern));
97
+ }
98
+ this.logger?.debug(`Pinned ${patterns.length} patterns to session: ${sessionId} (expires in 24h)`);
99
+ }
100
+ catch (error) {
101
+ this.logger?.error(`Failed to pin session ${sessionId}`, error);
102
+ throw error;
103
+ }
104
+ }
105
+ /**
106
+ * Recall patterns for a session
107
+ */
108
+ async recallSession(sessionId) {
109
+ if (!this.db) {
110
+ throw new Error('Session storage not initialized');
111
+ }
112
+ try {
113
+ // Get session metadata
114
+ const session = this.db.prepare(`
115
+ SELECT * FROM sessions WHERE session_id = ?
116
+ `).get(sessionId);
117
+ if (!session) {
118
+ this.logger?.debug(`Session not found: ${sessionId}`);
119
+ return null;
120
+ }
121
+ // Check if expired
122
+ const now = Date.now();
123
+ if (now > session.expires_at) {
124
+ this.logger?.debug(`Session expired: ${sessionId}`);
125
+ // Cleanup expired session
126
+ this.db.prepare('DELETE FROM sessions WHERE session_id = ?').run(sessionId);
127
+ return null;
128
+ }
129
+ // Get patterns
130
+ const patternRows = this.db.prepare(`
131
+ SELECT pattern_data FROM session_patterns WHERE session_id = ?
132
+ `).all(sessionId);
133
+ const patterns = patternRows.map(row => JSON.parse(row.pattern_data));
134
+ this.logger?.debug(`Recalled ${patterns.length} patterns from session: ${sessionId} ` +
135
+ `(expires in ${Math.round((session.expires_at - now) / 1000 / 60 / 60)}h)`);
136
+ return {
137
+ similar_patterns: patterns,
138
+ count: patterns.length,
139
+ threshold: session.threshold,
140
+ top_k: session.top_k,
141
+ session_id: sessionId,
142
+ pinned_at: session.created_at,
143
+ expires_at: session.expires_at
144
+ };
145
+ }
146
+ catch (error) {
147
+ this.logger?.error(`Failed to recall session ${sessionId}`, error);
148
+ throw error;
149
+ }
150
+ }
151
+ /**
152
+ * Delete a specific session
153
+ */
154
+ async deleteSession(sessionId) {
155
+ if (!this.db) {
156
+ throw new Error('Session storage not initialized');
157
+ }
158
+ try {
159
+ const result = this.db.prepare('DELETE FROM sessions WHERE session_id = ?').run(sessionId);
160
+ const deleted = result.changes > 0;
161
+ if (deleted) {
162
+ this.logger?.debug(`Deleted session: ${sessionId}`);
163
+ }
164
+ return deleted;
165
+ }
166
+ catch (error) {
167
+ this.logger?.error(`Failed to delete session ${sessionId}`, error);
168
+ throw error;
169
+ }
170
+ }
171
+ /**
172
+ * Cleanup expired sessions (called on initialization and periodically)
173
+ */
174
+ async cleanupExpiredSessions() {
175
+ if (!this.db) {
176
+ throw new Error('Session storage not initialized');
177
+ }
178
+ try {
179
+ const now = Date.now();
180
+ const result = this.db.prepare('DELETE FROM sessions WHERE expires_at < ?').run(now);
181
+ const deletedCount = result.changes;
182
+ if (deletedCount > 0) {
183
+ this.logger?.debug(`Cleaned up ${deletedCount} expired session(s)`);
184
+ }
185
+ return deletedCount;
186
+ }
187
+ catch (error) {
188
+ this.logger?.error(`Failed to cleanup expired sessions`, error);
189
+ throw error;
190
+ }
191
+ }
192
+ /**
193
+ * List all active sessions
194
+ */
195
+ async listSessions() {
196
+ if (!this.db) {
197
+ throw new Error('Session storage not initialized');
198
+ }
199
+ try {
200
+ const now = Date.now();
201
+ const sessions = this.db.prepare(`
202
+ SELECT
203
+ s.session_id,
204
+ s.query,
205
+ s.created_at,
206
+ s.expires_at,
207
+ COUNT(sp.id) as pattern_count
208
+ FROM sessions s
209
+ LEFT JOIN session_patterns sp ON s.session_id = sp.session_id
210
+ WHERE s.expires_at > ?
211
+ GROUP BY s.session_id
212
+ ORDER BY s.created_at DESC
213
+ `).all(now);
214
+ return sessions.map(s => ({
215
+ sessionId: s.session_id,
216
+ query: s.query,
217
+ patternCount: s.pattern_count,
218
+ createdAt: s.created_at,
219
+ expiresAt: s.expires_at
220
+ }));
221
+ }
222
+ catch (error) {
223
+ this.logger?.error(`Failed to list sessions`, error);
224
+ throw error;
225
+ }
226
+ }
227
+ /**
228
+ * Close database connection
229
+ */
230
+ close() {
231
+ if (this.db) {
232
+ this.db.close();
233
+ this.db = null;
234
+ }
235
+ }
236
+ }
237
+ //# sourceMappingURL=session-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../src/cache/session-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * ACE Server Client - HTTP REST API client with 3-tier cache
3
+ *
4
+ * Architecture:
5
+ * 1. RAM cache (fastest, lost on restart)
6
+ * 2. SQLite cache (fast, survives restart)
7
+ * 3. Remote server (slow, source of truth)
8
+ *
9
+ * @package @ace-sdk/core
10
+ */
11
+ import { AceConfig, AceContext, ServerConfig } from '../types/config.js';
12
+ import { StructuredPlaybook, PlaybookStats, DeltaOperation, PlaybookBullet, SearchResponseWithMetadata, PlaybookResponseWithMetadata, LearningResponse, BootstrapResponse } from '../types/pattern.js';
13
+ import { LocalCacheService } from '../cache/local-cache.js';
14
+ import { ILogger } from '../logger/index.js';
15
+ /**
16
+ * Options for creating an ACE client
17
+ */
18
+ export interface AceClientOptions {
19
+ /** Logger for output (optional - defaults to silent) */
20
+ logger?: ILogger;
21
+ }
22
+ export declare class AceClient {
23
+ private config;
24
+ private localCache;
25
+ private memoryCache?;
26
+ private logger;
27
+ private configCache;
28
+ private CONFIG_CACHE_TTL;
29
+ constructor(config: AceConfig | AceContext, options?: AceClientOptions);
30
+ /**
31
+ * Extract org_id from API token
32
+ * Format: ace_{base64_with_org_id}
33
+ */
34
+ private extractOrgId;
35
+ private request;
36
+ /**
37
+ * Save structured playbook to server
38
+ * Server endpoint: POST /patterns (saves individual bullets)
39
+ */
40
+ savePlaybook(playbook: StructuredPlaybook): Promise<void>;
41
+ /**
42
+ * Get structured playbook (3-tier cache: RAM → SQLite → Server)
43
+ * Endpoint: GET /playbook
44
+ */
45
+ getPlaybook(params?: {
46
+ forceRefresh?: boolean;
47
+ include_metadata?: boolean;
48
+ }): Promise<PlaybookResponseWithMetadata>;
49
+ /**
50
+ * Count total bullets across all playbook sections
51
+ */
52
+ private countBullets;
53
+ /**
54
+ * Compute embeddings for texts (with SQLite cache if available)
55
+ * Endpoint: POST /embeddings
56
+ */
57
+ computeEmbeddings(texts: string[]): Promise<number[][]>;
58
+ /**
59
+ * Semantic search for relevant patterns
60
+ * Endpoint: POST /patterns/search
61
+ */
62
+ searchPatterns(params: {
63
+ query: string;
64
+ section?: string;
65
+ threshold?: number;
66
+ top_k?: number;
67
+ include_metadata?: boolean;
68
+ }): Promise<SearchResponseWithMetadata>;
69
+ /**
70
+ * Get top patterns by helpful score
71
+ * Endpoint: GET /patterns/top
72
+ */
73
+ getTopPatterns(params: {
74
+ section?: string;
75
+ limit?: number;
76
+ min_helpful?: number;
77
+ }): Promise<PlaybookBullet[]>;
78
+ /**
79
+ * Get playbook analytics
80
+ * Endpoint: GET /analytics
81
+ */
82
+ getAnalytics(): Promise<PlaybookStats>;
83
+ /**
84
+ * Clear entire playbook
85
+ * Server endpoint: DELETE /patterns
86
+ */
87
+ clearPlaybook(): Promise<void>;
88
+ /**
89
+ * Apply delta operation (ADD/UPDATE/DELETE)
90
+ * Server endpoint: POST /delta
91
+ */
92
+ applyDelta(operation: DeltaOperation): Promise<void>;
93
+ /**
94
+ * Apply multiple delta operations in batch
95
+ */
96
+ applyDeltas(operations: DeltaOperation[]): Promise<void>;
97
+ /**
98
+ * Store execution trace for server-side analysis
99
+ * Server endpoint: POST /traces
100
+ */
101
+ storeExecutionTrace(trace: any): Promise<LearningResponse>;
102
+ /**
103
+ * Bootstrap playbook from extracted code blocks
104
+ * Server endpoint: POST /bootstrap
105
+ */
106
+ bootstrap(params: {
107
+ mode: string;
108
+ code_blocks: string[];
109
+ metadata: {
110
+ files_scanned?: number;
111
+ blocks_extracted?: number;
112
+ thoroughness?: string;
113
+ file_extensions?: string[];
114
+ };
115
+ }): Promise<BootstrapResponse>;
116
+ /**
117
+ * Initialize playbook from git repository (server-side)
118
+ * Server endpoint: POST /init
119
+ */
120
+ initializeFromRepo(params: {
121
+ repo_path: string;
122
+ commit_limit: number;
123
+ days_back: number;
124
+ merge_with_existing: boolean;
125
+ }): Promise<any>;
126
+ /**
127
+ * Get playbook status/statistics
128
+ * Server endpoint: GET /analytics
129
+ */
130
+ getStatus(): Promise<PlaybookStats>;
131
+ /**
132
+ * Invalidate caches (force refresh on next call)
133
+ */
134
+ invalidateCache(): void;
135
+ /**
136
+ * Get server configuration with caching (v3.6.0+)
137
+ * Server endpoint: GET /api/v1/config
138
+ */
139
+ getConfig(useCache?: boolean): Promise<ServerConfig>;
140
+ /**
141
+ * Verify API token and fetch organization info
142
+ * Server endpoint: GET /api/v1/config/verify
143
+ */
144
+ verifyToken(): Promise<{
145
+ org_id: string;
146
+ org_name: string;
147
+ projects: Array<{
148
+ project_id: string;
149
+ project_name: string;
150
+ }>;
151
+ }>;
152
+ /**
153
+ * Batch retrieve patterns by ID (v3.6.0+)
154
+ * Server endpoint: POST /patterns/batch
155
+ */
156
+ batchGetPatterns(patternIds: string[]): Promise<{
157
+ patterns: PlaybookBullet[];
158
+ found_count: number;
159
+ not_found: string[];
160
+ }>;
161
+ /**
162
+ * Summarize a recorded session
163
+ * Server endpoint: POST /api/v1/summarize
164
+ */
165
+ summarizeSession(sessionData: any): Promise<{
166
+ session_id: string;
167
+ summary: string;
168
+ key_events: Array<{
169
+ timestamp: string;
170
+ type: string;
171
+ description: string;
172
+ }>;
173
+ insights: string[];
174
+ duration_ms: number;
175
+ event_count: number;
176
+ }>;
177
+ /**
178
+ * Clear config cache
179
+ */
180
+ clearConfigCache(): void;
181
+ /**
182
+ * Get local cache instance
183
+ */
184
+ getLocalCache(): LocalCacheService | null;
185
+ /**
186
+ * Update server configuration (v3.6.0+)
187
+ * Server endpoint: PUT /api/v1/config?scope=project
188
+ */
189
+ updateConfig(settings: Record<string, any>, scope?: 'project'): Promise<ServerConfig>;
190
+ /**
191
+ * Reset server configuration to defaults (v3.9.0+)
192
+ * Server endpoint: POST /api/v1/config/reset?scope=project
193
+ */
194
+ resetConfig(scope?: 'project'): Promise<{
195
+ success: boolean;
196
+ message: string;
197
+ }>;
198
+ }
199
+ //# sourceMappingURL=ace-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ace-client.d.ts","sourceRoot":"","sources":["../../src/client/ace-client.ts"],"names":[],"mappings":"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"}