@proletariat/cli 0.3.85 → 0.3.87

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 (142) hide show
  1. package/bin/validate-better-sqlite3.cjs +11 -0
  2. package/dist/commands/config/index.js +42 -0
  3. package/dist/commands/config/index.js.map +1 -1
  4. package/dist/commands/session/cleanup.d.ts +2 -0
  5. package/dist/commands/session/cleanup.js +89 -42
  6. package/dist/commands/session/cleanup.js.map +1 -1
  7. package/dist/commands/session/index.js +4 -0
  8. package/dist/commands/session/index.js.map +1 -1
  9. package/dist/commands/session/poke.d.ts +3 -7
  10. package/dist/commands/session/poke.js +5 -7
  11. package/dist/commands/session/poke.js.map +1 -1
  12. package/dist/commands/session/report.d.ts +27 -0
  13. package/dist/commands/session/report.js +217 -0
  14. package/dist/commands/session/report.js.map +1 -0
  15. package/dist/commands/telemetry/disable.js +1 -1
  16. package/dist/commands/telemetry/disable.js.map +1 -1
  17. package/dist/commands/telemetry/enable.js +1 -1
  18. package/dist/commands/telemetry/enable.js.map +1 -1
  19. package/dist/commands/ticket/cancel.js +2 -0
  20. package/dist/commands/ticket/cancel.js.map +1 -1
  21. package/dist/commands/ticket/complete.js +2 -0
  22. package/dist/commands/ticket/complete.js.map +1 -1
  23. package/dist/commands/ticket/create.d.ts +3 -2
  24. package/dist/commands/ticket/create.js +6 -69
  25. package/dist/commands/ticket/create.js.map +1 -1
  26. package/dist/commands/ticket/delete.js +2 -0
  27. package/dist/commands/ticket/delete.js.map +1 -1
  28. package/dist/commands/ticket/edit.js +5 -0
  29. package/dist/commands/ticket/edit.js.map +1 -1
  30. package/dist/commands/ticket/move.js +2 -0
  31. package/dist/commands/ticket/move.js.map +1 -1
  32. package/dist/commands/ticket/project.js +2 -0
  33. package/dist/commands/ticket/project.js.map +1 -1
  34. package/dist/commands/ticket/reassign.js +2 -0
  35. package/dist/commands/ticket/reassign.js.map +1 -1
  36. package/dist/commands/ticket/resolve.js +2 -0
  37. package/dist/commands/ticket/resolve.js.map +1 -1
  38. package/dist/commands/ticket/update.js +5 -0
  39. package/dist/commands/ticket/update.js.map +1 -1
  40. package/dist/commands/work/complete.js +2 -0
  41. package/dist/commands/work/complete.js.map +1 -1
  42. package/dist/commands/work/groom.d.ts +15 -0
  43. package/dist/commands/work/groom.js +77 -0
  44. package/dist/commands/work/groom.js.map +1 -0
  45. package/dist/commands/work/implement.d.ts +16 -0
  46. package/dist/commands/work/implement.js +85 -0
  47. package/dist/commands/work/implement.js.map +1 -0
  48. package/dist/commands/work/index.js +38 -34
  49. package/dist/commands/work/index.js.map +1 -1
  50. package/dist/commands/work/peek.d.ts +18 -0
  51. package/dist/commands/work/peek.js +82 -0
  52. package/dist/commands/work/peek.js.map +1 -0
  53. package/dist/commands/work/poke.d.ts +18 -0
  54. package/dist/commands/work/poke.js +84 -0
  55. package/dist/commands/work/poke.js.map +1 -0
  56. package/dist/commands/work/ready.js +2 -0
  57. package/dist/commands/work/ready.js.map +1 -1
  58. package/dist/commands/work/review.d.ts +1 -31
  59. package/dist/commands/work/review.js +44 -368
  60. package/dist/commands/work/review.js.map +1 -1
  61. package/dist/commands/work/spawn.js +1 -1
  62. package/dist/commands/work/spawn.js.map +1 -1
  63. package/dist/commands/work/start.d.ts +3 -0
  64. package/dist/commands/work/start.js +69 -20
  65. package/dist/commands/work/start.js.map +1 -1
  66. package/dist/commands/work/stop.d.ts +14 -0
  67. package/dist/commands/work/stop.js +108 -0
  68. package/dist/commands/work/stop.js.map +1 -0
  69. package/dist/hooks/init.d.ts +1 -1
  70. package/dist/hooks/init.js +4 -1
  71. package/dist/hooks/init.js.map +1 -1
  72. package/dist/hooks/postrun.js +3 -0
  73. package/dist/hooks/postrun.js.map +1 -1
  74. package/dist/lib/database/drizzle-schema.d.ts +1 -1
  75. package/dist/lib/database/migrations/0011_add_review_gate.d.ts +8 -0
  76. package/dist/lib/database/migrations/0011_add_review_gate.js +21 -0
  77. package/dist/lib/database/migrations/0011_add_review_gate.js.map +1 -0
  78. package/dist/lib/database/migrations/index.js +2 -0
  79. package/dist/lib/database/migrations/index.js.map +1 -1
  80. package/dist/lib/execution/config.d.ts +17 -1
  81. package/dist/lib/execution/config.js +38 -0
  82. package/dist/lib/execution/config.js.map +1 -1
  83. package/dist/lib/execution/devcontainer.js +0 -1
  84. package/dist/lib/execution/devcontainer.js.map +1 -1
  85. package/dist/lib/execution/runners/docker-management.js +20 -0
  86. package/dist/lib/execution/runners/docker-management.js.map +1 -1
  87. package/dist/lib/execution/runners/prompt-builder.js +50 -17
  88. package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
  89. package/dist/lib/execution/runners/shared.js +3 -1
  90. package/dist/lib/execution/runners/shared.js.map +1 -1
  91. package/dist/lib/execution/spawner.d.ts +3 -1
  92. package/dist/lib/execution/spawner.js +10 -4
  93. package/dist/lib/execution/spawner.js.map +1 -1
  94. package/dist/lib/execution/storage.d.ts +4 -2
  95. package/dist/lib/execution/storage.js +10 -8
  96. package/dist/lib/execution/storage.js.map +1 -1
  97. package/dist/lib/execution/types.d.ts +10 -0
  98. package/dist/lib/execution/types.js.map +1 -1
  99. package/dist/lib/mcp/tools/action.js +34 -0
  100. package/dist/lib/mcp/tools/action.js.map +1 -1
  101. package/dist/lib/mcp/tools/tmux.d.ts +1 -1
  102. package/dist/lib/mcp/tools/tmux.js +1 -1
  103. package/dist/lib/mcp/tools/work.js +4 -35
  104. package/dist/lib/mcp/tools/work.js.map +1 -1
  105. package/dist/lib/pmo/schema.d.ts +2 -2
  106. package/dist/lib/pmo/schema.js +2 -0
  107. package/dist/lib/pmo/schema.js.map +1 -1
  108. package/dist/lib/pmo/storage/actions.js +9 -3
  109. package/dist/lib/pmo/storage/actions.js.map +1 -1
  110. package/dist/lib/pmo/storage/base.js +59 -501
  111. package/dist/lib/pmo/storage/base.js.map +1 -1
  112. package/dist/lib/pmo/storage/index.d.ts +1 -0
  113. package/dist/lib/pmo/storage/index.js +3 -0
  114. package/dist/lib/pmo/storage/index.js.map +1 -1
  115. package/dist/lib/pmo/storage/tickets.d.ts +7 -0
  116. package/dist/lib/pmo/storage/tickets.js +33 -2
  117. package/dist/lib/pmo/storage/tickets.js.map +1 -1
  118. package/dist/lib/pmo/storage/types.d.ts +1 -0
  119. package/dist/lib/pmo/types.d.ts +10 -0
  120. package/dist/lib/pmo/types.js.map +1 -1
  121. package/dist/lib/pmo/utils.d.ts +60 -0
  122. package/dist/lib/pmo/utils.js +92 -0
  123. package/dist/lib/pmo/utils.js.map +1 -1
  124. package/dist/lib/providers/event-emitting-provider.js +13 -2
  125. package/dist/lib/providers/event-emitting-provider.js.map +1 -1
  126. package/dist/lib/telemetry/analytics.d.ts +57 -13
  127. package/dist/lib/telemetry/analytics.js +87 -125
  128. package/dist/lib/telemetry/analytics.js.map +1 -1
  129. package/dist/lib/telemetry/feature-flags.d.ts +12 -37
  130. package/dist/lib/telemetry/feature-flags.js +15 -63
  131. package/dist/lib/telemetry/feature-flags.js.map +1 -1
  132. package/dist/lib/telemetry/telemetry-bridge.d.ts +35 -0
  133. package/dist/lib/telemetry/telemetry-bridge.js +139 -0
  134. package/dist/lib/telemetry/telemetry-bridge.js.map +1 -0
  135. package/dist/lib/work-lifecycle/post-execution.d.ts +5 -1
  136. package/dist/lib/work-lifecycle/post-execution.js +30 -18
  137. package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
  138. package/oclif.manifest.json +923 -661
  139. package/package.json +10 -11
  140. package/dist/commands/work/revise.d.ts +0 -20
  141. package/dist/commands/work/revise.js +0 -377
  142. package/dist/commands/work/revise.js.map +0 -1
