@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.
- package/README.md +5 -4
- package/dist/commands/agent/cleanup.d.ts +1 -0
- package/dist/commands/agent/cleanup.js +11 -1
- package/dist/commands/agent/cleanup.js.map +1 -1
- package/dist/commands/agent/rebuild.js +1 -1
- package/dist/commands/agent/rebuild.js.map +1 -1
- package/dist/commands/asana/import.d.ts +14 -0
- package/dist/commands/asana/import.js +240 -0
- package/dist/commands/asana/import.js.map +1 -0
- package/dist/commands/claude-yolo.d.ts +20 -0
- package/dist/commands/claude-yolo.js +86 -0
- package/dist/commands/claude-yolo.js.map +1 -0
- package/dist/commands/codex/index.d.ts +23 -0
- package/dist/commands/codex/index.js +168 -0
- package/dist/commands/codex/index.js.map +1 -0
- package/dist/commands/codex-yolo.d.ts +20 -0
- package/dist/commands/codex-yolo.js +86 -0
- package/dist/commands/codex-yolo.js.map +1 -0
- package/dist/commands/config/index.js +2 -2
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/docker/clean.js +1 -1
- package/dist/commands/docker/clean.js.map +1 -1
- package/dist/commands/docker/list.js +1 -1
- package/dist/commands/docker/list.js.map +1 -1
- package/dist/commands/docker/logs.js +1 -1
- package/dist/commands/docker/logs.js.map +1 -1
- package/dist/commands/docker/restart.js +1 -1
- package/dist/commands/docker/restart.js.map +1 -1
- package/dist/commands/docker/shell.js +1 -1
- package/dist/commands/docker/shell.js.map +1 -1
- package/dist/commands/docker/start.js +1 -1
- package/dist/commands/docker/start.js.map +1 -1
- package/dist/commands/docker/stop.js +1 -1
- package/dist/commands/docker/stop.js.map +1 -1
- package/dist/commands/docker/sync.js +1 -1
- package/dist/commands/docker/sync.js.map +1 -1
- package/dist/commands/execution/config.js +2 -2
- package/dist/commands/execution/config.js.map +1 -1
- package/dist/commands/execution/list.js +1 -1
- package/dist/commands/execution/list.js.map +1 -1
- package/dist/commands/execution/logs.js +10 -8
- package/dist/commands/execution/logs.js.map +1 -1
- package/dist/commands/execution/stop.js +1 -1
- package/dist/commands/execution/stop.js.map +1 -1
- package/dist/commands/execution/view.js +1 -1
- package/dist/commands/execution/view.js.map +1 -1
- package/dist/commands/init.d.ts +0 -16
- package/dist/commands/init.js +50 -160
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/logs.d.ts +20 -0
- package/dist/commands/logs.js +84 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/mcp-server.js +1 -1
- package/dist/commands/mcp-server.js.map +1 -1
- package/dist/commands/new.d.ts +27 -0
- package/dist/commands/new.js +184 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/orchestrator/attach.d.ts +1 -0
- package/dist/commands/orchestrator/attach.js +159 -26
- package/dist/commands/orchestrator/attach.js.map +1 -1
- package/dist/commands/orchestrator/start.d.ts +20 -0
- package/dist/commands/orchestrator/start.js +122 -14
- package/dist/commands/orchestrator/start.js.map +1 -1
- package/dist/commands/orchestrator/status.d.ts +4 -0
- package/dist/commands/orchestrator/status.js +70 -29
- package/dist/commands/orchestrator/status.js.map +1 -1
- package/dist/commands/orchestrator/stop.js +57 -23
- package/dist/commands/orchestrator/stop.js.map +1 -1
- package/dist/commands/peek.d.ts +20 -0
- package/dist/commands/peek.js +84 -0
- package/dist/commands/peek.js.map +1 -0
- package/dist/commands/poke.d.ts +20 -0
- package/dist/commands/poke.js +89 -0
- package/dist/commands/poke.js.map +1 -0
- package/dist/commands/pr/link.js +1 -1
- package/dist/commands/pr/link.js.map +1 -1
- package/dist/commands/pr/status.js +1 -1
- package/dist/commands/pr/status.js.map +1 -1
- package/dist/commands/ps.d.ts +18 -0
- package/dist/commands/ps.js +123 -0
- package/dist/commands/ps.js.map +1 -0
- package/dist/commands/qa/index.js +1 -1
- package/dist/commands/qa/index.js.map +1 -1
- package/dist/commands/repo/add.js +1 -1
- package/dist/commands/repo/add.js.map +1 -1
- package/dist/commands/repo/list.js +1 -1
- package/dist/commands/repo/list.js.map +1 -1
- package/dist/commands/repo/remove.js +1 -1
- package/dist/commands/repo/remove.js.map +1 -1
- package/dist/commands/repo/view.js +1 -1
- package/dist/commands/repo/view.js.map +1 -1
- package/dist/commands/run/index.d.ts +25 -0
- package/dist/commands/run/index.js +212 -0
- package/dist/commands/run/index.js.map +1 -0
- package/dist/commands/session/index.js +4 -0
- package/dist/commands/session/index.js.map +1 -1
- package/dist/commands/session/prune.d.ts +18 -0
- package/dist/commands/session/prune.js +327 -0
- package/dist/commands/session/prune.js.map +1 -0
- package/dist/commands/shortcut/connect.d.ts +15 -0
- package/dist/commands/shortcut/connect.js +210 -0
- package/dist/commands/shortcut/connect.js.map +1 -0
- package/dist/commands/stop.d.ts +19 -0
- package/dist/commands/stop.js +83 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/work/asana.d.ts +23 -0
- package/dist/commands/work/asana.js +213 -0
- package/dist/commands/work/asana.js.map +1 -0
- package/dist/commands/work/complete.js +1 -1
- package/dist/commands/work/complete.js.map +1 -1
- package/dist/commands/work/ready.js +1 -1
- package/dist/commands/work/ready.js.map +1 -1
- package/dist/commands/work/review.js +1 -1
- package/dist/commands/work/review.js.map +1 -1
- package/dist/commands/work/revise.js +1 -1
- package/dist/commands/work/revise.js.map +1 -1
- package/dist/commands/work/shortcut.d.ts +23 -0
- package/dist/commands/work/shortcut.js +212 -0
- package/dist/commands/work/shortcut.js.map +1 -0
- package/dist/commands/work/spawn.d.ts +3 -0
- package/dist/commands/work/spawn.js +175 -2
- package/dist/commands/work/spawn.js.map +1 -1
- package/dist/commands/work/start.js +22 -30
- package/dist/commands/work/start.js.map +1 -1
- package/dist/commands/work/watch.js +1 -1
- package/dist/commands/work/watch.js.map +1 -1
- package/dist/commands/workspace/add.js +1 -1
- package/dist/commands/workspace/add.js.map +1 -1
- package/dist/commands/workspace/list.js +1 -1
- package/dist/commands/workspace/list.js.map +1 -1
- package/dist/hooks/init.d.ts +1 -1
- package/dist/hooks/init.js +9 -7
- package/dist/hooks/init.js.map +1 -1
- package/dist/lib/agent-naming.d.ts +15 -0
- package/dist/lib/agent-naming.js +32 -0
- package/dist/lib/agent-naming.js.map +1 -0
- package/dist/lib/agents/commands.d.ts +2 -0
- package/dist/lib/agents/commands.js +51 -44
- package/dist/lib/agents/commands.js.map +1 -1
- package/dist/lib/agents/index.js +5 -0
- package/dist/lib/agents/index.js.map +1 -1
- package/dist/lib/asana/client.d.ts +8 -0
- package/dist/lib/asana/client.js +26 -7
- package/dist/lib/asana/client.js.map +1 -1
- package/dist/lib/asana/types.d.ts +20 -0
- package/dist/lib/branch/index.d.ts +36 -0
- package/dist/lib/branch/index.js +129 -0
- package/dist/lib/branch/index.js.map +1 -1
- package/dist/lib/database/drizzle-schema.d.ts +2 -2
- package/dist/lib/database/index.js +1 -1
- package/dist/lib/database/index.js.map +1 -1
- package/dist/lib/events/emitting-runner.d.ts +30 -0
- package/dist/lib/events/emitting-runner.js +95 -0
- package/dist/lib/events/emitting-runner.js.map +1 -0
- package/dist/lib/events/event-bus.d.ts +54 -0
- package/dist/lib/events/event-bus.js +107 -0
- package/dist/lib/events/event-bus.js.map +1 -0
- package/dist/lib/events/events.d.ts +67 -0
- package/dist/lib/events/events.js +8 -0
- package/dist/lib/events/events.js.map +1 -0
- package/dist/lib/events/index.d.ts +7 -0
- package/dist/lib/events/index.js +6 -0
- package/dist/lib/events/index.js.map +1 -0
- package/dist/lib/execution/devcontainer.d.ts +27 -0
- package/dist/lib/execution/devcontainer.js +80 -0
- package/dist/lib/execution/devcontainer.js.map +1 -1
- package/dist/lib/execution/runners.d.ts +28 -0
- package/dist/lib/execution/runners.js +459 -31
- package/dist/lib/execution/runners.js.map +1 -1
- package/dist/lib/execution/spawner.js +35 -17
- package/dist/lib/execution/spawner.js.map +1 -1
- package/dist/lib/execution/types.d.ts +1 -0
- package/dist/lib/execution/types.js.map +1 -1
- package/dist/lib/external-issues/adapters.d.ts +34 -0
- package/dist/lib/external-issues/adapters.js +191 -0
- package/dist/lib/external-issues/adapters.js.map +1 -1
- package/dist/lib/external-issues/asana.d.ts +75 -0
- package/dist/lib/external-issues/asana.js +243 -0
- package/dist/lib/external-issues/asana.js.map +1 -0
- package/dist/lib/external-issues/index.d.ts +5 -3
- package/dist/lib/external-issues/index.js +7 -3
- package/dist/lib/external-issues/index.js.map +1 -1
- package/dist/lib/external-issues/jira.d.ts +46 -0
- package/dist/lib/external-issues/jira.js +68 -0
- package/dist/lib/external-issues/jira.js.map +1 -1
- package/dist/lib/external-issues/linear.js +22 -2
- package/dist/lib/external-issues/linear.js.map +1 -1
- package/dist/lib/external-issues/mapping-store.js +1 -1
- package/dist/lib/external-issues/shortcut.d.ts +86 -0
- package/dist/lib/external-issues/shortcut.js +274 -0
- package/dist/lib/external-issues/shortcut.js.map +1 -0
- package/dist/lib/external-issues/types.d.ts +3 -3
- package/dist/lib/external-issues/types.js +1 -1
- package/dist/lib/external-issues/types.js.map +1 -1
- package/dist/lib/linear/client.js +2 -0
- package/dist/lib/linear/client.js.map +1 -1
- package/dist/lib/linear/mapper.d.ts +7 -1
- package/dist/lib/linear/mapper.js +42 -12
- package/dist/lib/linear/mapper.js.map +1 -1
- package/dist/lib/linear/types.d.ts +1 -0
- package/dist/lib/linear/types.js.map +1 -1
- package/dist/lib/mcp/tools/cli-passthrough.js +1 -1
- package/dist/lib/mcp/tools/cli-passthrough.js.map +1 -1
- package/dist/lib/mcp/tools/work.js +1 -1
- package/dist/lib/mcp/tools/work.js.map +1 -1
- package/dist/lib/pmo/index.d.ts +2 -2
- package/dist/lib/pmo/index.js +3 -3
- package/dist/lib/pmo/index.js.map +1 -1
- package/dist/lib/pmo/sync-manager.js +1 -1
- package/dist/lib/pmo/sync-manager.js.map +1 -1
- package/dist/lib/pmo/watcher.js +1 -1
- package/dist/lib/pmo/watcher.js.map +1 -1
- package/dist/lib/repos/index.js +1 -1
- package/dist/lib/repos/index.js.map +1 -1
- package/dist/lib/runners/agent-runner.d.ts +92 -0
- package/dist/lib/runners/agent-runner.js +9 -0
- package/dist/lib/runners/agent-runner.js.map +1 -0
- package/dist/lib/runners/claude-code-runner.d.ts +53 -0
- package/dist/lib/runners/claude-code-runner.js +132 -0
- package/dist/lib/runners/claude-code-runner.js.map +1 -0
- package/dist/lib/runners/index.d.ts +34 -0
- package/dist/lib/runners/index.js +97 -0
- package/dist/lib/runners/index.js.map +1 -0
- package/dist/lib/session-store.d.ts +70 -0
- package/dist/lib/session-store.js +167 -0
- package/dist/lib/session-store.js.map +1 -0
- package/dist/lib/shortcut/config.d.ts +44 -0
- package/dist/lib/shortcut/config.js +98 -0
- package/dist/lib/shortcut/config.js.map +1 -0
- package/dist/lib/shortcut/index.d.ts +7 -0
- package/dist/lib/shortcut/index.js +7 -0
- package/dist/lib/shortcut/index.js.map +1 -0
- package/dist/lib/signal-handler.js +8 -0
- package/dist/lib/signal-handler.js.map +1 -1
- package/dist/lib/telemetry/analytics.js +29 -15
- package/dist/lib/telemetry/analytics.js.map +1 -1
- package/dist/lib/update-check.d.ts +27 -0
- package/dist/lib/update-check.js +72 -0
- package/dist/lib/update-check.js.map +1 -1
- package/dist/lib/update-prompt.d.ts +10 -2
- package/dist/lib/update-prompt.js +38 -5
- package/dist/lib/update-prompt.js.map +1 -1
- package/dist/lib/work-source/client.d.ts +10 -0
- package/dist/lib/work-source/client.js +74 -0
- package/dist/lib/work-source/client.js.map +1 -0
- package/dist/lib/work-source/config.d.ts +1 -1
- package/dist/lib/work-source/config.js +17 -1
- package/dist/lib/work-source/config.js.map +1 -1
- package/dist/lib/work-source/index.d.ts +1 -0
- package/dist/lib/work-source/index.js +1 -0
- package/dist/lib/work-source/index.js.map +1 -1
- package/dist/lib/workspace.js +2 -2
- package/dist/lib/workspace.js.map +1 -1
- package/oclif.manifest.json +2230 -1187
- 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":"AAAA;;;;;GAKG;AAIH,MAAM,cAAc,GAAG,oBAAoB,CAAA;AAE3C,MAAM,oBAAoB,GAAG;IAC3B,QAAQ,EAAE,oBAAoB;IAC9B,aAAa,EAAE,yBAAyB;CAChC,CAAA;AAOV,SAAS,UAAU,CAAC,EAAqB,EAAE,GAAW;IACpD,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CAAC,qBAAqB,cAAc,gBAAgB,CAAC;SAC5D,GAAG,CAAC,GAAG,CAAkC,CAAA;IAC5C,OAAO,GAAG,EAAE,KAAK,IAAI,IAAI,CAAA;AAC3B,CAAC;AAED,SAAS,UAAU,CAAC,EAAqB,EAAE,GAAW,EAAE,KAAa;IACnE,EAAE,CAAC,OAAO,CAAC;kBACK,cAAc;;;GAG7B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AACpB,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB,EAAE,GAAW;IACvD,EAAE,CAAC,OAAO,CAAC,eAAe,cAAc,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAqB;IACxD,MAAM,WAAW,GAAG,UAAU,CAAC,EAAE,EAAE,oBAAoB,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAA;IAC1E,IAAI,WAAW;QAAE,OAAO,IAAI,CAAA;IAE5B,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IAC7F,OAAO,WAAW,CAAA;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAqB;IACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,EAAE,oBAAoB,CAAC,QAAQ,CAAC;WACzD,OAAO,CAAC,GAAG,CAAC,uBAAuB;WACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAA;IAEnC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAE1B,OAAO;QACL,QAAQ;QACR,aAAa,EAAE,UAAU,CAAC,EAAE,EAAE,oBAAoB,CAAC,aAAa,CAAC;eAC5D,OAAO,CAAC,GAAG,CAAC,uBAAuB;eACnC,OAAO,CAAC,GAAG,CAAC,uBAAuB;eACnC,SAAS;KACf,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAqB,EAAE,MAAsB;IAC9E,UAAU,CAAC,EAAE,EAAE,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC9D,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,UAAU,CAAC,EAAE,EAAE,oBAAoB,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;IAC1E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAqB,EAAE,QAAgB;IAC1E,UAAU,CAAC,EAAE,EAAE,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,EAAqB,EAAE,IAAY;IAC3E,UAAU,CAAC,EAAE,EAAE,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAqB;IACvD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACtD,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACxB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAqB;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAA;IACpF,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,OAAO,UAAU,CAAC,EAAE,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAA;AACtD,CAAC"}
|
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"signal-handler.js","sourceRoot":"","sources":["../../src/lib/signal-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
163
|
+
export function initAnalytics(version) {
|
|
163
164
|
cliVersion = version;
|
|
164
165
|
if (!isTelemetryEnabled())
|
|
165
|
-
return;
|
|
166
|
+
return Promise.resolve();
|
|
166
167
|
showTelemetryNotice();
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAElF,uEAAuE;AACvE,MAAM,kBAAkB,GAAG,oDAAoD,CAAA;AAE/E,qDAAqD;AACrD,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAkC7B,qBAAqB;AACrB,IAAI,aAAa,GAAiC,IAAI,CAAA;AACtD,IAAI,eAAe,GAA2B,IAAI,CAAA;AAClD,IAAI,UAAU,GAAkB,IAAI,CAAA;
|
|
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).
|
package/dist/lib/update-check.js
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAcjF,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,2CAA2C;AAC3C,MAAM,oBAAoB,GAAG,EAAE,CAAA;AAE/B,2CAA2C;AAC3C,MAAM,gBAAgB,GAAG,kBAAkB,CAAA;AAE3C,+CAA+C;AAC/C,MAAM,gBAAgB,GAAG,0EAA0E,CAAA;AAEnG,4FAA4F;AAC5F,MAAM,mBAAmB,GAAG,iBAAiB,CAAA;AAE7C,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,oBAAoB,CAAC,CAAA;AAC/D,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;QACL,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,iBAAiB,EAAE,IAAI;KACxB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,eAAe,EAAE,CAAA;IAC1B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA+B,CAAA;QAChE,OAAO;YACL,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;YAC7C,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI;YAC/C,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI;SACpD,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,EAAE,CAAA;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAwB;IACjD,sBAAsB,EAAE,CAAA;IACxB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,QAAQ,GAAG,GAAG,SAAS,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAA;IAElD,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QACnE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;YACzB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAwB;IAClD,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAA;IAC7D,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;IAClE,OAAO,YAAY,IAAI,oBAAoB,CAAA;AAC7C,CAAC;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB;IAClC,sBAAsB;IACtB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAE,CAAA;IACnE,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,UAAU;QAAE,OAAO,MAAM,CAAA;IACvE,IAAI,WAAW,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAEvC,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,EAAE;YACrC,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,IAAI,EAAE,CAAA;QAET,IAAI,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9E,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAkB;IACjD,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QAClB,OAAO,6CAA6C,CAAA;IACtD,CAAC;IACD,OAAO,iCAAiC,CAAA;AAC1C,CAAC;AAED,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAE9E,mDAAmD;AACnD,MAAM,YAAY,GAAG,oCAAoC,CAAA;AAEzD;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,CAAC,4BAA4B,EAAE,kCAAkC,CAAC,CAAA;IACnF,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QAC9C,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAWD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,OAAuB;IACnD,MAAM,YAAY,GAAG,OAAO,IAAI,cAAc,EAAE,CAAA;IAChD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;IAED,IAAI,CAAC;QACH,0EAA0E;QAC1E,QAAQ,CAAC,0BAA0B,EAAE;YACnC,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,OAAO,EAAE,MAAM;SAChB,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,4BAA4B,EAAE;YACvD,GAAG,EAAE,YAAY;YACjB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,IAAI,EAAE,CAAA;QAET,MAAM,UAAU,GAAG,QAAQ,CAAC,mCAAmC,EAAE;YAC/D,GAAG,EAAE,YAAY;YACjB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,IAAI,EAAE,CAAA;QAET,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;QACjD,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;QACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,4CAA4C;QAC5C,6CAA6C;KAC9C,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;GAGG;AACH,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE;YAC7C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAA;QAE7B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwC,CAAA;QACxE,OAAO,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,eAAe;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,8BAA8B,gBAAgB,SAAS,CAAA;QACnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAA;QAE7B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0B,CAAA;QAC1D,OAAO,IAAI,EAAE,OAAO,IAAI,IAAI,CAAA;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAkB;IACzD,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QAClB,MAAM,WAAW,GAAG,MAAM,gBAAgB,EAAE,CAAA;QAC5C,IAAI,WAAW;YAAE,OAAO,WAAW,CAAA;QACnC,2CAA2C;IAC7C,CAAC;IAED,OAAO,eAAe,EAAE,CAAA;AAC1B,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,MAAc;IAC5D,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACvE,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;IACxB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACpB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACpB,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,IAAI,CAAA;QACxB,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,KAAK,CAAA;IAC3B,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAqBD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,cAAsB;IACxD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAA;IACjC,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAA;IAE1C,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAA;IAC1C,MAAM,eAAe,GACnB,aAAa,KAAK,IAAI;QACtB,cAAc,CAAC,cAAc,EAAE,aAAa,CAAC;QAC7C,KAAK,CAAC,iBAAiB,KAAK,aAAa,CAAA;IAE3C,yEAAyE;IACzE,MAAM,QAAQ,GAAG,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAE5D,OAAO;QACL,eAAe;QACf,cAAc;QACd,aAAa;QACb,cAAc,EAAE,EAAE;QAClB,aAAa;QACb,QAAQ;KACT,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAkB;IACvD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IAEzB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAM;IACR,CAAC;IAED,6CAA6C;IAC7C,kBAAkB,CAAC,EAAE,CAAC;SACnB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACf,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,YAAY,GAAG,SAAS,EAAE,CAAA,CAAC,yBAAyB;YAC1D,YAAY,CAAC,cAAc,GAAG,MAAM,CAAA;YACpC,YAAY,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;YACvD,UAAU,CAAC,YAAY,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE;QACV,4DAA4D;IAC9D,CAAC,CAAC,CAAA;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,KAAK,CAAC,iBAAiB,GAAG,OAAO,CAAA;IACjC,UAAU,CAAC,KAAK,CAAC,CAAA;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,gEAAgE;AAClE,CAAC"}
|