@proletariat/cli 0.3.54 → 0.3.56

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 (255) hide show
  1. package/README.md +5 -4
  2. package/dist/commands/agent/cleanup.d.ts +1 -0
  3. package/dist/commands/agent/cleanup.js +11 -1
  4. package/dist/commands/agent/cleanup.js.map +1 -1
  5. package/dist/commands/agent/rebuild.js +1 -1
  6. package/dist/commands/agent/rebuild.js.map +1 -1
  7. package/dist/commands/asana/import.d.ts +14 -0
  8. package/dist/commands/asana/import.js +240 -0
  9. package/dist/commands/asana/import.js.map +1 -0
  10. package/dist/commands/claude-yolo.d.ts +20 -0
  11. package/dist/commands/claude-yolo.js +86 -0
  12. package/dist/commands/claude-yolo.js.map +1 -0
  13. package/dist/commands/codex/index.d.ts +23 -0
  14. package/dist/commands/codex/index.js +168 -0
  15. package/dist/commands/codex/index.js.map +1 -0
  16. package/dist/commands/codex-yolo.d.ts +20 -0
  17. package/dist/commands/codex-yolo.js +86 -0
  18. package/dist/commands/codex-yolo.js.map +1 -0
  19. package/dist/commands/config/index.js +2 -2
  20. package/dist/commands/config/index.js.map +1 -1
  21. package/dist/commands/docker/clean.js +1 -1
  22. package/dist/commands/docker/clean.js.map +1 -1
  23. package/dist/commands/docker/list.js +1 -1
  24. package/dist/commands/docker/list.js.map +1 -1
  25. package/dist/commands/docker/logs.js +1 -1
  26. package/dist/commands/docker/logs.js.map +1 -1
  27. package/dist/commands/docker/restart.js +1 -1
  28. package/dist/commands/docker/restart.js.map +1 -1
  29. package/dist/commands/docker/shell.js +1 -1
  30. package/dist/commands/docker/shell.js.map +1 -1
  31. package/dist/commands/docker/start.js +1 -1
  32. package/dist/commands/docker/start.js.map +1 -1
  33. package/dist/commands/docker/stop.js +1 -1
  34. package/dist/commands/docker/stop.js.map +1 -1
  35. package/dist/commands/docker/sync.js +1 -1
  36. package/dist/commands/docker/sync.js.map +1 -1
  37. package/dist/commands/execution/config.js +2 -2
  38. package/dist/commands/execution/config.js.map +1 -1
  39. package/dist/commands/execution/list.js +1 -1
  40. package/dist/commands/execution/list.js.map +1 -1
  41. package/dist/commands/execution/logs.js +10 -8
  42. package/dist/commands/execution/logs.js.map +1 -1
  43. package/dist/commands/execution/stop.js +1 -1
  44. package/dist/commands/execution/stop.js.map +1 -1
  45. package/dist/commands/execution/view.js +1 -1
  46. package/dist/commands/execution/view.js.map +1 -1
  47. package/dist/commands/init.d.ts +0 -16
  48. package/dist/commands/init.js +50 -160
  49. package/dist/commands/init.js.map +1 -1
  50. package/dist/commands/logs.d.ts +20 -0
  51. package/dist/commands/logs.js +84 -0
  52. package/dist/commands/logs.js.map +1 -0
  53. package/dist/commands/mcp-server.js +1 -1
  54. package/dist/commands/mcp-server.js.map +1 -1
  55. package/dist/commands/new.d.ts +27 -0
  56. package/dist/commands/new.js +184 -0
  57. package/dist/commands/new.js.map +1 -0
  58. package/dist/commands/orchestrator/attach.d.ts +1 -0
  59. package/dist/commands/orchestrator/attach.js +159 -26
  60. package/dist/commands/orchestrator/attach.js.map +1 -1
  61. package/dist/commands/orchestrator/start.d.ts +20 -0
  62. package/dist/commands/orchestrator/start.js +122 -14
  63. package/dist/commands/orchestrator/start.js.map +1 -1
  64. package/dist/commands/orchestrator/status.d.ts +4 -0
  65. package/dist/commands/orchestrator/status.js +70 -29
  66. package/dist/commands/orchestrator/status.js.map +1 -1
  67. package/dist/commands/orchestrator/stop.js +57 -23
  68. package/dist/commands/orchestrator/stop.js.map +1 -1
  69. package/dist/commands/peek.d.ts +20 -0
  70. package/dist/commands/peek.js +84 -0
  71. package/dist/commands/peek.js.map +1 -0
  72. package/dist/commands/poke.d.ts +20 -0
  73. package/dist/commands/poke.js +89 -0
  74. package/dist/commands/poke.js.map +1 -0
  75. package/dist/commands/pr/link.js +1 -1
  76. package/dist/commands/pr/link.js.map +1 -1
  77. package/dist/commands/pr/status.js +1 -1
  78. package/dist/commands/pr/status.js.map +1 -1
  79. package/dist/commands/ps.d.ts +18 -0
  80. package/dist/commands/ps.js +123 -0
  81. package/dist/commands/ps.js.map +1 -0
  82. package/dist/commands/qa/index.js +1 -1
  83. package/dist/commands/qa/index.js.map +1 -1
  84. package/dist/commands/repo/add.js +1 -1
  85. package/dist/commands/repo/add.js.map +1 -1
  86. package/dist/commands/repo/list.js +1 -1
  87. package/dist/commands/repo/list.js.map +1 -1
  88. package/dist/commands/repo/remove.js +1 -1
  89. package/dist/commands/repo/remove.js.map +1 -1
  90. package/dist/commands/repo/view.js +1 -1
  91. package/dist/commands/repo/view.js.map +1 -1
  92. package/dist/commands/run/index.d.ts +25 -0
  93. package/dist/commands/run/index.js +212 -0
  94. package/dist/commands/run/index.js.map +1 -0
  95. package/dist/commands/session/index.js +4 -0
  96. package/dist/commands/session/index.js.map +1 -1
  97. package/dist/commands/session/prune.d.ts +18 -0
  98. package/dist/commands/session/prune.js +327 -0
  99. package/dist/commands/session/prune.js.map +1 -0
  100. package/dist/commands/shortcut/connect.d.ts +15 -0
  101. package/dist/commands/shortcut/connect.js +210 -0
  102. package/dist/commands/shortcut/connect.js.map +1 -0
  103. package/dist/commands/stop.d.ts +19 -0
  104. package/dist/commands/stop.js +83 -0
  105. package/dist/commands/stop.js.map +1 -0
  106. package/dist/commands/work/asana.d.ts +23 -0
  107. package/dist/commands/work/asana.js +213 -0
  108. package/dist/commands/work/asana.js.map +1 -0
  109. package/dist/commands/work/complete.js +1 -1
  110. package/dist/commands/work/complete.js.map +1 -1
  111. package/dist/commands/work/ready.js +1 -1
  112. package/dist/commands/work/ready.js.map +1 -1
  113. package/dist/commands/work/review.js +1 -1
  114. package/dist/commands/work/review.js.map +1 -1
  115. package/dist/commands/work/revise.js +1 -1
  116. package/dist/commands/work/revise.js.map +1 -1
  117. package/dist/commands/work/shortcut.d.ts +23 -0
  118. package/dist/commands/work/shortcut.js +212 -0
  119. package/dist/commands/work/shortcut.js.map +1 -0
  120. package/dist/commands/work/spawn.d.ts +3 -0
  121. package/dist/commands/work/spawn.js +175 -2
  122. package/dist/commands/work/spawn.js.map +1 -1
  123. package/dist/commands/work/start.js +22 -30
  124. package/dist/commands/work/start.js.map +1 -1
  125. package/dist/commands/work/watch.js +1 -1
  126. package/dist/commands/work/watch.js.map +1 -1
  127. package/dist/commands/workspace/add.js +1 -1
  128. package/dist/commands/workspace/add.js.map +1 -1
  129. package/dist/commands/workspace/list.js +1 -1
  130. package/dist/commands/workspace/list.js.map +1 -1
  131. package/dist/hooks/init.d.ts +1 -1
  132. package/dist/hooks/init.js +9 -7
  133. package/dist/hooks/init.js.map +1 -1
  134. package/dist/lib/agent-naming.d.ts +15 -0
  135. package/dist/lib/agent-naming.js +32 -0
  136. package/dist/lib/agent-naming.js.map +1 -0
  137. package/dist/lib/agents/commands.d.ts +2 -0
  138. package/dist/lib/agents/commands.js +51 -44
  139. package/dist/lib/agents/commands.js.map +1 -1
  140. package/dist/lib/agents/index.js +5 -0
  141. package/dist/lib/agents/index.js.map +1 -1
  142. package/dist/lib/asana/client.d.ts +8 -0
  143. package/dist/lib/asana/client.js +26 -7
  144. package/dist/lib/asana/client.js.map +1 -1
  145. package/dist/lib/asana/types.d.ts +20 -0
  146. package/dist/lib/branch/index.d.ts +36 -0
  147. package/dist/lib/branch/index.js +129 -0
  148. package/dist/lib/branch/index.js.map +1 -1
  149. package/dist/lib/database/drizzle-schema.d.ts +2 -2
  150. package/dist/lib/database/index.js +1 -1
  151. package/dist/lib/database/index.js.map +1 -1
  152. package/dist/lib/events/emitting-runner.d.ts +30 -0
  153. package/dist/lib/events/emitting-runner.js +95 -0
  154. package/dist/lib/events/emitting-runner.js.map +1 -0
  155. package/dist/lib/events/event-bus.d.ts +54 -0
  156. package/dist/lib/events/event-bus.js +107 -0
  157. package/dist/lib/events/event-bus.js.map +1 -0
  158. package/dist/lib/events/events.d.ts +67 -0
  159. package/dist/lib/events/events.js +8 -0
  160. package/dist/lib/events/events.js.map +1 -0
  161. package/dist/lib/events/index.d.ts +7 -0
  162. package/dist/lib/events/index.js +6 -0
  163. package/dist/lib/events/index.js.map +1 -0
  164. package/dist/lib/execution/devcontainer.d.ts +27 -0
  165. package/dist/lib/execution/devcontainer.js +80 -0
  166. package/dist/lib/execution/devcontainer.js.map +1 -1
  167. package/dist/lib/execution/runners.d.ts +28 -0
  168. package/dist/lib/execution/runners.js +459 -31
  169. package/dist/lib/execution/runners.js.map +1 -1
  170. package/dist/lib/execution/spawner.js +35 -17
  171. package/dist/lib/execution/spawner.js.map +1 -1
  172. package/dist/lib/execution/types.d.ts +1 -0
  173. package/dist/lib/execution/types.js.map +1 -1
  174. package/dist/lib/external-issues/adapters.d.ts +34 -0
  175. package/dist/lib/external-issues/adapters.js +191 -0
  176. package/dist/lib/external-issues/adapters.js.map +1 -1
  177. package/dist/lib/external-issues/asana.d.ts +75 -0
  178. package/dist/lib/external-issues/asana.js +243 -0
  179. package/dist/lib/external-issues/asana.js.map +1 -0
  180. package/dist/lib/external-issues/index.d.ts +5 -3
  181. package/dist/lib/external-issues/index.js +7 -3
  182. package/dist/lib/external-issues/index.js.map +1 -1
  183. package/dist/lib/external-issues/jira.d.ts +46 -0
  184. package/dist/lib/external-issues/jira.js +68 -0
  185. package/dist/lib/external-issues/jira.js.map +1 -1
  186. package/dist/lib/external-issues/linear.js +22 -2
  187. package/dist/lib/external-issues/linear.js.map +1 -1
  188. package/dist/lib/external-issues/mapping-store.js +1 -1
  189. package/dist/lib/external-issues/shortcut.d.ts +86 -0
  190. package/dist/lib/external-issues/shortcut.js +274 -0
  191. package/dist/lib/external-issues/shortcut.js.map +1 -0
  192. package/dist/lib/external-issues/types.d.ts +3 -3
  193. package/dist/lib/external-issues/types.js +1 -1
  194. package/dist/lib/external-issues/types.js.map +1 -1
  195. package/dist/lib/linear/client.js +2 -0
  196. package/dist/lib/linear/client.js.map +1 -1
  197. package/dist/lib/linear/mapper.d.ts +7 -1
  198. package/dist/lib/linear/mapper.js +42 -12
  199. package/dist/lib/linear/mapper.js.map +1 -1
  200. package/dist/lib/linear/types.d.ts +1 -0
  201. package/dist/lib/linear/types.js.map +1 -1
  202. package/dist/lib/mcp/tools/cli-passthrough.js +1 -1
  203. package/dist/lib/mcp/tools/cli-passthrough.js.map +1 -1
  204. package/dist/lib/mcp/tools/work.js +1 -1
  205. package/dist/lib/mcp/tools/work.js.map +1 -1
  206. package/dist/lib/pmo/index.d.ts +2 -2
  207. package/dist/lib/pmo/index.js +3 -3
  208. package/dist/lib/pmo/index.js.map +1 -1
  209. package/dist/lib/pmo/sync-manager.js +1 -1
  210. package/dist/lib/pmo/sync-manager.js.map +1 -1
  211. package/dist/lib/pmo/watcher.js +1 -1
  212. package/dist/lib/pmo/watcher.js.map +1 -1
  213. package/dist/lib/repos/index.js +1 -1
  214. package/dist/lib/repos/index.js.map +1 -1
  215. package/dist/lib/runners/agent-runner.d.ts +92 -0
  216. package/dist/lib/runners/agent-runner.js +9 -0
  217. package/dist/lib/runners/agent-runner.js.map +1 -0
  218. package/dist/lib/runners/claude-code-runner.d.ts +53 -0
  219. package/dist/lib/runners/claude-code-runner.js +132 -0
  220. package/dist/lib/runners/claude-code-runner.js.map +1 -0
  221. package/dist/lib/runners/index.d.ts +34 -0
  222. package/dist/lib/runners/index.js +97 -0
  223. package/dist/lib/runners/index.js.map +1 -0
  224. package/dist/lib/session-store.d.ts +70 -0
  225. package/dist/lib/session-store.js +167 -0
  226. package/dist/lib/session-store.js.map +1 -0
  227. package/dist/lib/shortcut/config.d.ts +44 -0
  228. package/dist/lib/shortcut/config.js +98 -0
  229. package/dist/lib/shortcut/config.js.map +1 -0
  230. package/dist/lib/shortcut/index.d.ts +7 -0
  231. package/dist/lib/shortcut/index.js +7 -0
  232. package/dist/lib/shortcut/index.js.map +1 -0
  233. package/dist/lib/signal-handler.js +8 -0
  234. package/dist/lib/signal-handler.js.map +1 -1
  235. package/dist/lib/telemetry/analytics.js +29 -15
  236. package/dist/lib/telemetry/analytics.js.map +1 -1
  237. package/dist/lib/update-check.d.ts +27 -0
  238. package/dist/lib/update-check.js +72 -0
  239. package/dist/lib/update-check.js.map +1 -1
  240. package/dist/lib/update-prompt.d.ts +10 -2
  241. package/dist/lib/update-prompt.js +38 -5
  242. package/dist/lib/update-prompt.js.map +1 -1
  243. package/dist/lib/work-source/client.d.ts +10 -0
  244. package/dist/lib/work-source/client.js +74 -0
  245. package/dist/lib/work-source/client.js.map +1 -0
  246. package/dist/lib/work-source/config.d.ts +1 -1
  247. package/dist/lib/work-source/config.js +17 -1
  248. package/dist/lib/work-source/config.js.map +1 -1
  249. package/dist/lib/work-source/index.d.ts +1 -0
  250. package/dist/lib/work-source/index.js +1 -0
  251. package/dist/lib/work-source/index.js.map +1 -1
  252. package/dist/lib/workspace.js +2 -2
  253. package/dist/lib/workspace.js.map +1 -1
  254. package/oclif.manifest.json +2230 -1187
  255. package/package.json +1 -1
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Global Session Store
3
+ *
4
+ * Tracks agent sessions across all repos on the machine.
5
+ * Works without HQ / PMO — just needs ~/.proletariat/sessions.db.
6
+ *
7
+ * Schema: id, agentName, runner, task, workdir, sessionName,
8
+ * environment, permissionMode, status, startedAt, endedAt
9
+ */
10
+ import * as fs from 'node:fs';
11
+ import * as path from 'node:path';
12
+ import * as os from 'node:os';
13
+ import Database from 'better-sqlite3';
14
+ import { execSync } from 'node:child_process';
15
+ // =============================================================================
16
+ // Helpers
17
+ // =============================================================================
18
+ function rowToSession(row) {
19
+ return {
20
+ id: row.id,
21
+ agentName: row.agent_name,
22
+ runner: row.runner,
23
+ task: row.task,
24
+ workdir: row.workdir,
25
+ sessionName: row.session_name,
26
+ environment: row.environment,
27
+ permissionMode: row.permission_mode,
28
+ status: row.status,
29
+ startedAt: new Date(row.started_at),
30
+ endedAt: row.ended_at ? new Date(row.ended_at) : undefined,
31
+ };
32
+ }
33
+ function getDbPath() {
34
+ const dir = path.join(os.homedir(), '.proletariat');
35
+ fs.mkdirSync(dir, { recursive: true });
36
+ return path.join(dir, 'sessions.db');
37
+ }
38
+ // =============================================================================
39
+ // Session Store
40
+ // =============================================================================
41
+ export class SessionStore {
42
+ db;
43
+ constructor(dbPath) {
44
+ this.db = new Database(dbPath ?? getDbPath());
45
+ this.ensureSchema();
46
+ }
47
+ ensureSchema() {
48
+ this.db.exec(`
49
+ CREATE TABLE IF NOT EXISTS sessions (
50
+ id TEXT PRIMARY KEY,
51
+ agent_name TEXT NOT NULL,
52
+ runner TEXT NOT NULL,
53
+ task TEXT NOT NULL,
54
+ workdir TEXT NOT NULL,
55
+ session_name TEXT NOT NULL,
56
+ environment TEXT NOT NULL DEFAULT 'host',
57
+ permission_mode TEXT NOT NULL DEFAULT 'safe',
58
+ status TEXT NOT NULL DEFAULT 'running',
59
+ started_at INTEGER NOT NULL,
60
+ ended_at INTEGER
61
+ )
62
+ `);
63
+ }
64
+ /**
65
+ * Create a new session record.
66
+ */
67
+ create(params) {
68
+ const id = `SES-${Date.now().toString(36).toUpperCase()}`;
69
+ const now = Date.now();
70
+ this.db.prepare(`
71
+ INSERT INTO sessions (id, agent_name, runner, task, workdir, session_name, environment, permission_mode, status, started_at)
72
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'running', ?)
73
+ `).run(id, params.agentName, params.runner, params.task, params.workdir, params.sessionName, params.environment, params.permissionMode, now);
74
+ return {
75
+ id,
76
+ agentName: params.agentName,
77
+ runner: params.runner,
78
+ task: params.task,
79
+ workdir: params.workdir,
80
+ sessionName: params.sessionName,
81
+ environment: params.environment,
82
+ permissionMode: params.permissionMode,
83
+ status: 'running',
84
+ startedAt: new Date(now),
85
+ };
86
+ }
87
+ /**
88
+ * Get a session by ID or agent name.
89
+ */
90
+ get(idOrName) {
91
+ const row = this.db.prepare(`SELECT * FROM sessions WHERE id = ? OR agent_name = ? ORDER BY started_at DESC LIMIT 1`).get(idOrName, idOrName);
92
+ return row ? rowToSession(row) : null;
93
+ }
94
+ /**
95
+ * Get a session by tmux session name.
96
+ */
97
+ getBySessionName(sessionName) {
98
+ const row = this.db.prepare(`SELECT * FROM sessions WHERE session_name = ? ORDER BY started_at DESC LIMIT 1`).get(sessionName);
99
+ return row ? rowToSession(row) : null;
100
+ }
101
+ /**
102
+ * List sessions, optionally filtered by status.
103
+ */
104
+ list(status) {
105
+ let rows;
106
+ if (status) {
107
+ rows = this.db.prepare(`SELECT * FROM sessions WHERE status = ? ORDER BY started_at DESC`).all(status);
108
+ }
109
+ else {
110
+ rows = this.db.prepare(`SELECT * FROM sessions ORDER BY started_at DESC`).all();
111
+ }
112
+ return rows.map(rowToSession);
113
+ }
114
+ /**
115
+ * Update session status.
116
+ */
117
+ updateStatus(id, status) {
118
+ const endedAt = (status === 'done' || status === 'error' || status === 'stopped') ? Date.now() : null;
119
+ this.db.prepare(`UPDATE sessions SET status = ?, ended_at = COALESCE(?, ended_at) WHERE id = ?`).run(status, endedAt, id);
120
+ }
121
+ /**
122
+ * Reconcile session statuses with actual tmux sessions.
123
+ * Marks sessions as 'done' if their tmux session no longer exists.
124
+ */
125
+ reconcile() {
126
+ const running = this.list('running');
127
+ for (const session of running) {
128
+ if (!this.isTmuxSessionAlive(session.sessionName)) {
129
+ this.updateStatus(session.id, 'done');
130
+ }
131
+ }
132
+ }
133
+ /**
134
+ * Resolve an identifier to a session.
135
+ * Tries: exact ID match, agent name, partial match on agent name or session name.
136
+ */
137
+ resolve(identifier) {
138
+ // Exact ID match
139
+ const byId = this.get(identifier);
140
+ if (byId)
141
+ return byId;
142
+ // Partial agent name match (prefer running sessions)
143
+ const allSessions = this.list();
144
+ const running = allSessions.filter(s => s.status === 'running');
145
+ const pool = running.length > 0 ? running : allSessions;
146
+ const match = pool.find(s => s.agentName.includes(identifier) ||
147
+ s.sessionName.includes(identifier) ||
148
+ s.id.includes(identifier.toUpperCase()));
149
+ return match ?? null;
150
+ }
151
+ /**
152
+ * Check if a tmux session is alive.
153
+ */
154
+ isTmuxSessionAlive(sessionName) {
155
+ try {
156
+ execSync(`tmux has-session -t "${sessionName}" 2>/dev/null`, { stdio: 'pipe' });
157
+ return true;
158
+ }
159
+ catch {
160
+ return false;
161
+ }
162
+ }
163
+ close() {
164
+ this.db.close();
165
+ }
166
+ }
167
+ //# sourceMappingURL=session-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/lib/session-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Shortcut Configuration Storage
3
+ *
4
+ * Stores Shortcut credentials and preferences in the workspace_settings table.
5
+ * Mirrors the Jira config module pattern.
6
+ */
7
+ import Database from 'better-sqlite3';
8
+ export interface ShortcutConfig {
9
+ apiToken: string;
10
+ workspaceSlug?: string;
11
+ }
12
+ /**
13
+ * Check if Shortcut is configured.
14
+ * Returns true if either:
15
+ * - Database has shortcut.api_token stored, OR
16
+ * - Environment variables PRLT_SHORTCUT_API_TOKEN/SHORTCUT_API_TOKEN are set
17
+ */
18
+ export declare function isShortcutConfigured(db: Database.Database): boolean;
19
+ /**
20
+ * Load Shortcut configuration from the database + environment.
21
+ * Returns null if not configured.
22
+ */
23
+ export declare function loadShortcutConfig(db: Database.Database): ShortcutConfig | null;
24
+ /**
25
+ * Save Shortcut configuration to the database.
26
+ */
27
+ export declare function saveShortcutConfig(db: Database.Database, config: ShortcutConfig): void;
28
+ /**
29
+ * Save the Shortcut API token.
30
+ */
31
+ export declare function saveShortcutApiToken(db: Database.Database, apiToken: string): void;
32
+ /**
33
+ * Save the Shortcut workspace slug.
34
+ */
35
+ export declare function saveShortcutWorkspaceSlug(db: Database.Database, slug: string): void;
36
+ /**
37
+ * Clear all Shortcut configuration from the database.
38
+ */
39
+ export declare function clearShortcutConfig(db: Database.Database): void;
40
+ /**
41
+ * Get the stored Shortcut API token.
42
+ * Also checks PRLT_SHORTCUT_API_TOKEN and SHORTCUT_API_TOKEN environment variables.
43
+ */
44
+ export declare function getShortcutApiToken(db: Database.Database): string | null;
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Shortcut Configuration Storage
3
+ *
4
+ * Stores Shortcut credentials and preferences in the workspace_settings table.
5
+ * Mirrors the Jira config module pattern.
6
+ */
7
+ const SETTINGS_TABLE = 'workspace_settings';
8
+ const SHORTCUT_CONFIG_KEYS = {
9
+ apiToken: 'shortcut.api_token',
10
+ workspaceSlug: 'shortcut.workspace_slug',
11
+ };
12
+ function getSetting(db, key) {
13
+ const row = db
14
+ .prepare(`SELECT value FROM ${SETTINGS_TABLE} WHERE key = ?`)
15
+ .get(key);
16
+ return row?.value ?? null;
17
+ }
18
+ function setSetting(db, key, value) {
19
+ db.prepare(`
20
+ INSERT INTO ${SETTINGS_TABLE} (key, value)
21
+ VALUES (?, ?)
22
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value
23
+ `).run(key, value);
24
+ }
25
+ function deleteSetting(db, key) {
26
+ db.prepare(`DELETE FROM ${SETTINGS_TABLE} WHERE key = ?`).run(key);
27
+ }
28
+ /**
29
+ * Check if Shortcut is configured.
30
+ * Returns true if either:
31
+ * - Database has shortcut.api_token stored, OR
32
+ * - Environment variables PRLT_SHORTCUT_API_TOKEN/SHORTCUT_API_TOKEN are set
33
+ */
34
+ export function isShortcutConfigured(db) {
35
+ const hasDbConfig = getSetting(db, SHORTCUT_CONFIG_KEYS.apiToken) !== null;
36
+ if (hasDbConfig)
37
+ return true;
38
+ const hasEnvToken = !!(process.env.PRLT_SHORTCUT_API_TOKEN || process.env.SHORTCUT_API_TOKEN);
39
+ return hasEnvToken;
40
+ }
41
+ /**
42
+ * Load Shortcut configuration from the database + environment.
43
+ * Returns null if not configured.
44
+ */
45
+ export function loadShortcutConfig(db) {
46
+ const apiToken = getSetting(db, SHORTCUT_CONFIG_KEYS.apiToken)
47
+ || process.env.PRLT_SHORTCUT_API_TOKEN
48
+ || process.env.SHORTCUT_API_TOKEN;
49
+ if (!apiToken)
50
+ return null;
51
+ return {
52
+ apiToken,
53
+ workspaceSlug: getSetting(db, SHORTCUT_CONFIG_KEYS.workspaceSlug)
54
+ || process.env.PRLT_SHORTCUT_WORKSPACE
55
+ || process.env.SHORTCUT_WORKSPACE_SLUG
56
+ || undefined,
57
+ };
58
+ }
59
+ /**
60
+ * Save Shortcut configuration to the database.
61
+ */
62
+ export function saveShortcutConfig(db, config) {
63
+ setSetting(db, SHORTCUT_CONFIG_KEYS.apiToken, config.apiToken);
64
+ if (config.workspaceSlug) {
65
+ setSetting(db, SHORTCUT_CONFIG_KEYS.workspaceSlug, config.workspaceSlug);
66
+ }
67
+ }
68
+ /**
69
+ * Save the Shortcut API token.
70
+ */
71
+ export function saveShortcutApiToken(db, apiToken) {
72
+ setSetting(db, SHORTCUT_CONFIG_KEYS.apiToken, apiToken);
73
+ }
74
+ /**
75
+ * Save the Shortcut workspace slug.
76
+ */
77
+ export function saveShortcutWorkspaceSlug(db, slug) {
78
+ setSetting(db, SHORTCUT_CONFIG_KEYS.workspaceSlug, slug);
79
+ }
80
+ /**
81
+ * Clear all Shortcut configuration from the database.
82
+ */
83
+ export function clearShortcutConfig(db) {
84
+ for (const key of Object.values(SHORTCUT_CONFIG_KEYS)) {
85
+ deleteSetting(db, key);
86
+ }
87
+ }
88
+ /**
89
+ * Get the stored Shortcut API token.
90
+ * Also checks PRLT_SHORTCUT_API_TOKEN and SHORTCUT_API_TOKEN environment variables.
91
+ */
92
+ export function getShortcutApiToken(db) {
93
+ const envKey = process.env.PRLT_SHORTCUT_API_TOKEN || process.env.SHORTCUT_API_TOKEN;
94
+ if (envKey)
95
+ return envKey;
96
+ return getSetting(db, SHORTCUT_CONFIG_KEYS.apiToken);
97
+ }
98
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/shortcut/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Shortcut Integration Module
3
+ *
4
+ * Provides Shortcut configuration loading and validation.
5
+ */
6
+ export { isShortcutConfigured, loadShortcutConfig, saveShortcutConfig, saveShortcutApiToken, saveShortcutWorkspaceSlug, clearShortcutConfig, getShortcutApiToken, } from './config.js';
7
+ export type { ShortcutConfig } from './config.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Shortcut Integration Module
3
+ *
4
+ * Provides Shortcut configuration loading and validation.
5
+ */
6
+ export { isShortcutConfigured, loadShortcutConfig, saveShortcutConfig, saveShortcutApiToken, saveShortcutWorkspaceSlug, clearShortcutConfig, getShortcutApiToken, } from './config.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/shortcut/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAA"}
@@ -20,6 +20,7 @@
20
20
  * trackChildProcess(childProc)
