@keystrokehq/keystroke 0.0.162 → 0.0.164

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 (51) hide show
  1. package/dist/action.cjs +1 -1
  2. package/dist/action.mjs +1 -1
  3. package/dist/agent.cjs +19 -36
  4. package/dist/agent.cjs.map +1 -1
  5. package/dist/agent.d.cts +1 -1
  6. package/dist/agent.d.mts +1 -1
  7. package/dist/agent.mjs +19 -36
  8. package/dist/agent.mjs.map +1 -1
  9. package/dist/config.d.cts +2 -1
  10. package/dist/config.d.cts.map +1 -1
  11. package/dist/config.d.mts +2 -1
  12. package/dist/config.d.mts.map +1 -1
  13. package/dist/credentials.cjs +1 -1
  14. package/dist/credentials.mjs +1 -1
  15. package/dist/{dist-mblcM3Bv.cjs → dist-BNB2mfIe.cjs} +3 -3
  16. package/dist/{dist-mblcM3Bv.cjs.map → dist-BNB2mfIe.cjs.map} +1 -1
  17. package/dist/{dist-BIbZjRd7.mjs → dist-B_b7urZi.mjs} +1 -2
  18. package/dist/dist-B_b7urZi.mjs.map +1 -0
  19. package/dist/{dist-DXzvN8aq.mjs → dist-BjWzektn.mjs} +20 -160
  20. package/dist/{dist-DXzvN8aq.mjs.map → dist-BjWzektn.mjs.map} +1 -1
  21. package/dist/{dist-lWDTuftA.cjs → dist-DK1mbPAf.cjs} +1 -2
  22. package/dist/dist-DK1mbPAf.cjs.map +1 -0
  23. package/dist/{dist-CQH7Ircq.mjs → dist-DpsVuMhU.mjs} +3 -3
  24. package/dist/{dist-CQH7Ircq.mjs.map → dist-DpsVuMhU.mjs.map} +1 -1
  25. package/dist/{dist-DiqTL3ZF.cjs → dist-DqmPOnX5.cjs} +25 -177
  26. package/dist/{dist-DiqTL3ZF.cjs.map → dist-DqmPOnX5.cjs.map} +1 -1
  27. package/dist/index-CaW3JRFU.d.cts.map +1 -1
  28. package/dist/index-CaW3JRFU.d.mts.map +1 -1
  29. package/dist/{index-IVnunyAF.d.mts → index-DMr0802v.d.mts} +3 -2
  30. package/dist/index-DMr0802v.d.mts.map +1 -0
  31. package/dist/{index-DIm3_7or.d.cts → index-DuGLQUMl.d.cts} +3 -2
  32. package/dist/index-DuGLQUMl.d.cts.map +1 -0
  33. package/dist/{mistral-DuG294d1.cjs → mistral-CV_wqkNv.cjs} +2 -2
  34. package/dist/{mistral-DuG294d1.cjs.map → mistral-CV_wqkNv.cjs.map} +1 -1
  35. package/dist/{mistral-CDuUHkpO.mjs → mistral-Cf8bwl7k.mjs} +2 -2
  36. package/dist/{mistral-CDuUHkpO.mjs.map → mistral-Cf8bwl7k.mjs.map} +1 -1
  37. package/dist/{sse-DCsg_ELF.cjs → sse-DowizN6O.cjs} +2 -2
  38. package/dist/{sse-DCsg_ELF.cjs.map → sse-DowizN6O.cjs.map} +1 -1
  39. package/dist/{sse-BBd2aLiw.mjs → sse-Duxm9CEQ.mjs} +2 -2
  40. package/dist/{sse-BBd2aLiw.mjs.map → sse-Duxm9CEQ.mjs.map} +1 -1
  41. package/dist/trigger.cjs +1 -1
  42. package/dist/trigger.d.cts +1 -1
  43. package/dist/trigger.d.mts +1 -1
  44. package/dist/trigger.mjs +1 -1
  45. package/dist/workflow.cjs +1 -1
  46. package/dist/workflow.mjs +1 -1
  47. package/package.json +1 -1
  48. package/dist/dist-BIbZjRd7.mjs.map +0 -1
  49. package/dist/dist-lWDTuftA.cjs.map +0 -1
  50. package/dist/index-DIm3_7or.d.cts.map +0 -1
  51. package/dist/index-IVnunyAF.d.mts.map +0 -1
