statecli-mcp-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +415 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +203 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +15 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +250 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/statecli.d.ts +26 -0
- package/dist/statecli.d.ts.map +1 -0
- package/dist/statecli.js +121 -0
- package/dist/statecli.js.map +1 -0
- package/dist/storage.d.ts +36 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +306 -0
- package/dist/storage.js.map +1 -0
- package/dist/types.d.ts +71 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +18 -0
- package/dist/types.js.map +1 -0
- package/package.json +77 -0
package/dist/storage.js
ADDED
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.StateStorage = void 0;
|
|
40
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
41
|
+
const uuid_1 = require("uuid");
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const types_1 = require("./types");
|
|
45
|
+
class StateStorage {
|
|
46
|
+
db;
|
|
47
|
+
config;
|
|
48
|
+
constructor(config = {}) {
|
|
49
|
+
this.config = { ...types_1.DEFAULT_CONFIG, ...config };
|
|
50
|
+
const dbPath = this.config.storage.path;
|
|
51
|
+
const dbDir = path.dirname(dbPath);
|
|
52
|
+
if (!fs.existsSync(dbDir)) {
|
|
53
|
+
fs.mkdirSync(dbDir, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
this.db = new better_sqlite3_1.default(dbPath);
|
|
56
|
+
this.initializeSchema();
|
|
57
|
+
}
|
|
58
|
+
initializeSchema() {
|
|
59
|
+
this.db.exec(`
|
|
60
|
+
CREATE TABLE IF NOT EXISTS state_changes (
|
|
61
|
+
id TEXT PRIMARY KEY,
|
|
62
|
+
entity TEXT NOT NULL,
|
|
63
|
+
entity_type TEXT NOT NULL,
|
|
64
|
+
entity_id TEXT NOT NULL,
|
|
65
|
+
timestamp TEXT NOT NULL,
|
|
66
|
+
before_state TEXT,
|
|
67
|
+
after_state TEXT NOT NULL,
|
|
68
|
+
actor TEXT DEFAULT 'system',
|
|
69
|
+
checkpoint_name TEXT,
|
|
70
|
+
created_at INTEGER DEFAULT (strftime('%s', 'now'))
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_entity ON state_changes(entity);
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_entity_type ON state_changes(entity_type);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_timestamp ON state_changes(timestamp);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_actor ON state_changes(actor);
|
|
77
|
+
|
|
78
|
+
CREATE TABLE IF NOT EXISTS checkpoints (
|
|
79
|
+
id TEXT PRIMARY KEY,
|
|
80
|
+
entity TEXT NOT NULL,
|
|
81
|
+
name TEXT NOT NULL,
|
|
82
|
+
timestamp TEXT NOT NULL,
|
|
83
|
+
state TEXT NOT NULL,
|
|
84
|
+
created_at INTEGER DEFAULT (strftime('%s', 'now'))
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
CREATE INDEX IF NOT EXISTS idx_checkpoint_entity ON checkpoints(entity);
|
|
88
|
+
CREATE INDEX IF NOT EXISTS idx_checkpoint_name ON checkpoints(name);
|
|
89
|
+
`);
|
|
90
|
+
}
|
|
91
|
+
track(entityType, entityId, state, actor = 'system', checkpointName) {
|
|
92
|
+
const entity = `${entityType}:${entityId}`;
|
|
93
|
+
const id = (0, uuid_1.v4)();
|
|
94
|
+
const timestamp = new Date().toISOString();
|
|
95
|
+
const lastChange = this.getLastChange(entity);
|
|
96
|
+
const before = lastChange?.after || null;
|
|
97
|
+
const stmt = this.db.prepare(`
|
|
98
|
+
INSERT INTO state_changes (id, entity, entity_type, entity_id, timestamp, before_state, after_state, actor, checkpoint_name)
|
|
99
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
100
|
+
`);
|
|
101
|
+
stmt.run(id, entity, entityType, entityId, timestamp, before ? JSON.stringify(before) : null, JSON.stringify(state), actor, checkpointName || null);
|
|
102
|
+
this.enforceRetention(entity);
|
|
103
|
+
return {
|
|
104
|
+
id,
|
|
105
|
+
entity,
|
|
106
|
+
entityType,
|
|
107
|
+
entityId,
|
|
108
|
+
timestamp,
|
|
109
|
+
before,
|
|
110
|
+
after: state,
|
|
111
|
+
actor,
|
|
112
|
+
checkpointName
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
getLastChange(entity) {
|
|
116
|
+
const stmt = this.db.prepare(`
|
|
117
|
+
SELECT * FROM state_changes
|
|
118
|
+
WHERE entity = ?
|
|
119
|
+
ORDER BY timestamp DESC
|
|
120
|
+
LIMIT 1
|
|
121
|
+
`);
|
|
122
|
+
const row = stmt.get(entity);
|
|
123
|
+
if (!row)
|
|
124
|
+
return null;
|
|
125
|
+
return this.rowToStateChange(row);
|
|
126
|
+
}
|
|
127
|
+
rowToStateChange(row) {
|
|
128
|
+
return {
|
|
129
|
+
id: row.id,
|
|
130
|
+
entity: row.entity,
|
|
131
|
+
entityType: row.entity_type,
|
|
132
|
+
entityId: row.entity_id,
|
|
133
|
+
timestamp: row.timestamp,
|
|
134
|
+
before: row.before_state ? JSON.parse(row.before_state) : null,
|
|
135
|
+
after: JSON.parse(row.after_state),
|
|
136
|
+
actor: row.actor,
|
|
137
|
+
checkpointName: row.checkpoint_name || undefined
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
getChanges(entity, options = {}) {
|
|
141
|
+
let query = 'SELECT * FROM state_changes WHERE entity = ?';
|
|
142
|
+
const params = [entity];
|
|
143
|
+
if (options.actor) {
|
|
144
|
+
query += ' AND actor = ?';
|
|
145
|
+
params.push(options.actor);
|
|
146
|
+
}
|
|
147
|
+
if (options.since) {
|
|
148
|
+
const sinceDate = this.parseSince(options.since);
|
|
149
|
+
query += ' AND timestamp >= ?';
|
|
150
|
+
params.push(sinceDate.toISOString());
|
|
151
|
+
}
|
|
152
|
+
query += ' ORDER BY timestamp ASC';
|
|
153
|
+
if (options.limit) {
|
|
154
|
+
query += ' LIMIT ?';
|
|
155
|
+
params.push(options.limit);
|
|
156
|
+
}
|
|
157
|
+
const stmt = this.db.prepare(query);
|
|
158
|
+
const rows = stmt.all(...params);
|
|
159
|
+
return rows.map(row => this.rowToStateChange(row));
|
|
160
|
+
}
|
|
161
|
+
getChangesByPattern(pattern, options = {}) {
|
|
162
|
+
const sqlPattern = pattern.replace(/\*/g, '%');
|
|
163
|
+
let query = 'SELECT * FROM state_changes WHERE entity LIKE ?';
|
|
164
|
+
const params = [sqlPattern];
|
|
165
|
+
if (options.actor) {
|
|
166
|
+
query += ' AND actor = ?';
|
|
167
|
+
params.push(options.actor);
|
|
168
|
+
}
|
|
169
|
+
if (options.since) {
|
|
170
|
+
const sinceDate = this.parseSince(options.since);
|
|
171
|
+
query += ' AND timestamp >= ?';
|
|
172
|
+
params.push(sinceDate.toISOString());
|
|
173
|
+
}
|
|
174
|
+
query += ' ORDER BY timestamp ASC';
|
|
175
|
+
if (options.limit) {
|
|
176
|
+
query += ' LIMIT ?';
|
|
177
|
+
params.push(options.limit);
|
|
178
|
+
}
|
|
179
|
+
const stmt = this.db.prepare(query);
|
|
180
|
+
const rows = stmt.all(...params);
|
|
181
|
+
return rows.map(row => this.rowToStateChange(row));
|
|
182
|
+
}
|
|
183
|
+
parseSince(since) {
|
|
184
|
+
const now = new Date();
|
|
185
|
+
const match = since.match(/^(\d+)\s*(h|hour|hours|d|day|days|m|min|minutes?|s|sec|seconds?)\s*ago$/i);
|
|
186
|
+
if (match) {
|
|
187
|
+
const value = parseInt(match[1], 10);
|
|
188
|
+
const unit = match[2].toLowerCase();
|
|
189
|
+
if (unit.startsWith('h')) {
|
|
190
|
+
now.setHours(now.getHours() - value);
|
|
191
|
+
}
|
|
192
|
+
else if (unit.startsWith('d')) {
|
|
193
|
+
now.setDate(now.getDate() - value);
|
|
194
|
+
}
|
|
195
|
+
else if (unit.startsWith('m')) {
|
|
196
|
+
now.setMinutes(now.getMinutes() - value);
|
|
197
|
+
}
|
|
198
|
+
else if (unit.startsWith('s')) {
|
|
199
|
+
now.setSeconds(now.getSeconds() - value);
|
|
200
|
+
}
|
|
201
|
+
return now;
|
|
202
|
+
}
|
|
203
|
+
return new Date(since);
|
|
204
|
+
}
|
|
205
|
+
undo(entity, steps = 1) {
|
|
206
|
+
const changes = this.getChanges(entity);
|
|
207
|
+
if (changes.length === 0) {
|
|
208
|
+
return { undone: [], restoredState: null };
|
|
209
|
+
}
|
|
210
|
+
const toUndo = changes.slice(-steps);
|
|
211
|
+
const ids = toUndo.map(c => c.id);
|
|
212
|
+
const deleteStmt = this.db.prepare(`
|
|
213
|
+
DELETE FROM state_changes WHERE id IN (${ids.map(() => '?').join(',')})
|
|
214
|
+
`);
|
|
215
|
+
deleteStmt.run(...ids);
|
|
216
|
+
const lastRemaining = this.getLastChange(entity);
|
|
217
|
+
const restoredState = lastRemaining?.after || null;
|
|
218
|
+
return { undone: toUndo, restoredState };
|
|
219
|
+
}
|
|
220
|
+
createCheckpoint(entity, name) {
|
|
221
|
+
const id = (0, uuid_1.v4)();
|
|
222
|
+
const timestamp = new Date().toISOString();
|
|
223
|
+
const lastChange = this.getLastChange(entity);
|
|
224
|
+
const state = lastChange?.after || {};
|
|
225
|
+
const stmt = this.db.prepare(`
|
|
226
|
+
INSERT INTO checkpoints (id, entity, name, timestamp, state)
|
|
227
|
+
VALUES (?, ?, ?, ?, ?)
|
|
228
|
+
`);
|
|
229
|
+
stmt.run(id, entity, name, timestamp, JSON.stringify(state));
|
|
230
|
+
return { id, entity, name, timestamp, state };
|
|
231
|
+
}
|
|
232
|
+
getCheckpoint(entity, name) {
|
|
233
|
+
const stmt = this.db.prepare(`
|
|
234
|
+
SELECT * FROM checkpoints
|
|
235
|
+
WHERE entity = ? AND name = ?
|
|
236
|
+
ORDER BY timestamp DESC
|
|
237
|
+
LIMIT 1
|
|
238
|
+
`);
|
|
239
|
+
const row = stmt.get(entity, name);
|
|
240
|
+
if (!row)
|
|
241
|
+
return null;
|
|
242
|
+
return {
|
|
243
|
+
id: row.id,
|
|
244
|
+
entity: row.entity,
|
|
245
|
+
name: row.name,
|
|
246
|
+
timestamp: row.timestamp,
|
|
247
|
+
state: JSON.parse(row.state)
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
restoreCheckpoint(entity, name) {
|
|
251
|
+
const checkpoint = this.getCheckpoint(entity, name);
|
|
252
|
+
if (!checkpoint) {
|
|
253
|
+
return { restored: false, checkpoint: null };
|
|
254
|
+
}
|
|
255
|
+
const deleteStmt = this.db.prepare(`
|
|
256
|
+
DELETE FROM state_changes
|
|
257
|
+
WHERE entity = ? AND timestamp > ?
|
|
258
|
+
`);
|
|
259
|
+
deleteStmt.run(entity, checkpoint.timestamp);
|
|
260
|
+
return { restored: true, checkpoint };
|
|
261
|
+
}
|
|
262
|
+
listEntities() {
|
|
263
|
+
const stmt = this.db.prepare(`
|
|
264
|
+
SELECT DISTINCT entity FROM state_changes ORDER BY entity
|
|
265
|
+
`);
|
|
266
|
+
const rows = stmt.all();
|
|
267
|
+
return rows.map(row => row.entity);
|
|
268
|
+
}
|
|
269
|
+
enforceRetention(entity) {
|
|
270
|
+
const maxChanges = this.config.retention.maxChangesPerEntity;
|
|
271
|
+
const countStmt = this.db.prepare(`
|
|
272
|
+
SELECT COUNT(*) as count FROM state_changes WHERE entity = ?
|
|
273
|
+
`);
|
|
274
|
+
const { count } = countStmt.get(entity);
|
|
275
|
+
if (count > maxChanges) {
|
|
276
|
+
const deleteCount = count - maxChanges;
|
|
277
|
+
const deleteStmt = this.db.prepare(`
|
|
278
|
+
DELETE FROM state_changes
|
|
279
|
+
WHERE id IN (
|
|
280
|
+
SELECT id FROM state_changes
|
|
281
|
+
WHERE entity = ?
|
|
282
|
+
ORDER BY timestamp ASC
|
|
283
|
+
LIMIT ?
|
|
284
|
+
)
|
|
285
|
+
`);
|
|
286
|
+
deleteStmt.run(entity, deleteCount);
|
|
287
|
+
}
|
|
288
|
+
const retentionDays = this.config.retention.days;
|
|
289
|
+
const cutoffDate = new Date();
|
|
290
|
+
cutoffDate.setDate(cutoffDate.getDate() - retentionDays);
|
|
291
|
+
const cleanupStmt = this.db.prepare(`
|
|
292
|
+
DELETE FROM state_changes
|
|
293
|
+
WHERE timestamp < ?
|
|
294
|
+
`);
|
|
295
|
+
cleanupStmt.run(cutoffDate.toISOString());
|
|
296
|
+
}
|
|
297
|
+
getCurrentState(entity) {
|
|
298
|
+
const lastChange = this.getLastChange(entity);
|
|
299
|
+
return lastChange?.after || null;
|
|
300
|
+
}
|
|
301
|
+
close() {
|
|
302
|
+
this.db.close();
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
exports.StateStorage = StateStorage;
|
|
306
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oEAAsC;AACtC,+BAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAC7B,mCAKiB;AAEjB,MAAa,YAAY;IACf,EAAE,CAAoB;IACtB,MAAM,CAAiB;IAE/B,YAAY,SAAkC,EAAE;QAC9C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,sBAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAE/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA8BZ,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CACH,UAAkB,EAClB,QAAgB,EAChB,KAA8B,EAC9B,QAAgB,QAAQ,EACxB,cAAuB;QAEvB,MAAM,MAAM,GAAG,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC;QAC3C,MAAM,EAAE,GAAG,IAAA,SAAM,GAAE,CAAC;QACpB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,UAAU,EAAE,KAAK,IAAI,IAAI,CAAC;QAEzC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CACN,EAAE,EACF,MAAM,EACN,UAAU,EACV,QAAQ,EACR,SAAS,EACT,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EACtC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EACrB,KAAK,EACL,cAAc,IAAI,IAAI,CACvB,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAE9B,OAAO;YACL,EAAE;YACF,MAAM;YACN,UAAU;YACV,QAAQ;YACR,SAAS;YACT,MAAM;YACN,KAAK,EAAE,KAAK;YACZ,KAAK;YACL,cAAc;SACf,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,MAAc;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAK5B,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAQ,CAAC;QACpC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAEO,gBAAgB,CAAC,GAAQ;QAC/B,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,UAAU,EAAE,GAAG,CAAC,WAAW;YAC3B,QAAQ,EAAE,GAAG,CAAC,SAAS;YACvB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;YAC9D,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;YAClC,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,cAAc,EAAE,GAAG,CAAC,eAAe,IAAI,SAAS;SACjD,CAAC;IACJ,CAAC;IAED,UAAU,CACR,MAAc,EACd,UAII,EAAE;QAEN,IAAI,KAAK,GAAG,8CAA8C,CAAC;QAC3D,MAAM,MAAM,GAAU,CAAC,MAAM,CAAC,CAAC;QAE/B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,IAAI,gBAAgB,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjD,KAAK,IAAI,qBAAqB,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,IAAI,yBAAyB,CAAC;QAEnC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,IAAI,UAAU,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAU,CAAC;QAE1C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,mBAAmB,CACjB,OAAe,EACf,UAII,EAAE;QAEN,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE/C,IAAI,KAAK,GAAG,iDAAiD,CAAC;QAC9D,MAAM,MAAM,GAAU,CAAC,UAAU,CAAC,CAAC;QAEnC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,IAAI,gBAAgB,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjD,KAAK,IAAI,qBAAqB,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,IAAI,yBAAyB,CAAC;QAEnC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,IAAI,UAAU,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAU,CAAC;QAE1C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAEO,UAAU,CAAC,KAAa;QAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAEtG,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAEpC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC;YACvC,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC;YAC3C,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC;YAC3C,CAAC;YAED,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,QAAgB,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAC7C,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAElC,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;+CACQ,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KACtE,CAAC,CAAC;QACH,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAEvB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,aAAa,GAAG,aAAa,EAAE,KAAK,IAAI,IAAI,CAAC;QAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC3C,CAAC;IAED,gBAAgB,CAAC,MAAc,EAAE,IAAY;QAC3C,MAAM,EAAE,GAAG,IAAA,SAAM,GAAE,CAAC;QACpB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC;QAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAE7D,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAChD,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,IAAY;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAK5B,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAQ,CAAC;QAC1C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;SAC7B,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,MAAc,EAAE,IAAY;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC/C,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGlC,CAAC,CAAC;QACH,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAE7C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE5B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAW,CAAC;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAEO,gBAAgB,CAAC,MAAc;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC;QAE7D,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAEjC,CAAC,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAQ,CAAC;QAE/C,IAAI,KAAK,GAAG,UAAU,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC;YACvC,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;OAQlC,CAAC,CAAC;YACH,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC;QAEzD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGnC,CAAC,CAAC;QACH,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,UAAU,EAAE,KAAK,IAAI,IAAI,CAAC;IACnC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF;AAzVD,oCAyVC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export interface StateChange {
|
|
2
|
+
id: string;
|
|
3
|
+
entity: string;
|
|
4
|
+
entityType: string;
|
|
5
|
+
entityId: string;
|
|
6
|
+
timestamp: string;
|
|
7
|
+
before: Record<string, unknown> | null;
|
|
8
|
+
after: Record<string, unknown>;
|
|
9
|
+
actor: string;
|
|
10
|
+
checkpointName?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface Checkpoint {
|
|
13
|
+
id: string;
|
|
14
|
+
entity: string;
|
|
15
|
+
name: string;
|
|
16
|
+
timestamp: string;
|
|
17
|
+
state: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
export interface ReplayResult {
|
|
20
|
+
entity: string;
|
|
21
|
+
changes: Array<{
|
|
22
|
+
timestamp: string;
|
|
23
|
+
step: number;
|
|
24
|
+
before: Record<string, unknown> | null;
|
|
25
|
+
after: Record<string, unknown>;
|
|
26
|
+
actor: string;
|
|
27
|
+
checkpointName?: string;
|
|
28
|
+
}>;
|
|
29
|
+
summary: string;
|
|
30
|
+
suggestedNextActions: string[];
|
|
31
|
+
}
|
|
32
|
+
export interface UndoResult {
|
|
33
|
+
entity: string;
|
|
34
|
+
stepsUndone: number;
|
|
35
|
+
restoredState: Record<string, unknown> | null;
|
|
36
|
+
summary: string;
|
|
37
|
+
}
|
|
38
|
+
export interface CheckpointResult {
|
|
39
|
+
id: string;
|
|
40
|
+
entity: string;
|
|
41
|
+
name: string;
|
|
42
|
+
timestamp: string;
|
|
43
|
+
summary: string;
|
|
44
|
+
}
|
|
45
|
+
export interface LogResult {
|
|
46
|
+
entity: string;
|
|
47
|
+
changes: StateChange[];
|
|
48
|
+
summary: string;
|
|
49
|
+
}
|
|
50
|
+
export interface TrackResult {
|
|
51
|
+
id: string;
|
|
52
|
+
entity: string;
|
|
53
|
+
timestamp: string;
|
|
54
|
+
summary: string;
|
|
55
|
+
}
|
|
56
|
+
export interface StateCLIConfig {
|
|
57
|
+
storage: {
|
|
58
|
+
type: 'local';
|
|
59
|
+
path: string;
|
|
60
|
+
};
|
|
61
|
+
autoTrack: {
|
|
62
|
+
enabled: boolean;
|
|
63
|
+
patterns: string[];
|
|
64
|
+
};
|
|
65
|
+
retention: {
|
|
66
|
+
days: number;
|
|
67
|
+
maxChangesPerEntity: number;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export declare const DEFAULT_CONFIG: StateCLIConfig;
|
|
71
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE;QACP,IAAI,EAAE,OAAO,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,eAAO,MAAM,cAAc,EAAE,cAa5B,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_CONFIG = void 0;
|
|
4
|
+
exports.DEFAULT_CONFIG = {
|
|
5
|
+
storage: {
|
|
6
|
+
type: 'local',
|
|
7
|
+
path: '.statecli/state.db'
|
|
8
|
+
},
|
|
9
|
+
autoTrack: {
|
|
10
|
+
enabled: true,
|
|
11
|
+
patterns: ['*']
|
|
12
|
+
},
|
|
13
|
+
retention: {
|
|
14
|
+
days: 30,
|
|
15
|
+
maxChangesPerEntity: 1000
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA6Ea,QAAA,cAAc,GAAmB;IAC5C,OAAO,EAAE;QACP,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,oBAAoB;KAC3B;IACD,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,CAAC,GAAG,CAAC;KAChB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,EAAE;QACR,mBAAmB,EAAE,IAAI;KAC1B;CACF,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "statecli-mcp-server",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP Server for State Replay & Self-Debugging - Memory, replay, and undo capability for AI agents",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"statecli": "./dist/cli.js",
|
|
8
|
+
"statecli-mcp-server": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"start": "node dist/index.js",
|
|
14
|
+
"dev": "ts-node src/index.ts",
|
|
15
|
+
"cli": "ts-node src/cli.ts",
|
|
16
|
+
"test": "jest",
|
|
17
|
+
"test:watch": "jest --watch",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"state-management",
|
|
22
|
+
"state-replay",
|
|
23
|
+
"time-travel-debugging",
|
|
24
|
+
"undo",
|
|
25
|
+
"rollback",
|
|
26
|
+
"checkpoint",
|
|
27
|
+
"agent-memory",
|
|
28
|
+
"agent-introspection",
|
|
29
|
+
"self-debugging",
|
|
30
|
+
"ai-agent-tools",
|
|
31
|
+
"mcp-server",
|
|
32
|
+
"model-context-protocol",
|
|
33
|
+
"autonomous-agents",
|
|
34
|
+
"agent-observability",
|
|
35
|
+
"state-tracking",
|
|
36
|
+
"langchain-tools",
|
|
37
|
+
"autogpt-plugins",
|
|
38
|
+
"crewai-tools"
|
|
39
|
+
],
|
|
40
|
+
"author": "",
|
|
41
|
+
"license": "MIT",
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
44
|
+
"better-sqlite3": "^11.0.0",
|
|
45
|
+
"commander": "^12.0.0",
|
|
46
|
+
"uuid": "^9.0.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/better-sqlite3": "^7.6.8",
|
|
50
|
+
"@types/jest": "^29.5.12",
|
|
51
|
+
"@types/node": "^20.11.0",
|
|
52
|
+
"@types/uuid": "^9.0.7",
|
|
53
|
+
"jest": "^29.7.0",
|
|
54
|
+
"ts-jest": "^29.1.2",
|
|
55
|
+
"ts-node": "^10.9.2",
|
|
56
|
+
"typescript": "^5.3.3"
|
|
57
|
+
},
|
|
58
|
+
"engines": {
|
|
59
|
+
"node": ">=18.0.0"
|
|
60
|
+
},
|
|
61
|
+
"files": [
|
|
62
|
+
"dist/**/*",
|
|
63
|
+
"README.md",
|
|
64
|
+
"LICENSE"
|
|
65
|
+
],
|
|
66
|
+
"repository": {
|
|
67
|
+
"type": "git",
|
|
68
|
+
"url": "git+https://github.com/statecli/mcp-server.git"
|
|
69
|
+
},
|
|
70
|
+
"bugs": {
|
|
71
|
+
"url": "https://github.com/statecli/mcp-server/issues"
|
|
72
|
+
},
|
|
73
|
+
"homepage": "https://github.com/statecli/mcp-server#readme",
|
|
74
|
+
"publishConfig": {
|
|
75
|
+
"access": "public"
|
|
76
|
+
}
|
|
77
|
+
}
|