@nowline/cli 0.8.6 → 0.10.0
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 +32 -9
- package/dist/cli/args.d.ts +20 -4
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +20 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +31 -3
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/options.d.ts +74 -0
- package/dist/cli/options.d.ts.map +1 -0
- package/dist/cli/options.js +209 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp-install.d.ts +18 -0
- package/dist/commands/mcp-install.d.ts.map +1 -0
- package/dist/commands/mcp-install.js +151 -0
- package/dist/commands/mcp-install.js.map +1 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +7 -12
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/render.d.ts +7 -0
- package/dist/commands/render.d.ts.map +1 -1
- package/dist/commands/render.js +161 -155
- package/dist/commands/render.js.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +87 -60
- package/dist/commands/serve.js.map +1 -1
- package/dist/diagnostics/adapt.d.ts +12 -1
- package/dist/diagnostics/adapt.d.ts.map +1 -1
- package/dist/diagnostics/adapt.js +53 -1
- package/dist/diagnostics/adapt.js.map +1 -1
- package/dist/diagnostics/model.d.ts +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.d.ts.map +1 -1
- package/dist/generated/version.js +2 -2
- package/dist/generated/version.js.map +1 -1
- package/dist/i18n/locale.d.ts.map +1 -1
- package/dist/i18n/locale.js +2 -5
- package/dist/i18n/locale.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/io/config.d.ts +1 -1
- package/dist/io/config.d.ts.map +1 -1
- package/dist/io/config.js +1 -1
- package/dist/io/config.js.map +1 -1
- package/dist/io/log.d.ts +17 -0
- package/dist/io/log.d.ts.map +1 -0
- package/dist/io/log.js +16 -0
- package/dist/io/log.js.map +1 -0
- package/dist/mcp-install/clients.d.ts +58 -0
- package/dist/mcp-install/clients.d.ts.map +1 -0
- package/dist/mcp-install/clients.js +304 -0
- package/dist/mcp-install/clients.js.map +1 -0
- package/dist/mcp-install/host.d.ts +29 -0
- package/dist/mcp-install/host.d.ts.map +1 -0
- package/dist/mcp-install/host.js +72 -0
- package/dist/mcp-install/host.js.map +1 -0
- package/dist/mcp-install/json-config.d.ts +29 -0
- package/dist/mcp-install/json-config.d.ts.map +1 -0
- package/dist/mcp-install/json-config.js +139 -0
- package/dist/mcp-install/json-config.js.map +1 -0
- package/dist/mcp-install/server-command.d.ts +26 -0
- package/dist/mcp-install/server-command.d.ts.map +1 -0
- package/dist/mcp-install/server-command.js +52 -0
- package/dist/mcp-install/server-command.js.map +1 -0
- package/man/fr/nowline.1 +248 -19
- package/man/fr/nowline.5 +819 -45
- package/man/nowline.1 +193 -18
- package/man/nowline.5 +764 -36
- package/package.json +19 -19
- package/src/cli/args.ts +55 -5
- package/src/cli/help.ts +31 -3
- package/src/cli/options.ts +286 -0
- package/src/commands/init.ts +2 -3
- package/src/commands/mcp-install.ts +211 -0
- package/src/commands/mcp.ts +10 -14
- package/src/commands/render.ts +198 -195
- package/src/commands/serve.ts +102 -74
- package/src/diagnostics/adapt.ts +62 -0
- package/src/diagnostics/model.ts +1 -1
- package/src/generated/version.ts +2 -2
- package/src/i18n/locale.ts +2 -6
- package/src/index.ts +3 -0
- package/src/io/config.ts +0 -1
- package/src/io/log.ts +33 -0
- package/src/mcp-install/clients.ts +443 -0
- package/src/mcp-install/host.ts +106 -0
- package/src/mcp-install/json-config.ts +179 -0
- package/src/mcp-install/server-command.ts +75 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { chmodSync, mkdirSync, readFileSync, realpathSync, renameSync, statSync, writeFileSync, } from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { applyEdits, modify, parse, printParseErrorCode, } from 'jsonc-parser';
|
|
4
|
+
export class JsonConfigError extends Error {
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Inserts or replaces the server entry in a JSON / JSONC document, editing
|
|
8
|
+
* the text rather than re-serializing it, so comments, key order, and the
|
|
9
|
+
* file's own indentation survive. `existing` undefined means the file is
|
|
10
|
+
* missing.
|
|
11
|
+
*/
|
|
12
|
+
export function upsertEntry(existing, target, entry) {
|
|
13
|
+
const isNew = existing === undefined || existing.trim() === '';
|
|
14
|
+
const text = isNew ? `${JSON.stringify(target.seed ?? {}, null, 2)}\n` : existing;
|
|
15
|
+
const doc = parseDocument(text, target.path);
|
|
16
|
+
const { keyPath, value } = target.place(entry, doc);
|
|
17
|
+
const current = valueAt(doc, keyPath);
|
|
18
|
+
if (!isNew && deepEqual(current, value))
|
|
19
|
+
return { change: 'unchanged', keyPath, value };
|
|
20
|
+
return {
|
|
21
|
+
change: isNew ? 'created' : current === undefined ? 'added' : 'updated',
|
|
22
|
+
text: applyEdits(text, insertionEdits(text, keyPath, value)),
|
|
23
|
+
keyPath,
|
|
24
|
+
value,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/** Removes the server entry, leaving every other key and comment in place. */
|
|
28
|
+
export function removeEntry(existing, target, entry) {
|
|
29
|
+
if (existing === undefined || existing.trim() === '') {
|
|
30
|
+
return { change: 'absent', keyPath: [] };
|
|
31
|
+
}
|
|
32
|
+
const doc = parseDocument(existing, target.path);
|
|
33
|
+
const { keyPath } = target.place(entry, doc);
|
|
34
|
+
if (valueAt(doc, keyPath) === undefined)
|
|
35
|
+
return { change: 'absent', keyPath };
|
|
36
|
+
// Unformatted: a pure deletion, so neighbouring entries keep their layout.
|
|
37
|
+
const edits = modify(existing, keyPath, undefined, {});
|
|
38
|
+
return { change: 'removed', text: applyEdits(existing, edits), keyPath };
|
|
39
|
+
}
|
|
40
|
+
export function readConfigFile(filePath) {
|
|
41
|
+
try {
|
|
42
|
+
return readFileSync(filePath, 'utf-8');
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
if (err.code === 'ENOENT')
|
|
46
|
+
return undefined;
|
|
47
|
+
throw err;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Atomic write (temp file + rename) so a crash never leaves a harness with a
|
|
52
|
+
* half-written config. Writes through a symlink (dotfile managers) and keeps
|
|
53
|
+
* the existing file mode.
|
|
54
|
+
*/
|
|
55
|
+
export function writeConfigFile(filePath, text) {
|
|
56
|
+
let destination = filePath;
|
|
57
|
+
let mode;
|
|
58
|
+
try {
|
|
59
|
+
destination = realpathSync(filePath);
|
|
60
|
+
mode = statSync(destination).mode & 0o777;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
mkdirSync(path.dirname(filePath), { recursive: true });
|
|
64
|
+
}
|
|
65
|
+
const temp = `${destination}.nowline-${process.pid}.tmp`;
|
|
66
|
+
writeFileSync(temp, text, 'utf-8');
|
|
67
|
+
if (mode !== undefined)
|
|
68
|
+
chmodSync(temp, mode);
|
|
69
|
+
renameSync(temp, destination);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* jsonc-parser's formatter re-flows the whole line it edits, and appending a
|
|
73
|
+
* key to a non-empty object edits the previous sibling's line, so a user's
|
|
74
|
+
* compact `"other": { "command": "x" }` would come back expanded. For that
|
|
75
|
+
* case, take the unformatted edit and indent the new property ourselves.
|
|
76
|
+
* Every other case (replacing our own entry, creating a missing parent)
|
|
77
|
+
* only touches lines we own, so the library's formatting is fine.
|
|
78
|
+
*/
|
|
79
|
+
function insertionEdits(text, keyPath, value) {
|
|
80
|
+
const formatting = detectFormatting(text);
|
|
81
|
+
const raw = modify(text, keyPath, value, {});
|
|
82
|
+
const edit = raw[0];
|
|
83
|
+
if (raw.length !== 1 || edit.length !== 0 || !edit.content.startsWith(',')) {
|
|
84
|
+
return modify(text, keyPath, value, { formattingOptions: formatting });
|
|
85
|
+
}
|
|
86
|
+
const unit = formatting.insertSpaces ? ' '.repeat(formatting.tabSize ?? 2) : '\t';
|
|
87
|
+
const lineStart = text.lastIndexOf('\n', edit.offset - 1) + 1;
|
|
88
|
+
const lineIndent = /^[ \t]*/.exec(text.slice(lineStart))?.[0] ?? '';
|
|
89
|
+
const property = JSON.stringify(JSON.parse(`{${edit.content.slice(1)}}`), null, unit)
|
|
90
|
+
.split('\n')
|
|
91
|
+
.slice(1, -1)
|
|
92
|
+
.map((line) => lineIndent + line.slice(unit.length));
|
|
93
|
+
const eol = formatting.eol ?? '\n';
|
|
94
|
+
return [{ ...edit, content: `,${eol}${property.join(eol)}` }];
|
|
95
|
+
}
|
|
96
|
+
function parseDocument(text, filePath) {
|
|
97
|
+
const errors = [];
|
|
98
|
+
const doc = parse(text, errors, { allowTrailingComma: true, disallowComments: false });
|
|
99
|
+
if (errors.length > 0) {
|
|
100
|
+
const first = errors[0];
|
|
101
|
+
throw new JsonConfigError(`cannot parse ${filePath}: ${printParseErrorCode(first.error)} at offset ${first.offset}; fix or move the file and re-run.`);
|
|
102
|
+
}
|
|
103
|
+
if (!isRecord(doc)) {
|
|
104
|
+
throw new JsonConfigError(`cannot update ${filePath}: the top level is not a JSON object.`);
|
|
105
|
+
}
|
|
106
|
+
return doc;
|
|
107
|
+
}
|
|
108
|
+
function valueAt(doc, keyPath) {
|
|
109
|
+
let node = doc;
|
|
110
|
+
for (const key of keyPath) {
|
|
111
|
+
if (!isRecord(node))
|
|
112
|
+
return undefined;
|
|
113
|
+
node = node[key];
|
|
114
|
+
}
|
|
115
|
+
return node;
|
|
116
|
+
}
|
|
117
|
+
function detectFormatting(text) {
|
|
118
|
+
const eol = text.includes('\r\n') ? '\r\n' : '\n';
|
|
119
|
+
const indent = /^([ \t]+)\S/m.exec(text)?.[1];
|
|
120
|
+
if (indent?.startsWith('\t'))
|
|
121
|
+
return { insertSpaces: false, tabSize: 1, eol };
|
|
122
|
+
return { insertSpaces: true, tabSize: indent?.length ?? 2, eol };
|
|
123
|
+
}
|
|
124
|
+
function isRecord(value) {
|
|
125
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
126
|
+
}
|
|
127
|
+
function deepEqual(a, b) {
|
|
128
|
+
if (a === b)
|
|
129
|
+
return true;
|
|
130
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
131
|
+
return a.length === b.length && a.every((item, i) => deepEqual(item, b[i]));
|
|
132
|
+
}
|
|
133
|
+
if (isRecord(a) && isRecord(b)) {
|
|
134
|
+
const keys = Object.keys(a);
|
|
135
|
+
return (keys.length === Object.keys(b).length && keys.every((key) => deepEqual(a[key], b[key])));
|
|
136
|
+
}
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=json-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-config.js","sourceRoot":"","sources":["../../src/mcp-install/json-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { HostEnv } from './host.js';
|
|
2
|
+
export type ServerKind = 'self' | 'npx';
|
|
3
|
+
/** The stdio launch line every harness config stores. */
|
|
4
|
+
export interface ServerEntry {
|
|
5
|
+
command: string;
|
|
6
|
+
args: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface ResolvedServer {
|
|
9
|
+
entry: ServerEntry;
|
|
10
|
+
/** Notices for stderr (dropped under `-q`). */
|
|
11
|
+
warnings: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Decides what `--mcp-install` registers.
|
|
15
|
+
*
|
|
16
|
+
* `self` points at the installed `nowline`. The path is absolute because GUI
|
|
17
|
+
* harnesses (Claude Desktop, Cursor, VS Code launched from the Dock) don't
|
|
18
|
+
* inherit the shell PATH, and it is the stable PATH entry rather than the
|
|
19
|
+
* realpath, so a Homebrew symlink keeps working across `brew upgrade` instead
|
|
20
|
+
* of pinning `Cellar/nowline/<version>/`.
|
|
21
|
+
*
|
|
22
|
+
* `npx` registers `npx -y @nowline/mcp`, which tracks npm independently of
|
|
23
|
+
* the CLI but needs Node visible to the harness.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveServer(kind: ServerKind, root: string | undefined, host: HostEnv): ResolvedServer;
|
|
26
|
+
//# sourceMappingURL=server-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-command.d.ts","sourceRoot":"","sources":["../../src/mcp-install/server-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAExC,yDAAyD;AACzD,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CACzB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,OAAO,GACd,cAAc,CAyChB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as path from 'node:path';
|
|
2
|
+
/**
|
|
3
|
+
* Decides what `--mcp-install` registers.
|
|
4
|
+
*
|
|
5
|
+
* `self` points at the installed `nowline`. The path is absolute because GUI
|
|
6
|
+
* harnesses (Claude Desktop, Cursor, VS Code launched from the Dock) don't
|
|
7
|
+
* inherit the shell PATH, and it is the stable PATH entry rather than the
|
|
8
|
+
* realpath, so a Homebrew symlink keeps working across `brew upgrade` instead
|
|
9
|
+
* of pinning `Cellar/nowline/<version>/`.
|
|
10
|
+
*
|
|
11
|
+
* `npx` registers `npx -y @nowline/mcp`, which tracks npm independently of
|
|
12
|
+
* the CLI but needs Node visible to the harness.
|
|
13
|
+
*/
|
|
14
|
+
export function resolveServer(kind, root, host) {
|
|
15
|
+
const rootArgs = root !== undefined ? ['--root', path.resolve(host.cwd, root)] : [];
|
|
16
|
+
if (kind === 'npx') {
|
|
17
|
+
// Windows GUI apps can't spawn `npx.cmd` without a shell.
|
|
18
|
+
if (host.platform === 'win32') {
|
|
19
|
+
return {
|
|
20
|
+
entry: { command: 'cmd', args: ['/c', 'npx', '-y', '@nowline/mcp', ...rootArgs] },
|
|
21
|
+
warnings: [],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
entry: { command: 'npx', args: ['-y', '@nowline/mcp', ...rootArgs] },
|
|
26
|
+
warnings: [],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (host.isCompiledBinary) {
|
|
30
|
+
const binary = host.realpath(host.execPath);
|
|
31
|
+
const onPath = host
|
|
32
|
+
.findAllOnPath('nowline')
|
|
33
|
+
.find((candidate) => host.realpath(candidate) === binary);
|
|
34
|
+
const command = onPath ?? host.execPath;
|
|
35
|
+
const warnings = [];
|
|
36
|
+
if (onPath === undefined && /[\\/]Cellar[\\/]/.test(command)) {
|
|
37
|
+
warnings.push(`warning: registered ${command}, which changes on \`brew upgrade\`; put Homebrew's bin on PATH and re-run --mcp-install.`);
|
|
38
|
+
}
|
|
39
|
+
return { entry: { command, args: ['--mcp', ...rootArgs] }, warnings };
|
|
40
|
+
}
|
|
41
|
+
// Running under Node (npm install or a checkout): the `nowline` shim is a
|
|
42
|
+
// `#!/usr/bin/env node` script a GUI harness may not be able to run, so
|
|
43
|
+
// register the absolute Node and the script it runs.
|
|
44
|
+
const script = host.realpath(host.argv1 ?? '');
|
|
45
|
+
return {
|
|
46
|
+
entry: { command: host.execPath, args: [script, '--mcp', ...rootArgs] },
|
|
47
|
+
warnings: [
|
|
48
|
+
`warning: registered ${host.execPath}; re-run --mcp-install if you remove or switch this Node version.`,
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=server-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-command.js","sourceRoot":"","sources":["../../src/mcp-install/server-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAiBlC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CACzB,IAAgB,EAChB,IAAwB,EACxB,IAAa;IAEb,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACjB,0DAA0D;QAC1D,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO;gBACH,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC,EAAE;gBACjF,QAAQ,EAAE,EAAE;aACf,CAAC;QACN,CAAC;QACD,OAAO;YACH,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC,EAAE;YACpE,QAAQ,EAAE,EAAE;SACf,CAAC;IACN,CAAC;IAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI;aACd,aAAa,CAAC,SAAS,CAAC;aACxB,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC;QACxC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,IAAI,CACT,uBAAuB,OAAO,2FAA2F,CAC5H,CAAC;QACN,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC;IAC1E,CAAC;IAED,0EAA0E;IAC1E,wEAAwE;IACxE,qDAAqD;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC/C,OAAO;QACH,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,EAAE;QACvE,QAAQ,EAAE;YACN,uBAAuB,IAAI,CAAC,QAAQ,mEAAmE;SAC1G;KACJ,CAAC;AACN,CAAC"}
|
package/man/fr/nowline.1
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
.\" Traduction française neutre. Les divergences régionales (fr-CA, fr-FR)
|
|
2
2
|
.\" prennent la forme de surcouches dans packages/cli/man/<locale>/nowline.1
|
|
3
3
|
.\" lorsqu'elles existent. Voir specs/localization.md.
|
|
4
|
+
.\"
|
|
5
|
+
.\" Empreinte de la page anglaise relue pour cette traduction. Après avoir
|
|
6
|
+
.\" reporté une modification de la page anglaise, remplacez-la par la ligne
|
|
7
|
+
.\" qu'affiche packages/cli/test/man/translation-parity.test.ts.
|
|
8
|
+
.\" translated-from: nowline.1 sha256:032668f06f1c5fa404d9e94021ed15b045372a5d155f3eac56cec4daffaf6630
|
|
4
9
|
.Dd $Mdocdate$
|
|
5
10
|
.Dt NOWLINE 1
|
|
6
11
|
.Os
|
|
@@ -13,6 +18,7 @@
|
|
|
13
18
|
.Op Fl o Ar chemin
|
|
14
19
|
.Op Fl t Ar thème
|
|
15
20
|
.Op Fl -now Ar date
|
|
21
|
+
.Op Fl -timezone Ar fuseau
|
|
16
22
|
.Op Ar options
|
|
17
23
|
.Ar entrée
|
|
18
24
|
.Nm
|
|
@@ -24,6 +30,17 @@
|
|
|
24
30
|
.Fl -init
|
|
25
31
|
.Op Ar nom
|
|
26
32
|
.Nm
|
|
33
|
+
.Fl -mcp
|
|
34
|
+
.Op Fl -root Ar rép
|
|
35
|
+
.Nm
|
|
36
|
+
.Fl -mcp-install
|
|
37
|
+
.Op Ar client
|
|
38
|
+
.Op Ar options
|
|
39
|
+
.Nm
|
|
40
|
+
.Fl -mcp-uninstall
|
|
41
|
+
.Op Ar client
|
|
42
|
+
.Op Ar options
|
|
43
|
+
.Nm
|
|
27
44
|
.Fl -dry-run
|
|
28
45
|
.Op Ar options
|
|
29
46
|
.Ar entrée
|
|
@@ -137,6 +154,9 @@ rendu réussi.
|
|
|
137
154
|
L'option
|
|
138
155
|
.Fl o Ar chemin
|
|
139
156
|
écrit également le résultat sur le disque à chaque reconstruction.
|
|
157
|
+
Il accepte les mêmes options de rendu qu'un rendu simple (thème,
|
|
158
|
+
largeur, liens, mode strict, etc.) et affiche ce qu'afficherait un
|
|
159
|
+
rendu simple du fichier avec les mêmes options.
|
|
140
160
|
.It Fl -init Op Ar nom
|
|
141
161
|
Crée un fichier
|
|
142
162
|
.Pa .nowline
|
|
@@ -149,6 +169,37 @@ est ajouté automatiquement s'il manque.
|
|
|
149
169
|
Le nom par défaut est
|
|
150
170
|
.Sy roadmap .
|
|
151
171
|
Les fichiers existants sont écrasés sans confirmation.
|
|
172
|
+
.It Fl -mcp
|
|
173
|
+
Lance un serveur Model Context Protocol (MCP) sur l'entrée et la sortie
|
|
174
|
+
standard, qui expose à un agent les outils de validation, de rendu,
|
|
175
|
+
d'export et de fichiers.
|
|
176
|
+
Avec
|
|
177
|
+
.Fl -port Ar n ,
|
|
178
|
+
il sert plutôt du Streamable HTTP local.
|
|
179
|
+
C'est le même serveur que
|
|
180
|
+
.Ql npx @nowline/mcp .
|
|
181
|
+
.It Fl -mcp-install Op Ar client
|
|
182
|
+
Enregistre le serveur MCP auprès d'un agent\ :
|
|
183
|
+
.Sy claude-code , claude-desktop , cursor , vscode , codex , gemini ,
|
|
184
|
+
.Sy antigravity , muse , opencode , copilot , windsurf , zed , amp , goose ,
|
|
185
|
+
ou
|
|
186
|
+
.Sy all .
|
|
187
|
+
Sans
|
|
188
|
+
.Ar client ,
|
|
189
|
+
l'installe dans chaque agent trouvé sur cette machine.
|
|
190
|
+
Les configurations JSON sont modifiées sur place, en conservant les
|
|
191
|
+
commentaires et les autres entrées\ ; Claude Code (portée utilisateur) et
|
|
192
|
+
Codex passent par leur propre commande
|
|
193
|
+
.Ql mcp add \ ;
|
|
194
|
+
Goose reçoit un extrait à coller.
|
|
195
|
+
Relancer la commande est sans risque.
|
|
196
|
+
Avec
|
|
197
|
+
.Fl n ,
|
|
198
|
+
affiche la modification sans rien écrire ni exécuter.
|
|
199
|
+
Voir
|
|
200
|
+
.Sx OPTIONS MCP .
|
|
201
|
+
.It Fl -mcp-uninstall Op Ar client
|
|
202
|
+
Retire le serveur des mêmes configurations.
|
|
152
203
|
.It Fl n , -dry-run
|
|
153
204
|
Exécute la totalité du pipeline (analyse + validation + mise en page +
|
|
154
205
|
format) sans écrire de fichier.
|
|
@@ -189,16 +240,63 @@ comme
|
|
|
189
240
|
.Sh OPTIONS DE PRODUCTION
|
|
190
241
|
.Bl -tag -width Fl
|
|
191
242
|
.It Fl t , -theme Ar nom
|
|
192
|
-
.Sy light | dark
|
|
243
|
+
.Sy light | dark | grayscale ;
|
|
244
|
+
.Sy greyscale
|
|
245
|
+
est accepté comme alias.
|
|
246
|
+
Par défaut\ :
|
|
247
|
+
.Pa .nowlinerc
|
|
248
|
+
.Sy theme ,
|
|
249
|
+
sinon
|
|
250
|
+
.Sy light .
|
|
193
251
|
.It Fl -now Ar date
|
|
194
252
|
Ancrage
|
|
195
253
|
.Sq Maintenant
|
|
196
|
-
pour la ligne de temps présent et le calcul des dates
|
|
197
|
-
|
|
198
|
-
|
|
254
|
+
pour la ligne de temps présent et le calcul des dates.
|
|
255
|
+
Accepte une date nue
|
|
256
|
+
.Pa AAAA-MM-JJ
|
|
257
|
+
(flottante\ ; indépendante du fuseau) ou un instant ISO\~8601 complet tel que
|
|
258
|
+
.Pa 2026-06-04T23:00:00Z
|
|
259
|
+
ou
|
|
260
|
+
.Pa 2026-06-05T06:00:00+07:00
|
|
261
|
+
(un Z ou un décalage \(+-HH:MM intégré l'emporte sur
|
|
262
|
+
.Fl -timezone ) .
|
|
263
|
+
Une date nue ou un instant sans décalage est flottant\ : la partie date
|
|
264
|
+
écrite est utilisée et
|
|
265
|
+
.Fl -timezone
|
|
266
|
+
est ignoré.
|
|
267
|
+
La partie date doit désigner un jour réel du calendrier\ :
|
|
268
|
+
.Pa 2026-02-30
|
|
269
|
+
est une erreur de saisie, et non le 2\~mars.
|
|
270
|
+
Par défaut\ : la date civile du jour dans le fuseau de l'hôte (ou celui de
|
|
271
|
+
.Fl -timezone
|
|
272
|
+
s'il est indiqué).
|
|
199
273
|
Indiquez
|
|
200
274
|
.Fl -now Sq -
|
|
201
275
|
pour supprimer entièrement la ligne de temps présent.
|
|
276
|
+
.It Fl -timezone Ar fuseau
|
|
277
|
+
Fuseau horaire utilisé pour la valeur par défaut «\ aujourd'hui\ »
|
|
278
|
+
fondée sur l'horloge\ ; consulté uniquement lorsque
|
|
279
|
+
.Fl -now
|
|
280
|
+
est omis.
|
|
281
|
+
Formes acceptées\ :
|
|
282
|
+
.Bl -tag -width "America/Los_Angeles" -compact
|
|
283
|
+
.It Sy local
|
|
284
|
+
Fuseau de l'hôte ou du lecteur (par défaut si l'option est absente).
|
|
285
|
+
.It Sy UTC
|
|
286
|
+
UTC.
|
|
287
|
+
.It Sy Z , +00:00
|
|
288
|
+
Raccourci pour un décalage nul (équivaut à
|
|
289
|
+
.Sy UTC ) .
|
|
290
|
+
.It Sy \(+-HH , \(+-HH:MM , \(+-HHMM
|
|
291
|
+
Décalage fixe (ignore l'heure d'été\ ; limitation documentée).
|
|
292
|
+
.It Sy America/Los_Angeles
|
|
293
|
+
Tout nom de fuseau IANA valide.
|
|
294
|
+
.El
|
|
295
|
+
Les abréviations ambiguës telles que
|
|
296
|
+
.Sy PST
|
|
297
|
+
et
|
|
298
|
+
.Sy IST
|
|
299
|
+
sont rejetées avec un message d'erreur explicite.
|
|
202
300
|
.It Fl -locale Ar bcp47
|
|
203
301
|
Étiquette de langue BCP-47 pour les messages CLI de l'opérateur
|
|
204
302
|
(diagnostics de validation sur la sortie d'erreur,
|
|
@@ -250,10 +348,35 @@ Facteur d'échelle pour le rendu raster (PNG uniquement\ ; 1 par défaut).
|
|
|
250
348
|
.It Fl -strict
|
|
251
349
|
Promeut les avertissements (assets, sanitiseur) en erreurs.
|
|
252
350
|
.It Fl w , -width Ar px
|
|
253
|
-
Largeur du canevas en pixels
|
|
351
|
+
Largeur maximale du canevas en pixels.
|
|
352
|
+
Par défaut\ :
|
|
353
|
+
.Pa .nowlinerc
|
|
354
|
+
.Sy width ,
|
|
355
|
+
sinon aucune, et le canevas s'ajuste au contenu.
|
|
356
|
+
Une feuille de route plus large resserre sa frise pour tenir, jusqu'à un pixel
|
|
357
|
+
par jour\ ; les légendes qui débordent de leurs barres peuvent encore élargir le
|
|
358
|
+
canevas.
|
|
359
|
+
.It Fl -non-working Ar mode
|
|
360
|
+
Façon dont un calendrier ouvré affiche ses jours non travaillés sur le
|
|
361
|
+
graphique\ :
|
|
362
|
+
.Sy hide
|
|
363
|
+
les replie (par défaut),
|
|
364
|
+
.Sy show
|
|
365
|
+
les dessine en bandes grisées.
|
|
366
|
+
Prévaut sur la clé
|
|
367
|
+
.Sy default roadmap non-working:
|
|
368
|
+
du fichier\ ; sans option, la clé s'applique, puis
|
|
369
|
+
.Sy hide .
|
|
370
|
+
Toute autre valeur se termine avec le code 2.
|
|
371
|
+
L'ordonnancement est identique dans les deux vues\ : les sorties Mermaid,
|
|
372
|
+
MS Project et XLSX ne changent pas.
|
|
254
373
|
.It Fl -asset-root Ar dossier
|
|
255
374
|
Dossier à partir duquel les ressources logo / image peuvent être
|
|
256
|
-
chargées (par défaut\ :
|
|
375
|
+
chargées (par défaut\ : la clé
|
|
376
|
+
.Sy assetRoot
|
|
377
|
+
de
|
|
378
|
+
.Pa .nowlinerc ,
|
|
379
|
+
puis le dossier du fichier d'entrée).
|
|
257
380
|
.El
|
|
258
381
|
.Sh OPTIONS SPÉCIFIQUES AU FORMAT
|
|
259
382
|
.Bl -tag -width Fl
|
|
@@ -292,12 +415,13 @@ Saute le sondage de polices de la plateforme et force la paire DejaVu
|
|
|
292
415
|
intégrée.
|
|
293
416
|
La sortie est stable octet par octet entre machines.
|
|
294
417
|
.It Fl -start Ar date
|
|
295
|
-
MS Project\ : date
|
|
296
|
-
.Pq Pa AAAA-MM-JJ
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
418
|
+
MS Project\ : date de début du projet
|
|
419
|
+
.Pq Pa AAAA-MM-JJ .
|
|
420
|
+
Par défaut\ : le
|
|
421
|
+
.Cm start:
|
|
422
|
+
de la feuille de route, sinon
|
|
423
|
+
.Fl -now
|
|
424
|
+
(aujourd'hui).
|
|
301
425
|
.El
|
|
302
426
|
.Sh OPTIONS DE SERVEUR
|
|
303
427
|
.Bl -tag -width Fl
|
|
@@ -312,6 +436,38 @@ pour exposer sur le réseau local).
|
|
|
312
436
|
.It Fl -open
|
|
313
437
|
Ouvre le navigateur au démarrage.
|
|
314
438
|
.El
|
|
439
|
+
.Sh OPTIONS MCP
|
|
440
|
+
.Bl -tag -width Fl
|
|
441
|
+
.It Fl -root Ar rép
|
|
442
|
+
Répertoire que les outils de fichiers MCP peuvent lire et écrire.
|
|
443
|
+
Sans cette option, le serveur utilise les racines que le client annonce
|
|
444
|
+
via MCP (les chemins relatifs sont résolus par rapport à la première), ou
|
|
445
|
+
le répertoire courant si le client n'en annonce aucune.
|
|
446
|
+
Avec
|
|
447
|
+
.Fl -mcp-install ,
|
|
448
|
+
il est inscrit dans la commande enregistrée sous forme de chemin absolu.
|
|
449
|
+
.It Fl -scope Ar portée
|
|
450
|
+
Où
|
|
451
|
+
.Fl -mcp-install
|
|
452
|
+
écrit\ :
|
|
453
|
+
.Sy user
|
|
454
|
+
(par défaut\ ; la configuration propre à l'utilisateur de l'agent) ou
|
|
455
|
+
.Sy project
|
|
456
|
+
(le fichier de configuration du répertoire courant, à versionner).
|
|
457
|
+
.It Fl -server Ar type
|
|
458
|
+
Ce que
|
|
459
|
+
.Fl -mcp-install
|
|
460
|
+
enregistre\ :
|
|
461
|
+
.Sy self
|
|
462
|
+
(par défaut\ ; ce binaire
|
|
463
|
+
.Nm
|
|
464
|
+
avec
|
|
465
|
+
.Fl -mcp ,
|
|
466
|
+
si bien qu'une installation Homebrew n'exige pas Node.js) ou
|
|
467
|
+
.Sy npx
|
|
468
|
+
.Pq Ql npx -y @nowline/mcp ,
|
|
469
|
+
qui suit npm indépendamment de la CLI.
|
|
470
|
+
.El
|
|
315
471
|
.Sh OPTIONS DE JOURNALISATION
|
|
316
472
|
Les indicateurs de journalisation sont mutuellement exclusifs.
|
|
317
473
|
.Bl -tag -width Fl
|
|
@@ -321,7 +477,10 @@ Affiche des diagnostics supplémentaires sur la sortie d'erreur standard
|
|
|
321
477
|
décisions de repli).
|
|
322
478
|
.It Fl q , -quiet
|
|
323
479
|
Supprime les messages non liés aux erreurs sur la sortie d'erreur
|
|
324
|
-
standard
|
|
480
|
+
standard : avertissements, notices et avertissements du rapport de
|
|
481
|
+
diagnostics d'une exécution en échec.
|
|
482
|
+
Les erreurs et les diagnostics JSON restent affichés, et le code de
|
|
483
|
+
sortie ne change pas.
|
|
325
484
|
.El
|
|
326
485
|
.Sh OPTIONS STANDARD
|
|
327
486
|
.Bl -tag -width Fl
|
|
@@ -370,25 +529,84 @@ pour la matrice de résolution.
|
|
|
370
529
|
Fichier de configuration JSON ou YAML facultatif.
|
|
371
530
|
Recherché en remontant depuis le dossier du fichier d'entrée\ ; le plus
|
|
372
531
|
proche l'emporte.
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
.Sy
|
|
532
|
+
Chaque clé reconnue sert de valeur par défaut à un indicateur\ :
|
|
533
|
+
l'indicateur l'emporte s'il est fourni, puis la clé, puis la valeur
|
|
534
|
+
par défaut intégrée.
|
|
535
|
+
.Sy theme
|
|
536
|
+
.Pq Fl t ,
|
|
537
|
+
.Sy defaultFormat
|
|
538
|
+
.Pq Fl f ,
|
|
539
|
+
.Sy width
|
|
540
|
+
.Pq Fl w ,
|
|
541
|
+
.Sy pdfPageSize
|
|
542
|
+
.Pq Fl -page-size ,
|
|
543
|
+
.Sy pdfOrientation
|
|
544
|
+
.Pq Fl -orientation ,
|
|
545
|
+
.Sy pdfMargin
|
|
546
|
+
.Pq Fl -margin ,
|
|
547
|
+
.Sy fontSans
|
|
548
|
+
.Pq Fl -font-sans ,
|
|
549
|
+
.Sy fontMono
|
|
550
|
+
.Pq Fl -font-mono ,
|
|
551
|
+
.Sy headlessFonts
|
|
552
|
+
.Pq Fl -headless ,
|
|
553
|
+
.Sy useSystemFonts
|
|
554
|
+
.Pq Fl -use-system-fonts ,
|
|
555
|
+
.Sy assetRoot
|
|
556
|
+
.Pq Fl -asset-root ,
|
|
557
|
+
.Sy locale
|
|
558
|
+
.Pq Fl -locale .
|
|
559
|
+
.Sy defaultFormat
|
|
560
|
+
ne s'applique que si l'extension de
|
|
561
|
+
.Fl o
|
|
562
|
+
n'est pas reconnue\ ;
|
|
563
|
+
.Sy locale
|
|
564
|
+
passe après les variables d'environnement de langue.
|
|
565
|
+
Une clé
|
|
566
|
+
.Sy assetRoot
|
|
567
|
+
relative est résolue par rapport au dossier du
|
|
568
|
+
.Pa .nowlinerc
|
|
569
|
+
qui la contient, alors qu'une valeur relative de
|
|
570
|
+
.Fl -asset-root
|
|
571
|
+
est résolue par rapport au dossier de travail.
|
|
572
|
+
.Fl -serve
|
|
573
|
+
lit
|
|
574
|
+
.Sy theme ,
|
|
575
|
+
.Sy width ,
|
|
576
|
+
.Sy assetRoot
|
|
577
|
+
et
|
|
578
|
+
.Sy locale .
|
|
579
|
+
Une valeur invalide est une erreur d'utilisation qui nomme la clé.
|
|
377
580
|
Les clés inconnues sont ignorées.
|
|
581
|
+
Il n'y a pas de clé de journalisation\ :
|
|
582
|
+
.Sy quiet
|
|
583
|
+
est ignorée, et
|
|
584
|
+
.Fl q
|
|
585
|
+
et
|
|
586
|
+
.Fl v
|
|
587
|
+
ne s'appliquent qu'en ligne de commande.
|
|
378
588
|
.El
|
|
379
589
|
.Sh CODES DE SORTIE
|
|
380
590
|
.Bl -tag -width Ds
|
|
381
591
|
.It 0
|
|
382
592
|
Succès.
|
|
383
593
|
.It 1
|
|
384
|
-
Erreur de validation (analyse en échec, référence invalide, etc.)
|
|
594
|
+
Erreur de validation (analyse en échec, référence invalide, etc.), y
|
|
595
|
+
compris les règles de vagues vérifiées à travers les fichiers inclus,
|
|
596
|
+
comme
|
|
597
|
+
.Sy NL.E0202 .
|
|
598
|
+
Elles sont signalées comme les diagnostics du validateur, au fichier et
|
|
599
|
+
à la ligne qu'elles désignent.
|
|
385
600
|
.It 2
|
|
386
601
|
Erreur d'utilisation (entrée manquante, indicateurs incorrects ou
|
|
387
602
|
mutuellement exclusifs, format non pris en charge, fichier introuvable,
|
|
388
603
|
sortie binaire vers un terminal, entrée illisible).
|
|
389
604
|
.It 3
|
|
390
605
|
Erreur de sortie (impossible d'écrire à la destination, échec du
|
|
391
|
-
pipeline d'export)
|
|
606
|
+
pipeline d'export), y compris une inclusion impossible à résoudre
|
|
607
|
+
(inclusion illisible, circulaire ou en double,
|
|
608
|
+
.Cm start:
|
|
609
|
+
différent).
|
|
392
610
|
.El
|
|
393
611
|
.Sh EXEMPLES
|
|
394
612
|
Produire le SVG par défaut dans le dossier courant\ :
|
|
@@ -425,6 +643,14 @@ nowline --init
|
|
|
425
643
|
nowline --init mon-projet
|
|
426
644
|
.Ed
|
|
427
645
|
.Pp
|
|
646
|
+
Servir les outils MCP, ou les enregistrer auprès de chaque agent
|
|
647
|
+
trouvé\ :
|
|
648
|
+
.Bd -literal -offset indent
|
|
649
|
+
nowline --mcp
|
|
650
|
+
nowline --mcp-install
|
|
651
|
+
nowline --mcp-install cursor --scope project -n
|
|
652
|
+
.Ed
|
|
653
|
+
.Pp
|
|
428
654
|
PDF avec géométrie de page explicite, stable octet pour octet entre
|
|
429
655
|
machines\ :
|
|
430
656
|
.Bd -literal -offset indent
|
|
@@ -445,6 +671,9 @@ qu'elle reste française quel que soit l'opérateur qui exécute
|
|
|
445
671
|
nowline v1 locale:fr-CA
|
|
446
672
|
.Ed
|
|
447
673
|
.Sh VOIR AUSSI
|
|
674
|
+
.Xr nowline 5
|
|
675
|
+
.Pq Sy man 5 nowline
|
|
676
|
+
.Pp
|
|
448
677
|
.Lk https://github.com/lolay/nowline "Code source, suivi des incidents et référence DSL complète"
|
|
449
678
|
.Pp
|
|
450
679
|
Le dossier
|