@@ -1,5 +1,5 @@
1
1
  const require_dist$1 = require("./dist-DnGkWV6x.cjs");
2
- const require_dist$2 = require("./dist-lWDTuftA.cjs");
2
+ const require_dist$2 = require("./dist-DK1mbPAf.cjs");
3
3
  let node_async_hooks = require("node:async_hooks");
4
4
  require("node:fs");
5
5
  let zod_v3 = require("zod/v3");
@@ -13258,7 +13258,7 @@ async function connectMcpServer(name, options) {
13258
13258
  }
13259
13259
  async function createTransport(url, transport, requestInit, fetchImpl) {
13260
13260
  if (transport === "sse") {
13261
- const { SSEClientTransport } = await Promise.resolve().then(() => require("./sse-DCsg_ELF.cjs"));
13261
+ const { SSEClientTransport } = await Promise.resolve().then(() => require("./sse-DowizN6O.cjs"));
13262
13262
  return new SSEClientTransport(url, {
13263
13263
  requestInit,
13264
13264
  fetch: fetchImpl
@@ -16454,6 +16454,7 @@ const agentSessions = pgTable("agent_sessions", {
16454
16454
  parentSpanId: text$1("parent_span_id"),
16455
16455
  ranByUserId: text$1("ran_by_user_id"),
16456
16456
  canceledAt: timestamp("canceled_at", { withTimezone: true }),
16457
+ totalDurationMs: integer$1("total_duration_ms").notNull().default(0),
16457
16458
  createdAt: timestamp("created_at", { withTimezone: true }).notNull(),
16458
16459
  updatedAt: timestamp("updated_at", { withTimezone: true }).notNull(),
16459
16460
  deletedAt: timestamp("deleted_at", { withTimezone: true })
@@ -16467,62 +16468,14 @@ const agentSessionsSqlite = sqliteTable("agent_sessions", {
16467
16468
  parentSpanId: text("parent_span_id"),
16468
16469
  ranByUserId: text("ran_by_user_id"),
16469
16470
  canceledAt: integer("canceled_at", { mode: "timestamp_ms" }),
16471
+ totalDurationMs: integer("total_duration_ms").notNull().default(0),
16470
16472
  createdAt: integer("created_at", { mode: "timestamp_ms" }).notNull(),
16471
16473
  updatedAt: integer("updated_at", { mode: "timestamp_ms" }).notNull(),
16472
16474
  deletedAt: integer("deleted_at", { mode: "timestamp_ms" })
16473
16475
  }, (table) => [index("agent_sessions_agent_updated_idx").on(table.agentId, table.updatedAt)]);
16474
- const agentRuns = pgTable("agent_runs", {
16475
- id: text$1("id").primaryKey(),
16476
- sessionId: text$1("session_id").notNull().references(() => agentSessions.id),
16477
- projectId: text$1("project_id").notNull(),
16478
- agentId: text$1("agent_id").notNull().references(() => agents.id),
16479
- runIndex: integer$1("run_index").notNull(),
16480
- sourceKind: text$1("source_kind").$type().notNull().default("api"),
16481
- sourceId: text$1("source_id"),
16482
- ranByUserId: text$1("ran_by_user_id"),
16483
- status: text$1("status").$type().notNull(),
16484
- error: jsonb("error"),
16485
- startedAt: timestamp("started_at", { withTimezone: true }).notNull(),
16486
- finishedAt: timestamp("finished_at", { withTimezone: true }),
16487
- totalCostUsd: doublePrecision("total_cost_usd"),
16488
- totalTokens: integer$1("total_tokens"),
16489
- modelsUsed: jsonb("models_used").$type(),
16490
- createdAt: timestamp("created_at", { withTimezone: true }).notNull(),
16491
- updatedAt: timestamp("updated_at", { withTimezone: true }).notNull(),
16492
- deletedAt: timestamp("deleted_at", { withTimezone: true })
16493
- }, (table) => [
16494
- index$1("agent_runs_session_run_index_idx").on(table.sessionId, table.runIndex),
16495
- index$1("agent_runs_agent_started_idx").on(table.agentId, table.startedAt),
16496
- index$1("agent_runs_project_started_idx").on(table.projectId, table.startedAt)
16497
- ]);
16498
- const agentRunsSqlite = sqliteTable("agent_runs", {
16499
- id: text("id").primaryKey(),
16500
- sessionId: text("session_id").notNull().references(() => agentSessionsSqlite.id),
16501
- projectId: text("project_id").notNull(),
16502
- agentId: text("agent_id").notNull().references(() => agentsSqlite.id),
16503
- runIndex: integer("run_index").notNull(),
16504
- sourceKind: text("source_kind").$type().notNull().default("api"),
16505
- sourceId: text("source_id"),
16506
- ranByUserId: text("ran_by_user_id"),
16507
- status: text("status").$type().notNull(),
16508
- error: text("error", { mode: "json" }),
16509
- startedAt: integer("started_at", { mode: "timestamp_ms" }).notNull(),
16510
- finishedAt: integer("finished_at", { mode: "timestamp_ms" }),
16511
- totalCostUsd: real("total_cost_usd"),
16512
- totalTokens: integer("total_tokens"),
16513
- modelsUsed: text("models_used", { mode: "json" }).$type(),
16514
- createdAt: integer("created_at", { mode: "timestamp_ms" }).notNull(),
16515
- updatedAt: integer("updated_at", { mode: "timestamp_ms" }).notNull(),
16516
- deletedAt: integer("deleted_at", { mode: "timestamp_ms" })
16517
- }, (table) => [
16518
- index("agent_runs_session_run_index_idx").on(table.sessionId, table.runIndex),
16519
- index("agent_runs_agent_started_idx").on(table.agentId, table.startedAt),
16520
- index("agent_runs_project_started_idx").on(table.projectId, table.startedAt)
16521
- ]);
16522
16476
  const agentEvents = pgTable("agent_events", {
16523
16477
  id: text$1("id").primaryKey(),
16524
16478
  sessionId: text$1("session_id").notNull().references(() => agentSessions.id),
16525
- runId: text$1("run_id").references(() => agentRuns.id),
16526
16479
  seq: integer$1("seq").notNull(),
16527
16480
  eventType: text$1("event_type").notNull(),
16528
16481
  payload: jsonb("payload").notNull(),
@@ -16532,7 +16485,6 @@ const agentEvents = pgTable("agent_events", {
16532
16485
  const agentEventsSqlite = sqliteTable("agent_events", {
16533
16486
  id: text("id").primaryKey(),
16534
16487
  sessionId: text("session_id").notNull().references(() => agentSessionsSqlite.id),
16535
- runId: text("run_id").references(() => agentRunsSqlite.id),
16536
16488
  seq: integer("seq").notNull(),
16537
16489
  eventType: text("event_type").notNull(),
16538
16490
  payload: text("payload", { mode: "json" }).notNull(),
@@ -17053,10 +17005,6 @@ const tableRegistry = {
17053
17005
  pg: agentEvents,
17054
17006
  sqlite: agentEventsSqlite
17055
17007
  },
17056
- agentRuns: {
17057
- pg: agentRuns,
17058
- sqlite: agentRunsSqlite
17059
- },
17060
17008
  usageRecords: {
17061
17009
  pg: usageRecords,
17062
17010
  sqlite: usageRecordsSqlite
@@ -17175,51 +17123,28 @@ async function insertAgentSession(values) {
17175
17123
  async function selectActiveAgentSession(sessionId) {
17176
17124
  return (await getDb$1().select().from(agentSessions).where(scopedAnd$1(agentSessions, eq(agentSessions.id, sessionId), isNull(agentSessions.deletedAt))).limit(1))[0];
17177
17125
  }
17178
- async function selectAgentSessionById(sessionId) {
17179
- return selectActiveAgentSession(sessionId);
17180
- }
17181
17126
  async function touchAgentSession(sessionId, updatedAt) {
17182
17127
  await getDb$1().update(agentSessions).set({ updatedAt }).where(scopedAnd$1(agentSessions, eq(agentSessions.id, sessionId), isNull(agentSessions.deletedAt)));
17183
17128
  }
17129
+ async function addAgentSessionDuration(sessionId, deltaMs) {
17130
+ if (deltaMs <= 0) return;
17131
+ await getDb$1().update(agentSessions).set({ totalDurationMs: sql`${agentSessions.totalDurationMs} + ${deltaMs}` }).where(scopedAnd$1(agentSessions, eq(agentSessions.id, sessionId), isNull(agentSessions.deletedAt)));
17132
+ }
17184
17133
  async function maxSeqForSession(sessionId) {
17185
17134
  return (await getDb$1().select({ value: max(agentEvents.seq) }).from(agentEvents).innerJoin(agentSessions, eq(agentSessions.id, agentEvents.sessionId)).where(scopedAnd$1(agentSessions, eq(agentEvents.sessionId, sessionId), isNull(agentEvents.deletedAt))))[0]?.value ?? 0;
17186
17135
  }
17187
17136
  async function insertAgentEvent(values) {
17188
- await getDb$1().insert(agentEvents).values({
17189
- ...values,
17190
- runId: values.runId ?? null
17191
- });
17137
+ await getDb$1().insert(agentEvents).values(values);
17192
17138
  }
17193
17139
  async function listMessagePayloads(sessionId, messageEventType) {
17194
- return (await getDb$1().select({ payload: agentEvents.payload }).from(agentEvents).innerJoin(agentSessions, eq(agentSessions.id, agentEvents.sessionId)).where(scopedAnd$1(agentSessions, eq(agentEvents.sessionId, sessionId), eq(agentEvents.eventType, messageEventType), isNull(agentEvents.deletedAt))).orderBy(asc(agentEvents.seq))).map((row) => row.payload);
17140
+ return (await listMessageEventsForSession(sessionId, messageEventType)).map((row) => row.payload);
17195
17141
  }
17196
- async function nextRunIndex(sessionId) {
17197
- return ((await getDb$1().select({ value: max(agentRuns.runIndex) }).from(agentRuns).where(scopedAnd$1(agentRuns, eq(agentRuns.sessionId, sessionId), isNull(agentRuns.deletedAt))))[0]?.value ?? -1) + 1;
17198
- }
17199
- async function insertAgentRun(values) {
17200
- await getDb$1().insert(agentRuns).values({
17201
- ...values,
17202
- projectId: projectScopeId(),
17203
- sourceKind: values.sourceKind ?? "api",
17204
- sourceId: values.sourceId ?? null,
17205
- ranByUserId: values.ranByUserId ?? null,
17206
- error: null,
17207
- finishedAt: null,
17208
- totalCostUsd: null,
17209
- totalTokens: null,
17210
- modelsUsed: null
17211
- });
17212
- }
17213
- async function finalizeAgentRun(runId, values) {
17214
- await getDb$1().update(agentRuns).set({
17215
- status: values.status,
17216
- finishedAt: values.finishedAt,
17217
- error: values.error ?? null,
17218
- totalCostUsd: values.totalCostUsd,
17219
- totalTokens: values.totalTokens,
17220
- modelsUsed: values.modelsUsed,
17221
- updatedAt: values.updatedAt
17222
- }).where(scopedAnd$1(agentRuns, eq(agentRuns.id, runId), isNull(agentRuns.deletedAt)));
17142
+ async function listMessageEventsForSession(sessionId, messageEventType) {
17143
+ return await getDb$1().select({
17144
+ payload: agentEvents.payload,
17145
+ createdAt: agentEvents.createdAt,
17146
+ seq: agentEvents.seq
17147
+ }).from(agentEvents).innerJoin(agentSessions, eq(agentSessions.id, agentEvents.sessionId)).where(scopedAnd$1(agentSessions, eq(agentEvents.sessionId, sessionId), eq(agentEvents.eventType, messageEventType), isNull(agentEvents.deletedAt))).orderBy(asc(agentEvents.seq));
17223
17148
  }
17224
17149
  async function insertUsageRecord(values) {
17225
17150
  await getDb$1().insert(usageRecords).values({
@@ -17229,24 +17154,6 @@ async function insertUsageRecord(values) {
17229
17154
  metadata: values.metadata ?? null
17230
17155
  });
17231
17156
  }
17232
- async function sumUsageForRun(runId, runKind) {
17233
- const records = await getDb$1().select().from(usageRecords).where(and(eq(usageRecords.runId, runId), eq(usageRecords.runKind, runKind)));
17234
- let totalCostUsd = 0;
17235
- let totalTokens = 0;
17236
- const modelsUsed = /* @__PURE__ */ new Set();
17237
- for (const record of records) {
17238
- totalCostUsd += record.amount;
17239
- if (record.kind === "llm") {
17240
- if (record.unit === "tokens" && record.quantity != null) totalTokens += record.quantity;
17241
- modelsUsed.add(record.label);
17242
- }
17243
- }
17244
- return {
17245
- totalCostUsd,
17246
- totalTokens,
17247
- modelsUsed: [...modelsUsed]
17248
- };
17249
- }
17250
17157
  const MESSAGE_EVENT_TYPE = "message";
17251
17158
  /** Org/user credentials live once in the shared org database; project scope stays per-project. */
17252
17159
  function credentialScopeAnd(scopeType, ...conditions) {
@@ -17349,12 +17256,11 @@ async function touchSession(sessionId) {
17349
17256
  async function nextSeq(sessionId) {
17350
17257
  return await maxSeqForSession(sessionId) + 1;
17351
17258
  }
17352
- async function appendEvent(sessionId, eventType, payload, options) {
17259
+ async function appendEvent(sessionId, eventType, payload) {
17353
17260
  const seq = await nextSeq(sessionId);
17354
17261
  await insertAgentEvent({
17355
17262
  id: crypto.randomUUID(),
17356
17263
  sessionId,
17357
- runId: options?.runId ?? null,
17358
17264
  seq,
17359
17265
  eventType,
17360
17266
  payload,
@@ -17366,31 +17272,11 @@ async function appendEvent(sessionId, eventType, payload, options) {
17366
17272
  async function listMessageEvents(sessionId) {
17367
17273
  return listMessagePayloads(sessionId, MESSAGE_EVENT_TYPE);
17368
17274
  }
17369
- async function createAgentRun(options) {
17370
- const now = /* @__PURE__ */ new Date();
17371
- const runId = crypto.randomUUID();
17372
- const runIndex = await nextRunIndex(options.sessionId);
17373
- await insertAgentRun({
17374
- id: runId,
17375
- sessionId: options.sessionId,
17376
- agentId: options.agentId,
17377
- runIndex,
17378
- sourceKind: options.sourceKind,
17379
- sourceId: options.sourceId,
17380
- ranByUserId: options.ranByUserId,
17381
- status: "running",
17382
- startedAt: now,
17383
- createdAt: now,
17384
- updatedAt: now,
17385
- deletedAt: null
17386
- });
17387
- return runId;
17388
- }
17389
17275
  async function recordLlmUsageFromAssistantMessage(options) {
17390
17276
  const { usage } = options;
17391
17277
  await insertUsageRecord({
17392
17278
  id: crypto.randomUUID(),
17393
- runId: options.runId,
17279
+ runId: options.sessionId,
17394
17280
  runKind: "agent",
17395
17281
  kind: "llm",
17396
17282
  label: usage.label,
@@ -17401,32 +17287,6 @@ async function recordLlmUsageFromAssistantMessage(options) {
17401
17287
  createdAt: /* @__PURE__ */ new Date()
17402
17288
  });
17403
17289
  }
17404
- async function finalizeAgentRunFromPrompt(options) {
17405
- const finishedAt = options.finishedAt ?? /* @__PURE__ */ new Date();
17406
- const rollups = await sumUsageForRun(options.runId, "agent");
17407
- await finalizeAgentRun(options.runId, {
17408
- status: options.status,
17409
- finishedAt,
17410
- error: options.error ?? null,
17411
- totalCostUsd: rollups.totalCostUsd,
17412
- totalTokens: rollups.totalTokens,
17413
- modelsUsed: rollups.modelsUsed,
17414
- updatedAt: finishedAt
17415
- });
17416
- }
17417
- async function resolveAgentRunSourceFromSession(sessionId) {
17418
- const session = await selectAgentSessionById(sessionId);
17419
- if (!session) return {
17420
- sourceKind: "api",
17421
- sourceId: null,
17422
- ranByUserId: null
17423
- };
17424
- return {
17425
- sourceKind: session.sourceKind,
17426
- sourceId: session.sourceId,
17427
- ranByUserId: session.ranByUserId
17428
- };
17429
- }
17430
17290
  const ALGORITHM$1 = "aes-256-gcm";
17431
17291
  const IV_LENGTH$1 = 12;
17432
17292
  function resolveEncryptionKey$1() {
@@ -18435,6 +18295,12 @@ Object.defineProperty(exports, "UnauthorizedError", {
18435
18295
  return UnauthorizedError;
18436
18296
  }
18437
18297
  });
18298
+ Object.defineProperty(exports, "addAgentSessionDuration", {
18299
+ enumerable: true,
18300
+ get: function() {
18301
+ return addAgentSessionDuration;
18302
+ }
18303
+ });
18438
18304
  Object.defineProperty(exports, "appendEvent", {
18439
18305
  enumerable: true,
18440
18306
  get: function() {
@@ -18483,12 +18349,6 @@ Object.defineProperty(exports, "connectMcpStdio", {
18483
18349
  return connectMcpStdio;
18484
18350
  }
18485
18351
  });
18486
- Object.defineProperty(exports, "createAgentRun", {
18487
- enumerable: true,
18488
- get: function() {
18489
- return createAgentRun;
18490
- }
18491
- });
18492
18352
  Object.defineProperty(exports, "createCredentialResolver", {
18493
18353
  enumerable: true,
18494
18354
  get: function() {
@@ -18525,12 +18385,6 @@ Object.defineProperty(exports, "extractWWWAuthenticateParams", {
18525
18385
  return extractWWWAuthenticateParams;
18526
18386
  }
18527
18387
  });
18528
- Object.defineProperty(exports, "finalizeAgentRunFromPrompt", {
18529
- enumerable: true,
18530
- get: function() {
18531
- return finalizeAgentRunFromPrompt;
18532
- }
18533
- });
18534
18388
  Object.defineProperty(exports, "getAgentByRoute", {
18535
18389
  enumerable: true,
18536
18390
  get: function() {
@@ -18591,12 +18445,6 @@ Object.defineProperty(exports, "resolveActionCredentials", {
18591
18445
  return resolveActionCredentials;
18592
18446
  }
18593
18447
  });
18594
- Object.defineProperty(exports, "resolveAgentRunSourceFromSession", {
18595
- enumerable: true,
18596
- get: function() {
18597
- return resolveAgentRunSourceFromSession;
18598
- }
18599
- });
18600
18448
  Object.defineProperty(exports, "resolveMcpTools", {
18601
18449
  enumerable: true,
18602
18450
  get: function() {
@@ -18628,4 +18476,4 @@ Object.defineProperty(exports, "zodToJsonSchema", {
18628
18476
  }
18629
18477
  });
18630
18478
 
18631
- //# sourceMappingURL=dist-DiqTL3ZF.cjs.map
18479
+ //# sourceMappingURL=dist-DqmPOnX5.cjs.map