@@ -271,4 +271,96 @@ export function getPrioritySortIndex(db, value) {
271
271
  const index = priorities.indexOf(value);
272
272
  return index !== -1 ? index : Infinity;
273
273
  }
274
+ /**
275
+ * Valid review gate modes.
276
+ */
277
+ export const REVIEW_GATE_MODES = ['required', 'auto', 'post'];
278
+ /**
279
+ * Default review gate mode for workspace.
280
+ */
281
+ export const DEFAULT_REVIEW_GATE = 'required';
282
+ /**
283
+ * Settings key for workspace-level review gate default.
284
+ */
285
+ const REVIEW_GATE_SETTING_KEY = 'review_gate';
286
+ /**
287
+ * Get the workspace review gate default from pmo_settings.
288
+ * Returns the configured mode, or 'required' if not set.
289
+ *
290
+ * @param db - Database instance
291
+ * @returns The configured review gate mode
292
+ */
293
+ export function getReviewGateSetting(db) {
294
+ const row = db.prepare(`SELECT value FROM pmo_settings WHERE key = ?`).get(REVIEW_GATE_SETTING_KEY);
295
+ const value = row?.value;
296
+ if (value === 'required' || value === 'auto' || value === 'post') {
297
+ return value;
298
+ }
299
+ return DEFAULT_REVIEW_GATE;
300
+ }
301
+ /**
302
+ * Set the workspace review gate default in pmo_settings.
303
+ *
304
+ * @param db - Database instance
305
+ * @param mode - Review gate mode to set
306
+ */
307
+ export function setReviewGateSetting(db, mode) {
308
+ db.prepare(`
309
+ INSERT INTO pmo_settings (key, value) VALUES (?, ?)
310
+ ON CONFLICT(key) DO UPDATE SET value = ?
311
+ `).run(REVIEW_GATE_SETTING_KEY, mode, mode);
312
+ }
313
+ /**
314
+ * Check if a value is a valid review gate mode.
315
+ */
316
+ export function isValidReviewGateMode(value) {
317
+ return REVIEW_GATE_MODES.includes(value);
318
+ }
319
+ /**
320
+ * Resolve the effective review gate mode given the hierarchy of overrides.
321
+ * Most specific wins: per-spawn > per-action > workspace default.
322
+ *
323
+ * @param spawnOverride - Value from --review-gate flag on `prlt work start`
324
+ * @param actionOverride - Value from the action's review_gate column
325
+ * @param db - Database instance for workspace default lookup
326
+ * @returns The resolved review gate mode
327
+ */
328
+ export function resolveReviewGate(spawnOverride, actionOverride, db) {
329
+ if (spawnOverride)
330
+ return spawnOverride;
331
+ if (actionOverride)
332
+ return actionOverride;
333
+ return getReviewGateSetting(db);
334
+ }
335
+ // =============================================================================
336
+ // External Metadata Helpers
337
+ // =============================================================================
338
+ /**
339
+ * Extract external issue metadata from a ticket's metadata field.
340
+ * Returns the external source, key (e.g. PRLT-1065), id, and url.
341
+ */
342
+ export function getTicketExternalMetadata(ticket) {
343
+ const metadata = (typeof ticket === 'object'
344
+ && ticket !== null
345
+ && 'metadata' in ticket
346
+ && typeof ticket.metadata === 'object'
347
+ && ticket.metadata !== null
348
+ ? ticket.metadata
349
+ : {});
350
+ return {
351
+ source: typeof metadata.external_source === 'string' ? metadata.external_source : undefined,
352
+ key: typeof metadata.external_key === 'string' ? metadata.external_key : undefined,
353
+ id: typeof metadata.external_id === 'string' ? metadata.external_id : undefined,
354
+ url: typeof metadata.external_url === 'string' ? metadata.external_url : undefined,
355
+ };
356
+ }
357
+ /**
358
+ * Resolve the display/branch ticket ID. When a ticket was imported from an
359
+ * external provider (e.g. Linear), the external key (PRLT-xxx) is preferred
360
+ * over the internal PMO ID (TKT-xxx).
361
+ */
362
+ export function resolveExternalTicketId(ticket) {
363
+ const external = getTicketExternalMetadata(ticket);
364
+ return external.key || ticket.id;
365
+ }
274
366
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/pmo/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/pmo/utils.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@
12
12
  * Pattern: same decorator approach as EventEmittingRunner.
