@melra/cli 0.3.0-alpha.10 → 0.3.0-alpha.12

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 (43) hide show
  1. package/README.md +11 -6
  2. package/dist/activity.d.ts +26 -0
  3. package/dist/activity.d.ts.map +1 -0
  4. package/dist/activity.js +401 -0
  5. package/dist/activity.js.map +1 -0
  6. package/dist/client-status.d.ts +24 -0
  7. package/dist/client-status.d.ts.map +1 -0
  8. package/dist/client-status.js +273 -0
  9. package/dist/client-status.js.map +1 -0
  10. package/dist/clients.d.ts +32 -0
  11. package/dist/clients.d.ts.map +1 -0
  12. package/dist/clients.js +584 -0
  13. package/dist/clients.js.map +1 -0
  14. package/dist/conformance.d.ts.map +1 -1
  15. package/dist/conformance.js +47 -7
  16. package/dist/conformance.js.map +1 -1
  17. package/dist/demo-workflow.d.ts +46 -0
  18. package/dist/demo-workflow.d.ts.map +1 -0
  19. package/dist/demo-workflow.js +58 -0
  20. package/dist/demo-workflow.js.map +1 -0
  21. package/dist/environment.d.ts +5 -1
  22. package/dist/environment.d.ts.map +1 -1
  23. package/dist/environment.js +15 -1
  24. package/dist/environment.js.map +1 -1
  25. package/dist/human.d.ts +67 -0
  26. package/dist/human.d.ts.map +1 -0
  27. package/dist/human.js +257 -0
  28. package/dist/human.js.map +1 -0
  29. package/dist/index.js +316 -72
  30. package/dist/index.js.map +1 -1
  31. package/dist/isolation.d.ts +35 -0
  32. package/dist/isolation.d.ts.map +1 -0
  33. package/dist/isolation.js +66 -0
  34. package/dist/isolation.js.map +1 -0
  35. package/dist/jsonc.d.ts +24 -0
  36. package/dist/jsonc.d.ts.map +1 -0
  37. package/dist/jsonc.js +238 -0
  38. package/dist/jsonc.js.map +1 -0
  39. package/dist/output.d.ts +28 -0
  40. package/dist/output.d.ts.map +1 -0
  41. package/dist/output.js +77 -0
  42. package/dist/output.js.map +1 -0
  43. package/package.json +10 -9
package/README.md CHANGED
@@ -6,10 +6,13 @@ Everything in one command, with nothing installed beforehand:
6
6
  npx @melra/cli@alpha setup