21
21
  * ```
22
22
  */
23
+ import { shutdownAnalytics } from './telemetry/analytics.js';
23
24
  const cleanupCallbacks = [];
24
25
  const trackedProcesses = new Set();
25
26
  let isShuttingDown = false;
@@ -55,6 +56,13 @@ async function shutdown() {
55
56
  }
56
57
  }
57
58
  cleanupCallbacks.length = 0;
59
+ // Flush pending analytics events before exit
60
+ try {
61
+ await shutdownAnalytics();
62
+ }
63
+ catch {
64
+ // Never let analytics errors block shutdown
65
+ }
58
66
  // Exit with 130 = 128 + 2 (SIGINT)
59
67
  process.exit(130);
60
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"signal-handler.js","sourceRoot":"","sources":["../../src/lib/signal-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal-handler.js","sourceRoot":"","sources":["../../src/lib/signal-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAK5D,MAAM,gBAAgB,GAAgB,EAAE,CAAA;AACxC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAgB,CAAA;AAChD,IAAI,cAAc,GAAG,KAAK,CAAA;AAC1B,IAAI,SAAS,GAAG,KAAK,CAAA;AAErB;;;GAGG;AACH,KAAK,UAAU,QAAQ;IACrB,IAAI,cAAc;QAAE,OAAM;IAC1B,cAAc,GAAG,IAAI,CAAA;IAErB,qCAAqC;IACrC,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;IACH,CAAC;IACD,gBAAgB,CAAC,KAAK,EAAE,CAAA;IAExB,0DAA0D;IAC1D,MAAM,SAAS,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAA;IACjD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,CAAA;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;IACH,CAAC;IACD,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAA;IAE3B,6CAA6C;IAC7C,IAAI,CAAC;QACH,MAAM,iBAAiB,EAAE,CAAA;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;IAED,mCAAmC;IACnC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,IAAI,SAAS;QAAE,OAAM;IACrB,SAAS,GAAG,IAAI,CAAA;IAEhB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,sDAAsD;QACtD,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;QACD,KAAK,QAAQ,EAAE,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,KAAK,QAAQ,EAAE,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,EAAa;IACtC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACzB,OAAO,GAAG,EAAE;QACV,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACxC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACjC,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAmB;IACnD,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC3B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,cAAc,CAAA;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAI,QAA0B;IACtE,IAAI,cAAc,EAAE,CAAC;QACnB,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACnB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,EAAE,CAAA;IACzB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,oDAAoD;QACpD,IAAI,cAAc,EAAE,CAAC;YACnB,8CAA8C;YAC9C,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE;gBACrB,qDAAqD;YACvD,CAAC,CAAC,CAAA;YACF,wCAAwC;YACxC,MAAM,KAAK,CAAA;QACb,CAAC;QAED,gEAAgE;QAChE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,IACE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACvC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EACvC,CAAC;YACD,oEAAoE;YACpE,KAAK,QAAQ,EAAE,CAAA;YACf,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAC3B,MAAM,KAAK,CAAA,CAAC,cAAc;QAC5B,CAAC;QAED,iCAAiC;QACjC,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -26,6 +26,7 @@ const FLUSH_TIMEOUT_MS = 2000;
26
26
  let statsigClient = null;
27
27
  let telemetryConfig = null;
28
28
  let cliVersion = null;
29
+ let initPromise = null;
29
30
  // ─── Telemetry Config ────────────────────────────────────────────────────────
30
31
  function getTelemetryConfigPath() {
31
32
  return path.join(getMachineConfigDir(), 'telemetry.json');
@@ -159,24 +160,27 @@ export function getMachineId() {
159
160
  * Initialize the Statsig SDK. Called from the init hook.
160
161
  * No-op if telemetry is disabled.
161
162
  */
162
- export async function initAnalytics(version) {
163
+ export function initAnalytics(version) {
163
164
  cliVersion = version;
164
165
  if (!isTelemetryEnabled())
165
- return;
166
+ return Promise.resolve();
166
167
  showTelemetryNotice();
167
- try {
168
- const { StatsigClient: StatsigClientClass } = await import('@statsig/js-client');
169
- const client = new StatsigClientClass(STATSIG_CLIENT_KEY, { userID: getMachineId(), custom: { cli_version: version } });
170
- await client.initializeAsync();
171
- statsigClient = client;
172
- // Share Statsig client with feature-flags for synchronous gate checks
173
- const { setStatsigClient } = await import('./feature-flags.js');
174
- setStatsigClient(client);
175
- }
176
- catch {
177
- // If Statsig can't initialize, fail silently — analytics should never break the CLI
178
- statsigClient = null;
179
- }
168
+ initPromise = (async () => {
169
+ try {
170
+ const { StatsigClient: StatsigClientClass } = await import('@statsig/js-client');
171
+ const client = new StatsigClientClass(STATSIG_CLIENT_KEY, { userID: getMachineId(), custom: { cli_version: version } });
172
+ await client.initializeAsync();
173
+ statsigClient = client;
174
+ // Share Statsig client with feature-flags for synchronous gate checks
175
+ const { setStatsigClient } = await import('./feature-flags.js');
176
+ setStatsigClient(client);
177
+ }
178
+ catch {
179
+ // If Statsig can't initialize, fail silently — analytics should never break the CLI
180
+ statsigClient = null;
181
+ }
182
+ })();
183
+ return initPromise;
180
184
  }
181
185
  // ─── Event Tracking ──────────────────────────────────────────────────────────
182
186
  /**
@@ -264,6 +268,16 @@ export function trackMCPToolCalled(options) {
264
268
  * Called from the postrun hook. Times out to avoid blocking CLI exit.
265
269
  */
266
270
  export async function shutdownAnalytics() {
271
+ // Wait for init to complete so late-tracked events have a client
272
+ if (initPromise) {
273
+ try {
274
+ await initPromise;
275
+ }
276
+ catch {
277
+ // Init may have failed — continue to cleanup
278
+ }
279
+ initPromise = null;
280
+ }
267
281
  if (!statsigClient)
268
282
  return;
269
283
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../src/lib/telemetry/analytics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../src/lib/telemetry/analytics.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,31 @@ export declare function detectPackageManager(): PackageManager;
37
37
  * Get the update command string for the detected package manager.
38
38
  */
39
39
  export declare function getUpdateCommand(pm: PackageManager): string;
40
+ /**
41
+ * Resolve the local filesystem path for the Homebrew tap.
42
+ * Returns null if the tap directory doesn't exist.
43
+ */
44
+ export declare function getBrewTapPath(): string | null;
45
+ export interface StaleTapResult {
46
+ /** Whether the tap is stale (local HEAD behind origin/main) */
47
+ isStale: boolean;
48
+ /** Local HEAD commit hash (short) */
49
+ localHead?: string;
50
+ /** Remote HEAD commit hash (short) */
51
+ remoteHead?: string;
52
+ }
53
+ /**
54
+ * Check whether the local Homebrew tap checkout is behind origin/main.
55
+ *
56
+ * Runs a quick `git fetch --dry-run` to update remote refs, then compares
57
+ * local HEAD against origin/main. Returns { isStale: false } for any error
58
+ * or when the tap is not installed (non-brew installs).
59
+ */
60
+ export declare function checkStaleTap(tapPath?: string | null): StaleTapResult;
61
+ /**
62
+ * Get the remediation commands for a stale Homebrew tap.
63
+ */
64
+ export declare function getStaleTapCommands(): string[];
40
65
  /**
41
66
  * Fetch the latest version using the appropriate source for the package manager.
42
67
  * For brew installs, uses the Homebrew API (avoids false positives from npm).
@@ -59,6 +84,8 @@ export interface UpdateInfo {
59
84
  packageManager: PackageManager;
60
85
  /** The command to run the update */
61
86
  updateCommand: string;
87
+ /** Whether the Homebrew tap is stale (only set for brew installs) */
88
+ staleTap?: StaleTapResult;
62
89
  }
63
90
  /**
64
91
  * Check if an update is available using cached data only (synchronous, never blocks).
@@ -138,6 +138,75 @@ export function getUpdateCommand(pm) {
138
138
  return 'npm install -g @proletariat/cli';
139
139
  }
140
140
  // ---------------------------------------------------------------------------
141
+ // Stale Homebrew tap detection
142
+ // ---------------------------------------------------------------------------
143
+ /** The Homebrew tap that hosts the prlt formula */
144
+ const HOMEBREW_TAP = 'chrismcdermut/homebrew-proletariat';
145
+ /**
146
+ * Resolve the local filesystem path for the Homebrew tap.
147
+ * Returns null if the tap directory doesn't exist.
148
+ */
149
+ export function getBrewTapPath() {
150
+ const prefixes = ['/opt/homebrew/Library/Taps', '/usr/local/Homebrew/Library/Taps'];
151
+ for (const prefix of prefixes) {
152
+ const tapDir = path.join(prefix, HOMEBREW_TAP);
153
+ if (fs.existsSync(tapDir)) {
154
+ return tapDir;
155
+ }
156
+ }
157
+ return null;
158
+ }
159
+ /**
160
+ * Check whether the local Homebrew tap checkout is behind origin/main.
161
+ *
162
+ * Runs a quick `git fetch --dry-run` to update remote refs, then compares
163
+ * local HEAD against origin/main. Returns { isStale: false } for any error
164
+ * or when the tap is not installed (non-brew installs).
165
+ */
166
+ export function checkStaleTap(tapPath) {
167
+ const resolvedPath = tapPath ?? getBrewTapPath();
168
+ if (!resolvedPath) {
169
+ return { isStale: false };
170
+ }
171
+ try {
172
+ // Fetch latest remote refs (quick, no data transfer for up-to-date repos)
173
+ execSync('git fetch origin --quiet', {
174
+ cwd: resolvedPath,
175
+ stdio: ['pipe', 'pipe', 'pipe'],
176
+ timeout: 10_000,
177
+ });
178
+ const localHead = execSync('git rev-parse --short HEAD', {
179
+ cwd: resolvedPath,
180
+ encoding: 'utf-8',
181
+ stdio: ['pipe', 'pipe', 'pipe'],
182
+ timeout: 3000,
183
+ }).trim();
184
+ const remoteHead = execSync('git rev-parse --short origin/main', {
185
+ cwd: resolvedPath,
186
+ encoding: 'utf-8',
187
+ stdio: ['pipe', 'pipe', 'pipe'],
188
+ timeout: 3000,
189
+ }).trim();
190
+ if (localHead !== remoteHead) {
191
+ return { isStale: true, localHead, remoteHead };
192
+ }
193
+ return { isStale: false, localHead, remoteHead };
194
+ }
195
+ catch {
196
+ // Any git error → treat as non-stale (don't block user)
197
+ return { isStale: false };
198
+ }
199
+ }
200
+ /**
201
+ * Get the remediation commands for a stale Homebrew tap.
202
+ */
203
+ export function getStaleTapCommands() {
204
+ return [
205
+ `brew tap --force chrismcdermut/proletariat`,
206
+ `brew upgrade chrismcdermut/proletariat/prlt`,
207
+ ];
208
+ }
209
+ // ---------------------------------------------------------------------------
141
210
  // Version fetching
142
211
  // ---------------------------------------------------------------------------
143
212
  /**
@@ -224,12 +293,15 @@ export function getCachedUpdateInfo(currentVersion) {
224
293
  const updateAvailable = latestVersion !== null &&
225
294
  isNewerVersion(currentVersion, latestVersion) &&
226
295
  cache.dismissed_version !== latestVersion;
296
+ // Check for stale Homebrew tap when using brew and an update is expected
297
+ const staleTap = pm === 'brew' ? checkStaleTap() : undefined;
227
298
  return {
228
299
  updateAvailable,
229
300
  currentVersion,
230
301
  latestVersion,
231
302
  packageManager: pm,
232
303
  updateCommand,
304
+ staleTap,
233
305
  };
234
306
  }
235
307
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/lib/update-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/lib/update-check.ts"],"names":[],"mappings":"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"}