13
13
  */
14
14
  import { getEventBus } from '../events/event-bus.js';
15
+ import { trackTicketOperation } from '../telemetry/analytics.js';
15
16
  /**
16
17
  * EventEmittingProvider wraps a TicketProvider and emits
17
18
  * work-lifecycle domain events after successful operations.
@@ -39,7 +40,9 @@ export class EventEmittingProvider {
39
40
  async moveTicket(ticketId, newState) {
40
41
  // Capture previous status before the move
41
42
  const previous = this.statusResolver?.getTicketStatus(ticketId) ?? null;
43
+ const startTime = Date.now();
42
44
  const result = await this.inner.moveTicket(ticketId, newState);
45
+ trackTicketOperation({ operation: 'move', provider: this.name, durationMs: Date.now() - startTime, success: result.success });
43
46
  if (result.success) {
44
47
  // Resolve the new status
45
48
  const newStatus = this.statusResolver?.resolveStatusByName(this.projectId, newState) ?? null;
@@ -97,10 +100,15 @@ export class EventEmittingProvider {
97
100
  return this.inner.deleteTicket(ticketId);
98
101
  }
99
102
  async listTickets(projectId, filter) {
100
- return this.inner.listTickets(projectId, filter);
103
+ const startTime = Date.now();
104
+ const result = await this.inner.listTickets(projectId, filter);
105
+ trackTicketOperation({ operation: 'list', provider: this.name, durationMs: Date.now() - startTime, success: result.success });
106
+ return result;
101
107
  }
102
108
  async createTicket(projectId, input) {
109
+ const startTime = Date.now();
103
110
  const result = await this.inner.createTicket(projectId, input);
111
+ trackTicketOperation({ operation: 'create', provider: this.name, durationMs: Date.now() - startTime, success: result.success });
104
112
  // If a PR URL was included in the creation metadata, emit pr_created
105
113
  if (result.success && result.ticket && input.metadata?.['pr_url']) {
106
114
  const bus = getEventBus();
@@ -123,7 +131,10 @@ export class EventEmittingProvider {
123
131
  return result;
124
132
  }
125
133
  async getTicket(ticketId) {
126
- return this.inner.getTicket(ticketId);
134
+ const startTime = Date.now();
135
+ const result = await this.inner.getTicket(ticketId);
136
+ trackTicketOperation({ operation: 'fetch', provider: this.name, durationMs: Date.now() - startTime, success: result.success });
137
+ return result;
127
138
  }
128
139
  }
129
140
  //# sourceMappingURL=event-emitting-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-emitting-provider.js","sourceRoot":"","sources":["../../../src/lib/providers/event-emitting-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAkCpD;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,qBAAqB;IAItB;IACA;IACA;IALD,IAAI,CAAoB;IAEjC,YACU,KAAqB,EACrB,cAAqC,EACrC,SAAiB;QAFjB,UAAK,GAAL,KAAK,CAAgB;QACrB,mBAAc,GAAd,cAAc,CAAuB;QACrC,cAAS,GAAT,SAAS,CAAQ;QAEzB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,QAAgB;QACjD,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAA;QAEvE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAE9D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,yBAAyB;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAA;YAC5F,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAA;YAExB,MAAM,GAAG,GAAG,WAAW,EAAE,CAAA;YAEzB,4EAA4E;YAC5E,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBAChC,QAAQ;gBACR,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI;gBAC5C,kBAAkB,EAAE,QAAQ,EAAE,UAAU,IAAI,IAAI;gBAChD,sBAAsB,EAAE,QAAQ,EAAE,cAAc,IAAI,IAAI;gBACxD,WAAW,EAAE,SAAS,EAAE,EAAE,IAAI,QAAQ;gBACtC,aAAa,EAAE,SAAS,EAAE,IAAI,IAAI,QAAQ;gBAC1C,iBAAiB,EAAE,SAAS,EAAE,QAAQ,IAAI,IAAI;gBAC9C,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC,CAAA;YAEF,sCAAsC;YACtC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBAC9B,UAAU,EAAE,QAAQ;gBACpB,MAAM;gBACN,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,cAAc,EAAE,QAAQ,EAAE,UAAU,IAAI,IAAI;gBAC5C,gBAAgB,EAAE,QAAQ,EAAE,cAAc,IAAI,IAAI;gBAClD,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,QAAQ;gBACtC,WAAW,EAAE,SAAS,EAAE,QAAQ,IAAI,IAAI;gBACxC,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC,CAAA;YAEF,yDAAyD;YACzD,IACE,SAAS,EAAE,QAAQ,KAAK,SAAS;gBACjC,QAAQ,EAAE,cAAc,KAAK,SAAS,EACtC,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE;oBACvB,UAAU,EAAE,QAAQ;oBACpB,MAAM;oBACN,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM,EAAE,SAAS,CAAC,IAAI;oBACtB,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC,CAAA;YACJ,CAAC;YAED,6DAA6D;YAC7D,IACE,SAAS,EAAE,QAAQ,KAAK,WAAW;gBACnC,QAAQ,EAAE,cAAc,KAAK,WAAW,EACxC,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE;oBACzB,UAAU,EAAE,QAAQ;oBACpB,MAAM;oBACN,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM,EAAE,SAAS,CAAC,IAAI;oBACtB,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAkB,EAAE,MAAqB;QACzD,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAClD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,KAAwB;QAC5D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAE9D,qEAAqE;QACrE,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClE,MAAM,GAAG,GAAG,WAAW,EAAE,CAAA;YAEzB,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE;gBAC1B,SAAS;gBACT,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC/B,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI;gBAC3C,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC,CAAA;YAEF,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE;gBAC5B,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,SAAS;gBACT,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC/B,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI;gBAC3C,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"event-emitting-provider.js","sourceRoot":"","sources":["../../../src/lib/providers/event-emitting-provider.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Product Analytics (Statsig + PostHog) & Event Tracking
2
+ * Product Analytics (PostHog) & Event Tracking
3
3
  *
4
- * Provides anonymous usage analytics for the CLI using Statsig and PostHog.
4
+ * Provides anonymous usage analytics for the CLI using PostHog.
5
5
  * All data is anonymous — identified by a machine UUID only, no PII is ever sent.
6
6
  *
7
7
  * Telemetry can be disabled via:
@@ -16,7 +16,7 @@
16
16
  *
17
17
  * Write-ahead log:
18
18
  * - trackEvent() writes events to ~/.proletariat/telemetry-queue.json synchronously
19
- * - On the next command run, queued events are flushed to both backends and the queue is cleared
19
+ * - On the next command run, queued events are flushed to PostHog and the queue is cleared
20
20
  * - Events are delayed by at most one command invocation — acceptable for analytics
21
21
  * - This adds zero latency and ensures no events are lost regardless of backend init timing
22
22
  * - Shutdown never flushes the queue — events persist until the next run confirms delivery
@@ -47,23 +47,22 @@ export declare function getTelemetryStatus(): {
47
47
  */