7
7
  ```
8
8
 
9
- `setup` writes a safe local policy, prints an MCP client configuration you can
10
- paste straight into your client, and runs every readiness check (Node,
11
- workspace, SQLite, browser, computer-use adapter, policy). It exits non-zero if
12
- a check fails and never overwrites an existing policy.
9
+ `setup` writes a safe local policy, produces an MCP client configuration, and
10
+ runs every readiness check (Node, workspace, SQLite, browser, computer-use
11
+ adapter, policy, MCP clients). In a terminal it asks which detected client to
12
+ set up and offers to write MELRA into that client's own config file;
13
+ `--client <name> --write` does the same without asking, and piped or with
14
+ `--json` it prints JSON. It exits non-zero if a check fails and never
15
+ overwrites an existing policy.
13
16
 
14
17
  To keep a resolved copy on the machine instead of resolving on every run:
15
18
 
@@ -24,8 +27,10 @@ version that wrote the config, since an `npx` install leaves no `melra` on your
24
27
  `PATH`.
25
28
 
26
29
  Individual steps are still available: `melra doctor` checks readiness and writes
27
- nothing, `melra init` writes the policy and config without checking. Run
28
- `melra help` for the full command list.
30
+ nothing, `melra init` writes the policy and config without checking. `melra
31
+ serve` speaks stdio, `--http` loopback HTTP with the console, and `--socket
32
+ <path>` a mode-`0600` Unix socket; `melra tasks`, `watch`, and `status` show what
33
+ MELRA is doing without a server. Run `melra help` for the full command list.
29
34
 
30
35
  `melra conformance` checks a running endpoint rather than a build — its own
31
36
  stdio server by default, or `--url` for a loopback HTTP one — and reports the
@@ -0,0 +1,26 @@
1
+ import { type TaskRecord, type TaskStatus } from "@melra/protocol";
2
+ import type { CliEnvironment } from "./environment.js";
3
+ export declare function taskTarget(task: TaskRecord): string;
4
+ export interface TasksOptions {
5
+ limit: number;
6
+ status?: TaskStatus;
7
+ json: boolean;
8
+ }
9
+ export declare function tasksCommand(env: CliEnvironment, options: TasksOptions): number;
10
+ /**
11
+ * Polls rather than subscribes: the writer may be another process (`melra
12
+ * serve`, a `melra run`), and SQLite has no cross-process change feed. Each poll
13
+ * is a short autocommit read on a read-only connection; in WAL mode a reader
14
+ * never blocks a writer, so a watch left open beside a server costs it nothing.
15
+ * Changes are found by diffing the last status seen per id, not by an
16
+ * `updatedAt` high-water mark, because two writes in the same millisecond would
17
+ * share a timestamp and a strict `>` would lose one of them.
18
+ */
19
+ export declare function watchCommand(env: CliEnvironment, options: {
20
+ json: boolean;
21
+ }): Promise<number>;
22
+ export declare function statusCommand(env: CliEnvironment, options: {
23
+ json: boolean;
24
+ policyPath?: string;
25
+ }): Promise<number>;
26
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,UAAU,EAEhB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiGvD,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAanD;AAMD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CA8C/E;AAoCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsF7F;AAmDD,wBAAsB,aAAa,CACjC,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,MAAM,CAAC,CA2FjB"}
@@ -0,0 +1,401 @@
1
+ // Copyright 2026 XAGI Labs Private Limited
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ // `melra tasks`, `melra watch`, and `melra status`: the terminal's view of what
4
+ // MELRA is doing, without starting a server. Everything here reads the store
5
+ // read-only and prints only what the store already holds — the redacted copy —
6
+ // so nothing raw, and no approval phrase, can reach the screen from here.
7
+ import { existsSync } from "node:fs";
8
+ import { stat } from "node:fs/promises";
9
+ import { connect } from "node:net";
10
+ import { join } from "node:path";
11
+ import { PRODUCT_VERSION, } from "@melra/protocol";
12
+ import { classifyOperation, loadPolicy } from "@melra/policy-core";
13
+ import { SqliteStore } from "@melra/storage-sqlite";
14
+ import { isHuman, paint, table } from "./output.js";
15
+ const DEFAULT_HTTP_PORT = 7457;
16
+ const POLL_MS = 1_000;
17
+ const APPROVAL_HINT = "approve from the agent that planned them";
18
+ /**
19
+ * A task as an observer may see it. The approval block goes entirely, not just
20
+ * its `phrase`: the phrase is `APPROVE ` plus the first twelve hex digits of
21
+ * `actionDigest`, so leaving the digest would print the phrase by another name.
22
+ * Approvals belong to the governed path; the console drops the block the same way.
23
+ */
24
+ function visible(task) {
25
+ const copy = { ...task };
26
+ delete copy.approval;
27
+ return copy;
28
+ }
29
+ function databasePath(env) {
30
+ return join(env.dataDirectory, "melra.sqlite");
31
+ }
32
+ // Read-only, and only if the database is already there: looking at MELRA must
33
+ // not create its state, and must never hold a lock a running server waits on.
34
+ function openStore(env) {
35
+ const path = databasePath(env);
36
+ return existsSync(path) ? new SqliteStore(path, { readOnly: true }) : undefined;
37
+ }
38
+ function withStore(env, empty, read) {
39
+ const store = openStore(env);
40
+ if (store === undefined)
41
+ return empty;
42
+ try {
43
+ return read(store);
44
+ }
45
+ finally {
46
+ store.close();
47
+ }
48
+ }
49
+ // A pipe or a script gets JSON; only a person at a terminal gets the table.
50
+ // The same rule as every other command, from the one place it lives.
51
+ function humanOutput(json) {
52
+ return isHuman(json ? ["--json"] : []);
53
+ }
54
+ function write(line = "") {
55
+ process.stdout.write(`${line}\n`);
56
+ }
57
+ // Status colours share `paint` with doctor and setup, so NO_COLOR, FORCE_COLOR,
58
+ // and TERM=dumb behave the same in every command.
59
+ const TONE = {
60
+ verified_success: paint.ok,
61
+ verified_complete: paint.ok,
62
+ failed: paint.fail,
63
+ policy_blocked: paint.fail,
64
+ budget_exhausted: paint.fail,
65
+ recovery_required: paint.fail,
66
+ partially_complete: paint.warn,
67
+ partial: paint.warn,
68
+ awaiting_approval: paint.warn,
69
+ awaiting_input: paint.warn,
70
+ waiting_user: paint.warn,
71
+ cancelled: paint.dim,
72
+ };
73
+ function tone(text, status) {
74
+ return (TONE[status] ?? ((plain) => plain))(text);
75
+ }
76
+ function ago(iso, now = Date.now()) {
77
+ const seconds = Math.max(0, Math.round((now - Date.parse(iso)) / 1000));
78
+ if (!Number.isFinite(seconds))
79
+ return "?";
80
+ if (seconds < 60)
81
+ return `${seconds}s ago`;
82
+ const minutes = Math.floor(seconds / 60);
83
+ if (minutes < 60)
84
+ return `${minutes}m ago`;
85
+ const hours = Math.floor(minutes / 60);
86
+ return hours < 48 ? `${hours}h ago` : `${Math.floor(hours / 24)}d ago`;
87
+ }
88
+ function truncate(text, width) {
89
+ return text.length <= width ? text : `${text.slice(0, width - 1)}…`;
90
+ }
91
+ function shortId(id) {
92
+ return id.slice(0, 8);
93
+ }
94
+ function operationName(task) {
95
+ const { kind, action } = task.request.operation;
96
+ return action === undefined ? kind : `${kind}.${action}`;
97
+ }
98
+ // From the one classifier policy uses, run over the stored (redacted) request,
99
+ // so the target shown is the target that was authorised. A record written by an
100
+ // older version may not classify; it still lists, just without a target.
101
+ export function taskTarget(task) {
102
+ // A command shows as what ran, `pnpm check`, not the classifier's
103
+ // `command:pnpm`: the stored arguments are already redacted (#122), and the
104
+ // console shows them the same way.
105
+ const operation = task.request.operation;
106
+ if (operation.kind === "terminal" && operation.command !== undefined) {
107
+ return [operation.command, ...(operation.args ?? [])].join(" ");
108
+ }
109
+ try {
110
+ return classifyOperation(task.request.operation).target;
111
+ }
112
+ catch {
113
+ return "";
114
+ }
115
+ }
116
+ function approvalHint(waiting) {
117
+ return `${waiting} waiting for approval — ${APPROVAL_HINT}`;
118
+ }
119
+ export function tasksCommand(env, options) {
120
+ const { tasks, waiting } = withStore(env, { tasks: [], waiting: 0 }, (store) => ({
121
+ tasks: store.listTasks(options.limit, options.status),
122
+ waiting: store.taskStatusCounts().awaiting_approval ?? 0,
123
+ }));
124
+ if (!humanOutput(options.json)) {
125
+ // The shape `/api/tasks` answers with, minus approvals.
126
+ write(JSON.stringify({ tasks: tasks.map(visible) }, null, 2));
127
+ return 0;
128
+ }
129
+ if (tasks.length === 0) {
130
+ write(options.status === undefined
131
+ ? // Not a file under examples/: an npm install has none.
132
+ "No tasks yet. Try: melra demo durable-core, or melra conformance"
133
+ : `No ${options.status} tasks.`);
134
+ return 0;
135
+ }
136
+ const header = ["ID", "STATUS", "OPERATION", "TARGET", "EFFECT", "UPDATED"];
137
+ const rows = tasks.map((task) => [
138
+ shortId(task.id),
139
+ task.status,
140
+ operationName(task),
141
+ truncate(taskTarget(task), 48),
142
+ `${task.policyDecision.effect}/${task.policyDecision.risk}`,
143
+ ago(task.updatedAt),
144
+ ]);
145
+ // `table` measures visible width, so the status can be painted before it aligns.
146
+ write(table([
147
+ header.map((title) => paint.dim(title)),
148
+ ...rows.map((row, index) => row.map((cell, column) => (column === 1 ? tone(cell, tasks[index]?.status ?? "") : cell))),
149
+ ]));
150
+ if (waiting > 0) {
151
+ write();
152
+ write(approvalHint(waiting));
153
+ }
154
+ return 0;
155
+ }
156
+ function describe(event) {
157
+ const time = new Date(event.at).toLocaleTimeString();
158
+ const status = event.previous === undefined
159
+ ? tone(event.status, event.status)
160
+ : `${event.previous} → ${tone(event.status, event.status)}`;
161
+ if (event.type === "workflow") {
162
+ return `${time} workflow ${shortId(event.id)} ${status}`;
163
+ }
164
+ return [
165
+ `${time} task ${shortId(event.id)}`,
166
+ status,
167
+ event.operation,
168
+ truncate(event.target, 48),
169
+ `${event.effect}/${event.risk}`,
170
+ ]
171
+ .filter((part) => part !== "")
172
+ .join(" ");
173
+ }
174
+ /**
175
+ * Polls rather than subscribes: the writer may be another process (`melra
176
+ * serve`, a `melra run`), and SQLite has no cross-process change feed. Each poll
177
+ * is a short autocommit read on a read-only connection; in WAL mode a reader
178
+ * never blocks a writer, so a watch left open beside a server costs it nothing.
179
+ * Changes are found by diffing the last status seen per id, not by an
180
+ * `updatedAt` high-water mark, because two writes in the same millisecond would
181
+ * share a timestamp and a strict `>` would lose one of them.
182
+ */
183
+ export function watchCommand(env, options) {
184
+ const human = humanOutput(options.json);
185
+ const seenTasks = new Map();
186
+ const seenWorkflows = new Map();
187
+ let store;
188
+ let primed = false;
189
+ const emit = (event) => write(human ? describe(event) : JSON.stringify(event));
190
+ const poll = () => {
191
+ // The database appears with the first task; until then there is nothing to read.
192
+ store ??= openStore(env);
193
+ if (store === undefined) {
194
+ primed = true;
195
+ return;
196
+ }
197
+ // ponytail: rereads the newest 500 tasks and every workflow run each second;
198
+ // add an `updated_at >` query to the store if that ever shows up in a profile.
199
+ const tasks = store.listTasks(500).reverse();
200
+ const runs = store.listWorkflowRuns();
201
+ for (const task of tasks) {
202
+ const previous = seenTasks.get(task.id);
203
+ if (previous === task.status)
204
+ continue;
205
+ seenTasks.set(task.id, task.status);
206
+ // The first read is the baseline: what already happened is `melra tasks`.
207
+ if (!primed)
208
+ continue;
209
+ emit({
210
+ type: "task",
211
+ at: task.updatedAt,
212
+ id: task.id,
213
+ status: task.status,
214
+ ...(previous === undefined ? {} : { previous }),
215
+ operation: operationName(task),
216
+ target: taskTarget(task),
217
+ effect: task.policyDecision.effect,
218
+ risk: task.policyDecision.risk,
219
+ });
220
+ }
221
+ for (const run of runs) {
222
+ const previous = seenWorkflows.get(run.id);
223
+ if (previous === run.status)
224
+ continue;
225
+ seenWorkflows.set(run.id, run.status);
226
+ if (!primed)
227
+ continue;
228
+ emit({
229
+ type: "workflow",
230
+ at: run.updatedAt,
231
+ id: run.id,
232
+ status: run.status,
233
+ ...(previous === undefined ? {} : { previous }),
234
+ });
235
+ }
236
+ primed = true;
237
+ };
238
+ return new Promise((resolveExit) => {
239
+ let timer;
240
+ const stop = (code) => {
241
+ if (timer !== undefined)
242
+ clearInterval(timer);
243
+ process.removeListener("SIGINT", onInterrupt);
244
+ process.removeListener("SIGTERM", onTerminate);
245
+ store?.close();
246
+ resolveExit(code);
247
+ };
248
+ // 128 + signal number, as a shell reports a process killed by it.
249
+ const onInterrupt = () => stop(130);
250
+ const onTerminate = () => stop(143);
251
+ process.once("SIGINT", onInterrupt);
252
+ process.once("SIGTERM", onTerminate);
253
+ const tick = () => {
254
+ try {
255
+ poll();
256
+ }
257
+ catch (error) {
258
+ process.stderr.write(`melra: ${error instanceof Error ? error.message : String(error)}\n`);
259
+ stop(1);
260
+ }
261
+ };
262
+ tick();
263
+ // On stderr so stdout stays pure NDJSON; it also tells a caller that the
264
+ // baseline is taken and anything from here on will be reported.
265
+ process.stderr.write(`Watching ${databasePath(env)} for task and workflow changes. Ctrl-C to stop.\n`);
266
+ timer = setInterval(tick, POLL_MS);
267
+ });
268
+ }
269
+ // Whether something accepts a connection there. Nothing is sent — no token, no
270
+ // request — so this cannot leak a credential to whatever holds the port.
271
+ function reachable(options) {
272
+ return new Promise((resolveProbe) => {
273
+ const socket = connect(options);
274
+ const done = (ok) => {
275
+ socket.destroy();
276
+ resolveProbe(ok);
277
+ };
278
+ socket.setTimeout(500, () => done(false));
279
+ socket.once("connect", () => done(true));
280
+ socket.once("error", () => done(false));
281
+ });
282
+ }
283
+ function httpPort() {
284
+ const port = Number(process.env.MELRA_HTTP_PORT);
285
+ return Number.isInteger(port) && port > 0 && port < 65_536 ? port : DEFAULT_HTTP_PORT;
286
+ }
287
+ async function sizeOnDisk(path) {
288
+ // The WAL holds committed pages not yet checkpointed into the main file.
289
+ const sizes = await Promise.all([path, `${path}-wal`].map((file) => stat(file).then((s) => s.size, () => 0)));
290
+ return sizes.reduce((total, size) => total + size, 0);
291
+ }
292
+ function bytes(size) {
293
+ if (size < 1024)
294
+ return `${size} B`;
295
+ if (size < 1024 * 1024)
296
+ return `${(size / 1024).toFixed(1)} KB`;
297
+ return `${(size / 1024 / 1024).toFixed(1)} MB`;
298
+ }
299
+ function countBy(values) {
300
+ const counts = {};
301
+ for (const value of values)
302
+ counts[value] = (counts[value] ?? 0) + 1;
303
+ return counts;
304
+ }
305
+ function summary(counts) {
306
+ const total = Object.values(counts).reduce((sum, count) => sum + count, 0);
307
+ if (total === 0)
308
+ return "none";
309
+ const parts = Object.entries(counts)
310
+ .sort(([, a], [, b]) => b - a)
311
+ .map(([status, count]) => `${count} ${tone(status, status)}`);
312
+ return `${total} total: ${parts.join(", ")}`;
313
+ }
314
+ export async function statusCommand(env, options) {
315
+ // The mode a server started here would run in: strictest of flag, variable,
316
+ // and policy file, as `createMelraRuntime` decides it.
317
+ let policyError;
318
+ let policyMode;
319
+ let policyUnhinged = false;
320
+ if (options.policyPath !== undefined) {
321
+ try {
322
+ const loaded = await loadPolicy(options.policyPath, env.workspaceRoot);
323
+ policyMode = loaded.mode;
324
+ policyUnhinged = loaded.unhinged;
325
+ }
326
+ catch (error) {
327
+ policyError = error instanceof Error ? error.message : String(error);
328
+ }
329
+ }
330
+ const mode = env.mode === "enforced" || policyMode === "enforced" ? "enforced" : "developer";
331
+ const path = databasePath(env);
332
+ const { tasks, workflows, lastActivity } = withStore(env, { tasks: {}, workflows: {}, lastActivity: undefined }, (store) => {
333
+ const runs = store.listWorkflowRuns();
334
+ const latest = [store.listTasks(1)[0]?.updatedAt, runs.at(-1)?.updatedAt]
335
+ .filter((at) => at !== undefined)
336
+ .sort()
337
+ .at(-1);
338
+ return {
339
+ tasks: store.taskStatusCounts(),
340
+ workflows: countBy(runs.map((run) => run.status)),
341
+ lastActivity: latest,
342
+ };
343
+ });
344
+ const port = httpPort();
345
+ const [http, socket] = await Promise.all([
346
+ reachable({ host: "127.0.0.1", port }),
347
+ env.socketPath === undefined ? undefined : reachable({ path: env.socketPath }),
348
+ ]);
349
+ const report = {
350
+ product: "MELRA",
351
+ version: PRODUCT_VERSION,
352
+ mode,
353
+ unhinged: env.unhinged || policyUnhinged,
354
+ workspace: env.workspaceRoot,
355
+ dataDirectory: env.dataDirectory,
356
+ policy: options.policyPath ?? null,
357
+ ...(policyError === undefined ? {} : { policyError }),
358
+ database: {
359
+ path,
360
+ exists: existsSync(path),
361
+ bytes: await sizeOnDisk(path),
362
+ },
363
+ tasks,
364
+ workflows,
365
+ awaitingApproval: tasks.awaiting_approval ?? 0,
366
+ lastActivity: lastActivity ?? null,
367
+ server: {
368
+ http: { address: `127.0.0.1:${port}`, state: http ? "reachable" : "not running" },
369
+ ...(env.socketPath === undefined
370
+ ? {}
371
+ : { socket: { path: env.socketPath, state: socket === true ? "reachable" : "not running" } }),
372
+ },
373
+ };
374
+ if (!humanOutput(options.json)) {
375
+ write(JSON.stringify(report, null, 2));
376
+ return 0;
377
+ }
378
+ const row = (label, value) => write(` ${label.padEnd(11)} ${value}`);
379
+ write(`MELRA ${PRODUCT_VERSION} ${mode} mode${report.unhinged ? " UNSAFE-LOCAL: no guardrails" : ""}`);
380
+ row("Workspace", env.workspaceRoot);
381
+ row("Data", env.dataDirectory);
382
+ row("Policy", policyError !== undefined
383
+ ? `${options.policyPath} (invalid: ${policyError})`
384
+ : (options.policyPath ?? "built-in defaults"));
385
+ row("Database", report.database.exists ? `${path} (${bytes(report.database.bytes)})` : `${path} (not created yet)`);
386
+ row("Tasks", summary(tasks));
387
+ row("Workflows", summary(workflows));
388
+ if (report.awaitingApproval > 0)
389
+ row("Waiting", approvalHint(report.awaitingApproval));
390
+ row("Last active", lastActivity === undefined ? "never" : ago(lastActivity));
391
+ row("HTTP", `${report.server.http.address} ${report.server.http.state}`);
392
+ if (report.server.socket !== undefined) {
393
+ row("Socket", `${report.server.socket.path} ${report.server.socket.state}`);
394
+ }
395
+ if (!http && socket !== true) {
396
+ write();
397
+ write("Open the console with: melra serve --http --open");
398
+ }
399
+ return 0;
400
+ }
401
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface ClientStatus {
2
+ client: string;
3
+ path: string;
4
+ state: "configured" | "not configured" | "unreadable" | "not inspected";
5
+ command?: string;
6
+ pin?: string;
7
+ note?: string;
8
+ problems: string[];
9
+ }
10
+ export declare function resolvesOnPath(command: string): boolean;
11
+ export declare function clientStatuses(workspace: string): Promise<ClientStatus[]>;
12
+ export interface ClientChoice {
13
+ client: string;
14
+ label: string;
15
+ path?: string;
16
+ detected?: string;
17
+ }
18
+ export declare function detectClients(workspace: string): ClientChoice[];
19
+ export declare function clientsCheck(statuses: ClientStatus[]): {
20
+ name: string;
21
+ status: "pass" | "warn";
22
+ detail: string;
23
+ };
24
+ //# sourceMappingURL=client-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-status.d.ts","sourceRoot":"","sources":["../src/client-status.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IAGb,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,YAAY,GAAG,eAAe,CAAC;IAGxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAgCD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAcvD;AA+ID,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAiB/E;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAeD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAuB/D;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB,CAeA"}