@mcoda/db 0.1.26 → 0.1.28

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.
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalMigrations.d.ts","sourceRoot":"","sources":["../../../src/migrations/global/GlobalMigrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC;;;GAGG;AACH,qBAAa,gBAAgB;WACd,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAoe9C"}
1
+ {"version":3,"file":"GlobalMigrations.d.ts","sourceRoot":"","sources":["../../../src/migrations/global/GlobalMigrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC;;;GAGG;AACH,qBAAa,gBAAgB;WACd,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CA4gB9C"}
@@ -71,6 +71,22 @@ export class GlobalMigrations {
71
71
  PRIMARY KEY (agent_id, model_name)
72
72
  );
73
73
 
74
+ CREATE TABLE IF NOT EXISTS agent_usage_limits (
75
+ id TEXT PRIMARY KEY,
76
+ agent_id TEXT NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
77
+ limit_scope TEXT NOT NULL,
78
+ limit_key TEXT NOT NULL,
79
+ window_type TEXT NOT NULL,
80
+ status TEXT NOT NULL,
81
+ reset_at TEXT,
82
+ observed_at TEXT NOT NULL,
83
+ source TEXT,
84
+ details_json TEXT,
85
+ created_at TEXT NOT NULL,
86
+ updated_at TEXT NOT NULL,
87
+ UNIQUE(agent_id, limit_scope, limit_key, window_type)
88
+ );
89
+
74
90
  CREATE TABLE IF NOT EXISTS workspace_defaults (
75
91
  workspace_id TEXT NOT NULL,
76
92
  command_name TEXT NOT NULL,
@@ -140,9 +156,31 @@ export class GlobalMigrations {
140
156
  raw_review_json TEXT,
141
157
  created_at TEXT NOT NULL
142
158
  );
159
+
160
+ CREATE INDEX IF NOT EXISTS idx_agent_usage_limits_agent_id
161
+ ON agent_usage_limits(agent_id);
143
162
  `);
144
163
  };
145
164
  await createSchema();
165
+ await db.exec(`
166
+ CREATE TABLE IF NOT EXISTS agent_usage_limits (
167
+ id TEXT PRIMARY KEY,
168
+ agent_id TEXT NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
169
+ limit_scope TEXT NOT NULL,
170
+ limit_key TEXT NOT NULL,
171
+ window_type TEXT NOT NULL,
172
+ status TEXT NOT NULL,
173
+ reset_at TEXT,
174
+ observed_at TEXT NOT NULL,
175
+ source TEXT,
176
+ details_json TEXT,
177
+ created_at TEXT NOT NULL,
178
+ updated_at TEXT NOT NULL,
179
+ UNIQUE(agent_id, limit_scope, limit_key, window_type)
180
+ );
181
+ CREATE INDEX IF NOT EXISTS idx_agent_usage_limits_agent_id
182
+ ON agent_usage_limits(agent_id);
183
+ `);
146
184
  let agentsInfo = await db.all("PRAGMA table_info(agents)");
147
185
  const hasAgentId = agentsInfo.some((col) => col.name === "id");
148
186
  const hasAgentSlug = agentsInfo.some((col) => col.name === "slug");
@@ -154,6 +192,7 @@ export class GlobalMigrations {
154
192
  DROP TABLE IF EXISTS agent_prompts;
155
193
  DROP TABLE IF EXISTS agent_health;
156
194
  DROP TABLE IF EXISTS agent_models;
195
+ DROP TABLE IF EXISTS agent_usage_limits;
157
196
  DROP TABLE IF EXISTS workspace_defaults;
158
197
  DROP TABLE IF EXISTS command_runs;
159
198
  DROP TABLE IF EXISTS token_usage;
@@ -1,5 +1,5 @@
1
1
  import { Database } from "sqlite";
2
- import { Agent, AgentAuthMetadata, AgentAuthSecret, AgentHealth, AgentModel, AgentPromptManifest, CreateAgentInput, UpdateAgentInput, WorkspaceDefault } from "@mcoda/shared";
2
+ import { Agent, AgentAuthMetadata, AgentAuthSecret, AgentHealth, AgentUsageLimitRecord, AgentModel, AgentPromptManifest, CreateAgentInput, UpsertAgentUsageLimitInput, UpdateAgentInput, WorkspaceDefault } from "@mcoda/shared";
3
3
  import { Connection } from "../../sqlite/connection.js";
4
4
  export type GlobalCommandStatus = "running" | "succeeded" | "failed";
5
5
  export interface GlobalCommandRunInsert {
@@ -84,6 +84,9 @@ export declare class GlobalRepository {
84
84
  setAgentHealth(health: AgentHealth): Promise<void>;
85
85
  getAgentHealth(agentId: string): Promise<AgentHealth | undefined>;
86
86
  listAgentHealthSummary(): Promise<AgentHealth[]>;
87
+ upsertAgentUsageLimit(input: UpsertAgentUsageLimitInput): Promise<AgentUsageLimitRecord>;
88
+ upsertAgentUsageLimits(inputs: UpsertAgentUsageLimitInput[]): Promise<AgentUsageLimitRecord[]>;
89
+ listAgentUsageLimits(agentId?: string): Promise<AgentUsageLimitRecord[]>;
87
90
  setWorkspaceDefault(workspaceId: string, commandName: string, agentId: string, options?: {
88
91
  qaProfile?: string;
89
92
  docdexScope?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/global/GlobalRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GlobalRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/global/GlobalRepository.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,20 @@ const mapAgentRow = (row) => ({
25
25
  createdAt: row.created_at,
26
26
  updatedAt: row.updated_at,
27
27
  });
28
+ const mapAgentUsageLimitRow = (row) => ({
29
+ id: row.id,
30
+ agentId: row.agent_id,
31
+ limitScope: row.limit_scope,
32
+ limitKey: row.limit_key,
33
+ windowType: row.window_type,
34
+ status: row.status,
35
+ resetAt: row.reset_at ?? undefined,
36
+ observedAt: row.observed_at,
37
+ source: row.source ?? undefined,
38
+ details: row.details_json ? JSON.parse(row.details_json) : undefined,
39
+ createdAt: row.created_at,
40
+ updatedAt: row.updated_at,
41
+ });
28
42
  export class GlobalRepository {
29
43
  constructor(db, connection) {
30
44
  this.db = db;
@@ -272,6 +286,55 @@ export class GlobalRepository {
272
286
  details: row.details_json ? JSON.parse(row.details_json) : undefined,
273
287
  }));
274
288
  }
289
+ async upsertAgentUsageLimit(input) {
290
+ const now = new Date().toISOString();
291
+ await this.db.run(`INSERT INTO agent_usage_limits (
292
+ id,
293
+ agent_id,
294
+ limit_scope,
295
+ limit_key,
296
+ window_type,
297
+ status,
298
+ reset_at,
299
+ observed_at,
300
+ source,
301
+ details_json,
302
+ created_at,
303
+ updated_at
304
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
305
+ ON CONFLICT(agent_id, limit_scope, limit_key, window_type) DO UPDATE SET
306
+ status = excluded.status,
307
+ reset_at = excluded.reset_at,
308
+ observed_at = excluded.observed_at,
309
+ source = excluded.source,
310
+ details_json = excluded.details_json,
311
+ updated_at = excluded.updated_at`, randomUUID(), input.agentId, input.limitScope, input.limitKey, input.windowType, input.status, input.resetAt ?? null, input.observedAt, input.source ?? null, input.details ? JSON.stringify(input.details) : null, now, now);
312
+ const row = await this.db.get(`SELECT id, agent_id, limit_scope, limit_key, window_type, status, reset_at, observed_at, source, details_json, created_at, updated_at
313
+ FROM agent_usage_limits
314
+ WHERE agent_id = ? AND limit_scope = ? AND limit_key = ? AND window_type = ?`, input.agentId, input.limitScope, input.limitKey, input.windowType);
315
+ if (!row) {
316
+ throw new Error("Failed to upsert agent usage limit record");
317
+ }
318
+ return mapAgentUsageLimitRow(row);
319
+ }
320
+ async upsertAgentUsageLimits(inputs) {
321
+ const records = [];
322
+ for (const input of inputs) {
323
+ records.push(await this.upsertAgentUsageLimit(input));
324
+ }
325
+ return records;
326
+ }
327
+ async listAgentUsageLimits(agentId) {
328
+ const rows = agentId
329
+ ? await this.db.all(`SELECT id, agent_id, limit_scope, limit_key, window_type, status, reset_at, observed_at, source, details_json, created_at, updated_at
330
+ FROM agent_usage_limits
331
+ WHERE agent_id = ?
332
+ ORDER BY datetime(observed_at) DESC`, agentId)
333
+ : await this.db.all(`SELECT id, agent_id, limit_scope, limit_key, window_type, status, reset_at, observed_at, source, details_json, created_at, updated_at
334
+ FROM agent_usage_limits
335
+ ORDER BY datetime(observed_at) DESC`);
336
+ return rows.map(mapAgentUsageLimitRow);
337
+ }
275
338
  async setWorkspaceDefault(workspaceId, commandName, agentId, options = {}) {
276
339
  const now = new Date().toISOString();
277
340
  await this.db.run(`INSERT INTO workspace_defaults (workspace_id, command_name, agent_id, qa_profile, docdex_scope, updated_at)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcoda/db",
3
- "version": "0.1.26",
3
+ "version": "0.1.28",
4
4
  "description": "SQLite-backed storage layer for mcoda.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -32,7 +32,7 @@
32
32
  "dependencies": {
33
33
  "sqlite": "^5.1.1",
34
34
  "sqlite3": "^5.1.7",
35
- "@mcoda/shared": "0.1.26"
35
+ "@mcoda/shared": "0.1.28"
36
36
  },
37
37
  "scripts": {
38
38
  "build": "tsc -p tsconfig.json",