48
48
  export declare function getMachineId(): string;
49
49
  /**
50
- * Flush queued events to Statsig and PostHog. Requires at least one initialized client.
50
+ * Flush queued events to PostHog. Requires an initialized PostHog client.
51
51
  * Called during shutdown or at the start of the next command run.
52
52
  */
53
53
  export declare function flushQueuedEvents(): void;
54
54
  /**
55
- * Initialize the Statsig SDK and flush any queued events from previous runs.
56
- * Called from the init hook. The Statsig init is fire-and-forget — event
55
+ * Initialize PostHog and flush any queued events from previous runs.
56
+ * Called from the init hook. The PostHog init is fire-and-forget — event
57
57
  * tracking does not depend on it (events go to the disk queue instead).
58
- * Statsig is still needed for feature flags.
59
58
  *
60
59
  * No-op if telemetry is disabled.
61
60
  */
62
61
  export declare function initAnalytics(version: string): void;
63
62
  /**
64
63
  * Track an analytics event. Writes to a local disk queue synchronously —
65
- * never blocks on network I/O. Events are flushed to Statsig on the next
66
- * command run (or during this run's shutdown if Statsig initialized in time).
64
+ * never blocks on network I/O. Events are flushed to PostHog on the next
65
+ * command run (or during this run's shutdown if PostHog initialized in time).
67
66
  *
68
67
  * @param eventName - Event name (e.g., 'command_run')
69
68
  * @param value - Optional numeric or string value
@@ -81,12 +80,15 @@ export declare function trackCommandRun(options: {
81
80
  }): void;
82
81
  /**
83
82
  * Track an agent being spawned.
83
+ *
84
+ * Privacy: No ticket IDs, branch names, or usernames.
84
85
  */
