@melra/cli 0.3.0-alpha.11 → 0.3.0-alpha.13
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 +14 -7
- package/dist/activity.d.ts +26 -0
- package/dist/activity.d.ts.map +1 -0
- package/dist/activity.js +404 -0
- package/dist/activity.js.map +1 -0
- package/dist/approval-screen.d.ts +35 -0
- package/dist/approval-screen.d.ts.map +1 -0
- package/dist/approval-screen.js +130 -0
- package/dist/approval-screen.js.map +1 -0
- package/dist/client-status.d.ts +24 -0
- package/dist/client-status.d.ts.map +1 -0
- package/dist/client-status.js +273 -0
- package/dist/client-status.js.map +1 -0
- package/dist/clients.d.ts +32 -0
- package/dist/clients.d.ts.map +1 -0
- package/dist/clients.js +588 -0
- package/dist/clients.js.map +1 -0
- package/dist/conformance.d.ts +7 -0
- package/dist/conformance.d.ts.map +1 -1
- package/dist/conformance.js +134 -30
- package/dist/conformance.js.map +1 -1
- package/dist/demo-workflow.d.ts +46 -0
- package/dist/demo-workflow.d.ts.map +1 -0
- package/dist/demo-workflow.js +58 -0
- package/dist/demo-workflow.js.map +1 -0
- package/dist/environment.d.ts +15 -1
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +30 -4
- package/dist/environment.js.map +1 -1
- package/dist/human.d.ts +67 -0
- package/dist/human.d.ts.map +1 -0
- package/dist/human.js +266 -0
- package/dist/human.js.map +1 -0
- package/dist/index.js +432 -77
- package/dist/index.js.map +1 -1
- package/dist/isolation.d.ts +35 -0
- package/dist/isolation.d.ts.map +1 -0
- package/dist/isolation.js +66 -0
- package/dist/isolation.js.map +1 -0
- package/dist/jsonc.d.ts +24 -0
- package/dist/jsonc.d.ts.map +1 -0
- package/dist/jsonc.js +238 -0
- package/dist/jsonc.js.map +1 -0
- package/dist/output.d.ts +28 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +84 -0
- package/dist/output.js.map +1 -0
- package/package.json +11 -10
package/dist/output.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Copyright 2026 XAGI Labs Private Limited
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
// Terminal output for people, without changing it for programs.
|
|
4
|
+
//
|
|
5
|
+
// The CLI's contract with scripts, tests, and MCP clients is JSON on stdout,
|
|
6
|
+
// and that has to stay byte-for-byte what it was. A person at a terminal gets
|
|
7
|
+
// a readable report instead, decided by one rule: stdout is a TTY and `--json`
|
|
8
|
+
// was not passed. Anything piped or captured never sees a single ANSI byte.
|
|
9
|
+
import { printable } from "./approval-screen.js";
|
|
10
|
+
/** A readable report for this invocation, rather than JSON. */
|
|
11
|
+
export function isHuman(args, stream = process.stdout) {
|
|
12
|
+
return !args.includes("--json") && stream.isTTY === true;
|
|
13
|
+
}
|
|
14
|
+
// https://no-color.org: a non-empty NO_COLOR turns colour off whatever else is
|
|
15
|
+
// set. FORCE_COLOR follows Node's own reading ("0"/"false" off, anything else
|
|
16
|
+
// on). Checked here rather than through `tty.WriteStream.hasColors()`, which
|
|
17
|
+
// answers the same but prints a process warning when both are set.
|
|
18
|
+
function colorEnabled() {
|
|
19
|
+
const { NO_COLOR, FORCE_COLOR, TERM } = process.env;
|
|
20
|
+
if (NO_COLOR !== undefined && NO_COLOR !== "")
|
|
21
|
+
return false;
|
|
22
|
+
if (FORCE_COLOR !== undefined)
|
|
23
|
+
return FORCE_COLOR !== "0" && FORCE_COLOR !== "false";
|
|
24
|
+
return process.stdout.isTTY === true && TERM !== "dumb";
|
|
25
|
+
}
|
|
26
|
+
// Read per call, not once at load, so a test can change the environment. An
|
|
27
|
+
// empty string stays empty, so a blank table cell leaves no trailing codes.
|
|
28
|
+
const sgr = (open, close) => (text) => text !== "" && colorEnabled() ? `\u001b[${open}m${text}\u001b[${close}m` : text;
|
|
29
|
+
export const paint = {
|
|
30
|
+
ok: sgr(32, 39),
|
|
31
|
+
warn: sgr(33, 39),
|
|
32
|
+
fail: sgr(31, 39),
|
|
33
|
+
dim: sgr(2, 22),
|
|
34
|
+
bold: sgr(1, 22),
|
|
35
|
+
};
|
|
36
|
+
// The legacy Windows console renders ✓ ⚠ ✗ as boxes. Windows Terminal (which
|
|
37
|
+
// sets WT_SESSION) and VS Code's terminal do not, so only the old one gets ASCII.
|
|
38
|
+
function unicode() {
|
|
39
|
+
return (process.platform !== "win32" ||
|
|
40
|
+
process.env.WT_SESSION !== undefined ||
|
|
41
|
+
process.env.TERM_PROGRAM === "vscode");
|
|
42
|
+
}
|
|
43
|
+
/** The coloured status symbol: ✓ ⚠ ✗, or [ok] [warn] [fail] where those would not render. */
|
|
44
|
+
export function mark(status) {
|
|
45
|
+
const [symbol, ascii, color] = status === "pass"
|
|
46
|
+
? ["✓", "[ok]", paint.ok]
|
|
47
|
+
: status === "warn"
|
|
48
|
+
? ["⚠", "[warn]", paint.warn]
|
|
49
|
+
: ["✗", "[fail]", paint.fail];
|
|
50
|
+
return color(unicode() ? symbol : ascii);
|
|
51
|
+
}
|
|
52
|
+
// Colour codes take no columns on screen, so alignment measures without them.
|
|
53
|
+
const width = (text) => text.replace(/\u001b\[[0-9;]*m/g, "").length;
|
|
54
|
+
/**
|
|
55
|
+
* Rows as aligned columns, one line per row. Every column but the last is
|
|
56
|
+
* padded to its widest cell, so a two-column table is a key/value list.
|
|
57
|
+
*/
|
|
58
|
+
export function table(rows, options = {}) {
|
|
59
|
+
const widths = [];
|
|
60
|
+
for (const row of rows) {
|
|
61
|
+
row.forEach((cell, column) => {
|
|
62
|
+
widths[column] = Math.max(widths[column] ?? 0, width(cell));
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const indent = " ".repeat(options.indent ?? 0);
|
|
66
|
+
return rows
|
|
67
|
+
.map((row) => indent +
|
|
68
|
+
row
|
|
69
|
+
.map((cell, column) => column === row.length - 1
|
|
70
|
+
? cell
|
|
71
|
+
: cell + " ".repeat((widths[column] ?? 0) - width(cell)))
|
|
72
|
+
.join(" ")
|
|
73
|
+
.trimEnd())
|
|
74
|
+
.join("\n");
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The one place a command decides between its JSON and its human report. The
|
|
78
|
+
* JSON branch is exactly what the CLI has always written, so a script cannot
|
|
79
|
+
* tell this function exists.
|
|
80
|
+
*/
|
|
81
|
+
export function printJsonOrHuman(value, renderHuman, args) {
|
|
82
|
+
process.stdout.write(isHuman(args) ? `${renderHuman(value)}\n` : `${printable(JSON.stringify(value, null, 2), true)}\n`);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@melra/cli",
|
|
3
|
-
"version": "0.3.0-alpha.
|
|
3
|
+
"version": "0.3.0-alpha.13",
|
|
4
4
|
"description": "MELRA autonomy kernel and command-line interface.",
|
|
5
|
+
"mcpName": "io.github.xagi-lab/melra",
|
|
5
6
|
"license": "Apache-2.0",
|
|
6
7
|
"repository": {
|
|
7
8
|
"type": "git",
|
|
@@ -25,14 +26,14 @@
|
|
|
25
26
|
"README.md"
|
|
26
27
|
],
|
|
27
28
|
"dependencies": {
|
|
28
|
-
"@modelcontextprotocol/sdk": "1.
|
|
29
|
-
"@melra/browser-runtime": "0.3.0-alpha.
|
|
30
|
-
"@melra/computer-runtime": "0.3.0-alpha.
|
|
31
|
-
"@melra/
|
|
32
|
-
"@melra/runtime-core": "0.3.0-alpha.
|
|
33
|
-
"@melra/
|
|
34
|
-
"@melra/
|
|
35
|
-
"@melra/
|
|
29
|
+
"@modelcontextprotocol/sdk": "1.32.1",
|
|
30
|
+
"@melra/browser-runtime": "0.3.0-alpha.13",
|
|
31
|
+
"@melra/computer-runtime": "0.3.0-alpha.13",
|
|
32
|
+
"@melra/protocol": "0.3.0-alpha.13",
|
|
33
|
+
"@melra/runtime-core": "0.3.0-alpha.13",
|
|
34
|
+
"@melra/server": "0.3.0-alpha.13",
|
|
35
|
+
"@melra/policy-core": "0.3.0-alpha.13",
|
|
36
|
+
"@melra/storage-sqlite": "0.3.0-alpha.13"
|
|
36
37
|
},
|
|
37
38
|
"scripts": {
|
|
38
39
|
"build": "tsc -p tsconfig.json && chmod +x dist/bin.js dist/index.js",
|
|
@@ -41,6 +42,6 @@
|
|
|
41
42
|
"start": "tsx src/index.ts",
|
|
42
43
|
"pack:check": "npm pack --dry-run",
|
|
43
44
|
"test": "vitest run --testTimeout=20000",
|
|
44
|
-
"typecheck": "tsc -p tsconfig.json
|
|
45
|
+
"typecheck": "tsc -p tsconfig.test.json"
|
|
45
46
|
}
|
|
46
47
|
}
|