85
86
  export declare function trackAgentSpawned(options: {
86
87
  executor: string;
87
88
  environment: string;
88
89
  action: string;
89
90
  ephemeral: boolean;
91
+ provider?: string;
90
92
  }): void;
91
93
  /**
92
94
  * Track an orchestrator being started.
@@ -117,11 +119,53 @@ export declare function trackMCPToolCalled(options: {
117
119
  success: boolean;
118
120
  }): void;
119
121
  /**
120
- * Wait for Statsig init to complete (so queued events get flushed), then
122
+ * Track a work primitive completing (groom, resolve, implement, review, peek, poke, stop).
123
+ *
124
+ * Privacy: No ticket IDs, descriptions, file paths, or code content.
125
+ */
126
+ export declare function trackPrimitiveExecuted(options: {
127
+ primitive: string;
128
+ durationMs: number;
129
+ success: boolean;
130
+ errorType?: string;
131
+ }): void;
132
+ /**
133
+ * Track an agent completing successfully.
134
+ *
135
+ * Privacy: No ticket IDs, branch names, or usernames.
136
+ */
137
+ export declare function trackAgentCompleted(options: {
138
+ action: string;
139
+ durationMs: number;
140
+ exitReason: 'completed' | 'errored' | 'stopped' | 'orphaned';
141
+ prCreated: boolean;
142
+ }): void;
143
+ /**
144
+ * Track an agent encountering an error.
145
+ *
146
+ * Privacy: No ticket IDs, error messages (may contain PII), or stack traces.
147
+ */
148
+ export declare function trackAgentErrored(options: {
149
+ action: string;
150
+ durationMs: number;
151
+ exitReason: 'errored';
152
+ errorType?: string;
153
+ }): void;
154
+ /**
155
+ * Track a ticket operation (fetch, move, update, comment, create, list).
156
+ *
157
+ * Privacy: No ticket IDs, descriptions, or ticket content.
158
+ */
159
+ export declare function trackTicketOperation(options: {
160
+ operation: 'fetch' | 'move' | 'update' | 'comment' | 'create' | 'list';
161
+ provider: string;
162
+ durationMs: number;
163
+ success: boolean;
164
+ }): void;
165
+ /**
166
+ * Wait for PostHog init to complete (so queued events get flushed), then
121
167
  * shut down the client. Uses a timeout to avoid blocking CLI exit if
122
- * Statsig is slow (e.g., first run with no cache). After the first
123
- * successful init, Statsig caches its config locally so subsequent
124
- * initializations resolve in < 100 ms.
168
+ * PostHog is slow.
125
169
  *
126
170
  * Events written during this command run (e.g., by trackCommandRun in
127
171
  * postrun) will be on disk and flushed on the next run — this is by
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Product Analytics (Statsig + PostHog) & Event Tracking
2
+ * Product Analytics (PostHog) & Event Tracking
3
3
  *
4
- * Provides anonymous usage analytics for the CLI using Statsig and PostHog.
4
+ * Provides anonymous usage analytics for the CLI using PostHog.
5
5
  * All data is anonymous — identified by a machine UUID only, no PII is ever sent.
6
6
  *
7
7
  * Telemetry can be disabled via:
@@ -16,7 +16,7 @@
16
16
  *
17
17
  * Write-ahead log:
18
18
  * - trackEvent() writes events to ~/.proletariat/telemetry-queue.json synchronously
19
- * - On the next command run, queued events are flushed to both backends and the queue is cleared
19
+ * - On the next command run, queued events are flushed to PostHog and the queue is cleared
20
20
  * - Events are delayed by at most one command invocation — acceptable for analytics
21
21
  * - This adds zero latency and ensures no events are lost regardless of backend init timing
22
22
  * - Shutdown never flushes the queue — events persist until the next run confirms delivery
@@ -25,14 +25,11 @@ import * as fs from 'node:fs';
25
25
  import * as path from 'node:path';
26
26
  import * as crypto from 'node:crypto';
27
27
  import { getMachineConfigDir, ensureMachineConfigDir } from '../machine-config.js';
28
- // Statsig server secret key (private — this repo is private, will be replaced before merge)
29
- const STATSIG_SERVER_KEY = 'secret-placeholder';
30
28
  // PostHog API key (public — PostHog client keys are meant to be public)
31
29
  const POSTHOG_API_KEY = 'phc_ihCp4i3ZWlk2KQxFbcE6odylZGtISEaCNKAVklMwAkV';
32
30
  // Cap the queue size to prevent unbounded growth if events never flush
33
31
  const MAX_QUEUE_SIZE = 1000;
34
32
  // Module-level state
35
- let statsigClient = null;
36
33
  let posthogClient = null;
37
34
  let telemetryConfig = null;
38
35
  let cliVersion = null;
@@ -234,49 +231,36 @@ function readAndClearQueue() {
234
231
  }
235
232
  }
236
233
  /**
237
- * Flush queued events to Statsig and PostHog. Requires at least one initialized client.
234
+ * Flush queued events to PostHog. Requires an initialized PostHog client.
238
235
  * Called during shutdown or at the start of the next command run.
239
236
  */
240
237
  export function flushQueuedEvents() {
241
- if (!statsigClient && !posthogClient)
238
+ if (!posthogClient)
242
239
  return;
243
240
  const events = readAndClearQueue();
244
241
  const machineId = getMachineId();
245
242
  for (const event of events) {
246
- // Send to Statsig
247
- if (statsigClient) {
248
- try {
249
- statsigClient.logEvent(event.name, event.value, event.metadata);
250
- }
251
- catch {
252
- // Drop individual events silently
253
- }
243
+ try {
244
+ posthogClient.capture({
245
+ distinctId: machineId,
246
+ event: event.name,
247
+ properties: {
248
+ ...event.metadata,
249
+ ...(event.value != null ? { value: event.value } : {}),
250
+ timestamp: event.timestamp,
251
+ },
252
+ });
254
253
  }
255
- // Send to PostHog
256
- if (posthogClient) {
257
- try {
258
- posthogClient.capture({
259
- distinctId: machineId,
260
- event: event.name,
261
- properties: {
262
- ...event.metadata,
263
- ...(event.value != null ? { value: event.value } : {}),
264
- timestamp: event.timestamp,
265
- },
266
- });
267
- }
268
- catch {
269
- // Drop individual events silently
270
- }
254
+ catch {
255
+ // Drop individual events silently
271
256
  }
272
257
  }
273
258
  }
274
- // ─── Statsig Client ──────────────────────────────────────────────────────────
259
+ // ─── PostHog Client ──────────────────────────────────────────────────────────
275
260
  /**
276
- * Initialize the Statsig SDK and flush any queued events from previous runs.
277
- * Called from the init hook. The Statsig init is fire-and-forget — event
261
+ * Initialize PostHog and flush any queued events from previous runs.
262
+ * Called from the init hook. The PostHog init is fire-and-forget — event
278
263
  * tracking does not depend on it (events go to the disk queue instead).
279
- * Statsig is still needed for feature flags.
280
264
  *
281
265
  * No-op if telemetry is disabled.
282
266
  */
@@ -285,10 +269,9 @@ export function initAnalytics(version) {
285
269
  if (!isTelemetryEnabled())
286
270
  return;
287
271
  showTelemetryNotice();
288
- // Start Statsig + PostHog init in background — not needed for event logging,
289
- // but enables feature flags and allows queue flush if init completes in time
272
+ // Start PostHog init in background — not needed for event logging,
273
+ // but allows queue flush if init completes in time
290
274
  initPromise = (async () => {
291
- // Initialize PostHog (fire-and-forget, independent of Statsig)
292
275
  try {
293
276
  const { PostHog } = await import('posthog-node');
294
277
  const ph = new PostHog(POSTHOG_API_KEY, {
@@ -309,61 +292,17 @@ export function initAnalytics(version) {
309
292
  // If PostHog can't initialize, fail silently
310
293
  posthogClient = null;
311
294
  }
312
- // Initialize Statsig (server SDK)
313
- try {
314
- const { Statsig } = await import('statsig-node');
315
- await Statsig.initialize(STATSIG_SERVER_KEY, {
316
- environment: { tier: 'production' },
317
- });
318
- // If shutdown already ran while we were initializing, don't set state
319
- // or flush — just clean up and bail out
320
- if (analyticsShutdown) {
321
- try {
322
- Statsig.shutdown();
323
- }
324
- catch { /* ignore */ }
325
- return;
326
- }
327
- // Wrap the static Statsig API to match our StatsigClientInstance interface,
328
- // binding the user for all calls so feature-flags.ts doesn't need to change
329
- const user = { userID: getMachineId(), custom: { cli_version: version } };
330
- const client = {
331
- initializeAsync: () => Promise.resolve(),
332
- logEvent(eventName, value, metadata) {
333
- Statsig.logEvent(user, eventName, value, metadata);
334
- },
335
- checkGate(gateName) {
336
- return Statsig.checkGate(user, gateName);
337
- },
338
- getDynamicConfig(configName) {
339
- return Statsig.getConfig(user, configName);
340
- },
341
- shutdown() {
342
- Statsig.shutdown();
343
- },
344
- };
345
- statsigClient = client;
346
- // Share Statsig client with feature-flags for synchronous gate checks
347
- const { setStatsigClient } = await import('./feature-flags.js');
348
- setStatsigClient(client);
349
- // Backends are ready — flush any events queued from previous runs
295
+ // Backend is ready — flush any events queued from previous runs
296
+ if (posthogClient && !analyticsShutdown) {
350
297
  flushQueuedEvents();
351
298
  }
352
- catch {
353
- // If Statsig can't initialize, fail silently — analytics should never break the CLI
354
- statsigClient = null;
355
- // Even if Statsig failed, PostHog may be ready — try flushing
356
- if (posthogClient && !analyticsShutdown) {
357
- flushQueuedEvents();
358
- }
359
- }
360
299
  })();
361
300
  }
362
301
  // ─── Event Tracking ──────────────────────────────────────────────────────────
363
302
  /**
364
303
  * Track an analytics event. Writes to a local disk queue synchronously —
365
- * never blocks on network I/O. Events are flushed to Statsig on the next
366
- * command run (or during this run's shutdown if Statsig initialized in time).
304
+ * never blocks on network I/O. Events are flushed to PostHog on the next
305
+ * command run (or during this run's shutdown if PostHog initialized in time).
367
306
  *
368
307
  * @param eventName - Event name (e.g., 'command_run')
369
308
  * @param value - Optional numeric or string value
@@ -402,6 +341,8 @@ export function trackCommandRun(options) {
402
341
  }
403
342
  /**
404
343
  * Track an agent being spawned.
344
+ *
345
+ * Privacy: No ticket IDs, branch names, or usernames.
405
346
  */
406
347
  export function trackAgentSpawned(options) {
407
348
  trackEvent('agent_spawned', null, {
@@ -409,6 +350,7 @@ export function trackAgentSpawned(options) {
409
350
  environment: options.environment,
410
351
  action: options.action,
411
352
  ephemeral: String(options.ephemeral),
353
+ ...(options.provider ? { provider: options.provider } : {}),
412
354
  });
413
355
  }
414
356
  /**
@@ -446,25 +388,68 @@ export function trackMCPToolCalled(options) {
446
388
  success: String(options.success),
447
389
  });
448
390
  }
391
+ // ─── Granular Telemetry Events ────────────────────────────────────────────────
392
+ /**
393
+ * Track a work primitive completing (groom, resolve, implement, review, peek, poke, stop).
394
+ *
395
+ * Privacy: No ticket IDs, descriptions, file paths, or code content.
396
+ */
397
+ export function trackPrimitiveExecuted(options) {
398
+ trackEvent('primitive_executed', options.durationMs, {
399
+ primitive: options.primitive,
400
+ success: options.success,
401
+ ...(options.errorType ? { error_type: options.errorType } : {}),
402
+ });
403
+ }
404
+ /**
405
+ * Track an agent completing successfully.
406
+ *
407
+ * Privacy: No ticket IDs, branch names, or usernames.
408
+ */
409
+ export function trackAgentCompleted(options) {
410
+ trackEvent('agent_completed', options.durationMs, {
411
+ action: options.action,
412
+ exit_reason: options.exitReason,
413
+ pr_created: options.prCreated,
414
+ });
415
+ }
416
+ /**
417
+ * Track an agent encountering an error.
418
+ *
419
+ * Privacy: No ticket IDs, error messages (may contain PII), or stack traces.
420
+ */
421
+ export function trackAgentErrored(options) {
422
+ trackEvent('agent_errored', options.durationMs, {
423
+ action: options.action,
424
+ exit_reason: options.exitReason,
425
+ ...(options.errorType ? { error_type: options.errorType } : {}),
426
+ });
427
+ }
428
+ /**
429
+ * Track a ticket operation (fetch, move, update, comment, create, list).
430
+ *
431
+ * Privacy: No ticket IDs, descriptions, or ticket content.
432
+ */
433
+ export function trackTicketOperation(options) {
434
+ trackEvent('ticket_operation', options.durationMs, {
435
+ operation: options.operation,
436
+ provider: options.provider,
437
+ success: options.success,
438
+ });
439
+ }
449
440
  // ─── Shutdown ────────────────────────────────────────────────────────────────
450
- /** Maximum time (ms) to wait for Statsig init before giving up during shutdown. */
441
+ /** Maximum time (ms) to wait for PostHog init before giving up during shutdown. */
451
442
  const SHUTDOWN_INIT_TIMEOUT_MS = 3000;
452
443
  /**
453
- * Wait for Statsig init to complete (so queued events get flushed), then
444
+ * Wait for PostHog init to complete (so queued events get flushed), then
454
445
  * shut down the client. Uses a timeout to avoid blocking CLI exit if
455
- * Statsig is slow (e.g., first run with no cache). After the first
456
- * successful init, Statsig caches its config locally so subsequent
457
- * initializations resolve in < 100 ms.
446
+ * PostHog is slow.
458
447
  *
459
448
  * Events written during this command run (e.g., by trackCommandRun in
460
449
  * postrun) will be on disk and flushed on the next run — this is by
461
450
  * design (WAL guarantee: one-command delay for current-run events).
462
451
  */
463
452
  export async function shutdownAnalytics() {
464
- // Await the in-progress Statsig init so it can flush queued events from
465
- // previous runs. Without this, the init promise sees analyticsShutdown=true
466
- // and bails before calling flushQueuedEvents(), causing the queue to grow
467
- // indefinitely (see PRLT-1013).
468
453
  if (initPromise) {
469
454
  try {
470
455
  await Promise.race([
@@ -476,45 +461,22 @@ export async function shutdownAnalytics() {
476
461
  // Ignore init errors — events are safely on disk
477
462
  }
478
463
  }
479
- // Now mark as shut down so any late-resolving init promise (after timeout)
480
- // won't set statsigClient or flush the queue
481
464
  analyticsShutdown = true;
482
465
  initPromise = null;
483
- if (statsigClient || posthogClient) {
466
+ if (posthogClient) {
484
467
  try {
485
- // Flush events written during this run that arrived after the init
486
- // promise's own flush (e.g., the command_run event from postrun).
487
- // statsigClient.logEvent() buffers in memory; shutdown() sends them.
488
468
  flushQueuedEvents();
489
469
  }
490
470
  catch {
491
471
  // Never let flush errors affect the CLI
492
472
  }
493
- if (statsigClient) {
494
- try {
495
- statsigClient.shutdown();
496
- }
497
- catch {
498
- // Never let shutdown errors affect the CLI
499
- }
500
- statsigClient = null;
501
- try {
502
- const { setStatsigClient } = await import('./feature-flags.js');
503
- setStatsigClient(null);
504
- }
505
- catch {
506
- // Ignore
507
- }
473
+ try {
474
+ posthogClient.shutdown();
508
475
  }
509
- if (posthogClient) {
510
- try {
511
- posthogClient.shutdown();
512
- }
513
- catch {
514
- // Never let shutdown errors affect the CLI
515
- }
516
- posthogClient = null;
476
+ catch {
477
+ // Never let shutdown errors affect the CLI
517
478
  }
479
+ posthogClient = null;
518
480
  }
519
481
  }
520
482
  //# sourceMappingURL=analytics.js.map